# Name: smd_tags_admin v0.11 # 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 c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjExIjtzOjExOiJkZXNjcmlwdGlvbiI7 czo1MjoiVW5saW1pdGVkIHRhZ3MgZm9yIGFydGljbGVzLCBpbWFnZXMsIGZpbGVzIGFuZCBs aW5rcyI7czo0OiJjb2RlIjtzOjU4MzYyOiIvLyBzbWRfdGFncyBieSBTdGVmIERhd3Nvbg0K Ly8gVE9ETzogbGlzdCB0YWdzIGJ5IGxpbmtlZCBjYXQgKGkuZS4gYSAnd2hlcmUgdXNlZCcg Zm9yIGNhdGVnb3J5LT5UYWcgcmVsYXRpb25zaGlwcykNCi8vIFRPRE86IFJlc29sdmUgd2hh dCBoYXBwZW5zIGlmIGFuIGFydGljbGUgaXMgYXNzaWduZWQgc29tZSB0YWdzIGFuZCB0aGVu IHRoZSBjYXRlZ29yeSBpcyBjaGFuZ2VkICh0aGUgdGFncyByZW1haW4gYXNzb2NpYXRlZCwg YnV0IGFyZSBoaWRkZW4pDQovLyBUT0RPOiBXaGF0IGhhcHBlbnMgaWYgb24gYW4gYXJ0aWNs ZSBsaXN0IHBhZ2UgdGhhdCBpcyBub3QgdGhlICdnbG9iYWwnIHNtZF90YWdzIHBhZ2U/IFNo b3VsZCB3ZSBiZSBhYmxlIHRvIGNhbGwgdGFnX2xpc3Q/DQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIEFETUlOIFNJREUgQ09ERQ0KaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2Fk bWluJykgew0KCWFkZF9wcml2cygnc21kX3RhZ3MnLCcxLDInKTsNCg0KCS8vIEV4dGVuc2lv bnMgdGFiDQoJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJ3NtZF90YWdzJywgc21kX3Rh Z3NfZ1R4dCgnc21kX3RhZ3MnKSk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90YWdzJywg J3NtZF90YWdzJyk7DQoNCgkvLyBOb3RlIHRoZSBjYWxsYmFja3MgYXJlIG9yZGVyZWQgd2l0 aCAnc2F2ZScgZmlyc3QNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfbXVsdGlfZWRp dCcsICdsaXN0JywgJ2xpc3RfbXVsdGlfZWRpdCcpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfdGFnc19zYXZlbGlzdCcsICdhcnRpY2xlJywgJ2NyZWF0ZScpOw0KCXJlZ2lzdGVyX2Nh bGxiYWNrKCdzbWRfdGFnc19zYXZlbGlzdCcsICdhcnRpY2xlJywgJ2VkaXQnKTsNCglyZWdp c3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfbG9hZGxpc3QnLCAnYXJ0aWNsZScpOw0KDQoJcmVn aXN0ZXJfY2FsbGJhY2soJ3NtZF90YWdzX211bHRpX2VkaXQnLCAnaW1hZ2UnLCAnaW1hZ2Vf ZGVsZXRlJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90YWdzX3NhdmVsaXN0JywgJ2lt YWdlJywgJ2ltYWdlX3NhdmUnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfbG9h ZGxpc3QnLCAnaW1hZ2UnKTsNCg0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19tdWx0 aV9lZGl0JywgJ2ZpbGUnLCAnZmlsZV9kZWxldGUnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygn c21kX3RhZ3Nfc2F2ZWxpc3QnLCAnZmlsZScsICdmaWxlX3NhdmUnKTsNCglyZWdpc3Rlcl9j YWxsYmFjaygnc21kX3RhZ3NfbG9hZGxpc3QnLCAnZmlsZScpOw0KDQoJcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF90YWdzX211bHRpX2VkaXQnLCAnbGluaycsICdsaW5rX211bHRpX2VkaXQn KTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3Nfc2F2ZWxpc3QnLCAnbGluaycsICds aW5rX3Bvc3QnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3Nfc2F2ZWxpc3QnLCAn bGluaycsICdsaW5rX3NhdmUnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfbG9h ZGxpc3QnLCAnbGluaycpOw0KDQoJLy8gVHJpcGxlIGFycmF5LCBvdXRwdXQgaW4gYWxwaGFi ZXRpY2FsIG9yZGVyLCBzZXF1ZW50aWFsbHkgbnVtYmVyZWQNCgkvLyAgMDogbGlzdCBvZiBj dXJyZW50IHByZWZzICsgZGVmYXVsdA0KCS8vICAxOiBsaXN0IG9mIGxlZ2FjeSBwcmVmcyB0 aGF0IG1heSBuZWVkIHJlbW92aW5nIChkZWZhdWx0IHNob3VsZCBhbGwgYmUgZW1wdHkpDQoJ Ly8gIDI6IHBvc2l0aW9uIHRoYXQgYSBoZWFkaW5nIHNob3VsZCBiZSBpbnNlcnRlZCArIGhl YWRpbmcgaXRzZWxmDQoJZ2xvYmFsICRzbWRfdGFnX3ByZWZzOw0KCSRzbWRfdGFnX3ByZWZz ID0gYXJyYXkoDQoJCWFycmF5KA0KCQkJJ3NtZF90YWdfcF9lbmFibGUnID0+ICcxMTExJywg Ly8gb25lIGRpZ2l0IGZvciBhcnRpY2xlL2ltYWdlL2ZpbGUvbGluay4gMT1lbmFibGVkOyAw PWRpc2FibGVkDQoJCQknc21kX3RhZ19wX2ZpcnN0JyA9PiAnMCcsDQoJCQknc21kX3RhZ19w X2lucHV0JyA9PiAnMCcsIC8vIDA9c2VsZWN0LCAxPXRleHRhcmVhLCAyPWxpbmtzDQoJCQkn c21kX3RhZ19wX2xpbmtjYXQnID0+ICcwJywNCgkJCSdzbWRfdGFnX3BfcXRhZycgPT4gJzAn LCAvLyAwPW5vIGF1dG9jb21wbGV0ZSwgMT1zdGQgYS9jLCAyPXN0cmljdCBhL2MNCgkJCSdz bWRfdGFnX3BfcXRwYXRoJyA9PiAnJywgLy8gRGlyIHRvIGpzIGZpbGUocykgcmVsYXRpdmUg dG8gdGV4dHBhdHRlcm4gZGlyDQoJCQknc21kX3RhZ19wX3F0c3R5bCcgPT4gJycsIC8vIERp ciB0byBjc3MgZmlsZShzKQ0KCQkJJ3NtZF90YWdfcF9zaXplJyA9PiAnNicsDQoJCQknc21k X3RhZ190X2F1dG8nID0+ICcxJywNCgkJCSdzbWRfdGFnX3RfY29scycgPT4gJzEnLA0KCQkJ J3NtZF90YWdfdF9jb2xzb3JkJyA9PiAnMCcsDQoJCQknc21kX3RhZ190X2NvdW50JyA9PiAn MScsDQoJCQknc21kX3RhZ190X2RlbHRyZWUnID0+ICcwJywNCgkJCSdzbWRfdGFnX3RfZGVs dXNlZCcgPT4gJzAnLA0KCQkJJ3NtZF90YWdfdF9oaWxpdGUnID0+ICdmZmEnLA0KCQkJJ3Nt ZF90YWdfdF9ob3ZlcicgPT4gJ2ZmYycsDQoJCQknc21kX3RhZ190X2luZGVudCcgPT4gJyYj ODIxMjsnLA0KCQkJJ3NtZF90YWdfdV9wbmFtJyA9PiAnc21kX3RhZycsDQoJCQknc21kX3Rh Z191X3B0eXAnID0+ICdzbWRfdGFndHlwZScsDQoJCQknc21kX3RhZ191X3NlYycgPT4gJ3Nt ZF90YWdzJywNCgkJKSwNCgkJYXJyYXkoDQoJCQknc21kX3RhZ190b19yZW1vdmUnID0+ICcn LA0KCQkpLA0KCQlhcnJheSgNCgkJCTEgPT4gc21kX3RhZ3NfZ1R4dCgncHJlZnNfcCcpLA0K CQkJOSA9PiBzbWRfdGFnc19nVHh0KCdwcmVmc190JyksDQoJCQkxOCA9PiBzbWRfdGFnc19n VHh0KCdwcmVmc191JyksDQoJCSkNCgkpOw0KfQ0KDQppZiAoIWRlZmluZWQoJ1NNRF9UQUcn KSkgew0KCWRlZmluZSgiU01EX1RBRyIsICdzbWRfdGFncycpOw0KfQ0KaWYgKCFkZWZpbmVk KCdTTURfVEFHQycpKSB7DQoJZGVmaW5lKCJTTURfVEFHQyIsICdzbWRfdGFnc19jYXQnKTsN Cn0NCmlmICghZGVmaW5lZCgnU01EX1RBR1UnKSkgew0KCWRlZmluZSgiU01EX1RBR1UiLCAn c21kX3RhZ3NfdXNlZCcpOw0KfQ0KcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90YWdzX3VybF9o YW5kbGVyJywgJ3ByZXRleHQnKTsNCg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF90YWdzKCRldmVudCwgJHN0ZXApIHsNCglnbG9iYWwgJHNtZF90YWdf cHJlZnM7DQoNCglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgNCgkJCSdz bWRfdGFnX2NyZWF0ZScsDQoJCQknc21kX3RhZ19kZWxldGUnLA0KCQkJJ3NtZF90YWdfY2F0 bGlzdCcsDQoJCQknc21kX3RhZ19wYXJlbnRsaXN0JywNCgkJCSdzbWRfdGFnX3NhdmUnLA0K CQkJJ3NtZF90YWdzX21hbmFnZScsDQoJCQknc21kX3RhZ3NfdGFibGVfaW5zdGFsbCcsDQoJ CQknc21kX3RhZ3NfdGFibGVfcmVtb3ZlJywNCgkJCSdzbWRfdGFnc19wcmVmc19kaXNwbGF5 JywNCgkJCSdzbWRfdGFnc19wcmVmc19pbnN0YWxsJywNCgkJCSdzbWRfdGFnc19wcmVmc19y ZW1vdmUnLA0KCQkJJ3NtZF90YWdzX3ByZWZzX3VwZGF0ZScsDQoJCSkpKSB7DQoJCSRwcmVm ID0gc21kX3RhZ3NfcHJlZl9nZXQoJ3NtZF90YWdfcF9maXJzdCcpOw0KCQlpZiAoJHByZWYp IHsNCgkJCXN3aXRjaCAoJHByZWZbJ3NtZF90YWdfcF9maXJzdCddWyd2YWwnXSkgew0KCQkJ CWNhc2UgMToNCgkJCQkJc21kX3RhZ3NfbWFuYWdlKCcnKTsNCgkJCQkJYnJlYWs7DQoJCQkJ Y2FzZSAwOg0KCQkJCWRlZmF1bHQ6DQoJCQkJCXNtZF90YWdzX3ByZWZzX3Nob3coJycpOw0K CQkJfQ0KCQl9IGVsc2Ugew0KCQkJc21kX3RhZ3NfcHJlZnNfc2hvdygnJyk7DQoJCX0NCgl9 IGVsc2UgJHN0ZXAoKTsNCn0NCg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8v IENyZWF0ZSBkcm9wZG93biBhbmQgcG9wdWxhdGUgaXQgd2l0aCB0YWdzIG9mIHRoZSByZWxl dmFudCB0eXBlDQpmdW5jdGlvbiBzbWRfbXVsdGlUcmVlU2VsZWN0SW5wdXQoJHNlbGVjdF9u YW1lID0gJycsICR0cmVlID0gJycsICR0YWdzID0gJycpIHsNCgkkcHJlZiA9IHNtZF90YWdz X3ByZWZfZ2V0KCdzbWRfdGFnX3Bfc2l6ZScsIDEpOw0KDQoJJG91dFtdID0gJzxzZWxlY3Qg aWQ9IicuJHNlbGVjdF9uYW1lLiciIG5hbWU9IicuJHNlbGVjdF9uYW1lLidbXSIgY2xhc3M9 Imxpc3QiIHNpemU9IicuICRwcmVmWydzbWRfdGFnX3Bfc2l6ZSddWyd2YWwnXSAuJyIgbXVs dGlwbGU9Im11bHRpcGxlIj4nOw0KCWZvcmVhY2ggKCR0cmVlIGFzICRsZWFmKSB7DQoJCWlm ICgkbGVhZlsnbmFtZSddID09ICdyb290JykgY29udGludWU7DQoNCgkJJHNlbGVjdGVkPScn Ow0KCQlmb3JlYWNoICgkdGFncyBhcyAkZ2lkID0+ICRpdGVtKSB7DQoJCQlpZiAoJGxlYWZb J2lkJ10gPT0gJGl0ZW1bJ3RhZ19pZCddKSB7DQoJCQkJJHNlbGVjdGVkID0gJyBzZWxlY3Rl ZD0ic2VsZWN0ZWQiJzsNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJfQ0KDQoJCSRsZWFmWydu YW1lJ10gPSBodG1sc3BlY2lhbGNoYXJzKCRsZWFmWyduYW1lJ10pOw0KCQkkaW5kZW50ID0g KCRsZWFmWydsZXZlbCddID4gMCkgPyBzdHJfcmVwZWF0KHNwLnNwLCRsZWFmWydsZXZlbCdd KSA6ICcnOw0KCQkkb3V0W10gPSB0Lic8b3B0aW9uIHZhbHVlPSInLiRsZWFmWydpZCddLici Jy4kc2VsZWN0ZWQuJz4nLiRpbmRlbnQuYWRkc2xhc2hlcygkbGVhZlsndGl0bGUnXSkuJzwv b3B0aW9uPic7DQoJfQ0KCSRvdXRbXSA9ICc8L3NlbGVjdD4nOw0KCXJldHVybiBqb2luKCcn LCRvdXQpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIENhbGxlZCB3 aGVuZXZlciBvbmUgb2YgdGhlIDQgbWFpbiB0YWJzIGFyZSB1c2VkIG9uIHRoZSBhZG1pbiBz aWRlLiBJbnNlcnRzIHRoZSBpbnB1dCBtZXRob2QgaWYgcmVxdWlyZWQNCmZ1bmN0aW9uIHNt ZF90YWdzX2xvYWRsaXN0KCRldmVudCwgJHN0ZXApIHsNCglpZiAoc21kX3RhZ3NfdGFibGVf ZXhpc3QoKSkgew0KCQkkY3RybHMgPSBzbWRfdGFnc19wcmVmX2dldChhcnJheSgnc21kX3Rh Z19wX2VuYWJsZScsICdzbWRfdGFnX3BfaW5wdXQnLCAnc21kX3RhZ19wX3NpemUnLCAnc21k X3RhZ19wX3F0YWcnLCAnc21kX3RhZ19wX3F0cGF0aCcsICdzbWRfdGFnX3BfcXRzdHlsJywg J3NtZF90YWdfcF9saW5rY2F0JyksIDEpOw0KCQkkb25vZmYgPSBzbWRfdGFnc19wcmVmX2V4 cGxvZGUoJGN0cmxzWydzbWRfdGFnX3BfZW5hYmxlJ11bJ3ZhbCddKTsNCgkJJGlwdHlwID0g JGN0cmxzWydzbWRfdGFnX3BfaW5wdXQnXVsndmFsJ107DQoJCSRzZWxzeiA9ICRjdHJsc1sn c21kX3RhZ19wX3NpemUnXVsndmFsJ107DQoJCSRxdWljayA9ICRjdHJsc1snc21kX3RhZ19w X3F0YWcnXVsndmFsJ107DQoJCSRqc2RpciA9ICRjdHJsc1snc21kX3RhZ19wX3F0cGF0aCdd Wyd2YWwnXTsNCgkJJGNzZGlyID0gJGN0cmxzWydzbWRfdGFnX3BfcXRzdHlsJ11bJ3ZhbCdd Ow0KCQkkY2xpbmsgPSAkY3RybHNbJ3NtZF90YWdfcF9saW5rY2F0J11bJ3ZhbCddOw0KCQkk anN0YWlsID0gKCRqc2RpcikgPyAnLycgOiAnJzsNCgkJJGNzdGFpbCA9ICgkY3NkaXIpID8g Jy8nIDogJyc7DQoJCSRhZGRJdCA9IGZhbHNlOw0KDQoJCSRpdGVtSUQgPSBzbWRfZ2V0SUQo KTsNCgkJJGVkdEJ0biA9ICcgWycuZUxpbmsoJ3NtZF90YWdzJywgJ3NtZF90YWdzX21hbmFn ZScsICdzbWRfdGFnX3R5cGUnLCAkZXZlbnQsIGdUeHQoJ2VkaXQnKSkuJ10gJzsNCgkJJHRh Z3RvcCA9ICc8ZGl2IGNsYXNzPSJzbWRfdG9wIj4nLnNtZF90YWdzX2dUeHQoJ3RpdGxlJyku JGVkdEJ0bi4nPC9kaXY+JzsNCgkJJHNlbGlzdCA9ICc8ZGl2IGlkPSJzbWRfdGFncyIgbmFt ZT0ic21kX3RhZ3NfYnlsaXN0IiBjbGFzcz0ic21kX3RhZ2lwIj48L2Rpdj4nOw0KCQkkc2Vs aGlkID0gJzxkaXYgaWQ9InNtZF90YWdzIiBuYW1lPSJzbWRfdGFnc19ieWxpc3QiIGNsYXNz PSJzbWRfaGlkZSI+PC9kaXY+JzsNCgkJc3dpdGNoICgkaXB0eXApIHsNCgkJCWNhc2UgMDoN CgkJCQkkaXBtZXRoID0gJHNlbGlzdDsNCgkJCQlicmVhazsNCgkJCWNhc2UgMToNCgkJCQkk aXBtZXRoID0gJzx0ZXh0YXJlYSBuYW1lPSJzbWRfdGFnc19ieXRleHQiIHJvd3M9IicuJHNl bHN6LiciIGNsYXNzPSJzbWRfdGFnaXAiPjwvdGV4dGFyZWE+Jy4kc2VsaGlkOw0KCQkJCWJy ZWFrOw0KCQkJY2FzZSAyOg0KCQkJCSRpcG1ldGggPSAnPGRpdiBuYW1lPSJzbWRfdGFnc19i eWxpbmsiIGlkPSJzbWRfdGFnc19ieWxpbmsiIGNsYXNzPSJzbWRfdGFnaXAiPjwvZGl2Picu JHNlbGhpZDsNCgkJCQlicmVhazsNCgkJfQ0KDQoJCXN3aXRjaCAoJGV2ZW50KSB7DQoJCQlj YXNlICJhcnRpY2xlIjoNCgkJCQkkYWRkSXQgPSAoJG9ub2ZmW2dUeHQoJ3RhYl9saXN0Jyld ID09IDEpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJCWlmICgkYWRkSXQpIHsNCgkJCQkJZXh0cmFj dChncHNhKGFycmF5KCd2aWV3JywnZnJvbV92aWV3JykpKTsNCgkJCQkJJHZpZXcgPSAoJHZp ZXcpID8gJHZpZXcgOiAidGV4dCI7DQoJCQkJCSRncmFiY2F0cyA9ICdqUXVlcnkoIiNjYXRl Z29yeS0xIG9wdGlvbjpzZWxlY3RlZCwgI2NhdGVnb3J5LTIgb3B0aW9uOnNlbGVjdGVkIikn Ow0KCQkJCQkkanNFbGVtID0gJ2pRdWVyeSgiI2NhdGVnb3J5LTIiKSc7DQoJCQkJCSR0cmln Z2VyID0gJ2pRdWVyeSgiI2NhdGVnb3J5LTEsICNjYXRlZ29yeS0yIiknOw0KCQkJCQlpZiAo JHZpZXcgIT0gJ3RleHQnKSB7DQoJCQkJCQkkdGFndG9wID0gJGlwbWV0aCA9ICcnOw0KCQkJ CQl9DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiaW1hZ2UiOg0KCQkJCWlmICgkc3Rl cCA9PSAiaW1hZ2VfZWRpdCIpIHsNCgkJCQkJJGFkZEl0ID0gKCRvbm9mZltnVHh0KCd0YWJf aW1hZ2UnKV0gPT0gMSkgPyB0cnVlIDogZmFsc2U7DQoJCQkJCWlmICgkYWRkSXQpIHsNCgkJ CQkJCSRncmFiY2F0cyA9ICdqUXVlcnkoIiNpbWFnZS1jYXRlZ29yeSBvcHRpb246c2VsZWN0 ZWQiKSc7DQoJCQkJCQkkanNFbGVtID0gJHRyaWdnZXIgPSAialF1ZXJ5KCcjaW1hZ2UtY2F0 ZWdvcnknKSI7DQoJCQkJCX0NCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJmaWxlIjoN CgkJCQlpZiAoJHN0ZXAgPT0gImZpbGVfZWRpdCIpIHsNCgkJCQkJJGFkZEl0ID0gKCRvbm9m ZltnVHh0KCd0YWJfZmlsZScpXSA9PSAxKSA/IHRydWUgOiBmYWxzZTsNCgkJCQkJaWYgKCRh ZGRJdCkgew0KCQkJCQkJJGdyYWJjYXRzID0gJ2pRdWVyeSgic2VsZWN0W0BuYW1lPVwnY2F0 ZWdvcnlcJ10gb3B0aW9uOnNlbGVjdGVkIiknOw0KCQkJCQkJJGpzRWxlbSA9ICR0cmlnZ2Vy ID0gJ2pRdWVyeSgic2VsZWN0W0BuYW1lPVwnY2F0ZWdvcnlcJ10iKSc7DQoJCQkJCX0NCgkJ CQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJsaW5rIjoNCgkJCQkkYWRkSXQgPSAoJG9ub2Zm W2dUeHQoJ3RhYl9saW5rJyldID09IDEpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJCWlmICgkYWRk SXQpIHsNCgkJCQkJJHRhZ3RvcCA9ICcnOw0KCQkJCQkkaXBtZXRoID0gdHIoZkxhYmVsQ2Vs bChzbWRfdGFnc19nVHh0KCd0aXRsZScpLCAnJywgJ3NtZF90YWdzJykgLiB0ZGEoJGVkdEJ0 bi5ici4kaXBtZXRoKSk7DQoJCQkJCSRncmFiY2F0cyA9ICdqUXVlcnkoIiNsaW5rLWNhdGVn b3J5IG9wdGlvbjpzZWxlY3RlZCIpJzsNCgkJCQkJJGpzRWxlbSA9ICR0cmlnZ2VyID0gImpR dWVyeSgnI2xpbmstY2F0ZWdvcnknKS5wYXJlbnQoKSI7DQoJCQkJfQ0KCQkJCWJyZWFrOw0K CQl9DQoNCgkJLy8gQWRkIHRoZSBkcm9wZG93biBhbmQganMgdG9nZ2xlL2NsZWFyIG9wdGlv bnMgaWYgcmVxdWlyZWQNCgkJaWYgKCRhZGRJdCkgew0KCQkJJHFzID0gYXJyYXkoDQoJCQkJ ImV2ZW50IiA9PiAic21kX3RhZ3MiLA0KCQkJKTsNCg0KCQkJJHFzVmFycyA9ICJpbmRleC5w aHAiLmpvaW5fcXMoJHFzKTsNCg0KCQkJaWYgKCRxdWljayA+IDApIHsNCgkJCQllY2hvIDw8 PEVPSlMNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InskanNkaXJ9eyRq c3RhaWx9anF1ZXJ5LmF1dG9jb21wbGV0ZS5wYWNrLmpzIj48L3NjcmlwdD4NCjxsaW5rIHJl bD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InskY3NkaXJ9eyRjc3RhaWx9 anF1ZXJ5LmF1dG9jb21wbGV0ZS5jc3MiPjwvc2NyaXB0Pg0KDQpFT0pTOw0KCQkJfQ0KCQkJ ZWNobyA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpqUXVlcnko ZnVuY3Rpb24oKSB7DQoJeyRqc0VsZW19LnBhcmVudCgpLmFmdGVyKCd7JHRhZ3RvcH17JGlw bWV0aH0nKTsNCg0KCWZ1bmN0aW9uIHNtZF90YWdMaXN0KHR5cCkgew0KCQl2YXIgZ3JhYmNh dHMgPSBbXTsNCgkJeyRncmFiY2F0c30uZWFjaChmdW5jdGlvbigpIHsNCgkJICAgZ3JhYmNh dHMucHVzaChqUXVlcnkodGhpcykudmFsKCkpOw0KCQl9KTsNCgkJZ3JhYmNhdHMgPSBncmFi Y2F0cy5qb2luKCIsIik7DQoNCgkJalF1ZXJ5LnBvc3QoJ3skcXNWYXJzfScsIHsgc3RlcDog InNtZF90YWdfcGFyZW50bGlzdCIsIG5hbWU6ICdzbWRfdGFnX3BhcmVudCcsIHR5cGU6IHR5 cCwgY2F0OiBncmFiY2F0cywgaXRlbWlkOiAieyRpdGVtSUR9IiB9LA0KCQkJZnVuY3Rpb24o ZGF0YSkgew0KCQkJCWpRdWVyeSgiI3NtZF90YWdzIikuaHRtbChkYXRhKTsNCgkJCQlqUXVl cnkoIiNzbWRfdGFnc19ieWxpbmsiKS5lbXB0eSgpOw0KCQkJCXZhciBzbWRfdGFncG9vbCA9 IFtdOw0KCQkJCXZhciBzbWRfdGFnc2VsID0gW107DQoJCQkJdmFyIHNtZF90YWdsaW5rcyA9 IFtdOw0KCQkJCWpRdWVyeSgnI3NtZF90YWdzIHNlbGVjdCBvcHRpb24nKS5lYWNoKGZ1bmN0 aW9uKCkgew0KCQkJCQl2YXIgY3VyciA9IGpRdWVyeSh0aGlzKTsNCgkJCQkJdmFyIHR4dCA9 IGpRdWVyeS50cmltKGN1cnIudGV4dCgpKTsNCgkJCQkJc21kX3RhZ3Bvb2wucHVzaCh0eHQp Ow0KDQoNCgkJCQkJaWYgKGpRdWVyeSgiI3NtZF90YWdzX2J5bGluayIpLnRleHQoKSAhPSAi Iikgew0KCQkJCQkJalF1ZXJ5KCIjc21kX3RhZ3NfYnlsaW5rIikuYXBwZW5kKCIgJm1pZGRv dCAiKTsNCgkJCQkJfQ0KDQoJCQkJCWlmIChjdXJyLmF0dHIoInNlbGVjdGVkIikgPT0gdHJ1 ZSkgew0KCQkJCQkJc21kX3RhZ3NlbC5wdXNoKHR4dCk7DQoJCQkJCQlqUXVlcnkoIiNzbWRf dGFnc19ieWxpbmsiKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJzbWRfc2VsIj4nK3R4dCsnPC9z cGFuPicpOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJalF1ZXJ5KCIjc21kX3RhZ3NfYnlsaW5r IikuYXBwZW5kKCc8c3Bhbj4nK3R4dCsnPC9zcGFuPicpOw0KCQkJCQl9DQoJCQkJfSk7DQoN CgkJCQlqUXVlcnkoIiNzbWRfdGFnc19ieWxpbmsgc3BhbiIpLmNsaWNrKGZ1bmN0aW9uKCkg ew0KCQkJCQlqUXVlcnkodGhpcykudG9nZ2xlQ2xhc3MoInNtZF9zZWwiKTsNCgkJCQkJdmFy IGx0eHQgPSBqUXVlcnkodGhpcykudGV4dCgpOw0KCQkJCQlqUXVlcnkoIiNzbWRfdGFncyBz ZWxlY3Qgb3B0aW9uIikuZWFjaChmdW5jdGlvbigpIHsNCgkJCQkJCXZhciBjdXJyID0galF1 ZXJ5KHRoaXMpOw0KCQkJCQkJaWYgKGpRdWVyeS50cmltKGN1cnIudGV4dCgpKSA9PSBsdHh0 KSB7DQoJCQkJCQkJdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkOw0KCQkJCQkJfQ0K CQkJCQl9KTsNCgkJCQl9KTsNCgkJCQlqUXVlcnkoInRleHRhcmVhW0BuYW1lPSdzbWRfdGFn c19ieXRleHQnXSIpLnZhbChzbWRfdGFnc2VsLmpvaW4oIiwgIikpOw0KDQoJCQkJaWYgKHsk cXVpY2t9ID4gMCkgew0KCQkJCQlqUXVlcnkoInRleHRhcmVhW0BuYW1lPSdzbWRfdGFnc19i eXRleHQnXSIpLmF1dG9jb21wbGV0ZShzbWRfdGFncG9vbCwgew0KCQkJCQkJbXVsdGlwbGU6 IHRydWUsDQoJCQkJCQltdXN0TWF0Y2g6ICgoJHF1aWNrPT0yKT90cnVlOmZhbHNlKSwNCgkJ CQkJCWF1dG9GaWxsOiB0cnVlDQoJCQkJCX0pOw0KCQkJCX0NCgkJCQlqUXVlcnkoInRleHRh cmVhW0BuYW1lPSdzbWRfdGFnc19ieXRleHQnXSIpLmtleXVwKGZ1bmN0aW9uKCkgew0KCQkJ CQlzbWRfdGFnc1Jlc3luY1NlbGVjdCh7JHF1aWNrfSk7DQoJCQkJfSk7DQoJCQkJalF1ZXJ5 KCcjc21kX2NscicpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQkJCQlqUXVlcnkoJyNzbWRfdGFn cyBzZWxlY3Qgb3B0aW9uJykuYXR0cigic2VsZWN0ZWQiLCAiIik7DQoJCQkJfSk7DQoJCQkJ alF1ZXJ5KCcjc21kX3RvZycpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQkJCQlqUXVlcnkoJyNz bWRfdGFncyBzZWxlY3Qgb3B0aW9uJykuZWFjaChmdW5jdGlvbigpIHsNCgkJCQkJCXRoaXMu c2VsZWN0ZWQgPSAhdGhpcy5zZWxlY3RlZDsNCgkJCQkJfSk7DQoJCQkJfSk7DQoJCQl9DQoJ CSk7DQoJfQ0KDQoJc21kX3RhZ0xpc3QoJ3skZXZlbnR9Jyk7DQoJaWYgKHskY2xpbmt9KSB7 DQoJCXskdHJpZ2dlcn0uY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQkJc21kX3RhZ0xpc3QoJ3sk ZXZlbnR9Jyk7DQoJCX0pOw0KCX0NCg0KCWZ1bmN0aW9uIHNtZF90YWdzUmVzeW5jU2VsZWN0 KGx2bCkgew0KCQl2YXIgdGJUYWdzID0galF1ZXJ5KCJ0ZXh0YXJlYVtAbmFtZT0nc21kX3Rh Z3NfYnl0ZXh0J10iKS52YWwoKS5zcGxpdCgvLFxzKz8vKTsNCgkJalF1ZXJ5KCIjc21kX3Rh Z3Mgc2VsZWN0IG9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQl2YXIgY3VyciA9IGpR dWVyeSh0aGlzKTsNCgkJCWlmKGpRdWVyeS5pbkFycmF5KGpRdWVyeS50cmltKGN1cnIudGV4 dCgpKSwgdGJUYWdzKSA9PSAtMSkgew0KCQkJCWN1cnIuYXR0cigic2VsZWN0ZWQiLCAiIik7 DQoJCQl9IGVsc2Ugew0KCQkJCWN1cnIuYXR0cigic2VsZWN0ZWQiLCB0cnVlKTsNCgkJCX0N CgkJfSk7DQoJfQ0KfSk7DQo8L3NjcmlwdD4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQou c21kX2Zha2VidG4sDQojc21kX3RhZ3NfYnlsaW5rIHNwYW4gew0KCWNvbG9yOiM1NTU7DQoJ Y3Vyc29yOnBvaW50ZXI7DQp9DQouc21kX3RhZ2lwIHsNCgltYXJnaW46LjRlbSAwIC44ZW07 DQp9DQouc21kX2hpZGUgew0KCWRpc3BsYXk6bm9uZTsNCn0NCi5zbWRfc2VsIHsNCglmb250 LXdlaWdodDpib2xkOw0KCWNvbG9yOiMyMjIhaW1wb3J0YW50Ow0KfQ0KPC9zdHlsZT4NCkVP SlM7DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gVXBk YXRlIHRoZSB0YWdzIHVzZWQgdGFibGUgaWYgc29tZSB0YWdzIGhhdmUgYmVlbiBhZGRlZC9z YXZlZA0KZnVuY3Rpb24gc21kX3RhZ3Nfc2F2ZWxpc3QoJGV2ZW50LCAkc3RlcCkgew0KCWlm IChzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJCSRjdHJscyA9IHNtZF90YWdzX3ByZWZf Z2V0KGFycmF5KCdzbWRfdGFnX3BfcXRhZycpLCAxKTsNCgkJJHF1aWNrID0gJGN0cmxzWydz bWRfdGFnX3BfcXRhZyddWyd2YWwnXTsNCg0KCQkkaXRlbUlEID0gc21kX2dldElEKCk7DQoJ CWlmICgkaXRlbUlEKSB7DQoJCQkkc2F2ZVN0ZXBzID0gYXJyYXkoJ2ltYWdlX3NhdmUnLCdm aWxlX3NhdmUnLCdsaW5rX3NhdmUnLCdsaW5rX3Bvc3QnKTsNCgkJCWlmIChwcygnc2F2ZScp IHx8IGluX2FycmF5KCRzdGVwLCAkc2F2ZVN0ZXBzKSkNCgkJCQlzYWZlX2RlbGV0ZShTTURf VEFHVSwgJ2l0ZW1faWQ9IicuJGl0ZW1JRC4nIiBBTkQgdHlwZT0iJy4kZXZlbnQuJyInKTsN CgkJCSR0YWdzID0gcHMoJ3NtZF90YWdfcGFyZW50Jyk7DQoJCQkkdGFnc1RleHQgPSBwcmVn X3NwbGl0KCIvLFxzKz8vIiwgcHMoJ3NtZF90YWdzX2J5dGV4dCcpKTsNCgkJCWlmICgkdGFn cykgew0KCQkJCSR2YWxzID0gYXJyYXkoKTsNCgkJCQlmb3JlYWNoKCR0YWdzIGFzICR2YWwp ew0KCQkJCQlzYWZlX2luc2VydChTTURfVEFHVSwgJ3RhZ19pZCA9ICInLiR2YWwuJyIsIGl0 ZW1faWQ9IicuJGl0ZW1JRC4nIiwgdHlwZT0iJy4kZXZlbnQuJyInKTsNCgkJCQkJJHZhbHNb XSA9ICR2YWw7DQoJCQkJfQ0KCQ0KCQkJCS8vIElmIHdlJ3JlIGluIG5vbi1TVFJJQ1QgbW9k ZSBhbmQgdGhlcmUgYXJlIGFueSB0eXBlZCB0YWdzIHRoYXQgYXJlIG5vdCBpbiB0aGUgc2Vs ZWN0IGxpc3QsIGNoZWNrIHRoZXkgZXhpc3QgYW5kIGFkZCB0aGVtDQoJCQkJaWYgKCRxdWlj ayA8IDIpIHsNCgkJCQkJJGFkZGVkID0gc2FmZV9jb2x1bW4oInRpdGxlIiwgU01EX1RBRywg ImlkIElOICgnIi5qb2luKCInLCciLCR2YWxzKS4iJykgQU5EIHR5cGU9JyRldmVudCciKTsN CgkJCQkJJHRhZ3NUZXh0ID0gYXJyYXlfZGlmZigkdGFnc1RleHQsICRhZGRlZCk7DQoJCQkJ CWZvcmVhY2goJHRhZ3NUZXh0IGFzICR0YWcpIHsNCgkJCQkJCWlmICgkdGFnID09ICIiKSBj b250aW51ZTsNCgkJCQkJCSRleGlzdHMgPSBzYWZlX2ZpZWxkKCdpZCcsIFNNRF9UQUcsICJu YW1lID0gJyR0YWcnIEFORCB0eXBlID0gJyRldmVudCciKTsNCgkJCQkJCWlmICgkZXhpc3Rz KSB7DQoJCQkJCQkJc2FmZV9pbnNlcnQoU01EX1RBR1UsICd0YWdfaWQgPSAiJy4kZXhpc3Rz LiciLCBpdGVtX2lkPSInLiRpdGVtSUQuJyIsIHR5cGU9IicuJGV2ZW50LiciJyk7DQoJCQkJ CQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KLy8gSGFuZGxlIGNoYW5nZXMgdG8gdGhlIHRhZ3MgdGFibGUgZHVy aW5nIG11bHRpLWl0ZW0gZWRpdHMNCmZ1bmN0aW9uIHNtZF90YWdzX211bHRpX2VkaXQoJGV2 ZW50LCAkc3RlcCkgew0KCS8vIEluIFRYUCA0LjAuNiB0aGUgb25seSB0YWJzIHRvIGFsbG93 IG11bHRpLWVkaXRzIGFyZSB0aGUgQXJ0aWNsZSAobGlzdCkgYW5kIExpbmsgdGFicy4gQ2hl YXQgZm9yIG5vdw0KCWlmIChzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJCXN3aXRjaCAo JGV2ZW50KSB7DQoJCQljYXNlICJsaXN0IjoNCgkJCWNhc2UgImxpbmsiOg0KCQkJCSRtZXRo b2QgPSBwcygnZWRpdF9tZXRob2QnKTsNCgkJCQkkc2VsZWN0ZWQgPSBwcygnc2VsZWN0ZWQn KTsNCgkJCQlicmVhazsNCgkJCWRlZmF1bHQ6DQoJCQkJJG1ldGhvZCA9ICJkZWxldGUiOw0K CQkJCSRzZWxlY3RlZCA9IGFycmF5KHBzKCdpZCcpKTsNCgkJCQlicmVhazsNCgkJfQ0KDQoJ CS8vICdsaXN0JyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IGVxdWF0ZXMgdG8gYXJ0aWNsZXMN CgkJJHR5cGUgPSAoJGV2ZW50ID09ICJsaXN0IikgPyAiYXJ0aWNsZSIgOiAkZXZlbnQ7DQoN CgkJaWYgKCRzZWxlY3RlZCkgew0KCQkJc3dpdGNoICgkbWV0aG9kKSB7DQoJCQkJY2FzZSAi ZGVsZXRlIjoNCgkJCQkJJGlkcyA9IGFycmF5KCk7DQoJCQkJCWZvcmVhY2ggKCRzZWxlY3Rl ZCBhcyAkaWQpIHsNCgkJCQkJCSRpZCA9IGFzc2VydF9pbnQoJGlkKTsNCgkJCQkJCWlmIChz YWZlX2RlbGV0ZShTTURfVEFHVSwgJ2l0ZW1faWQgPSAnLiRpZC4nIEFORCB0eXBlPSInLiR0 eXBlLiciJykpIHsNCgkJCQkJCQkkaWRzW10gPSAkaWQ7DQoJCQkJCQl9DQoJCQkJCX0NCgkJ CQkJcmV0dXJuIGpvaW4oJywgJywgJGlkcyk7DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJ CXJldHVybiAnJzsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8g R3JhYiB0aGUgY3VycmVudCBhcnRpY2xlL2ltYWdlL2ZpbGUvbGluayBJRA0KZnVuY3Rpb24g c21kX2dldElEKCkgew0KCWlmKCFlbXB0eSgkR0xPQkFMU1snSUQnXSkpIHsgLy8gbmV3bHkt c2F2ZWQgaXRlbQ0KCQkkaXRlbUlEID0gaW50dmFsKCRHTE9CQUxTWydJRCddKTsNCgl9IGVs c2Ugew0KCQkkaXRlbUlEID0gKGdwcygnSUQnKSkgPyBncHMoJ0lEJykgOiBncHMoJ2lkJyk7 DQoJfQ0KCXJldHVybiAkaXRlbUlEOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF90YWdzX3RhYmxlX2V4aXN0KCRhbGw9JycpIHsNCglpZiAoJGFs bCkgew0KCQkkdGJscyA9IGFycmF5KFNNRF9UQUcgPT4gNywgU01EX1RBR0MgPT4gMiwgU01E X1RBR1UgPT4gMyk7DQoJCSRvdXQgPSBjb3VudCgkdGJscyk7DQoJCWZvcmVhY2ggKCR0Ymxz IGFzICR0YmwgPT4gJGNvbHMpIHsNCgkJCWlmIChncHMoJ2RlYnVnJykpIHsNCgkJCQllY2hv ICIrKyBUQUJMRSAiLiR0YmwuIiBIQVMgIi5jb3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywg JHRibCkpLiIgQ09MVU1OUzsgUkVRVUlSRVMgIi4kY29scy4iICsrIi5icjsNCgkJCX0NCgkJ CWlmIChjb3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywgJHRibCkpID09ICRjb2xzKSB7DQoJ CQkJJG91dC0tOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAoJG91dD09PTApID8gMSA6IDA7DQoJ fSBlbHNlIHsNCgkJaWYgKGdwcygnZGVidWcnKSkgew0KCQkJZWNobyAiKysgVEFCTEUgIi5T TURfVEFHLiIgSEFTICIuY291bnQoQHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF9UQUcpKS4i IENPTFVNTlM7IjsNCgkJfQ0KCQlyZXR1cm4oQHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF9U QUcpKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQWRkIHRh ZyB0YWJsZXMgaWYgbm90IGFscmVhZHkgaW5zdGFsbGVkDQpmdW5jdGlvbiBzbWRfdGFnc190 YWJsZV9pbnN0YWxsKCkgew0KCSR2ZXJzaW9uID0gbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCk7 DQoJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9IDA7DQoJaWYgKCR2ZXJzaW9uIDwgIjQu MS4yIikgew0KCQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddKys7DQoJCXRyaWdnZXJfZXJy b3IoInNtZF90YWdzIHJlcXVpcmVzIE15U1FMIHY0LjEuMiBvciBncmVhdGVyLiIpOw0KCX0g ZWxzZSB7DQoJCSRyZXQgPSAnJzsNCgkJJHNxbCA9IGFycmF5KCk7DQoJCSRzcWxbXSA9ICJD UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgIi5QRlguU01EX1RBRy4iYCAoDQoJCQlgaWRg IGludCg2KSBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwNCgkJCWBuYW1lYCB2YXJjaGFyKDY0 KSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KCQkJYHR5cGVgIHZhcmNoYXIoNjQpIE5PVCBOVUxM IGRlZmF1bHQgJycsDQoJCQlgcGFyZW50YCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0 ICcnLA0KCQkJYGxmdGAgaW50KDYpIE5PVCBOVUxMIGRlZmF1bHQgJzAnLA0KCQkJYHJndGAg aW50KDYpIE5PVCBOVUxMIGRlZmF1bHQgJzAnLA0KCQkJYHRpdGxlYCB2YXJjaGFyKDI1NSkg Tk9UIE5VTEwgZGVmYXVsdCAnJywNCgkJCVBSSU1BUlkgS0VZIChgaWRgKQ0KCQkpIEVOR0lO RT1NeUlTQU0gUEFDS19LRVlTPTEgQVVUT19JTkNSRU1FTlQ9NSAiOw0KDQoJCWlmICghc21k X3RhZ3NfdGFibGVfZXhpc3QoKSkgew0KCQkJJHNxbFtdID0gIklOU0VSVCBJTlRPIGAiLlBG WC5TTURfVEFHLiJgIFZBTFVFUyAoMSwgJ3Jvb3QnLCAnYXJ0aWNsZScsICcnLCAxLCAyLCAn cm9vdCcpIjsNCgkJCSRzcWxbXSA9ICJJTlNFUlQgSU5UTyBgIi5QRlguU01EX1RBRy4iYCBW QUxVRVMgKDIsICdyb290JywgJ2xpbmsnLCAnJywgMSwgMiwgJ3Jvb3QnKSI7DQoJCQkkc3Fs W10gPSAiSU5TRVJUIElOVE8gYCIuUEZYLlNNRF9UQUcuImAgVkFMVUVTICgzLCAncm9vdCcs ICdpbWFnZScsICcnLCAxLCAyLCAncm9vdCcpIjsNCgkJCSRzcWxbXSA9ICJJTlNFUlQgSU5U TyBgIi5QRlguU01EX1RBRy4iYCBWQUxVRVMgKDQsICdyb290JywgJ2ZpbGUnLCAnJywgMSwg MiwgJ3Jvb3QnKSI7DQoJCX0NCg0KCQkkc3FsW10gPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBF WElTVFMgYCIuUEZYLlNNRF9UQUdDLiJgICgNCgkJCWB0YWdfaWRgIGludCg2KSBOT1QgTlVM TCBkZWZhdWx0ICcwJywNCgkJCWBjYXRfaWRgIGludCg2KSBOT1QgTlVMTCBkZWZhdWx0ICcw JywNCgkJCVBSSU1BUlkgS0VZIChgdGFnX2lkYCxgY2F0X2lkYCkNCgkJKSBFTkdJTkU9TXlJ U0FNOyAiOw0KDQoJCSRzcWxbXSA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgIi5Q RlguU01EX1RBR1UuImAgKA0KCQkJYGl0ZW1faWRgIGludCgxMSkgTk9UIE5VTEwgZGVmYXVs dCAnMCcsDQoJCQlgdGFnX2lkYCBpbnQoNikgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJCQlg dHlwZWAgdmFyY2hhcig2NCkgTk9UIE5VTEwgZGVmYXVsdCAnJywNCgkJCVBSSU1BUlkgS0VZ IChgaXRlbV9pZGAsYHRhZ19pZGApDQoJCSkgRU5HSU5FPU15SVNBTTsgIjsNCg0KCQlpZihn cHMoJ2RlYnVnJykpIHsNCgkJCWRtcCgkc3FsKTsNCgkJfQ0KCQlmb3JlYWNoICgkc3FsIGFz ICRxcnkpIHsNCgkJCSRyZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOw0KCQkJaWYgKCRyZXQ9PT1m YWxzZSkgew0KCQkJCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsNCgkJCQllY2hvICI8 Yj4iLiRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10uIi48L2I+ICIubXlzcWxfZXJyb3IoKS4i PGJyIC8+XG4iOw0KCQkJCWVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+XG4iOw0KCQkJfQ0KCQl9 DQoJfQ0KDQoJaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPT0gMCkgew0KCQkkbWVz c2FnZSA9IHNtZF90YWdzX2dUeHQoJ3RibF9pbnN0YWxsZWQnKTsNCgkJc21kX3RhZ3NfcHJl ZnNfaW5zdGFsbCgkbWVzc2FnZSk7DQoJfSBlbHNlIHsNCgkJJG1lc3NhZ2UgPSBzbWRfdGFn c19nVHh0KCd0Ymxfbm90X2luc3RhbGxlZCcpOw0KCQlzbWRfdGFnc19wcmVmc19zaG93KCRt ZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRHJv cCB0YWcgdGFibGVzIGlmIGluIGRhdGFiYXNlDQpmdW5jdGlvbiBzbWRfdGFnc190YWJsZV9y ZW1vdmUoKSB7DQoJJHJldCA9ICcnOw0KCSRzcWwgPSBhcnJheSgpOw0KCSRHTE9CQUxTWyd0 eHBfZXJyX2NvdW50J10gPSAwOw0KCWlmIChzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJ CSRzcWxbXSA9ICJEUk9QIFRBQkxFIElGIEVYSVNUUyAiIC5QRlguU01EX1RBRy4gIjsgIjsN CgkJJHNxbFtdID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTICIgLlBGWC5TTURfVEFHVS4gIjsg IjsNCgkJJHNxbFtdID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTICIgLlBGWC5TTURfVEFHQy4g IjsgIjsNCgkJaWYoZ3BzKCdkZWJ1ZycpKSB7DQoJCQlkbXAoJHNxbCk7DQoJCX0NCgkJZm9y ZWFjaCAoJHNxbCBhcyAkcXJ5KSB7DQoJCQkkcmV0ID0gc2FmZV9xdWVyeSgkcXJ5KTsNCgkJ CWlmICgkcmV0PT09ZmFsc2UpIHsNCgkJCQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddKys7 DQoJCQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhwX2Vycl9jb3VudCddLiIuPC9iPiAiLm15 c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsNCgkJCQllY2hvICI8IS0tXG4gJHFyeSBcbi0tPlxu IjsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9PSAw KSB7DQoJCSRtZXNzYWdlID0gc21kX3RhZ3NfZ1R4dCgndGJsX3JlbW92ZWQnKTsNCgkJc21k X3RhZ3NfcHJlZnNfcmVtb3ZlKCRtZXNzYWdlKTsNCgl9IGVsc2Ugew0KCQkkbWVzc2FnZSA9 IHNtZF90YWdzX2dUeHQoJ3RibF9ub3RfcmVtb3ZlZCcpOw0KCQlzbWRfdGFnc19wcmVmc19z aG93KCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gQWRkIHBsdWdpbiBwcmVmZXJlbmNlcyB0byBwcmVmcw0KZnVuY3Rpb24gc21kX3RhZ3Nf cHJlZnNfaW5zdGFsbCgkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkc21kX3RhZ19wcmVmczsN Cg0KCSRjdHIgPSBzYWZlX2NvdW50KCd0eHBfcHJlZnMnLCAnZXZlbnQ9InNtZF90YWdzIicp ICsgMTsNCglmb3JlYWNoICgkc21kX3RhZ19wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkg ew0KCQlpZiAoIWZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7DQoJ CQkkaWQgPSBzYWZlX2luc2VydCgndHhwX3ByZWZzJywncHJlZnNfaWQ9MSwgbmFtZT0nLmRv UXVvdGUoZG9TbGFzaCgkcHJlZikpLicsIHZhbD0nLmRvUXVvdGUoZG9TbGFzaCgkZGZsdCkp LicsIGV2ZW50PSJzbWRfdGFncyIsIHBvc2l0aW9uPSInLiRjdHIuJyInKTsNCgkJCSRjdHIr KzsNCgkJfQ0KCX0NCgkkbWVzc2FnZSAuPSBzbWRfdGFnc19nVHh0KCdwcmVmc19pbnN0YWxs ZWQnKTsNCglzbWRfdGFnc19wcmVmc19zaG93KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZW1vdmUgcGx1Z2luIHByZWZlcmVuY2VzIGZyb20g cHJlZnMgdGFibGUuDQovLyBOb3RlOiBib3RoIHBhcnRzIG9mIHNtZF90YWdzX3ByZWZzIGFy cmF5IGFyZSBpdGVyYXRlZCBvdmVyIHRvIHRpZHkgdXAgYW55IGxlZ2FjeSBzZXR0aW5ncw0K ZnVuY3Rpb24gc21kX3RhZ3NfcHJlZnNfcmVtb3ZlKCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFs ICRzbWRfdGFnX3ByZWZzOw0KDQoJZm9yZWFjaCAoYXJyYXlfbWVyZ2UoJHNtZF90YWdfcHJl ZnNbMF0sJHNtZF90YWdfcHJlZnNbMV0pIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmIChm ZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlkID0gc2Fm ZV9kZWxldGUoJ3R4cF9wcmVmcycsJ25hbWU9Jy5kb1F1b3RlKGRvU2xhc2goJHByZWYpKSk7 DQoJCX0NCgl9DQoJJG1lc3NhZ2UgLj0gc21kX3RhZ3NfZ1R4dCgncHJlZnNfcmVtb3ZlZCcp Ow0KCXNtZF90YWdzX3ByZWZzX3Nob3coJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIFNhdmVzIHBsdWdpbiBwcmVmZXJlbmNlcw0KZnVuY3Rpb24g c21kX3RhZ3NfcHJlZnNfdXBkYXRlKCRtZXNzYWdlID0gJycpIHsNCglnbG9iYWwgJHNtZF90 YWdfcHJlZnM7DQoJJHBvc3QgPSBkb1NsYXNoKHN0cmlwUG9zdCgpKTsNCglmb3JlYWNoICgk c21kX3RhZ19wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkgew0KCQlpZiAoaXNzZXQoJHBv c3RbJHByZWZdKSkgew0KCQkJc2FmZV91cGRhdGUoInR4cF9wcmVmcyIsICJ2YWwgPSAnIi4k cG9zdFskcHJlZl0uIiciLCAibmFtZSA9ICciLmRvU2xhc2goJHByZWYpLiInIGFuZCBwcmVm c19pZCA9IDEiKTsNCgkJfQ0KCX0NCgkkbWVzc2FnZSAuPSBnVHh0KCdwcmVmZXJlbmNlc19z YXZlZCcpOw0KCXNtZF90YWdzX3ByZWZzX3Nob3coJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFNwbGl0IGEgbXVsdGktY2hhciBwcmVmZXJlbmNl IHZhbHVlIGludG8gYW4gYXJyYXkgb2Yga2V5cy92YWx1ZXMuDQovLyBOb3RlOiB2YWx1ZSBp cyBwYXNzZWQgaW4gYW5kIG5vdCByZWFkIGRpcmVjdGx5IGZyb20gdGhlIHByZWZzIGFycmF5 IGluIHRoaXMgZnVuY3Rpb24gLSBpbnRlbnRpb25hbGx5DQpmdW5jdGlvbiBzbWRfdGFnc19w cmVmX2V4cGxvZGUoJHZhbCkgew0KCSRvcmRlciA9IGFycmF5X3ZhbHVlcyhhcnJheShnVHh0 KCd0YWJfbGlzdCcpLGdUeHQoJ3RhYl9pbWFnZScpLGdUeHQoJ3RhYl9maWxlJyksZ1R4dCgn dGFiX2xpbmsnKSkpOw0KCSRvbm9mZiA9IGFycmF5X3ZhbHVlcyhwcmVnX3NwbGl0KCcvLycs ICR2YWwsIC0xLCBQUkVHX1NQTElUX05PX0VNUFRZKSk7DQoJJG91dCA9IGFycmF5KCk7DQoJ Zm9yZWFjaCgkb3JkZXIgYXMgJGtleTEgPT4gJHZhbHVlMSkgew0KCQkkb3V0WyhzdHJpbmcp JHZhbHVlMV0gPSAkb25vZmZbJGtleTFdOw0KCX0NCglyZXR1cm4gJG91dDsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBHZXQgdmFsdWVzIGZyb20gcHJlZnMgLSBw YXNzIGVpdGhlciBhIHNpbmdsZSBrZXkgb3IgYW4gYXJyYXkuDQovLyBJZiAybmQgYXJnIGlz IHNldCBhbmQgdGhlIHByZWYgZG9lc24ndCBleGlzdCwgcmVhZCBpdCBmcm9tIHRoZSBwbHVn aW4gZGVmYXVsdA0KZnVuY3Rpb24gc21kX3RhZ3NfcHJlZl9nZXQoJGtleXMsICRkZmx0PTAp IHsNCglnbG9iYWwgJHNtZF90YWdfcHJlZnM7DQoNCglpZiAoIWlzX2FycmF5KCRrZXlzKSkg ew0KCQkka2V5cyA9IGFycmF5KCRrZXlzKTsNCgl9DQoJJHByZWZrZXlzID0gZG9RdW90ZShp bXBsb2RlKCInLCciLGRvU2xhc2goJGtleXMpKSk7DQoJJHJzID0gc2FmZV9yb3dzKCduYW1l LHZhbCxodG1sJywndHhwX3ByZWZzJywnbmFtZSBJTiAoJy4kcHJlZmtleXMuJykgT1JERVIg QlkgbmFtZScpOw0KCSRwcmVmb3V0ID0gYXJyYXkoKTsNCglmb3JlYWNoKCRycyBhcyAkcHJl Zikgew0KCQkkcHJlZm91dFskcHJlZlsnbmFtZSddXSA9IGFycmF5X3NsaWNlKCRwcmVmLDEp Ow0KCX0NCglpZiAoJGRmbHQpIHsNCgkJZm9yZWFjaCAoJGtleXMgYXMgJHByZWYpIHsNCgkJ CWlmICghaXNzZXQoJHByZWZvdXRbJHByZWZdKSkgew0KCQkJCSRwcmVmb3V0WyRwcmVmXSA9 ICRzbWRfdGFnX3ByZWZzWzBdWyRwcmVmXTsNCgkJCX0NCgkJfQ0KCX0NCglyZXR1cm4gJHBy ZWZvdXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQ29tbW9uIGJ1 dHRvbnMgb24gdGhlIGFkbWluIHBhbmVsDQpmdW5jdGlvbiBzbWRfdGFnc19wcmVmc19idXR0 b25zKCkgew0KCSRyZXQgPSBhcnJheSAoDQoJCSdidG5QcmVmc1NhdmUnID0+IGZJbnB1dCgn c3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKSwNCgkJJ2J0bklu c3RhbGxUYmwnID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PXNtZF90 YWdzJy5hLidzdGVwPXNtZF90YWdzX3RhYmxlX2luc3RhbGwiIHN0eWxlPSJkaXNwbGF5Omlu bGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfdGFnc19nVHh0KCd0Ymxf aW5zdGFsbF9sYmwnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5SZW1vdmVU YmwnID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PXNtZF90YWdzJy5h LidzdGVwPXNtZF90YWdzX3RhYmxlX3JlbW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIiBv bnN1Ym1pdD0icmV0dXJuIHZlcmlmeShcJycuZ1R4dCgnYXJlX3lvdV9zdXJlJykuJ1wnKSI+ Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfdGFnc19nVHh0KCd0YmxfcmVtb3Zl X2xibCcpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JywNCgkJJ2J0bkluc3RhbGwnID0+ICc8 Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PXNtZF90YWdzJy5hLidzdGVwPXNt ZF90YWdzX3ByZWZzX2luc3RhbGwiIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQo J3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfdGFnc19nVHh0KCdwcmVmX2luc3RhbGxfbGJsJyks ICdzbWFsbGVyYm94JykuJzwvZm9ybT4nLA0KCQknYnRuUmVtb3ZlJyA9PiAnPGZvcm0gbWV0 aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1zbWRfdGFncycuYS4nc3RlcD1zbWRfdGFnc19w cmVmc19yZW1vdmUiIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcs ICdzdWJtaXQnLCBzbWRfdGFnc19nVHh0KCdwcmVmX3JlbW92ZV9sYmwnKSwgJ3NtYWxsZXJi b3gnKS4nPC9mb3JtPicsDQoJCSdidG5QcmVmcycgPT4gJzxmb3JtIG1ldGhvZD0icG9zdCIg YWN0aW9uPSI/ZXZlbnQ9c21kX3RhZ3MnLmEuJ3N0ZXA9c21kX3RhZ3NfcHJlZnNfZGlzcGxh eSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcs IHNtZF90YWdzX2dUeHQoJ3ByZWZfc2hvd19sYmwnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3Jt PicsDQoJCSdidG5NYW5hZ2UnID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2 ZW50PXNtZF90YWdzJy5hLidzdGVwPXNtZF90YWdzX21hbmFnZSIgc3R5bGU9ImRpc3BsYXk6 aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF90YWdzX2dUeHQoJ21h bmFnZV9sYmwnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5IZWxwJyA9PiAn PGEgaHJlZj0iP2V2ZW50PXBsdWdpbicuYS4nc3RlcD1wbHVnaW5faGVscCcuYS4nbmFtZT1z bWRfdGFnc19hZG1pbiIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4oJy4gZ1R4dCgnaGVscCcp IC4nKTwvYT4nLA0KCQknYnRuQ3JlYXRlJyA9PiBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdGFn X2NyZWF0ZScsIGdUeHQoJ2NyZWF0ZScpLCAnc21hbGxlcmJveCcsICcnLCAnc21kX3RhZ3Nf c3RlcD10aGlzLm5hbWU7c21kX3ByZXN1YigpJyksDQoJCSdidG5TYXZlJyA9PiBmSW5wdXQo J3N1Ym1pdCcsICdzbWRfdGFnX3NhdmUnLCBnVHh0KCdzYXZlJyksICdzbWFsbGVyYm94Jywg JycsICdzbWRfdGFnc19zdGVwPXRoaXMubmFtZTtzbWRfcHJlc3ViKCknKSwNCgkJJ2J0bkRl bGV0ZScgPT4gZklucHV0KCdzdWJtaXQnLCAnc21kX3RhZ19kZWxldGUnLCAnw5cnLCAnc21h bGxlcmJveCcsICcnLCAnc21kX3RhZ3Nfc3RlcD10aGlzLm5hbWU7c21kX3ByZXN1YigpJyks DQoJCSdidG5TdHlsZScgPT4gJyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJywNCgkp Ow0KCXJldHVybiAkcmV0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8v IEEgc3R1YiB0aGF0IGNhbiBiZSBjYWxsZWQgd2l0aG91dCBhICRtZXNzYWdlDQpmdW5jdGlv biBzbWRfdGFnc19wcmVmc19kaXNwbGF5KCkgew0KCQlzbWRfdGFnc19wcmVmc19zaG93KCcn KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBEaXNwbGF5IHRoZSBw cmVmcyBwYW5lbA0KZnVuY3Rpb24gc21kX3RhZ3NfcHJlZnNfc2hvdygkbWVzc2FnZSkgew0K CWdsb2JhbCAkc21kX3RhZ19wcmVmczsNCg0KCXBhZ2V0b3Aoc21kX3RhZ3NfZ1R4dCgncHJl ZnNfdGl0bGUnKSwkbWVzc2FnZSk7DQoJZXh0cmFjdChzbWRfdGFnc19wcmVmc19idXR0b25z KCkpOw0KDQoJLy8gUHJlZnMgY2hlY2sNCgkkcHJlZnNldCA9IHNtZF90YWdzX3ByZWZfZ2V0 KGFycmF5X2tleXMoJHNtZF90YWdfcHJlZnNbMF0pKTsNCgkkbnVtUmVxUHJlZnMgPSBjb3Vu dCgkc21kX3RhZ19wcmVmc1swXSk7DQoJJG51bVByZWZzID0gY291bnQoJHByZWZzZXQpOw0K DQoJZWNobyA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJLy8g Q29uY2F0ZW5hdGUgY2hlY2tib3ggb3B0aW9ucyBmb3Igc3RvcmFnZQ0KCWZ1bmN0aW9uIHNt ZF9wcmVzdWIoKSB7DQoJCXZhciBzbWRfb3V0ID0gIiI7DQoJCWpRdWVyeSgiOmNoZWNrYm94 IikuZWFjaChmdW5jdGlvbigpIHsNCgkJCXNtZF9vdXQgKz0gKHRoaXMuY2hlY2tlZCkgPyAx IDogMDsNCgkJfSk7DQoJCWpRdWVyeSgiI3NtZF90YWdfcF9lbmFibGUiKS52YWwoc21kX291 dCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KPC9zY3JpcHQ+DQpFT0pTOw0KCWVjaG8gc3Rh cnRUYWJsZSgnbGlzdCcpOw0KCWlmIChzbWRfdGFnc190YWJsZV9leGlzdCgxKSkgew0KCQkv LyBUYWJsZXMgaW5zdGFsbGVkDQoJCWlmICgkbnVtUHJlZnMgPT0gJG51bVJlcVByZWZzKSB7 DQoJCQkvLyBQcmVmcyBhbGwgaW5zdGFsbGVkDQoJCQllY2hvIHRyKHRkYShzdHJvbmcoc21k X3RhZ3NfZ1R4dCgncHJlZnNfdGl0bGUnKSkuJyAnLiRidG5IZWxwLCAnIGNvbHNwYW49IjUi JykpOw0KCQkJZWNobyB0cigNCgkJCQlmTGFiZWxDZWxsKHNtZF90YWdzX2dUeHQoJ2NvbnRy b2wnKS4nOicpDQoJCQkJLiB0ZGEoJGJ0blJlbW92ZSwgJGJ0blN0eWxlKQ0KCQkJCS4gdGRh KCRidG5SZW1vdmVUYmwsICRidG5TdHlsZSkNCgkJCQkuIHRkYSgkYnRuTWFuYWdlLCAkYnRu U3R5bGUpDQoJCQkpOw0KCQkJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9l dmVudD1zbWRfdGFncycuYS4nc3RlcD1zbWRfdGFnc19wcmVmc191cGRhdGUiIG9uc3VibWl0 PSJyZXR1cm4gc21kX3ByZXN1YigpOyI+JzsNCgkJCSRjdHIgPSAxOw0KCQkJZm9yZWFjaCAo JHByZWZzZXQgYXMgJHBuYW0gPT4gJHBhcnIpIHsNCgkJCQkkcHZhbCA9ICRwYXJyWyd2YWwn XTsNCgkJCQkkb3V0ID0gKGlzc2V0KCRzbWRfdGFnX3ByZWZzWzJdWyRjdHJdKSkgPyB0cih0 ZGNzKGhlZCgkc21kX3RhZ19wcmVmc1syXVskY3RyXSwgMiwgJyBjbGFzcz0icHJlZi1oZWFk aW5nIicpLCA0KSkgOiAnJzsNCgkJCQkkbGFiZWwgPSAnPGxhYmVsIGZvcj0iJy4kcG5hbS4n Ij4nLnNtZF90YWdzX2dUeHQoJHBuYW0pLic6PC9sYWJlbD4nOw0KCQkJCSRvdXQgLj0gdGRh KCRsYWJlbCwgJyBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBt aWRkbGU7IicpOw0KDQoJCQkJc3dpdGNoKCRwbmFtKSB7DQoJCQkJCWNhc2UgInNtZF90YWdf cF9lbmFibGUiOg0KCQkJCQkJJG9wdGlvbnMgPSBzbWRfdGFnc19wcmVmX2V4cGxvZGUoJHB2 YWwpOw0KCQkJCQkJJG91dCAuPSAnPHRkIGlkPSJzbWRfdGFnc19lbmFibGVfaG9sZGVyIiBj b2xzcGFuPSIzIj4nOw0KCQkJCQkJZm9yZWFjaCAoJG9wdGlvbnMgYXMgJG9wdCA9PiAkb25v ZmYpIHsNCgkJCQkJCQkkb3V0IC49ICc8bGFiZWw+Jy4kb3B0Lic8L2xhYmVsPicgLiBjaGVj a2JveCgiZW5hYmxlIi4kb3B0LCAxLCAkb25vZmYpIC4gJyZuYnNwOyZuYnNwOyc7DQoJCQkJ CQl9DQoJCQkJCQkkb3V0IC49ICc8L3RkPic7DQoJCQkJCQkkb3V0IC49IGZJbnB1dCgnaGlk ZGVuJywgJ3NtZF90YWdfcF9lbmFibGUnLCBpbXBsb2RlKCRvcHRpb25zKSwnJywnJywnJywn JywnJywnc21kX3RhZ19wX2VuYWJsZScpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgInNt ZF90YWdfcF9zaXplIjoNCgkJCQkJY2FzZSAic21kX3RhZ190X2NvbHMiOg0KCQkJCQljYXNl ICJzbWRfdGFnX3RfaGlsaXRlIjoNCgkJCQkJY2FzZSAic21kX3RhZ190X2hvdmVyIjoNCgkJ CQkJY2FzZSAic21kX3RhZ190X2luZGVudCI6DQoJCQkJCWNhc2UgInNtZF90YWdfdV9wbmFt IjoNCgkJCQkJY2FzZSAic21kX3RhZ191X3B0eXAiOg0KCQkJCQljYXNlICJzbWRfdGFnX3Vf c2VjIjoNCgkJCQkJCSRvdXQgLj0gdGFnKGZJbnB1dCgndGV4dCcsICRwbmFtLCAkcHZhbCwg J2VkaXQnLCAnJywgJycsIDEyLCAnJywgJHBuYW0pLCAndGQnLCAnIGNvbHNwYW49IjMiJyk7 DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAic21kX3RhZ19wX3F0cGF0aCI6DQoJCQkJCWNh c2UgInNtZF90YWdfcF9xdHN0eWwiOg0KCQkJCQkJJG91dCAuPSB0YWcoZklucHV0KCd0ZXh0 JywgJHBuYW0sICRwdmFsLCAnZWRpdCcsICcnLCAnJywgMzAsICcnLCAkcG5hbSksICd0ZCcs ICcgY29sc3Bhbj0iMyInKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlICJzbWRfdGFnX3Rf YXV0byI6DQoJCQkJCQkkb3V0IC49IHRkY3Mob25vZmZSYWRpbygkcG5hbSwgJHB2YWwpLDMp Ow0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgInNtZF90YWdfdF9jb2xzb3JkIjoNCgkJCQkJ CSRvdXQgLj0gdGRjcyhyYWRpbygkcG5hbSwwLCgoJHB2YWw9PTApPzE6MCkpLnNtZF90YWdz X2dUeHQoJ2J5X2NvbHVtbicpLiIgIiAuIHJhZGlvKCRwbmFtLDEsKCgkcHZhbD09MSk/MTow KSkuc21kX3RhZ3NfZ1R4dCgnYnlfcm93JykuIiAiLDMpOw0KCQkJCQkJYnJlYWs7DQoJCQkJ CWNhc2UgInNtZF90YWdfdF9kZWx0cmVlIjoNCgkJCQkJCSRvdXQgLj0gdGRjcyhyYWRpbygk cG5hbSwwLCgoJHB2YWw9PTApPzE6MCkpLnNtZF90YWdzX2dUeHQoJ2NoaWxkcmVuX3Bybycp LiIgIiAuIHJhZGlvKCRwbmFtLDEsKCgkcHZhbD09MSk/MTowKSkuc21kX3RhZ3NfZ1R4dCgn Y2hpbGRyZW5fZGVsJykuIiAiLDMpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgInNtZF90 YWdfdF9kZWx1c2VkIjoNCgkJCQkJY2FzZSAic21kX3RhZ190X2NvdW50IjoNCgkJCQkJY2Fz ZSAic21kX3RhZ19wX2xpbmtjYXQiOg0KCQkJCQkJJG91dCAuPSB0ZGNzKHllc25vUmFkaW8o JHBuYW0sICRwdmFsKSwzKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlICJzbWRfdGFnX3Bf Zmlyc3QiOg0KCQkJCQkJJG91dCAuPSB0ZGNzKHJhZGlvKCRwbmFtLDAsKCgkcHZhbD09MCk/ MTowKSkuc21kX3RhZ3NfZ1R4dCgncHJlZnNfcGFuZScpLiIgIiAuIHJhZGlvKCRwbmFtLDEs KCgkcHZhbD09MSk/MTowKSkuc21kX3RhZ3NfZ1R4dCgndGFnc19wYW5lJykuIiAiLDMpOw0K CQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgInNtZF90YWdfcF9xdGFnIjoNCgkJCQkJCSRvdXQg Lj0gdGRjcyhyYWRpbygkcG5hbSwwLCgoJHB2YWw9PTApPzE6MCkpLmdUeHQoJ29mZicpLiIg IiAuIHJhZGlvKCRwbmFtLDEsKCgkcHZhbD09MSk/MTowKSkuc21kX3RhZ3NfZ1R4dCgnYWNf c3RkJykuIiAiLiIgIiAuIHJhZGlvKCRwbmFtLDIsKCgkcHZhbD09Mik/MTowKSkuc21kX3Rh Z3NfZ1R4dCgnYWNfc3RyJykuIiAiLDMpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgInNt ZF90YWdfcF9pbnB1dCI6DQoJCQkJCQkkb3V0IC49IHRkY3MocmFkaW8oJHBuYW0sMCwoKCRw dmFsPT0wKT8xOjApKS5zbWRfdGFnc19nVHh0KCdzZWxfbGlzdCcpLiIgIiAuIHJhZGlvKCRw bmFtLDEsKCgkcHZhbD09MSk/MTowKSkuc21kX3RhZ3NfZ1R4dCgndGV4dGJveCcpLiIgIi4g cmFkaW8oJHBuYW0sMiwoKCRwdmFsPT0yKT8xOjApKS5zbWRfdGFnc19nVHh0KCd0ZXh0bGlz dCcpLiIgIiwzKTsNCgkJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQllY2hvIHRyKCRvdXQpOw0K CQkJCSRjdHIrKzsNCgkJCX0NCgkJCWVjaG8gdHIodGRhKCRidG5QcmVmc1NhdmUsICRidG5T dHlsZSkpOw0KCQkJZWNobyAnPC9mb3JtPic7DQoJCX0gZWxzZSBpZiAoJG51bVByZWZzID4g MCAmJiAkbnVtUHJlZnMgPCAkbnVtUmVxUHJlZnMpIHsNCgkJCS8vIFByZWZzIHBvc3NpYmx5 IGNvcnJ1cHQsIG9yIHBsdWdpbiB1cGRhdGVkDQoJCQllY2hvIHRyKHRkYShzdHJvbmcoc21k X3RhZ3NfZ1R4dCgncHJlZnNfc29tZScpKS5ici5icg0KCQkJCQkuc21kX3RhZ3NfZ1R4dCgn cHJlZnNfc29tZV9leHBsYWluJykuYnIuYnINCgkJCQkJLnNtZF90YWdzX2dUeHQoJ3ByZWZz X3NvbWVfb3B0czEnKSwgJyBjb2xzcGFuPSIyIicpDQoJCQkpOw0KCQkJZWNobyB0cigNCgkJ CQl0ZGEoJGJ0blJlbW92ZSwkYnRuU3R5bGUpDQoJCQkJLiB0ZGEoJGJ0bkluc3RhbGwsICRi dG5TdHlsZSkNCgkJCSk7DQoJCX0gZWxzZSB7DQoJCQkvLyBQcmVmcyBub3QgaW5zdGFsbGVk DQoJCQllY2hvIHRyKHRkYShzbWRfdGFnc19nVHh0KCdwcmVmc19ub3RfaW5zdGFsbGVkJyks ICcgY29sc3Bhbj0iMiInKSk7DQoJCQllY2hvIHRyKHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0 eWxlKSk7DQoJCX0NCgl9IGVsc2Ugew0KCQkvLyBUYWJsZXMgbm90IGluc3RhbGxlZA0KCQll Y2hvIHRyKHRkYShzdHJvbmcoc21kX3RhZ3NfZ1R4dCgncHJlZnNfc29tZV90YmwnKSkuYnIu YnINCgkJCQkuc21kX3RhZ3NfZ1R4dCgncHJlZnNfc29tZV9leHBsYWluJykuYnIuYnINCgkJ CQkuc21kX3RhZ3NfZ1R4dCgncHJlZnNfc29tZV9vcHRzMicpLCAnIGNvbHNwYW49IjIiJykN CgkJKTsNCgkJZWNobyB0cih0ZGEoJGJ0bkluc3RhbGxUYmwsICRidG5TdHlsZSkpOw0KCX0N CgllY2hvIGVuZFRhYmxlKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gTWFuYWdlIHRhZ3MgaW4gYSBzaW1pbGFyIHdheSB0byB0aGUgY2F0ZWdvcmllcyB0YWIN CmZ1bmN0aW9uIHNtZF90YWdzX21hbmFnZSgkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkc21k X3RhZ19wcmVmczsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdzbWRfdGFnX25h bWUnLCAnc21kX3RhZ190aXRsZScsICdzbWRfdGFnX3BhcmVudCcsICdzbWRfdGFnX2NhdCcs ICdzbWRfdGFnX3R5cGUnLCAnc21kX3RhZ19pZCcpKSkpOw0KCXBhZ2V0b3Aoc21kX3RhZ3Nf Z1R4dCgnbWFuYWdlX2xibCcpLCRtZXNzYWdlKTsNCglleHRyYWN0KHNtZF90YWdzX3ByZWZz X2J1dHRvbnMoKSk7DQoNCgkvLyBQcmVmcyBjaGVjaw0KCSRwcmVmc2V0ID0gc21kX3RhZ3Nf cHJlZl9nZXQoYXJyYXlfa2V5cygkc21kX3RhZ19wcmVmc1swXSkpOw0KCSRudW1SZXFQcmVm cyA9IGNvdW50KCRzbWRfdGFnX3ByZWZzWzBdKTsNCgkkbnVtUHJlZnMgPSBjb3VudCgkcHJl ZnNldCk7DQoNCgkkdHlwZXMgPSBhcnJheSgNCgkJJ2FydGljbGUnID0+IHVjZmlyc3QoZ3R4 dCgnYXJ0aWNsZScpKSwNCgkJJ2ltYWdlJyA9PiBndHh0KCd0YWdfaW1hZ2UnKSwNCgkJJ2Zp bGUnID0+IGd0eHQoJ2ZpbGUnKSwNCgkJJ2xpbmsnID0+IGd0eHQoJ3RhZ19saW5rJyksDQoJ CSk7DQoNCgkvLyBNYWtlIHVwIHRoZSByYWRpbyBidXR0b25zDQoJJHNtZF90YWdfdHlwZSA9 ICghZW1wdHkoJHNtZF90YWdfdHlwZSkpID8gJHNtZF90YWdfdHlwZSA6ICdhcnRpY2xlJzsN Cg0KCSRyYWRpb3MgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCR0eXBlcyBhcyAka2V5ID0+ICR2 YWwpIHsNCgkJJGlkID0gJ3NtZF90YWdzX3R5cGUtJy4ka2V5Ow0KCQkkcmFkaW9zW10gPSBu LnQucmFkaW8oJ3NtZF90YWdzX3R5cGUnLCAka2V5LCAoJHNtZF90YWdfdHlwZSA9PSAka2V5 KSA/IDEgOiAwLCAkaWQpLg0KCQkJCSc8bGFiZWwgZm9yPSInLiRpZC4nIj4nLiR2YWwuJzwv bGFiZWw+JzsNCgl9DQoJJHJhZGlvcyA9IGpvaW4oc3Auc3AsICRyYWRpb3MpLm47DQoNCgkv LyBDcmVhdGUgYWxsIHRoZSBsaXN0cyBidXQgaGlkZSB0aGVtIHdpdGggQ1NTLiBqUXVlcnkg dGFrZXMgb3ZlciBhbmQgc3dpdGNoZXMgYmV0d2VlbiB0aGVtIG9uIGRlbWFuZA0KCWlmIChz bWRfdGFnc190YWJsZV9leGlzdCgxKSAmJiAkbnVtUHJlZnMgPT0gJG51bVJlcVByZWZzKSB7 DQoJCSR0YWdDb2xzID0gKCRwcmVmc2V0WydzbWRfdGFnX3RfY29scyddWyd2YWwnXSA+IDAp ID8gJHByZWZzZXRbJ3NtZF90YWdfdF9jb2xzJ11bJ3ZhbCddIDogMTsNCgkJJGNvbE9yZGVy ID0gKCRwcmVmc2V0WydzbWRfdGFnX3RfY29sc29yZCddWyd2YWwnXSA9PSAwKSA/ICJieWNv bCIgOiAiYnlyb3ciOw0KCQkkY291bnRzID0gJHByZWZzZXRbJ3NtZF90YWdfdF9jb3VudCdd Wyd2YWwnXTsNCgkJJGNsaW5rID0gJHByZWZzZXRbJ3NtZF90YWdfcF9saW5rY2F0J11bJ3Zh bCddOw0KDQoJCWZvcmVhY2ggKGFycmF5X2tleXMoJHR5cGVzKSBhcyAkdHlwZSkgew0KCQkJ JGRpdnRhZ2lkID0gInNtZF90YWdzX2dycF8iLiR0eXBlOw0KCQkJJHRhZ2xpc3QgPSAidGFn c18iLiR0eXBlOw0KCQkJJCR0YWdsaXN0ID0gc21kX3RhZ19saXN0X2FkbSgNCgkJCQlhcnJh eSgNCgkJCQkJInR5cGUiID0+ICR0eXBlLA0KCQkJCQkid3JhcHRhZyIgPT4gInRhYmxlOiIu JHRhZ0NvbHMuIjpjb2xzOiIuJGNvbE9yZGVyLA0KCQkJCQkiY291bnQiID0+ICRjb3VudHMs DQoJCQkJCSJpbmRlbnQiID0+ICRwcmVmc2V0WydzbWRfdGFnX3RfaW5kZW50J11bJ3ZhbCdd DQoJCQkJKQ0KCQkJKTsNCg0KCQkJLy9UT0RPOiBGaW5kIGEgd2F5IHRvIGFkZCB0aGUgZGl2 dGFnaWQgb25seSB3aGVuIG5lZWRlZC4gQXQgdGhlIG1vbWVudCBpdCBhcHBlYXJzIHR3aWNl IG9uIHRoZSBwYWdlIChpbGxlZ2FsIERPTSkNCgkJCSR0YWdvdXRbJHR5cGVdID0gJzxkaXYg aWQ9IicuJGRpdnRhZ2lkLiciPicuJCR0YWdsaXN0Lic8L2Rpdj4nOw0KCQkJZWNobyAnPGRp diBjbGFzcz0ic21kX2hpZGRlbiI+Jy4kdGFnb3V0WyR0eXBlXS4nPC9kaXY+JzsNCgkJfQ0K DQoJCSRxcyA9IGFycmF5KA0KCQkJImV2ZW50IiA9PiAic21kX3RhZ3MiLA0KCQkpOw0KDQoJ CSRxc1ZhcnMgPSAiaW5kZXgucGhwIi5qb2luX3FzKCRxcyk7DQoNCgkJZWNobyA8PDxFT0pT DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJdmFyIHNtZF90YWdzX3N0ZXAg PSAnJzsNCg0KCS8vIFBhZ2UgaW5pdGlhbGlzYXRpb24NCglqUXVlcnkoZnVuY3Rpb24oKSB7 DQoJCS8vIEluZGljYXRlIHBhcmVudCBsaXN0IGlzIGxvYWRpbmcNCgkJalF1ZXJ5KCIuc21k X3RhZ3Nfc2hvd3BhcnMiKS5hamF4U3RhcnQoZnVuY3Rpb24oKSB7DQoJCQlqUXVlcnkodGhp cykuZmFkZVRvKCJub3JtYWwiLCAwLjMzKTsNCgkJfSkuYWpheFN0b3AoZnVuY3Rpb24oKSB7 DQoJCQlqUXVlcnkodGhpcykuZmFkZVRvKCJub3JtYWwiLCAxKTsNCgkJfSk7DQoNCgkJLy8g U3dpdGNoIGJldHdlZW4gdHlwZXMNCgkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc190 eXBlJ10iKS5jaGFuZ2UoZnVuY3Rpb24gKCkgew0KCQkJdmFyIHNtZF9uZXdjb250ZW50ID0g alF1ZXJ5KCIjc21kX3RhZ3NfZ3JwXyIralF1ZXJ5KHRoaXMpLnZhbCgpKS5odG1sKCk7DQoJ CQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdfaWQnXSIpLnZhbCgnJyk7IC8vIENoYW5n aW5nIHR5cGUgZm9yY2VzIGFueSAnc2F2ZScgdG8gdHJpZ2dlciB0aGUgJ2NyZWF0ZScgYmVo YXZpb3VyDQoJCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93bGlzdCIpLmh0bWwoc21kX25ld2Nv bnRlbnQpOw0KCQkJdmFyIG5hbSA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ19vbmFt ZSddIikudmFsKCk7DQoJCQl2YXIgdGlkID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFn X2lkJ10iKS52YWwoKTsNCgkJCXZhciB0eXAgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF90 YWdzX3R5cGUnXTpjaGVja2VkIikudmFsKCk7DQoJCQl2YXIgcGFyID0gJ3Jvb3QnOw0KCQkJ dmFyIGNhdCA9ICcnOw0KDQoJCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93bGlzdCB0ZCBzcGFu W25hbWU9J3NtZF90YWduYW0nXSIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQkJaWYgKGpRdWVy eSh0aGlzKS50ZXh0KCkgPT0gbmFtKSB7DQoJCQkJCWpRdWVyeSh0aGlzKS5wYXJlbnQoKS5h ZGRDbGFzcygnc21kX2N1cnJlbnQnKTsNCgkJCQkJcGFyID0galF1ZXJ5KHRoaXMpLnNpYmxp bmdzKCI6ZXEoMikiKS50ZXh0KCk7DQoJCQkJCWNhdCA9IGpRdWVyeSh0aGlzKS5zaWJsaW5n cygiOmVxKDMpIikudGV4dCgpOw0KCQkJCQl0aWQgPSAodGlkID09ICcnKSA/IGpRdWVyeSh0 aGlzKS5zaWJsaW5ncygiOmVxKDApIikudGV4dCgpIDogdGlkOw0KCQkJCX0gZWxzZSB7DQoJ CQkJCWpRdWVyeSh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnc21kX2N1cnJlbnQnKTsN CgkJCQl9DQoJCQl9KTsNCg0KCQkJLy8gUmUtaW5zZXJ0IHRoZSBJRCBpZiB0aGlzIG5hbWVk IGl0ZW0gZXhpc3RzIGluIHRoZSBuZXcgbGlzdA0KCQkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdz bWRfdGFnX2lkJ10iKS52YWwodGlkKTsNCg0KCQkJLy8gVXBkYXRlIHRoZSBVSQ0KCQkJc21k X3BhcmVudEhhbmRsZXIobmFtLCB0eXAsIHRpZCwgcGFyKTsNCgkJCXNtZF9jYXRIYW5kbGVy KGNhdCwgdHlwKTsNCgkJCWpRdWVyeSgiLnNtZF90YWdzX2xpbmtjYXQgc2VsZWN0IG9wdGlv blt2YWx1ZT0nIitjYXQrIiddIikuYXR0cigic2VsZWN0ZWQiLCB0cnVlKTsNCgkJCXNtZF9h dXRvZm9jdXMoKTsNCgkJCXNtZF9jZWxsSGFuZGxlcigpOw0KCQkJalF1ZXJ5KCJpbnB1dFtu YW1lPSdzbWRfdGFnc190eXBlJ10iKS5lYWNoKGZ1bmN0aW9uICgpIHsNCgkJCQlpZiAoalF1 ZXJ5KHRoaXMpLnZhbCgpID09IHR5cCkgew0KCQkJCQlqUXVlcnkodGhpcykubmV4dCgpLmFk ZENsYXNzKCdzbWRfY3VycmVudCcpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWpRdWVyeSh0aGlz KS5uZXh0KCkucmVtb3ZlQ2xhc3MoJ3NtZF9jdXJyZW50Jyk7DQoJCQkJfQ0KCQkJfSk7DQoJ CX0pOw0KDQoJCS8vIENhbGwgdGhlIG9uY2hhbmdlIGhhbmRsZXIgZm9yIHRoZSBjdXJyZW50 IHR5cGUNCgkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc190eXBlJ106Y2hlY2tlZCIp LmNoYW5nZSgpOw0KDQoJCS8vIEF1dG90YWcgLSBUT0RPOiBmb3JlaWduIGNoYXJhY3RlciBk dW1iZG93biBmb3IgVVJJDQoJCWlmICh7JHByZWZzZXRbJ3NtZF90YWdfdF9hdXRvJ11bJ3Zh bCddfSkgew0KCQkJc3BjUkUgPSAvXHMvZzsNCgkJCWJhZFJFID0gL1teYS16QS1aMC05X1wt XS9nOw0KCQkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc19uZXd0aXRsZSddIikua2V5 dXAoZnVuY3Rpb24oKSB7DQoJCQkJdGFnbmFtZSA9IGpRdWVyeSh0aGlzKS52YWwoKS5yZXBs YWNlKHNwY1JFLCAnLScpLnJlcGxhY2UoYmFkUkUsICcnKS50b0xvd2VyQ2FzZSgpOw0KCQkJ CWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ3NfbmV3bmFtZSddIikudmFsKHRhZ25hbWUp Ow0KCQkJfSk7DQoJCX0NCgkJLy8gQmluZCBFbnRlciBrZXkgdG8gY3JlYXRlDQoJCWpRdWVy eSgiaW5wdXRbbmFtZV49J3NtZF90YWcnXSIpLmtleXVwKGZ1bmN0aW9uKGV2KSB7DQoJCQlp ZiAoZXYua2V5Q29kZSA9PSAxMykgew0KCQkJCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3Rh Z19jcmVhdGUnXSIpLmNsaWNrKCk7DQoJCQl9DQoJCX0pOw0KCX0pOw0KDQoJLy8gS2VlcCB0 cmFjayBvZiB3aGljaCB0YWcgaGFzIGJlZW4gY2xpY2tlZCBzbyBpdCBjYW4gYmUgZWRpdGVk L3VwZGF0ZWQNCglmdW5jdGlvbiBzbWRfY2VsbEhhbmRsZXIoKSB7DQoJCS8vIENlbGwgaGln aGxpZ2h0cw0KCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93bGlzdCB0ZCIpLmVhY2goZnVuY3Rp b24oKSB7DQoJCQlpZiAoalF1ZXJ5LnRyaW0oalF1ZXJ5KHRoaXMpLnRleHQoKSkgIT0gIiIp IHsNCgkJCQlqUXVlcnkodGhpcykuaG92ZXIoDQoJCQkJCWZ1bmN0aW9uICgpIHsNCgkJCQkJ CWpRdWVyeSh0aGlzKS5hZGRDbGFzcygnc21kX2hvdmVyJyk7DQoJCQkJCX0sDQoJCQkJCWZ1 bmN0aW9uICgpIHsNCgkJCQkJCWpRdWVyeSh0aGlzKS5yZW1vdmVDbGFzcygnc21kX2hvdmVy Jyk7DQoJCQkJCX0NCgkJCQkpDQoJCQkJLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQkJCQl2YXIg bmFtID0galF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6ZXEoMCkiKS50ZXh0KCk7DQoJCQkJCXZh ciB0aWQgPSBqUXVlcnkodGhpcykuY2hpbGRyZW4oIjplcSgxKSIpLnRleHQoKTsNCgkJCQkJ dmFyIHR0bCA9IGpRdWVyeSh0aGlzKS5jaGlsZHJlbigiOmVxKDIpIikudGV4dCgpOw0KCQkJ CQl2YXIgcGFyID0galF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6ZXEoMykiKS50ZXh0KCk7DQoJ CQkJCXZhciBjYXQgPSBqUXVlcnkodGhpcykuY2hpbGRyZW4oIjplcSg0KSIpLnRleHQoKTsN CgkJCQkJdmFyIHR5cCA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ3NfdHlwZSddOmNo ZWNrZWQiKS52YWwoKQ0KCQkJCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdfb25hbWUn XSIpLnZhbChuYW0pOw0KCQkJCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX25ld25h bWUnXSIpLnZhbChuYW0pOw0KCQkJCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdfaWQn XSIpLnZhbCh0aWQpOw0KCQkJCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX25ld3Rp dGxlJ10iKS52YWwodHRsKTsNCgkJCQkJalF1ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCBzZWxl Y3Qgb3B0aW9uW3ZhbHVlPSciK2NhdCsiJ10iKS5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOw0K CQkJCQlzbWRfcGFyZW50SGFuZGxlcihuYW0sIHR5cCwgdGlkLCBwYXIpOw0KCQkJCQlqUXVl cnkoIi5zbWRfdGFnc19zaG93bGlzdCB0ZCIpLnJlbW92ZUNsYXNzKCdzbWRfY3VycmVudCcp Ow0KCQkJCQlqUXVlcnkodGhpcykuYWRkQ2xhc3MoJ3NtZF9jdXJyZW50Jyk7DQoJCQkJCXNt ZF9hdXRvZm9jdXMoKTsNCgkJCQl9KTsNCgkJCX0NCgkJfSk7DQoJfQ0KDQoJLy8gQXNrIFRY UCBmb3IgdGhlIHBhcmVudCBkcm9wZG93biB3aXRob3V0IGNoaWxkIGVudHJpZXMNCglmdW5j dGlvbiBzbWRfcGFyZW50SGFuZGxlcihuYW0sIHR5cCwgdGlkLCBwYXIpIHsNCgkJalF1ZXJ5 LnBvc3QoJ3skcXNWYXJzfScsIHsgc3RlcDogInNtZF90YWdfcGFyZW50bGlzdCIsIG5hbWU6 IG5hbSwgdHlwZTogdHlwLCBpZDogdGlkIH0sDQoJCQlmdW5jdGlvbihkYXRhKSB7DQoJCQkJ alF1ZXJ5KCIuc21kX3RhZ3Nfc2hvd3BhcnMiKS5odG1sKGRhdGEpOw0KCQkJCWlmIChwYXIg PT0gInJvb3QiIHx8IHBhciA9PSAiIikgew0KCQkJCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93 cGFycyBzZWxlY3Qgb3B0aW9uOmZpcnN0IikuYXR0cigic2VsZWN0ZWQiLCB0cnVlKTsNCgkJ CQl9IGVsc2Ugew0KCQkJCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93cGFycyBzZWxlY3Qgb3B0 aW9uW3ZhbHVlPSciK3BhcisiJ10iKS5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOw0KCQkJCX0N CgkJCX0NCgkJKTsNCgl9DQoNCgkvLyBBc2sgVFhQIGZvciB0aGUgY2F0ZWdvcnkgZHJvcGRv d24NCglmdW5jdGlvbiBzbWRfY2F0SGFuZGxlcihjYXQsIHR5cCkgew0KCQlqUXVlcnkoIi5z bWRfdGFnc19saW5rY2F0IikuZmFkZVRvKCJub3JtYWwiLCAwLjMzKTsNCgkJalF1ZXJ5LnBv c3QoJ3skcXNWYXJzfScsIHsgc3RlcDogInNtZF90YWdfY2F0bGlzdCIsIG5hbWU6IGNhdCwg dHlwZTogdHlwIH0sDQoNCg0KDQoNCg0KDQoJCQlmdW5jdGlvbihkYXRhKSB7DQoJCQkJalF1 ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCIpLmh0bWwoZGF0YSk7DQoJCQkJaWYgKGNhdCA9PSAi cm9vdCIgfHwgY2F0ID09ICIiKSB7DQoJCQkJCWpRdWVyeSgiLnNtZF90YWdzX2xpbmtjYXQg c2VsZWN0IG9wdGlvbjpmaXJzdCIpLmF0dHIoInNlbGVjdGVkIiwgdHJ1ZSk7DQoJCQkJfSBl bHNlIHsNCgkJCQkJalF1ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCBzZWxlY3Qgb3B0aW9uW3Zh bHVlPSciK2NhdCsiJ10iKS5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOw0KCQkJCX0NCgkJCQlq UXVlcnkoIi5zbWRfdGFnc19saW5rY2F0IikuZmFkZVRvKCJub3JtYWwiLCAxKTsNCgkJCX0N CgkJKTsNCgl9DQoNCglmdW5jdGlvbiBzbWRfYXV0b2ZvY3VzKCkgew0KCQlqUXVlcnkoImlu cHV0W25hbWU9J3NtZF90YWdzX25ld3RpdGxlJ10iKS5mb2N1cygpLnNlbGVjdCgpOw0KCX0N Cg0KCS8vIE1ha2Ugc3VyZSB3aGF0IGlzIGluIHRoZSBib3hlcyBpcyBQT1NUZWQgdmlhIHRo ZSBoaWRkZW4gZm9ybQ0KCWZ1bmN0aW9uIHNtZF9wcmVzdWIoKSB7DQoJCWpRdWVyeSgiaW5w dXRbbmFtZT0nc3RlcCddIikudmFsKHNtZF90YWdzX3N0ZXApOw0KCQlqUXVlcnkoImlucHV0 W25hbWU9J3NtZF90YWdfbmFtZSddIikudmFsKGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3Rh Z3NfbmV3bmFtZSddIikudmFsKCkpOw0KCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdf dGl0bGUnXSIpLnZhbChqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX25ld3RpdGxlJ10i KS52YWwoKSk7DQoJCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ190eXBlJ10iKS52YWwo alF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc190eXBlJ106Y2hlY2tlZCIpLnZhbCgpKTsN CgkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnX3BhcmVudCddIikudmFsKGpRdWVyeSgi LnNtZF90YWdzX3Nob3dwYXJzIG9wdGlvbjpzZWxlY3RlZCIpLnZhbCgpKTsNCgkJalF1ZXJ5 KCJpbnB1dFtuYW1lPSdzbWRfdGFnX2NhdCddIikudmFsKGpRdWVyeSgiLnNtZF90YWdzX2xp bmtjYXQgb3B0aW9uOnNlbGVjdGVkIikudmFsKCkpOw0KCQlqUXVlcnkoIiNzbWRfcG9zdGl0 Iikuc3VibWl0KCk7DQoJfQ0KPC9zY3JpcHQ+DQoNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+ DQouc21kX2hpZGRlbiB7DQoJZGlzcGxheTpub25lOw0KfQ0KLnNtZF9ob3ZlciB7DQoJY3Vy c29yOnBvaW50ZXI7DQoJYmFja2dyb3VuZDojeyRwcmVmc2V0WydzbWRfdGFnX3RfaG92ZXIn XVsndmFsJ119Ow0KfQ0KLnNtZF9jdXJyZW50IHsNCglmb250LXdlaWdodDpib2xkOw0KCWJh Y2tncm91bmQ6I3skcHJlZnNldFsnc21kX3RhZ190X2hpbGl0ZSddWyd2YWwnXX07DQp9DQou c21kX3RhZ3Nfc2hvd3BhcnMsDQouc21kX3RhZ3NfbGlua2NhdCB7DQoJd2lkdGg6MTJlbTsN Cn0NCjwvc3R5bGU+DQpFT0pTOw0KDQoJfQ0KDQoJLy8gVGhlIHRhZyBtYW5hZ2VtZW50IHRh YmxlDQoJZWNobyBzdGFydFRhYmxlKCdjb250cm9sJywnJywnJyw1KTsNCglpZiAoc21kX3Rh Z3NfdGFibGVfZXhpc3QoKSkgew0KCQkvLyBUYWJsZXMgaW5zdGFsbGVkDQoJCWlmICgkbnVt UHJlZnMgPT0gJG51bVJlcVByZWZzKSB7DQoJCQkvLyBQcmVmcyBhbGwgaW5zdGFsbGVkDQoJ CQllY2hvIHRyKA0KCQkJCWZMYWJlbENlbGwoc21kX3RhZ3NfZ1R4dCgnY29udHJvbCcpLic6 JykNCgkJCQkuIHRkYSgkYnRuUHJlZnMsICRidG5TdHlsZSkNCgkJCSk7DQoJCQllY2hvIGVu ZFRhYmxlKCk7DQoJCQllY2hvICc8Zm9ybSBtZXRob2Q9IlBPU1QiIGlkPSJzbWRfcG9zdGl0 IiBhY3Rpb249Ij9ldmVudD1zbWRfdGFncyIgb25zdWJtaXQ9InJldHVybiBzbWRfcHJlc3Vi KCk7Ij4nOw0KCQkJZWNobyBoSW5wdXQoJ3N0ZXAnLCAnJyk7DQoJCQllY2hvIGhJbnB1dCgn c21kX3RhZ19pZCcsICRzbWRfdGFnX2lkKTsNCgkJCWVjaG8gaElucHV0KCdzbWRfdGFnX25h bWUnLCAnJyk7DQoJCQllY2hvIGhJbnB1dCgnc21kX3RhZ19vbmFtZScsICRzbWRfdGFnX25h bWUpOw0KCQkJZWNobyBoSW5wdXQoJ3NtZF90YWdfcGFyZW50JywgJycpOw0KCQkJZWNobyBo SW5wdXQoJ3NtZF90YWdfY2F0JywgJycpOw0KCQkJZWNobyBoSW5wdXQoJ3NtZF90YWdfdGl0 bGUnLCAnJyk7DQoJCQllY2hvIGhJbnB1dCgnc21kX3RhZ190eXBlJywgJycpOw0KCQkJZWNo byAnPC9mb3JtPic7DQoJCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgkJCWVjaG8gdHIo dGRhKHN0cm9uZyhzbWRfdGFnc19nVHh0KCdtYW5hZ2VfbGJsJykpLicgJy4kYnRuSGVscCwg JyBjb2xzcGFuPSIxMSInKSk7DQoJCQllY2hvIHRyKA0KCQkJCWZMYWJlbENlbGwoZ1R4dCgn dGl0bGUnKS4nOicpDQoJCQkJLiB0ZChmSW5wdXQoJ3RleHQnLCAnc21kX3RhZ3NfbmV3dGl0 bGUnLCAkc21kX3RhZ190aXRsZSkpDQoJCQkJLiB0ZChnVHh0KCdwYXJlbnQnKS4nOicpDQoJ CQkJLiB0ZCgnJywgJycsICdzbWRfdGFnc19zaG93cGFycycpDQoJCQkJLiAoKCRjbGluaykN CgkJCQkJPyB0ZChzbWRfdGFnc19nVHh0KCdjbGlua19sYmwnKS4nOicpDQoJCQkJCQkuIHRk KCcnLCAnJywgJ3NtZF90YWdzX2xpbmtjYXQnKQ0KCQkJCQk6IHRkKHNwKS50ZChzcCkNCgkJ CQkpDQoJCQkJLiBmTGFiZWxDZWxsKGdUeHQoJ25hbWUnKS4nOicpDQoJCQkJLiB0ZGEoZklu cHV0KCd0ZXh0JywgJ3NtZF90YWdzX25ld25hbWUnLCAkc21kX3RhZ19uYW1lKSkNCgkJCQku IHRkYSgkYnRuU2F2ZSwgJGJ0blN0eWxlKQ0KCQkJCS4gdGRhKCRidG5DcmVhdGUsICRidG5T dHlsZSkNCgkJCQkuIHRkYSgkYnRuRGVsZXRlLCAkYnRuU3R5bGUpDQoJCQkpOw0KCQkJZWNo byB0cigNCgkJCQlmTGFiZWxDZWxsKHNtZF90YWdzX2dUeHQoJ2ZpbHRlcicpLic6JykNCgkJ CQkuIHRkY3MoJHJhZGlvcywgMTApDQoJCQkpOw0KCQkJZWNobyB0cigNCgkJCQl0ZChzcCkN CgkJCQkuIHRkY3MoJHRhZ291dFskc21kX3RhZ190eXBlXSwgMTAsICcnLCAnc21kX3RhZ3Nf c2hvd2xpc3QnKQ0KCQkJKTsNCgkJfSBlbHNlIGlmICgkbnVtUHJlZnMgPiAwICYmICRudW1Q cmVmcyA8ICRudW1SZXFQcmVmcykgew0KCQkJLy8gUHJlZnMgcG9zc2libHkgY29ycnVwdCwg b3IgcGx1Z2luIHVwZGF0ZWQNCgkJCWVjaG8gdHIoDQoJCQkJdGRhKHN0cm9uZyhzbWRfdGFn c19nVHh0KCdwcmVmc19zb21lJykpLmJyLmJyDQoJCQkJCS5zbWRfdGFnc19nVHh0KCdwcmVm c19zb21lX2V4cGxhaW4nKS5ici5icg0KCQkJCQkuc21kX3RhZ3NfZ1R4dCgncHJlZnNfc29t ZV9vcHRzMScpLCAnIGNvbHNwYW49IjIiJykNCgkJCSk7DQoJCQllY2hvIHRyKA0KCQkJCXRk YSgkYnRuUmVtb3ZlLCRidG5TdHlsZSkNCgkJCQkuIHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0 eWxlKQ0KCQkJKTsNCgkJfSBlbHNlIHsNCgkJCS8vIFByZWZzIG5vdCBpbnN0YWxsZWQNCgkJ CWVjaG8gdHIodGRhKHNtZF90YWdzX2dUeHQoJ3ByZWZzX25vdF9pbnN0YWxsZWQnKSwgJyBj b2xzcGFuPSIyIicpKTsNCgkJCWVjaG8gdHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUp KTsNCgkJfQ0KCX0gZWxzZSB7DQoJCS8vIFRhYmxlcyBub3QgaW5zdGFsbGVkDQoJCWVjaG8g dHIodGRhKHN0cm9uZyhzbWRfdGFnc19nVHh0KCdwcmVmc19zb21lX3RibCcpKS5ici5icg0K CQkJCS5zbWRfdGFnc19nVHh0KCdwcmVmc19zb21lX2V4cGxhaW4nKS5ici5icg0KCQkJCS5z bWRfdGFnc19nVHh0KCdwcmVmc19zb21lX29wdHMyJyksICcgY29sc3Bhbj0iMiInKQ0KCQkp Ow0KCQllY2hvIHRyKHRkYSgkYnRuSW5zdGFsbFRibCwgJGJ0blN0eWxlKSk7DQoJfQ0KCWVj aG8gZW5kVGFibGUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBT dG9yZSB0aGUgdGFnIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGVkaXRlZA0KZnVuY3Rpb24g c21kX3RhZ19zYXZlKCkgew0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdzbWRfdGFn X29uYW1lJywgJ3NtZF90YWdfbmFtZScsICdzbWRfdGFnX3RpdGxlJywgJ3NtZF90YWdfcGFy ZW50JywgJ3NtZF90YWdfY2F0JywgJ3NtZF90YWdfdHlwZScsICdzbWRfdGFnX2lkJykpKSk7 DQoNCgkkbWVzc2FnZSA9ICcnOw0KCSRzbWRfdGFnX3BhcmVudCA9ICghZW1wdHkoJHNtZF90 YWdfcGFyZW50KSkgPyAkc21kX3RhZ19wYXJlbnQgOiAncm9vdCc7DQoJJHNtZF90YWdfbmFt ZSA9ICghZW1wdHkoJHNtZF90YWdfbmFtZSkpID8gc2FuaXRpemVGb3JVcmwoJHNtZF90YWdf bmFtZSkgOiAnJzsNCg0KCS8vIENhbid0IHVzZSBzYWZlX3Vwc2VydCgpIGJlY2F1c2UgdGhl IFdIRVJFIGlzIGZvciBJRCBBTkQgdHlwZQ0KCWlmIChlbXB0eSgkc21kX3RhZ19pZCkpIHsN CgkJLy8gQ3JlYXRlDQoJCWlmIChlbXB0eSgkc21kX3RhZ19uYW1lKSkgew0KCQkJJG1lc3Nh Z2UgPSBzbWRfdGFnc19nVHh0KCdub19uYW1lJywgYXJyYXkoJ3t0eXBlfScgPT4gdWNmaXJz dCgkc21kX3RhZ190eXBlKSkpOw0KCQl9IGVsc2Ugew0KCQkJJGV4aXN0cyA9IHNhZmVfZmll bGQoJ25hbWUnLCBTTURfVEFHLCAibmFtZSA9ICckc21kX3RhZ19uYW1lJyBBTkQgdHlwZSA9 ICckc21kX3RhZ190eXBlJyIpOw0KCQkJJHBhcmV4ID0gc2FmZV9maWVsZCgnbmFtZScsIFNN RF9UQUcsICJuYW1lID0gJyRzbWRfdGFnX3BhcmVudCcgQU5EIHR5cGUgPSAnJHNtZF90YWdf dHlwZSciKTsNCgkJCWlmICgkZXhpc3RzKSB7DQoJCQkJJG1lc3NhZ2UgPSBzbWRfdGFnc19n VHh0KCdleGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiAkc21kX3RhZ19uYW1lLCAne3R5cGV9 JyA9PiB1Y2ZpcnN0KCRzbWRfdGFnX3R5cGUpKSk7DQoJCQl9IGVsc2Ugew0KCQkJCSRzbWRf dGFnX2lkID0gc2FmZV9pbnNlcnQoDQoJCQkJCVNNRF9UQUcsDQoJCQkJCSJuYW1lPSckc21k X3RhZ19uYW1lJywgdGl0bGU9JyRzbWRfdGFnX3RpdGxlJywgcGFyZW50PSciLigoJHBhcmV4 KSA/ICRzbWRfdGFnX3BhcmVudCA6ICdyb290JykuIicsIHR5cGU9JyRzbWRfdGFnX3R5cGUn Ig0KCQkJCSk7DQoNCgkJCQlpZiAoJHNtZF90YWdfaWQgPiAwKSB7DQoJCQkJCWlmICgkc21k X3RhZ19jYXQpIHsNCgkJCQkJCXNhZmVfaW5zZXJ0KFNNRF9UQUdDLCJ0YWdfaWQ9JyRzbWRf dGFnX2lkJywgY2F0X2lkPShTRUxFQ1QgaWQgRlJPTSAiLlBGWC4idHhwX2NhdGVnb3J5IFdI RVJFIG5hbWU9JyRzbWRfdGFnX2NhdCcgQU5EIHR5cGU9JyRzbWRfdGFnX3R5cGUnKSIpOw0K CQkJCQl9DQoJCQkJCSRtZXNzYWdlID0gc21kX3RhZ3NfZ1R4dCgnY3JlYXRlZCcsIGFycmF5 KCd7bmFtZX0nID0+ICRzbWRfdGFnX25hbWUsICd7dHlwZX0nID0+IHVjZmlyc3QoJHNtZF90 YWdfdHlwZSkpKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkbWVzc2FnZSA9IHNtZF90YWdzX2dU eHQoJ25vdF9jcmVhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHNtZF90YWdfbmFtZSwgJ3t0 eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBlKSkpOw0KCQkJCX0NCgkJCX0NCgkJCQkJ fQ0KCX0gZWxzZSB7DQoJCS8vIFVwZGF0ZSAtIG5vIG5lZWQgdG8gbWFpbnRhaW4gcmVmZXJl bnRpYWwgaW50ZWdyaXR5IHVubGlrZSB0eHBfY2F0cw0KCQkvLyBzaW5jZSB0YWdzIGFyZSBz dG9yZWQgYWdhaW5zdCBpdGVtIElEcw0KCQkkZXhpc3RpbmdfaWQgPSBzYWZlX2ZpZWxkKCdp ZCcsIFNNRF9UQUcsICJuYW1lID0gJyRzbWRfdGFnX25hbWUnIGFuZCB0eXBlID0gJyRzbWRf dGFnX3R5cGUnIik7DQoNCgkJaWYgKCRleGlzdGluZ19pZCBhbmQgJGV4aXN0aW5nX2lkICE9 ICRzbWRfdGFnX2lkKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF90YWdzX2dUeHQoJ2V4aXN0cycs IGFycmF5KCd7bmFtZX0nID0+ICRzbWRfdGFnX25hbWUsICd7dHlwZX0nID0+IHVjZmlyc3Qo JHNtZF90YWdfdHlwZSkpKTsNCgkJfSBlbHNlIHsNCgkJCWlmIChzYWZlX3VwZGF0ZSgNCgkJ CQkJU01EX1RBRywNCgkJCQkJIm5hbWU9JyRzbWRfdGFnX25hbWUnLCB0aXRsZT0nJHNtZF90 YWdfdGl0bGUnLCBwYXJlbnQ9JyRzbWRfdGFnX3BhcmVudCciLA0KCQkJCQkidHlwZT0nJHNt ZF90YWdfdHlwZScgQU5EIGlkPSRzbWRfdGFnX2lkIg0KCQkJCSkpIHsNCgkJCQlzYWZlX3Vw ZGF0ZShTTURfVEFHLCAicGFyZW50PSckc21kX3RhZ19uYW1lJyIsICJwYXJlbnQ9JyRzbWRf dGFnX29uYW1lJyBBTkQgdHlwZT0nJHNtZF90YWdfdHlwZSciKTsNCgkJCQlpZiAoJHNtZF90 YWdfY2F0KSB7DQoJCQkJCXNhZmVfdXBzZXJ0KFNNRF9UQUdDLCAiY2F0X2lkPShTRUxFQ1Qg aWQgRlJPTSAiLlBGWC4idHhwX2NhdGVnb3J5IFdIRVJFIG5hbWU9JyRzbWRfdGFnX2NhdCcg QU5EIHR5cGU9JyRzbWRfdGFnX3R5cGUnKSIsICJ0YWdfaWQgPSAnJHNtZF90YWdfaWQnIik7 DQoJCQkJfSBlbHNlIHsNCgkJCQkJc2FmZV9kZWxldGUoU01EX1RBR0MsICJ0YWdfaWQ9JHNt ZF90YWdfaWQiKTsNCgkJCQl9DQoJCQkJJG1lc3NhZ2UgPSBzbWRfdGFnc19nVHh0KCd1cGRh dGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHNtZF90YWdfbmFtZSwgJ3t0eXBlfScgPT4gdWNm aXJzdCgkc21kX3RhZ190eXBlKSkpOw0KCQkJfSBlbHNlIHsNCgkJCQkkbWVzc2FnZSA9IHNt ZF90YWdzX2dUeHQoJ25vdF91cGRhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHNtZF90YWdf bmFtZSwgJ3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBlKSkpOw0KCQkJfQ0KCQl9 DQoJfQ0KCXJlYnVpbGRfdHJlZV9mdWxsKCRzbWRfdGFnX3R5cGUsIFNNRF9UQUcpOw0KDQoJ Ly8gRm9yY2Ugc21kX3RhZ19pZCB0byB0aGUgbmV3IElEIHNvIGl0IGNhbiBiZSBpbW1lZGlh dGVseSBlZGl0ZWQNCgkkX1BPU1RbJ3NtZF90YWdfaWQnXSA9ICRzbWRfdGFnX2lkOw0KDQoJ c21kX3RhZ3NfbWFuYWdlKCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQovLyBTdG9yZSBuZXcgdGFnIC0gdXNlcyBzbWRfdGFnX3NhdmUgd2l0aG91dCB0 aGUgSUQvb2xkX25hbWUNCmZ1bmN0aW9uIHNtZF90YWdfY3JlYXRlKCkgew0KCWV4dHJhY3Qo ZG9TbGFzaChncHNhKGFycmF5KCdzbWRfdGFnX25hbWUnLCAnc21kX3RhZ190aXRsZScsICdz bWRfdGFnX3BhcmVudCcsICdzbWRfdGFnX3R5cGUnKSkpKTsNCgl1bnNldCgkX1BPU1RbJ3Nt ZF90YWdfaWQnXSk7DQoJc21kX3RhZ19zYXZlKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KLy8gRGVsZXRlIGN1cnJlbnRseSBlZGl0ZWQgdGFnLiBSZXNwZWN0cyBu b2Nsb2JiZXIvdHJlZSBpZiBwcmVmcyBzZXQNCmZ1bmN0aW9uIHNtZF90YWdfZGVsZXRlKCkg ew0KCWdsb2JhbCAkc21kX3RhZ19wcmVmczsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJh eSgnc21kX3RhZ19vbmFtZScsICdzbWRfdGFnX3R5cGUnLCAnc21kX3RhZ19pZCcpKSkpOw0K DQoJJHNtZF90YWdfaWQgPSBhc3NlcnRfaW50KCRzbWRfdGFnX2lkKTsNCg0KCSRwcmVmID0g c21kX3RhZ3NfcHJlZl9nZXQoYXJyYXkoJ3NtZF90YWdfdF9kZWx1c2VkJywgJ3NtZF90YWdf dF9kZWx0cmVlJykpOw0KCSRtZXNzYWdlID0gJG1zZ0V4dHJhID0gJyc7DQoNCglsaXN0KCRs ZnQsICRyZ3QpID0gYXJyYXlfdmFsdWVzKHNhZmVfcm93KCdsZnQsIHJndCcsIFNNRF9UQUcs ICdpZCA9ICcuJHNtZF90YWdfaWQpKTsNCgkkY2hpbGRyZW4gPSAoJHJndCAtICRsZnQgLSAx KSAvIDI7DQoJJHVzZWQgPSBzYWZlX2NvdW50KFNNRF9UQUdVLCAidGFnX2lkPSRzbWRfdGFn X2lkIEFORCB0eXBlPSckc21kX3RhZ190eXBlJyIpOw0KCSRkb2l0ID0gJHByZWZbJ3NtZF90 YWdfdF9kZWx1c2VkJ11bJ3ZhbCddOw0KCSR0cmVlID0gJHByZWZbJ3NtZF90YWdfdF9kZWx0 cmVlJ11bJ3ZhbCddOw0KDQoJaWYgKCRkb2l0ID09IDApIHsNCgkJaWYgKCR1c2VkIHx8ICRj aGlsZHJlbiA+IDApIHsNCgkJCSRtZXNzYWdlID0gc21kX3RhZ3NfZ1R4dCgnaW5fdXNlJywg YXJyYXkoJ3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBlKSwgJ3tuYW1lfScgPT4g JHNtZF90YWdfb25hbWUpKTsNCgkJfSBlbHNlIHsNCgkJCSRkb2l0ID0gMTsNCgkJfQ0KCX0N Cg0KCS8vIERvIHRoZSBkZWxldGUvdHJlZQ0KCWlmICgkZG9pdCkgew0KCQlpZiAoJHRyZWUp IHsNCgkJCSRpZHMgPSBzYWZlX2NvbHVtbignaWQnLCBTTURfVEFHLCAidHlwZSA9ICckc21k X3RhZ190eXBlJyBBTkQgKGxmdCBCRVRXRUVOICRsZnQgQU5EICRyZ3QpIik7DQoJCQkkbXNn RXh0cmEgPSBzbWRfdGFnc19nVHh0KCdjaGlsZHJlbl9hbmQnKTsNCgkJfSBlbHNlIHsNCgkJ CSRpZHMgPSBhcnJheSgkc21kX3RhZ19pZCk7DQoJCX0NCgkJJHdoZXJlID0gJ2lkIElOICgn LmRvUXVvdGUoaW1wbG9kZSgiJywnIiwkaWRzKSkuJyknOw0KDQoJCSRyZXQgPSBzYWZlX2Rl bGV0ZShTTURfVEFHLCAkd2hlcmUuIiBBTkQgdHlwZT0nJHNtZF90YWdfdHlwZSciKTsNCgkJ aWYgKCRyZXQpIHsNCgkJCWlmICghJHRyZWUpIHsNCgkJCQlzYWZlX3VwZGF0ZShTTURfVEFH LCAicGFyZW50PSdyb290JyIsICJ0eXBlPSckc21kX3RhZ190eXBlJyBhbmQgcGFyZW50PSck c21kX3RhZ19vbmFtZSciKTsNCgkJCX0NCgkJCWZvcmVhY2ggKCRpZHMgYXMgJGRlbGlkKSB7 DQoJCQkJc2FmZV9kZWxldGUoU01EX1RBR1UsICJ0YWdfaWQ9JGRlbGlkIEFORCB0eXBlPSck c21kX3RhZ190eXBlJyIpOw0KCQkJCXNhZmVfZGVsZXRlKFNNRF9UQUdDLCAidGFnX2lkPSRk ZWxpZCIpOw0KCQkJfQ0KCQl9DQoJCWlmICgkcmV0KSB7DQoJCQkkbWVzc2FnZSA9IHNtZF90 YWdzX2dUeHQoJ2RlbGV0ZWQnLCBhcnJheSgne3R5cGV9JyA9PiB1Y2ZpcnN0KCRzbWRfdGFn X3R5cGUpLCAne25hbWV9JyA9PiAkc21kX3RhZ19vbmFtZSkpLiRtc2dFeHRyYTsNCgkJCS8v IEZvcmNlIGFsbCBzbWRfdGFnXyBib3hlcyBjbGVhcg0KCQkJJF9QT1NUWydzbWRfdGFnX2lk J10gPSAkX1BPU1RbJ3NtZF90YWdfb25hbWUnXSA9ICRfUE9TVFsnc21kX3RhZ19uYW1lJ10g PSAkX1BPU1RbJ3NtZF90YWdfdGl0bGUnXSA9ICRfUE9TVFsnc21kX3RhZ19wYXJlbnQnXSA9 ICcnOw0KCQl9IGVsc2Ugew0KCQkJJG1lc3NhZ2UgPSBzbWRfdGFnc19nVHh0KCdub3RfZGVs ZXRlZCcsIGFycmF5KCd7dHlwZX0nID0+IHVjZmlyc3QoJHNtZF90YWdfdHlwZSksICd7bmFt ZX0nID0+ICRzbWRfdGFnX29uYW1lKSk7DQoJCX0NCgl9DQoJcmVidWlsZF90cmVlX2Z1bGwo JHNtZF90YWdfdHlwZSwgU01EX1RBRyk7DQoJc21kX3RhZ3NfbWFuYWdlKCRtZXNzYWdlKTsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBNSURETEVXQVJFIC0gQURN SU4vUFVCTElDIEdMVUUNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gR3JhYiBh IHZhbGlkIHRhZyBwYXJlbnQgbGlzdC4gQ2Fubm90IGJlIGRvbmUgZWFzaWx5IGZyb20gZml4 ZWQgZGF0YTogQUpBWCBpcyB0aGUgb25seSByZWxpYWJsZSB3YXkgOi0oDQpmdW5jdGlvbiBz bWRfdGFnX3BhcmVudGxpc3QoKSB7DQoJJHRyeWNhdCA9IGlzc2V0KCRfUE9TVFsnY2F0J10p Ow0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJywgJ3R5cGUnLCAnaWQnLCAn Y2F0JywgJ2l0ZW1pZCcpKSkpOw0KDQoJd2hpbGUoQG9iX2VuZF9jbGVhbigpKTsgLy8gR2V0 IHJpZCBvZiBhbnkgcGFnZSBzbyBmYXINCgkkdHlwZSA9ICgkdHlwZSA9PSAiIiB8fCAkdHlw ZSA9PSAidW5kZWZpbmVkIikgPyAnYXJ0aWNsZScgOiAkdHlwZTsNCgkkY2F0ID0gKCRjYXQg PT0gIiIgfHwgJGNhdCA9PSAidW5kZWZpbmVkIikgPyAnJyA6ICRjYXQ7DQoJJHRhZ3MgPSAo JGl0ZW1pZCA9PSAiIiB8fCAkaXRlbWlkID09ICJ1bmRlZmluZWQiKSA/IGFycmF5KCkgOiBz YWZlX3Jvd3MoInRhZ19pZCIsIFNNRF9UQUdVLCAidHlwZT0nJHR5cGUnIEFORCBpdGVtX2lk PSckaXRlbWlkJyIpOw0KCSRjbHJCdG4gPSAnWzxzcGFuIGlkPSJzbWRfY2xyIiBjbGFzcz0i c21kX2Zha2VidG4iPicuc21kX3RhZ3NfZ1R4dCgnY2xlYXInKS4nPC9zcGFuPl0nOw0KCSR0 b2dCdG4gPSAnWzxzcGFuIGlkPSJzbWRfdG9nIiBjbGFzcz0ic21kX2Zha2VidG4iPicuc21k X3RhZ3NfZ1R4dCgndG9nZ2xlJykuJzwvc3Bhbj5dJzsNCg0KCWlmICgkY2F0KSB7DQoJICAg JGNhdCA9IGRvX2xpc3QoJGNhdCk7DQoJICAgJHJzaWQgPSBhcnJheSgpOw0KCSAgICRyc2Mg PSBnZXRSb3dzKCJTRUxFQ1QgdHh0LmlkLCB0eHQubGZ0LCB0eHQucmd0DQoJCQlGUk9NICIu UEZYLlNNRF9UQUcuIiBBUyB0eHQsICIuUEZYLiJ0eHBfY2F0ZWdvcnkgQVMgdHhjLCAiLlBG WC5TTURfVEFHQy4iIEFTIHR4bA0KCQkJV0hFUkUgdHh0LmlkID0gdHhsLnRhZ19pZA0KCQkJ QU5EIHR4bC5jYXRfaWQgPSB0eGMuaWQNCgkJCUFORCB0eGMubmFtZSBJTiAoJyIgLmltcGxv ZGUoIicsJyIsICRjYXQpLiAiJykNCgkJCUFORCB0eHQudHlwZSA9ICckdHlwZSciKTsNCgkJ aWYgKCRyc2MpIHsNCgkJCWZvcmVhY2ggKCRyc2MgYXMgJHJvdykgew0KCQkJCSRpZHMgPSBz YWZlX2NvbHVtbignaWQnLCBTTURfVEFHLCAidHlwZSA9ICckdHlwZScgQU5EIChsZnQgQkVU V0VFTiAiIC4kcm93WydsZnQnXS4gIiBBTkQgIiAuJHJvd1sncmd0J10uICIpIik7DQoJCQkJ JHJzaWQgPSBhcnJheV9tZXJnZSgkcnNpZCwgJGlkcyk7DQoJCQl9DQoJCX0NCgkJJGNhdCA9 ICgkcnNjKSA/ICcgQU5EIGlkIElOICgnLmRvUXVvdGUoaW1wbG9kZSgiJywnIiwkcnNpZCkp LicpJyA6ICcnOw0KCX0NCglpZiAoJGlkKSB7DQoJCSRpZCA9IGFzc2VydF9pbnQoJGlkKTsN CgkJbGlzdCgkbGZ0LCAkcmd0KSA9IGFycmF5X3ZhbHVlcyhzYWZlX3JvdygnbGZ0LCByZ3Qn LCBTTURfVEFHLCAnaWQgPSAnLiRpZCkpOw0KCQkkcnMgPSBnZXRUcmVlKCdyb290JywgJHR5 cGUsICJsZnQgbm90IGJldHdlZW4gJGxmdCBhbmQgJHJndCIuJGNhdCwgU01EX1RBRyk7DQoJ fSBlbHNlIHsNCgkJJHJzID0gZ2V0VHJlZSgncm9vdCcsICR0eXBlLCAiMT0xIi4kY2F0LCBT TURfVEFHKTsNCgl9DQoNCglpZiAoJHJzKSB7DQoJICAgaWYgKCR0cnljYXQpIHsNCgkJCWVj aG8gc21kX211bHRpVHJlZVNlbGVjdElucHV0KCdzbWRfdGFnX3BhcmVudCcsICRycywgJHRh Z3MpLiRjbHJCdG4uJHRvZ0J0bjsNCgkJfSBlbHNlIHsNCgkJCWVjaG8gdHJlZVNlbGVjdElu cHV0KCdzbWRfdGFnX3BhcmVudCcsICRycywgJG5hbWUpOw0KCQl9DQoJfSBlbHNlIHsNCgkJ ZWNobyBzbWRfdGFnc19nVHh0KCdub19wYXJlbnQnKTsNCgl9DQoJZXhpdCgpOyAvLyBEb24n dCBjYWxsIHBhZ2VfZW5kKCkNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQov LyBHcmFiIGEgdmFsaWQgY2F0ZWdvcnkgbGlzdA0KZnVuY3Rpb24gc21kX3RhZ19jYXRsaXN0 KCRjYXQ9JycpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScsJ3R5cGUn KSkpKTsNCgl3aGlsZShAb2JfZW5kX2NsZWFuKCkpOyAvLyBHZXQgcmlkIG9mIGFueSBwYWdl IHNvIGZhcg0KDQoJJHR5cGUgPSAoJHR5cGUgPT0gIiIgfHwgJHR5cGUgPT0gInVuZGVmaW5l ZCIpID8gJ2FydGljbGUnIDogJHR5cGU7DQoJJHJzID0gZ2V0VHJlZSgncm9vdCcsICR0eXBl LCAiMT0xIik7DQoNCglpZiAoJHJzKSB7DQoJCWVjaG8gdHJlZVNlbGVjdElucHV0KCdzbWRf Y2F0bGlzdCcsICRycywgJG5hbWUpOw0KCX0gZWxzZSB7DQoJCWVjaG8gZ1R4dCgnbm9fY2F0 ZWdvcmllc19hdmFpbGFibGUnKTsNCgl9DQoJZXhpdCgpOyAvLyBEb24ndCBjYWxsIHBhZ2Vf ZW5kKCkNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBIYW5kbGUgZmFr ZSB0YWcgc2VjdGlvbiBVUkwNCi8vIFRPRE86IEhhbmRsZSBtZXNzeSBVUkxzDQpmdW5jdGlv biBzbWRfdGFnc191cmxfaGFuZGxlcigkZXZlbnQsICRzdGVwKSB7DQoJZ2xvYmFsICRzbWRf dGFnX3R5cGUsICRzbWRfdGFncywgJHBlcm1saW5rX21vZGU7DQoNCglpZiAoIXNtZF90YWdz X3RhYmxlX2V4aXN0KCkpIHsNCgkJcmV0dXJuOw0KCX0NCg0KCSRwcmVmcyA9IHNtZF90YWdz X3ByZWZfZ2V0KGFycmF5KCdzbWRfdGFnX3Vfc2VjJywgJ3NtZF90YWdfdV9wbmFtJywgJ3Nt ZF90YWdfdV9wdHlwJyksIDEpOw0KCSR1cmxzZWMgPSAkcHJlZnNbJ3NtZF90YWdfdV9zZWMn XVsndmFsJ107DQoJJHVybG5hbSA9ICRwcmVmc1snc21kX3RhZ191X3BuYW0nXVsndmFsJ107 DQoJJHVybHR5cCA9ICRwcmVmc1snc21kX3RhZ191X3B0eXAnXVsndmFsJ107DQoNCi8qDQoJ aWYgKCRwZXJtbGlua19tb2RlICE9ICdtZXNzeScpIHsNCgkJcmV0dXJuICc8Zm9ybSBtZXRo b2Q9ImdldCIgYWN0aW9uPSInLnBhZ2VsaW5rdXJsKGFycmF5KCdzJyA9PiAkc2VjdGlvbikp LiciPicuDQoJCQluLiRvdXQuDQoJCQluLic8L2Zvcm0+JzsNCgl9DQoqLw0KDQoJJHN1YnBh dGggPSBwcmVnX3JlcGxhY2UoIi9odHRwcz86XC9cLy4qKFwvLiopL1VpIiwiJDEiLGh1KTsN CgkkcmVnc2FmZXN1YnBhdGggPSBwcmVnX3F1b3RlKCRzdWJwYXRoLCAnLycpOw0KCSRyZXEg PSBwcmVnX3JlcGxhY2UoIi9eJHJlZ3NhZmVzdWJwYXRoL2kiLCcvJywkX1NFUlZFUlsnUkVR VUVTVF9VUkknXSk7DQoNCgkkcXMgPSBzdHJwb3MoJHJlcSwgJz8nKTsNCgkkcWF0dHMgPSAo JHFzID8gYS5zdWJzdHIoJHJlcSwgJHFzICsgMSkgOiAnJyk7DQoJaWYgKCRxcykgJHJlcSA9 IHN1YnN0cigkcmVxLCAwLCAkcXMpOw0KDQoJJHBhcnRzID0gYXJyYXlfdmFsdWVzKGFycmF5 X2ZpbHRlcihzcGxpdCgnLycsICRyZXEpKSk7DQoJJHZhbGlkVHlwZXMgPSBhcnJheSgnYXJ0 aWNsZScsJ2ltYWdlJywnZmlsZScsJ2xpbmsnKTsNCg0KCWlmICgoY291bnQoJHBhcnRzKSA+ IDEpICYmICgkcGFydHNbMF0gPT0gJHVybHNlYykpIHsNCgkJaWYgKGNvdW50KCRwYXJ0cykg PT0gMykgew0KCQkJJHNtZF90YWdfdHlwZSA9ICRwYXJ0c1sxXTsNCgkJCSRzbWRfdGFnID0g JHBhcnRzWzJdOw0KCQl9IGVsc2Ugew0KCQkJaWYgKGluX2FycmF5KCRwYXJ0c1sxXSwgJHZh bGlkVHlwZXMpKSB7DQoJCQkJJHNtZF90YWdfdHlwZSA9ICRwYXJ0c1sxXTsNCgkJCQkkc21k X3RhZyA9ICcnOw0KCQkJfSBlbHNlIHsNCgkJCQkkc21kX3RhZ190eXBlID0gJHZhbGlkVHlw ZXNbMF07DQoJCQkJJHNtZF90YWcgPSAkcGFydHNbMV07DQoJCQl9DQoJCX0NCgkJc21kX3Rh Z3Nfc2V0KCRzbWRfdGFnX3R5cGUsICRzbWRfdGFnKTsNCgkJJF9TRVJWRVJbJ1FVRVJZX1NU UklORyddID0gJHVybG5hbS4nPScuJHNtZF90YWcgLmEuICR1cmx0eXAuJz0nLiRzbWRfdGFn X3R5cGUgLiAkcWF0dHM7DQoJCSRfU0VSVkVSWydSRVFVRVNUX1VSSSddID0gJHN1YnBhdGgg LiAkdXJsc2VjIC4gJy8/JyAuICRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXTsNCgl9IGVsc2Ug aWYgKChjb3VudCgkcGFydHMpID4gMSkgJiYgJHBhcnRzWzBdID09ICR1cmxzZWMgfHwgZ3Bz KCdzJykgPT0gJHVybHNlYykgew0KCQkkc21kX3RhZ190eXBlID0gKGluX2FycmF5KGdwcygk dXJsdHlwKSwgJHZhbGlkVHlwZXMpKSA/IGdwcygkdXJsdHlwKSA6ICcnOw0KCQkkc21kX3Rh ZyA9IGdwcygkdXJsbmFtKTsNCgkJc21kX3RhZ3Nfc2V0KCRzbWRfdGFnX3R5cGUsICRzbWRf dGFnKTsNCgkJJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddID0gJHVybG5hbS4nPScuJHNtZF90 YWcgLmEuICR1cmx0eXAuJz0nLiRzbWRfdGFnX3R5cGUgLiAkcWF0dHM7DQoJCSRfU0VSVkVS WydSRVFVRVNUX1VSSSddID0gJHN1YnBhdGggLiAkdXJsc2VjIC4gJy8/JyAuICRfU0VSVkVS WydRVUVSWV9TVFJJTkcnXTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gc21kX3RhZ3Nfc2V0KCR0eXAsICR0YWc9JycsICRpdGVtPScnKSB7DQoJ Z2xvYmFsICRzbWRfdGFnczsNCg0KCSRzbWRfdGFncyA9ICcnOw0KDQoJLy8gTU9OU1RFUiEN CgkkcnMgPSBzdGFydFJvd3MoDQoJCSJTRUxFQ1QgaWQsIG5hbWUsIHR4dC50eXBlLCBwYXJl bnQsIHRpdGxlLCBjb3VudChpdGVtX2lkKSBBUyBjb3VudCINCgkJLiIsKFNFTEVDVCBDQVNU KChyZ3QgLSBsZnQgLSAxKSAvIDIgQVMgVU5TSUdORUQpKSBBUyBjaGlsZHJlbiINCgkJLiIs KFNFTEVDVCBDT1VOVCgqKSBGUk9NICIuUEZYLlNNRF9UQUcuIiBXSEVSRSB0eXBlPSckdHlw JyBBTkQgbmFtZT1uYW1lIEFORCBsZnQgPCB0eHQubGZ0IEFORCByZ3QgPiB0eHQucmd0KS0x IEFTIGxldmVsIg0KCQkuIiBGUk9NICIuUEZYLlNNRF9UQUcuIiBBUyB0eHQsICIuUEZYLlNN RF9UQUdVLiIgQVMgdHh1Ig0KCQkuIiBXSEVSRSB0eHQudHlwZT0nJHR5cCciDQoJCS4iIEFO RCB0YWdfaWQgPSBpZCINCgkJLigoJHRhZykgPyAiIEFORCBuYW1lPSckdGFnJyIgOiAiIikN CgkJLigoJGl0ZW0pID8gIiBBTkQgaXRlbV9pZD0nJGl0ZW0nIiA6ICIiKQ0KCQkuIiBHUk9V UCBCWSBpZCIpOw0KCXdoaWxlICgkcm93ID0gbmV4dFJvdygkcnMpKSB7DQoJCSRzbWRfdGFn c1skdHlwXVskcm93WydpZCddXSA9IGFycmF5KCd0YWdfbmFtZScgPT4gJHJvd1snbmFtZSdd LCAndGFnX3RpdGxlJyA9PiAkcm93Wyd0aXRsZSddLCAndGFnX3BhcmVudCcgPT4gJHJvd1sn cGFyZW50J10sICd0YWdfY291bnQnID0+ICRyb3dbJ2NvdW50J10sICd0YWdfY2hpbGRyZW4n ID0+ICRyb3dbJ2NoaWxkcmVuJ10sICd0YWdfbGV2ZWwnID0+ICRyb3dbJ2xldmVsJ10pOw0K CQkkc21kX3RhZ3NbJHR5cF1bJ3RhZ19uYW1lJ11bJHJvd1snaWQnXV0gPSAkcm93WyduYW1l J107DQoJCSRzbWRfdGFnc1skdHlwXVsndGFnX3RpdGxlJ11bJHJvd1snaWQnXV0gPSAkcm93 Wyd0aXRsZSddOw0KCQkkc21kX3RhZ3NbJHR5cF1bJ3RhZ19wYXJlbnQnXVskcm93WydpZCdd XSA9ICRyb3dbJ3BhcmVudCddOw0KCQkkc21kX3RhZ3NbJHR5cF1bJ3RhZ19jb3VudCddWyRy b3dbJ2lkJ11dID0gJHJvd1snY291bnQnXTsNCgkJJHNtZF90YWdzWyR0eXBdWyd0YWdfY2hp bGRyZW4nXVskcm93WydpZCddXSA9ICRyb3dbJ2NoaWxkcmVuJ107DQoJCSRzbWRfdGFnc1sk dHlwXVsndGFnX2xldmVsJ11bJHJvd1snaWQnXV0gPSAkcm93WydsZXZlbCddOw0KCX0NCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBBZGQgdGFncyB0byB0aGUgZ2xv YmFsIHNjb3BlLCBkZXBlbmRpbmcgb24gY29udGV4dC4NCi8vIFJldHVybnMgdGhlIGN1cnJl bnQgY29udGV4dA0KZnVuY3Rpb24gc21kX3RhZ3NfY29udGV4dCgpIHsNCglnbG9iYWwgJHRo aXNhcnRpY2xlLCAkdGhpc2ZpbGUsICR0aGlzbGluaywgJHRoaXNpbWFnZSwgJHNtZF90YWdf dHlwZSwgJHNtZF90YWdfaXRlbXMsICRzbWRfdGFncywgJHNtZF90aGlzdGFnOw0KDQoJJGN0 eHQgPSAkc21kX3RhZ190eXBlOw0KCSRpZHMgPSBhcnJheSgpOw0KCSRzY3AgPSBAJHNtZF90 YWdzWyRjdHh0XTsNCg0KCWlmIChlbXB0eSgkc21kX3RhZ190eXBlKSkgew0KCQkvLyBJbmRp dmlkdWFsIGFydGljbGUgb3IgbGlzdA0KCQkkaWQgPSAnJzsNCgkJaWYgKCFlbXB0eSgkdGhp c2ltYWdlKSkgew0KCQkJJGlkID0gJHRoaXNpbWFnZVsnaWQnXTsNCgkJCSRjdHh0ID0gJ2lt YWdlJzsNCgkJCSRzY3AgPSAkdGhpc2ltYWdlOw0KCQl9IGVsc2UgaWYoIWVtcHR5KCR0aGlz ZmlsZSkpIHsNCgkJCSRpZCA9ICR0aGlzZmlsZVsnaWQnXTsNCgkJCSRjdHh0ID0gJ2ZpbGUn Ow0KCQkJJHNjcCA9ICR0aGlzZmlsZTsNCgkJfSBlbHNlIGlmKCFlbXB0eSgkdGhpc2xpbmsp KSB7DQoJCQkkaWQgPSAkdGhpc2xpbmtbJ2lkJ107DQoJCQkkY3R4dCA9ICdsaW5rJzsNCgkJ CSRzY3AgPSAkdGhpc2xpbms7DQoJCX0gZWxzZSBpZighZW1wdHkoJHRoaXNhcnRpY2xlKSkg ew0KCQkJJGlkID0gJHRoaXNhcnRpY2xlWyd0aGlzaWQnXTsNCgkJCSRjdHh0ID0gJ2FydGlj bGUnOw0KCQkJJHNjcCA9ICR0aGlzYXJ0aWNsZTsNCgkJfQ0KCQlpZiAoJGlkKSB7DQoJCQlz bWRfdGFnc19zZXQoJGN0eHQsICcnLCAkaWQpOw0KCQl9DQoJfQ0KDQoJaWYoIWVtcHR5KCRz bWRfdGFncykpIHsNCgkJZm9yZWFjaCgkc21kX3RhZ3NbJGN0eHRdIGFzICRyaWQgPT4gJHJv dykgew0KCQkJaWYgKGlzX2ludCgkcmlkKSkgew0KCQkJCSRpZHNbXSA9ICRyaWQ7DQoJCQl9 DQoJCX0NCgl9DQoJLy8gVE9ETzogaXMgdGhpcyBuZWVkZWQgdG8gb3ZlcndyaXRlIGlmIHRh ZyBhbHJlYWR5IHNldD8NCglpZiAoIWVtcHR5KCRzbWRfdGhpc3RhZykpIHsNCgkJJGlkcyA9 IGFycmF5KCRzbWRfdGhpc3RhZ1sndGFnX2lkJ10pOw0KCX0NCg0KCXJldHVybiBhcnJheSgn Y29udGV4dCcgPT4gJGN0eHQsICdzY29wZScgPT4gJHNjcCwgJ2lkJyA9PiAkaWRzKTsNCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBMb2FkIGN1cnJlbnQgdGFnIGlu dG8gZ2xvYmFsIHNjb3BlDQpmdW5jdGlvbiBzbWRfdGFnX3BvcHVsYXRlKCRyb3cpIHsNCgln bG9iYWwgJHNtZF90aGlzdGFnOw0KCSRzbWRfdGhpc3RhZ1sndGFnX2lkJ10gPSAkcm93Wydp ZCddOw0KCSRzbWRfdGhpc3RhZ1sndGFnX25hbWUnXSA9ICRyb3dbJ25hbWUnXTsNCgkkc21k X3RoaXN0YWdbJ3RhZ190eXBlJ10gPSAkcm93Wyd0eXBlJ107DQoJJHNtZF90aGlzdGFnWyd0 YWdfcGFyZW50J10gPSAkcm93WydwYXJlbnQnXTsNCgkkc21kX3RoaXN0YWdbJ3RhZ190aXRs ZSddID0gJHJvd1sndGl0bGUnXTsNCgkkc21kX3RoaXN0YWdbJ3RhZ19jaGlsZHJlbiddID0g JHJvd1snY2hpbGRyZW4nXTsNCgkkc21kX3RoaXN0YWdbJ3RhZ19sZXZlbCddID0gJHJvd1sn bGV2ZWwnXTsNCgkkc21kX3RoaXN0YWdbJ3RhZ19jb3VudCddID0gJHJvd1snY291bnQnXTsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBBbGwgdGFncy9jb3VudHMN CmZ1bmN0aW9uIHNtZF90YWdfbGlzdF9hZG0oJGF0dHMpIHsNCglpbmNsdWRlX29uY2UgdHhw YXRoLicvcHVibGlzaC90YWdoYW5kbGVycy5waHAnOw0KCWV4dHJhY3QobEF0dHMoYXJyYXko DQoJCSd0eXBlJyA9PiAnYXJ0aWNsZScsDQoJCSdpbmRlbnQnID0+ICcmbmJzcDsmbmJzcDsn LA0KCQknY291bnQnID0+IDEsDQoJCSdsYWJlbCcgPT4gJycsDQoJCSdsYWJlbHRhZycgPT4g JycsDQoJCSd3cmFwdGFnJyA9PiAnJywNCgkJJ2JyZWFrJyA9PiAnJywNCgkJJ2NsYXNzJyA9 PiBfX0ZVTkNUSU9OX18sDQoJCSdicmVha2NsYXNzJyA9PiAnJywNCgkpLCRhdHRzKSk7DQoN CgkkdmFsaWRUeXBlcyA9IGFycmF5KCdsaXN0JyA9PiAnYXJ0aWNsZScsICdpbWFnZScgPT4g J2ltYWdlJywgJ2ZpbGUnID0+ICdmaWxlJywgJ2xpbmsnID0+ICdsaW5rJyk7DQoJJHJzID0g Z2V0VHJlZSgncm9vdCcsICR0eXBlLCAnMT0xJywgU01EX1RBRyk7DQoJJHJzYyA9IGdldFJv d3MoIlNFTEVDVCB0eGwudGFnX2lkLCB0eGMubmFtZQ0KCQkJRlJPTSAiLlBGWC5TTURfVEFH LiIgQVMgdHh0LCAiLlBGWC5TTURfVEFHQy4iIEFTIHR4bCwgIi5QRlguInR4cF9jYXRlZ29y eSBBUyB0eGMNCgkJCVdIRVJFIHR4dC50eXBlID0gJyR0eXBlJyBBTkQgdHh0LmlkID0gdHhs LnRhZ19pZCBBTkQgdHhsLmNhdF9pZCA9IHR4Yy5pZCIpOw0KCSRyc2NvdXQgPSBhcnJheSgp Ow0KCWlmICgkcnNjKSB7DQoJCWZvcmVhY2ggKCRyc2MgYXMgJGlkeCA9PiAkcm93KSB7DQoJ CQkkcnNjb3V0WyRyb3dbJ3RhZ19pZCddXSA9ICRyb3dbJ25hbWUnXTsNCgkJfQ0KCX0NCg0K CWlmICgkcnMpIHsNCgkJJG91dCA9IGFycmF5KCk7DQoJCSR0b3RhbHMgPSBhcnJheSgpOw0K DQoJCS8vIFRhbGx5IGVhY2ggdGFnJ3MgdXNhZ2UNCgkJaWYgKCRjb3VudCkgew0KCQkJJHJz dSA9IHNhZmVfcm93c19zdGFydCgndGFnX2lkLCBjb3VudCgqKSBhcyBudW0nLCBTTURfVEFH VSwgInR5cGU9JyR0eXBlJyBHUk9VUCBCWSB0YWdfaWQiKTsNCgkJCXdoaWxlICgkcm93ID0g bmV4dFJvdygkcnN1KSkgew0KCQkJCSR0YWdpZCA9ICRyb3dbJ3RhZ19pZCddOw0KCQkJCSRu dW0gPSAkcm93WydudW0nXTsNCgkJCQkkaWRzID0gc2FmZV9jb2x1bW4oJ2l0ZW1faWQnLCBT TURfVEFHVSwgInR5cGU9JyR0eXBlJyBBTkQgdGFnX2lkPSckdGFnaWQnIik7DQoJCQkJJHRv dGFsc1skdGFnaWRdID0gYXJyYXkoJG51bSwgam9pbigiLCIsJGlkcykpOw0KCQkJfQ0KCQl9 DQoNCgkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJCWV4dHJhY3QoJHJvdyk7DQoJCQkk cGFyZW50ID0gKGlzc2V0KCRwYXJlbnQpKSA/ICRwYXJlbnQgOiAnJzsgLy8gUGFyZW50IG1p Z2h0IG5vdCBiZSBkZWZpbmVkDQoJCQkkcm93Wyd0eXBlJ10gPSAkdHlwZTsNCgkJCWlmIChp c3NldCgkdG90YWxzWyRpZF0pKSB7DQoJCQkJJHJvd1snY291bnQnXSA9ICR0b3RhbHNbJGlk XVswXTsNCgkJCQkkZXYgPSBhcnJheV9rZXlzKCR2YWxpZFR5cGVzLCR0eXBlKTsNCgkJCQkk dXJsID0gJ2luZGV4LnBocD9ldmVudD0nLiRldlswXS5hLidzZWFyY2hfbWV0aG9kPWlkJy5h Lidjcml0PScuJHRvdGFsc1skaWRdWzFdOw0KCQkJCSRjbnRvcCA9ICcgKCcuIGhyZWYoJHRv dGFsc1skaWRdWzBdLCAkdXJsKSAuJyknOw0KCQkJfSBlbHNlIHsNCgkJCQkkcm93Wydjb3Vu dCddID0gMDsNCgkJCQkkY250b3AgPSAnICgwKSc7DQoJCQl9DQoNCgkJCSRyb3dkYXRhID0g JzxzcGFuIG5hbWU9InNtZF90YWduYW0iIGNsYXNzPSJzbWRfaGlkZGVuIj4nLiRuYW1lDQoJ CQkJCS4nPC9zcGFuPjxzcGFuIG5hbWU9InNtZF90YWdpZCIgY2xhc3M9InNtZF9oaWRkZW4i PicuJGlkDQoJCQkJCS4nPC9zcGFuPjxzcGFuIG5hbWU9InNtZF90YWd0dGwiIGNsYXNzPSJz bWRfaGlkZGVuIj4nLiR0aXRsZQ0KCQkJCQkuJzwvc3Bhbj48c3BhbiBuYW1lPSJzbWRfdGFn cGFyIiBjbGFzcz0ic21kX2hpZGRlbiI+Jy4kcGFyZW50DQoJCQkJCS4nPC9zcGFuPjxzcGFu IG5hbWU9InNtZF90YWdjYXQiIGNsYXNzPSJzbWRfaGlkZGVuIj4nLigoaXNzZXQoJHJzY291 dFskaWRdKSkgPyAkcnNjb3V0WyRpZF0gOiAnJykNCgkJCQkJLic8L3NwYW4+JzsNCgkJCSRv dXRbXSA9ICRyb3dkYXRhLnN0cl9yZXBlYXQoJGluZGVudCwgJGxldmVsICogMSkNCgkJCQkJ LiR0aXRsZQ0KCQkJCQkuKCgkY291bnQpID8gJGNudG9wIDogJycpLm47DQovLwkJCSRzbWRf dGhpc3RhZyA9IGFycmF5KCk7DQoJCX0NCg0KCQlpZiAoJG91dCkgew0KCQkJJHdyYXBpdCA9 IGRvX2xpc3QoJHdyYXB0YWcsICI6Iik7DQoNCgkJCS8vIFRhYmxlcyBhcmUgYSBzcGVjaWFs IGNhc2UNCgkJCWlmICgkd3JhcGl0WzBdID09ICJ0YWJsZSIpIHsNCg0KCQkJCSR0b3RhbEl0 ZW1zID0gJHJvd3MgPSBjb3VudCgkcnMpOw0KCQkJCSRzdGVwID0gMTsNCgkJCQkkY29scyA9 IDE7DQoJCQkJJG51bW9wdHMgPSBjb3VudCgkd3JhcGl0KTsNCgkJCQkvLyBFYWNoIHN1Y2Nl c3NpdmUgbGV2ZWwgb3ZlcnJpZGVzIHRoZSBwcmV2aW91cyBzdGVwIHNvIGJ5IHRoZSBlbmQg b2YgdGhlIGlmcywNCgkJCQkvLyAzIHZhbHVlcyBhcmUgc2V0IHVwOiBzdGVwLCByb3dzIGFu ZCBjb2xzDQoJCQkJaWYgKCRudW1vcHRzID4gMSkgew0KCQkJCQkkY29scyA9ICR3cmFwaXRb MV07DQoJCQkJCSRyb3dzID0gY2VpbCgkdG90YWxJdGVtcy8kY29scyk7DQoJCQkJfQ0KCQkJ CWlmICgkbnVtb3B0cyA+IDIpIHsNCgkJCQkJaWYgKCR3cmFwaXRbMl0gPT0gInJvd3MiKSB7 DQoJCQkJCQkkcm93cyA9ICR3cmFwaXRbMV07DQoJCQkJCQkkY29scyA9IGNlaWwoJHRvdGFs SXRlbXMvJHJvd3MpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkbnVtb3B0cyA+IDMpIHsN CgkJCQkJaWYgKCR3cmFwaXRbM10gPT0gImJ5Y29sIikgew0KCQkJCQkJJHN0ZXAgPSAoJHdy YXBpdFsyXT09ImNvbHMiKSA/IGNlaWwoJHRvdGFsSXRlbXMvJGNvbHMpIDogJHJvd3M7DQoJ CQkJCQlpZiAoJHdyYXBpdFsyXT09ImNvbHMiKSB7DQoJCQkJCQkJJHJvd3MgPSAkc3RlcDsN CgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJJGNvbHMgPSBjZWlsKCR0b3RhbEl0ZW1zLyRyb3dz KTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCS8vIEdlbmVyYXRlIHRhYmxlIGJh c2VkIG9uIGFib3ZlIHJ1bGVzDQoJCQkJJHRibG91dCA9IGFycmF5KCk7DQoJCQkJJGNlbGxD dHIgPSAwOw0KCQkJCSRjbGFzcyA9ICghZW1wdHkoJGNsYXNzKSkgPyAnIGNsYXNzPSInLiRj bGFzcy4nIicgOiAnJzsNCgkJCQkkYnJlYWtjbGFzcyA9ICghZW1wdHkoJGJyZWFrY2xhc3Mp KSA/ICcgY2xhc3M9IicuJGJyZWFrY2xhc3MuJyInIDogJyc7DQoNCgkJCQlmb3IgKCRpZHgg PSAwOyAkaWR4IDwgJHJvd3M7ICRpZHgrKykgew0KCQkJCQkkYmxkID0gYXJyYXkoKTsNCgkJ CQkJZm9yICgkamR4ID0gMDsgJGpkeCA8ICRjb2xzOyAkamR4KyspIHsNCgkJCQkJCSRvZmZz ZXQgPSAoJHdyYXBpdFszXT09ImJ5Y29sIikgPyAoJGpkeCAqICRzdGVwKSArICRpZHggOiAk Y2VsbEN0cjsNCgkJCQkJCSRibGRbXSA9IChpc3NldCgkb3V0WyRvZmZzZXRdKSkgPyB0ZCgk b3V0WyRvZmZzZXRdKSA6IHRkKCcnKTsNCgkJCQkJCSRjZWxsQ3RyKys7DQoJCQkJCX0NCgkJ CQkJJHRibG91dFtdID0gdHIoam9pbigiIiwgJGJsZCksICRicmVha2NsYXNzKTsNCiAgICAg ICAgICAgIH0NCg0KCQkJCXJldHVybiBkb0xhYmVsKCRsYWJlbCwgJGxhYmVsdGFnKS50YWco am9pbigiIiwkdGJsb3V0KSwgJHdyYXBpdFswXSwgJGNsYXNzKTsNCgkJCX0gZWxzZSB7DQoJ CQkJcmV0dXJuIGRvTGFiZWwoJGxhYmVsLCAkbGFiZWx0YWcpLmRvV3JhcCgkb3V0LCAkd3Jh cGl0WzBdLCAkYnJlYWssICRjbGFzcywgJGJyZWFrY2xhc3MpOw0KCQkJfQ0KCQl9DQoJCXJl dHVybiAnJzsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUGx1 Z2luLXNwZWNpZmljIHJlcGxhY2VtZW50IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyByZXF1aXJl ZA0KZnVuY3Rpb24gc21kX3RhZ3NfZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJ JGxhbmcgPSBhcnJheSgNCgkJJ2FjX3N0ZCcgPT4gJ1N0YW5kYXJkJywNCgkJJ2FjX3N0cicg PT4gJ1N0cmljdCcsDQoJCSdieV9jb2x1bW4nID0+ICdDb2x1bW4nLA0KCQknYnlfcm93JyA9 PiAnUm93JywNCgkJJ2NsZWFyJyA9PiAnY2xyJywNCgkJJ2NsaW5rX2xibCcgPT4gJ0xpbmtl ZCBjYXQnLA0KCQknY29udHJvbCcgPT4gJ1BsdWdpbiBjb250cm9sJywNCgkJJ2NyZWF0ZWQn ID0+ICd7dHlwZX0gdGFnICJ7bmFtZX0iIGNyZWF0ZWQnLA0KCQknY2hpbGRyZW5fYW5kJyA9 PiAnIGFuZCBpdHMgY2hpbGRyZW4nLA0KCQknY2hpbGRyZW5fZGVsJyA9PiAnRGVsZXRlIGNo aWxkcmVuJywNCgkJJ2NoaWxkcmVuX3BybycgPT4gJ1Byb21vdGUgY2hpbGRyZW4nLA0KCQkn ZGVsZXRlZCcgPT4gJ3t0eXBlfSB0YWcgIntuYW1lfSIgZGVsZXRlZCcsDQoJCSdleGlzdHMn ID0+ICd7dHlwZX0gdGFnICJ7bmFtZX0iIGFscmVhZHkgZXhpc3RzJywNCgkJJ2ZpbHRlcicg PT4gJ0ZpbHRlcicsDQoJCSdpbl91c2UnID0+ICd7dHlwZX0gdGFnICJ7bmFtZX0iIGlzIGlu IHVzZScsDQoJCSdtYW5hZ2VfbGJsJyA9PiAnTWFuYWdlIHRhZ3MnLA0KCQknbm9fbmFtZScg PT4gJ3t0eXBlfSB0YWcgTk9UIGNyZWF0ZWQ6IG5lZWRzIGEgbmFtZScsDQoJCSdub19wYXJl bnQnID0+ICdObyBwYXJlbnQgdGFncycsDQoJCSdub3RfYXZhaWxhYmxlJyA9PiAnc21kX3Rh Z3MgdGFibGVzIGFyZSBub3QgaW5zdGFsbGVkJywNCgkJJ25vdF9jcmVhdGVkJyA9PiAne3R5 cGV9IHRhZyAie25hbWV9IiBOT1QgY3JlYXRlZCcsDQoJCSdub3RfZGVsZXRlZCcgPT4gJ3t0 eXBlfSB0YWcgIntuYW1lfSIgTk9UIGRlbGV0ZWQnLA0KCQknbm90X3VwZGF0ZWQnID0+ICd7 dHlwZX0gdGFnICJ7bmFtZX0iIE5PVCB1cGRhdGVkJywNCgkJJ3ByZWZfaW5zdGFsbF9sYmwn ID0+ICdJbnN0YWxsIHByZWZzJywNCgkJJ3ByZWZfcmVtb3ZlX2xibCcgPT4gJ1JlbW92ZSBw cmVmcycsDQoJCSdwcmVmX3Nob3dfbGJsJyA9PiAnUHJlZmVyZW5jZXMnLA0KCQkncHJlZnNf aW5zdGFsbGVkJyA9PiAnUHJlZmVyZW5jZXMgaW5zdGFsbGVkJywNCgkJJ3ByZWZzX25vdF9p bnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBub3QgaW5zdGFsbGVkLicsDQoJCSdwcmVmc19w YW5lJyA9PiAnUHJlZnMnLA0KCQkncHJlZnNfcmVtb3ZlZCcgPT4gJ1ByZWZlcmVuY2VzIHJl bW92ZWQnLA0KCQkncHJlZnNfc29tZScgPT4gJ05vdCBhbGwgcHJlZmVyZW5jZXMgYXZhaWxh YmxlLicsDQoJCSdwcmVmc19zb21lX2V4cGxhaW4nID0+ICdUaGlzIGlzIGVpdGhlciBhIG5l dyBpbnN0YWxsYXRpb24gb3IgYSBkaWZmZXJlbnQgdmVyc2lvbicuYnIuJ29mIHRoZSBwbHVn aW4gdG8gb25lIHlvdSBoYWQgYmVmb3JlLicsDQoJCSdwcmVmc19zb21lX29wdHMxJyA9PiAn Q2hvb3NlICJSZW1vdmUgcHJlZnMiIHRvIHJlbW92ZSB0aGVtIGFsbCBvciAiSW5zdGFsbCBw cmVmcyIgdG8gYWRkJy5ici4nYW55IG5ldyBvbmVzLCBsZWF2aW5nIGFsbCBleGlzdGluZyBw cmVmcyB1bnRvdWNoZWQuJywNCgkJJ3ByZWZzX3NvbWVfb3B0czInID0+ICdDbGljayAiSW5z dGFsbCB0YWJsZXMiIHRvIGFkZCBvciB1cGRhdGUgdGhlIHRhYmxlcycuYnIuJ2xlYXZpbmcg YWxsIGV4aXN0aW5nIGRhdGEgdW50b3VjaGVkLicsDQoJCSdwcmVmc19zb21lX3RibCcgPT4g J05vdCBhbGwgdGFibGUgaW5mbyBhdmFpbGFibGUuJywNCgkJJ3ByZWZzX3RpdGxlJyA9PiAn c21kX3RhZ3MgcHJlZmVyZW5jZXMnLA0KCQknc2VsX2xpc3QnID0+ICdTZWxlY3QgbGlzdCcs DQoJCSdwcmVmc19wJyA9PiAnSW50ZXJmYWNlIHNldHRpbmdzJywNCgkJJ3ByZWZzX3QnID0+ ICdUYWcgbWFuYWdlbWVudCcsDQoJCSdwcmVmc191JyA9PiAnVVJMIG1hbmFnZW1lbnQnLA0K CQknc21kX3RhZ3MnID0+ICdzbWRfdGFncycsDQoJCSdzbWRfdGFnX3BfZW5hYmxlJyA9PiAn RW5hYmxlIHRhZ3MgaW4nLA0KCQknc21kX3RhZ19wX2ZpcnN0JyA9PiAnSW5pdGlhbCBwYW5l JywNCgkJJ3NtZF90YWdfcF9pbnB1dCcgPT4gJ0VudGVyIHRhZ3MgdXNpbmcnLA0KCQknc21k X3RhZ19wX2xpbmtjYXQnID0+ICdMaW5rIHRhZ3MgdG8gY2F0ZWdvcmllcycsDQoJCSdzbWRf dGFnX3BfcXRhZycgPT4gJ1F1aWNrIHRhZyAoPGEgaHJlZj0iaHR0cDovL3BsdWdpbnMuanF1 ZXJ5LmNvbS9wcm9qZWN0L2F1dG9jb21wbGV0ZXgiPnJlcXVpcmVzIHBsdWdpbjwvYT4pJywN CgkJJ3NtZF90YWdfcF9xdHBhdGgnID0+ICdKUyBwbHVnaW4gZGlyJywNCgkJJ3NtZF90YWdf cF9xdHN0eWwnID0+ICdKUyBzdHlsZSBkaXInLA0KCQknc21kX3RhZ19wX3NpemUnID0+ICdT ZWxlY3QvdGV4dGFyZWEgcm93cycsDQoJCSdzbWRfdGFnX3RfYXV0bycgPT4gJ0F1dG8gbmFt ZScsDQoJCSdzbWRfdGFnX3RfY29scycgPT4gJ1RhZyBjb2x1bW5zJywNCgkJJ3NtZF90YWdf dF9jb2xzb3JkJyA9PiAnT3JkZXIgdGFncyBieScsDQoJCSdzbWRfdGFnX3RfY291bnQnID0+ ICdTaG93IHRhZyB1c2FnZSBjb3VudHMnLA0KCQknc21kX3RhZ190X2RlbHRyZWUnID0+ICdX aGVuIGRlbGV0aW5nIGEgcGFyZW50JywNCgkJJ3NtZF90YWdfdF9kZWx1c2VkJyA9PiAnQWxs b3cgZGVsZXRpb24gb2YgdXNlZCB0YWdzJywNCgkJJ3NtZF90YWdfdF9oaWxpdGUnID0+ICdD bGlja2VkIFJHQiBjb2xvdXInLA0KCQknc21kX3RhZ190X2hvdmVyJyA9PiAnTW91c2Utb3Zl ciBSR0IgY29sb3VyJywNCgkJJ3NtZF90YWdfdF9pbmRlbnQnID0+ICdTdWItdGFnIGxldmVs IGluZGljYXRvcicsDQoJCSdzbWRfdGFnX3VfcG5hbScgPT4gJ1VSTCBuYW1lIHBhcmFtZXRl cicsDQoJCSdzbWRfdGFnX3VfcHR5cCcgPT4gJ1VSTCB0eXBlIHBhcmFtZXRlcicsDQoJCSdz bWRfdGFnX3Vfc2VjJyA9PiAnRGVmYXVsdCBzZWN0aW9uIGZvciB0YWdzJywNCgkJJ3RleHRi b3gnID0+ICdUZXh0IGFyZWEnLA0KCQkndGV4dGxpc3QnID0+ICdUZXh0IGxpc3QnLA0KCQkn dGJsX2luc3RhbGxfbGJsJyA9PiAnSW5zdGFsbCB0YWJsZXMnLA0KCQkndGJsX2luc3RhbGxl ZCcgPT4gJ1RhZyB0YWJsZXMgaW5zdGFsbGVkLiAnLA0KCQkndGJsX25vdF9pbnN0YWxsZWQn ID0+ICdUYWcgdGFibGVzIE5PVCBpbnN0YWxsZWQuICcsDQoJCSd0Ymxfbm90X3JlbW92ZWQn ID0+ICdUYWcgdGFibGVzIE5PVCByZW1vdmVkLiAnLA0KCQkndGJsX3JlbW92ZV9sYmwnID0+ ICdSZW1vdmUgdGFibGVzJywNCgkJJ3RibF9yZW1vdmVkJyA9PiAnVGFnIHRhYmxlcyByZW1v dmVkLiAnLA0KCQkndGFnc19wYW5lJyA9PiAnTWFuYWdlIHRhZ3MnLA0KCQkndGl0bGUnID0+ ICdUYWdzJywNCgkJJ3RvZ2dsZScgPT4gJ3RvZycsDQoJCSd1cGRhdGVkJyA9PiAne3R5cGV9 IHRhZyAie25hbWV9IiB1cGRhdGVkJywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skd2hh dF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjQ6ImhlbHAiO3M6MTM4NjM6 Igk8cD48ZGl2IGlkPSJzbWRfaGVscCI+PC9wPgoKCTxoMT5zbWRfdGFncyAoQWRtaW4gc2lk ZSk8L2gxPgoKCTxwPlRhZyBhcnRpY2xlcywgaW1hZ2VzLCBmaWxlcyBhbmQgbGlua3Mgd2l0 aCBzdHVmZiwgdGhlbiB1c2UgdGhlIHB1YmxpYy1zaWRlIHRhZ3MgdG8gZGlzcGxheSB0aGUg bGlzdHMsIGZpbHRlciBvciBmaW5kIHJlbGF0ZWQgY29udGVudC48L3A+CgoJPHA+RmVhdHVy ZXM6PC9wPgoKCTx1bD4KCQk8bGk+VW5saW1pdGVkIHRhZ3MgZm9yIGFydGljbGVzLCBpbWFn ZXMsIGZpbGVzIGFuZCBsaW5rczwvbGk+CgkJPGxpPkZhc3QgdGFnZ2luZyBzeXN0ZW0gZm9y IGNvcHlpbmcsIGF1dG8tbmFtaW5nLCBhbmQgb3B0aW9uYWwgYXV0by1jb21wbGV0aW9uPC9s aT4KCQk8bGk+TmVzdGluZyBvZiB0YWdzPC9saT4KCQk8bGk+T3B0aW9uYWxseSBsaW5rIHRh Z3MgdG8gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gY2F0ZWdvcmllcyBzbyBjbGll bnRzIGNhbiBvbmx5IGNob29zZSBmcm9tIGEgbGltaXRlZCBzZXQgb2YgdGFnczwvbGk+CgkJ PGxpPkFzc2lnbiB0YWdzIHZpYSBhIGRyb3Bkb3duIHNlbGVjdCBsaXN0LCBhIHRleHQgYXJl YSBvciBhIGxpc3Qgb2YgY2xpY2thYmxlIHRhZ3M8L2xpPgoJCTxsaT5TZXQgdXAgYW4gKG9w dGlvbmFsKSBkZWRpY2F0ZWQgc2VjdGlvbiB0byBhbGxvdyB0YWcgZmlsdGVyaW5nPC9saT4K CTwvdWw+CgoJPHA+SW4gdGhlIHBpcGVsaW5lOjwvcD4KCgk8dWw+CgkJPGxpPkltcG9ydCBh cnRpY2xlIHRhZ3MgZnJvbSB0cnVfdGFncyBhbmQgcnNzX3VubGltaXRlZF9jYXRlZ29yaWVz PC9saT4KCQk8bGk+Rml4IGZvciBmb3JlaWduIGNoYXJhY3RlciBhdXRvdGFnIGR1bWJkb3du PC9saT4KCQk8bGk+TGlzdCB0YWdzIGJ5IGxpbmtlZCBjYXRlZ29yeTwvbGk+Cgk8L3VsPgoK CTxoMiBjbGFzcz0iYXV0aG9yIj5BdXRob3I8L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9z dGVmZGF3c29uLmNvbS9jb21tZW50Rm9ybSI+U3RlZiBEYXdzb248L2E+PC9wPgoKCTxoMiBj bGFzcz0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKCTxw IGNsYXNzPSJyZXF1aXJlcyI+UmVxdWlyZXMgYXQgbGVhc3QgVGV4dHBhdHRlcm4gNC4wLjcg KG9yIHRoZSBsYXRlc3QgPHNwYW4gY2xhc3M9ImNhcHMiPlNWTjwvc3Bhbj4gY29weSB5b3Ug Y2FuIGdldCB5b3VyIGhhbmRzIG9uKS4gSW4gYWRkaXRpb24sIGZvciBjbGllbnQtc2lkZSBp bWFnZSB0YWdnaW5nIHRvIHdvcmssIHJlcXVpcmVzIHRoZSBpbWFnZSBwYXRjaCB0aGF0IHdp bGwgZm9ybSBwYXJ0IG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuMC44LiBD aGVjayB0aGUgZm9ydW0gZm9yIHRoZSBsaW5rIHRvIHRoZSBjdXJyZW50IHBhdGNoLjwvcD4K Cgk8cD5Eb3dubG9hZCBib3RoIGFkbWluIGFuZCBjbGllbnQgcGFydHMgb2YgdGhlIHBsdWdp biBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMv MTAyNi9zbWRfdGFncyI+dGV4dHBhdHRlcm4ub3JnPC9hPiBvciB0aGUgPGEgaHJlZj0iaHR0 cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPi4gUGFzdGUgZWFjaCBw YXJ0IGluIHR1cm4gaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRt aW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgYm90aCBwYXJ0cyAo QWRtaW4gZmlyc3QpLjwvcD4KCgk8cD5WaXNpdCB0aGUgRXh0ZW5zaW9ucyAtJmd0OyBzbWRf dGFncyB0YWIgYW5kIGNsaWNrIHRoZSBJbnN0YWxsIHRhYmxlcyBidXR0b24uIFRoZSBuZWNl c3NhcnkgdGFibGVzIGFuZCBwcmVmZXJlbmNlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5z dGFsbGVkLiBGcm9tIHRoaXMgcGFnZSB5b3UgY2FuIEluc3RhbGwsIERlbGV0ZSBhbmQgU2F2 ZSB0aGUgcGx1Z2luIHByZWZlcmVuY2VzIG9yIHJlbW92ZSB0aGUgdGFibGVzIHRvIGVtcHR5 IHlvdXIgdGFncyBlbnRpcmVseSBhbmQgc3RhcnQgYWdhaW4uPC9wPgoKCTxwPlRvIHJlbW92 ZSBzbWRfdGFncyB2aXNpdCB0aGUgc21kX3RhZ3MgUHJlZmVyZW5jZXMgcGFnZSBhZ2Fpbiwg aGl0ICYjODIxNjtSZW1vdmUgdGFibGVzJiM4MjE3OyB0byByZW1vdmUgdGhlIHByZWZlcmVu Y2VzIGFuZCB0YWcgdGFibGVzIGZyb20gdGhlIGRhdGFiYXNlLCB0aGVuIHNpbXBseSBkZWxl dGUgdGhlIHBsdWdpbnMgYXMgbm9ybWFsIGZyb20gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMg cGFnZS48L3A+CgoJPHA+VmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0 dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yODYyMSI+Zm9ydW0gdGhyZWFkPC9hPiBmb3Ig bW9yZSBpbmZvIGFuZCB0byByZXBvcnQgdGhlIHN1Y2Nlc3MgKG9yIG90aGVyd2lzZSkgb2Yg dGhpcyBwbHVnaW4uPC9wPgoKCTxoMiBjbGFzcz0idXNhZ2UiPlVzYWdlPC9oMj4KCgk8aDM+ VGhlIGJ1dHRvbnM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlJlbW92 ZSBwcmVmczwvc3Bhbj4gOiBkZWxldGUgdGhlIHByZWZlcmVuY2VzIG9ubHk7IHVzZWZ1bCBp ZiB5b3VyIHByZWZzIGhhdmUgYmVjb21lIGNvcnJ1cHRlZCBvciB5b3Ugc2ltcGx5IHdhbnQg dG8gcmV0dXJuIHRvICYjODIyMDtkZWZhdWx0JiM4MjIxOyBvcGVyYXRpb248L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+UmVtb3ZlIHRhYmxlczwvc3Bhbj4gOiBkZWxldGUgdGhl IHRhZ3MgdGFibGVzLiBUaGlzIHdpbGwgcGVybWFuZW50bHkgZXJhc2UgYWxsIHRhZ3MgYWdh aW5zdCBhbGwgYXJ0aWNsZXMsIGltYWdlcywgZmlsZXMgYW5kIGxpbmtzLiBCZSB2ZXJ5IHN1 cmUgeW91IG1lYW4gaXQgYmVmb3JlIGNsaWNraW5nIHRoaXM8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+TWFuYWdlIHRhZ3M8L3NwYW4+IDogU3dpdGNoIHRvIHRoZSB0YWcgbWFu YWdlbWVudCBwYWdlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlByZWZlcmVuY2Vz PC9zcGFuPiA6IFN3aXRjaCB0byB0aGUgcHJlZmVyZW5jZXMgcGFnZTwvbGk+Cgk8L3VsPgoK CTxoMz5UaGUgcHJlZmVyZW5jZXM8L2gzPgoKCTxoND5JbnRlcmZhY2Ugc2V0dGluZ3M8L2g0 PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkVuYWJsZSB0YWdzIGluPC9zcGFu PiA6IGEgdGFnIGVudHJ5IG1lY2hhbmlzbSBpcyBhZGRlZCB0byB0aGUgYWRtaW4gc2lkZSBv ZiBlYWNoIG9mIHRoZSBjaGVja2VkIHBhZ2VzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPkluaXRpYWwgcGFuZTwvc3Bhbj4gOiB3aGVuIHlvdSBjbGljayBFeHRlbnNpb25zIC0m Z3Q7IHNtZF90YWdzLCBzaG93IGVpdGhlciB0aGUgcHJlZmVyZW5jZXMgcGFnZSBvciB0aGUg dGFnIG1hbmFnZW1lbnQgcGFnZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5FbnRl ciB0YWdzIHVzaW5nPC9zcGFuPiA6IHRoZSBtZWNhaG5pc20geW91IHdpc2ggdG8gdXNlIHRv IGFzc2lnbiB0YWdzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkxpbmsgdGFncyB0 byBjYXRlZ29yaWVzPC9zcGFuPiA6IGFsbG93IHRhZ3MgdG8gYmUgYXNzb2NpYXRlZCB3aXRo IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGNhdGVnb3JpZXM8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+UXVpY2sgdGFnPC9zcGFuPiA6IGlmIHVzaW5nIGEgdGV4dGFy ZWEgYW5kIHlvdSBpbnN0YWxsIHRoZSBqUXVlcnkgYXV0b2NvbXBsZXRlIHBsdWdpbiwgdGhp cyBkZXRlcm1pbmVzIHdoaWNoIG1ldGhvZCBvZiBhdXRvLWNvbXBsZXRlIHRvIHVzZTogPGNv ZGU+c3RyaWN0PC9jb2RlPiBwcmV2ZW50cyB0YWdzIGJlaW5nIHN1Ym1pdHRlZCB0aGF0IGFy ZSBkaXNhbGxvd2VkIGJ5IHRoZSBjdXJyZW50IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3Nw YW4+IGNhdGVnb3J5OyA8Y29kZT5zdGFuZGFyZDwvY29kZT4gYWxsb3dzIG90aGVyIHRhZ3Mg dG8gYmUgZW50ZXJlZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5qcyBwbHVnaW4g ZGlyPC9zcGFuPiA6IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91ciBhdXRvLWNvbXBsZXRl IHBsdWdpbiByZXNpZGVzICh0aGUgZmlsZW5hbWUgaXQgZXhwZWN0cyBpcyA8Y29kZT5qcXVl cnkuYXV0b2NvbXBsZXRlLnBhY2suanM8L2NvZGU+KS4gSWYgeW91IGJlZ2luIHRoZSBkaXJl Y3RvcnkgbmFtZSB3aXRoIGEgPGNvZGU+LzwvY29kZT4gdGhlIHBhdGggd2lsbCBiZSByZWxh dGl2ZSB0byB5b3VyIHNpdGUgcm9vdC4gV2l0aG91dCBhIHByZWNlZGluZyAmIzgyMTY7LyYj ODIxNzsgaXQgaXMgcmVsYXRpdmUgdG8gdGhlICYjODIxNjt0ZXh0cGF0dGVybiYjODIxNzsg ZGlyZWN0b3J5LiBUaGUgdHJhaWxpbmcgc2xhc2ggaXMgb3B0aW9uYWwgYW5kIHdpbGwgYmUg YWRkZWQgaW50ZXJuYWxseSBpZiB5b3Ugb21pdCBpdC4gVGhpcyBnaXZlcyB5b3UgdGhlIGZy ZWVkb20gdG8gcHV0IHRoZSBmaWxlcyB3aGVyZXZlciBpdCBzdWl0cyB5b3UgYW5kIHJlZmVy ZW5jZSB0aGVtIGxpa2UgdGhpczoKCTx1bD4KCQk8bGk+dXNlIDxjb2RlPm15X2pzPC9jb2Rl PiBmb3IgJiM4MjE2O3RleHRwYXR0ZXJuL215X2pzL2pxdWVyeS5hdXRvY29tcGxldGUucGFj ay5qcyYjODIxNzs8L2xpPgoJCTxsaT51c2UgZWl0aGVyIDxjb2RlPi4uL215X3NjcmlwdHM8 L2NvZGU+ICBvciA8Y29kZT4vbXlfc2NyaXB0czwvY29kZT4gZm9yICYjODIxNjtzaXRlX3Jv b3QvbXlfc2NyaXB0cy9qcXVlcnkuYXV0b2NvbXBsZXRlLnBhY2suanMmIzgyMTc7PC9saT4K CTwvdWw+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmpzIHN0eWxlIGRpcjwvc3Bh bj4gOiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHlvdXIgYXV0by1jb21wbGV0ZSA8c3BhbiBj bGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBmaWxlcyByZXNpZGUgKHRoZSBmaWxlIG5hbWUgaXQg ZXhwZWN0cyBpcyA8Y29kZT5qcXVlcnkuYXV0b2NvbXBsZXRlLmNzczwvY29kZT4pLiBUaGUg c2FtZSBjb21tZW50cyBob2xkIHRydWUgYWJvdXQgdGhlIHBhdGggYXMgYWJvdmU8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+U2VsZWN0L3RleHRhcmVhIHJvd3M8L3NwYW4+IDog bnVtYmVyIG9mIHJvd3MgaW4gdGhlIHNlbGVjdCBsaXN0IG9yIHRleHRhcmVhPC9saT4KCTwv dWw+CgoJPGg0PlRhZyBtYW5hZ2VtZW50PC9oND4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5BdXRvIG5hbWU8L3NwYW4+IDogaGVscHMgc3BlZWQgdGFnIGNyZWF0aW9uIGJ5 IGF1dG9tYXRpY2FsbHkgbmFtaW5nIHRoZW0gYmFzZWQgb24gdGhlIHRpdGxlIHlvdSB1c2U8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGFnIGNvbHVtbnM8L3NwYW4+IDogdGhl IG51bWJlciBvZiBjb2x1bW5zIG9mIHRhZ3MgdG8gZGlzcGxheSBpbiB0aGUgbWFuYWdlbWVu dCBwYWdlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk9yZGVyIHRhZ3MgYnk8L3Nw YW4+IDogJiM4MjE2O2NvbHVtbiYjODIxNzsgdG8gaGF2ZSB0aGUgdGFncyB3b3JrIGRvd24g dGhlIHBhZ2UgZmlyc3Q7ICYjODIxNjtyb3cmIzgyMTc7IHRvIHdvcmsgYWNyb3NzIHRoZSBw YWdlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlNob3cgdGFnIHVzYWdlIGNvdW50 czwvc3Bhbj4gOiB3aGV0aGVyIHRvIGluZGljYXRlIHRoZSBudW1iZXIgb2YgaXRlbXMgZm9y IHdoaWNoIGEgdGFnIGlzIHVzZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+V2hl biBkZWxldGluZyBhIHBhcmVudDwvc3Bhbj4gOiBjaG9vc2Ugd2hldGhlciBhbnkgY2hpbGQg dGFncyB3aWxsIGJlIHByb21vdGVkIHRvIHRoZSBzYW1lIGxldmVsIGFzIHRoZSB0YWcgeW91 IGp1c3QgZGVsZXRlZCwgb3IgdGhlIGVudGlyZSB0cmVlIGJlbG93IHRoZSBkZWxldGVkIHRh ZyB3aWxsIGJlIHJlbW92ZWQgYXMgd2VsbDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5BbGxvdyBkZWxldGlvbiBvZiB1c2VkIHRhZ3M8L3NwYW4+IDogd2hlbiAmIzgyMTY7bm8m IzgyMTc7LCBpZiBhIHRhZyBoYXMgYmVlbiB1c2VkIGJ5IGFuIGFydGljbGUvaW1hZ2UvZmls ZS9saW5rIGl0IGNhbm5vdCBiZSBkZWxldGVkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPkNsaWNrZWQgPHNwYW4gY2xhc3M9ImNhcHMiPlJHQjwvc3Bhbj4gY29sb3VyPC9zcGFu PiA6IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBiYWNrZ3JvdW5kIGNvbG91 ciBmb3IgdGhlIGN1cnJlbnRseSBlZGl0ZWQgdGFnOyBmb3IgdGhvc2UgdGhhdCBkb24mIzgy MTc7dCBsaWtlIHllbGxvdyA7LSk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TW91 c2Utb3ZlciA8c3BhbiBjbGFzcz0iY2FwcyI+UkdCPC9zcGFuPiBjb2xvdXI8L3NwYW4+IDog dGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGJhY2tncm91bmQgY29sb3VyIGFz IHlvdSBtb3ZlIG92ZXIgZWFjaCBpdGVtIGluIHRoZSBsaXN0PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPlN1Yi10YWcgbGV2ZWwgaW5kaWNhdG9yPC9zcGFuPiA6IHRoZSA8c3Bh biBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZW50aXR5IG9yIHRleHQgeW91IHdpc2ggdG8g cHJlY2VkZSBlYWNoIHN1Yi10YWcgd2l0aC4gTGV2ZWwgMSB0YWdzIGhhdmUgb25lIG9mIHRo ZXNlIHN5bWJvbHMgYWRkZWQsIGxldmVsIDIgdGFncyBoYXZlIHR3byBhZGRlZCwgYW5kIHNv IG9uPC9saT4KCTwvdWw+CgoJPGg0PjxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IG1h bmFnZW1lbnQ8L2g0PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPjxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+IG5hbWUgcGFyYW1ldGVyPC9zcGFuPiA6IFdoZW4gZmls dGVyaW5nIGJ5IHRhZyBuYW1lLCB0aGlzIGlzIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPiBzdHJpbmcgdXNlZCB0byBpbmRpY2F0ZSBhIHRhZzwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj48c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0eXBlIHBhcmFt ZXRlcjwvc3Bhbj4gOiBXaGVuIGZpbHRlcmluZyBieSB0YWcgdHlwZSwgdGhpcyBpcyB0aGUg PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc3RyaW5nIHVzZWQgdG8gaW5kaWNhdGUg YSB0YWcgdHlwZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5EZWZhdWx0IHNlY3Rp b24gZm9yIHRhZ3M8L3NwYW4+IDogQW55IGxpbmtzIGZyb20gdGhlIGNsaWVudC1zaWRlIHRh Z3Mgd2lsbCBiZSBzZW50IHRvIHRoaXMgc2VjdGlvbiBmb3IgZGlzcGxheS4gQ2FuIGJlIG92 ZXJyaWRkZW4gb24gYSB0YWctYnktdGFnIGJhc2lzIHdpdGggdGhlIDxjb2RlPnNlY3Rpb25f bGluazwvY29kZT4gYXR0cmlidXRlPC9saT4KCTwvdWw+CgoJPGgzPlRoZSBtYW5hZ2VtZW50 IHBhbmU8L2gzPgoKCTxwPkRpc3BsYXlzIGEgbGlzdCBvZiBhbGwgZGVmaW5lZCB0YWdzLiBJ biBjb250cmFzdCB0byB0aGUgYnVpbHQtaW4gY2F0ZWdvcmllcywgb25seSBvbmUgdHlwZSBp cyBzaG93biBhdCBhIHRpbWU7IHN3aXRjaCBiZXR3ZWVuIHRoZW0gd2l0aCB0aGUgcmFkaW8g YnV0dG9ucyBpbiB0aGUgJiM4MjE2O0ZpbHRlciYjODIxNzsgcm93LjwvcD4KCgk8cD5UaGUg aW5wdXQgcm93IGF0IHRoZSB0b3AgaGFzIHRocmVlIG9yIGZvdXIgZmllbGRzIGluIGl0LCBk ZXBlbmRpbmcgaWYgeW91IGhhdmUgY2hvc2VuIHRvIGxpbmsgdGFncyB0byBjYXRlZ29yaWVz OjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaXRsZTwvc3Bhbj4gOiBU aGUgZGlzcGxheSBuYW1lIG9mIHRoZSB0YWcgb24gdGhlIHB1YmxpYyBzaWRlPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlBhcmVudDwvc3Bhbj4gOiBXaGV0aGVyIHRoZSB0YWcg aXMgaW4gYSBzdWItY2F0ZWdvcnkuIFRoZSBlbXB0eSBpdGVtIGlzIGNvbnNpZGVyZWQgJiM4 MjE2O3Jvb3QmIzgyMTc7ICh0b3AgbGV2ZWwpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPkxpbmtlZCBjYXQ8L3NwYW4+IDogKG9wdGlvbmFsKSBXaGV0aGVyIHRoZSB0YWcgaXMg YXNzb2NpYXRlZCB3aXRoIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gY2F0ZWdv cnkuIEFueSBzdWItdGFncyBhcmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0byB0aGUgY2hv c2VuIGNhdGVnb3J5IGFzIHdlbGw8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TmFt ZTwvc3Bhbj4gOiBUaGUgJiM4MjE2O2ludGVybmFsJiM4MjE3OyA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiB0YWcgbmFtZS4gUHJvYmFibHkgc2hvdWxkbiYjODIxNzt0IGNvbnRh aW4gc3BhY2VzIG9yIHdlaXJkIGNoYXJhY3RlcnMsIGFsdGhvdWdoIHlvdSBjYW4gcHV0IHRo ZW0gaW4gaWYgeW91IGtub3cgd2hhdCB5b3UmIzgyMTc7cmUgZG9pbmc8L2xpPgoJPC91bD4K Cgk8cD5XaXRoIHRoZSBhdXRvLW5hbWUgZmVhdHVyZSBlbmFibGVkLCB3aGF0ZXZlciB5b3Ug dHlwZSBpbiB0aGUgVGl0bGUgZmllbGQgd2lsbCBiZSBtaW1pY2tlZCBpbiB0aGUgTmFtZSBm aWVsZCwgYnV0IHdpdGggb25seSBsb3dlciBjYXNlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJz LiBTcGFjZXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gZGFzaGVzLiBbIE5vdGUgdGhhdCBhdCBw cmVzZW50LCBmb3JlaWduIGNoYXJhY3RlcnMgYXJlIG5vdCAmIzgyMTY7ZHVtYmVkIGRvd24m IzgyMTc7IHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5BU0NJSTwvc3Bhbj4uIFRoaXMgZmVhdHVy ZSBpcyBwbGFubmVkIF08L3A+CgoJPHA+SGl0IFNhdmUgKG9yIENyZWF0ZSkgdG8gZGVmaW5l IHRoZSB0YWcsIG9yIHVzZSB0aGUgRW50ZXIga2V5IHdoZW4gaW4gYW55IGlucHV0IGZpZWxk IGFzIGEgc2hvcnRjdXQgZm9yIENyZWF0ZS4gVGhlIHRhZyB3aWxsIGJlIGNyZWF0ZWQgaW4g dGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0eXBlIChhcnRpY2xlLCBpbWFnZSwgZmlsZSBvciBs aW5rKSBidXQgd2lsbCByZW1haW4gJiM4MjE2O3NlbGVjdGVkJiM4MjE3OyBhZnRlciBjcmVh dGlvbiBhbmQgd2lsbCBhbHNvIHN0YXkgYXZhaWxhYmxlIHdoZW4gc3dpdGNoaW5nIGJldHdl ZW4gdHlwZXMuIFRoaXMgYWxsb3dzIGZvciByYXBpZCBjcmVhdGlvbiBvZiBzaW1pbGFyLW5h bWVkIHRhZ3Mgb3IgZm9yIHZlcnkgcXVpY2tseSAmIzgyMTY7Y29weWluZyYjODIxNzsgdGFn cyBmcm9tIG9uZSB0eXBlIHRvIGFub3RoZXIuPC9wPgoKCTxwPllvdSBjYW4gZWRpdCBhbnkg dGFnIGJ5IGNsaWNraW5nIG9uIGl0IGluIHRoZSBsaXN0IHRvIHB1bGwgaXQgaW50byB0aGUg ZWRpdCBsaW5lIGF0IHRoZSB0b3AuIE1ha2UgYW55IGNoYW5nZXMgYW5kIGhpdCBTYXZlIHRv IG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgdGFnIG9yIENyZWF0ZSB0byBtYWtlIGEgbmV3IG9u ZS4gVXNlIHRoZSAmIzgyMTY7eCYjODIxNzsgYnV0dG9uIHRvIGRlbGV0ZSB0aGUgc2VsZWN0 ZWQgdGFnOyBub3RlIHRoZXJlIGlzIG5vIGNvbmZpcm1hdGlvbiBzdGVwLCBzaW5jZSB0aGUg YWN0IG9mIGNsaWNraW5nIHRoZSB0YWcgaXMgdGhlIGNvbmZpcm1hdGlvbiBpdHNlbGYhIFdo ZW4geW91IHN3aXRjaCBiZXR3ZWVuIHR5cGVzLCBpZiB0aGUgY3VycmVudGx5IGVkaXRlZCB0 YWcgZXhpc3RzIGluIGFub3RoZXIgdHlwZSwgaXQgd2lsbCBiZSBzZWxlY3RlZCBhdXRvbWF0 aWNhbGx5IHVwb24gc3dpdGNoaW5nLjwvcD4KCgk8cD5JZiB0aGUgb3B0aW9uIHRvIGRpc3Bs YXkgY291bnRzIGlzIHNlbGVjdGVkIHRoZSBudW1iZXIgb2YgYXJ0aWNsZXMgLyBpbWFnZXMg LyBmaWxlcyAvIGxpbmtzIHdpbGwgYmUgc2hvd24gaW4gYnJhY2tldHMgYWxvbmdzaWRlIGVh Y2ggdGFnLiBJZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDAgdGhlIG51bWJlciBjYW4g YmUgY2xpY2tlZCB0byB2aWV3IHRoZSBsaXN0IG9mIGl0ZW1zIGNvbnRhaW5pbmcgdGhhdCB0 YWcuPC9wPgoKCTxwPk5vdGVzOjwvcD4KCgk8dWw+CgkJPGxpPklmIHlvdSBFZGl0IGEgdGFn IGFuZCB0cnkgdG8gU2F2ZSBpdCB3aGVuIGl0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4 aXN0aW5nIHRhZywgeW91IHdpbGwgcmVjZWl2ZSBhIHdhcm5pbmcgbWVzc2FnZTwvbGk+CgkJ PGxpPklmIHlvdSB0cnkgdG8gZGVsZXRlIGEgdGFnIHRoYXQgaXMgaW4gdXNlIGFuZCB0aGUg cHJlZmVyZW5jZSAmIzgyMTY7QWxsb3cgZGVsZXRpb24gb2YgdXNlZCB0YWdzJiM4MjE3OyBp cyBzZXQgdG8gJiM4MjE2O25vJiM4MjE3OywgaXQgd2lsbCBiZSBmb3JiaWRkZW48L2xpPgoJ CTxsaT5UaGUgcGFyZW50IGxpc3QgaXMgcG9wdWxhdGVkIHZpYSA8c3BhbiBjbGFzcz0iY2Fw cyI+QUpBWDwvc3Bhbj4gZnJvbSB0aGUgZGF0YWJhc2UgZWFjaCB0aW1lIHlvdSBjbGljayBh IHRhZywgYW5kIHRoZSBMaW5rZWQgY2F0IGxpc3QgaXMgcG9wdWxhdGVkIGVhY2ggdGltZSB5 b3UgY2hhbmdlIHR5cGUuIFRoaXMgaXMgdW5mb3J0dW5hdGVseSB1bmF2b2lkYWJsZS4gVGhl IGxpc3RzIHdpbGwgZmFkZSBvdXQgd2hpbGUgdGhlIHJlcXVlc3QgaXMgdGFraW5nIHBsYWNl LiBPY2Nhc2lvbmFsbHkgaXQgbWF5IGdldCAmIzgyMjA7c3R1Y2smIzgyMjE7IGlmIHlvdSBj bGljayB0b28gcXVpY2tseSBiZXR3ZWVuIHRhZ3Mgb3IgdGhlIHNlcnZlciBpcyBzbG93IHRv IHJlc3BvbmQuIEluIHRoZXNlIGNpcmN1bXN0YW5jZXMsIHJlZnJlc2hpbmcgdGhlIHBhZ2Ug YnkgY2xpY2tpbmcgdGhlIHNtZF90YWdzIHRhYiB3aWxsIHJlc3RvcmUgdGhpbmdzPC9saT4K CQk8bGk+V2hlbiB1c2luZyB0aGUgYXV0by1uYW1lIGZlYXR1cmUsIGlmIHlvdSB3YW50IHRv IGNoYW5nZSB0aGUgTmFtZSBmaWVsZCwgZG8gaXQgPGVtPmFmdGVyPC9lbT4geW91IGhhdmUg ZmluaXNoZWQgdHlwaW5nIGluIHRoZSBUaXRsZSBmaWVsZDsgYW55IHN1YnNlcXVlbnQgY2hh bmdlcyB0byB0aGUgVGl0bGUgZmllbGQgd2lsbCBvdmVyd3JpdGUgYW55dGhpbmcgaW4gdGhl IE5hbWUgZmllbGQ8L2xpPgoJCTxsaT5EZWxldGluZyBhIHRhZyB3aWxsIHJlbW92ZSBhbGwg cmVmZXJlbmNlcyB0byBpdCBzbyBiZSBjYXJlZnVsPC9saT4KCTwvdWw+CgoJPGgzPkVkaXRp bmcgYXJ0aWNsZXMgLyBpbWFnZXMgLyBmaWxlcyAvIGxpbmtzPC9oMz4KCgk8cD5PbiBlYWNo IG9mIHRoZSBmb3VyIHBhZ2VzIHRoYXQgaGF2ZSBjaGVja2JveGVzIHNldCBpbiB0aGUgc21k X3RhZ3MgcHJlZmVyZW5jZXMsIHlvdXIgY2hvc2VuIGlucHV0IG1lY2hhbmlzbSB3aWxsIGFw cGVhciBiZW5lYXRoIHRoZSBjYXRlZ29yeSBhc3NpZ25tZW50LiBUaGlzIGFsbG93cyB5b3Ug dG8gdGFnIGEgcGFydGljdWxhciBhcnRpY2xlLCBpbWFnZSwgZmlsZSBvciBsaW5rIHdpdGgg YW55IG51bWJlciBvZiBpdGVtcy4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZCB5b3VyIHRhZ3Ms IHRoZSB1c3VhbCBTYXZlIGJ1dHRvbiBvbiB0aGUgc2NyZWVuIHdpbGwgY29tbWl0IHRoZSBj aGFuZ2VzLjwvcD4KCgk8cD5UaGUgPGNvZGU+W0VkaXRdPC9jb2RlPiBsaW5rIHRha2VzIHlv dSB0byB0aGUgVGFnIE1hbmFnZW1lbnQgcGFnZSB0aGF0IGFsbG93cyB5b3UgdG8gY3JlYXRl IG5ldyB0YWdzLiBJZiB1c2luZyBhIHNlbGVjdCBsaXN0LCB0d28gb3RoZXIgYnV0dG9ucyBh cmUgYXZhaWxhYmxlOiA8Y29kZT5bQ2xyXTwvY29kZT4gZGVzZWxlY3RzIGFsbCB0YWdzIGFu ZCA8Y29kZT5bVG9nXTwvY29kZT4gdG9nZ2xlcyBhbGwgdGFncyBzbyBpZiB0aGV5IHdlcmUg JiM4MjE2O29uJiM4MjE3OyB0aGV5IGJlY29tZSAmIzgyMTY7b2ZmJiM4MjE3OywgYW5kIHZp Y2UgdmVyc2EuPC9wPgoKCTxwPk5vdGVzIG9uIHRoZSB0ZXh0YXJlYSBlbnRyeSBtZWNoYW5p c206PC9wPgoKCTx1bD4KCQk8bGk+WW91IGNhbm5vdCBjcmVhdGUgbmV3IHRhZ3MgYnkgdHlw aW5nIHRoZW0gaW47IHRoZXkgbXVzdCBiZSBjcmVhdGVkIGZpcnN0LiBUaGlzIGZlYXR1cmUg aXMgdW5kZXIgcmV2aWV3IGFuZCBtYXkgYmUgYWxsb3dlZCBpbiBmdXR1cmU8L2xpPgoJCTxs aT5UaGUgdGFncyBhcmUgY2FzZSBzZW5zaXRpdmUuIEF1dG8tY29tcGxldGUgaXMgc3Ryb25n bHkgcmVjb21tZW5kZWQ8L2xpPgoJPC91bD4KCgk8aDIgY2xhc3M9ImNoYW5nZWxvZyI+Q2hh bmdlbG9nPC9oMj4KCgk8cD5CZXRhOjwvcD4KCgk8dWw+CgkJPGxpPjE1IE9jdCAwOCB8IDAu MSB8IEluaXRpYWwgcmVsZWFzZTwvbGk+CgkJPGxpPjE2IE9jdCAwOCB8IDAuMTEgfCBJbXBy b3ZlZCBoZWxwIGV4YW1wbGVzIHN1cnJvdW5kaW5nIHRoZSBhdXRvY29tcGxldGUgcGx1Z2lu ICh0aGFua3MgdGhlYm9tYnNpdGUpIDsgZml4ZWQgcmVtb3ZlX3RhYmxlcywgdXNlIG9mIDxz cGFuIGNsYXNzPSJjYXBzIj5QRlg8L3NwYW4+IGFuZCBhZGRlZCBkZWJ1ZyB0byBpbnN0YWxs YXRpb24gcHJvY2VkdXJlICh0aGFua3MganBkdXBvbnQpPC9saT4KCTwvdWw+CgoJPHA+PC9k aXY+PC9wPgo8IS0tIC0tLSBCRUdJTiBQTFVHSU4gQ1NTIC0tLSAtLT4KPHN0eWxlIHR5cGU9 InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS4zIDt9CiNzbWRfaGVscCBj b2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIs IGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNzbWRf aGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRl ZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJn aW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAgYTpsaW5rLCAj c21kX2hlbHAgYTp2aXNpdGVkIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9u ZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9 CiNzbWRfaGVscCBhOmhvdmVyLCAjc21kX2hlbHAgYTphY3RpdmUgeyBjb2xvcjogYmx1ZTsg dGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAycHggc29saWQgYmx1ZTsg cGFkZGluZy1ib3R0b206MXB4O30KI3NtZF9oZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6 IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50 ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBw YWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5z LXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGNvbG9yOiAjNjkzOyBmb250OiBib2xkIDEycHgg QXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAw IDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJv bGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2lu OiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0 bm0geyBmb250LXdlaWdodDpib2xkOyBjb2xvcjojMDVmOyB9CiNzbWRfaGVscCAubWFuZCB7 IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAg dGFibGUge3dpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbTox ZW07fQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7Ym9yZGVyOjFweCBzb2xpZCAjOTk5 OyBwYWRkaW5nOi41ZW0gMDt9CiNzbWRfaGVscCAucmVxdWlyZXMgeyBjb2xvcjpyZWQ7fQo8 L3N0eWxlPgo8IS0tIC0tLSBFTkQgUExVR0lOIENTUyAtLS0gLS0+CiI7czozOiJtZDUiO3M6 MzI6ImI0ODdmMmFlM2FjYzI4YWY3NTU3YjgyMmI4MzgwNmE2Ijt9