<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT mincmsversion (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>ImageCompressor</name>
	<version>0.9.2</version>
  <mincmsversion>1.9</mincmsversion>
	<help><![CDATA[LS1BZGQgTWUgLSBtb2R1bGU6SW1hZ2VDb21wcmVzc29yIHN0cmluZzpoZWxwLS08aDM+UGFyYW1ldGVyPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gRGllc2VyIFBhcmFtZXRlciBsZWd0IGRpZSBTcHJhY2hlIGZlc3QsIGRpZSB2b20gTW9kdWwgZiZ1dW1sO3IgZGllIEF1c2dhYmUgYXVmIGRlciBXZWJzZWl0ZSB2ZXJ3ZW5kZXQgd2lyZC4gRGllcyB3aXJkIGplZG9jaCBuaWNodCB2b24gYWxsZW4gTW9kdWxlbiB1bnRlcnN0JnV1bWw7dHp0IGJ6dy4gYmVuJm91bWw7dGlndC48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0b3I6IEpTICZsdDtoaUBqb25hdGhhbnNjaG1pZC5kZSZndDs8YnIgLz48YnIgLz5WZXJzaW9uIDogMC45LjI8YnIgLz4=]]></about>
	<description><![CDATA[Reduces file size of all images uploaded to the Image Manager to improve website performance using the smush.it-API.]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.ajax.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmKGlzc2V0KCRwYXJhbXNbJ3Vzcl9mdW5jdGlvbiddKSl7DQoJJHVzcl9wYXJhbXMgPSBpc3NldCgkcGFyYW1zWydwYXJhbXMnXSkgPyBleHBsb2RlKCcsJywgJHBhcmFtc1sncGFyYW1zJ10pIDogJyc7DQoJaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7DQoJaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVCIpOw0KCWVjaG8gY2FsbF91c2VyX2Z1bmNfYXJyYXkoYXJyYXkoJHRoaXMsICRwYXJhbXNbJ3Vzcl9mdW5jdGlvbiddKSwgJHVzcl9wYXJhbXMpOw0KCWV4aXQ7DQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1vZHVsZTogSW1hZ2VDb21wcmVzc29yDQojIFZlcnNpb246IDAuOSwgSlMNCiMgTWV0aG9kOiBEZWZhdWx0YWRtaW4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwOCBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9pbWFnZWNvbXByZXNzb3IvDQojDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEltYWdlIENvbXByZXNzb3InKSkNCglyZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7DQoNCmlmKCFlbXB0eSgkcGFyYW1zWydhY3RpdmVfdGFiJ10pKQ0KCSR0YWIgPSAkcGFyYW1zWydhY3RpdmVfdGFiJ107DQplbHNlDQoJJHRhYiA9ICcnOw0KDQokdGFiX2hlYWRlciA9ICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKSAuDQokdGhpcy0+U2V0VGFiSGVhZGVyKCdpbWFnZWxpc3QnLCAkdGhpcy0+TGFuZygndGl0bGVfaW1hZ2VsaXN0JyksKCdpbWFnZWxpc3QnID09ICR0YWIpP3RydWU6ZmFsc2UpOw0KDQovKiR0YWJfaGVhZGVyIC49ICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3ByZWZzJywgJHRoaXMtPkxhbmcoJ3RpdGxlX21vZF9wcmVmcycpLCgncHJlZnMnID09ICR0YWIpP3RydWU6ZmFsc2UpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydF9wcmVmc190YWInLCAkdGhpcy0+U3RhcnRUYWIoJ3ByZWZzJywgJHBhcmFtcykpOyovDQoNCmVjaG8gJHRhYl9oZWFkZXIuJHRoaXMtPkVuZFRhYkhlYWRlcnMoKS4kdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7DQplY2hvICR0aGlzLT5TdGFydFRhYignaW1hZ2VsaXN0JywgJHBhcmFtcyk7DQpyZXF1aXJlX29uY2UoJ2Z1bmN0aW9uLmFkbWluX2ltYWdlbGlzdF90YWIucGhwJyk7DQplY2hvICR0aGlzLT5FbmRUYWIoKTsNCg0KZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOw==]]></data>
	</file>
	<file>
	  <filename>/function.admin_imagelist_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsNCiRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsNCiRhZG1pbnRoZW1lID0mICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXTsNCg0KJGZpbGVzID0gZ2V0X3JlY3Vyc2l2ZV9maWxlX2xpc3QoJGNvbmZpZ1snaW1hZ2VfdXBsb2Fkc19wYXRoJ10sIGFycmF5KCdedGh1bWJfLiskJyksIC0xLCAnRklMRVMnKTsNCmZvcmVhY2goJGZpbGVzIGFzICR2YWx1ZSl7DQoJaWYoISR0aGlzLT5pc19pbWFnZSgkdmFsdWUpKSBjb250aW51ZTsNCgkkcGF0aCA9IHN0cl9yZXBsYWNlKCRjb25maWdbJ2ltYWdlX3VwbG9hZHNfcGF0aCddLicvJywgJycsICR2YWx1ZSk7DQoJJGZpbGVwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCR2YWx1ZSkpLDMpOw0KCSRlbnRyeSA9IG5ldyBTdGRDbGFzczsNCgkkZW50cnktPmljb24gPSAkYWRtaW50aGVtZS0+RGlzcGxheUltYWdlKCdpY29ucy9maWxldHlwZXMvZnBhaW50LmdpZicpOw0KCSRlbnRyeS0+ZmlsZW5hbWUgPSAkcGF0aDsNCgkkZW50cnktPmZpbGVwZXJtcyA9IGlzX3dyaXRhYmxlKCR2YWx1ZSkgPyAkZmlsZXBlcm1zIDogc3ByaW50ZignPHNwYW4gc3R5bGU9ImNvbG9yOiNmMDAiPiVzPC9zcGFuPicsICRmaWxlcGVybXMpOw0KCSRlbnRyeS0+ZmlsZXNpemUgPSAkdGhpcy0+Zm9ybWF0X2J5dGVzKGZpbGVzaXplKCR2YWx1ZSkpOw0KCSRlbnRyeS0+ZmlsZXRpbWUgPSBmaWxlbXRpbWUoJHZhbHVlKTsNCgkkZW50cnktPmZpbGVkYXRlID0gZGF0ZSgkdGhpcy0+TGFuZygnZmlsZWRhdGVmb3JtYXQnKSwgJGVudHJ5LT5maWxldGltZSk7DQoJJGVudHJ5LT51cmwgPSAkY29uZmlnWydpbWFnZV91cGxvYWRzX3VybCddLicvJy4kcGF0aDsNCg0KCSRmaWxlbGlzdFtdID0gJGVudHJ5Ow0KfQ0KaWYoY291bnQoJGZpbGVsaXN0KSA9PSAwKQ0KCWVjaG8gJHRoaXMtPkxhbmcoJ25vZmlsZXMnKTsNCmVsc2V7CQ0KCXVzb3J0KCRmaWxlbGlzdCwgYXJyYXkoJHRoaXMsICdzb3J0X2ZpbGVzX2J5X2RhdGUnKSk7DQoJDQoJJHNtYXJ0eS0+YXNzaWduKCdmaWxlcycsIGFycmF5X3ZhbHVlcygkZmlsZWxpc3QpKTsNCgkkc21hcnR5LT5hc3NpZ24oJ2ZpbGVuYW1ldGV4dCcsICR0aGlzLT5MYW5nKCdmaWxlbmFtZXRleHQnKSk7DQoJJHNtYXJ0eS0+YXNzaWduKCdmaWxlcGVybXN0ZXh0JywgJHRoaXMtPkxhbmcoJ2ZpbGVwZXJtc3RleHQnKSk7DQoJJHNtYXJ0eS0+YXNzaWduKCdmaWxlc2l6ZXRleHQnLCAkdGhpcy0+TGFuZygnZmlsZXNpemV0ZXh0JykpOw0KCSRzbWFydHktPmFzc2lnbignZmlsZWRhdGV0ZXh0JywgJHRoaXMtPkxhbmcoJ2ZpbGVkYXRldGV4dCcpKTsNCgkkc21hcnR5LT5hc3NpZ24oJ3NtdXNoaXR0ZXh0JywgJHRoaXMtPkxhbmcoJ3NtdXNoaXR0ZXh0JykpOw0KCSRzbWFydHktPmFzc2lnbignY2hlY2tzYXZpbmdzJywgJHRoaXMtPkxhbmcoJ2NoZWNrc2F2aW5ncycpKTsNCgkkc21hcnR5LT5hc3NpZ24oJ2NoZWNraW5ndGV4dCcsICR0aGlzLT5MYW5nKCdjaGVja2luZycpKTsNCgkkc21hcnR5LT5hc3NpZ24oJ2lucXVldWVfc211c2h0ZXh0JywgJHRoaXMtPkxhbmcoJ2lucXVldWVfc211c2gnKSk7DQoJJHNtYXJ0eS0+YXNzaWduKCdpbnF1ZXVlX2NoZWNrdGV4dCcsICR0aGlzLT5MYW5nKCdpbnF1ZXVlX2NoZWNrJykpOw0KCQ0KCSRzbWFydHktPmFzc2lnbignYWRtaW5kaXInLCAkY29uZmlnWydyb290X3VybCddLicvJy4kY29uZmlnWydhZG1pbl9kaXInXSk7DQoJJHNtYXJ0eS0+YXNzaWduKCdpbmNkaXInLCAkY29uZmlnWydyb290X3VybCddLicvbW9kdWxlcy9JbWFnZUNvbXByZXNzb3IvaW5jLycpOw0KCSRzbWFydHktPmFzc2lnbigndXNlcmtleScsICRfU0VTU0lPTltDTVNfVVNFUl9LRVldKTsNCgkNCgllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2ltYWdlbGlzdF90YWIudHBsJyk7DQp9]]></data>
	</file>
	<file>
	  <filename>/ImageCompressor.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogSW1hZ2VDb21wcmVzc29yIGNsYXNzDQogKg0KICogQGF1dGhvciBKb25hdGhhbiBTY2htaWQNCiAqIEBzaW5jZSAwLjkNCiAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMTIgJA0KICogQG1vZGlmaWVkYnkgJExhc3RDaGFuZ2VkQnk6IGZvYWx5KiAkDQogKiBAbGFzdG1vZGlmaWVkICREYXRlOiAyMDExLTAyLTAxIDExOjU2OjE2ICswMTAwIChUdWUsIDAxIEZlYiAyMDExKSAkDQogKiBAbGljZW5zZSBHUEwNCiAqIFRPRE86DQogKiAtIGJyZWFrIGNsaWVudCBjYWNoZSBmb3Igd2Vid29ya2Vycw0KICogLSBhcHBlYXJhbmNlIGluIGllIDctOA0KICogLSBvcHRpb24gd2hldGhlciBnaWZzIHNoYWxsIGJlIGNvbnZlcnRlZCBvciBub3QNCiAqKi8NCmNsYXNzIEltYWdlQ29tcHJlc3NvciBleHRlbmRzIENNU01vZHVsZQ0Kew0KCWZ1bmN0aW9uIEltYWdlQ29tcHJlc3Nvcigpew0KCQlwYXJlbnQ6OkNNU01vZHVsZSgpOw0KDQoJCWlmICghZnVuY3Rpb25fZXhpc3RzKCdqc29uX2RlY29kZScpKQ0KCQkJcmVxdWlyZV9vbmNlKCdKU09OL0pTT04ucGhwJyk7DQoNCgkJZGVmaW5lKCdTTVVTSElUX0hPU1QnLCAnaHR0cDovL3d3dy5zbXVzaGl0LmNvbS8nKTsNCgkJZGVmaW5lKCdTTVVTSElUX0FQSV9VUkwnLCAnaHR0cDovL3dzMS5hZHEuYWM0LnlhaG9vLmNvbS95c211c2guaXQvd3MucGhwP2ltZz0lcycpOw0KCQlkZWZpbmUoJ1NNVVNISVRfVUEnLCAnQ01TbXMgSW1hZ2UgQ29tcHJlc3Nvci8wLjkgKGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvaW1hZ2Vjb21wcmVzc29yKScpOw0KCX0NCglmdW5jdGlvbiBHZXROYW1lKCl7DQoJCXJldHVybiAnSW1hZ2VDb21wcmVzc29yJzsNCgl9DQoJZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCl7DQoJCXJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7DQoJfQ0KCWZ1bmN0aW9uIEdldFZlcnNpb24oKXsNCgkJcmV0dXJuICcwLjkuMic7DQoJfQ0KCWZ1bmN0aW9uIEdldEhlbHAoKXsNCgkJcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7DQoJfQ0KCWZ1bmN0aW9uIEdldEF1dGhvcigpew0KCQlyZXR1cm4gJ0pTJzsNCgl9DQoJZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKXsNCgkJcmV0dXJuICdoaUBqb25hdGhhbnNjaG1pZC5kZSc7DQoJfQ0KCWZ1bmN0aW9uIEdldENoYW5nZUxvZygpew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOw0KCX0NCglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCWZ1bmN0aW9uIEhhc0FkbWluKCl7DQogICAgCXJldHVybiB0cnVlOw0KCX0NCglmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCl7DQoJCXJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsNCgl9DQoJZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCl7DQoJCXJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgSW1hZ2UgQ29tcHJlc3NvcicpOw0KCX0NCglmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKXsNCgkJcmV0dXJuIGFycmF5KCk7DQoJfQ0KCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCl7DQoJCXJldHVybiAiMS45IjsNCgl9DQoJZnVuY3Rpb24gTWF4aW11bUNNU1ZlcnNpb24oKXsNCgkJcmV0dXJuICIyLjAiOw0KCX0NCglmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKXsNCgkJcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOw0KCX0NCglmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsNCgl9DQoJZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsNCgl9DQoJZnVuY3Rpb24gZm9ybWF0X2J5dGVzKCRzaXplKSB7DQoJCSR1bml0cyA9IGFycmF5KCcgQicsICcgS0InLCAnIE1CJywgJyBHQicsICcgVEInKTsNCgkJZm9yICgkaSA9IDA7ICRzaXplID49IDEwMjQgJiYgJGkgPCA0OyAkaSsrKSAkc2l6ZSAvPSAxMDI0Ow0KCQlyZXR1cm4gcm91bmQoJHNpemUsIDEpLiR1bml0c1skaV07DQoJfQ0KCWZ1bmN0aW9uIHNtdXNoaXRfcG9zdCgkZmlsZV91cmwpew0KCQkkdXJpID0gc3ByaW50ZihTTVVTSElUX0FQSV9VUkwsIHVybGVuY29kZSgkZmlsZV91cmwpKTsNCgkJJGYgPSBmb3BlbigkdXJpLCAncicpOw0KCQkkcmVzcG9uc2UgPSBmZ2V0cygkZik7DQoJCWZjbG9zZSgkZik7DQoNCgkJaWYoJHJlc3BvbnNlID09ICdudWxsJykNCgkJCXJldHVybiBmYWxzZTsNCg0KCQlpZihmdW5jdGlvbl9leGlzdHMoJ2pzb25fZGVjb2RlJykpDQoJCQkkcmVzcG9uc2UgPSBqc29uX2RlY29kZSgkcmVzcG9uc2UpOw0KCQllbHNlew0KCQkJJGpzb24gPSBuZXcgU2VydmljZXNfSlNPTigpOw0KCQkJJHJlc3BvbnNlID0gJGpzb24tPmRlY29kZSgkcmVzcG9uc2UpOw0KCQl9DQoNCgkJcmV0dXJuICRyZXNwb25zZTsNCgl9DQoJZnVuY3Rpb24gZ2V0X2NvbXByZXNzaW9uX3JhdGUoJHBhdGgpew0KCQkkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7DQoJCSRkYXRhID0gJHRoaXMtPnNtdXNoaXRfcG9zdCgkY29uZmlnWydpbWFnZV91cGxvYWRzX3VybCddLicvJy4kcGF0aCk7DQoJCWlmKCEkZGF0YSkNCgkJCXJldHVybiAkdGhpcy0+TGFuZygnTi9BJyk7DQoNCgkJaWYoaW50dmFsKCRkYXRhLT5kZXN0X3NpemUpID09IC0xIHx8IGludHZhbCgkZGF0YS0+cGVyY2VudCkgPT0gMCkNCgkJCXJldHVybiBzcHJpbnRmKCc8c3BhbiBjbGFzcz0ibm9zYXZpbmdzIj4lczwvc3Bhbj4nLCAkdGhpcy0+TGFuZygnbm9zYXZpbmdzJykpOw0KDQoJCSRyZXR1cm4gPSBzcHJpbnRmKCR0aGlzLT5MYW5nKCdjb3VsZHNhdmUnKSwgJGRhdGEtPnBlcmNlbnQpLic8YnIgLz4nOw0KCQlpZihpc193cml0YWJsZSgkY29uZmlnWydpbWFnZV91cGxvYWRzX3BhdGgnXS4nLycuJHBhdGgpKQ0KCQkJJHJldHVybiAuPSBzcHJpbnRmKCc8YSBocmVmPSIjIiBjbGFzcz0ibWFzc2NsaWNrX3NtdXNoIiBvbmNsaWNrPSJzbXVzaChcJyVzLCVzXCcsICQodGhpcykucGFyZW50KCkpO3JldHVybiBmYWxzZTsiPiVzPC9hPicsIHVybGVuY29kZSh1cmxkZWNvZGUoJGRhdGEtPmRlc3QpKSwgJGRhdGEtPmRlc3Rfc2l6ZSwgJHRoaXMtPkxhbmcoJ2NvbXByZXNzJykpOw0KCQllbHNlDQoJCQkkcmV0dXJuIC49IHNwcmludGYoJzxzcGFuIGNsYXNzPSJub3R3cml0YWJsZSI+JXM8L3NwYW4+JywgJHRoaXMtPkxhbmcoJ25vdHdyaXRhYmxlJykpOw0KCQlyZXR1cm4gJHJldHVybjsNCgl9DQoJZnVuY3Rpb24gaXNfaW1hZ2UoJHBhdGgpew0KCQkkaW5mbyA9IGV4aWZfaW1hZ2V0eXBlKCRwYXRoKTsNCgkJaWYoJGluZm8gJiAoSU1BR0VUWVBFX0dJRiB8IElNQUdFVFlQRV9KUEVHIHwgSU1BR0VUWVBFX1BORykpDQoJCQlyZXR1cm4gdHJ1ZTsNCgkJZWxzZQ0KCQkJcmV0dXJuIGZhbHNlOw0KCX0NCglmdW5jdGlvbiBzbXVzaCgkdXJsLCAkc2l6ZSl7DQoJCSRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsNCgkJJHVybCA9IHVybGRlY29kZSgkdXJsKTsNCgkJaWYoc3RycG9zKCR1cmwsICdodHRwOi8veXNtdXNoaXQuemVuZnMuY29tL3Jlc3VsdHMnKSAhPT0gMCkNCgkJCXJldHVybiAkdGhpcy0+TGFuZygnaW52YWxpZHVybCcpOw0KDQoJCSRmID0gZm9wZW4oJHVybCwgJ3InKTsNCgkJJHNhdmVwYXRoID0gJGNvbmZpZ1snaW1hZ2VfdXBsb2Fkc19wYXRoJ10ucHJlZ19yZXBsYWNlKCcjXmh0dHA6Ly95c211c2hpdC4rPy9pbWFnZXMjJywgJycsICR1cmwpOw0KCQkkZjIgPSBmb3Blbigkc2F2ZXBhdGgsICd3Jyk7DQoJCXdoaWxlKCFmZW9mKCRmKSkNCgkJCWZwdXRzKCRmMiwgZmdldHMoJGYpKTsNCg0KCQlmY2xvc2UoJGYpOw0KCQlmY2xvc2UoJGYyKTsNCg0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2RvbmUnKTsNCgl9DQoJZnVuY3Rpb24gc29ydF9maWxlc19ieV9kYXRlKCRhLCAkYil7DQoJCWlmKCRhLT5maWxldGltZSA9PSAkYi0+ZmlsZXRpbWUpDQoJCQlyZXR1cm4gMDsNCgkNCgkJcmV0dXJuICRhLT5maWxldGltZSA+ICRiLT5maWxldGltZSA/IC0xIDogMTsNCgl9DQp9DQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/inc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/inc/ajax.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dmFyIHdvcmtlckNvdW50ID0gMDsNCnZhciBxdWV1ZSA9IG5ldyBBcnJheSgpOw0KdmFyIHF1ZXVlTGVuZ3RoID0gMDsNCnZhciBvbGRTdGF0ZSA9IG5ldyBBcnJheSgpOw0KdmFyIHN1cHBvcnRzV2ViV29ya2VycyA9ICEhd2luZG93LldvcmtlcjsNCg0KZnVuY3Rpb24gYWpheF9mdW5jdGlvbih1c3JfZnVuY3Rpb24sIHBhcmFtcywgY29udGFpbmVyKXsNCglpZih3b3JrZXJDb3VudCA8IDgpIHsNCgkJc2V0X3F1ZXVlKHVzcl9mdW5jdGlvbiwgcGFyYW1zLCBjb250YWluZXIpOw0KCQlpZihzdXBwb3J0c1dlYldvcmtlcnMpDQoJCQl3ZWJ3b3JrZXIoKTsNCgkJZWxzZQ0KCQkJYWpheHdvcmtlcigpOw0KCX0gZWxzZSB7DQoJCXNldF9xdWV1ZSh1c3JfZnVuY3Rpb24sIHBhcmFtcywgY29udGFpbmVyKTsNCgl9DQoJcmV0dXJuIHRydWU7DQp9DQpmdW5jdGlvbiBnZXRfY29tcHJlc3Npb25fcmF0ZShwYXRoLCBjb250YWluZXIpew0KCWFqYXhfZnVuY3Rpb24oJ2dldF9jb21wcmVzc2lvbl9yYXRlJywgcGF0aCwgY29udGFpbmVyKTsNCn0NCmZ1bmN0aW9uIHNtdXNoKHBhcmFtcywgY29udGFpbmVyKXsNCglhamF4X2Z1bmN0aW9uKCdzbXVzaCcsIHBhcmFtcywgY29udGFpbmVyKTsNCn0NCmZ1bmN0aW9uIHNob3dMb2FkSW5mbyhjb250YWluZXIpew0KCWNvbnRhaW5lci5odG1sKCc8c3BhbiBjbGFzcz0iY2hlY2tpbmciPicrTEFOR19DSEVDS0lORysnPC9zcGFuPicpOw0KfQ0KDQpmdW5jdGlvbiBtYXNzX2NvbXByZXNzX2NoZWNrKCkgew0KCSQoJy5tYXNzY2xpY2snKS5lYWNoKGZ1bmN0aW9uKGluZGV4KXsNCgkJJCh0aGlzKS5jbGljaygpOw0KCX0pOw0KfQ0KDQpmdW5jdGlvbiBtYXNzX3NtdXNoKCkgew0KCSQoJy5tYXNzY2xpY2tfc211c2gnKS5lYWNoKGZ1bmN0aW9uKGluZGV4KXsNCgkJJCh0aGlzKS5jbGljaygpOw0KCX0pOw0KfQ0KDQpmdW5jdGlvbiBzdG9wX3F1ZXVlKCkgew0KCXF1ZXVlID0gbmV3IEFycmF5KCk7DQoJJCgnLnF1ZXVlJykuZWFjaChmdW5jdGlvbihpbmRleCkgew0KCQkkKHRoaXMpLnBhcmVudCgpLmh0bWwob2xkU3RhdGVbJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCcuZmlsZScpLmh0bWwoKV0pOw0KCX0pOw0KfQ0KDQpmdW5jdGlvbiBzZXRfcXVldWUodXNyX2Z1bmN0aW9uLCBwYXJhbXMsIGNvbnRhaW5lcikgew0KCXF1ZXVlTGVuZ3RoID0gcXVldWUubGVuZ3RoOw0KCXF1ZXVlW3F1ZXVlTGVuZ3RoXSA9IG5ldyBBcnJheSgpOw0KCXF1ZXVlW3F1ZXVlTGVuZ3RoXVsnZnVuYyddID0gdXNyX2Z1bmN0aW9uOw0KCXF1ZXVlW3F1ZXVlTGVuZ3RoXVsncGFyYSddID0gcGFyYW1zOw0KCXF1ZXVlW3F1ZXVlTGVuZ3RoXVsnZWxlbSddID0gY29udGFpbmVyOw0KCW9sZFN0YXRlW2NvbnRhaW5lci5wYXJlbnQoKS5maW5kKCIuZmlsZSIpLmh0bWwoKV0gPSBjb250YWluZXIuaHRtbCgpOw0KCWlmKHVzcl9mdW5jdGlvbiA9PSAnZ2V0X2NvbXByZXNzaW9uX3JhdGUnKSB7DQoJCWNvbnRhaW5lci5odG1sKCc8c3BhbiBjbGFzcz0icXVldWUiPicrTEFOR19JTlFVRVVFX0NIRUNLKyc8L3NwYW4+Jyk7DQoJfSBlbHNlIGlmKHVzcl9mdW5jdGlvbiA9PSAnc211c2gnKSB7DQoJCWNvbnRhaW5lci5odG1sKCc8c3BhbiBjbGFzcz0icXVldWUiPicrTEFOR19JTlFVRVVFX1NNVVNIKyc8L3NwYW4+Jyk7DQoJfQ0KfQ0KDQpmdW5jdGlvbiB3ZWJ3b3JrZXIoKSB7DQoJcXVldWVMZW5ndGggPSBxdWV1ZS5sZW5ndGg7DQoJaWYocXVldWVMZW5ndGggIT0gMCkgew0KCQl2YXIgYWN0aXZlcXVldWVtZW1iZXIgPSBxdWV1ZS5zaGlmdCgpOw0KCQl2YXIgd29ya2VyID0gbmV3IFdvcmtlcihDTVNfSU5DX0RJUisnd29ya2VyLmpzJyk7DQoJCXNob3dMb2FkSW5mbyhhY3RpdmVxdWV1ZW1lbWJlclsnZWxlbSddKTsNCgkJLy8gVHJpZ2dlcmVkIGJ5IHBvc3RNZXNzYWdlIGluIHRoZSBXZWIgV29ya2VyDQoJCW1hY3Q6ICdJbWFnZUNvbXByZXNzb3IsbTFfLGFqYXgsMCcsDQoJCXdvcmtlci5wb3N0TWVzc2FnZShlbmNvZGVVUkkoQ01TX0FETUlOX0RJUisiL21vZHVsZWludGVyZmFjZS5waHA/cG9wdXA9MSZtMV91c3JfZnVuY3Rpb249IithY3RpdmVxdWV1ZW1lbWJlclsnZnVuYyddKyImYW1wO20xX3BhcmFtcz0iK2FjdGl2ZXF1ZXVlbWVtYmVyWydwYXJhJ10rIiZzaG93dGVtcGxhdGU9ZmFsc2Umc3BfPSIrQ01TX1VTRVJfS0VZKyImbWFjdD1JbWFnZUNvbXByZXNzb3IsbTFfLGFqYXgsMCIpKTsNCgkJd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHsNCgkJCWFjdGl2ZXF1ZXVlbWVtYmVyWydlbGVtJ10uaHRtbChldnQuZGF0YSk7DQoJCQl3b3JrZXJDb3VudCA9IHdvcmtlckNvdW50IC0gMTsNCgkJCXdlYndvcmtlcigpOw0KCQl9DQoJCXdvcmtlci5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkgew0KCQkJYWN0aXZlcXVldWVtZW1iZXJbJ2VsZW0nXS5odG1sKGV2dC5kYXRhKTsNCgkJCXdvcmtlckNvdW50ID0gd29ya2VyQ291bnQgLSAxOw0KCQkJd2Vid29ya2VyKCk7DQoJCX0NCgkJd29ya2VyQ291bnQgPSB3b3JrZXJDb3VudCArIDE7DQoJfQ0KfQ0KZnVuY3Rpb24gYWpheHdvcmtlcigpew0KCXF1ZXVlTGVuZ3RoID0gcXVldWUubGVuZ3RoOw0KCWlmKHF1ZXVlTGVuZ3RoICE9IDApIHsNCgkJdmFyIGFjdGl2ZXF1ZXVlbWVtYmVyID0gcXVldWUuc2hpZnQoKTsNCgkJc2hvd0xvYWRJbmZvKGFjdGl2ZXF1ZXVlbWVtYmVyWydlbGVtJ10pOw0KCQkkLnBvc3QoQ01TX0FETUlOX0RJUisiL21vZHVsZWludGVyZmFjZS5waHAiLCB7IA0KCQkJbWFjdDogJ0ltYWdlQ29tcHJlc3NvcixtMV8sYWpheCwwJywNCgkJCXNwXzogQ01TX1VTRVJfS0VZLA0KCQkJbTFfdXNyX2Z1bmN0aW9uOiBhY3RpdmVxdWV1ZW1lbWJlclsnZnVuYyddLA0KCQkJc2hvd3RlbXBsYXRlOiBmYWxzZSwNCgkJCW0xX3BhcmFtczogYWN0aXZlcXVldWVtZW1iZXJbJ3BhcmEnXQ0KCQl9LA0KCQlmdW5jdGlvbihkYXRhKXsNCgkJCWFjdGl2ZXF1ZXVlbWVtYmVyWydlbGVtJ10uaHRtbChkYXRhKTsNCgkJCXdvcmtlckNvdW50ID0gd29ya2VyQ291bnQgLSAxOw0KCQkJYWpheHdvcmtlcigpOw0KCQl9KTsNCgkJd29ya2VyQ291bnQgPSB3b3JrZXJDb3VudCArIDE7DQoJfQ0KfQ==]]></data>
	</file>
	<file>
	  <filename>/inc/imagecompressor.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I2ZpbGVsaXN0X2ltYWdlY29tcHJlc3NvciBhew0KCXRleHQtZGVjb3JhdGlvbjpub25lOw0KfQ0KI2ZpbGVsaXN0X2ltYWdlY29tcHJlc3NvciBhOmhvdmVyew0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7DQp9DQojZmlsZWxpc3RfaW1hZ2Vjb21wcmVzc29yIC5ub3R3cml0YWJsZXsNCgljb2xvcjojZjAwOw0KfQ0KI2ZpbGVsaXN0X2ltYWdlY29tcHJlc3NvciAubWFzc2NsaWNrX3NtdXNoew0KCWZvbnQtd2VpZ2h0OmJvbGQ7DQp9DQojZmlsZWxpc3RfaW1hZ2Vjb21wcmVzc29yIC5xdWV1ZSwNCiNmaWxlbGlzdF9pbWFnZWNvbXByZXNzb3IgLm5vc2F2aW5nc3sNCgljb2xvcjojOTk5Ow0KfQ0KI2ZpbGVsaXN0X2ltYWdlY29tcHJlc3NvciAuY2hlY2tpbmd7DQoJY29sb3I6IzAwMDBmZjsNCn0=]]></data>
	</file>
	<file>
	  <filename>/inc/worker.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVHJpZ2dlcmVkIGJ5IHBvc3RNZXNzYWdlIGluIHRoZSBwYWdlDQpvbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7DQoJdmFyIHNlcnZpY2VVcmwgPSBkZWNvZGVVUkkoZXZ0LmRhdGEpOw0KCXNlcnZpY2VVcmwgPSBzZXJ2aWNlVXJsLnJlcGxhY2UoIiZhbXA7IiwgIiYiKTsNCgl2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQoJaWYocmVxKXsNCgkJcmVxLm9wZW4oJ0dFVCcsIHNlcnZpY2VVcmwsIGZhbHNlKTsNCgkJcmVxLnNldFJlcXVlc3RIZWFkZXIoJ1gtUElOR09USEVSJywgJ3Bpbmdwb25nJyk7DQoJCXJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7DQoJCXJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsNCgkJCWlmIChyZXEucmVhZHlTdGF0ZT09NCAmJiByZXEuc3RhdHVzPT0yMDApIHsNCgkJCQlwb3N0TWVzc2FnZShyZXEucmVzcG9uc2VUZXh0KTsNCgkJCX0gZWxzZSBpZihyZXEucmVhZHlTdGF0ZT09NCAmJiByZXEuc3RhdHVzICE9IDIwMCkgew0KCQkJCXBvc3RNZXNzYWdlKCdBamF4IEVycm9yJyk7DQoJCQl9DQoJCX07DQoJCXJlcS5zZW5kKCJhY3Rpb249aW5pdCIpOw0KCX0NCn0=]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/JSON/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/JSON/JSON.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qIHZpbTogc2V0IGV4cGFuZHRhYiB0YWJzdG9wPTQgc2hpZnR3aWR0aD00IHNvZnR0YWJzdG9wPTQ6ICovDQoNCi8qKg0KICogQ29udmVydHMgdG8gYW5kIGZyb20gSlNPTiBmb3JtYXQuDQogKg0KICogSlNPTiAoSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24pIGlzIGEgbGlnaHR3ZWlnaHQgZGF0YS1pbnRlcmNoYW5nZQ0KICogZm9ybWF0LiBJdCBpcyBlYXN5IGZvciBodW1hbnMgdG8gcmVhZCBhbmQgd3JpdGUuIEl0IGlzIGVhc3kgZm9yIG1hY2hpbmVzDQogKiB0byBwYXJzZSBhbmQgZ2VuZXJhdGUuIEl0IGlzIGJhc2VkIG9uIGEgc3Vic2V0IG9mIHRoZSBKYXZhU2NyaXB0DQogKiBQcm9ncmFtbWluZyBMYW5ndWFnZSwgU3RhbmRhcmQgRUNNQS0yNjIgM3JkIEVkaXRpb24gLSBEZWNlbWJlciAxOTk5Lg0KICogVGhpcyBmZWF0dXJlIGNhbiBhbHNvIGJlIGZvdW5kIGluICBQeXRob24uIEpTT04gaXMgYSB0ZXh0IGZvcm1hdCB0aGF0IGlzDQogKiBjb21wbGV0ZWx5IGxhbmd1YWdlIGluZGVwZW5kZW50IGJ1dCB1c2VzIGNvbnZlbnRpb25zIHRoYXQgYXJlIGZhbWlsaWFyDQogKiB0byBwcm9ncmFtbWVycyBvZiB0aGUgQy1mYW1pbHkgb2YgbGFuZ3VhZ2VzLCBpbmNsdWRpbmcgQywgQysrLCBDIywgSmF2YSwNCiAqIEphdmFTY3JpcHQsIFBlcmwsIFRDTCwgYW5kIG1hbnkgb3RoZXJzLiBUaGVzZSBwcm9wZXJ0aWVzIG1ha2UgSlNPTiBhbg0KICogaWRlYWwgZGF0YS1pbnRlcmNoYW5nZSBsYW5ndWFnZS4NCiAqDQogKiBUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBzaW1wbGUgZW5jb2RlciBhbmQgZGVjb2RlciBmb3IgSlNPTiBub3RhdGlvbi4gSXQNCiAqIGlzIGludGVuZGVkIGZvciB1c2Ugd2l0aCBjbGllbnQtc2lkZSBKYXZhc2NyaXB0IGFwcGxpY2F0aW9ucyB0aGF0IG1ha2UNCiAqIHVzZSBvZiBIVFRQUmVxdWVzdCB0byBwZXJmb3JtIHNlcnZlciBjb21tdW5pY2F0aW9uIGZ1bmN0aW9ucyAtIGRhdGEgY2FuDQogKiBiZSBlbmNvZGVkIGludG8gSlNPTiBub3RhdGlvbiBmb3IgdXNlIGluIGEgY2xpZW50LXNpZGUgamF2YXNjcmlwdCwgb3INCiAqIGRlY29kZWQgZnJvbSBpbmNvbWluZyBKYXZhc2NyaXB0IHJlcXVlc3RzLiBKU09OIGZvcm1hdCBpcyBuYXRpdmUgdG8NCiAqIEphdmFzY3JpcHQsIGFuZCBjYW4gYmUgZGlyZWN0bHkgZXZhbCgpJ2VkIHdpdGggbm8gZnVydGhlciBwYXJzaW5nDQogKiBvdmVyaGVhZA0KICoNCiAqIEFsbCBzdHJpbmdzIHNob3VsZCBiZSBpbiBBU0NJSSBvciBVVEYtOCBmb3JtYXQhDQogKg0KICogTElDRU5TRTogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcg0KICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nDQogKiBjb25kaXRpb25zIGFyZSBtZXQ6IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUNCiAqIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nDQogKiBkaXNjbGFpbWVyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQogKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyDQogKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQogKiBkaXN0cmlidXRpb24uDQogKg0KICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQNCiAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQogKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTg0KICogTk8gRVZFTlQgU0hBTEwgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLA0KICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTDQogKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EDQogKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1INCiAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUNCiAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gNCiAqIERBTUFHRS4NCiAqDQogKiBAY2F0ZWdvcnkNCiAqIEBwYWNrYWdlICAgICBTZXJ2aWNlc19KU09ODQogKiBAYXV0aG9yICAgICAgTWljaGFsIE1pZ3Vyc2tpIDxtaWtlLWpzb25AdGVjem5vLmNvbT4NCiAqIEBhdXRob3IgICAgICBNYXR0IEtuYXBwIDxtZGtuYXBwW2F0XWdtYWlsW2RvdF1jb20+DQogKiBAYXV0aG9yICAgICAgQnJldHQgU3RpbW1lcm1hbiA8YnJldHRzdGltbWVybWFuW2F0XWdtYWlsW2RvdF1jb20+DQogKiBAY29weXJpZ2h0ICAgMjAwNSBNaWNoYWwgTWlndXJza2kNCiAqIEB2ZXJzaW9uICAgICBDVlM6ICRJZDogSlNPTi5waHAsdiAxLjMxIDIwMDYvMDYvMjggMDU6NTQ6MTcgbWlndXJza2kgRXhwICQNCiAqIEBsaWNlbnNlICAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KICogQGxpbmsgICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGVwci9wZXByLXByb3Bvc2FsLXNob3cucGhwP2lkPTE5OA0KICovDQoNCi8qKg0KICogTWFya2VyIGNvbnN0YW50IGZvciBTZXJ2aWNlc19KU09OOjpkZWNvZGUoKSwgdXNlZCB0byBmbGFnIHN0YWNrIHN0YXRlDQogKi8NCmRlZmluZSgnU0VSVklDRVNfSlNPTl9TTElDRScsICAgMSk7DQoNCi8qKg0KICogTWFya2VyIGNvbnN0YW50IGZvciBTZXJ2aWNlc19KU09OOjpkZWNvZGUoKSwgdXNlZCB0byBmbGFnIHN0YWNrIHN0YXRlDQogKi8NCmRlZmluZSgnU0VSVklDRVNfSlNPTl9JTl9TVFInLCAgMik7DQoNCi8qKg0KICogTWFya2VyIGNvbnN0YW50IGZvciBTZXJ2aWNlc19KU09OOjpkZWNvZGUoKSwgdXNlZCB0byBmbGFnIHN0YWNrIHN0YXRlDQogKi8NCmRlZmluZSgnU0VSVklDRVNfSlNPTl9JTl9BUlInLCAgMyk7DQoNCi8qKg0KICogTWFya2VyIGNvbnN0YW50IGZvciBTZXJ2aWNlc19KU09OOjpkZWNvZGUoKSwgdXNlZCB0byBmbGFnIHN0YWNrIHN0YXRlDQogKi8NCmRlZmluZSgnU0VSVklDRVNfSlNPTl9JTl9PQkonLCAgNCk7DQoNCi8qKg0KICogTWFya2VyIGNvbnN0YW50IGZvciBTZXJ2aWNlc19KU09OOjpkZWNvZGUoKSwgdXNlZCB0byBmbGFnIHN0YWNrIHN0YXRlDQogKi8NCmRlZmluZSgnU0VSVklDRVNfSlNPTl9JTl9DTVQnLCA1KTsNCg0KLyoqDQogKiBCZWhhdmlvciBzd2l0Y2ggZm9yIFNlcnZpY2VzX0pTT046OmRlY29kZSgpDQogKi8NCmRlZmluZSgnU0VSVklDRVNfSlNPTl9MT09TRV9UWVBFJywgMTYpOw0KDQovKioNCiAqIEJlaGF2aW9yIHN3aXRjaCBmb3IgU2VydmljZXNfSlNPTjo6ZGVjb2RlKCkNCiAqLw0KZGVmaW5lKCdTRVJWSUNFU19KU09OX1NVUFBSRVNTX0VSUk9SUycsIDMyKTsNCg0KLyoqDQogKiBDb252ZXJ0cyB0byBhbmQgZnJvbSBKU09OIGZvcm1hdC4NCiAqDQogKiBCcmllZiBleGFtcGxlIG9mIHVzZToNCiAqDQogKiA8Y29kZT4NCiAqIC8vIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBTZXJ2aWNlc19KU09ODQogKiAkanNvbiA9IG5ldyBTZXJ2aWNlc19KU09OKCk7DQogKg0KICogLy8gY29udmVydCBhIGNvbXBsZXhlIHZhbHVlIHRvIEpTT04gbm90YXRpb24sIGFuZCBzZW5kIGl0IHRvIHRoZSBicm93c2VyDQogKiAkdmFsdWUgPSBhcnJheSgnZm9vJywgJ2JhcicsIGFycmF5KDEsIDIsICdiYXonKSwgYXJyYXkoMywgYXJyYXkoNCkpKTsNCiAqICRvdXRwdXQgPSAkanNvbi0+ZW5jb2RlKCR2YWx1ZSk7DQogKg0KICogcHJpbnQoJG91dHB1dCk7DQogKiAvLyBwcmludHM6IFsiZm9vIiwiYmFyIixbMSwyLCJiYXoiXSxbMyxbNF1dXQ0KICoNCiAqIC8vIGFjY2VwdCBpbmNvbWluZyBQT1NUIGRhdGEsIGFzc3VtZWQgdG8gYmUgaW4gSlNPTiBub3RhdGlvbg0KICogJGlucHV0ID0gZmlsZV9nZXRfY29udGVudHMoJ3BocDovL2lucHV0JywgMTAwMDAwMCk7DQogKiAkdmFsdWUgPSAkanNvbi0+ZGVjb2RlKCRpbnB1dCk7DQogKiA8L2NvZGU+DQogKi8NCmNsYXNzIFNlcnZpY2VzX0pTT04NCnsNCiAgIC8qKg0KICAgICogY29uc3RydWN0cyBhIG5ldyBKU09OIGluc3RhbmNlDQogICAgKg0KICAgICogQHBhcmFtICAgIGludCAgICAgJHVzZSAgICBvYmplY3QgYmVoYXZpb3IgZmxhZ3M7IGNvbWJpbmUgd2l0aCBib29sZWFuLU9SDQogICAgKg0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZSB2YWx1ZXM6DQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gU0VSVklDRVNfSlNPTl9MT09TRV9UWVBFOiAgbG9vc2UgdHlwaW5nLg0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7Li4ufSIgc3ludGF4IGNyZWF0ZXMgYXNzb2NpYXRpdmUgYXJyYXlzDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBvYmplY3RzIGluIGRlY29kZSgpLg0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAtIFNFUlZJQ0VTX0pTT05fU1VQUFJFU1NfRVJST1JTOiAgZXJyb3Igc3VwcHJlc3Npb24uDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVzIHdoaWNoIGNhbid0IGJlIGVuY29kZWQgKGUuZy4gcmVzb3VyY2VzKQ0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhciBhcyBOVUxMIGluc3RlYWQgb2YgdGhyb3dpbmcgZXJyb3JzLg0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGEgZGVlcGx5LW5lc3RlZCByZXNvdXJjZSB3aWxsDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlIHVwIHdpdGggYW4gZXJyb3IsIHNvIGFsbCByZXR1cm4gdmFsdWVzDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBlbmNvZGUoKSBzaG91bGQgYmUgY2hlY2tlZCB3aXRoIGlzRXJyb3IoKQ0KICAgICovDQogICAgZnVuY3Rpb24gU2VydmljZXNfSlNPTigkdXNlID0gMCkNCiAgICB7DQogICAgICAgICR0aGlzLT51c2UgPSAkdXNlOw0KICAgIH0NCg0KICAgLyoqDQogICAgKiBjb252ZXJ0IGEgc3RyaW5nIGZyb20gb25lIFVURi0xNiBjaGFyIHRvIG9uZSBVVEYtOCBjaGFyDQogICAgKg0KICAgICogTm9ybWFsbHkgc2hvdWxkIGJlIGhhbmRsZWQgYnkgbWJfY29udmVydF9lbmNvZGluZywgYnV0DQogICAgKiBwcm92aWRlcyBhIHNsb3dlciBQSFAtb25seSBtZXRob2QgZm9yIGluc3RhbGxhdGlvbnMNCiAgICAqIHRoYXQgbGFjayB0aGUgbXVsdGlieWUgc3RyaW5nIGV4dGVuc2lvbi4NCiAgICAqDQogICAgKiBAcGFyYW0gICAgc3RyaW5nICAkdXRmMTYgIFVURi0xNiBjaGFyYWN0ZXINCiAgICAqIEByZXR1cm4gICBzdHJpbmcgIFVURi04IGNoYXJhY3Rlcg0KICAgICogQGFjY2VzcyAgIHByaXZhdGUNCiAgICAqLw0KICAgIGZ1bmN0aW9uIHV0ZjE2MnV0ZjgoJHV0ZjE2KQ0KICAgIHsNCiAgICAgICAgLy8gb2ggcGxlYXNlIG9oIHBsZWFzZSBvaCBwbGVhc2Ugb2ggcGxlYXNlIG9oIHBsZWFzZQ0KICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ21iX2NvbnZlcnRfZW5jb2RpbmcnKSkgew0KICAgICAgICAgICAgcmV0dXJuIG1iX2NvbnZlcnRfZW5jb2RpbmcoJHV0ZjE2LCAnVVRGLTgnLCAnVVRGLTE2Jyk7DQogICAgICAgIH0NCg0KICAgICAgICAkYnl0ZXMgPSAob3JkKCR1dGYxNnswfSkgPDwgOCkgfCBvcmQoJHV0ZjE2ezF9KTsNCg0KICAgICAgICBzd2l0Y2godHJ1ZSkgew0KICAgICAgICAgICAgY2FzZSAoKDB4N0YgJiAkYnl0ZXMpID09ICRieXRlcyk6DQogICAgICAgICAgICAgICAgLy8gdGhpcyBjYXNlIHNob3VsZCBuZXZlciBiZSByZWFjaGVkLCBiZWNhdXNlIHdlIGFyZSBpbiBBU0NJSSByYW5nZQ0KICAgICAgICAgICAgICAgIC8vIHNlZTogaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3VuaWNvZGUuaHRtbCN1dGYtOA0KICAgICAgICAgICAgICAgIHJldHVybiBjaHIoMHg3RiAmICRieXRlcyk7DQoNCiAgICAgICAgICAgIGNhc2UgKDB4MDdGRiAmICRieXRlcykgPT0gJGJ5dGVzOg0KICAgICAgICAgICAgICAgIC8vIHJldHVybiBhIDItYnl0ZSBVVEYtOCBjaGFyYWN0ZXINCiAgICAgICAgICAgICAgICAvLyBzZWU6IGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91bmljb2RlLmh0bWwjdXRmLTgNCiAgICAgICAgICAgICAgICByZXR1cm4gY2hyKDB4QzAgfCAoKCRieXRlcyA+PiA2KSAmIDB4MUYpKQ0KICAgICAgICAgICAgICAgICAgICAgLiBjaHIoMHg4MCB8ICgkYnl0ZXMgJiAweDNGKSk7DQoNCiAgICAgICAgICAgIGNhc2UgKDB4RkZGRiAmICRieXRlcykgPT0gJGJ5dGVzOg0KICAgICAgICAgICAgICAgIC8vIHJldHVybiBhIDMtYnl0ZSBVVEYtOCBjaGFyYWN0ZXINCiAgICAgICAgICAgICAgICAvLyBzZWU6IGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91bmljb2RlLmh0bWwjdXRmLTgNCiAgICAgICAgICAgICAgICByZXR1cm4gY2hyKDB4RTAgfCAoKCRieXRlcyA+PiAxMikgJiAweDBGKSkNCiAgICAgICAgICAgICAgICAgICAgIC4gY2hyKDB4ODAgfCAoKCRieXRlcyA+PiA2KSAmIDB4M0YpKQ0KICAgICAgICAgICAgICAgICAgICAgLiBjaHIoMHg4MCB8ICgkYnl0ZXMgJiAweDNGKSk7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBpZ25vcmluZyBVVEYtMzIgZm9yIG5vdywgc29ycnkNCiAgICAgICAgcmV0dXJuICcnOw0KICAgIH0NCg0KICAgLyoqDQogICAgKiBjb252ZXJ0IGEgc3RyaW5nIGZyb20gb25lIFVURi04IGNoYXIgdG8gb25lIFVURi0xNiBjaGFyDQogICAgKg0KICAgICogTm9ybWFsbHkgc2hvdWxkIGJlIGhhbmRsZWQgYnkgbWJfY29udmVydF9lbmNvZGluZywgYnV0DQogICAgKiBwcm92aWRlcyBhIHNsb3dlciBQSFAtb25seSBtZXRob2QgZm9yIGluc3RhbGxhdGlvbnMNCiAgICAqIHRoYXQgbGFjayB0aGUgbXVsdGlieWUgc3RyaW5nIGV4dGVuc2lvbi4NCiAgICAqDQogICAgKiBAcGFyYW0gICAgc3RyaW5nICAkdXRmOCAgIFVURi04IGNoYXJhY3Rlcg0KICAgICogQHJldHVybiAgIHN0cmluZyAgVVRGLTE2IGNoYXJhY3Rlcg0KICAgICogQGFjY2VzcyAgIHByaXZhdGUNCiAgICAqLw0KICAgIGZ1bmN0aW9uIHV0ZjgydXRmMTYoJHV0ZjgpDQogICAgew0KICAgICAgICAvLyBvaCBwbGVhc2Ugb2ggcGxlYXNlIG9oIHBsZWFzZSBvaCBwbGVhc2Ugb2ggcGxlYXNlDQogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnbWJfY29udmVydF9lbmNvZGluZycpKSB7DQogICAgICAgICAgICByZXR1cm4gbWJfY29udmVydF9lbmNvZGluZygkdXRmOCwgJ1VURi0xNicsICdVVEYtOCcpOw0KICAgICAgICB9DQoNCiAgICAgICAgc3dpdGNoKHN0cmxlbigkdXRmOCkpIHsNCiAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAvLyB0aGlzIGNhc2Ugc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQsIGJlY2F1c2Ugd2UgYXJlIGluIEFTQ0lJIHJhbmdlDQogICAgICAgICAgICAgICAgLy8gc2VlOiBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04DQogICAgICAgICAgICAgICAgcmV0dXJuICR1dGY4Ow0KDQogICAgICAgICAgICBjYXNlIDI6DQogICAgICAgICAgICAgICAgLy8gcmV0dXJuIGEgVVRGLTE2IGNoYXJhY3RlciBmcm9tIGEgMi1ieXRlIFVURi04IGNoYXINCiAgICAgICAgICAgICAgICAvLyBzZWU6IGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91bmljb2RlLmh0bWwjdXRmLTgNCiAgICAgICAgICAgICAgICByZXR1cm4gY2hyKDB4MDcgJiAob3JkKCR1dGY4ezB9KSA+PiAyKSkNCiAgICAgICAgICAgICAgICAgICAgIC4gY2hyKCgweEMwICYgKG9yZCgkdXRmOHswfSkgPDwgNikpDQogICAgICAgICAgICAgICAgICAgICAgICAgfCAoMHgzRiAmIG9yZCgkdXRmOHsxfSkpKTsNCg0KICAgICAgICAgICAgY2FzZSAzOg0KICAgICAgICAgICAgICAgIC8vIHJldHVybiBhIFVURi0xNiBjaGFyYWN0ZXIgZnJvbSBhIDMtYnl0ZSBVVEYtOCBjaGFyDQogICAgICAgICAgICAgICAgLy8gc2VlOiBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04DQogICAgICAgICAgICAgICAgcmV0dXJuIGNocigoMHhGMCAmIChvcmQoJHV0Zjh7MH0pIDw8IDQpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgIHwgKDB4MEYgJiAob3JkKCR1dGY4ezF9KSA+PiAyKSkpDQogICAgICAgICAgICAgICAgICAgICAuIGNocigoMHhDMCAmIChvcmQoJHV0Zjh7MX0pIDw8IDYpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgIHwgKDB4N0YgJiBvcmQoJHV0Zjh7Mn0pKSk7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBpZ25vcmluZyBVVEYtMzIgZm9yIG5vdywgc29ycnkNCiAgICAgICAgcmV0dXJuICcnOw0KICAgIH0NCg0KICAgLyoqDQogICAgKiBlbmNvZGVzIGFuIGFyYml0cmFyeSB2YXJpYWJsZSBpbnRvIEpTT04gZm9ybWF0DQogICAgKg0KICAgICogQHBhcmFtICAgIG1peGVkICAgJHZhciAgICBhbnkgbnVtYmVyLCBib29sZWFuLCBzdHJpbmcsIGFycmF5LCBvciBvYmplY3QgdG8gYmUgZW5jb2RlZC4NCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGFyZ3VtZW50IDEgdG8gU2VydmljZXNfSlNPTigpIGFib3ZlIGZvciBhcnJheS1wYXJzaW5nIGJlaGF2aW9yLg0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YXIgaXMgYSBzdHJuZywgbm90ZSB0aGF0IGVuY29kZSgpIGFsd2F5cyBleHBlY3RzIGl0DQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIGluIEFTQ0lJIG9yIFVURi04IGZvcm1hdCENCiAgICAqDQogICAgKiBAcmV0dXJuICAgbWl4ZWQgICBKU09OIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnB1dCB2YXIgb3IgYW4gZXJyb3IgaWYgYSBwcm9ibGVtIG9jY3Vycw0KICAgICogQGFjY2VzcyAgIHB1YmxpYw0KICAgICovDQogICAgZnVuY3Rpb24gZW5jb2RlKCR2YXIpDQogICAgew0KICAgICAgICBzd2l0Y2ggKGdldHR5cGUoJHZhcikpIHsNCiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOg0KICAgICAgICAgICAgICAgIHJldHVybiAkdmFyID8gJ3RydWUnIDogJ2ZhbHNlJzsNCg0KICAgICAgICAgICAgY2FzZSAnTlVMTCc6DQogICAgICAgICAgICAgICAgcmV0dXJuICdudWxsJzsNCg0KICAgICAgICAgICAgY2FzZSAnaW50ZWdlcic6DQogICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpICR2YXI7DQoNCiAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6DQogICAgICAgICAgICBjYXNlICdmbG9hdCc6DQogICAgICAgICAgICAgICAgcmV0dXJuIChmbG9hdCkgJHZhcjsNCg0KICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoNCiAgICAgICAgICAgICAgICAvLyBTVFJJTkdTIEFSRSBFWFBFQ1RFRCBUTyBCRSBJTiBBU0NJSSBPUiBVVEYtOCBGT1JNQVQNCiAgICAgICAgICAgICAgICAkYXNjaWkgPSAnJzsNCiAgICAgICAgICAgICAgICAkc3RybGVuX3ZhciA9IHN0cmxlbigkdmFyKTsNCg0KICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAqIEl0ZXJhdGUgb3ZlciBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZywNCiAgICAgICAgICAgICAgICAqIGVzY2FwaW5nIHdpdGggYSBzbGFzaCBvciBlbmNvZGluZyB0byBVVEYtOCB3aGVyZSBuZWNlc3NhcnkNCiAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgIGZvciAoJGMgPSAwOyAkYyA8ICRzdHJsZW5fdmFyOyArKyRjKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgJG9yZF92YXJfYyA9IG9yZCgkdmFyeyRjfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0cnVlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRvcmRfdmFyX2MgPT0gMHgwODoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNjaWkgLj0gJ1xiJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJG9yZF92YXJfYyA9PSAweDA5Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc2NpaSAuPSAnXHQnOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkb3JkX3Zhcl9jID09IDB4MEE6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49ICdcbic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRvcmRfdmFyX2MgPT0gMHgwQzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNjaWkgLj0gJ1xmJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJG9yZF92YXJfYyA9PSAweDBEOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc2NpaSAuPSAnXHInOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRvcmRfdmFyX2MgPT0gMHgyMjoNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJG9yZF92YXJfYyA9PSAweDJGOg0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkb3JkX3Zhcl9jID09IDB4NUM6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG91YmxlIHF1b3RlLCBzbGFzaCwgc2xvc2gNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNjaWkgLj0gJ1xcJy4kdmFyeyRjfTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoKCRvcmRfdmFyX2MgPj0gMHgyMCkgJiYgKCRvcmRfdmFyX2MgPD0gMHg3RikpOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgVS0wMDAwMDAwMCAtIFUtMDAwMDAwN0YgKHNhbWUgYXMgQVNDSUkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49ICR2YXJ7JGN9Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgoJG9yZF92YXJfYyAmIDB4RTApID09IDB4QzApOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgVS0wMDAwMDA4MCAtIFUtMDAwMDA3RkYsIG1hc2sgMTEwWFhYWFgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3VuaWNvZGUuaHRtbCN1dGYtOA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGFyID0gcGFjaygnQyonLCAkb3JkX3Zhcl9jLCBvcmQoJHZhcnskYyArIDF9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmMTYgPSAkdGhpcy0+dXRmODJ1dGYxNigkY2hhcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49IHNwcmludGYoJ1x1JTA0cycsIGJpbjJoZXgoJHV0ZjE2KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCgkb3JkX3Zhcl9jICYgMHhGMCkgPT0gMHhFMCk6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTAwMDAwODAwIC0gVS0wMDAwRkZGRiwgbWFzayAxMTEwWFhYWA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXIgPSBwYWNrKCdDKicsICRvcmRfdmFyX2MsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgMX0pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDJ9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmMTYgPSAkdGhpcy0+dXRmODJ1dGYxNigkY2hhcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49IHNwcmludGYoJ1x1JTA0cycsIGJpbjJoZXgoJHV0ZjE2KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCgkb3JkX3Zhcl9jICYgMHhGOCkgPT0gMHhGMCk6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTAwMDEwMDAwIC0gVS0wMDFGRkZGRiwgbWFzayAxMTExMFhYWA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXIgPSBwYWNrKCdDKicsICRvcmRfdmFyX2MsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgMX0pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDJ9KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkKCR2YXJ7JGMgKyAzfSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjICs9IDM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0ZjE2ID0gJHRoaXMtPnV0ZjgydXRmMTYoJGNoYXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc2NpaSAuPSBzcHJpbnRmKCdcdSUwNHMnLCBiaW4yaGV4KCR1dGYxNikpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgoJG9yZF92YXJfYyAmIDB4RkMpID09IDB4RjgpOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgVS0wMDIwMDAwMCAtIFUtMDNGRkZGRkYsIG1hc2sgMTExMTEwWFgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3VuaWNvZGUuaHRtbCN1dGYtOA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGFyID0gcGFjaygnQyonLCAkb3JkX3Zhcl9jLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDF9KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkKCR2YXJ7JGMgKyAyfSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgM30pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDR9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gNDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmMTYgPSAkdGhpcy0+dXRmODJ1dGYxNigkY2hhcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49IHNwcmludGYoJ1x1JTA0cycsIGJpbjJoZXgoJHV0ZjE2KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCgkb3JkX3Zhcl9jICYgMHhGRSkgPT0gMHhGQyk6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTA0MDAwMDAwIC0gVS03RkZGRkZGRiwgbWFzayAxMTExMTEwWA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXIgPSBwYWNrKCdDKicsICRvcmRfdmFyX2MsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgMX0pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDJ9KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkKCR2YXJ7JGMgKyAzfSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgNH0pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDV9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gNTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmMTYgPSAkdGhpcy0+dXRmODJ1dGYxNigkY2hhcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49IHNwcmludGYoJ1x1JTA0cycsIGJpbjJoZXgoJHV0ZjE2KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICByZXR1cm4gJyInLiRhc2NpaS4nIic7DQoNCiAgICAgICAgICAgIGNhc2UgJ2FycmF5JzoNCiAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgKiBBcyBwZXIgSlNPTiBzcGVjIGlmIGFueSBhcnJheSBrZXkgaXMgbm90IGFuIGludGVnZXINCiAgICAgICAgICAgICAgICAqIHdlIG11c3QgdHJlYXQgdGhlIHRoZSB3aG9sZSBhcnJheSBhcyBhbiBvYmplY3QuIFdlDQogICAgICAgICAgICAgICAgKiBhbHNvIHRyeSB0byBjYXRjaCBhIHNwYXJzZWx5IHBvcHVsYXRlZCBhc3NvY2lhdGl2ZQ0KICAgICAgICAgICAgICAgICogYXJyYXkgd2l0aCBudW1lcmljIGtleXMgaGVyZSBiZWNhdXNlIHNvbWUgSlMgZW5naW5lcw0KICAgICAgICAgICAgICAgICogd2lsbCBjcmVhdGUgYW4gYXJyYXkgd2l0aCBlbXB0eSBpbmRleGVzIHVwIHRvDQogICAgICAgICAgICAgICAgKiBtYXhfaW5kZXggd2hpY2ggY2FuIGNhdXNlIG1lbW9yeSBpc3N1ZXMgYW5kIGJlY2F1c2UNCiAgICAgICAgICAgICAgICAqIHRoZSBrZXlzLCB3aGljaCBtYXkgYmUgcmVsZXZhbnQsIHdpbGwgYmUgcmVtYXBwZWQNCiAgICAgICAgICAgICAgICAqIG90aGVyd2lzZS4NCiAgICAgICAgICAgICAgICAqDQogICAgICAgICAgICAgICAgKiBBcyBwZXIgdGhlIEVDTUEgYW5kIEpTT04gc3BlY2lmaWNhdGlvbiBhbiBvYmplY3QgbWF5DQogICAgICAgICAgICAgICAgKiBoYXZlIGFueSBzdHJpbmcgYXMgYSBwcm9wZXJ0eS4gVW5mb3J0dW5hdGVseSBkdWUgdG8NCiAgICAgICAgICAgICAgICAqIGEgaG9sZSBpbiB0aGUgRUNNQSBzcGVjaWZpY2F0aW9uIGlmIHRoZSBrZXkgaXMgYQ0KICAgICAgICAgICAgICAgICogRUNNQSByZXNlcnZlZCB3b3JkIG9yIHN0YXJ0cyB3aXRoIGEgZGlnaXQgdGhlDQogICAgICAgICAgICAgICAgKiBwYXJhbWV0ZXIgaXMgb25seSBhY2Nlc3NpYmxlIHVzaW5nIEVDTUFTY3JpcHQncw0KICAgICAgICAgICAgICAgICogYnJhY2tldCBub3RhdGlvbi4NCiAgICAgICAgICAgICAgICAqLw0KDQogICAgICAgICAgICAgICAgLy8gdHJlYXQgYXMgYSBKU09OIG9iamVjdA0KICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkdmFyKSAmJiBjb3VudCgkdmFyKSAmJiAoYXJyYXlfa2V5cygkdmFyKSAhPT0gcmFuZ2UoMCwgc2l6ZW9mKCR2YXIpIC0gMSkpKSB7DQogICAgICAgICAgICAgICAgICAgICRwcm9wZXJ0aWVzID0gYXJyYXlfbWFwKGFycmF5KCR0aGlzLCAnbmFtZV92YWx1ZScpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9rZXlzKCR2YXIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV92YWx1ZXMoJHZhcikpOw0KDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJHByb3BlcnRpZXMgYXMgJHByb3BlcnR5KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihTZXJ2aWNlc19KU09OOjppc0Vycm9yKCRwcm9wZXJ0eSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHByb3BlcnR5Ow0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd7JyAuIGpvaW4oJywnLCAkcHJvcGVydGllcykgLiAnfSc7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLy8gdHJlYXQgaXQgbGlrZSBhIHJlZ3VsYXIgYXJyYXkNCiAgICAgICAgICAgICAgICAkZWxlbWVudHMgPSBhcnJheV9tYXAoYXJyYXkoJHRoaXMsICdlbmNvZGUnKSwgJHZhcik7DQoNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCRlbGVtZW50cyBhcyAkZWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICBpZihTZXJ2aWNlc19KU09OOjppc0Vycm9yKCRlbGVtZW50KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRlbGVtZW50Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgcmV0dXJuICdbJyAuIGpvaW4oJywnLCAkZWxlbWVudHMpIC4gJ10nOw0KDQogICAgICAgICAgICBjYXNlICdvYmplY3QnOg0KICAgICAgICAgICAgICAgICR2YXJzID0gZ2V0X29iamVjdF92YXJzKCR2YXIpOw0KDQogICAgICAgICAgICAgICAgJHByb3BlcnRpZXMgPSBhcnJheV9tYXAoYXJyYXkoJHRoaXMsICduYW1lX3ZhbHVlJyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfa2V5cygkdmFycyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfdmFsdWVzKCR2YXJzKSk7DQoNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCRwcm9wZXJ0aWVzIGFzICRwcm9wZXJ0eSkgew0KICAgICAgICAgICAgICAgICAgICBpZihTZXJ2aWNlc19KU09OOjppc0Vycm9yKCRwcm9wZXJ0eSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcHJvcGVydHk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICByZXR1cm4gJ3snIC4gam9pbignLCcsICRwcm9wZXJ0aWVzKSAuICd9JzsNCg0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICByZXR1cm4gKCR0aGlzLT51c2UgJiBTRVJWSUNFU19KU09OX1NVUFBSRVNTX0VSUk9SUykNCiAgICAgICAgICAgICAgICAgICAgPyAnbnVsbCcNCiAgICAgICAgICAgICAgICAgICAgOiBuZXcgU2VydmljZXNfSlNPTl9FcnJvcihnZXR0eXBlKCR2YXIpLiIgY2FuIG5vdCBiZSBlbmNvZGVkIGFzIEpTT04gc3RyaW5nIik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgIC8qKg0KICAgICogYXJyYXktd2Fsa2luZyBmdW5jdGlvbiBmb3IgdXNlIGluIGdlbmVyYXRpbmcgSlNPTi1mb3JtYXR0ZWQgbmFtZS12YWx1ZSBwYWlycw0KICAgICoNCiAgICAqIEBwYXJhbSAgICBzdHJpbmcgICRuYW1lICAgbmFtZSBvZiBrZXkgdG8gdXNlDQogICAgKiBAcGFyYW0gICAgbWl4ZWQgICAkdmFsdWUgIHJlZmVyZW5jZSB0byBhbiBhcnJheSBlbGVtZW50IHRvIGJlIGVuY29kZWQNCiAgICAqDQogICAgKiBAcmV0dXJuICAgc3RyaW5nICBKU09OLWZvcm1hdHRlZCBuYW1lLXZhbHVlIHBhaXIsIGxpa2UgJyJuYW1lIjp2YWx1ZScNCiAgICAqIEBhY2Nlc3MgICBwcml2YXRlDQogICAgKi8NCiAgICBmdW5jdGlvbiBuYW1lX3ZhbHVlKCRuYW1lLCAkdmFsdWUpDQogICAgew0KICAgICAgICAkZW5jb2RlZF92YWx1ZSA9ICR0aGlzLT5lbmNvZGUoJHZhbHVlKTsNCg0KICAgICAgICBpZihTZXJ2aWNlc19KU09OOjppc0Vycm9yKCRlbmNvZGVkX3ZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuICRlbmNvZGVkX3ZhbHVlOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuICR0aGlzLT5lbmNvZGUoc3RydmFsKCRuYW1lKSkgLiAnOicgLiAkZW5jb2RlZF92YWx1ZTsNCiAgICB9DQoNCiAgIC8qKg0KICAgICogcmVkdWNlIGEgc3RyaW5nIGJ5IHJlbW92aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlDQogICAgKg0KICAgICogQHBhcmFtICAgICRzdHIgICAgc3RyaW5nICAgICAgc3RyaW5nIHZhbHVlIHRvIHN0cmlwIG9mIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlDQogICAgKg0KICAgICogQHJldHVybiAgIHN0cmluZyAgc3RyaW5nIHZhbHVlIHN0cmlwcGVkIG9mIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlDQogICAgKiBAYWNjZXNzICAgcHJpdmF0ZQ0KICAgICovDQogICAgZnVuY3Rpb24gcmVkdWNlX3N0cmluZygkc3RyKQ0KICAgIHsNCiAgICAgICAgJHN0ciA9IHByZWdfcmVwbGFjZShhcnJheSgNCg0KICAgICAgICAgICAgICAgIC8vIGVsaW1pbmF0ZSBzaW5nbGUgbGluZSBjb21tZW50cyBpbiAnLy8gLi4uJyBmb3JtDQogICAgICAgICAgICAgICAgJyNeXHMqLy8oLispJCNtJywNCg0KICAgICAgICAgICAgICAgIC8vIGVsaW1pbmF0ZSBtdWx0aS1saW5lIGNvbW1lbnRzIGluICcvKiAuLi4gKi8nIGZvcm0sIGF0IHN0YXJ0IG9mIHN0cmluZw0KICAgICAgICAgICAgICAgICcjXlxzKi9cKiguKylcKi8jVXMnLA0KDQogICAgICAgICAgICAgICAgLy8gZWxpbWluYXRlIG11bHRpLWxpbmUgY29tbWVudHMgaW4gJy8qIC4uLiAqLycgZm9ybSwgYXQgZW5kIG9mIHN0cmluZw0KICAgICAgICAgICAgICAgICcjL1wqKC4rKVwqL1xzKiQjVXMnDQoNCiAgICAgICAgICAgICksICcnLCAkc3RyKTsNCg0KICAgICAgICAvLyBlbGltaW5hdGUgZXh0cmFuZW91cyBzcGFjZQ0KICAgICAgICByZXR1cm4gdHJpbSgkc3RyKTsNCiAgICB9DQoNCiAgIC8qKg0KICAgICogZGVjb2RlcyBhIEpTT04gc3RyaW5nIGludG8gYXBwcm9wcmlhdGUgdmFyaWFibGUNCiAgICAqDQogICAgKiBAcGFyYW0gICAgc3RyaW5nICAkc3RyICAgIEpTT04tZm9ybWF0dGVkIHN0cmluZw0KICAgICoNCiAgICAqIEByZXR1cm4gICBtaXhlZCAgIG51bWJlciwgYm9vbGVhbiwgc3RyaW5nLCBhcnJheSwgb3Igb2JqZWN0DQogICAgKiAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIEpTT04gaW5wdXQgc3RyaW5nLg0KICAgICogICAgICAgICAgICAgICAgICAgU2VlIGFyZ3VtZW50IDEgdG8gU2VydmljZXNfSlNPTigpIGFib3ZlIGZvciBvYmplY3Qtb3V0cHV0IGJlaGF2aW9yLg0KICAgICogICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGRlY29kZSgpIGFsd2F5cyByZXR1cm5zIHN0cmluZ3MNCiAgICAqICAgICAgICAgICAgICAgICAgIGluIEFTQ0lJIG9yIFVURi04IGZvcm1hdCENCiAgICAqIEBhY2Nlc3MgICBwdWJsaWMNCiAgICAqLw0KICAgIGZ1bmN0aW9uIGRlY29kZSgkc3RyKQ0KICAgIHsNCiAgICAgICAgJHN0ciA9ICR0aGlzLT5yZWR1Y2Vfc3RyaW5nKCRzdHIpOw0KDQogICAgICAgIHN3aXRjaCAoc3RydG9sb3dlcigkc3RyKSkgew0KICAgICAgICAgICAgY2FzZSAndHJ1ZSc6DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQoNCiAgICAgICAgICAgIGNhc2UgJ2ZhbHNlJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQoNCiAgICAgICAgICAgIGNhc2UgJ251bGwnOg0KICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KDQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICRtID0gYXJyYXkoKTsNCg0KICAgICAgICAgICAgICAgIGlmIChpc19udW1lcmljKCRzdHIpKSB7DQogICAgICAgICAgICAgICAgICAgIC8vIExvb2tpZS1sb28sIGl0J3MgYSBudW1iZXINCg0KICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdvdWxkIHdvcmsgb24gaXRzIG93biwgYnV0IEknbSB0cnlpbmcgdG8gYmUNCiAgICAgICAgICAgICAgICAgICAgLy8gZ29vZCBhYm91dCByZXR1cm5pbmcgaW50ZWdlcnMgd2hlcmUgYXBwcm9wcmlhdGU6DQogICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiAoZmxvYXQpJHN0cjsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gZmxvYXQgb3IgaW50LCBhcyBhcHByb3ByaWF0ZQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChmbG9hdCkkc3RyID09IChpbnRlZ2VyKSRzdHIpDQogICAgICAgICAgICAgICAgICAgICAgICA/IChpbnRlZ2VyKSRzdHINCiAgICAgICAgICAgICAgICAgICAgICAgIDogKGZsb2F0KSRzdHI7DQoNCiAgICAgICAgICAgICAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgnL14oInxcJykuKihcMSkkL3MnLCAkc3RyLCAkbSkgJiYgJG1bMV0gPT0gJG1bMl0pIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gU1RSSU5HUyBSRVRVUk5FRCBJTiBVVEYtOCBGT1JNQVQNCiAgICAgICAgICAgICAgICAgICAgJGRlbGltID0gc3Vic3RyKCRzdHIsIDAsIDEpOw0KICAgICAgICAgICAgICAgICAgICAkY2hycyA9IHN1YnN0cigkc3RyLCAxLCAtMSk7DQogICAgICAgICAgICAgICAgICAgICR1dGY4ID0gJyc7DQogICAgICAgICAgICAgICAgICAgICRzdHJsZW5fY2hycyA9IHN0cmxlbigkY2hycyk7DQoNCiAgICAgICAgICAgICAgICAgICAgZm9yICgkYyA9IDA7ICRjIDwgJHN0cmxlbl9jaHJzOyArKyRjKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICRzdWJzdHJfY2hyc19jXzIgPSBzdWJzdHIoJGNocnMsICRjLCAyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRvcmRfY2hyc19jID0gb3JkKCRjaHJzeyRjfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHJ1ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHN1YnN0cl9jaHJzX2NfMiA9PSAnXGInOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBjaHIoMHgwOCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrJGM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHN1YnN0cl9jaHJzX2NfMiA9PSAnXHQnOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBjaHIoMHgwOSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrJGM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHN1YnN0cl9jaHJzX2NfMiA9PSAnXG4nOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBjaHIoMHgwQSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrJGM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHN1YnN0cl9jaHJzX2NfMiA9PSAnXGYnOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBjaHIoMHgwQyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrJGM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHN1YnN0cl9jaHJzX2NfMiA9PSAnXHInOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBjaHIoMHgwRCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrJGM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkc3Vic3RyX2NocnNfY18yID09ICdcXCInOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHN1YnN0cl9jaHJzX2NfMiA9PSAnXFxcJyc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkc3Vic3RyX2NocnNfY18yID09ICdcXFxcJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRzdWJzdHJfY2hyc19jXzIgPT0gJ1xcLyc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGRlbGltID09ICciJyAmJiAkc3Vic3RyX2NocnNfY18yICE9ICdcXFwnJykgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRkZWxpbSA9PSAiJyIgJiYgJHN1YnN0cl9jaHJzX2NfMiAhPSAnXFwiJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGY4IC49ICRjaHJzeysrJGN9Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBwcmVnX21hdGNoKCcvXFxcdVswLTlBLUZdezR9L2knLCBzdWJzdHIoJGNocnMsICRjLCA2KSk6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmdsZSwgZXNjYXBlZCB1bmljb2RlIGNoYXJhY3Rlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmMTYgPSBjaHIoaGV4ZGVjKHN1YnN0cigkY2hycywgKCRjICsgMiksIDIpKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gY2hyKGhleGRlYyhzdWJzdHIoJGNocnMsICgkYyArIDQpLCAyKSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSAkdGhpcy0+dXRmMTYydXRmOCgkdXRmMTYpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYyArPSA1Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCRvcmRfY2hyc19jID49IDB4MjApICYmICgkb3JkX2NocnNfYyA8PSAweDdGKToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0ZjggLj0gJGNocnN7JGN9Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCRvcmRfY2hyc19jICYgMHhFMCkgPT0gMHhDMDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTAwMDAwMDgwIC0gVS0wMDAwMDdGRiwgbWFzayAxMTBYWFhYWA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGY4IC49IHN1YnN0cigkY2hycywgJGMsIDIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArKyRjOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCRvcmRfY2hyc19jICYgMHhGMCkgPT0gMHhFMDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTAwMDAwODAwIC0gVS0wMDAwRkZGRiwgbWFzayAxMTEwWFhYWA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3VuaWNvZGUuaHRtbCN1dGYtOA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBzdWJzdHIoJGNocnMsICRjLCAzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgkb3JkX2NocnNfYyAmIDB4RjgpID09IDB4RjA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgVS0wMDAxMDAwMCAtIFUtMDAxRkZGRkYsIG1hc2sgMTExMTBYWFgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91bmljb2RlLmh0bWwjdXRmLTgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0ZjggLj0gc3Vic3RyKCRjaHJzLCAkYywgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjICs9IDM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoJG9yZF9jaHJzX2MgJiAweEZDKSA9PSAweEY4Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIFUtMDAyMDAwMDAgLSBVLTAzRkZGRkZGLCBtYXNrIDExMTExMFhYDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGY4IC49IHN1YnN0cigkY2hycywgJGMsIDUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYyArPSA0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCRvcmRfY2hyc19jICYgMHhGRSkgPT0gMHhGQzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTA0MDAwMDAwIC0gVS03RkZGRkZGRiwgbWFzayAxMTExMTEwWA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3VuaWNvZGUuaHRtbCN1dGYtOA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBzdWJzdHIoJGNocnMsICRjLCA2KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gNTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR1dGY4Ow0KDQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKHByZWdfbWF0Y2goJy9eXFsuKlxdJC9zJywgJHN0cikgfHwgcHJlZ19tYXRjaCgnL15cey4qXH0kL3MnLCAkc3RyKSkgew0KICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSwgb3Igb2JqZWN0IG5vdGF0aW9uDQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRzdHJ7MH0gPT0gJ1snKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3RrID0gYXJyYXkoU0VSVklDRVNfSlNPTl9JTl9BUlIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGFyciA9IGFycmF5KCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPnVzZSAmIFNFUlZJQ0VTX0pTT05fTE9PU0VfVFlQRSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGsgPSBhcnJheShTRVJWSUNFU19KU09OX0lOX09CSik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9iaiA9IGFycmF5KCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGsgPSBhcnJheShTRVJWSUNFU19KU09OX0lOX09CSik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9iaiA9IG5ldyBzdGRDbGFzcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkc3RrLCBhcnJheSgnd2hhdCcgID0+IFNFUlZJQ0VTX0pTT05fU0xJQ0UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doZXJlJyA9PiAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWxpbScgPT4gZmFsc2UpKTsNCg0KICAgICAgICAgICAgICAgICAgICAkY2hycyA9IHN1YnN0cigkc3RyLCAxLCAtMSk7DQogICAgICAgICAgICAgICAgICAgICRjaHJzID0gJHRoaXMtPnJlZHVjZV9zdHJpbmcoJGNocnMpOw0KDQogICAgICAgICAgICAgICAgICAgIGlmICgkY2hycyA9PSAnJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2V0KCRzdGspID09IFNFUlZJQ0VTX0pTT05fSU5fQVJSKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRhcnI7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRvYmo7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIC8vcHJpbnQoIlxucGFyc2luZyB7JGNocnN9XG4iKTsNCg0KICAgICAgICAgICAgICAgICAgICAkc3RybGVuX2NocnMgPSBzdHJsZW4oJGNocnMpOw0KDQogICAgICAgICAgICAgICAgICAgIGZvciAoJGMgPSAwOyAkYyA8PSAkc3RybGVuX2NocnM7ICsrJGMpIHsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgJHRvcCA9IGVuZCgkc3RrKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzdWJzdHJfY2hyc19jXzIgPSBzdWJzdHIoJGNocnMsICRjLCAyKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkYyA9PSAkc3RybGVuX2NocnMpIHx8ICgoJGNocnN7JGN9ID09ICcsJykgJiYgKCR0b3BbJ3doYXQnXSA9PSBTRVJWSUNFU19KU09OX1NMSUNFKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIGNvbW1hIHRoYXQgaXMgbm90IGluc2lkZSBhIHN0cmluZywgYXJyYXksIGV0Yy4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT1Igd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBjaGFyYWN0ZXIgbGlzdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzbGljZSA9IHN1YnN0cigkY2hycywgJHRvcFsnd2hlcmUnXSwgKCRjIC0gJHRvcFsnd2hlcmUnXSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJHN0aywgYXJyYXkoJ3doYXQnID0+IFNFUlZJQ0VTX0pTT05fU0xJQ0UsICd3aGVyZScgPT4gKCRjICsgMSksICdkZWxpbScgPT4gZmFsc2UpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50KCJGb3VuZCBzcGxpdCBhdCB7JGN9OiAiLnN1YnN0cigkY2hycywgJHRvcFsnd2hlcmUnXSwgKDEgKyAkYyAtICR0b3BbJ3doZXJlJ10pKS4iXG4iKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNldCgkc3RrKSA9PSBTRVJWSUNFU19KU09OX0lOX0FSUikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgaW4gYW4gYXJyYXksIHNvIGp1c3QgcHVzaCBhbiBlbGVtZW50IG9udG8gdGhlIHN0YWNrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJGFyciwgJHRoaXMtPmRlY29kZSgkc2xpY2UpKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChyZXNldCgkc3RrKSA9PSBTRVJWSUNFU19KU09OX0lOX09CSikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgaW4gYW4gb2JqZWN0LCBzbyBmaWd1cmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3V0IHRoZSBwcm9wZXJ0eSBuYW1lIGFuZCBzZXQgYW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudCBpbiBhbiBhc3NvY2lhdGl2ZSBhcnJheSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIG5vdw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydHMgPSBhcnJheSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eXHMqKFsiXCddLipbXlxcXF1bIlwnXSlccyo6XHMqKFxTLiopLD8kL1VpcycsICRzbGljZSwgJHBhcnRzKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIm5hbWUiOnZhbHVlIHBhaXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRrZXkgPSAkdGhpcy0+ZGVjb2RlKCRwYXJ0c1sxXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsID0gJHRoaXMtPmRlY29kZSgkcGFydHNbMl0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPnVzZSAmIFNFUlZJQ0VTX0pTT05fTE9PU0VfVFlQRSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvYmpbJGtleV0gPSAkdmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2JqLT4ka2V5ID0gJHZhbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKHByZWdfbWF0Y2goJy9eXHMqKFx3Kylccyo6XHMqKFxTLiopLD8kL1VpcycsICRzbGljZSwgJHBhcnRzKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmFtZTp2YWx1ZSBwYWlyLCB3aGVyZSBuYW1lIGlzIHVucXVvdGVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAka2V5ID0gJHBhcnRzWzFdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbCA9ICR0aGlzLT5kZWNvZGUoJHBhcnRzWzJdKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT51c2UgJiBTRVJWSUNFU19KU09OX0xPT1NFX1RZUEUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2JqWyRrZXldID0gJHZhbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9iai0+JGtleSA9ICR2YWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCgoJGNocnN7JGN9ID09ICciJykgfHwgKCRjaHJzeyRjfSA9PSAiJyIpKSAmJiAoJHRvcFsnd2hhdCddICE9IFNFUlZJQ0VTX0pTT05fSU5fU1RSKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgcXVvdGUsIGFuZCB3ZSBhcmUgbm90IGluc2lkZSBhIHN0cmluZw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJHN0aywgYXJyYXkoJ3doYXQnID0+IFNFUlZJQ0VTX0pTT05fSU5fU1RSLCAnd2hlcmUnID0+ICRjLCAnZGVsaW0nID0+ICRjaHJzeyRjfSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnQoIkZvdW5kIHN0YXJ0IG9mIHN0cmluZyBhdCB7JGN9XG4iKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCgkY2hyc3skY30gPT0gJHRvcFsnZGVsaW0nXSkgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkdG9wWyd3aGF0J10gPT0gU0VSVklDRVNfSlNPTl9JTl9TVFIpICYmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN0cmxlbihzdWJzdHIoJGNocnMsIDAsICRjKSkgLSBzdHJsZW4ocnRyaW0oc3Vic3RyKCRjaHJzLCAwLCAkYyksICdcXCcpKSkgJSAyICE9IDEpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBxdW90ZSwgd2UncmUgaW4gYSBzdHJpbmcsIGFuZCBpdCdzIG5vdCBlc2NhcGVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Uga25vdyB0aGF0IGl0J3Mgbm90IGVzY2FwZWQgYmVjYXNlIHRoZXJlIGlzIF9ub3RfIGFuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2RkIG51bWJlciBvZiBiYWNrc2xhc2hlcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgc28gZmFyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcG9wKCRzdGspOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnQoIkZvdW5kIGVuZCBvZiBzdHJpbmcgYXQgeyRjfTogIi5zdWJzdHIoJGNocnMsICR0b3BbJ3doZXJlJ10sICgxICsgMSArICRjIC0gJHRvcFsnd2hlcmUnXSkpLiJcbiIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoKCRjaHJzeyRjfSA9PSAnWycpICYmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9hcnJheSgkdG9wWyd3aGF0J10sIGFycmF5KFNFUlZJQ0VTX0pTT05fU0xJQ0UsIFNFUlZJQ0VTX0pTT05fSU5fQVJSLCBTRVJWSUNFU19KU09OX0lOX09CSikpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBsZWZ0LWJyYWNrZXQsIGFuZCB3ZSBhcmUgaW4gYW4gYXJyYXksIG9iamVjdCwgb3Igc2xpY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRzdGssIGFycmF5KCd3aGF0JyA9PiBTRVJWSUNFU19KU09OX0lOX0FSUiwgJ3doZXJlJyA9PiAkYywgJ2RlbGltJyA9PiBmYWxzZSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnQoIkZvdW5kIHN0YXJ0IG9mIGFycmF5IGF0IHskY31cbiIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoKCRjaHJzeyRjfSA9PSAnXScpICYmICgkdG9wWyd3aGF0J10gPT0gU0VSVklDRVNfSlNPTl9JTl9BUlIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSByaWdodC1icmFja2V0LCBhbmQgd2UncmUgaW4gYW4gYXJyYXkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3AoJHN0ayk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludCgiRm91bmQgZW5kIG9mIGFycmF5IGF0IHskY306ICIuc3Vic3RyKCRjaHJzLCAkdG9wWyd3aGVyZSddLCAoMSArICRjIC0gJHRvcFsnd2hlcmUnXSkpLiJcbiIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoKCRjaHJzeyRjfSA9PSAneycpICYmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9hcnJheSgkdG9wWyd3aGF0J10sIGFycmF5KFNFUlZJQ0VTX0pTT05fU0xJQ0UsIFNFUlZJQ0VTX0pTT05fSU5fQVJSLCBTRVJWSUNFU19KU09OX0lOX09CSikpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBsZWZ0LWJyYWNlLCBhbmQgd2UgYXJlIGluIGFuIGFycmF5LCBvYmplY3QsIG9yIHNsaWNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkc3RrLCBhcnJheSgnd2hhdCcgPT4gU0VSVklDRVNfSlNPTl9JTl9PQkosICd3aGVyZScgPT4gJGMsICdkZWxpbScgPT4gZmFsc2UpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50KCJGb3VuZCBzdGFydCBvZiBvYmplY3QgYXQgeyRjfVxuIik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgoJGNocnN7JGN9ID09ICd9JykgJiYgKCR0b3BbJ3doYXQnXSA9PSBTRVJWSUNFU19KU09OX0lOX09CSikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIHJpZ2h0LWJyYWNlLCBhbmQgd2UncmUgaW4gYW4gb2JqZWN0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcG9wKCRzdGspOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnQoIkZvdW5kIGVuZCBvZiBvYmplY3QgYXQgeyRjfTogIi5zdWJzdHIoJGNocnMsICR0b3BbJ3doZXJlJ10sICgxICsgJGMgLSAkdG9wWyd3aGVyZSddKSkuIlxuIik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgoJHN1YnN0cl9jaHJzX2NfMiA9PSAnLyonKSAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fYXJyYXkoJHRvcFsnd2hhdCddLCBhcnJheShTRVJWSUNFU19KU09OX1NMSUNFLCBTRVJWSUNFU19KU09OX0lOX0FSUiwgU0VSVklDRVNfSlNPTl9JTl9PQkopKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgY29tbWVudCBzdGFydCwgYW5kIHdlIGFyZSBpbiBhbiBhcnJheSwgb2JqZWN0LCBvciBzbGljZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJHN0aywgYXJyYXkoJ3doYXQnID0+IFNFUlZJQ0VTX0pTT05fSU5fQ01ULCAnd2hlcmUnID0+ICRjLCAnZGVsaW0nID0+IGZhbHNlKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50KCJGb3VuZCBzdGFydCBvZiBjb21tZW50IGF0IHskY31cbiIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoKCRzdWJzdHJfY2hyc19jXzIgPT0gJyovJykgJiYgKCR0b3BbJ3doYXQnXSA9PSBTRVJWSUNFU19KU09OX0lOX0NNVCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIGNvbW1lbnQgZW5kLCBhbmQgd2UncmUgaW4gb25lIG5vdw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3BvcCgkc3RrKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYysrOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9ICR0b3BbJ3doZXJlJ107ICRpIDw9ICRjOyArKyRpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2hycyA9IHN1YnN0cl9yZXBsYWNlKCRjaHJzLCAnICcsICRpLCAxKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnQoIkZvdW5kIGVuZCBvZiBjb21tZW50IGF0IHskY306ICIuc3Vic3RyKCRjaHJzLCAkdG9wWyd3aGVyZSddLCAoMSArICRjIC0gJHRvcFsnd2hlcmUnXSkpLiJcbiIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIGlmIChyZXNldCgkc3RrKSA9PSBTRVJWSUNFU19KU09OX0lOX0FSUikgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRhcnI7DQoNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKHJlc2V0KCRzdGspID09IFNFUlZJQ0VTX0pTT05fSU5fT0JKKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJG9iajsNCg0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBAdG9kbyBVbHRpbWF0ZWx5LCB0aGlzIHNob3VsZCBqdXN0IGNhbGwgUEVBUjo6aXNFcnJvcigpDQogICAgICovDQogICAgZnVuY3Rpb24gaXNFcnJvcigkZGF0YSwgJGNvZGUgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgaWYgKGNsYXNzX2V4aXN0cygncGVhcicpKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6aXNFcnJvcigkZGF0YSwgJGNvZGUpOw0KICAgICAgICB9IGVsc2VpZiAoaXNfb2JqZWN0KCRkYXRhKSAmJiAoZ2V0X2NsYXNzKCRkYXRhKSA9PSAnc2VydmljZXNfanNvbl9lcnJvcicgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3N1YmNsYXNzX29mKCRkYXRhLCAnc2VydmljZXNfanNvbl9lcnJvcicpKSkgew0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KfQ0KDQppZiAoY2xhc3NfZXhpc3RzKCdQRUFSX0Vycm9yJykpIHsNCg0KICAgIGNsYXNzIFNlcnZpY2VzX0pTT05fRXJyb3IgZXh0ZW5kcyBQRUFSX0Vycm9yDQogICAgew0KICAgICAgICBmdW5jdGlvbiBTZXJ2aWNlc19KU09OX0Vycm9yKCRtZXNzYWdlID0gJ3Vua25vd24gZXJyb3InLCAkY29kZSA9IG51bGwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1vZGUgPSBudWxsLCAkb3B0aW9ucyA9IG51bGwsICR1c2VyaW5mbyA9IG51bGwpDQogICAgICAgIHsNCiAgICAgICAgICAgIHBhcmVudDo6UEVBUl9FcnJvcigkbWVzc2FnZSwgJGNvZGUsICRtb2RlLCAkb3B0aW9ucywgJHVzZXJpbmZvKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KfSBlbHNlIHsNCg0KICAgIC8qKg0KICAgICAqIEB0b2RvIFVsdGltYXRlbHksIHRoaXMgY2xhc3Mgc2hhbGwgYmUgZGVzY2VuZGVkIGZyb20gUEVBUl9FcnJvcg0KICAgICAqLw0KICAgIGNsYXNzIFNlcnZpY2VzX0pTT05fRXJyb3INCiAgICB7DQogICAgICAgIGZ1bmN0aW9uIFNlcnZpY2VzX0pTT05fRXJyb3IoJG1lc3NhZ2UgPSAndW5rbm93biBlcnJvcicsICRjb2RlID0gbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kZSA9IG51bGwsICRvcHRpb25zID0gbnVsbCwgJHVzZXJpbmZvID0gbnVsbCkNCiAgICAgICAgew0KDQogICAgICAgIH0NCiAgICB9DQoNCn0NCiAgICANCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/JSON/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQptZXQ6DQoNClJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCnRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQoNClJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQpub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQpkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KDQpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRA0KV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCk1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElODQpOTyBFVkVOVCBTSEFMTCBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVA0KTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YNClVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQooSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YNClRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQo=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdJbWFnZSBDb21wcmVzc29yJzsNCiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0JlIHN1cmUgdG8gc2V0ICJVc2UgSW1hZ2UgQ29tcHJlc3NvciIgcGVybWlzc2lvbnMgdG8gdXNlIHRoaXMgbW9kdWxlISc7DQokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsIHVuaXN0YWxsZWQuJzsNCiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnUmVhbGx5PyBZb3VcJ3JlIHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIHRoaXMgbW9kdWxlPyc7DQokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgdW5pbnN0YWxsZWQuJzsNCiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuJzsNCiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBY2Nlc3MgRGVuaWVkLiBQbGVhc2UgY2hlY2sgeW91ciBwZXJtaXNzaW9ucy4nOw0KJGxhbmdbJ2Vycm9yJ10gPSAnRXJyb3IhJzsNCiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1JlZHVjZXMgZmlsZSBzaXplIG9mIGFsbCBpbWFnZXMgdXBsb2FkZWQgdG8gdGhlIEltYWdlIE1hbmFnZXIgdG8gaW1wcm92ZSB3ZWJzaXRlIHBlcmZvcm1hbmNlIHVzaW5nIHRoZSBzbXVzaC5pdC1BUEkuJzsNCiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICcnOw0KDQokbGFuZ1sndGl0bGVfaW1hZ2VsaXN0J10gPSAnRmlsZSB2aWV3JzsNCiRsYW5nWydmaWxlbmFtZXRleHQnXSA9ICdGaWxlbmFtZSc7DQokbGFuZ1snZmlsZXBlcm1zdGV4dCddID0gJ0FjY2VzcyBwZXJtcyc7DQokbGFuZ1snZmlsZXNpemV0ZXh0J10gPSAnU2l6ZSc7DQokbGFuZ1snZmlsZWRhdGV0ZXh0J10gPSAnRGF0ZSc7DQokbGFuZ1snc211c2hpdHRleHQnXSA9ICdTbXVzaC5pdCc7DQokbGFuZ1snZmlsZWRhdGVmb3JtYXQnXSA9ICJtL2QvWSBIOm06cyI7DQokbGFuZ1snbm9zYXZpbmdzJ10gPSAnTm8gc2F2aW5ncyc7DQokbGFuZ1snY2hlY2tzYXZpbmdzJ10gPSAnQ2hlY2sgc2F2aW5ncyc7DQokbGFuZ1snY291bGRzYXZlJ10gPSAnQ2FuIHNhdmUgJTAxLjFmJSUnOw0KJGxhbmdbJ2NvbXByZXNzJ10gPSAnQ29tcHJlc3MhJzsNCiRsYW5nWydub3R3cml0YWJsZSddID0gJ05vdCB3cml0YWJsZSEnOw0KJGxhbmdbJ2RvbmUnXSA9ICdEb25lISc7DQokbGFuZ1snaW52YWxpZHVybCddID0gJ0ludmFsaWQgVVJMISc7DQokbGFuZ1snTi9BJ10gPSAnSW1hZ2UgY291bGRuXCd0IGJlIHByb2Nlc3NlZCBvciBzZXJ2aWNlIHVuYXZhaWxhYmxlLiBVbWxhdXRzIG9yIHNwYWNlcyBpbiBpbWFnZSBuYW1lPyc7DQokbGFuZ1snbm9maWxlcyddID0gJ05vIGltYWdlcyBmb3VuZC4nOw0KJGxhbmdbJ2NoZWNraW5nJ10gPSAnQ2hlY2tpbmcgaW1hZ2UuLi4nOw0KJGxhbmdbJ2lucXVldWVfc211c2gnXSA9ICdJbiBxdWV1ZSAoc211c2gpJzsNCiRsYW5nWydpbnF1ZXVlX2NoZWNrJ10gPSAnSW4gcXVldWUgKGNoZWNrIGNvbXByZXNzKSc7]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1vZHVsZTogSW1hZ2VDb21wcmVzc29yDQojIFZlcnNpb246IDAuOSwgSlMNCiMgTWV0aG9kOiBJbnN0YWxsDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDggYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQ0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvaW1hZ2Vjb21wcmVzc29yLw0KIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignVXNlIEltYWdlIENvbXByZXNzb3InLCAnVXNlIEltYWdlIENvbXByZXNzb3InKTsNCg0KLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nDQokdGhpcy0+QXVkaXQoMCwgICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ2luc3RhbGxlZCcsICR0aGlzLT5HZXRWZXJzaW9uKCkpKTsNCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1vZHVsZTogSW1hZ2VDb21wcmVzc29yDQojIFZlcnNpb246IDAuOSwgSlMNCiMgTWV0aG9kOiBVbmluc3RhbGwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwOCBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9pbWFnZWNvbXByZXNzb3IvDQojDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdVc2UgSW1hZ2UgQ29tcHJlc3NvcicpOw0KJHRoaXMtPkF1ZGl0KDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VuaW5zdGFsbGVkJykpOw0KPz4=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/imagelist_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KPCEtLQ0KdmFyIENNU19BRE1JTl9ESVIgPSAneyRhZG1pbmRpcn0nOw0KdmFyIENNU19VU0VSX0tFWSA9ICd7JHVzZXJrZXl9JzsNCnZhciBDTVNfSU5DX0RJUiA9ICd7JGluY2Rpcn0nOw0KDQp2YXIgTEFOR19DSEVDS0lORyA9ICd7JGNoZWNraW5ndGV4dH0nOw0KdmFyIExBTkdfSU5RVUVVRV9TTVVTSCA9ICd7JGlucXVldWVfc211c2h0ZXh0fSc7DQp2YXIgTEFOR19JTlFVRVVFX0NIRUNLID0gJ3skaW5xdWV1ZV9jaGVja3RleHR9JzsNCi0tPg0KPC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7JGluY2Rpcn1hamF4LmpzIj48L3NjcmlwdD4NCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InskaW5jZGlyfWltYWdlY29tcHJlc3Nvci5jc3MiIC8+DQo8dGFibGUgd2lkdGg9IjEwMCUiIGNsYXNzPSJwYWdldGFibGUiIGNlbGxzcGFjaW5nPSIwIiBpZD0iZmlsZWxpc3RfaW1hZ2Vjb21wcmVzc29yIj4NCgk8dGhlYWQ+DQoJPHRyPg0KCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPg0KCQk8dGg+eyRmaWxlbmFtZXRleHR9PC90aD4NCgkJPHRoIGNsYXNzPSJwYWdlaWNvbiIgc3R5bGU9InBhZGRpbmctcmlnaHQ6NTBweDsiPnskZmlsZXBlcm1zdGV4dH08L3RoPg0KCQk8dGggY2xhc3M9InBhZ2VpY29uIiBzdHlsZT0icGFkZGluZy1yaWdodDo1MHB4OyI+eyRmaWxlc2l6ZXRleHR9PC90aD4NCgkJPHRoIGNsYXNzPSJwYWdlaWNvbiIgc3R5bGU9InBhZGRpbmctcmlnaHQ6NTBweDsiPnskZmlsZWRhdGV0ZXh0fTwvdGg+DQoJCTx0aCBjbGFzcz0icGFnZWljb24iPnskc211c2hpdHRleHR9IDxicj4NCgkJCTxhIG9uY2xpY2s9Im1hc3NfY29tcHJlc3NfY2hlY2soKTsiIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiID4oY2hlY2sgYWxsKTwvYT4gfA0KCQkJPGEgb25jbGljaz0ibWFzc19zbXVzaCgpOyIgc3R5bGU9ImN1cnNvcjpwb2ludGVyOyI+KHNtdXNoIGFsbCk8L2E+IHwNCgkJCTxhIG9uY2xpY2s9InN0b3BfcXVldWUoKTsiIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiPihzdG9wIHF1ZXVlKTwvYT4NCgkJPC90aD4NCgk8L3RyPg0KCTwvdGhlYWQ+DQoJPHRib2R5Pg0KCXtmb3JlYWNoIGZyb209JGZpbGVzIGl0ZW09ZmlsZSBuYW1lPSJmaWxlcyJ9DQoJPHRyIGNsYXNzPSJyb3d7aWYgJHNtYXJ0eS5mb3JlYWNoLmZpbGVzLml0ZXJhdGlvbiAlIDJ9MXtlbHNlfTJ7L2lmfSI+DQoJCTx0ZCB2YWxpZ249Im1pZGRsZSI+eyRmaWxlLT5pY29ufTwvdGQ+DQoJCTx0ZCB2YWxpZ249Im1pZGRsZSI+PGEgaHJlZj0ieyRmaWxlLT51cmx9IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImZpbGUiPnskZmlsZS0+ZmlsZW5hbWV9PC9hPjwvdGQ+DQoJCTx0ZCB2YWxpZ249Im1pZGRsZSI+eyRmaWxlLT5maWxlcGVybXN9PC90ZD4NCgkJPHRkIHZhbGlnbj0ibWlkZGxlIj57JGZpbGUtPmZpbGVzaXplfTwvdGQ+DQoJCTx0ZCB2YWxpZ249Im1pZGRsZSI+eyRmaWxlLT5maWxlZGF0ZX08L3RkPg0KCQk8dGQgdmFsaWduPSJtaWRkbGUiPjxhIGhyZWY9IiMiIGNsYXNzPSJtYXNzY2xpY2siIG9uY2xpY2s9ImdldF9jb21wcmVzc2lvbl9yYXRlKCd7JGZpbGUtPmZpbGVuYW1lfScsICQodGhpcykucGFyZW50KCkpO3JldHVybiBmYWxzZTsiPnskY2hlY2tzYXZpbmdzfTwvYT48L3RkPg0KCTwvdHI+DQoJey9mb3JlYWNofQ0KCTwvdGJvZHk+DQo8L3RhYmxlPg==]]></data>
	</file>
</module>
