<?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>TemplateExternalizer</name>
	<version>1.0.3</version>
  <mincmsversion>0.11</mincmsversion>
	<help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5JdCBhbGxvd3MgeW91IHRvIHVzZSBhbnkgZXh0ZXJuYWwgZWRpdG9yIHRvIGVkaXQgeW91ciB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzLjwvcD4NCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPg0KPHA+Rmlyc3QgY29uZmlndXJlIHRoZSBwYXRoIHdoZXJlIHlvdSB3b3VsZCBsaWtlIHRoZSB0ZW1wbGF0ZSBmaWxlcyB0byBiZSBzYXZlZC4gDQpUaGUgZGVmYXVsdCBpcyB0bXAvZXh0ZXJuYWxpemVyLyB3aGljaCBzaG91bGQgd29yayBmb3IgbW9zdCBwZW9wbGUuIE5leHQgdHVybiBvbg0KPGVtPkRldmVsb3BtZW50IE1vZGU8L2VtPiB3aGljaCBleHBvcnRzIGVhY2ggdGVtcGxhdGUgYW5kIHN0eWxlc2hlZXQgZnJvbSB0aGUgDQpkYXRhYmFzZSB0byBmaWxlcy4gWW91IG1heSBub3cgZWRpdCB0aGUgZmlsZXMgaG93ZXZlciB5b3UgbGlrZSBhbmQgYW55IGNoYW5nZXMgYXJlIA0KYXV0b21hdGljYWxseSBkZXRlY3RlZCwgaW1wb3J0ZWQgdG8gdGhlIGRhdGFiYXNlIGFuZCB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseS48L3A+DQoNCjxwPklmIHlvdSBlZGl0IG9yIGFkZCBuZXcgdGVtcGxhdGVzIG9yIHN0eWxlc2hlZXRzIHVzaW5nIHRoZSBub3JtYWwgd2ViIGludGVyZmFjZSANCndoaWxlIDxlbT5EZXZlbG9wbWVudCBNb2RlPC9lbT4gaXMgb24sIHRoZXNlIGNoYW5nZXMgd2lsbCBiZSBleHBvcnRlZCB0byB0aGUgZmlsZXMuIA0KQW55IGZpbGVzIGluIHRoZSB0ZW1wbGF0ZSBwYXRoIHdob3NlIG5hbWVzIGRvIG5vdCBjb3JyZXNwb25kIHRvIGV4aXN0aW5nIHRlbXBsYXRlcw0Kd2lsbCBiZSBpZ25vcmVkLjwvcD4NCg0KPHA+V2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCANCmVkaXRpbmcgdGhlIGZpbGVzIHlvdSBzaG91bGQgdHVybiA8ZW0+RGV2ZWxvcG1lbnQgTW9kZTwvZW0+IG9mZiBvdGhlcndpc2UgaXQgDQp3aWxsIGFmZmVjdCBwZXJmb3JtYW5jZS4gSG93ZXZlciwgaWYgbm8gY2hhbmdlcyBhcmUgbWFkZSB0byBhbnkgb2YgdGhlIGZpbGVzIGZvciANCjxlbT5UaW1lb3V0PC9lbT4gbWludXRlcywgPGVtPkRldmVsb3BtZW50IE1vZGU8L2VtPiB3aWxsIHR1cm4gaXRzZWxmIG9mZiANCmF1dG9tYXRpY2FsbHkuIFNldCA8ZW0+VGltZW91dDwvZW0+IHRvIDAgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuPC9wPg0KDQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwNiwgVGFtbHluIFJob2RlcyAmbHQ7PGEgaHJlZj0iaHR0cDovL3RhbWx5bi5vcmciPnRhbWx5bi5vcmc8L2E+Jmd0Oy4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gDQpZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPg0KPGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=</help>
	<about>PGJyIC8+QXV0aG9yOiB0YW1seW4gJmx0O3RhbUB6ZW5vbG9neS5jby51ayZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAxLjAuMzxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPjx1bD4NCjxsaT5WZXJzaW9uIDEuMC4yIDI5IEF1Z3VzdCAyMDA2LiBGaXhlZCBsYXp5IGxvYWRpbmcgZm9yIENNUyAxLjBiZXRhNjwvbGk+DQo8bGk+VmVyc2lvbiAxLjAuMSA5IEp1bmUgMjAwNi4gU3BlY2lhbCBjaGFyYWN0ZXJzIGluIGZpbGVuYW1lcyBhcmUgZXNjYXBlZC4gRml4ZWQgYW5vdGhlciBidWcuPC9saT4NCjxsaT5WZXJzaW9uIDEuMCAyOCBNYXkgMjAwNi4gSW5pdGlhbCBSZWxlYXNlLjwvbGk+DQo8L3VsPjxiciAvPg==</about>
	<description>Configure the Template Externalizer module.</description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdUZW1wbGF0ZSBFeHRlcm5hbGl6ZXInOw0KJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnVGhpcyBtb2R1bGUgd2lsbCBub3QgZG8gYW55dGhpbmcgdW50aWwgPGVtPkRldmVsb3BtZW50IE1vZGU8L2VtPiBpcyB0dXJuZWQgb24uIFNlZSB0aGUgSGVscCBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLic7DQokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsNCiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuJzsNCiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdNb2R1bGUgcHJlZmVyZW5jZXMgdXBkYXRlZC4nOw0KJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7DQokbGFuZ1snZXJyb3InXSA9ICdFcnJvciEnOw0KJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWxlIHVwZ3JhZGVkIHRvIHZlcnNpb24gJXMuJzsNCiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0NvbmZpZ3VyZSB0aGUgVGVtcGxhdGUgRXh0ZXJuYWxpemVyIG1vZHVsZS4nOw0KJGxhbmdbJ2Rldl9tb2RlX2VuYWJsZWQnXSA9ICdEZXZlbG9wbWVudCBNb2RlIGVuYWJsZWQuJzsNCiRsYW5nWydkZXZfbW9kZV9kaXNhYmxlZCddID0gJ0RldmVsb3BtZW50IE1vZGUgZGlzYWJsZWQuJzsNCiRsYW5nWydkZXZfbW9kZV90aW1lZG91dCddID0gJ0RldmVsb3BtZW50IE1vZGUgdGltZWQgb3V0Lic7DQokbGFuZ1sndGl0bGVfZGV2X21vZGUnXSA9ICdEZXZlbG9wbWVudCBNb2RlJzsNCiRsYW5nWyd0aXRsZV90aW1lb3V0J10gPSAnRGV2IE1vZGUgVGltZW91dCc7DQokbGFuZ1sndGl0bGVfdGltZW91dF91bml0cyddID0gJ21pbnV0ZXMnOw0KJGxhbmdbJ3RpdGxlX2NhY2hlX3BhdGgnXSA9ICdDYWNoZSBQYXRoJzsNCiRsYW5nWyd0aXRsZV90ZW1wbGF0ZV9leHRlbnNpb24nXSA9ICdUZW1wbGF0ZSBGaWxlIEV4dGVuc2lvbic7DQokbGFuZ1sndGl0bGVfc3R5bGVzaGVldF9leHRlbnNpb24nXSA9ICdTdHlsZXNoZWV0IEZpbGUgRXh0ZW5zaW9uJzsNCiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+DQo8bGk+VmVyc2lvbiAxLjAuMiAyOSBBdWd1c3QgMjAwNi4gRml4ZWQgbGF6eSBsb2FkaW5nIGZvciBDTVMgMS4wYmV0YTY8L2xpPg0KPGxpPlZlcnNpb24gMS4wLjEgOSBKdW5lIDIwMDYuIFNwZWNpYWwgY2hhcmFjdGVycyBpbiBmaWxlbmFtZXMgYXJlIGVzY2FwZWQuIEZpeGVkIGFub3RoZXIgYnVnLjwvbGk+DQo8bGk+VmVyc2lvbiAxLjAgMjggTWF5IDIwMDYuIEluaXRpYWwgUmVsZWFzZS48L2xpPg0KPC91bD4nOw0KJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4NCjxwPkl0IGFsbG93cyB5b3UgdG8gdXNlIGFueSBleHRlcm5hbCBlZGl0b3IgdG8gZWRpdCB5b3VyIHRlbXBsYXRlcyBhbmQgc3R5bGVzaGVldHMuPC9wPg0KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+DQo8cD5GaXJzdCBjb25maWd1cmUgdGhlIHBhdGggd2hlcmUgeW91IHdvdWxkIGxpa2UgdGhlIHRlbXBsYXRlIGZpbGVzIHRvIGJlIHNhdmVkLiANClRoZSBkZWZhdWx0IGlzIHRtcC9leHRlcm5hbGl6ZXIvIHdoaWNoIHNob3VsZCB3b3JrIGZvciBtb3N0IHBlb3BsZS4gTmV4dCB0dXJuIG9uDQo8ZW0+RGV2ZWxvcG1lbnQgTW9kZTwvZW0+IHdoaWNoIGV4cG9ydHMgZWFjaCB0ZW1wbGF0ZSBhbmQgc3R5bGVzaGVldCBmcm9tIHRoZSANCmRhdGFiYXNlIHRvIGZpbGVzLiBZb3UgbWF5IG5vdyBlZGl0IHRoZSBmaWxlcyBob3dldmVyIHlvdSBsaWtlIGFuZCBhbnkgY2hhbmdlcyBhcmUgDQphdXRvbWF0aWNhbGx5IGRldGVjdGVkLCBpbXBvcnRlZCB0byB0aGUgZGF0YWJhc2UgYW5kIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5LjwvcD4NCg0KPHA+SWYgeW91IGVkaXQgb3IgYWRkIG5ldyB0ZW1wbGF0ZXMgb3Igc3R5bGVzaGVldHMgdXNpbmcgdGhlIG5vcm1hbCB3ZWIgaW50ZXJmYWNlIA0Kd2hpbGUgPGVtPkRldmVsb3BtZW50IE1vZGU8L2VtPiBpcyBvbiwgdGhlc2UgY2hhbmdlcyB3aWxsIGJlIGV4cG9ydGVkIHRvIHRoZSBmaWxlcy4gDQpBbnkgZmlsZXMgaW4gdGhlIHRlbXBsYXRlIHBhdGggd2hvc2UgbmFtZXMgZG8gbm90IGNvcnJlc3BvbmQgdG8gZXhpc3RpbmcgdGVtcGxhdGVzDQp3aWxsIGJlIGlnbm9yZWQuPC9wPg0KDQo8cD5XaGVuIHlvdSBoYXZlIGZpbmlzaGVkIA0KZWRpdGluZyB0aGUgZmlsZXMgeW91IHNob3VsZCB0dXJuIDxlbT5EZXZlbG9wbWVudCBNb2RlPC9lbT4gb2ZmIG90aGVyd2lzZSBpdCANCndpbGwgYWZmZWN0IHBlcmZvcm1hbmNlLiBIb3dldmVyLCBpZiBubyBjaGFuZ2VzIGFyZSBtYWRlIHRvIGFueSBvZiB0aGUgZmlsZXMgZm9yIA0KPGVtPlRpbWVvdXQ8L2VtPiBtaW51dGVzLCA8ZW0+RGV2ZWxvcG1lbnQgTW9kZTwvZW0+IHdpbGwgdHVybiBpdHNlbGYgb2ZmIA0KYXV0b21hdGljYWxseS4gU2V0IDxlbT5UaW1lb3V0PC9lbT4gdG8gMCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS48L3A+DQoNCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA2LCBUYW1seW4gUmhvZGVzICZsdDs8YSBocmVmPSJodHRwOi8vdGFtbHluLm9yZyI+dGFtbHluLm9yZzwvYT4mZ3Q7LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiANCllvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+DQonOw0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/TemplateExternalizer.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGVtcGxhdGVFeHRlcm5hbGl6ZXIgLSBlZGl0IHRlbXBsYXRlcyAmIHN0eWxlc2hlZXRzIGV4dGVybmFsbHkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKY2xhc3MgVGVtcGxhdGVFeHRlcm5hbGl6ZXIgZXh0ZW5kcyBDTVNNb2R1bGUKewoKICAvL21vZHVsZSBjb25zdHJ1Y3RvcgogIGZ1bmN0aW9uIFRlbXBsYXRlRXh0ZXJuYWxpemVyKCkKICB7CiAgICAvL2NhbGwgcGFyZW50IGNvbnN0cnVjdG9yCiAgICAkdGhpcy0+Q01TTW9kdWxlKCk7CiAgICAKICAgIC8vaW1wb3J0IHRoZSB0ZW1wbGF0ZXMKICAgIGlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJkZXZfbW9kZSIpKQogICAgICAkdGhpcy0+SW1wb3J0VGVtcGxhdGVzKCk7CiAgfQogIAogIGZ1bmN0aW9uIEdldE5hbWUoKQogIHsKICAgIHJldHVybiAnVGVtcGxhdGVFeHRlcm5hbGl6ZXInOwogIH0KCiAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOwogIH0KCiAgZnVuY3Rpb24gR2V0VmVyc2lvbigpCiAgewogICAgcmV0dXJuICcxLjAuMyc7CiAgfQoKICBmdW5jdGlvbiBHZXRIZWxwKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsKICB9CgogIGZ1bmN0aW9uIEdldEF1dGhvcigpCiAgewogICAgcmV0dXJuICd0YW1seW4nOwogIH0KCiAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKQogIHsKICAgIHJldHVybiAndGFtQHplbm9sb2d5LmNvLnVrJzsKICB9CgogIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTsKICB9CgogIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBIYXNBZG1pbigpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKQogIHsKICAgIHJldHVybiAnbGF5b3V0JzsKICB9CgoKICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7CiAgfQoKCiAgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVGVtcGxhdGUgRXh0ZXJuYWxpemVyJyk7CiAgfQoKICBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpCiAgewogICAgcmV0dXJuICIwLjExIjsKICB9CgoKICBmdW5jdGlvbiBJbnN0YWxsKCkKICB7CiAgICAkZGIgPSAmJHRoaXMtPmNtcy0+ZGI7CiAgICAKICAgIC8vIGNyZWF0ZSBhIHBlcm1pc3Npb24KICAgICR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdUZW1wbGF0ZSBFeHRlcm5hbGl6ZXInLCAnVGVtcGxhdGUgRXh0ZXJuYWxpemVyJyk7CiAgICAKICAgIC8vIGNyZWF0ZSBwcmVmZXJlbmNlcyB3aXRoIGRlZmF1bHQgdmFsdWVzCiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiZGV2X21vZGUiLCBmYWxzZSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgidGltZW91dCIsIDMwKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJjYWNoZV9wYXRoIiwgJEdMT0JBTFNbJ2dDbXMnXS0+Y29uZmlnWydyb290X3BhdGgnXS4nL3RtcC9leHRlcm5hbGl6ZXInKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJzdHlsZXNoZWV0X2V4dGVuc2lvbiIsICdjc3MnKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ0ZW1wbGF0ZV9leHRlbnNpb24iLCAnaHRtbCcpOwoKICAgIC8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwogICAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKICB9CgogIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOwogIH0KCiAgZnVuY3Rpb24gVXBncmFkZSgkb2xkdmVyc2lvbiwgJG5ld3ZlcnNpb24pCiAgewogICAgJGN1cnJlbnRfdmVyc2lvbiA9ICRvbGR2ZXJzaW9uOwogICAgc3dpdGNoKCRjdXJyZW50X3ZlcnNpb24pCiAgICB7CiAgICAgIGNhc2UgIjEuMCIgOgogICAgICBjYXNlICIxLjAuMSIgOgogICAgICBjYXNlICIxLjAuMiIgOgogICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiAgICAkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VwZ3JhZGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7CiAgfQoKICAvKioKICAgKiBFeHBvcnQgYW55IG5ld2x5IGNyZWF0ZWQgdGVtcGxhdGVzIGlmIGRldl9tb2RlIGlzIG9uCiAgICovICAKICBmdW5jdGlvbiBBZGRUZW1wbGF0ZVBvc3QoJiR0ZW1wbGF0ZSkgewogICAgaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoImRldl9tb2RlIikpCiAgICAgICR0aGlzLT5FeHBvcnRUZW1wbGF0ZXMoKTsKICB9CiAgCiAgLyoqCiAgICogRXhwb3J0IHRoZSBjaGFuZ2VzIHRvIHRlbXBsYXRlcyBpZiBkZXZfbW9kZSBpcyBvbgogICAqLyAgCiAgZnVuY3Rpb24gRWRpdFRlbXBsYXRlUG9zdCgmJHRlbXBsYXRlKSB7CiAgICBpZigkdGhpcy0+R2V0UHJlZmVyZW5jZSgiZGV2X21vZGUiKSkKICAgICAgJHRoaXMtPkV4cG9ydFRlbXBsYXRlcygpOwogIH0KCiAgZnVuY3Rpb24gVW5pbnN0YWxsKCkKICB7CiAgICAkZGIgPSAmJHRoaXMtPmNtcy0+ZGI7CiAgICAKICAgIC8vIHJlbW92ZSB0aGUgcGVybWlzc2lvbnMKICAgICR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdUZW1wbGF0ZSBFeHRlcm5hbGl6ZXInKTsKICAgIAogICAgLy8gcmVtb3ZlIHByZWZlcmVuY2VzCiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgiZGV2X21vZGUiKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCJ0aW1lb3V0Iik7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgiY2FjaGVfcGF0aCIpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoInN0eWxlc2hlZXRfZXh0ZW5zaW9uIik7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgidGVtcGxhdGVfZXh0ZW5zaW9uIik7CiAgICAKICAgIC8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwogICAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKICB9CgogIGZ1bmN0aW9uIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybl9pZD0tMSkKICB7CiAgICBzd2l0Y2ggKCRhY3Rpb24pCiAgICB7CiAgICAgIGNhc2UgJ2RlZmF1bHQnOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdkZWZhdWx0YWRtaW4nOgogICAgICAgIC8vIG9ubHkgbGV0IHBlb3BsZSBhY2Nlc3MgbW9kdWxlIHByZWZlcmVuY2VzIGlmIHRoZXkgaGF2ZSBwZXJtaXNzaW9uCiAgICAgICAgaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1RlbXBsYXRlIEV4dGVybmFsaXplcicpKSB7CiAgICAgICAgICAkdGhpcy0+RGlzcGxheUFkbWluUHJlZnMoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ3NhdmVfYWRtaW5fcHJlZnMnOgogICAgICAgIC8vIG9ubHkgbGV0IHBlb3BsZSBzYXZlIG1vZHVsZSBwcmVmZXJlbmNlcyBpZiB0aGV5IGhhdmUgcGVybWlzc2lvbgogICAgICAgIGlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdUZW1wbGF0ZSBFeHRlcm5hbGl6ZXInKSkKICAgICAgICAgICR0aGlzLT5TYXZlQWRtaW5QcmVmcygkaWQsICRwYXJhbXMsICRyZXR1cm5faWQpOwogICAgICAgIGJyZWFrOwogICAgfQoKICB9CgogIGZ1bmN0aW9uIERpc3BsYXlBZG1pblByZWZzKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2U9JycpCiAgewoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywKICAgICAgICAgICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnc2F2ZV9hZG1pbl9wcmVmcycsICRyZXR1cm5pZCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsCiAgICAgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJ1N1Ym1pdCcpKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2Rldl9tb2RlJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2Rldl9tb2RlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV90aW1lb3V0JywgJHRoaXMtPkxhbmcoJ3RpdGxlX3RpbWVvdXQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2NhY2hlX3BhdGgnLCAkdGhpcy0+TGFuZygndGl0bGVfY2FjaGVfcGF0aCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfdGVtcGxhdGVfZXh0ZW5zaW9uJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3RlbXBsYXRlX2V4dGVuc2lvbicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfc3R5bGVzaGVldF9leHRlbnNpb24nLCAkdGhpcy0+TGFuZygndGl0bGVfc3R5bGVzaGVldF9leHRlbnNpb24nKSk7CiAgICAKICAgIAogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignbWVzc2FnZScsICRtZXNzYWdlKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2Rldl9tb2RlJywgJHRoaXMtPkNyZWF0ZUlucHV0UmFkaW9Hcm91cCgkaWQsICdkZXZfbW9kZScsIAogICAgICAgICAgICBhcnJheSgnT2ZmJz0+MCwgJ09uJz0+MSksICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXZfbW9kZScsICcxJykpCiAgICAgICAgKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdGltZW91dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAndGltZW91dCcsCiAgICAgICAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0aW1lb3V0JykpLicgJy4kdGhpcy0+TGFuZygndGl0bGVfdGltZW91dF91bml0cycpKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2NhY2hlX3BhdGgnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2NhY2hlX3BhdGgnLAogICAgICAgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY2FjaGVfcGF0aCcpLCA0MCkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdGVtcGxhdGVfZXh0ZW5zaW9uJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0ZW1wbGF0ZV9leHRlbnNpb24nLAogICAgICAgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGVtcGxhdGVfZXh0ZW5zaW9uJykpKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3N0eWxlc2hlZXRfZXh0ZW5zaW9uJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdzdHlsZXNoZWV0X2V4dGVuc2lvbicsCiAgICAgICAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzdHlsZXNoZWV0X2V4dGVuc2lvbicpKSk7CgogICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWlucHJlZnMudHBsJyk7CiAgfQoKICBmdW5jdGlvbiBTYXZlQWRtaW5QcmVmcygkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQpCiAgewogICAgJG9sZG1vZGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGV2X21vZGUnKTsKICAgICRuZXdtb2RlID0gJHBhcmFtc1snZGV2X21vZGUnXTsKICAgIAogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Rldl9tb2RlJywgJHBhcmFtc1snZGV2X21vZGUnXSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgndGltZW91dCcsICRwYXJhbXNbJ3RpbWVvdXQnXSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnY2FjaGVfcGF0aCcsICRwYXJhbXNbJ2NhY2hlX3BhdGgnXSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgndGVtcGxhdGVfZXh0ZW5zaW9uJywgJHBhcmFtc1sndGVtcGxhdGVfZXh0ZW5zaW9uJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3N0eWxlc2hlZXRfZXh0ZW5zaW9uJywgJHBhcmFtc1snc3R5bGVzaGVldF9leHRlbnNpb24nXSk7CiAgICAKICAgICRtZXNzYWdlID0gJHRoaXMtPkxhbmcoJ3ByZWZzdXBkYXRlZCcpOwoKICAgIGlmKCEkb2xkbW9kZSAmJiAkbmV3bW9kZSkgewogICAgICAkdGhpcy0+RXhwb3J0VGVtcGxhdGVzKCk7CiAgICAgICR0aGlzLT5BdWRpdCgwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdkZXZfbW9kZV9lbmFibGVkJykpOwogICAgICAkbWVzc2FnZSAuPSAnICcuJHRoaXMtPkxhbmcoJ2Rldl9tb2RlX2VuYWJsZWQnKTsKICAgIH0gZWxzZWlmKCRvbGRtb2RlICYmICEkbmV3bW9kZSkgewogICAgICAkdGhpcy0+RGVsZXRlVGVtcGxhdGVDYWNoZSgpOwogICAgICAkdGhpcy0+QXVkaXQoMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygnZGV2X21vZGVfZGlzYWJsZWQnKSk7CiAgICAgICRtZXNzYWdlIC49ICcgJy4kdGhpcy0+TGFuZygnZGV2X21vZGVfZGlzYWJsZWQnKTsKICAgIH0KICAgIAogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ21lc3NhZ2UnID0+ICRtZXNzYWdlKSk7CiAgfQoKICBmdW5jdGlvbiBEaXNwbGF5RXJyb3JQYWdlKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2U9JycpCiAgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lcnJvcicsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICAgIGlmICgkbWVzc2FnZSAhPSAnJykKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignbWVzc2FnZScsICRtZXNzYWdlKTsKCiAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZXJyb3IudHBsJyk7CiAgfQogIAogIGZ1bmN0aW9uIGVzY2FwZUZpbGVuYW1lKCRmbmFtZSkKICB7CiAgICByZXR1cm4gc3RydHIoJGZuYW1lLCAiOi8/XFwiLCAiLS0tLSIpOwogIH0KCiAgLyoqCiAgICogRXhwb3J0IHRvIGZpbGVzIGFsbCB0aGUgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cyBmb3VuZCBpbiB0aGUgZGF0YWJhc2UKICAgKi8KICBmdW5jdGlvbiBFeHBvcnRUZW1wbGF0ZXMoKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgIAogICAgJGNhY2hlX3BhdGggPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY2FjaGVfcGF0aCcpOwogICAgJHN0eWxlc2hlZXRfZXh0ZW5zaW9uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3N0eWxlc2hlZXRfZXh0ZW5zaW9uJyk7CiAgICAkdGVtcGxhdGVfZXh0ZW5zaW9uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RlbXBsYXRlX2V4dGVuc2lvbicpOwogICAgCiAgICAvL2NoZWNrIHRoYXQgdGhlIHNhdmUgcGF0aCBleGlzdHMgYW5kIGlmIG5vdCwgYXR0ZW1wdCB0byBjcmVhdGUgaXQKICAgIGlmKCFmaWxlX2V4aXN0cygkY2FjaGVfcGF0aCkpCiAgICAgIGlmKG1rZGlyKCRjYWNoZV9wYXRoKSkKICAgICAgICBjaG1vZCgkY2FjaGVfcGF0aCwgMDc3Nyk7CiAgICAgIGVsc2UgewogICAgICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCJVbmFibGUgdG8gZmluZCBvciBjcmVhdGUgY2FjaGUgcGF0aDogIi4kY2FjaGVfcGF0aCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAvL2NoZWNrIHRoYXQgdGhlIHNhdmUgcGF0aCBpcyB3cml0YWJsZQogICAgZWxzZWlmKCFpc193cml0YWJsZSgkY2FjaGVfcGF0aCkpIHsKICAgICAgJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoIlVuYWJsZSB0byB3cml0ZSB0byBjYWNoZSBwYXRoOiAiLiRjYWNoZV9wYXRoKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgCiAgICAvL3VwZGF0ZSB0aW1lc3RhbXAgb24gY2FjaGUgZGlyIHRvICdyZXNldCcgdGltZW91dAogICAgdG91Y2goJGNhY2hlX3BhdGgpOwogICAgCiAgICAvL2xvYWQgYWxsIHRoZSB0ZW1wbGF0ZXMgYW5kIHNhdmUgdGhlbSB0byBmaWxlcwogICAgJHRvID0mICRnQ21zLT5nZXRUZW1wbGF0ZU9wZXJhdGlvbnMoKTsKICAgICR0ZW1wbGF0ZXMgPSAkdG8tPkxvYWRUZW1wbGF0ZXMoKTsKICAgIAogICAgZm9yZWFjaCgkdGVtcGxhdGVzIGFzICR0ZW1wbGF0ZSkgewogICAgICAkZm5hbWUgPSAkY2FjaGVfcGF0aC4nLycuJHRoaXMtPmVzY2FwZUZpbGVuYW1lKCR0ZW1wbGF0ZS0+bmFtZSkuJy4nLiR0ZW1wbGF0ZV9leHRlbnNpb247CiAgICAgICRmcCA9IGZvcGVuKCRmbmFtZSwgJ3cnKTsKICAgICAgLy93ZSBjb252ZXJ0IENSTEYgdG8gTEYgZm9yIHVuaXggY29tcGF0aWJpbGl0eQogICAgICBmd3JpdGUoJGZwLCBzdHJfcmVwbGFjZSgiXHJcbiIsICJcbiIsICR0ZW1wbGF0ZS0+Y29udGVudCkpOwogICAgICBmY2xvc2UoJGZwKTsKICAgICAgLy9tYWtlIHN1cmUgdGVtcGxhdGUgZmlsZXMgYXJlIHdyaXRhYmxlCiAgICAgIGNobW9kKCRmbmFtZSwgMDY2Nik7CiAgICAgIC8vc2V0IHRoZSBtb2RpZmllZCBkYXRlIHRvIHRoZSB0ZW1wbGF0ZSBtb2RpZmllZCBkYXRlCiAgICAgIHRvdWNoKCRmbmFtZSwgJHRlbXBsYXRlLT5tb2RpZmllZF9kYXRlKTsKICAgIH0KICAgIAogICAgLy9sb2FkIGFsbCB0aGUgc3R5bGVzaGVldHMgYW5kIHNhdmUgdGhlbSB0byBmaWxlcwogICAgJHNvID0mICRnQ21zLT5nZXRTdHlsZXNoZWV0T3BlcmF0aW9ucygpOwogICAgJHN0eWxlc2hlZXRzID0gJHNvLT5Mb2FkU3R5bGVzaGVldHMoKTsKCiAgICBmb3JlYWNoKCRzdHlsZXNoZWV0cyBhcyAkc3R5bGVzaGVldCkgewogICAgICAkZm5hbWUgPSAkY2FjaGVfcGF0aC4nLycuJHRoaXMtPmVzY2FwZUZpbGVuYW1lKCRzdHlsZXNoZWV0LT5uYW1lKS4nLicuJHN0eWxlc2hlZXRfZXh0ZW5zaW9uOwogICAgICAkZnAgPSBmb3BlbigkZm5hbWUsICd3Jyk7CiAgICAgIC8vd2UgY29udmVydCBDUkxGIHRvIExGIGZvciB1bml4IGNvbXBhdGliaWxpdHkKICAgICAgZndyaXRlKCRmcCwgc3RyX3JlcGxhY2UoIlxyXG4iLCAiXG4iLCAkc3R5bGVzaGVldC0+dmFsdWUpKTsKICAgICAgZmNsb3NlKCRmcCk7CiAgICAgIC8vbWFrZSBzdXJlIHN0eWxlc2hlZXQgZmlsZXMgYXJlIHdyaXRhYmxlCiAgICAgIGNobW9kKCRmbmFtZSwgMDY2Nik7CiAgICAgIC8vc2V0IHRoZSBmaWxlIG1vZGlmaWVkIGRhdGUgdG8gdGhlIHN0eWxlc2hlZXQgbW9kaWZpZWQgZGF0ZQogICAgICB0b3VjaCgkZm5hbWUsICRzdHlsZXNoZWV0LT5tb2RpZmllZF9kYXRlKTsKICAgIH0KICB9CiAgCiAgLyoqCiAgICogSW1wb3J0IGZyb20gZmlsZXMgYWxsIHRoZSB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIGZvdW5kIGluIHRoZSBkYXRhYmFzZQogICAqLwogIGZ1bmN0aW9uIEltcG9ydFRlbXBsYXRlcygpCiAgewogICAgZ2xvYmFsICRnQ21zOwogICAgCiAgICAkY2FjaGVfcGF0aCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjYWNoZV9wYXRoJyk7CiAgICAkdGltZW91dCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0aW1lb3V0Jyk7CiAgICAkc3R5bGVzaGVldF9leHRlbnNpb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc3R5bGVzaGVldF9leHRlbnNpb24nKTsKICAgICR0ZW1wbGF0ZV9leHRlbnNpb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGVtcGxhdGVfZXh0ZW5zaW9uJyk7CiAgICAkbW9zdF9yZWNlbnRfZWRpdCA9IEBmaWxlbXRpbWUoJGNhY2hlX3BhdGgpOwoKICAgIC8vZG9uJ3QgcmFpc2UgYW4gZXJyb3IgYXMgdGhpcyBjb3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgZnJvbnRlbmQKICAgIGlmKCFmaWxlX2V4aXN0cygkY2FjaGVfcGF0aCkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIAogICAgLy9sb2FkIGFsbCB0aGUgdGVtcGxhdGVzIGZyb20gdGhlIGRhdGFiYXNlIGFuZCB1cGRhdGUgdGhlbSBmcm9tIHRoZSBmaWxlcwogICAgJHRvID0mICRnQ21zLT5nZXRUZW1wbGF0ZU9wZXJhdGlvbnMoKTsKICAgICR0ZW1wbGF0ZXMgPSAkdG8tPkxvYWRUZW1wbGF0ZXMoKTsKICAgIAogICAgZm9yZWFjaCgkdGVtcGxhdGVzIGFzICRrZXkgPT4gJHRlbXBsYXRlKSB7CiAgICAgICRmbmFtZSA9ICRjYWNoZV9wYXRoLicvJy4kdGhpcy0+ZXNjYXBlRmlsZW5hbWUoJHRlbXBsYXRlLT5uYW1lKS4nLicuJHRlbXBsYXRlX2V4dGVuc2lvbjsKICAgICAgJGZ0aW1lID0gQGZpbGVtdGltZSgkZm5hbWUpOwogICAgICAkbW9zdF9yZWNlbnRfZWRpdCA9IG1heCgkbW9zdF9yZWNlbnRfZWRpdCwgJGZ0aW1lKTsKICAgICAgCiAgICAgIC8vb25seSBsb2FkIHRoZSBmaWxlIGlmIGl0IGhhcyBiZWVuIG1vZGlmaWVkIChleGlzdGVuY2UgaXMgaW1wbGljaXQpCiAgICAgIC8vYW5kIGZpbGVzaXplIT0wIAogICAgICBpZigkZnRpbWUgPiAkdGVtcGxhdGUtPm1vZGlmaWVkX2RhdGUgJiYgKCRmc2l6ZSA9IGZpbGVzaXplKCRmbmFtZSkpICE9IDApIHsKICAgICAgICAkZnAgPSBmb3BlbigkZm5hbWUsICdyJyk7CiAgICAgICAgJHRlbXBsYXRlc1ska2V5XS0+Y29udGVudCA9IGZyZWFkKCRmcCwgJGZzaXplKTsKICAgICAgICAkdGVtcGxhdGVzWyRrZXldLT5TYXZlKCk7CiAgICAgICAgZmNsb3NlKCRmcCk7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy9sb2FkIGFsbCB0aGUgc3R5bGVzaGVldHMgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIHVwZGF0ZSB0aGVtIGZyb20gdGhlIGZpbGVzCiAgICAkc28gPSYgJGdDbXMtPmdldFN0eWxlc2hlZXRPcGVyYXRpb25zKCk7CiAgICAkc3R5bGVzaGVldHMgPSAkc28tPkxvYWRTdHlsZXNoZWV0cygpOwoKICAgIGZvcmVhY2goJHN0eWxlc2hlZXRzIGFzICRrZXkgPT4gJHN0eWxlc2hlZXQpIHsKICAgICAgJGZuYW1lID0gJGNhY2hlX3BhdGguJy8nLiR0aGlzLT5lc2NhcGVGaWxlbmFtZSgkc3R5bGVzaGVldC0+bmFtZSkuJy4nLiRzdHlsZXNoZWV0X2V4dGVuc2lvbjsKICAgICAgJGZ0aW1lID0gQGZpbGVtdGltZSgkZm5hbWUpOwogICAgICAkbW9zdF9yZWNlbnRfZWRpdCA9IG1heCgkbW9zdF9yZWNlbnRfZWRpdCwgJGZ0aW1lKTsKICAgICAgCiAgICAgIC8vb25seSBsb2FkIHRoZSBmaWxlIGlmIGl0IGhhcyBiZWVuIG1vZGlmaWVkIChleGlzdGVuY2UgaXMgaW1wbGljaXQpCiAgICAgIGlmKCRmdGltZSA+IEAkc3R5bGVzaGVldC0+bW9kaWZpZWRfZGF0ZSAmJiAoJGZzaXplID0gZmlsZXNpemUoJGZuYW1lKSkgIT0gMCkgewogICAgICAgICRmcCA9IGZvcGVuKCRmbmFtZSwgJ3InKTsKICAgICAgICAkc3R5bGVzaGVldHNbJGtleV0tPnZhbHVlID0gZnJlYWQoJGZwLCAkZnNpemUpOwogICAgICAgICRzdHlsZXNoZWV0c1ska2V5XS0+U2F2ZSgpOwogICAgICAgIGZjbG9zZSgkZnApOwogICAgICB9CiAgICB9CiAgICAKICAgIC8vdHVybiBvZmYgZGV2X21vZGUgaWYgdGltZW91dCBpcyByZWFjaGVkCiAgICBpZigkdGltZW91dCAhPSAwICYmIHRpbWUoKSAtICRtb3N0X3JlY2VudF9lZGl0ID4gJHRpbWVvdXQqNjApIHsKICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Rldl9tb2RlJywgZmFsc2UpOwogICAgICAkdGhpcy0+QXVkaXQoMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygnZGV2X21vZGVfdGltZWRvdXQnKSk7CiAgICB9CiAgfQogIAogIC8qKgogICAqIERlbGV0ZSBhbGwgZmlsZXMgaW4gdGhlIGNhY2hlX3BhdGggZGlyZWN0b3J5CiAgICovCiAgZnVuY3Rpb24gRGVsZXRlVGVtcGxhdGVDYWNoZSgpCiAgewogICAgJGNhY2hlX3BhdGggPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY2FjaGVfcGF0aCcpOwogICAgaWYoISRkcCA9IG9wZW5kaXIoJGNhY2hlX3BhdGgpKSByZXR1cm4gZmFsc2U7CiAgICB3aGlsZShmYWxzZSAhPT0gKCRlbnRyeSA9IHJlYWRkaXIoJGRwKSkpIHsKICAgICAgaWYoJGVudHJ5ID09ICIuIiB8fCAkZW50cnkgPT0gIi4uIikgY29udGludWU7CiAgICAgIHVubGluaygkY2FjaGVfcGF0aC4nLycuJGVudHJ5KTsKICAgIH0KICAgIGNsb3NlZGlyKCRkcCk7CiAgfQogIAp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPg0KPHA+eyRhZG1pbl9uYXZ9PC9wPg0KeyR3ZWxjb21lX3RleHR9]]></data>
	</file>
	<file>
	  <filename>/templates/adminprefs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPg0Ke2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9DQp7JHN0YXJ0Zm9ybX0NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfZGV2X21vZGV9OjwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9kZXZfbW9kZX08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX3RpbWVvdXR9OjwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90aW1lb3V0fTwvcD4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfY2FjaGVfcGF0aH06PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NhY2hlX3BhdGh9PC9wPg0KCTwvZGl2Pg0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV90ZW1wbGF0ZV9leHRlbnNpb259OjwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90ZW1wbGF0ZV9leHRlbnNpb259PC9wPg0KCTwvZGl2Pg0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9zdHlsZXNoZWV0X2V4dGVuc2lvbn06PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3N0eWxlc2hlZXRfZXh0ZW5zaW9ufTwvcD4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9PC9wPg0KCTwvZGl2Pg0KeyRlbmRmb3JtfQ0K]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4NCjxwPnskYWRtaW5fbmF2fTwvcD4NCntpZiAkbWVzc2FnZSE9Jyd9PHA+eyRtZXNzYWdlfTwvcD57L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/plugin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbG91ZG5lc3N9PC9oMz4=]]></data>
	</file>
</module>
