<?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.2</version>
  <mincmsversion>0.11</mincmsversion>
	<help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPkl0IGFsbG93cyB5b3UgdG8gdXNlIGFueSBleHRlcm5hbCBlZGl0b3IgdG8gZWRpdCB5b3VyIHRlbXBsYXRlcyBhbmQgc3R5bGVzaGVldHMuPC9wPgo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4KPHA+Rmlyc3QgY29uZmlndXJlIHRoZSBwYXRoIHdoZXJlIHlvdSB3b3VsZCBsaWtlIHRoZSB0ZW1wbGF0ZSBmaWxlcyB0byBiZSBzYXZlZC4gClRoZSBkZWZhdWx0IGlzIHRtcC9leHRlcm5hbGl6ZXIvIHdoaWNoIHNob3VsZCB3b3JrIGZvciBtb3N0IHBlb3BsZS4gTmV4dCB0dXJuIG9uCjxlbT5EZXZlbG9wbWVudCBNb2RlPC9lbT4gd2hpY2ggZXhwb3J0cyBlYWNoIHRlbXBsYXRlIGFuZCBzdHlsZXNoZWV0IGZyb20gdGhlIApkYXRhYmFzZSB0byBmaWxlcy4gWW91IG1heSBub3cgZWRpdCB0aGUgZmlsZXMgaG93ZXZlciB5b3UgbGlrZSBhbmQgYW55IGNoYW5nZXMgYXJlIAphdXRvbWF0aWNhbGx5IGRldGVjdGVkLCBpbXBvcnRlZCB0byB0aGUgZGF0YWJhc2UgYW5kIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5LjwvcD4KCjxwPklmIHlvdSBlZGl0IG9yIGFkZCBuZXcgdGVtcGxhdGVzIG9yIHN0eWxlc2hlZXRzIHVzaW5nIHRoZSBub3JtYWwgd2ViIGludGVyZmFjZSAKd2hpbGUgPGVtPkRldmVsb3BtZW50IE1vZGU8L2VtPiBpcyBvbiwgdGhlc2UgY2hhbmdlcyB3aWxsIGJlIGV4cG9ydGVkIHRvIHRoZSBmaWxlcy4gCkFueSBmaWxlcyBpbiB0aGUgdGVtcGxhdGUgcGF0aCB3aG9zZSBuYW1lcyBkbyBub3QgY29ycmVzcG9uZCB0byBleGlzdGluZyB0ZW1wbGF0ZXMKd2lsbCBiZSBpZ25vcmVkLjwvcD4KCjxwPldoZW4geW91IGhhdmUgZmluaXNoZWQgCmVkaXRpbmcgdGhlIGZpbGVzIHlvdSBzaG91bGQgdHVybiA8ZW0+RGV2ZWxvcG1lbnQgTW9kZTwvZW0+IG9mZiBvdGhlcndpc2UgaXQgCndpbGwgYWZmZWN0IHBlcmZvcm1hbmNlLiBIb3dldmVyLCBpZiBubyBjaGFuZ2VzIGFyZSBtYWRlIHRvIGFueSBvZiB0aGUgZmlsZXMgZm9yIAo8ZW0+VGltZW91dDwvZW0+IG1pbnV0ZXMsIDxlbT5EZXZlbG9wbWVudCBNb2RlPC9lbT4gd2lsbCB0dXJuIGl0c2VsZiBvZmYgCmF1dG9tYXRpY2FsbHkuIFNldCA8ZW0+VGltZW91dDwvZW0+IHRvIDAgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuPC9wPgoKPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwNiwgVGFtbHluIFJob2RlcyAmbHQ7PGEgaHJlZj0iaHR0cDovL3RhbWx5bi5vcmciPnRhbWx5bi5vcmc8L2E+Jmd0Oy4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiAKWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4KPGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=</help>
	<about>PGJyIC8+QXV0aG9yOiB0YW1seW4gJmx0O3RhbUB6ZW5vbG9neS5jby51ayZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAxLjAuMjxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPjx1bD4KPGxpPlZlcnNpb24gMS4wLjIgMjkgQXVndXN0IDIwMDYuIEZpeGVkIGxhenkgbG9hZGluZyBmb3IgQ01TIDEuMGJldGE2PC9saT4KPGxpPlZlcnNpb24gMS4wLjEgOSBKdW5lIDIwMDYuIFNwZWNpYWwgY2hhcmFjdGVycyBpbiBmaWxlbmFtZXMgYXJlIGVzY2FwZWQuIEZpeGVkIGFub3RoZXIgYnVnLjwvbGk+CjxsaT5WZXJzaW9uIDEuMCAyOCBNYXkgMjAwNi4gSW5pdGlhbCBSZWxlYXNlLjwvbGk+CjwvdWw+PGJyIC8+</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[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1RlbXBsYXRlIEV4dGVybmFsaXplcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1RoaXMgbW9kdWxlIHdpbGwgbm90IGRvIGFueXRoaW5nIHVudGlsIDxlbT5EZXZlbG9wbWVudCBNb2RlPC9lbT4gaXMgdHVybmVkIG9uLiBTZWUgdGhlIEhlbHAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0NvbmZpZ3VyZSB0aGUgVGVtcGxhdGUgRXh0ZXJuYWxpemVyIG1vZHVsZS4nOwokbGFuZ1snZGV2X21vZGVfZW5hYmxlZCddID0gJ0RldmVsb3BtZW50IE1vZGUgZW5hYmxlZC4nOwokbGFuZ1snZGV2X21vZGVfZGlzYWJsZWQnXSA9ICdEZXZlbG9wbWVudCBNb2RlIGRpc2FibGVkLic7CiRsYW5nWydkZXZfbW9kZV90aW1lZG91dCddID0gJ0RldmVsb3BtZW50IE1vZGUgdGltZWQgb3V0Lic7CiRsYW5nWyd0aXRsZV9kZXZfbW9kZSddID0gJ0RldmVsb3BtZW50IE1vZGUnOwokbGFuZ1sndGl0bGVfdGltZW91dCddID0gJ0RldiBNb2RlIFRpbWVvdXQnOwokbGFuZ1sndGl0bGVfdGltZW91dF91bml0cyddID0gJ21pbnV0ZXMnOwokbGFuZ1sndGl0bGVfY2FjaGVfcGF0aCddID0gJ0NhY2hlIFBhdGgnOwokbGFuZ1sndGl0bGVfdGVtcGxhdGVfZXh0ZW5zaW9uJ10gPSAnVGVtcGxhdGUgRmlsZSBFeHRlbnNpb24nOwokbGFuZ1sndGl0bGVfc3R5bGVzaGVldF9leHRlbnNpb24nXSA9ICdTdHlsZXNoZWV0IEZpbGUgRXh0ZW5zaW9uJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4KPGxpPlZlcnNpb24gMS4wLjIgMjkgQXVndXN0IDIwMDYuIEZpeGVkIGxhenkgbG9hZGluZyBmb3IgQ01TIDEuMGJldGE2PC9saT4KPGxpPlZlcnNpb24gMS4wLjEgOSBKdW5lIDIwMDYuIFNwZWNpYWwgY2hhcmFjdGVycyBpbiBmaWxlbmFtZXMgYXJlIGVzY2FwZWQuIEZpeGVkIGFub3RoZXIgYnVnLjwvbGk+CjxsaT5WZXJzaW9uIDEuMCAyOCBNYXkgMjAwNi4gSW5pdGlhbCBSZWxlYXNlLjwvbGk+CjwvdWw+JzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+SXQgYWxsb3dzIHlvdSB0byB1c2UgYW55IGV4dGVybmFsIGVkaXRvciB0byBlZGl0IHlvdXIgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cy48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5GaXJzdCBjb25maWd1cmUgdGhlIHBhdGggd2hlcmUgeW91IHdvdWxkIGxpa2UgdGhlIHRlbXBsYXRlIGZpbGVzIHRvIGJlIHNhdmVkLiAKVGhlIGRlZmF1bHQgaXMgdG1wL2V4dGVybmFsaXplci8gd2hpY2ggc2hvdWxkIHdvcmsgZm9yIG1vc3QgcGVvcGxlLiBOZXh0IHR1cm4gb24KPGVtPkRldmVsb3BtZW50IE1vZGU8L2VtPiB3aGljaCBleHBvcnRzIGVhY2ggdGVtcGxhdGUgYW5kIHN0eWxlc2hlZXQgZnJvbSB0aGUgCmRhdGFiYXNlIHRvIGZpbGVzLiBZb3UgbWF5IG5vdyBlZGl0IHRoZSBmaWxlcyBob3dldmVyIHlvdSBsaWtlIGFuZCBhbnkgY2hhbmdlcyBhcmUgCmF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQsIGltcG9ydGVkIHRvIHRoZSBkYXRhYmFzZSBhbmQgdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkuPC9wPgoKPHA+SWYgeW91IGVkaXQgb3IgYWRkIG5ldyB0ZW1wbGF0ZXMgb3Igc3R5bGVzaGVldHMgdXNpbmcgdGhlIG5vcm1hbCB3ZWIgaW50ZXJmYWNlIAp3aGlsZSA8ZW0+RGV2ZWxvcG1lbnQgTW9kZTwvZW0+IGlzIG9uLCB0aGVzZSBjaGFuZ2VzIHdpbGwgYmUgZXhwb3J0ZWQgdG8gdGhlIGZpbGVzLiAKQW55IGZpbGVzIGluIHRoZSB0ZW1wbGF0ZSBwYXRoIHdob3NlIG5hbWVzIGRvIG5vdCBjb3JyZXNwb25kIHRvIGV4aXN0aW5nIHRlbXBsYXRlcwp3aWxsIGJlIGlnbm9yZWQuPC9wPgoKPHA+V2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCAKZWRpdGluZyB0aGUgZmlsZXMgeW91IHNob3VsZCB0dXJuIDxlbT5EZXZlbG9wbWVudCBNb2RlPC9lbT4gb2ZmIG90aGVyd2lzZSBpdCAKd2lsbCBhZmZlY3QgcGVyZm9ybWFuY2UuIEhvd2V2ZXIsIGlmIG5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gYW55IG9mIHRoZSBmaWxlcyBmb3IgCjxlbT5UaW1lb3V0PC9lbT4gbWludXRlcywgPGVtPkRldmVsb3BtZW50IE1vZGU8L2VtPiB3aWxsIHR1cm4gaXRzZWxmIG9mZiAKYXV0b21hdGljYWxseS4gU2V0IDxlbT5UaW1lb3V0PC9lbT4gdG8gMCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS48L3A+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA2LCBUYW1seW4gUmhvZGVzICZsdDs8YSBocmVmPSJodHRwOi8vdGFtbHluLm9yZyI+dGFtbHluLm9yZzwvYT4mZ3Q7LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIApZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgonOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/TemplateExternalizer.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBUZW1wbGF0ZUV4dGVybmFsaXplciAtIGVkaXQgdGVtcGxhdGVzICYgc3R5bGVzaGVldHMgZXh0ZXJuYWxseQojIFZlcnNpb246IDEuMC4yLCB0YW1seW4KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjbGFzcyBUZW1wbGF0ZUV4dGVybmFsaXplciBleHRlbmRzIENNU01vZHVsZQp7CgogIC8vbW9kdWxlIGNvbnN0cnVjdG9yCiAgZnVuY3Rpb24gVGVtcGxhdGVFeHRlcm5hbGl6ZXIoKQogIHsKICAgIC8vY2FsbCBwYXJlbnQgY29uc3RydWN0b3IKICAgICR0aGlzLT5DTVNNb2R1bGUoKTsKICAgIAogICAgLy9pbXBvcnQgdGhlIHRlbXBsYXRlcwogICAgaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoImRldl9tb2RlIikpCiAgICAgICR0aGlzLT5JbXBvcnRUZW1wbGF0ZXMoKTsKICB9CiAgCiAgZnVuY3Rpb24gR2V0TmFtZSgpCiAgewogICAgcmV0dXJuICdUZW1wbGF0ZUV4dGVybmFsaXplcic7CiAgfQoKICBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7CiAgfQoKICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gJzEuMC4yJzsKICB9CgogIGZ1bmN0aW9uIEdldEhlbHAoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOwogIH0KCiAgZnVuY3Rpb24gR2V0QXV0aG9yKCkKICB7CiAgICByZXR1cm4gJ3RhbWx5bic7CiAgfQoKICBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCiAgewogICAgcmV0dXJuICd0YW1AemVub2xvZ3kuY28udWsnOwogIH0KCiAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOwogIH0KCiAgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKQogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGZ1bmN0aW9uIEhhc0FkbWluKCkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpCiAgewogICAgcmV0dXJuICdsYXlvdXQnOwogIH0KCgogIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsKICB9CgoKICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogIHsKICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdUZW1wbGF0ZSBFeHRlcm5hbGl6ZXInKTsKICB9CgogIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gIjAuMTEiOwogIH0KCgogIGZ1bmN0aW9uIEluc3RhbGwoKQogIHsKICAgICRkYiA9ICYkdGhpcy0+Y21zLT5kYjsKICAgIAogICAgLy8gY3JlYXRlIGEgcGVybWlzc2lvbgogICAgJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ1RlbXBsYXRlIEV4dGVybmFsaXplcicsICdUZW1wbGF0ZSBFeHRlcm5hbGl6ZXInKTsKICAgIAogICAgLy8gY3JlYXRlIHByZWZlcmVuY2VzIHdpdGggZGVmYXVsdCB2YWx1ZXMKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJkZXZfbW9kZSIsIGZhbHNlKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ0aW1lb3V0IiwgMzApOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoImNhY2hlX3BhdGgiLCAkR0xPQkFMU1snZ0NtcyddLT5jb25maWdbJ3Jvb3RfcGF0aCddLicvdG1wL2V4dGVybmFsaXplcicpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoInN0eWxlc2hlZXRfZXh0ZW5zaW9uIiwgJ2NzcycpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRlbXBsYXRlX2V4dGVuc2lvbiIsICdodG1sJyk7CgogICAgLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiAgICAkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ2luc3RhbGxlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwogIH0KCiAgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7CiAgfQoKICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIFVwZ3JhZGUoKQogICAgIElmIHlvdXIgbW9kdWxlIHZlcnNpb24gbnVtYmVyIGRvZXMgbm90IG1hdGNoIHRoZSB2ZXJzaW9uCiAgICAgbnVtYmVyIG9mIHRoZSBpbnN0YWxsZWQgbW9kdWxlLCB0aGUgQ01TIEFkbWluIHdpbGwgZ2l2ZQogICAgIHlvdSBhIGNoYW5jZSB0byB1cGdyYWRlIHRoZSBtb2R1bGUuIFRoaXMgaXMgdGhlIGZ1bmN0aW9uCiAgICAgdGhhdCBhY3R1YWxseSBoYW5kbGVzIHRoZSB1cGdyYWRlLgogICAgIElkZWFsbHksIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGhhbmRsZSB1cGdyYWRlcyBpbmNyZW1lbnRhbGx5LAogICAgIHNvIHlvdSBjb3VsZCB1cGdyYWRlIGZyb20gdmVyc2lvbiAwLjAuMSB0byAxMC41Ljcgd2l0aAogICAgIGEgc2luZ2xlIGNhbGwuIEZvciBhIGdyZWF0IGV4YW1wbGUgb2YgdGhpcywgc2VlIHRoZSBOZXdzCiAgICAgbW9kdWxlIGluIHRoZSBzdGFuZGFyZCBDTVMgaW5zdGFsbC4KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVXBncmFkZSgkb2xkdmVyc2lvbiwgJG5ld3ZlcnNpb24pCiAgewogICAgJGN1cnJlbnRfdmVyc2lvbiA9ICRvbGR2ZXJzaW9uOwogICAgc3dpdGNoKCRjdXJyZW50X3ZlcnNpb24pCiAgICB7CiAgICAgIGNhc2UgIjEuMCI6CiAgICAgICAgIGJyZWFrOwogICAgfQogICAgCiAgICAvLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKICAgICR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndXBncmFkZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKICB9CgogIC8qKgogICAqIEV4cG9ydCBhbnkgbmV3bHkgY3JlYXRlZCB0ZW1wbGF0ZXMgaWYgZGV2X21vZGUgaXMgb24KICAgKi8gIAogIGZ1bmN0aW9uIEFkZFRlbXBsYXRlUG9zdCgmJHRlbXBsYXRlKSB7CiAgICBpZigkdGhpcy0+R2V0UHJlZmVyZW5jZSgiZGV2X21vZGUiKSkKICAgICAgJHRoaXMtPkV4cG9ydFRlbXBsYXRlcygpOwogIH0KICAKICAvKioKICAgKiBFeHBvcnQgdGhlIGNoYW5nZXMgdG8gdGVtcGxhdGVzIGlmIGRldl9tb2RlIGlzIG9uCiAgICovICAKICBmdW5jdGlvbiBFZGl0VGVtcGxhdGVQb3N0KCYkdGVtcGxhdGUpIHsKICAgIGlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJkZXZfbW9kZSIpKQogICAgICAkdGhpcy0+RXhwb3J0VGVtcGxhdGVzKCk7CiAgfQoKICBmdW5jdGlvbiBVbmluc3RhbGwoKQogIHsKICAgICRkYiA9ICYkdGhpcy0+Y21zLT5kYjsKICAgIAogICAgLy8gcmVtb3ZlIHRoZSBwZXJtaXNzaW9ucwogICAgJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ1RlbXBsYXRlIEV4dGVybmFsaXplcicpOwogICAgCiAgICAvLyByZW1vdmUgcHJlZmVyZW5jZXMKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCJkZXZfbW9kZSIpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoInRpbWVvdXQiKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCJjYWNoZV9wYXRoIik7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgic3R5bGVzaGVldF9leHRlbnNpb24iKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCJ0ZW1wbGF0ZV9leHRlbnNpb24iKTsKICAgIAogICAgLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiAgICAkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VuaW5zdGFsbGVkJykpOwogIH0KCiAgZnVuY3Rpb24gRG9BY3Rpb24oJGFjdGlvbiwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkPS0xKQogIHsKICAgIHN3aXRjaCAoJGFjdGlvbikKICAgIHsKICAgICAgY2FzZSAnZGVmYXVsdCc6CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ2RlZmF1bHRhZG1pbic6CiAgICAgICAgLy8gb25seSBsZXQgcGVvcGxlIGFjY2VzcyBtb2R1bGUgcHJlZmVyZW5jZXMgaWYgdGhleSBoYXZlIHBlcm1pc3Npb24KICAgICAgICBpZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVGVtcGxhdGUgRXh0ZXJuYWxpemVyJykpIHsKICAgICAgICAgICR0aGlzLT5EaXNwbGF5QWRtaW5QcmVmcygkaWQsICRwYXJhbXMsICRyZXR1cm5faWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAnc2F2ZV9hZG1pbl9wcmVmcyc6CiAgICAgICAgLy8gb25seSBsZXQgcGVvcGxlIHNhdmUgbW9kdWxlIHByZWZlcmVuY2VzIGlmIHRoZXkgaGF2ZSBwZXJtaXNzaW9uCiAgICAgICAgaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1RlbXBsYXRlIEV4dGVybmFsaXplcicpKQogICAgICAgICAgJHRoaXMtPlNhdmVBZG1pblByZWZzKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCk7CiAgICAgICAgYnJlYWs7CiAgICB9CgogIH0KCiAgZnVuY3Rpb24gRGlzcGxheUFkbWluUHJlZnMoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZT0nJykKICB7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAogICAgICAgICAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdzYXZlX2FkbWluX3ByZWZzJywgJHJldHVybmlkKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywKICAgICAgICAgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAnU3VibWl0JykpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfZGV2X21vZGUnLCAkdGhpcy0+TGFuZygndGl0bGVfZGV2X21vZGUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX3RpbWVvdXQnLCAkdGhpcy0+TGFuZygndGl0bGVfdGltZW91dCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfY2FjaGVfcGF0aCcsICR0aGlzLT5MYW5nKCd0aXRsZV9jYWNoZV9wYXRoJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV90ZW1wbGF0ZV9leHRlbnNpb24nLCAkdGhpcy0+TGFuZygndGl0bGVfdGVtcGxhdGVfZXh0ZW5zaW9uJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9zdHlsZXNoZWV0X2V4dGVuc2lvbicsICR0aGlzLT5MYW5nKCd0aXRsZV9zdHlsZXNoZWV0X2V4dGVuc2lvbicpKTsKICAgIAogICAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdtZXNzYWdlJywgJG1lc3NhZ2UpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfZGV2X21vZGUnLCAkdGhpcy0+Q3JlYXRlSW5wdXRSYWRpb0dyb3VwKCRpZCwgJ2Rldl9tb2RlJywgCiAgICAgICAgICAgIGFycmF5KCdPZmYnPT4wLCAnT24nPT4xKSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rldl9tb2RlJywgJzEnKSkKICAgICAgICApOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF90aW1lb3V0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0aW1lb3V0JywKICAgICAgICAgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RpbWVvdXQnKSkuJyAnLiR0aGlzLT5MYW5nKCd0aXRsZV90aW1lb3V0X3VuaXRzJykpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfY2FjaGVfcGF0aCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnY2FjaGVfcGF0aCcsCiAgICAgICAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjYWNoZV9wYXRoJyksIDQwKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF90ZW1wbGF0ZV9leHRlbnNpb24nLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3RlbXBsYXRlX2V4dGVuc2lvbicsCiAgICAgICAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0ZW1wbGF0ZV9leHRlbnNpb24nKSkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfc3R5bGVzaGVldF9leHRlbnNpb24nLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3N0eWxlc2hlZXRfZXh0ZW5zaW9uJywKICAgICAgICAgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3N0eWxlc2hlZXRfZXh0ZW5zaW9uJykpKTsKCiAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5wcmVmcy50cGwnKTsKICB9CgogIGZ1bmN0aW9uIFNhdmVBZG1pblByZWZzKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCkKICB7CiAgICAkb2xkbW9kZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXZfbW9kZScpOwogICAgJG5ld21vZGUgPSAkcGFyYW1zWydkZXZfbW9kZSddOwogICAgCiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGV2X21vZGUnLCAkcGFyYW1zWydkZXZfbW9kZSddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCd0aW1lb3V0JywgJHBhcmFtc1sndGltZW91dCddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjYWNoZV9wYXRoJywgJHBhcmFtc1snY2FjaGVfcGF0aCddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCd0ZW1wbGF0ZV9leHRlbnNpb24nLCAkcGFyYW1zWyd0ZW1wbGF0ZV9leHRlbnNpb24nXSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnc3R5bGVzaGVldF9leHRlbnNpb24nLCAkcGFyYW1zWydzdHlsZXNoZWV0X2V4dGVuc2lvbiddKTsKICAgIAogICAgJG1lc3NhZ2UgPSAkdGhpcy0+TGFuZygncHJlZnN1cGRhdGVkJyk7CgogICAgaWYoISRvbGRtb2RlICYmICRuZXdtb2RlKSB7CiAgICAgICR0aGlzLT5FeHBvcnRUZW1wbGF0ZXMoKTsKICAgICAgJHRoaXMtPkF1ZGl0KDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ2Rldl9tb2RlX2VuYWJsZWQnKSk7CiAgICAgICRtZXNzYWdlIC49ICcgJy4kdGhpcy0+TGFuZygnZGV2X21vZGVfZW5hYmxlZCcpOwogICAgfSBlbHNlaWYoJG9sZG1vZGUgJiYgISRuZXdtb2RlKSB7CiAgICAgICR0aGlzLT5EZWxldGVUZW1wbGF0ZUNhY2hlKCk7CiAgICAgICR0aGlzLT5BdWRpdCgwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdkZXZfbW9kZV9kaXNhYmxlZCcpKTsKICAgICAgJG1lc3NhZ2UgLj0gJyAnLiR0aGlzLT5MYW5nKCdkZXZfbW9kZV9kaXNhYmxlZCcpOwogICAgfQogICAgCiAgICByZXR1cm4gJHRoaXMtPkRpc3BsYXlBZG1pblByZWZzKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSk7CiAgfQoKICBmdW5jdGlvbiBEaXNwbGF5RXJyb3JQYWdlKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2U9JycpCiAgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lcnJvcicsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICAgIGlmICgkbWVzc2FnZSAhPSAnJykKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignbWVzc2FnZScsICRtZXNzYWdlKTsKCiAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZXJyb3IudHBsJyk7CiAgfQogIAogIGZ1bmN0aW9uIGVzY2FwZUZpbGVuYW1lKCRmbmFtZSkKICB7CiAgICByZXR1cm4gc3RydHIoJGZuYW1lLCAiOi8/XFwiLCAiLS0tLSIpOwogIH0KCiAgLyoqCiAgICogRXhwb3J0IHRvIGZpbGVzIGFsbCB0aGUgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cyBmb3VuZCBpbiB0aGUgZGF0YWJhc2UKICAgKi8KICBmdW5jdGlvbiBFeHBvcnRUZW1wbGF0ZXMoKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgIAogICAgJGNhY2hlX3BhdGggPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY2FjaGVfcGF0aCcpOwogICAgJHN0eWxlc2hlZXRfZXh0ZW5zaW9uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3N0eWxlc2hlZXRfZXh0ZW5zaW9uJyk7CiAgICAkdGVtcGxhdGVfZXh0ZW5zaW9uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RlbXBsYXRlX2V4dGVuc2lvbicpOwogICAgCiAgICAvL2NoZWNrIHRoYXQgdGhlIHNhdmUgcGF0aCBleGlzdHMgYW5kIGlmIG5vdCwgYXR0ZW1wdCB0byBjcmVhdGUgaXQKICAgIGlmKCFmaWxlX2V4aXN0cygkY2FjaGVfcGF0aCkpCiAgICAgIGlmKG1rZGlyKCRjYWNoZV9wYXRoKSkKICAgICAgICBjaG1vZCgkY2FjaGVfcGF0aCwgMDc3Nyk7CiAgICAgIGVsc2UgewogICAgICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCJVbmFibGUgdG8gZmluZCBvciBjcmVhdGUgY2FjaGUgcGF0aDogIi4kY2FjaGVfcGF0aCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAvL2NoZWNrIHRoYXQgdGhlIHNhdmUgcGF0aCBpcyB3cml0YWJsZQogICAgZWxzZWlmKCFpc193cml0YWJsZSgkY2FjaGVfcGF0aCkpIHsKICAgICAgJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoIlVuYWJsZSB0byB3cml0ZSB0byBjYWNoZSBwYXRoOiAiLiRjYWNoZV9wYXRoKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgCiAgICAvL3VwZGF0ZSB0aW1lc3RhbXAgb24gY2FjaGUgZGlyIHRvICdyZXNldCcgdGltZW91dAogICAgdG91Y2goJGNhY2hlX3BhdGgpOwogICAgCiAgICAvL2xvYWQgYWxsIHRoZSB0ZW1wbGF0ZXMgYW5kIHNhdmUgdGhlbSB0byBmaWxlcwogICAgJHRvID0mICRnQ21zLT5nZXRUZW1wbGF0ZU9wZXJhdGlvbnMoKTsKICAgICR0ZW1wbGF0ZXMgPSAkdG8tPkxvYWRUZW1wbGF0ZXMoKTsKICAgIAogICAgZm9yZWFjaCgkdGVtcGxhdGVzIGFzICR0ZW1wbGF0ZSkgewogICAgICAkZm5hbWUgPSAkY2FjaGVfcGF0aC4nLycuJHRoaXMtPmVzY2FwZUZpbGVuYW1lKCR0ZW1wbGF0ZS0+bmFtZSkuJy4nLiR0ZW1wbGF0ZV9leHRlbnNpb247CiAgICAgICRmcCA9IGZvcGVuKCRmbmFtZSwgJ3cnKTsKICAgICAgLy93ZSBjb252ZXJ0IENSTEYgdG8gTEYgZm9yIHVuaXggY29tcGF0aWJpbGl0eQogICAgICBmd3JpdGUoJGZwLCBzdHJfcmVwbGFjZSgiXHJcbiIsICJcbiIsICR0ZW1wbGF0ZS0+Y29udGVudCkpOwogICAgICBmY2xvc2UoJGZwKTsKICAgICAgLy9tYWtlIHN1cmUgdGVtcGxhdGUgZmlsZXMgYXJlIHdyaXRhYmxlCiAgICAgIGNobW9kKCRmbmFtZSwgMDY2Nik7CiAgICAgIC8vc2V0IHRoZSBtb2RpZmllZCBkYXRlIHRvIHRoZSB0ZW1wbGF0ZSBtb2RpZmllZCBkYXRlCiAgICAgIHRvdWNoKCRmbmFtZSwgJHRlbXBsYXRlLT5tb2RpZmllZF9kYXRlKTsKICAgIH0KICAgIAogICAgLy9sb2FkIGFsbCB0aGUgc3R5bGVzaGVldHMgYW5kIHNhdmUgdGhlbSB0byBmaWxlcwogICAgJHNvID0mICRnQ21zLT5nZXRTdHlsZXNoZWV0T3BlcmF0aW9ucygpOwogICAgJHN0eWxlc2hlZXRzID0gJHNvLT5Mb2FkU3R5bGVzaGVldHMoKTsKCiAgICBmb3JlYWNoKCRzdHlsZXNoZWV0cyBhcyAkc3R5bGVzaGVldCkgewogICAgICAkZm5hbWUgPSAkY2FjaGVfcGF0aC4nLycuJHRoaXMtPmVzY2FwZUZpbGVuYW1lKCRzdHlsZXNoZWV0LT5uYW1lKS4nLicuJHN0eWxlc2hlZXRfZXh0ZW5zaW9uOwogICAgICAkZnAgPSBmb3BlbigkZm5hbWUsICd3Jyk7CiAgICAgIC8vd2UgY29udmVydCBDUkxGIHRvIExGIGZvciB1bml4IGNvbXBhdGliaWxpdHkKICAgICAgZndyaXRlKCRmcCwgc3RyX3JlcGxhY2UoIlxyXG4iLCAiXG4iLCAkc3R5bGVzaGVldC0+dmFsdWUpKTsKICAgICAgZmNsb3NlKCRmcCk7CiAgICAgIC8vbWFrZSBzdXJlIHN0eWxlc2hlZXQgZmlsZXMgYXJlIHdyaXRhYmxlCiAgICAgIGNobW9kKCRmbmFtZSwgMDY2Nik7CiAgICAgIC8vc2V0IHRoZSBmaWxlIG1vZGlmaWVkIGRhdGUgdG8gdGhlIHN0eWxlc2hlZXQgbW9kaWZpZWQgZGF0ZQogICAgICB0b3VjaCgkZm5hbWUsICRzdHlsZXNoZWV0LT5tb2RpZmllZF9kYXRlKTsKICAgIH0KICB9CiAgCiAgLyoqCiAgICogSW1wb3J0IGZyb20gZmlsZXMgYWxsIHRoZSB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIGZvdW5kIGluIHRoZSBkYXRhYmFzZQogICAqLwogIGZ1bmN0aW9uIEltcG9ydFRlbXBsYXRlcygpCiAgewogICAgZ2xvYmFsICRnQ21zOwogICAgCiAgICAkY2FjaGVfcGF0aCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjYWNoZV9wYXRoJyk7CiAgICAkdGltZW91dCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0aW1lb3V0Jyk7CiAgICAkc3R5bGVzaGVldF9leHRlbnNpb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc3R5bGVzaGVldF9leHRlbnNpb24nKTsKICAgICR0ZW1wbGF0ZV9leHRlbnNpb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGVtcGxhdGVfZXh0ZW5zaW9uJyk7CiAgICAkbW9zdF9yZWNlbnRfZWRpdCA9IEBmaWxlbXRpbWUoJGNhY2hlX3BhdGgpOwoKICAgIC8vZG9uJ3QgcmFpc2UgYW4gZXJyb3IgYXMgdGhpcyBjb3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgZnJvbnRlbmQKICAgIGlmKCFmaWxlX2V4aXN0cygkY2FjaGVfcGF0aCkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIAogICAgLy9sb2FkIGFsbCB0aGUgdGVtcGxhdGVzIGZyb20gdGhlIGRhdGFiYXNlIGFuZCB1cGRhdGUgdGhlbSBmcm9tIHRoZSBmaWxlcwogICAgJHRvID0mICRnQ21zLT5nZXRUZW1wbGF0ZU9wZXJhdGlvbnMoKTsKICAgICR0ZW1wbGF0ZXMgPSAkdG8tPkxvYWRUZW1wbGF0ZXMoKTsKICAgIAogICAgZm9yZWFjaCgkdGVtcGxhdGVzIGFzICRrZXkgPT4gJHRlbXBsYXRlKSB7CiAgICAgICRmbmFtZSA9ICRjYWNoZV9wYXRoLicvJy4kdGhpcy0+ZXNjYXBlRmlsZW5hbWUoJHRlbXBsYXRlLT5uYW1lKS4nLicuJHRlbXBsYXRlX2V4dGVuc2lvbjsKICAgICAgJGZ0aW1lID0gQGZpbGVtdGltZSgkZm5hbWUpOwogICAgICAkbW9zdF9yZWNlbnRfZWRpdCA9IG1heCgkbW9zdF9yZWNlbnRfZWRpdCwgJGZ0aW1lKTsKICAgICAgCiAgICAgIC8vb25seSBsb2FkIHRoZSBmaWxlIGlmIGl0IGhhcyBiZWVuIG1vZGlmaWVkIChleGlzdGVuY2UgaXMgaW1wbGljaXQpCiAgICAgIC8vYW5kIGZpbGVzaXplIT0wIAogICAgICBpZigkZnRpbWUgPiAkdGVtcGxhdGUtPm1vZGlmaWVkX2RhdGUgJiYgKCRmc2l6ZSA9IGZpbGVzaXplKCRmbmFtZSkpICE9IDApIHsKICAgICAgICAkZnAgPSBmb3BlbigkZm5hbWUsICdyJyk7CiAgICAgICAgJHRlbXBsYXRlc1ska2V5XS0+Y29udGVudCA9IGZyZWFkKCRmcCwgJGZzaXplKTsKICAgICAgICAkdGVtcGxhdGVzWyRrZXldLT5TYXZlKCk7CiAgICAgICAgZmNsb3NlKCRmcCk7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy9sb2FkIGFsbCB0aGUgc3R5bGVzaGVldHMgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIHVwZGF0ZSB0aGVtIGZyb20gdGhlIGZpbGVzCiAgICAkc28gPSYgJGdDbXMtPmdldFN0eWxlc2hlZXRPcGVyYXRpb25zKCk7CiAgICAkc3R5bGVzaGVldHMgPSAkc28tPkxvYWRTdHlsZXNoZWV0cygpOwoKICAgIGZvcmVhY2goJHN0eWxlc2hlZXRzIGFzICRrZXkgPT4gJHN0eWxlc2hlZXQpIHsKICAgICAgJGZuYW1lID0gJGNhY2hlX3BhdGguJy8nLiR0aGlzLT5lc2NhcGVGaWxlbmFtZSgkc3R5bGVzaGVldC0+bmFtZSkuJy4nLiRzdHlsZXNoZWV0X2V4dGVuc2lvbjsKICAgICAgJGZ0aW1lID0gQGZpbGVtdGltZSgkZm5hbWUpOwogICAgICAkbW9zdF9yZWNlbnRfZWRpdCA9IG1heCgkbW9zdF9yZWNlbnRfZWRpdCwgJGZ0aW1lKTsKICAgICAgCiAgICAgIC8vb25seSBsb2FkIHRoZSBmaWxlIGlmIGl0IGhhcyBiZWVuIG1vZGlmaWVkIChleGlzdGVuY2UgaXMgaW1wbGljaXQpCiAgICAgIGlmKCRmdGltZSA+ICRzdHlsZXNoZWV0LT5tb2RpZmllZF9kYXRlICYmICgkZnNpemUgPSBmaWxlc2l6ZSgkZm5hbWUpKSAhPSAwKSB7CiAgICAgICAgJGZwID0gZm9wZW4oJGZuYW1lLCAncicpOwogICAgICAgICRzdHlsZXNoZWV0c1ska2V5XS0+dmFsdWUgPSBmcmVhZCgkZnAsICRmc2l6ZSk7CiAgICAgICAgJHN0eWxlc2hlZXRzWyRrZXldLT5TYXZlKCk7CiAgICAgICAgZmNsb3NlKCRmcCk7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy90dXJuIG9mZiBkZXZfbW9kZSBpZiB0aW1lb3V0IGlzIHJlYWNoZWQKICAgIGlmKCR0aW1lb3V0ICE9IDAgJiYgdGltZSgpIC0gJG1vc3RfcmVjZW50X2VkaXQgPiAkdGltZW91dCo2MCkgewogICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGV2X21vZGUnLCBmYWxzZSk7CiAgICAgICR0aGlzLT5BdWRpdCgwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdkZXZfbW9kZV90aW1lZG91dCcpKTsKICAgIH0KICB9CiAgCiAgLyoqCiAgICogRGVsZXRlIGFsbCBmaWxlcyBpbiB0aGUgY2FjaGVfcGF0aCBkaXJlY3RvcnkKICAgKi8KICBmdW5jdGlvbiBEZWxldGVUZW1wbGF0ZUNhY2hlKCkKICB7CiAgICAkY2FjaGVfcGF0aCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjYWNoZV9wYXRoJyk7CiAgICBpZighJGRwID0gb3BlbmRpcigkY2FjaGVfcGF0aCkpIHJldHVybiBmYWxzZTsKICAgIHdoaWxlKGZhbHNlICE9PSAoJGVudHJ5ID0gcmVhZGRpcigkZHApKSkgewogICAgICBpZigkZW50cnkgPT0gIi4iIHx8ICRlbnRyeSA9PSAiLi4iKSBjb250aW51ZTsKICAgICAgdW5saW5rKCRjYWNoZV9wYXRoLicvJy4kZW50cnkpOwogICAgfQogICAgY2xvc2VkaXIoJGRwKTsKICB9CiAgCn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD57JGFkbWluX25hdn08L3A+Cnskd2VsY29tZV90ZXh0fQ==]]></data>
	</file>
	<file>
	  <filename>/templates/adminprefs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0KeyRzdGFydGZvcm19Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9kZXZfbW9kZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfZGV2X21vZGV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV90aW1lb3V0fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90aW1lb3V0fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfY2FjaGVfcGF0aH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY2FjaGVfcGF0aH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX3RlbXBsYXRlX2V4dGVuc2lvbn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdGVtcGxhdGVfZXh0ZW5zaW9ufTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfc3R5bGVzaGVldF9leHRlbnNpb259OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3N0eWxlc2hlZXRfZXh0ZW5zaW9ufTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH08L3A+Cgk8L2Rpdj4KeyRlbmRmb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4KPHA+eyRhZG1pbl9uYXZ9PC9wPgp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/plugin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbG91ZG5lc3N9PC9oMz4=]]></data>
	</file>
</module>
