# Name: glz_custom_fields v1.5.0 # Type: Admin/Public/AJAX plugin # Unlimited, super special custom fields. # Author: Gerhard Lazu # URL: http://gerhardlazu.com # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern CMS - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE3OiJnbHpfY3VzdG9tX2ZpZWxkcyI7czo2OiJhdXRob3Ii O3M6MTI6IkdlcmhhcmQgTGF6dSI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL2dl cmhhcmRsYXp1LmNvbSI7czo3OiJ2ZXJzaW9uIjtzOjU6IjEuNS4wIjtzOjExOiJkZXNjcmlw dGlvbiI7czozOToiVW5saW1pdGVkLCBzdXBlciBzcGVjaWFsIGN1c3RvbSBmaWVsZHMuIjtz OjQ6ImNvZGUiO3M6NjY4OTc6IgojIGdsel9jdXN0b21fZmllbGRzIHYxLjUuMAojIFVubGlt aXRlZCwgc3VwZXIgc3BlY2lhbCBjdXN0b20gZmllbGRzLgojCiMgR2VyaGFyZCBMYXp1CiMg aHR0cDovL2dlcmhhcmRsYXp1LmNvbQojCiMgQ29udHJpYnV0b3JzOiBSYW5keSBMZXZpbmUs IFNhbSBXZWlzcywgTHVjYSBCb3R0aSwgTWFuZnJlLCBWbGFkaW1pciBTaWxqa292aWMsIEp1 bGlhbiBSZWlzZW5iZXJnZXIsIFN0ZXZlIERpY2tpbnNvbiwgU3RlZiBEYXdzb24sIEplYW4t UG9sIER1cG9udAojIE1pbmltdW0gcmVxdWlyZW1lbnRzOiBUZXh0cGF0dGVybiA0LjYuMg0K DQovLyBJbmNsdWRpbmcgaGVscGVyIGZpbGVzLiBJZiB3ZSBjYW4ndCBoYXZlIGNsYXNzZXMs IHdlIHdpbGwgdXNlIGluY2x1ZGVzDQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gbWVzc2FnZXMgdGhh dCB3aWxsIGJlIGF2YWlsYWJsZSB0aHJvdWdob3V0IHRoaXMgcGx1Z2luDQpmdW5jdGlvbiBn bHpfY3VzdG9tX2ZpZWxkc19nVHh0KCRnZXQsICRhdHRzID0gYXJyYXkoKSkgew0KICAkbGFu ZyA9IGFycmF5KA0KICAgICdub19uYW1lJyAgICAgICAgICAgICAgICA9PiAnT29vcHMhIDxz dHJvbmc+Y3VzdG9tIHNldDwvc3Ryb25nPiBtdXN0IGhhdmUgYSBuYW1lJywNCiAgICAnZGVs ZXRlZCcgICAgICAgICAgICAgICAgPT4gJzxzdHJvbmc+e2N1c3RvbV9zZXRfbmFtZX08L3N0 cm9uZz4gd2FzIGRlbGV0ZWQnLA0KICAgICdyZXNldCcgICAgICAgICAgICAgICAgICA9PiAn PHN0cm9uZz57Y3VzdG9tX3NldF9uYW1lfTwvc3Ryb25nPiB3YXMgcmVzZXQnLA0KICAgICdj cmVhdGVkJyAgICAgICAgICAgICAgICA9PiAnPHN0cm9uZz57Y3VzdG9tX3NldF9uYW1lfTwv c3Ryb25nPiB3YXMgY3JlYXRlZCcsDQogICAgJ3VwZGF0ZWQnICAgICAgICAgICAgICAgID0+ ICc8c3Ryb25nPntjdXN0b21fc2V0X25hbWV9PC9zdHJvbmc+IHdhcyB1cGRhdGVkJywNCiAg ICAnZXhpc3RzJyAgICAgICAgICAgICAgICAgPT4gJ09vb3BzISA8c3Ryb25nPntjdXN0b21f c2V0X25hbWV9PC9zdHJvbmc+IGFscmVhZHkgZXhpc3RzJywNCiAgICAnZG9lc250X2V4aXN0 JyAgICAgICAgICAgPT4gJ09vb3BzISA8c3Ryb25nPntjdXN0b21fc2V0X25hbWV9PC9zdHJv bmc+IGlzIG5vdCBzZXQnLA0KICAgICdmaWVsZF9wcm9ibGVtcycgICAgICAgICA9PiAnT29v cHMhIDxzdHJvbmc+e2N1c3RvbV9zZXRfbmFtZX08L3N0cm9uZz4gaGFzIHNvbWUgcHJvYmxl bXMuIDxhIGhyZWY9Ij9ldmVudD1nbHpfY3VzdG9tX2ZpZWxkcyI+R28gZml4IGl0PC9hPi4n LA0KICAgICdjdXN0b21fc2V0JyAgICAgICAgICAgICA9PiAnVGV4dCBJbnB1dCcsICMgY3Vz dG9tIHNldHMgaW4gVFhQIDQuMi4wIGFyZSBieSB0eXBlIGN1c3RvbV9zZXQgYnkgZGVmYXVs dC4uLg0KICAgICd0ZXh0X2lucHV0JyAgICAgICAgICAgICA9PiAnVGV4dCBJbnB1dCcsDQog ICAgJ3NlbGVjdCcgICAgICAgICAgICAgICAgID0+ICdTZWxlY3QnLA0KICAgICdtdWx0aS1z ZWxlY3QnICAgICAgICAgICA9PiAnTXVsdGktU2VsZWN0JywNCiAgICAndGV4dGFyZWEnICAg ICAgICAgICAgICAgPT4gJ1RleHRhcmVhJywNCiAgICAnY2hlY2tib3gnICAgICAgICAgICAg ICAgPT4gJ0NoZWNrYm94JywNCiAgICAncmFkaW8nICAgICAgICAgICAgICAgICAgPT4gJ1Jh ZGlvJywNCiAgICAnZGF0ZS1waWNrZXInICAgICAgICAgICAgPT4gJ0RhdGUgUGlja2VyJywN CiAgICAndGltZS1waWNrZXInICAgICAgICAgICAgPT4gJ1RpbWUgUGlja2VyJywNCiAgICAn Y3VzdG9tLXNjcmlwdCcgICAgICAgICAgPT4gJ0N1c3RvbSBTY3JpcHQnLA0KICAgICd0eXBl X25vdF9zdXBwb3J0ZWQnICAgICA9PiAnVHlwZSBub3Qgc3VwcG9ydGVkJywNCiAgICAnbm9f ZG8nICAgICAgICAgICAgICAgICAgPT4gJ09vb3BzISBObyBhY3Rpb24gc3BlY2lmaWVkIGZv ciBtZXRob2QsIGFib3J0LicsDQogICAgJ25vdF9zcGVjaWZpZWQnICAgICAgICAgID0+ICdP b29wcyEge3doYXR9IGlzIG5vdCBzcGVjaWZpZWQnLA0KICAgICdzZWFyY2hieV9ub3Rfc2V0 JyAgICAgICA9PiAnPHN0cm9uZz5zZWFyY2J5PC9zdHJvbmc+IGNhbm5vdCBiZSBsZWZ0IGJs YW5rJywNCiAgICAnanF1ZXJ5X21pc3NpbmcnICAgICAgICAgPT4gJ1VwZ3JhZGUgVFhQIHRv IGF0IGxlYXN0IDQuMC41IG9yIHB1dCA8c3Ryb25nPmpxdWVyeS5qczwvc3Ryb25nPiBpbiB5 b3VyIC90ZXh0cGF0dGVybiBmb2xkZXIuIDxhIGhyZWY9Imh0dHA6Ly9qcXVlcnkuY29tIiB0 aXRsZT0ialF1ZXJ5IHdlYnNpdGUiPmpRdWVyeSB3ZWJzaXRlPC9hPicsDQogICAgJ2NoZWNr X3BhdGgnICAgICAgICAgICAgID0+ICdNYWtlIHN1cmUgYWxsIHlvdXIgcGF0aHMgYXJlIGNv cnJlY3QuIENoZWNrIDxzdHJvbmc+Y29uZmlnLnBocDwvc3Ryb25nPiBhbmQgdGhlIEFkbWlu IHRhYiAobWFpbmx5IEFkdmFuY2VkKS4nLA0KICAgICdub19hcnRpY2xlc19mb3VuZCcgICAg ICA9PiAnTm8gYXJ0aWNsZXMgd2l0aCBjdXN0b20gZmllbGRzIGhhdmUgYmVlbiBmb3VuZC4n LA0KICAgICdtaWdyYXRpb25fc3VjY2VzcycgICAgICA9PiAnTWlncmF0aW5nIGN1c3RvbSBm aWVsZHMgd2FzIHN1Y2Nlc3NmdWwnLA0KICAgICdtaWdyYXRpb25fc2tpcCcgICAgICAgICA9 PiAnPHN0cm9uZz5jdXN0b21fZmllbGRzPC9zdHJvbmc+IHRhYmxlIGFscmVhZHkgaGFzIGRh dGEgaW4gaXQsIG1pZ3JhdGlvbiBza2lwcGVkLicsDQogICAgJ3NlYXJjaF9zZWN0aW9uX2Ny ZWF0ZWQnID0+ICc8c3Ryb25nPnNlYXJjaDwvc3Ryb25nPiBzZWN0aW9uIGhhcyBiZWVuIGNy ZWF0ZWQnLA0KICAgICdjdXN0b21fc2V0c19hbGxfaW5wdXQnICA9PiAnQWxsIGN1c3RvbSBz ZXRzIGhhdmUgYmVlbiBzZXQgYmFjayB0byBpbnB1dCcsDQogICAgJ3ByZWZlcmVuY2VzX3Vw ZGF0ZWQnICAgID0+ICdQbHVnaW4gcHJlZmVyZW5jZXMgaGF2ZSBiZWVuIHVwZGF0ZWQnLA0K ICAgICdub3RfZm91bmQnICAgICAgICAgICAgICA9PiAnT29vcHMhIDxzdHJvbmc+e2ZpbGV9 PC9zdHJvbmc+IGNhbm5vdCBiZSBmb3VuZCwgY2hlY2sgcGF0aCcsDQogICAgJ25vdF9jYWxs YWJsZScgICAgICAgICAgID0+ICdPb29wcyEgPHN0cm9uZz57ZnVuY3Rpb259KCk8L3N0cm9u Zz4gY2Fubm90IGJlIGNhbGxlZC4gRW5zdXJlIDxzdHJvbmc+e2ZpbGV9PC9zdHJvbmc+IGNh biBiZSBleGVjdXRlZC4nDQogICk7DQoNCiAgJG91dCA9ICggc3Ryc3RyKCRsYW5nWyRnZXRd LCAiT29vcHMhIikgKSA/IC8vIE9vb3BzISB3b3VsZCBhcHBlYXIgMCBpbiB0aGUgc3RyaW5n Li4uDQogICAgICAiPHNwYW4gY2xhc3M9XCJyZWRcIj57JGxhbmdbJGdldF19PC9zcGFuPiIg Og0KICAgICAgJGxhbmdbJGdldF07DQoNCiAgcmV0dXJuIHN0cnRyKCRvdXQsICRhdHRzKTsN Cn0NCg0KDQoNCg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBJIHdvdWxkIGRvIHRoaXMgdGhyb3VnaCBh IGZhY3RvcnkgY2xhc3MsIGJ1dCBzb21lIGZvbGtzIGFyZSBzdGlsbCBydW5uaW5nIFBIUDQu Li4NCmZ1bmN0aW9uIGdsel9jdXN0b21fZmllbGRzX015U1FMKCRkbywgJG5hbWU9JycsICR0 YWJsZT0nJywgJGV4dHJhPScnKSB7DQogIGlmICggIWVtcHR5KCRkbykgKSB7DQogICAgc3dp dGNoICggJGRvICkgew0KICAgICAgY2FzZSAnYWxsJzoNCiAgICAgICAgcmV0dXJuIGdsel9h bGxfY3VzdG9tX3NldHMoKTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICAgIGNhc2UgJ3ZhbHVl cyc6DQogICAgICAgIHJldHVybiBnbHpfdmFsdWVzX2N1c3RvbV9maWVsZCgkbmFtZSwgJGV4 dHJhKTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICAgIGNhc2UgJ2FsbF92YWx1ZXMnIDoNCiAg ICAgICAgcmV0dXJuIGdsel9hbGxfZXhpc3RpbmdfY3VzdG9tX3ZhbHVlcygkbmFtZSwgJGV4 dHJhKTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICAgIGNhc2UgJ2FydGljbGVfY3VzdG9tcyc6 DQogICAgICAgIHJldHVybiBnbHpfYXJ0aWNsZV9jdXN0b21fZmllbGRzKCRuYW1lLCAkZXh0 cmEpOw0KICAgICAgICBicmVhazsNCg0KICAgICAgY2FzZSAnbmV4dF9jdXN0b20nOg0KICAg ICAgICByZXR1cm4gZ2x6X25leHRfZW1wdHlfY3VzdG9tKCk7DQogICAgICAgIGJyZWFrOw0K DQogICAgICBjYXNlICduZXcnOg0KICAgICAgICBnbHpfbmV3X2N1c3RvbV9maWVsZCgkbmFt ZSwgJHRhYmxlLCAkZXh0cmEpOw0KICAgICAgICBnbHpfY3VzdG9tX2ZpZWxkc191cGRhdGVf Y291bnQoKTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICAgIGNhc2UgJ3VwZGF0ZSc6DQogICAg ICAgIHJldHVybiBnbHpfdXBkYXRlX2N1c3RvbV9maWVsZCgkbmFtZSwgJHRhYmxlLCAkZXh0 cmEpOw0KICAgICAgICBicmVhazsNCg0KICAgICAgY2FzZSAncmVzZXQnOg0KICAgICAgICBy ZXR1cm4gZ2x6X3Jlc2V0X2N1c3RvbV9maWVsZCgkbmFtZSwgJHRhYmxlLCAkZXh0cmEpOw0K ICAgICAgICBicmVhazsNCg0KICAgICAgY2FzZSAnZGVsZXRlJzoNCiAgICAgICAgZ2x6X2Rl bGV0ZV9jdXN0b21fZmllbGQoJG5hbWUsICR0YWJsZSk7DQogICAgICAgIGdsel9jdXN0b21f ZmllbGRzX3VwZGF0ZV9jb3VudCgpOw0KICAgICAgICBicmVhazsNCg0KICAgICAgY2FzZSAn Y2hlY2tfbWlncmF0aW9uJzoNCiAgICAgICAgcmV0dXJuIGdsel9jaGVja19taWdyYXRpb24o KTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICAgIGNhc2UgJ21hcmtfbWlncmF0aW9uJzoNCiAg ICAgICAgcmV0dXJuIGdsel9tYXJrX21pZ3JhdGlvbigpOw0KICAgICAgICBicmVhazsNCg0K ICAgICAgY2FzZSAnY3VzdG9tX3NldF9leGlzdHMnOg0KICAgICAgICByZXR1cm4gZ2x6X2No ZWNrX2N1c3RvbV9zZXRfZXhpc3RzKCRuYW1lKTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICAg IGNhc2UgJ3BsdWdpbl9wcmVmZXJlbmNlcyc6DQogICAgICAgIHJldHVybiBnbHpfcGx1Z2lu X3ByZWZlcmVuY2VzKCRuYW1lKTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICAgIGNhc2UgJ3Vw ZGF0ZV9wbHVnaW5fcHJlZmVyZW5jZXMnOg0KICAgICAgICByZXR1cm4gZ2x6X3VwZGF0ZV9w bHVnaW5fcHJlZmVyZW5jZXMoJG5hbWUpOw0KICAgICAgICBicmVhazsNCiAgICB9DQogIH0N CiAgZWxzZQ0KICAgIHRyaWdnZXJfZXJyb3IoZ2x6X2N1c3RvbV9maWVsZHNfZ1R4dCgnbm9f ZG8nKSk7DQp9DQoNCg0KZnVuY3Rpb24gZ2x6X2FsbF9jdXN0b21fc2V0cygpIHsNCiAgJGFs bF9jdXN0b21fc2V0cyA9IGdldFJvd3MoIg0KICAgIFNFTEVDVA0KICAgICAgYG5hbWVgIEFT IGN1c3RvbV9zZXQsDQogICAgICBgdmFsYCBBUyBuYW1lLA0KICAgICAgYHBvc2l0aW9uYCwN CiAgICAgIGBodG1sYCBBUyB0eXBlDQogICAgRlJPTQ0KICAgICAgYCIuUEZYLiJ0eHBfcHJl ZnNgDQogICAgV0hFUkUNCiAgICAgIGBldmVudGA9J2N1c3RvbScNCiAgICBPUkRFUiBCWQ0K ICAgICAgYHBvc2l0aW9uYA0KICAiKTsNCg0KICBmb3JlYWNoICggJGFsbF9jdXN0b21fc2V0 cyBhcyAkY3VzdG9tX3NldCApIHsNCiAgICAkb3V0WyRjdXN0b21fc2V0WydjdXN0b21fc2V0 J11dID0gYXJyYXkoDQogICAgICAnbmFtZScgICAgICA9PiAkY3VzdG9tX3NldFsnbmFtZSdd LA0KICAgICAgJ3Bvc2l0aW9uJyAgPT4gJGN1c3RvbV9zZXRbJ3Bvc2l0aW9uJ10sDQogICAg ICAndHlwZScgICAgICA9PiAkY3VzdG9tX3NldFsndHlwZSddDQogICAgKTsNCiAgfQ0KDQog IHJldHVybiAkb3V0Ow0KfQ0KDQoNCmZ1bmN0aW9uIGdsel92YWx1ZXNfY3VzdG9tX2ZpZWxk KCRuYW1lLCAkZXh0cmEpIHsNCiAgZ2xvYmFsICRwcmVmczsNCg0KICBpZiAoIGlzX2FycmF5 KCRleHRyYSkgKSB7DQogICAgZXh0cmFjdCgkZXh0cmEpOw0KDQogICAgaWYgKCAhZW1wdHko JG5hbWUpICkgew0KICAgICAgc3dpdGNoICggJHByZWZzWyd2YWx1ZXNfb3JkZXJpbmcnXSAp IHsNCiAgICAgICAgY2FzZSAiYXNjZW5kaW5nIjoNCiAgICAgICAgICAkb3JkZXJieSA9ICJ2 YWx1ZSBBU0MiOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICJkZXNjZW5kaW5n IjoNCiAgICAgICAgICAkb3JkZXJieSA9ICJ2YWx1ZSBERVNDIjsNCiAgICAgICAgICBicmVh azsNCiAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAkb3JkZXJieSA9ICJpZCBBU0MiOw0K ICAgICAgfQ0KDQoNCiAgICAgICRhcnJfdmFsdWVzID0gZ2V0VGhpbmdzKCINCiAgICAgICAg U0VMRUNUDQogICAgICAgICAgYHZhbHVlYA0KICAgICAgICBGUk9NDQogICAgICAgICAgYCIu UEZYLiJjdXN0b21fZmllbGRzYA0KICAgICAgICBXSEVSRQ0KICAgICAgICAgIGBuYW1lYCA9 ICd7JG5hbWV9Jw0KICAgICAgICBPUkRFUiBCWQ0KICAgICAgICAgIHskb3JkZXJieX0NCiAg ICAgICIpOw0KDQogICAgICBpZiAoIGNvdW50KCRhcnJfdmFsdWVzKSA+IDAgKSB7DQogICAg ICAgIC8vIGRlY29kZSBhbGwgc3BlY2lhbCBjaGFyYWN0ZXJzIGUuZy4gIiwgJiBldGMuIGFu ZCB1c2UgdGhlbSBmb3Iga2V5cw0KICAgICAgICBmb3JlYWNoICggJGFycl92YWx1ZXMgYXMg JGtleSA9PiAkdmFsdWUgKQ0KICAgICAgICAgICRhcnJfdmFsdWVzX2Zvcm1hdHRlZFtnbHpf cmV0dXJuX2NsZWFuX2RlZmF1bHQoaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpKV0gPSBzdHJp cHNsYXNoZXMoJHZhbHVlKTsNCg0KICAgICAgICAvLyBpZiB0aGlzIGlzIGEgcmFuZ2UsIGZv cm1hdCByYW5nZXMgYWNjb3JkaW5nbHkNCiAgICAgICAgcmV0dXJuIGdsel9mb3JtYXRfcmFu Z2VzKCRhcnJfdmFsdWVzX2Zvcm1hdHRlZCwgJGN1c3RvbV9zZXRfbmFtZSk7DQogICAgICB9 DQogICAgfQ0KICB9DQogIGVsc2UNCiAgICB0cmlnZ2VyX2Vycm9yKGdsel9jdXN0b21fZmll bGRzX2dUeHQoJ25vdF9zcGVjaWZpZWQnLCBhcnJheSgne3doYXR9JyA9PiAiZXh0cmEgYXR0 cmlidXRlcyIpKSk7DQp9DQoNCg0KZnVuY3Rpb24gZ2x6X2FsbF9leGlzdGluZ19jdXN0b21f dmFsdWVzKCRuYW1lLCAkZXh0cmEpIHsNCiAgaWYgKCBpc19hcnJheSgkZXh0cmEpICkgew0K ICAgIGV4dHJhY3QobEF0dHMoYXJyYXkoDQogICAgICAnY3VzdG9tX3NldF9uYW1lJyAgID0+ ICIiLA0KICAgICAgJ3N0YXR1cycgICAgICAgICAgICA9PiA0DQogICAgKSwkZXh0cmEpKTsN Cg0KICAgIC8vIHdlIG1pZ2h0IHdhbnQgdG8gY2hlY2sgdGhlIGN1c3RvbSBmaWVsZCB2YWx1 ZXMgZm9yIGFsbCBhcnRpY2xlcyAtIHRoaW5rIGluaXRpYWwgbWlncmF0aW9uDQogICAgJHN0 YXR1c19jb25kaXRpb24gPSAoJHN0YXR1cyA9PSAwKSA/ICI8PiAnJyIgOiAiPSAnJHN0YXR1 cyciOw0KDQogICAgaWYgKCAhZW1wdHkoJG5hbWUpICkgew0KICAgICAgJGFycl92YWx1ZXMg PSBnZXRUaGluZ3MoIg0KICAgICAgICBTRUxFQ1QgRElTVElOQ1QNCiAgICAgICAgICBgJG5h bWVgDQogICAgICAgIEZST00NCiAgICAgICAgICBgIi5QRlguInRleHRwYXR0ZXJuYA0KICAg ICAgICBXSEVSRQ0KICAgICAgICAgIGBTdGF0dXNgICRzdGF0dXNfY29uZGl0aW9uDQogICAg ICAgIEFORA0KICAgICAgICAgIGAkbmFtZWAgPD4gJycNCiAgICAgICAgT1JERVIgQlkNCiAg ICAgICAgICBgJG5hbWVgDQogICAgICAgICIpOw0KDQogICAgICAvLyB0cmltIGFsbCB2YWx1 ZXMNCiAgICAgIGZvcmVhY2ggKCAkYXJyX3ZhbHVlcyBhcyAka2V5ID0+ICR2YWx1ZSApDQog ICAgICAgICRhcnJfdmFsdWVzWyRrZXldID0gdHJpbSgkdmFsdWUpOw0KDQogICAgICAvLyBE RUJVRw0KICAgICAgLy8gZG1wKCRhcnJfdmFsdWVzKTsNCg0KICAgICAgLy8gcHJlcGFyZSBv dXIgYXJyYXkgZm9yIGNoZWNraW5nLiBXZSBuZWVkIGEgc2luZ2xlIHN0cmluZyB0byBjaGVj ayBmb3IgfCBpbnN0YW5jZXMgLSBzZWVtcyBxdWlja2VzdC4NCiAgICAgICR2YWx1ZXNfY2hl Y2sgPSBqb2luKCc6OicsICRhcnJfdmFsdWVzKTsNCg0KICAgICAgLy8gREVCVUcNCiAgICAg IC8vIGRtcCgkdmFsdWVzX2NoZWNrKTsNCg0KICAgICAgLy8gY2hlY2sgaWYgc29tZSBvZiB0 aGUgdmFsdWVzIGFyZSBtdWx0aXBsZSBvbmVzDQogICAgICBpZiAoIHN0cnN0cigkdmFsdWVz X2NoZWNrLCAnfCcpICkgew0KICAgICAgICAvLyBpbml0aWFsaXplICRvdXQNCiAgICAgICAg JG91dCA9IGFycmF5KCk7DQogICAgICAgIC8vIHB1dCBhbGwgdmFsdWVzIGluIGFuIGFycmF5 DQogICAgICAgIGZvcmVhY2ggKCAkYXJyX3ZhbHVlcyBhcyAkdmFsdWUgKSB7DQogICAgICAg ICAgJGFycl92YWx1ZXMgPSBleHBsb2RlKCd8JywgJHZhbHVlKTsNCiAgICAgICAgICAkb3V0 ID0gYXJyYXlfbWVyZ2UoJG91dCwgJGFycl92YWx1ZXMpOw0KICAgICAgICB9DQogICAgICAg IC8vIGtlZXAgb25seSB0aGUgdW5pcXVlIG9uZXMNCiAgICAgICAgJG91dCA9IGFycmF5X3Vu aXF1ZSgkb3V0KTsNCiAgICAgICAgLy8ga2V5cyBhbmQgdmFsdWVzIG5lZWQgdG8gYmUgdGhl IHNhbWUNCiAgICAgICAgJG91dCA9IHBocDRfYXJyYXlfY29tYmluZSgkb3V0LCAkb3V0KTsN CiAgICAgIH0NCg0KICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHJhbmdlDQogICAgICBl bHNlIGlmICggc3Ryc3RyKCR2YWx1ZXNfY2hlY2ssICctJykgJiYgc3Ryc3RyKCRjdXN0b21f c2V0X25hbWUsICdyYW5nZScpICkNCiAgICAgICAgLy8ga2V5cyB3b24ndCBoYXZlIHRoZSB1 bml0ICgkLCDCoywgbTxzdXA+Mzwvc3VwPiwgZXRjLikgdmFsdWVzIHdpbGwNCiAgICAgICAg JG91dCA9IGdsel9mb3JtYXRfcmFuZ2VzKCRhcnJfdmFsdWVzLCAkY3VzdG9tX3NldF9uYW1l KTsNCiAgICAgIGVsc2UNCiAgICAgICAgLy8ga2V5cyBhbmQgdmFsdWVzIG5lZWQgdG8gYmUg dGhlIHNhbWUNCiAgICAgICAgJG91dCA9IHBocDRfYXJyYXlfY29tYmluZSgkYXJyX3ZhbHVl cywgJGFycl92YWx1ZXMpOw0KDQogICAgICAvLyBjYWxsaW5nIHN0cmlwc2xhc2hlcyBvbiBh bGwgYXJyYXkgdmFsdWVzDQogICAgICBhcnJheV9tYXAoJ2dsel9hcnJheV9zdHJpcHNsYXNo ZXMnLCAkb3V0KTsNCg0KICAgICAgcmV0dXJuICRvdXQ7DQogICAgfQ0KICB9DQogIGVsc2UN CiAgICB0cmlnZ2VyX2Vycm9yKGdsel9jdXN0b21fZmllbGRzX2dUeHQoJ25vdF9zcGVjaWZp ZWQnLCBhcnJheSgne3doYXR9JyA9PiAiZXh0cmEgYXR0cmlidXRlcyIpKSk7DQp9DQoNCg0K ZnVuY3Rpb24gZ2x6X2FydGljbGVfY3VzdG9tX2ZpZWxkcygkbmFtZSwgJGV4dHJhKSB7DQog IGlmICggaXNfYXJyYXkoJGV4dHJhKSApIHsNCiAgICAvLyBzZWUgd2hhdCBjdXN0b20gZmll bGRzIHdlIG5lZWQgdG8gcXVlcnkgZm9yDQogICAgZm9yZWFjaCAoICRleHRyYSBhcyAkY3Vz dG9tID0+ICRjdXN0b21fc2V0ICkNCiAgICAgICRzZWxlY3RbXSA9IGdsel9jdXN0b21fbnVt YmVyKCRjdXN0b20pOw0KDQogICAgLy8gcHJlcGFyZSB0aGUgc2VsZWN0IGVsZW1lbnRzDQog ICAgJHNlbGVjdCA9IGltcGxvZGUoJywnLCAkc2VsZWN0KTsNCg0KICAgICRhcnJfYXJ0aWNs ZV9jdXN0b21zID0gZ2V0Um93KCINCiAgICAgIFNFTEVDVA0KICAgICAgICAkc2VsZWN0DQog ICAgICBGUk9NDQogICAgICAgIGAiLlBGWC4idGV4dHBhdHRlcm5gDQogICAgICBXSEVSRQ0K ICAgICAgICBgSURgPSckbmFtZScNCiAgICAiKTsNCg0KICAgIHJldHVybiAkYXJyX2FydGlj bGVfY3VzdG9tczsNCiAgfQ0KICBlbHNlDQogICAgdHJpZ2dlcl9lcnJvcihnbHpfY3VzdG9t X2ZpZWxkc19nVHh0KCdub3Rfc3BlY2lmaWVkJywgYXJyYXkoJ3t3aGF0fScgPT4gImV4dHJh IGF0dHJpYnV0ZXMiKSkpOw0KfQ0KDQoNCmZ1bmN0aW9uIGdsel9uZXdfY3VzdG9tX2ZpZWxk KCRuYW1lLCAkdGFibGUsICRleHRyYSkgew0KICBpZiAoIGlzX2FycmF5KCRleHRyYSkgKSB7 DQogICAgZXh0cmFjdCgkZXh0cmEpOw0KICAgIC8vIERSWWluZyB1cCwgd2UnbGwgYmUgdXNp bmcgdGhpcyB2YXJpYWJsZSBxdWlldCBvZnRlbg0KICAgICRjdXN0b21fc2V0ID0gKCBpc3Nl dCgkY3VzdG9tX2ZpZWxkX251bWJlcikgKSA/DQogICAgICAiY3VzdG9tX3skY3VzdG9tX2Zp ZWxkX251bWJlcn1fc2V0IiA6DQogICAgICAkY3VzdG9tX3NldDsNCg0KICAgIGlmICggKCR0 YWJsZSA9PSBQRlguInR4cF9wcmVmcyIpICkgew0KICAgICAgLy8gaWYgdGhpcyBpcyBhIG5l dyBmaWVsZCB3aXRob3V0IGEgcG9zaXRpb24sIHVzZSB0aGUgJGN1c3RvbV9maWVsZF9udW1i ZXINCiAgICAgIGlmIChlbXB0eSgkY3VzdG9tX3NldF9wb3NpdGlvbikpICRjdXN0b21fc2V0 X3Bvc2l0aW9uID0gJGN1c3RvbV9maWVsZF9udW1iZXI7DQogICAgICAkcXVlcnkgPSAiDQog ICAgICAgIElOU0VSVCBJTlRPDQogICAgICAgICAgYCIuUEZYLiJ0eHBfcHJlZnNgIChgcHJl ZnNfaWRgLCBgbmFtZWAsIGB2YWxgLCBgdHlwZWAsIGBldmVudGAsIGBodG1sYCwgYHBvc2l0 aW9uYCkNCiAgICAgICAgVkFMVUVTDQogICAgICAgICAgKCcxJywgJ3skY3VzdG9tX3NldH0n LCAneyRuYW1lfScsICcxJywgJ2N1c3RvbScsICd7JGN1c3RvbV9zZXRfdHlwZX0nLCB7JGN1 c3RvbV9zZXRfcG9zaXRpb259KQ0KICAgICAgIjsNCiAgICB9DQogICAgZWxzZSBpZiAoICR0 YWJsZSA9PSBQRlguInR4cF9sYW5nIiApIHsNCiAgICAgICRxdWVyeSA9ICINCiAgICAgICAg SU5TRVJUIElOVE8NCiAgICAgICAgICBgIi5QRlguInR4cF9sYW5nYCAoYGxhbmdgLGBuYW1l YCxgZXZlbnRgLGBkYXRhYCxgbGFzdG1vZGApDQogICAgICAgIFZBTFVFUw0KICAgICAgICAg ICgneyRsYW5nfScsJ3skY3VzdG9tX3NldH0nLCdwcmVmcycsJ3skbmFtZX0nLG5vdygpKQ0K ICAgICAgIjsNCiAgICB9DQogICAgZWxzZSBpZiAoICR0YWJsZSA9PSBQRlguInRleHRwYXR0 ZXJuIiApIHsNCiAgICAgICRjb2x1bW5fdHlwZSA9ICggJGN1c3RvbV9zZXRfdHlwZSA9PSAi dGV4dGFyZWEiICkgPyAiVEVYVCIgOiAiVkFSQ0hBUigyNTUpIjsNCiAgICAgICRkZmx0ID0g KCAkY3VzdG9tX3NldF90eXBlID09ICJ0ZXh0YXJlYSIgKSA/ICcnIDogIkRFRkFVTFQgJyci Ow0KICAgICAgJHF1ZXJ5ID0gIg0KICAgICAgICBBTFRFUiBUQUJMRQ0KICAgICAgICAgIGAi LlBGWC4idGV4dHBhdHRlcm5gDQogICAgICAgIEFERA0KICAgICAgICAgIGBjdXN0b21feyRj dXN0b21fZmllbGRfbnVtYmVyfWAgeyRjb2x1bW5fdHlwZX0gTk9UIE5VTEwgeyRkZmx0fQ0K ICAgICAgIjsNCiAgICB9DQogICAgZWxzZSBpZiAoICR0YWJsZSA9PSBQRlguImN1c3RvbV9m aWVsZHMiICkgew0KICAgICAgJGFycl92YWx1ZXMgPSBhcnJheV91bmlxdWUoYXJyYXlfZmls dGVyKGV4cGxvZGUoIlxyXG4iLCAkdmFsdWUpLCAnZ2x6X2Fycl9lbXB0eV92YWx1ZXMnKSk7 DQoNCiAgICAgIGlmICggaXNfYXJyYXkoJGFycl92YWx1ZXMpICYmICFlbXB0eSgkYXJyX3Zh bHVlcykgKSB7DQogICAgICAgICRzaXplX2Fycl92YWx1ZXMgPSBjb3VudCgkYXJyX3ZhbHVl cyk7DQogICAgICAgICRpbnNlcnQgPSAnJzsNCiAgICAgICAgZm9yZWFjaCAoICRhcnJfdmFs dWVzIGFzICRrZXkgPT4gJHZhbHVlICkgew0KICAgICAgICAgIC8vIGRvbid0IGluc2VydCBl bXB0eSB2YWx1ZXMNCiAgICAgICAgICBpZiAoICFlbXB0eSgkdmFsdWUpICkNCiAgICAgICAg ICAgIC8vIG1ha2Ugc3VyZSBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQgYmVmb3Jl IGluc2VydGluZyB0aGVtIGluIHRoZSBkYXRhYmFzZQ0KICAgICAgICAgICAgJHZhbHVlID0g YWRkc2xhc2hlcyhhZGRzbGFzaGVzKHRyaW0oJHZhbHVlKSkpOw0KICAgICAgICAgICAgLy8g aWYgdGhpcyBpcyB0aGUgbGFzdCB2YWx1ZSwgcXVlcnkgd2lsbCBoYXZlIHRvIGJlIGRpZmZl cmVudA0KICAgICAgICAgICAgJGluc2VydCAuPSAoJGtleSsxICE9ICRzaXplX2Fycl92YWx1 ZXMgKSA/DQogICAgICAgICAgICAgICIoJ3skY3VzdG9tX3NldH0nLCd7JHZhbHVlfScpLCAi IDoNCiAgICAgICAgICAgICAgIigneyRjdXN0b21fc2V0fScsJ3skdmFsdWV9JykiOw0KICAg ICAgICB9DQogICAgICAgICRxdWVyeSA9ICINCiAgICAgICAgICBJTlNFUlQgSU5UTw0KICAg ICAgICAgICAgYCIuUEZYLiJjdXN0b21fZmllbGRzYCAoYG5hbWVgLGB2YWx1ZWApDQogICAg ICAgICAgVkFMVUVTDQogICAgICAgICAgICB7JGluc2VydH0NCiAgICAgICAgIjsNCiAgICAg IH0NCiAgICB9DQogICAgaWYgKCBpc3NldCgkcXVlcnkpICYmICFlbXB0eSgkcXVlcnkpICkN CiAgICAgIHNhZmVfcXVlcnkoJHF1ZXJ5KTsNCiAgfQ0KICBlbHNlDQogICAgdHJpZ2dlcl9l cnJvcihnbHpfY3VzdG9tX2ZpZWxkc19nVHh0KCdub3Rfc3BlY2lmaWVkJywgYXJyYXkoJ3t3 aGF0fScgPT4gImV4dHJhIGF0dHJpYnV0ZXMiKSkpOw0KfQ0KDQoNCmZ1bmN0aW9uIGdsel91 cGRhdGVfY3VzdG9tX2ZpZWxkKCRuYW1lLCAkdGFibGUsICRleHRyYSkgew0KICBpZiAoIGlz X2FycmF5KCRleHRyYSkgKQ0KICAgIGV4dHJhY3QoJGV4dHJhKTsNCg0KICBpZiAoICgkdGFi bGUgPT0gUEZYLiJ0eHBfcHJlZnMiKSApIHsNCiAgICBzYWZlX3F1ZXJ5KCINCiAgICAgIFVQ REFURQ0KICAgICAgICBgIi5QRlguInR4cF9wcmVmc2ANCiAgICAgIFNFVA0KICAgICAgICBg dmFsYCA9ICd7JGN1c3RvbV9zZXRfbmFtZX0nLA0KICAgICAgICBgaHRtbGAgPSAneyRjdXN0 b21fc2V0X3R5cGV9JywNCiAgICAgICAgYHBvc2l0aW9uYCA9ICd7JGN1c3RvbV9zZXRfcG9z aXRpb259Jw0KICAgICAgV0hFUkUNCiAgICAgICAgYG5hbWVgPSd7JG5hbWV9Jw0KICAgICIp Ow0KICB9DQogIGVsc2UgaWYgKCAoJHRhYmxlID09IFBGWC4idGV4dHBhdHRlcm4iKSApIHsN CiAgICAkY29sdW1uX3R5cGUgPSAoICRjdXN0b21fc2V0X3R5cGUgPT0gInRleHRhcmVhIiAp ID8gIlRFWFQiIDogIlZBUkNIQVIoMjU1KSI7DQogICAgJGRmbHQgPSAoICRjdXN0b21fc2V0 X3R5cGUgPT0gInRleHRhcmVhIiApID8gJycgOiAiREVGQVVMVCAnJyI7DQogICAgc2FmZV9x dWVyeSgiDQogICAgICBBTFRFUiBUQUJMRQ0KICAgICAgICBgIi5QRlguInRleHRwYXR0ZXJu YA0KICAgICAgTU9ESUZZDQogICAgICAgIGB7JGN1c3RvbV9maWVsZH1gIHskY29sdW1uX3R5 cGV9IE5PVCBOVUxMIHskZGZsdH0NCiAgICAiKTsNCiAgfQ0KfQ0KDQoNCmZ1bmN0aW9uIGds el9yZXNldF9jdXN0b21fZmllbGQoJG5hbWUsICR0YWJsZSwgJGV4dHJhKSB7DQogIGlmICgg aXNfYXJyYXkoJGV4dHJhKSApDQogICAgZXh0cmFjdCgkZXh0cmEpOw0KDQogIGlmICggJHRh YmxlID09IFBGWC4idHhwX3ByZWZzIiApIHsNCiAgICBzYWZlX3F1ZXJ5KCINCiAgICAgIFVQ REFURQ0KICAgICAgICBgIi5QRlguInR4cF9wcmVmc2ANCiAgICAgIFNFVA0KICAgICAgICBg dmFsYCA9ICcnLA0KICAgICAgICBgaHRtbGAgPSAndGV4dF9pbnB1dCcNCiAgICAgIFdIRVJF DQogICAgICAgIGBuYW1lYD0neyRuYW1lfScNCiAgICAiKTsNCiAgfQ0KICBlbHNlIGlmICgg JHRhYmxlID09IFBGWC4idGV4dHBhdHRlcm4iICkgew0KICAgIHNhZmVfcXVlcnkoIlVQREFU RSBgIi5QRlguInRleHRwYXR0ZXJuYCBTRVQgYHskbmFtZX1gID0gJyciKTsNCiAgICBzYWZl X3F1ZXJ5KCJBTFRFUiBUQUJMRSBgIi5QRlguInRleHRwYXR0ZXJuYCBNT0RJRlkgYHskY3Vz dG9tX2ZpZWxkfWAgVkFSQ0hBUigyNTUpIE5PVCBOVUxMIERFRkFVTFQgJyciKTsNCiAgfQ0K fQ0KDQoNCmZ1bmN0aW9uIGdsel9kZWxldGVfY3VzdG9tX2ZpZWxkKCRuYW1lLCAkdGFibGUp IHsNCiAgLy8gcmVtZW1iZXIsIGN1c3RvbSBmaWVsZHMgdW5kZXIgMTAgTVVTVCBOT1QgYmUg ZGVsZXRlZA0KICBpZiAoIGdsel9jdXN0b21fZGlnaXQoJG5hbWUpID4gMTAgKSB7DQogICAg aWYgKCBpbl9hcnJheSgkdGFibGUsIGFycmF5KFBGWC4idHhwX3ByZWZzIiwgUEZYLiJ0eHBf bGFuZyIsIFBGWC4iY3VzdG9tX2ZpZWxkcyIpKSApIHsNCiAgICAgICRxdWVyeSA9ICINCiAg ICAgICAgREVMRVRFIEZST00NCiAgICAgICAgICBgeyR0YWJsZX1gDQogICAgICAgIFdIRVJF DQogICAgICAgICAgYG5hbWVgPSd7JG5hbWV9Jw0KICAgICAgIjsNCiAgICB9DQogICAgZWxz ZSBpZiAoICR0YWJsZSA9PSBQRlguInRleHRwYXR0ZXJuIiApIHsNCiAgICAgICRxdWVyeSA9 ICINCiAgICAgICAgQUxURVIgVEFCTEUNCiAgICAgICAgICBgIi5QRlguInRleHRwYXR0ZXJu YA0KICAgICAgICBEUk9QDQogICAgICAgICAgYHskbmFtZX1gDQogICAgICAiOw0KICAgIH0N CiAgICBzYWZlX3F1ZXJ5KCRxdWVyeSk7DQogIH0NCiAgZWxzZSB7DQogICAgaWYgKCAkdGFi bGUgPT0gUEZYLiJ0eHBfcHJlZnMiICkNCiAgICAgIGdsel9jdXN0b21fZmllbGRzX015U1FM KCJyZXNldCIsICRuYW1lLCAkdGFibGUpOw0KICAgIGVsc2UgaWYgKCAoJHRhYmxlID09IFBG WC4iY3VzdG9tX2ZpZWxkcyIpICkgew0KICAgICAgc2FmZV9xdWVyeSgiDQogICAgICAgIERF TEVURSBGUk9NDQogICAgICAgICAgYHskdGFibGV9YA0KICAgICAgICBXSEVSRQ0KICAgICAg ICAgIGBuYW1lYD0neyRuYW1lfScNCiAgICAgICIpOw0KICAgIH0NCiAgfQ0KfQ0KDQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIGNoZWNrcyBpZiBjdXN0b21fZmllbGRzIHRhYmxlIGhhcyBhbnkgdmFs dWVzIGluIGl0DQpmdW5jdGlvbiBnbHpfY2hlY2tfbWlncmF0aW9uKCkgew0KICByZXR1cm4g Z2V0VGhpbmcoIg0KICAgIFNFTEVDVA0KICAgICAgQ09VTlQoKikNCiAgICBGUk9NDQogICAg ICBgIi5QRlguImN1c3RvbV9maWVsZHNgDQogICIpOw0KfQ0KDQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8v IG1ha2UgYSBub3RlIG9mIGdsel9jdXN0b21fZmllbGRzIG1pZ3JhdGlvbiBpbiB0eHBfcHJl ZnMNCmZ1bmN0aW9uIGdsel9tYXJrX21pZ3JhdGlvbigpIHsNCiAgc2V0X3ByZWYoIm1pZ3Jh dGVkIiwgIjEiLCAiZ2x6X2N1c3RvbV9mIik7DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gY2hl Y2sgaWYgb25lIG9mIHRoZSBzcGVjaWFsIGN1c3RvbSBmaWVsZHMgZXhpc3RzDQpmdW5jdGlv biBnbHpfY2hlY2tfY3VzdG9tX3NldF9leGlzdHMoJG5hbWUpIHsNCiAgaWYgKCAhZW1wdHko JG5hbWUpICkgew0KICAgIHJldHVybiBnZXRUaGluZygiDQogICAgICBTRUxFQ1QNCiAgICAg ICAgYG5hbWVgLCBgdmFsYA0KICAgICAgRlJPTQ0KICAgICAgICBgIi5QRlguInR4cF9wcmVm c2ANCiAgICAgIFdIRVJFDQogICAgICAgIGBodG1sYCA9ICd7JG5hbWV9Jw0KICAgICAgQU5E DQogICAgICAgIGBuYW1lYCBMSUtFICdjdXN0b21fJScNCiAgICAgIE9SREVSIEJZDQogICAg ICAgIGBuYW1lYA0KICAgICIpOw0KICB9DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gdXBkYXRl cyBtYXhfY3VzdG9tX2ZpZWxkcw0KZnVuY3Rpb24gZ2x6X2N1c3RvbV9maWVsZHNfdXBkYXRl X2NvdW50KCkgew0KICBzZXRfcHJlZignbWF4X2N1c3RvbV9maWVsZHMnLCBzYWZlX2NvdW50 KCJ0eHBfcHJlZnMiLCAiZXZlbnQ9J2N1c3RvbSciKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8v IHJldHVybnMgYWxsIHBsdWdpbiBwcmVmZXJlbmNlcw0KZnVuY3Rpb24gZ2x6X3BsdWdpbl9w cmVmZXJlbmNlcygkYXJyX3ByZWZlcmVuY2VzKSB7DQoJJHIgPSBzYWZlX3Jvd3Nfc3RhcnQo J25hbWUsIHZhbCcsICd0eHBfcHJlZnMnLCAiZXZlbnQgPSAnZ2x6X2N1c3RvbV9mJyIpOw0K CWlmICgkcikgew0KCQl3aGlsZSAoJGEgPSBuZXh0Um93KCRyKSkgew0KCQkJJG91dFskYVsn bmFtZSddXSA9IHN0cmlwc2xhc2hlcygkYVsndmFsJ10pOw0KCQl9DQoJfQ0KICByZXR1cm4g JG91dDsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gdXBkYXRlcyBhbGwgcGx1Z2luIHByZWZlcmVu Y2VzDQpmdW5jdGlvbiBnbHpfdXBkYXRlX3BsdWdpbl9wcmVmZXJlbmNlcygkYXJyX3ByZWZl cmVuY2VzKSB7DQogIC8vIGRpZShkbXAoJGFycl9wcmVmZXJlbmNlcykpOw0KICBmb3JlYWNo ICgkYXJyX3ByZWZlcmVuY2VzIGFzICRwcmVmZXJlbmNlID0+ICR2YWx1ZSkgew0KICAgIHNl dF9wcmVmKCRwcmVmZXJlbmNlLCBhZGRzbGFzaGVzKGFkZHNsYXNoZXModHJpbSgkdmFsdWUp KSksICJnbHpfY3VzdG9tX2YiLCAxMCk7IC8vIDEwIHNvIHRoYXQgaXQgd29uJ3QgYXBwZWFy IHVuZGVyIFRYUCdzIHByZWZzIHRhYg0KICB9DQp9DQoNCg0KDQoNCg0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQovLyBnb2VzIHRocm91Z2ggYWxsIGN1c3RvbSBzZXRzLCByZXR1cm5zIHRoZSBmaXJzdCBv bmUgd2hpY2ggaXMgbm90IGJlaW5nIHVzZWQNCmZ1bmN0aW9uIGdsel9uZXh0X2VtcHR5X2N1 c3RvbSgpIHsNCiAgZ2xvYmFsICRhbGxfY3VzdG9tX3NldHM7DQoNCiAgZm9yZWFjaCAoICRh bGxfY3VzdG9tX3NldHMgYXMgJGN1c3RvbSA9PiAkY3VzdG9tX3NldCApIHsNCiAgICBpZiAo IGVtcHR5KCRjdXN0b21fc2V0WyduYW1lJ10pICkNCiAgICAgIHJldHVybiAkY3VzdG9tOw0K ICB9DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gZWRpdC9kZWxldGUgYnV0dG9ucyBpbiBjdXN0 b21fZmllbGRzIHRhYmxlIHJlcXVpcmUgYSBmb3JtIGVhY2gNCmZ1bmN0aW9uIGdsel9mb3Jt X2J1dHRvbnMoJGFjdGlvbiwgJHZhbHVlLCAkY3VzdG9tX3NldCwgJGN1c3RvbV9zZXRfbmFt ZSwgJGN1c3RvbV9zZXRfdHlwZSwgJGN1c3RvbV9zZXRfcG9zaXRpb24sICRvbnN1Ym1pdD0n Jykgew0KICAkb25zdWJtaXQgPSAoJG9uc3VibWl0KSA/DQogICAgJ29uc3VibWl0PSInLiRv bnN1Ym1pdC4nIicgOg0KICAgICcnOw0KDQogIHJldHVybg0KICAgICc8Zm9ybSBtZXRob2Q9 InBvc3QiIGFjdGlvbj0iaW5kZXgucGhwIiAnLiRvbnN1Ym1pdC4nPg0KICAgICAgPGlucHV0 IG5hbWU9ImN1c3RvbV9zZXQiIHZhbHVlPSInLiRjdXN0b21fc2V0LiciIHR5cGU9ImhpZGRl biIgLz4NCiAgICAgIDxpbnB1dCBuYW1lPSJjdXN0b21fc2V0X25hbWUiIHZhbHVlPSInLiRj dXN0b21fc2V0X25hbWUuJyIgdHlwZT0iaGlkZGVuIiAvPg0KICAgICAgPGlucHV0IG5hbWU9 ImN1c3RvbV9zZXRfdHlwZSIgdmFsdWU9IicuJGN1c3RvbV9zZXRfdHlwZS4nIiB0eXBlPSJo aWRkZW4iIC8+DQogICAgICA8aW5wdXQgbmFtZT0iY3VzdG9tX3NldF9wb3NpdGlvbiIgdmFs dWU9IicuJGN1c3RvbV9zZXRfcG9zaXRpb24uJyIgdHlwZT0iaGlkZGVuIiAvPg0KICAgICAg PGlucHV0IG5hbWU9ImV2ZW50IiB2YWx1ZT0iZ2x6X2N1c3RvbV9maWVsZHMiIHR5cGU9Imhp ZGRlbiIgLz4NCiAgICAgIDxpbnB1dCBuYW1lPSInLiRhY3Rpb24uJyIgdmFsdWU9IicuJHZh bHVlLiciIHR5cGU9InN1Ym1pdCIgLz4NCiAgICA8L2Zvcm0+JzsNCn0NCg0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQovLyB0aGUgdHlwZXMgb3VyIGN1c3RvbSBmaWVsZHMgY2FuIHRha2UNCmZ1bmN0aW9u IGdsel9jdXN0b21fc2V0X3R5cGVzKCkgew0KICByZXR1cm4gYXJyYXkoDQogICAgJ25vcm1h bCcgPT4gYXJyYXkoDQogICAgICAndGV4dF9pbnB1dCcsDQogICAgICAnY2hlY2tib3gnLA0K ICAgICAgJ3JhZGlvJywNCiAgICAgICdzZWxlY3QnLA0KICAgICAgJ211bHRpLXNlbGVjdCcs DQogICAgICAndGV4dGFyZWEnKSwNCiAgICAnc3BlY2lhbCcgPT4gYXJyYXkoDQogICAgICAn ZGF0ZS1waWNrZXInLA0KICAgICAgJ3RpbWUtcGlja2VyJywNCiAgICAgICdjdXN0b20tc2Ny aXB0JykNCiAgKTsNCn0NCg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBvdXRwdXRzIG9ubHkgY3VzdG9t IGZpZWxkcyB0aGF0IGhhdmUgYmVlbiBzZXQsIGkuZS4gaGF2ZSBhIG5hbWUgYXNzaWduZWQg dG8gdGhlbQ0KZnVuY3Rpb24gZ2x6X2NoZWNrX2N1c3RvbV9zZXQoJGFsbF9jdXN0b21fc2V0 cywgJHN0ZXApIHsNCiAgJG91dCA9IGFycmF5KCk7DQoNCiAgZm9yZWFjaCAoJGFsbF9jdXN0 b21fc2V0cyBhcyAka2V5ID0+ICRjdXN0b21fZmllbGQpIHsNCiAgICBpZiAoIWVtcHR5KCRj dXN0b21fZmllbGRbJ25hbWUnXSkpIHsNCiAgICAgIGlmICggKCRzdGVwID09ICJib2R5Iikg JiYgKCRjdXN0b21fZmllbGRbJ3R5cGUnXSA9PSAidGV4dGFyZWEiKSApDQogICAgICAgICRv dXRbJGtleV0gPSAkY3VzdG9tX2ZpZWxkOw0KICAgICAgZWxzZSBpZiAoICgkc3RlcCA9PSAi Y3VzdG9tX2ZpZWxkcyIpICYmICgkY3VzdG9tX2ZpZWxkWyd0eXBlJ10gIT0gInRleHRhcmVh IikgKSB7DQogICAgICAgICRvdXRbJGtleV0gPSAkY3VzdG9tX2ZpZWxkOw0KICAgICAgfQ0K ICAgIH0NCiAgfQ0KDQogIHJldHVybiAkb3V0Ow0KfQ0KDQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIHJl bW92ZXMgeyB9IGZyb20gdmFsdWVzIHdoaWNoIGFyZSBtYXJrZWQgYXMgZGVmYXVsdA0KZnVu Y3Rpb24gZ2x6X3JldHVybl9jbGVhbl9kZWZhdWx0KCR2YWx1ZSkgew0KICAkcGF0dGVybiA9 ICIvXi4qXHsoLiopXH0uKi8iOw0KDQogIHJldHVybiBwcmVnX3JlcGxhY2UoJHBhdHRlcm4s ICIkMSIsICR2YWx1ZSk7DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gcmV0dXJuIG91ciBkZWZh dWx0IHZhbHVlIGZyb20gYWxsIGN1c3RvbV9maWVsZCB2YWx1ZXMNCmZ1bmN0aW9uIGdsel9k ZWZhdWx0X3ZhbHVlKCRhbGxfdmFsdWVzKSB7DQogIGlmICggaXNfYXJyYXkoJGFsbF92YWx1 ZXMpICkgew0KICAgIHByZWdfbWF0Y2goIi8oXHsuKlx9KS8iLCBqb2luKCIgIiwgJGFsbF92 YWx1ZXMpLCAkZGVmYXVsdCk7DQogICAgcmV0dXJuICggKCFlbXB0eSgkZGVmYXVsdCkgJiYg JGRlZmF1bHRbMF0pID8gJGRlZmF1bHRbMF0gOiAnJyk7DQogIH0NCn0NCg0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQovLyBjYWxsaW5nIHRoZSBhYm92ZSBmdW5jdGlvbiBpbiBhbiBhcnJheSBjb250ZXh0 DQpmdW5jdGlvbiBnbHpfY2xlYW5fZGVmYXVsdF9hcnJheV92YWx1ZXMoJiR2YWx1ZSkgew0K ICAkdmFsdWUgPSBnbHpfcmV0dXJuX2NsZWFuX2RlZmF1bHQoJHZhbHVlKTsNCn0NCg0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQovLyBjdXN0b21fc2V0IHdpdGhvdXQgIl9zZXQiIGUuZy4gY3VzdG9tXzFf c2V0ID0+IGN1c3RvbV8xDQovLyBvciBjdXN0b20gc2V0IGZvcm1hdHRlZCBmb3IgSURzIGUu Zy4gY3VzdG9tLTENCmZ1bmN0aW9uIGdsel9jdXN0b21fbnVtYmVyKCRjdXN0b21fc2V0LCAk ZGVsaW1pdGVyPSJfIikgew0KICAkY3VzdG9tX2ZpZWxkID0gc3Vic3RyKCRjdXN0b21fc2V0 LCAwLCAtNCk7DQoNCiAgaWYgKCRkZWxpbWl0ZXIgIT0gIl8iKQ0KICAgICRjdXN0b21fZmll bGQgPSBzdHJfcmVwbGFjZSgiXyIsICRkZWxpbWl0ZXIsICRjdXN0b21fZmllbGQpOw0KDQog IHJldHVybiAkY3VzdG9tX2ZpZWxkOw0KfQ0KDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIGN1c3RvbV9z ZXQgZGlnaXQgZS5nLiBjdXN0b21fMV9zZXQgPT4gMQ0KZnVuY3Rpb24gZ2x6X2N1c3RvbV9k aWdpdCgkY3VzdG9tX3NldCkgew0KICAkb3V0ID0gZXhwbG9kZSgiXyIsICRjdXN0b21fc2V0 KTsNCiAgLy8gJG91dFswXSB3aWxsIGFsd2F5cyBiZSBjdXN0b20NCiAgcmV0dXJuICRvdXRb MV07DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gcmVtb3ZlcyBlbXB0eSB2YWx1ZXMgZnJvbSBh cnJheXMgLSB1c2VkIGZvciBuZXcgY3VzdG9tIGZpZWxkcw0KZnVuY3Rpb24gZ2x6X2Fycl9l bXB0eV92YWx1ZXMoJHZhbHVlKSB7DQogIGlmICggIWVtcHR5KCR2YWx1ZSkgKQ0KICAgIHJl dHVybiAkdmFsdWU7DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gcmV0dXJucyB0aGUgY3VzdG9t IHNldCBmcm9tIGEgY3VzdG9tIHNldCBuYW1lIGUuZy4gIlJhdGluZyIgZ2l2ZXMgdXMgY3Vz dG9tXzFfc2V0DQpmdW5jdGlvbiBnbHpfZ2V0X2N1c3RvbV9zZXQoJHZhbHVlKSB7DQogIGds b2JhbCAkYWxsX2N1c3RvbV9zZXRzOw0KDQogIC8vIGdvIHRocm91Z2ggYWxsIGN1c3RvbSBm aWVsZHMgYW5kIHNlZSBpZiB0aGUgb25lIHdlJ3JlIGxvb2tpbmcgZm9yIGV4aXN0cw0KICBm b3JlYWNoICggJGFsbF9jdXN0b21fc2V0cyBhcyAkY3VzdG9tID0+ICRjdXN0b21fc2V0ICkg ew0KICAgIGlmICggJGN1c3RvbV9zZXRbJ25hbWUnXSA9PSAkdmFsdWUgKQ0KICAgICAgcmV0 dXJuICRjdXN0b207DQogIH0NCiAgLy8gaWYgaXQgZG9lc24ndCwgcmV0dXJuIGVycm9yIG1l c3NhZ2UNCiAgdHJpZ2dlcl9lcnJvcihnbHpfY3VzdG9tX2ZpZWxkc19nVHh0KCdkb2VzbnRf ZXhpc3QnLCBhcnJheSgne2N1c3RvbV9zZXRfbmFtZX0nID0+ICR2YWx1ZSkpKTsNCn0NCg0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQovLyBnZXQgdGhlIGFydGljbGUgSUQsIEVWRU4gSUYgaXQncyBuZXds eSBzYXZlZA0KZnVuY3Rpb24gZ2x6X2dldF9hcnRpY2xlX2lkKCkgew0KICByZXR1cm4gKCAh ZW1wdHkoJEdMT0JBTFNbJ0lEJ10pID8NCiAgICAkR0xPQkFMU1snSUQnXSA6DQogICAgZ3Bz KCdJRCcpICk7DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gaGVscHMgd2l0aCByYW5nZSBmb3Jt YXR0aW5nIC0ganVzdCBEUlkNCmZ1bmN0aW9uIGdsel9mb3JtYXRfcmFuZ2VzKCRhcnJfdmFs dWVzLCAkY3VzdG9tX3NldF9uYW1lKSB7DQogIC8vaW5pdGlhbGl6ZSAkb3V0DQogICRvdXQg PSAnJzsNCiAgZm9yZWFjaCAoICRhcnJfdmFsdWVzIGFzICRrZXkgPT4gJHZhbHVlICkgew0K ICAgICRvdXRbJGtleV0gPSAoIHN0cnN0cigkY3VzdG9tX3NldF9uYW1lLCAncmFuZ2UnKSAp ID8NCiAgICAgIGdsel9jdXN0b21fZmllbGRzX3JhbmdlKCR2YWx1ZSwgJGN1c3RvbV9zZXRf bmFtZSkgOg0KICAgICAgJHZhbHVlOw0KICB9DQogIHJldHVybiAkb3V0Ow0KfQ0KDQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIGFjdHMgYXMgYSBjYWxsYmFjayBmb3IgdGhlIGFib3ZlIGZ1bmN0aW9u DQpmdW5jdGlvbiBnbHpfY3VzdG9tX2ZpZWxkc19yYW5nZSgkY3VzdG9tX3ZhbHVlLCAkY3Vz dG9tX3NldF9uYW1lKSB7DQogIC8vIGxhc3QgcGFydCBvZiB0aGUgc3RyaW5nIHdpbGwgYmUg dGhlIHJhbmdlIHVuaXQgKGUuZy4gJCwgJnBvdW5kOywgbTxzdXA+Mzwvc3VwPiBldGMuKQ0K ICAkbm9tZW5jbGF0dXJlID0gYXJyYXlfcG9wKGV4cGxvZGUoJyAnLCAkY3VzdG9tX3NldF9u YW1lKSk7DQoNCiAgLy8gc2VlIHdoZXRoZXIgcmFuZ2UgdW5pdCBzaG91bGQgZ28gYWZ0ZXIN CiAgaWYgKCBzdHJzdHIoJG5vbWVuY2xhdHVyZSwgJyhhZnRlciknKSApIHsNCiAgICAvLyB0 cmltICcoYWZ0ZXIpJyBmcm9tIHRoZSBtZWFzdXJpbmcgdW5pdA0KICAgICRub21lbmNsYXR1 cmUgPSBzdWJzdHIoJG5vbWVuY2xhdHVyZSwgMCwgLTcpOw0KICAgICRhZnRlciA9IDE7DQog IH0NCg0KICAvLyBjaGVjayB3aGV0aGVyIGl0J3MgYSByYW5nZSBvciBzaW5nbGUgdmFsdWUN CiAgJGFycl92YWx1ZSA9IGV4cGxvZGUoJy0nLCAkY3VzdG9tX3ZhbHVlKTsNCiAgaWYgKCBp c19hcnJheSgkYXJyX3ZhbHVlKSApIHsNCiAgICAvLyBpbml0aWFsaXplICRvdXQNCiAgICAk b3V0ID0gJyc7DQogICAgZm9yZWFjaCAoICRhcnJfdmFsdWUgYXMgJHZhbHVlICkgew0KICAg ICAgLy8gY2hlY2sgd2hldGhlciBub21lbmNsYXR1cmUgZ29lcyBiZWZvcmUgb3IgYWZ0ZXIN CiAgICAgICRvdXRbXSA9ICggIWlzc2V0KCRhZnRlcikgKSA/DQogICAgICAgICRub21lbmNs YXR1cmUubnVtYmVyX2Zvcm1hdCgkdmFsdWUpIDoNCiAgICAgICAgbnVtYmVyX2Zvcm1hdCgk dmFsdWUpLiRub21lbmNsYXR1cmU7DQogICAgfQ0KICAgIHJldHVybiBpbXBsb2RlKCctJywg JG91dCk7DQogIH0NCiAgLy8gb3VyIHJhbmdlIGlzIGEgc2luZ2xlIHZhbHVlDQogIGVsc2Ug ew0KICAgIC8vIGNoZWNrIHdoZXRoZXIgbm9tZW5jbGF0dXJlIGdvZXMgYmVmb3JlIG9yIGFm dGVyDQogICAgcmV0dXJuICggIWlzc2V0KCRhZnRlcikgKSA/DQogICAgICAkbm9tZW5jbGF0 dXJlLm51bWJlcl9mb3JtYXQoJHZhbHVlKSA6DQogICAgICBudW1iZXJfZm9ybWF0KCR2YWx1 ZSkuJG5vbWVuY2xhdHVyZTsNCiAgfQ0KfQ0KDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIHJldHVybnMg dGhlIG5leHQgYXZhaWxhYmxlIG51bWJlciBmb3IgY3VzdG9tIHNldA0KZnVuY3Rpb24gZ2x6 X2N1c3RvbV9uZXh0KCRhcnJfY3VzdG9tX3NldHMpIHsNCiAgJGFycl9leHRyYV9jdXN0b21f c2V0cyA9IGFycmF5KCk7DQogIGZvcmVhY2ggKCBhcnJheV9rZXlzKCRhcnJfY3VzdG9tX3Nl dHMpIGFzICRleHRyYV9jdXN0b21fc2V0KSB7DQogICAgJGFycl9leHRyYV9jdXN0b21fc2V0 c1tdID0gZ2x6X2N1c3RvbV9kaWdpdCgkZXh0cmFfY3VzdG9tX3NldCk7DQogIH0NCiAgLy8g b3JkZXIgdGhlIGFycmF5DQogIHNvcnQoJGFycl9leHRyYV9jdXN0b21fc2V0cyk7DQoNCiAg Zm9yICggJGk9MDsgJGkgPCBjb3VudCgkYXJyX2V4dHJhX2N1c3RvbV9zZXRzKTsgJGkrKyAp IHsNCiAgICBpZiAoJGFycl9leHRyYV9jdXN0b21fc2V0c1skaV0gPiAkaSsxKQ0KICAgICAg cmV0dXJuICRpKzE7DQogIH0NCg0KICByZXR1cm4gY291bnQoJGFycl9leHRyYV9jdXN0b21f c2V0cykrMTsNCn0NCg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBjaGVja3MgaWYgdGhlIGN1c3RvbSBm aWVsZCBuYW1lIGlzbid0IGFscmVhZHkgdGFrZW4NCmZ1bmN0aW9uIGdsel9jaGVja19jdXN0 b21fc2V0X25hbWUoJGFycl9jdXN0b21fZmllbGRzLCAkY3VzdG9tX3NldF9uYW1lLCAkY3Vz dG9tX3NldD0nJykgew0KICBmb3JlYWNoICggJGFycl9jdXN0b21fZmllbGRzIGFzICRjdXN0 b20gPT4gJGFycl9jdXN0b21fc2V0ICkgew0KICAgIGlmICggKCRjdXN0b21fc2V0X25hbWUg PT0gJGFycl9jdXN0b21fc2V0WyduYW1lJ10pICYmICghZW1wdHkoJGN1c3RvbV9zZXQpICYm ICRjdXN0b21fc2V0ICE9ICRjdXN0b20pICkNCiAgICAgIHJldHVybiBUUlVFOw0KICB9DQoN CiAgcmV0dXJuIEZBTFNFOw0KfQ0KDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIGZvcm1hdHMgdGhlIGN1 c3RvbSBzZXQgb3V0cHV0IGJhc2VkIG9uIGl0cyB0eXBlDQpmdW5jdGlvbiBnbHpfZm9ybWF0 X2N1c3RvbV9zZXRfYnlfdHlwZSgkY3VzdG9tLCAkY3VzdG9tX2lkLCAkY3VzdG9tX3NldF90 eXBlLCAkYXJyX2N1c3RvbV9maWVsZF92YWx1ZXMsICRjdXN0b21fdmFsdWUgPSAiIiwgJGRl ZmF1bHRfdmFsdWUgPSAiIikgew0KICBpZiAoIGlzX2FycmF5KCRhcnJfY3VzdG9tX2ZpZWxk X3ZhbHVlcykgKQ0KICAgICRhcnJfY3VzdG9tX2ZpZWxkX3ZhbHVlcyA9IGFycmF5X21hcCgn Z2x6X2FycmF5X3N0cmlwc2xhc2hlcycsICRhcnJfY3VzdG9tX2ZpZWxkX3ZhbHVlcyk7DQoN CiAgc3dpdGNoICggJGN1c3RvbV9zZXRfdHlwZSApIHsNCiAgICAvLyB0aGVzZSBhcmUgdGhl IG5vcm1hbCBjdXN0b20gZmllbGRzDQogICAgY2FzZSAidGV4dF9pbnB1dCI6DQogICAgICBy ZXR1cm4gYXJyYXkoDQogICAgICAgIGZJbnB1dCgidGV4dCIsICRjdXN0b20sICRjdXN0b21f dmFsdWUsICJlZGl0IiwgIiIsICIiLCAiMjIiLCAiIiwgJGN1c3RvbV9pZCksDQogICAgICAg ICdnbHpfY3VzdG9tX2ZpZWxkJw0KICAgICAgKTsNCg0KICAgIGNhc2UgInNlbGVjdCI6DQog ICAgICByZXR1cm4gYXJyYXkoDQogICAgICAgIGdsel9zZWxlY3RJbnB1dCgkY3VzdG9tLCAk Y3VzdG9tX2lkLCAkYXJyX2N1c3RvbV9maWVsZF92YWx1ZXMsICRjdXN0b21fdmFsdWUsICRk ZWZhdWx0X3ZhbHVlKSwNCiAgICAgICAgJ2dsel9jdXN0b21fc2VsZWN0X2ZpZWxkJw0KICAg ICAgKTsNCg0KICAgIGNhc2UgIm11bHRpLXNlbGVjdCI6DQogICAgICByZXR1cm4gYXJyYXko DQogICAgICAgIGdsel9zZWxlY3RJbnB1dCgkY3VzdG9tLCAkY3VzdG9tX2lkLCAkYXJyX2N1 c3RvbV9maWVsZF92YWx1ZXMsICRjdXN0b21fdmFsdWUsICRkZWZhdWx0X3ZhbHVlLCAxKSwN CiAgICAgICAgJ2dsel9jdXN0b21fbXVsdGktc2VsZWN0X2ZpZWxkJw0KICAgICAgKTsNCg0K ICAgIGNhc2UgImNoZWNrYm94IjoNCiAgICAgIHJldHVybiBhcnJheSgNCiAgICAgICAgZ2x6 X2NoZWNrYm94KCRjdXN0b20sICRhcnJfY3VzdG9tX2ZpZWxkX3ZhbHVlcywgJGN1c3RvbV92 YWx1ZSwgJGRlZmF1bHRfdmFsdWUpLA0KICAgICAgICAnZ2x6X2N1c3RvbV9jaGVja2JveF9m aWVsZCcNCiAgICAgICk7DQoNCiAgICBjYXNlICJyYWRpbyI6DQogICAgICByZXR1cm4gYXJy YXkoDQogICAgICAgIGdsel9yYWRpbygkY3VzdG9tLCAkY3VzdG9tX2lkLCAkYXJyX2N1c3Rv bV9maWVsZF92YWx1ZXMsICRjdXN0b21fdmFsdWUsICRkZWZhdWx0X3ZhbHVlKSwNCiAgICAg ICAgJ2dsel9jdXN0b21fcmFkaW9fZmllbGQnDQogICAgICApOw0KDQogICAgY2FzZSAidGV4 dGFyZWEiOg0KICAgICAgcmV0dXJuIGFycmF5KA0KICAgICAgICB0ZXh0X2FyZWEoJGN1c3Rv bSwgMTAwLCA1MDAsICRjdXN0b21fdmFsdWUsICRjdXN0b21faWQpLA0KICAgICAgICAnZ2x6 X3RleHRfYXJlYV9maWVsZCcNCiAgICAgICk7DQoNCiAgICAvLyBoZXJlIHN0YXJ0IHRoZSBz cGVjaWFsIGN1c3RvbSBmaWVsZHMsIG1pZ2h0IG5lZWQgdG8gcmVmYWN0b3IgdGhlIHJldHVy biwgc3RhcnRpbmcgdG8gcmVwZWF0IGl0c2VsZg0KICAgIGNhc2UgImRhdGUtcGlja2VyIjoN CiAgICAgIHJldHVybiBhcnJheSgNCiAgICAgICAgZklucHV0KCJ0ZXh0IiwgJGN1c3RvbSwg JGN1c3RvbV92YWx1ZSwgImVkaXQgZGF0ZS1waWNrZXIiLCAiIiwgIiIsICIyMiIsICIiLCAk Y3VzdG9tX2lkKSwNCiAgICAgICAgJ2dsel9jdXN0b21fZGF0ZS1waWNrZXJfZmllbGQgY2xl YXJmaXgnDQogICAgICApOw0KDQogICAgY2FzZSAidGltZS1waWNrZXIiOg0KICAgICAgcmV0 dXJuIGFycmF5KA0KICAgICAgICBmSW5wdXQoInRleHQiLCAkY3VzdG9tLCAkY3VzdG9tX3Zh bHVlLCAiZWRpdCB0aW1lLXBpY2tlciIsICIiLCAiIiwgIjIyIiwgIiIsICRjdXN0b21faWQp LA0KICAgICAgICAnZ2x6X2N1c3RvbV90aW1lLXBpY2tlcl9maWVsZCcNCiAgICAgICk7DQoN CiAgICBjYXNlICJjdXN0b20tc2NyaXB0IjoNCiAgICAgIGdsb2JhbCAkY3VzdG9tX3Njcmlw dHNfcGF0aDsNCiAgICAgIHJldHVybiBhcnJheSgNCiAgICAgICAgZ2x6X2N1c3RvbV9zY3Jp cHQoJGN1c3RvbV9zY3JpcHRzX3BhdGguIi8iLnJlc2V0KCRhcnJfY3VzdG9tX2ZpZWxkX3Zh bHVlcyksICRjdXN0b20sICRjdXN0b21faWQsICRjdXN0b21fdmFsdWUpLA0KICAgICAgICAn Z2x6X2N1c3RvbV9maWVsZF9zY3JpcHQnDQogICAgICApOw0KDQogICAgLy8gYSB0eXBlIGhh cyBiZWVuIHBhc3NlZCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgeWV0DQogICAgZGVmYXVsdDoN CiAgICAgIHJldHVybiBhcnJheSgNCiAgICAgICAgZ2x6X2N1c3RvbV9maWVsZHNfZ1R4dCgn dHlwZV9ub3Rfc3VwcG9ydGVkJyksDQogICAgICAgICdnbHpfY3VzdG9tX2ZpZWxkJw0KICAg ICAgKTsNCiAgfQ0KfQ0KDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIGhhZCB0byBkdXBsaWNhdGUgdGhl IGRlZmF1bHQgc2VsZWN0SW5wdXQoKSBiZWNhdXNlIHRyaW1taW5nIFx0IGFuZCBcbiBkaWRu J3Qgd29yayArIHNvbWUgb3RoZXIgbW9kcyAmIG11bHRpLXNlbGVjdA0KZnVuY3Rpb24gZ2x6 X3NlbGVjdElucHV0KCRuYW1lID0gJycsICRpZCA9ICcnLCAkYXJyX3ZhbHVlcyA9ICcnLCAk Y3VzdG9tX3ZhbHVlID0gJycsICRkZWZhdWx0X3ZhbHVlID0gJycsICRtdWx0aSA9ICcnKSB7 DQogIGlmICggaXNfYXJyYXkoJGFycl92YWx1ZXMpICkgew0KICAgIGdsb2JhbCAkcHJlZnM7 DQogICAgJG91dCA9IGFycmF5KCk7DQoNCiAgICAvLyBpZiB0aGVyZSBpcyBubyBjdXN0b21f dmFsdWUgY29taW5nIGZyb20gdGhlIGFydGljbGUsIGxldCdzIHVzZSBvdXIgZGVmYXVsdCBv bmUNCiAgICBpZiAoIGVtcHR5KCRjdXN0b21fdmFsdWUpICkNCiAgICAgICRjdXN0b21fdmFs dWUgPSAkZGVmYXVsdF92YWx1ZTsNCg0KICAgIGZvcmVhY2ggKCRhcnJfdmFsdWVzIGFzICRr ZXkgPT4gJHZhbHVlKSB7DQogICAgICAkc2VsZWN0ZWQgPSBnbHpfc2VsZWN0ZWRfY2hlY2tl ZCgnc2VsZWN0ZWQnLCAka2V5LCAkY3VzdG9tX3ZhbHVlLCAkZGVmYXVsdF92YWx1ZSk7DQog ICAgICAkb3V0W10gPSAiPG9wdGlvbiB2YWx1ZT1cIiRrZXlcInskc2VsZWN0ZWR9PiR2YWx1 ZTwvb3B0aW9uPiI7DQogICAgfQ0KDQogICAgLy8gd2UnbGwgbmVlZCB0aGUgZXh0cmEgYXR0 cmlidXRlcyBhcyB3ZWxsIGFzIGEgbmFtZSB0aGF0IHdpbGwgcHJvZHVjZSBhbiBhcnJheQ0K ICAgIGlmICgkbXVsdGkpIHsNCiAgICAgICRtdWx0aSA9ICcgbXVsdGlwbGU9Im11bHRpcGxl IiBzaXplPSInLiRwcmVmc1snbXVsdGlzZWxlY3Rfc2l6ZSddLiciJzsNCiAgICAgICRuYW1l IC49ICJbXSI7DQogICAgfQ0KDQogICAgcmV0dXJuICI8c2VsZWN0IGlkPVwiIi5nbHpfaWRp ZnkoJGlkKS4iXCIgbmFtZT1cIiRuYW1lXCIgY2xhc3M9XCJsaXN0XCIkbXVsdGk+Ii4NCiAg ICAgICgkZGVmYXVsdF92YWx1ZSA/ICcnIDogIjxvcHRpb24gdmFsdWU9XCJcIiRzZWxlY3Rl ZD4mbmJzcDs8L29wdGlvbj4iKS4NCiAgICAgICggJG91dCA/IGpvaW4oJycsICRvdXQpIDog JycpLg0KICAgICAgIjwvc2VsZWN0PiI7DQogIH0NCiAgZWxzZQ0KICAgIHJldHVybiBnbHpf Y3VzdG9tX2ZpZWxkc19nVHh0KCdmaWVsZF9wcm9ibGVtcycsIGFycmF5KCd7Y3VzdG9tX3Nl dF9uYW1lfScgPT4gJG5hbWUpKTsNCn0NCg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBoYWQgdG8gZHVw bGljYXRlIHRoZSBkZWZhdWx0IGNoZWNrYm94KCkgdG8ga2VlcCB0aGUgbG9vcGluZyBpbiBo ZXJlIGFuZCBjaGVjayBhZ2FpbnN0IGV4aXN0aW5nIHZhbHVlL3MNCmZ1bmN0aW9uIGdsel9j aGVja2JveCgkbmFtZSA9ICcnLCAkYXJyX3ZhbHVlcyA9ICcnLCAkY3VzdG9tX3ZhbHVlID0g JycsICRkZWZhdWx0X3ZhbHVlID0gJycpIHsNCiAgaWYgKCBpc19hcnJheSgkYXJyX3ZhbHVl cykgKSB7DQogICAgJG91dCA9IGFycmF5KCk7DQoNCiAgICAvLyBpZiB0aGVyZSBpcyBubyBj dXN0b21fdmFsdWUgY29taW5nIGZyb20gdGhlIGFydGljbGUsIGxldCdzIHVzZSBvdXIgZGVm YXVsdCBvbmUNCiAgICBpZiAoIGVtcHR5KCRjdXN0b21fdmFsdWUpICkNCiAgICAgICRjdXN0 b21fdmFsdWUgPSAkZGVmYXVsdF92YWx1ZTsNCg0KICAgIGZvcmVhY2ggKCAkYXJyX3ZhbHVl cyBhcyAka2V5ID0+ICR2YWx1ZSApIHsNCiAgICAgICRjaGVja2VkID0gZ2x6X3NlbGVjdGVk X2NoZWNrZWQoJ2NoZWNrZWQnLCAka2V5LCAkY3VzdG9tX3ZhbHVlKTsNCg0KICAgICAgLy8g UHV0dGluZyBhbiBhZGRpdGlvbmFsIHNwYW4gYXJvdW5kIHRoZSBpbnB1dCBhbmQgbGFiZWwg Y29tYmluYXRpb24gc28gdGhlIHR3byBjYW4gYmUgZmxvYXRlZCB0b2dldGhlciBhcyBhIHBh aXIgZm9yIGxlZnQtcmlnaHQsIGxlZnQtcmlnaHQsLi4uIGFycmFuZ2VtZW50IG9mIGNoZWNr Ym94ZXMgYW5kIHJhZGlvIGJ1dHRvbnMuIFRoYW5rcyBKdWxpYW4hDQogICAgICAkb3V0W10g PSAiPHNwYW4+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ7JG5hbWV9W11cIiB2 YWx1ZT1cIiRrZXlcIiBjbGFzcz1cImNoZWNrYm94XCIgaWQ9XCIiLmdsel9pZGlmeSgka2V5 KS4iXCJ7JGNoZWNrZWR9IC8+PGxhYmVsIGZvcj1cIiIuZ2x6X2lkaWZ5KCRrZXkpLiJcIj4k dmFsdWU8L2xhYmVsPjwvc3Bhbj48YnIgLz4iOw0KICAgIH0NCg0KICAgIHJldHVybiBqb2lu KCcnLCAkb3V0KTsNCiAgfQ0KICBlbHNlDQogICAgcmV0dXJuIGdsel9jdXN0b21fZmllbGRz X2dUeHQoJ2ZpZWxkX3Byb2JsZW1zJywgYXJyYXkoJ3tjdXN0b21fc2V0X25hbWV9JyA9PiAk bmFtZSkpOw0KfQ0KDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIGhhZCB0byBkdXBsaWNhdGUgdGhlIGRl ZmF1bHQgcmFkaW8oKSB0byBrZWVwIHRoZSBsb29waW5nIGluIGhlcmUgYW5kIGNoZWNrIGFn YWluc3QgZXhpc3RpbmcgdmFsdWUvcw0KZnVuY3Rpb24gZ2x6X3JhZGlvKCRuYW1lID0gJycs ICRpZCA9ICcnLCAkYXJyX3ZhbHVlcyA9ICcnLCAkY3VzdG9tX3ZhbHVlID0gJycsICRkZWZh dWx0X3ZhbHVlID0gJycpIHsNCiAgaWYgKCBpc19hcnJheSgkYXJyX3ZhbHVlcykgKSB7DQog ICAgJG91dCA9IGFycmF5KCk7DQoNCiAgICAvLyBpZiB0aGVyZSBpcyBubyBjdXN0b21fdmFs dWUgY29taW5nIGZyb20gdGhlIGFydGljbGUsIGxldCdzIHVzZSBvdXIgZGVmYXVsdCBvbmUN CiAgICBpZiAoIGVtcHR5KCRjdXN0b21fdmFsdWUpICkNCiAgICAgICRjdXN0b21fdmFsdWUg PSAkZGVmYXVsdF92YWx1ZTsNCg0KICAgIGZvcmVhY2ggKCAkYXJyX3ZhbHVlcyBhcyAka2V5 ID0+ICR2YWx1ZSApIHsNCiAgICAgICRjaGVja2VkID0gZ2x6X3NlbGVjdGVkX2NoZWNrZWQo J2NoZWNrZWQnLCAka2V5LCAkY3VzdG9tX3ZhbHVlKTsNCg0KICAgICAgLy8gUHV0dGluZyBh biBhZGRpdGlvbmFsIHNwYW4gYXJvdW5kIHRoZSBpbnB1dCBhbmQgbGFiZWwgY29tYmluYXRp b24gc28gdGhlIHR3byBjYW4gYmUgZmxvYXRlZCB0b2dldGhlciBhcyBhIHBhaXIgZm9yIGxl ZnQtcmlnaHQsIGxlZnQtcmlnaHQsLi4uIGFycmFuZ2VtZW50IG9mIGNoZWNrYm94ZXMgYW5k IHJhZGlvIGJ1dHRvbnMuIFRoYW5rcyBKdWxpYW4hDQogICAgICAkb3V0W10gPSAiPHNwYW4+ PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCIkbmFtZVwiIHZhbHVlPVwiJGtleVwiIGNs YXNzPVwicmFkaW9cIiBpZD1cInskaWR9XyIuZ2x6X2lkaWZ5KCRrZXkpLiJcInskY2hlY2tl ZH0gLz48bGFiZWwgZm9yPVwieyRpZH1fIi5nbHpfaWRpZnkoJGtleSkuIlwiPiR2YWx1ZTwv bGFiZWw+PC9zcGFuPjxiciAvPiI7DQogICAgfQ0KDQogICAgcmV0dXJuIGpvaW4oJycsICRv dXQpOw0KICB9DQogIGVsc2UNCiAgICByZXR1cm4gZ2x6X2N1c3RvbV9maWVsZHNfZ1R4dCgn ZmllbGRfcHJvYmxlbXMnLCBhcnJheSgne2N1c3RvbV9zZXRfbmFtZX0nID0+ICRuYW1lKSk7 DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gY2hlY2tpbmcgaWYgdGhpcyBjdXN0b20gZmllbGQg aGFzIHNlbGVjdGVkIG9yIGNoZWNrZWQgdmFsdWVzDQpmdW5jdGlvbiBnbHpfc2VsZWN0ZWRf Y2hlY2tlZCgkbm9tZW5jbGF0dXJlLCAkdmFsdWUsICRjdXN0b21fdmFsdWUgPSAnJykgew0K ICAvLyB3ZSdyZSBjb21wYXJpbmcgYWdhaW5zdCBhIGtleSB3aGljaCBpcyBhICJjbGVhbiIg dmFsdWUNCiAgJGN1c3RvbV92YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJGN1c3RvbV92YWx1 ZSk7DQoNCiAgLy8gbWFrZSBhbiBhcnJheSBpZiAkY3VzdG9tX3ZhbHVlIGNvbnRhaW5zIG11 bHRpcGxlIHZhbHVlcw0KICBpZiAoIHN0cnBvcygkY3VzdG9tX3ZhbHVlLCAnfCcpICkNCiAg ICAkYXJyX2N1c3RvbV92YWx1ZSA9IGV4cGxvZGUoJ3wnLCAkY3VzdG9tX3ZhbHVlKTsNCg0K ICBpZiAoIGlzc2V0KCRhcnJfY3VzdG9tX3ZhbHVlKSApDQogICAgJG91dCA9ICggaW5fYXJy YXkoJHZhbHVlLCAkYXJyX2N1c3RvbV92YWx1ZSkgKSA/ICIgJG5vbWVuY2xhdHVyZT1cIiRu b21lbmNsYXR1cmVcIiIgOiAiIjsNCiAgZWxzZQ0KICAgICRvdXQgPSAoJHZhbHVlID09ICRj dXN0b21fdmFsdWUpID8gIiAkbm9tZW5jbGF0dXJlPVwiJG5vbWVuY2xhdHVyZVwiIiA6ICIi Ow0KDQogIHJldHVybiAkb3V0Ow0KfQ0KDQoNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gYnV0dG9uIGdldHMg bW9yZSBjb25zaXN0ZW50IHN0eWxpbmcgYWNyb3NzIGJyb3dzZXJzIHJhdGhlciB0aGFuIGlu cHV0IHR5cGU9InN1Ym1pdCINCi8vIGluY2x1ZGVkIGluIHRoaXMgcGx1Z2luIHVudGlsIGlu IG1ha2VzIGl0IGludG8gVFhQIC0gaWYgdGhhdCBldmVyIGhhcHBlbnMuLi4NCmZ1bmN0aW9u IGdsel9mQnV0dG9uKCR0eXBlLCAkbmFtZSwgJGNvbnRlbnRzPSdTdWJtaXQnLCAkdmFsdWUs ICRjbGFzcz0nJywgJGlkPScnLCAkdGl0bGU9JycsICRvbkNsaWNrPScnLCAkZGlzYWJsZWQg PSBmYWxzZSkgew0KICAkbyAgPSAnPGJ1dHRvbiB0eXBlPSInLiR0eXBlLiciIG5hbWU9Iicu JG5hbWUuJyInOw0KICAkbyAuPSAnIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHZhbHVl KS4nIic7DQogICRvIC49ICgkY2xhc3MpICAgID8gJyBjbGFzcz0iJy4kY2xhc3MuJyInIDog Jyc7DQogICRvIC49ICgkaWQpICAgICAgID8gJyBpZD0iJy4kaWQuJyInIDogJyc7DQogICRv IC49ICgkdGl0bGUpICAgID8gJyB0aXRsZT0iJy4kdGl0bGUuJyInIDogJyc7DQogICRvIC49 ICgkb25DbGljaykgID8gJyBvbmNsaWNrPSInLiRvbkNsaWNrLiciJyA6ICcnOw0KICAkbyAu PSAoJGRpc2FibGVkKSA/ICcgZGlzYWJsZWQ9ImRpc2FibGVkIicgOiAnJzsNCiAgJG8gLj0g Jz4nOw0KICAkbyAuPSAkY29udGVudHM7DQogICRvIC49ICc8L2J1dHRvbj4nOw0KICByZXR1 cm4gJG87DQp9DQoNCg0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBldmFscyBhIFBIUCBzY3JpcHQgYW5kIGRp c3BsYXlzIG91dHB1dCByaWdodCB1bmRlciB0aGUgY3VzdG9tIGZpZWxkIGxhYmVsDQpmdW5j dGlvbiBnbHpfY3VzdG9tX3NjcmlwdCgkc2NyaXB0LCAkY3VzdG9tLCAkY3VzdG9tX2lkLCAk Y3VzdG9tX3ZhbHVlKSB7DQogIGlmICggaXNfZmlsZSgkc2NyaXB0KSApIHsNCiAgICBpbmNs dWRlX29uY2UoJHNjcmlwdCk7DQogICAgJGN1c3RvbV9mdW5jdGlvbiA9IGJhc2VuYW1lKCRz Y3JpcHQsICIucGhwIik7DQogICAgaWYgKCBpc19jYWxsYWJsZSgkY3VzdG9tX2Z1bmN0aW9u KSApIHsNCiAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheSgkY3VzdG9tX2Z1bmN0 aW9uLCBhcnJheSgkY3VzdG9tLCAkY3VzdG9tX2lkLCAkY3VzdG9tX3ZhbHVlKSk7DQogICAg fQ0KICAgIGVsc2UNCiAgICAgIHJldHVybiBnbHpfY3VzdG9tX2ZpZWxkc19nVHh0KCdub3Rf Y2FsbGFibGUnLCBhcnJheSgne2Z1bmN0aW9ufScgPT4gJGN1c3RvbV9mdW5jdGlvbiwgJ3tm aWxlfScgPT4gJHNjcmlwdCkpOw0KICB9DQogIGVsc2UNCiAgICByZXR1cm4gZ2x6X2N1c3Rv bV9maWVsZHNfZ1R4dCgnbm90X2ZvdW5kJywgYXJyYXkoJ3tmaWxlfScgPT4gJHNjcmlwdCkp Ow0KDQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUEhQNCBkb2Vzbid0IGNvbWUgd2l0aCBhcnJh eV9jb21iaW5lLi4uIFRoYW5rIHlvdSByZWRib3QhDQpmdW5jdGlvbiBwaHA0X2FycmF5X2Nv bWJpbmUoJGtleXMsICR2YWx1ZXMpIHsNCiAgJHJlc3VsdCA9IGFycmF5KCk7IC8vIGluaXRp YWxpemluZyB0aGUgYXJyYXkNCg0KICBmb3JlYWNoICggYXJyYXlfbWFwKG51bGwsICRrZXlz LCAkdmFsdWVzKSBhcyAkcGFpciApIHsNCiAgICAkcmVzdWx0WyRwYWlyWzBdXSA9ICRwYWly WzFdOw0KICB9DQoNCiAgcmV0dXJuICRyZXN1bHQ7DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8g Y29udmVydHMgYWxsIHZhbHVlcyBpbnRvIGlkIHNhZmUgb25lcw0KZnVuY3Rpb24gZ2x6X2lk aWZ5KCR2YWx1ZSkgew0KICAkcGF0dGVybnNbMF0gPSAiL1xzLyI7DQogICRyZXBsYWNlbWVu dHNbMF0gPSAiLSI7DQogICRwYXR0ZXJuc1sxXSA9ICIvW15hLXpBLVowLTlcLV0vIjsNCiAg JHJlcGxhY2VtZW50c1sxXSA9ICIiOw0KDQogIHJldHVybiBwcmVnX3JlcGxhY2UoJHBhdHRl cm5zLCAkcmVwbGFjZW1lbnRzLCBzdHJ0b2xvd2VyKCR2YWx1ZSkpOw0KfQ0KDQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCi8vIHN0cmlwcyBzbGFzaGVzIGluIGFycmF5cywgdXNlZCBpbiBjb25qdWN0aW9u IHdpdGggZS5nLiBhcnJheV9tYXANCmZ1bmN0aW9uIGdsel9hcnJheV9zdHJpcHNsYXNoZXMo JiR2YWx1ZSkgew0KICByZXR1cm4gc3RyaXBzbGFzaGVzKCR2YWx1ZSk7DQp9DQoNCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KLy8gcmV0dXJucyBhbGwgc2VjdGlvbnMvY2F0ZWdvcmllcyB0aGF0IGFyZSBz ZWFyY2hhYmxlDQpmdW5jdGlvbiBnbHpfYWxsX3NlYXJjaGFibGVfc2VjdGlvbnNfY2F0ZWdv cmllcygkdHlwZSkgew0KICAkdHlwZSA9IChpbl9hcnJheSgkdHlwZSwgYXJyYXkoJ2NhdGVn b3J5JywgJ3NlY3Rpb24nKSkgPyAkdHlwZSA6ICdzZWN0aW9uJyk7DQogICRjb25kaXRpb24g PSAiIjsNCg0KICBpZiAoICR0eXBlID09ICJzZWN0aW9uIiApDQogICAgJGNvbmRpdGlvbiAu PSAic2VhcmNoYWJsZT0nMSciOw0KICBlbHNlDQogICAgJGNvbmRpdGlvbiAuPSAibmFtZSA8 PiAncm9vdCcgQU5EIHR5cGU9J2FydGljbGUnIjsNCg0KICAkcmVzdWx0ID0gc2FmZV9yb3dz KCcqJywgInR4cF97JHR5cGV9IiwgJGNvbmRpdGlvbik7DQoNCiAgJG91dCA9IGFycmF5KCk7 DQogIGZvcmVhY2ggKCRyZXN1bHQgYXMgJHZhbHVlKSB7DQogICAgJG91dFskdmFsdWVbJ25h bWUnXV0gPSAkdmFsdWVbJ3RpdGxlJ107DQogIH0NCg0KICByZXR1cm4gJG91dDsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KLy8gd2lsbCBsZWF2ZSBvbmx5IFtBLVphLXowLTkgXSBpbiB0aGUgc3Ry aW5nDQpmdW5jdGlvbiBnbHpfY2xlYW5fc3RyaW5nKCRzdHJpbmcpIHsNCiAgaWYgKCRzdHJp bmcpDQogICAgcmV0dXJuIHByZWdfcmVwbGFjZSgnL1teQS1aYS16MC05XHNcX1wtXS8nLCAn JywgJHN0cmluZyk7DQp9DQoNCg0KDQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gcmVwbGFjZXMgdGhl IGRlZmF1bHQgY3VzdG9tIGZpZWxkcyB1bmRlciB3cml0ZSB0YWINCmZ1bmN0aW9uIGdsel9j dXN0b21fZmllbGRzX3JlcGxhY2UoJGV2ZW50LCAkc3RlcCwgJGRhdGEsICRycykgew0KICBn bG9iYWwgJGFsbF9jdXN0b21fc2V0cywgJGRhdGVfcGlja2VyOw0KICAvLyBnZXQgYWxsIGN1 c3RvbSBmaWVsZHMgJiBrZWVwIG9ubHkgdGhlIG9uZXMgd2hpY2ggYXJlIHNldCwgZmlsdGVy IGJ5IHN0ZXANCiAgJGFycl9jdXN0b21fZmllbGRzID0gZ2x6X2NoZWNrX2N1c3RvbV9zZXQo JGFsbF9jdXN0b21fc2V0cywgJHN0ZXApOw0KDQogIC8vIERFQlVHDQogIC8vIGRtcCgkYXJy X2N1c3RvbV9maWVsZHMpOw0KDQogICRvdXQgPSAnICc7DQoNCiAgaWYgKCBpc19hcnJheSgk YXJyX2N1c3RvbV9maWVsZHMpICYmICFlbXB0eSgkYXJyX2N1c3RvbV9maWVsZHMpICkgew0K ICAgIC8vIGdldCBhbGwgY3VzdG9tIGZpZWxkcyB2YWx1ZXMgZm9yIHRoaXMgYXJ0aWNsZQ0K ICAgICRhcnJfYXJ0aWNsZV9jdXN0b21zID0gZ2x6X2N1c3RvbV9maWVsZHNfTXlTUUwoImFy dGljbGVfY3VzdG9tcyIsIGdsel9nZXRfYXJ0aWNsZV9pZCgpLCAnJywgJGFycl9jdXN0b21f ZmllbGRzKTsNCg0KICAgIC8vIERFQlVHDQogICAgLy8gZG1wKCRhcnJfYXJ0aWNsZV9jdXN0 b21zKTsNCg0KICAgIGlmICggaXNfYXJyYXkoJGFycl9hcnRpY2xlX2N1c3RvbXMpICkNCiAg ICAgIGV4dHJhY3QoJGFycl9hcnRpY2xlX2N1c3RvbXMpOw0KDQogICAgLy8gbGV0J3Mgc2Vl IHdoaWNoIGN1c3RvbSBmaWVsZHMgYXJlIHNldA0KICAgIGZvcmVhY2ggKCAkYXJyX2N1c3Rv bV9maWVsZHMgYXMgJGN1c3RvbSA9PiAkY3VzdG9tX3NldCApIHsNCiAgICAgIC8vIGdldCBh bGwgcG9zc2libGUvZGVmYXVsdCB2YWx1ZShzKSBmb3IgdGhpcyBjdXN0b20gc2V0IGZyb20g Y3VzdG9tX2ZpZWxkcyB0YWJsZQ0KICAgICAgJGFycl9jdXN0b21fZmllbGRfdmFsdWVzID0g Z2x6X2N1c3RvbV9maWVsZHNfTXlTUUwoInZhbHVlcyIsICRjdXN0b20sICcnLCBhcnJheSgn Y3VzdG9tX3NldF9uYW1lJyA9PiAkY3VzdG9tX3NldFsnbmFtZSddKSk7DQoNCiAgICAgIC8v IERFQlVHDQogICAgICAvLyBkbXAoJGFycl9jdXN0b21fZmllbGRfdmFsdWVzKTsNCg0KICAg ICAgLy9jdXN0b21fc2V0IGZvcm1hdHRlZCBmb3IgaWQgZS5nLiBjdXN0b21fMV9zZXQgPT4g Y3VzdG9tLTEgLSBkb24ndCBhc2suLi4NCiAgICAgICRjdXN0b21faWQgPSBnbHpfY3VzdG9t X251bWJlcigkY3VzdG9tLCAiLSIpOw0KICAgICAgLy9jdXN0b21fc2V0IHdpdGhvdXQgIl9z ZXQiIGUuZy4gY3VzdG9tXzFfc2V0ID0+IGN1c3RvbV8xDQogICAgICAkY3VzdG9tID0gZ2x6 X2N1c3RvbV9udW1iZXIoJGN1c3RvbSk7DQoNCiAgICAgIC8vIGlmIGN1cnJlbnQgYXJ0aWNs ZSBob2xkcyBubyB2YWx1ZSBmb3IgdGhpcyBjdXN0b20gZmllbGQgYW5kIHdlIGhhdmUgbm8g ZGVmYXVsdCB2YWx1ZSwgbWFrZSBpdCBlbXB0eQ0KICAgICAgJGN1c3RvbV92YWx1ZSA9ICgh ZW1wdHkoJCRjdXN0b20pID8gJCRjdXN0b20gOiAnJyk7DQogICAgICAvLyBERUJVRw0KICAg ICAgLy8gZG1wKCJjdXN0b21fdmFsdWU6IHskY3VzdG9tX3ZhbHVlfSIpOw0KDQogICAgICAv LyBjaGVjayBpZiB0aGVyZSBpcyBhIGRlZmF1bHQgdmFsdWUNCiAgICAgIC8vIGlmIHRoZXJl IGlzLCBzdHJpcCB0aGUgeyB9DQogICAgICAkZGVmYXVsdF92YWx1ZSA9IGdsel9yZXR1cm5f Y2xlYW5fZGVmYXVsdChnbHpfZGVmYXVsdF92YWx1ZSgkYXJyX2N1c3RvbV9maWVsZF92YWx1 ZXMpKTsNCiAgICAgIC8vIERFQlVHDQogICAgICAvLyBkbXAoImRlZmF1bHRfdmFsdWU6IHsk ZGVmYXVsdF92YWx1ZX0iKTsNCg0KICAgICAgLy8gbm93IHRoYXQgd2UndmUgZm91bmQgb3Vy IGRlZmF1bHQsIHdlIG5lZWQgdG8gY2xlYW4gb3VyIGN1c3RvbV9maWVsZCB2YWx1ZXMNCiAg ICAgIGlmIChpc19hcnJheSgkYXJyX2N1c3RvbV9maWVsZF92YWx1ZXMpKQ0KICAgICAgICBh cnJheV93YWxrKCRhcnJfY3VzdG9tX2ZpZWxkX3ZhbHVlcywgImdsel9jbGVhbl9kZWZhdWx0 X2FycmF5X3ZhbHVlcyIpOw0KDQogICAgICAvLyBERUJVRw0KICAgICAgLy8gZG1wKCRhcnJf Y3VzdG9tX2ZpZWxkX3ZhbHVlcyk7DQoNCiAgICAgIC8vIHRoZSB3YXkgb3VyIGN1c3RvbSBm aWVsZCB2YWx1ZSBpcyBnb2luZyB0byBsb29rIGxpa2UNCiAgICAgIGxpc3QoJGN1c3RvbV9z ZXRfdmFsdWUsICRjdXN0b21fY2xhc3MpID0gZ2x6X2Zvcm1hdF9jdXN0b21fc2V0X2J5X3R5 cGUoJGN1c3RvbSwgJGN1c3RvbV9pZCwgJGN1c3RvbV9zZXRbJ3R5cGUnXSwgJGFycl9jdXN0 b21fZmllbGRfdmFsdWVzLCAkY3VzdG9tX3ZhbHVlLCAkZGVmYXVsdF92YWx1ZSk7DQoNCiAg ICAgIC8vIERFQlVHDQogICAgICAvLyBkbXAoJGN1c3RvbV9zZXRfdmFsdWUpOw0KDQogICAg ICAkb3V0IC49IGdyYWYoDQogICAgICAgICI8bGFiZWwgZm9yPVwiJGN1c3RvbV9pZFwiPnsk Y3VzdG9tX3NldFsnbmFtZSddfTwvbGFiZWw+PGJyIC8+JGN1c3RvbV9zZXRfdmFsdWUiLCAi IGNsYXNzPVwiJGN1c3RvbV9jbGFzc1wiIg0KICAgICAgKTsNCiAgICB9DQogIH0NCg0KICAv LyBERUJVRw0KICAvLyBkbXAoJG91dCk7DQoNCiAgLy8gaWYgd2UncmUgd3JpdGluZyB0ZXh0 YXJlYSBjdXN0b20gZmllbGRzLCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGV4Y2VycHQgYXMg d2VsbA0KICBpZiAoJHN0ZXAgPT0gImJvZHkiKSB7DQogICAgJG91dCA9ICRkYXRhLiRvdXQ7 DQogIH0NCg0KICByZXR1cm4gJG91dDsNCn0NCg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBwcmVwIG91 ciBjdXN0b20gZmllbGRzIGZvciB0aGUgZGIgKHdhdGNoIG91dCBmb3IgbXVsdGktc2VsZWN0 cywgY2hlY2tib3hlcyAmIHJhZGlvcywgdGhleSBtaWdodCBoYXZlIG11bHRpcGxlIHZhbHVl cykNCmZ1bmN0aW9uIGdsel9jdXN0b21fZmllbGRzX2JlZm9yZV9zYXZlKCkgew0KICAvLyBr ZWVwIG9ubHkgdGhlIGN1c3RvbSBmaWVsZHMNCiAgZm9yZWFjaCAoJF9QT1NUIGFzICRrZXkg PT4gJHZhbHVlKSB7DQogICAgLy9jaGVjayBmb3IgY3VzdG9tIGZpZWxkcyB3aXRoIG11bHRp cGxlIHZhbHVlcyBlLmcuIGFycmF5cw0KICAgIGlmICggc3Ryc3RyKCRrZXksICdjdXN0b21f JykgJiYgaXNfYXJyYXkoJHZhbHVlKSApIHsNCiAgICAgICR2YWx1ZSA9IGltcGxvZGUoJHZh bHVlLCAnfCcpOw0KICAgICAgLy8gZmVlZCBvdXIgY3VzdG9tIGZpZWxkcyBiYWNrIGludG8g dGhlICRfUE9TVA0KICAgICAgJF9QT1NUWyRrZXldID0gJHZhbHVlOw0KICAgIH0NCiAgfQ0K ICAvLyBERUJVRw0KICAvLyBkbXAoJF9QT1NUKTsNCn0NCg0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBh ZGRzIHRoZSBjc3MgJiBqcyB3ZSBuZWVkDQpmdW5jdGlvbiBnbHpfY3VzdG9tX2ZpZWxkc19j c3NfanMoKSB7DQogIGdsb2JhbCAkZ2x6X25vdGljZSwgJGRhdGVfcGlja2VyLCAkdGltZV9w aWNrZXIsICRwcmVmczsNCg0KICAvLyBoZXJlIGNvbWUgb3VyIGN1c3RvbSBzdHlsZXNoZWV0 eg0KICAkY3NzID0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG1l ZGlhPSJhbGwiIGhyZWY9Imh0dHA6Ly8nLiRwcmVmc1snc2l0ZXVybCddLicvcGx1Z2lucy9n bHpfY3VzdG9tX2ZpZWxkcy9nbHpfY3VzdG9tX2ZpZWxkcy5jc3MiPicubjsNCiAgLy8gYW5k IGhlcmUgY29tZSBvdXIgamF2YXNjcmlwdHoNCiAgJGpzID0gJyc7DQogIGlmICggJGRhdGVf cGlja2VyICkgew0KICAgICRjc3MgLj0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0i dGV4dC9jc3MiIG1lZGlhPSJhbGwiIGhyZWY9IicuJHByZWZzWydkYXRlcGlja2VyX3VybCdd LicvZGF0ZVBpY2tlci5jc3MiIC8+Jy5uOw0KICAgIGZvcmVhY2ggKGFycmF5KCdkYXRlLmpz JywgJ2RhdGVQaWNrZXIuanMnKSBhcyAkZmlsZSkgew0KICAgICAgJGpzIC49ICc8c2NyaXB0 IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRwcmVmc1snZGF0ZXBpY2tlcl91cmwn XS4iLyIuJGZpbGUuJyI+PC9zY3JpcHQ+Jy5uOw0KICAgIH0NCiAgICAkanMgLj0gPDw8RU9G DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQokKGZ1bmN0aW9uKCkgew0KICBp ZiAoJCgiLmRhdGUtcGlja2VyIikubGVuZ3RoID4gMCkgew0KICAgIHRyeSB7DQogICAgICBE YXRlLmZpcnN0RGF5T2ZXZWVrID0geyRwcmVmc1snZGF0ZXBpY2tlcl9maXJzdF9kYXknXX07 DQogICAgICBEYXRlLmZvcm1hdCA9ICd7JHByZWZzWydkYXRlcGlja2VyX2Zvcm1hdCddfSc7 DQogICAgICBEYXRlLmZ1bGxZZWFyU3RhcnQgPSAnMTknOw0KICAgICAgJCgiLmRhdGUtcGlj a2VyIikuZGF0ZVBpY2tlcih7c3RhcnREYXRlOid7JHByZWZzWydkYXRlcGlja2VyX3N0YXJ0 X2RhdGUnXX0nfSk7DQogICAgfSBjYXRjaChlcnIpIHsNCiAgICAgICQoJyNtZXNzYWdlcGFu ZScpLmh0bWwoJzxhIGhyZWY9Imh0dHA6Ly97JHByZWZzWydzaXRldXJsJ119L3RleHRwYXR0 ZXJuLz9ldmVudD1wbHVnaW5fcHJlZnMuZ2x6X2N1c3RvbV9maWVsZHMiPkZpeCB0aGUgRGF0 ZVBpY2tlciBqUXVlcnkgcGx1Z2luPC9hPicpOw0KICAgIH0NCiAgfQ0KfSk7DQo8L3Njcmlw dD4NCkVPRjsNCiAgfQ0KICBpZiAoICR0aW1lX3BpY2tlciApIHsNCiAgICAkY3NzIC49ICc8 bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIiBocmVm PSInLiRwcmVmc1sndGltZXBpY2tlcl91cmwnXS4nL3RpbWVQaWNrZXIuY3NzIiAvPicubjsN CiAgICAkanMgLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHBy ZWZzWyd0aW1lcGlja2VyX3VybCddLicvdGltZVBpY2tlci5qcyI+PC9zY3JpcHQ+Jy5uOw0K ICAgICRqcyAuPSA8PDxFT0YNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiQo ZnVuY3Rpb24oKSB7DQogIGlmICgkKCIudGltZS1waWNrZXIiKS5sZW5ndGggPiAwKSB7DQog ICAgdHJ5IHsNCiAgICAgICQoIi50aW1lLXBpY2tlciIpLnRpbWVQaWNrZXIoew0KICAgICAg ICBzdGFydFRpbWU6J3skcHJlZnNbJ3RpbWVwaWNrZXJfc3RhcnRfdGltZSddfScsDQogICAg ICAgIGVuZFRpbWU6ICd7JHByZWZzWyd0aW1lcGlja2VyX2VuZF90aW1lJ119JywNCiAgICAg ICAgc3RlcDogeyRwcmVmc1sndGltZXBpY2tlcl9zdGVwJ119LA0KICAgICAgICBzaG93MjRI b3VyczogeyRwcmVmc1sndGltZXBpY2tlcl9zaG93XzI0J119DQogICAgICB9KTsNCiAgICB9 IGNhdGNoKGVycikgew0KICAgICAgJCgnI21lc3NhZ2VwYW5lJykuaHRtbCgnPGEgaHJlZj0i aHR0cDovL3skcHJlZnNbJ3NpdGV1cmwnXX0vdGV4dHBhdHRlcm4vP2V2ZW50PXBsdWdpbl9w cmVmcy5nbHpfY3VzdG9tX2ZpZWxkcyI+Rml4IHRoZSBUaW1lUGlja2VyIGpRdWVyeSBwbHVn aW48L2E+Jyk7DQogICAgfQ0KICB9DQp9KTsNCjwvc2NyaXB0Pg0KRU9GOw0KICB9DQogICRq cyAuPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovLycuJHBy ZWZzWydzaXRldXJsJ10uJy9wbHVnaW5zL2dsel9jdXN0b21fZmllbGRzL2dsel9jdXN0b21f ZmllbGRzLmpzIj48L3NjcmlwdD4nOw0KDQogIC8vIGRpc3BsYXlzIHRoZSBub3RpY2VzIHdl IGhhdmUgZ2F0aGVyZWQgdGhyb3VnaG91dCB0aGUgZW50aXJlIHBsdWdpbg0KICBpZiAoIGNv dW50KCRnbHpfbm90aWNlKSA+IDAgKSB7DQogICAgLy8gbGV0J3MgdHVybiBvdXIgbm90aWNl cyBpbnRvIGEgc3RyaW5nDQogICAgJGdsel9ub3RpY2UgPSBqb2luKCI8YnIgLz4iLCBhcnJh eV91bmlxdWUoJGdsel9ub3RpY2UpKTsNCg0KICAgICRqcyAuPSAnPHNjcmlwdCB0eXBlPSJ0 ZXh0L2phdmFzY3JpcHQiPg0KICAgIDwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0NCg0KICAg ICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgew0KICAgICAgLy8gYWRkIG91ciBub3Rp Y2VzDQogICAgICAkKCIjbWVzc2FnZXBhbmUiKS5odG1sKFwnJy4kZ2x6X25vdGljZS4nXCcp Ow0KICAgIH0pOw0KICAgIC8vLS0+PCFdXT4NCiAgICA8L3NjcmlwdD4nOw0KICB9DQoNCiAg ZWNobyAkanMubi50LiRjc3Mubi50Ow0KfQ0KDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIHdlIGFyZSBz ZXR0aW5nIHVwIHRoZSBwcmUtcmVxdWlzaXRlIHZhbHVlcyBmb3IgZ2x6X2N1c3RvbV9maWVs ZHMNCmZ1bmN0aW9uIGJlZm9yZV9nbHpfY3VzdG9tX2ZpZWxkcygpIHsNCiAgLy8gd2Ugd2ls bCBiZSByZXVzaW5nIHRoZXNlIGdsb2JhbHMgYWNyb3NzIHRoZSB3aG9sZSBwbHVnaW4NCiAg Z2xvYmFsICRhbGxfY3VzdG9tX3NldHMsICRnbHpfbm90aWNlLCAkcHJlZnMsICRkYXRlX3Bp Y2tlciwgJHRpbWVfcGlja2VyOw0KDQogIC8vIGdsel9ub3RpY2UgY29sbGVjdHMgYWxsIHBs dWdpbiBub3RpY2VzDQogICRnbHpfbm90aWNlID0gYXJyYXkoKTsNCg0KICAvLyBsZXQncyBn ZXQgYWxsIGN1c3RvbSBmaWVsZCBzZXRzIGZyb20gcHJlZnMNCiAgJGFsbF9jdXN0b21fc2V0 cyA9IGdsel9jdXN0b21fZmllbGRzX015U1FMKCJhbGwiKTsNCg0KICAvLyBsZXQncyBzZWUg aWYgd2UgaGF2ZSBhIGRhdGUtcGlja2VyIGN1c3RvbSBmaWVsZCAoZmlyc3Qgb2YgdGhlIHNw ZWNpYWwgb25lcykNCiAgJGRhdGVfcGlja2VyID0gZ2x6X2N1c3RvbV9maWVsZHNfTXlTUUwo ImN1c3RvbV9zZXRfZXhpc3RzIiwgImRhdGUtcGlja2VyIik7DQoNCiAgLy8gbGV0J3Mgc2Vl IGlmIHdlIGhhdmUgYSB0aW1lLXBpY2tlciBjdXN0b20gZmllbGQNCiAgJHRpbWVfcGlja2Vy ID0gZ2x6X2N1c3RvbV9maWVsZHNfTXlTUUwoImN1c3RvbV9zZXRfZXhpc3RzIiwgInRpbWUt cGlja2VyIik7DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gYm9vdHN0cmFwcGluZyByb3V0aW5l cywgcnVuIHRocm91Z2ggcGx1Z2luX2xpZmVjeWNsZQ0KZnVuY3Rpb24gZ2x6X2N1c3RvbV9m aWVsZHNfaW5zdGFsbCgpIHsNCiAgZ2xvYmFsICRhbGxfY3VzdG9tX3NldHMsICRnbHpfbm90 aWNlLCAkcHJlZnM7DQoNCiAgLy8gZGVmYXVsdCBjdXN0b20gZmllbGRzIGFyZSBzZXQgdG8g Y3VzdG9tX3NldA0KICAvLyBuZWVkIHRvIGNoYW5nZSB0aGlzIGJlY2F1c2UgaXQgY29uZnVz ZXMgb3VyIHNldF90eXBlcygpDQogIHNhZmVfcXVlcnkoIg0KICAgIFVQREFURQ0KICAgICAg YCIuUEZYLiJ0eHBfcHJlZnNgDQogICAgU0VUDQogICAgICBgaHRtbGAgPSAndGV4dF9pbnB1 dCcNCiAgICBXSEVSRQ0KICAgICAgYGV2ZW50YCA9ICdjdXN0b20nDQogICAgQU5EDQogICAg ICBgaHRtbGAgPSAnY3VzdG9tX3NldCcNCiAgIik7DQoNCiAgLy8gc2V0IHBsdWdpbiBwcmVm ZXJlbmNlcw0KICAkYXJyX3BsdWdpbl9wcmVmZXJlbmNlcyA9IGFycmF5KA0KICAgICd2YWx1 ZXNfb3JkZXJpbmcnICAgICAgID0+ICJjdXN0b20iLA0KICAgICdtdWx0aXNlbGVjdF9zaXpl JyAgICAgID0+ICI1IiwNCiAgICAnZGF0ZXBpY2tlcl91cmwnICAgICAgICA9PiBodS4icGx1 Z2lucy9nbHpfY3VzdG9tX2ZpZWxkcy9qcXVlcnkuZGF0ZVBpY2tlciIsDQogICAgJ2RhdGVw aWNrZXJfZm9ybWF0JyAgICAgPT4gImRkL21tL3l5eXkiLA0KICAgICdkYXRlcGlja2VyX2Zp cnN0X2RheScgID0+IDEsDQogICAgJ2RhdGVwaWNrZXJfc3RhcnRfZGF0ZScgPT4gIjAxLzAx LzE5OTAiLA0KICAgICd0aW1lcGlja2VyX3VybCcgICAgICAgID0+IGh1LiJwbHVnaW5zL2ds el9jdXN0b21fZmllbGRzL2pxdWVyeS50aW1lUGlja2VyIiwNCiAgICAndGltZXBpY2tlcl9z dGFydF90aW1lJyA9PiAiMDA6MDAiLA0KICAgICd0aW1lcGlja2VyX2VuZF90aW1lJyAgID0+ ICIyMzozMCIsDQogICAgJ3RpbWVwaWNrZXJfc3RlcCcgICAgICAgPT4gMzAsDQogICAgJ3Rp bWVwaWNrZXJfc2hvd18yNCcgICAgPT4gdHJ1ZSwNCiAgICAnY3VzdG9tX3NjcmlwdHNfcGF0 aCcgICA9PiAkcHJlZnNbJ3BhdGhfdG9fc2l0ZSddLiIvcGx1Z2lucy9nbHpfY3VzdG9tX2Zp ZWxkcyINCiAgKTsNCiAgZ2x6X2N1c3RvbV9maWVsZHNfTXlTUUwoInVwZGF0ZV9wbHVnaW5f cHJlZmVyZW5jZXMiLCAkYXJyX3BsdWdpbl9wcmVmZXJlbmNlcyk7DQoNCiAgLy8gbGV0J3Mg dXBkYXRlIHBsdWdpbiBwcmVmZXJlbmNlcywgbWFrZSBzdXJlIHRoZXkgd29uJ3QgYXBwZWFy IHVuZGVyIEFkbWluID4gUHJlZmVyZW5jZXMNCiAgc2FmZV9xdWVyeSgiDQogICAgVVBEQVRF DQogICAgICBgIi5QRlguInR4cF9wcmVmc2ANCiAgICBTRVQNCiAgICAgIGB0eXBlYCA9ICcx MCcNCiAgICBXSEVSRQ0KICAgICAgYGV2ZW50YCA9ICdnbHpfY3VzdG9tX2YnDQogICIpOw0K DQogIC8vIGlmIHdlIGRvbid0IGhhdmUgYSBzZWFyY2ggc2VjdGlvbiwgbGV0J3MgY3JlYXRl IGl0IGJlY2F1c2Ugd2UnbGwgbmVlZCBpdCB3aGVuIHNlYXJjaGluZyBieSBjdXN0b20gZmll bGRzDQogIGlmKCAhZ2V0Um93KCJTRUxFQ1QgbmFtZSBGUk9NIGAiLlBGWC4idHhwX3NlY3Rp b25gIFdIRVJFIG5hbWU9J3NlYXJjaCciKSApIHsNCiAgICBzYWZlX3F1ZXJ5KCINCiAgICAg IElOU0VSVCBJTlRPDQogICAgICAgIGAiLlBGWC4idHhwX3NlY3Rpb25gIChgbmFtZWAsIGBw YWdlYCwgYGNzc2AsIGBpbl9yc3NgLCBgb25fZnJvbnRwYWdlYCwgYHNlYXJjaGFibGVgLCBg dGl0bGVgKQ0KICAgICAgVkFMVUVTDQogICAgICAgICgnc2VhcmNoJywgJ2RlZmF1bHQnLCAn ZGVmYXVsdCcsICcwJywgJzAnLCAnMCcsICdTZWFyY2gnKQ0KICAgICIpOw0KICAgIC8vIGFk ZCBhIG5vdGljZSB0aGF0IHNlYXJjaCBzZWN0aW9uIGhhcyBiZWUgY3JlYXRlZA0KICAgICRn bHpfbm90aWNlW10gPSBnbHpfY3VzdG9tX2ZpZWxkc19nVHh0KCJzZWFyY2hfc2VjdGlvbl9j cmVhdGVkIik7DQogIH0NCg0KICAvLyBpZiB3ZSBkb24ndCBoYXZlIHRoZSBjdXN0b21fZmll bGRzIHRhYmxlLCBsZXQncyBjcmVhdGUgaXQNCiAgaWYgKCAhZ2V0Um93cygiU0hPVyBUQUJM RVMgTElLRSAnIi5QRlguImN1c3RvbV9maWVsZHMnIikgKSB7DQogICAgc2FmZV9xdWVyeSgi DQogICAgICBDUkVBVEUgVEFCTEUgYCIuUEZYLiJjdXN0b21fZmllbGRzYCAoDQogICAgICAg IGBpZGAgaW50KDExKSBVTlNJR05FRCBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwNCiAgICAg ICAgYG5hbWVgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KICAgICAgICBg dmFsdWVgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KICAgICAgICBQUklN QVJZIEtFWSAoaWQpLA0KICAgICAgICBLRVkgKGBuYW1lYCkNCiAgICAgICkgRU5HSU5FPU15 SVNBTQ0KICAgICIpOw0KICB9DQogIGVsc2Ugew0KICAgIC8vIGlmIHRoZXJlIGlzbid0IGFu ZCBpZCBjb2x1bW4sIGFkZCBpdA0KICAgIGlmICggIWdldFJvd3MoIlNIT1cgQ09MVU1OUyBG Uk9NICIuUEZYLiJjdXN0b21fZmllbGRzIExJS0UgJ2lkJyIpICkgew0KICAgICAgc2FmZV9x dWVyeSgiDQogICAgICAgIEFMVEVSIFRBQkxFIGAiLlBGWC4iY3VzdG9tX2ZpZWxkc2ANCiAg ICAgICAgICBBREQgYGlkYCBpbnQoMTEpIFVOU0lHTkVEIE5PVCBOVUxMIEFVVE9fSU5DUkVN RU5UIEtFWQ0KICAgICAgIik7DQogICAgfQ0KDQogICAvLyBpZiB3ZSBoYXZlIGRlZmluaXRl bHkgbWlncmF0ZWQgdXNpbmcgdGhpcyBmdW5jdGlvbiwgc2tpcCBldmVyeXRoaW5nDQogICBp ZiAoIGlzc2V0KCRwcmVmc1snbWlncmF0ZWQnXSkgKQ0KICAgICByZXR1cm47DQogICAvLyBh Ym9ydCB0aGUgbWlncmF0aW9uIGlmIHRoZXJlIGFyZSB2YWx1ZXMgaW4gY3VzdG9tX2ZpZWxk cyB0YWJsZSwgd2UgZG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUgYW55dGhpbmcNCiAgIGVsc2Ug aWYgKCBnbHpfY3VzdG9tX2ZpZWxkc19NeVNRTCgnY2hlY2tfbWlncmF0aW9uJykgPiAwICkg ew0KICAgICAvLyBERUJVRw0KICAgICAvLyBkbXAoZ2x6X2N1c3RvbV9maWVsZHNfTXlTUUwo J2NoZWNrX21pZ3JhdGlvbicpKTsNCiAgICAgJGdsel9ub3RpY2VbXSA9IGdsel9jdXN0b21f ZmllbGRzX2dUeHQoIm1pZ3JhdGlvbl9za2lwIik7DQogICAgIC8vIG1ha2UgYSBub3RlIG9m IHRoaXMgbWlncmF0aW9uIGluIHR4cF9wcmVmcw0KICAgICBnbHpfY3VzdG9tX2ZpZWxkc19N eVNRTCgnbWFya19taWdyYXRpb24nKTsNCiAgICAgcmV0dXJuOw0KICAgfQ0KDQogICAvLyBn byB0aHJvdWdoIGFsbCB2YWx1ZXMgaW4gY3VzdG9tIGZpZWxkIGNvbHVtbnMgaW4gdGV4dHBh dHRlcm4gdGFibGUgb25lIGJ5IG9uZQ0KICAgZm9yZWFjaCAoJGFsbF9jdXN0b21fc2V0cyBh cyAkY3VzdG9tID0+ICRjdXN0b21fc2V0KSB7DQogICAgIC8vIGNoZWNrIG9ubHkgZm9yIGN1 c3RvbSBmaWVsZHMgdGhhdCBoYXZlIGJlZW4gc2V0DQogICAgIGlmICggJGN1c3RvbV9zZXRb J25hbWUnXSApIHsNCiAgICAgICAvLyBnZXQgYWxsIGV4aXN0aW5nIGN1c3RvbSB2YWx1ZXMg Zm9yIEFMTCBhcnRpY2xlcw0KICAgICAgICRhbGxfdmFsdWVzID0gZ2x6X2N1c3RvbV9maWVs ZHNfTXlTUUwoJ2FsbF92YWx1ZXMnLCBnbHpfY3VzdG9tX251bWJlcigkY3VzdG9tKSwgJycs IGFycmF5KCdjdXN0b21fc2V0X25hbWUnID0+ICRjdXN0b21fc2V0WyduYW1lJ10sICdzdGF0 dXMnID0+IDApKTsNCiAgICAgICAvLyBpZiB3ZSBoYXZlIHJlc3VsdHMsIGxldCdzIGNyZWF0 ZSBTUUwgcXVlcmllcyB0aGF0IHdpbGwgYWRkIHRoZW0gdG8gY3VzdG9tX2ZpZWxkcyB0YWJs ZQ0KICAgICAgIGlmICggY291bnQoJGFsbF92YWx1ZXMpID4gMCApIHsNCiAgICAgICAgIC8v IGluaXRpYWxpemUgaW5zZXJ0DQogICAgICAgICAkaW5zZXJ0ID0gJyc7DQogICAgICAgICBm b3JlYWNoICggJGFsbF92YWx1ZXMgYXMgJGVzY2FwZWRfdmFsdWUgPT4gJHZhbHVlICkgew0K ICAgICAgICAgICAvLyBkb24ndCBpbnNlcnQgZW1wdHkgdmFsdWVzIG9yIHZhbHVlcyB0aGF0 IGFyZSBvdmVyIDI1NSBjaGFyYWN0ZXJzDQogICAgICAgICAgIC8vIHZhbHVlcyBvdmVyIDI1 NSBjaGFyYWN0ZXJzIGhpbnQgdG8gYSB0ZXh0YXJlYSBjdXN0b20gZmllbGQNCiAgICAgICAg ICAgaWYgKCAhZW1wdHkoJGVzY2FwZWRfdmFsdWUpICYmIHN0cmxlbigkZXNjYXBlZF92YWx1 ZSkgPCAyNTUgKQ0KICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgdGhlIGxhc3QgdmFsdWUs IHF1ZXJ5IHdpbGwgaGF2ZSB0byBiZSBkaWZmZXJlbnQNCiAgICAgICAgICAgICAkaW5zZXJ0 IC49ICggZW5kKCRhbGxfdmFsdWVzKSAhPSAkdmFsdWUgKSA/DQogICAgICAgICAgICAgICAi KCd7JGN1c3RvbX0nLCd7JGVzY2FwZWRfdmFsdWV9JyksIiA6DQogICAgICAgICAgICAgICAi KCd7JGN1c3RvbX0nLCd7JGVzY2FwZWRfdmFsdWV9JykiOw0KICAgICAgICAgfQ0KICAgICAg ICAgJHF1ZXJ5ID0gIg0KICAgICAgICAgICBJTlNFUlQgSU5UTw0KICAgICAgICAgICAgIGAi LlBGWC4iY3VzdG9tX2ZpZWxkc2AgKGBuYW1lYCxgdmFsdWVgKQ0KICAgICAgICAgICBWQUxV RVMNCiAgICAgICAgICAgICB7JGluc2VydH0NCiAgICAgICAgICI7DQogICAgICAgICBpZiAo IGlzc2V0KCRxdWVyeSkgJiYgIWVtcHR5KCRxdWVyeSkgKSB7DQogICAgICAgICAgIC8vIGNy ZWF0ZSBhbGwgY3VzdG9tIGZpZWxkIHZhbHVlcyBpbiBjdXN0b21fZmllbGRzIHRhYmxlDQog ICAgICAgICAgIHNhZmVfcXVlcnkoJHF1ZXJ5KTsNCiAgICAgICAgICAgLy8gdXBkYXRlIHRo ZSB0eXBlIG9mIHRoaXMgY3VzdG9tIGZpZWxkIHRvIHNlbGVjdCAobWlnaHQgd2FudCB0byBt YWtlIHRoaXMgdXNlci1hZGp1c3RhYmxlIGF0IHNvbWUgcG9pbnQpDQogICAgICAgICAgIGds el9jdXN0b21fZmllbGRzX015U1FMKCJ1cGRhdGUiLCAkY3VzdG9tLCBQRlguInR4cF9wcmVm cyIsIGFycmF5KA0KICAgICAgICAgICAgICdjdXN0b21fc2V0X25hbWUnICAgPT4gJGN1c3Rv bV9zZXRbJ25hbWUnXSwNCiAgICAgICAgICAgICAnY3VzdG9tX3NldF90eXBlJyAgID0+ICJz ZWxlY3QiLA0KICAgICAgICAgICAgICdjdXN0b21fc2V0X3Bvc2l0aW9uJyA9PiAkY3VzdG9t X3NldFsncG9zaXRpb24nXQ0KICAgICAgICAgICApKTsNCiAgICAgICAgICAgJGdsel9ub3Rp Y2VbXSA9IGdsel9jdXN0b21fZmllbGRzX2dUeHQoIm1pZ3JhdGlvbl9zdWNjZXNzIik7DQog ICAgICAgICB9DQogICAgICAgfQ0KICAgICB9DQogICB9DQoNCiAgIC8vIG1ha2UgYSBub3Rl IG9mIHRoaXMgbWlncmF0aW9uIGluIHR4cF9wcmVmcw0KICAgZ2x6X2N1c3RvbV9maWVsZHNf TXlTUUwoJ21hcmtfbWlncmF0aW9uJyk7DQogIH0NCn0NCg0KDQoNCg0KDQpnbG9iYWwgJGV2 ZW50Ow0KDQovLyBnbG9iYWxzLCBleHBlbnNpdmUgb3BlcmF0aW9ucyBtb3N0bHkNCmJlZm9y ZV9nbHpfY3VzdG9tX2ZpZWxkcygpOw0KDQppZiAoQHR4cGludGVyZmFjZSA9PSAiYWRtaW4i KSB7DQoNCiAgLy8gSU5TVEFMTCBST1VUSU5FUw0KICAvLyBjaGVja3MgaWYgYWxsIHRhYmxl cyBleGlzdCBhbmQgZXZlcnl0aGluZyBpcyBzZXR1cCBwcm9wZXJseQ0KICBhZGRfcHJpdnMo J2dsel9jdXN0b21fZmllbGRzX2luc3RhbGwnLCAiMSIpOw0KICByZWdpc3Rlcl9jYWxsYmFj aygiZ2x6X2N1c3RvbV9maWVsZHNfaW5zdGFsbCIsICJwbHVnaW5fbGlmZWN5Y2xlLmdsel9j dXN0b21fZmllbGRzIiwgImluc3RhbGxlZCIpOw0KDQogIC8vIHdlJ2xsIGJlIGRvaW5nIHRo aXMgb25seSBvbiB0aGUgcGFnZXMgdGhhdCB3ZSBjYXJlIGFib3V0LCBub3QgZXZlcnl3aGVy ZQ0KICBpZiAoIGluX2FycmF5KCRldmVudCwgYXJyYXkoImFydGljbGUiLCAicHJlZnMiLCAi Z2x6X2N1c3RvbV9maWVsZHMiLCAicGx1Z2luX3ByZWZzLmdsel9jdXN0b21fZmllbGRzIikp ICkgew0KICAgIC8vIHdlIG5lZWQgc29tZSBzdHlsZXNoZWV0cyAmIEpTDQogICAgYWRkX3By aXZzKCdnbHpfY3VzdG9tX2ZpZWxkc19jc3NfanMnLCAiMSwyLDMsNCw1LDYiKTsNCiAgICBy ZWdpc3Rlcl9jYWxsYmFjaygnZ2x6X2N1c3RvbV9maWVsZHNfY3NzX2pzJywgImFkbWluX3Np ZGUiLCAnaGVhZF9lbmQnKTsNCg0KICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQg YWxsIGN1c3RvbSBmaWVsZCB2YWx1ZXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5ncyBm aXJzdCAtIHRoaW5rIGNoZWNrYm94ZXMgJiBtdWx0aS1zZWxlY3RzIGV0Yy4NCiAgICBpZiAo IChncHMoInN0ZXAiKSA9PSAiZWRpdCIpIHx8IChncHMoInN0ZXAiKSA9PSAiY3JlYXRlIikg KSB7DQogICAgICBhZGRfcHJpdnMoJ2dsel9jdXN0b21fZmllbGRzX2JlZm9yZV9zYXZlJywg IjEsMiwzLDQsNSw2Iik7DQogICAgICByZWdpc3Rlcl9jYWxsYmFjaygnZ2x6X2N1c3RvbV9m aWVsZHNfYmVmb3JlX3NhdmUnLCAiYXJ0aWNsZSIsICcnLCAxKTsNCiAgICB9DQogIH0NCg0K ICAvLyBDdXN0b20gRmllbGRzIHRhYiB1bmRlciBFeHRlbnNpb25zDQogIGFkZF9wcml2cygn Z2x6X2N1c3RvbV9maWVsZHMnLCAiMSwyIik7DQogIHJlZ2lzdGVyX3RhYigiZXh0ZW5zaW9u cyIsICdnbHpfY3VzdG9tX2ZpZWxkcycsICJDdXN0b20gRmllbGRzIik7DQogIHJlZ2lzdGVy X2NhbGxiYWNrKCdnbHpfY3VzdG9tX2ZpZWxkcycsICJnbHpfY3VzdG9tX2ZpZWxkcyIpOw0K DQogIC8vIHBsdWdpbiBwcmVmZXJlbmNlcw0KICBhZGRfcHJpdnMoJ3BsdWdpbl9wcmVmcy5n bHpfY3VzdG9tX2ZpZWxkcycsICIxLDIiKTsNCiAgcmVnaXN0ZXJfY2FsbGJhY2soJ2dsel9j dXN0b21fZmllbGRzX3ByZWZlcmVuY2VzJywgJ3BsdWdpbl9wcmVmcy5nbHpfY3VzdG9tX2Zp ZWxkcycpOw0KDQoNCiAgLy8gWUVTLCBmaW5hbGx5IHRoZSBkZWZhdWx0IGN1c3RvbSBmaWVs ZHMgYXJlIHJlcGxhY2VkIGJ5IHRoZSBuZXcsIHBpbXBlZCBvbmVzIDogKQ0KICBhZGRfcHJp dnMoJ2dsel9jdXN0b21fZmllbGRzX3JlcGxhY2UnLCAiMSwyLDMsNCw1LDYiKTsNCiAgcmVn aXN0ZXJfY2FsbGJhY2soJ2dsel9jdXN0b21fZmllbGRzX3JlcGxhY2UnLCAnYXJ0aWNsZV91 aScsICdjdXN0b21fZmllbGRzJyk7DQogIC8vIFlFUywgbm93IHdlIGhhdmUgdGV4dGFyZWEg Y3VzdG9tIGZpZWxkcyBhcyB3ZWxsIDsgKQ0KICByZWdpc3Rlcl9jYWxsYmFjaygnZ2x6X2N1 c3RvbV9maWVsZHNfcmVwbGFjZScsICdhcnRpY2xlX3VpJywgJ2JvZHknKTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KLy8gZXZlcnl0aGluZyBpcyBoYXBwZW5pbmcgaW4gdGhpcyBmdW5jdGlvbi4u LiBnZW5lcmF0ZXMgdGhlIGNvbnRlbnQgZm9yIEV4dGVuc2lvbnMgPiBDdXN0b20gRmllbGRz DQpmdW5jdGlvbiBnbHpfY3VzdG9tX2ZpZWxkcygpIHsNCiAgZ2xvYmFsICRldmVudCwgJGFs bF9jdXN0b21fc2V0cywgJGdsel9ub3RpY2UsICRwcmVmczsNCg0KICAvLyB3ZSBoYXZlICRf UE9TVCwgbGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBDUlVEDQogIGlmICggJF9QT1NUICkg ew0KICAgICRpbmNvbWluZyA9IHN0cmlwUG9zdCgpOw0KICAgIC8vIERFQlVHDQogICAgLy8g ZGllKGRtcCgkaW5jb21pbmcpKTsNCiAgICBleHRyYWN0KCRpbmNvbWluZyk7DQoNCiAgICAv LyBjcmVhdGUgYW4gZW1wdHkgJHZhbHVlIGlmIGl0J3Mgbm90IHNldCBpbiB0aGUgJF9QT1NU DQogICAgaWYgKCAhaXNzZXQoJHZhbHVlKSApDQogICAgICAkdmFsdWUgPSAnJzsNCg0KICAg IC8vIHdlIGFyZSBkZWxldGluZyBhIG5ldyBjdXN0b20gZmllbGQNCiAgICBpZiAoIGdwcygn ZGVsZXRlJykgKSB7DQogICAgICBnbHpfY3VzdG9tX2ZpZWxkc19NeVNRTCgiZGVsZXRlIiwg JGN1c3RvbV9zZXQsIFBGWC4idHhwX3ByZWZzIik7DQogICAgICBnbHpfY3VzdG9tX2ZpZWxk c19NeVNRTCgiZGVsZXRlIiwgJGN1c3RvbV9zZXQsIFBGWC4idHhwX2xhbmciKTsNCiAgICAg IGdsel9jdXN0b21fZmllbGRzX015U1FMKCJkZWxldGUiLCAkY3VzdG9tX3NldCwgUEZYLiJj dXN0b21fZmllbGRzIik7DQoNCiAgICAgIGdsel9jdXN0b21fZmllbGRzX015U1FMKCJkZWxl dGUiLCBnbHpfY3VzdG9tX251bWJlcigkY3VzdG9tX3NldCksIFBGWC4idGV4dHBhdHRlcm4i KTsNCg0KICAgICAgJGdsel9ub3RpY2VbXSA9IGdsel9jdXN0b21fZmllbGRzX2dUeHQoImRl bGV0ZWQiLCBhcnJheSgne2N1c3RvbV9zZXRfbmFtZX0nID0+ICRjdXN0b21fc2V0X25hbWUp KTsNCiAgICB9DQoNCiAgICAvLyB3ZSBhcmUgcmVzZXR0aW5nIG9uZSBvZiB0aGUgbWlnaHR5 IDEwDQogICAgaWYgKCBncHMoJ3Jlc2V0JykgKSB7DQogICAgICBnbHpfY3VzdG9tX2ZpZWxk c19NeVNRTCgicmVzZXQiLCAkY3VzdG9tX3NldCwgUEZYLiJ0eHBfcHJlZnMiKTsNCiAgICAg IGdsel9jdXN0b21fZmllbGRzX015U1FMKCJkZWxldGUiLCAkY3VzdG9tX3NldCwgUEZYLiJj dXN0b21fZmllbGRzIik7DQoNCiAgICAgIGdsel9jdXN0b21fZmllbGRzX015U1FMKCJyZXNl dCIsIGdsel9jdXN0b21fbnVtYmVyKCRjdXN0b21fc2V0KSwgUEZYLiJ0ZXh0cGF0dGVybiIs IGFycmF5KA0KICAgICAgICAnY3VzdG9tX3NldF90eXBlJyA9PiAkY3VzdG9tX3NldF90eXBl LA0KICAgICAgICAnY3VzdG9tX2ZpZWxkJyA9PiBnbHpfY3VzdG9tX251bWJlcigkY3VzdG9t X3NldCkNCiAgICAgICkpOw0KDQogICAgICAkZ2x6X25vdGljZVtdID0gZ2x6X2N1c3RvbV9m aWVsZHNfZ1R4dCgicmVzZXQiLCBhcnJheSgne2N1c3RvbV9zZXRfbmFtZX0nID0+ICRjdXN0 b21fc2V0X25hbWUpKTsNCiAgICB9DQoNCiAgICAvLyB3ZSBhcmUgYWRkaW5nIGEgbmV3IGN1 c3RvbSBmaWVsZA0KICAgIGlmICggZ3BzKCJjdXN0b21fZmllbGRfbnVtYmVyIikgKSB7DQog ICAgICAkY3VzdG9tX3NldF9uYW1lID0gZ3BzKCJjdXN0b21fc2V0X25hbWUiKTsNCg0KICAg ICAgLy8gaWYgbm8gbmFtZSB3YXMgc3BlY2lmaWVkLCBhYm9ydA0KICAgICAgaWYgKCAhJGN1 c3RvbV9zZXRfbmFtZSApDQogICAgICAgICRnbHpfbm90aWNlW10gPSBnbHpfY3VzdG9tX2Zp ZWxkc19nVHh0KCJub19uYW1lIik7DQogICAgICBlbHNlIHsNCiAgICAgICAgJGN1c3RvbV9z ZXRfbmFtZSA9IGdsel9jbGVhbl9zdHJpbmcoJGN1c3RvbV9zZXRfbmFtZSk7DQoNCiAgICAg ICAgJG5hbWVfZXhpc3RzID0gZ2x6X2NoZWNrX2N1c3RvbV9zZXRfbmFtZSgkYWxsX2N1c3Rv bV9zZXRzLCAkY3VzdG9tX3NldF9uYW1lKTsNCg0KICAgICAgICAvLyBpZiBuYW1lIGRvZXNu J3QgZXhpc3QNCiAgICAgICAgaWYgKCAkbmFtZV9leGlzdHMgPT0gRkFMU0UgKSB7DQogICAg ICAgICAgZ2x6X2N1c3RvbV9maWVsZHNfTXlTUUwoIm5ldyIsICRjdXN0b21fc2V0X25hbWUs IFBGWC4idHhwX3ByZWZzIiwgYXJyYXkoDQogICAgICAgICAgICAnY3VzdG9tX2ZpZWxkX251 bWJlcicgPT4gJGN1c3RvbV9maWVsZF9udW1iZXIsDQogICAgICAgICAgICAnY3VzdG9tX3Nl dF90eXBlJyAgICAgPT4gJGN1c3RvbV9zZXRfdHlwZSwNCiAgICAgICAgICAgICdjdXN0b21f c2V0X3Bvc2l0aW9uJyA9PiAkY3VzdG9tX3NldF9wb3NpdGlvbg0KICAgICAgICAgICkpOw0K ICAgICAgICAgIGdsel9jdXN0b21fZmllbGRzX015U1FMKCJuZXciLCAkY3VzdG9tX3NldF9u YW1lLCBQRlguInR4cF9sYW5nIiwgYXJyYXkoDQogICAgICAgICAgICAnY3VzdG9tX2ZpZWxk X251bWJlcicgPT4gJGN1c3RvbV9maWVsZF9udW1iZXIsDQogICAgICAgICAgICAnbGFuZycg ICAgICAgICAgICAgICAgPT4gJEdMT0JBTFNbJ3ByZWZzJ11bJ2xhbmd1YWdlJ10NCiAgICAg ICAgICApKTsNCiAgICAgICAgICBnbHpfY3VzdG9tX2ZpZWxkc19NeVNRTCgibmV3IiwgJGN1 c3RvbV9zZXRfbmFtZSwgUEZYLiJ0ZXh0cGF0dGVybiIsIGFycmF5KA0KICAgICAgICAgICAg J2N1c3RvbV9maWVsZF9udW1iZXInID0+ICRjdXN0b21fZmllbGRfbnVtYmVyLA0KICAgICAg ICAgICAgJ2N1c3RvbV9zZXRfdHlwZScgPT4gJGN1c3RvbV9zZXRfdHlwZQ0KICAgICAgICAg ICkpOw0KICAgICAgICAgIC8vIHRoZXJlIGFyZSBjdXN0b20gZmllbGRzIGZvciB3aGljaCB3 ZSBkbyBub3QgbmVlZCB0byB0b3VjaCBjdXN0b21fZmllbGRzIHRhYmxlDQogICAgICAgICAg aWYgKCAhaW5fYXJyYXkoJGN1c3RvbV9zZXRfdHlwZSwgYXJyYXkoInRleHRhcmVhIiwgInRl eHRfaW5wdXQiKSkgKSB7DQogICAgICAgICAgICBnbHpfY3VzdG9tX2ZpZWxkc19NeVNRTCgi bmV3IiwgJGN1c3RvbV9zZXRfbmFtZSwgUEZYLiJjdXN0b21fZmllbGRzIiwgYXJyYXkoDQog ICAgICAgICAgICAgICdjdXN0b21fZmllbGRfbnVtYmVyJyA9PiAkY3VzdG9tX2ZpZWxkX251 bWJlciwNCiAgICAgICAgICAgICAgJ3ZhbHVlJyAgICAgICAgICAgICAgID0+ICR2YWx1ZQ0K ICAgICAgICAgICAgKSk7DQogICAgICAgICAgfQ0KDQogICAgICAgICAgJGdsel9ub3RpY2Vb XSA9IGdsel9jdXN0b21fZmllbGRzX2dUeHQoImNyZWF0ZWQiLCBhcnJheSgne2N1c3RvbV9z ZXRfbmFtZX0nID0+ICRjdXN0b21fc2V0X25hbWUpKTsNCiAgICAgICAgfQ0KICAgICAgICAv LyBuYW1lIGV4aXN0cywgYWJvcnQNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICRnbHpfbm90 aWNlW10gPSBnbHpfY3VzdG9tX2ZpZWxkc19nVHh0KCJleGlzdHMiLCBhcnJheSgne2N1c3Rv bV9zZXRfbmFtZX0nID0+ICRjdXN0b21fc2V0X25hbWUpKTsNCiAgICAgIH0NCiAgICB9DQoN CiAgICAvLyB3ZSBhcmUgZWRpdGluZyBhbiBleGlzdGluZyBjdXN0b20gZmllbGQNCiAgICBp ZiAoIGdwcygnc2F2ZScpICkgew0KICAgICAgaWYgKCAhZW1wdHkoJGN1c3RvbV9zZXRfbmFt ZSkgKSB7DQogICAgICAgICRjdXN0b21fc2V0X25hbWUgPSBnbHpfY2xlYW5fc3RyaW5nKCRj dXN0b21fc2V0X25hbWUpOw0KICAgICAgICAkbmFtZV9leGlzdHMgPSBnbHpfY2hlY2tfY3Vz dG9tX3NldF9uYW1lKCRhbGxfY3VzdG9tX3NldHMsICRjdXN0b21fc2V0X25hbWUsICRjdXN0 b21fc2V0KTsNCiAgICAgICAgLy8gaWYgbmFtZSBkb2Vzbid0IGV4aXN0IHdlJ2xsIG5lZWQg dG8gY3JlYXRlIGEgbmV3IGN1c3RvbV9zZXQNCiAgICAgICAgaWYgKCAkbmFtZV9leGlzdHMg PT0gRkFMU0UgKSB7DQogICAgICAgICAgZ2x6X2N1c3RvbV9maWVsZHNfTXlTUUwoInVwZGF0 ZSIsICRjdXN0b21fc2V0LCBQRlguInR4cF9wcmVmcyIsIGFycmF5KA0KICAgICAgICAgICAg J2N1c3RvbV9zZXRfbmFtZScgICAgID0+ICRjdXN0b21fc2V0X25hbWUsDQogICAgICAgICAg ICAnY3VzdG9tX3NldF90eXBlJyAgICAgPT4gJGN1c3RvbV9zZXRfdHlwZSwNCiAgICAgICAg ICAgICdjdXN0b21fc2V0X3Bvc2l0aW9uJyA9PiAkY3VzdG9tX3NldF9wb3NpdGlvbg0KICAg ICAgICAgICkpOw0KDQogICAgICAgICAgLy8gY3VzdG9tIHNldHMgbmVlZCB0byBiZSBjaGFu Z2VkIGJhc2VkIG9uIHRoZWlyIHR5cGUNCiAgICAgICAgICBnbHpfY3VzdG9tX2ZpZWxkc19N eVNRTCgidXBkYXRlIiwgJGN1c3RvbV9zZXQsIFBGWC4idGV4dHBhdHRlcm4iLCBhcnJheSgN CiAgICAgICAgICAgICdjdXN0b21fc2V0X3R5cGUnID0+ICRjdXN0b21fc2V0X3R5cGUsDQog ICAgICAgICAgICAnY3VzdG9tX2ZpZWxkJyA9PiBnbHpfY3VzdG9tX251bWJlcigkY3VzdG9t X3NldCkNCiAgICAgICAgICApKTsNCg0KICAgICAgICAgIC8vIGZvciB0ZXh0YXJlYXMgd2Ug ZG8gbm90IG5lZWQgdG8gdG91Y2ggY3VzdG9tX2ZpZWxkcyB0YWJsZQ0KICAgICAgICAgIGlm ICggJGN1c3RvbV9zZXRfdHlwZSAhPSAidGV4dGFyZWEiICkgew0KICAgICAgICAgICAgZ2x6 X2N1c3RvbV9maWVsZHNfTXlTUUwoImRlbGV0ZSIsICRjdXN0b21fc2V0LCBQRlguImN1c3Rv bV9maWVsZHMiKTsNCiAgICAgICAgICAgIGdsel9jdXN0b21fZmllbGRzX015U1FMKCJuZXci LCAkY3VzdG9tX3NldF9uYW1lLCBQRlguImN1c3RvbV9maWVsZHMiLCBhcnJheSgNCiAgICAg ICAgICAgICAgJ2N1c3RvbV9zZXQnICA9PiAkY3VzdG9tX3NldCwNCiAgICAgICAgICAgICAg J3ZhbHVlJyAgICAgICA9PiAkdmFsdWUNCiAgICAgICAgICAgICkpOw0KICAgICAgICAgIH0N Cg0KICAgICAgICAgICRnbHpfbm90aWNlW10gPSBnbHpfY3VzdG9tX2ZpZWxkc19nVHh0KCJ1 cGRhdGVkIiwgYXJyYXkoJ3tjdXN0b21fc2V0X25hbWV9JyA9PiAkY3VzdG9tX3NldF9uYW1l KSk7DQogICAgICAgIH0NCiAgICAgICAgLy8gbmFtZSBleGlzdHMsIGFib3J0DQogICAgICAg IGVsc2UNCiAgICAgICAgICAkZ2x6X25vdGljZVtdID0gZ2x6X2N1c3RvbV9maWVsZHNfZ1R4 dCgiZXhpc3RzIiwgYXJyYXkoJ3tjdXN0b21fc2V0X25hbWV9JyA9PiAkY3VzdG9tX3NldF9u YW1lKSk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICAgICRnbHpfbm90aWNlW10gPSBn bHpfY3VzdG9tX2ZpZWxkc19nVHh0KCdub19uYW1lJyk7DQogICAgfQ0KDQogICAgLy8gbmVl ZCB0byByZS1mZXRjaCBkYXRhIHNpbmNlIHRoaW5ncyBtb2RpZmllZA0KICAgICRhbGxfY3Vz dG9tX3NldHMgPSBnbHpfY3VzdG9tX2ZpZWxkc19NeVNRTCgiYWxsIik7DQoNCiAgfQ0KDQog IHBhZ2V0b3AoIkN1c3RvbSBGaWVsZHMiKTsNCg0KICAvLyB0aGUgdGFibGUgd2l0aCBhbGwg Y3VzdG9tIGZpZWxkcyBmb2xsb3dzDQogIGVjaG8NCiAgICBuLic8ZGl2IGNsYXNzPSJsaXN0 dGFibGVzIj4nLm4uDQogICAgJyAgPHRhYmxlIGNsYXNzPSJ0eHAtbGlzdCBnbHpfY3VzdG9t X2ZpZWxkcyI+Jy5uLg0KICAgICcgICAgPHRoZWFkPicubi4NCiAgICAnICAgICAgPHRyPicu bi4NCiAgICAnICAgICAgICA8dGg+UG9zaXRpb248L3RoPicubi4NCiAgICAnICAgICAgICA8 dGg+TmFtZTwvdGg+Jy5uLg0KICAgICcgICAgICAgIDx0aD5UeXBlPC90aD4nLm4uDQogICAg JyAgICAgICAgPHRoPiZuYnNwOzwvdGg+Jy5uLg0KICAgICcgICAgICA8L3RyPicubi4NCiAg ICAnICAgIDwvdGhlYWQ+Jy5uLg0KICAgICcgICAgPHRib2R5PicubjsNCg0KICAvLyBsb29w aW5nIHRocm91Z2ggYWxsIG91ciBjdXN0b20gZmllbGRzIHRvIGJ1aWxkIHRoZSB0YWJsZQ0K ICAkaSA9IDA7DQogIGZvcmVhY2ggKCAkYWxsX2N1c3RvbV9zZXRzIGFzICRjdXN0b20gPT4g JGN1c3RvbV9zZXQgKSB7DQogICAgLy8gZmlyc3QgMTAgZmllbGRzIGNhbm5vdCBiZSBkZWxl dGVkLCBqdXN0IHJlc2V0DQogICAgaWYgKCAkaSA8IDEwICkgew0KICAgICAgLy8gY2FuJ3Qg cmVzZXQgYSBjdXN0b20gZmllbGQgdGhhdCBpcyBub3Qgc2V0DQogICAgICAkcmVzZXRfZGVs ZXRlID0gKCAkY3VzdG9tX3NldFsnbmFtZSddICkgPw0KICAgICAgICBnbHpfZm9ybV9idXR0 b25zKCJyZXNldCIsICJSZXNldCIsICRjdXN0b20sIGh0bWxzcGVjaWFsY2hhcnMoJGN1c3Rv bV9zZXRbJ25hbWUnXSksICRjdXN0b21fc2V0Wyd0eXBlJ10sICcnLCAncmV0dXJuIGNvbmZp cm0oXCdCeSBwcm9jZWVkaW5nIHlvdSB3aWxsIFJFU0VUIEFMTCBkYXRhIGluIGB0ZXh0cGF0 dGVybmAgYW5kIGBjdXN0b21fZmllbGRzYCB0YWJsZXMgZm9yIGAnLiRjdXN0b20uJ2AuIEFy ZSB5b3Ugc3VyZT9cJyk7JykgOg0KICAgICAgICBOVUxMOw0KICAgIH0NCiAgICBlbHNlIHsN CiAgICAgICRyZXNldF9kZWxldGUgPSBnbHpfZm9ybV9idXR0b25zKCJkZWxldGUiLCAiRGVs ZXRlIiwgJGN1c3RvbSwgaHRtbHNwZWNpYWxjaGFycygkY3VzdG9tX3NldFsnbmFtZSddKSwg JGN1c3RvbV9zZXRbJ3R5cGUnXSwgJycsICdyZXR1cm4gY29uZmlybShcJ0J5IHByb2NlZWRp bmcgeW91IHdpbGwgREVMRVRFIEFMTCBkYXRhIGluIGB0ZXh0cGF0dGVybmAgYW5kIGBjdXN0 b21fZmllbGRzYCB0YWJsZXMgZm9yIGAnLiRjdXN0b20uJ2AuIEFyZSB5b3Ugc3VyZT9cJyk7 Jyk7DQogICAgfQ0KDQogICAgJGVkaXQgPSBnbHpfZm9ybV9idXR0b25zKCJlZGl0IiwgIkVk aXQiLCAkY3VzdG9tLCBodG1sc3BlY2lhbGNoYXJzKCRjdXN0b21fc2V0WyduYW1lJ10pLCAk Y3VzdG9tX3NldFsndHlwZSddLCAkY3VzdG9tX3NldFsncG9zaXRpb24nXSk7DQoNCiAgICBl Y2hvDQogICAgJyAgICAgIDx0cj4nLm4uDQogICAgJyAgICAgICAgPHRkIGNsYXNzPSJjdXN0 b21fc2V0X3Bvc2l0aW9uIj4nLiRjdXN0b21fc2V0Wydwb3NpdGlvbiddLic8L3RkPicubi4N CiAgICAnICAgICAgICA8dGQgY2xhc3M9ImN1c3RvbV9zZXRfbmFtZSI+Jy4kY3VzdG9tX3Nl dFsnbmFtZSddLic8L3RkPicubi4NCiAgICAnICAgICAgICA8dGQgY2xhc3M9InR5cGUiPicu KCgkY3VzdG9tX3NldFsnbmFtZSddKSA/IGdsel9jdXN0b21fZmllbGRzX2dUeHQoJGN1c3Rv bV9zZXRbJ3R5cGUnXSkgOiAnJykuJzwvdGQ+Jy5uLg0KICAgICcgICAgICAgIDx0ZCBjbGFz cz0iZXZlbnRzIj4nLiRyZXNldF9kZWxldGUuc3AuJGVkaXQuJzwvdGQ+Jy5uLg0KICAgICcg ICAgICA8L3RyPicubjsNCg0KICAgICRpKys7DQogIH0NCg0KICBlY2hvDQogICAgJyAgICA8 L3Rib2R5Picubi4NCiAgICAnICA8L3RhYmxlPicubjsNCiAgICAnPC9kaXY+Jy5uOw0KDQog IC8vIHRoZSBmb3JtIHdoZXJlIGN1c3RvbSBmaWVsZHMgYXJlIGJlaW5nIGFkZGVkL2VkaXRl ZA0KICAkbGVnZW5kID0gZ3BzKCdlZGl0JykgPw0KICAgICdFZGl0ICcuZ3BzKCdjdXN0b21f c2V0JykgOg0KICAgICdBZGQgbmV3IGN1c3RvbSBmaWVsZCc7DQoNCiAgJGN1c3RvbV9maWVs ZCA9IGdwcygnZWRpdCcpID8NCiAgICAnPGlucHV0IG5hbWU9ImN1c3RvbV9zZXQiIHZhbHVl PSInLmdwcygnY3VzdG9tX3NldCcpLiciIHR5cGU9ImhpZGRlbiIgLz4nIDoNCiAgICAnPGlu cHV0IG5hbWU9ImN1c3RvbV9maWVsZF9udW1iZXIiIHZhbHVlPSInLmdsel9jdXN0b21fbmV4 dCgkYWxsX2N1c3RvbV9zZXRzKS4nIiB0eXBlPSJoaWRkZW4iIC8+JzsNCg0KICAkY3VzdG9t X3NldCA9IGdwcygnZWRpdCcpID8NCiAgICBncHMoJ2N1c3RvbV9zZXQnKSA6DQogICAgTlVM TDsNCg0KICAkY3VzdG9tX25hbWUgPSBncHMoJ2VkaXQnKSA/DQogICAgZ3BzKCdjdXN0b21f c2V0X25hbWUnKSA6DQogICAgTlVMTDsNCg0KICAkY3VzdG9tX3NldF9wb3NpdGlvbiA9IGdw cygnZWRpdCcpID8NCiAgICBncHMoJ2N1c3RvbV9zZXRfcG9zaXRpb24nKSA6DQogICAgTlVM TDsNCg0KICAkYXJyX2N1c3RvbV9zZXRfdHlwZXMgPSBnbHpfY3VzdG9tX3NldF90eXBlcygp Ow0KDQogICRjdXN0b21fc2V0X3R5cGVzID0gTlVMTDsNCiAgZm9yZWFjaCAoICRhcnJfY3Vz dG9tX3NldF90eXBlcyBhcyAkY3VzdG9tX3R5cGVfZ3JvdXAgPT4gJGN1c3RvbV90eXBlcyAp IHsNCiAgICAkY3VzdG9tX3NldF90eXBlcyAuPSAnPG9wdGdyb3VwIGxhYmVsPSInLnVjZmly c3QoJGN1c3RvbV90eXBlX2dyb3VwKS4nIj4nLm47DQogICAgZm9yZWFjaCAoJGN1c3RvbV90 eXBlcyBhcyAkY3VzdG9tX3R5cGUpIHsNCiAgICAgICRzZWxlY3RlZCA9ICggZ3BzKCdlZGl0 JykgJiYgZ3BzKCdjdXN0b21fc2V0X3R5cGUnKSA9PSAkY3VzdG9tX3R5cGUgKSA/DQogICAg ICAgICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOg0KICAgICAgICBOVUxMOw0KICAgICAgJGN1 c3RvbV9zZXRfdHlwZXMgLj0gJzxvcHRpb24gdmFsdWU9IicuJGN1c3RvbV90eXBlLiciJy4k c2VsZWN0ZWQuJz4nLmdsel9jdXN0b21fZmllbGRzX2dUeHQoJGN1c3RvbV90eXBlKS4nPC9v cHRpb24+Jy5uOw0KICAgIH0NCiAgICAkY3VzdG9tX3NldF90eXBlcyAuPSAnPC9vcHRncm91 cD4nLm47DQogIH0NCiAgLy8gZmV0Y2hpbmcgdGhlIHZhbHVlcyBmb3IgdGhpcyBjdXN0b20g ZmllbGQNCiAgaWYgKCBncHMoJ2VkaXQnKSApIHsNCiAgICBpZiAoICRjdXN0b21fc2V0X3R5 cGUgPT0gInRleHRfaW5wdXQiICkNCiAgICAgICRhcnJfdmFsdWVzID0gZ2x6X2N1c3RvbV9m aWVsZHNfTXlTUUwoJ2FsbF92YWx1ZXMnLCBnbHpfY3VzdG9tX251bWJlcigkY3VzdG9tX3Nl dCksICcnLCBhcnJheSgnY3VzdG9tX3NldF9uYW1lJyA9PiAkY3VzdG9tX3NldF9uYW1lLCAn c3RhdHVzJyA9PiA0KSk7DQogICAgZWxzZQ0KICAgICAgJGFycl92YWx1ZXMgPSBnbHpfY3Vz dG9tX2ZpZWxkc19NeVNRTCgidmFsdWVzIiwgJGN1c3RvbV9zZXQsICcnLCBhcnJheSgnY3Vz dG9tX3NldF9uYW1lJyA9PiAkY3VzdG9tX3NldF9uYW1lKSk7DQoNCiAgICAkdmFsdWVzID0g KCAkYXJyX3ZhbHVlcyApID8NCiAgICAgIGltcGxvZGUoIlxyXG4iLCAkYXJyX3ZhbHVlcykg Og0KICAgICAgJyc7DQogIH0NCiAgZWxzZQ0KICAgICR2YWx1ZXMgPSAnJzsNCg0KICAkYWN0 aW9uID0gZ3BzKCdlZGl0JykgPw0KICAgICc8aW5wdXQgbmFtZT0ic2F2ZSIgdmFsdWU9IlNh dmUiIHR5cGU9InN1Ym1pdCIgY2xhc3M9InN1Ym1pdCIgLz4nIDoNCiAgICAnPGlucHV0IG5h bWU9ImFkZF9uZXciIHZhbHVlPSJBZGQgbmV3IiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJzdWJt aXQiIC8+JzsNCiAgLy8gdGhpcyBuZWVkcyB0byBiZSBkaWZmZXJlbnQgZm9yIGEgc2NyaXB0 DQogICR2YWx1ZSA9ICggaXNzZXQoJGN1c3RvbV9zZXRfdHlwZSkgJiYgJGN1c3RvbV9zZXRf dHlwZSA9PSAiY3VzdG9tLXNjcmlwdCIgKSA/DQogICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBu YW1lPSJ2YWx1ZSIgaWQ9InZhbHVlIiB2YWx1ZT0iJy4kdmFsdWVzLiciIGNsYXNzPSJsZWZ0 Ii8+PHNwYW4gY2xhc3M9InJpZ2h0Ij48ZW0+UmVsYXRpdmUgcGF0aCBmcm9tIHlvdXIgd2Vi c2l0ZVwncyBwdWJsaWMgZm9sZGVyPC9lbT48L3NwYW4+JyA6DQogICAgJzx0ZXh0YXJlYSBu YW1lPSJ2YWx1ZSIgaWQ9InZhbHVlIiBjbGFzcz0ibGVmdCI+Jy4kdmFsdWVzLic8L3RleHRh cmVhPjxzcGFuIGNsYXNzPSJyaWdodCI+PGVtPkVhY2ggdmFsdWUgb24gYSBzZXBhcmF0ZSBs aW5lPC9lbT4gPGJyIC8+PGVtPk9uZSB7ZGVmYXVsdH0gdmFsdWUgYWxsb3dlZDwvZW0+PC9z cGFuPic7DQoNCiAgLy8gb2ssIGFsbCBpcyBzZXQsIGxldCdzIGJ1aWxkIHRoZSBmb3JtDQog IGVjaG8NCiAgICAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249ImluZGV4LnBocCIgaWQ9 ImFkZF9lZGl0X2N1c3RvbV9maWVsZCI+Jy5uLg0KICAgICc8aW5wdXQgbmFtZT0iZXZlbnQi IHZhbHVlPSJnbHpfY3VzdG9tX2ZpZWxkcyIgdHlwZT0iaGlkZGVuIiAvPicubi4NCiAgICAk Y3VzdG9tX2ZpZWxkLm4uDQogICAgJzxmaWVsZHNldD4nLm4uDQogICAgJyA8bGVnZW5kPicu JGxlZ2VuZC4nPC9sZWdlbmQ+Jy5uLg0KICAgICcgPHAgY2xhc3M9ImNsZWFyZml4Ij4NCiAg ICAgICAgPGxhYmVsIGZvcj0iY3VzdG9tX3NldF9uYW1lIiBjbGFzcz0ibGVmdCI+TmFtZTo8 L2xhYmVsPg0KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY3VzdG9tX3NldF9u YW1lIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRjdXN0b21fbmFtZSkuJyIgaWQ9ImN1 c3RvbV9zZXRfbmFtZSIgY2xhc3M9ImxlZnQiIC8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJy aWdodCI+PGVtPk9ubHkgd29yZCBjaGFyYWN0ZXJzIGFsbG93ZWQ8L2VtPjwvc3Bhbj4NCiAg ICAgIDwvcD4nLm4uDQogICAgJyA8cCBjbGFzcz0iY2xlYXJmaXgiPg0KICAgICAgICA8bGFi ZWwgZm9yPSJjdXN0b21fc2V0X3R5cGUiIGNsYXNzPSJsZWZ0Ij5UeXBlOjwvbGFiZWw+DQog ICAgICAgIDxzZWxlY3QgbmFtZT0iY3VzdG9tX3NldF90eXBlIiBpZD0iY3VzdG9tX3NldF90 eXBlIiBjbGFzcz0ibGVmdCI+DQogICAgJy4gICAgICAkY3VzdG9tX3NldF90eXBlcy4nDQog ICAgICAgIDwvc2VsZWN0Pg0KICAgICAgPC9wPicubi4NCiAgICAnIDxwIGNsYXNzPSJjbGVh cmZpeCI+DQogICAgICAgIDxsYWJlbCBmb3I9ImN1c3RvbV9zZXRfcG9zaXRpb24iIGNsYXNz PSJsZWZ0Ij5Qb3NpdGlvbjo8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIg bmFtZT0iY3VzdG9tX3NldF9wb3NpdGlvbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygk Y3VzdG9tX3NldF9wb3NpdGlvbikuJyIgaWQ9ImN1c3RvbV9zZXRfcG9zaXRpb24iIGNsYXNz PSJsZWZ0IiAvPg0KICAgICAgICA8c3BhbiBjbGFzcz0icmlnaHQiPjxlbT5BdXRvbWF0aWNh bGx5IGFzc2lnbmVkIGlmIGJsYW5rPC9lbT48L3NwYW4+DQogICAgICA8L3A+Jy5uLg0KICAg ICcgPHAgY2xhc3M9ImNsZWFyZml4Ij4NCiAgICAgICAgPGxhYmVsIGZvcj0idmFsdWUiIGNs YXNzPSJsZWZ0Ij5WYWx1ZTo8L2xhYmVsPg0KICAgICcuICAkdmFsdWUuJw0KICAgICAgPC9w Picubi4NCiAgICAnICcuJGFjdGlvbi5uLg0KICAgICc8L2ZpZWxkc2V0Picubi4NCiAgICAn PC9mb3JtPicubjsNCn0NCg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBnbHpfY3VzdG9tX2ZpZWxkcyBw cmVmZXJlbmNlcw0KZnVuY3Rpb24gZ2x6X2N1c3RvbV9maWVsZHNfcHJlZmVyZW5jZXMoKSB7 DQogIGdsb2JhbCAkZXZlbnQsICRnbHpfbm90aWNlOw0KDQogIGlmICggJF9QT1NUICYmIGdw cygnc2F2ZScpICkgew0KICAgIGdsel9jdXN0b21fZmllbGRzX015U1FMKCJ1cGRhdGVfcGx1 Z2luX3ByZWZlcmVuY2VzIiwgJF9QT1NUWydnbHpfY3VzdG9tX2ZpZWxkc19wcmVmcyddKTsN CiAgICAkZ2x6X25vdGljZVtdID0gZ2x6X2N1c3RvbV9maWVsZHNfZ1R4dCgicHJlZmVyZW5j ZXNfdXBkYXRlZCIpOw0KICAgIC8vIG5lZWQgdG8gcmUtZmV0Y2ggZnJvbSBkYiBiZWNhdXNl IHRoaXMgaGFzIGNoYW5nZWQgc2luY2UgJHByZWZzIGhhcyBiZWVuIHBvcHVsYXRlZA0KICB9 DQogICRjdXJyZW50X3ByZWZlcmVuY2VzID0gZ2x6X2N1c3RvbV9maWVsZHNfTXlTUUwoJ3Bs dWdpbl9wcmVmZXJlbmNlcycpOw0KDQogIHBhZ2V0b3AoImdsel9jdXN0b21fZmllbGRzIFBy ZWZlcmVuY2VzIik7DQoNCiAgLy8gY3VzdG9tX2ZpZWxkcw0KICAkYXJyX3ZhbHVlc19vcmRl cmluZyA9IGFycmF5KA0KICAgICdhc2NlbmRpbmcnICAgPT4gIkFzY2VuZGluZyIsDQogICAg J2Rlc2NlbmRpbmcnICA9PiAiRGVzY2VuZGluZyIsDQogICAgJ2N1c3RvbScgICAgICA9PiAi QXMgZW50ZXJlZCINCiAgKTsNCiAgJHZhbHVlc19vcmRlcmluZyA9ICc8c2VsZWN0IG5hbWU9 Imdsel9jdXN0b21fZmllbGRzX3ByZWZzW3ZhbHVlc19vcmRlcmluZ10iIGlkPSJnbHpfY3Vz dG9tX2ZpZWxkc19wcmVmc192YWx1ZXNfb3JkZXJpbmciPic7DQogIGZvcmVhY2ggKCAkYXJy X3ZhbHVlc19vcmRlcmluZyBhcyAkdmFsdWUgPT4gJHRpdGxlICkgew0KICAgICRzZWxlY3Rl ZCA9ICgkY3VycmVudF9wcmVmZXJlbmNlc1sndmFsdWVzX29yZGVyaW5nJ10gPT0gJHZhbHVl KSA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJzsNCiAgICAkdmFsdWVzX29yZGVyaW5n IC49ICI8b3B0aW9uIHZhbHVlPVwiJHZhbHVlXCIkc2VsZWN0ZWQ+JHRpdGxlPC9vcHRpb24+ IjsNCiAgfQ0KICAkdmFsdWVzX29yZGVyaW5nIC49ICI8L3NlbGVjdD4iOw0KICAkbXVsdGlz ZWxlY3Rfc2l6ZSA9ICc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZ2x6X2N1c3RvbV9maWVs ZHNfcHJlZnNbbXVsdGlzZWxlY3Rfc2l6ZV0iIGlkPSJnbHpfY3VzdG9tX2ZpZWxkc19wcmVm c19tdWx0aXNlbGVjdF9zaXplIiB2YWx1ZT0iJy4kY3VycmVudF9wcmVmZXJlbmNlc1snbXVs dGlzZWxlY3Rfc2l6ZSddLiciIC8+JzsNCiAgJGN1c3RvbV9zY3JpcHRzX3BhdGhfZXJyb3Ig PSAoIEBmb3BlbigkY3VycmVudF9wcmVmZXJlbmNlc1snY3VzdG9tX3NjcmlwdHNfcGF0aCdd LCAiciIpICkgPw0KICAgICcnIDoNCiAgICAnPGJyIC8+PGVtIGNsYXNzPSJyZWQiPkZvbGRl ciBkb2VzIG5vdCBleGlzdCwgcGxlYXNlIGNyZWF0ZSBpdC48L2VtPic7DQoNCiAgLy8ganF1 ZXJ5LmRhdGVQaWNrZXINCiAgJGRhdGVwaWNrZXJfdXJsX2Vycm9yID0gKCBAZm9wZW4oJGN1 cnJlbnRfcHJlZmVyZW5jZXNbJ2RhdGVwaWNrZXJfdXJsJ10uIi9kYXRlUGlja2VyLmpzIiwg InIiKSApID8NCiAgICAnJyA6DQogICAgJzxiciAvPjxlbSBjbGFzcz0icmVkIj5Gb2xkZXIg ZG9lcyBub3QgZXhpc3QsIHBsZWFzZSBjcmVhdGUgaXQuPC9lbT4nOw0KICAkYXJyX2RhdGVf Zm9ybWF0ID0gYXJyYXkoImRkL21tL3l5eXkiLCAibW0vZGQveXl5eSIsICJ5eXl5LW1tLWRk IiwgImRkIG1tIHl5Iik7DQogICRkYXRlX2Zvcm1hdCA9ICc8c2VsZWN0IG5hbWU9Imdsel9j dXN0b21fZmllbGRzX3ByZWZzW2RhdGVwaWNrZXJfZm9ybWF0XSIgaWQ9Imdsel9jdXN0b21f ZmllbGRzX3ByZWZzX2RhdGVwaWNrZXJfZm9ybWF0Ij4nOw0KICBmb3JlYWNoICggJGFycl9k YXRlX2Zvcm1hdCBhcyAkZm9ybWF0ICkgew0KICAgICRzZWxlY3RlZCA9ICgkY3VycmVudF9w cmVmZXJlbmNlc1snZGF0ZXBpY2tlcl9mb3JtYXQnXSA9PSAkZm9ybWF0KSA/ICcgc2VsZWN0 ZWQ9InNlbGVjdGVkIicgOiAnJzsNCiAgICAkZGF0ZV9mb3JtYXQgLj0gIjxvcHRpb24gdmFs dWU9XCIkZm9ybWF0XCIkc2VsZWN0ZWQ+JGZvcm1hdDwvb3B0aW9uPiI7DQogIH0NCiAgJGRh dGVfZm9ybWF0IC49ICI8L3NlbGVjdD4iOw0KDQogICRhcnJfZGF5cyA9IGFycmF5KCdTdW5k YXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0Zy aWRheScsICdTYXR1cmRheScpOw0KICAkZmlyc3RfZGF5ID0gJzxzZWxlY3QgbmFtZT0iZ2x6 X2N1c3RvbV9maWVsZHNfcHJlZnNbZGF0ZXBpY2tlcl9maXJzdF9kYXldIiBpZD0iZ2x6X2N1 c3RvbV9maWVsZHNfcHJlZnNfZGF0ZXBpY2tlcl9maXJzdF9kYXkiPic7DQogIGZvcmVhY2gg KCAkYXJyX2RheXMgYXMgJGtleSA9PiAkZGF5ICkgew0KICAgICRzZWxlY3RlZCA9ICgkY3Vy cmVudF9wcmVmZXJlbmNlc1snZGF0ZXBpY2tlcl9maXJzdF9kYXknXSA9PSAka2V5KSA/ICcg c2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJzsNCiAgICAkZmlyc3RfZGF5IC49ICI8b3B0aW9u IHZhbHVlPVwiJGtleVwiJHNlbGVjdGVkPiRkYXk8L29wdGlvbj4iOw0KICB9DQogICRmaXJz dF9kYXkgLj0gIjwvc2VsZWN0PiI7DQoNCiAgJHN0YXJ0X2RhdGUgPSAnPGlucHV0IHR5cGU9 InRleHQiIG5hbWU9Imdsel9jdXN0b21fZmllbGRzX3ByZWZzW2RhdGVwaWNrZXJfc3RhcnRf ZGF0ZV0iIGlkPSJnbHpfY3VzdG9tX2ZpZWxkc19wcmVmc19kYXRlcGlja2VyX3N0YXJ0X2Rh dGUiIHZhbHVlPSInLiRjdXJyZW50X3ByZWZlcmVuY2VzWydkYXRlcGlja2VyX3N0YXJ0X2Rh dGUnXS4nIiAvPic7DQoNCiAgLy8ganF1ZXJ5LnRpbWVQaWNrZXINCiAgJHRpbWVwaWNrZXJf dXJsX2Vycm9yID0gKCBAZm9wZW4oJGN1cnJlbnRfcHJlZmVyZW5jZXNbJ3RpbWVwaWNrZXJf dXJsJ10uIi90aW1lUGlja2VyLmpzIiwgInIiKSApID8NCiAgICAnJyA6DQogICAgJzxiciAv PjxlbSBjbGFzcz0icmVkIj5Gb2xkZXIgZG9lcyBub3QgZXhpc3QsIHBsZWFzZSBjcmVhdGUg aXQuPC9lbT4nOw0KICAkYXJyX3RpbWVfZm9ybWF0ID0gYXJyYXkoJ3RydWUnID0+ICIyNCBo b3VycyIsICdmYWxzZScgPT4gIjEyIGhvdXJzIik7DQogICRzaG93XzI0ID0gJzxzZWxlY3Qg bmFtZT0iZ2x6X2N1c3RvbV9maWVsZHNfcHJlZnNbdGltZXBpY2tlcl9zaG93XzI0XSIgaWQ9 Imdsel9jdXN0b21fZmllbGRzX3ByZWZzX3RpbWVwaWNrZXJfc2hvd18yNCI+JzsNCiAgZm9y ZWFjaCAoICRhcnJfdGltZV9mb3JtYXQgYXMgJHZhbHVlID0+ICR0aXRsZSApIHsNCiAgICAk c2VsZWN0ZWQgPSAoJGN1cnJlbnRfcHJlZmVyZW5jZXNbJ3RpbWVwaWNrZXJfc2hvd18yNCdd ID09ICR2YWx1ZSkgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJyc7DQogICAgJHNob3df MjQgLj0gIjxvcHRpb24gdmFsdWU9XCIkdmFsdWVcIiRzZWxlY3RlZD4kdGl0bGU8L29wdGlv bj4iOw0KICB9DQogICRzaG93XzI0IC49ICI8L3NlbGVjdD4iOw0KDQogICRvdXQgPSA8PDxF T0YNCjxmb3JtIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBvc3QiPg0KPHRhYmxlIGlk PSJsaXN0IiBjbGFzcz0iZ2x6X2N1c3RvbV9maWVsZHNfcHJlZnMiIGNlbGxwYWRkaW5nPSIw IiBjZWxsc3BhY2luZz0iMCIgYWxpZ249ImNlbnRlciI+DQogIDx0Ym9keT4NCiAgICA8dHIg Y2xhc3M9ImhlYWRpbmciPg0KICAgICAgPHRkIGNvbHNwYW49IjIiPjxoMiBjbGFzcz0icHJl Zi1oZWFkaW5nIj5DdXN0b20gRmllbGRzPC9oMj48L3RkPg0KICAgIDwvdHI+DQogICAgPHRy Pg0KICAgICAgPHRoIHNjb3BlPSJyb3ciPjxsYWJlbCBmb3I9Imdsel9jdXN0b21fZmllbGRz X3ByZWZzX3ZhbHVlc19vcmRlcmluZyI+T3JkZXIgZm9yIGN1c3RvbSBmaWVsZCB2YWx1ZXM8 L3RoPg0KICAgICAgPHRkPnskdmFsdWVzX29yZGVyaW5nfTwvdGQ+DQogICAgPC90cj4NCiAg ICA8dHI+DQogICAgICA8dGggc2NvcGU9InJvdyI+PGxhYmVsIGZvcj0iZ2x6X2N1c3RvbV9m aWVsZHNfcHJlZnNfbXVsdGlzZWxlY3Rfc2l6ZSI+TXVsdGktc2VsZWN0IGZpZWxkIHNpemU8 L3RoPg0KICAgICAgPHRkPnskbXVsdGlzZWxlY3Rfc2l6ZX08L3RkPg0KICAgIDwvdHI+DQog ICAgPHRyPg0KICAgICAgPHRoIHNjb3BlPSJyb3ciPjxsYWJlbCBmb3I9Imdsel9jdXN0b21f ZmllbGRzX3ByZWZzX2N1c3RvbV9zY3JpcHRzX3BhdGgiPkN1c3RvbSBzY3JpcHRzIHBhdGg8 L3RoPg0KICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJnbHpfY3VzdG9tX2Zp ZWxkc19wcmVmc1tjdXN0b21fc2NyaXB0c19wYXRoXSIgaWQ9Imdsel9jdXN0b21fZmllbGRz X3ByZWZzX2N1c3RvbV9zY3JpcHRzX3BhdGgiIHZhbHVlPSJ7JGN1cnJlbnRfcHJlZmVyZW5j ZXNbJ2N1c3RvbV9zY3JpcHRzX3BhdGgnXX0iIC8+eyRjdXN0b21fc2NyaXB0c19wYXRoX2Vy cm9yfTwvdGQ+DQogICAgPC90cj4NCg0KICAgIDx0ciBjbGFzcz0iaGVhZGluZyI+DQogICAg ICA8dGQgY29sc3Bhbj0iMiI+PGgyIGNsYXNzPSJwcmVmLWhlYWRpbmcgbGVmdCI+RGF0ZSBQ aWNrZXI8L2gyPiA8YSBocmVmPSJodHRwOi8vd3d3LmtlbHZpbmx1Y2suY29tL2Fzc2V0cy9q cXVlcnkvZGF0ZVBpY2tlci92Mi9kZW1vL2luZGV4Lmh0bWwiIHRpdGxlPSJBIGZsZXhpYmxl IHVub2J0cnVzaXZlIGNhbGVuZGFyIGNvbXBvbmVudCBmb3IgalF1ZXJ5IiBjbGFzcz0icmln aHQiPmpRdWVyeSBkYXRlUGlja2VyPC9hPjwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQog ICAgICA8dGggc2NvcGU9InJvdyI+PGxhYmVsIGZvcj0iZ2x6X2N1c3RvbV9maWVsZHNfcHJl ZnNfZGF0ZXBpY2tlcl91cmwiPkRhdGUgUGlja2VyIHBsdWdpbiBVUkw8L3RoPg0KICAgICAg PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJnbHpfY3VzdG9tX2ZpZWxkc19wcmVmc1tk YXRlcGlja2VyX3VybF0iIGlkPSJnbHpfY3VzdG9tX2ZpZWxkc19wcmVmc19kYXRlcGlja2Vy X3VybCIgdmFsdWU9InskY3VycmVudF9wcmVmZXJlbmNlc1snZGF0ZXBpY2tlcl91cmwnXX0i IC8+eyRkYXRlcGlja2VyX3VybF9lcnJvcn08L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0K ICAgICAgPHRoIHNjb3BlPSJyb3ciPjxsYWJlbCBmb3I9Imdsel9jdXN0b21fZmllbGRzX3By ZWZzX2RhdGVwaWNrZXJfZm9ybWF0Ij5EYXRlIGZvcm1hdDwvdGg+DQogICAgICA8dGQ+eyRk YXRlX2Zvcm1hdH08L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRoIHNjb3Bl PSJyb3ciPjxsYWJlbCBmb3I9Imdsel9jdXN0b21fZmllbGRzX3ByZWZzX2RhdGVwaWNrZXJf Zmlyc3RfZGF5Ij5GaXJzdCBkYXkgb2Ygd2VlazwvdGg+DQogICAgICA8dGQ+eyRmaXJzdF9k YXl9PC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0aCBzY29wZT0icm93Ij48 bGFiZWwgZm9yPSJnbHpfY3VzdG9tX2ZpZWxkc19wcmVmc19kYXRlcGlja2VyX3N0YXJ0X2Rh dGUiPlN0YXJ0IGRhdGU8L3RoPg0KICAgICAgPHRkPnskc3RhcnRfZGF0ZX08YnIgLz48ZW0g Y2xhc3M9ImdyZXkiPk1VU1QgYmUgdGhlIHNhbWUgYXMgIkRhdGUgZm9ybWF0IjwvZW0+PC90 ZD4NCiAgICA8L3RyPg0KDQogICAgPHRyIGNsYXNzPSJoZWFkaW5nIj4NCiAgICAgIDx0ZCBj b2xzcGFuPSIyIj48aDIgY2xhc3M9InByZWYtaGVhZGluZyBsZWZ0Ij5UaW1lIFBpY2tlcjwv aDI+IDxhIGhyZWY9Imh0dHA6Ly9sYWJzLnBlcmlmZXIuc2UvdGltZWRhdGVwaWNrZXIvIiB0 aXRsZT0ialF1ZXJ5IHRpbWUgcGlja2VyIiBjbGFzcz0icmlnaHQiPmpRdWVyeSB0aW1lUGlj a2VyPC9hPjwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGggc2NvcGU9InJv dyI+PGxhYmVsIGZvcj0iZ2x6X2N1c3RvbV9maWVsZHNfcHJlZnNfdGltZXBpY2tlcl91cmwi PlRpbWUgUGlja2VyIHBsdWdpbiBVUkw8L3RoPg0KICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0 ZXh0IiBuYW1lPSJnbHpfY3VzdG9tX2ZpZWxkc19wcmVmc1t0aW1lcGlja2VyX3VybF0iIGlk PSJnbHpfY3VzdG9tX2ZpZWxkc19wcmVmc190aW1lcGlja2VyX3VybCIgdmFsdWU9InskY3Vy cmVudF9wcmVmZXJlbmNlc1sndGltZXBpY2tlcl91cmwnXX0iIC8+eyR0aW1lcGlja2VyX3Vy bF9lcnJvcn08L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRoIHNjb3BlPSJy b3ciPjxsYWJlbCBmb3I9Imdsel9jdXN0b21fZmllbGRzX3ByZWZzX3RpbWVwaWNrZXJfc3Rh cnRfdGltZSI+U3RhcnQgdGltZTwvdGg+DQogICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQi IG5hbWU9Imdsel9jdXN0b21fZmllbGRzX3ByZWZzW3RpbWVwaWNrZXJfc3RhcnRfdGltZV0i IGlkPSJnbHpfY3VzdG9tX2ZpZWxkc19wcmVmc190aW1lcGlja2VyX3N0YXJ0X3RpbWUiIHZh bHVlPSJ7JGN1cnJlbnRfcHJlZmVyZW5jZXNbJ3RpbWVwaWNrZXJfc3RhcnRfdGltZSddfSIg Lz48L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRoIHNjb3BlPSJyb3ciPjxs YWJlbCBmb3I9Imdsel9jdXN0b21fZmllbGRzX3ByZWZzX3RpbWVwaWNrZXJfZW5kX3RpbWUi PkVuZCB0aW1lPC90aD4NCiAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZ2x6 X2N1c3RvbV9maWVsZHNfcHJlZnNbdGltZXBpY2tlcl9lbmRfdGltZV0iIGlkPSJnbHpfY3Vz dG9tX2ZpZWxkc19wcmVmc190aW1lcGlja2VyX2VuZF90aW1lIiB2YWx1ZT0ieyRjdXJyZW50 X3ByZWZlcmVuY2VzWyd0aW1lcGlja2VyX2VuZF90aW1lJ119IiAvPjwvdGQ+DQogICAgPC90 cj4NCiAgICA8dHI+DQogICAgICA8dGggc2NvcGU9InJvdyI+PGxhYmVsIGZvcj0iZ2x6X2N1 c3RvbV9maWVsZHNfcHJlZnNfdGltZXBpY2tlcl9zdGVwIj5TdGVwPC90aD4NCiAgICAgIDx0 ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZ2x6X2N1c3RvbV9maWVsZHNfcHJlZnNbdGlt ZXBpY2tlcl9zdGVwXSIgaWQ9Imdsel9jdXN0b21fZmllbGRzX3ByZWZzX3RpbWVwaWNrZXJf c3RlcCIgdmFsdWU9InskY3VycmVudF9wcmVmZXJlbmNlc1sndGltZXBpY2tlcl9zdGVwJ119 IiAvPjwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGggc2NvcGU9InJvdyI+ PGxhYmVsIGZvcj0iZ2x6X2N1c3RvbV9maWVsZHNfcHJlZnNfdGltZXBpY2tlcl9zdGVwIj5U aW1lIGZvcm1hdDwvdGg+DQogICAgICA8dGQ+eyRzaG93XzI0fTwvdGQ+DQogICAgPC90cj4N Cg0KICAgIDx0cj4NCiAgICAgIDx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0ibm9saW5lIj4NCiAg ICAgICAgPGlucHV0IGNsYXNzPSJwdWJsaXNoIiB0eXBlPSJzdWJtaXQiIG5hbWU9InNhdmUi IHZhbHVlPSJTYXZlIiAvPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJl dmVudCIgdmFsdWU9InBsdWdpbl9wcmVmcy5nbHpfY3VzdG9tX2ZpZWxkcyIgLz4NCiAgICAg IDwvdGQ+DQogICAgPC90cj4NCiAgPC90Ym9keT4NCjwvdGFibGU+DQpFT0Y7DQoNCiAgZWNo byAkb3V0Ow0KfSI7czo0OiJ0eXBlIjtzOjE6IjUiO3M6NToib3JkZXIiO3M6MToiNSI7czo1 OiJmbGFncyI7czoxOiIzIjtzOjQ6ImhlbHAiO3M6MzE1NDoiPGgxPmdsel9jdXN0b21fZmll bGRzLCB1bmxpbWl0ZWQgY3VzdG9tIGZpZWxkczwvaDE+CjxwPlRoaXMgcGx1Z2luIHByb3Zp ZGVzIHVubGltaXRlZCBjdXN0b20gZmllbGRzIGluIFRleHRwYXR0ZXJuLiBZb3UgY2FuIGNy ZWF0ZSBjdXN0b20gZmllbGRzIGFzIHNlbGVjdHMsIG11bHRpLXNlbGVjdHMsIGNoZWNrYm94 ZXMsIHJhZGlvIGJ1dHRvbnMgYW5kIHRleHRhcmVhcyAtIGFzIHdlbGwgYXMgdGhlIGRlZmF1 bHQgdGV4dCBpbnB1dCBmaWVsZHMuIFByZWRlZmluZSB2YWx1ZXMgY2FuIGJlIHNldCBmb3Ig Y3VzdG9tIGZpZWxkcyBhbmQgeW91IGNhbiBzZWxlY3QgYSBzaW5nbGUgZGVmYXVsdCB2YWx1 ZSAoc2VsZWN0cywgbXVsdGktc2VsZWN0cywgY2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9u cyBvbmx5KS48L3A+CjxwPjxzdHJvbmc+SWYgeW91IHdhbnQgdG8gc3VibWl0IGJ1ZyByZXBv cnRzIGFuZCBmZWF0dXJlIHJlcXVlc3RzLCBwbGVhc2UgdmlzaXQgPGEgaHJlZj0iaHR0cDov L2dpdGh1Yi5jb20vZ2VyaGFyZC9nbHpfY3VzdG9tX2ZpZWxkcyIgdGl0bGU9Imdsel9jdXN0 b21fZmllbGRzIG9uIEdpdEh1YiI+Z2x6X2N1c3RvbV9maWVsZHMgb24gR2l0SHViPC9hPjwv c3Ryb25nPi4gVGhlcmUgaXMgYWxzbyBhIGhhbmR5IHNlY3Rpb24gb24gPGEgaHJlZj0iaHR0 cDovL3dpa2kuZ2l0aHViLmNvbS9nZXJoYXJkL2dsel9jdXN0b21fZmllbGRzLyIgdGl0bGU9 Imdsel9jdXN0b21fZmllbGRzIHdpa2kiPmdsel9jdXN0b21fZmllbGRzIHRpcHMgYW5kIHRy aWNrczwvYT4uPC9wPgo8aDI+VGltZSBhbmQgZGF0ZSBwaWNrZXJzPC9oMj4KPHA+VGltZSBh bmQgZGF0ZSBwaWNrZXJzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHRvIHVzZS4gVG8g c2V0IHRoZSByZXF1aXJlZCBKYXZhU2NyaXB0IGFuZCBzdHlsaW5nIHByb3Blcmx5LCBwbGVh c2UgcmVmZXIgdG8gdGhlIDxzcGFuIGNsYXNzPSJpbmZvcm1hdGlvbiI+SU5TVEFMTDwvc3Bh bj4gZmlsZSB0aGF0IGNhbWUgd2l0aCB0aGlzIHBsdWdpbi48L3A+CjxoMj5DdXN0b20gc2Ny aXB0czwvaDI+CjxwPlRoaXMgaXMgYSByYXRoZXIgY29tcGxleCBhbmQgbG9uZyBzb3VnaHQt Zm9yIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHksIHBsZWFzZSByZWZlciB0byB0aGUgPHNwYW4g Y2xhc3M9ImluZm9ybWF0aW9uIj5teV9pbWFnZS5waHA8L3NwYW4+IGZpbGUgd2hpY2ggY29u dGFpbnMgaW5saW5lIGV4cGxhbmF0aW9ucyBvbiBob3cgdGhleSBzaG91bGQgYmUgdXNlZC4g VGhlIGZpbGUgY2FtZSB3aXRoIHRoZSBwbHVnaW4sIGluIHRoZSA8c3BhbiBjbGFzcz0iaW5m b3JtYXRpb24iPnNjcmlwdHMvZ2x6X2N1c3RvbV9maWVsZHM8L3NwYW4+IGZvbGRlci48L3A+ CjxoMj5EZWZhdWx0IHZhbHVlczwvaDI+CjxwPllvdSBjYW4gbm93IGRlZmluZSBhIHNpbmds ZSBkZWZhdWx0IHZhbHVlIGJ5IGFkZGluZyBjdXJseSBicmFja2V0cyBhcm91bmQgYSB2YWx1 ZSBsaWtlIHNvOiA8Y29kZT57ZGVmYXVsdCB2YWx1ZX08L2NvZGU+LjwvcD4KPGgyPlJhbmdl czwvaDI+CjxwPklmIHlvdSB3YW50IHRvIGRlZmluZSByYW5nZXMsIGNyZWF0ZSBhIG5ldyBj dXN0b20gZmllbGQgd2l0aCB0aGUgZm9sbG93aW5nIG5hbWUgZS5nLiA8Y29kZT5QcmljZSBy YW5nZSAmYW1wO3BvdW5kOyhhZnRlcik8L2NvZGU+LjwvcD4KPHVsPgogIDxsaT48Y29kZT5y YW5nZTwvY29kZT4gLSB0aGlzIGlzIHJlYWxseSBpbXBvcnRhbnQgYW5kIDxzdHJvbmcgY2xh c3M9Indhcm5pbmciPm11c3Q8L3N0cm9uZz4gYmUgcHJlc2VudCBmb3IgdGhlIHJhbmdlIHRv IHdvcmsgY29ycmVjdGx5LjwvbGk+CiAgPGxpPjxjb2RlPiZhbXA7cG91bmQ7PC9jb2RlPiAt IGRvbid0IHVzZSBzdHJhaWdodCBzeW1ib2xzIChsaWtlIDxjb2RlPiZldXJvOzwvY29kZT4g b3IgPGNvZGU+JnBvdW5kOzwvY29kZT4pLCBpbnN0ZWFkIHVzZSBlbnRpdHkgb25lcyBlLmcu IDxjb2RlPiZhbXA7ZXVybzs8L2NvZGU+IGFuZCA8Y29kZT4mYW1wO3BvdW5kOzwvY29kZT4g YXJlIHZhbGlkIHN5bWJvbHMuPC9saT4KICA8bGk+PGNvZGU+KGFmdGVyKTwvY29kZT4gLSBk b24ndCBsZWF2ZSBhbnkgc3BhY2VzIGFmdGVyIGUuZy4gJCBhbmQgKGFmdGVyKS4gVGhpcyBi YXNpY2FsbHkgc2F5cyB3aGVyZSB0byBhZGQgdGhlIG1lYXN1cmluZyB1bml0IChiZSBpdCBh IGN1cnJlbmN5IG9yIHNvbWV0aGluZyBsaWtlIG08c3VwPjM8L3N1cD4gZXRjLikgLSA8Y29k ZT4oYmVmb3JlKTwvY29kZT4gaXMgZGVmYXVsdC48L2xpPgo8L3VsPgo8cD5SYW5nZXMgYXJl IGRlZmluZWQgMTAtMjAsIDIxLTMwIGV0Yy4gKG5vIG1lYXN1cmluZyB1bml0cyAtIHRoZXkg Z2V0IHB1bGxlZCBmcm9tIHRoZSBjdXN0b20gc2V0IG5hbWUpLjwvcD4KPGgyPlN1cHBvcnQ8 L2gyPgo8cD5JZiBhbnl0aGluZyBnb2VzIHdyb25nIG9yIHlvdSBkaXNjb3ZlciBhIGJ1Zzo8 L3A+CjxvbD4KICA8bGk+cmVwb3J0IGFuIGlzc3VlIG9uIDxhIGhyZWY9Imh0dHA6Ly9naXRo dWIuY29tL2dlcmhhcmQvZ2x6X2N1c3RvbV9maWVsZHMvaXNzdWVzIiB0aXRsZT0iZ2x6X2N1 c3RvbV9maWVsZHNfcHVibGljIGlzc3VlcyIgcmVsPSJleHRlcm5hbCI+R2l0SHViPC9hPi48 L2xpPgogIDxsaT5sb29rIGZvciBoZWxwIGluIHRoZSBUZXh0cGF0dGVyYiBmb3J1bSwgPGEg aHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTIz OTk2IiByZWw9ImV4dGVybmFsIj5nbHpfY3VzdG9tX2ZpZWxkcyB0aHJlYWQ8L2E+LjwvbGk+ CiAgPGxpPnBpbmcgbWUgdmlhIDxhIGhyZWY9Imh0dHA6Ly93d3cudHdpdHRlci5jb20vZ2Vy aGFyZGxhenUiIHJlbD0iZXh0ZXJuYWwiPlR3aXR0ZXI8L2E+LiBJJ20gdXNpbmcgaXQgYXJv dW5kIHRoZSBjbG9jaywgaXQncyBncmVhdCBmb3Igc2hvcnQgbWVzc2FnZXMhPC9saT4KICA8 bGk+ZHJvcCBhIGxpbmUgdG8gPGEgaHJlZj0ibWFpbHRvOmdlcmhhcmRAbGF6dS5jby51az9T dWJqZWN0Omdsel9jdXN0b21fZmllbGRzIG5lZWRzIHlvdXIgYXR0ZW50aW9uIiByZWw9ImV4 dGVybmFsIj5nZXJoYXJkQGxhenUuY28udWs8L2E+IChzb21ldGltZXMgdGhpbmdzIGNhbiBn ZXQgcmVhbGx5IGhlY3RpYyBvbiBteSBlbmQsIHBsZWFzZSBiZSBwYXRpZW50KS48L2xpPgo8 L29sPiI7czozOiJtZDUiO3M6MzI6ImFiOGJmYTY4NzY0OGNkYTg2YjBkNDA1YWYxYzY3Nzgz Ijt9