# Name: smd_tags_admin v0.1 # Type: Admin/Client side plugin # Unlimited tags for articles, images, files and links # Author: Stef Dawson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTQ6InNtZF90YWdzX2FkbWluIjtzOjY6ImF1dGhvciI7czox MToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czozOiIwLjEiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjUyOiJVbmxpbWl0ZWQgdGFncyBmb3IgYXJ0aWNsZXMsIGltYWdlcywgZmlsZXMgYW5kIGxp bmtzIjtzOjQ6ImNvZGUiO3M6NTc4OTA6Ii8vIHNtZF90YWdzIGJ5IFN0ZWYgRGF3c29uDQov LyBUT0RPOiBsaXN0IHRhZ3MgYnkgbGlua2VkIGNhdCAoaS5lLiBhICd3aGVyZSB1c2VkJyBm b3IgY2F0ZWdvcnktPlRhZyByZWxhdGlvbnNoaXBzKQ0KLy8gVE9ETzogUmVzb2x2ZSB3aGF0 IGhhcHBlbnMgaWYgYW4gYXJ0aWNsZSBpcyBhc3NpZ25lZCBzb21lIHRhZ3MgYW5kIHRoZW4g dGhlIGNhdGVnb3J5IGlzIGNoYW5nZWQgKHRoZSB0YWdzIHJlbWFpbiBhc3NvY2lhdGVkLCBi dXQgYXJlIGhpZGRlbikNCi8vIFRPRE86IFdoYXQgaGFwcGVucyBpZiBvbiBhbiBhcnRpY2xl IGxpc3QgcGFnZSB0aGF0IGlzIG5vdCB0aGUgJ2dsb2JhbCcgc21kX3RhZ3MgcGFnZT8gU2hv dWxkIHdlIGJlIGFibGUgdG8gY2FsbCB0YWdfbGlzdD8NCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KLy8gQURNSU4gU0lERSBDT0RFDQppZiAoQHR4cGludGVyZmFjZSA9PSAnYWRt aW4nKSB7DQoJYWRkX3ByaXZzKCdzbWRfdGFncycsJzEsMicpOw0KDQoJLy8gRXh0ZW5zaW9u cyB0YWINCglyZWdpc3Rlcl90YWIoJ2V4dGVuc2lvbnMnLCAnc21kX3RhZ3MnLCBzbWRfdGFn c19nVHh0KCdzbWRfdGFncycpKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3MnLCAn c21kX3RhZ3MnKTsNCg0KCS8vIE5vdGUgdGhlIGNhbGxiYWNrcyBhcmUgb3JkZXJlZCB3aXRo ICdzYXZlJyBmaXJzdA0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19tdWx0aV9lZGl0 JywgJ2xpc3QnLCAnbGlzdF9tdWx0aV9lZGl0Jyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3Nt ZF90YWdzX3NhdmVsaXN0JywgJ2FydGljbGUnLCAnY3JlYXRlJyk7DQoJcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF90YWdzX3NhdmVsaXN0JywgJ2FydGljbGUnLCAnZWRpdCcpOw0KCXJlZ2lz dGVyX2NhbGxiYWNrKCdzbWRfdGFnc19sb2FkbGlzdCcsICdhcnRpY2xlJyk7DQoNCglyZWdp c3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfbXVsdGlfZWRpdCcsICdpbWFnZScsICdpbWFnZV9k ZWxldGUnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3Nfc2F2ZWxpc3QnLCAnaW1h Z2UnLCAnaW1hZ2Vfc2F2ZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19sb2Fk bGlzdCcsICdpbWFnZScpOw0KDQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90YWdzX211bHRp X2VkaXQnLCAnZmlsZScsICdmaWxlX2RlbGV0ZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfdGFnc19zYXZlbGlzdCcsICdmaWxlJywgJ2ZpbGVfc2F2ZScpOw0KCXJlZ2lzdGVyX2Nh bGxiYWNrKCdzbWRfdGFnc19sb2FkbGlzdCcsICdmaWxlJyk7DQoNCglyZWdpc3Rlcl9jYWxs YmFjaygnc21kX3RhZ3NfbXVsdGlfZWRpdCcsICdsaW5rJywgJ2xpbmtfbXVsdGlfZWRpdCcp Ow0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19zYXZlbGlzdCcsICdsaW5rJywgJ2xp bmtfcG9zdCcpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19zYXZlbGlzdCcsICds aW5rJywgJ2xpbmtfc2F2ZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19sb2Fk bGlzdCcsICdsaW5rJyk7DQoNCgkvLyBUcmlwbGUgYXJyYXksIG91dHB1dCBpbiBhbHBoYWJl dGljYWwgb3JkZXIsIHNlcXVlbnRpYWxseSBudW1iZXJlZA0KCS8vICAwOiBsaXN0IG9mIGN1 cnJlbnQgcHJlZnMgKyBkZWZhdWx0DQoJLy8gIDE6IGxpc3Qgb2YgbGVnYWN5IHByZWZzIHRo YXQgbWF5IG5lZWQgcmVtb3ZpbmcgKGRlZmF1bHQgc2hvdWxkIGFsbCBiZSBlbXB0eSkNCgkv LyAgMjogcG9zaXRpb24gdGhhdCBhIGhlYWRpbmcgc2hvdWxkIGJlIGluc2VydGVkICsgaGVh ZGluZyBpdHNlbGYNCglnbG9iYWwgJHNtZF90YWdfcHJlZnM7DQoJJHNtZF90YWdfcHJlZnMg PSBhcnJheSgNCgkJYXJyYXkoDQoJCQknc21kX3RhZ19wX2VuYWJsZScgPT4gJzExMTEnLCAv LyBvbmUgZGlnaXQgZm9yIGFydGljbGUvaW1hZ2UvZmlsZS9saW5rLiAxPWVuYWJsZWQ7IDA9 ZGlzYWJsZWQNCgkJCSdzbWRfdGFnX3BfZmlyc3QnID0+ICcwJywNCgkJCSdzbWRfdGFnX3Bf aW5wdXQnID0+ICcwJywgLy8gMD1zZWxlY3QsIDE9dGV4dGFyZWEsIDI9bGlua3MNCgkJCSdz bWRfdGFnX3BfbGlua2NhdCcgPT4gJzAnLA0KCQkJJ3NtZF90YWdfcF9xdGFnJyA9PiAnMCcs IC8vIDA9bm8gYXV0b2NvbXBsZXRlLCAxPXN0ZCBhL2MsIDI9c3RyaWN0IGEvYw0KCQkJJ3Nt ZF90YWdfcF9xdHBhdGgnID0+ICcnLCAvLyBEaXIgdG8ganMgZmlsZShzKSByZWxhdGl2ZSB0 byB0ZXh0cGF0dGVybiBkaXINCgkJCSdzbWRfdGFnX3BfcXRzdHlsJyA9PiAnJywgLy8gRGly IHRvIGNzcyBmaWxlKHMpDQoJCQknc21kX3RhZ19wX3NpemUnID0+ICc2JywNCgkJCSdzbWRf dGFnX3RfYXV0bycgPT4gJzEnLA0KCQkJJ3NtZF90YWdfdF9jb2xzJyA9PiAnMScsDQoJCQkn c21kX3RhZ190X2NvbHNvcmQnID0+ICcwJywNCgkJCSdzbWRfdGFnX3RfY291bnQnID0+ICcx JywNCgkJCSdzbWRfdGFnX3RfZGVsdHJlZScgPT4gJzAnLA0KCQkJJ3NtZF90YWdfdF9kZWx1 c2VkJyA9PiAnMCcsDQoJCQknc21kX3RhZ190X2hpbGl0ZScgPT4gJ2ZmYScsDQoJCQknc21k X3RhZ190X2hvdmVyJyA9PiAnZmZjJywNCgkJCSdzbWRfdGFnX3RfaW5kZW50JyA9PiAnJiM4 MjEyOycsDQoJCQknc21kX3RhZ191X3BuYW0nID0+ICdzbWRfdGFnJywNCgkJCSdzbWRfdGFn X3VfcHR5cCcgPT4gJ3NtZF90YWd0eXBlJywNCgkJCSdzbWRfdGFnX3Vfc2VjJyA9PiAnc21k X3RhZ3MnLA0KCQkpLA0KCQlhcnJheSgNCgkJCSdzbWRfdGFnX3RvX3JlbW92ZScgPT4gJycs DQoJCQknc21kX3RhZ19wX29yaWRlJyA9PiAnJywNCgkJKSwNCgkJYXJyYXkoDQoJCQkxID0+ IHNtZF90YWdzX2dUeHQoJ3ByZWZzX3AnKSwNCgkJCTkgPT4gc21kX3RhZ3NfZ1R4dCgncHJl ZnNfdCcpLA0KCQkJMTggPT4gc21kX3RhZ3NfZ1R4dCgncHJlZnNfdScpLA0KCQkpDQoJKTsN Cn0NCg0KaWYgKCFkZWZpbmVkKCdTTURfVEFHJykpIHsNCglkZWZpbmUoIlNNRF9UQUciLCBz YWZlX3BmeCgnc21kX3RhZ3MnKSk7DQp9DQppZiAoIWRlZmluZWQoJ1NNRF9UQUdDJykpIHsN CglkZWZpbmUoIlNNRF9UQUdDIiwgc2FmZV9wZngoJ3NtZF90YWdzX2NhdCcpKTsNCn0NCmlm ICghZGVmaW5lZCgnU01EX1RBR1UnKSkgew0KCWRlZmluZSgiU01EX1RBR1UiLCBzYWZlX3Bm eCgnc21kX3RhZ3NfdXNlZCcpKTsNCn0NCnJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc191 cmxfaGFuZGxlcicsICdwcmV0ZXh0Jyk7DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfdGFncygkZXZlbnQsICRzdGVwKSB7DQoJZ2xvYmFsICRzbWRf dGFnX3ByZWZzOw0KDQoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwgYXJyYXkoDQoJ CQknc21kX3RhZ19jcmVhdGUnLA0KCQkJJ3NtZF90YWdfZGVsZXRlJywNCgkJCSdzbWRfdGFn X2NhdGxpc3QnLA0KCQkJJ3NtZF90YWdfcGFyZW50bGlzdCcsDQoJCQknc21kX3RhZ19zYXZl JywNCgkJCSdzbWRfdGFnc19tYW5hZ2UnLA0KCQkJJ3NtZF90YWdzX3RhYmxlX2luc3RhbGwn LA0KCQkJJ3NtZF90YWdzX3RhYmxlX3JlbW92ZScsDQoJCQknc21kX3RhZ3NfcHJlZnNfZGlz cGxheScsDQoJCQknc21kX3RhZ3NfcHJlZnNfaW5zdGFsbCcsDQoJCQknc21kX3RhZ3NfcHJl ZnNfcmVtb3ZlJywNCgkJCSdzbWRfdGFnc19wcmVmc191cGRhdGUnLA0KCQkpKSkgew0KCQkk cHJlZiA9IHNtZF90YWdzX3ByZWZfZ2V0KCdzbWRfdGFnX3BfZmlyc3QnKTsNCgkJaWYgKCRw cmVmKSB7DQoJCQlzd2l0Y2ggKCRwcmVmWydzbWRfdGFnX3BfZmlyc3QnXVsndmFsJ10pIHsN CgkJCQljYXNlIDE6DQoJCQkJCXNtZF90YWdzX21hbmFnZSgnJyk7DQoJCQkJCWJyZWFrOw0K CQkJCWNhc2UgMDoNCgkJCQlkZWZhdWx0Og0KCQkJCQlzbWRfdGFnc19wcmVmc19zaG93KCcn KTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCXNtZF90YWdzX3ByZWZzX3Nob3coJycpOw0KCQl9 DQoJfSBlbHNlICRzdGVwKCk7DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQovLyBDcmVhdGUgZHJvcGRvd24gYW5kIHBvcHVsYXRlIGl0IHdpdGggdGFncyBvZiB0aGUg cmVsZXZhbnQgdHlwZQ0KZnVuY3Rpb24gc21kX211bHRpVHJlZVNlbGVjdElucHV0KCRzZWxl Y3RfbmFtZSA9ICcnLCAkdHJlZSA9ICcnLCAkdGFncyA9ICcnKSB7DQoJJHByZWYgPSBzbWRf dGFnc19wcmVmX2dldCgnc21kX3RhZ19wX3NpemUnLCAxKTsNCg0KCSRvdXRbXSA9ICc8c2Vs ZWN0IGlkPSInLiRzZWxlY3RfbmFtZS4nIiBuYW1lPSInLiRzZWxlY3RfbmFtZS4nW10iIGNs YXNzPSJsaXN0IiBzaXplPSInLiAkcHJlZlsnc21kX3RhZ19wX3NpemUnXVsndmFsJ10gLici IG11bHRpcGxlPSJtdWx0aXBsZSI+JzsNCglmb3JlYWNoICgkdHJlZSBhcyAkbGVhZikgew0K CQlpZiAoJGxlYWZbJ25hbWUnXSA9PSAncm9vdCcpIGNvbnRpbnVlOw0KDQoJCSRzZWxlY3Rl ZD0nJzsNCgkJZm9yZWFjaCAoJHRhZ3MgYXMgJGdpZCA9PiAkaXRlbSkgew0KCQkJaWYgKCRs ZWFmWydpZCddID09ICRpdGVtWyd0YWdfaWQnXSkgew0KCQkJCSRzZWxlY3RlZCA9ICcgc2Vs ZWN0ZWQ9InNlbGVjdGVkIic7DQoJCQkJY29udGludWU7DQoJCQl9DQoJCX0NCg0KCQkkbGVh ZlsnbmFtZSddID0gaHRtbHNwZWNpYWxjaGFycygkbGVhZlsnbmFtZSddKTsNCgkJJGluZGVu dCA9ICgkbGVhZlsnbGV2ZWwnXSA+IDApID8gc3RyX3JlcGVhdChzcC5zcCwkbGVhZlsnbGV2 ZWwnXSkgOiAnJzsNCgkJJG91dFtdID0gdC4nPG9wdGlvbiB2YWx1ZT0iJy4kbGVhZlsnaWQn XS4nIicuJHNlbGVjdGVkLic+Jy4kaW5kZW50LmFkZHNsYXNoZXMoJGxlYWZbJ3RpdGxlJ10p Lic8L29wdGlvbj4nOw0KCX0NCgkkb3V0W10gPSAnPC9zZWxlY3Q+JzsNCglyZXR1cm4gam9p bignJywkb3V0KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBDYWxs ZWQgd2hlbmV2ZXIgb25lIG9mIHRoZSA0IG1haW4gdGFicyBhcmUgdXNlZCBvbiB0aGUgYWRt aW4gc2lkZS4gSW5zZXJ0cyB0aGUgaW5wdXQgbWV0aG9kIGlmIHJlcXVpcmVkDQpmdW5jdGlv biBzbWRfdGFnc19sb2FkbGlzdCgkZXZlbnQsICRzdGVwKSB7DQoJaWYgKHNtZF90YWdzX3Rh YmxlX2V4aXN0KCkpIHsNCgkJJGN0cmxzID0gc21kX3RhZ3NfcHJlZl9nZXQoYXJyYXkoJ3Nt ZF90YWdfcF9lbmFibGUnLCAnc21kX3RhZ19wX2lucHV0JywgJ3NtZF90YWdfcF9zaXplJywg J3NtZF90YWdfcF9xdGFnJywgJ3NtZF90YWdfcF9xdHBhdGgnLCAnc21kX3RhZ19wX3F0c3R5 bCcsICdzbWRfdGFnX3BfbGlua2NhdCcpLCAxKTsNCgkJJG9ub2ZmID0gc21kX3RhZ3NfcHJl Zl9leHBsb2RlKCRjdHJsc1snc21kX3RhZ19wX2VuYWJsZSddWyd2YWwnXSk7DQoJCSRpcHR5 cCA9ICRjdHJsc1snc21kX3RhZ19wX2lucHV0J11bJ3ZhbCddOw0KCQkkc2Vsc3ogPSAkY3Ry bHNbJ3NtZF90YWdfcF9zaXplJ11bJ3ZhbCddOw0KCQkkcXVpY2sgPSAkY3RybHNbJ3NtZF90 YWdfcF9xdGFnJ11bJ3ZhbCddOw0KCQkkanNkaXIgPSAkY3RybHNbJ3NtZF90YWdfcF9xdHBh dGgnXVsndmFsJ107DQoJCSRjc2RpciA9ICRjdHJsc1snc21kX3RhZ19wX3F0c3R5bCddWyd2 YWwnXTsNCgkJJGNsaW5rID0gJGN0cmxzWydzbWRfdGFnX3BfbGlua2NhdCddWyd2YWwnXTsN CgkJJGpzdGFpbCA9ICgkanNkaXIpID8gJy8nIDogJyc7DQoJCSRjc3RhaWwgPSAoJGNzZGly KSA/ICcvJyA6ICcnOw0KCQkkYWRkSXQgPSBmYWxzZTsNCg0KCQkkaXRlbUlEID0gc21kX2dl dElEKCk7DQoJCSRlZHRCdG4gPSAnIFsnLmVMaW5rKCdzbWRfdGFncycsICdzbWRfdGFnc19t YW5hZ2UnLCAnc21kX3RhZ190eXBlJywgJGV2ZW50LCBnVHh0KCdlZGl0JykpLiddICc7DQoJ CSR0YWd0b3AgPSAnPGRpdiBjbGFzcz0ic21kX3RvcCI+Jy5zbWRfdGFnc19nVHh0KCd0aXRs ZScpLiRlZHRCdG4uJzwvZGl2Pic7DQoJCSRzZWxpc3QgPSAnPGRpdiBpZD0ic21kX3RhZ3Mi IG5hbWU9InNtZF90YWdzX2J5bGlzdCIgY2xhc3M9InNtZF90YWdpcCI+PC9kaXY+JzsNCgkJ JHNlbGhpZCA9ICc8ZGl2IGlkPSJzbWRfdGFncyIgbmFtZT0ic21kX3RhZ3NfYnlsaXN0IiBj bGFzcz0ic21kX2hpZGUiPjwvZGl2Pic7DQoJCXN3aXRjaCAoJGlwdHlwKSB7DQoJCQljYXNl IDA6DQoJCQkJJGlwbWV0aCA9ICRzZWxpc3Q7DQoJCQkJYnJlYWs7DQoJCQljYXNlIDE6DQoJ CQkJJGlwbWV0aCA9ICc8dGV4dGFyZWEgbmFtZT0ic21kX3RhZ3NfYnl0ZXh0IiByb3dzPSIn LiRzZWxzei4nIiBjbGFzcz0ic21kX3RhZ2lwIj48L3RleHRhcmVhPicuJHNlbGhpZDsNCgkJ CQlicmVhazsNCgkJCWNhc2UgMjoNCgkJCQkkaXBtZXRoID0gJzxkaXYgbmFtZT0ic21kX3Rh Z3NfYnlsaW5rIiBpZD0ic21kX3RhZ3NfYnlsaW5rIiBjbGFzcz0ic21kX3RhZ2lwIj48L2Rp dj4nLiRzZWxoaWQ7DQoJCQkJYnJlYWs7DQoJCX0NCg0KCQlzd2l0Y2ggKCRldmVudCkgew0K CQkJY2FzZSAiYXJ0aWNsZSI6DQoJCQkJJGFkZEl0ID0gKCRvbm9mZltnVHh0KCd0YWJfbGlz dCcpXSA9PSAxKSA/IHRydWUgOiBmYWxzZTsNCgkJCQlpZiAoJGFkZEl0KSB7DQoJCQkJCWV4 dHJhY3QoZ3BzYShhcnJheSgndmlldycsJ2Zyb21fdmlldycpKSk7DQoJCQkJCSR2aWV3ID0g KCR2aWV3KSA/ICR2aWV3IDogInRleHQiOw0KCQkJCQkkZ3JhYmNhdHMgPSAnalF1ZXJ5KCIj Y2F0ZWdvcnktMSBvcHRpb246c2VsZWN0ZWQsICNjYXRlZ29yeS0yIG9wdGlvbjpzZWxlY3Rl ZCIpJzsNCgkJCQkJJGpzRWxlbSA9ICdqUXVlcnkoIiNjYXRlZ29yeS0yIiknOw0KCQkJCQkk dHJpZ2dlciA9ICdqUXVlcnkoIiNjYXRlZ29yeS0xLCAjY2F0ZWdvcnktMiIpJzsNCgkJCQkJ aWYgKCR2aWV3ICE9ICd0ZXh0Jykgew0KCQkJCQkJJHRhZ3RvcCA9ICRpcG1ldGggPSAnJzsN CgkJCQkJfQ0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgImltYWdlIjoNCgkJCQlpZiAo JHN0ZXAgPT0gImltYWdlX2VkaXQiKSB7DQoJCQkJCSRhZGRJdCA9ICgkb25vZmZbZ1R4dCgn dGFiX2ltYWdlJyldID09IDEpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJCQlpZiAoJGFkZEl0KSB7 DQoJCQkJCQkkZ3JhYmNhdHMgPSAnalF1ZXJ5KCIjaW1hZ2UtY2F0ZWdvcnkgb3B0aW9uOnNl bGVjdGVkIiknOw0KCQkJCQkJJGpzRWxlbSA9ICR0cmlnZ2VyID0gImpRdWVyeSgnI2ltYWdl LWNhdGVnb3J5JykiOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiZmls ZSI6DQoJCQkJaWYgKCRzdGVwID09ICJmaWxlX2VkaXQiKSB7DQoJCQkJCSRhZGRJdCA9ICgk b25vZmZbZ1R4dCgndGFiX2ZpbGUnKV0gPT0gMSkgPyB0cnVlIDogZmFsc2U7DQoJCQkJCWlm ICgkYWRkSXQpIHsNCgkJCQkJCSRncmFiY2F0cyA9ICdqUXVlcnkoInNlbGVjdFtAbmFtZT1c J2NhdGVnb3J5XCddIG9wdGlvbjpzZWxlY3RlZCIpJzsNCgkJCQkJCSRqc0VsZW0gPSAkdHJp Z2dlciA9ICdqUXVlcnkoInNlbGVjdFtAbmFtZT1cJ2NhdGVnb3J5XCddIiknOw0KCQkJCQl9 DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAibGluayI6DQoJCQkJJGFkZEl0ID0gKCRv bm9mZltnVHh0KCd0YWJfbGluaycpXSA9PSAxKSA/IHRydWUgOiBmYWxzZTsNCgkJCQlpZiAo JGFkZEl0KSB7DQoJCQkJCSR0YWd0b3AgPSAnJzsNCgkJCQkJJGlwbWV0aCA9IHRyKGZMYWJl bENlbGwoc21kX3RhZ3NfZ1R4dCgndGl0bGUnKSwgJycsICdzbWRfdGFncycpIC4gdGRhKCRl ZHRCdG4uYnIuJGlwbWV0aCkpOw0KCQkJCQkkZ3JhYmNhdHMgPSAnalF1ZXJ5KCIjbGluay1j YXRlZ29yeSBvcHRpb246c2VsZWN0ZWQiKSc7DQoJCQkJCSRqc0VsZW0gPSAkdHJpZ2dlciA9 ICJqUXVlcnkoJyNsaW5rLWNhdGVnb3J5JykucGFyZW50KCkiOw0KCQkJCX0NCgkJCQlicmVh azsNCgkJfQ0KDQoJCS8vIEFkZCB0aGUgZHJvcGRvd24gYW5kIGpzIHRvZ2dsZS9jbGVhciBv cHRpb25zIGlmIHJlcXVpcmVkDQoJCWlmICgkYWRkSXQpIHsNCgkJCSRxcyA9IGFycmF5KA0K CQkJCSJldmVudCIgPT4gInNtZF90YWdzIiwNCgkJCSk7DQoNCgkJCSRxc1ZhcnMgPSAiaW5k ZXgucGhwIi5qb2luX3FzKCRxcyk7DQoNCgkJCWlmICgkcXVpY2sgPiAwKSB7DQoJCQkJZWNo byA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7JGpzZGly fXskanN0YWlsfWpxdWVyeS5hdXRvY29tcGxldGUucGFjay5qcyI+PC9zY3JpcHQ+DQo8bGlu ayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJ7JGNzZGlyfXskY3N0 YWlsfWpxdWVyeS5hdXRvY29tcGxldGUuY3NzIj48L3NjcmlwdD4NCg0KRU9KUzsNCgkJCX0N CgkJCWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KalF1 ZXJ5KGZ1bmN0aW9uKCkgew0KCXskanNFbGVtfS5wYXJlbnQoKS5hZnRlcigneyR0YWd0b3B9 eyRpcG1ldGh9Jyk7DQoNCglmdW5jdGlvbiBzbWRfdGFnTGlzdCh0eXApIHsNCgkJdmFyIGdy YWJjYXRzID0gW107DQoJCXskZ3JhYmNhdHN9LmVhY2goZnVuY3Rpb24oKSB7DQoJCSAgIGdy YWJjYXRzLnB1c2goalF1ZXJ5KHRoaXMpLnZhbCgpKTsNCgkJfSk7DQoJCWdyYWJjYXRzID0g Z3JhYmNhdHMuam9pbigiLCIpOw0KDQoJCWpRdWVyeS5wb3N0KCd7JHFzVmFyc30nLCB7IHN0 ZXA6ICJzbWRfdGFnX3BhcmVudGxpc3QiLCBuYW1lOiAnc21kX3RhZ19wYXJlbnQnLCB0eXBl OiB0eXAsIGNhdDogZ3JhYmNhdHMsIGl0ZW1pZDogInskaXRlbUlEfSIgfSwNCgkJCWZ1bmN0 aW9uKGRhdGEpIHsNCgkJCQlqUXVlcnkoIiNzbWRfdGFncyIpLmh0bWwoZGF0YSk7DQoJCQkJ alF1ZXJ5KCIjc21kX3RhZ3NfYnlsaW5rIikuZW1wdHkoKTsNCgkJCQl2YXIgc21kX3RhZ3Bv b2wgPSBbXTsNCgkJCQl2YXIgc21kX3RhZ3NlbCA9IFtdOw0KCQkJCXZhciBzbWRfdGFnbGlu a3MgPSBbXTsNCgkJCQlqUXVlcnkoJyNzbWRfdGFncyBzZWxlY3Qgb3B0aW9uJykuZWFjaChm dW5jdGlvbigpIHsNCgkJCQkJdmFyIGN1cnIgPSBqUXVlcnkodGhpcyk7DQoJCQkJCXZhciB0 eHQgPSBqUXVlcnkudHJpbShjdXJyLnRleHQoKSk7DQoJCQkJCXNtZF90YWdwb29sLnB1c2go dHh0KTsNCg0KDQoJCQkJCWlmIChqUXVlcnkoIiNzbWRfdGFnc19ieWxpbmsiKS50ZXh0KCkg IT0gIiIpIHsNCgkJCQkJCWpRdWVyeSgiI3NtZF90YWdzX2J5bGluayIpLmFwcGVuZCgiICZt aWRkb3QgIik7DQoJCQkJCX0NCg0KCQkJCQlpZiAoY3Vyci5hdHRyKCJzZWxlY3RlZCIpID09 IHRydWUpIHsNCgkJCQkJCXNtZF90YWdzZWwucHVzaCh0eHQpOw0KCQkJCQkJalF1ZXJ5KCIj c21kX3RhZ3NfYnlsaW5rIikuYXBwZW5kKCc8c3BhbiBjbGFzcz0ic21kX3NlbCI+Jyt0eHQr Jzwvc3Bhbj4nKTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCWpRdWVyeSgiI3NtZF90YWdzX2J5 bGluayIpLmFwcGVuZCgnPHNwYW4+Jyt0eHQrJzwvc3Bhbj4nKTsNCgkJCQkJfQ0KCQkJCX0p Ow0KDQoJCQkJalF1ZXJ5KCIjc21kX3RhZ3NfYnlsaW5rIHNwYW4iKS5jbGljayhmdW5jdGlv bigpIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLnRvZ2dsZUNsYXNzKCJzbWRfc2VsIik7DQoJCQkJ CXZhciBsdHh0ID0galF1ZXJ5KHRoaXMpLnRleHQoKTsNCgkJCQkJalF1ZXJ5KCIjc21kX3Rh Z3Mgc2VsZWN0IG9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQkJCQl2YXIgY3VyciA9 IGpRdWVyeSh0aGlzKTsNCgkJCQkJCWlmIChqUXVlcnkudHJpbShjdXJyLnRleHQoKSkgPT0g bHR4dCkgew0KCQkJCQkJCXRoaXMuc2VsZWN0ZWQgPSAhdGhpcy5zZWxlY3RlZDsNCgkJCQkJ CX0NCgkJCQkJfSk7DQoJCQkJfSk7DQoJCQkJalF1ZXJ5KCJ0ZXh0YXJlYVtAbmFtZT0nc21k X3RhZ3NfYnl0ZXh0J10iKS52YWwoc21kX3RhZ3NlbC5qb2luKCIsICIpKTsNCg0KCQkJCWlm ICh7JHF1aWNrfSA+IDApIHsNCgkJCQkJalF1ZXJ5KCJ0ZXh0YXJlYVtAbmFtZT0nc21kX3Rh Z3NfYnl0ZXh0J10iKS5hdXRvY29tcGxldGUoc21kX3RhZ3Bvb2wsIHsNCgkJCQkJCW11bHRp cGxlOiB0cnVlLA0KCQkJCQkJbXVzdE1hdGNoOiAoKCRxdWljaz09Mik/dHJ1ZTpmYWxzZSks DQoJCQkJCQlhdXRvRmlsbDogdHJ1ZQ0KCQkJCQl9KTsNCgkJCQl9DQoJCQkJalF1ZXJ5KCJ0 ZXh0YXJlYVtAbmFtZT0nc21kX3RhZ3NfYnl0ZXh0J10iKS5rZXl1cChmdW5jdGlvbigpIHsN CgkJCQkJc21kX3RhZ3NSZXN5bmNTZWxlY3QoeyRxdWlja30pOw0KCQkJCX0pOw0KCQkJCWpR dWVyeSgnI3NtZF9jbHInKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCQkJalF1ZXJ5KCcjc21k X3RhZ3Mgc2VsZWN0IG9wdGlvbicpLmF0dHIoInNlbGVjdGVkIiwgIiIpOw0KCQkJCX0pOw0K CQkJCWpRdWVyeSgnI3NtZF90b2cnKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCQkJalF1ZXJ5 KCcjc21kX3RhZ3Mgc2VsZWN0IG9wdGlvbicpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQkJCQl0 aGlzLnNlbGVjdGVkID0gIXRoaXMuc2VsZWN0ZWQ7DQoJCQkJCX0pOw0KCQkJCX0pOw0KCQkJ fQ0KCQkpOw0KCX0NCg0KCXNtZF90YWdMaXN0KCd7JGV2ZW50fScpOw0KCWlmICh7JGNsaW5r fSkgew0KCQl7JHRyaWdnZXJ9LmNoYW5nZShmdW5jdGlvbigpIHsNCgkJCXNtZF90YWdMaXN0 KCd7JGV2ZW50fScpOw0KCQl9KTsNCgl9DQoNCglmdW5jdGlvbiBzbWRfdGFnc1Jlc3luY1Nl bGVjdChsdmwpIHsNCgkJdmFyIHRiVGFncyA9IGpRdWVyeSgidGV4dGFyZWFbQG5hbWU9J3Nt ZF90YWdzX2J5dGV4dCddIikudmFsKCkuc3BsaXQoLyxccys/Lyk7DQoJCWpRdWVyeSgiI3Nt ZF90YWdzIHNlbGVjdCBvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQkJdmFyIGN1cnIg PSBqUXVlcnkodGhpcyk7DQoJCQlpZihqUXVlcnkuaW5BcnJheShqUXVlcnkudHJpbShjdXJy LnRleHQoKSksIHRiVGFncykgPT0gLTEpIHsNCgkJCQljdXJyLmF0dHIoInNlbGVjdGVkIiwg IiIpOw0KCQkJfSBlbHNlIHsNCgkJCQljdXJyLmF0dHIoInNlbGVjdGVkIiwgdHJ1ZSk7DQoJ CQl9DQoJCX0pOw0KCX0NCn0pOw0KPC9zY3JpcHQ+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3Mi Pg0KLnNtZF9mYWtlYnRuLA0KI3NtZF90YWdzX2J5bGluayBzcGFuIHsNCgljb2xvcjojNTU1 Ow0KCWN1cnNvcjpwb2ludGVyOw0KfQ0KLnNtZF90YWdpcCB7DQoJbWFyZ2luOi40ZW0gMCAu OGVtOw0KfQ0KLnNtZF9oaWRlIHsNCglkaXNwbGF5Om5vbmU7DQp9DQouc21kX3NlbCB7DQoJ Zm9udC13ZWlnaHQ6Ym9sZDsNCgljb2xvcjojMjIyIWltcG9ydGFudDsNCn0NCjwvc3R5bGU+ DQpFT0pTOw0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8v IFVwZGF0ZSB0aGUgdGFncyB1c2VkIHRhYmxlIGlmIHNvbWUgdGFncyBoYXZlIGJlZW4gYWRk ZWQvc2F2ZWQNCmZ1bmN0aW9uIHNtZF90YWdzX3NhdmVsaXN0KCRldmVudCwgJHN0ZXApIHsN CglpZiAoc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkgew0KCQkkY3RybHMgPSBzbWRfdGFnc19w cmVmX2dldChhcnJheSgnc21kX3RhZ19wX3F0YWcnKSwgMSk7DQoJCSRxdWljayA9ICRjdHJs c1snc21kX3RhZ19wX3F0YWcnXVsndmFsJ107DQoNCgkJJGl0ZW1JRCA9IHNtZF9nZXRJRCgp Ow0KCQlpZiAoJGl0ZW1JRCkgew0KCQkJJHNhdmVTdGVwcyA9IGFycmF5KCdpbWFnZV9zYXZl JywnZmlsZV9zYXZlJywnbGlua19zYXZlJywnbGlua19wb3N0Jyk7DQoJCQlpZiAocHMoJ3Nh dmUnKSB8fCBpbl9hcnJheSgkc3RlcCwgJHNhdmVTdGVwcykpDQoJCQkJc2FmZV9kZWxldGUo U01EX1RBR1UsICdpdGVtX2lkPSInLiRpdGVtSUQuJyIgQU5EIHR5cGU9IicuJGV2ZW50Lici Jyk7DQoJCQkkdGFncyA9IHBzKCdzbWRfdGFnX3BhcmVudCcpOw0KCQkJJHRhZ3NUZXh0ID0g cHJlZ19zcGxpdCgiLyxccys/LyIsIHBzKCdzbWRfdGFnc19ieXRleHQnKSk7DQoJCQlpZiAo JHRhZ3MpIHsNCgkJCQkkdmFscyA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCgkdGFncyBhcyAk dmFsKXsNCgkJCQkJc2FmZV9pbnNlcnQoU01EX1RBR1UsICd0YWdfaWQgPSAiJy4kdmFsLici LCBpdGVtX2lkPSInLiRpdGVtSUQuJyIsIHR5cGU9IicuJGV2ZW50LiciJyk7DQoJCQkJCSR2 YWxzW10gPSAkdmFsOw0KCQkJCX0NCgkNCgkJCQkvLyBJZiB3ZSdyZSBpbiBub24tU1RSSUNU IG1vZGUgYW5kIHRoZXJlIGFyZSBhbnkgdHlwZWQgdGFncyB0aGF0IGFyZSBub3QgaW4gdGhl IHNlbGVjdCBsaXN0LCBjaGVjayB0aGV5IGV4aXN0IGFuZCBhZGQgdGhlbQ0KCQkJCWlmICgk cXVpY2sgPCAyKSB7DQoJCQkJCSRhZGRlZCA9IHNhZmVfY29sdW1uKCJ0aXRsZSIsIFNNRF9U QUcsICJpZCBJTiAoJyIuam9pbigiJywnIiwkdmFscykuIicpIEFORCB0eXBlPSckZXZlbnQn Iik7DQoJCQkJCSR0YWdzVGV4dCA9IGFycmF5X2RpZmYoJHRhZ3NUZXh0LCAkYWRkZWQpOw0K CQkJCQlmb3JlYWNoKCR0YWdzVGV4dCBhcyAkdGFnKSB7DQoJCQkJCQlpZiAoJHRhZyA9PSAi IikgY29udGludWU7DQoJCQkJCQkkZXhpc3RzID0gc2FmZV9maWVsZCgnaWQnLCBTTURfVEFH LCAibmFtZSA9ICckdGFnJyBBTkQgdHlwZSA9ICckZXZlbnQnIik7DQoJCQkJCQlpZiAoJGV4 aXN0cykgew0KCQkJCQkJCXNhZmVfaW5zZXJ0KFNNRF9UQUdVLCAndGFnX2lkID0gIicuJGV4 aXN0cy4nIiwgaXRlbV9pZD0iJy4kaXRlbUlELiciLCB0eXBlPSInLiRldmVudC4nIicpOw0K CQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCi8vIEhhbmRsZSBjaGFuZ2VzIHRvIHRoZSB0YWdzIHRhYmxl IGR1cmluZyBtdWx0aS1pdGVtIGVkaXRzDQpmdW5jdGlvbiBzbWRfdGFnc19tdWx0aV9lZGl0 KCRldmVudCwgJHN0ZXApIHsNCgkvLyBJbiBUWFAgNC4wLjYgdGhlIG9ubHkgdGFicyB0byBh bGxvdyBtdWx0aS1lZGl0cyBhcmUgdGhlIEFydGljbGUgKGxpc3QpIGFuZCBMaW5rIHRhYnMu IENoZWF0IGZvciBub3cNCglpZiAoc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkgew0KCQlzd2l0 Y2ggKCRldmVudCkgew0KCQkJY2FzZSAibGlzdCI6DQoJCQljYXNlICJsaW5rIjoNCgkJCQkk bWV0aG9kID0gcHMoJ2VkaXRfbWV0aG9kJyk7DQoJCQkJJHNlbGVjdGVkID0gcHMoJ3NlbGVj dGVkJyk7DQoJCQkJYnJlYWs7DQoJCQlkZWZhdWx0Og0KCQkJCSRtZXRob2QgPSAiZGVsZXRl IjsNCgkJCQkkc2VsZWN0ZWQgPSBhcnJheShwcygnaWQnKSk7DQoJCQkJYnJlYWs7DQoJCX0N Cg0KCQkvLyAnbGlzdCcgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBlcXVhdGVzIHRvIGFydGlj bGVzDQoJCSR0eXBlID0gKCRldmVudCA9PSAibGlzdCIpID8gImFydGljbGUiIDogJGV2ZW50 Ow0KDQoJCWlmICgkc2VsZWN0ZWQpIHsNCgkJCXN3aXRjaCAoJG1ldGhvZCkgew0KCQkJCWNh c2UgImRlbGV0ZSI6DQoJCQkJCSRpZHMgPSBhcnJheSgpOw0KCQkJCQlmb3JlYWNoICgkc2Vs ZWN0ZWQgYXMgJGlkKSB7DQoJCQkJCQkkaWQgPSBhc3NlcnRfaW50KCRpZCk7DQoJCQkJCQlp ZiAoc2FmZV9kZWxldGUoU01EX1RBR1UsICdpdGVtX2lkID0gJy4kaWQuJyBBTkQgdHlwZT0i Jy4kdHlwZS4nIicpKSB7DQoJCQkJCQkJJGlkc1tdID0gJGlkOw0KCQkJCQkJfQ0KCQkJCQl9 DQoJCQkJCXJldHVybiBqb2luKCcsICcsICRpZHMpOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJ fQ0KCQlyZXR1cm4gJyc7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Ci8vIEdyYWIgdGhlIGN1cnJlbnQgYXJ0aWNsZS9pbWFnZS9maWxlL2xpbmsgSUQNCmZ1bmN0 aW9uIHNtZF9nZXRJRCgpIHsNCglpZighZW1wdHkoJEdMT0JBTFNbJ0lEJ10pKSB7IC8vIG5l d2x5LXNhdmVkIGl0ZW0NCgkJJGl0ZW1JRCA9IGludHZhbCgkR0xPQkFMU1snSUQnXSk7DQoJ fSBlbHNlIHsNCgkJJGl0ZW1JRCA9IChncHMoJ0lEJykpID8gZ3BzKCdJRCcpIDogZ3BzKCdp ZCcpOw0KCX0NCglyZXR1cm4gJGl0ZW1JRDsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfdGFnc190YWJsZV9leGlzdCgkYWxsPScnKSB7DQoJaWYg KCRhbGwpIHsNCgkJJHRibHMgPSBhcnJheShTTURfVEFHID0+IDcsIFNNRF9UQUdDID0+IDIs IFNNRF9UQUdVID0+IDMpOw0KCQkkb3V0ID0gY291bnQoJHRibHMpOw0KCQlmb3JlYWNoICgk dGJscyBhcyAkdGJsID0+ICRjb2xzKSB7DQoJCQlpZiAoY291bnQoQHNhZmVfc2hvdygnY29s dW1ucycsICR0YmwpKSA9PSAkY29scykgew0KCQkJCSRvdXQtLTsNCgkJCX0NCgkJfQ0KCQly ZXR1cm4gKCRvdXQ9PTApID8gMSA6IDA7DQoJfSBlbHNlIHsNCgkJcmV0dXJuKEBzYWZlX3No b3coJ2NvbHVtbnMnLCBTTURfVEFHKSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIEFkZCB0YWcgdGFibGVzIGlmIG5vdCBhbHJlYWR5IGluc3RhbGxlZA0K ZnVuY3Rpb24gc21kX3RhZ3NfdGFibGVfaW5zdGFsbCgpIHsNCgkkdmVyc2lvbiA9IG15c3Fs X2dldF9zZXJ2ZXJfaW5mbygpOw0KCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAwOw0K CWlmICgkdmVyc2lvbiA8ICI0LjEuMiIpIHsNCgkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQn XSsrOw0KCQl0cmlnZ2VyX2Vycm9yKCJzbWRfdGFncyByZXF1aXJlcyBNeVNRTCB2NC4xLjIg b3IgZ3JlYXRlci4iKTsNCgl9IGVsc2Ugew0KCQkkcmV0ID0gJyc7DQoJCSRzcWwgPSBhcnJh eSgpOw0KCQkkc3FsW10gPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCIuU01EX1RB Ry4iYCAoDQoJCQlgaWRgIGludCg2KSBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwNCgkJCWBu YW1lYCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KCQkJYHR5cGVgIHZhcmNo YXIoNjQpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQoJCQlgcGFyZW50YCB2YXJjaGFyKDY0KSBO T1QgTlVMTCBkZWZhdWx0ICcnLA0KCQkJYGxmdGAgaW50KDYpIE5PVCBOVUxMIGRlZmF1bHQg JzAnLA0KCQkJYHJndGAgaW50KDYpIE5PVCBOVUxMIGRlZmF1bHQgJzAnLA0KCQkJYHRpdGxl YCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnJywNCgkJCVBSSU1BUlkgS0VZIChg aWRgKQ0KCQkpIEVOR0lORT1NeUlTQU0gUEFDS19LRVlTPTEgQVVUT19JTkNSRU1FTlQ9NSAi Ow0KDQoJCWlmICghc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkgew0KCQkJJHNxbFtdID0gIklO U0VSVCBJTlRPIGAiLlNNRF9UQUcuImAgVkFMVUVTICgxLCAncm9vdCcsICdhcnRpY2xlJywg JycsIDEsIDIsICdyb290JykiOw0KCQkJJHNxbFtdID0gIklOU0VSVCBJTlRPIGAiLlNNRF9U QUcuImAgVkFMVUVTICgyLCAncm9vdCcsICdsaW5rJywgJycsIDEsIDIsICdyb290JykiOw0K CQkJJHNxbFtdID0gIklOU0VSVCBJTlRPIGAiLlNNRF9UQUcuImAgVkFMVUVTICgzLCAncm9v dCcsICdpbWFnZScsICcnLCAxLCAyLCAncm9vdCcpIjsNCgkJCSRzcWxbXSA9ICJJTlNFUlQg SU5UTyBgIi5TTURfVEFHLiJgIFZBTFVFUyAoNCwgJ3Jvb3QnLCAnZmlsZScsICcnLCAxLCAy LCAncm9vdCcpIjsNCgkJfQ0KDQoJCSRzcWxbXSA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVY SVNUUyBgIi5TTURfVEFHQy4iYCAoDQoJCQlgdGFnX2lkYCBpbnQoNikgTk9UIE5VTEwgZGVm YXVsdCAnMCcsDQoJCQlgY2F0X2lkYCBpbnQoNikgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJ CQlQUklNQVJZIEtFWSAoYHRhZ19pZGAsYGNhdF9pZGApDQoJCSkgRU5HSU5FPU15SVNBTTsg IjsNCg0KCQkkc3FsW10gPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCIuU01EX1RB R1UuImAgKA0KCQkJYGl0ZW1faWRgIGludCgxMSkgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJ CQlgdGFnX2lkYCBpbnQoNikgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJCQlgdHlwZWAgdmFy Y2hhcig2NCkgTk9UIE5VTEwgZGVmYXVsdCAnJywNCgkJCVBSSU1BUlkgS0VZIChgaXRlbV9p ZGAsYHRhZ19pZGApDQoJCSkgRU5HSU5FPU15SVNBTTsgIjsNCg0KCQlmb3JlYWNoICgkc3Fs IGFzICRxcnkpIHsNCgkJCSRyZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOw0KCQkJaWYgKCEkcmV0 KSB7DQoJCQkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOw0KCQkJCWVjaG8gIjxiPiIu JEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNxbF9lcnJvcigpLiI8YnIg Lz5cbiI7DQoJCQkJZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7DQoJCQl9DQoJCX0NCgl9 DQoNCglpZiAoJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9PSAwKSB7DQoJCSRtZXNzYWdl ID0gc21kX3RhZ3NfZ1R4dCgndGJsX2luc3RhbGxlZCcpOw0KCQlzbWRfdGFnc19wcmVmc19p bnN0YWxsKCRtZXNzYWdlKTsNCgl9IGVsc2Ugew0KCQkkbWVzc2FnZSA9IHNtZF90YWdzX2dU eHQoJ3RibF9ub3RfaW5zdGFsbGVkJyk7DQoJCXNtZF90YWdzX3ByZWZzX3Nob3coJG1lc3Nh Z2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBEcm9wIHRh ZyB0YWJsZXMgaWYgaW4gZGF0YWJhc2UNCmZ1bmN0aW9uIHNtZF90YWdzX3RhYmxlX3JlbW92 ZSgpIHsNCgkkcmV0ID0gJyc7DQoJJHNxbCA9IGFycmF5KCk7DQoJJEdMT0JBTFNbJ3R4cF9l cnJfY291bnQnXSA9IDA7DQoJaWYgKHNtZF90YWdzX3RhYmxlX2V4aXN0KCkpIHsNCgkJJHNx bFtdID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTICIgLlNNRF9UQUcuICI7ICI7DQoJCSRzcWxb XSA9ICJEUk9QIFRBQkxFIElGIEVYSVNUUyAiIC5TTURfVEFHVS4gIjsgIjsNCgkJZm9yZWFj aCAoJHNxbCBhcyAkcXJ5KSB7DQoJCQkkcmV0ID0gc2FmZV9xdWVyeSgkcXJ5KTsNCgkJCWlm ICghJHJldCkgew0KCQkJCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsNCgkJCQllY2hv ICI8Yj4iLiRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10uIi48L2I+ICIubXlzcWxfZXJyb3Io KS4iPGJyIC8+XG4iOw0KCQkJCWVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+XG4iOw0KCQkJfQ0K CQl9DQoJfQ0KCWlmICgkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID09IDApIHsNCgkJJG1l c3NhZ2UgPSBzbWRfdGFnc19nVHh0KCd0YmxfcmVtb3ZlZCcpOw0KCQlzbWRfdGFnc19wcmVm c19yZW1vdmUoJG1lc3NhZ2UpOw0KCX0gZWxzZSB7DQoJCSRtZXNzYWdlID0gc21kX3RhZ3Nf Z1R4dCgndGJsX25vdF9yZW1vdmVkJyk7DQoJCXNtZF90YWdzX3ByZWZzX3Nob3coJG1lc3Nh Z2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBBZGQgcGx1 Z2luIHByZWZlcmVuY2VzIHRvIHByZWZzDQpmdW5jdGlvbiBzbWRfdGFnc19wcmVmc19pbnN0 YWxsKCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRzbWRfdGFnX3ByZWZzOw0KDQoJJGN0ciA9 IHNhZmVfY291bnQoJ3R4cF9wcmVmcycsICdldmVudD0ic21kX3RhZ3MiJykgKyAxOw0KCWZv cmVhY2ggKCRzbWRfdGFnX3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmICgh ZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsNCgkJCSRpZCA9IHNh ZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCdwcmVmc19pZD0xLCBuYW1lPScuZG9RdW90ZShkb1Ns YXNoKCRwcmVmKSkuJywgdmFsPScuZG9RdW90ZShkb1NsYXNoKCRkZmx0KSkuJywgZXZlbnQ9 InNtZF90YWdzIiwgcG9zaXRpb249IicuJGN0ci4nIicpOw0KCQkJJGN0cisrOw0KCQl9DQoJ fQ0KCSRtZXNzYWdlIC49IHNtZF90YWdzX2dUeHQoJ3ByZWZzX2luc3RhbGxlZCcpOw0KCXNt ZF90YWdzX3ByZWZzX3Nob3coJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIFJlbW92ZSBwbHVnaW4gcHJlZmVyZW5jZXMgZnJvbSBwcmVmcyB0YWJs ZS4NCi8vIE5vdGU6IGJvdGggcGFydHMgb2Ygc21kX3RhZ3NfcHJlZnMgYXJyYXkgYXJlIGl0 ZXJhdGVkIG92ZXIgdG8gdGlkeSB1cCBhbnkgbGVnYWN5IHNldHRpbmdzDQpmdW5jdGlvbiBz bWRfdGFnc19wcmVmc19yZW1vdmUoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF90YWdf cHJlZnM7DQoNCglmb3JlYWNoIChhcnJheV9tZXJnZSgkc21kX3RhZ19wcmVmc1swXSwkc21k X3RhZ19wcmVmc1sxXSkgYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGZldGNoKCduYW1l JywndHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgn dHhwX3ByZWZzJywnbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpKTsNCgkJfQ0KCX0N CgkkbWVzc2FnZSAuPSBzbWRfdGFnc19nVHh0KCdwcmVmc19yZW1vdmVkJyk7DQoJc21kX3Rh Z3NfcHJlZnNfc2hvdygkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KLy8gU2F2ZXMgcGx1Z2luIHByZWZlcmVuY2VzDQpmdW5jdGlvbiBzbWRfdGFnc19w cmVmc191cGRhdGUoJG1lc3NhZ2UgPSAnJykgew0KCWdsb2JhbCAkc21kX3RhZ19wcmVmczsN CgkkcG9zdCA9IGRvU2xhc2goc3RyaXBQb3N0KCkpOw0KCWZvcmVhY2ggKCRzbWRfdGFnX3By ZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmIChpc3NldCgkcG9zdFskcHJlZl0p KSB7DQoJCQlzYWZlX3VwZGF0ZSgidHhwX3ByZWZzIiwgInZhbCA9ICciLiRwb3N0WyRwcmVm XS4iJyIsICJuYW1lID0gJyIuZG9TbGFzaCgkcHJlZikuIicgYW5kIHByZWZzX2lkID0gMSIp Ow0KCQl9DQoJfQ0KCSRtZXNzYWdlIC49IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJ c21kX3RhZ3NfcHJlZnNfc2hvdygkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KLy8gU3BsaXQgYSBtdWx0aS1jaGFyIHByZWZlcmVuY2UgdmFsdWUgaW50 byBhbiBhcnJheSBvZiBrZXlzL3ZhbHVlcy4NCi8vIE5vdGU6IHZhbHVlIGlzIHBhc3NlZCBp biBhbmQgbm90IHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUgcHJlZnMgYXJyYXkgaW4gdGhpcyBm dW5jdGlvbiAtIGludGVudGlvbmFsbHkNCmZ1bmN0aW9uIHNtZF90YWdzX3ByZWZfZXhwbG9k ZSgkdmFsKSB7DQoJJG9yZGVyID0gYXJyYXlfdmFsdWVzKGFycmF5KGdUeHQoJ3RhYl9saXN0 JyksZ1R4dCgndGFiX2ltYWdlJyksZ1R4dCgndGFiX2ZpbGUnKSxnVHh0KCd0YWJfbGluaycp KSk7DQoJJG9ub2ZmID0gYXJyYXlfdmFsdWVzKHByZWdfc3BsaXQoJy8vJywgJHZhbCwgLTEs IFBSRUdfU1BMSVRfTk9fRU1QVFkpKTsNCgkkb3V0ID0gYXJyYXkoKTsNCglmb3JlYWNoKCRv cmRlciBhcyAka2V5MSA9PiAkdmFsdWUxKSB7DQoJCSRvdXRbKHN0cmluZykkdmFsdWUxXSA9 ICRvbm9mZlska2V5MV07DQoJfQ0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIEdldCB2YWx1ZXMgZnJvbSBwcmVmcyAtIHBhc3MgZWl0aGVy IGEgc2luZ2xlIGtleSBvciBhbiBhcnJheS4NCi8vIElmIDJuZCBhcmcgaXMgc2V0IGFuZCB0 aGUgcHJlZiBkb2Vzbid0IGV4aXN0LCByZWFkIGl0IGZyb20gdGhlIHBsdWdpbiBkZWZhdWx0 DQpmdW5jdGlvbiBzbWRfdGFnc19wcmVmX2dldCgka2V5cywgJGRmbHQ9MCkgew0KCWdsb2Jh bCAkc21kX3RhZ19wcmVmczsNCg0KCWlmICghaXNfYXJyYXkoJGtleXMpKSB7DQoJCSRrZXlz ID0gYXJyYXkoJGtleXMpOw0KCX0NCgkkcHJlZmtleXMgPSBkb1F1b3RlKGltcGxvZGUoIics JyIsZG9TbGFzaCgka2V5cykpKTsNCgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFsLGh0bWwn LCd0eHBfcHJlZnMnLCduYW1lIElOICgnLiRwcmVma2V5cy4nKSBPUkRFUiBCWSBuYW1lJyk7 DQoJJHByZWZvdXQgPSBhcnJheSgpOw0KCWZvcmVhY2goJHJzIGFzICRwcmVmKSB7DQoJCSRw cmVmb3V0WyRwcmVmWyduYW1lJ11dID0gYXJyYXlfc2xpY2UoJHByZWYsMSk7DQoJfQ0KCWlm ICgkZGZsdCkgew0KCQlmb3JlYWNoICgka2V5cyBhcyAkcHJlZikgew0KCQkJaWYgKCFpc3Nl dCgkcHJlZm91dFskcHJlZl0pKSB7DQoJCQkJJHByZWZvdXRbJHByZWZdID0gJHNtZF90YWdf cHJlZnNbMF1bJHByZWZdOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiAkcHJlZm91dDsNCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBDb21tb24gYnV0dG9ucyBvbiB0 aGUgYWRtaW4gcGFuZWwNCmZ1bmN0aW9uIHNtZF90YWdzX3ByZWZzX2J1dHRvbnMoKSB7DQoJ JHJldCA9IGFycmF5ICgNCgkJJ2J0blByZWZzU2F2ZScgPT4gZklucHV0KCdzdWJtaXQnLCAn c3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpLA0KCQknYnRuSW5zdGFsbFRibCcg PT4gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9c21kX3RhZ3MnLmEuJ3N0 ZXA9c21kX3RhZ3NfdGFibGVfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJ bnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF90YWdzX2dUeHQoJ3RibF9pbnN0YWxsX2xi bCcpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JywNCgkJJ2J0blJlbW92ZVRibCcgPT4gJzxm b3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9c21kX3RhZ3MnLmEuJ3N0ZXA9c21k X3RhZ3NfdGFibGVfcmVtb3ZlIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiIG9uc3VibWl0PSJy ZXR1cm4gdmVyaWZ5KFwnJy5nVHh0KCdhcmVfeW91X3N1cmUnKS4nXCcpIj4nLmZJbnB1dCgn c3VibWl0JywgJ3N1Ym1pdCcsIHNtZF90YWdzX2dUeHQoJ3RibF9yZW1vdmVfbGJsJyksICdz bWFsbGVyYm94JykuJzwvZm9ybT4nLA0KCQknYnRuSW5zdGFsbCcgPT4gJzxmb3JtIG1ldGhv ZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9c21kX3RhZ3MnLmEuJ3N0ZXA9c21kX3RhZ3NfcHJl ZnNfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0Jywg J3N1Ym1pdCcsIHNtZF90YWdzX2dUeHQoJ3ByZWZfaW5zdGFsbF9sYmwnKSwgJ3NtYWxsZXJi b3gnKS4nPC9mb3JtPicsDQoJCSdidG5SZW1vdmUnID0+ICc8Zm9ybSBtZXRob2Q9InBvc3Qi IGFjdGlvbj0iP2V2ZW50PXNtZF90YWdzJy5hLidzdGVwPXNtZF90YWdzX3ByZWZzX3JlbW92 ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcs IHNtZF90YWdzX2dUeHQoJ3ByZWZfcmVtb3ZlX2xibCcpLCAnc21hbGxlcmJveCcpLic8L2Zv cm0+JywNCgkJJ2J0blByZWZzJyA9PiAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9l dmVudD1zbWRfdGFncycuYS4nc3RlcD1zbWRfdGFnc19wcmVmc19kaXNwbGF5IiBzdHlsZT0i ZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX3RhZ3Nf Z1R4dCgncHJlZl9zaG93X2xibCcpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JywNCgkJJ2J0 bk1hbmFnZScgPT4gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9c21kX3Rh Z3MnLmEuJ3N0ZXA9c21kX3RhZ3NfbWFuYWdlIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicu ZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX3RhZ3NfZ1R4dCgnbWFuYWdlX2xibCcp LCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JywNCgkJJ2J0bkhlbHAnID0+ICc8YSBocmVmPSI/ ZXZlbnQ9cGx1Z2luJy5hLidzdGVwPXBsdWdpbl9oZWxwJy5hLiduYW1lPXNtZF90YWdzX2Fk bWluIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPignLiBnVHh0KCdoZWxwJykgLicpPC9hPics DQoJCSdidG5DcmVhdGUnID0+IGZJbnB1dCgnc3VibWl0JywgJ3NtZF90YWdfY3JlYXRlJywg Z1R4dCgnY3JlYXRlJyksICdzbWFsbGVyYm94JywgJycsICdzbWRfdGFnc19zdGVwPXRoaXMu bmFtZTtzbWRfcHJlc3ViKCknKSwNCgkJJ2J0blNhdmUnID0+IGZJbnB1dCgnc3VibWl0Jywg J3NtZF90YWdfc2F2ZScsIGdUeHQoJ3NhdmUnKSwgJ3NtYWxsZXJib3gnLCAnJywgJ3NtZF90 YWdzX3N0ZXA9dGhpcy5uYW1lO3NtZF9wcmVzdWIoKScpLA0KCQknYnRuRGVsZXRlJyA9PiBm SW5wdXQoJ3N1Ym1pdCcsICdzbWRfdGFnX2RlbGV0ZScsICfDlycsICdzbWFsbGVyYm94Jywg JycsICdzbWRfdGFnc19zdGVwPXRoaXMubmFtZTtzbWRfcHJlc3ViKCknKSwNCgkJJ2J0blN0 eWxlJyA9PiAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInLA0KCSk7DQoJcmV0dXJu ICRyZXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQSBzdHViIHRo YXQgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGEgJG1lc3NhZ2UNCmZ1bmN0aW9uIHNtZF90YWdz X3ByZWZzX2Rpc3BsYXkoKSB7DQoJCXNtZF90YWdzX3ByZWZzX3Nob3coJycpOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERpc3BsYXkgdGhlIHByZWZzIHBhbmVs DQpmdW5jdGlvbiBzbWRfdGFnc19wcmVmc19zaG93KCRtZXNzYWdlKSB7DQoJZ2xvYmFsICRz bWRfdGFnX3ByZWZzOw0KDQoJcGFnZXRvcChzbWRfdGFnc19nVHh0KCdwcmVmc190aXRsZScp LCRtZXNzYWdlKTsNCglleHRyYWN0KHNtZF90YWdzX3ByZWZzX2J1dHRvbnMoKSk7DQoNCgkv LyBQcmVmcyBjaGVjaw0KCSRwcmVmc2V0ID0gc21kX3RhZ3NfcHJlZl9nZXQoYXJyYXlfa2V5 cygkc21kX3RhZ19wcmVmc1swXSkpOw0KCSRudW1SZXFQcmVmcyA9IGNvdW50KCRzbWRfdGFn X3ByZWZzWzBdKTsNCgkkbnVtUHJlZnMgPSBjb3VudCgkcHJlZnNldCk7DQoNCgllY2hvIDw8 PEVPSlMNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkvLyBDb25jYXRlbmF0 ZSBjaGVja2JveCBvcHRpb25zIGZvciBzdG9yYWdlDQoJZnVuY3Rpb24gc21kX3ByZXN1Yigp IHsNCgkJdmFyIHNtZF9vdXQgPSAiIjsNCgkJalF1ZXJ5KCI6Y2hlY2tib3giKS5lYWNoKGZ1 bmN0aW9uKCkgew0KCQkJc21kX291dCArPSAodGhpcy5jaGVja2VkKSA/IDEgOiAwOw0KCQl9 KTsNCgkJalF1ZXJ5KCIjc21kX3RhZ19wX2VuYWJsZSIpLnZhbChzbWRfb3V0KTsNCgkJCXJl dHVybiB0cnVlOw0KCQl9DQo8L3NjcmlwdD4NCkVPSlM7DQoJZWNobyBzdGFydFRhYmxlKCds aXN0Jyk7DQoJaWYgKHNtZF90YWdzX3RhYmxlX2V4aXN0KDEpKSB7DQoJCS8vIFRhYmxlcyBp bnN0YWxsZWQNCgkJaWYgKCRudW1QcmVmcyA9PSAkbnVtUmVxUHJlZnMpIHsNCgkJCS8vIFBy ZWZzIGFsbCBpbnN0YWxsZWQNCgkJCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfdGFnc19nVHh0 KCdwcmVmc190aXRsZScpKS4nICcuJGJ0bkhlbHAsICcgY29sc3Bhbj0iNSInKSk7DQoJCQll Y2hvIHRyKA0KCQkJCWZMYWJlbENlbGwoc21kX3RhZ3NfZ1R4dCgnY29udHJvbCcpLic6JykN CgkJCQkuIHRkYSgkYnRuUmVtb3ZlLCAkYnRuU3R5bGUpDQoJCQkJLiB0ZGEoJGJ0blJlbW92 ZVRibCwgJGJ0blN0eWxlKQ0KCQkJCS4gdGRhKCRidG5NYW5hZ2UsICRidG5TdHlsZSkNCgkJ CSk7DQoJCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PXNtZF90 YWdzJy5hLidzdGVwPXNtZF90YWdzX3ByZWZzX3VwZGF0ZSIgb25zdWJtaXQ9InJldHVybiBz bWRfcHJlc3ViKCk7Ij4nOw0KCQkJJGN0ciA9IDE7DQoJCQlmb3JlYWNoICgkcHJlZnNldCBh cyAkcG5hbSA9PiAkcGFycikgew0KCQkJCSRwdmFsID0gJHBhcnJbJ3ZhbCddOw0KCQkJCSRv dXQgPSAoaXNzZXQoJHNtZF90YWdfcHJlZnNbMl1bJGN0cl0pKSA/IHRyKHRkY3MoaGVkKCRz bWRfdGFnX3ByZWZzWzJdWyRjdHJdLCAyLCAnIGNsYXNzPSJwcmVmLWhlYWRpbmciJyksIDQp KSA6ICcnOw0KCQkJCSRsYWJlbCA9ICc8bGFiZWwgZm9yPSInLiRwbmFtLiciPicuc21kX3Rh Z3NfZ1R4dCgkcG5hbSkuJzo8L2xhYmVsPic7DQoJCQkJJG91dCAuPSB0ZGEoJGxhYmVsLCAn IHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsiJyk7 DQoNCgkJCQlzd2l0Y2goJHBuYW0pIHsNCgkJCQkJY2FzZSAic21kX3RhZ19wX2VuYWJsZSI6 DQoJCQkJCQkkb3B0aW9ucyA9IHNtZF90YWdzX3ByZWZfZXhwbG9kZSgkcHZhbCk7DQoJCQkJ CQkkb3V0IC49ICc8dGQgaWQ9InNtZF90YWdzX2VuYWJsZV9ob2xkZXIiIGNvbHNwYW49IjMi Pic7DQoJCQkJCQlmb3JlYWNoICgkb3B0aW9ucyBhcyAkb3B0ID0+ICRvbm9mZikgew0KCQkJ CQkJCSRvdXQgLj0gJzxsYWJlbD4nLiRvcHQuJzwvbGFiZWw+JyAuIGNoZWNrYm94KCJlbmFi bGUiLiRvcHQsIDEsICRvbm9mZikgLiAnJm5ic3A7Jm5ic3A7JzsNCgkJCQkJCX0NCgkJCQkJ CSRvdXQgLj0gJzwvdGQ+JzsNCgkJCQkJCSRvdXQgLj0gZklucHV0KCdoaWRkZW4nLCAnc21k X3RhZ19wX2VuYWJsZScsIGltcGxvZGUoJG9wdGlvbnMpLCcnLCcnLCcnLCcnLCcnLCdzbWRf dGFnX3BfZW5hYmxlJyk7DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAic21kX3RhZ19wX3Np emUiOg0KCQkJCQljYXNlICJzbWRfdGFnX3RfY29scyI6DQoJCQkJCWNhc2UgInNtZF90YWdf dF9oaWxpdGUiOg0KCQkJCQljYXNlICJzbWRfdGFnX3RfaG92ZXIiOg0KCQkJCQljYXNlICJz bWRfdGFnX3RfaW5kZW50IjoNCgkJCQkJY2FzZSAic21kX3RhZ191X3BuYW0iOg0KCQkJCQlj YXNlICJzbWRfdGFnX3VfcHR5cCI6DQoJCQkJCWNhc2UgInNtZF90YWdfdV9zZWMiOg0KCQkJ CQkJJG91dCAuPSB0YWcoZklucHV0KCd0ZXh0JywgJHBuYW0sICRwdmFsLCAnZWRpdCcsICcn LCAnJywgMTIsICcnLCAkcG5hbSksICd0ZCcsICcgY29sc3Bhbj0iMyInKTsNCgkJCQkJCWJy ZWFrOw0KCQkJCQljYXNlICJzbWRfdGFnX3BfcXRwYXRoIjoNCgkJCQkJY2FzZSAic21kX3Rh Z19wX3F0c3R5bCI6DQoJCQkJCQkkb3V0IC49IHRhZyhmSW5wdXQoJ3RleHQnLCAkcG5hbSwg JHB2YWwsICdlZGl0JywgJycsICcnLCAzMCwgJycsICRwbmFtKSwgJ3RkJywgJyBjb2xzcGFu PSIzIicpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgInNtZF90YWdfdF9hdXRvIjoNCgkJ CQkJCSRvdXQgLj0gdGRjcyhvbm9mZlJhZGlvKCRwbmFtLCAkcHZhbCksMyk7DQoJCQkJCQli cmVhazsNCgkJCQkJY2FzZSAic21kX3RhZ190X2NvbHNvcmQiOg0KCQkJCQkJJG91dCAuPSB0 ZGNzKHJhZGlvKCRwbmFtLDAsKCgkcHZhbD09MCk/MTowKSkuc21kX3RhZ3NfZ1R4dCgnYnlf Y29sdW1uJykuIiAiIC4gcmFkaW8oJHBuYW0sMSwoKCRwdmFsPT0xKT8xOjApKS5zbWRfdGFn c19nVHh0KCdieV9yb3cnKS4iICIsMyk7DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAic21k X3RhZ190X2RlbHRyZWUiOg0KCQkJCQkJJG91dCAuPSB0ZGNzKHJhZGlvKCRwbmFtLDAsKCgk cHZhbD09MCk/MTowKSkuc21kX3RhZ3NfZ1R4dCgnY2hpbGRyZW5fcHJvJykuIiAiIC4gcmFk aW8oJHBuYW0sMSwoKCRwdmFsPT0xKT8xOjApKS5zbWRfdGFnc19nVHh0KCdjaGlsZHJlbl9k ZWwnKS4iICIsMyk7DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAic21kX3RhZ190X2RlbHVz ZWQiOg0KCQkJCQljYXNlICJzbWRfdGFnX3RfY291bnQiOg0KCQkJCQljYXNlICJzbWRfdGFn X3BfbGlua2NhdCI6DQoJCQkJCQkkb3V0IC49IHRkY3MoeWVzbm9SYWRpbygkcG5hbSwgJHB2 YWwpLDMpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgInNtZF90YWdfcF9maXJzdCI6DQoJ CQkJCQkkb3V0IC49IHRkY3MocmFkaW8oJHBuYW0sMCwoKCRwdmFsPT0wKT8xOjApKS5zbWRf dGFnc19nVHh0KCdwcmVmc19wYW5lJykuIiAiIC4gcmFkaW8oJHBuYW0sMSwoKCRwdmFsPT0x KT8xOjApKS5zbWRfdGFnc19nVHh0KCd0YWdzX3BhbmUnKS4iICIsMyk7DQoJCQkJCQlicmVh azsNCgkJCQkJY2FzZSAic21kX3RhZ19wX3F0YWciOg0KCQkJCQkJJG91dCAuPSB0ZGNzKHJh ZGlvKCRwbmFtLDAsKCgkcHZhbD09MCk/MTowKSkuZ1R4dCgnb2ZmJykuIiAiIC4gcmFkaW8o JHBuYW0sMSwoKCRwdmFsPT0xKT8xOjApKS5zbWRfdGFnc19nVHh0KCdhY19zdGQnKS4iICIu IiAiIC4gcmFkaW8oJHBuYW0sMiwoKCRwdmFsPT0yKT8xOjApKS5zbWRfdGFnc19nVHh0KCdh Y19zdHInKS4iICIsMyk7DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAic21kX3RhZ19wX2lu cHV0IjoNCgkJCQkJCSRvdXQgLj0gdGRjcyhyYWRpbygkcG5hbSwwLCgoJHB2YWw9PTApPzE6 MCkpLnNtZF90YWdzX2dUeHQoJ3NlbF9saXN0JykuIiAiIC4gcmFkaW8oJHBuYW0sMSwoKCRw dmFsPT0xKT8xOjApKS5zbWRfdGFnc19nVHh0KCd0ZXh0Ym94JykuIiAiLiByYWRpbygkcG5h bSwyLCgoJHB2YWw9PTIpPzE6MCkpLnNtZF90YWdzX2dUeHQoJ3RleHRsaXN0JykuIiAiLDMp Ow0KCQkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJCWVjaG8gdHIoJG91dCk7DQoJCQkJJGN0cisr Ow0KCQkJfQ0KCQkJZWNobyB0cih0ZGEoJGJ0blByZWZzU2F2ZSwgJGJ0blN0eWxlKSk7DQoJ CQllY2hvICc8L2Zvcm0+JzsNCgkJfSBlbHNlIGlmICgkbnVtUHJlZnMgPiAwICYmICRudW1Q cmVmcyA8ICRudW1SZXFQcmVmcykgew0KCQkJLy8gUHJlZnMgcG9zc2libHkgY29ycnVwdCwg b3IgcGx1Z2luIHVwZGF0ZWQNCgkJCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfdGFnc19nVHh0 KCdwcmVmc19zb21lJykpLmJyLmJyDQoJCQkJCS5zbWRfdGFnc19nVHh0KCdwcmVmc19zb21l X2V4cGxhaW4nKS5ici5icg0KCQkJCQkuc21kX3RhZ3NfZ1R4dCgncHJlZnNfc29tZV9vcHRz MScpLCAnIGNvbHNwYW49IjIiJykNCgkJCSk7DQoJCQllY2hvIHRyKA0KCQkJCXRkYSgkYnRu UmVtb3ZlLCRidG5TdHlsZSkNCgkJCQkuIHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKQ0K CQkJKTsNCgkJfSBlbHNlIHsNCgkJCS8vIFByZWZzIG5vdCBpbnN0YWxsZWQNCgkJCWVjaG8g dHIodGRhKHNtZF90YWdzX2dUeHQoJ3ByZWZzX25vdF9pbnN0YWxsZWQnKSwgJyBjb2xzcGFu PSIyIicpKTsNCgkJCWVjaG8gdHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgkJ fQ0KCX0gZWxzZSB7DQoJCS8vIFRhYmxlcyBub3QgaW5zdGFsbGVkDQoJCWVjaG8gdHIodGRh KHN0cm9uZyhzbWRfdGFnc19nVHh0KCdwcmVmc19zb21lX3RibCcpKS5ici5icg0KCQkJCS5z bWRfdGFnc19nVHh0KCdwcmVmc19zb21lX2V4cGxhaW4nKS5ici5icg0KCQkJCS5zbWRfdGFn c19nVHh0KCdwcmVmc19zb21lX29wdHMyJyksICcgY29sc3Bhbj0iMiInKQ0KCQkpOw0KCQll Y2hvIHRyKHRkYSgkYnRuSW5zdGFsbFRibCwgJGJ0blN0eWxlKSk7DQoJfQ0KCWVjaG8gZW5k VGFibGUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBNYW5hZ2Ug dGFncyBpbiBhIHNpbWlsYXIgd2F5IHRvIHRoZSBjYXRlZ29yaWVzIHRhYg0KZnVuY3Rpb24g c21kX3RhZ3NfbWFuYWdlKCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRzbWRfdGFnX3ByZWZz Ow0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NtZF90YWdfbmFtZScsICdzbWRf dGFnX3RpdGxlJywgJ3NtZF90YWdfcGFyZW50JywgJ3NtZF90YWdfY2F0JywgJ3NtZF90YWdf dHlwZScsICdzbWRfdGFnX2lkJykpKSk7DQoJcGFnZXRvcChzbWRfdGFnc19nVHh0KCdtYW5h Z2VfbGJsJyksJG1lc3NhZ2UpOw0KCWV4dHJhY3Qoc21kX3RhZ3NfcHJlZnNfYnV0dG9ucygp KTsNCg0KCS8vIFByZWZzIGNoZWNrDQoJJHByZWZzZXQgPSBzbWRfdGFnc19wcmVmX2dldChh cnJheV9rZXlzKCRzbWRfdGFnX3ByZWZzWzBdKSk7DQoJJG51bVJlcVByZWZzID0gY291bnQo JHNtZF90YWdfcHJlZnNbMF0pOw0KCSRudW1QcmVmcyA9IGNvdW50KCRwcmVmc2V0KTsNCg0K CSR0eXBlcyA9IGFycmF5KA0KCQknYXJ0aWNsZScgPT4gdWNmaXJzdChndHh0KCdhcnRpY2xl JykpLA0KCQknaW1hZ2UnID0+IGd0eHQoJ3RhZ19pbWFnZScpLA0KCQknZmlsZScgPT4gZ3R4 dCgnZmlsZScpLA0KCQknbGluaycgPT4gZ3R4dCgndGFnX2xpbmsnKSwNCgkJKTsNCg0KCS8v IE1ha2UgdXAgdGhlIHJhZGlvIGJ1dHRvbnMNCgkkc21kX3RhZ190eXBlID0gKCFlbXB0eSgk c21kX3RhZ190eXBlKSkgPyAkc21kX3RhZ190eXBlIDogJ2FydGljbGUnOw0KDQoJJHJhZGlv cyA9IGFycmF5KCk7DQoJZm9yZWFjaCAoJHR5cGVzIGFzICRrZXkgPT4gJHZhbCkgew0KCQkk aWQgPSAnc21kX3RhZ3NfdHlwZS0nLiRrZXk7DQoJCSRyYWRpb3NbXSA9IG4udC5yYWRpbygn c21kX3RhZ3NfdHlwZScsICRrZXksICgkc21kX3RhZ190eXBlID09ICRrZXkpID8gMSA6IDAs ICRpZCkuDQoJCQkJJzxsYWJlbCBmb3I9IicuJGlkLiciPicuJHZhbC4nPC9sYWJlbD4nOw0K CX0NCgkkcmFkaW9zID0gam9pbihzcC5zcCwgJHJhZGlvcykubjsNCg0KCS8vIENyZWF0ZSBh bGwgdGhlIGxpc3RzIGJ1dCBoaWRlIHRoZW0gd2l0aCBDU1MuIGpRdWVyeSB0YWtlcyBvdmVy IGFuZCBzd2l0Y2hlcyBiZXR3ZWVuIHRoZW0gb24gZGVtYW5kDQoJaWYgKHNtZF90YWdzX3Rh YmxlX2V4aXN0KDEpICYmICRudW1QcmVmcyA9PSAkbnVtUmVxUHJlZnMpIHsNCgkJJHRhZ0Nv bHMgPSAoJHByZWZzZXRbJ3NtZF90YWdfdF9jb2xzJ11bJ3ZhbCddID4gMCkgPyAkcHJlZnNl dFsnc21kX3RhZ190X2NvbHMnXVsndmFsJ10gOiAxOw0KCQkkY29sT3JkZXIgPSAoJHByZWZz ZXRbJ3NtZF90YWdfdF9jb2xzb3JkJ11bJ3ZhbCddID09IDApID8gImJ5Y29sIiA6ICJieXJv dyI7DQoJCSRjb3VudHMgPSAkcHJlZnNldFsnc21kX3RhZ190X2NvdW50J11bJ3ZhbCddOw0K CQkkY2xpbmsgPSAkcHJlZnNldFsnc21kX3RhZ19wX2xpbmtjYXQnXVsndmFsJ107DQoNCgkJ Zm9yZWFjaCAoYXJyYXlfa2V5cygkdHlwZXMpIGFzICR0eXBlKSB7DQoJCQkkZGl2dGFnaWQg PSAic21kX3RhZ3NfZ3JwXyIuJHR5cGU7DQoJCQkkdGFnbGlzdCA9ICJ0YWdzXyIuJHR5cGU7 DQoJCQkkJHRhZ2xpc3QgPSBzbWRfdGFnX2xpc3RfYWRtKA0KCQkJCWFycmF5KA0KCQkJCQki dHlwZSIgPT4gJHR5cGUsDQoJCQkJCSJ3cmFwdGFnIiA9PiAidGFibGU6Ii4kdGFnQ29scy4i OmNvbHM6Ii4kY29sT3JkZXIsDQoJCQkJCSJjb3VudCIgPT4gJGNvdW50cywNCgkJCQkJImlu ZGVudCIgPT4gJHByZWZzZXRbJ3NtZF90YWdfdF9pbmRlbnQnXVsndmFsJ10NCgkJCQkpDQoJ CQkpOw0KDQoJCQkvL1RPRE86IEZpbmQgYSB3YXkgdG8gYWRkIHRoZSBkaXZ0YWdpZCBvbmx5 IHdoZW4gbmVlZGVkLiBBdCB0aGUgbW9tZW50IGl0IGFwcGVhcnMgdHdpY2Ugb24gdGhlIHBh Z2UgKGlsbGVnYWwgRE9NKQ0KCQkJJHRhZ291dFskdHlwZV0gPSAnPGRpdiBpZD0iJy4kZGl2 dGFnaWQuJyI+Jy4kJHRhZ2xpc3QuJzwvZGl2Pic7DQoJCQllY2hvICc8ZGl2IGNsYXNzPSJz bWRfaGlkZGVuIj4nLiR0YWdvdXRbJHR5cGVdLic8L2Rpdj4nOw0KCQl9DQoNCgkJJHFzID0g YXJyYXkoDQoJCQkiZXZlbnQiID0+ICJzbWRfdGFncyIsDQoJCSk7DQoNCgkJJHFzVmFycyA9 ICJpbmRleC5waHAiLmpvaW5fcXMoJHFzKTsNCg0KCQllY2hvIDw8PEVPSlMNCjxzY3JpcHQg dHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgl2YXIgc21kX3RhZ3Nfc3RlcCA9ICcnOw0KDQoJ Ly8gUGFnZSBpbml0aWFsaXNhdGlvbg0KCWpRdWVyeShmdW5jdGlvbigpIHsNCgkJLy8gSW5k aWNhdGUgcGFyZW50IGxpc3QgaXMgbG9hZGluZw0KCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93 cGFycyIpLmFqYXhTdGFydChmdW5jdGlvbigpIHsNCgkJCWpRdWVyeSh0aGlzKS5mYWRlVG8o Im5vcm1hbCIsIDAuMzMpOw0KCQl9KS5hamF4U3RvcChmdW5jdGlvbigpIHsNCgkJCWpRdWVy eSh0aGlzKS5mYWRlVG8oIm5vcm1hbCIsIDEpOw0KCQl9KTsNCg0KCQkvLyBTd2l0Y2ggYmV0 d2VlbiB0eXBlcw0KCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX3R5cGUnXSIpLmNo YW5nZShmdW5jdGlvbiAoKSB7DQoJCQl2YXIgc21kX25ld2NvbnRlbnQgPSBqUXVlcnkoIiNz bWRfdGFnc19ncnBfIitqUXVlcnkodGhpcykudmFsKCkpLmh0bWwoKTsNCgkJCWpRdWVyeSgi aW5wdXRbbmFtZT0nc21kX3RhZ19pZCddIikudmFsKCcnKTsgLy8gQ2hhbmdpbmcgdHlwZSBm b3JjZXMgYW55ICdzYXZlJyB0byB0cmlnZ2VyIHRoZSAnY3JlYXRlJyBiZWhhdmlvdXINCgkJ CWpRdWVyeSgiLnNtZF90YWdzX3Nob3dsaXN0IikuaHRtbChzbWRfbmV3Y29udGVudCk7DQoJ CQl2YXIgbmFtID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnX29uYW1lJ10iKS52YWwo KTsNCgkJCXZhciB0aWQgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdfaWQnXSIpLnZh bCgpOw0KCQkJdmFyIHR5cCA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ3NfdHlwZSdd OmNoZWNrZWQiKS52YWwoKTsNCgkJCXZhciBwYXIgPSAncm9vdCc7DQoJCQl2YXIgY2F0ID0g Jyc7DQoNCgkJCWpRdWVyeSgiLnNtZF90YWdzX3Nob3dsaXN0IHRkIHNwYW5bbmFtZT0nc21k X3RhZ25hbSddIikuZWFjaChmdW5jdGlvbigpIHsNCgkJCQlpZiAoalF1ZXJ5KHRoaXMpLnRl eHQoKSA9PSBuYW0pIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLnBhcmVudCgpLmFkZENsYXNzKCdz bWRfY3VycmVudCcpOw0KCQkJCQlwYXIgPSBqUXVlcnkodGhpcykuc2libGluZ3MoIjplcSgy KSIpLnRleHQoKTsNCgkJCQkJY2F0ID0galF1ZXJ5KHRoaXMpLnNpYmxpbmdzKCI6ZXEoMyki KS50ZXh0KCk7DQoJCQkJCXRpZCA9ICh0aWQgPT0gJycpID8galF1ZXJ5KHRoaXMpLnNpYmxp bmdzKCI6ZXEoMCkiKS50ZXh0KCkgOiB0aWQ7DQoJCQkJfSBlbHNlIHsNCgkJCQkJalF1ZXJ5 KHRoaXMpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdzbWRfY3VycmVudCcpOw0KCQkJCX0NCgkJ CX0pOw0KDQoJCQkvLyBSZS1pbnNlcnQgdGhlIElEIGlmIHRoaXMgbmFtZWQgaXRlbSBleGlz dHMgaW4gdGhlIG5ldyBsaXN0DQoJCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdfaWQn XSIpLnZhbCh0aWQpOw0KDQoJCQkvLyBVcGRhdGUgdGhlIFVJDQoJCQlzbWRfcGFyZW50SGFu ZGxlcihuYW0sIHR5cCwgdGlkLCBwYXIpOw0KCQkJc21kX2NhdEhhbmRsZXIoY2F0LCB0eXAp Ow0KCQkJalF1ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCBzZWxlY3Qgb3B0aW9uW3ZhbHVlPSci K2NhdCsiJ10iKS5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOw0KCQkJc21kX2F1dG9mb2N1cygp Ow0KCQkJc21kX2NlbGxIYW5kbGVyKCk7DQoJCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90 YWdzX3R5cGUnXSIpLmVhY2goZnVuY3Rpb24gKCkgew0KCQkJCWlmIChqUXVlcnkodGhpcyku dmFsKCkgPT0gdHlwKSB7DQoJCQkJCWpRdWVyeSh0aGlzKS5uZXh0KCkuYWRkQ2xhc3MoJ3Nt ZF9jdXJyZW50Jyk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLm5leHQoKS5y ZW1vdmVDbGFzcygnc21kX2N1cnJlbnQnKTsNCgkJCQl9DQoJCQl9KTsNCgkJfSk7DQoNCgkJ Ly8gQ2FsbCB0aGUgb25jaGFuZ2UgaGFuZGxlciBmb3IgdGhlIGN1cnJlbnQgdHlwZQ0KCQlq UXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX3R5cGUnXTpjaGVja2VkIikuY2hhbmdlKCk7 DQoNCgkJLy8gQXV0b3RhZyAtIFRPRE86IGZvcmVpZ24gY2hhcmFjdGVyIGR1bWJkb3duIGZv ciBVUkkNCgkJaWYgKHskcHJlZnNldFsnc21kX3RhZ190X2F1dG8nXVsndmFsJ119KSB7DQoJ CQlzcGNSRSA9IC9ccy9nOw0KCQkJYmFkUkUgPSAvW15hLXpBLVowLTlfXC1dL2c7DQoJCQlq UXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX25ld3RpdGxlJ10iKS5rZXl1cChmdW5jdGlv bigpIHsNCgkJCQl0YWduYW1lID0galF1ZXJ5KHRoaXMpLnZhbCgpLnJlcGxhY2Uoc3BjUkUs ICctJykucmVwbGFjZShiYWRSRSwgJycpLnRvTG93ZXJDYXNlKCk7DQoJCQkJalF1ZXJ5KCJp bnB1dFtuYW1lPSdzbWRfdGFnc19uZXduYW1lJ10iKS52YWwodGFnbmFtZSk7DQoJCQl9KTsN CgkJfQ0KCQkvLyBCaW5kIEVudGVyIGtleSB0byBjcmVhdGUNCgkJalF1ZXJ5KCJpbnB1dFtu YW1lXj0nc21kX3RhZyddIikua2V5dXAoZnVuY3Rpb24oZXYpIHsNCgkJCWlmIChldi5rZXlD b2RlID09IDEzKSB7DQoJCQkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnX2NyZWF0ZSdd IikuY2xpY2soKTsNCgkJCX0NCgkJfSk7DQoJfSk7DQoNCgkvLyBLZWVwIHRyYWNrIG9mIHdo aWNoIHRhZyBoYXMgYmVlbiBjbGlja2VkIHNvIGl0IGNhbiBiZSBlZGl0ZWQvdXBkYXRlZA0K CWZ1bmN0aW9uIHNtZF9jZWxsSGFuZGxlcigpIHsNCgkJLy8gQ2VsbCBoaWdobGlnaHRzDQoJ CWpRdWVyeSgiLnNtZF90YWdzX3Nob3dsaXN0IHRkIikuZWFjaChmdW5jdGlvbigpIHsNCgkJ CWlmIChqUXVlcnkudHJpbShqUXVlcnkodGhpcykudGV4dCgpKSAhPSAiIikgew0KCQkJCWpR dWVyeSh0aGlzKS5ob3ZlcigNCgkJCQkJZnVuY3Rpb24gKCkgew0KCQkJCQkJalF1ZXJ5KHRo aXMpLmFkZENsYXNzKCdzbWRfaG92ZXInKTsNCgkJCQkJfSwNCgkJCQkJZnVuY3Rpb24gKCkg ew0KCQkJCQkJalF1ZXJ5KHRoaXMpLnJlbW92ZUNsYXNzKCdzbWRfaG92ZXInKTsNCgkJCQkJ fQ0KCQkJCSkNCgkJCQkuY2xpY2soZnVuY3Rpb24oKSB7DQoJCQkJCXZhciBuYW0gPSBqUXVl cnkodGhpcykuY2hpbGRyZW4oIjplcSgwKSIpLnRleHQoKTsNCgkJCQkJdmFyIHRpZCA9IGpR dWVyeSh0aGlzKS5jaGlsZHJlbigiOmVxKDEpIikudGV4dCgpOw0KCQkJCQl2YXIgdHRsID0g alF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6ZXEoMikiKS50ZXh0KCk7DQoJCQkJCXZhciBwYXIg PSBqUXVlcnkodGhpcykuY2hpbGRyZW4oIjplcSgzKSIpLnRleHQoKTsNCgkJCQkJdmFyIGNh dCA9IGpRdWVyeSh0aGlzKS5jaGlsZHJlbigiOmVxKDQpIikudGV4dCgpOw0KCQkJCQl2YXIg dHlwID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc190eXBlJ106Y2hlY2tlZCIpLnZh bCgpDQoJCQkJCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ19vbmFtZSddIikudmFsKG5h bSk7DQoJCQkJCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ3NfbmV3bmFtZSddIikudmFs KG5hbSk7DQoJCQkJCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ19pZCddIikudmFsKHRp ZCk7DQoJCQkJCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ3NfbmV3dGl0bGUnXSIpLnZh bCh0dGwpOw0KCQkJCQlqUXVlcnkoIi5zbWRfdGFnc19saW5rY2F0IHNlbGVjdCBvcHRpb25b dmFsdWU9JyIrY2F0KyInXSIpLmF0dHIoInNlbGVjdGVkIiwgdHJ1ZSk7DQoJCQkJCXNtZF9w YXJlbnRIYW5kbGVyKG5hbSwgdHlwLCB0aWQsIHBhcik7DQoJCQkJCWpRdWVyeSgiLnNtZF90 YWdzX3Nob3dsaXN0IHRkIikucmVtb3ZlQ2xhc3MoJ3NtZF9jdXJyZW50Jyk7DQoJCQkJCWpR dWVyeSh0aGlzKS5hZGRDbGFzcygnc21kX2N1cnJlbnQnKTsNCgkJCQkJc21kX2F1dG9mb2N1 cygpOw0KCQkJCX0pOw0KCQkJfQ0KCQl9KTsNCgl9DQoNCgkvLyBBc2sgVFhQIGZvciB0aGUg cGFyZW50IGRyb3Bkb3duIHdpdGhvdXQgY2hpbGQgZW50cmllcw0KCWZ1bmN0aW9uIHNtZF9w YXJlbnRIYW5kbGVyKG5hbSwgdHlwLCB0aWQsIHBhcikgew0KCQlqUXVlcnkucG9zdCgneyRx c1ZhcnN9JywgeyBzdGVwOiAic21kX3RhZ19wYXJlbnRsaXN0IiwgbmFtZTogbmFtLCB0eXBl OiB0eXAsIGlkOiB0aWQgfSwNCgkJCWZ1bmN0aW9uKGRhdGEpIHsNCgkJCQlqUXVlcnkoIi5z bWRfdGFnc19zaG93cGFycyIpLmh0bWwoZGF0YSk7DQoJCQkJaWYgKHBhciA9PSAicm9vdCIg fHwgcGFyID09ICIiKSB7DQoJCQkJCWpRdWVyeSgiLnNtZF90YWdzX3Nob3dwYXJzIHNlbGVj dCBvcHRpb246Zmlyc3QiKS5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOw0KCQkJCX0gZWxzZSB7 DQoJCQkJCWpRdWVyeSgiLnNtZF90YWdzX3Nob3dwYXJzIHNlbGVjdCBvcHRpb25bdmFsdWU9 JyIrcGFyKyInXSIpLmF0dHIoInNlbGVjdGVkIiwgdHJ1ZSk7DQoJCQkJfQ0KCQkJfQ0KCQkp Ow0KCX0NCg0KCS8vIEFzayBUWFAgZm9yIHRoZSBjYXRlZ29yeSBkcm9wZG93bg0KCWZ1bmN0 aW9uIHNtZF9jYXRIYW5kbGVyKGNhdCwgdHlwKSB7DQoJCWpRdWVyeSgiLnNtZF90YWdzX2xp bmtjYXQiKS5mYWRlVG8oIm5vcm1hbCIsIDAuMzMpOw0KCQlqUXVlcnkucG9zdCgneyRxc1Zh cnN9JywgeyBzdGVwOiAic21kX3RhZ19jYXRsaXN0IiwgbmFtZTogY2F0LCB0eXBlOiB0eXAg fSwNCgkJCWZ1bmN0aW9uKGRhdGEpIHsNCgkJCQlqUXVlcnkoIi5zbWRfdGFnc19saW5rY2F0 IikuaHRtbChkYXRhKTsNCgkJCQlpZiAoY2F0ID09ICJyb290IiB8fCBjYXQgPT0gIiIpIHsN CgkJCQkJalF1ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCBzZWxlY3Qgb3B0aW9uOmZpcnN0Iiku YXR0cigic2VsZWN0ZWQiLCB0cnVlKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlqUXVlcnkoIi5z bWRfdGFnc19saW5rY2F0IHNlbGVjdCBvcHRpb25bdmFsdWU9JyIrY2F0KyInXSIpLmF0dHIo InNlbGVjdGVkIiwgdHJ1ZSk7DQoJCQkJfQ0KCQkJCWpRdWVyeSgiLnNtZF90YWdzX2xpbmtj YXQiKS5mYWRlVG8oIm5vcm1hbCIsIDEpOw0KCQkJfQ0KCQkpOw0KCX0NCg0KCWZ1bmN0aW9u IHNtZF9hdXRvZm9jdXMoKSB7DQoJCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ3NfbmV3 dGl0bGUnXSIpLmZvY3VzKCkuc2VsZWN0KCk7DQoJfQ0KDQoJLy8gTWFrZSBzdXJlIHdoYXQg aXMgaW4gdGhlIGJveGVzIGlzIFBPU1RlZCB2aWEgdGhlIGhpZGRlbiBmb3JtDQoJZnVuY3Rp b24gc21kX3ByZXN1YigpIHsNCgkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzdGVwJ10iKS52YWwo c21kX3RhZ3Nfc3RlcCk7DQoJCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ19uYW1lJ10i KS52YWwoalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc19uZXduYW1lJ10iKS52YWwoKSk7 DQoJCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ190aXRsZSddIikudmFsKGpRdWVyeSgi aW5wdXRbbmFtZT0nc21kX3RhZ3NfbmV3dGl0bGUnXSIpLnZhbCgpKTsNCgkJalF1ZXJ5KCJp bnB1dFtuYW1lPSdzbWRfdGFnX3R5cGUnXSIpLnZhbChqUXVlcnkoImlucHV0W25hbWU9J3Nt ZF90YWdzX3R5cGUnXTpjaGVja2VkIikudmFsKCkpOw0KCQlqUXVlcnkoImlucHV0W25hbWU9 J3NtZF90YWdfcGFyZW50J10iKS52YWwoalF1ZXJ5KCIuc21kX3RhZ3Nfc2hvd3BhcnMgb3B0 aW9uOnNlbGVjdGVkIikudmFsKCkpOw0KCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdf Y2F0J10iKS52YWwoalF1ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCBvcHRpb246c2VsZWN0ZWQi KS52YWwoKSk7DQoJCWpRdWVyeSgiI3NtZF9wb3N0aXQiKS5zdWJtaXQoKTsNCgl9DQo8L3Nj cmlwdD4NCg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5zbWRfaGlkZGVuIHsNCglkaXNw bGF5Om5vbmU7DQp9DQouc21kX2hvdmVyIHsNCgljdXJzb3I6cG9pbnRlcjsNCgliYWNrZ3Jv dW5kOiN7JHByZWZzZXRbJ3NtZF90YWdfdF9ob3ZlciddWyd2YWwnXX07DQp9DQouc21kX2N1 cnJlbnQgew0KCWZvbnQtd2VpZ2h0OmJvbGQ7DQoJYmFja2dyb3VuZDojeyRwcmVmc2V0Wydz bWRfdGFnX3RfaGlsaXRlJ11bJ3ZhbCddfTsNCn0NCi5zbWRfdGFnc19zaG93cGFycywNCi5z bWRfdGFnc19saW5rY2F0IHsNCgl3aWR0aDoxMmVtOw0KfQ0KPC9zdHlsZT4NCkVPSlM7DQoN Cgl9DQoNCgkvLyBUaGUgdGFnIG1hbmFnZW1lbnQgdGFibGUNCgllY2hvIHN0YXJ0VGFibGUo J2NvbnRyb2wnLCcnLCcnLDUpOw0KCWlmIChzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJ CS8vIFRhYmxlcyBpbnN0YWxsZWQNCgkJaWYgKCRudW1QcmVmcyA9PSAkbnVtUmVxUHJlZnMp IHsNCgkJCS8vIFByZWZzIGFsbCBpbnN0YWxsZWQNCgkJCWVjaG8gdHIoDQoJCQkJZkxhYmVs Q2VsbChzbWRfdGFnc19nVHh0KCdjb250cm9sJykuJzonKQ0KCQkJCS4gdGRhKCRidG5QcmVm cywgJGJ0blN0eWxlKQ0KCQkJKTsNCgkJCWVjaG8gZW5kVGFibGUoKTsNCgkJCWVjaG8gJzxm b3JtIG1ldGhvZD0iUE9TVCIgaWQ9InNtZF9wb3N0aXQiIGFjdGlvbj0iP2V2ZW50PXNtZF90 YWdzIiBvbnN1Ym1pdD0icmV0dXJuIHNtZF9wcmVzdWIoKTsiPic7DQoJCQllY2hvIGhJbnB1 dCgnc3RlcCcsICcnKTsNCgkJCWVjaG8gaElucHV0KCdzbWRfdGFnX2lkJywgJHNtZF90YWdf aWQpOw0KCQkJZWNobyBoSW5wdXQoJ3NtZF90YWdfbmFtZScsICcnKTsNCgkJCWVjaG8gaElu cHV0KCdzbWRfdGFnX29uYW1lJywgJHNtZF90YWdfbmFtZSk7DQoJCQllY2hvIGhJbnB1dCgn c21kX3RhZ19wYXJlbnQnLCAnJyk7DQoJCQllY2hvIGhJbnB1dCgnc21kX3RhZ19jYXQnLCAn Jyk7DQoJCQllY2hvIGhJbnB1dCgnc21kX3RhZ190aXRsZScsICcnKTsNCgkJCWVjaG8gaElu cHV0KCdzbWRfdGFnX3R5cGUnLCAnJyk7DQoJCQllY2hvICc8L2Zvcm0+JzsNCgkJCWVjaG8g c3RhcnRUYWJsZSgnbGlzdCcpOw0KCQkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF90YWdzX2dU eHQoJ21hbmFnZV9sYmwnKSkuJyAnLiRidG5IZWxwLCAnIGNvbHNwYW49IjExIicpKTsNCgkJ CWVjaG8gdHIoDQoJCQkJZkxhYmVsQ2VsbChnVHh0KCd0aXRsZScpLic6JykNCgkJCQkuIHRk KGZJbnB1dCgndGV4dCcsICdzbWRfdGFnc19uZXd0aXRsZScsICRzbWRfdGFnX3RpdGxlKSkN CgkJCQkuIHRkKGdUeHQoJ3BhcmVudCcpLic6JykNCgkJCQkuIHRkKCcnLCAnJywgJ3NtZF90 YWdzX3Nob3dwYXJzJykNCgkJCQkuICgoJGNsaW5rKQ0KCQkJCQk/IHRkKHNtZF90YWdzX2dU eHQoJ2NsaW5rX2xibCcpLic6JykNCgkJCQkJCS4gdGQoJycsICcnLCAnc21kX3RhZ3NfbGlu a2NhdCcpDQoJCQkJCTogdGQoc3ApLnRkKHNwKQ0KCQkJCSkNCgkJCQkuIGZMYWJlbENlbGwo Z1R4dCgnbmFtZScpLic6JykNCgkJCQkuIHRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3RhZ3Nf bmV3bmFtZScsICRzbWRfdGFnX25hbWUpKQ0KCQkJCS4gdGRhKCRidG5TYXZlLCAkYnRuU3R5 bGUpDQoJCQkJLiB0ZGEoJGJ0bkNyZWF0ZSwgJGJ0blN0eWxlKQ0KCQkJCS4gdGRhKCRidG5E ZWxldGUsICRidG5TdHlsZSkNCgkJCSk7DQoJCQllY2hvIHRyKA0KCQkJCWZMYWJlbENlbGwo c21kX3RhZ3NfZ1R4dCgnZmlsdGVyJykuJzonKQ0KCQkJCS4gdGRjcygkcmFkaW9zLCAxMCkN CgkJCSk7DQoJCQllY2hvIHRyKA0KCQkJCXRkKHNwKQ0KCQkJCS4gdGRjcygkdGFnb3V0WyRz bWRfdGFnX3R5cGVdLCAxMCwgJycsICdzbWRfdGFnc19zaG93bGlzdCcpDQoJCQkpOw0KCQl9 IGVsc2UgaWYgKCRudW1QcmVmcyA+IDAgJiYgJG51bVByZWZzIDwgJG51bVJlcVByZWZzKSB7 DQoJCQkvLyBQcmVmcyBwb3NzaWJseSBjb3JydXB0LCBvciBwbHVnaW4gdXBkYXRlZA0KCQkJ ZWNobyB0cigNCgkJCQl0ZGEoc3Ryb25nKHNtZF90YWdzX2dUeHQoJ3ByZWZzX3NvbWUnKSku YnIuYnINCgkJCQkJLnNtZF90YWdzX2dUeHQoJ3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJy DQoJCQkJCS5zbWRfdGFnc19nVHh0KCdwcmVmc19zb21lX29wdHMxJyksICcgY29sc3Bhbj0i MiInKQ0KCQkJKTsNCgkJCWVjaG8gdHIoDQoJCQkJdGRhKCRidG5SZW1vdmUsJGJ0blN0eWxl KQ0KCQkJCS4gdGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpDQoJCQkpOw0KCQl9IGVsc2Ug ew0KCQkJLy8gUHJlZnMgbm90IGluc3RhbGxlZA0KCQkJZWNobyB0cih0ZGEoc21kX3RhZ3Nf Z1R4dCgncHJlZnNfbm90X2luc3RhbGxlZCcpLCAnIGNvbHNwYW49IjIiJykpOw0KCQkJZWNo byB0cih0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCQl9DQoJfSBlbHNlIHsNCgkJ Ly8gVGFibGVzIG5vdCBpbnN0YWxsZWQNCgkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF90YWdz X2dUeHQoJ3ByZWZzX3NvbWVfdGJsJykpLmJyLmJyDQoJCQkJLnNtZF90YWdzX2dUeHQoJ3By ZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJLnNtZF90YWdzX2dUeHQoJ3ByZWZzX3Nv bWVfb3B0czInKSwgJyBjb2xzcGFuPSIyIicpDQoJCSk7DQoJCWVjaG8gdHIodGRhKCRidG5J bnN0YWxsVGJsLCAkYnRuU3R5bGUpKTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFN0b3JlIHRoZSB0YWcgdGhhdCBpcyBj dXJyZW50bHkgYmVpbmcgZWRpdGVkDQpmdW5jdGlvbiBzbWRfdGFnX3NhdmUoKSB7DQoJZXh0 cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NtZF90YWdfb25hbWUnLCAnc21kX3RhZ19uYW1l JywgJ3NtZF90YWdfdGl0bGUnLCAnc21kX3RhZ19wYXJlbnQnLCAnc21kX3RhZ19jYXQnLCAn c21kX3RhZ190eXBlJywgJ3NtZF90YWdfaWQnKSkpKTsNCg0KCSRtZXNzYWdlID0gJyc7DQoJ JHNtZF90YWdfcGFyZW50ID0gKCFlbXB0eSgkc21kX3RhZ19wYXJlbnQpKSA/ICRzbWRfdGFn X3BhcmVudCA6ICdyb290JzsNCgkkc21kX3RhZ19uYW1lID0gKCFlbXB0eSgkc21kX3RhZ19u YW1lKSkgPyBzYW5pdGl6ZUZvclVybCgkc21kX3RhZ19uYW1lKSA6ICcnOw0KDQoJLy8gQ2Fu J3QgdXNlIHNhZmVfdXBzZXJ0KCkgYmVjYXVzZSB0aGUgV0hFUkUgaXMgZm9yIElEIEFORCB0 eXBlDQoJaWYgKGVtcHR5KCRzbWRfdGFnX2lkKSkgew0KCQkvLyBDcmVhdGUNCgkJaWYgKGVt cHR5KCRzbWRfdGFnX25hbWUpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF90YWdzX2dUeHQoJ25v X25hbWUnLCBhcnJheSgne3R5cGV9JyA9PiB1Y2ZpcnN0KCRzbWRfdGFnX3R5cGUpKSk7DQoJ CX0gZWxzZSB7DQoJCQkkZXhpc3RzID0gc2FmZV9maWVsZCgnbmFtZScsIFNNRF9UQUcsICJu YW1lID0gJyRzbWRfdGFnX25hbWUnIEFORCB0eXBlID0gJyRzbWRfdGFnX3R5cGUnIik7DQoJ CQkkcGFyZXggPSBzYWZlX2ZpZWxkKCduYW1lJywgU01EX1RBRywgIm5hbWUgPSAnJHNtZF90 YWdfcGFyZW50JyBBTkQgdHlwZSA9ICckc21kX3RhZ190eXBlJyIpOw0KCQkJaWYgKCRleGlz dHMpIHsNCgkJCQkkbWVzc2FnZSA9IHNtZF90YWdzX2dUeHQoJ2V4aXN0cycsIGFycmF5KCd7 bmFtZX0nID0+ICRzbWRfdGFnX25hbWUsICd7dHlwZX0nID0+IHVjZmlyc3QoJHNtZF90YWdf dHlwZSkpKTsNCgkJCX0gZWxzZSB7DQoJCQkJJHNtZF90YWdfaWQgPSBzYWZlX2luc2VydCgN CgkJCQkJU01EX1RBRywNCgkJCQkJIm5hbWU9JyRzbWRfdGFnX25hbWUnLCB0aXRsZT0nJHNt ZF90YWdfdGl0bGUnLCBwYXJlbnQ9JyIuKCgkcGFyZXgpID8gJHNtZF90YWdfcGFyZW50IDog J3Jvb3QnKS4iJywgdHlwZT0nJHNtZF90YWdfdHlwZSciDQoJCQkJKTsNCg0KCQkJCWlmICgk c21kX3RhZ19pZCA+IDApIHsNCgkJCQkJaWYgKCRzbWRfdGFnX2NhdCkgew0KCQkJCQkJc2Fm ZV9pbnNlcnQoU01EX1RBR0MsInRhZ19pZD0nJHNtZF90YWdfaWQnLCBjYXRfaWQ9KFNFTEVD VCBpZCBGUk9NIHR4cF9jYXRlZ29yeSBXSEVSRSBuYW1lPSckc21kX3RhZ19jYXQnIEFORCB0 eXBlPSckc21kX3RhZ190eXBlJykiKTsNCgkJCQkJfQ0KCQkJCQkkbWVzc2FnZSA9IHNtZF90 YWdzX2dUeHQoJ2NyZWF0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkc21kX3RhZ19uYW1lLCAn e3R5cGV9JyA9PiB1Y2ZpcnN0KCRzbWRfdGFnX3R5cGUpKSk7DQoJCQkJfSBlbHNlIHsNCgkJ CQkJJG1lc3NhZ2UgPSBzbWRfdGFnc19nVHh0KCdub3RfY3JlYXRlZCcsIGFycmF5KCd7bmFt ZX0nID0+ICRzbWRfdGFnX25hbWUsICd7dHlwZX0nID0+IHVjZmlyc3QoJHNtZF90YWdfdHlw ZSkpKTsNCgkJCQl9DQoJCQl9DQoJCQkJCX0NCgl9IGVsc2Ugew0KCQkvLyBVcGRhdGUgLSBu byBuZWVkIHRvIG1haW50YWluIHJlZmVyZW50aWFsIGludGVncml0eSB1bmxpa2UgdHhwX2Nh dHMNCgkJLy8gc2luY2UgdGFncyBhcmUgc3RvcmVkIGFnYWluc3QgaXRlbSBJRHMNCgkJJGV4 aXN0aW5nX2lkID0gc2FmZV9maWVsZCgnaWQnLCBTTURfVEFHLCAibmFtZSA9ICckc21kX3Rh Z19uYW1lJyBhbmQgdHlwZSA9ICckc21kX3RhZ190eXBlJyIpOw0KDQoJCWlmICgkZXhpc3Rp bmdfaWQgYW5kICRleGlzdGluZ19pZCAhPSAkc21kX3RhZ19pZCkgew0KCQkJJG1lc3NhZ2Ug PSBzbWRfdGFnc19nVHh0KCdleGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiAkc21kX3RhZ19u YW1lLCAne3R5cGV9JyA9PiB1Y2ZpcnN0KCRzbWRfdGFnX3R5cGUpKSk7DQoJCX0gZWxzZSB7 DQoJCQlpZiAoc2FmZV91cGRhdGUoDQoJCQkJCVNNRF9UQUcsDQoJCQkJCSJuYW1lPSckc21k X3RhZ19uYW1lJywgdGl0bGU9JyRzbWRfdGFnX3RpdGxlJywgcGFyZW50PSckc21kX3RhZ19w YXJlbnQnIiwNCgkJCQkJInR5cGU9JyRzbWRfdGFnX3R5cGUnIEFORCBpZD0kc21kX3RhZ19p ZCINCgkJCQkpKSB7DQoJCQkJc2FmZV91cGRhdGUoU01EX1RBRywgInBhcmVudD0nJHNtZF90 YWdfbmFtZSciLCAicGFyZW50PSckc21kX3RhZ19vbmFtZScgQU5EIHR5cGU9JyRzbWRfdGFn X3R5cGUnIik7DQoJCQkJaWYgKCRzbWRfdGFnX2NhdCkgew0KCQkJCQlzYWZlX3Vwc2VydChT TURfVEFHQywgImNhdF9pZD0oU0VMRUNUIGlkIEZST00gdHhwX2NhdGVnb3J5IFdIRVJFIG5h bWU9JyRzbWRfdGFnX2NhdCcgQU5EIHR5cGU9JyRzbWRfdGFnX3R5cGUnKSIsICJ0YWdfaWQg PSAnJHNtZF90YWdfaWQnIik7DQoJCQkJfSBlbHNlIHsNCgkJCQkJc2FmZV9kZWxldGUoU01E X1RBR0MsICJ0YWdfaWQ9JHNtZF90YWdfaWQiKTsNCgkJCQl9DQoJCQkJJG1lc3NhZ2UgPSBz bWRfdGFnc19nVHh0KCd1cGRhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHNtZF90YWdfbmFt ZSwgJ3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBlKSkpOw0KCQkJfSBlbHNlIHsN CgkJCQkkbWVzc2FnZSA9IHNtZF90YWdzX2dUeHQoJ25vdF91cGRhdGVkJywgYXJyYXkoJ3tu YW1lfScgPT4gJHNtZF90YWdfbmFtZSwgJ3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190 eXBlKSkpOw0KCQkJfQ0KCQl9DQoJfQ0KCXJlYnVpbGRfdHJlZV9mdWxsKCRzbWRfdGFnX3R5 cGUsIFNNRF9UQUcpOw0KDQoJLy8gRm9yY2Ugc21kX3RhZ19pZCB0byB0aGUgbmV3IElEIHNv IGl0IGNhbiBiZSBpbW1lZGlhdGVseSBlZGl0ZWQNCgkkX1BPU1RbJ3NtZF90YWdfaWQnXSA9 ICRzbWRfdGFnX2lkOw0KDQoJc21kX3RhZ3NfbWFuYWdlKCRtZXNzYWdlKTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBTdG9yZSBuZXcgdGFnIC0gdXNlcyBzbWRf dGFnX3NhdmUgd2l0aG91dCB0aGUgSUQvb2xkX25hbWUNCmZ1bmN0aW9uIHNtZF90YWdfY3Jl YXRlKCkgew0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdzbWRfdGFnX25hbWUnLCAn c21kX3RhZ190aXRsZScsICdzbWRfdGFnX3BhcmVudCcsICdzbWRfdGFnX3R5cGUnKSkpKTsN Cgl1bnNldCgkX1BPU1RbJ3NtZF90YWdfaWQnXSk7DQoJc21kX3RhZ19zYXZlKCk7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRGVsZXRlIGN1cnJlbnRseSBlZGl0 ZWQgdGFnLiBSZXNwZWN0cyBub2Nsb2JiZXIvdHJlZSBpZiBwcmVmcyBzZXQNCmZ1bmN0aW9u IHNtZF90YWdfZGVsZXRlKCkgew0KCWdsb2JhbCAkc21kX3RhZ19wcmVmczsNCglleHRyYWN0 KGRvU2xhc2goZ3BzYShhcnJheSgnc21kX3RhZ19vbmFtZScsICdzbWRfdGFnX3R5cGUnLCAn c21kX3RhZ19pZCcpKSkpOw0KDQoJJHNtZF90YWdfaWQgPSBhc3NlcnRfaW50KCRzbWRfdGFn X2lkKTsNCg0KCSRwcmVmID0gc21kX3RhZ3NfcHJlZl9nZXQoYXJyYXkoJ3NtZF90YWdfdF9k ZWx1c2VkJywgJ3NtZF90YWdfdF9kZWx0cmVlJykpOw0KCSRtZXNzYWdlID0gJG1zZ0V4dHJh ID0gJyc7DQoNCglsaXN0KCRsZnQsICRyZ3QpID0gYXJyYXlfdmFsdWVzKHNhZmVfcm93KCds ZnQsIHJndCcsIFNNRF9UQUcsICdpZCA9ICcuJHNtZF90YWdfaWQpKTsNCgkkY2hpbGRyZW4g PSAoJHJndCAtICRsZnQgLSAxKSAvIDI7DQoJJHVzZWQgPSBzYWZlX2NvdW50KFNNRF9UQUdV LCAidGFnX2lkPSRzbWRfdGFnX2lkIEFORCB0eXBlPSckc21kX3RhZ190eXBlJyIpOw0KCSRk b2l0ID0gJHByZWZbJ3NtZF90YWdfdF9kZWx1c2VkJ11bJ3ZhbCddOw0KCSR0cmVlID0gJHBy ZWZbJ3NtZF90YWdfdF9kZWx0cmVlJ11bJ3ZhbCddOw0KDQoJaWYgKCRkb2l0ID09IDApIHsN CgkJaWYgKCR1c2VkIHx8ICRjaGlsZHJlbiA+IDApIHsNCgkJCSRtZXNzYWdlID0gc21kX3Rh Z3NfZ1R4dCgnaW5fdXNlJywgYXJyYXkoJ3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190 eXBlKSwgJ3tuYW1lfScgPT4gJHNtZF90YWdfb25hbWUpKTsNCgkJfSBlbHNlIHsNCgkJCSRk b2l0ID0gMTsNCgkJfQ0KCX0NCg0KCS8vIERvIHRoZSBkZWxldGUvdHJlZQ0KCWlmICgkZG9p dCkgew0KCQlpZiAoJHRyZWUpIHsNCgkJCSRpZHMgPSBzYWZlX2NvbHVtbignaWQnLCBTTURf VEFHLCAidHlwZSA9ICckc21kX3RhZ190eXBlJyBBTkQgKGxmdCBCRVRXRUVOICRsZnQgQU5E ICRyZ3QpIik7DQoJCQkkbXNnRXh0cmEgPSBzbWRfdGFnc19nVHh0KCdjaGlsZHJlbl9hbmQn KTsNCgkJfSBlbHNlIHsNCgkJCSRpZHMgPSBhcnJheSgkc21kX3RhZ19pZCk7DQoJCX0NCgkJ JHdoZXJlID0gJ2lkIElOICgnLmRvUXVvdGUoaW1wbG9kZSgiJywnIiwkaWRzKSkuJyknOw0K DQoJCSRyZXQgPSBzYWZlX2RlbGV0ZShTTURfVEFHLCAkd2hlcmUuIiBBTkQgdHlwZT0nJHNt ZF90YWdfdHlwZSciKTsNCgkJaWYgKCRyZXQpIHsNCgkJCWlmICghJHRyZWUpIHsNCgkJCQlz YWZlX3VwZGF0ZShTTURfVEFHLCAicGFyZW50PSdyb290JyIsICJ0eXBlPSckc21kX3RhZ190 eXBlJyBhbmQgcGFyZW50PSckc21kX3RhZ19vbmFtZSciKTsNCgkJCX0NCgkJCWZvcmVhY2gg KCRpZHMgYXMgJGRlbGlkKSB7DQoJCQkJc2FmZV9kZWxldGUoU01EX1RBR1UsICJ0YWdfaWQ9 JGRlbGlkIEFORCB0eXBlPSckc21kX3RhZ190eXBlJyIpOw0KCQkJCXNhZmVfZGVsZXRlKFNN RF9UQUdDLCAidGFnX2lkPSRkZWxpZCIpOw0KCQkJfQ0KCQl9DQoJCWlmICgkcmV0KSB7DQoJ CQkkbWVzc2FnZSA9IHNtZF90YWdzX2dUeHQoJ2RlbGV0ZWQnLCBhcnJheSgne3R5cGV9JyA9 PiB1Y2ZpcnN0KCRzbWRfdGFnX3R5cGUpLCAne25hbWV9JyA9PiAkc21kX3RhZ19vbmFtZSkp LiRtc2dFeHRyYTsNCgkJCS8vIEZvcmNlIGFsbCBzbWRfdGFnXyBib3hlcyBjbGVhcg0KCQkJ JF9QT1NUWydzbWRfdGFnX2lkJ10gPSAkX1BPU1RbJ3NtZF90YWdfb25hbWUnXSA9ICRfUE9T VFsnc21kX3RhZ19uYW1lJ10gPSAkX1BPU1RbJ3NtZF90YWdfdGl0bGUnXSA9ICRfUE9TVFsn c21kX3RhZ19wYXJlbnQnXSA9ICcnOw0KCQl9IGVsc2Ugew0KCQkJJG1lc3NhZ2UgPSBzbWRf dGFnc19nVHh0KCdub3RfZGVsZXRlZCcsIGFycmF5KCd7dHlwZX0nID0+IHVjZmlyc3QoJHNt ZF90YWdfdHlwZSksICd7bmFtZX0nID0+ICRzbWRfdGFnX29uYW1lKSk7DQoJCX0NCgl9DQoJ cmVidWlsZF90cmVlX2Z1bGwoJHNtZF90YWdfdHlwZSwgU01EX1RBRyk7DQoJc21kX3RhZ3Nf bWFuYWdlKCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQov LyBNSURETEVXQVJFIC0gQURNSU4vUFVCTElDIEdMVUUNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KLy8gR3JhYiBhIHZhbGlkIHRhZyBwYXJlbnQgbGlzdC4gQ2Fubm90IGJlIGRv bmUgZWFzaWx5IGZyb20gZml4ZWQgZGF0YTogQUpBWCBpcyB0aGUgb25seSByZWxpYWJsZSB3 YXkgOi0oDQpmdW5jdGlvbiBzbWRfdGFnX3BhcmVudGxpc3QoKSB7DQoJJHRyeWNhdCA9IGlz c2V0KCRfUE9TVFsnY2F0J10pOw0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1l JywgJ3R5cGUnLCAnaWQnLCAnY2F0JywgJ2l0ZW1pZCcpKSkpOw0KDQoJd2hpbGUoQG9iX2Vu ZF9jbGVhbigpKTsgLy8gR2V0IHJpZCBvZiBhbnkgcGFnZSBzbyBmYXINCgkkdHlwZSA9ICgk dHlwZSA9PSAiIiB8fCAkdHlwZSA9PSAidW5kZWZpbmVkIikgPyAnYXJ0aWNsZScgOiAkdHlw ZTsNCgkkY2F0ID0gKCRjYXQgPT0gIiIgfHwgJGNhdCA9PSAidW5kZWZpbmVkIikgPyAnJyA6 ICRjYXQ7DQoJJHRhZ3MgPSAoJGl0ZW1pZCA9PSAiIiB8fCAkaXRlbWlkID09ICJ1bmRlZmlu ZWQiKSA/IGFycmF5KCkgOiBzYWZlX3Jvd3MoInRhZ19pZCIsIFNNRF9UQUdVLCAidHlwZT0n JHR5cGUnIEFORCBpdGVtX2lkPSckaXRlbWlkJyIpOw0KCSRjbHJCdG4gPSAnWzxzcGFuIGlk PSJzbWRfY2xyIiBjbGFzcz0ic21kX2Zha2VidG4iPicuc21kX3RhZ3NfZ1R4dCgnY2xlYXIn KS4nPC9zcGFuPl0nOw0KCSR0b2dCdG4gPSAnWzxzcGFuIGlkPSJzbWRfdG9nIiBjbGFzcz0i c21kX2Zha2VidG4iPicuc21kX3RhZ3NfZ1R4dCgndG9nZ2xlJykuJzwvc3Bhbj5dJzsNCg0K CWlmICgkY2F0KSB7DQoJICAgJGNhdCA9IGRvX2xpc3QoJGNhdCk7DQoJICAgJHJzaWQgPSBh cnJheSgpOw0KCSAgICRyc2MgPSBnZXRSb3dzKCJTRUxFQ1QgdHh0LmlkLCB0eHQubGZ0LCB0 eHQucmd0DQoJCQlGUk9NICIuU01EX1RBRy4iIEFTIHR4dCwgdHhwX2NhdGVnb3J5IEFTIHR4 YywgIi5TTURfVEFHQy4iIEFTIHR4bA0KCQkJV0hFUkUgdHh0LmlkID0gdHhsLnRhZ19pZA0K CQkJQU5EIHR4bC5jYXRfaWQgPSB0eGMuaWQNCgkJCUFORCB0eGMubmFtZSBJTiAoJyIgLmlt cGxvZGUoIicsJyIsICRjYXQpLiAiJykNCgkJCUFORCB0eHQudHlwZSA9ICckdHlwZSciKTsN CgkJaWYgKCRyc2MpIHsNCgkJCWZvcmVhY2ggKCRyc2MgYXMgJHJvdykgew0KCQkJCSRpZHMg PSBzYWZlX2NvbHVtbignaWQnLCBTTURfVEFHLCAidHlwZSA9ICckdHlwZScgQU5EIChsZnQg QkVUV0VFTiAiIC4kcm93WydsZnQnXS4gIiBBTkQgIiAuJHJvd1sncmd0J10uICIpIik7DQoJ CQkJJHJzaWQgPSBhcnJheV9tZXJnZSgkcnNpZCwgJGlkcyk7DQoJCQl9DQoJCX0NCgkJJGNh dCA9ICgkcnNjKSA/ICcgQU5EIGlkIElOICgnLmRvUXVvdGUoaW1wbG9kZSgiJywnIiwkcnNp ZCkpLicpJyA6ICcnOw0KCX0NCglpZiAoJGlkKSB7DQoJCSRpZCA9IGFzc2VydF9pbnQoJGlk KTsNCgkJbGlzdCgkbGZ0LCAkcmd0KSA9IGFycmF5X3ZhbHVlcyhzYWZlX3JvdygnbGZ0LCBy Z3QnLCBTTURfVEFHLCAnaWQgPSAnLiRpZCkpOw0KCQkkcnMgPSBnZXRUcmVlKCdyb290Jywg JHR5cGUsICJsZnQgbm90IGJldHdlZW4gJGxmdCBhbmQgJHJndCIuJGNhdCwgU01EX1RBRyk7 DQoJfSBlbHNlIHsNCgkJJHJzID0gZ2V0VHJlZSgncm9vdCcsICR0eXBlLCAiMT0xIi4kY2F0 LCBTTURfVEFHKTsNCgl9DQoNCglpZiAoJHJzKSB7DQoJICAgaWYgKCR0cnljYXQpIHsNCgkJ CWVjaG8gc21kX211bHRpVHJlZVNlbGVjdElucHV0KCdzbWRfdGFnX3BhcmVudCcsICRycywg JHRhZ3MpLiRjbHJCdG4uJHRvZ0J0bjsNCgkJfSBlbHNlIHsNCgkJCWVjaG8gdHJlZVNlbGVj dElucHV0KCdzbWRfdGFnX3BhcmVudCcsICRycywgJG5hbWUpOw0KCQl9DQoJfSBlbHNlIHsN CgkJZWNobyBzbWRfdGFnc19nVHh0KCdub19wYXJlbnQnKTsNCgl9DQoJZXhpdCgpOyAvLyBE b24ndCBjYWxsIHBhZ2VfZW5kKCkNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQovLyBHcmFiIGEgdmFsaWQgY2F0ZWdvcnkgbGlzdA0KZnVuY3Rpb24gc21kX3RhZ19jYXRs aXN0KCRjYXQ9JycpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScsJ3R5 cGUnKSkpKTsNCgl3aGlsZShAb2JfZW5kX2NsZWFuKCkpOyAvLyBHZXQgcmlkIG9mIGFueSBw YWdlIHNvIGZhcg0KDQoJJHR5cGUgPSAoJHR5cGUgPT0gIiIgfHwgJHR5cGUgPT0gInVuZGVm aW5lZCIpID8gJ2FydGljbGUnIDogJHR5cGU7DQoJJHJzID0gZ2V0VHJlZSgncm9vdCcsICR0 eXBlLCAiMT0xIik7DQoNCglpZiAoJHJzKSB7DQoJCWVjaG8gdHJlZVNlbGVjdElucHV0KCdz bWRfY2F0bGlzdCcsICRycywgJG5hbWUpOw0KCX0gZWxzZSB7DQoJCWVjaG8gZ1R4dCgnbm9f Y2F0ZWdvcmllc19hdmFpbGFibGUnKTsNCgl9DQoJZXhpdCgpOyAvLyBEb24ndCBjYWxsIHBh Z2VfZW5kKCkNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBIYW5kbGUg ZmFrZSB0YWcgc2VjdGlvbiBVUkwNCi8vIFRPRE86IEhhbmRsZSBtZXNzeSBVUkxzDQpmdW5j dGlvbiBzbWRfdGFnc191cmxfaGFuZGxlcigkZXZlbnQsICRzdGVwKSB7DQoJZ2xvYmFsICRz bWRfdGFnX3R5cGUsICRzbWRfdGFncywgJHBlcm1saW5rX21vZGU7DQoNCgkkcHJlZnMgPSBz bWRfdGFnc19wcmVmX2dldChhcnJheSgnc21kX3RhZ191X3NlYycsICdzbWRfdGFnX3VfcG5h bScsICdzbWRfdGFnX3VfcHR5cCcpLCAxKTsNCgkkdXJsc2VjID0gJHByZWZzWydzbWRfdGFn X3Vfc2VjJ11bJ3ZhbCddOw0KCSR1cmxuYW0gPSAkcHJlZnNbJ3NtZF90YWdfdV9wbmFtJ11b J3ZhbCddOw0KCSR1cmx0eXAgPSAkcHJlZnNbJ3NtZF90YWdfdV9wdHlwJ11bJ3ZhbCddOw0K DQovKg0KCWlmICgkcGVybWxpbmtfbW9kZSAhPSAnbWVzc3knKSB7DQoJCXJldHVybiAnPGZv cm0gbWV0aG9kPSJnZXQiIGFjdGlvbj0iJy5wYWdlbGlua3VybChhcnJheSgncycgPT4gJHNl Y3Rpb24pKS4nIj4nLg0KCQkJbi4kb3V0Lg0KCQkJbi4nPC9mb3JtPic7DQoJfQ0KKi8NCg0K CSRzdWJwYXRoID0gcHJlZ19yZXBsYWNlKCIvaHR0cHM/OlwvXC8uKihcLy4qKS9VaSIsIiQx IixodSk7DQoJJHJlZ3NhZmVzdWJwYXRoID0gcHJlZ19xdW90ZSgkc3VicGF0aCwgJy8nKTsN CgkkcmVxID0gcHJlZ19yZXBsYWNlKCIvXiRyZWdzYWZlc3VicGF0aC9pIiwnLycsJF9TRVJW RVJbJ1JFUVVFU1RfVVJJJ10pOw0KDQoJJHFzID0gc3RycG9zKCRyZXEsICc/Jyk7DQoJJHFh dHRzID0gKCRxcyA/IGEuc3Vic3RyKCRyZXEsICRxcyArIDEpIDogJycpOw0KCWlmICgkcXMp ICRyZXEgPSBzdWJzdHIoJHJlcSwgMCwgJHFzKTsNCg0KCSRwYXJ0cyA9IGFycmF5X3ZhbHVl cyhhcnJheV9maWx0ZXIoc3BsaXQoJy8nLCAkcmVxKSkpOw0KCSR2YWxpZFR5cGVzID0gYXJy YXkoJ2FydGljbGUnLCdpbWFnZScsJ2ZpbGUnLCdsaW5rJyk7DQoNCglpZiAoKGNvdW50KCRw YXJ0cykgPiAxKSAmJiAoJHBhcnRzWzBdID09ICR1cmxzZWMpKSB7DQoJCWlmIChjb3VudCgk cGFydHMpID09IDMpIHsNCgkJCSRzbWRfdGFnX3R5cGUgPSAkcGFydHNbMV07DQoJCQkkc21k X3RhZyA9ICRwYXJ0c1syXTsNCgkJfSBlbHNlIHsNCgkJCWlmIChpbl9hcnJheSgkcGFydHNb MV0sICR2YWxpZFR5cGVzKSkgew0KCQkJCSRzbWRfdGFnX3R5cGUgPSAkcGFydHNbMV07DQoJ CQkJJHNtZF90YWcgPSAnJzsNCgkJCX0gZWxzZSB7DQoJCQkJJHNtZF90YWdfdHlwZSA9ICR2 YWxpZFR5cGVzWzBdOw0KCQkJCSRzbWRfdGFnID0gJHBhcnRzWzFdOw0KCQkJfQ0KCQl9DQoJ CXNtZF90YWdzX3NldCgkc21kX3RhZ190eXBlLCAkc21kX3RhZyk7DQoJCSRfU0VSVkVSWydR VUVSWV9TVFJJTkcnXSA9ICR1cmxuYW0uJz0nLiRzbWRfdGFnIC5hLiAkdXJsdHlwLic9Jy4k c21kX3RhZ190eXBlIC4gJHFhdHRzOw0KCQkkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSA9ICRz dWJwYXRoIC4gJHVybHNlYyAuICcvPycgLiAkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ107DQoJ fSBlbHNlIGlmICgkcGFydHNbMF0gPT0gJHVybHNlYyB8fCBncHMoJ3MnKSA9PSAkdXJsc2Vj KSB7DQoJCSRzbWRfdGFnX3R5cGUgPSAoaW5fYXJyYXkoZ3BzKCR1cmx0eXApLCAkdmFsaWRU eXBlcykpID8gZ3BzKCR1cmx0eXApIDogJyc7DQoJCSRzbWRfdGFnID0gZ3BzKCR1cmxuYW0p Ow0KCQlzbWRfdGFnc19zZXQoJHNtZF90YWdfdHlwZSwgJHNtZF90YWcpOw0KCQkkX1NFUlZF UlsnUVVFUllfU1RSSU5HJ10gPSAkdXJsbmFtLic9Jy4kc21kX3RhZyAuYS4gJHVybHR5cC4n PScuJHNtZF90YWdfdHlwZSAuICRxYXR0czsNCgkJJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10g PSAkc3VicGF0aCAuICR1cmxzZWMgLiAnLz8nIC4gJF9TRVJWRVJbJ1FVRVJZX1NUUklORydd Ow0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf dGFnc19zZXQoJHR5cCwgJHRhZz0nJywgJGl0ZW09JycpIHsNCglnbG9iYWwgJHNtZF90YWdz Ow0KDQoJJHNtZF90YWdzID0gJyc7DQoNCgkvLyBNT05TVEVSIQ0KCSRycyA9IHN0YXJ0Um93 cygNCgkJIlNFTEVDVCBpZCwgbmFtZSwgdHh0LnR5cGUsIHBhcmVudCwgdGl0bGUsIGNvdW50 KGl0ZW1faWQpIEFTIGNvdW50Ig0KCQkuIiwoU0VMRUNUIENBU1QoKHJndCAtIGxmdCAtIDEp IC8gMiBBUyBVTlNJR05FRCkpIEFTIGNoaWxkcmVuIg0KCQkuIiwoU0VMRUNUIENPVU5UKCop IGZyb20gIi5TTURfVEFHLiIgV0hFUkUgdHlwZT0nJHR5cCcgQU5EIG5hbWU9bmFtZSBBTkQg bGZ0IDwgdHh0LmxmdCBBTkQgcmd0ID4gdHh0LnJndCktMSBBUyBsZXZlbCINCgkJLiIgRlJP TSAiLlNNRF9UQUcuIiBBUyB0eHQsICIuU01EX1RBR1UuIiBBUyB0eHUiDQoJCS4iIFdIRVJF IHR4dC50eXBlPSckdHlwJyINCgkJLiIgQU5EIHRhZ19pZCA9IGlkIg0KCQkuKCgkdGFnKSA/ ICIgQU5EIG5hbWU9JyR0YWcnIiA6ICIiKQ0KCQkuKCgkaXRlbSkgPyAiIEFORCBpdGVtX2lk PSckaXRlbSciIDogIiIpDQoJCS4iIEdST1VQIEJZIGlkIik7DQoJd2hpbGUgKCRyb3cgPSBu ZXh0Um93KCRycykpIHsNCgkJJHNtZF90YWdzWyR0eXBdWyRyb3dbJ2lkJ11dID0gYXJyYXko J3RhZ19uYW1lJyA9PiAkcm93WyduYW1lJ10sICd0YWdfdGl0bGUnID0+ICRyb3dbJ3RpdGxl J10sICd0YWdfcGFyZW50JyA9PiAkcm93WydwYXJlbnQnXSwgJ3RhZ19jb3VudCcgPT4gJHJv d1snY291bnQnXSwgJ3RhZ19jaGlsZHJlbicgPT4gJHJvd1snY2hpbGRyZW4nXSwgJ3RhZ19s ZXZlbCcgPT4gJHJvd1snbGV2ZWwnXSk7DQoJCSRzbWRfdGFnc1skdHlwXVsndGFnX25hbWUn XVskcm93WydpZCddXSA9ICRyb3dbJ25hbWUnXTsNCgkJJHNtZF90YWdzWyR0eXBdWyd0YWdf dGl0bGUnXVskcm93WydpZCddXSA9ICRyb3dbJ3RpdGxlJ107DQoJCSRzbWRfdGFnc1skdHlw XVsndGFnX3BhcmVudCddWyRyb3dbJ2lkJ11dID0gJHJvd1sncGFyZW50J107DQoJCSRzbWRf dGFnc1skdHlwXVsndGFnX2NvdW50J11bJHJvd1snaWQnXV0gPSAkcm93Wydjb3VudCddOw0K CQkkc21kX3RhZ3NbJHR5cF1bJ3RhZ19jaGlsZHJlbiddWyRyb3dbJ2lkJ11dID0gJHJvd1sn Y2hpbGRyZW4nXTsNCgkJJHNtZF90YWdzWyR0eXBdWyd0YWdfbGV2ZWwnXVskcm93WydpZCdd XSA9ICRyb3dbJ2xldmVsJ107DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCi8vIEFkZCB0YWdzIHRvIHRoZSBnbG9iYWwgc2NvcGUsIGRlcGVuZGluZyBvbiBjb250 ZXh0Lg0KLy8gUmV0dXJucyB0aGUgY3VycmVudCBjb250ZXh0DQpmdW5jdGlvbiBzbWRfdGFn c19jb250ZXh0KCkgew0KCWdsb2JhbCAkdGhpc2FydGljbGUsICR0aGlzZmlsZSwgJHRoaXNs aW5rLCAkdGhpc2ltYWdlLCAkc21kX3RhZ190eXBlLCAkc21kX3RhZ19pdGVtcywgJHNtZF90 YWdzLCAkc21kX3RoaXN0YWc7DQoNCgkkY3R4dCA9ICRzbWRfdGFnX3R5cGU7DQoJJGlkcyA9 IGFycmF5KCk7DQoJJHNjcCA9IEAkc21kX3RhZ3NbJGN0eHRdOw0KDQoJaWYgKGVtcHR5KCRz bWRfdGFnX3R5cGUpKSB7DQoJCS8vIEluZGl2aWR1YWwgYXJ0aWNsZSBvciBsaXN0DQoJCSRp ZCA9ICcnOw0KCQlpZiAoIWVtcHR5KCR0aGlzaW1hZ2UpKSB7DQoJCQkkaWQgPSAkdGhpc2lt YWdlWydpZCddOw0KCQkJJGN0eHQgPSAnaW1hZ2UnOw0KCQkJJHNjcCA9ICR0aGlzaW1hZ2U7 DQoJCX0gZWxzZSBpZighZW1wdHkoJHRoaXNmaWxlKSkgew0KCQkJJGlkID0gJHRoaXNmaWxl WydpZCddOw0KCQkJJGN0eHQgPSAnZmlsZSc7DQoJCQkkc2NwID0gJHRoaXNmaWxlOw0KCQl9 IGVsc2UgaWYoIWVtcHR5KCR0aGlzbGluaykpIHsNCgkJCSRpZCA9ICR0aGlzbGlua1snaWQn XTsNCgkJCSRjdHh0ID0gJ2xpbmsnOw0KCQkJJHNjcCA9ICR0aGlzbGluazsNCgkJfSBlbHNl IGlmKCFlbXB0eSgkdGhpc2FydGljbGUpKSB7DQoJCQkkaWQgPSAkdGhpc2FydGljbGVbJ3Ro aXNpZCddOw0KCQkJJGN0eHQgPSAnYXJ0aWNsZSc7DQoJCQkkc2NwID0gJHRoaXNhcnRpY2xl Ow0KCQl9DQoJCWlmICgkaWQpIHsNCgkJCXNtZF90YWdzX3NldCgkY3R4dCwgJycsICRpZCk7 DQoJCX0NCgl9DQoNCglpZighZW1wdHkoJHNtZF90YWdzKSkgew0KCQlmb3JlYWNoKCRzbWRf dGFnc1skY3R4dF0gYXMgJHJpZCA9PiAkcm93KSB7DQoJCQlpZiAoaXNfaW50KCRyaWQpKSB7 DQoJCQkJJGlkc1tdID0gJHJpZDsNCgkJCX0NCgkJfQ0KCX0NCgkvLyBUT0RPOiBpcyB0aGlz IG5lZWRlZCB0byBvdmVyd3JpdGUgaWYgdGFnIGFscmVhZHkgc2V0Pw0KCWlmICghZW1wdHko JHNtZF90aGlzdGFnKSkgew0KCQkkaWRzID0gYXJyYXkoJHNtZF90aGlzdGFnWyd0YWdfaWQn XSk7DQoJfQ0KDQoJcmV0dXJuIGFycmF5KCdjb250ZXh0JyA9PiAkY3R4dCwgJ3Njb3BlJyA9 PiAkc2NwLCAnaWQnID0+ICRpZHMpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCi8vIExvYWQgY3VycmVudCB0YWcgaW50byBnbG9iYWwgc2NvcGUNCmZ1bmN0aW9uIHNt ZF90YWdfcG9wdWxhdGUoJHJvdykgew0KCWdsb2JhbCAkc21kX3RoaXN0YWc7DQoJJHNtZF90 aGlzdGFnWyd0YWdfaWQnXSA9ICRyb3dbJ2lkJ107DQoJJHNtZF90aGlzdGFnWyd0YWdfbmFt ZSddID0gJHJvd1snbmFtZSddOw0KCSRzbWRfdGhpc3RhZ1sndGFnX3R5cGUnXSA9ICRyb3db J3R5cGUnXTsNCgkkc21kX3RoaXN0YWdbJ3RhZ19wYXJlbnQnXSA9ICRyb3dbJ3BhcmVudCdd Ow0KCSRzbWRfdGhpc3RhZ1sndGFnX3RpdGxlJ10gPSAkcm93Wyd0aXRsZSddOw0KCSRzbWRf dGhpc3RhZ1sndGFnX2NoaWxkcmVuJ10gPSAkcm93WydjaGlsZHJlbiddOw0KCSRzbWRfdGhp c3RhZ1sndGFnX2xldmVsJ10gPSAkcm93WydsZXZlbCddOw0KCSRzbWRfdGhpc3RhZ1sndGFn X2NvdW50J10gPSAkcm93Wydjb3VudCddOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCi8vIEFsbCB0YWdzL2NvdW50cw0KZnVuY3Rpb24gc21kX3RhZ19saXN0X2FkbSgk YXR0cykgew0KCWluY2x1ZGVfb25jZSB0eHBhdGguJy9wdWJsaXNoL3RhZ2hhbmRsZXJzLnBo cCc7DQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3R5cGUnID0+ICdhcnRpY2xlJywNCgkJ J2luZGVudCcgPT4gJyZuYnNwOyZuYnNwOycsDQoJCSdjb3VudCcgPT4gMSwNCgkJJ2xhYmVs JyA9PiAnJywNCgkJJ2xhYmVsdGFnJyA9PiAnJywNCgkJJ3dyYXB0YWcnID0+ICcnLA0KCQkn YnJlYWsnID0+ICcnLA0KCQknY2xhc3MnID0+IF9fRlVOQ1RJT05fXywNCgkJJ2JyZWFrY2xh c3MnID0+ICcnLA0KCSksJGF0dHMpKTsNCg0KCSR2YWxpZFR5cGVzID0gYXJyYXkoJ2xpc3Qn ID0+ICdhcnRpY2xlJywgJ2ltYWdlJyA9PiAnaW1hZ2UnLCAnZmlsZScgPT4gJ2ZpbGUnLCAn bGluaycgPT4gJ2xpbmsnKTsNCgkkcnMgPSBnZXRUcmVlKCdyb290JywgJHR5cGUsICcxPTEn LCBTTURfVEFHKTsNCgkkcnNjID0gZ2V0Um93cygiU0VMRUNUIHR4bC50YWdfaWQsIHR4Yy5u YW1lDQoJCQlGUk9NICIuU01EX1RBRy4iIEFTIHR4dCwgIi5TTURfVEFHQy4iIEFTIHR4bCwg dHhwX2NhdGVnb3J5IEFTIHR4Yw0KCQkJV0hFUkUgdHh0LnR5cGUgPSAnJHR5cGUnIEFORCB0 eHQuaWQgPSB0eGwudGFnX2lkIEFORCB0eGwuY2F0X2lkID0gdHhjLmlkIik7DQoJJHJzY291 dCA9IGFycmF5KCk7DQoJaWYgKCRyc2MpIHsNCgkJZm9yZWFjaCAoJHJzYyBhcyAkaWR4ID0+ ICRyb3cpIHsNCgkJCSRyc2NvdXRbJHJvd1sndGFnX2lkJ11dID0gJHJvd1snbmFtZSddOw0K CQl9DQoJfQ0KDQoJaWYgKCRycykgew0KCQkkb3V0ID0gYXJyYXkoKTsNCgkJJHRvdGFscyA9 IGFycmF5KCk7DQoNCgkJLy8gVGFsbHkgZWFjaCB0YWcncyB1c2FnZQ0KCQlpZiAoJGNvdW50 KSB7DQoJCQkkcnN1ID0gc2FmZV9yb3dzX3N0YXJ0KCd0YWdfaWQsIGNvdW50KCopIGFzIG51 bScsIFNNRF9UQUdVLCAidHlwZT0nJHR5cGUnIEdST1VQIEJZIHRhZ19pZCIpOw0KCQkJd2hp bGUgKCRyb3cgPSBuZXh0Um93KCRyc3UpKSB7DQoJCQkJJHRhZ2lkID0gJHJvd1sndGFnX2lk J107DQoJCQkJJG51bSA9ICRyb3dbJ251bSddOw0KCQkJCSRpZHMgPSBzYWZlX2NvbHVtbign aXRlbV9pZCcsIFNNRF9UQUdVLCAidHlwZT0nJHR5cGUnIEFORCB0YWdfaWQ9JyR0YWdpZCci KTsNCgkJCQkkdG90YWxzWyR0YWdpZF0gPSBhcnJheSgkbnVtLCBqb2luKCIsIiwkaWRzKSk7 DQoJCQl9DQoJCX0NCg0KCQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJZXh0cmFjdCgk cm93KTsNCgkJCSRwYXJlbnQgPSAoaXNzZXQoJHBhcmVudCkpID8gJHBhcmVudCA6ICcnOyAv LyBQYXJlbnQgbWlnaHQgbm90IGJlIGRlZmluZWQNCgkJCSRyb3dbJ3R5cGUnXSA9ICR0eXBl Ow0KCQkJaWYgKGlzc2V0KCR0b3RhbHNbJGlkXSkpIHsNCgkJCQkkcm93Wydjb3VudCddID0g JHRvdGFsc1skaWRdWzBdOw0KCQkJCSRldiA9IGFycmF5X2tleXMoJHZhbGlkVHlwZXMsJHR5 cGUpOw0KCQkJCSR1cmwgPSAnaW5kZXgucGhwP2V2ZW50PScuJGV2WzBdLmEuJ3NlYXJjaF9t ZXRob2Q9aWQnLmEuJ2NyaXQ9Jy4kdG90YWxzWyRpZF1bMV07DQoJCQkJJGNudG9wID0gJyAo Jy4gaHJlZigkdG90YWxzWyRpZF1bMF0sICR1cmwpIC4nKSc7DQoJCQl9IGVsc2Ugew0KCQkJ CSRyb3dbJ2NvdW50J10gPSAwOw0KCQkJCSRjbnRvcCA9ICcgKDApJzsNCgkJCX0NCg0KCQkJ JHJvd2RhdGEgPSAnPHNwYW4gbmFtZT0ic21kX3RhZ25hbSIgY2xhc3M9InNtZF9oaWRkZW4i PicuJG5hbWUNCgkJCQkJLic8L3NwYW4+PHNwYW4gbmFtZT0ic21kX3RhZ2lkIiBjbGFzcz0i c21kX2hpZGRlbiI+Jy4kaWQNCgkJCQkJLic8L3NwYW4+PHNwYW4gbmFtZT0ic21kX3RhZ3R0 bCIgY2xhc3M9InNtZF9oaWRkZW4iPicuJHRpdGxlDQoJCQkJCS4nPC9zcGFuPjxzcGFuIG5h bWU9InNtZF90YWdwYXIiIGNsYXNzPSJzbWRfaGlkZGVuIj4nLiRwYXJlbnQNCgkJCQkJLic8 L3NwYW4+PHNwYW4gbmFtZT0ic21kX3RhZ2NhdCIgY2xhc3M9InNtZF9oaWRkZW4iPicuKChp c3NldCgkcnNjb3V0WyRpZF0pKSA/ICRyc2NvdXRbJGlkXSA6ICcnKQ0KCQkJCQkuJzwvc3Bh bj4nOw0KCQkJJG91dFtdID0gJHJvd2RhdGEuc3RyX3JlcGVhdCgkaW5kZW50LCAkbGV2ZWwg KiAxKQ0KCQkJCQkuJHRpdGxlDQoJCQkJCS4oKCRjb3VudCkgPyAkY250b3AgOiAnJykubjsN Ci8vCQkJJHNtZF90aGlzdGFnID0gYXJyYXkoKTsNCgkJfQ0KDQoJCWlmICgkb3V0KSB7DQoJ CQkkd3JhcGl0ID0gZG9fbGlzdCgkd3JhcHRhZywgIjoiKTsNCg0KCQkJLy8gVGFibGVzIGFy ZSBhIHNwZWNpYWwgY2FzZQ0KCQkJaWYgKCR3cmFwaXRbMF0gPT0gInRhYmxlIikgew0KDQoJ CQkJJHRvdGFsSXRlbXMgPSAkcm93cyA9IGNvdW50KCRycyk7DQoJCQkJJHN0ZXAgPSAxOw0K CQkJCSRjb2xzID0gMTsNCgkJCQkkbnVtb3B0cyA9IGNvdW50KCR3cmFwaXQpOw0KCQkJCS8v IEVhY2ggc3VjY2Vzc2l2ZSBsZXZlbCBvdmVycmlkZXMgdGhlIHByZXZpb3VzIHN0ZXAgc28g YnkgdGhlIGVuZCBvZiB0aGUgaWZzLA0KCQkJCS8vIDMgdmFsdWVzIGFyZSBzZXQgdXA6IHN0 ZXAsIHJvd3MgYW5kIGNvbHMNCgkJCQlpZiAoJG51bW9wdHMgPiAxKSB7DQoJCQkJCSRjb2xz ID0gJHdyYXBpdFsxXTsNCgkJCQkJJHJvd3MgPSBjZWlsKCR0b3RhbEl0ZW1zLyRjb2xzKTsN CgkJCQl9DQoJCQkJaWYgKCRudW1vcHRzID4gMikgew0KCQkJCQlpZiAoJHdyYXBpdFsyXSA9 PSAicm93cyIpIHsNCgkJCQkJCSRyb3dzID0gJHdyYXBpdFsxXTsNCgkJCQkJCSRjb2xzID0g Y2VpbCgkdG90YWxJdGVtcy8kcm93cyk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKCRudW1v cHRzID4gMykgew0KCQkJCQlpZiAoJHdyYXBpdFszXSA9PSAiYnljb2wiKSB7DQoJCQkJCQkk c3RlcCA9ICgkd3JhcGl0WzJdPT0iY29scyIpID8gY2VpbCgkdG90YWxJdGVtcy8kY29scykg OiAkcm93czsNCgkJCQkJCWlmICgkd3JhcGl0WzJdPT0iY29scyIpIHsNCgkJCQkJCQkkcm93 cyA9ICRzdGVwOw0KCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkkY29scyA9IGNlaWwoJHRvdGFs SXRlbXMvJHJvd3MpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJLy8gR2VuZXJh dGUgdGFibGUgYmFzZWQgb24gYWJvdmUgcnVsZXMNCgkJCQkkdGJsb3V0ID0gYXJyYXkoKTsN CgkJCQkkY2VsbEN0ciA9IDA7DQoJCQkJJGNsYXNzID0gKCFlbXB0eSgkY2xhc3MpKSA/ICcg Y2xhc3M9IicuJGNsYXNzLiciJyA6ICcnOw0KCQkJCSRicmVha2NsYXNzID0gKCFlbXB0eSgk YnJlYWtjbGFzcykpID8gJyBjbGFzcz0iJy4kYnJlYWtjbGFzcy4nIicgOiAnJzsNCg0KCQkJ CWZvciAoJGlkeCA9IDA7ICRpZHggPCAkcm93czsgJGlkeCsrKSB7DQoJCQkJCSRibGQgPSBh cnJheSgpOw0KCQkJCQlmb3IgKCRqZHggPSAwOyAkamR4IDwgJGNvbHM7ICRqZHgrKykgew0K CQkJCQkJJG9mZnNldCA9ICgkd3JhcGl0WzNdPT0iYnljb2wiKSA/ICgkamR4ICogJHN0ZXAp ICsgJGlkeCA6ICRjZWxsQ3RyOw0KCQkJCQkJJGJsZFtdID0gKGlzc2V0KCRvdXRbJG9mZnNl dF0pKSA/IHRkKCRvdXRbJG9mZnNldF0pIDogdGQoJycpOw0KCQkJCQkJJGNlbGxDdHIrKzsN CgkJCQkJfQ0KCQkJCQkkdGJsb3V0W10gPSB0cihqb2luKCIiLCAkYmxkKSwgJGJyZWFrY2xh c3MpOw0KICAgICAgICAgICAgfQ0KDQoJCQkJcmV0dXJuIGRvTGFiZWwoJGxhYmVsLCAkbGFi ZWx0YWcpLnRhZyhqb2luKCIiLCR0YmxvdXQpLCAkd3JhcGl0WzBdLCAkY2xhc3MpOw0KCQkJ fSBlbHNlIHsNCgkJCQlyZXR1cm4gZG9MYWJlbCgkbGFiZWwsICRsYWJlbHRhZykuZG9XcmFw KCRvdXQsICR3cmFwaXRbMF0sICRicmVhaywgJGNsYXNzLCAkYnJlYWtjbGFzcyk7DQoJCQl9 DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxvY2FsaXNl IGFzIHJlcXVpcmVkDQpmdW5jdGlvbiBzbWRfdGFnc19nVHh0KCR3aGF0LCAkYXR0cyA9IGFy cmF5KCkpIHsNCgkkbGFuZyA9IGFycmF5KA0KCQknYWNfc3RkJyA9PiAnU3RhbmRhcmQnLA0K CQknYWNfc3RyJyA9PiAnU3RyaWN0JywNCgkJJ2J5X2NvbHVtbicgPT4gJ0NvbHVtbicsDQoJ CSdieV9yb3cnID0+ICdSb3cnLA0KCQknY2xlYXInID0+ICdjbHInLA0KCQknY2xpbmtfbGJs JyA9PiAnTGlua2VkIGNhdCcsDQoJCSdjb250cm9sJyA9PiAnUGx1Z2luIGNvbnRyb2wnLA0K CQknY3JlYXRlZCcgPT4gJ3t0eXBlfSB0YWcgIntuYW1lfSIgY3JlYXRlZCcsDQoJCSdjaGls ZHJlbl9hbmQnID0+ICcgYW5kIGl0cyBjaGlsZHJlbicsDQoJCSdjaGlsZHJlbl9kZWwnID0+ ICdEZWxldGUgY2hpbGRyZW4nLA0KCQknY2hpbGRyZW5fcHJvJyA9PiAnUHJvbW90ZSBjaGls ZHJlbicsDQoJCSdkZWxldGVkJyA9PiAne3R5cGV9IHRhZyAie25hbWV9IiBkZWxldGVkJywN CgkJJ2V4aXN0cycgPT4gJ3t0eXBlfSB0YWcgIntuYW1lfSIgYWxyZWFkeSBleGlzdHMnLA0K CQknZmlsdGVyJyA9PiAnRmlsdGVyJywNCgkJJ2luX3VzZScgPT4gJ3t0eXBlfSB0YWcgIntu YW1lfSIgaXMgaW4gdXNlJywNCgkJJ21hbmFnZV9sYmwnID0+ICdNYW5hZ2UgdGFncycsDQoJ CSdub19uYW1lJyA9PiAne3R5cGV9IHRhZyBOT1QgY3JlYXRlZDogbmVlZHMgYSBuYW1lJywN CgkJJ25vX3BhcmVudCcgPT4gJ05vIHBhcmVudCB0YWdzJywNCgkJJ25vdF9hdmFpbGFibGUn ID0+ICdzbWRfdGFncyB0YWJsZXMgYXJlIG5vdCBpbnN0YWxsZWQnLA0KCQknbm90X2NyZWF0 ZWQnID0+ICd7dHlwZX0gdGFnICJ7bmFtZX0iIE5PVCBjcmVhdGVkJywNCgkJJ25vdF9kZWxl dGVkJyA9PiAne3R5cGV9IHRhZyAie25hbWV9IiBOT1QgZGVsZXRlZCcsDQoJCSdub3RfdXBk YXRlZCcgPT4gJ3t0eXBlfSB0YWcgIntuYW1lfSIgTk9UIHVwZGF0ZWQnLA0KCQkncHJlZl9p bnN0YWxsX2xibCcgPT4gJ0luc3RhbGwgcHJlZnMnLA0KCQkncHJlZl9yZW1vdmVfbGJsJyA9 PiAnUmVtb3ZlIHByZWZzJywNCgkJJ3ByZWZfc2hvd19sYmwnID0+ICdQcmVmZXJlbmNlcycs DQoJCSdwcmVmc19pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBpbnN0YWxsZWQnLA0KCQkn cHJlZnNfbm90X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBpbnN0YWxsZWQuJywN CgkJJ3ByZWZzX3BhbmUnID0+ICdQcmVmcycsDQoJCSdwcmVmc19yZW1vdmVkJyA9PiAnUHJl ZmVyZW5jZXMgcmVtb3ZlZCcsDQoJCSdwcmVmc19zb21lJyA9PiAnTm90IGFsbCBwcmVmZXJl bmNlcyBhdmFpbGFibGUuJywNCgkJJ3ByZWZzX3NvbWVfZXhwbGFpbicgPT4gJ1RoaXMgaXMg ZWl0aGVyIGEgbmV3IGluc3RhbGxhdGlvbiBvciBhIGRpZmZlcmVudCB2ZXJzaW9uJy5ici4n b2YgdGhlIHBsdWdpbiB0byBvbmUgeW91IGhhZCBiZWZvcmUuJywNCgkJJ3ByZWZzX3NvbWVf b3B0czEnID0+ICdDaG9vc2UgIlJlbW92ZSBwcmVmcyIgdG8gcmVtb3ZlIHRoZW0gYWxsIG9y ICJJbnN0YWxsIHByZWZzIiB0byBhZGQnLmJyLidhbnkgbmV3IG9uZXMsIGxlYXZpbmcgYWxs IGV4aXN0aW5nIHByZWZzIHVudG91Y2hlZC4nLA0KCQkncHJlZnNfc29tZV9vcHRzMicgPT4g J0NsaWNrICJJbnN0YWxsIHRhYmxlcyIgdG8gYWRkIG9yIHVwZGF0ZSB0aGUgdGFibGVzJy5i ci4nbGVhdmluZyBhbGwgZXhpc3RpbmcgZGF0YSB1bnRvdWNoZWQuJywNCgkJJ3ByZWZzX3Nv bWVfdGJsJyA9PiAnTm90IGFsbCB0YWJsZSBpbmZvIGF2YWlsYWJsZS4nLA0KCQkncHJlZnNf dGl0bGUnID0+ICdzbWRfdGFncyBwcmVmZXJlbmNlcycsDQoJCSdzZWxfbGlzdCcgPT4gJ1Nl bGVjdCBsaXN0JywNCgkJJ3ByZWZzX3AnID0+ICdJbnRlcmZhY2Ugc2V0dGluZ3MnLA0KCQkn cHJlZnNfdCcgPT4gJ1RhZyBtYW5hZ2VtZW50JywNCgkJJ3ByZWZzX3UnID0+ICdVUkwgbWFu YWdlbWVudCcsDQoJCSdzbWRfdGFncycgPT4gJ3NtZF90YWdzJywNCgkJJ3NtZF90YWdfcF9l bmFibGUnID0+ICdFbmFibGUgdGFncyBpbicsDQoJCSdzbWRfdGFnX3BfZmlyc3QnID0+ICdJ bml0aWFsIHBhbmUnLA0KCQknc21kX3RhZ19wX2lucHV0JyA9PiAnRW50ZXIgdGFncyB1c2lu ZycsDQoJCSdzbWRfdGFnX3BfbGlua2NhdCcgPT4gJ0xpbmsgdGFncyB0byBjYXRlZ29yaWVz JywNCgkJJ3NtZF90YWdfcF9xdGFnJyA9PiAnUXVpY2sgdGFnICg8YSBocmVmPSJodHRwOi8v cGx1Z2lucy5qcXVlcnkuY29tL3Byb2plY3QvYXV0b2NvbXBsZXRleCI+cmVxdWlyZXMgcGx1 Z2luPC9hPiknLA0KCQknc21kX3RhZ19wX3F0cGF0aCcgPT4gJ0pTIHBsdWdpbiBkaXIgKHJl bGF0aXZlIHRvICJ0ZXh0cGF0dGVybiIpJywNCgkJJ3NtZF90YWdfcF9xdHN0eWwnID0+ICdK UyBzdHlsZSBkaXIgKHJlbGF0aXZlIHRvICJ0ZXh0cGF0dGVybiIpJywNCgkJJ3NtZF90YWdf cF9zaXplJyA9PiAnU2VsZWN0L3RleHRhcmVhIHJvd3MnLA0KCQknc21kX3RhZ190X2F1dG8n ID0+ICdBdXRvIG5hbWUnLA0KCQknc21kX3RhZ190X2NvbHMnID0+ICdUYWcgY29sdW1ucycs DQoJCSdzbWRfdGFnX3RfY29sc29yZCcgPT4gJ09yZGVyIHRhZ3MgYnknLA0KCQknc21kX3Rh Z190X2NvdW50JyA9PiAnU2hvdyB0YWcgdXNhZ2UgY291bnRzJywNCgkJJ3NtZF90YWdfdF9k ZWx0cmVlJyA9PiAnV2hlbiBkZWxldGluZyBhIHBhcmVudCcsDQoJCSdzbWRfdGFnX3RfZGVs dXNlZCcgPT4gJ0FsbG93IGRlbGV0aW9uIG9mIHVzZWQgdGFncycsDQoJCSdzbWRfdGFnX3Rf aGlsaXRlJyA9PiAnQ2xpY2tlZCBSR0IgY29sb3VyJywNCgkJJ3NtZF90YWdfdF9ob3Zlcicg PT4gJ01vdXNlLW92ZXIgUkdCIGNvbG91cicsDQoJCSdzbWRfdGFnX3RfaW5kZW50JyA9PiAn U3ViLXRhZyBsZXZlbCBpbmRpY2F0b3InLA0KCQknc21kX3RhZ191X3BuYW0nID0+ICdVUkwg bmFtZSBwYXJhbWV0ZXInLA0KCQknc21kX3RhZ191X3B0eXAnID0+ICdVUkwgdHlwZSBwYXJh bWV0ZXInLA0KCQknc21kX3RhZ191X3NlYycgPT4gJ0RlZmF1bHQgc2VjdGlvbiBmb3IgdGFn cycsDQoJCSd0ZXh0Ym94JyA9PiAnVGV4dCBhcmVhJywNCgkJJ3RleHRsaXN0JyA9PiAnVGV4 dCBsaXN0JywNCgkJJ3RibF9pbnN0YWxsX2xibCcgPT4gJ0luc3RhbGwgdGFibGVzJywNCgkJ J3RibF9pbnN0YWxsZWQnID0+ICdUYWcgdGFibGVzIGluc3RhbGxlZC4gJywNCgkJJ3RibF9u b3RfaW5zdGFsbGVkJyA9PiAnVGFnIHRhYmxlcyBOT1QgaW5zdGFsbGVkLiAnLA0KCQkndGJs X25vdF9yZW1vdmVkJyA9PiAnVGFnIHRhYmxlcyBOT1QgcmVtb3ZlZC4gJywNCgkJJ3RibF9y ZW1vdmVfbGJsJyA9PiAnUmVtb3ZlIHRhYmxlcycsDQoJCSd0YmxfcmVtb3ZlZCcgPT4gJ1Rh ZyB0YWJsZXMgcmVtb3ZlZC4gJywNCgkJJ3RhZ3NfcGFuZScgPT4gJ01hbmFnZSB0YWdzJywN CgkJJ3RpdGxlJyA9PiAnVGFncycsDQoJCSd0b2dnbGUnID0+ICd0b2cnLA0KCQkndXBkYXRl ZCcgPT4gJ3t0eXBlfSB0YWcgIntuYW1lfSIgdXBkYXRlZCcsDQoJKTsNCglyZXR1cm4gc3Ry dHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMSI7czo0OiJo ZWxwIjtzOjEyNzg1OiIJPHA+PGRpdiBpZD0ic21kX2hlbHAiPjwvcD4KCgk8aDE+c21kX3Rh Z3MgKEFkbWluIHNpZGUpPC9oMT4KCgk8cD5UYWcgYXJ0aWNsZXMsIGltYWdlcywgZmlsZXMg YW5kIGxpbmtzIHdpdGggc3R1ZmYsIHRoZW4gdXNlIHRoZSBwdWJsaWMtc2lkZSB0YWdzIHRv IGRpc3BsYXkgdGhlIGxpc3RzLCBmaWx0ZXIgb3IgZmluZCByZWxhdGVkIGNvbnRlbnQuPC9w PgoKCTxwPkZlYXR1cmVzOjwvcD4KCgk8dWw+CgkJPGxpPlVubGltaXRlZCB0YWdzIGZvciBh cnRpY2xlcywgaW1hZ2VzLCBmaWxlcyBhbmQgbGlua3M8L2xpPgoJCTxsaT5GYXN0IHRhZ2dp bmcgc3lzdGVtIGZvciBjb3B5aW5nLCBhdXRvLW5hbWluZywgYW5kIG9wdGlvbmFsIGF1dG8t Y29tcGxldGlvbjwvbGk+CgkJPGxpPk5lc3Rpbmcgb2YgdGFnczwvbGk+CgkJPGxpPk9wdGlv bmFsbHkgbGluayB0YWdzIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGNhdGVn b3JpZXMgc28gY2xpZW50cyBjYW4gb25seSBjaG9vc2UgZnJvbSBhIGxpbWl0ZWQgc2V0IG9m IHRhZ3M8L2xpPgoJCTxsaT5Bc3NpZ24gdGFncyB2aWEgYSBkcm9wZG93biBzZWxlY3QgbGlz dCwgYSB0ZXh0IGFyZWEgb3IgYSBsaXN0IG9mIGNsaWNrYWJsZSB0YWdzPC9saT4KCQk8bGk+ U2V0IHVwIGFuIChvcHRpb25hbCkgZGVkaWNhdGVkIHNlY3Rpb24gdG8gYWxsb3cgdGFnIGZp bHRlcmluZzwvbGk+Cgk8L3VsPgoKCTxwPkluIHRoZSBwaXBlbGluZTo8L3A+CgoJPHVsPgoJ CTxsaT5JbXBvcnQgYXJ0aWNsZSB0YWdzIGZyb20gdHJ1X3RhZ3MgYW5kIHJzc191bmxpbWl0 ZWRfY2F0ZWdvcmllczwvbGk+CgkJPGxpPkZpeCBmb3IgZm9yZWlnbiBjaGFyYWN0ZXIgYXV0 b3RhZyBkdW1iZG93bjwvbGk+CgkJPGxpPkxpc3QgdGFncyBieSBsaW5rZWQgY2F0ZWdvcnk8 L2xpPgoJPC91bD4KCgk8aDIgY2xhc3M9ImF1dGhvciI+QXV0aG9yPC9oMj4KCgk8cD48YSBo cmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29uPC9h PjwvcD4KCgk8aDIgY2xhc3M9Imluc3RhbGwiPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0 aW9uPC9oMj4KCgk8cCBjbGFzcz0icmVxdWlyZXMiPlJlcXVpcmVzIGF0IGxlYXN0IFRleHRw YXR0ZXJuIDQuMC43IChvciB0aGUgbGF0ZXN0IDxzcGFuIGNsYXNzPSJjYXBzIj5TVk48L3Nw YW4+IGNvcHkgeW91IGNhbiBnZXQgeW91ciBoYW5kcyBvbikuIEluIGFkZGl0aW9uLCBmb3Ig Y2xpZW50LXNpZGUgaW1hZ2UgdGFnZ2luZyB0byB3b3JrLCByZXF1aXJlcyB0aGUgaW1hZ2Ug cGF0Y2ggdGhhdCB3aWxsIGZvcm0gcGFydCBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiA0LjAuOC4gQ2hlY2sgdGhlIGZvcnVtIGZvciB0aGUgbGluayB0byB0aGUgY3VycmVu dCBwYXRjaC48L3A+CgoJPHA+RG93bmxvYWQgYm90aCBhZG1pbiBhbmQgY2xpZW50IHBhcnRz IG9mIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJu Lm9yZy9wbHVnaW5zLzEwMjYvc21kX3RhZ3MiPnRleHRwYXR0ZXJuLm9yZzwvYT4gb3IgdGhl IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4u IFBhc3RlIGVhY2ggcGFydCBpbiB0dXJuIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxl IGJvdGggcGFydHMgKEFkbWluIGZpcnN0KS48L3A+CgoJPHA+VmlzaXQgdGhlIEV4dGVuc2lv bnMgLSZndDsgc21kX3RhZ3MgdGFiIGFuZCBjbGljayB0aGUgSW5zdGFsbCB0YWJsZXMgYnV0 dG9uLiBUaGUgbmVjZXNzYXJ5IHRhYmxlcyBhbmQgcHJlZmVyZW5jZXMgd2lsbCBiZSBhdXRv bWF0aWNhbGx5IGluc3RhbGxlZC4gRnJvbSB0aGlzIHBhZ2UgeW91IGNhbiBJbnN0YWxsLCBE ZWxldGUgYW5kIFNhdmUgdGhlIHBsdWdpbiBwcmVmZXJlbmNlcyBvciByZW1vdmUgdGhlIHRh YmxlcyB0byBlbXB0eSB5b3VyIHRhZ3MgZW50aXJlbHkgYW5kIHN0YXJ0IGFnYWluLjwvcD4K Cgk8cD5UbyByZW1vdmUgc21kX3RhZ3MgdmlzaXQgdGhlIHNtZF90YWdzIFByZWZlcmVuY2Vz IHBhZ2UgYWdhaW4sIGhpdCAmIzgyMTY7UmVtb3ZlIHRhYmxlcyYjODIxNzsgdG8gcmVtb3Zl IHRoZSBwcmVmZXJlbmNlcyBhbmQgdGFnIHRhYmxlcyBmcm9tIHRoZSBkYXRhYmFzZSwgdGhl biBzaW1wbHkgZGVsZXRlIHRoZSBwbHVnaW5zIGFzIG5vcm1hbCBmcm9tIHRoZSBBZG1pbiAt Jmd0OyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxwPlZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8v Zm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9WVlZWVkiPmZvcnVtIHRo cmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBhbmQgdG8gcmVwb3J0IHRoZSBzdWNjZXNzIChvciBv dGhlcndpc2UpIG9mIHRoaXMgcGx1Z2luLjwvcD4KCgk8aDIgY2xhc3M9InVzYWdlIj5Vc2Fn ZTwvaDI+CgoJPGgzPlRoZSBidXR0b25zPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5SZW1vdmUgcHJlZnM8L3NwYW4+IDogZGVsZXRlIHRoZSBwcmVmZXJlbmNlcyBv bmx5OyB1c2VmdWwgaWYgeW91ciBwcmVmcyBoYXZlIGJlY29tZSBjb3JydXB0ZWQgb3IgeW91 IHNpbXBseSB3YW50IHRvIHJldHVybiB0byAmIzgyMjA7ZGVmYXVsdCYjODIyMTsgb3BlcmF0 aW9uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlJlbW92ZSB0YWJsZXM8L3NwYW4+ IDogZGVsZXRlIHRoZSB0YWdzIHRhYmxlcy4gVGhpcyB3aWxsIHBlcm1hbmVudGx5IGVyYXNl IGFsbCB0YWdzIGFnYWluc3QgYWxsIGFydGljbGVzLCBpbWFnZXMsIGZpbGVzIGFuZCBsaW5r cy4gQmUgdmVyeSBzdXJlIHlvdSBtZWFuIGl0IGJlZm9yZSBjbGlja2luZyB0aGlzPC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk1hbmFnZSB0YWdzPC9zcGFuPiA6IFN3aXRjaCB0 byB0aGUgdGFnIG1hbmFnZW1lbnQgcGFnZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5QcmVmZXJlbmNlczwvc3Bhbj4gOiBTd2l0Y2ggdG8gdGhlIHByZWZlcmVuY2VzIHBhZ2U8 L2xpPgoJPC91bD4KCgk8aDM+VGhlIHByZWZlcmVuY2VzPC9oMz4KCgk8aDQ+SW50ZXJmYWNl IHNldHRpbmdzPC9oND4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5FbmFibGUg dGFncyBpbjwvc3Bhbj4gOiBhIHRhZyBlbnRyeSBtZWNoYW5pc20gaXMgYWRkZWQgdG8gdGhl IGFkbWluIHNpZGUgb2YgZWFjaCBvZiB0aGUgY2hlY2tlZCBwYWdlczwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5Jbml0aWFsIHBhbmU8L3NwYW4+IDogd2hlbiB5b3UgY2xpY2sg RXh0ZW5zaW9ucyAtJmd0OyBzbWRfdGFncywgc2hvdyBlaXRoZXIgdGhlIHByZWZlcmVuY2Vz IHBhZ2Ugb3IgdGhlIHRhZyBtYW5hZ2VtZW50IHBhZ2U8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+RW50ZXIgdGFncyB1c2luZzwvc3Bhbj4gOiB0aGUgbWVjYWhuaXNtIHlvdSB3 aXNoIHRvIHVzZSB0byBhc3NpZ24gdGFnczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5MaW5rIHRhZ3MgdG8gY2F0ZWdvcmllczwvc3Bhbj4gOiBhbGxvdyB0YWdzIHRvIGJlIGFz c29jaWF0ZWQgd2l0aCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBjYXRlZ29yaWVz PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlF1aWNrIHRhZzwvc3Bhbj4gOiBpZiB1 c2luZyBhIHRleHRhcmVhIGFuZCB5b3UgaW5zdGFsbCB0aGUgalF1ZXJ5IGF1dG9jb21wbGV0 ZSBwbHVnaW4sIHRoaXMgZGV0ZXJtaW5lcyB3aGljaCBtZXRob2Qgb2YgYXV0by1jb21wbGV0 ZSB0byB1c2U6IDxjb2RlPnN0cmljdDwvY29kZT4gcHJldmVudHMgdGFncyBiZWluZyBzdWJt aXR0ZWQgdGhhdCBhcmUgZGlzYWxsb3dlZCBieSB0aGUgY3VycmVudCA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiBjYXRlZ29yeTsgPGNvZGU+c3RhbmRhcmQ8L2NvZGU+IGFsbG93 cyBvdGhlciB0YWdzIHRvIGJlIGVudGVyZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+anMgcGx1Z2luIGRpcjwvc3Bhbj4gOiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHlvdXIg YXV0by1jb21wbGV0ZSBwbHVnaW4gcmVzaWRlcywgcmVsYXRpdmUgdG8gdGhlIHRleHRwYXR0 ZXJuIGRpcmVjdG9yeTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5qcyBzdHlsZSBk aXI8L3NwYW4+IDogdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB5b3VyIGF1dG8tY29tcGxldGUg PHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gZmlsZXMgcmVzaWRlLCByZWxhdGl2ZSB0 byB0aGUgdGV4dHBhdHRlcm4gZGlyZWN0b3J5PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPlNlbGVjdC90ZXh0YXJlYSByb3dzPC9zcGFuPiA6IG51bWJlciBvZiByb3dzIGluIHRo ZSBzZWxlY3QgbGlzdCBvciB0ZXh0YXJlYTwvbGk+Cgk8L3VsPgoKCTxoND5UYWcgbWFuYWdl bWVudDwvaDQ+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QXV0byBuYW1lPC9z cGFuPiA6IGhlbHBzIHNwZWVkIHRhZyBjcmVhdGlvbiBieSBhdXRvbWF0aWNhbGx5IG5hbWlu ZyB0aGVtIGJhc2VkIG9uIHRoZSB0aXRsZSB5b3UgdXNlPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPlRhZyBjb2x1bW5zPC9zcGFuPiA6IHRoZSBudW1iZXIgb2YgY29sdW1ucyBv ZiB0YWdzIHRvIGRpc3BsYXkgaW4gdGhlIG1hbmFnZW1lbnQgcGFnZTwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5PcmRlciB0YWdzIGJ5PC9zcGFuPiA6ICYjODIxNjtjb2x1bW4m IzgyMTc7IHRvIGhhdmUgdGhlIHRhZ3Mgd29yayBkb3duIHRoZSBwYWdlIGZpcnN0OyAmIzgy MTY7cm93JiM4MjE3OyB0byB3b3JrIGFjcm9zcyB0aGUgcGFnZTwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5TaG93IHRhZyB1c2FnZSBjb3VudHM8L3NwYW4+IDogd2hldGhlciB0 byBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIGZvciB3aGljaCBhIHRhZyBpcyB1c2Vk PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPldoZW4gZGVsZXRpbmcgYSBwYXJlbnQ8 L3NwYW4+IDogY2hvb3NlIHdoZXRoZXIgYW55IGNoaWxkIHRhZ3Mgd2lsbCBiZSBwcm9tb3Rl ZCB0byB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgdGFnIHlvdSBqdXN0IGRlbGV0ZWQsIG9yIHRo ZSBlbnRpcmUgdHJlZSBiZWxvdyB0aGUgZGVsZXRlZCB0YWcgd2lsbCBiZSByZW1vdmVkIGFz IHdlbGw8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QWxsb3cgZGVsZXRpb24gb2Yg dXNlZCB0YWdzPC9zcGFuPiA6IHdoZW4gJiM4MjE2O25vJiM4MjE3OywgaWYgYSB0YWcgaGFz IGJlZW4gdXNlZCBieSBhbiBhcnRpY2xlL2ltYWdlL2ZpbGUvbGluayBpdCBjYW5ub3QgYmUg ZGVsZXRlZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5DbGlja2VkIDxzcGFuIGNs YXNzPSJjYXBzIj5SR0I8L3NwYW4+IGNvbG91cjwvc3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4gYmFja2dyb3VuZCBjb2xvdXIgZm9yIHRoZSBjdXJyZW50bHkg ZWRpdGVkIHRhZzsgZm9yIHRob3NlIHRoYXQgZG9uJiM4MjE3O3QgbGlrZSB5ZWxsb3cgOy0p PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk1vdXNlLW92ZXIgPHNwYW4gY2xhc3M9 ImNhcHMiPlJHQjwvc3Bhbj4gY29sb3VyPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+Q1NTPC9zcGFuPiBiYWNrZ3JvdW5kIGNvbG91ciBhcyB5b3UgbW92ZSBvdmVyIGVhY2gg aXRlbSBpbiB0aGUgbGlzdDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5TdWItdGFn IGxldmVsIGluZGljYXRvcjwvc3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8 L3NwYW4+IGVudGl0eSBvciB0ZXh0IHlvdSB3aXNoIHRvIHByZWNlZGUgZWFjaCBzdWItdGFn IHdpdGguIExldmVsIDEgdGFncyBoYXZlIG9uZSBvZiB0aGVzZSBzeW1ib2xzIGFkZGVkLCBs ZXZlbCAyIHRhZ3MgaGF2ZSB0d28gYWRkZWQsIGFuZCBzbyBvbjwvbGk+Cgk8L3VsPgoKCTxo ND48c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBtYW5hZ2VtZW50PC9oND4KCgk8dWw+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj48c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PiBuYW1lIHBhcmFtZXRlcjwvc3Bhbj4gOiBXaGVuIGZpbHRlcmluZyBieSB0YWcgbmFtZSwg dGhpcyBpcyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc3RyaW5nIHVzZWQg dG8gaW5kaWNhdGUgYSB0YWc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+PHNwYW4g Y2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdHlwZSBwYXJhbWV0ZXI8L3NwYW4+IDogV2hlbiBm aWx0ZXJpbmcgYnkgdGFnIHR5cGUsIHRoaXMgaXMgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5V Ukw8L3NwYW4+IHN0cmluZyB1c2VkIHRvIGluZGljYXRlIGEgdGFnIHR5cGU8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+RGVmYXVsdCBzZWN0aW9uIGZvciB0YWdzPC9zcGFuPiA6 IEFueSBsaW5rcyBmcm9tIHRoZSBjbGllbnQtc2lkZSB0YWdzIHdpbGwgYmUgc2VudCB0byB0 aGlzIHNlY3Rpb24gZm9yIGRpc3BsYXkuIENhbiBiZSBvdmVycmlkZGVuIG9uIGEgdGFnLWJ5 LXRhZyBiYXNpcyB3aXRoIHRoZSA8Y29kZT5zZWN0aW9uX2xpbms8L2NvZGU+IGF0dHJpYnV0 ZTwvbGk+Cgk8L3VsPgoKCTxoMz5UaGUgbWFuYWdlbWVudCBwYW5lPC9oMz4KCgk8cD5EaXNw bGF5cyBhIGxpc3Qgb2YgYWxsIGRlZmluZWQgdGFncy4gSW4gY29udHJhc3QgdG8gdGhlIGJ1 aWx0LWluIGNhdGVnb3JpZXMsIG9ubHkgb25lIHR5cGUgaXMgc2hvd24gYXQgYSB0aW1lOyBz d2l0Y2ggYmV0d2VlbiB0aGVtIHdpdGggdGhlIHJhZGlvIGJ1dHRvbnMgaW4gdGhlICYjODIx NjtGaWx0ZXImIzgyMTc7IHJvdy48L3A+CgoJPHA+VGhlIGlucHV0IHJvdyBhdCB0aGUgdG9w IGhhcyB0aHJlZSBvciBmb3VyIGZpZWxkcyBpbiBpdCwgZGVwZW5kaW5nIGlmIHlvdSBoYXZl IGNob3NlbiB0byBsaW5rIHRhZ3MgdG8gY2F0ZWdvcmllczo8L3A+CgoJPHVsPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+VGl0bGU8L3NwYW4+IDogVGhlIGRpc3BsYXkgbmFtZSBvZiB0 aGUgdGFnIG9uIHRoZSBwdWJsaWMgc2lkZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5QYXJlbnQ8L3NwYW4+IDogV2hldGhlciB0aGUgdGFnIGlzIGluIGEgc3ViLWNhdGVnb3J5 LiBUaGUgZW1wdHkgaXRlbSBpcyBjb25zaWRlcmVkICYjODIxNjtyb290JiM4MjE3OyAodG9w IGxldmVsKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5MaW5rZWQgY2F0PC9zcGFu PiA6IChvcHRpb25hbCkgV2hldGhlciB0aGUgdGFnIGlzIGFzc29jaWF0ZWQgd2l0aCBhIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGNhdGVnb3J5LiBBbnkgc3ViLXRhZ3MgYXJl IGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgdG8gdGhlIGNob3NlbiBjYXRlZ29yeSBhcyB3ZWxs PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk5hbWU8L3NwYW4+IDogVGhlICYjODIx NjtpbnRlcm5hbCYjODIxNzsgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGFnIG5h bWUuIFByb2JhYmx5IHNob3VsZG4mIzgyMTc7dCBjb250YWluIHNwYWNlcyBvciB3ZWlyZCBj aGFyYWN0ZXJzLCBhbHRob3VnaCB5b3UgY2FuIHB1dCB0aGVtIGluIGlmIHlvdSBrbm93IHdo YXQgeW91JiM4MjE3O3JlIGRvaW5nPC9saT4KCTwvdWw+CgoJPHA+V2l0aCB0aGUgYXV0by1u YW1lIGZlYXR1cmUgZW5hYmxlZCwgd2hhdGV2ZXIgeW91IHR5cGUgaW4gdGhlIFRpdGxlIGZp ZWxkIHdpbGwgYmUgbWltaWNrZWQgaW4gdGhlIE5hbWUgZmllbGQsIGJ1dCB3aXRoIG9ubHkg bG93ZXIgY2FzZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gU3BhY2VzIHdpbGwgYmUgY29u dmVydGVkIHRvIGRhc2hlcy4gWyBOb3RlIHRoYXQgYXQgcHJlc2VudCwgZm9yZWlnbiBjaGFy YWN0ZXJzIGFyZSBub3QgJiM4MjE2O2R1bWJlZCBkb3duJiM4MjE3OyB0byA8c3BhbiBjbGFz cz0iY2FwcyI+QVNDSUk8L3NwYW4+LiBUaGlzIGZlYXR1cmUgaXMgcGxhbm5lZCBdPC9wPgoK CTxwPkhpdCBTYXZlIChvciBDcmVhdGUpIHRvIGRlZmluZSB0aGUgdGFnLCBvciB1c2UgdGhl IEVudGVyIGtleSB3aGVuIGluIGFueSBpbnB1dCBmaWVsZCBhcyBhIHNob3J0Y3V0IGZvciBD cmVhdGUuIFRoZSB0YWcgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBjdXJyZW50bHkgc2VsZWN0 ZWQgdHlwZSAoYXJ0aWNsZSwgaW1hZ2UsIGZpbGUgb3IgbGluaykgYnV0IHdpbGwgcmVtYWlu ICYjODIxNjtzZWxlY3RlZCYjODIxNzsgYWZ0ZXIgY3JlYXRpb24gYW5kIHdpbGwgYWxzbyBz dGF5IGF2YWlsYWJsZSB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIHR5cGVzLiBUaGlzIGFsbG93 cyBmb3IgcmFwaWQgY3JlYXRpb24gb2Ygc2ltaWxhci1uYW1lZCB0YWdzIG9yIGZvciB2ZXJ5 IHF1aWNrbHkgJiM4MjE2O2NvcHlpbmcmIzgyMTc7IHRhZ3MgZnJvbSBvbmUgdHlwZSB0byBh bm90aGVyLjwvcD4KCgk8cD5Zb3UgY2FuIGVkaXQgYW55IHRhZyBieSBjbGlja2luZyBvbiBp dCBpbiB0aGUgbGlzdCB0byBwdWxsIGl0IGludG8gdGhlIGVkaXQgbGluZSBhdCB0aGUgdG9w LiBNYWtlIGFueSBjaGFuZ2VzIGFuZCBoaXQgU2F2ZSB0byBvdmVyd3JpdGUgdGhlIGV4aXN0 aW5nIHRhZyBvciBDcmVhdGUgdG8gbWFrZSBhIG5ldyBvbmUuIFVzZSB0aGUgJiM4MjE2O3gm IzgyMTc7IGJ1dHRvbiB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHRhZzsgbm90ZSB0aGVyZSBp cyBubyBjb25maXJtYXRpb24gc3RlcCwgc2luY2UgdGhlIGFjdCBvZiBjbGlja2luZyB0aGUg dGFnIGlzIHRoZSBjb25maXJtYXRpb24gaXRzZWxmISBXaGVuIHlvdSBzd2l0Y2ggYmV0d2Vl biB0eXBlcywgaWYgdGhlIGN1cnJlbnRseSBlZGl0ZWQgdGFnIGV4aXN0cyBpbiBhbm90aGVy IHR5cGUsIGl0IHdpbGwgYmUgc2VsZWN0ZWQgYXV0b21hdGljYWxseSB1cG9uIHN3aXRjaGlu Zy48L3A+CgoJPHA+SWYgdGhlIG9wdGlvbiB0byBkaXNwbGF5IGNvdW50cyBpcyBzZWxlY3Rl ZCB0aGUgbnVtYmVyIG9mIGFydGljbGVzIC8gaW1hZ2VzIC8gZmlsZXMgLyBsaW5rcyB3aWxs IGJlIHNob3duIGluIGJyYWNrZXRzIGFsb25nc2lkZSBlYWNoIHRhZy4gSWYgdGhlIHZhbHVl IGlzIGdyZWF0ZXIgdGhhbiAwIHRoZSBudW1iZXIgY2FuIGJlIGNsaWNrZWQgdG8gdmlldyB0 aGUgbGlzdCBvZiBpdGVtcyBjb250YWluaW5nIHRoYXQgdGFnLjwvcD4KCgk8cD5Ob3Rlczo8 L3A+CgoJPHVsPgoJCTxsaT5JZiB5b3UgRWRpdCBhIHRhZyBhbmQgdHJ5IHRvIFNhdmUgaXQg d2hlbiBpdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyB0YWcsIHlvdSB3aWxs IHJlY2VpdmUgYSB3YXJuaW5nIG1lc3NhZ2U8L2xpPgoJCTxsaT5JZiB5b3UgdHJ5IHRvIGRl bGV0ZSBhIHRhZyB0aGF0IGlzIGluIHVzZSBhbmQgdGhlIHByZWZlcmVuY2UgJiM4MjE2O0Fs bG93IGRlbGV0aW9uIG9mIHVzZWQgdGFncyYjODIxNzsgaXMgc2V0IHRvICYjODIxNjtubyYj ODIxNzssIGl0IHdpbGwgYmUgZm9yYmlkZGVuPC9saT4KCQk8bGk+VGhlIHBhcmVudCBsaXN0 IGlzIHBvcHVsYXRlZCB2aWEgPHNwYW4gY2xhc3M9ImNhcHMiPkFKQVg8L3NwYW4+IGZyb20g dGhlIGRhdGFiYXNlIGVhY2ggdGltZSB5b3UgY2xpY2sgYSB0YWcsIGFuZCB0aGUgTGlua2Vk IGNhdCBsaXN0IGlzIHBvcHVsYXRlZCBlYWNoIHRpbWUgeW91IGNoYW5nZSB0eXBlLiBUaGlz IGlzIHVuZm9ydHVuYXRlbHkgdW5hdm9pZGFibGUuIFRoZSBsaXN0cyB3aWxsIGZhZGUgb3V0 IHdoaWxlIHRoZSByZXF1ZXN0IGlzIHRha2luZyBwbGFjZS4gT2NjYXNpb25hbGx5IGl0IG1h eSBnZXQgJiM4MjIwO3N0dWNrJiM4MjIxOyBpZiB5b3UgY2xpY2sgdG9vIHF1aWNrbHkgYmV0 d2VlbiB0YWdzIG9yIHRoZSBzZXJ2ZXIgaXMgc2xvdyB0byByZXNwb25kLiBJbiB0aGVzZSBj aXJjdW1zdGFuY2VzLCByZWZyZXNoaW5nIHRoZSBwYWdlIGJ5IGNsaWNraW5nIHRoZSBzbWRf dGFncyB0YWIgd2lsbCByZXN0b3JlIHRoaW5nczwvbGk+CgkJPGxpPldoZW4gdXNpbmcgdGhl IGF1dG8tbmFtZSBmZWF0dXJlLCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIE5hbWUgZmll bGQsIGRvIGl0IDxlbT5hZnRlcjwvZW0+IHlvdSBoYXZlIGZpbmlzaGVkIHR5cGluZyBpbiB0 aGUgVGl0bGUgZmllbGQ7IGFueSBzdWJzZXF1ZW50IGNoYW5nZXMgdG8gdGhlIFRpdGxlIGZp ZWxkIHdpbGwgb3ZlcndyaXRlIGFueXRoaW5nIGluIHRoZSBOYW1lIGZpZWxkPC9saT4KCQk8 bGk+RGVsZXRpbmcgYSB0YWcgd2lsbCByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gaXQgc28g YmUgY2FyZWZ1bDwvbGk+Cgk8L3VsPgoKCTxoMz5FZGl0aW5nIGFydGljbGVzIC8gaW1hZ2Vz IC8gZmlsZXMgLyBsaW5rczwvaDM+CgoJPHA+T24gZWFjaCBvZiB0aGUgZm91ciBwYWdlcyB0 aGF0IGhhdmUgY2hlY2tib3hlcyBzZXQgaW4gdGhlIHNtZF90YWdzIHByZWZlcmVuY2VzLCB5 b3VyIGNob3NlbiBpbnB1dCBtZWNoYW5pc20gd2lsbCBhcHBlYXIgYmVuZWF0aCB0aGUgY2F0 ZWdvcnkgYXNzaWdubWVudC4gVGhpcyBhbGxvd3MgeW91IHRvIHRhZyBhIHBhcnRpY3VsYXIg YXJ0aWNsZSwgaW1hZ2UsIGZpbGUgb3IgbGluayB3aXRoIGFueSBudW1iZXIgb2YgaXRlbXMu IE9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgeW91ciB0YWdzLCB0aGUgdXN1YWwgU2F2ZSBidXR0 b24gb24gdGhlIHNjcmVlbiB3aWxsIGNvbW1pdCB0aGUgY2hhbmdlcy48L3A+CgoJPHA+VGhl IDxjb2RlPltFZGl0XTwvY29kZT4gbGluayB0YWtlcyB5b3UgdG8gdGhlIFRhZyBNYW5hZ2Vt ZW50IHBhZ2UgdGhhdCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBuZXcgdGFncy4gSWYgdXNpbmcg YSBzZWxlY3QgbGlzdCwgdHdvIG90aGVyIGJ1dHRvbnMgYXJlIGF2YWlsYWJsZTogPGNvZGU+ W0Nscl08L2NvZGU+IGRlc2VsZWN0cyBhbGwgdGFncyBhbmQgPGNvZGU+W1RvZ108L2NvZGU+ IHRvZ2dsZXMgYWxsIHRhZ3Mgc28gaWYgdGhleSB3ZXJlICYjODIxNjtvbiYjODIxNzsgdGhl eSBiZWNvbWUgJiM4MjE2O29mZiYjODIxNzssIGFuZCB2aWNlIHZlcnNhLjwvcD4KCgk8cD5O b3RlcyBvbiB0aGUgdGV4dGFyZWEgZW50cnkgbWVjaGFuaXNtOjwvcD4KCgk8dWw+CgkJPGxp PllvdSBjYW5ub3QgY3JlYXRlIG5ldyB0YWdzIGJ5IHR5cGluZyB0aGVtIGluOyB0aGV5IG11 c3QgYmUgY3JlYXRlZCBmaXJzdC4gVGhpcyBmZWF0dXJlIGlzIHVuZGVyIHJldmlldyBhbmQg bWF5IGJlIGFsbG93ZWQgaW4gZnV0dXJlPC9saT4KCQk8bGk+VGhlIHRhZ3MgYXJlIGNhc2Ug c2Vuc2l0aXZlLiBBdXRvLWNvbXBsZXRlIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkPC9saT4K CTwvdWw+CgoJPHA+PC9kaXY+PC9wPgo8IS0tIC0tLSBCRUdJTiBQTFVHSU4gQ1NTIC0tLSAt LT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS4z IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAl ICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjog I0ZGRkZDQzt9CiNzbWRfaGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBi b3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNw bGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21k X2hlbHAgYTpsaW5rLCAjc21kX2hlbHAgYTp2aXNpdGVkIHsgY29sb3I6IGJsdWU7IHRleHQt ZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsdWU7IHBhZGRp bmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBhOmhvdmVyLCAjc21kX2hlbHAgYTphY3RpdmUg eyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAy cHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI3NtZF9oZWxwIGgxIHsgY29s b3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0 ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4 IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdw eCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGNvbG9yOiAjNjkzOyBm b250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7 IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9CiNzbWRfaGVs cCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNp bmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsg fQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyBjb2xvcjojMDVmOyB9CiNz bWRfaGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5 OTsgfQojc21kX2hlbHAgdGFibGUge3dpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOyBw YWRkaW5nLWJvdHRvbToxZW07fQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7Ym9yZGVy OjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDt9CiNzbWRfaGVscCAucmVxdWlyZXMg eyBjb2xvcjpyZWQ7fQo8L3N0eWxlPgo8IS0tIC0tLSBFTkQgUExVR0lOIENTUyAtLS0gLS0+ CiI7czozOiJtZDUiO3M6MzI6ImM0NTExODU4YmJiNDAzNGRmN2IyMjRlMjVlMjhlZDY1Ijt9