# Name: smd_thumbnail v0.11 # Type: Admin/Public side plugin # Multiple image thumbnails of arbitrary dimensions # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEzOiJzbWRfdGh1bWJuYWlsIjtzOjY6ImF1dGhvciI7czox MToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjExIjtzOjExOiJkZXNjcmlwdGlvbiI7 czo0OToiTXVsdGlwbGUgaW1hZ2UgdGh1bWJuYWlscyBvZiBhcmJpdHJhcnkgZGltZW5zaW9u cyI7czo0OiJjb2RlIjtzOjM0Nzk5OiJpZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7 DQoJZ2xvYmFsICRzbWRfdGh1bWJfZXZlbnQ7DQoNCgkkc21kX3RodW1iX2V2ZW50ID0gJ3Nt ZF90aHVtYm5haWwnOw0KCSRzbWRfdGh1bWJfcHJpdnMgPSAnMSwyLDMnOw0KDQoJYWRkX3By aXZzKCRzbWRfdGh1bWJfZXZlbnQsICRzbWRfdGh1bWJfcHJpdnMpOw0KCWFkZF9wcml2cygn c21kX3RodW1iX3Byb2ZpbGVzJywgJHNtZF90aHVtYl9wcml2cyk7DQoJYWRkX3ByaXZzKCdw bHVnaW5fcHJlZnMuJy4kc21kX3RodW1iX2V2ZW50LCAkc21kX3RodW1iX3ByaXZzKTsNCgly ZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RodW1iX3dlbGNvbWUnLCAncGx1Z2luX2xpZmVjeWNs ZS4nLiRzbWRfdGh1bWJfZXZlbnQpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJf cHJvZmlsZXMnLCAnaW1hZ2VfdWknLCAnZXh0ZW5kX2NvbnRyb2xzJyk7DQoJcmVnaXN0ZXJf Y2FsbGJhY2soJ3NtZF90aHVtYnMnLCAnaW1hZ2VfdWknLCAndGh1bWJuYWlsJyk7DQoJcmVn aXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9lZGl0JywgJ2ltYWdlX3VpJywgJ3RodW1ibmFp bF9lZGl0Jyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9jcmVhdGUnLCAnaW1h Z2VfdWknLCAndGh1bWJuYWlsX2NyZWF0ZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRf dGh1bWJfZ2VuZXJhdGUnLCAnaW1hZ2UnLCAnaW1hZ2VfZGF0YScpOw0KCXJlZ2lzdGVyX2Nh bGxiYWNrKCdzbWRfdGh1bWJfZGVsZXRlJywgJ2ltYWdlJywgJ2ltYWdlX2RlbGV0ZScpOw0K CXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJfY3JlYXRlX29uZScsICdpbWFnZScsICdz bWRfdGh1bWJfY3JlYXRlX29uZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJf c3dpdGNoX2FjdGl2ZScsICdpbWFnZScsICdzbWRfdGh1bWJfc3dpdGNoX2FjdGl2ZScpOw0K CXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJfaW5zZXJ0JywgJ2ltYWdlJywgJ3NtZF90 aHVtYm5haWxfaW5zZXJ0JywgMSk7DQoNCn0gZWxzZSB7DQoJZ2xvYmFsICRwYXRoX3RvX3Np dGUsICRpbWdfZGlyOw0KCWlmICghZGVmaW5lZCgnSU1QQVRIJykpIHsNCgkJZGVmaW5lKCJJ TVBBVEgiLCRwYXRoX3RvX3NpdGUuRFMuJGltZ19kaXIuRFMpOw0KCX0NCn0NCg0KaWYgKCFk ZWZpbmVkKCdTTURfVEhVTUInKSkgew0KCWRlZmluZSgiU01EX1RIVU1CIiwgJ3NtZF90aHVt Ym5haWwnKTsNCn0NCmlmICghZGVmaW5lZCgnU01EX1RIVU1CX0FDVElWRScpKSB7DQoJZGVm aW5lKCJTTURfVEhVTUJfQUNUSVZFIiwgMSk7DQp9DQppZiAoIWRlZmluZWQoJ1NNRF9USFVN Ql9DUk9QJykpIHsNCglkZWZpbmUoIlNNRF9USFVNQl9DUk9QIiwgMik7DQp9DQppZiAoIWRl ZmluZWQoJ1NNRF9USFVNQl9TSEFSUCcpKSB7DQoJZGVmaW5lKCJTTURfVEhVTUJfU0hBUlAi LCA0KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX3dlbGNvbWUoJGV2 dCwgJHN0cCkgew0KCXN3aXRjaCAoJHN0cCkgew0KCQljYXNlICdpbnN0YWxsZWQnOg0KCQkJ c21kX3RodW1iX3RhYmxlX2luc3RhbGwoKTsNCgkJCWJyZWFrOw0KCQljYXNlICdkZWxldGVk JzoNCgkJCXNtZF90aHVtYl90YWJsZV9yZW1vdmUoKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1 cm47DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRGlzcGxheSB0aGUg ZGVzaWduYXRlZCBkZWZhdWx0IHRodW1ibmFpbCBvbiB0aGUgbGlzdCBwYWdlDQpmdW5jdGlv biBzbWRfdGh1bWJzKCRldnQsICRzdHAsICRkZmx0LCAkY3VycmltZykgew0KCWV4dHJhY3Qo Z3BzYShhcnJheSgncGFnZScsICdzb3J0JywgJ2RpcicsICdjcml0JywgJ3NlYXJjaF9tZXRo b2QnKSkpOw0KDQoJaWYgKHNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7DQoJCSRkZWZhdWx0 ID0gc2FmZV9maWVsZCgndmFsJywgJ3R4cF9wcmVmcycsICJuYW1lPSdzbWRfdGh1bWJfZGVm YXVsdF9wcm9maWxlJyIpOw0KCQlpZiAoJGRlZmF1bHQpIHsNCgkJCSRyb3cgPSBzYWZlX3Jv dygnKicsIFNNRF9USFVNQiwgIm5hbWU9JyIuc2FuaXRpemVGb3JVcmwoJGRlZmF1bHQpLiIn Iik7DQoJCQlpZiAoJHJvdykgew0KCQkJCSRlZGl0X3VybCA9ICc/ZXZlbnQ9aW1hZ2UnLmEu J3N0ZXA9aW1hZ2VfZWRpdCcuYS4naWQ9Jy4kY3VycmltZ1snaWQnXS5hLidzb3J0PScuJHNv cnQuDQoJCQkJCQlhLidkaXI9Jy4kZGlyLmEuJ3BhZ2U9Jy4kcGFnZS5hLidzZWFyY2hfbWV0 aG9kPScuJHNlYXJjaF9tZXRob2QuYS4nY3JpdD0nLiRjcml0Ow0KCQkJCSRvdXQgPSBzbWRf dGh1bWJfaW1nKCRyb3csICRjdXJyaW1nKTsNCgkJCQlyZXR1cm4gKCRvdXQpID8gaHJlZigk b3V0LCAkZWRpdF91cmwpIDogZ1R4dCgnbm8nKTsNCgkJCX0gZWxzZSB7DQoJCQkJcmV0dXJu IGdUeHQoJ25vJyk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQlyZXR1cm4gZ1R4dCgnbm8nKTsN CgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBEb24ndCB3 YW50IHRoZSAnY3JlYXRlJyBjb250cm9scyBhcyB0aGV5J3JlIGhhbmRsZWQgaW4gdGhlIGVk aXQgcG9ydGlvbiBvZiB0aGUgc2NyZWVuDQpmdW5jdGlvbiBzbWRfdGh1bWJfY3JlYXRlKCRl dnQsICRzdHAsICRkZmx0LCAkY3VycmltZykgew0KCXJldHVybiAnICc7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gV2l0aCBhIGxvdCBvZiBpbWFnZXMgaW4gdGhl IGRhdGFiYXNlLCBkb2luZyBpdCBhbGwgaW4gb25lIGhpdCB3b3VsZCB0aW1lIG91dC4NCi8v IFNvIGl0J3MgZG9uZSB2aWEgYWpheDsgb25lIHJlcXVlc3QgcGVyIGltYWdlDQpmdW5jdGlv biBzbWRfdGh1bWJfY3JlYXRlX2FsbCgpIHsNCgkkaW1hZ2VzID0gc2FmZV9jb2x1bW4oJ2lk JywgJ3R4cF9pbWFnZScsICcxPTEnKTsNCgkkY291bnQgPSBjb3VudCgkaW1hZ2VzKTsNCg0K CWVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOw0KCWVjaG8gInZhciBi Y3RyID0gMDsgdmFyIGJ0b3QgPSB7JGNvdW50fTsiOw0KCWVjaG8gJ2pRdWVyeShmdW5jdGlv bigpIHsnOw0KCWVjaG8gJ2pRdWVyeSgiI3NtZF90aHVtYl9idG90IikudGV4dCgiLycuJGNv dW50LiciKTsnOw0KCWZvcmVhY2ggKCRpbWFnZXMgYXMgJGltZykgew0KCQllY2hvIDw8PEVP SlMNCgkJc2VuZEFzeW5jRXZlbnQoDQoJCXsNCgkJCWV2ZW50OiB0ZXh0cGF0dGVybi5ldmVu dCwNCgkJCXN0ZXA6ICdzbWRfdGh1bWJfY3JlYXRlX29uZScsDQoJCQlzbWRfdGh1bWJfaW1n aWQ6IHskaW1nfQ0KCQl9LCBzbWRfY3JlYXRlX2FsbF9mZWVkYmFjayk7DQpFT0pTOw0KCX0N CgllY2hvICd9KTsnOw0KCWVjaG8gPDw8RU9KUw0KCWZ1bmN0aW9uIHNtZF9jcmVhdGVfYWxs X2ZlZWRiYWNrKCkgew0KCQliY3RyKys7DQoJCWpRdWVyeSgnI3NtZF90aHVtYl9iY3Vycicp LnRleHQoYmN0cik7DQoJCWlmIChiY3RyID49IGJ0b3QpIHsNCgkJCWpRdWVyeSgnI3NtZF90 aHVtYl9iY3Vyciwjc21kX3RodW1iX2J0b3QnKS5lbXB0eSgpOw0KCQl9DQoJfQ0KRU9KUzsN CgllY2hvICc8L3NjcmlwdD4nOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF90aHVtYl9jcmVhdGVfb25lKCkgew0KCSRjdXJyaW1nID0gZ3BzKCdz bWRfdGh1bWJfaW1naWQnKTsNCglhc3NlcnRfaW50KCRjdXJyaW1nKTsNCg0KCSRycyA9IHNh ZmVfcm93cygnKicsIFNNRF9USFVNQiwgJzE9MSBBTkQgZmxhZ3MgJiAnLlNNRF9USFVNQl9B Q1RJVkUpOw0KCSRjdXJyID0gc2FmZV9yb3coJyonLCAndHhwX2ltYWdlJywgImlkPSIuZG9T bGFzaCgkY3VycmltZykpOw0KCWlmICgkcnMpIHsNCgkJc21kX3RodW1iX21ha2UoJHJzLCAk Y3Vycik7DQoJCXNlbmRfeG1sX3Jlc3BvbnNlKCk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9zd2l0Y2hfYWN0aXZlKCkgew0K CSRuYW1lID0gZG9TbGFzaChncHMoJ3NtZF90aHVtYl9wcm9maWxlJykpOw0KCWlmICgkbmFt ZSkgew0KCQlzYWZlX3VwZGF0ZShTTURfVEhVTUIsICdmbGFncyA9IGZsYWdzIF4gJy5TTURf VEhVTUJfQUNUSVZFLCAibmFtZT0nJG5hbWUnIik7DQoJCXNlbmRfeG1sX3Jlc3BvbnNlKGFy cmF5KCdzbWRfdGh1bWJfcHJvZmlsZScgPT4gJG5hbWUpKTsNCgl9DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX2dlbmVyYXRlKCRldnQs ICRzdHApIHsNCgkkaWQgPSBkb1NsYXNoKGdwcygnaWQnKSk7DQoNCgkkaWQgPSAoJGlkKSA/ ICRpZCA6ICRHTE9CQUxTWydJRCddOw0KCSRycyA9IHNhZmVfcm93cygnKicsIFNNRF9USFVN QiwgJzE9MSBBTkQgZmxhZ3MgJiAnLlNNRF9USFVNQl9BQ1RJVkUpOw0KDQoJc21kX3RodW1i X21ha2UoJHJzLCAkaWQpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF90aHVtYl9kZWxldGUoJGV2dCwgJHN0cCkgew0KCSRpZHMgPSBncHMoJ3Nl bGVjdGVkJyk7DQoJJHJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RIVU1CLCAnMT0xJyk7DQoN CgkkaW1hZ2VzID0gc2FmZV9yb3dzKCcqJywgJ3R4cF9pbWFnZScsICdpZCBJTiAoJyAuIGpv aW4oJywnLHF1b3RlX2xpc3QoJGlkcykpIC4gJyknKTsNCglmb3JlYWNoICgkaW1hZ2VzIGFz ICRpbWcpIHsNCgkJc21kX3RodW1iX3VubWFrZSgkcnMsICRpbWcpOw0KCX0NCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfbWFrZSgkcnMs ICRjdXJyaW1nKSB7DQoJLy8gV3JhcHBlciBmb3Igd2V0X3RodW1iIHRvIGFsbG93IG11bHRp cGxlIHRodW1ibmFpbHMNCgkkbXNnID0gJyc7DQoJaWYgKCFjbGFzc19leGlzdHMoJ3NtZF90 aHVtYicpKSB7DQoJCWNsYXNzIHNtZF90aHVtYiBleHRlbmRzIHdldF90aHVtYiB7DQoJCQl2 YXIgJG1fZXh0Ow0KCQkJdmFyICRtX2lkOw0KCQkJdmFyICRtX2RpcjsNCg0KCQkJLy8gQ29u c3RydWN0b3INCgkJCWZ1bmN0aW9uIHNtZF90aHVtYiAoJGlkLCAkZGlyLCAkcnMpIHsNCgkJ CQkkaWQgPSBhc3NlcnRfaW50KCRpZCk7DQoJCQkJaWYgKCRycykgew0KCQkJCQlleHRyYWN0 KCRycyk7DQoJCQkJCSR0aGlzLT5tX2V4dCA9ICRleHQ7DQoJCQkJCSR0aGlzLT5tX2lkID0g JGlkOw0KCQkJCQkkdGhpcy0+bV9kaXIgPSAkZGlyOw0KCQkJCX0NCgkJCQkkdGhpcy0+d2V0 X3RodW1iKCk7IC8vIGNvbnN0cnVjdCBiYXNlIGNsYXNzIGluc3RhbmNlDQoJCQl9DQoNCgkJ CWZ1bmN0aW9uIHdyaXRlKCApIHsNCgkJCQlpZiAoICFpc3NldCgkdGhpcy0+bV9leHQpICkg cmV0dXJuIGZhbHNlOw0KCQkJCSRvdXRmaWxlID0gSU1QQVRILiR0aGlzLT5tX2Rpci5EUy4k dGhpcy0+bV9pZC4kdGhpcy0+bV9leHQ7DQoJCQkJaWYgKCBwYXJlbnQ6OndyaXRlICggSU1Q QVRILiR0aGlzLT5tX2lkLiR0aGlzLT5tX2V4dCwgJG91dGZpbGUgKSApIHsNCgkJCQkJY2ht b2QoJG91dGZpbGUsIDA2NDQpOw0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQl9DQoJCQkJcmV0 dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLy8gSWYgcGFzc2VkIG9ubHkgYW4gSUQs IGxvb2sgdXAgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGENCglpZiAoIWlzX2FycmF5KCRj dXJyaW1nKSkgew0KCQlhc3NlcnRfaW50KCRjdXJyaW1nKTsNCgkJJGN1cnJpbWcgPSBzYWZl X3JvdygnKicsICd0eHBfaW1hZ2UnLCAnaWQ9Jy4kY3VycmltZyk7DQoJfQ0KDQoJLy8gQ3Jl YXRlIGVhY2ggdGh1bWJuYWlsDQoJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJLy8gU2Fu aXRpemUgYSBsaXR0bGUNCgkJJHdpZHRoID0gKGludCkgJHJvd1snd2lkdGgnXTsNCgkJJGhl aWdodCA9IChpbnQpICRyb3dbJ2hlaWdodCddOw0KCQlpZiAoJHdpZHRoID09IDApICR3aWR0 aCA9ICcnOw0KCQlpZiAoJGhlaWdodCA9PSAwKSAkaGVpZ2h0ID0gJyc7DQoJCWlmICgkd2lk dGggPT09ICcnICYmICRoZWlnaHQgPT09ICcnKSBjb250aW51ZTsNCgkJJGFjdGl2ZSA9ICgk cm93WydmbGFncyddICYgU01EX1RIVU1CX0FDVElWRSkgPyAxIDogMDsNCgkJJGNyb3AgPSAo JHJvd1snZmxhZ3MnXSAmIFNNRF9USFVNQl9DUk9QKSA/IDEgOiAwOw0KCQkkc2hhcnBlbiA9 ICgkcm93WydmbGFncyddICYgU01EX1RIVU1CX1NIQVJQKSA/IDEgOiAwOw0KCQkkaWQgPSAk Y3VycmltZ1snaWQnXTsNCg0KCQkkdCA9IG5ldyBzbWRfdGh1bWIoJGlkLCBzYW5pdGl6ZUZv clVybCgkcm93WyduYW1lJ10pLCAkY3VycmltZyk7DQoJCSR0LT5jcm9wID0gKCRjcm9wID09 ICcxJyk7DQoJCSR0LT5zaGFycGVuID0gKCRzaGFycGVuID09ICcxJyk7DQoJCSR0LT5oaW50 ID0gJzAnOw0KCQkkdC0+d2lkdGggPSAkd2lkdGg7DQoJCSR0LT5oZWlnaHQgPSAkaGVpZ2h0 Ow0KCQkkdC0+cXVhbGl0eSA9ICRyb3dbJ3F1YWxpdHknXTsNCgkJaWYgKCR0LT53cml0ZSgp KSB7DQoJCQkkbXNnID0gZ1R4dCgndGh1bWJuYWlsX3NhdmVkJywgYXJyYXkoJ3tpZH0nID0+ ICRpZCkpOw0KCQl9IGVsc2Ugew0KCQkJJG1zZyA9IGFycmF5KGdUeHQoJ3RodW1ibmFpbF9u b3Rfc2F2ZWQnLCBhcnJheSgne2lkfScgPT4gJGlkKSksIEVfRVJST1IpOw0KCQl9DQoJfQ0K CXJldHVybiAkbXNnOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIHNtZF90aHVtYl91bm1ha2UoJHJzLCAkY3VycmltZykgew0KCSRpZCA9ICRjdXJyaW1n WydpZCddOw0KCSRleHQgPSAkY3VycmltZ1snZXh0J107DQoJZm9yZWFjaCAoJHJzIGFzICRy b3cpIHsNCgkJJHBhdGggPSBJTVBBVEguc2FuaXRpemVGb3JVcmwoJHJvd1snbmFtZSddKS5E Uy4kaWQuJGV4dDsNCgkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkgew0KCQkJdW5saW5rKCRw YXRoKTsNCgkJfQ0KCX0NCglyZXR1cm4gJyc7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX2luc2VydCgpIHsNCglnbG9iYWwgJHR4cGNm ZywkdHhwX3VzZXIsJGltZ19kaXIsJHBhdGhfdG9fc2l0ZSwgJHBhZ2UsICRzb3J0LCAkZGly LCAkY3JpdCwgJHNlYXJjaF9tZXRob2Q7DQoNCglpZiAoIWRlZmluZWQoJ0lNUEFUSCcpKSB7 DQoJCWRlZmluZSgnSU1QQVRIJywkcGF0aF90b19zaXRlLkRTLiRpbWdfZGlyLkRTKTsNCgl9 DQoNCglleHRyYWN0KGdwc2EoYXJyYXkoJ3BhZ2UnLCAnc29ydCcsICdkaXInLCAnY3JpdCcs ICdzZWFyY2hfbWV0aG9kJykpKTsNCg0KCWluY2x1ZGVfb25jZSB0eHBhdGguJy9saWIvdHhw bGliX21pc2MucGhwJzsNCg0KCWV4dHJhY3QoJHR4cGNmZyk7DQoJJGlkID0gYXNzZXJ0X2lu dChncHMoJ2lkJykpOw0KCSRwcm9maWxlID0gZ3BzKCdzbWRfdGh1bWJfcHJvZmlsZScpOw0K CSR0aHVtYl9leHQgPSBncHMoJ3NtZF90aHVtYl9leHQnKTsNCg0KCSRhdXRob3IgPSBmZXRj aCgnYXV0aG9yJywgJ3R4cF9pbWFnZScsICdpZCcsICRpZCk7DQoJaWYgKCFoYXNfcHJpdnMo J2ltYWdlLmVkaXQnKSAmJiAhKCRhdXRob3IgPT0gJHR4cF91c2VyICYmIGhhc19wcml2cygn aW1hZ2UuZWRpdC5vd24nKSkpIHsNCgkJcmV0dXJuOw0KCX0NCg0KCSRmaWxlID0gJF9GSUxF U1sndGhlZmlsZSddWyd0bXBfbmFtZSddOw0KCSRuYW1lID0gJF9GSUxFU1sndGhlZmlsZSdd WyduYW1lJ107DQoNCgkkZmlsZSA9IGdldF91cGxvYWRlZF9maWxlKCRmaWxlKTsNCg0KCWlm IChlbXB0eSgkZmlsZSkpDQoJew0KCQlyZXR1cm47DQoJfQ0KDQoJbGlzdCgkdywgJGgsICRl eHRlbnNpb24pID0gZ2V0aW1hZ2VzaXplKCRmaWxlKTsNCgkkdmFsaWRfZXh0cyA9IGFycmF5 KA0KCQlJTUFHRVRZUEVfR0lGICA9PiAnLmdpZicsDQoJCUlNQUdFVFlQRV9KUEVHID0+ICcu anBnJywNCgkJSU1BR0VUWVBFX1BORyAgPT4gJy5wbmcnLA0KCQlJTUFHRVRZUEVfU1dGICA9 PiAnLnN3ZicsDQoJKTsNCgkkZXh0ID0gaXNzZXQoJHZhbGlkX2V4dHNbJGV4dGVuc2lvbl0p ID8gJHZhbGlkX2V4dHNbJGV4dGVuc2lvbl0gOiAnJzsNCg0KCWlmICgoJGZpbGUgIT09IGZh bHNlKSAmJiAkcHJvZmlsZSAmJiAkZXh0KSB7DQoJCSRuZXdwYXRoID0gSU1QQVRILnNhbml0 aXplRm9yVXJsKCRwcm9maWxlKS5EUy4kaWQuJGV4dDsNCgkJaWYgKHNoaWZ0X3VwbG9hZGVk X2ZpbGUoJGZpbGUsICRuZXdwYXRoKSA9PSBmYWxzZSkgew0KCQl9IGVsc2Ugew0KCQkJY2ht b2QoJG5ld3BhdGgsIDA2NDQpOw0KCQkJJG1lc3NhZ2UgPSBnVHh0KCdpbWFnZV91cGxvYWRl ZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuYW1lKSk7DQoJCX0NCgl9DQoNCgkvLyBTaW5jZSB0 aGUgaGVhZGVycyBoYXZlIGJlZW4gc2VudCwgcmVzb3J0IHRvIGpzIHRvIHJlZnJlc2ggdGhl IHBhZ2UNCgkkdXJsID0gJz9ldmVudD1pbWFnZSZzdGVwPWltYWdlX2VkaXQmaWQ9Jy4kaWQu JyZzb3J0PScuJHNvcnQuJyZkaXI9Jy4kZGlyLicmcGFnZT0nLiRwYWdlLicmc2VhcmNoX21l dGhvZD0nLiRzZWFyY2hfbWV0aG9kLicmY3JpdD0nLiRjcml0Ow0KCWVjaG8gPDw8RU9TDQo8 c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp3aW5kb3cubG9jYXRpb24uaHJlZj0i eyR1cmx9IjsNCjwvc2NyaXB0Pg0KPG5vc2NyaXB0Pg0KPG1ldGEgaHR0cC1lcXVpdj0icmVm cmVzaCIgY29udGVudD0iMDt1cmw9eyR1cmx9IiAvPg0KPC9ub3NjcmlwdD4NCkVPUzsNCgll eGl0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90 aHVtYl9lZGl0KCRldnQsICRzdHAsICRkZmx0LCAkY3VycmltZykgew0KCWdsb2JhbCAkc3Rl cCwgJGZpbGVfbWF4X3VwbG9hZF9zaXplLCAkdHhwX3VzZXI7DQoNCglleHRyYWN0KGdwc2Eo YXJyYXkoJ2lkJywgJ3BhZ2UnLCAnc29ydCcsICdkaXInLCAnY3JpdCcsICdzZWFyY2hfbWV0 aG9kJywgJ3NtZF90aHVtYm5haWxfc2l6ZScsICdzbWRfdGh1bWJuYWlsX2Nob3Nlbl9zaXpl JywgJ3NtZF90aHVtYm5haWxfZGVsZXRlJywgJ3NtZF9zdGVwJykpKTsNCg0KCSRpZCA9ICgk aWQpID8gJGlkIDogJEdMT0JBTFNbJ0lEJ107DQoNCgkvLyBUb2dnbGUgcHJvZmlsZSBwYW5l bA0KCWlmICgkc3RlcCA9PSAnc2F2ZV9wYW5lX3N0YXRlJykgew0KCQlzbWRfdGh1bWJuYWls X3NhdmVfcGFuZV9zdGF0ZSgpOw0KCQlyZXR1cm47DQoJfQ0KDQoJLy8gQ3JlYXRlL2RlbGV0 ZSB0aGUgc2VsZWN0ZWQgdGh1bWJzIGRlcGVuZGluZyBvbiB0aGUgYnV0dG9uIHByZXNzZWQN CglpZiAoJHNtZF9zdGVwID09ICdzbWRfdGh1bWJuYWlsX21hbmFnZScpIHsNCgkJLy8gVmFs aWRhdGUgdXNlcg0KCQkkYXV0aG9yID0gZmV0Y2goJ2F1dGhvcicsICd0eHBfaW1hZ2UnLCAn aWQnLCAkaWQpOw0KCQlpZiAoIWhhc19wcml2cygnaW1hZ2UuZWRpdCcpICYmICEoJGF1dGhv ciA9PSAkdHhwX3VzZXIgJiYgaGFzX3ByaXZzKCdpbWFnZS5lZGl0Lm93bicpKSkNCgkJew0K CQkJaW1hZ2VfbGlzdChnVHh0KCdyZXN0cmljdGVkX2FyZWEnKSk7DQoJCQlyZXR1cm47DQoJ CX0NCg0KCQkvLyBHcmFiIHRoZSB0aHVtYm5haWxzIHRvIHdvcmsgb24NCgkJJHdoZXJlID0g KCRzbWRfdGh1bWJuYWlsX3NpemU9PSdhbGwnKSA/ICcxPTEgQU5EIGZsYWdzICYgJy5TTURf VEhVTUJfQUNUSVZFIDogIm5hbWU9JyIuZG9TbGFzaCgkc21kX3RodW1ibmFpbF9jaG9zZW5f c2l6ZSkuIiciOw0KCQkkcnMgPSBzYWZlX3Jvd3MoJyonLCBTTURfVEhVTUIsICR3aGVyZSk7 DQoNCgkJLy8gRG8gaXQNCgkJaWYoJHNtZF90aHVtYm5haWxfZGVsZXRlKSB7DQoJCQkkbXNn ID0gc21kX3RodW1iX3VubWFrZSgkcnMsICRjdXJyaW1nKTsNCgkJfSBlbHNlIHsNCgkJCSRt c2cgPSBzbWRfdGh1bWJfbWFrZSgkcnMsICRjdXJyaW1nKTsNCgkJfQ0KCX0NCg0KCSRleHQg PSAkY3VycmltZ1snZXh0J107DQoJZWNobyA8PDxFT0MNCjxzY3JpcHQgdHlwZT0idGV4dC9q YXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIHNtZF90aHVtYl9zZWxlY3RvcihzZWwpIHsNCgl2YXIg aWR4ID0gMDsNCglqUXVlcnkoIiNzbWRfdGh1bWJzIGltZyIpLmVhY2goZnVuY3Rpb24oKSB7 DQoJCWlmIChqUXVlcnkodGhpcykuaGFzQ2xhc3Moc2VsKSkgew0KCQkJalF1ZXJ5KHRoaXMp LnRvZ2dsZUNsYXNzKCdzbWRfc2VsZWN0ZWQnKTsNCgkJCWlmIChqUXVlcnkodGhpcykuaGFz Q2xhc3MoJ3NtZF9zZWxlY3RlZCcpKSB7DQoJCQkJalF1ZXJ5KCIjc21kX3VwbG9hZF90aHVt Ym5haWwiKS5hdHRyKCdkaXNhYmxlZCcsIGZhbHNlKTsNCgkJCQlqUXVlcnkoIiNzbWRfdGh1 bWJfcHJvZmlsZSIpLnZhbChzZWwpOw0KCQkJCWlkeCA9IGpRdWVyeSgiI3NtZF90aHVtYm5h aWxfc2l6ZSBvcHRpb25bdmFsdWU9JyIrc2VsKyInXSIpLmluZGV4KCk7DQoJCQkJalF1ZXJ5 KCIjc21kX3RodW1ibmFpbF9jaG9zZW5fc2l6ZSIpLnZhbChzZWwpOw0KCQkJfSBlbHNlIHsN CgkJCQlqUXVlcnkoIiNzbWRfdXBsb2FkX3RodW1ibmFpbCIpLmF0dHIoJ2Rpc2FibGVkJywg dHJ1ZSk7DQoJCQkJalF1ZXJ5KCIjc21kX3RodW1iX3Byb2ZpbGUiKS52YWwoJycpOw0KCQkJ CWpRdWVyeSgiI3NtZF90aHVtYm5haWxfY2hvc2VuX3NpemUiKS52YWwoJycpOw0KCQkJfQ0K CQl9IGVsc2Ugew0KCQkJalF1ZXJ5KHRoaXMpLnJlbW92ZUNsYXNzKCdzbWRfc2VsZWN0ZWQn KTsNCgkJfQ0KCX0pOw0KCWpRdWVyeSgiI3NtZF90aHVtYm5haWxfc2l6ZSIpLmF0dHIoInNl bGVjdGVkSW5kZXgiLCBpZHgpOw0KfQ0KZnVuY3Rpb24gc21kX3RodW1iX3NlbGVjdF9jaGFu Z2VkKCkgew0KCW9iaiA9IGpRdWVyeSgiI3NtZF90aHVtYm5haWxfc2l6ZSIpOw0KCWlmIChv YmouYXR0cigic2VsZWN0ZWRJbmRleCIpID09IDApIHsNCgkJalF1ZXJ5KCIjc21kX3VwbG9h ZF90aHVtYm5haWwiKS5hdHRyKCdkaXNhYmxlZCcsIHRydWUpOw0KCQlqUXVlcnkoIiNzbWRf dGh1bWJfcHJvZmlsZSIpLnZhbCgnJyk7DQoJCWpRdWVyeSgiI3NtZF90aHVtYm5haWxfY2hv c2VuX3NpemUiKS52YWwoJycpOw0KCX0gZWxzZSB7DQoJCWpRdWVyeSgiI3NtZF91cGxvYWRf dGh1bWJuYWlsIikuYXR0cignZGlzYWJsZWQnLCBmYWxzZSk7DQoJCWpRdWVyeSgiI3NtZF90 aHVtYl9wcm9maWxlIikudmFsKG9iai52YWwoKSk7DQoJCWpRdWVyeSgiI3NtZF90aHVtYm5h aWxfY2hvc2VuX3NpemUiKS52YWwob2JqLnZhbCgpKTsNCgl9DQoJalF1ZXJ5KCIjc21kX3Ro dW1icyBpbWciKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQlpZiAoalF1ZXJ5KHRoaXMpLmhhc0Ns YXNzKG9iai52YWwoKSkpIHsNCgkJCWpRdWVyeSh0aGlzKS5hZGRDbGFzcygnc21kX3NlbGVj dGVkJyk7DQoJCX0gZWxzZSB7DQoJCQlqUXVlcnkodGhpcykucmVtb3ZlQ2xhc3MoJ3NtZF9z ZWxlY3RlZCcpOw0KCQl9DQoJfSk7DQp9DQpqUXVlcnkoZnVuY3Rpb24oKSB7DQoJalF1ZXJ5 KCIjc21kX3RodW1icyBpbWciKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQl2YXIgY2xzID0galF1 ZXJ5KHRoaXMpLmF0dHIoJ2NsYXNzJyk7DQoJCWpRdWVyeSh0aGlzKS5jbGljayhmdW5jdGlv bigpIHsNCgkJCXNtZF90aHVtYl9zZWxlY3RvcihjbHMpOw0KCQl9KTsNCgl9KTsNCglqUXVl cnkoIiNzbWRfdXBsb2FkX3RodW1ibmFpbCIpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7DQoJ alF1ZXJ5KCIudGh1bWJuYWlsLXVwbG9hZCIpLnByZXBlbmQoJzxpbnB1dCB0eXBlPSJoaWRk ZW4iIG5hbWU9InNtZF90aHVtYl9pbWdpZCIgdmFsdWU9InskaWR9IiAvPjxpbnB1dCB0eXBl PSJoaWRkZW4iIGlkPSJzbWRfdGh1bWJfcHJvZmlsZSIgbmFtZT0ic21kX3RodW1iX3Byb2Zp bGUiIHZhbHVlPSIiIC8+PGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9InNtZF90aHVtYl9leHQi IG5hbWU9InNtZF90aHVtYl9leHQiIHZhbHVlPSJ7JGV4dH0iIC8+Jyk7DQp9KTsNCjwvc2Ny aXB0Pg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5zbWRfc2VsZWN0ZWQgew0KCWJvcmRl cjoxcHggc29saWQgcmVkOw0KCWJhY2tncm91bmQ6cmVkOw0KfQ0KI3NtZF90aHVtYnMgaW1n IHsNCglwYWRkaW5nOjJweDsNCgltYXJnaW46MXB4Ow0KCWJvcmRlcjoxcHggc29saWQgYmxh Y2s7DQp9DQoudGh1bWJuYWlsLWFsdGVyIHsNCglkaXNwbGF5Om5vbmU7DQp9DQo8L3N0eWxl Pg0KRU9DOw0KDQoJLy8gQWRkIHRodW1ibmFpbHMgYW5kIGNyZWF0aW9uIGNvbnRyb2xzDQoJ aWYgKHNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7DQoJCSRycyA9IHNhZmVfcm93cygnKics IFNNRF9USFVNQiwgJzE9MSBPUkRFUiBCWSBuYW1lJyk7DQoJCWlmICgkcnMpIHsNCgkJCSRk Zmx0ID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnKTsNCgkJCSRwcm9m aWxlcyA9IGFycmF5KCdhbGwnID0+IHNtZF90aHVtYl9nVHh0KCdhbGxfc2l6ZXMnKSk7DQoJ CQkkdGh1bWJzW10gPSAnPGRpdiBpZD0ic21kX3RodW1icyI+JzsNCgkJCWZvcmVhY2ggKCRy cyBhcyAkcm93KSB7DQoJCQkJaWYgKCRyb3dbJ2ZsYWdzJ10gJiBTTURfVEhVTUJfQUNUSVZF KSB7DQoJCQkJCSRwcm9maWxlc1skcm93WyduYW1lJ11dID0gJHJvd1snbmFtZSddOw0KCQkJ CX0NCgkJCQkkdGh1bWJzW10gPSBzbWRfdGh1bWJfaW1nKCRyb3csICRjdXJyaW1nKTsNCgkJ CX0NCgkJCSR0aHVtYnNbXSA9ICc8L2Rpdj4nOw0KCQkJJHFzID0gYXJyYXkoDQoJCQkJImV2 ZW50IiA9PiAnaW1hZ2UnLA0KCQkJCSJzdGVwIiA9PiAnaW1hZ2VfZWRpdCcsDQoJCQkJImlk IiA9PiAkaWQsDQoJCQkJInBhZ2UiID0+ICRwYWdlLA0KCQkJCSJzb3J0IiA9PiAkc29ydCwN CgkJCQkiZGlyIiA9PiAkZGlyLA0KCQkJCSJjcml0IiA9PiAkY3JpdCwNCgkJCQkic2VhcmNo X21ldGhvZCIgPT4gJHNlYXJjaF9tZXRob2QsDQoJCQkpOw0KDQoJCQkkb3V0W10gPSAnPGRp diBpZD0ic21kX3RodW1ibmFpbF9jb250cm9sIj48c3BhbiBjbGFzcz0icGxhaW4gbGV2ZXIn LihnZXRfcHJlZigncGFuZV9zbWRfdGh1bWJuYWlsc192aXNpYmxlJykgPyAnIGV4cGFuZGVk JyA6ICcnKS4nIj48YSBocmVmPSIjc21kX3RodW1ibmFpbHMiPicuc21kX3RodW1iX2dUeHQo J3RodW1ibmFpbF9oZWFkaW5nJykuJzwvYT48L3NwYW4+PGRpdiBpZD0ic21kX3RodW1ibmFp bHMiIGNsYXNzPSJ0b2dnbGUiIHN0eWxlPSJkaXNwbGF5OicuKGdldF9wcmVmKCdwYW5lX3Nt ZF90aHVtYm5haWxzX3Zpc2libGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPic7DQoJCQkk b3V0W10gPSAnPGZvcm0gbmFtZT0ic21kX3RodW1ibmFpbF9jcmVhdGUiIG1ldGhvZD0icG9z dCIgYWN0aW9uPSInLmpvaW5fcXMoJHFzKS4nIj4nOw0KCQkJJG91dFtdID0gZklucHV0KCdo aWRkZW4nLCAnc21kX3N0ZXAnLCAnc21kX3RodW1ibmFpbF9tYW5hZ2UnKTsNCgkJCSRvdXRb XSA9IGZJbnB1dCgnaGlkZGVuJywgJ3NtZF90aHVtYm5haWxfY2hvc2VuX3NpemUnLCAnJywg JycsICcnLCAnJywgJycsICcnLCAnc21kX3RodW1ibmFpbF9jaG9zZW5fc2l6ZScpOw0KCQkJ JG91dFtdID0gc2VsZWN0SW5wdXQoJ3NtZF90aHVtYm5haWxfc2l6ZScsICRwcm9maWxlcywg JycsICcnLCAnb25jaGFuZ2U9InJldHVybiBzbWRfdGh1bWJfc2VsZWN0X2NoYW5nZWQoKSI7 JywgJ3NtZF90aHVtYm5haWxfc2l6ZScpOw0KCQkJJG91dFtdID0gZklucHV0KCdzdWJtaXQn LCAnJywgZ1R4dCgnY3JlYXRlJyksICdzbWFsbGVyYm94Jyk7DQoJCQkkb3V0W10gPSBmSW5w dXQoJ3N1Ym1pdCcsICdzbWRfdGh1bWJuYWlsX2RlbGV0ZScsIGdUeHQoJ2RlbGV0ZScpLCAn c21hbGxlcmJveCcpOw0KCQkJJG91dFtdID0gam9pbignJywgJHRodW1icyk7DQoJCQkkb3V0 W10gPSAnPC9mb3JtPic7DQoJCQkkb3V0W10gPSB1cGxvYWRfZm9ybShnVHh0KCd1cGxvYWRf dGh1bWJuYWlsJyksICd1cGxvYWRfdGh1bWJuYWlsJywgJ3NtZF90aHVtYm5haWxfaW5zZXJ0 JywgJ2ltYWdlJywgJGlkLCAkZmlsZV9tYXhfdXBsb2FkX3NpemUsICdzbWRfdXBsb2FkX3Ro dW1ibmFpbCcsICd0aHVtYm5haWwtdXBsb2FkJyk7DQoJCQkkb3V0W10gPSAnPC9kaXY+JzsN CgkJCXJldHVybiBqb2luKCcnLCAkb3V0KTsNCgkJfQ0KCX0NCglyZXR1cm4gJyAnOw0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9pbWco JHJvdywgJGN1cnJpbWcsICRtZXRhPWFycmF5KCkpIHsNCglnbG9iYWwgJGltZ19kaXIsICRw cmVmczsNCg0KCSRkaXIgPSBzYW5pdGl6ZUZvclVybCgkcm93WyduYW1lJ10pOw0KCSRpZCA9 ICRjdXJyaW1nWydpZCddOw0KCSRleHQgPSAkY3VycmltZ1snZXh0J107DQoNCgkkcGF0aCA9 IElNUEFUSC4kZGlyLkRTLiRpZC4kZXh0Ow0KDQoJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkg ew0KCQkkZXh0cmFzID0gJyc7DQoJCWlmIChpc3NldCgkbWV0YVsnZm9yY2V3J10pIHx8IGlz c2V0KCRtZXRhWydmb3JjZWgnXSkpIHsNCgkJCSRkaW1zID0gZ2V0aW1hZ2VzaXplKCRwYXRo KTsNCgkJCWlmIChpc3NldCgkbWV0YVsnZm9yY2V3J10pICYmICEkcm93Wyd3aWR0aCddKSB7 DQoJCQkJJHJvd1snd2lkdGgnXSA9ICRkaW1zWzBdOw0KCQkJfQ0KCQkJaWYgKGlzc2V0KCRt ZXRhWydmb3JjZWgnXSkgJiYgISRyb3dbJ2hlaWdodCddKSB7DQoJCQkJJHJvd1snaGVpZ2h0 J10gPSAkZGltc1sxXTsNCgkJCX0NCgkJCXVuc2V0KCRtZXRhWydmb3JjZXcnXSk7DQoJCQl1 bnNldCgkbWV0YVsnZm9yY2VoJ10pOw0KCQl9DQoJCSR3ID0gKCRyb3dbJ3dpZHRoJ10pID8g JyB3aWR0aD0iJy4kcm93Wyd3aWR0aCddLiciJzogJyc7DQoJCSRoID0gKCRyb3dbJ2hlaWdo dCddKSA/ICcgaGVpZ2h0PSInLiRyb3dbJ2hlaWdodCddLiciJzogJyc7DQoNCgkJJHVEYXRl ID0gJyc7DQoJCWlmICghaXNzZXQoJG1ldGFbJ3N0YW1wJ10pKSB7DQoJCQkkdURhdGUgPSAn PycuZmlsZW10aW1lKCRwYXRoKTsNCgkJfQ0KCQl1bnNldCgkbWV0YVsnc3RhbXAnXSk7DQoN CgkJaWYgKCFpc3NldCgkbWV0YVsnY2xhc3MnXSkpIHsNCgkJCSRtZXRhWydjbGFzcyddID0g JGRpcjsNCgkJfQ0KDQoJCWZvcmVhY2ggKCRtZXRhIGFzICRrZXkgPT4gJHZhbCkgew0KCQkJ JGV4dHJhcyAuPSAnICcuJGtleS4nPSInLiR2YWwuJyInOw0KCQl9DQoJCXJldHVybiAnPGlt ZyBzcmM9IicuaWh1LiRpbWdfZGlyLicvJy4kZGlyLicvJy4kaWQuJGV4dC4kdURhdGUuJyIn LiR3LiRoLiRleHRyYXMuJyAvPic7DQoJfQ0KDQoJcmV0dXJuICcnOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9wcm9maWxlcygkZXZ0 LCAkc3RwLCAkZGZsdCwgJGltZ2xpc3QpIHsNCglnbG9iYWwgJHNtZF90aHVtYl9ldmVudCwg JHByZWZzLCAkc3RlcDsNCg0KCWlmICghaGFzX3ByaXZzKF9fRlVOQ1RJT05fXykpIHsNCgkJ cmV0dXJuOw0KCX0NCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgNCgkJJ3BhZ2UnLA0KCQknc29y dCcsDQoJCSdkaXInLA0KCQknY3JpdCcsDQoJCSdzZWFyY2hfbWV0aG9kJywNCgkJJ3NtZF90 aHVtYl9hZGQnLA0KCQknc21kX3RodW1iX2NhbmNlbCcsDQoJCSdzbWRfdGh1bWJfc2F2ZScs DQoJCSdzbWRfdGh1bWJfbmFtZScsDQoJCSdzbWRfdGh1bWJfbmV3bmFtZScsDQoJCSdzbWRf dGh1bWJfd2lkdGgnLA0KCQknc21kX3RodW1iX2hlaWdodCcsDQoJCSdzbWRfdGh1bWJfcXVh bGl0eScsDQoJCSdzbWRfdGh1bWJfYWN0aXZlJywNCgkJJ3NtZF90aHVtYl9hY3RpdmVfbmV3 JywNCgkJJ3NtZF90aHVtYl9jcm9wJywNCgkJJ3NtZF90aHVtYl9zaGFycGVuJywNCgkJJ3Nt ZF90aHVtYl9kZWZhdWx0JykpKTsNCg0KCS8vIFNhbml0aXplDQoJJHF1YWxpdHkgPSAoaXNf bnVtZXJpYygkc21kX3RodW1iX3F1YWxpdHkpKSA/ICgoJHNtZF90aHVtYl9xdWFsaXR5PDAp ID8gNzUgOiAoKCRzbWRfdGh1bWJfcXVhbGl0eT4xMDApID8gNzUgOiAkc21kX3RodW1iX3F1 YWxpdHkpICkgOiA3NTsNCgkkd2lkdGggPSAoaXNfbnVtZXJpYygkc21kX3RodW1iX3dpZHRo KSkgPyAkc21kX3RodW1iX3dpZHRoIDogMDsNCgkkaGVpZ2h0ID0gKGlzX251bWVyaWMoJHNt ZF90aHVtYl9oZWlnaHQpKSA/ICRzbWRfdGh1bWJfaGVpZ2h0IDogMDsNCgkkbmV3bmFtZSA9 IHNhbml0aXplRm9yVXJsKCRzbWRfdGh1bWJfbmV3bmFtZSk7DQoJJG1zZyA9ICcnOw0KDQoJ Ly8gVGFibGUgY29udHJvbA0KCWlmIChncHMoJ3JlbW92ZScpKSB7DQoJCXNtZF90aHVtYl90 YWJsZV9yZW1vdmUoKTsNCgl9IGVsc2Ugew0KCQlpZiAoIXNtZF90aHVtYl90YWJsZV9leGlz dCgpKSB7DQoJCQlzbWRfdGh1bWJfdGFibGVfaW5zdGFsbCgpOw0KCQl9DQoJfQ0KDQoJLy8g VG9nZ2xlIHByb2ZpbGUgcGFuZWwNCglpZiAoJHN0ZXAgPT0gJ3NhdmVfcGFuZV9zdGF0ZScp IHsNCgkJc21kX3RodW1ibmFpbF9zYXZlX3BhbmVfc3RhdGUoKTsNCgkJcmV0dXJuOw0KCX0N Cg0KCWlmICgkc3RlcCA9PSAnc21kX3RodW1iX2NyZWF0ZV9hbGwnKSB7DQoJCXNtZF90aHVt Yl9jcmVhdGVfYWxsKCk7DQoJfQ0KDQoJLy8gU2F2ZSBwcm9maWxlDQoJaWYgKCRzdGVwID09 ICdzbWRfdGh1bWJfcHJvZmlsZV9zYXZlJykgew0KCQlpZiAoc21kX3RodW1iX3RhYmxlX2V4 aXN0KCkpIHsNCgkJCWlmICgkc21kX3RodW1iX2NhbmNlbCkgew0KCQkJCS8vIERvIG5vdGhp bmcNCgkJCX0gZWxzZSBpZiAoJHNtZF90aHVtYl9hZGQpIHsNCgkJCQkvLyBDcmVhdGUgbmV3 IHByb2ZpbGUNCgkJCQkkZXhpc3RzID0gc2FmZV9yb3coJyonLCBTTURfVEhVTUIsICJuYW1l PSciLmRvU2xhc2goJG5ld25hbWUpLiInIik7DQoJCQkJaWYgKCRleGlzdHMpIHsNCgkJCQkJ JG1zZyA9IHNtZF90aHVtYl9nVHh0KCdwcm9maWxlX2V4aXN0cycsIGFycmF5KCd7bmFtZX0n ID0+IGRvU2xhc2goJG5ld25hbWUpKSk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJaWYgKCRuZXdu YW1lKSB7DQoJCQkJCQkkZmxhZ3MgPSAwOw0KCQkJCQkJJGZsYWdzID0gKCRzbWRfdGh1bWJf YWN0aXZlX25ldykgPyAkZmxhZ3MgfCBTTURfVEhVTUJfQUNUSVZFIDogJGZsYWdzOw0KCQkJ CQkJJGZsYWdzID0gKCRzbWRfdGh1bWJfY3JvcCkgPyAkZmxhZ3MgfCBTTURfVEhVTUJfQ1JP UCA6ICRmbGFnczsNCgkJCQkJCSRmbGFncyA9ICgkc21kX3RodW1iX3NoYXJwZW4pID8gJGZs YWdzIHwgU01EX1RIVU1CX1NIQVJQIDogJGZsYWdzOw0KDQoJCQkJCQlzYWZlX2luc2VydChT TURfVEhVTUIsDQoJCQkJCQkJIm5hbWU9JyIuZG9TbGFzaCgkbmV3bmFtZSkuIiciLg0KCQkJ CQkJCSIsIHdpZHRoPSciLmRvU2xhc2goJHdpZHRoKS4iJyIuDQoJCQkJCQkJIiwgaGVpZ2h0 PSciLmRvU2xhc2goJGhlaWdodCkuIiciLg0KCQkJCQkJCSIsIHF1YWxpdHk9JyIuZG9TbGFz aCgkcXVhbGl0eSkuIiciLg0KCQkJCQkJCSIsIGZsYWdzPSciLmRvU2xhc2goJGZsYWdzKS4i JyINCgkJCQkJCSk7DQoNCgkJCQkJCS8vIEFsdGVyIHRoZSBkZWZhdWx0IHRodW1ibmFpbA0K CQkJCQkJaWYgKCRzbWRfdGh1bWJfZGVmYXVsdCkgew0KCQkJCQkJCXNldF9wcmVmKCdzbWRf dGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJG5ld25hbWUsICdzbWRfdGh1bWInLCBQUkVGX0hJ RERFTik7DQoJCQkJCQl9DQoNCgkJCQkJCS8vIENyZWF0ZSB0aGUgdGh1bWJuYWlsIGRpcmVj dG9yeQ0KCQkJCQkJQG1rZGlyKElNUEFUSC4kbmV3bmFtZSk7DQoJCQkJCX0NCgkJCQl9DQoJ CQl9IGVsc2Ugew0KCQkJCS8vIFVwZGF0ZSBleGlzdGluZyBwcm9maWxlDQoJCQkJJG5hbWUg PSBzYW5pdGl6ZUZvclVybCgkc21kX3RodW1iX25hbWUpOw0KCQkJCSRleGlzdHMgPSBzYWZl X3JvdygnKicsIFNNRF9USFVNQiwgIm5hbWU9JyIuZG9TbGFzaCgkbmV3bmFtZSkuIiciKTsN CgkJCQlpZiAoJGV4aXN0cyAmJiBzdHJ0b2xvd2VyKCRuZXduYW1lKSAhPSBzdHJ0b2xvd2Vy KCRuYW1lKSkgew0KCQkJCQkkbXNnID0gc21kX3RodW1iX2dUeHQoJ3Byb2ZpbGVfZXhpc3Rz JywgYXJyYXkoJ3tuYW1lfScgPT4gZG9TbGFzaCgkbmV3bmFtZSkpKTsNCgkJCQl9IGVsc2Ug ew0KCQkJCQlpZiAoJG5ld25hbWUpIHsNCgkJCQkJCSRmbGFncyA9IDA7DQoJCQkJCQkkZmxh Z3MgPSAoJHNtZF90aHVtYl9hY3RpdmUpID8gJGZsYWdzIHwgU01EX1RIVU1CX0FDVElWRSA6 ICRmbGFnczsNCgkJCQkJCSRmbGFncyA9ICgkc21kX3RodW1iX2Nyb3ApID8gJGZsYWdzIHwg U01EX1RIVU1CX0NST1AgOiAkZmxhZ3M7DQoJCQkJCQkkZmxhZ3MgPSAoJHNtZF90aHVtYl9z aGFycGVuKSA/ICRmbGFncyB8IFNNRF9USFVNQl9TSEFSUCA6ICRmbGFnczsNCg0KCQkJCQkJ c2FmZV91cGRhdGUoDQoJCQkJCQkJU01EX1RIVU1CLA0KCQkJCQkJCSJuYW1lPSciLmRvU2xh c2goJG5ld25hbWUpLiInIg0KCQkJCQkJCQkuIiwgd2lkdGg9JyIuZG9TbGFzaCgkd2lkdGgp LiInIg0KCQkJCQkJCQkuIiwgaGVpZ2h0PSciLmRvU2xhc2goJGhlaWdodCkuIiciDQoJCQkJ CQkJCS4iLCBxdWFsaXR5PSciLmRvU2xhc2goJHF1YWxpdHkpLiInIg0KCQkJCQkJCQkuIiwg ZmxhZ3M9JyIuZG9TbGFzaCgkZmxhZ3MpLiInIg0KCQkJCQkJCSwgIm5hbWU9JyIuZG9TbGFz aCgkbmFtZSkuIiciDQoJCQkJCQkpOw0KDQoJCQkJCQkvLyBBbHRlciB0aGUgZGVmYXVsdCB0 aHVtYm5haWwNCgkJCQkJCWlmICgkc21kX3RodW1iX2RlZmF1bHQpIHsNCgkJCQkJCQlzZXRf cHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICRuZXduYW1lLCAnc21kX3RodW1i JywgUFJFRl9ISURERU4pOw0KCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkvLyBSZW1vdmUgdGhl IGRlZmF1bHQgZmxhZyBpZiB0aGlzIHVzZWQgdG8gYmUgdGhlIGRlZmF1bHQNCgkJCQkJCQlp ZiAoZ2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnKSA9PSBkb1NsYXNoKCRu YW1lKSkgew0KCQkJCQkJCQlzZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScs ICcnLCAnc21kX3RodW1iJywgUFJFRl9ISURERU4pOw0KCQkJCQkJCX0NCgkJCQkJCX0NCg0K CQkJCQkJLy8gQWRqdXN0IHRoZSB0aHVtYm5haWwgZGlyZWN0b3J5IGlmIHRoZSBuYW1lIGhh cyBjaGFuZ2VkDQoJCQkJCQlpZiAoJG5ld25hbWUgIT0gJG5hbWUpIHsNCgkJCQkJCQlyZW5h bWUoSU1QQVRILiRuYW1lLCBJTVBBVEguJG5ld25hbWUpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJ CQkJfQ0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJJG1zZyA9IHNtZF90aHVtYl9nVHh0KCd0YWJs ZXNfbm90X2luc3RhbGxlZCcpOw0KCQl9DQoJfQ0KDQoJLy8gRGVsZXRlIHByb2ZpbGUNCglp ZiAoJHN0ZXAgPT0gJ3NtZF90aHVtYl9wcm9maWxlX2RlbGV0ZScpIHsNCgkJaWYgKHNtZF90 aHVtYl90YWJsZV9leGlzdCgpKSB7DQoJCQlpZiAoIWVtcHR5KCRzbWRfdGh1bWJfbmFtZSkp IHsNCgkJCQkkbmFtZSA9IHNhbml0aXplRm9yVXJsKCRzbWRfdGh1bWJfbmFtZSk7DQoJCQkJ JHJldCA9IHNhZmVfZGVsZXRlKFNNRF9USFVNQiwgIm5hbWU9JyIuZG9TbGFzaCgkbmFtZSku IiciKTsNCgkJCQlpZiAoJHJldCkgew0KCQkJCQlzbWRfdGh1bWJfcm1kaXIoSU1QQVRILiRu YW1lKTsNCg0KCQkJCQkvLyBSZW1vdmUgdGhlIGRlZmF1bHQgZmxhZyBpZiB0aGlzIHVzZWQg dG8gYmUgdGhlIGRlZmF1bHQNCgkJCQkJaWYgKGdldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVs dF9wcm9maWxlJykgPT0gZG9TbGFzaCgkbmFtZSkpIHsNCgkJCQkJCXNldF9wcmVmKCdzbWRf dGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJycsICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTik7 DQoJCQkJCX0NCg0KCQkJCQkkbXNnID0gc21kX3RodW1iX2dUeHQoJ3Byb2ZpbGVfZGVsZXRl ZCcsIGFycmF5KCd7bmFtZX0nID0+IGRvU2xhc2goJG5hbWUpKSk7DQoJCQkJfQ0KCQkJfQ0K CQl9DQoJfQ0KDQoJJHFzID0gYXJyYXkoDQoJCSJldmVudCIgPT4gJ2ltYWdlJywNCgkJInBh Z2UiID0+ICRwYWdlLA0KCQkic29ydCIgPT4gJHNvcnQsDQoJCSJkaXIiID0+ICRkaXIsDQoJ CSJjcml0IiA9PiAkY3JpdCwNCgkJInNlYXJjaF9tZXRob2QiID0+ICRzZWFyY2hfbWV0aG9k LA0KCSk7DQoNCgkkZWRpdEZvY3VzID0gKCRzdGVwID09ICdzbWRfdGh1bWJfcHJvZmlsZV9l ZGl0JykgPyAnalF1ZXJ5KCIjc21kX3RodW1iX3Byb2ZpbGVfZWRpdGVkIGlucHV0W25hbWU9 XCdzbWRfdGh1bWJfbmV3bmFtZVwnXSIpLmZvY3VzKCk7JyA6ICcnOw0KDQoJZWNobyA8PDxF T0MNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIHNtZF90aHVt Yl90b2dnbGVuZXcoKSB7DQoJYm94ID0galF1ZXJ5KCIjc21kX3RodW1iX3Byb2ZpbGVfY3Jl YXRlIik7DQoJaWYgKGJveC5jc3MoImRpc3BsYXkiKSA9PSAibm9uZSIpIHsNCgkJYm94LnNo b3coKTsNCgl9IGVsc2Ugew0KCQlib3guaGlkZSgpOw0KCX0NCglqUXVlcnkoImlucHV0LnNt ZF9mb2N1cyIpLmZvY3VzKCk7DQoJcmV0dXJuIGZhbHNlOw0KfQ0KZnVuY3Rpb24gc21kX3Ro dW1iX3N3aXRjaF9hY3RpdmUobmFtZSkgew0KCXNlbmRBc3luY0V2ZW50KA0KCXsNCgkJZXZl bnQ6IHRleHRwYXR0ZXJuLmV2ZW50LA0KCQlzdGVwOiAnc21kX3RodW1iX3N3aXRjaF9hY3Rp dmUnLA0KCQlzbWRfdGh1bWJfcHJvZmlsZTogbmFtZQ0KCX0sIHNtZF90aHVtYl9zd2l0Y2hf YWN0aXZlX2RvbmUpOw0KfQ0KZnVuY3Rpb24gc21kX3RodW1iX3N3aXRjaF9hY3RpdmVfZG9u ZShkYXRhKSB7DQoJdmFyIHNtZF90aHVtYl9wcm9maWxlID0galF1ZXJ5KCcjc21kX3RodW1i X3Byb2ZpbGVfJytqUXVlcnkoZGF0YSkuZmluZCgnc21kX3RodW1iX3Byb2ZpbGUnKS5hdHRy KCd2YWx1ZScpKTsNCglzbWRfdGh1bWJfcHJvZmlsZS50b2dnbGVDbGFzcygnc21kX2luYWN0 aXZlJyk7DQoJaWYgKHNtZF90aHVtYl9wcm9maWxlLmhhc0NsYXNzKCdzbWRfaW5hY3RpdmUn KSkgew0KCQlzbWRfdGh1bWJfcHJvZmlsZS5maW5kKCdpbnB1dDpjaGVja2JveCcpLnJlbW92 ZUF0dHIoJ2NoZWNrZWQnKTsNCgl9IGVsc2Ugew0KCQlzbWRfdGh1bWJfcHJvZmlsZS5maW5k KCdpbnB1dDpjaGVja2JveCcpLmF0dHIoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpOw0KCX0NCn0N Cg0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgnLnNtZF90aHVtYl9oZWFkaW5nX2Fj dGl2ZScpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQlqUXVlcnkoJy5zbWRfdGh1bWJfcm93IGlu cHV0OmNoZWNrYm94JykuZWFjaChmdW5jdGlvbigpIHsNCgkJCXNtZF90aHVtYl9zd2l0Y2hf YWN0aXZlKGpRdWVyeSh0aGlzKS5wYXJlbnQoKS5hdHRyKCdjbGFzcycpKTsNCgkJfSk7DQoJ fSk7DQoJeyRlZGl0Rm9jdXN9DQp9KTsNCjwvc2NyaXB0Pg0KPHN0eWxlIHR5cGU9InRleHQv Y3NzIj4NCi5zbWRfaGlkZGVuIHsNCglkaXNwbGF5Om5vbmU7DQp9DQojc21kX3RodW1iX3By b2ZpbGVzIHsNCgl3aWR0aDo3MDBweDsNCgltYXJnaW46MCBhdXRvIDE4cHg7DQoJcG9zaXRp b246cmVsYXRpdmU7DQp9DQojc21kX3RodW1iX2JhdGNoIHsNCglmbG9hdDpyaWdodDsNCn0N Ci5zbWRfaW5hY3RpdmUgew0KCWJhY2tncm91bmQ6I2U2ZTZlNjsNCgljb2xvcjojOTk5Ow0K fQ0KLnNtZF90aHVtYl9oZWFkaW5nX2FjdGl2ZSB7DQoJY3Vyc29yOnBvaW50ZXI7DQp9DQoj c21kX3RodW1iX3Byb2ZpbGVfZm9ybSB7DQoJcGFkZGluZy10b3A6OHB4Ow0KfQ0KZm9ybSNz bWRfdGh1bWJfcHJvZmlsZV9mb3JtIHRkIHsNCglib3JkZXI6IDA7DQp9DQouc21kX3RodW1i X2Vycm9yIHsNCglwb3NpdGlvbjphYnNvbHV0ZTsNCglyaWdodDoxMDBweDsNCgl0ZXh0LWFs aWduOmNlbnRlcjsNCglib3JkZXI6MXB4IHNvbGlkIHJlZDsNCgliYWNrZ3JvdW5kOiNmZmM7 DQoJcGFkZGluZzozcHg7DQp9DQo8L3N0eWxlPg0KRU9DOw0KDQoJJG5ld2J0biA9ICc8YSBz dHlsZT0ibWFyZ2luLWxlZnQ6LTVweDsiIGNsYXNzPSJuYXZsaW5rIiBocmVmPSIjIiBvbmNs aWNrPSJyZXR1cm4gc21kX3RodW1iX3RvZ2dsZW5ldygpOyI+Jy5zbWRfdGh1bWJfZ1R4dCgn bmV3JykuJzwvYT4mbmJzcDsnOw0KCSRhbGxidG4gPSAnPGEgY2xhc3M9Im5hdmxpbmsiIGhy ZWY9Iicuam9pbl9xcygkcXMpLicmIzM4O3N0ZXA9c21kX3RodW1iX2NyZWF0ZV9hbGwiPicu c21kX3RodW1iX2dUeHQoJ2FsbF90aHVtYnMnKS4nPC9hPic7DQoNCgkkaGVhZGluZ3MgPSBu LnRyKA0KCQluLmNvbHVtbl9oZWFkKCduYW1lJywgJ25hbWUnLCAnaW1hZ2UnLCBmYWxzZSwg J2FzYycpLg0KCQljb2x1bW5faGVhZCgndGh1bWJfd2lkdGgnLCAnd2lkdGgnLCAnaW1hZ2Un LCBmYWxzZSkuDQoJCWNvbHVtbl9oZWFkKCd0aHVtYl9oZWlnaHQnLCAnaGVpZ2h0JywgJ2lt YWdlJywgZmFsc2UpLg0KCQljb2x1bW5faGVhZChzbWRfdGh1bWJfZ1R4dCgncXVhbGl0eScp LCAncXVhbGl0eScsICdpbWFnZScsIGZhbHNlKS4NCgkJY29sdW1uX2hlYWQoJ2tlZXBfc3F1 YXJlX3BpeGVscycsICdjcm9wJywgJ2ltYWdlJywgZmFsc2UpLg0KCQljb2x1bW5faGVhZChz bWRfdGh1bWJfZ1R4dCgnc2hhcnBlbicpLCAnc2hhcnBlbicsICdpbWFnZScsIGZhbHNlKS4N CgkJY29sdW1uX2hlYWQoJ2FjdGl2ZScsICdhY3RpdmUnLCAnaW1hZ2UnLCBmYWxzZSwgJycs ICcnLCAnJywgJ3NtZF90aHVtYl9oZWFkaW5nX2FjdGl2ZScpLg0KCQljb2x1bW5faGVhZCgn ZGVmYXVsdCcsICdkZWZhdWx0JywgJ2ltYWdlJywgZmFsc2UpLg0KCQljb2x1bW5faGVhZChz bWRfdGh1bWJfZ1R4dCgnYWN0aW9ucycpLCAnYWN0aW9ucycsICdpbWFnZScsIGZhbHNlKQ0K CSk7DQoNCgkkb3V0W10gPSAnPGZpZWxkc2V0IGlkPSJzbWRfdGh1bWJfcHJvZmlsZXMiPjxs ZWdlbmQgY2xhc3M9InBsYWluIGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RodW1ibmFp bF9wcm9maWxlc192aXNpYmxlJykgPyAnIGV4cGFuZGVkJyA6ICcnKS4nIj48YSBocmVmPSIj c21kX3RodW1ibmFpbF9wcm9maWxlcyI+Jy5zbWRfdGh1bWJfZ1R4dCgncHJvZmlsZV9oZWFk aW5nJykuJzwvYT48L2xlZ2VuZD48ZGl2IGlkPSJzbWRfdGh1bWJfYmF0Y2giPjxzcGFuIGlk PSJzbWRfdGh1bWJfYmN1cnIiPjwvc3Bhbj48c3BhbiBpZD0ic21kX3RodW1iX2J0b3QiPjwv c3Bhbj48L2Rpdj48ZGl2IGlkPSJzbWRfdGh1bWJuYWlsX3Byb2ZpbGVzIiBjbGFzcz0idG9n Z2xlIiBzdHlsZT0iZGlzcGxheTonLihnZXRfcHJlZigncGFuZV9zbWRfdGh1bWJuYWlsX3By b2ZpbGVzX3Zpc2libGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPic7DQoJJG91dFtdID0g JG1zZyA/ICc8ZGl2IGNsYXNzPSJzbWRfdGh1bWJfZXJyb3IiPicuJG1zZy4nPC9kaXY+JyA6 ICcnOw0KDQoJLy8gTWFpbiBsaXN0IG9mIHByb2ZpbGVzDQoJJG91dFtdID0gJzxmb3JtIG1l dGhvZD0icG9zdCIgbmFtZT0ic21kX3RodW1iX3Byb2ZpbGVfZm9ybSIgaWQ9InNtZF90aHVt Yl9wcm9maWxlX2Zvcm0iIGFjdGlvbj0iJy5qb2luX3FzKCRxcykuJyI+JzsNCgkkb3V0W10g PSBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJJG91dFtdID0gdHIodGRhKCRuZXdidG4uJGFsbGJ0 biwgJyBjb2xzcGFuPSI4IicpKTsNCgkkb3V0W10gPSAkaGVhZGluZ3M7DQoNCglpZiAoc21k X3RodW1iX3RhYmxlX2V4aXN0KCkpIHsNCgkJJHJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RI VU1CLCAnMT0xIE9SREVSIEJZIG5hbWUnKTsNCgkJJGRmbHQgPSBzYWZlX2ZpZWxkKCd2YWwn LCAndHhwX3ByZWZzJywgIm5hbWU9J3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnIik7DQoN CgkJLy8gTmV3IFByb2ZpbGUgcm93DQoJCSRvdXRbXT0gJzx0ciBpZD0ic21kX3RodW1iX3By b2ZpbGVfY3JlYXRlIiBjbGFzcz0ic21kX2hpZGRlbiI+JzsNCgkJJG91dFtdID0gdGQoc0lu cHV0KCdzbWRfdGh1bWJfcHJvZmlsZV9zYXZlJykuZklucHV0KCd0ZXh0JywgJ3NtZF90aHVt Yl9uZXduYW1lJywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSA/ICRzbWRf dGh1bWJfbmFtZSA6ICcnKSwgJ3NtZF9mb2N1cycpKQ0KCQkJLnRkKGZJbnB1dCgndGV4dCcs ICdzbWRfdGh1bWJfd2lkdGgnLCAoKCRzdGVwPT0nc21kX3RodW1iX3Byb2ZpbGVfc2F2ZScp ID8gJHdpZHRoIDogJycpLCAnJywgJycsICcnLCAnNCcpKQ0KCQkJLnRkKGZJbnB1dCgndGV4 dCcsICdzbWRfdGh1bWJfaGVpZ2h0JywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3Nh dmUnKSA/ICRoZWlnaHQgOiAnJyksICcnLCAnJywgJycsICc0JykpDQoJCQkudGQoZklucHV0 KCd0ZXh0JywgJ3NtZF90aHVtYl9xdWFsaXR5JywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9m aWxlX3NhdmUnKSA/ICRxdWFsaXR5IDogJycpLCAnJywgJycsICcnLCAnNCcpKQ0KCQkJLnRk KGNoZWNrYm94KCdzbWRfdGh1bWJfY3JvcCcsICcxJywgKCgkc3RlcD09J3NtZF90aHVtYl9w cm9maWxlX3NhdmUnKSA/ICRzbWRfdGh1bWJfY3JvcCA6IDApKSkNCgkJCS50ZChjaGVja2Jv eCgnc21kX3RodW1iX3NoYXJwZW4nLCAnMScsICgoJHN0ZXA9PSdzbWRfdGh1bWJfcHJvZmls ZV9zYXZlJykgPyAkc21kX3RodW1iX3NoYXJwZW4gOiAwKSkpDQoJCQkudGQoY2hlY2tib3go J3NtZF90aHVtYl9hY3RpdmVfbmV3JywgJzEnLCAxKSkNCgkJCS50ZChjaGVja2JveCgnc21k X3RodW1iX2RlZmF1bHQnLCAnMScsIDApKQ0KCQkJLnRkKGZJbnB1dCgnc3VibWl0JywgJ3Nt ZF90aHVtYl9hZGQnLCBnVHh0KCdhZGQnKSwgJ3NtYWxsZXJib3gnKSk7DQoJCSRvdXRbXT0g JzwvdHI+JzsNCg0KCQkvLyBSZW1haW5pbmcgcm93cw0KCQlmb3JlYWNoICgkcnMgYXMgJHJv dykgew0KCQkJJGxpbmtfZWR0ID0gam9pbl9xcygkcXMpLicmIzM4O3N0ZXA9c21kX3RodW1i X3Byb2ZpbGVfZWRpdCYjMzg7c21kX3RodW1iX25hbWU9Jy4kcm93WyduYW1lJ107DQoJCQkk bGlua19kZWwgPSBqb2luX3FzKCRxcykuJyYjMzg7c3RlcD1zbWRfdGh1bWJfcHJvZmlsZV9k ZWxldGUmIzM4O3NtZF90aHVtYl9uYW1lPScuJHJvd1snbmFtZSddOw0KCQkJJGJ0bkVkdCA9 ICc8YSBocmVmPSInLiRsaW5rX2VkdC4nIj5bJyAuIGdUeHQoJ2VkaXQnKSAuICddPC9hPic7 DQoJCQkkYnRuRGVsID0gJzxhIGhyZWY9IicuJGxpbmtfZGVsLiciIG9uY2xpY2s9InJldHVy biBjb25maXJtKFwnJy5zbWRfdGh1bWJfZ1R4dCgnZGVsZXRlX2NvbmZpcm0nLCBhcnJheSgi e25hbWV9IiA9PiAkcm93WyduYW1lJ10pKS4nXCcpOyI+WycgLiBnVHh0KCdkZWxldGUnKSAu ICddPC9hPic7DQoJCQkkYWN0aXZlID0gKCRyb3dbJ2ZsYWdzJ10gJiBTTURfVEhVTUJfQUNU SVZFKSA/IDEgOiAwOw0KCQkJJGNyb3AgPSAoJHJvd1snZmxhZ3MnXSAmIFNNRF9USFVNQl9D Uk9QKSA/IDEgOiAwOw0KCQkJJHNoYXJwZW4gPSAoJHJvd1snZmxhZ3MnXSAmIFNNRF9USFVN Ql9TSEFSUCkgPyAxIDogMDsNCg0KCQkJaWYgKCRzdGVwID09ICdzbWRfdGh1bWJfcHJvZmls ZV9lZGl0JyAmJiAkcm93WyduYW1lJ10gPT0gJHNtZF90aHVtYl9uYW1lKSB7DQoJCQkJJGJ0 blNhdmUgPSBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdGh1bWJfc2F2ZScsIGdUeHQoJ1NhdmUn KSwgJ3NtYWxsZXJib3gnKTsNCgkJCQkkYnRuQ2FuY2VsID0gZklucHV0KCdzdWJtaXQnLCAn c21kX3RodW1iX2NhbmNlbCcsIGdUeHQoJ0NhbmNlbCcpLCAnc21hbGxlcmJveCcpOw0KCQkJ CSRvdXRbXSA9IHRyKA0KCQkJCQl0ZChoSW5wdXQoJ3NtZF90aHVtYl9uYW1lJywgJHJvd1sn bmFtZSddKS5mSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX25ld25hbWUnLCAkcm93WyduYW1l J10pKQ0KCQkJCQkudGQoZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl93aWR0aCcsICRyb3db J3dpZHRoJ10sICcnLCAnJywgJycsICc0JykpDQoJCQkJCS50ZChmSW5wdXQoJ3RleHQnLCAn c21kX3RodW1iX2hlaWdodCcsICRyb3dbJ2hlaWdodCddLCAnJywgJycsICcnLCAnNCcpKQ0K CQkJCQkudGQoZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl9xdWFsaXR5JywgJHJvd1sncXVh bGl0eSddLCAnJywgJycsICcnLCAnNCcpKQ0KCQkJCQkudGQoY2hlY2tib3goJ3NtZF90aHVt Yl9jcm9wJywgJzEnLCAkY3JvcCkpDQoJCQkJCS50ZChjaGVja2JveCgnc21kX3RodW1iX3No YXJwZW4nLCAnMScsICRzaGFycGVuKSkNCgkJCQkJLnRkKGNoZWNrYm94KCdzbWRfdGh1bWJf YWN0aXZlJywgJzEnLCAkYWN0aXZlKSwgJycsICRyb3dbJ25hbWUnXSkNCgkJCQkJLnRkKGNo ZWNrYm94KCdzbWRfdGh1bWJfZGVmYXVsdCcsICcxJywgKCgkcm93WyduYW1lJ10gPT0gJGRm bHQpID8gMSA6IDApKSkNCgkJCQkJLnRkKCRidG5TYXZlLiRidG5DYW5jZWwpDQoJCQkJLCAn IGlkPSJzbWRfdGh1bWJfcHJvZmlsZV9lZGl0ZWQiJyk7DQoJCQl9IGVsc2Ugew0KCQkJCSRv dXRbXSA9IHRyKA0KCQkJCQl0ZChocmVmKCRyb3dbJ25hbWUnXSwgJGxpbmtfZWR0KSkuDQoJ CQkJCXRkKCRyb3dbJ3dpZHRoJ10pLg0KCQkJCQl0ZCgkcm93WydoZWlnaHQnXSkuDQoJCQkJ CXRkKCRyb3dbJ3F1YWxpdHknXSkuDQoJCQkJCXRkKCgkY3JvcCkgPyBnVHh0KCd5ZXMnKSA6 IGdUeHQoJ25vJykpLg0KCQkJCQl0ZCgoJHNoYXJwZW4pID8gZ1R4dCgneWVzJykgOiBnVHh0 KCdubycpKS4NCgkJCQkJdGQoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic21kX3Ro dW1iX2FjdGl2ZV8nLiRyb3dbJ25hbWUnXS4nIiB2YWx1ZT0iMSInLigoJGFjdGl2ZSkgPyAn IiBjaGVja2VkPSJjaGVja2VkIicgOiAnJykuICcgY2xhc3M9ImNoZWNrYm94IiBvbmNoYW5n ZT0ic21kX3RodW1iX3N3aXRjaF9hY3RpdmUoXCcnLiRyb3dbJ25hbWUnXS4nXCcpOyIgLz4n LCAnJywgJHJvd1snbmFtZSddKS4NCgkJCQkJdGQoKCRyb3dbJ25hbWUnXSA9PSAkZGZsdCkg PyBnVHh0KCd5ZXMnKSA6IGdUeHQoJ25vJykpLg0KCQkJCQl0ZCgkYnRuRGVsKQ0KCQkJCSwg JyBpZD0ic21kX3RodW1iX3Byb2ZpbGVfJy4kcm93WyduYW1lJ10uJyIgY2xhc3M9InNtZF90 aHVtYl9yb3cnIC4gKCgkYWN0aXZlKSA/ICcnIDogJyBzbWRfaW5hY3RpdmUnKS4nIicpOw0K CQkJfQ0KCQl9DQoJfQ0KDQoJJG91dFtdID0gZW5kVGFibGUoJycpOw0KCSRvdXRbXSA9ICc8 L2Rpdj48L2Zvcm0+PC9maWVsZHNldD4nOw0KDQoJcmV0dXJuIGpvaW4oJycsICRvdXQpOw0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERlbGV0ZSBhIHRodW1ibmFp bCBkaXJlY3RvcnkgYW5kIGl0cyBjb250ZW50cw0KZnVuY3Rpb24gc21kX3RodW1iX3JtZGly KCRkaXIpIHsNCglpZiAoaXNfZGlyKCRkaXIpKSB7DQoJCSRvYmplY3RzID0gc2NhbmRpcigk ZGlyKTsNCgkJZm9yZWFjaCAoJG9iamVjdHMgYXMgJG9iamVjdCkgew0KCQkJaWYgKCRvYmpl Y3QgIT0gIi4iICYmICRvYmplY3QgIT0gIi4uIikgew0KCQkJCWlmIChmaWxldHlwZSgkZGly LkRTLiRvYmplY3QpID09ICJkaXIiKSBzbWRfdGh1bWJfcm1kaXIoJGRpci5EUy4kb2JqZWN0 KTsgZWxzZSB1bmxpbmsoJGRpci5EUy4kb2JqZWN0KTsNCgkJCX0NCgkJfQ0KCQlyZXNldCgk b2JqZWN0cyk7DQoJCXJtZGlyKCRkaXIpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQovLyBBZGQgdGh1bWJuYWlsIHRhYmxlIGlmIG5vdCBhbHJlYWR5IGluc3Rh bGxlZA0KLy8gRmxhZ3M6IEJpdCAwPUFjdGl2ZSAvIDE9Q3JvcCAvIDIgPSBTaGFycGVuDQpm dW5jdGlvbiBzbWRfdGh1bWJfdGFibGVfaW5zdGFsbCgpIHsNCgkkR0xPQkFMU1sndHhwX2Vy cl9jb3VudCddID0gMDsNCgkkcmV0ID0gJyc7DQoJJHNxbCA9IGFycmF5KCk7DQoJJHNxbFtd ID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGAiLlBGWC5TTURfVEhVTUIuImAgKA0K CQlgbmFtZWAgdmFyY2hhcigzMikgTk9UIE5VTEwgZGVmYXVsdCAnJywNCgkJYHdpZHRoYCBp bnQoNCkgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJCWBoZWlnaHRgIGludCg0KSBOT1QgTlVM TCBkZWZhdWx0ICcwJywNCgkJYHF1YWxpdHlgIHRpbnlpbnQoMikgTlVMTCBkZWZhdWx0ICc3 NScsDQoJCWBmbGFnc2AgdGlueWludCgyKSBOT1QgTlVMTCBkZWZhdWx0ICcwJywNCgkJUFJJ TUFSWSBLRVkgKGBuYW1lYCkNCgkpIEVOR0lORT1NeUlTQU0iOw0KDQoJaWYoZ3BzKCdkZWJ1 ZycpKSB7DQoJCWRtcCgkc3FsKTsNCgl9DQoJZm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7DQoJ CSRyZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOw0KCQlpZiAoJHJldD09PWZhbHNlKSB7DQoJCQkk R0xPQkFMU1sndHhwX2Vycl9jb3VudCddKys7DQoJCQllY2hvICI8Yj4iLiRHTE9CQUxTWyd0 eHBfZXJyX2NvdW50J10uIi48L2I+ICIubXlzcWxfZXJyb3IoKS4iPGJyIC8+XG4iOw0KCQkJ ZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7DQoJCX0NCgl9DQoNCgkvLyBCYWNrdXAgdGhl IGN1cnJlbnQgdGh1bWIgcHJlZnMNCgkkZXhpc3RzID0gc2FmZV9yb3coJyonLCAndHhwX3By ZWZzJywgIm5hbWU9J3NtZF90aHVtYl9iYWNrdXBfdyciKTsNCglpZiAoISRleGlzdHMpIHsN CgkJc2V0X3ByZWYoJ3NtZF90aHVtYl9iYWNrdXBfdycsIGdldF9wcmVmKCd0aHVtYl93Jyks ICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAwKTsNCgkJc2V0X3By ZWYoJ3NtZF90aHVtYl9iYWNrdXBfaCcsIGdldF9wcmVmKCd0aHVtYl9oJyksICdzbWRfdGh1 bWInLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAxKTsNCgkJc2V0X3ByZWYoJ3NtZF90 aHVtYl9iYWNrdXBfYycsIGdldF9wcmVmKCd0aHVtYl9jcm9wJyksICdzbWRfdGh1bWInLCBQ UkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAyKTsNCg0KCQkvLyBFcmFzZSB0aGUgY3VycmVu dCB0aHVtYiBwcmVmcw0KCQlzZXRfcHJlZigndGh1bWJfdycsICcnLCAnaW1hZ2UnLCBQUkVG X0hJRERFTik7DQoJCXNldF9wcmVmKCd0aHVtYl9oJywgJycsICdpbWFnZScsIFBSRUZfSElE REVOKTsNCgkJc2V0X3ByZWYoJ3RodW1iX2Nyb3AnLCAnJywgJ2ltYWdlJywgUFJFRl9ISURE RU4pOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBEcm9wIHRh YmxlIGlmIGluIGRhdGFiYXNlDQpmdW5jdGlvbiBzbWRfdGh1bWJfdGFibGVfcmVtb3ZlKCkg ew0KCSRyZXQgPSAnJzsNCgkkc3FsID0gYXJyYXkoKTsNCgkkR0xPQkFMU1sndHhwX2Vycl9j b3VudCddID0gMDsNCglpZiAoc21kX3RodW1iX3RhYmxlX2V4aXN0KCkpIHsNCgkJJHNxbFtd ID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTICIgLlBGWC5TTURfVEhVTUIuICI7ICI7DQoJCWlm KGdwcygnZGVidWcnKSkgew0KCQkJZG1wKCRzcWwpOw0KCQl9DQoJCWZvcmVhY2ggKCRzcWwg YXMgJHFyeSkgew0KCQkJJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7DQoJCQlpZiAoJHJldD09 PWZhbHNlKSB7DQoJCQkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOw0KCQkJCWVjaG8g IjxiPiIuJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNxbF9lcnJvcigp LiI8YnIgLz5cbiI7DQoJCQkJZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7DQoJCQl9DQoJ CX0NCgl9DQoNCgkvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCB0aHVtYiBwcmVmcw0KCSRleGlz dHMgPSBzYWZlX3JvdygnKicsICd0eHBfcHJlZnMnLCAibmFtZT0nc21kX3RodW1iX2JhY2t1 cF93JyIpOw0KCWlmICgkZXhpc3RzKSB7DQoJCXNldF9wcmVmKCd0aHVtYl93JywgZ2V0X3By ZWYoJ3NtZF90aHVtYl9iYWNrdXBfdycpLCAnaW1hZ2UnLCBQUkVGX0hJRERFTik7DQoJCXNl dF9wcmVmKCd0aHVtYl9oJywgZ2V0X3ByZWYoJ3NtZF90aHVtYl9iYWNrdXBfaCcpLCAnaW1h Z2UnLCBQUkVGX0hJRERFTik7DQoJCXNldF9wcmVmKCd0aHVtYl9jcm9wJywgZ2V0X3ByZWYo J3NtZF90aHVtYl9iYWNrdXBfYycpLCAnaW1hZ2UnLCBQUkVGX0hJRERFTik7DQoNCgl9DQoJ Ly8gRXJhc2UgdGhlIGJhY2t1cCB0aHVtYiBwcmVmcw0KCXNhZmVfZGVsZXRlKCd0eHBfcHJl ZnMnLCAibmFtZSBJTignc21kX3RodW1iX2JhY2t1cF93JywgJ3NtZF90aHVtYl9iYWNrdXBf aCcsICdzbWRfdGh1bWJfYmFja3VwX2MnLCAnc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScs ICdwYW5lX3NtZF90aHVtYm5haWxfcHJvZmlsZXNfdmlzaWJsZScsICdwYW5lX3NtZF90aHVt Ym5haWxzX3Zpc2libGUnKSIpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF90aHVtYl90YWJsZV9leGlzdCgkYWxsPScnKSB7DQoJaWYgKCRhbGwp IHsNCgkJJHRibHMgPSBhcnJheShTTURfVEhVTUIgPT4gNSk7DQoJCSRvdXQgPSBjb3VudCgk dGJscyk7DQoJCWZvcmVhY2ggKCR0YmxzIGFzICR0YmwgPT4gJGNvbHMpIHsNCgkJCWlmIChn cHMoJ2RlYnVnJykpIHsNCgkJCQllY2hvICIrKyBUQUJMRSAiLiR0YmwuIiBIQVMgIi5jb3Vu dChAc2FmZV9zaG93KCdjb2x1bW5zJywgJHRibCkpLiIgQ09MVU1OUzsgUkVRVUlSRVMgIi4k Y29scy4iICsrIi5icjsNCgkJCX0NCgkJCWlmIChjb3VudChAc2FmZV9zaG93KCdjb2x1bW5z JywgJHRibCkpID09ICRjb2xzKSB7DQoJCQkJJG91dC0tOw0KCQkJfQ0KCQl9DQoJCXJldHVy biAoJG91dD09PTApID8gMSA6IDA7DQoJfSBlbHNlIHsNCgkJaWYgKGdwcygnZGVidWcnKSkg ew0KCQkJZWNobyAiKysgVEFCTEUgIi5TTURfVEhVTUIuIiBIQVMgIi5jb3VudChAc2FmZV9z aG93KCdjb2x1bW5zJywgU01EX1RIVU1CKSkuIiBDT0xVTU5TOyI7DQoJCX0NCgkJcmV0dXJu KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCBTTURfVEhVTUIpKTsNCgl9DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF90aHVtYm5haWxfc2F2ZV9wYW5lX3N0YXRlKCkgew0KCSRwYW5l cyA9IGFycmF5KCdzbWRfdGh1bWJuYWlsX3Byb2ZpbGVzJywgJ3NtZF90aHVtYm5haWxzJyk7 DQoJJHBhbmUgPSBncHMoJ3BhbmUnKTsNCglpZiAoaW5fYXJyYXkoJHBhbmUsICRwYW5lcykp DQoJew0KCQlzZXRfcHJlZigicGFuZV97JHBhbmV9X3Zpc2libGUiLCAoZ3BzKCd2aXNpYmxl JykgPT0gJ3RydWUnID8gJzEnIDogJzAnKSwgJ3NtZF90aHVtYicsIFBSRUZfSElEREVOLCAn eWVzbm9yYWRpbycsIDAsIFBSRUZfUFJJVkFURSk7DQoJCXNlbmRfeG1sX3Jlc3BvbnNlKCk7 DQoJfSBlbHNlIHsNCgkJc2VuZF94bWxfcmVzcG9uc2UoYXJyYXkoJ2h0dHAtc3RhdHVzJyA9 PiAnNDAwIEJhZCBSZXF1ZXN0JykpOw0KCX0NCn0NCg0KLy8qKioqKioqKioqKioqKioqKg0K Ly8gUFVCTElDIFNJREUgVEFHUw0KLy8qKioqKioqKioqKioqKioqKg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJuYWlsKCRhdHRzKSB7DQoJZ2xv YmFsICR0aGlzaW1hZ2U7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQkndHlwZScgICAg ICAgPT4gQGdldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJyksDQoJCSdpZCcg ICAgICAgICA9PiAnJywNCgkJJ25hbWUnICAgICAgID0+ICcnLA0KCQknZXNjYXBlJyAgICAg PT4gJ2h0bWwnLA0KCQknd3JhcHRhZycgICAgPT4gJycsDQoJCSdjbGFzcycgICAgICA9PiAn JywNCgkJJ2h0bWxfaWQnICAgID0+ICcnLA0KCQknc3R5bGUnICAgICAgPT4gJycsDQoJCSds aW5rJyAgICAgICA9PiAnJywNCgkJJ2xpbmtfcmVsJyAgID0+ICcnLA0KCQkncG9wbGluaycg ICAgPT4gMCwNCgkJJ2FkZF9zdGFtcCcgID0+IDAsDQoJCSdmb3JjZV9zaXplJyA9PiAnJywN CgkpLCRhdHRzKSk7DQoNCglpZiAoJG5hbWUpIHsNCgkJJG5hbWUgPSBkb1NsYXNoKCRuYW1l KTsNCgkJJHJzID0gc2FmZV9yb3coJyonLCAndHhwX2ltYWdlJywgIm5hbWUgPSAnJG5hbWUn IGxpbWl0IDEiKTsNCgl9IGVsc2VpZiAoJGlkKSB7DQoJCSRpZCA9IChpbnQpICRpZDsNCgkJ JHJzID0gc2FmZV9yb3coJyonLCAndHhwX2ltYWdlJywgImlkID0gJGlkIGxpbWl0IDEiKTsN Cgl9IGVsc2VpZiAoJHRoaXNpbWFnZSkgew0KCQkkaWQgPSAoaW50KSAkdGhpc2ltYWdlWydp ZCddOw0KCQkkcnMgPSAkdGhpc2ltYWdlOw0KCX0gZWxzZSB7DQoJCXRyaWdnZXJfZXJyb3Io Z1R4dCgndW5rbm93bl9pbWFnZScpKTsNCgkJcmV0dXJuOw0KCX0NCg0KCWlmICgkcnMpIHsN CgkJZXh0cmFjdCgkcnMpOw0KCQkkdGh1bWJpbmZvID0gc2FmZV9yb3coJyonLCBTTURfVEhV TUIsICJuYW1lPSciLmRvU2xhc2goJHR5cGUpLiInIik7DQoJCWlmICgkdGh1bWJpbmZvKSB7 DQoJCQkkcGF0aCA9IElNUEFUSC5zYW5pdGl6ZUZvclVybCgkdGh1bWJpbmZvWyduYW1lJ10p LkRTLiRpZC4kZXh0Ow0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkgew0KCQkJCWlmICgk ZXNjYXBlID09ICdodG1sJykgew0KCQkJCQkkYWx0ID0gaHRtbHNwZWNpYWxjaGFycygkYWx0 KTsNCgkJCQkJJGNhcHRpb24gPSBodG1sc3BlY2lhbGNoYXJzKCRjYXB0aW9uKTsNCgkJCQl9 DQoNCgkJCQkkbWV0YVsnYWx0J10gPSAkYWx0Ow0KCQkJCSRmb3JjZV9zaXplID0gZG9fbGlz dCgkZm9yY2Vfc2l6ZSk7DQoJCQkJaWYgKGluX2FycmF5KCd3aWR0aCcsICRmb3JjZV9zaXpl KSkgew0KCQkJCQkkbWV0YVsnZm9yY2V3J10gPSAxOw0KCQkJCX0NCgkJCQlpZiAoaW5fYXJy YXkoJ2hlaWdodCcsICRmb3JjZV9zaXplKSkgew0KCQkJCQkkbWV0YVsnZm9yY2VoJ10gPSAx Ow0KCQkJCX0NCgkJCQlpZiAoJGFkZF9zdGFtcCA9PSAwKSB7ICRtZXRhWydzdGFtcCddID0g MTsgfSAvLyBOZWdhdGl2ZSBsb2dpYyBzaW5jZSB3ZSB3YW50IHRoZSBzdGFtcCBvbiBieSBk ZWZhdWx0IGZvciB0aGUgYWRtaW4gc2lkZQ0KCQkJCWlmICgkY2FwdGlvbikgeyAkbWV0YVsn dGl0bGUnXSA9ICRjYXB0aW9uOyB9DQoJCQkJaWYgKCRodG1sX2lkICYmICEkd3JhcHRhZykg eyAkbWV0YVsnaWQnXSA9ICRodG1sX2lkOyB9DQoJCQkJaWYgKCRjbGFzcyAmJiAhJHdyYXB0 YWcpIHsgJG1ldGFbJ2NsYXNzJ10gPSAkY2xhc3M7IH0gZWxzZSB7ICRjbGFzcz0kdHlwZTsg fQ0KCQkJCWlmICgkc3R5bGUpIHsgJG1ldGFbJ3N0eWxlJ10gPSAkc3R5bGU7IH0NCg0KCQkJ CSRvdXQgPSBzbWRfdGh1bWJfaW1nKCR0aHVtYmluZm8sICRycywgJG1ldGEpOw0KDQoJCQkJ aWYgKCRsaW5rKSB7DQoJCQkJCSRvdXQgPSBocmVmKCRvdXQsIGltYWdlc3JjdXJsKCRpZCwg JGV4dCksICghZW1wdHkoJGxpbmtfcmVsKSA/ICcgcmVsPSInLiRsaW5rX3JlbC4nIicgOiAn JykuJyB0aXRsZT0iJy4kY2FwdGlvbi4nIicpOw0KCQkJCX0gZWxzZWlmICgkcG9wbGluaykg ew0KCQkJCQkkb3V0ID0gJzxhIGhyZWY9IicuaW1hZ2VzcmN1cmwoJGlkLCAkZXh0KS4nIicu DQoJCQkJCQknIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwgXCdwb3B1cHdpbmRv d1wnLCAnLg0KCQkJCQkJJ1wnd2lkdGg9Jy4kdy4nLCBoZWlnaHQ9Jy4kaC4nLCBzY3JvbGxi YXJzLCByZXNpemFibGVcJyk7IHJldHVybiBmYWxzZTsiPicuJG91dC4nPC9hPic7DQoJCQkJ fQ0KDQoJCQkJcmV0dXJuICgkd3JhcHRhZykgPyBkb1RhZygkb3V0LCAkd3JhcHRhZywgJGNs YXNzLCAnJywgJGh0bWxfaWQpIDogJG91dDsNCgkJCX0NCgkJfQ0KCX0NCg0KCXRyaWdnZXJf ZXJyb3IoZ1R4dCgndW5rbm93bl9pbWFnZScpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfaWZfdGh1bWJuYWlsKCRhdHRzLCAkdGhpbmcpIHsN CglnbG9iYWwgJHRoaXNpbWFnZTsNCglhc3NlcnRfaW1hZ2UoKTsNCg0KCWV4dHJhY3QobEF0 dHMoYXJyYXkoDQoJCSd0eXBlJyA9PiBAZ2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3By b2ZpbGUnKSwNCgkpLCRhdHRzKSk7DQoNCgkkdGh1bWJpbmZvID0gc2FmZV9yb3coJyonLCBT TURfVEhVTUIsICJuYW1lPSciLmRvU2xhc2goJHR5cGUpLiInIik7DQoJJHJldCA9IGZhbHNl Ow0KCWlmICgkdGh1bWJpbmZvKSB7DQoJCSRwYXRoID0gSU1QQVRILnNhbml0aXplRm9yVXJs KCR0aHVtYmluZm9bJ25hbWUnXSkuRFMuJHRoaXNpbWFnZVsnaWQnXS4kdGhpc2ltYWdlWydl eHQnXTsNCgkJJHJldCA9IGZpbGVfZXhpc3RzKCRwYXRoKTsNCgl9DQoJcmV0dXJuIHBhcnNl KEV2YWxFbHNlKCR0aGluZywgJHJldCkpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCi8vIFBsdWdpbi1zcGVjaWZpYyByZXBsYWNlbWVudCBzdHJpbmdzIC0gbG9jYWxp c2UgYXMgcmVxdWlyZWQNCi8vIFRPRE86IG1ha2UgdGhlc2UgaW50byBhIHRleHRwYWNrIHdo ZW4gcGx1Z2luIGNvbXBvc2VyIHN1cHBvcnRzIHRoZW0NCmZ1bmN0aW9uIHNtZF90aHVtYl9n VHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsNCgkkbGFuZyA9IGFycmF5KA0KCQknYWN0 aW9ucycgPT4gJ0FjdGlvbnMnLA0KCQknYWxsX3NpemVzJyA9PiAnQWxsIHNpemVzJywNCgkJ J2FsbF90aHVtYnMnID0+ICdDcmVhdGUgYWxsJywNCgkJJ2RlbGV0ZV9jb25maXJtJyA9PiAn UmVhbGx5IGRlbGV0ZSBwcm9maWxlIHtuYW1lfT8gSXQgd2lsbCBkZWxldGUgQUxMIHRodW1i bmFpbHMgb2YgdGhpcyB0eXBlLicsDQoJCSduZXcnID0+ICdOZXcgcHJvZmlsZScsDQoJCSdw cmVmc19pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBpbnN0YWxsZWQnLA0KCQkncHJvZmls ZV9kZWxldGVkJyA9PiAnUHJvZmlsZSAie25hbWV9IiBkZWxldGVkJywNCgkJJ3Byb2ZpbGVf ZXhpc3RzJyA9PiAnUHJvZmlsZSAie25hbWV9IiBhbHJlYWR5IGV4aXN0cycsDQoJCSdwcm9m aWxlX2hlYWRpbmcnID0+ICdUaHVtYm5haWwgcHJvZmlsZXMnLA0KCQkncXVhbGl0eScgPT4g J1F1YWxpdHkgKCUpJywNCgkJJ3NoYXJwZW4nID0+ICdTaGFycGVuJywNCgkJJ3RhYmxlc19u b3RfaW5zdGFsbGVkJyA9PiAnVGFibGVzIG5vdCBpbnN0YWxsZWQ6IHRyeSByZWluc3RhbGxp bmcgdGhlIHBsdWdpbicsDQoJCSd0aHVtYm5haWxfaGVhZGluZycgPT4gJ1RodW1ibmFpbHMn LA0KCSk7DQoJcmV0dXJuIHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0dHMpOw0KfSI7czo0OiJ0 eXBlIjtzOjE6IjEiO3M6NToib3JkZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czoxOiIyIjtz OjQ6ImhlbHAiO3M6MTIyMDA6IjxkaXYgaWQ9InNtZF9oZWxwIj4KCgk8aDE+c21kX3RodW1i bmFpbDwvaDE+CgoJPGgyPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkFzc2lnbiBhbnkg bnVtYmVyIG9mIHRodW1ibmFpbHMgdG8gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4m IzgyMTc7cyBpbWFnZXM8L2xpPgoJCTxsaT5CYXRjaCBhc3NpZ24gdGh1bWJuYWlscyB0byBh bGwgZXhpc3RpbmcgaW1hZ2VzPC9saT4KCQk8bGk+U2V0IG9uZSB0aHVtYm5haWwgc2l6ZSBh cyBkZWZhdWx0PC9saT4KCQk8bGk+RGlzcGxheSBhbnkgb2YgdGhlIHRodW1ibmFpbCBzaXpl cyBvbiB5b3VyIHNpdGU8L2xpPgoJCTxsaT5Db25kaXRpb25hbCB0aHVtYm5haWwgY2hlY2sg YXZhaWxhYmxlPC9saT4KCTwvdWw+CgoJPGgyPkF1dGhvciAvIGNyZWRpdHM8L2gyPgoKCTxw PldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0 ZWYgRGF3c29uPC9hPi4gTWFueSB0aGFua3MgdG8gdGhlIGJldGEgdGVzdCBjcmV3IHdobyBv ZmZlcmVkIGZlYXR1cmUgYW5kIHdvcmtmbG93IGFkdmljZSwgZXNwZWNpYWxseSB0aGVib21i c2l0ZSwgamFrb2IgYW5kIGpzdHViYnMuPC9wPgoKCTxoMj5JbnN0YWxsYXRpb24gLyB1bmlu c3RhbGxhdGlvbjwvaDI+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMgUEhQNSsg YW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuMy4wKzwvcD4KCgk8cD5Eb3du bG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVy bi5vcmcvcGx1Z2lucy8xMTg2L3NtZF90aHVtYm5haWwiPnRleHRwYXR0ZXJuLm9yZzwvYT4s IG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBh Z2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0 aGUgcGx1Z2luLiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJu LmNvbS92aWV3dG9waWMucGhwP2lkPTM0MzY3Ij5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3Jl IGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUg cGx1Z2luLjwvcD4KCgk8cD5UbyB1bmluc3RhbGwsIGRlbGV0ZSBmcm9tIHRoZSBBZG1pbiAt Jmd0OyBQbHVnaW5zIHBhZ2UuIE5vbmUgb2YgeW91ciBleGlzdGluZyA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPi1zdHlsZSB0aHVtYm5haWxzIHdpbGwgYmUgdG91Y2hlZC48L3A+ CgoJPGgyPlVzYWdlICYjODIxMjsgYWRtaW4gc2lkZTwvaDI+CgoJPHA+VmlzaXQgdGhlIENv bnRlbnQtJmd0O0ltYWdlcyB0YWIuIEFib3ZlIHRoZSBsaXN0IG9mIGltYWdlcyBpcyBhbiBh cmVhIGxhYmVsbGVkIDxlbT5UaHVtYm5haWwgUHJvZmlsZXM8L2VtPi4gQ2xpY2sgaXQgdG8g cmV2ZWFsIHRoZSBjb250cm9sIHBhbmVsLiBZb3UgY2FuIHRvZ2dsZSB0aGlzIHBhbmVsIG9u IGFuZCBvZmYgYnkgY2xpY2tpbmcgdGhlIGhlYWRpbmcuPC9wPgoKCTxwPllvdSBtdXN0IGRl ZmluZSBhdCBsZWFzdCBvbmUgcHJvZmlsZSB0byBiZWdpbiB3aXRoLCBzbyBjbGljayB0aGUg PGVtPk5ldyBwcm9maWxlPC9lbT4gYnV0dG9uLiBUaGlzIHdpbGwgcmV2ZWFsIGVkaXQgYm94 ZXMgd2hlcmUgeW91IGNhbiBlbnRlcjo8L3A+CgoJPHVsPgoJCTxsaT48c3Ryb25nPk5hbWU8 L3N0cm9uZz46IHNvbWUgZGVzY3JpcHRpdmUgbmFtZSBmb3IgdGhpcyB0aHVtYm5haWwgZGlt ZW5zaW9uLiBZb3UgYXJlIGxpbWl0ZWQgdG8gdXN1YWwgbm9uLXdlaXJkIGNoYXJhY3RlcnMg aW4gdGhlIG5hbWU8L2xpPgoJCTxsaT48c3Ryb25nPldpZHRoPC9zdHJvbmc+OiB0aHVtYm5h aWwgd2lkdGgsIGluIHBpeGVscy4gSWYgbGVmdCBibGFuayAob3Igc2V0IHRvIDApIGFuZCBo ZWlnaHQgaXMgc3BlY2lmaWVkLCB0aGUgd2lkdGggd2lsbCBiZSBjb21wdXRlZCBpbiBwcm9w b3J0aW9uIHRvIHRoZSBoZWlnaHQ8L2xpPgoJCTxsaT48c3Ryb25nPkhlaWdodDwvc3Ryb25n PjogdGh1bWJuYWlsIGhlaWdodCwgaW4gcGl4ZWxzLiBJZiBsZWZ0IGJsYW5rIChvciBzZXQg dG8gMCkgYW5kIHdpZHRoIGlzIHNwZWNpZmllZCwgdGhlIGhlaWdodCB3aWxsIGJlIGNvbXB1 dGVkIGluIHByb3BvcnRpb24gdG8gdGhlIHdpZHRoPC9saT4KCQk8bGk+PHN0cm9uZz5RdWFs aXR5ICglKTwvc3Ryb25nPjogVGhlIHF1YWxpdHkgb2YgdGhlIHJlc3VsdGluZyB0aHVtYm5h aWwuIEdlbmVyYWxseSBvbmx5IG9mIHVzZSBmb3IganBnIG9yIHBuZygyNCkgaW1hZ2VzLiBU aGUgaGlnaGVyIHRoZSB2YWx1ZSB0aGUgYmV0dGVyIHRoZSBxdWFsaXR5IGFuZCB0aGUgYmln Z2VyIHRoZSBmaWxlIHNpemUuIERlZmF1bHQ6IDc1PC9saT4KCQk8bGk+PHN0cm9uZz5Dcm9w PC9zdHJvbmc+OiB3aGV0aGVyIHRvIGNyb3AgdGhlIGltYWdlIHdoZW4gdGhlIHRodW1ibmFp bCBpcyBjcmVhdGVkLCBvciBzY2FsZSBpdCB0byBmaXQ8L2xpPgoJCTxsaT48c3Ryb25nPlNo YXJwZW48L3N0cm9uZz46IHdoZXRoZXIgdG8gYXBwbHkgYSBzaGFycGVuaW5nIGZpbHRlciB0 byB0aGUgdGh1bWJuYWlsIHdoZW4gaXQgaXMgY3JlYXRlZC4gVXNlZnVsIGZvciB2ZXJ5IHNt YWxsIGltYWdlczwvbGk+CgkJPGxpPjxzdHJvbmc+QWN0aXZlPC9zdHJvbmc+OiBFbmFibGUv ZGlzYWJsZSB0aGlzIHRodW1ibmFpbCBzaXplIHNvIGl0IHdpbGwvd29uJiM4MjE3O3QgYmUg YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd2hlbiB0aGUgbmV4dCBpbWFnZSBpcyB1cGxvYWRl ZC4gQ2xpY2sgdGhlIGNoZWNrYm94IHRvIGluc3RhbnRseSBzd2l0Y2ggdGhlIHByb2ZpbGUg b24vb2ZmLiBDbGljayB0aGUgJiM4MjE2O0FjdGl2ZSYjODIxNzsgd29yZCBpbiB0aGUgaGVh ZGluZyByb3cgdG8gdG9nZ2xlIHRoZSBzdGF0dXMgb2YgYWxsIHByb2ZpbGVzLiBOb3RlIHRo YXQgdGhpcyBzZXR0aW5nIGdvdmVybnMgaG93IHRoZSA8YSBocmVmPSIjY3JlYXRlIj5BbGwg c2l6ZXM8L2E+IGRyb3Bkb3duIGVudHJ5IGludGVyYWN0cyB3aXRoIHRoZSA8ZW0+Q3JlYXRl PC9lbT4gYW5kIDxlbT5EZWxldGU8L2VtPiBidXR0b25zPC9saT4KCQk8bGk+PHN0cm9uZz5E ZWZhdWx0PC9zdHJvbmc+OiBzZXQgdGhpcyB0aHVtYm5haWwgcHJvZmlsZSBhcyB0aGUgZGVm YXVsdC4gVGhlIGRlZmF1bHQgaW1hZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIEltYWdl cyBsaXN0IGFuZCB3aWxsIGFsc28gYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBzaXplIHRvIGJl IGRpc3BsYXllZCB1c2luZyA8Y29kZT4mbHQ7dHhwOnNtZF90aHVtYm5haWwvJmd0OzwvY29k ZT48L2xpPgoJPC91bD4KCgk8cD5PbmNlIHlvdSYjODIxNzt2ZSBjb25maWd1cmVkIHlvdXIg cHJvZmlsZSwgY2xpY2sgU2F2ZSB0byBzdG9yZSBpdC4gWW91IGNhbiBhbHdheXMgZWRpdCBp dCBhZ2FpbiBieSBjbGlja2luZyBpdHMgbmFtZS4gR28gYWhlYWQgYW5kIGNyZWF0ZSBzb21l IG1vcmUgcHJvZmlsZXMgZm9yIHRodW1ibmFpbHMgb2YgZGlmZmVyZW50IHNpemVzL3BhcmFt ZXRlcnMuIElmIHlvdSB3aXNoIHRvIGRlbGV0ZSBhIHByb2ZpbGUsIGhpdCB0aGUgPGVtPltE ZWxldGVdPC9lbT4gYnV0dG9uIGFuZCBjb25maXJtLiA8c3Ryb25nPkFsbCB0aHVtYm5haWxz IGFzc29jaWF0ZWQgd2l0aCB0aGF0IHByb2ZpbGUgd2lsbCBiZSBkZWxldGVkPC9zdHJvbmc+ LjwvcD4KCgk8cD5BdCB0aGlzIHBvaW50LCBubyB0aHVtYm5haWxzIGhhdmUgYmVlbiBjcmVh dGVkLiBMZXQmIzgyMTc7cyByZWN0aWZ5IHRoYXQuPC9wPgoKCTxoMyBpZD0iY3JlYXRlIj5D cmVhdGluZyB0aHVtYm5haWxzPC9oMz4KCgk8cD5QaWNrIG9uZSBvZiB5b3VyIGltYWdlcyBh bmQgY2xpY2sgdG8gZWRpdCBpdC48L3A+CgoJPHA+QmVuZWF0aCB0aGUgbWFpbiBwaWN0dXJl IHlvdSB3aWxsIHNlZSBhbiBhcmVhIGxhYmVsbGVkIDxlbT5UaHVtYm5haWxzPC9lbT4uIFlv dSBjYW4gdG9nZ2xlIHRoaXMgcGFuZWwgb24gYW5kIG9mZiBieSBjbGlja2luZyB0aGUgaGVh ZGluZy48L3A+CgoJPHA+SW5zaWRlIHRoZSBwYW5lbCBpcyBhIHNpbXBsZSBzZWxlY3QgbGlz dCBjb250YWluaW5nIG9uZSBlbnRyeSBmb3IgZWFjaCB0aHVtYm5haWwgcHJvZmlsZSB5b3Ug aGF2ZSBjb25maWd1cmVkLCBwbHVzIHRoZSBzcGVjaWFsIGVudHJ5IDxlbT5BbGwgc2l6ZXM8 L2VtPi4gWW91IGNhbiBzZWxlY3Qgb25lIG9mIHRoZXNlIGVudHJpZXMgYW5kIGNsaWNrIDxl bT5DcmVhdGU8L2VtPiB0byBjcmVhdGUgdGh1bWJuYWlsKHMpIGluIHRoZSBzZWxlY3RlZCBz aXplIG9yIGhpdCA8ZW0+RGVsZXRlPC9lbT4gdG8gcmVtb3ZlIHRoZSBzZWxlY3RlZCB0aHVt Ym5haWwocykuPC9wPgoKCTxwPk9uY2UgY3JlYXRlZCwgdGhlIHRodW1ibmFpbHMgYXBwZWFy IGluIHRoZSBwYW5lbDsgcmVtZW1iZXIgdGhleSBjYW4gYmUgdHVja2VkIGF3YXkgaWYgeW91 IGRvbiYjODIxNzt0IHdhbnQgdG8gbG9vayBhdCB0aGVtLjwvcD4KCgk8cD5JZiB5b3Ugc2Vs ZWN0IDxlbT5BbGwgc2l6ZXM8L2VtPiBhbmQgaGl0IDxlbT5DcmVhdGU8L2VtPiwgeW91IHdp bGwgZ2V0IG9uZSB0aHVtYm5haWwgZm9yIGVhY2ggYWN0aXZlIHByb2ZpbGUuIFNpbWlsYXJs eSwgaWYgeW91IGhpdCA8ZW0+RGVsZXRlPC9lbT4gYW55IHRodW1ibmFpbHMgc3RvcmVkIGFn YWluc3QgYW4gYWN0aXZlIHByb2ZpbGUgZm9yIHRoZSBjdXJyZW50IGltYWdlIHdpbGwgYmUg cmVtb3ZlZC4gQnkgdG9nZ2xpbmcgY2VydGFpbiB0aHVtYm5haWwgcHJvZmlsZXMgb24vb2Zm IHlvdSBjYW4gY29udHJvbCB3aGljaCBvbmVzIGFyZSBjcmVhdGVkIG9yIGRlbGV0ZWQuPC9w PgoKCTxwPldoZW4geW91IHVwbG9hZCBhIG5ldyBpbWFnZSBvciByZXBsYWNlIGFuIGV4aXN0 aW5nIGltYWdlLCB0aHVtYm5haWxzIHdpbGwgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGZv ciBhbnkgYWN0aXZlIHByb2ZpbGVzLiBOb3RlIHRoYXQgaWYgeW91IHVzZSB0aGUgbXVsdGkt ZWRpdCB0b29sIHRvIGRlbGV0ZSBpbWFnZXMsIDxzdHJvbmc+YWxsPC9zdHJvbmc+IGNvcnJl c3BvbmRpbmcgdGh1bWJuYWlscyBmb3IgdGhlIHNlbGVjdGVkIGltYWdlcyAoaW5jbHVkaW5n IGluYWN0aXZlIG9uZXMpIHdpbGwgYmUgcmVtb3ZlZC48L3A+CgoJPGgzIGlkPSJjdXN0b20i PkN1c3RvbSB0aHVtYm5haWxzPC9oMz4KCgk8cD5JZiB5b3UgcHJlZmVyIHRvIG1ha2UgeW91 ciBvd24gdGh1bWJzIGluIGFuIGV4dGVybmFsIHByb2dyYW0sIHlvdSBjYW4gc3RpbGwgc2V0 IHVwIHRoZSBwcm9maWxlcyBhcyBub3JtYWwgYnV0IGluc3RlYWQgb2YgY2xpY2tpbmcgPGVt PkNyZWF0ZTwvZW0+IGluIHRoZSBJbWFnZSBFZGl0IHNjcmVlbiwgeW91IGNhbiBzZWxlY3Qg YSBwcm9maWxlIHNpemUgZnJvbSB0aGUgZHJvcGRvd24gYW5kIHVzZSB0aGUgQnJvd3NlJiM4 MjMwOyBmYWNpbGl0eSB0byBjaG9vc2UgYSB0aHVtYm5haWwgZnJvbSB5b3VyIGhhcmQgZHJp dmUuIFdoZW4geW91IGNsaWNrIDxlbT5VcGxvYWQ8L2VtPiB0aGUgaW1hZ2Ugd2lsbCBiZSBp bnNlcnRlZCBhZ2FpbnN0IHRoZSBzZWxlY3RlZCBwcm9maWxlLjwvcD4KCgk8cD5BdCBhbnkg dGltZSB5b3UgY2FuIGNsaWNrIG9uZSBvZiB0aGUgdGh1bWJuYWlscyAob3Igc2VsZWN0IGEg c2l6ZSBmcm9tIHRoZSBkcm9wZG93bikgYW5kIEJyb3dzZSYjODIzMDsgZm9yIGFub3RoZXIg aW1hZ2UgdG8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgdGh1bWJuYWlsICYjODIxMjsgZXZlbiBv bmVzIHRoYXQgaGF2ZSBiZWVuIGF1dG8tY3JlYXRlZC4gU29tZSB0aGluZ3MgdG8gbm90ZSBh Ym91dCB0aGlzIGZlYXR1cmU6PC9wPgoKCTx1bD4KCQk8bGk+dGhlIHRodW1ibmFpbCBtdXN0 IGJlIG9mIHRoZSBzYW1lIGZpbGUgdHlwZSBhcyB0aGUgb3JpZ2luYWwgaW1hZ2Ugb3IgdGhl IHVwbG9hZCB3aWxsIGJlIGlnbm9yZWQ8L2xpPgoJCTxsaT50aHVtYnMgY2Fubm90IGhhdmUg ZGltZW5zaW9ucyBncmVhdGVyIHRoYW4gdGhlIG9yaWdpbmFsIGltYWdlIG9yIHRoZSB1cGxv YWQgd2lsbCBiZSBpZ25vcmVkPC9saT4KCQk8bGk+eW91IGNhbiBjbGljayBhIGhpZ2hsaWdo dGVkIGltYWdlIHRvIGRlc2VsZWN0IGl0PC9saT4KCQk8bGk+eW91IGNhbm5vdCBCcm93c2Ug Zm9yIGFuIGltYWdlIHVubGVzcyB5b3UgaGF2ZSBjaG9zZW4gb25lIHByb2ZpbGU8L2xpPgoJ PC91bD4KCgk8aDMgaWQ9ImJhdGNoIj5CYXRjaCB0aHVtYm5haWwgY3JlYXRpb248L2gzPgoK CTxwPllvdSBjYW4gYWxzbyBjcmVhdGUgdGh1bWJuYWlscyBlbi1tYXNzZS4gRnJvbSB0aGUg bWFpbiA8ZW0+VGh1bWJuYWlsIHByb2ZpbGVzPC9lbT4gcGFuZWwsIGlmIHlvdSBoaXQgPGVt PkNyZWF0ZSBhbGw8L2VtPiB0aGUgcGx1Z2luIHdpbGwgZ28gYXdheSBhbmQgY3JlYXRlIHRo dW1ibmFpbHMgZm9yIGV2ZXJ5IGFjdGl2ZSBwcm9maWxlIGZvciBhbGwgY3VycmVudGx5IGlu c3RhbGxlZCBpbWFnZXMuIFRoaXMgaXMgYSBxdWljayB3YXkgdG8gZ2VuZXJhdGUgdGh1bWJz IGZvciB5b3VyIGV4aXN0aW5nIGltYWdlcy48L3A+CgoJPHA+QmVjYXVzZSBvZiB0aGUgbmF0 dXJlIG9mIHRoaXMgdG9vbCAmIzgyMTI7IGVzcGVjaWFsbHkgd2l0aCBsYXJnZSBpbWFnZSBw b29scyAmIzgyMTI7IHRoZSBwcm9jZXNzIGlzIGRvbmUgYXMgYSBiYWNrZ3JvdW5kIHRhc2sg dmlhIDxzcGFuIGNsYXNzPSJjYXBzIj5BSkFYPC9zcGFuPi4gQWZ0ZXIgY2xpY2tpbmcgdGhl IDxlbT5DcmVhdGUgYWxsPC9lbT4gYnV0dG9uIGEgY291bnRlciB3aWxsIGFwcGVhciBpbiB0 aGUgdG9wLXJpZ2h0IG9mIHRoZSBjb250cm9sIHBhbmVsIHNob3dpbmcgaG93IG1hbnkgaW1h Z2VzIGl0IGhhcyBwcm9jZXNzZWQgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgaW1hZ2VzIGlu c3RhbGxlZC4gV2hlbiBpdCYjODIxNztzIGRvbmUsIHRoZSBudW1iZXJzIHdpbGwgZGlzYXBw ZWFyLiBJZiB5b3UgdGhlbiByZWZyZXNoIHlvdXIgSW1hZ2VzIHRhYiB5b3Ugd2lsbCBzZWUg eW91ciBjaG9zZW4gZGVmYXVsdCB0aHVtYm5haWxzIGluIHRoZSBsaXN0IChhc3N1bWluZyB5 b3UmIzgyMTc7dmUgc2V0IG9uZSBhcyBkZWZhdWx0ISk8L3A+CgoJPGgyIGlkPSJ1c2FnZSI+ VXNhZ2UgJiM4MjEyOyBwdWJsaWMgc2lkZTwvaDI+CgoJPHA+VHdvIG5ldyB0YWdzIGFyZSBh dmFpbGFibGUgdG8gZGlzcGxheSB5b3VyIHRodW1ibmFpbHMuPC9wPgoKCTxoMyBpZD0ic21k X3RodW1iIj48Y29kZT4mbHQ7dHhwOnNtZF90aHVtYm5haWwvJmd0OzwvY29kZT48L2gzPgoK CTxwPkEgZGlyZWN0IHJlcGxhY2VtZW50IGZvciB0aGUgYnVpbHQgaW4gPGEgaHJlZj0iaHR0 cDovL3RleHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRsZT10aHVtYm5haWwiPnR4 cDp0aHVtYm5haWw8L2E+IHRhZyB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgZnVuY3Rpb25hbGl0 eSBhbmQgYXR0cmlidXRlcyBhcGFydCBmcm9tIHRoZXNlIGV4Y2VwdGlvbnM6PC9wPgoKCTx1 bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogdXNlIHRoaXMgYXR0 cmlidXRlIHRvIGRpc3BsYXkgdGh1bWJuYWlscyBvZiB0aGUgZ2l2ZW4gcHJvZmlsZSBuYW1l LiBlLmcuIDxjb2RlPnR5cGU9JnF1b3Q7bGFyZ2UmcXVvdDs8L2NvZGU+LiBJZiB5b3UgZG8g bm90IHNwZWNpZnkgdGhpcyBhdHRyaWJ1dGUsIHRoZSBkZWZhdWx0IHByb2ZpbGUgd2lsbCBi ZSB1c2VkLiBJZiB0aGVyZSBpcyBubyBkZWZhdWx0IHByb2ZpbGUgeW91JiM4MjE3O2xsIHNl ZSB3YXJuaW5nIG1lc3NhZ2VzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNz PC9zcGFuPiA6IGlmIG9taXR0ZWQsIHRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHdpbGwgYmUg dXNlZCBhcyBhIGNsYXNzIG5hbWUgZm9yIHRoZSBpbWcgdGFnLiBJZiB5b3Ugc3BlY2lmeSBh IHdyYXB0YWcgYW5kIG9taXQgdGhlIGNsYXNzLCB0aGUgcHJvZmlsZSBuYW1lIHdpbGwgYmUg dXNlZCBhcyBhIGNsYXNzIG9uIGJvdGggdGhlIGNvbnRhaW5lciBhbmQgdGhlIGltZyB0YWc8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+YWxpZ248L3NwYW4+IDogdGhpcyBhdHRy aWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5h ZGRfc3RhbXA8L3NwYW4+IDogYWRkcyB0aGUgaW1hZ2UgZmlsZSBtb2RpZmljYXRpb24gdGlt ZSB0byB0aGUgZW5kIG9mIHRoZSB0aHVtYm5haWwmIzgyMTc7cyA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPi4gVXNlIDxjb2RlPmFkZF9zdGFtcD0mcXVvdDsxJnF1b3Q7PC9jb2Rl PiB0byBzd2l0Y2ggdGhpcyBmZWF0dXJlIG9uLiBUaGlzIGhlbHBzIHByZXZlbnQgc3RhbGUg aW1hZ2VzLCBidXQgbWF5IHByZXZlbnQgYnJvd3NlcnMgZnJvbSBjYWNoZWluZyB0aGUgdGh1 bWJzIHByb3Blcmx5IHRodXMgaW5jcmVhc2luZyBiYW5kd2lkdGggdXNhZ2UuIERlZmF1bHQ6 IDA8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9yY2Vfc2l6ZTwvc3Bhbj4gOiB1 c3VhbGx5IHdoZW4geW91IHNldCBvbmUgb3Igb3RoZXIgd2lkdGgvaGVpZ2h0IHRvIDAgaW4g YSBwcm9maWxlLCB0aGUgYnJvd3NlciBzY2FsZXMgdGhlIG1pc3NpbmcgZGltZW5zaW9uIGF1 dG9tYXRpY2FsbHkuIEl0IGRvZXMgdGhpcyBieSBvbWl0dGluZyB0aGUgPGNvZGU+d2lkdGg9 PC9jb2RlPiBvciA8Y29kZT5oZWlnaHQ9PC9jb2RlPiBhdHRyaWJ1dGUgaW4gdGhlIDxjb2Rl PiZsdDtpbWcmZ3Q7PC9jb2RlPiB0YWcuIFRoaXMgbWF5IGNhdXNlIHZpc3VhbCBhcnRlZmFj dHMgYXMgdGhlIHBhZ2UgaXMgcmVuZGVyZWQgYW5kIHRoZSBicm93c2VyIGNhbGN1bGF0ZXMg dGhlIHNpemVzLiBJZiB5b3Ugd2lzaCB0aGUgcGx1Z2luIHRvIGFkZCB0aGUgYWN0dWFsIGRp bWVuc2lvbiB0byB0aGUgPGNvZGU+Jmx0O2ltZyZndDs8L2NvZGU+IHRhZyAodGhlIHNpemUg YXQgdGhlIHRpbWUgdGhlIHRodW1ibmFpbCB3YXMgY3JlYXRlZCksIHRlbGwgdGhlIHBsdWdp biB3aXRoIHRoaXMgYXR0cmlidXRlLiBDaG9vc2Ugb25lIG9yIGJvdGggb2YgPGNvZGU+d2lk dGg8L2NvZGU+IG9yIDxjb2RlPmhlaWdodDwvY29kZT4uIENvbW1hLXNlcGFyYXRlIGFzIHJl cXVpcmVkLiBEZWZhdWx0OiB1bnNldDwvbGk+Cgk8L3VsPgoKCTxwPlRoZSB0YWcgd29ya3Mg aW5zaWRlIDxjb2RlPiZsdDt0eHA6aW1hZ2VfbGlzdCZndDs8L2NvZGU+IG9yIGNhbiBiZSB1 c2VkIHN0YW5kYWxvbmUgYnkgc3BlY2lmeWluZyB0aGUgPGNvZGU+aWQ8L2NvZGU+IG9yIDxj b2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZS48L3A+CgoJPGgzIGlkPSJzbWRfaWZfdGh1bWIi Pjxjb2RlPiZsdDt0eHA6c21kX2lmX3RodW1ibmFpbC8mZ3Q7PC9jb2RlPjwvaDM+CgoJPHA+ QSBkaXJlY3QgcmVwbGFjZW1lbnQgZm9yIHRoZSBidWlsdCBpbiA8Y29kZT4mbHQ7dHhwOmlm X3RodW1ibmFpbCAvJmd0OzwvY29kZT4gdGFnIHdpdGggZXhhY3RseSB0aGUgc2FtZSBmdW5j dGlvbmFsaXR5LiBJdCBoYXMgb25lIGF0dHJpYnV0ZTo8L3A+CgoJPHVsPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+dHlwZTwvc3Bhbj4gOiB1c2UgdGhpcyBhdHRyaWJ1dGUgdG8gY2hl Y2sgZm9yIHRodW1ibmFpbHMgb2YgdGhlIGdpdmVuIHByb2ZpbGUgbmFtZS4gZS5nLiA8Y29k ZT50eXBlPSZxdW90O01lZGl1bSZxdW90OzwvY29kZT4uIElmIHlvdSBkbyBub3Qgc3BlY2lm eSB0aGlzIGF0dHJpYnV0ZSwgdGhlIGRlZmF1bHQgcHJvZmlsZSB3aWxsIGJlIHRlc3RlZC4g SWYgdGhlcmUgaXMgbm8gZGVmYXVsdCBwcm9maWxlIHRoZSB0YWcgd2lsbCBhbHdheXMgcmVu ZGVyIHRoZSA8Y29kZT4mbHQ7dHhwOmVsc2UgLyZndDs8L2NvZGU+IHBvcnRpb248L2xpPgoJ PC91bD4KCgk8aDIgaWQ9Imhvd19pdF93b3JrcyI+SG93IGl0IHdvcmtzPC9oMj4KCgk8cD5G b3IgcmVmZXJlbmNlLCB3aGVuIHlvdSBjcmVhdGUgYSBwcm9maWxlIGEgZGlyZWN0b3J5IGlz IGNyZWF0ZWQgd2l0aCB0aGF0IG5hbWUgaW5zaWRlIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gPGNvZGU+aW1hZ2VzPC9jb2RlPiBmb2xkZXIuIEluc2lkZSB0aGlzIGZv bGRlciB5b3Ugd2lsbCBmaW5kIGltYWdlcyBvZiB0aGUgZm9ybWF0IDxjb2RlPmlkLmV4dDwv Y29kZT46IHdoZXJlIDxjb2RlPmlkPC9jb2RlPiBhbmQgPGNvZGU+ZXh0PC9jb2RlPiBtYXRj aCB0aGUgY29ycmVzcG9uZGluZyBpbWFnZSBJRHMgaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+IGRhdGFiYXNlLiBUaGF0JiM4MjE3O3MgcHJldHR5IG11Y2ggaXQuPC9w PgoKCTxwPllvdSBjYW4gZGVsZXRlIHRodW1ibmFpbCBmaWxlcyBtYW51YWxseSBmcm9tIGFu eSBvZiB0aGVzZSBkaXJlY3RvcmllcyBhbmQgdGhlIHBsdWdpbiB3aWxsIGZpZ3VyZSBldmVy eXRoaW5nIG91dC4gQnV0IGl0JiM4MjE3O3MgcHJvYmFibHkgbm90IGFkdmlzYWJsZSB0byBk ZWxldGUgdGhlIGRpcmVjdG9yaWVzIHRoZW1zZWx2ZXMgJiM4MjEyOyB1c2UgdGhlIDxlbT5b RGVsZXRlXTwvZW0+IGJ1dHRvbnMgaW4gdGhlIGNvbnRyb2wgcGFuZWwgZm9yIHRoYXQuPC9w PgoKCTxoMiBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MDYg QXVnIDEwIHwgMC4xMGJldGEgfCBJbml0aWFsIGJldGEgcmVsZWFzZTwvbGk+CgkJPGxpPjA0 IE9jdCAxMCB8IDAuMTAgfCBPZmZpY2lhbCBwdWJsaWMgcmVsZWFzZTwvbGk+CgkJPGxpPjA5 IE5vdiAxMCB8IDAuMTEgfCBBZGRlZCA8Y29kZT5mb3JjZV9zaXplPC9jb2RlPiBhbmQgPGNv ZGU+YWRkX3N0YW1wPC9jb2RlPiAoYm90aCB0aGFua3MgemVybykgOyByZW1vdmVkIHVubmVj ZXNzYXJ5IERCIGNhbGw8L2xpPgoJPC91bD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVH SU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGlu ZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9u dDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dy b3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNzbWRfaGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWln aHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAj ZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6 MTBweDsgfQojc21kX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBHZW9yZ2lh LCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojc21kX2hl bHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAw IDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI3Nt ZF9oZWxwIGgzIHsgY29sb3I6ICMyNzU2ODU7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fu cy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt0ZXh0LXRy YW5zZm9ybTogdXBwZXJjYXNlOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KI3NtZF9o ZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3Bh Y2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNl OyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiMzM2Q7IH0K I3NtZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAj OTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7d2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsg cGFkZGluZy1ib3R0b206MWVtO30KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGgge2JvcmRl cjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVtIDA7fQojc21kX2hlbHAgdWwgeyBsaXN0 LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHtjb2xvcjpyZWQ7 fQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIwcHggNXB4IDMwcHg7IH0KI3NtZF9oZWxw IC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQTFVH SU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoiYWMwYjNiY2IyMzA2ODM5MGIwMzI4 OTI5MTllNTVkOTAiO30=