<?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>SelfRegistration</name>
	<version>1.1.0-beta1</version>
  <mincmsversion>1.0-svn</mincmsversion>
	<help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGlzIGRlc2lnbmVkIHRvIGFsbG93IGZyb250IGVuZCB1c2VycyB0byByZWdpc3RlciB0aGVtc2VsdmVzIGFuZCBmaWxsIGluIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4gIEl0IHRoZW4gc2VuZHMgYSBjb25maXJtYXRpb24gZW1haWwsIHdpdGggYSBsaW5rIHRvIGEgc2Vjb25kIHBhZ2UgdGhhdCBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlIHJlZ2lzdHJhdGlvbiBpcyBjb21wbGV0ZS4gIE9uY2UgcmVnaXN0cmF0aW9uIGlzIGNvbXBsZXRlLCBhIHVzZXIgYWNjb3VudCBpcyBjcmVhdGVkIGluIHRoZSBmcm9udCBlbmQgdXNlcnMgbW9kdWxlLjwvcD4KPHA+SW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9kdWxlLCB5b3UgbXVzdCBjcmVhdGUgYSBwcm9wZXJ0eSBvZiB0eXBlICJFbWFpbCBBZGRyZXNzIiBpbiB0aGUgRnJvbnRlbmRVc2VycyBtb2R1bGUsIGFuZCBhc3NvY2lhdGUgdGhhdCBwcm9wZXJ0eSB3aXRoIHRoZSBncm91cCB0byBiZSB1c2VkIGZvciBzZWxmIHJlZ2lzdHJhdGlvbi48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5Zb3UgcGxhY2UgdGhlIGZvbGxvd25nIHRhZyBpbnRvIHlvdXIgcGFnZSB7Y21zX21vZHVsZSBtb2R1bGU9U2VsZlJlZ2lzdHJhdGlvbiBncm91cD11c2VyZ3JvdXB9PC9wPgo8cD5Zb3UgbXVzdCBoYXZlIHByZXZpb3VzbHkgY3JlYXRlZCBwcm9wZXJ0aWVzIGFuZCB1c2VyIGdyb3VwcyBpbiB0aGUgRnJvbnRFbmRVc2VycyBtb2R1bGUgaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yayBwcm9wZXJseS48L3A+CjxoMz5QYXJhbWV0ZXJzPC9oMz4KPHA+PHN0cm9uZz5tb2RlPC9zdHJvbmc+Jm5ic3A7PGVtPm9wdGlvbmFsPC9lbT4gLSBwb3NzaWJsZSB2YWx1ZXMgYXJlICJzaWdudXAiIGFuZCAidmVyaWZ5Ii4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsICJzaWdudXAiIGlzIGFzc3VtYmVkLjwvcD4KPHA+PHN0cm9uZz5ncm91cDwvc3Ryb25nPiZuYnNwOzxlbT5vcHRpb25hbDwvZW0+IC0gVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgaWYgbW9kZSBpcyAic2lnbnVwIiwgb3IgaWYgbW9kZSBpcyBsZWZ0IGVtcHR5LjwvcD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCBjYWxndXkncwptb2R1bGUgaG9tZXBhZ2UgYXQgPGEgaHJlZj0iaHR0cDovL3RlY2hjb20uZHluZG5zLm9yZyI+dGVjaGNvbS5keW5kbnMub3JnPC9hPi48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+CjxsaT5UaGUgYXV0aG9yLCBjYWxndXkxMDAwLCBjYW4gb2Z0ZW4gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyI+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPgo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIAo8L3VsPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQKb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgoKPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwNSwgUm9iZXJ0IENhbXBiZWwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAaG90bWFpbC5jb20iPiZsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4KPGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5DTVNNYWlsZXIgPSZndDsgMS43My45PC9saT48bGk+RnJvbnRFbmRVc2VycyA9Jmd0OyAxLjAuMDwvbGk+PC91bD48aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48L3VsPg==</help>
	<about>PGJyIC8+QXV0aG9yOiBDYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMS4wLWJldGExPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgo8bGk+VmVyc2lvbiAwLjAuMS4gT2N0IDIwMDUuIEluaXRpYWwgTlJQVCAoTm90IFJlYWR5IGZvciBQcmltZSBUaW1lKSByZWxlYXNlLjwvbGk+CjxsaT5WZXJzaW9uIDAuMS4wLiBPY3QgMjAwNS4gSW5pdGlhbCByZWxlYXNlLjwvbGk+CjxsaT5WZXJzaW9uIDAuMS4xLiBPY3QgMjAwNS4gU2V0IHRoZSBIVE1MIG1haWwgZmxhZy48L2xpPgo8bGk+VmVyc2lvbiAwLjEuMi4gT2N0IDIwMDUuIE1vdmVkIFJhbmRvbSBzdHVmZiBpbnRvIGZldXNlcnMsIGFuZCBhZGRlZCB0aGUgYWJpbGl0eSB0byBkZWxldGUgb2xkIGVudHJpZXMgZnJvbSB0aGUgcmVnaXN0cmF0aW9uIHRlbXBvcmFyeSB0YWJsZXM8L2xpPgo8bGk+PHA+VmVyc2lvbiAwLjEuMy4gLSBEZWMgMjAwNTwvcD4KPHA+Rml4ZWQgdGhlIHRvZ2dsZXMgaW4gdGhlIGFkbWluIHByZWZlcmVuY2VzLiAgQWxzbywgY2hhbmdlZCB0aGUgcGVybWlzc2lvbnMgbW9kZWwgdG8gbm90IHJlcXVpcmUgdGhlIHVuaXF1ZSBwZXJtaXNzaW9uIGFkZGVkIHByZXZpb3VzbHkgZm9yIHRoZSBzZWxmcmVnIG1vZHVsZS48L3A+CjxwPlRoaXMgcmVsZWFzZSB3YXMgcmVtb3ZlZCBkdWUgdG8gcG9zc2libGUgZXJyb3JzPC9wPgo8L2xpPgo8bGk+PHA+VmVyc2lvbiAwLjEuNC4gLSBKYW4gMjAwNjwvcD4KPHA+Rml4ZWQgbWlub3IgZXJyb3JzIHdpdGggQ2hlY2tQZXJtaXNzaW9uLCByZXBsYWNlZCBhbGwgYXNzaWduX2J5X3JlZnMncyB3aXRoIGFzc2lnbnMgZm9yIGhvcGVmdWwgcGhwNSBjb21wYXRpYmlsaXR5LjwvcD4KPGxpPjxwPlZlcnNpb24gMC4xLjUuIC0gSmFuIDIwMDY8L3A+CjxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCB0aGUgc3ViamVjdCBvZiB0aGUgY29uZmlybWF0aW9uIGVtYWlsLCBhbmQgYWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHRleHQgYm9keS4gIFN1YmplY3QsIGFuZCB0ZXh0IGJvZHkgYXJlIHJlcXVpcmVkLjwvcD4KPC9saT4KPGxpPjxwPlZlcnNpb24gMS4wLjAuIC0gRmViIDIwMDY8L3A+CjxwPkZpeGVkIGEgcHJvYmxlbSB3aXRoIHRoZSB2ZXJpZnkgbW9kZS48L3A+CjxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIGVkaXQgYW5kIGRlbGV0ZSB1c2Vycy4gd2l0aCBzZWxlY3Rpb24gb24gdGhlIGNoZWNrYm94ZXMsIGFuZCAiY2hlY2thbGwiPC9wPgo8cD5Ob3cgcmVxdWlyZSBGRVVzZXJzIDAuMS44IGFuZCBDTVNNYWlsZXIgMS43My45PC9wPgo8cD5BZGRlZCBhbm90aGVyIHRhYiBmb3IgdGhlICJ5b3VyIHNldHRpbmdzIGhhdmUgYmVlbiBhZGp1c3RlZCIgZW1haWwgdGVtcGxhdGVzPC9wPgo8cD5BZGRlZCBDU1YgRXhwb3J0aW5nPC9wPgo8cD5BZGRlZCBhICJEZWxldGUgYWxsIHVzZXJzIG9sZGVyIHRoYW4gYSBkYXkiIGJ1dHRvbjwvcD4KPHA+Tm93IHdvcmtzIHdpdGggdGhlIG1heGltdW0gbGVuZ3RoIGZpZWxkIG9mIEZFVXNlcnM8L3A+CjxwPkFkZGVkIHN1cHBvcnQgZm9yIGRyb3Bkb3ducyBhbmQgdGV4dCBhcmVhczwvcD4KPHA+RGlzYWxsb3cgcHVuY3R1YXRpb24gY2hhcmFjdGVycyBpbiB1c2VybmFtZTwvcD4KPC9saT4KPGxpPjxwPlZlcnNpb24gMS4wLjEuIC0gRmViIDIwMDY8L3A+CjxwPkFkZGVkIHRoZSBhYmlsaXR5IGZvciB1c2VycyB0byByZXF1ZXN0IGFub3RoZXIgcmVnaXN0cmF0aW9uIGVtYWlsICh1c2VzIHRoZSBzYW1lIGNvZGUpLCBpbmNhc2UgdGhleSBsb3N0IHRoZWlyIGZpcnN0IG9uZS48L3A+CjwvbGk+CjxsaT48cD5WZXJzaW9uIDEuMC4yLiAtIEZlYiAyMDA2PC9wPgo8cD5UaGUgIlJlcXVpcmUgZW1haWwgY29uZmlybWF0aW9uIiBjaGVja2JveCBub3cgd29ya3MuICBVc2VycyBhcmUgYWRkZWQgc3RyYWlnaHQgdG8gdGhlIGZyb250ZW5kIHVzZXJzIGRhdGFiYXNlPC9wPgo8cD5GaXhlZCBhIGJ1ZyB3aXRoIHRoZSBjb25maXJtYXRpb24gZW1haWxzIGhhdmluZyBsaW5rcyB0byB0aGUgYWRtaW4gc2VjdGlvbiAobmV3IGJ1ZyBvbmx5KS48L3A+CjwvbGk+CjxsaT48cD5WZXJzaW9uIDEuMC4zLiAtIEZlYiAyMDA2PC9wPgo8cD5BZGRlZCB0aGUgKG9wdGlvbmFsKSBhYmlsaXR5IHRvIHJlcXVpcmUgdGhlIHVzZXIgZW50ZXIgdGhlIGVtYWlsIGFkZHJlc3MgdHdpY2U8L3A+CjxwPkZpeGVkIGEgYnVnIHdpdGggdGhlIHVzZXJlZGl0ZWQgbWVzc2FnZSBub3QgYmVpbmcgdGhyb3duIHRocm91Z2ggc21hcnR5PC9wPgo8cD5GaXhlZCB0aGUgZGVmYXVsdCByZWdpc3RyYXRpb24gdGVtcGxhdGUgYSBiaXQgdG8gYWlkZSBpbiB2YWxpZGF0aW9uIGZvciBub24gcmVxdWlyZWQgZmllbGRzIChmaXhlZCBhIHdhcm5pbmcpPC9wPgo8cD5GaXggcHJvYmxlbXMgd2l0aCBpbmxpbmUgYW5kIG5vbi1pbmxpbmUgZm9ybXMgYW5kIGxpbmtzPC9wPgo8cD5IYW5kbGUgYW5vdGhlciBjYXNlIHdoZXJlIHRoZSBhZG1pbiBtYXkgbm90IGhhdmUgY3JlYXRlZCB0aGUgcHJvcGVyIHR5cGUgb2YgZW1haWwgcHJvcGVydHk8L3A+CjxwPkNoYW5nZWQgdG8gcmVxdWlyZSBDTVMgMC4xMi1iZXRhMiBhdCBhIG1pbmltdW0gKGZvciBzYWZldHkgcHVycG9zZXMpPC9wPgo8L2xpPgo8bGk+PHA+VmVyc2lvbiAxLjAuNC4gLSBNYXIgMjAwNjwvcD4KPHA+TW9yZSBjb250cm9sIG92ZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkIHNpemVzIChjb250cm9sbGVkIGJ5IGZldXNlcnMpPC9wPgo8cD5Db25maXJtYXRpb24gb24gZWRpdGluZyBwcmVmZXJlbmNlczwvcD4KPHA+UmVxdWlyZSAwLjEyIHByb3BlciBvZiBjbXMgYXMgYSBtaW5pbXVtPC9wPgo8L2xpPgo8L3VsPjxiciAvPg==</about>
	<description>A module that allows front end users to register themselves.</description>
	<requires>
	  <requiredname>CMSMailer</requiredname>
	  <requiredversion>1.73.9</requiredversion>
	</requires>
	<requires>
	  <requiredname>FrontEndUsers</requiredname>
	  <requiredversion>1.0.0</requiredversion>
	</requires>
	<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.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2Vycm9yX2NvZGVzZG9udG1hdGNoJ10gPSAnVGhlIHZhbGlkYXRpb24ga2V5IHN1cHBsaWVkIGlzIGludmFsaWQnOwokbGFuZ1snZXZlbnRfZGVzY3JpcHRpb25fb25OZXdVc2VyJ10gPSAnQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IGEgbmV3IHVzZXIgaGFzIGNvbXBsZXRlZCB0aGUgcmVnaXN0cmF0aW9uIGZvcm0nOwokbGFuZ1snZXZlbnRfZGVzY3JpcHRpb25fb25Vc2VyUmVnaXN0ZXJlZCddID0gJ0FuIGV2ZW50IGluZGljYXRpbmcgdGhhdCBhIHVzZXIgaGFzIHZlcmlmaWVkIGhpcyBpbmZvcm1hdGlvbiBhbmQgaXMgbm93IGNvbXBsZXRlbHkgcmVnaXN0ZXJlZCc7CiRsYW5nWydldmVudF9oZWxwX29uTmV3VXNlciddID0gJwo8cD5BbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBuZXcgdXNlciBoYXMgY29tcGxldGVkIHRoZSByZWdpc3RyYXRpb24gZm9ybTwvcD4KPGg0PlBhcmFtZXRlcnM8L2g0Pgo8dWw+CjxsaT48ZW0+dXNlcm5hbWU8L2VtPiAtIFRoZSBuZXcgdXNlcnMgc2VsZWN0ZWQgdXNlcm5hbWU8L2xpPgo8bGk+PGVtPmVtYWlsPC9lbT4gLSBUaGUgbmV3IHVzZXJzIGVtYWlsIGFkZHJlc3M8L2xpPgo8L3VsPgonOwokbGFuZ1snZXZlbnRfaGVscF9vblVzZXJSZWdpc3RlcmVkJ10gPSAnCjxwPkFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCBhIHVzZXIgaGFzIGJlZW4gdmVyaWZpZWQgYW5kIGlzIG5vdyByZWdpc3RlcmVkIHdpdGggZmV1c2VyczwvcD4KPGg0PlBhcmFtZXRlcnM8L2g0Pgo8dWw+CjxsaT48ZW0+dXNlcm5hbWU8L2VtPiAtIFRoZSByZWdpc3RlcmVkIHVzZXJuYW1lPC9saT4KPC91bD4KJzsKJGxhbmdbJ2NvbmZpcm1fc3VibWl0cHJlZnMnXSA9ICdDaGFuZ2UgYWRtaW4gcHJlZmVyZW5jZXM/JzsKJGxhbmdbJ2luZm9fYWRtaW5fcGFzc3dvcmQnXSA9ICdMZWF2ZSB0aGlzIGZpZWxkIGVtcHR5IHRvIHByZXNlcnZlIHRoZSB1c2VyIHBhc3N3b3JkJzsKJGxhbmdbJ2luZm9fYWRtaW5fcmVwZWF0cGFzc3dvcmQnXSA9ICdMZWF2ZSB0aGlzIGZpZWxkIGVtcHR5IHRvIHByZXNlcnZlIHRoZSB1c2VyIHBhc3N3b3JkJzsKJGxhbmdbJ2Vycm9yX2VtYWlsZG9lc25vdG1hdGNoJ10gPSAnRW1haWwgYWRkcmVzc2VzIGRvIG5vdCBtYXRjaCc7CiRsYW5nWydmb3JjZV9lbWFpbF90d2ljZSddID0gJ1JlcXVpcmUgdXNlcnMgdG8gZW50ZXIgdGhlaXIgZW1haWwgYWRkcmVzcyB0d2ljZSc7CiRsYW5nWydhZ2FpbiddID0gJ2FnYWluJzsKJGxhbmdbJ2RlbGV0ZXNlbHVzZXJzJ10gPSAnRGVsZXRlIFNlbGVjdGVkIFVzZXJzJzsKJGxhbmdbJ2Vycm9yX25vcHJvcGRlZm5zJ10gPSAnTm8gcHJvcGVydHkgZGVmaW5pdGlvbnMsIG9yIHByb2JsZW0gcmV0cmVpdmluZyB0aGVtIGZyb20gdGhlIGRhdGFiYXNlJzsKJGxhbmdbJ2Vycm9yX25vZ3JvdXBzJ10gPSAnTm8gZ3JvdXBzLCBvciBwcm9ibGVtIHJldHJlaXZpbmcgZ3JvdXAgbGlzdCc7CiRsYW5nWydlcnJvcl9kYmVycm9yJ10gPSAnRGF0YWJhc2UgZXJyb3InOwokbGFuZ1sndGl0bGVfcG9zdF9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJ10gPSAnUG9zdCBMb3N0IEVtYWlsIFRlbXBsYXRlJzsKJGxhbmdbJ3RpdGxlX3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnXSA9ICdMb3N0IEVtYWlsIFRlbXBsYXRlJzsKJGxhbmdbJ2NsaWNraGVyZSddID0gJ0NsaWNrIEhlcmUnOwokbGFuZ1snbXNnX3NlbmRhbm90aGVyZW1haWwnXSA9ICdJIGhhdmUgYWxyZWFkeSBjb21wbGV0ZWQgdGhlIHJlZ2lzdHJhdGlvbiBmb3JtLCBidXQgZGlkIG5vdCByZWNlaXZlIGFuIGVtYWlsLCBjYW4geW91IHBsZWFzZSByZS1zZW5kIGl0JzsKJGxhbmdbJ3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnXSA9ICdMb3N0IEVtYWlsIFRlbXBsYXRlJzsKJGxhbmdbJ2luZm9fdXNlcnZlcmlmaWVkJ10gPSAnQSBuZXcgdXNlciBoYXMgYmVlbiBhZGRlZCB0byBGcm9udEVuZFVzZXJzJzsKJGxhbmdbJ2VkaXQnXSA9ICdFZGl0JzsKJGxhbmdbJ3Vua25vd24nXSA9ICdVbmtub3duJzsKJGxhbmdbJ3NlbGVjdCddID0gJ1NlbGVjdCc7CiRsYW5nWydjaGVja19hbGwnXSA9ICdDaGVjayBBbGwnOwokbGFuZ1sndW5jaGVja19hbGwnXSA9ICdVbmNoZWNrIEFsbCc7CiRsYW5nWydzZW5kX2FkanVzdG1lbnRlbWFpbCddID0gJ1NlbmQgYW4gZW1haWwgdG8gdGhlIHVzZXInOwokbGFuZ1sndHh0X2FkanVzdG1lbnRlbWFpbCddID0gJyhpbmZvcm1zIHRoZSB1c2VyIHRoYXQgdGhlaXIgYWNjb3VudCBoYXMgYmVlbiBhZGp1c3RlZCc7CiRsYW5nWyd0eHRfY2hhbmdlcGFzc3dvcmQnXSA9ICdGaWxsIGluIHRoZXNlIGZpZWxkcyB0byBjaGFuZ2UgdGhlIHVzZXIgcGFzc3dvcmQnOwokbGFuZ1snZWRpdHVzZXInXSA9ICdFZGl0IFVzZXInOwokbGFuZ1snYXJleW91c3VyZV9kZWxldGV1c2VyJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHBhcnRpYWxseSByZWdpc3RlcmVkIHVzZXI/JzsKJGxhbmdbJ2hkcl91c2VyaWQnXSA9ICdVc2VySUQnOwokbGFuZ1snaGRyX3VzZXJuYW1lJ10gPSAnVXNlcm5hbWUnOwokbGFuZ1snaGRyX2dycG5hbWUnXSA9ICdHcm91cCc7CiRsYW5nWydoZHJfY3JlYXRlZCddID0gJ0NyZWF0ZWQnOwokbGFuZ1snaGRyX2VtYWlsJ10gPSAnRW1haWknOwokbGFuZ1sndXNlcnNmb3VuZCddID0gJ1VzZXJzIGZvdW5kIChsaW1pdGVkIHRvIGEgbWF4aW11bSBvZiAyNTApJzsKJGxhbmdbJ3VzZXJzJ10gPSAnVXNlcnMnOwokbGFuZ1snbGlzdDFkYXknXSA9ICdMaXN0IGFsbCBlbnRyaWVzIG1vcmUgdGhhbiAxIGRheSBvbGQnOwokbGFuZ1snc3ViamVjdCddID0gJ1N1YmplY3QgZm9yIG91dGdvaW5nIGVtYWlsJzsKJGxhbmdbJ2h0bWxib2R5J10gPSAnSFRNTCBtZXNzYWdlIGJvZHknOwokbGFuZ1sndGV4dGJvZHknXSA9ICdUZXh0IG1lc3NhZ2UgYm9keSc7CiRsYW5nWydwcm9tcHRfbnVtcmVzZXRyZWNvcmQnXSA9ICdBIG51bWJlciBvZiB1c2VycyBhcmUgaW4gdGhlIG1pZGRsZSBvZiByZWdpc3RlcmluZy4gIEN1cnJlbnRseSB0aGlzIGNvdW50IGlzIGF0Oic7CiRsYW5nWydyZW1vdmUxd2VlayddID0gJ1JlbW92ZSBhbGwgZW50cmllcyBtb3JlIHRoYW4gYSB3ZWVrIG9sZCc7CiRsYW5nWydyZW1vdmUxbW9udGgnXSA9ICdSZW1vdmUgYWxsIGVudHJpZXMgbW9yZSB0aGFuIGEgbW9udGggb2xkJzsKJGxhbmdbJ3JlbW92ZTFkYXknXSA9ICdSZW1vdmUgYWxsIGVudHJpZXMgbW9yZSB0aGFuIGEgZGF5IG9sZCc7CiRsYW5nWydyZW1vdmVhbGwnXSA9ICdSZW1vdmUgYWxsIGVudHJpZXMnOwokbGFuZ1snYXJleW91c3VyZSddID0gJ0FyZSB5b3Ugc3VyZT8nOyAKJGxhbmdbJ3JlZ2lzdHJhdGlvbl9pbmZvX2VkaXRlZCddID0gJ1lvdXIgcmVnaXN0cmF0aW9uIGluZm8gaGFzIGJlZW4gbW9kaWZpZWQnOwokbGFuZ1sncmVnaXN0cmF0aW9uX2NvbmZpcm1hdGlvbiddID0gJ1JlZ2lzdHJhdGlvbiBDb25maXJtYXRpb24nOwokbGFuZ1sndXNlcl9yZWdpc3RyYXRpb24nXSA9ICdSZWdpc3Rlcic7CiRsYW5nWydmaW5hbG1lc3NhZ2VfdGVtcGxhdGUnXSA9ICdGaW5hbCBNZXNzYWdlIFRlbXBsYXRlJzsKJGxhbmdbJ3RpdGxlX3ZlcmlmeXJlZ2lzdHJhdGlvbiddID0gJ1ZlcmlmeSBSZWdpc3RyYXRpb24nOwokbGFuZ1snY29kZSddID0gJ1ZhbGlkYXRpb24gS2V5JzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdTZXQgVG8gRGVmYXVsdHMnOwokbGFuZ1snZXJyb3Jfbm9wcm9wZXJ0aWVzJ10gPSAnTm8gcHJvcGVydGllcyBmb3VuZCBmb3IgdGhpcyB1c2VyJzsKJGxhbmdbJ2Vycm9yX25vcHJvcHJlbGF0aW9ucyddID0gJ05vIHByb3BlcnR5IHJlbGF0aW9ucyc7CiRsYW5nWydlcnJvcl9lbWFpbGludmFsaWQnXSA9ICdJbnZhbGlkIGVtYWlsIGFkZHJlc3MnOwokbGFuZ1snZXJyb3Jfbm9lbWFpbGFkZHJlc3MnXSA9ICdObyB2YWxpZCBlbWFpbCBhZGRyZXNzIGZpZWxkIGZvdW5kJzsKJGxhbmdbJ2Vycm9yX3JlcXVpcmVkZmllbGQnXSA9ICdGaWVsZCAlcyBtdXN0IGJlIGZpbGxlZCBpbic7CiRsYW5nWydyZWdpc3RyYXRpb24xX3RlbXBsYXRlJ10gPSAnUmVnaXN0cmF0aW9uIFRlbXBsYXRlIDEnOwokbGFuZ1sncmVnaXN0cmF0aW9uMl90ZW1wbGF0ZSddID0gJ1JlZ2lzdHJhdGlvbiBUZW1wbGF0ZSAyJzsKJGxhbmdbJ2VtYWlsY29uZmlybV90ZW1wbGF0ZSddID0gJ0NvbmZpcm1hdGlvbiBFbWFpbCBUZW1wbGF0ZSc7CiRsYW5nWydlbWFpbHVzZXJlZGl0ZWRfdGVtcGxhdGUnXSA9ICdVc2VyIEluZm8gQ2hhbmdlZCBUZW1wbGF0ZSc7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ1ByZWZlcmVuY2VzJzsKJGxhbmdbJ2Vycm9yX3VzZXJub3Rmb3VuZCddID0gJ1VzZXIgbm90IGZvdW5kJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZSddID0gJ1VzZXJuYW1lIGlzIGludmFsaWQgKHRvbyBsb25nLCB0b28gc2hvcnQsIG9yIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycykuICBIaW50LSBVc2VybmFtZXMgbXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgKG5vIHNwYWNlcyknOwokbGFuZ1snZXJyb3JfdXNlcm5hbWV0YWtlbiddID0gJ1RoYXQgdXNlcm5hbWUgaXMgY3VycmVudGx5IGluIHVzZSc7CiRsYW5nWydlcnJvcl9wYXNzd29yZHNkb250bWF0Y2gnXSA9ICdFUlJPUjogUGFzc3dvcmRzIGRvbnQgbWF0Y2gnOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhc3N3b3JkJ10gPSAnUGFzc3dvcmQgaXMgaW52YWxpZCAocGFzc3dvcmRzIG11c3QgYmUgYmV0d2VlbiAlcyBhbmQgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGgpJzsKJGxhbmdbJ2Vycm9yX2VtcHR5dXNlcm5hbWUnXSA9ICdVc2VybmFtZSBjYW5ub3QgYmUgZW1wdHknOwokbGFuZ1sncmVwZWF0cGFzc3dvcmQnXSA9ICdQYXNzd29yZCAoYWdhaW4pJzsKJGxhbmdbJ3Bhc3N3b3JkJ10gPSAnUGFzc3dvcmQnOwokbGFuZ1sndXNlcm5hbWUnXSA9ICdVc2VybmFtZSc7CiRsYW5nWydlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnXSA9ICdJbnN1ZmZpY2llbnQgbnVtYmVyIChvciBpbmNvcnJlY3QpIHBhcmFtZXRlcnMgc3VwcGxpZWQgdG8gbW9kdWxlJzsKJGxhbmdbJ2Vycm9yX25vZmV1c2Vyc21vZHVsZSddID0gJ0NvdWxkIG5vdCBnZXQgaW5zdGFuY2Ugb2YgRnJvbnRFbmRVc2VycyBtb2R1bGUnOwokbGFuZ1snZXJyb3Jfbm9zdWNoZ3JvdXAnXSA9ICdHcm91cCBuYW1lIHNwZWNpZmllZCBkb2VzIG5vdCBleGlzdCc7CiRsYW5nWydzZW5kX2VtYWlsc190byddID0gJ1JlZ2lzdHJhdGlvbiBlbWFpbHMgc2hvdWxkIGJlIHNlbnQgdG8nOwokbGFuZ1sncmVxdWlyZV9lbWFpbF9jb25maXJtYXRpb24nXSA9ICdSZXF1aXJlIHRoZSB1c2VyIHRvIGNvbmZpcm0gcmVnaXN0cmF0aW9uIHZpYSBlbWFpbCc7CiRsYW5nWydub3RpZnlfb25fcmVnaXN0cmF0aW9uJ10gPSAnU2VuZCBhbiBlbWFpbCBub3RpZmljYXRpb24gd2hlbiBzb21lb25lIHJlZ2lzdGVycyc7CiRsYW5nWydjYW5jZWwnXSA9ICdDYW5jZWwnOwokbGFuZ1snc3VibWl0J10gPSAnU3VibWl0JzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1NlbGYgUmVnaXN0cmF0aW9uIE1vZHVsZSc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0luc3RhbGxhdGlvbiBzdWNjZXNzZnVsbCwgcGxlYXNlIHJlbWVtYmVyIHRvIHNldCB0aGUgJnF1b3Q7TW9kaWZ5IFNlbGZSZWdpc3RyYXRpb24gU2V0dGluZ3MmcXVvdDsgcGVybWlzc2lvbi4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1NlbGYgUmVnaXN0cmF0aW9uIG1vZHVsZSBpcyB1bmluc3RhbGxlZC4gIFNlZSB5b3UgbGF0ZXIuJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIFVuaW5zdGFsbGVkLic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ01vZHVsZSBwcmVmZXJlbmNlcyB1cGRhdGVkLic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBY2Nlc3MgRGVuaWVkLiBQbGVhc2UgY2hlY2sgeW91ciBwZXJtaXNzaW9ucy4nOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvciEnOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTW9kdWxlIFByZWZlcmVuY2VzJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsZSBBZG1pbiBQYW5lbCc7CiRsYW5nWyd0aXRsZV9hZG1pbl9wYW5lbCddID0gJ1NlbGYgUmVnaXN0cmF0aW9uIE1vZHVsZSc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0EgbW9kdWxlIHRoYXQgYWxsb3dzIGZyb250IGVuZCB1c2VycyB0byByZWdpc3RlciB0aGVtc2VsdmVzLic7CiRsYW5nWyd3ZWxjb21lX3RleHQnXSA9ICc8cD5XZWxjb21lIHRvIHRoZSBzZWxmIHJlZ2lzdHJhdGlvbiBtb2R1bGUuPC9wPic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+CjxsaT5WZXJzaW9uIDAuMC4xLiBPY3QgMjAwNS4gSW5pdGlhbCBOUlBUIChOb3QgUmVhZHkgZm9yIFByaW1lIFRpbWUpIHJlbGVhc2UuPC9saT4KPGxpPlZlcnNpb24gMC4xLjAuIE9jdCAyMDA1LiBJbml0aWFsIHJlbGVhc2UuPC9saT4KPGxpPlZlcnNpb24gMC4xLjEuIE9jdCAyMDA1LiBTZXQgdGhlIEhUTUwgbWFpbCBmbGFnLjwvbGk+CjxsaT5WZXJzaW9uIDAuMS4yLiBPY3QgMjAwNS4gTW92ZWQgUmFuZG9tIHN0dWZmIGludG8gZmV1c2VycywgYW5kIGFkZGVkIHRoZSBhYmlsaXR5IHRvIGRlbGV0ZSBvbGQgZW50cmllcyBmcm9tIHRoZSByZWdpc3RyYXRpb24gdGVtcG9yYXJ5IHRhYmxlczwvbGk+CjxsaT48cD5WZXJzaW9uIDAuMS4zLiAtIERlYyAyMDA1PC9wPgo8cD5GaXhlZCB0aGUgdG9nZ2xlcyBpbiB0aGUgYWRtaW4gcHJlZmVyZW5jZXMuICBBbHNvLCBjaGFuZ2VkIHRoZSBwZXJtaXNzaW9ucyBtb2RlbCB0byBub3QgcmVxdWlyZSB0aGUgdW5pcXVlIHBlcm1pc3Npb24gYWRkZWQgcHJldmlvdXNseSBmb3IgdGhlIHNlbGZyZWcgbW9kdWxlLjwvcD4KPHA+VGhpcyByZWxlYXNlIHdhcyByZW1vdmVkIGR1ZSB0byBwb3NzaWJsZSBlcnJvcnM8L3A+CjwvbGk+CjxsaT48cD5WZXJzaW9uIDAuMS40LiAtIEphbiAyMDA2PC9wPgo8cD5GaXhlZCBtaW5vciBlcnJvcnMgd2l0aCBDaGVja1Blcm1pc3Npb24sIHJlcGxhY2VkIGFsbCBhc3NpZ25fYnlfcmVmc1wncyB3aXRoIGFzc2lnbnMgZm9yIGhvcGVmdWwgcGhwNSBjb21wYXRpYmlsaXR5LjwvcD4KPGxpPjxwPlZlcnNpb24gMC4xLjUuIC0gSmFuIDIwMDY8L3A+CjxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCB0aGUgc3ViamVjdCBvZiB0aGUgY29uZmlybWF0aW9uIGVtYWlsLCBhbmQgYWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHRleHQgYm9keS4gIFN1YmplY3QsIGFuZCB0ZXh0IGJvZHkgYXJlIHJlcXVpcmVkLjwvcD4KPC9saT4KPGxpPjxwPlZlcnNpb24gMS4wLjAuIC0gRmViIDIwMDY8L3A+CjxwPkZpeGVkIGEgcHJvYmxlbSB3aXRoIHRoZSB2ZXJpZnkgbW9kZS48L3A+CjxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIGVkaXQgYW5kIGRlbGV0ZSB1c2Vycy4gd2l0aCBzZWxlY3Rpb24gb24gdGhlIGNoZWNrYm94ZXMsIGFuZCAiY2hlY2thbGwiPC9wPgo8cD5Ob3cgcmVxdWlyZSBGRVVzZXJzIDAuMS44IGFuZCBDTVNNYWlsZXIgMS43My45PC9wPgo8cD5BZGRlZCBhbm90aGVyIHRhYiBmb3IgdGhlICJ5b3VyIHNldHRpbmdzIGhhdmUgYmVlbiBhZGp1c3RlZCIgZW1haWwgdGVtcGxhdGVzPC9wPgo8cD5BZGRlZCBDU1YgRXhwb3J0aW5nPC9wPgo8cD5BZGRlZCBhICJEZWxldGUgYWxsIHVzZXJzIG9sZGVyIHRoYW4gYSBkYXkiIGJ1dHRvbjwvcD4KPHA+Tm93IHdvcmtzIHdpdGggdGhlIG1heGltdW0gbGVuZ3RoIGZpZWxkIG9mIEZFVXNlcnM8L3A+CjxwPkFkZGVkIHN1cHBvcnQgZm9yIGRyb3Bkb3ducyBhbmQgdGV4dCBhcmVhczwvcD4KPHA+RGlzYWxsb3cgcHVuY3R1YXRpb24gY2hhcmFjdGVycyBpbiB1c2VybmFtZTwvcD4KPC9saT4KPGxpPjxwPlZlcnNpb24gMS4wLjEuIC0gRmViIDIwMDY8L3A+CjxwPkFkZGVkIHRoZSBhYmlsaXR5IGZvciB1c2VycyB0byByZXF1ZXN0IGFub3RoZXIgcmVnaXN0cmF0aW9uIGVtYWlsICh1c2VzIHRoZSBzYW1lIGNvZGUpLCBpbmNhc2UgdGhleSBsb3N0IHRoZWlyIGZpcnN0IG9uZS48L3A+CjwvbGk+CjxsaT48cD5WZXJzaW9uIDEuMC4yLiAtIEZlYiAyMDA2PC9wPgo8cD5UaGUgIlJlcXVpcmUgZW1haWwgY29uZmlybWF0aW9uIiBjaGVja2JveCBub3cgd29ya3MuICBVc2VycyBhcmUgYWRkZWQgc3RyYWlnaHQgdG8gdGhlIGZyb250ZW5kIHVzZXJzIGRhdGFiYXNlPC9wPgo8cD5GaXhlZCBhIGJ1ZyB3aXRoIHRoZSBjb25maXJtYXRpb24gZW1haWxzIGhhdmluZyBsaW5rcyB0byB0aGUgYWRtaW4gc2VjdGlvbiAobmV3IGJ1ZyBvbmx5KS48L3A+CjwvbGk+CjxsaT48cD5WZXJzaW9uIDEuMC4zLiAtIEZlYiAyMDA2PC9wPgo8cD5BZGRlZCB0aGUgKG9wdGlvbmFsKSBhYmlsaXR5IHRvIHJlcXVpcmUgdGhlIHVzZXIgZW50ZXIgdGhlIGVtYWlsIGFkZHJlc3MgdHdpY2U8L3A+CjxwPkZpeGVkIGEgYnVnIHdpdGggdGhlIHVzZXJlZGl0ZWQgbWVzc2FnZSBub3QgYmVpbmcgdGhyb3duIHRocm91Z2ggc21hcnR5PC9wPgo8cD5GaXhlZCB0aGUgZGVmYXVsdCByZWdpc3RyYXRpb24gdGVtcGxhdGUgYSBiaXQgdG8gYWlkZSBpbiB2YWxpZGF0aW9uIGZvciBub24gcmVxdWlyZWQgZmllbGRzIChmaXhlZCBhIHdhcm5pbmcpPC9wPgo8cD5GaXggcHJvYmxlbXMgd2l0aCBpbmxpbmUgYW5kIG5vbi1pbmxpbmUgZm9ybXMgYW5kIGxpbmtzPC9wPgo8cD5IYW5kbGUgYW5vdGhlciBjYXNlIHdoZXJlIHRoZSBhZG1pbiBtYXkgbm90IGhhdmUgY3JlYXRlZCB0aGUgcHJvcGVyIHR5cGUgb2YgZW1haWwgcHJvcGVydHk8L3A+CjxwPkNoYW5nZWQgdG8gcmVxdWlyZSBDTVMgMC4xMi1iZXRhMiBhdCBhIG1pbmltdW0gKGZvciBzYWZldHkgcHVycG9zZXMpPC9wPgo8L2xpPgo8bGk+PHA+VmVyc2lvbiAxLjAuNC4gLSBNYXIgMjAwNjwvcD4KPHA+TW9yZSBjb250cm9sIG92ZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkIHNpemVzIChjb250cm9sbGVkIGJ5IGZldXNlcnMpPC9wPgo8cD5Db25maXJtYXRpb24gb24gZWRpdGluZyBwcmVmZXJlbmNlczwvcD4KPHA+UmVxdWlyZSAwLjEyIHByb3BlciBvZiBjbXMgYXMgYSBtaW5pbXVtPC9wPgo8L2xpPgo8L3VsPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGlzIGRlc2lnbmVkIHRvIGFsbG93IGZyb250IGVuZCB1c2VycyB0byByZWdpc3RlciB0aGVtc2VsdmVzIGFuZCBmaWxsIGluIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4gIEl0IHRoZW4gc2VuZHMgYSBjb25maXJtYXRpb24gZW1haWwsIHdpdGggYSBsaW5rIHRvIGEgc2Vjb25kIHBhZ2UgdGhhdCBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlIHJlZ2lzdHJhdGlvbiBpcyBjb21wbGV0ZS4gIE9uY2UgcmVnaXN0cmF0aW9uIGlzIGNvbXBsZXRlLCBhIHVzZXIgYWNjb3VudCBpcyBjcmVhdGVkIGluIHRoZSBmcm9udCBlbmQgdXNlcnMgbW9kdWxlLjwvcD4KPHA+SW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9kdWxlLCB5b3UgbXVzdCBjcmVhdGUgYSBwcm9wZXJ0eSBvZiB0eXBlICJFbWFpbCBBZGRyZXNzIiBpbiB0aGUgRnJvbnRlbmRVc2VycyBtb2R1bGUsIGFuZCBhc3NvY2lhdGUgdGhhdCBwcm9wZXJ0eSB3aXRoIHRoZSBncm91cCB0byBiZSB1c2VkIGZvciBzZWxmIHJlZ2lzdHJhdGlvbi48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5Zb3UgcGxhY2UgdGhlIGZvbGxvd25nIHRhZyBpbnRvIHlvdXIgcGFnZSB7Y21zX21vZHVsZSBtb2R1bGU9U2VsZlJlZ2lzdHJhdGlvbiBncm91cD11c2VyZ3JvdXB9PC9wPgo8cD5Zb3UgbXVzdCBoYXZlIHByZXZpb3VzbHkgY3JlYXRlZCBwcm9wZXJ0aWVzIGFuZCB1c2VyIGdyb3VwcyBpbiB0aGUgRnJvbnRFbmRVc2VycyBtb2R1bGUgaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yayBwcm9wZXJseS48L3A+CjxoMz5QYXJhbWV0ZXJzPC9oMz4KPHA+PHN0cm9uZz5tb2RlPC9zdHJvbmc+Jm5ic3A7PGVtPm9wdGlvbmFsPC9lbT4gLSBwb3NzaWJsZSB2YWx1ZXMgYXJlICJzaWdudXAiIGFuZCAidmVyaWZ5Ii4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsICJzaWdudXAiIGlzIGFzc3VtYmVkLjwvcD4KPHA+PHN0cm9uZz5ncm91cDwvc3Ryb25nPiZuYnNwOzxlbT5vcHRpb25hbDwvZW0+IC0gVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgaWYgbW9kZSBpcyAic2lnbnVwIiwgb3IgaWYgbW9kZSBpcyBsZWZ0IGVtcHR5LjwvcD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCBjYWxndXlcJ3MKbW9kdWxlIGhvbWVwYWdlIGF0IDxhIGhyZWY9Imh0dHA6Ly90ZWNoY29tLmR5bmRucy5vcmciPnRlY2hjb20uZHluZG5zLm9yZzwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+ICAKPC91bD4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0Cm9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDUsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGhvdG1haWwuY29tIj4mbHQ7Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+Cic7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/de_DE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ3N1YmplY3QnXSA9ICdCZXRyZWZmIGb8ciBkaWUgYXVzZ2VoZW5kZSBFbWFpbCc7CiRsYW5nWydodG1sYm9keSddID0gJ0luaGFsdCBkZXIgSFRNTC1OYWNocmljaHQnOwokbGFuZ1sndGV4dGJvZHknXSA9ICdJbmhhbHQgZGVyIFRleHQtTmFjaHJpY2h0JzsKJGxhbmdbJ3Byb21wdF9udW1yZXNldHJlY29yZCddID0gJ0VpbmUgQW56YWhsIHZvbiBVc2VybiBzaW5kIGRhYmVpLCB2ZXJsb3JlbiBnZWdhbmdlbmUgUGFzc3cmb3VtbDtydGVyIHp1ciZ1dW1sO2NrenVzZXR6ZW4uIEFrdHVlbGwgc2luZCBkaWVzOic7CiRsYW5nWydyZW1vdmUxd2VlayddID0gJ0FsbGUgRWludHImYXVtbDtnZSBlbnRmZXJuZW4sIGRpZSAmYXVtbDtsdGVyIGFscyBlaW5lIFdvY2hlIHNpbmQnOwokbGFuZ1sncmVtb3ZlMW1vbnRoJ10gPSAnQWxsZSBFaW50ciZhdW1sO2dlIGVudGZlcm5lbiwgZGllICZhdW1sO2x0ZXIgYWxzIGVpbiBNb25hdCBzaW5kJzsKJGxhbmdbJ3JlbW92ZWFsbCddID0gJ0FsbGUgRWludHImYXVtbDtnZSBlbnRmZXJuZW4nOwokbGFuZ1snYXJleW91c3VyZSddID0gJ1NpbmQgU2llIHNpY2hlcj8nOyAKJGxhbmdbJ3JlZ2lzdHJhdGlvbl9jb25maXJtYXRpb24nXSA9ICdSZWdpc3RyaWVydW5nc2Jlc3QmYXVtbDt0aWd1bmcnOwokbGFuZ1sndXNlcl9yZWdpc3RyYXRpb24nXSA9ICdSZWdpc3RyaWVyZW4nOwokbGFuZ1snZmluYWxtZXNzYWdlX3RlbXBsYXRlJ10gPSAnVGVtcGxhdGUgZiZ1dW1sO3IgQWJzY2hsdXNzbmFjaHJpY2h0JzsKJGxhbmdbJ3RpdGxlX3ZlcmlmeXJlZ2lzdHJhdGlvbiddID0gJ1JlZ2lzdHJpZXJ1bmcgJnV1bWw7YmVycHImdXVtbDtmZW4nOwokbGFuZ1snY29kZSddID0gJ0NvZGUgYXVzIGRlciBFbWFpbCc7CiRsYW5nWydkZWZhdWx0J10gPSAnQWxzIFN0YW5kYXJkIHNldHplbic7CiRsYW5nWydlcnJvcl9lbWFpbGludmFsaWQnXSA9ICdVbmcmdXVtbDtsdGlnZSBFbWFpbGFkcmVzc2UhJzsKJGxhbmdbJ2Vycm9yX25vZW1haWxhZGRyZXNzJ10gPSAnS2VpbiBnJnV1bWw7bHRpZ2VzIEFkcmVzc2ZlbGQgZ2VmdW5kZW4hJzsKJGxhbmdbJ2Vycm9yX3JlcXVpcmVkZmllbGQnXSA9ICdEYXMgRmVsZCAlcyBtdXNzIGF1c2dlZiZ1dW1sO2xsdCB3ZXJkZW4hJzsKJGxhbmdbJ3JlZ2lzdHJhdGlvbjFfdGVtcGxhdGUnXSA9ICdSZWdpc3RyaWVydW5ncy1UZW1wbGF0ZSAxJzsKJGxhbmdbJ3JlZ2lzdHJhdGlvbjJfdGVtcGxhdGUnXSA9ICdSZWdpc3RyaWVydW5ncy1UZW1wbGF0ZSAyJzsKJGxhbmdbJ2VtYWlsY29uZmlybV90ZW1wbGF0ZSddID0gJ1RlbXBsYXRlIGYmdXVtbDtyIGRpZSBFbWFpbGJlc3QmYXVtbDt0aWd1bmcnOwokbGFuZ1sncHJlZmVyZW5jZXMnXSA9ICdFaW5zdGVsbHVuZ2VuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZSddID0gJ0RlciBVc2VybmFtZSBpc3QgdW5nJnV1bWw7bHRpZyAoenUgbGFuZyBvZGVyIHp1IGt1cnopISc7CiRsYW5nWydlcnJvcl91c2VybmFtZXRha2VuJ10gPSAnRGllc2VyIFVzZXJuYW1lIGlzdCBiZXJlaXRzIHZlcmdlYmVuISc7CiRsYW5nWydlcnJvcl9wYXNzd29yZHNkb250bWF0Y2gnXSA9ICdEaWUgUGFzc3cmb3VtbDtydGVyIHN0aW1tZW4gbmljaHQgJnV1bWw7YmVyZWluISc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFzc3dvcmQnXSA9ICdQYXNzd29ydCBpc3QgdW5nJnV1bWw7bHRpZyAoenUgbGFuZyBvZGVyIHp1IGt1cnopISc7CiRsYW5nWydlcnJvcl9lbXB0eXVzZXJuYW1lJ10gPSAnRGVyIFVzZXJuYW1lIGRhcmYgbmljaHQgbGVlciBnZWxhc3NlbiB3ZXJkZW4hJzsKJGxhbmdbJ3JlcGVhdHBhc3N3b3JkJ10gPSAnUGFzc3dvcnQgKG5vY2ggZWlubWFsKSc7CiRsYW5nWydwYXNzd29yZCddID0gJ1Bhc3N3b3J0JzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnVXNlcm5hbWUnOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnTW9kdWwgd3VyZGUgbWl0IHVudm9sbHN0JmF1bWw7bmRpZ2VuIChvZGVyIGZhbHNjaGVuKSBQYXJhbWV0ZXJuIGF1ZmdlcnVmZW4hJzsKJGxhbmdbJ2Vycm9yX25vZmV1c2Vyc21vZHVsZSddID0gJ0tvbm50ZSBrZWluZSBWZXJiaW5kdW5nIHp1bSBGcm9udEVuZFVzZXJzLU1vZHVsIGhlcnN0ZWxsZW4hJzsKJGxhbmdbJ2Vycm9yX25vc3VjaGdyb3VwJ10gPSAnRGllc2VyIEdydXBwZW5uYW1lIGV4aXN0aWVydCBuaWNodCEnOwokbGFuZ1snc2VuZF9lbWFpbHNfdG8nXSA9ICdSZWdpc3RyaWVydW5nc2VtYWlscyBzb2xsZW4gdmVyc2FuZHQgd2VyZGVuIGFuJzsKJGxhbmdbJ3JlcXVpcmVfZW1haWxfY29uZmlybWF0aW9uJ10gPSAnRGVuIFVzZXIgdmlhIEVtYWlsIHp1ciBCZXN0JmF1bWw7dGlndW5nIGRlciBSZWdpc3RyaWVydW5nICBhdWZmb3JkZXJuJzsKJGxhbmdbJ25vdGlmeV9vbl9yZWdpc3RyYXRpb24nXSA9ICdCZW5hY2hyaWNodGlndW5nc2VtYWlsIHZlcnNlbmRlbiwgd2VubiBzaWNoIGplbWFuZCByZWdpc3RyaWVydCc7CiRsYW5nWydjYW5jZWwnXSA9ICdBYmJyZWNoZW4nOwokbGFuZ1snc3VibWl0J10gPSAnQWJzZW5kZW4nOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnU2VsZlJlZ2lzdHJhdGlvbi1Nb2R1bCc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0luc3RhbGxhdGlvbiBlcmZvbGdyZWljaCwgYml0dGUgZGVua2VuIFNpZSBkYXJhbiwgZGllIEJlcmVjaHRpZ3VuZyAiTW9kaWZ5IFNlbGZSZWdpc3RyYXRpb24gU2V0dGluZ3MiIHp1IHNldHplbi4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1NvIGVpbiBNaXN0ISBXaWVkZXIgbmljaHRzISc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsIGRlaW5zdGFsbGllcnQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsIFZlcnNpb24gJXMgaW5zdGFsbGllcnQuJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ01vZHVsZWluc3RlbGx1bmdlbiBha3R1YWxpc2llcnQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ1p1Z3JpZmYgdmVyd2VpZ2VydC4gQml0dGUgJnV1bWw7YmVycHImdXVtbDtmZW4gc2llIGlocmUgQmVyZWNodGlndW5nZW4uJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRmVobGVyISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsIGFrdHVhbGlzaWVydCBhdWYgVmVyc2lvbiAlcy4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTW9kdWxlaW5zdGVsbHVuZ2VuJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsYWRtaW5pc3RyYXRpb24nOwokbGFuZ1sndGl0bGVfYWRtaW5fcGFuZWwnXSA9ICdTZWxmUmVnaXN0cmF0aW9uLU1vZHVsJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnRWluIE1vZHVsLCBtaXQgd2VsY2hlbSBzaWNoIEZyb250RW5kLVVzZXIgc2VsYnN0IHJlZ2lzdHJpZXJlbiBrJm91bWw7bm5lbi4nOwokbGFuZ1snd2VsY29tZV90ZXh0J10gPSAnPHA+V2lsbGtvbW1lbiBiZWltIFNlbGZSZWdpc3RyYXRpb24tTW9kdWwuPC9wPic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+CjxsaT5WZXJzaW9uIDAuMC4xLiBPY3QgMjAwNS4gSW5pdGlhbCBOUlBUIChOb3QgUmVhZHkgZm9yIFByaW1lIFRpbWUpIHJlbGVhc2UuPC9saT4KPGxpPlZlcnNpb24gMC4xLjAuIE9jdCAyMDA1LiBJbml0aWFsIHJlbGVhc2UuPC9saT4KPGxpPlZlcnNpb24gMC4xLjEuIE9jdCAyMDA1LiBTZXQgdGhlIEhUTUwgbWFpbCBmbGFnLjwvbGk+CjxsaT5WZXJzaW9uIDAuMS4yLiBPY3QgMjAwNS4gTW92ZWQgUmFuZG9tIHN0dWZmIGludG8gZmV1c2VycywgYW5kIGFkZGVkIHRoZSBhYmlsaXR5IHRvIGRlbGV0ZSBvbGQgZW50cmllcyBmcm9tIHRoZSByZWdpc3RyYXRpb24gdGVtcG9yYXJ5IHRhYmxlczwvbGk+CjxsaT48cD5WZXJzaW9uIDAuMS4zLiAtIERlYyAyMDA1PC9wPgo8cD5GaXhlZCB0aGUgdG9nZ2xlcyBpbiB0aGUgYWRtaW4gcHJlZmVyZW5jZXMuICBBbHNvLCBjaGFuZ2VkIHRoZSBwZXJtaXNzaW9ucyBtb2RlbCB0byBub3QgcmVxdWlyZSB0aGUgdW5pcXVlIHBlcm1pc3Npb24gYWRkZWQgcHJldmlvdXNseSBmb3IgdGhlIHNlbGZyZWcgbW9kdWxlLjwvcD4KPHA+VGhpcyByZWxlYXNlIHdhcyByZW1vdmVkIGR1ZSB0byBwb3NzaWJsZSBlcnJvcnM8L3A+CjwvbGk+CjxsaT48cD5WZXJzaW9uIDAuMS40LiAtIEphbiAyMDA2PC9wPgo8cD5GaXhlZCBtaW5vciBlcnJvcnMgd2l0aCBDaGVja1Blcm1pc3Npb24sIHJlcGxhY2VkIGFsbCBhc3NpZ25fYnlfcmVmc1wncyB3aXRoIGFzc2lnbnMgZm9yIGhvcGVmdWwgcGhwNSBjb21wYXRpYmlsaXR5LjwvcD4KPGxpPjxwPlZlcnNpb24gMC4xLjUuIC0gSmFuIDIwMDY8L3A+CjxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCB0aGUgc3ViamVjdCBvZiB0aGUgY29uZmlybWF0aW9uIGVtYWlsLCBhbmQgYWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHRleHQgYm9keS4gIFN1YmplY3QsIGFuZCB0ZXh0IGJvZHkgYXJlIHJlcXVpcmVkLjwvcD4KPC91bD4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XYXMgbWFjaHQgZGllc2VzIE1vZHVsPzwvaDM+CjxwPk1pdCBkaWVzZW0gTW9kdWwgayZvdW1sO25uZW4gc2ljaCBGcm9udEVuZC1Vc2VyIHNlbGJzdCByZWdpc3RyaWVyZW4gdW5kIGRpZSBub3R3ZW5kaWdlbiBJbmZvcm1hdGlvbmVuIGVpbmdlYmVuLiBEYW5hY2ggd2lyZCBlaW5lIEJlc3QmYXVtbDt0aWd1bmdzZW1haWwgbWl0IGVpbmVtIExpbmsgenUgZWluZXIgendlaXRlbiBTZWl0ZSB2ZXJzYW5kdCwgdW0gZGllIFJlZ2lzdHJpZXJ1bmcgenUga29tcGxldHRpZXJlbi4gTmFjaCBkZXNzZW4gZXJmb2xncmVpY2hlbSBBYnNjaGx1c3Mgd2lyZCBpbSBGcm9udEVuZCBVc2Vycy1Nb2R1bCBlaW4gbmV1ZXIgVXNlcmFjY291bnQgZXJzdGVsbHQuPC9wPgo8aDM+V2llIHdpcmQgZXMgZWluZ2VzZXR6dCA/PC9oMz4KPHA+RiZ1dW1sO2dlbiBTaWUgZGVuIFRhZyB7Y21zX21vZHVsZSBtb2R1bGU9U2VsZlJlZ2lzdHJhdGlvbiBncm91cD11c2VyZ3JvdXB9IGluIGlocmUgU2VpdGUgZWluLjwvcD4KPHA+RGFtaXQgZGFzIE1vZHVsIGZ1bmt0aW9uaWVydCwgbSZ1dW1sO3NzZW4gU2llIGplZG9jaCB6dXZvciBkaWUgVXNlcmdydXBwZW4gdW5kIGRlcmVuIEVpZ2Vuc2NoYWZ0ZW4gaW0gRnJvbnRFbmQgVXNlcnMtTW9kdWwgZXJzdGVsbHQgaGFiZW4uPC9wPgo8aDM+U3VwcG9ydDwvaDM+CjxwPkRpZXNlcyBNb2R1bCBiZWluaGFsdGV0IGtlaW5lbiBrb21tZXJ6aWVsbGVuIFN1cHBvcnQuIFNpZSBrJm91bWw7bm5lbiBqZWRvY2ggJnV1bWw7YmVyIGZvbGdlbmRlIE0mb3VtbDtnbGljaGtlaXRlbiBIaWxmZSB6dSBkZW0gTW9kdWwgZXJoYWx0ZW46PC9wPgo8dWw+CjxsaT5GJnV1bWw7ciBkaWUgbGV0enRlIFZlcnNpb24gZGllc2VzIE1vZHVscywgRkFRcywgZGVtIFZlcnNhbmQgZWluZXMgRmVobGVycmVwb3J0cyBvZGVyIGRlbSBLYXVmIGtvbW1lcnppZWxsZW4gU3VwcG9ydCBiZXN1Y2hlbiBTaWUgYml0dGUgY2FsZ3V5cyAKSG9tZXBhZ2UgdW50ZXIgPGEgaHJlZj0iaHR0cDovL3RlY2hjb20uZHluZG5zLm9yZyI+dGVjaGNvbS5keW5kbnMub3JnPC9hPi48L2xpPgo8bGk+RWluZSB3ZWl0ZXJlIERpc2t1c3Npb24genUgZGllc2VtIE1vZHVsIGlzdCBhdWNoIGluIGRlbiBGb3JlbiB2b24gPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGU8L2E+IHp1IGZpbmRlbi48L2xpPgo8bGk+RGVyIEF1dG9yIGNhbGd1eTEwMDAsIGlzdCBoJmF1bWw7dWZpZyBpbSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4genUgZmluZGVuLjwvbGk+CjxsaT5MZXR6dGxpY2ggZXJyZWljaGVuIFNpZSBkZW4gQXV0b3IgYXVjaCAmdXVtbDtiZXIgZWluZSBkaXJla3RlIEVtYWlsLjwvbGk+ICAgIAo8L3VsPgo8cD5OYWNoIGRlciBHUEwgd2lyZCBkaWVzZSBTb2Z0d2FyZSBzbyB2ZXImb3VtbDtmZmVudGxpY2h0LCB3aWUgc2llIGlzdC4gQml0dGUgbGVzZW4gU2llIGRlbgogTGl6ZW56dGV4dCBmJnV1bWw7ciBkZW4gdm9sbGVuIEhhZnR1bmdzYXVzc2NobHVzcy48L3A+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaXplbno8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDUsIFJvYmVydCBDYW1wYmVsbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSI+Jmx0O2NhbGd1eTEwMDBAaG90bWFpbC5jb20mZ3Q7PC9hPi4gQWxsZSBSZWNodGUgdm9yYmVoYWx0ZW4uPC9wPgo8cD5EaWVzZXMgTW9kdWwgd3VyZGUgdW50ZXIgZGVyIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPiB2ZXImb3VtbDtmZmVudGxpY2h0LiBTaWUgbSZ1dW1sO3NzZW4gZGllc2VyIExpemVueiB6dXN0aW1tZW4sIGJldm9yIFNpZSBkYXMgTW9kdWwgdmVyd2VuZGVuLjwvcD4KJzsKPz4K]]></data>
	</file>
	<file>
	  <filename>/lang/ext/it_IT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2NvbmZpcm1fc3VibWl0cHJlZnMnXSA9ICdDYW1iaWFyZSBsZSBwcmVmZXJlbnplIGRpIGFtbWluaXN0cmF6aW9uZT8nOwokbGFuZ1snaW5mb19hZG1pbl9wYXNzd29yZCddID0gJ0xhc2NpYSBxdWVzdG8gY2FtcG8gdnVvdG8gcGVyIHByZXNlcnZhcmUgbGEgcGFzc3dvcmQnOwokbGFuZ1snaW5mb19hZG1pbl9yZXBlYXRwYXNzd29yZCddID0gJ0xhc2NpYSBxdWVzdG8gY2FtcG8gdnVvdG8gcGVyIHByZXNlcnZhcmUgbGEgcGFzc3dvcmQnOwokbGFuZ1snZXJyb3JfZW1haWxkb2Vzbm90bWF0Y2gnXSA9ICdJbmRpcml6emkgZW1haWwgbm9uIGNvaW5jaWRvbm8nOwokbGFuZ1snZm9yY2VfZW1haWxfdHdpY2UnXSA9ICdFJiMwMzk7IHJpY2hpZXN0byBjaGUgbCYjMDM5O3V0ZW50ZSBpbnRyb2R1Y2EgbCYjMDM5O2luZGlyaXp6byBlbWFpbCBkdWUgdm9sdGUnOwokbGFuZ1snYWdhaW4nXSA9ICdkaSBudW92byc7CiRsYW5nWydkZWxldGVzZWx1c2VycyddID0gJ0NhbmNlbGxhIGdsaSB1dGVudGkgc2VsZXppb25hdGknOwokbGFuZ1snZXJyb3Jfbm9wcm9wZGVmbnMnXSA9ICdOZXNzdW5hIGRlZmluaXppb25lIGRpIHByb3ByaWV0JmFncmF2ZTssIG8gdW4gcHJvYmxlbWEgYSByaWNldmVybGUgZGFsIGRhdGFiYXNlJzsKJGxhbmdbJ2Vycm9yX25vZ3JvdXBzJ10gPSAnTmVzc3VuIGdydXBwbywgbyB1biBwcm9ibGVtYSBhIHJpY2V2ZXJlIGxhIGxpc3RhIGdydXBwaSc7CiRsYW5nWydlcnJvcl9kYmVycm9yJ10gPSAnRXJyb3JlIG5lbCBkYXRhYmFzZSc7CiRsYW5nWyd0aXRsZV9wb3N0X3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnXSA9ICdNb2RlbGxvIHBlciBFbWFpbCBwZXJzYSBpbnNlcml0byc7CiRsYW5nWyd0aXRsZV9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJ10gPSAnTW9kZWxsbyBwZXIgRW1haWwgcGVyc2EnOwokbGFuZ1snY2xpY2toZXJlJ10gPSAncHJlbWVuZG8gcXVhJzsKJGxhbmdbJ21zZ19zZW5kYW5vdGhlcmVtYWlsJ10gPSAnQXZldGUgY29tcGxldGF0byBpbCBtb2R1bG8gZGkgcmVnaXN0cmF6aW9uZSBtYSBub24gYXZldGUgcmljZXZ1dG8gdW5hIGVtYWlsLiBQb3RldGUgcmlzcGVkaXJlIHVuJiMwMzk7YWx0cmEgZW1haWwnOwokbGFuZ1snc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZSddID0gJ01vZGVsbG8gcGVyIEVtYWlsIHBlcnNhJzsKJGxhbmdbJ2luZm9fdXNlcnZlcmlmaWVkJ10gPSAnVW4gbnVvdm8gdXRlbnRlICZlZ3JhdmU7IHN0YXRvIGFnZ2l1bnRvIGFpIEZyb250RW5kVXNlcnMnOwokbGFuZ1snZWRpdCddID0gJ01vZGlmaWNhJzsKJGxhbmdbJ3Vua25vd24nXSA9ICdTY29ub3NjaXV0byc7CiRsYW5nWydzZWxlY3QnXSA9ICdTZWxlemlvbmEnOwokbGFuZ1snY2hlY2tfYWxsJ10gPSAnU2VsZXppb25hIHR1dHRvJzsKJGxhbmdbJ3VuY2hlY2tfYWxsJ10gPSAnRGVzZWxlemlvbmEgdHV0dG8nOwokbGFuZ1snc2VuZF9hZGp1c3RtZW50ZW1haWwnXSA9ICdTcGVkaXNjZSB1bmEgZW1haWwgYWxsJiMwMzk7dXRlbnRlJzsKJGxhbmdbJ3R4dF9hZGp1c3RtZW50ZW1haWwnXSA9ICcoaW5mb3JtYSBsJiMwMzk7dXRlbnRlIGNoZSBsJiMwMzk7YWNjb3VudCAmZWdyYXZlOyBzdGF0byBjb25zb2xpZGF0byc7CiRsYW5nWyd0eHRfY2hhbmdlcGFzc3dvcmQnXSA9ICdSaWVtcGlyZSBxdWVzdGkgY2FtcGkgcGVyIGNhbWJpYXJlIGxhIHBhc3N3b3JkJzsKJGxhbmdbJ2VkaXR1c2VyJ10gPSAnTW9kaWZpY2EgdXRlbnRlJzsKJGxhbmdbJ2FyZXlvdXN1cmVfZGVsZXRldXNlciddID0gJ1NlaSBzaWN1cm8gZGkgdm9sZXIgY2FuY2VsbGFyZSBxdWVzdG8gdXRlbnRlIHJlZ2lzdHJhdG8gcGFyemlhbG1lbnRlPyc7CiRsYW5nWydoZHJfdXNlcmlkJ10gPSAnVXNlcklEJzsKJGxhbmdbJ2hkcl91c2VybmFtZSddID0gJ1VzZXJuYW1lJzsKJGxhbmdbJ2hkcl9ncnBuYW1lJ10gPSAnR3J1cHBvJzsKJGxhbmdbJ2hkcl9jcmVhdGVkJ10gPSAnQ3JlYXRvJzsKJGxhbmdbJ2hkcl9lbWFpbCddID0gJ0VtYWlsJzsKJGxhbmdbJ3VzZXJzZm91bmQnXSA9ICdVdGVudGkgdHJvdmF0aSAobGltaXRhdG8gYWQgdW4gbWFzc2ltbyBkaSAyNTApJzsKJGxhbmdbJ3VzZXJzJ10gPSAnVXRlbnRpJzsKJGxhbmdbJ2xpc3QxZGF5J10gPSAnVmlzdWFsaXp6YSB0dXR0ZSBsZSBlbnRyYXRlIHBpJnVncmF2ZTsgdmVjY2hpZSBkaSB1biBnaW9ybm8nOwokbGFuZ1snc3ViamVjdCddID0gJ09nZ2V0dG8gcGVyIGxlIGVtYWlsIGluIHVzY2l0YSc7CiRsYW5nWydodG1sYm9keSddID0gJ0NvcnBvIGRlbCBtZXNzYWdnaW8gaW4gSFRNTCc7CiRsYW5nWyd0ZXh0Ym9keSddID0gJ0NvcnBvIGRlbCBtZXNzYWdnaW8gY29tZSB0ZXN0byc7CiRsYW5nWydwcm9tcHRfbnVtcmVzZXRyZWNvcmQnXSA9ICdVbiBudW1lcm8gZGkgdXRlbnRpIHNvbm8gbmVsIG1lenpvIGRlbGxhIHJlZ2lzdHJhemlvbmUuIEluIHF1ZXN0byBtb21lbnRvIGlsIGNvbnRhdG9yZSAmZWdyYXZlOyBhOic7CiRsYW5nWydyZW1vdmUxd2VlayddID0gJ1JpbXVvdmUgdHV0dGUgbGUgZW50cmF0ZSBwaSZ1Z3JhdmU7IHZlY2NoaWUgZGkgdW5hIHNldHRpbWFuYSc7CiRsYW5nWydyZW1vdmUxbW9udGgnXSA9ICdSaW11b3ZlIHR1dHRlIGxlIGVudHJhdGUgcGkmdWdyYXZlOyB2ZWNjaGllIGRpIHVuIG1lc2UnOwokbGFuZ1sncmVtb3ZlMWRheSddID0gJ1JpbXVvdmUgdHV0dGUgbGUgZW50cmF0ZSBwaSZ1Z3JhdmU7IHZlY2NoaWUgZGkgdW4gZ2lvcm5vJzsKJGxhbmdbJ3JlbW92ZWFsbCddID0gJ1JpbXVvdmUgdHV0dGUgbGUgZW50cmF0ZSc7CiRsYW5nWydhcmV5b3VzdXJlJ10gPSAnU2VpIHNpY3Vybz8nOwokbGFuZ1sncmVnaXN0cmF0aW9uX2luZm9fZWRpdGVkJ10gPSAnTGEgdm9zdHJhIHJlZ2lzdHJhemlvbmUgJmVncmF2ZTsgc3RhdGEgbW9kaWZpY2F0YSc7CiRsYW5nWydyZWdpc3RyYXRpb25fY29uZmlybWF0aW9uJ10gPSAnQ29uZmVybWEgZGVsbGEgcmVnaXN0cmF6aW9uZSc7CiRsYW5nWyd1c2VyX3JlZ2lzdHJhdGlvbiddID0gJ1JlZ2lzdHJhdGknOwokbGFuZ1snZmluYWxtZXNzYWdlX3RlbXBsYXRlJ10gPSAnTW9kZWxsbyBkZWwgbWVzc2FnZ2lvIGZpbmFsZSc7CiRsYW5nWyd0aXRsZV92ZXJpZnlyZWdpc3RyYXRpb24nXSA9ICdWZXJpZmljYSBkZWxsYSByZWdpc3RyYXppb25lJzsKJGxhbmdbJ2NvZGUnXSA9ICdDaGlhdmUgZGkgdmFsaWRhemlvbmUnOwokbGFuZ1snZGVmYXVsdCddID0gJ1NldHRhIGFpIHZhbG9yaSBwcmVkZWZpbml0aSc7CiRsYW5nWydlcnJvcl9ub3Byb3BlcnRpZXMnXSA9ICdOZXNzdW5hIHByb3ByaWV0JmFncmF2ZTsgcGVyIHF1ZXN0byB1dGVudGUnOwokbGFuZ1snZXJyb3Jfbm9wcm9wcmVsYXRpb25zJ10gPSAnTmVzc3VuYSByZWxhemlvbmUgZGVsbGUgcHJvcHJpZXQmYWdyYXZlOyc7CiRsYW5nWydlcnJvcl9lbWFpbGludmFsaWQnXSA9ICdJbmRpcml6em8gZW1haWwgbm9uIHZhbGlkbyc7CiRsYW5nWydlcnJvcl9ub2VtYWlsYWRkcmVzcyddID0gJ05lc3N1biBjYW1wbyBwZXIgdW4gdmFsaWRvIGluZGlyaXp6byBlbWFpbCAmZWdyYXZlOyBzdGF0byB0cm92YXRvJzsKJGxhbmdbJ2Vycm9yX3JlcXVpcmVkZmllbGQnXSA9ICdJbCBjYW1wbyAlcyBkZXZlIGVzc2VyZSBwcmVzZW50ZSc7CiRsYW5nWydyZWdpc3RyYXRpb24xX3RlbXBsYXRlJ10gPSAnTW9kZWxsbyAxIHBlciBsYSByZWdpc3RyYXppb25lJzsKJGxhbmdbJ3JlZ2lzdHJhdGlvbjJfdGVtcGxhdGUnXSA9ICdNb2RlbGxvIDIgcGVyIGxhIHJlZ2lzdHJhemlvbmUnOwokbGFuZ1snZW1haWxjb25maXJtX3RlbXBsYXRlJ10gPSAnTW9kZWxsbyBwZXIgbGEgY29uZmVybWEgZGEgZW1haWwnOwokbGFuZ1snZW1haWx1c2VyZWRpdGVkX3RlbXBsYXRlJ10gPSAnTW9kZWxsbyBwZXIgaWwgY2FtYmlvIGRlbGxlIGluZm9ybWF6aW9uaSB1dGVudGUnOwokbGFuZ1sncHJlZmVyZW5jZXMnXSA9ICdQcmVmZXJlbnplJzsKJGxhbmdbJ2Vycm9yX3VzZXJub3Rmb3VuZCddID0gJ1V0ZW50ZSBub24gdHJvdmF0byc7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXNlcm5hbWUnXSA9ICdVc2VybmFtZSBub24gdmFsaWRvICh0cm9wcG8gbHVuZ28sIHRyb3BwbyBjb3J0byBvIGNvbnRpZW5lIGNhcmF0dGVyaSBub24gdmFsaWRpKS4gU2kgcmljb3JkYSBjaGUgZGV2ZSBjb250ZW5lcmUgc29sbyBjYXJhdHRlcmkgYWxmYW51bWVyaWNpIHNlbnphIHNwYXppLic7CiRsYW5nWydlcnJvcl91c2VybmFtZXRha2VuJ10gPSAnUXVlc3RvIHVzZXJuYW1lICZlZ3JhdmU7IGdpJmFncmF2ZTsgaW4gdXNvJzsKJGxhbmdbJ2Vycm9yX3Bhc3N3b3Jkc2RvbnRtYXRjaCddID0gJ0Vycm9yZTogbGUgcGFzc3dvcmQgbm9uIGNvaW5jaWRvbm8nOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhc3N3b3JkJ10gPSAnUGFzc3dvcmQgaW52YWxpZGEgKGRldmUgZXNzZXJlIGNvbXByZXNhIGZyYSAlcyBlICVzIGNhcmF0dGVyaSBhbGZhbnVtZXJpY2kgc2VuemEgc3BhemkpJzsKJGxhbmdbJ2Vycm9yX2VtcHR5dXNlcm5hbWUnXSA9ICdVc2VybmFtZSBub24gcHUmb2dyYXZlOyBlc3NlcmUgdnVvdG8nOwokbGFuZ1sncmVwZWF0cGFzc3dvcmQnXSA9ICdQYXNzd29yZCAoZGkgbnVvdm8pJzsKJGxhbmdbJ3Bhc3N3b3JkJ10gPSAnUGFzc3dvcmQnOwokbGFuZ1sndXNlcm5hbWUnXSA9ICdVc2VybmFtZSc7CiRsYW5nWydlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnXSA9ICdOdW1lcm8gaW5zdWZmaWNpZW50ZSAobyBub24gY29ycmV0dG8pIGRpIHBhcmFtZXRyaSBpbnRyb2RvdHRpIGFsIG1vZHVsbyc7CiRsYW5nWydlcnJvcl9ub2ZldXNlcnNtb2R1bGUnXSA9ICdOb24gcG9zc28gcHJlbmRlcmUgdW5hIGlzdGFuemEgZGVsIG1vZHVsbyBGcm9udEVuZFVzZXJzJzsKJGxhbmdbJ2Vycm9yX25vc3VjaGdyb3VwJ10gPSAnSWwgbm9tZSBncnVwcG8gc3BlY2lmaWNhdG8gbm9uIGVzaXN0ZSc7CiRsYW5nWydzZW5kX2VtYWlsc190byddID0gJ0xhIGVtYWlsIGRpIHJlZ2lzdHJhemlvbmUgc2FyJmFncmF2ZTsgc3BlZGl0YSBhJzsKJGxhbmdbJ3JlcXVpcmVfZW1haWxfY29uZmlybWF0aW9uJ10gPSAnU2kgcmljaGllZGUgY2hlIGwmIzAzOTt1dGVudGUgY29uZmVybWkgbGEgcmVnaXN0cmF6aW9uZSB2aWEgZW1haWwnOwokbGFuZ1snbm90aWZ5X29uX3JlZ2lzdHJhdGlvbiddID0gJ1NwZWRpc2NlIHVuYSBlbWFpbCBkaSBub3RpZmljYSBxdWFuZG8gcXVhbGN1bm8gc2kgcmVnaXN0cmEnOwokbGFuZ1snY2FuY2VsJ10gPSAnQ2FuY2VsbGEnOwokbGFuZ1snc3VibWl0J10gPSAnSW5vbHRyYSc7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdNb2R1bG8gZGkgU2VsZiBSZWdpc3RyYXRpb24nOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdJbnN0YWxsYXRvIGNvbiBzdWNjZXNzbywgc2kgcmljb3JkaSBzaSBzZXR0YXJlIGlsIHBlcm1lc3NvIHBlciAmcXVvdDtNb2RpZnkgU2VsZlJlZ2lzdHJhdGlvbiBTZXR0aW5ncyZxdW90Oy4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0lsIG1vZHVsbyBTZWxmIFJlZ2lzdHJhdGlvbiAmZWdyYXZlOyBkaXNpbnN0YWxsYXRvLic7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsbyBkaXNpbnN0YWxsYXRvLic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdWZXJzaW9uZSBkZWwgbW9kdWxvICVzIGluc3RhbGxhdGEuJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ1ByZWZlcmVuemUgZGVsIG1vZHVsbyBhZ2dpb3JuYXRlLic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBY2Nlc3NvIG5lZ2F0by4gU2kgcHJlZ2EgZGkgY29udHJvbGxhcmUgaSBwZXJtZXNzaS4nOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvcmUhJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWxvIGFnZ2lvcm5hdG8gYWxsYSB2ZXJzaW9uZSAlcy4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnUHJlZmVyZW56ZSBtb2R1bG8nOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnUGFubmVsbG8gZGkgYW1taW5pc3RyYXppb25lIGRlbCBtb2R1bG8nOwokbGFuZ1sndGl0bGVfYWRtaW5fcGFuZWwnXSA9ICdNb2R1bG8gU2VsZiBSZWdpc3RyYXRpb24nOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdVbiBtb2R1bG8gY2hlIHBlcm1ldHRlIGFnbGkgdXRlbnRpIGRpIGF1dG8gcmVnaXN0cmFyc2kuJzsKJGxhbmdbJ3dlbGNvbWVfdGV4dCddID0gJzxwPkJlbnZlbnV0aSBuZWwgbW9kdWxvIGRpIGF1dG9yZWdpc3RyYXppb25lLjwvcD4nOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnPHVsPg0KPGxpPlZlcnNpb24gMC4wLjEuIE9jdCAyMDA1LiBJbml0aWFsIE5SUFQgKE5vdCBSZWFkeSBmb3IgUHJpbWUgVGltZSkgcmVsZWFzZS48L2xpPg0KPGxpPlZlcnNpb24gMC4xLjAuIE9jdCAyMDA1LiBJbml0aWFsIHJlbGVhc2UuPC9saT4NCjxsaT5WZXJzaW9uIDAuMS4xLiBPY3QgMjAwNS4gU2V0IHRoZSBIVE1MIG1haWwgZmxhZy48L2xpPg0KPGxpPlZlcnNpb24gMC4xLjIuIE9jdCAyMDA1LiBNb3ZlZCBSYW5kb20gc3R1ZmYgaW50byBmZXVzZXJzLCBhbmQgYWRkZWQgdGhlIGFiaWxpdHkgdG8gZGVsZXRlIG9sZCBlbnRyaWVzIGZyb20gdGhlIHJlZ2lzdHJhdGlvbiB0ZW1wb3JhcnkgdGFibGVzPC9saT4NCjxsaT48cD5WZXJzaW9uIDAuMS4zLiAtIERlYyAyMDA1PC9wPg0KPHA+Rml4ZWQgdGhlIHRvZ2dsZXMgaW4gdGhlIGFkbWluIHByZWZlcmVuY2VzLiAgQWxzbywgY2hhbmdlZCB0aGUgcGVybWlzc2lvbnMgbW9kZWwgdG8gbm90IHJlcXVpcmUgdGhlIHVuaXF1ZSBwZXJtaXNzaW9uIGFkZGVkIHByZXZpb3VzbHkgZm9yIHRoZSBzZWxmcmVnIG1vZHVsZS48L3A+DQo8cD5UaGlzIHJlbGVhc2Ugd2FzIHJlbW92ZWQgZHVlIHRvIHBvc3NpYmxlIGVycm9yczwvcD4NCjwvbGk+DQo8bGk+PHA+VmVyc2lvbiAwLjEuNC4gLSBKYW4gMjAwNjwvcD4NCjxwPkZpeGVkIG1pbm9yIGVycm9ycyB3aXRoIENoZWNrUGVybWlzc2lvbiwgcmVwbGFjZWQgYWxsIGFzc2lnbl9ieV9yZWZzJiMwMzk7cyB3aXRoIGFzc2lnbnMgZm9yIGhvcGVmdWwgcGhwNSBjb21wYXRpYmlsaXR5LjwvcD4NCjxsaT48cD5WZXJzaW9uIDAuMS41LiAtIEphbiAyMDA2PC9wPg0KPHA+QWRkZWQgdGhlIGFiaWxpdHkgdG8gc2V0IHRoZSBzdWJqZWN0IG9mIHRoZSBjb25maXJtYXRpb24gZW1haWwsIGFuZCBhZGRlZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGEgdGV4dCBib2R5LiAgU3ViamVjdCwgYW5kIHRleHQgYm9keSBhcmUgcmVxdWlyZWQuPC9wPg0KPC9saT4NCjxsaT48cD5WZXJzaW9uIDEuMC4wLiAtIEZlYiAyMDA2PC9wPg0KPHA+Rml4ZWQgYSBwcm9ibGVtIHdpdGggdGhlIHZlcmlmeSBtb2RlLjwvcD4NCjxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIGVkaXQgYW5kIGRlbGV0ZSB1c2Vycy4gd2l0aCBzZWxlY3Rpb24gb24gdGhlIGNoZWNrYm94ZXMsIGFuZCAmcXVvdDtjaGVja2FsbCZxdW90OzwvcD4NCjxwPk5vdyByZXF1aXJlIEZFVXNlcnMgMC4xLjggYW5kIENNU01haWxlciAxLjczLjk8L3A+DQo8cD5BZGRlZCBhbm90aGVyIHRhYiBmb3IgdGhlICZxdW90O3lvdXIgc2V0dGluZ3MgaGF2ZSBiZWVuIGFkanVzdGVkJnF1b3Q7IGVtYWlsIHRlbXBsYXRlczwvcD4NCjxwPkFkZGVkIENTViBFeHBvcnRpbmc8L3A+DQo8cD5BZGRlZCBhICZxdW90O0RlbGV0ZSBhbGwgdXNlcnMgb2xkZXIgdGhhbiBhIGRheSZxdW90OyBidXR0b248L3A+DQo8cD5Ob3cgd29ya3Mgd2l0aCB0aGUgbWF4aW11bSBsZW5ndGggZmllbGQgb2YgRkVVc2VyczwvcD4NCjxwPkFkZGVkIHN1cHBvcnQgZm9yIGRyb3Bkb3ducyBhbmQgdGV4dCBhcmVhczwvcD4NCjxwPkRpc2FsbG93IHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMgaW4gdXNlcm5hbWU8L3A+DQo8L2xpPg0KPGxpPjxwPlZlcnNpb24gMS4wLjEuIC0gRmViIDIwMDY8L3A+DQo8cD5BZGRlZCB0aGUgYWJpbGl0eSBmb3IgdXNlcnMgdG8gcmVxdWVzdCBhbm90aGVyIHJlZ2lzdHJhdGlvbiBlbWFpbCAodXNlcyB0aGUgc2FtZSBjb2RlKSwgaW5jYXNlIHRoZXkgbG9zdCB0aGVpciBmaXJzdCBvbmUuPC9wPg0KPC9saT4NCjxsaT48cD5WZXJzaW9uIDEuMC4yLiAtIEZlYiAyMDA2PC9wPg0KPHA+VGhlICZxdW90O1JlcXVpcmUgZW1haWwgY29uZmlybWF0aW9uJnF1b3Q7IGNoZWNrYm94IG5vdyB3b3Jrcy4gIFVzZXJzIGFyZSBhZGRlZCBzdHJhaWdodCB0byB0aGUgZnJvbnRlbmQgdXNlcnMgZGF0YWJhc2U8L3A+DQo8cD5GaXhlZCBhIGJ1ZyB3aXRoIHRoZSBjb25maXJtYXRpb24gZW1haWxzIGhhdmluZyBsaW5rcyB0byB0aGUgYWRtaW4gc2VjdGlvbiAobmV3IGJ1ZyBvbmx5KS48L3A+DQo8L2xpPg0KPGxpPjxwPlZlcnNpb24gMS4wLjMuIC0gRmViIDIwMDY8L3A+DQo8cD5BZGRlZCB0aGUgKG9wdGlvbmFsKSBhYmlsaXR5IHRvIHJlcXVpcmUgdGhlIHVzZXIgZW50ZXIgdGhlIGVtYWlsIGFkZHJlc3MgdHdpY2U8L3A+DQo8cD5GaXhlZCBhIGJ1ZyB3aXRoIHRoZSB1c2VyZWRpdGVkIG1lc3NhZ2Ugbm90IGJlaW5nIHRocm93biB0aHJvdWdoIHNtYXJ0eTwvcD4NCjxwPkZpeGVkIHRoZSBkZWZhdWx0IHJlZ2lzdHJhdGlvbiB0ZW1wbGF0ZSBhIGJpdCB0byBhaWRlIGluIHZhbGlkYXRpb24gZm9yIG5vbiByZXF1aXJlZCBmaWVsZHMgKGZpeGVkIGEgd2FybmluZyk8L3A+DQo8cD5GaXggcHJvYmxlbXMgd2l0aCBpbmxpbmUgYW5kIG5vbi1pbmxpbmUgZm9ybXMgYW5kIGxpbmtzPC9wPg0KPHA+SGFuZGxlIGFub3RoZXIgY2FzZSB3aGVyZSB0aGUgYWRtaW4gbWF5IG5vdCBoYXZlIGNyZWF0ZWQgdGhlIHByb3BlciB0eXBlIG9mIGVtYWlsIHByb3BlcnR5PC9wPg0KPHA+Q2hhbmdlZCB0byByZXF1aXJlIENNUyAwLjEyLWJldGEyIGF0IGEgbWluaW11bSAoZm9yIHNhZmV0eSBwdXJwb3Nlcyk8L3A+DQo8L2xpPg0KPGxpPjxwPlZlcnNpb24gMS4wLjQuIC0gTWFyIDIwMDY8L3A+DQo8cD5Nb3JlIGNvbnRyb2wgb3ZlciB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGQgc2l6ZXMgKGNvbnRyb2xsZWQgYnkgZmV1c2Vycyk8L3A+DQo8cD5Db25maXJtYXRpb24gb24gZWRpdGluZyBwcmVmZXJlbmNlczwvcD4NCjxwPlJlcXVpcmUgMC4xMiBwcm9wZXIgb2YgY21zIGFzIGEgbWluaW11bTwvcD4NCjwvbGk+DQo8L3VsPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5UaGlzIG1vZHVsZSBpcyBkZXNpZ25lZCB0byBhbGxvdyBmcm9udCBlbmQgdXNlcnMgdG8gcmVnaXN0ZXIgdGhlbXNlbHZlcyBhbmQgZmlsbCBpbiB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24uICBJdCB0aGVuIHNlbmRzIGEgY29uZmlybWF0aW9uIGVtYWlsLCB3aXRoIGEgbGluayB0byBhIHNlY29uZCBwYWdlIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSByZWdpc3RyYXRpb24gaXMgY29tcGxldGUuICBPbmNlIHJlZ2lzdHJhdGlvbiBpcyBjb21wbGV0ZSwgYSB1c2VyIGFjY291bnQgaXMgY3JlYXRlZCBpbiB0aGUgZnJvbnQgZW5kIHVzZXJzIG1vZHVsZS48L3A+DQo8cD5JbiBvcmRlciB0byB1c2UgdGhpcyBtb2R1bGUsIHlvdSBtdXN0IGNyZWF0ZSBhIHByb3BlcnR5IG9mIHR5cGUgJnF1b3Q7RW1haWwgQWRkcmVzcyZxdW90OyBpbiB0aGUgRnJvbnRlbmRVc2VycyBtb2R1bGUsIGFuZCBhc3NvY2lhdGUgdGhhdCBwcm9wZXJ0eSB3aXRoIHRoZSBncm91cCB0byBiZSB1c2VkIGZvciBzZWxmIHJlZ2lzdHJhdGlvbi48L3A+DQo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4NCjxwPllvdSBwbGFjZSB0aGUgZm9sbG93bmcgdGFnIGludG8geW91ciBwYWdlIHtjbXNfbW9kdWxlIG1vZHVsZT1TZWxmUmVnaXN0cmF0aW9uIGdyb3VwPXVzZXJncm91cH08L3A+DQo8cD5Zb3UgbXVzdCBoYXZlIHByZXZpb3VzbHkgY3JlYXRlZCBwcm9wZXJ0aWVzIGFuZCB1c2VyIGdyb3VwcyBpbiB0aGUgRnJvbnRFbmRVc2VycyBtb2R1bGUgaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yayBwcm9wZXJseS48L3A+DQo8aDM+UGFyYW1ldGVyczwvaDM+DQo8cD48c3Ryb25nPm1vZGU8L3N0cm9uZz4mbmJzcDs8ZW0+b3B0aW9uYWw8L2VtPiAtIHBvc3NpYmxlIHZhbHVlcyBhcmUgJnF1b3Q7c2lnbnVwJnF1b3Q7IGFuZCAmcXVvdDt2ZXJpZnkmcXVvdDsuICBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCAmcXVvdDtzaWdudXAmcXVvdDsgaXMgYXNzdW1iZWQuPC9wPg0KPHA+PHN0cm9uZz5ncm91cDwvc3Ryb25nPiZuYnNwOzxlbT5vcHRpb25hbDwvZW0+IC0gVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgaWYgbW9kZSBpcyAmcXVvdDtzaWdudXAmcXVvdDssIG9yIGlmIG1vZGUgaXMgbGVmdCBlbXB0eS48L3A+DQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+DQo8dWw+DQo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IGNhbGd1eSYjMDM5O3MNCm1vZHVsZSBob21lcGFnZSBhdCA8YSBocmVmPSZxdW90O2h0dHA6Ly90ZWNoY29tLmR5bmRucy5vcmcmcXVvdDs+dGVjaGNvbS5keW5kbnMub3JnPC9hPi48L2xpPg0KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0mcXVvdDtodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmcmcXVvdDs+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4NCjxsaT5UaGUgYXV0aG9yLCBjYWxndXkxMDAwLCBjYW4gb2Z0ZW4gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9JnF1b3Q7aXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zJnF1b3Q7PkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4NCjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgDQo8L3VsPg0KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0DQpvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+DQoNCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KPHA+Q29weXJpZ2h0ICZhbXA7Y29weTsgMjAwNSwgUm9iZXJ0IENhbXBiZWwgPGEgaHJlZj0mcXVvdDttYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSZxdW90Oz4mYW1wO2x0O2NhbGd1eTEwMDBAaG90bWFpbC5jb20mYW1wO2d0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCZxdW90Oz5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPic7Cj8+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiAgICAkdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwoKICAgIC8vIHZhbGlkYXRpb25zIGluIHByb2Nlc3MKICAgICRmbGRzID0gIgogICAgICAgICAgICAgaWQgSSBLRVksCiAgICAgICAgICAgICBncm91cF9pZCBJIE5PVCBOVUxMLAogICAgICAgICAgICAgdXNlcm5hbWUgQyg4MCkgTk9UIE5VTEwsCiAgICAgICAgICAgICBwYXNzc3dvcmQgQygzMikgTk9UIE5VTEwsCiAgICAgICAgICAgICBjb2RlIEMoMjApIE5PVCBOVUxMLAogICAgICAgICAgICAgY3JlYXRlZGF0ZSBEVAogICAgICAgICAgICAiOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfdXNlcnMiLCAKCQkJCSAgICAgICRmbGRzLCAkdGFib3B0YXJyYXkgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwogICAgJGRiLT5DcmVhdGVTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ191c2Vyc19zZXEiICk7CgogICAgJGZsZHMgPSAiaWQgSSBLRVksCiAgICAgICAgICAgICB1c2VyIEkgTk9UIE5VTEwsIAogICAgICAgICAgICAgdGl0bGUgQygxMDApIE5PVCBOVUxMLAogICAgICAgICAgICAgZGF0YSBDKDI1NSkgCiAgICAgICAgICAgICI7IAogICAgJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfcHJvcGVydGllcyIsCgkJCQkgICAgICAkZmxkcywgJHRhYm9wdGFycmF5ICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKICAgICRkYi0+Q3JlYXRlU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfcHJvcGVydGllc19zZXEiICk7CgogCiAgICAvLyBwcmVmZXJlbmNlcwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3JlcXVpcmVfZW1haWxfY29uZmlybWF0aW9uJywxKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzZW5kX2VtYWlsc190bycsJ3Jvb3RAbG9jYWxob3N0LmNvbScpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ25vdGlmeV9vbl9yZWdpc3RyYXRpb24nLDEpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3NlbGZyZWdfZW1haWxjb25maXJtX3N1YmplY3QnLAoJCQkgJHRoaXMtPkxhbmcoJ3JlZ2lzdHJhdGlvbl9jb25maXJtYXRpb24nKSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnc2VsZnJlZ19lbWFpbHVzZXJlZGl0ZWRfc3ViamVjdCcsCgkJCSAkdGhpcy0+TGFuZygncmVnaXN0cmF0aW9uX2luZm9fZWRpdGVkJykpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3NlbGZyZWdfZm9yY2VfZW1haWxfdHdpY2UnLDApOwoKICAgIC8vIHRlbXBsYXRlcwogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdzZWxmcmVnX3JlZzF0ZW1wbGF0ZScsICR0aGlzLT5kZmx0X3JlZ2lzdHJhdGlvbjFfdGVtcGxhdGUpOwogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdzZWxmcmVnX3Bvc3RyZWcxX3RlbXBsYXRlJywgJHRoaXMtPmRmbHRfcG9zdHJlZzFfdGVtcGxhdGUpOwogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdzZWxmcmVnX3JlZzJ0ZW1wbGF0ZScsICR0aGlzLT5kZmx0X3JlZ2lzdHJhdGlvbjJfdGVtcGxhdGUpOwogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdzZWxmcmVnX2VtYWlsY29uZmlybV90ZW1wbGF0ZScsICR0aGlzLT5kZmx0X2VtYWlsY29uZmlybV90ZW1wbGF0ZSk7CiAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ3NlbGZyZWdfZW1haWxjb25maXJtX3RleHR0ZW1wbGF0ZScsICR0aGlzLT5kZmx0X2VtYWlsY29uZmlybV90ZXh0dGVtcGxhdGUpOwogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdzZWxmcmVnX2VtYWlsdXNlcmVkaXRlZF90ZW1wbGF0ZScsICR0aGlzLT5kZmx0X2VtYWlsdXNlcmVkaXRlZF90ZW1wbGF0ZSk7CiAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ3NlbGZyZWdfZW1haWx1c2VyZWRpdGVkX3RleHR0ZW1wbGF0ZScsICR0aGlzLT5kZmx0X2VtYWlsdXNlcmVkaXRlZF90ZXh0dGVtcGxhdGUpOwogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdzZWxmcmVnX2ZpbmFsbWVzc2FnZV90ZW1wbGF0ZScsICR0aGlzLT5kZmx0X2ZpbmFsbWVzc2FnZV90ZW1wbGF0ZSk7CiAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ3NlbGZyZWdfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZScsICR0aGlzLT5kZmx0X3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUgKTsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnc2VsZnJlZ19wb3N0X3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnLCAkdGhpcy0+ZGZsdF9wb3N0X3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUgKTsKCiAgICAvLyBQZXJtaXNzaW9ucwogICAgJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01hbmFnZSBSZWdpc3RlcmluZyBVc2VycycsCgkJCSAgICAnTWFuYWdlIFJlZ2lzdGVyaW5nIFVzZXJzJyk7CgogICAgLy8gZXZlbnRzCiAgICAkdGhpcy0+Q3JlYXRlRXZlbnQoJ29uTmV3VXNlcicpOwogICAgJHRoaXMtPkNyZWF0ZUV2ZW50KCdvblVzZXJSZWdpc3RlcmVkJyk7Cn0KPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfdXNlcnMiICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3Byb3BlcnRpZXMiICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAkZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ191c2Vyc19zZXEiICk7CiAgICAkZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ19wcm9wZXJ0aWVzX3NlcSIgKTsKCiAgICAvLyBwcmVmZXJlbmNlcwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ3JlcXVpcmVfZW1haWxfY29uZmlybWF0aW9uJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnc2VuZF9lbWFpbHNfdG8nKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdub3RpZnlfb25fcmVnaXN0cmF0aW9uJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnc2VsZnJlZ19lbWFpbGNvbmZpcm1fc3ViamVjdCcpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ3NlbGZyZWdfZW1haWx1c2VyZWRpdGVkX3N1YmplY3QnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdzZWxmcmVnX2ZvcmNlX2VtYWlsX3R3aWNlJyk7CgogICAgLy8gdGVtcGxhdGVzCiAgICAkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ3NlbGZyZWdfcmVnMXRlbXBsYXRlJyk7CiAgICAkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ3NlbGZyZWdfcG9zdHJlZzFfdGVtcGxhdGUnKTsKICAgICR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnc2VsZnJlZ19yZWcydGVtcGxhdGUnKTsKICAgICR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnc2VsZnJlZ19lbWFpbGNvbmZpcm1fdGVtcGxhdGUnKTsKICAgICR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnc2VsZnJlZ19lbWFpbGNvbmZpcm1fdGV4dHRlbXBsYXRlJyk7CiAgICAkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ3NlbGZyZWdfZW1haWx1c2VyZWRpdGVkX3RlbXBsYXRlJyk7CiAgICAkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ3NlbGZyZWdfZW1haWx1c2VyZWRpdGVkX3RleHR0ZW1wbGF0ZScpOwogICAgJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdzZWxmcmVnX2ZpbmFsbWVzc2FnZV90ZW1wbGF0ZScpOwogICAgJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdzZWxmcmVnX3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnKTsKICAgICR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnc2VsZnJlZ19wb3N0X3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnKTsKCiAgICAvLyBwZXJtaXNzaW9ucwogICAgJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ01vZGlmeSBTZWxmUmVnaXN0cmF0aW9uJyk7CiAgICAkdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTWFuYWdlIFJlZ2lzdGVyaW5nIFVzZXJzJyk7CgogICAgLy8gZXZlbnRzCiAgICAkdGhpcy0+UmVtb3ZlRXZlbnQoJ29uTmV3VXNlcicpOwogICAgJHRoaXMtPlJlbW92ZUV2ZW50KCdvblVzZXJSZWdpc3RlcmVkJyk7Cn0KPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKewogICAgLy8gdGhpcyBwcmVmZXJlbmNlIGlzIG5vIGxvbmdlciBuZWVkZWQKICBzd2l0Y2goICRvbGR2ZXJzaW9uICkKICAgIHsKICAgIGNhc2UgJzEuMC4zJzoKICAgICAgewoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3NlbGZyZWdfZW1haWxjb25maXJtX3N1YmplY3QnLAoJCQkgICAgICR0aGlzLT5MYW5nKCdyZWdpc3RyYXRpb25fY29uZmlybWF0aW9uJykpOwoJJHRoaXMtPlNldFRlbXBsYXRlKCdzZWxmcmVnX2VtYWlsY29uZmlybV90ZXh0dGVtcGxhdGUnLCAkdGhpcy0+ZGZsdF9lbWFpbGNvbmZpcm1fdGV4dHRlbXBsYXRlKTsKCQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3NlbGZyZWdfdXNlcmVkaXRlZF9zdWJqZWN0JywKCQkJICAgICAkdGhpcy0+TGFuZygncmVnaXN0cmF0aW9uX2NvbmZpcm1hdGlvbicpKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzZWxmcmVnX2ZvcmNlX2VtYWlsX3R3aWNlJywwKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnc2VsZnJlZ191c2VyZWRpdGVkX3RlbXBsYXRlJywgJHRoaXMtPmRmbHRfZW1haWx1c2VyZWRpdGVkX3RlbXBsYXRlKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnc2VsZnJlZ191c2VyZWRpdGVkX3RleHR0ZW1wbGF0ZScsICR0aGlzLT5kZmx0X2VtYWlsdXNlcmVkaXRlZF90ZXh0dGVtcGxhdGUpOwoJJHRoaXMtPlNldFRlbXBsYXRlKCdzZWxmcmVnX3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnLCAkdGhpcy0+ZGZsdF9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlICk7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJ3NlbGZyZWdfcG9zdF9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJywgJHRoaXMtPmRmbHRfcG9zdF9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlICk7CgkKCS8vIFBlcm1pc3Npb25zCgkkdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTW9kaWZ5IFNlbGZSZWdpc3RyYXRpb24nKTsKCSR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdNYW5hZ2UgUmVnaXN0ZXJpbmcgVXNlcnMnLAoJCQkJJ01hbmFnZSBSZWdpc3RlcmluZyBVc2VycycpOwoJLy8gbm90aWNlLCBubyBicmVyYWsKICAgICAgfQogICAgICAKICAgIGNhc2UgJzEuMC40JzoKICAgICAgewoJJHRoaXMtPkNyZWF0ZUV2ZW50KCdvbk5ld1VzZXInKTsKCSR0aGlzLT5DcmVhdGVFdmVudCgnb25Vc2VyUmVnaXN0ZXJlZCcpOwogICAgICB9CiAgICB9Cgp9Cj8+]]></data>
	</file>
	<file>
	  <filename>/SelfRegistration.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNlbGZSZWdpc3RyYXRpb24gLSBhIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCBwaHBtYWlsZXIKIyBWZXJzaW9uOiAxLjAuNCBDYWxndXkxMDAwCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KY2xhc3MgU2VsZlJlZ2lzdHJhdGlvbiBleHRlbmRzIENNU01vZHVsZQp7CiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVGhlIGRlZmF1bHQgdGVtcGxhdGUgdXNlZCBmb3IgdGhlIGZpcnN0IHJlZ2lzdHJhdGlvbiBmb3JtCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgdmFyICRkZmx0X3JlZ2lzdHJhdGlvbjFfdGVtcGxhdGUgPSAnCjwhLS0gUmVnaXN0cmF0aW9uIDEgdGVtcGxhdGUgLS0+CnskdGl0bGV9CntpZiAkbWVzc2FnZSAhPSBcJ1wnfQogIHtpZiAkZXJyb3IgIT0gXCdcJ30KICAgIDxwPjxmb250IGNvbG9yPSJyZWQiPnskbWVzc2FnZX08L2ZvbnQ+PC9wPgogIHtlbHNlfQogICAgPHA+eyRtZXNzYWdlfTwvcD4KICB7L2lmfQp7L2lmfQp7JHN0YXJ0Zm9ybX0Ke2lmICRjb250cm9sY291bnQgPiAwfQogIDxjZW50ZXI+CiAgPHRhYmxlIHdpZHRoPSI3NSUiPgp7Zm9yZWFjaCBmcm9tPSRjb250cm9scyBpdGVtPWNvbnRyb2x9CiAgPHRyPgogICAgPHRkPnskY29udHJvbC0+aGlkZGVufQogICAge2lmICRjb250cm9sLT5jb2xvciAhPSBcJ1wnfQogICAgICA8Zm9udCBjb2xvcj0ieyRjb250cm9sLT5jb2xvcn0iPnskY29udHJvbC0+cHJvbXB0fXskY29udHJvbC0+bWFya2VyfTwvZm9udD4KICAgIHtlbHNlfQogICAgICB7JGNvbnRyb2wtPnByb21wdH17JGNvbnRyb2wtPm1hcmtlcn0KICAgIHsvaWZ9CiAgICA8L3RkPgogICAgPHRkPnskY29udHJvbC0+Y29udHJvbH08L3RkPgogIDwvdHI+CnsvZm9yZWFjaH0KICA8L3RhYmxlPgogIDwvY2VudGVyPgo8YnIvPgp7L2lmfQogeyRoaWRkZW59eyRoaWRkZW4yfXskc3VibWl0fXskY2FuY2VsfTxici8+CnskbXNnX3NlbmRhbm90aGVyZW1haWx9Jm5ic3A7eyRsaW5rX3NlbmRhbm90aGVyZW1haWx9CnskZW5kZm9ybX0KPCEtLSBSZWdpc3RyYXRpb24gMSB0ZW1wbGF0ZSAtLT4KICc7CgogIHZhciAkZGZsdF9wb3N0cmVnMV90ZW1wbGF0ZSA9ICcKPCEtLSBQb3N0IFJlZ2lzdHJhdGlvbiAxIHRlbXBsYXRlIC0tPgp7JHRpdGxlfQp7aWYgJG1lc3NhZ2UgIT0gXCdcJ30KICB7aWYgJGVycm9yICE9IFwnXCd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KPHA+VGhhbmsgeW91IHskdXNlcm5hbWV9IGZvciByZWdpc3RlcmluZyB3aXRoIHskc2l0ZW5hbWV9LiAgQW4gZW1haWwgaGFzIGJlZW4gc2VudCB0byB7JGVtYWlsfSB3aXRoIGluc3RydWN0aW9ucyBvbiBob3cgdG8gY29udGludWUgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzPC9wPgo8IS0tIFBvc3QgUmVnaXN0cmF0aW9uIDEgdGVtcGxhdGUgLS0+Cic7CgogIHZhciAkZGZsdF9yZWdpc3RyYXRpb24yX3RlbXBsYXRlID0gJwo8IS0tIFJlZ2lzdHJhdGlvbiAxIHRlbXBsYXRlIC0tPgp7JHRpdGxlfQp7aWYgJG1lc3NhZ2UgIT0gXCdcJ30KICB7aWYgJGVycm9yICE9IFwnXCd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KeyRzdGFydGZvcm19CiAgPGNlbnRlcj4KICA8dGFibGUgd2lkdGg9Ijc1JSI+CiAgPHRyPgogICAgPHRkPnskcHJvbXB0X3VzZXJuYW1lfTwvZm9udD4KICAgIDwvdGQ+CiAgICA8dGQ+eyRpbnB1dF91c2VybmFtZX08L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPnskcHJvbXB0X3Bhc3N3b3JkfTwvZm9udD4KICAgIDwvdGQ+CiAgICA8dGQ+eyRpbnB1dF9wYXNzd29yZH08L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPnskcHJvbXB0X2NvZGV9PC9mb250PgogICAgPC90ZD4KICAgIDx0ZD57JGlucHV0X2NvZGV9PC90ZD4KICA8L3RyPgogIDwvdGFibGU+CiAgPC9jZW50ZXI+Cjxici8+CiB7JGhpZGRlbn17JGhpZGRlbjJ9eyRzdWJtaXR9eyRjYW5jZWx9CnskZW5kZm9ybX0KPCEtLSBSZWdpc3RyYXRpb24gMiB0ZW1wbGF0ZSAtLT4KICc7ICAKCiAgdmFyICRkZmx0X2VtYWlsY29uZmlybV90ZW1wbGF0ZSA9ICcKPCEtLSBFbWFpbENvbmZpcm0gdGVtcGxhdGUgLS0+CjxodG1sPgo8Ym9keT4KPHA+R3JlZXRpbmdzIHskbmFtZX0gd2VsY29tZSB0byB0aGUgc2l0ZS4gIFRoaXMgZW1haWwgaXMgYmVpbmcgc2VudCBiZWNhdXNlIHNvbWVib2R5IHJlZ2lzdGVyZWQgZm9yIGFjY2VzcyB0byB7JHNpdGVuYW1lfSB1c2luZyB0aGlzIGVtYWlsIGFkZHJlc3MuIElmIHRoaXMgd2FzIHlvdSwgcGxlYXNlIGNsaWNrIG9uIHRoZSBmb2xsb3dpbmcgbGluayBhbmQgZW50ZXIgeW91ciB1c2VybmFtZSwgcGFzc3dvcmQsIGFuZCB0aGUgdW5pcXVlIGNvZGUgYmVsb3c8L3A+CiAgIDxwPkZvbGxvdyB0aGlzIGxpbms6IHskbGlua308L3A+CiAgIDxwPm9yIHRoaXMgbGluazogeyRzbWFsbGxpbmt9PC9wPgogICA8cD5Db2RlOiB7JGNvZGV9PC9wPgo8L2JvZHk+CjwvaHRtbD4KPCEtLSBFbWFpbENvbmZpcm0gdGVtcGxhdGUgLS0+Cic7CgogIHZhciAkZGZsdF9lbWFpbGNvbmZpcm1fdGV4dHRlbXBsYXRlID0gJwpHcmVldGluZ3MgeyRuYW1lfSB3ZWxjb21lIHRvIHRoZSBzaXRlLiAgVGhpcyBlbWFpbCBpcyBiZWluZyBzZW50IGJlY2F1c2Ugc29tZWJvZHkgcmVnaXN0ZXJlZCBmb3IgYWNjZXNzIHRvIHskc2l0ZW5hbWV9IHVzaW5nIHRoaXMgZW1haWwgYWRkcmVzcy4gSWYgdGhpcyB3YXMgeW91LCBwbGVhc2UgY2xpY2sgb24gdGhlIGZvbGxvd2luZyBsaW5rIGFuZCBlbnRlciB5b3VyIHVzZXJuYW1lLCBwYXNzd29yZCwgYW5kIHRoZSB1bmlxdWUgY29kZSBiZWxvdy4KCkZvbGxvdyB0aGlzIGxpbms6IHskdXJsfQpvciB0aGlzIGxpbms6IHskc21hbGx1cmx9PC9wPgpDb2RlOiB7JGNvZGV9Cic7CgogIHZhciAkZGZsdF9lbWFpbHVzZXJlZGl0ZWRfdGVtcGxhdGUgPSAnCjwhLS0gRW1haWxVc2VyRWRpdGVkIHRlbXBsYXRlIC0tPgo8aHRtbD4KPGJvZHk+CjxwPkdyZWV0aW5ncyB7JG5hbWV9IHdlbGNvbWUgdG8gdGhlIHNpdGUuICBUaGlzIGVtYWlsIGlzIGJlaW5nIHNlbnQgYmVjYXVzZSwgYWx0aG91Z2ggeW91IGhhdmUgYWxyZWFkeSByZWdpc3RlcmVkIHdpdGggeyRzaXRlbmFtZX0sIHRoZXJlIHdhcyBhbiBlcnJvciBpbiB5b3VyIGlucHV0LiAgVGhlIGFkbWluaXN0cmF0b3IgaGFzIGRvbmUgaGlzIGJlc3QgdG8gY29ycmVjdCB0aGlzIGRhdGEsIGFuZCB5b3UgYXJlIG5vdyBiZWluZyBzZW50IGFuIHVwZGF0ZWQgcmVnaXN0cmF0aW9uIGZvcm0uIFBsZWFzZSBjbGljayBvbiB0aGUgZm9sbG93aW5nIGxpbmsgYW5kIGVudGVyIHlvdXIgdXNlcm5hbWUsIHBhc3N3b3JkLCBhbmQgdGhlIHVuaXF1ZSBjb2RlIGJlbG93PC9wPgogICA8cD5Gb2xsb3cgdGhpcyBsaW5rOiB7JGxpbmt9PC9wPgogICA8cD5vciB0aGlzIGxpbms6IHskc21hbGxsaW5rfTwvcD4KICAgPHA+UGFzc3dvcmQ6IHskcGFzc3dvcmR9PC9wPgogICA8cD5Db2RlOiB7JGNvZGV9PC9wPgo8L2JvZHk+CjwvaHRtbD4KPCEtLSBFbWFpbFVzZXJFZGl0ZWQgdGVtcGxhdGUgLS0+Cic7CgogIHZhciAkZGZsdF9lbWFpbHVzZXJlZGl0ZWRfdGV4dHRlbXBsYXRlID0gJwpHcmVldGluZ3MgeyRuYW1lfSB3ZWxjb21lIHRvIHRoZSBzaXRlLiAgVGhpcyBlbWFpbCBpcyBiZWluZyBzZW50IGJlY2F1c2UsIGFsdGhvdWdoIHlvdSBoYXZlIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIHskc2l0ZW5hbWV9LCB0aGVyZSB3YXMgYW4gZXJyb3IgaW4geW91ciBpbnB1dC4gIFRoZSBhZG1pbmlzdHJhdG9yIGhhcyBkb25lIGhpcyBiZXN0IHRvIGNvcnJlY3QgdGhpcyBkYXRhLCBhbmQgeW91IGFyZSBub3cgYmVpbmcgc2VudCBhbiB1cGRhdGVkIHJlZ2lzdHJhdGlvbiBmb3JtLiBQbGVhc2UgY2xpY2sgb24gdGhlIGZvbGxvd2luZyBsaW5rIGFuZCBlbnRlciB5b3VyIHVzZXJuYW1lLCBwYXNzd29yZCwgYW5kIHRoZSB1bmlxdWUgY29kZSBiZWxvdwogICBGb2xsb3cgdGhpcyBsaW5rOiB7JHVybH0KICAgICBvciB0aGlzIGxpbms6IHskc21hbGx1cmx9PC9wPgogICBQYXNzd29yZDogeyRwYXNzd29yZH0KICAgQ29kZTogeyRjb2RlfQonOwoKICB2YXIgJGRmbHRfZmluYWxtZXNzYWdlX3RlbXBsYXRlID0gJwo8IS0tIEZpbmFsTWVzc2FnZSBUZW1wbGF0ZSAtLT4KPHA+V2VsY29tZSB7JHVzZXJuYW1lfSB0byB7JHNpdGVuYW1lfS4gIFlvdXIgcmVnaXN0cmF0aW9uIGlzIGNvbXBsZXRlLiAgUGxlYXNlIGxvZ2luIHRvIGNvbnRpbnVlPC9wPgo8IS0tIEZpbmFsTWVzc2FnZSBUZW1wbGF0ZSAtLT4KICAnOwoKICB2YXIgJGRmbHRfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZSA9ICcKPCEtLSBTZW5kQW5vdGhlckVtYWlsIFRlbXBsYXRlIC0tPgp7JHRpdGxlfQp7aWYgJG1lc3NhZ2UgIT0gXCdcJ30KICB7aWYgJGVycm9yICE9IFwnXCd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KPHA+SSBkaWRuXCd0IHJlY2VpdmUgbXkgY29uZmlybWF0aW9uIGVtYWlsLCBwbGVhc2Ugc2VuZCBhbm90aGVyIG9uZS48L3A+CjxwPk15IFVzZXJuYW1lIGlzOiB7JHN0YXJ0Zm9ybX17JGlucHV0X3VzZXJuYW1lfSZuYnNwO3skc3VibWl0fXskZW5kZm9ybX08L3A+CjwhLS0gU2VuZEFub3RoZXJFbWFpbCBUZW1wbGF0ZSAtLT4KICAnOwoKICB2YXIgJGRmbHRfcG9zdF9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlID0gJwo8IS0tIFBvc3QgU2VuZEFub3RoZXJFbWFpbCB0ZW1wbGF0ZSAtLT4KeyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9IFwnXCd9CiAge2lmICRlcnJvciAhPSBcJ1wnfQogICAgPHA+PGZvbnQgY29sb3I9InJlZCI+eyRtZXNzYWdlfTwvZm9udD48L3A+CiAge2Vsc2V9CiAgICA8cD57JG1lc3NhZ2V9PC9wPgogIHsvaWZ9CnsvaWZ9CjxwPlRoYW5rIHlvdSB7JHVzZXJuYW1lfSBmb3IgcmVnaXN0ZXJpbmcgd2l0aCB7JHNpdGVuYW1lfS4gIFdlIGFyZSBzb3JyeSB5b3UgaGFkIGRpZmZpY3VsdHkgcmVjZWl2aW5nIHlvdXIgZW1haWwuICBBIHNlY29uZCBlbWFpbCBoYXMgYmVlbiBzZW50IHRvIHskZW1haWx9IHdpdGggaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBjb250aW51ZSB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3M8L3A+CjwhLS0gUG9zdCBTZW5kQW5vdGhlckVtYWlsIHRlbXBsYXRlIC0tPgonOwoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0TmFtZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0TmFtZSgpCiAgewogICAgcmV0dXJuICdTZWxmUmVnaXN0cmF0aW9uJzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRGcmllbmRseU5hbWUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsKICB9CgoJCiAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQogIHsKICAgIHJldHVybiAiMS4wLXN2biI7CiAgfQogIAogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldFZlcnNpb24oKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldFZlcnNpb24oKQogIHsKICAgIHJldHVybiAnMS4xLjAtYmV0YTEnOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0SGVscCgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0SGVscCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7CiAgfQogIAogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEF1dGhvcigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QXV0aG9yKCkKICB7CiAgICByZXR1cm4gJ0NhbGd1eTEwMDAnOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QXV0aG9yRW1haWwoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkKICB7CiAgICByZXR1cm4gJ2NhbGd1eTEwMDBAaG90bWFpbC5jb20nOwogIH0KICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRDaGFuZ2VMb2coKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTsKICB9CiAgCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSXNQbHVnaW5Nb2R1bGUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEhhc0FkbWluKCkKICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSwgZGVwZW5kaW5nIG9uCiAgIHdoZXRoZXIgeW91ciBtb2R1bGUgYWRkcyBhbnl0aGluZyB0byB0aGUgQWRtaW4gYXJlYSBvZgogICB0aGUgc2l0ZS4gRm9yIHRoZSByZXN0IG9mIHRoZXNlIGNvbW1lbnRzLCBJJ2xsIGJlIGNhbGxpbmcKICAgdGhlIGFkbWluIHBhcnQgb2YgeW91ciBtb2R1bGUgdGhlICJBZG1pbiBQYW5lbCIgZm9yCiAgIHdhbnQgb2YgYSBiZXR0ZXIgdGVybS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBIYXNBZG1pbigpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBZG1pblNlY3Rpb24oKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpCiAgewogICAgcmV0dXJuICd1c2Vyc2dyb3Vwcyc7CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRFdmVudERlc2NyaXB0aW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRFdmVudERlc2NyaXB0aW9uKCAkZXZlbnRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2Rlc2NyaXB0aW9uXycuJGV2ZW50bmFtZSApOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RXZlbnREZXNjcmlwdGlvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0RXZlbnRIZWxwKCAkZXZlbnRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2hlbHBfJy4kZXZlbnRuYW1lICk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOwogIH0KICAKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVmlzaWJsZVRvQWRtaW5Vc2VyKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogIHsKICAgICRzdGF0dXMgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgUmVnaXN0ZXJpbmcgVXNlcnMnKQogICAgICB8fCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpCiAgICAgIHx8ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKTsKICAgIHJldHVybiAkc3RhdHVzOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RGVwZW5kZW5jaWVzKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQogIHsKICAgIHJldHVybiBhcnJheSggJ0NNU01haWxlcicgPT4gJzEuNzMuOScsCgkJICAnRnJvbnRFbmRVc2VycycgPT4gJzEuMC4wJyApOwogIH0KICAKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIC8vIHBlcm1pc3Npb25zCiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7CgogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsKICB9CgoKICBmdW5jdGlvbiBteUdldFBhZ2VOYW1lKCAkYWxpYXNvcmlkICkKICB7CiAgICAkb2JqID0gQ29udGVudE1hbmFnZXI6OkxvYWRQYWdlRnJvbUFsaWFzKCAkYWxpYXNvcmlkICk7CiAgICByZXR1cm4gJG9iai0+TmFtZSgpOwogIH0KCiAgZnVuY3Rpb24gbXlSZWRpcmVjdFRvVGFiKCAkaWQsICR0YWIsICRwYXJhbXMgPSAnJyApCiAgewogICAgJHBhcm1zID0gYXJyYXkoKTsKICAgIGlmKCBpc19hcnJheSggJHBhcmFtcyApICkKICAgICAgewoJJHBhcm1zID0gJHBhcmFtczsKICAgICAgfQogICAgJHBhcm1zWydhY3RpdmVfdGFiJ10gPSAkdGFiOwogICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCAkcGFybXMgKTsKICB9CgoKICBmdW5jdGlvbiBteVJlZGlyZWN0KCAkaWQsICRhY3Rpb24sICRyZXR1cm5pZCwgJHBhcmFtcyA9ICcnICkKICB7CiAgICAvLyB1bnNldCBhbnkgcGFzc3dvcmQgdGhpbmdzIAogICAgdW5zZXQoICRwYXJhbXNbJ2hpZGRlbl9wYXNzd29yZCddICk7CiAgICB1bnNldCggJHBhcmFtc1snaGlkZGVuX3JlcGVhdHBhc3N3b3JkJ10gKTsKICAgIHVuc2V0KCAkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddICk7CiAgICB1bnNldCggJHBhcmFtc1snaW5wdXRfcmVwZWF0cGFzc3dvcmQnXSApOwogICAgdW5zZXQoICRwYXJhbXNbJ3Bhc3N3b3JkJ10gKTsKICAgIHVuc2V0KCAkcGFyYW1zWydyZXBlYXRwYXNzd29yZCddICk7CiAgICAkdGhpcy0+UmVkaXJlY3QoICRpZCwgJGFjdGlvbiwgJHJldHVybmlkLCAkcGFyYW1zLCB0cnVlICk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgRG9BY3Rpb24oJGFjdGlvbiwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybmlkPS0xKQogIHsKICAgIHN3aXRjaCAoJGFjdGlvbikKICAgICAgewogICAgICBjYXNlICdkZWZhdWx0JzoKCXsgCgkgICR0aGlzLT5fRGlzcGxheU1vZHVsZU91dHB1dCggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ2RlZmF1bHRhZG1pbic6Cgl7CgkgICR0aGlzLT5fRGlzcGxheUFkbWluUGFuZWwoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICdkZWxldGV0ZW1wdXNlcic6Cgl7CgkgIGlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgUmVnaXN0ZXJpbmcgVXNlcnMnICkgKQoJICAgIHsKCSAgICAgICR0aGlzLT5fRG9EZWxldGVVc2VyKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICdkb19kZWxldGV1c2Vyc2J1bGsnOgoJewoJICBpZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTWFuYWdlIFJlZ2lzdGVyaW5nIFVzZXJzJyApICkKCSAgICB7CgkgICAgICAkdGhpcy0+X0RvRGVsZXRlQnVsa1VzZXJzKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICdkb19lZGl0dXNlcic6Cgl7CgkgIGlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgUmVnaXN0ZXJpbmcgVXNlcnMnICkgKQoJICAgIHsKCSAgICAgICR0aGlzLT5fRG9FZGl0VXNlciggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICB9CgkgIGVsc2UKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KICAgICAgY2FzZSAnZWRpdHRlbXB1c2VyJzoKCXsKCSAgaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBSZWdpc3RlcmluZyBVc2VycycgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5QWRtaW5FZGl0VXNlclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCSAgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ3JlZ3VzZXInOgoJewoJICAkdGhpcy0+X1JlZ2lzdGVyVXNlclN0ZXAxKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICBicmVhazsKCX0KICAgICAgY2FzZSAnc2VuZGFub3RoZXJlbWFpbCc6Cgl7CgkgICR0aGlzLT5fU2VuZEFub3RoZXJSZWdFbWFpbCgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICBicmVhazsKCX0KICAgICAgY2FzZSAnc2V0cHJlZnMnOgoJewoJICBpZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJyApICkKCSAgICB7CgkgICAgICAkdGhpcy0+X1NldEFkbWluUHJlZmVyZW5jZXMoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCSAgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ3NldF9yZWcxdGVtcGxhdGUnOgoJewoJICBpZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggJ01vZGlmeSBUZW1wbGF0ZXMnICkgKQoJICAgIHsKCSAgICAgICR0aGlzLT5fU2V0QWRtaW5SZWcxVGVtcGxhdGUoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCSAgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ3NldF9yZWcydGVtcGxhdGUnOgoJewoJICBpZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggJ01vZGlmeSBUZW1wbGF0ZXMnICkgKQoJICAgIHsKCSAgICAgICR0aGlzLT5fU2V0QWRtaW5SZWcyVGVtcGxhdGUoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCSAgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ3NldF9lbWFpbGNvbmZpcm1fdGVtcGxhdGUnOgoJewoJICBpZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggJ01vZGlmeSBUZW1wbGF0ZXMnICkgKQoJICAgIHsKCSAgICAgICR0aGlzLT5fU2V0QWRtaW5FbWFpbENvbmZpcm1UZW1wbGF0ZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICB9CgkgIGVsc2UKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KICAgICAgY2FzZSAnc2V0X2VtYWlsdXNlcmVkaXRlZF90ZW1wbGF0ZSc6Cgl7CgkgIGlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnTW9kaWZ5IFRlbXBsYXRlcycgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9TZXRBZG1pbkVtYWlsVXNlckVkaXRlZFRlbXBsYXRlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICdzZXRfZmluYWxtZXNzYWdlX3RlbXBsYXRlJzoKCXsKCSAgaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdNb2RpZnkgVGVtcGxhdGVzJyApICkKCSAgICB7CgkgICAgICAkdGhpcy0+X1NldEFkbWluRmluYWxNZXNzYWdlVGVtcGxhdGUoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCSAgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ3NldF9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJzoKCXsKCSAgaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdNb2RpZnkgVGVtcGxhdGVzJyApICkKCSAgICB7CgkgICAgICAkdGhpcy0+X1NldEFkbWluU2VuZEFub3RoZXJFbWFpbFRlbXBsYXRlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICd2ZXJpZnl1c2VyJzoKCXsKCSAgJHRoaXMtPl9WZXJpZnlVc2VyKCAkaWQsICRwYXJhbXMsICRldHVybmlkICk7CgkgIGJyZWFrOwoJfQogICAgICB9CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX0NyZWF0ZUZyb250ZW5kVXNlcigkaWQsICRwYXJhbXMsICRyZXR1cm5faWQgKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9DcmVhdGVGcm9udGVuZFVzZXIoICR0bXBpZCwgJGdyb3VwX2lkLCAkdXNlcm5hbWUsICRwYXNzd29yZCApCiAgewogICAgJGZldXNlcnMgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgIGlmKCAhJGZldXNlcnMgKQogICAgICB7CglyZXR1cm4gJHRoaXMtPkxhbmcoJ2Vycm9yX25vZmV1c2Vyc21vZHVsZScpOwogICAgICB9CgogICAgLy8gdG9kbywgZmlndXJlIG91dCB3aGVuIHVzZXJzIHNob3VsZCBleHBpcmUKICAgICRleHBpcmVzID0gc3RydG90aW1lKCcrNSB5ZWFycycpOwogICAgJHJlc3VsdCA9ICRmZXVzZXJzLT5BZGRVc2VyKCAkdXNlcm5hbWUsICRwYXNzd29yZCwgJGV4cGlyZXMgKTsKICAgIGlmKCAkcmVzdWx0WzBdID09IGZhbHNlICkKICAgICAgewoJcmV0dXJuICRyZXN1bHRbMV07CiAgICAgIH0KCiAgICAkdWlkID0gJHJlc3VsdFsxXTsKICAgICRnaWQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9ncm91cCcsIC0xKTsKICAgIGlmKCAkZ2lkICE9IC0xICkKICAgICAgewoJLy8gYSBkZWZhdWx0IGdyb3VwIGlzIHJlcXVpcmVkLAoJLy8gc28gYWRkIGhpbSB0byB0aGF0IGdyb3VwCglpZiggISRmZXVzZXJzLT5Bc3NpZ25Vc2VyVG9Hcm91cCggJHVpZCwgJGdpZCApICkKCSAgewoJICAgIHJldHVybiAkdGhpcy0+TGFuZygnd2FybmluZ19jb3VsZG5vdGFkZGdyb3VwJyk7CgkgIH0KICAgICAgfQoKICAgIC8vIGFuZCBhZGQgdGhlIHVzZXIgdG8gd2hhdGV2ZXIgZ3JvdXAgc3BlY2lmaWVkIGluIHRoZSBncm91cHMgcGFyYW1ldGVyCiAgICBpZiggJGdyb3VwX2lkICkKICAgICAgewoJaWYoICEkZmV1c2Vycy0+QXNzaWduVXNlclRvR3JvdXAoICR1aWQsICRncm91cF9pZCApICkKCSAgewoJICAgIHJldHVybiAkdGhpcy0+TGFuZygnd2FybmluZ19jb3VsZG5vdGFkZGdyb3VwJyk7CgkgIH0KICAgICAgfSAgICAKCiAgICAvLyBoZSdzIGluLi4uLiBoZSdzIGluLi4uIG5vdyBqdXN0IGFkZCBoaXMgcHJvcGVydGllcwogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ19wcm9wZXJ0aWVzCiAgICAgICAgICBXSEVSRSB1c2VyID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHRtcGlkICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuICR0aGlzLT5MYW5nKCdlcnJvcl9kYmVycm9yJyk7CiAgICAgIH0KICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgewoJJGZldXNlcnMtPlNldFVzZXJQcm9wZXJ0eUZ1bGwoICRyb3dbJ3RpdGxlJ10sICRyb3dbJ2RhdGEnXSwgJHVpZCApOwogICAgICB9CgogICAgLy8gbm93IGRpc3BsYXkgYSB3YXJtIGZ1enp5IG1lc3NhZ2UKICAgIGdsb2JhbCAkZ0NtczsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndXNlcm5hbWUnLCAkdXNlcm5hbWUgKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc2l0ZW5hbWUnLCAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnc2VsZnJlZ19maW5hbG1lc3NhZ2VfdGVtcGxhdGUnKTsKCiAgICAvLyBzZW5kIGFuIGV2ZW50CiAgICAkdGhpcy0+U2VuZEV2ZW50KCdvblVzZXJSZWdpc3RlcmVkJywKCQkgICAgIGFycmF5KCd1c2VybmFtZSc9PiR1c2VybmFtZSkpOwoKICAgIC8vIGFuZCBub3RpZnkgdGhlIGFkbWluaXN0cmF0b3IKICAgIC8vIGlmIHRoZSBhZG1pbiB3YW50cyBub3RpZmljYXRpb25zLgogICAgLy8gb2ZmIHdlIGdvLgogICAgaWYoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdub3RpZnlfb25fcmVnaXN0cmF0aW9uJykgKQogICAgICB7CgkKCSRjbXNtYWlsZXIgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0NNU01haWxlcicpOwoJaWYoICEkY21zbWFpbGVyICkKCSAgewoJICAgIHJldHVybiAkdGhpcy0+TGFuZygnZXJyb3Jfbm9jbXNtYWlsZXJtb2R1bGUnKTsKCSAgfQoJCgkkY21zbWFpbGVyLT5BZGRBZGRyZXNzKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZW5kX2VtYWlsc190bycpKTsKCSRjbXNtYWlsZXItPlNldFN1YmplY3QoJ0EgbmV3IHVzZXIgaGFzIHJlZ2lzdGVyZWQgb24gJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddKTsKCSRtc2cgPSAnQSBuZXcgdXNlciAoJy4kdXNlcm5hbWUuJykgaGFzIGNvbXBsZXRlZCByZWdpc3RyYXRpb24gdG8geW91ciBzaXRlLiB5b3Ugc2hvdWxkIGNoZWNrIHRoaXMgdXNlciBvdXQgYW5kIHZhbGlkYXRlIHRoYXQgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGlzIGFzIGNvbXBsZXRlIGFuZCB2YWxpZCBhcyBwb3NzaWJsZS4nOwoJJGNtc21haWxlci0+U2V0Qm9keSgkbXNnKTsgIAoJJGNtc21haWxlci0+SXNIVE1MKGZhbHNlKTsgLy8gd2UncmUgbm90IHNlbmRpbmcgYW4gaHRtbCBtYWlsCgkkY21zbWFpbGVyLT5TZW5kKCk7CiAgICAgIH0KCiAgICAkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgCgkJICAkdGhpcy0+TGFuZygnaW5mb191c2VydmVyaWZpZWQnKS4iOiAiLiR1c2VybmFtZSk7CiAgICByZXR1cm47CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfRGlzcGxheUFkbWluUGFuZWwoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkICkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfRGlzcGxheUFkbWluUGFuZWwoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAkYWN0aXZlX3RhYiA9IC0xOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2FjdGl2ZV90YWInXSkpCiAgICAgIHsKCSRhY3RpdmVfdGFiID0gJHBhcmFtc1snYWN0aXZlX3RhYiddOwogICAgICB9CgogICAgLy8gdGhlIHRhYnMKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpOwoKICAgIGlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgUmVnaXN0ZXJpbmcgVXNlcnMnICkgKQogICAgICB7CgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2FkbWludXNlcnMnLCR0aGlzLT5MYW5nKCd1c2VycycpLAoJCQkJICgkYWN0aXZlX3RhYiA9PSAnYWRtaW51c2VycycpKTsKICAgICAgfQoJCQkgICAgICAgCiAgICBpZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycgKSApCiAgICAgIHsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigncmVnMXRlbXBsYXRlJywgJHRoaXMtPkxhbmcoJ3JlZ2lzdHJhdGlvbjFfdGVtcGxhdGUnKSwgCgkJCQkgKCRhY3RpdmVfdGFiID09ICdyZWcxdGVtcGxhdGUnKSk7CgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3JlZzJ0ZW1wbGF0ZScsICR0aGlzLT5MYW5nKCdyZWdpc3RyYXRpb24yX3RlbXBsYXRlJyksIAoJCQkJICgkYWN0aXZlX3RhYiA9PSAncmVnMnRlbXBsYXRlJykpOwoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdlbWFpbGNvbmZpcm1fdGVtcGxhdGUnLCAkdGhpcy0+TGFuZygnZW1haWxjb25maXJtX3RlbXBsYXRlJyksIAoJCQkJICgkYWN0aXZlX3RhYiA9PSAnZW1haWxjb25maXJtX3RlbXBsYXRlJykpOwoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdlbWFpbHVzZXJlZGl0ZWRfdGVtcGxhdGUnLCAkdGhpcy0+TGFuZygnZW1haWx1c2VyZWRpdGVkX3RlbXBsYXRlJyksIAoJCQkJICgkYWN0aXZlX3RhYiA9PSAnZW1haWx1c2VyZWRpdGVkX3RlbXBsYXRlJykpOwoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdmaW5hbG1lc3NhZ2VfdGVtcGxhdGUnLCAKCQkJCSAkdGhpcy0+TGFuZygnZmluYWxtZXNzYWdlX3RlbXBsYXRlJyksCgkJCQkgKCRhY3RpdmVfdGFiID09ICdmaW5hbG1lc3NhZ2VfdGVtcGxhdGUnKSk7CiAgICAgICAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdzZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKCdzZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkYWN0aXZlX3RhYiA9PSAnc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZScpKTsKICAgICAgfQoKICAgIGlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkKICAgICAgewoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdwcmVmZXJlbmNlcycsICR0aGlzLT5MYW5nKCdwcmVmZXJlbmNlcycpLAoJCQkJICgkYWN0aXZlX3RhYiA9PSAncHJlZmVyZW5jZXMnKSk7CiAgICAgIH0KICAgIGVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKCiAgICAvLyB0aGUgY29udGVudCBvZiB0aGUgdGFicwogICAgZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgogICAgaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBSZWdpc3RlcmluZyBVc2VycycgKSApCiAgICAgIHsKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdhZG1pbnVzZXJzJyk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pblVzZXJzVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgICAgIH0KCiAgICBpZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycgKSApCiAgICAgIHsKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdyZWcxdGVtcGxhdGUnKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluUmVnMVRlbXBsYXRlVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgkKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdyZWcydGVtcGxhdGUnKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluUmVnMlRlbXBsYXRlVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgkKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdlbWFpbGNvbmZpcm1fdGVtcGxhdGUnKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluRW1haWxDb25maXJtYXRpb25UZW1wbGF0ZVRhYiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwoJCgllY2hvICR0aGlzLT5TdGFydFRhYignZW1haWx1c2VyZWRpdGVkX3RlbXBsYXRlJyk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pbkVtYWlsVXNlckVkaXRlZFRlbXBsYXRlVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgkKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdmaW5hbG1lc3NhZ2VfdGVtcGxhdGUnKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluRmluYWxNZXNzYWdlVGVtcGxhdGVUYWIoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKCgllY2hvICR0aGlzLT5TdGFydFRhYignc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZScpOwoJJHRoaXMtPl9EaXNwbGF5QWRtaW5TZW5kQW5vdGhlckVtYWlsVGVtcGxhdGVUYWIoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKICAgICAgfQoKICAgIGlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkKICAgICAgewoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3ByZWZlcmVuY2VzJyk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pblByZWZlcmVuY2VzVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgICAgIH0KCiAgICBlY2hvICR0aGlzLT5FbmRUYWJDb250ZW50KCk7CiAgfQoKICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfRGlzcGxheUFkbWluUHJlZmVyZW5jZXNUYWIoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkICkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfRGlzcGxheUFkbWluUHJlZmVyZW5jZXNUYWIoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCSAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCggJGlkLCAnc2V0cHJlZnMnLCAkcmV0dXJuaWQgKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLAoJCQkgICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X25vdGlmeScsCgkJCSAgJHRoaXMtPkxhbmcoJ25vdGlmeV9vbl9yZWdpc3RyYXRpb24nKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X25vdGlmeScsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goICRpZCwgCgkJCQkJCSAgICAgICdpbnB1dF9ub3RpZnknLCAxLAoJCQkJCQkgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbm90aWZ5X29uX3JlZ2lzdHJhdGlvbicpKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfZW1haWxfY29uZmlybWF0aW9uJywKCQkJICAkdGhpcy0+TGFuZygncmVxdWlyZV9lbWFpbF9jb25maXJtYXRpb24nKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2VtYWlsX2NvbmZpcm1hdGlvbicsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goICRpZCwgCgkJCQkJCSAgICAgICdpbnB1dF9lbWFpbF9jb25maXJtYXRpb24nLCAxLAoJCQkJCQkgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZV9lbWFpbF9jb25maXJtYXRpb24nKSkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2NvbmZpcm1tYWlsX3RvJywKCQkJICAkdGhpcy0+TGFuZygnc2VuZF9lbWFpbHNfdG8nKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2NvbmZpcm1tYWlsX3RvJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsIAoJCQkJCQkgICdpbnB1dF9jb25maXJtbWFpbF90bycsIAoJCQkJCQkgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZW5kX2VtYWlsc190bycpLAoJCQkJCQkgIDMwLCA2MCkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXQnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCdzdWJtaXQnKSwgJycsICcnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCdjb25maXJtX3N1Ym1pdHByZWZzJykpKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9mb3JjZV9lbWFpbF90d2ljZScsCgkJCSAgJHRoaXMtPkxhbmcoJ2ZvcmNlX2VtYWlsX3R3aWNlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9mb3JjZV9lbWFpbF90d2ljZScsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goICRpZCwgCgkJCQkJCSAgICAgICdpbnB1dF9mb3JjZV9lbWFpbF90d2ljZScsIDEsCgkJCQkJCSAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZWxmcmVnX2ZvcmNlX2VtYWlsX3R3aWNlJykpKTsKICAgIAogICAgJG51bSA9ICR0aGlzLT5Db3VudFRlbXBVc2VycygpOwogICAgaWYoICRudW0gKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9udW1yZXNldHJlY29yZHMnLAoJCQkgICAgICAkdGhpcy0+TGFuZygncHJvbXB0X251bXJlc2V0cmVjb3JkJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkYXRhX251bXJlc2V0cmVjb3JkcycsICRudW0pOyAvL3RvZG8KCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfcmVtb3ZlYWxsJywKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnaW5wdXRfcmVtb3ZlYWxsJywKCQkJCQkJICAgICAgICR0aGlzLT5MYW5nKCdyZW1vdmVhbGwnKSwKCQkJCQkJICAgICAgICdvbmNsaWNrPSJyZXR1cm4gY29uZmlybShcJycuJHRoaXMtPkxhbmcoJ2FyZXlvdXN1cmUnKS4nXCcpIicpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfcmVtb3ZlMXdlZWsnLAoJCQkgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdpbnB1dF9yZW1vdmUxd2VlaycsCgkJCQkJCSAgICAgICAkdGhpcy0+TGFuZygncmVtb3ZlMXdlZWsnKSwKCQkJCQkJICAgICAgICdvbmNsaWNrPSJyZXR1cm4gY29uZmlybShcJycuJHRoaXMtPkxhbmcoJ2FyZXlvdXN1cmUnKS4nXCcpIicpKTsKICAgICAgCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3JlbW92ZTFtb250aCcsCgkJCSAgICAgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2lucHV0X3JlbW92ZTFtb250aCcsCgkJCQkJCSAgICAgICAkdGhpcy0+TGFuZygncmVtb3ZlMW1vbnRoJyksCgkJCQkJCSAgICAgICAnb25jbGljaz0icmV0dXJuIGNvbmZpcm0oXCcnLiR0aGlzLT5MYW5nKCdhcmV5b3VzdXJlJykuJ1wnKSInKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3JlbW92ZTFkYXknLAoJCQkgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdpbnB1dF9yZW1vdmUxZGF5JywKCQkJCQkJICAgICAgICR0aGlzLT5MYW5nKCdyZW1vdmUxZGF5JyksCgkJCQkJCSAgICAgICAnb25jbGljaz0icmV0dXJuIGNvbmZpcm0oXCcnLiR0aGlzLT5MYW5nKCdhcmV5b3VzdXJlJykuJ1wnKSInKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2xpc3QxZGF5JywKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnaW5wdXRfbGlzdDFkYXknLAoJCQkJCQkgICAgICAgJHRoaXMtPkxhbmcoJ2xpc3QxZGF5JykpKTsKICAgICAgfQoKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgncHJlZnMudHBsJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgRGlzcGxheUFkbWluUmVnMVRlbXBsYXRlVGFiKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfRGlzcGxheUFkbWluUmVnMVRlbXBsYXRlVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsICdzZXRfcmVnMXRlbXBsYXRlJyk7CiAgICBlY2hvICc8cD5SZWdpc3RyYXRpb24gVGVtcGxhdGU8L3A+JzsKICAgIGVjaG8gJzxici8+PHA+Jy4kdGhpcy0+Q3JlYXRlVGV4dEFyZWEgKGZhbHNlLCAkaWQsCgkJCQkJICAgJHRoaXMtPkdldFRlbXBsYXRlICgnc2VsZnJlZ19yZWcxdGVtcGxhdGUnKSwKCQkJCQkgICAncmVnMV90ZW1wbGF0ZWNvbnRlbnQnLCAnJykuJzwvcD4nOwogICAgZWNobyAnPHA+UG9zdCBSZWdpc3RyYXRpb24gVGVtcGxhdGU8L3A+JzsKICAgIGVjaG8gJzxici8+PHA+Jy4kdGhpcy0+Q3JlYXRlVGV4dEFyZWEgKGZhbHNlLCAkaWQsCgkJCQkJICAgJHRoaXMtPkdldFRlbXBsYXRlICgnc2VsZnJlZ19wb3N0cmVnMV90ZW1wbGF0ZScpLAoJCQkJCSAgICdwb3N0cmVnMV90ZW1wbGF0ZWNvbnRlbnQnLCAnJykuJzwvcD4nOwogICAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdGJ1dHRvbicsCgkJCQkgICAkdGhpcy0+TGFuZyAoJ3N1Ym1pdCcpKTsKICAgIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdkZWZhdWx0YnV0dG9uJywKCQkJCSAgICR0aGlzLT5MYW5nICgnZGVmYXVsdCcpKTsKICAgIGVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQgKCk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgRGlzcGxheUFkbWluUmVnMlRlbXBsYXRlVGFiKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfRGlzcGxheUFkbWluUmVnMlRlbXBsYXRlVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsICdzZXRfcmVnMnRlbXBsYXRlJyk7CiAgICBlY2hvICc8YnIvPjxwPicuJHRoaXMtPkNyZWF0ZVRleHRBcmVhIChmYWxzZSwgJGlkLAoJCQkJCSAgICR0aGlzLT5HZXRUZW1wbGF0ZSAoJ3NlbGZyZWdfcmVnMnRlbXBsYXRlJyksCgkJCQkJICAgJ3RlbXBsYXRlY29udGVudCcsICcnKS4nPC9wPic7CiAgICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0YnV0dG9uJywKCQkJCSAgICR0aGlzLT5MYW5nICgnc3VibWl0JykpOwogICAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2RlZmF1bHRidXR0b24nLAoJCQkJICAgJHRoaXMtPkxhbmcgKCdkZWZhdWx0JykpOwogICAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCAoKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBEaXNwbGF5QWRtaW5Vc2Vyc1RhYigkaWQsICRwYXJhbXMsICRyZXR1cm5faWQpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pblVzZXJzVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgZ2xvYmFsICRnQ21zOwogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAvLyBkaXNwbGF5IGEgdGFibGUgd2l0aCB1c2VyaWQsIGdyb3VwX2lkIChuYW1lPyksIHVzZXJuYW1lLCBjcmVhdGVkYXRlLCA8ZW1haWwgYWRkcmVzcz4KICAgIC8vIGFuZCBhbGxvdyB0aGUgYWRtaW4gdG8gZWRpdCwgZGVsZXRlLCBhbmQgb3Igb3B0aW9uYWxseSBzZW5kIHRoYXQgdXNlciBhIG1lc3NhZ2UKICAgIC8vIHNob3VsZCBhbHNvIGhhdmUgYSBjaGVja2JveCBzbyB0aGF0IHRoZSBhZG1pbiBjYW4gZGVsZXRlIGEgYnVuY2ggbyB1c2VycyBhdCB0aGUgc2FtZSB0aW1lCiAgICAvLyBhbmQgYSBzZWxlY3QgYWxsIHdvdWxkIGJlIGNvb2wuCgogICAgLy8gZ2V0IGEgbGlzdCBvZiBhbGwgb2YgdGhlIGdydXBzCiAgICAkZmV1c2VycyA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwogICAgaWYoICEkZmV1c2VycyApCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgJHRoaXMtPkxhbmcoJ2Vycm9yX25vZmV1c2Vyc21vZHVsZScpKTsKCXJldHVybjsKICAgICAgfQogICAgJGdycGxpc3QgPSBhcnJheSgpOwogICAgewogICAgICAkdF9ncnBsaXN0ID0gJGZldXNlcnMtPkdldEdyb3VwTGlzdEZ1bGwoKTsKICAgICAgaWYoICFpc19hcnJheSggJHRfZ3JwbGlzdCApIHx8IGNvdW50KCR0X2dycGxpc3QpID09IDAgKQoJewoJICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICAgJHRoaXMtPkxhbmcoJ2Vycm9yX25vZ3JvdXBzJykpOwoJICByZXR1cm47Cgl9CiAgICAgIC8vIGZvciBvdXIgcHVycG9zZXMgaGVyZSwgd2UnbGwgcmUtb3JnIHRfZ3JvdXBsaXN0IHRvIGJlIGtleWVkIGJ5IGlkCiAgICAgIGZvcmVhY2goICR0X2dycGxpc3QgYXMgJGdycCApCgl7CgkgICRncnBsaXN0WyRncnBbJ2lkJ11dID0gJGdycDsKCX0KICAgIH0KCiAgICAvLyBhbiBhcnJheSBmb3IgdGhlIGdyb3VwIHByb3BlcnR5IHJlbGF0aW9ucyAod2UncmUgZ29ubmEgY2FjaGUgZW0pCiAgICAkcmVsYXRpb25zID0gYXJyYXkoKTsKCiAgICAvLyBhbiBhcnJheSBmb3IgdGhlIGVtYWlsIGZpZWxkIG5hbWVzLCBieSBncm91cCBpZCAod2UncmUgZ29ubmEgY2FjaGUgZW0gdG9vKQogICAgJGVtYWlsZmxkcyA9IGFycmF5KCk7CgogICAgLy8gZ2V0IHRoZSBwcm9wZXJ0eSBkZWZpbml0aW9ucwogICAgJHByb3BzID0gJGZldXNlcnMtPkdldFByb3BlcnR5RGVmbnMoKTsKICAgIGlmKCAkcHJvcHMgPT0gZmFsc2UgKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICR0aGlzLT5MYW5nKCdlcnJvcl9ub3Byb3BkZWZucycpKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIHNvbWUgamF2YXNjcmlwdAogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdqYXZhc2NyaXB0JywKJzxTQ1JJUFQgTEFOR1VBR0U9IkphdmFTY3JpcHQiPgpmdW5jdGlvbiBjaGVja0FsbChmbW9iaixzdGF0ZSkgewogIGZvciAodmFyIGk9MDtpPGZtb2JqLmVsZW1lbnRzLmxlbmd0aDtpKyspIHsKICAgIHZhciBlID0gZm1vYmouZWxlbWVudHNbaV07CiAgICBpZiAoIChlLnR5cGU9PSJjaGVja2JveCIpICYmICghZS5kaXNhYmxlZCkgKSB7CiAgICAgIGUuY2hlY2tlZCA9IHN0YXRlOwogICAgfQogIH0KfSA8L1NDUklQVD4nKTsKCiAgICAvLyBzb21lIGxhYmVscwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdkb19kZWxldGV1c2Vyc2J1bGsnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnZGVsZXRlJywkdGhpcy0+TGFuZygnZGVsZXRlc2VsdXNlcnMnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndXNlcmlkdGV4dCcsJHRoaXMtPkxhbmcoJ2hkcl91c2VyaWQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3VzZXJuYW1ldGV4dCcsJHRoaXMtPkxhbmcoJ2hkcl91c2VybmFtZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZ3JwbmFtZXRleHQnLCR0aGlzLT5MYW5nKCdoZHJfZ3JwbmFtZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY3JlYXRlZHRleHQnLCR0aGlzLT5MYW5nKCdoZHJfY3JlYXRlZCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW1haWx0ZXh0JywkdGhpcy0+TGFuZygnaGRyX2VtYWlsJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkZWxldGV0ZXh0JywkdGhpcy0+TGFuZygnc2VsZWN0JykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjaGVja2FsbGJveCcsCgkJCSAgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwKCQkJCQkgICAgJHRoaXMtPkxhbmcoJ2NoZWNrX2FsbCcpLCBhcnJheSgpLCAnJywgZmFsc2UsIGZhbHNlLAoJCQkJCSAgICAnb25DbGljaygpPSJjaGVja0FsbChkb2N1bWVudC5mb3Jtc1swXSx0cnVlKTtyZXR1cm4gZmFsc2UiJykuCgkJCSAgIiZuYnNwOyZuYnNwOyIuCgkJCSAgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwKCQkJCQkgICAgJHRoaXMtPkxhbmcoJ3VuY2hlY2tfYWxsJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsCgkJCQkJICAgICdvbkNsaWNrKCk9ImNoZWNrQWxsKGRvY3VtZW50LmZvcm1zWzBdLGZhbHNlKTtyZXR1cm4gZmFsc2UiJykpOwogICAgCiAgICAvLyBzZWxlY3QgYWxsIHRoZSB1c2VycwogICAgJHJvd2FycmF5ID0gYXJyYXkoKTsKICAgIC8vIHRvZG8sIGFkZCBzb21lIHJlYWwgZmlsdGVyaW5nIGhlcmUKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3VzZXJzIExJTUlUIDI1MCI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxICk7CiAgICBpZiggJGRicmVzdWx0ICYmICgkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwKSApCiAgICAgIHsKCS8vIHdlIGhhdmUgcm93cwoJJHJvd2NsYXNzID0gJ3JvdzEnOwoJd2hpbGUoICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKQoJICB7CgkgICAgJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwoJICAgICRvbmVyb3ctPnVzZXJpZCA9ICRyb3dbJ2lkJ107CgkgICAgJG9uZXJvdy0+dXNlcm5hbWUgPSAkcm93Wyd1c2VybmFtZSddOwoJICAgICRvbmVyb3ctPmdycG5hbWUgPSAkZ3JwbGlzdFskcm93Wydncm91cF9pZCddXVsnZ3JvdXBuYW1lJ107ICAvLyB1Z2x5IGVoCgkgICAgJG9uZXJvdy0+Y3JlYXRlZCA9ICRyb3dbJ2NyZWF0ZWRhdGUnXTsKCSAgICAkb25lcm93LT5yb3djbGFzcyA9ICRyb3djbGFzczsKCSAgICAvLyB0b2RvIGVtYWlsLCBlZGl0bGluaywgbWFya2RlbGV0ZWJveAoKCSAgICAvLyBub3cgd2UgaGF2ZSBhIGdyb3VwIGlkLi4uIGhhdmUgdG8gZ2V0IGEgbGlzdCBvZiB0aGUgZ3JvdXBzIHByb3BlcnRpZXMKCSAgICBpZiggIWlzc2V0KCAkcmVsYXRpb25zWyAkcm93Wydncm91cF9pZCddIF0gKSApCgkgICAgICB7CgkJLy8gbm90IGluIHRoZSBjYWNoZSwgc28gZ2V0IHRoZW0KCQkkdF9yZWxhdGlvbnMgPSAkZmV1c2Vycy0+R2V0R3JvdXBQcm9wZXJ0eVJlbGF0aW9ucyggJHJvd1snZ3JvdXBfaWQnXSApOwoJCWlmKCAkdF9yZWxhdGlvbnNbMF0gPT0gZmFsc2UgKQoJCSAgewoJCSAgICAvLyB0aGlzIGlzIHVnbHkgZm9yIHRoZSB1c2VyIHRvIHNlZQoJCSAgICAvLyBidXQgYXQgbGVhc3QgdGhlIGFkbWluIHdpbGwgYmUgYWJsZSB0byBmaWd1cmUgaXQgb3V0CgkJICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0X3JlbGF0aW9uc1sxXSApOwoJCSAgICByZXR1cm47CgkJICB9CgoJCS8vIGFuZCBjYWNoZSB0aGVtCgkJJHJlbGF0aW9uc1sgJHJvd1snZ3JvdXBfaWQnXSBdID0gJHRfcmVsYXRpb25zOwoJICAgICAgfQoKCSAgICAvLyBub3csIGdvIHRocm91Z2ggYWxsIG9mIHRoZSByZWxhdGlvbnMsIHhyZWYgd2l0aCB0aGUgcHJvcGVydGllcyBmaWVsZAoJICAgIC8vIGFuZCB0cnkgdG8gZmluZCBvbmUgdGhhdCdzIGFuIGVtYWlsIGFkZHJlc3MgZm9yIHRoaXMgZ3JvdXAKCSAgICAvLyB3ZSdsbCBjYWNoZSB0aGF0IHRvbwoJICAgIGlmKCAhaXNzZXQoICRlbWFpbGZsZHNbICRyb3dbJ2dyb3VwX2lkJ10gXSApICkKCSAgICAgIHsKCQkkZm91bmQgPSBmYWxzZTsKCQkvLyBub3QgaW4gdGhlIGNhY2hlLCBzbyB3ZSdsbCBmaW5kIG9uZQoJCWZvcmVhY2goICRyZWxhdGlvbnNbICRyb3dbJ2dyb3VwX2lkJ10gXSBhcyAkcmVsbiApCgkJICB7CgkJICAgIGZvcmVhY2goICRwcm9wcyBhcyAkb25lcHJvcCApCgkJICAgICAgewoJCQlpZiggJHJlbG5bJ25hbWUnXSA9PSAkb25lcHJvcFsnbmFtZSddICYmCgkJCSAgICAkb25lcHJvcFsndHlwZSddID09IDIgKSAvLyBlbWFpbCAKCQkJICB7CgkJCSAgICAvLyB3b29ob28sIHdlIGZvdW5kIGFuIGVtYWlsIGZpZWxkIGluIHRoZSBwcm9wZXJ0eSByZWxhdGlvbnMgZm9yIHRoaXMKCQkJICAgIC8vIGdyb3VwCgkJCSAgICAkZW1haWxmbGRzWyRyb3dbJ2dyb3VwX2lkJ11dID0gJHJlbG5bJ25hbWUnXTsKCQkJICAgICRmb3VuZCA9IHRydWU7CgkJCSAgICBicmVhazsKCQkJICB9CgkJICAgICAgfQoJCSAgfQoKCQlpZiggISRmb3VuZCApCgkJICB7CgkJICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkJICAgICAkdGhpcy0+TGFuZygnZXJyb3Jfbm9lbWFpbGFkZHJlc3MnKSk7CgkJICAgIHJldHVybjsKCQkgIH0KCSAgICAgIH0KCSAgICAKCSAgICAvLyBub3csIGdldCB0aGUgZW1haWwgYWRkcmVzcyBmb3IgdGhpcyB1c2VyCgkgICAgJG9uZXJvdy0+ZW1haWwgPSAkdGhpcy0+R2V0VGVtcFVzZXJQcm9wZXJ0eSgkcm93WydpZCddLCRlbWFpbGZsZHNbJHJvd1snZ3JvdXBfaWQnXV0sCgkJCQkJCQkkdGhpcy0+TGFuZygndW5rbm93bicpKTsKCSAgICAkb25lcm93LT5lZGl0bGluayA9CgkgICAgICAkdGhpcy0+Q3JlYXRlTGluayAoJGlkLCAnZWRpdHRlbXB1c2VyJywgJHJldHVybmlkLAoJCQkJICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlICgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywKCQkJCQkJCQkJICAgICAgICR0aGlzLT5MYW5nICgnZWRpdCcpLCAnJywgJycsICdzeXN0ZW1pY29uJyksCgkJCQkgYXJyYXkgKCd1c2VyX2lkJyA9PiAkcm93WydpZCddKSk7CgkgICAgJG9uZXJvdy0+ZGVsZXRlbGluayA9CgkgICAgICAkdGhpcy0+Q3JlYXRlTGluayAoJGlkLCAnZGVsZXRldGVtcHVzZXInLCAkcmV0dXJuaWQsCgkJCQkgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UgKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsCgkJCQkJCQkJCSAgICAgICAkdGhpcy0+TGFuZyAoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksCgkJCQkgYXJyYXkgKCd1c2VyX2lkJyA9PiAkcm93WydpZCddKSwKCQkJCSAkdGhpcy0+TGFuZyAoJ2FyZXlvdXN1cmVfZGVsZXRldXNlcicpKTsKCSAgICAkb25lcm93LT5tYXJrZGVsZXRlYm94ID0gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCdtYXJrZGVsZXRlXycuJHJvd1snaWQnXSwkcm93WydpZCddKTsKCSAgICAKCSAgICAkcm93YXJyYXlbXSA9ICRvbmVyb3c7CgkgICAgKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3MgPSAicm93MiIgOiAkcm93Y2xhc3MgPSAicm93MSIpOwoJICB9CiAgICAgIH0KICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbXMnLCAkcm93YXJyYXkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLGNvdW50KCRyb3dhcnJheSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtc2ZvdW5kJywkdGhpcy0+TGFuZygndXNlcnNmb3VuZCcpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgndXNlcmxpc3QudHBsJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX0Rpc3BsYXlBZG1pbkVkaXRVc2VyUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9EaXNwbGF5QWRtaW5FZGl0VXNlclBhZ2UoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoICFpc3NldCggJHBhcmFtc1sndXNlcl9pZCddICkgKQogICAgICB7CgkvLyB0aGlzIGlzIHVnbHkgZm9yIHRoZSB1c2VyIHRvIHNlZQoJLy8gYnV0IGF0IGxlYXN0IHRoZSBhZG1pbiB3aWxsIGJlIGFibGUgdG8gZmlndXJlIGl0IG91dAoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpKTsKCXJldHVybjsKICAgICAgfQoKICAgICRmZXVzZXJzID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CiAgICBpZiggISRmZXVzZXJzICkKICAgICAgewoJLy8gdGhpcyBpcyB1Z2x5IGZvciB0aGUgdXNlciB0byBzZWUKCS8vIGJ1dCBhdCBsZWFzdCB0aGUgYWRtaW4gd2lsbCBiZSBhYmxlIHRvIGZpZ3VyZSBpdCBvdXQKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICR0aGlzLT5MYW5nKCdlcnJvcl9ub2ZldXNlcnNtb2R1bGUnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAkY21zbWFpbGVyID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdDTVNNYWlsZXInKTsKICAgIGlmKCAhJGNtc21haWxlciApCiAgICAgIHsKCS8vIHRoaXMgaXMgdWdseSBmb3IgdGhlIHVzZXIgdG8gc2VlCgkvLyBidXQgYXQgbGVhc3QgdGhlIGFkbWluIHdpbGwgYmUgYWJsZSB0byBmaWd1cmUgaXQgb3V0CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAkdGhpcy0+TGFuZygnZXJyb3Jfbm9mZXVzZXJzbW9kdWxlJykpOwoJcmV0dXJuOwogICAgICB9CgoKICAgICR1aWQgPSAkcGFyYW1zWyd1c2VyX2lkJ107CiAgICAkdXNlcmRldGFpbHMgPSAkdGhpcy0+R2V0VGVtcFVzZXJEZXRhaWxzKCAkdWlkICk7CiAgICBpZiggISR1c2VyZGV0YWlscyApCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICR0aGlzLT5MYW5nKCdlcnJvcl91c2Vybm90Zm91bmQnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBnZXQgdGhlIGdyb3VwIHByb3BlcnR5IHJlbGF0aW9ucwogICAgJHJlbGF0aW9ucyA9ICRmZXVzZXJzLT5HZXRHcm91cFByb3BlcnR5UmVsYXRpb25zKCAkdXNlcmRldGFpbHNbJ2dyb3VwX2lkJ10gKTsKICAgIGlmKCAkcmVsYXRpb25zWzBdID09IGZhbHNlICkKICAgICAgewoJLy8gdGhpcyBpcyB1Z2x5IGZvciB0aGUgdXNlciB0byBzZWUKCS8vIGJ1dCBhdCBsZWFzdCB0aGUgYWRtaW4gd2lsbCBiZSBhYmxlIHRvIGZpZ3VyZSBpdCBvdXQKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICAkdGhpcy0+TGFuZygnZXJyb3Jfbm9wcm9wcmVsYXRpb25zJykuJyAnLiRyZWxhdGlvbnNbMV0gKTsKCXJldHVybjsKICAgICAgfQogICAgdWFzb3J0KCAkcmVsYXRpb25zLCAnY29tcGFyZV9lbGVtZW50c19ieV9zb3J0b3JkZXJfa2V5JyApOwoKICAgIC8vIGdldCB0aGUgdXNlcnMnIHByb3BlcnRpZXMKICAgICRwcm9wcyA9IGFycmF5KCk7CiAgICB7CiAgICAgICR0X3Byb3BzID0gJHRoaXMtPkdldFRlbXBVc2VyUHJvcGVydGllcyggJHVpZCApOwogICAgICBpZiggISR0X3Byb3BzICkKCXsKCSAgLy8gdGhpcyBpcyB1Z2x5IGZvciB0aGUgdXNlciB0byBzZWUKCSAgLy8gYnV0IGF0IGxlYXN0IHRoZSBhZG1pbiB3aWxsIGJlIGFibGUgdG8gZmlndXJlIGl0IG91dAoJICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCSAgICAkdGhpcy0+TGFuZygnZXJyb3Jfbm9wcm9wZXJ0aWVzJykuJyAnLiRyZWxhdGlvbnNbMV0gKTsKCSAgcmV0dXJuOwoJfQoKICAgICAgLy8gYSBsaXR0bGUgcmUtc29ydGluZwogICAgICBmb3JlYWNoKCAkdF9wcm9wcyBhcyAkcHJvcCApCgl7CgkgICRwcm9wc1skcHJvcFsndGl0bGUnXV0gPSAkcHJvcDsKCX0KICAgIH0KCiAgICAvLyBoZXJlIHdlJ2xsIGRpc3BsYXkgYSBmb3JtIHRoYXQgaXMgc2ltaWxhciB0byB0aGUgcmVnaXN0cmF0aW9uIGZvcm0gaW4gCiAgICAvLyBldmVyeSB3YXksCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2Vycm9yJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCAkcGFyYW1zWydlcnJvciddKTsKICAgICAgfQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydtZXNzYWdlJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICRwYXJhbXNbJ21lc3NhZ2UnXSk7CiAgICAgIH0KCiAgICAkcm93YXJyYXkgPSBhcnJheSgpOwoKICAgIC8vIG1ha2Ugc3VyZSB1c2VybmFtZSBpcyBpbiB0aGVyZQogICAgJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwogICAgJG9uZXJvdy0+Y29sb3IgPSAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfY29sb3InLCdibHVlJyk7CiAgICAkb25lcm93LT5tYXJrZXIgPSAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfbWFya2VyJywnKicpOwogICAgJG9uZXJvdy0+cmVxdWlyZWQgPSAxOwogICAgJHZhbCA9ICR1c2VyZGV0YWlsc1sndXNlcm5hbWUnXTsKICAgICRvbmVyb3ctPmhpZGRlbiA9IG15Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ2hpZGRlbl91c2VybmFtZScsCgkJCQkJICAgaW1wbG9kZSgiOyIsYXJyYXkoJ3VzZXJuYW1lJywwLDMwLDIpKSk7CiAgICAkb25lcm93LT5wcm9tcHQgPSAkdGhpcy0+TGFuZygndXNlcm5hbWUnKTsKICAgICRvbmVyb3ctPmNvbnRyb2wgPSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnaW5wdXRfdXNlcm5hbWUnLCAkdmFsLCAKCQkJCQkgICAgICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCd1c2VybmFtZWZsZGxlbmd0aCcpLAoJCQkJCSAgICAgJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ21heF91c2VybmFtZWxlbmd0aCcpKTsKICAgICRyb3dhcnJheVtdID0gJG9uZXJvdzsKCiAgICAvLyBhbmQgcGFzc3dvcmQKICAgICRvbmVyb3cgPSBuZXcgU3RkQ2xhc3MoKTsKICAgICRvbmVyb3ctPmNvbG9yID0gJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX2NvbG9yJywnYmx1ZScpOwogICAgJG9uZXJvdy0+bWFya2VyID0gJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX21hcmtlcicsJyonKTsKICAgICRvbmVyb3ctPmV4dHJhdGV4dCA9ICR0aGlzLT5MYW5nKCd0eHRfY2hhbmdlcGFzc3dvcmQnKTsKICAgICRvbmVyb3ctPnJlcXVpcmVkID0gMTsKICAgICR2YWwgPSAnJzsKICAgICRvbmVyb3ctPmhpZGRlbiA9IG15Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ2hpZGRlbl9wYXNzd29yZCcsCgkJCQkJICAgaW1wbG9kZSgiOyIsYXJyYXkoJ3Bhc3N3b3JkJywwLDMwLDIpKSk7CiAgICAkb25lcm93LT5wcm9tcHQgPSAkdGhpcy0+TGFuZygncGFzc3dvcmQnKTsKICAgICRvbmVyb3ctPmNvbnRyb2wgPSR0aGlzLT5DcmVhdGVJbnB1dFBhc3N3b3JkKCRpZCwgJ2lucHV0X3Bhc3N3b3JkJywgJHZhbCwgCgkJCQkJCSAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgncGFzc3dvcmRmbGRsZW5ndGgnKSwKCQkJCQkJICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdtYXhfcGFzc3dvcmRsZW5ndGgnKSk7CiAgICAkcm93YXJyYXlbXSA9ICRvbmVyb3c7CgogICAgLy8gYW5kIG1ha2UgaGltIHJlcGVhdCB0aGUgcGFzc3dvcmQKICAgICRvbmVyb3cgPSBuZXcgU3RkQ2xhc3MoKTsKICAgICRvbmVyb3ctPmNvbG9yID0gJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX2NvbG9yJywnYmx1ZScpOwogICAgJG9uZXJvdy0+bWFya2VyID0gJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX21hcmtlcicsJyonKTsKICAgICRvbmVyb3ctPnJlcXVpcmVkID0gMTsKICAgICR2YWwgPSAnJzsKICAgICRvbmVyb3ctPmhpZGRlbiA9IG15Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ2hpZGRlbl9yZXBlYXRwYXNzd29yZCcsCgkJCQkJICAgaW1wbG9kZSgiOyIsYXJyYXkoJ3JlcGVhdHBhc3N3b3JkJywwLDMwLDIpKSk7CiAgICAkb25lcm93LT5wcm9tcHQgPSAkdGhpcy0+TGFuZygncmVwZWF0cGFzc3dvcmQnKTsKICAgICRvbmVyb3ctPmNvbnRyb2wgPSR0aGlzLT5DcmVhdGVJbnB1dFBhc3N3b3JkKCRpZCwgJ2lucHV0X3JlcGVhdHBhc3N3b3JkJywgJHZhbCwKCQkJCQkJICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdwYXNzd29yZGZsZGxlbmd0aCcpLAoJCQkJCQkgJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ21heF9wYXNzd29yZGxlbmd0aCcpKTsKICAgICRyb3dhcnJheVtdID0gJG9uZXJvdzsKCiAgICAvLyBhbiBvcHRpb24gdG8gc2VuZCBhbm90aGVyIGNvbmZpcm1hdGlvbiBtZXNzYWdlCiAgICAvLyBidXQgYSBkaWZmZXJlbnQgb25lIGZyb20gdGhlIG5vcm1hbAogICAgJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwogICAgJG9uZXJvdy0+Y29sb3IgPSAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfY29sb3InLCdibHVlJyk7CiAgICAkb25lcm93LT5tYXJrZXIgPSAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfbWFya2VyJywnKicpOwogICAgJG9uZXJvdy0+cmVxdWlyZWQgPSAxOwogICAgJG9uZXJvdy0+cHJvbXB0ID0gJHRoaXMtPkxhbmcoJ3NlbmRfYWRqdXN0bWVudGVtYWlsJyk7CiAgICAkb25lcm93LT5leHRyYXRleHQgPSAkdGhpcy0+TGFuZygndHh0X2FkanVzdG1lbnRlbWFpbCcpOwogICAgJG9uZXJvdy0+Y29udHJvbCA9ICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2lucHV0X2FkanVzdG1lbnRlbWFpbCcsIDEsIDEpOwogICAgJHJvd2FycmF5W10gPSAkb25lcm93OwoKICAgIGZvcmVhY2goICRyZWxhdGlvbnMgYXMgJHJlbG4gKQogICAgewogICAgICAvLyBkb24ndCBwcm9jZXNzIGhpZGRlbiBmaWVsZHMgaGVyZQogICAgICBpZiggJHJlbG5bJ3JlcXVpcmVkJ10gPT0gMyApIGNvbnRpbnVlOwoKICAgICAgLy8gZ2V0IHRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uCiAgICAgICRkZWZuID0gJGZldXNlcnMtPkdldFByb3BlcnR5RGVmbiggJHJlbG5bJ25hbWUnXSApOwogICAgICAKICAgICAgJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwoKICAgICAgJGNvbG9yID0gJyc7CiAgICAgIGlmKCAkcmVsblsncmVxdWlyZWQnXSA9PSAyICkgJGNvbG9yID0gJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX2NvbG9yJywnYmx1ZScpOwogICAgICAkbWFya2VyID0gJyc7CiAgICAgIGlmKCAkcmVsblsncmVxdWlyZWQnXSA9PSAyICkgJG1hcmtlciA9ICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9tYXJrZXInLCcqJyk7CiAgICAgICRvbmVyb3ctPnJlcXVpcmVkID0gKCRyZWxuWydyZXF1aXJlZCddID09IDIpOwogICAgICAkb25lcm93LT5jb2xvciAgICA9ICRjb2xvcjsKICAgICAgJG9uZXJvdy0+bWFya2VyICAgPSAkbWFya2VyOwogICAgICAkb25lcm93LT5oaWRkZW4gPSBteUNyZWF0ZUlucHV0SGlkZGVuKCAkaWQsICdoaWRkZW5fJy4kcmVsblsnbmFtZSddLAoJCQkJCSAgICAgaW1wbG9kZSgiOyIsYXJyYXkoJHJlbG5bJ25hbWUnXSwkZGVmblsndHlwZSddLAoJCQkJCQkJICAgICAgICRkZWZuWydsZW5ndGgnXSwkcmVsblsncmVxdWlyZWQnXSkpKTsKCiAgICAgICR2YWwgPSBpc3NldCgkcHJvcHNbJHJlbG5bJ25hbWUnXV1bJ2RhdGEnXSkgPyAkcHJvcHNbJHJlbG5bJ25hbWUnXV1bJ2RhdGEnXSA6ICcnOwogICAgICAkb25lcm93LT5wcm9tcHQgPSAkZGVmblsncHJvbXB0J107CiAgICAgIHN3aXRjaCggJGRlZm5bJ3R5cGUnXSApCgl7CgljYXNlIDA6IC8vIHRleHQKCSAgJG9uZXJvdy0+Y29udHJvbCA9ICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ2lucHV0XycuJHJlbG5bJ25hbWUnXSwKCQkJCQkJICAgICAkdmFsLCAkZGVmblsnbGVuZ3RoJ10sICRkZWZuWydtYXhsZW5ndGgnXSApOwoJICBicmVhazsKCgljYXNlIDE6IC8vIGNoZWNrYm94CgkgICRvbmVyb3ctPmNvbnRyb2wgPSAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCggJGlkLCAnaW5wdXRfJy4kcmVsblsnbmFtZSddLCAxLCAkdmFsICk7CgkgIGJyZWFrOwoKCWNhc2UgMjogLy8gZW1haWwKCSAgJG9uZXJvdy0+Y29udHJvbCA9ICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ2lucHV0XycuJHJlbG5bJ25hbWUnXSwKCQkJCQkJICAgICAkdmFsLCAkZGVmblsnbGVuZ3RoJ10sICgkZGVmblsnbWF4bGVuZ3RoJ10pICk7CgkgIGJyZWFrOwoKCWNhc2UgMzogLy8gdGV4dGFyZWEKCSAgJG9uZXJvdy0+Y29udHJvbCA9ICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwgJGlkLCAkdmFsLCAnaW5wdXRfJy4kZGVmblsnbmFtZSddKTsKCSAgYnJlYWs7CgoJY2FzZSA0OiAvLyBkcm9wZG93bgoJICAkb25lcm93LT5jb250cm9sID0gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAKCQkJCQkJCSdpbnB1dF8nLiRkZWZuWyduYW1lJ10sIAoJCQkJCQkJJGZldXNlcnMtPkdldFNlbGVjdE9wdGlvbnMoJGRlZm5bJ25hbWUnXSwgMSksIAoJCQkJCQkJLTEsIAoJCQkJCQkJJHZhbCk7CgkgIGJyZWFrOwoJfQoKICAgICAgJHJvd2FycmF5W10gPSAkb25lcm93OwogICAgfQoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3N0YXJ0Zm9ybScsCgkJCSAgICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQgKCRpZCwgJ2RvX2VkaXR1c2VyJywgJHJldHVybmlkKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQgKCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsJHRoaXMtPkxhbmcoJ2VkaXR1c2VyJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICd1c2VyX2lkJywgJHVzZXJkZXRhaWxzWydpZCddICkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdoaWRkZW4yJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAnZ3JvdXBfaWQnLCAkdXNlcmRldGFpbHNbJ2dyb3VwX2lkJ10gKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NvbnRyb2xzJywgJHJvd2FycmF5KTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY29udHJvbGNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0JywKCQkJCQkJCSAgICAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY2FuY2VsJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdjYW5jZWwnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCdjYW5jZWwnKSkpOwoKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdHVzZXIudHBsJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgRGlzcGxheUFkbWluRW1haWxDb25maXJtYXRpb25UZW1wbGF0ZVRhYigkaWQsICRwYXJhbXMsICRyZXR1cm5faWQpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pbkVtYWlsQ29uZmlybWF0aW9uVGVtcGxhdGVUYWIoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBlY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQgKCRpZCwgJ3NldF9lbWFpbGNvbmZpcm1fdGVtcGxhdGUnKTsKICAgIGVjaG8gJzx0YWJsZT4nOwogICAgZWNobyAnPHRyIHZhbGlnbj0idG9wIj48dGQ+Jy4kdGhpcy0+TGFuZygnc3ViamVjdCcpLic6KjwvdGQ+PHRkPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnaW5wdXRfc3ViamVjdCcsCgkJCQkJICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZWxmcmVnX2VtYWlsY29uZmlybV9zdWJqZWN0JyksIDgwLCAyMDAgKS4nPC90ZD48L3RyPic7IAogICAgCiAgICBlY2hvICc8dHIgdmFsaWduPSJ0b3AiPjx0ZD4nLiR0aGlzLT5MYW5nKCd0ZXh0Ym9keScpLic6KjwvdGQ+PHRkPicuJHRoaXMtPkNyZWF0ZVRleHRBcmVhIChmYWxzZSwgJGlkLCAgCgkJCQkJICAgJHRoaXMtPkdldFRlbXBsYXRlICgnc2VsZnJlZ19lbWFpbGNvbmZpcm1fdGV4dHRlbXBsYXRlJyksCgkJCQkJICAgJ3RleHR0ZW1wbGF0ZWNvbnRlbnQnLCAnJykuJzwvdGQ+PC90cj4nOwogICAgZWNobyAnPHRyIHZhbGlnbj0idG9wIj48dGQ+Jy4kdGhpcy0+TGFuZygnaHRtbGJvZHknKS4nOjwvdGQ+PHRkPicuJHRoaXMtPkNyZWF0ZVRleHRBcmVhIChmYWxzZSwgJGlkLCAgCgkJCQkJICAgJHRoaXMtPkdldFRlbXBsYXRlICgnc2VsZnJlZ19lbWFpbGNvbmZpcm1fdGVtcGxhdGUnKSwKCQkJCQkgICAndGVtcGxhdGVjb250ZW50JywgJycpLic8L3RkPjwvdHI+JzsKICAgIGVjaG8gJzwvdGFibGU+JzsgIAogICAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdGJ1dHRvbicsCgkJCQkgICAkdGhpcy0+TGFuZyAoJ3N1Ym1pdCcpKTsKICAgIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdkZWZhdWx0YnV0dG9uJywKCQkJCSAgICR0aGlzLT5MYW5nICgnZGVmYXVsdCcpKTsKICAgIGVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQgKCk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgRGlzcGxheUFkbWluRmluYWxNZXNzYWdlVGVtcGxhdGVUYWIoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9EaXNwbGF5QWRtaW5GaW5hbE1lc3NhZ2VUZW1wbGF0ZVRhYiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAnc2V0X2ZpbmFsbWVzc2FnZV90ZW1wbGF0ZScpOwogICAgZWNobyAnPGJyLz48cD4nLiR0aGlzLT5DcmVhdGVUZXh0QXJlYSAoZmFsc2UsICRpZCwKCQkJCQkgICAkdGhpcy0+R2V0VGVtcGxhdGUgKCdzZWxmcmVnX2ZpbmFsbWVzc2FnZV90ZW1wbGF0ZScpLAoJCQkJCSAgICd0ZW1wbGF0ZWNvbnRlbnQnLCAnJykuJzwvcD4nOwogICAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdGJ1dHRvbicsCgkJCQkgICAkdGhpcy0+TGFuZyAoJ3N1Ym1pdCcpKTsKICAgIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdkZWZhdWx0YnV0dG9uJywKCQkJCSAgICR0aGlzLT5MYW5nICgnZGVmYXVsdCcpKTsKICAgIGVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQgKCk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgRGlzcGxheUFkbWluRW1haWxVc2VyRWRpdGVkVGVtcGxhdGVUYWIoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9EaXNwbGF5QWRtaW5FbWFpbFVzZXJFZGl0ZWRUZW1wbGF0ZVRhYiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAnc2V0X2VtYWlsdXNlcmVkaXRlZF90ZW1wbGF0ZScpOwogICAgZWNobyAnPHRhYmxlPic7CiAgICBlY2hvICc8dHIgdmFsaWduPSJ0b3AiPjx0ZD4nLiR0aGlzLT5MYW5nKCdzdWJqZWN0JykuJzoqPC90ZD48dGQ+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsICdpbnB1dF9zdWJqZWN0JywKCQkJCQkgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NlbGZyZWdfZW1haWx1c2VyZWRpdGVkX3N1YmplY3QnKSwgODAsIDIwMCApLic8L3RkPjwvdHI+JzsgCiAgICAKICAgIGVjaG8gJzx0ciB2YWxpZ249InRvcCI+PHRkPicuJHRoaXMtPkxhbmcoJ3RleHRib2R5JykuJzoqPC90ZD48dGQ+Jy4kdGhpcy0+Q3JlYXRlVGV4dEFyZWEgKGZhbHNlLCAkaWQsICAKCQkJCQkgICAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdzZWxmcmVnX2VtYWlsdXNlcmVkaXRlZF90ZXh0dGVtcGxhdGUnKSwKCQkJCQkgICAndGV4dHRlbXBsYXRlY29udGVudCcsICcnKS4nPC90ZD48L3RyPic7CiAgICBlY2hvICc8dHIgdmFsaWduPSJ0b3AiPjx0ZD4nLiR0aGlzLT5MYW5nKCdodG1sYm9keScpLic6PC90ZD48dGQ+Jy4kdGhpcy0+Q3JlYXRlVGV4dEFyZWEgKGZhbHNlLCAkaWQsICAKCQkJCQkgICAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdzZWxmcmVnX2VtYWlsdXNlcmVkaXRlZF90ZW1wbGF0ZScpLAoJCQkJCSAgICd0ZW1wbGF0ZWNvbnRlbnQnLCAnJykuJzwvdGQ+PC90cj4nOwogICAgZWNobyAnPC90YWJsZT4nOyAgCiAgICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0YnV0dG9uJywKCQkJCSAgICR0aGlzLT5MYW5nICgnc3VibWl0JykpOwogICAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2RlZmF1bHRidXR0b24nLAoJCQkJICAgJHRoaXMtPkxhbmcgKCdkZWZhdWx0JykpOwogICAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCAoKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBEaXNwbGF5QWRtaW5TZW5kQW5vdGhlckVtYWlsVGVtcGxhdGVUYWIoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9EaXNwbGF5QWRtaW5TZW5kQW5vdGhlckVtYWlsVGVtcGxhdGVUYWIoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBlY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQgKCRpZCwgJ3NldF9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJyk7CiAgICBlY2hvICc8YnIvPicuJHRoaXMtPkxhbmcoJ3RpdGxlX3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnKS4KICAgICAgJzxwPicuJHRoaXMtPkNyZWF0ZVRleHRBcmVhIChmYWxzZSwgJGlkLAoJCQkJICAgJHRoaXMtPkdldFRlbXBsYXRlICgnc2VsZnJlZ19zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJyksCgkJCQkgICAndGVtcGxhdGVjb250ZW50JywgJycpLic8L3A+JzsKICAgIGVjaG8gJzxici8+Jy4kdGhpcy0+TGFuZygndGl0bGVfcG9zdF9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJykuCiAgICAgICc8cD4nLiR0aGlzLT5DcmVhdGVUZXh0QXJlYSAoZmFsc2UsICRpZCwKCQkJCQkgICAkdGhpcy0+R2V0VGVtcGxhdGUgKCdzZWxmcmVnX3Bvc3Rfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZScpLAoJCQkJCSAgICd0ZW1wbGF0ZWNvbnRlbnQyJywgJycpLic8L3A+JzsKICAgIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdzdWJtaXRidXR0b24nLAoJCQkJICAgJHRoaXMtPkxhbmcgKCdzdWJtaXQnKSk7CiAgICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnZGVmYXVsdGJ1dHRvbicsCgkJCQkgICAkdGhpcy0+TGFuZyAoJ2RlZmF1bHQnKSk7CiAgICBlY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kICgpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfRGlzcGxheUVycm9yUGFnZSgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlPScnKQogIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfZXJyb3InLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CiAgICBpZiAoJG1lc3NhZ2UgIT0gJycpCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICRtZXNzYWdlKTsKICAgICAgfQogICAgCiAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZXJyb3IudHBsJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgRGlzcGxheU1vZHVsZU91dHB1dCgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9EaXNwbGF5TW9kdWxlT3V0cHV0KCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2U9JycpCiAgewogICAgJG1vZGUgPSAnc2lnbnVwJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snbW9kZSddICkgKQogICAgICB7CgkkbW9kZSA9ICRwYXJhbXNbJ21vZGUnXTsKICAgICAgfQoKICAgIHN3aXRjaCggJG1vZGUgKQogICAgICB7CiAgICAgIGNhc2UgJ3NpZ251cCc6CgkkdGhpcy0+X1VzZXJEaXNwbGF5UmVnaXN0cmF0aW9uRm9ybTEoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CglicmVhazsKCiAgICAgIGNhc2UgJ3ZlcmlmeSc6CgkkdGhpcy0+X1VzZXJEaXNwbGF5VmVyaWZpY2F0aW9uRm9ybSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCWJyZWFrOwoKICAgICAgY2FzZSAnbG9zdGVtYWlsJzoKICAgICAgY2FzZSAnc2VuZGFub3RoZXJlbWFpbCc6CiAgICAgIGNhc2UgJ3NlbmRtb3JlbWFpbCc6CgkkdGhpcy0+X1VzZXJEaXNwbGF5TG9zdFJlZ0VtYWlsRm9ybSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCWJyZWFrOwoKICAgICAgZGVmYXVsdDoKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAnJywgJHJldHVybmlkLAoJCQkJICAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZG1vZGUnKSk7CglicmVhazsKICAgICAgfQogIH0KICAKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX0RvRWRpdFVzZXIoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfRG9EZWxldGVCdWxrVXNlcnMoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSApCiAgICAgIHsKCWlmKCAka2V5ID09ICdtYXJrZGVsZXRlXycuJHZhbHVlICkKCSAgewoJICAgICR0aGlzLT5EZWxldGVUZW1wVXNlclByb3BlcnRpZXMoICR2YWx1ZSApOwoJICAgICR0aGlzLT5EZWxldGVUZW1wVXNlciggJHZhbHVlICk7IAoJICB9CiAgICAgIH0KICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJ2FkbWludXNlcnMnKTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9Eb0VkaXRVc2VyKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0RvRWRpdFVzZXIoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgZ2xvYmFsICRnQ21zOwoKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ3VzZXJfaWQnXSApICkKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpKTsKCXJldHVybjsKICAgICAgfQoKICAgICRmZXVzZXJzID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CiAgICBpZiggISRmZXVzZXJzICkKICAgICAgewoJLy8gdGhpcyBpcyB1Z2x5IGZvciB0aGUgdXNlciB0byBzZWUKCS8vIGJ1dCBhdCBsZWFzdCB0aGUgYWRtaW4gd2lsbCBiZSBhYmxlIHRvIGZpZ3VyZSBpdCBvdXQKCS8vIHRoaXMgc2hvdWxkbid0IGhhcHBlbiBvbmNlIHRoZSB1c2VyIGhhcyBzZWVuIHRoZSBmb3JtLgoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICcnLCAkcmV0dXJuaWQsCgkJCQkgICR0aGlzLT5MYW5nKCdlcnJvcl9ub2ZldXNlcnNtb2R1bGUnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAkY21zbWFpbGVyID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdDTVNNYWlsZXInKTsKICAgIGlmKCAhJGNtc21haWxlciApCiAgICAgIHsKCS8vIHRoaXMgaXMgdWdseSBmb3IgdGhlIHVzZXIgdG8gc2VlCgkvLyBidXQgYXQgbGVhc3QgdGhlIGFkbWluIHdpbGwgYmUgYWJsZSB0byBmaWd1cmUgaXQgb3V0CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJycsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcoJ2Vycm9yX25vZmV1c2Vyc21vZHVsZScpKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIGNoZWNrIGZvciByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWydncm91cF9pZCddICkgKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJykpOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gQ2hlY2sgdG8gZW5zdXJlIGFsbCByZXF1aXJlZCBmaWVsZHMgaGF2ZSBzb21lIGNvbnRlbnQKICAgIC8vIGFuZCB2YWxpZGF0ZSBlbWFpbCBmaWVsZHMKICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsICkKICAgIHsKICAgICAgaWYoIHByZWdfbWF0Y2goICcvXmhpZGRlbl8vJywgJGtleSApICkKCXsKCSAgJHByb3BuYW1lID0gc3Vic3RyKCRrZXksc3RybGVuKCdoaWRkZW5fJykpOwoJICBpZiggJHByb3BuYW1lID09ICdwYXNzd29yZCcgfHwgJHByb3BuYW1lID09ICdyZXBlYXRwYXNzd29yZCcgKQoJICAgIHsKCSAgICAgIGNvbnRpbnVlOwoJICAgIH0KCSAgJGFyciA9IHNwbGl0KCI7IiwkcGFyYW1zWyRrZXldKTsKCSAgJHJlcXVpcmVkID0gJGFyclszXTsKCSAgaWYoICRyZXF1aXJlZCA9PSAyICYmIAoJICAgICAgKCFpc3NldCgkcGFyYW1zWydpbnB1dF8nLiRwcm9wbmFtZV0pIHx8ICRwYXJhbXNbJ2lucHV0XycuJHByb3BuYW1lXSA9PSAnJyApICkKCSAgICB7CgkgICAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9yZXF1aXJlZGZpZWxkJywkcHJvcG5hbWUpOwoJICAgICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCSAgICB9CgoJICBpZiggJGFyclsxXSA9PSAnMicgKQoJICAgIHsKCSAgICAgICRyZXN1bHQgPSAkZmV1c2Vycy0+SXNWYWxpZEVtYWlsQWRkcmVzcyggJHBhcmFtc1snaW5wdXRfJy4kcHJvcG5hbWVdLAoJCQkJCQkgICAgICAgJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ2RvX3NtdHBfdmFsaWRhdGVfZW1haWwnKSApOwoJICAgICAgaWYoICRyZXN1bHRbMF0gPT0gZmFsc2UgKQoJCXsKCQkgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJCSAgJHBhcmFtc1snbWVzc2FnZSddID0gJHJlc3VsdFsxXTsKCQkgICR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CgkJfQoJICAgIH0KCX0KICAgIH0KCiAgICAvLyBnZXQgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZAogICAgJHVzZXJuYW1lID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10gKSApCiAgICAgIHsKCSR1c2VybmFtZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSk7CiAgICAgIH0KICAgICRwYXNzd29yZCA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddICkgKQogICAgICB7CgkkcGFzc3dvcmQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10pOwogICAgICB9CiAgICAkcmVwZWF0cGFzc3dvcmQgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcmVwZWF0cGFzc3dvcmQnXSApICkKICAgICAgewoJJHJlcGVhdHBhc3N3b3JkID0gdHJpbSgkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddKTsKICAgICAgfQoKICAgIC8vIGNoZWNrIGlmIHRoZSB1c2VybmFtZSBpcyB2YWxpZCBvciB0YWtlbgogICAgaWYoICR1c2VybmFtZSA9PSAnJyApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2VtcHR5dXNlcm5hbWUnKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KICAgIGlmKCAhJGZldXNlcnMtPklzVmFsaWRVc2VybmFtZSggJHVzZXJuYW1lICkgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkdXNlcm5hbWUnKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KICAgICR1aWQgPSAkdGhpcy0+R2V0VGVtcFVzZXJJRCgkdXNlcm5hbWUpOwogICAgaWYoICR1aWQgIT0gZmFsc2UgJiYgJHVpZCAhPSAkcGFyYW1zWyd1c2VyX2lkJ10gKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl91c2VybmFtZXRha2VuJyk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgoKICAgIC8vIGNoZWNrIGlmIHRoZSBwYXNzd29yZHMgbWF0Y2ggb3IgaWYgdGhleSdyZSB2YWxpZAogICAgLy8gaWYgdGhleSdyZSBzZXQgYXRhbGwKICAgIGlmKCAkcGFzc3dvcmQgIT0gJycgKQogICAgICB7CglpZiggJHBhc3N3b3JkICE9ICRyZXBlYXRwYXNzd29yZCApCgkgIHsKCSAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfcGFzc3dvcmRzZG9udG1hdGNoJyk7CgkgICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCSAgICByZXR1cm47CgkgIH0KCSRtaW5wd2xlbiA9ICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdtaW5fcGFzc3dvcmRsZW5ndGgnKTsKCSRtYXhwd2xlbiA9ICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdtYXhfcGFzc3dvcmRsZW5ndGgnKTsKCWlmKCBzdHJsZW4oJHBhc3N3b3JkKSA8ICRtaW5wd2xlbiB8fCBzdHJsZW4oJHBhc3N3b3JkKSA+ICRtYXhwd2xlbiApCgkgIHsKCSAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZHBhc3N3b3JkJywKCQkJCQkgICAgIGFycmF5KCRtaW5wd2xlbiwkbWF4cHdsZW4pKTsKCSAgICAkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJICAgIHJldHVybjsKCSAgfQogICAgICB9CgoKICAgIC8vIGZpbmQgYW4gZW1haWwgZmllbGQuLi4gc29tZXRoaW5nIHRoYXQncyBuYW1lIGhhcyBlbWFpbCBpbiBpdAogICAgLy8gb3IgaXMgb2YgdHlwZSAyCiAgICAkZW1haWxfZmllbGQgPSAnJzsKICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsICkKICAgIHsKICAgICAgaWYoIHByZWdfbWF0Y2goICcvXmhpZGRlbl8vJywgJGtleSApICkKCXsKCSAgJHByb3BuYW1lID0gc3Vic3RyKCRrZXksc3RybGVuKCdoaWRkZW5fJykpOwoJICAkYXJyID0gc3BsaXQoIjsiLCRwYXJhbXNbJGtleV0pOwoKCSAgaWYoIHByZWdfbWF0Y2goJy9lbWFpbC9pJywkYXJyWzBdKSB8fCAkYXJyWzFdID09IDIgKQoJICAgIHsKCSAgICAgIC8vIGZvdW5kIHNvbWV0aGluZyByZXNlbWJsaW5nIGFuIGVtYWlsIGZpZWxkCgkgICAgICAkZW1haWxfZmllbGQgPSAnaW5wdXRfJy4kcHJvcG5hbWU7CgkgICAgICBicmVhazsKCSAgICB9Cgl9CiAgICB9ICAgIAogICAgaWYoICRlbWFpbF9maWVsZCA9PSAnJyApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vZW1haWxhZGRyZXNzJyk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gZ2VuZXJhdGUgYSB1bmlxdWUgY29kZSB0aGF0IHRoZSB1c2VyIGNhbiBlbnRlciB0byBkb3VibGUgY29uZmlybQogICAgLy8gaGlzIGxvZ2luLgogICAgJGNvZGUgPSAkZmV1c2Vycy0+R2VuZXJhdGVSYW5kb21QcmludGFibGVTdHJpbmcoKTsKCiAgICAvLyBoYXZlIHRvIGFkZCB0aGUgcmVjb3JkIHRvIHRoZSBkYXRhYmFzZSBzbyB0aGF0IHdlIGtub3cgd2hvIHRoaXMgZ3V5IGlzCiAgICAvLyB3aGVuIGhlIGNvbWVzIGJhY2sKICAgICRyZXR1cm4gPSAkdGhpcy0+RWRpdFRlbXBVc2VyKCAkcGFyYW1zWyd1c2VyX2lkJ10sICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY29kZSApOwogICAgaWYoICRyZXR1cm5bMF0gPT0gZmFsc2UgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICRyZXR1cm5bMV07CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gcmVtb3ZlIGFueSBleGlzdGluZyBwcm9wZXJ0aWVzCiAgICAkdGhpcy0+RGVsZXRlVGVtcFVzZXJQcm9wZXJ0aWVzKCAkcGFyYW1zWyd1c2VyX2lkJ10gKTsKCiAgICAvLyBhbmQgYWRkIGhpcyBwcm9wZXJ0aWVzIHRvbwogICAgLy8gYnV0IGZpcnN0IHdlIHJlbW92ZSB0aGUgb25lcyB3ZSd2ZSBoYW5kbGVkIGFscmVhZHkKICAgICR0bXB1aWQgPSAkcGFyYW1zWyd1c2VyX2lkJ107CiAgICB1bnNldCgkcGFyYW1zWydpbnB1dF91c2VybmFtZSddICk7CiAgICB1bnNldCgkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddICk7CiAgICB1bnNldCgkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddICk7CiAgICB1bnNldCgkcGFyYW1zWydoaWRkZW5fdXNlcm5hbWUnXSApOwogICAgdW5zZXQoJHBhcmFtc1snaGlkZGVuX3Bhc3N3b3JkJ10gKTsKICAgIHVuc2V0KCRwYXJhbXNbJ2hpZGRlbl9yZXBlYXRwYXNzd29yZCddICk7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCApCiAgICB7CiAgICAgIGlmKCBwcmVnX21hdGNoKCAnL15oaWRkZW5fLycsICRrZXkgKSApCgl7CgkgICRwcm9wbmFtZSA9IHN1YnN0cigka2V5LHN0cmxlbignaGlkZGVuXycpKTsKCSAgaWYoICFpc3NldCggJHBhcmFtc1snaW5wdXRfJy4kcHJvcG5hbWVdICkgKSAKCSAgICB7CgkgICAgICBjb250aW51ZTsKCSAgICB9CgkgICRyZXR1cm4gPSAkdGhpcy0+QWRkVGVtcFVzZXJQcm9wZXJ0eSggJHRtcHVpZCwgJHByb3BuYW1lLCAKCQkJCQkJJHBhcmFtc1snaW5wdXRfJy4kcHJvcG5hbWVdICk7CgkgIGlmKCAkcmV0dXJuWzBdID09IGZhbHNlICkKCSAgICB7CgkgICAgICAvLyBub3cgd2UgaGF2ZSBhbiBpc3N1ZSB0byBmaWd1cmUgb3V0CgkgICAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICRyZXR1cm5bMV07CgkgICAgICAkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJICAgICAgcmV0dXJuOwoJICAgIH0KCX0KICAgIH0KCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2FkanVzdGVtYWlsJ10gKSAmJiAkcGFyYW1zWydpbnB1dF9hZGp1c3RlbWFpbCddID09IDEgKQogICAgICB7CgkvLyBva2F5LCB3ZSdyZSBub3cgcmVhZHkgdG8gc2VuZCB0aGUgZW1haWwsIHlhaG9vLCB5YWhvbywgeWFob28KCS8vIG5vdyB3ZSBoYXZlIHRvIGRlY2lkZSB3aGF0IGdvZXMgaW4gaXQuCgkkY21zbWFpbGVyLT5BZGRBZGRyZXNzKCAkcGFyYW1zWyRlbWFpbF9maWVsZF0gKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbmFtZScsJHVzZXJuYW1lKTsKCWlmKCAkcGFzc3dvcmQgIT0gJycgKQoJICB7CgkgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwYXNzd29yZCcsJHBhc3N3b3JkKTsKCSAgfQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjb2RlJywkY29kZSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3NpdGVuYW1lJywgJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXSk7CgkkcGFybXMgPSBhcnJheSggJ21vZGUnID0+ICd2ZXJpZnknLAoJCQknaW5wdXRfdXNlcm5hbWUnID0+ICR1c2VybmFtZSwKCQkJJ2lucHV0X2dyb3VwX2lkJyA9PiAkcGFyYW1zWydncm91cF9pZCddLAoJCQknaW5wdXRfY29kZScgPT4gJGNvZGUgKTsKCSR1cmwgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCwnJywkcGFybXMsJycsdHJ1ZSx0cnVlKTsKCSRzbWFsbHVybCA9ICR0aGlzLT5DcmVhdGVMaW5rKCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAnJywgYXJyYXkoJ21vZGUnID0+ICd2ZXJpZnknKSwnJyx0cnVlLHRydWUgKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbigndXJsJywkdXJsKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignc21hbGx1cmwnLCRzbWFsbHVybCk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2xpbmsnLCR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCR1cmwsJHBhcm1zLCcnLGZhbHNlLHRydWUpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignc21hbGxsaW5rJywkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCwKCQkJCQkJCSAgICAkc21hbGx1cmwsYXJyYXkoJ21vZGUnPT4ndmVyaWZ5JyksJycsZmFsc2UsdHJ1ZSkpOwoJJGh0bWxib2R5ID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnc2VsZnJlZ19lbWFpbHVzZXJlZGl0ZWRfdGVtcGxhdGUnKTsKCSR0ZXh0Ym9keSA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ3NlbGZyZWdfZW1haWx1c2VyZWRpdGVkX3RleHR0ZW1wbGF0ZScpOwoJJGNtc21haWxlci0+U2V0Qm9keSggJHRleHRib2R5ICk7CglpZiggJGh0bWxib2R5ICE9ICcnICkKCSAgewoJICAgICRjbXNtYWlsZXItPklzSFRNTCh0cnVlKTsgIC8vIHdlJ3JlIHNlbmRpbmcgYW4gaHRtbCBtYWlsCgkgICAgJGNtc21haWxlci0+U2V0Qm9keSggJGh0bWxib2R5ICk7CgkgICAgJGNtc21haWxlci0+U2V0QWx0Qm9keSggJHRleHRib2R5ICk7CgkgIH0KCWVsc2UKCSAgewoJICAgICRjbXNtYWlsZXItPklzSFRNTChmYWxzZSk7ICAvLyB3ZSdyZSBzZW5kaW5nIGFuIGh0bWwgbWFpbAoJICAgICRjbXNtYWlsZXItPlNldEJvZHkoICR0ZXh0Ym9keSApOwoJICB9CgkkY21zbWFpbGVyLT5TZXRTdWJqZWN0KCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZWxmcmVnX2VtYWlsdXNlcmVkaXRlZF9zdWJqZWN0JywkdGhpcy0+TGFuZygncmVnaXN0cmF0aW9uX2luZm9fZWRpdGVkJykpKTsKCSRjbXNtYWlsZXItPlNlbmQoKTsKCQoJLy8gd2UncmUgbm90IHJlZGlyZWN0aW5nIGFueXdoZXJlIHdlIG5lZWQgdG8gZGlzcGxheSBzb21lIG5pY2UgbWVzc2FnZQoJLy8gYWJvdXQgd2UganVzdCBzcGFtbWVkIHlvdXIgaW5ib3gsIGV0YywgZXRjLgoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd1c2VybmFtZScsJHVzZXJuYW1lKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZW1haWwnLCAkcGFyYW1zWyRlbWFpbF9maWVsZF0gKTsKCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnc2VsZnJlZ19wb3N0cmVnMV90ZW1wbGF0ZScpOwogICAgICB9CgogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYignYWRtaW51c2VycycpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9Eb0RlbGV0ZVVzZXIoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfRG9EZWxldGVVc2VyKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ3VzZXJfaWQnXSApICkKICAgICAgewoJLy8gdGhpcyBpcyB1Z2x5IGZvciB0aGUgdXNlciB0byBzZWUKCS8vIGJ1dCBhdCBsZWFzdCB0aGUgYWRtaW4gd2lsbCBiZSBhYmxlIHRvIGZpZ3VyZSBpdCBvdXQKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAkaWQgPSAkcGFyYW1zWyd1c2VyX2lkJ107CiAgICAkdGhpcy0+RGVsZXRlVGVtcFVzZXJQcm9wZXJ0aWVzKCAkaWQgKTsKICAgICR0aGlzLT5EZWxldGVUZW1wVXNlciggJGlkICk7IAogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYignYWRtaW51c2VycycpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFVzZXJEaXNwbGF5TG9zdFJlZ0VtYWlsRm9ybSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9Vc2VyRGlzcGxheUxvc3RSZWdFbWFpbEZvcm0oICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgJGZldXNlcnMgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgIGlmKCAhJGZldXNlcnMgKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICR0aGlzLT5MYW5nKCdlcnJvcl9ub2ZldXNlcnNtb2R1bGUnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2Vycm9yJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCAkcGFyYW1zWydlcnJvciddKTsKICAgICAgfQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydtZXNzYWdlJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICRwYXJhbXNbJ21lc3NhZ2UnXSk7CiAgICAgIH0KCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCSAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCggJGlkLCAnc2VuZGFub3RoZXJlbWFpbCcsICRyZXR1cm5pZCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kICgpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X3VzZXJuYW1lJywKCQkJICAgJG9uZXJvdy0+Y29udHJvbCA9JHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdpbnB1dF91c2VybmFtZScsIAoJCQkJCQkJCSAgICAkdmFsLCAyMCwgCgkJCQkJCQkJICAgICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdtYXhfdXNlcm5hbWVsZW5ndGgnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3N1Ym1pdCcsCgkJCQkJCQkgICAgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpKSk7CiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ3NlbGZyZWdfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZScpOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVXNlckRpc3BsYXlSZWdpc3RyYXRpb25Gb3JtMSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9Vc2VyRGlzcGxheVJlZ2lzdHJhdGlvbkZvcm0xKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ2dyb3VwJ10gKSApCiAgICAgIHsKCS8vIHRoaXMgaXMgdWdseSBmb3IgdGhlIHVzZXIgdG8gc2VlCgkvLyBidXQgYXQgbGVhc3QgdGhlIGFkbWluIHdpbGwgYmUgYWJsZSB0byBmaWd1cmUgaXQgb3V0CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJykpOwoJcmV0dXJuOwogICAgICB9CgogICAgJGZldXNlcnMgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgIGlmKCAhJGZldXNlcnMgKQogICAgICB7CgkvLyB0aGlzIGlzIHVnbHkgZm9yIHRoZSB1c2VyIHRvIHNlZQoJLy8gYnV0IGF0IGxlYXN0IHRoZSBhZG1pbiB3aWxsIGJlIGFibGUgdG8gZmlndXJlIGl0IG91dAoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcoJ2Vycm9yX25vZmV1c2Vyc21vZHVsZScpKTsKCXJldHVybjsKICAgICAgfQoKICAgICRjbXNtYWlsZXIgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0NNU01haWxlcicpOwogICAgaWYoICEkY21zbWFpbGVyICkKICAgICAgewoJLy8gdGhpcyBpcyB1Z2x5IGZvciB0aGUgdXNlciB0byBzZWUKCS8vIGJ1dCBhdCBsZWFzdCB0aGUgYWRtaW4gd2lsbCBiZSBhYmxlIHRvIGZpZ3VyZSBpdCBvdXQKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICR0aGlzLT5MYW5nKCdlcnJvcl9ub2ZldXNlcnNtb2R1bGUnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyB5ZXAsIGFsbCB0aGUgbW9kdWxlcyBhcmUgaGVyZSwgbm93IHdlIAogICAgLy8gaGF2ZSB0byBjb252ZXJ0IHRoZSBncm91cG5hbWUgaW50byBhbiBpZAogICAgJGdycGlkID0gJGZldXNlcnMtPkdldEdyb3VwSUQoJHBhcmFtc1snZ3JvdXAnXSk7CiAgICBpZiggJGdycGlkID09IGZhbHNlICkKICAgICAgewoJLy8gdGhpcyBpcyB1Z2x5IGZvciB0aGUgdXNlciB0byBzZWUKCS8vIGJ1dCBhdCBsZWFzdCB0aGUgYWRtaW4gd2lsbCBiZSBhYmxlIHRvIGZpZ3VyZSBpdCBvdXQKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICR0aGlzLT5MYW5nKCdlcnJvcl9ub3N1Y2hncm91cCcpKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIG5vdyB3ZSBoYXZlIGFuIGlkLi4uIGhhdmUgdG8gZ2V0IGEgbGlzdCBvZiB0aGUgZ3JvdXBzIHByb3BlcnRpZXMKICAgICRyZWxhdGlvbnMgPSAkZmV1c2Vycy0+R2V0R3JvdXBQcm9wZXJ0eVJlbGF0aW9ucyggJGdycGlkICk7CiAgICBpZiggJHJlbGF0aW9uc1swXSA9PSBmYWxzZSApCiAgICAgIHsKCS8vIHRoaXMgaXMgdWdseSBmb3IgdGhlIHVzZXIgdG8gc2VlCgkvLyBidXQgYXQgbGVhc3QgdGhlIGFkbWluIHdpbGwgYmUgYWJsZSB0byBmaWd1cmUgaXQgb3V0CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJycsICRyZXR1cm5pZCwgJHJlbGF0aW9uc1sxXSApOwoJcmV0dXJuOwogICAgICB9CiAgICB1YXNvcnQoICRyZWxhdGlvbnMsICdjb21wYXJlX2VsZW1lbnRzX2J5X3NvcnRvcmRlcl9rZXknICk7CgogICAgLy8gbm93IHdlIGhhdmUgdGhlIHByb3BlcnRpZXMsIGdvdHRhIHNob3cgc29tZXRoaW5nIHRvIHRoZSB1c2VyCiAgICAvLyBkYW1taXQuCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2Vycm9yJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCAkcGFyYW1zWydlcnJvciddKTsKICAgICAgfQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydtZXNzYWdlJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICRwYXJhbXNbJ21lc3NhZ2UnXSk7CiAgICAgIH0KCiAgICAvLyBub3cgd2UncmUgcmVhZHkgdG8gcG9wdWxhdGUgdGhlIHRlbXBsYXRlCiAgICAvLyBmaXJzdCB3ZSBwdXQgaW4gc3R1ZmYgdGhhdCBpcyByZXF1aXJlZCAodXNlcm5hbWUsIHBhc3N3b3JkLCBldGMsIGV0YykKICAgICRyb3dhcnJheSA9IGFycmF5KCk7CgogICAgLy8gbWFrZSBzdXJlIHVzZXJuYW1lIGlzIGluIHRoZXJlCiAgICAkb25lcm93ID0gbmV3IFN0ZENsYXNzKCk7CiAgICAkb25lcm93LT5jb2xvciA9ICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9jb2xvcicsJ2JsdWUnKTsKICAgICRvbmVyb3ctPm1hcmtlciA9ICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9tYXJrZXInLCcqJyk7CiAgICAkb25lcm93LT5yZXF1aXJlZCA9IDE7CiAgICAkdmFsID0gKGlzc2V0KCRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10pKSA/ICRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10gOiAnJzsKICAgICRvbmVyb3ctPmhpZGRlbiA9IG15Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ2hpZGRlbl91c2VybmFtZScsCgkJCQkJICAgaW1wbG9kZSgiOyIsYXJyYXkoJ3VzZXJuYW1lJywwLDMwLDIpKSk7CiAgICAkb25lcm93LT5wcm9tcHQgPSAkdGhpcy0+TGFuZygndXNlcm5hbWUnKTsKICAgICRvbmVyb3ctPmNvbnRyb2wgPSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnaW5wdXRfdXNlcm5hbWUnLCAkdmFsLAoJCQkJCSAgICAgJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ3VzZXJuYW1lZmxkbGVuZ3RoJyksCgkJCQkJICAgICAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgnbWF4X3VzZXJuYW1lbGVuZ3RoJykpOwogICAgYXJyYXlfcHVzaCggJHJvd2FycmF5LCAkb25lcm93ICk7CgogICAgLy8gYW5kIHBhc3N3b3JkCiAgICAkb25lcm93ID0gbmV3IFN0ZENsYXNzKCk7CiAgICAkb25lcm93LT5jb2xvciA9ICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9jb2xvcicsJ2JsdWUnKTsKICAgICRvbmVyb3ctPm1hcmtlciA9ICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9tYXJrZXInLCcqJyk7CiAgICAkb25lcm93LT5yZXF1aXJlZCA9IDE7CiAgICAkdmFsID0gKGlzc2V0KCRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10pKSA/ICRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10gOiAnJzsKICAgICRvbmVyb3ctPmhpZGRlbiA9IG15Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ2hpZGRlbl9wYXNzd29yZCcsCgkJCQkJICAgaW1wbG9kZSgiOyIsYXJyYXkoJ3Bhc3N3b3JkJywwLDMwLDIpKSk7CiAgICAkb25lcm93LT5wcm9tcHQgPSAkdGhpcy0+TGFuZygncGFzc3dvcmQnKTsKICAgICRvbmVyb3ctPmNvbnRyb2wgPSR0aGlzLT5DcmVhdGVJbnB1dFBhc3N3b3JkKCRpZCwgJ2lucHV0X3Bhc3N3b3JkJywgJHZhbCwgCgkJCQkJCSAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgncGFzc3dvcmRmbGRsZW5ndGgnKSwKCQkJCQkJICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdtYXhfcGFzc3dvcmRsZW5ndGgnKSk7CiAgICBhcnJheV9wdXNoKCAkcm93YXJyYXksICRvbmVyb3cgKTsKCiAgICAvLyBhbmQgbWFrZSBoaW0gcmVwZWF0IHRoZSBwYXNzd29yZAogICAgJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwogICAgJG9uZXJvdy0+Y29sb3IgPSAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfY29sb3InLCdibHVlJyk7CiAgICAkb25lcm93LT5tYXJrZXIgPSAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfbWFya2VyJywnKicpOwogICAgJG9uZXJvdy0+cmVxdWlyZWQgPSAxOwogICAgJHZhbCA9IChpc3NldCgkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddKSkgPyAkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddIDogJyc7CiAgICAkb25lcm93LT5oaWRkZW4gPSBteUNyZWF0ZUlucHV0SGlkZGVuKCAkaWQsICdoaWRkZW5fcmVwZWF0cGFzc3dvcmQnLAoJCQkJCSAgIGltcGxvZGUoIjsiLGFycmF5KCdyZXBlYXRwYXNzd29yZCcsMCwzMCwyKSkpOwogICAgJG9uZXJvdy0+cHJvbXB0ID0gJHRoaXMtPkxhbmcoJ3JlcGVhdHBhc3N3b3JkJyk7CiAgICAkb25lcm93LT5jb250cm9sID0kdGhpcy0+Q3JlYXRlSW5wdXRQYXNzd29yZCgkaWQsICdpbnB1dF9yZXBlYXRwYXNzd29yZCcsICR2YWwsIAoJCQkJCQkgJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ3Bhc3N3b3JkZmxkbGVuZ3RoJyksCgkJCQkJCSAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgnbWF4X3Bhc3N3b3JkbGVuZ3RoJykpOwogICAgYXJyYXlfcHVzaCggJHJvd2FycmF5LCAkb25lcm93ICk7CgogICAgJHJlbGF0aW9uczIgPSBhcnJheSgpOwogICAgZm9yZWFjaCggJHJlbGF0aW9ucyBhcyAkcmVsbiApCiAgICAgIHsKCSRkZWZuID0gJGZldXNlcnMtPkdldFByb3BlcnR5RGVmbiggJHJlbG5bJ25hbWUnXSApOwoJJHJlbG5bJ21hcHRvJ10gPSAkZGVmblsnbmFtZSddOwoJJHJlbG5bJ3Byb21wdCddID0gJGRlZm5bJ3Byb21wdCddOwoJaWYoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZWxmcmVnX2ZvcmNlX2VtYWlsX3R3aWNlJyApICkKCSAgewoJICAgICRyZWxhdGlvbnMyW10gPSAkcmVsbjsKCSAgICBpZiggJGRlZm5bJ3R5cGUnXSA9PSAyICkKCSAgICAgIHsKCQkvLyB0b2RvLCBjaGFuZ2Ugc29tZXRoaW5nIGhlcmUKCQkkcmVsblsnbmFtZSddID0gJHJlbG5bJ25hbWUnXS4nX2FnYWluJzsKCQkkcmVsblsnbWFwdG8nXSA9ICRkZWZuWyduYW1lJ107CgkJJHJlbG5bJ3Byb21wdCddID0gJGRlZm5bJ3Byb21wdCddLicgKCcuJHRoaXMtPkxhbmcoJ2FnYWluJykuJyknOwoJCSRyZWxhdGlvbnMyW10gPSAkcmVsbjsKCSAgICAgIH0KCSAgfQoJZWxzZQoJICB7CgkgICAgJHJlbGF0aW9uczJbXSA9ICRyZWxuOwoJICB9CiAgICAgIH0KCiAgICBmb3JlYWNoKCAkcmVsYXRpb25zMiBhcyAkcmVsbiApCiAgICB7CiAgICAgIC8vIGRvbid0IHByb2Nlc3MgaGlkZGVuIGZpZWxkcyBoZXJlCiAgICAgIGlmKCAkcmVsblsncmVxdWlyZWQnXSA9PSAzICkgY29udGludWU7CgogICAgICAvLyBnZXQgdGhlIHByb3BlcnR5IGRlZmluaXRpb24KICAgICAgJGRlZm4gPSAkZmV1c2Vycy0+R2V0UHJvcGVydHlEZWZuKCAkcmVsblsnbWFwdG8nXSApOwogICAgICAKICAgICAgJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwoKICAgICAgJGNvbG9yID0gJyc7CiAgICAgIGlmKCAkcmVsblsncmVxdWlyZWQnXSA9PSAyICkgJGNvbG9yID0gJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX2NvbG9yJywnYmx1ZScpOwogICAgICAkbWFya2VyID0gJyc7CiAgICAgIGlmKCAkcmVsblsncmVxdWlyZWQnXSA9PSAyICkgJG1hcmtlciA9ICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9tYXJrZXInLCcqJyk7CiAgICAgICRvbmVyb3ctPnJlcXVpcmVkID0gKCRyZWxuWydyZXF1aXJlZCddID09IDIpOwogICAgICAkb25lcm93LT5jb2xvciAgICA9ICRjb2xvcjsKICAgICAgJG9uZXJvdy0+bWFya2VyICAgPSAkbWFya2VyOwogICAgICAkb25lcm93LT5oaWRkZW4gPSBteUNyZWF0ZUlucHV0SGlkZGVuKCAkaWQsICdoaWRkZW5fJy4kcmVsblsnbmFtZSddLAoJCQkJCSAgICAgaW1wbG9kZSgiOyIsYXJyYXkoJHJlbG5bJ25hbWUnXSwkZGVmblsndHlwZSddLAoJCQkJCQkJICAgICAgICRkZWZuWydsZW5ndGgnXSwkcmVsblsncmVxdWlyZWQnXSkpKTsKCiAgICAgICR2YWwgPSBpc3NldCgkcGFyYW1zWydpbnB1dF8nLiRyZWxuWyduYW1lJ11dKSA/ICRwYXJhbXNbJ2lucHV0XycuJHJlbG5bJ25hbWUnXV0gOiAnJzsKICAgICAgJG9uZXJvdy0+cHJvbXB0ID0gJHJlbG5bJ3Byb21wdCddOwogICAgICBzd2l0Y2goICRkZWZuWyd0eXBlJ10gKQoJewoJY2FzZSAwOiAvLyB0ZXh0CgkgICRvbmVyb3ctPmNvbnRyb2wgPSAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsICdpbnB1dF8nLiRyZWxuWyduYW1lJ10sCgkJCQkJCSAgICAgJHZhbCwgJGRlZm5bJ2xlbmd0aCddLCAkZGVmblsnbWF4bGVuZ3RoJ10gKTsKCSAgYnJlYWs7CgoJY2FzZSAxOiAvLyBjaGVja2JveAoJICAkb25lcm93LT5jb250cm9sID0gbXlDcmVhdGVJbnB1dENoZWNrYm94KCAkaWQsICdpbnB1dF8nLiRyZWxuWyduYW1lJ10sIDEsICR2YWwgKTsKCSAgYnJlYWs7CgoJY2FzZSAyOiAvLyBlbWFpbAoJICAkb25lcm93LT5jb250cm9sID0gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnaW5wdXRfJy4kcmVsblsnbmFtZSddLAoJCQkJCQkgICAgICR2YWwsICRkZWZuWydsZW5ndGgnXSwgKCRkZWZuWydtYXhsZW5ndGgnXSkgKTsKCSAgYnJlYWs7CgoJY2FzZSAzOiAvLyB0ZXh0YXJlYQoJICAkb25lcm93LT5jb250cm9sID0gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCAkaWQsICR2YWwsICdpbnB1dF8nLiRyZWxuWyduYW1lJ10pOwoJICBicmVhazsKCgljYXNlIDQ6IC8vIGRyb3Bkb3duCgkgICRvbmVyb3ctPmNvbnRyb2wgPSAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93biggCgkJCQkJCQkkaWQsIAoJCQkJCQkJJ2lucHV0XycuJHJlbG5bJ25hbWUnXSwgCgkJCQkJCQkkZmV1c2Vycy0+R2V0U2VsZWN0T3B0aW9ucygkZGVmblsnbmFtZSddLCAxKSwgCgkJCQkJCQktMSwgCgkJCQkJCQkkdmFsKTsKCSAgYnJlYWs7Cgl9CgogICAgICBhcnJheV9wdXNoKCAkcm93YXJyYXksICRvbmVyb3cgKTsKICAgIH0KCiAgICAvLyBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdzdGFydGZvcm0nLAoJCQkgICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsICdyZWd1c2VyJywgJHJldHVybmlkLCAncG9zdCcsICcnLCB0cnVlKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQgKCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsJHRoaXMtPkxhbmcoJ3VzZXJfcmVnaXN0cmF0aW9uJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdncm91cF9pZCcsICRncnBpZCApLgoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdncm91cCcsICRwYXJhbXNbJ2dyb3VwJ10gKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NvbnRyb2xzJywgJHJvd2FycmF5KTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY29udHJvbGNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0JywKCQkJCQkJCSAgICAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY2FuY2VsJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdjYW5jZWwnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCdjYW5jZWwnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtc2dfc2VuZGFub3RoZXJlbWFpbCcsCgkJCSAgJHRoaXMtPkxhbmcoJ21zZ19zZW5kYW5vdGhlcmVtYWlsJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsaW5rX3NlbmRhbm90aGVyZW1haWwnLAoJCQkgICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCR0aGlzLT5MYW5nKCdjbGlja2hlcmUnKSwKCQkJCQkgICAgYXJyYXkoJ21vZGUnPT4nc2VuZGFub3RoZXJlbWFpbCcpLCcnLGZhbHNlLHRydWUpKTsKCiAgICAvLyB0b2RvLCBwdXQgdGhpcyBpbnRvIHRoZSBkYXRhYmFzZSBhbmQgbGV0IHRoZSBhZG1pbiBwbGF5IHdpdGggaXQuCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ3NlbGZyZWdfcmVnMXRlbXBsYXRlJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVXNlckRpc3BsYXlWZXJpZmljYXRpb25Gb3JtKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX1VzZXJEaXNwbGF5VmVyaWZpY2F0aW9uRm9ybSggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAkZmV1c2VycyA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwogICAgaWYoICEkZmV1c2VycyApCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgJHRoaXMtPkxhbmcoJ2Vycm9yX25vZmV1c2Vyc21vZHVsZScpKTsKCXJldHVybjsKICAgICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZXJyb3InXSApICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlcnJvcicsICRwYXJhbXNbJ2Vycm9yJ10pOwogICAgICB9CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ21lc3NhZ2UnXSApICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywgJHBhcmFtc1snbWVzc2FnZSddKTsKICAgICAgfQoKICAgICR1c2VybmFtZSA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddICkgKQogICAgICB7CgkkdXNlcm5hbWUgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10pOwogICAgICB9CiAgICAkcGFzc3dvcmQgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSApICkKICAgICAgewoJJHBhc3N3b3JkID0gdHJpbSgkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddKTsKICAgICAgfQogICAgJGNvZGUgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfY29kZSddICkgKQogICAgICB7CgkkY29kZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfY29kZSddKTsKICAgICAgfQogICAgJGdyb3VwX2lkID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2dyb3VwX2lkJ10gKSApCiAgICAgIHsKCSRncm91cF9pZCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfZ3JvdXBfaWQnXSk7CiAgICAgIH0KCiAgICAvLyBwcm9jZXNzIHRoZSB0ZW1wbGF0ZQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsCgkJCSAgJHRoaXMtPkxhbmcoJ3RpdGxlX3ZlcmlmeXJlZ2lzdHJhdGlvbicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3VzZXJuYW1lJywKCQkJICAkdGhpcy0+TGFuZygndXNlcm5hbWUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3VzZXJuYW1lJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfdXNlcm5hbWUnLAoJCQkJCQkgJHVzZXJuYW1lLCAKCQkJCQkJICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCd1c2VybmFtZWZsZGxlbmd0aCcpLAoJCQkJCQkgJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ21heF91c2VybmFtZWxlbmd0aCcpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9wYXNzd29yZCcsCgkJCSAgJHRoaXMtPkxhbmcoJ3Bhc3N3b3JkJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9wYXNzd29yZCcsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0UGFzc3dvcmQoJGlkLCdpbnB1dF9wYXNzd29yZCcsCgkJCQkJCSAgICAgJHBhc3N3b3JkLCAKCQkJCQkJICAgICAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgncGFzc3dvcmRmbGRsZW5ndGgnKSwKCQkJCQkJICAgICAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgnbWF4X3Bhc3N3b3JkbGVuZ3RoJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2NvZGUnLAoJCQkgICR0aGlzLT5MYW5nKCdjb2RlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jb2RlJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfY29kZScsCgkJCQkJCSAkY29kZSwgMzAsIDMwICkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3N1Ym1pdCcsJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY2FuY2VsJywkdGhpcy0+TGFuZygnY2FuY2VsJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywKCQkJICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ3ZlcmlmeXVzZXInLCAkcmV0dXJuaWQgKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJ2lucHV0X2dyb3VwX2lkJywgJGdyb3VwX2lkICkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywKCQkJICAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnc2VsZnJlZ19yZWcydGVtcGxhdGUnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBSZWdpc3RlclVzZXJTdGVwMSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9SZWdpc3RlclVzZXJTdGVwMSggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBnbG9iYWwgJGdDbXM7CgogICAgJGZldXNlcnMgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgIGlmKCAhJGZldXNlcnMgKQogICAgICB7CgkvLyB0aGlzIGlzIHVnbHkgZm9yIHRoZSB1c2VyIHRvIHNlZQoJLy8gYnV0IGF0IGxlYXN0IHRoZSBhZG1pbiB3aWxsIGJlIGFibGUgdG8gZmlndXJlIGl0IG91dAoJLy8gdGhpcyBzaG91bGRuJ3QgaGFwcGVuIG9uY2UgdGhlIHVzZXIgaGFzIHNlZW4gdGhlIGZvcm0uCgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJycsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcoJ2Vycm9yX25vZmV1c2Vyc21vZHVsZScpKTsKCXJldHVybjsKICAgICAgfQoKICAgICRjbXNtYWlsZXIgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0NNU01haWxlcicpOwogICAgaWYoICEkY21zbWFpbGVyICkKICAgICAgewoJLy8gdGhpcyBpcyB1Z2x5IGZvciB0aGUgdXNlciB0byBzZWUKCS8vIGJ1dCBhdCBsZWFzdCB0aGUgYWRtaW4gd2lsbCBiZSBhYmxlIHRvIGZpZ3VyZSBpdCBvdXQKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAnJywgJHJldHVybmlkLAoJCQkJICAkdGhpcy0+TGFuZygnZXJyb3Jfbm9mZXVzZXJzbW9kdWxlJykpOwoJcmV0dXJuOwogICAgICB9CgoKICAgIC8vIGNoZWNrIGZvciByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWydncm91cF9pZCddICkgKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJykpOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gQ2hlY2sgdG8gZW5zdXJlIGFsbCByZXF1aXJlZCBmaWVsZHMgaGF2ZSBzb21lIGNvbnRlbnQKICAgIC8vIGFuZCB2YWxpZGF0ZSBlbWFpbCBmaWVsZHMKICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsICkKICAgIHsKICAgICAgaWYoIHByZWdfbWF0Y2goICcvXmhpZGRlbl8vJywgJGtleSApICkKCXsKCSAgJHByb3BuYW1lID0gc3Vic3RyKCRrZXksc3RybGVuKCdoaWRkZW5fJykpOwoJICAkYXJyID0gc3BsaXQoIjsiLCRwYXJhbXNbJGtleV0pOwoJICAkcmVxdWlyZWQgPSAkYXJyWzNdOwoJICBpZiggJHJlcXVpcmVkID09IDIgJiYgCgkgICAgICAoIWlzc2V0KCRwYXJhbXNbJ2lucHV0XycuJHByb3BuYW1lXSkgfHwgJHBhcmFtc1snaW5wdXRfJy4kcHJvcG5hbWVdID09ICcnICkgKQoJICAgIHsKCSAgICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAgICAgJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX3JlcXVpcmVkZmllbGQnLCRwcm9wbmFtZSk7CgkgICAgICAkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJICAgIH0KCgkgIGlmKCAkYXJyWzFdID09ICcyJyApCgkgICAgewoJICAgICAgJHJlc3VsdCA9ICRmZXVzZXJzLT5Jc1ZhbGlkRW1haWxBZGRyZXNzKCAkcGFyYW1zWydpbnB1dF8nLiRwcm9wbmFtZV0sCgkJCQkJCSAgICAgICAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgnZG9fc210cF92YWxpZGF0ZV9lbWFpbCcpICk7CgkgICAgICBpZiggJHJlc3VsdFswXSA9PSBmYWxzZSApCgkJewoJCSAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkJICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmVzdWx0WzFdOwoJCSAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCQl9CgkgICAgfQoJfQogICAgfQoKCiAgICAvLyBnZXQgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZAogICAgJHVzZXJuYW1lID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10gKSApCiAgICAgIHsKCSR1c2VybmFtZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSk7CiAgICAgIH0KICAgICRwYXNzd29yZCA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddICkgKQogICAgICB7CgkkcGFzc3dvcmQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10pOwogICAgICB9CiAgICAkcmVwZWF0cGFzc3dvcmQgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcmVwZWF0cGFzc3dvcmQnXSApICkKICAgICAgewoJJHJlcGVhdHBhc3N3b3JkID0gdHJpbSgkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddKTsKICAgICAgfQoKICAgIC8vIGNoZWNrIGlmIHRoZSB1c2VybmFtZSBpcyB2YWxpZCBvciB0YWtlbgogICAgaWYoICR1c2VybmFtZSA9PSAnJyApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2VtcHR5dXNlcm5hbWUnKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KCiAgICBpZiggISRmZXVzZXJzLT5Jc1ZhbGlkVXNlcm5hbWUoICR1c2VybmFtZSApICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZHVzZXJuYW1lJyk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgJHVpZCA9ICR0aGlzLT5HZXRUZW1wVXNlcklEKCR1c2VybmFtZSk7CiAgICBpZiggJHVpZCAhPSBmYWxzZSApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX3VzZXJuYW1ldGFrZW4nKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KICAgIGlmKCAkZmV1c2Vycy0+R2V0VXNlcklEKCR1c2VybmFtZSkgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl91c2VybmFtZXRha2VuJyk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gY2hlY2sgaWYgdGhlIHBhc3N3b3JkcyBtYXRjaCBvciBpZiB0aGV5J3JlIHZhbGlkCiAgICBpZiggJHBhc3N3b3JkICE9ICRyZXBlYXRwYXNzd29yZCApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX3Bhc3N3b3Jkc2RvbnRtYXRjaCcpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfQogICAgJG1pbnB3bGVuID0gJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ21pbl9wYXNzd29yZGxlbmd0aCcpOwogICAgJG1heHB3bGVuID0gJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ21heF9wYXNzd29yZGxlbmd0aCcpOwogICAgaWYoIHN0cmxlbigkcGFzc3dvcmQpIDwgJG1pbnB3bGVuIHx8IHN0cmxlbigkcGFzc3dvcmQpID4gJG1heHB3bGVuICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZHBhc3N3b3JkJywKCQkJCQkgYXJyYXkoJG1pbnB3bGVuLCRtYXhwd2xlbikpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIGZpbmQgYW4gZW1haWwgZmllbGQuLi4gc29tZXRoaW5nIHRoYXQncyBuYW1lIGhhcyBlbWFpbCBpbiBpdAogICAgLy8gb3IgaXMgb2YgdHlwZSAyCiAgICAkZW1haWxfZmllbGQgPSAnJzsKICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsICkKICAgIHsKICAgICAgaWYoIHByZWdfbWF0Y2goICcvXmhpZGRlbl8vJywgJGtleSApICkKCXsKCSAgJHByb3BuYW1lID0gc3Vic3RyKCRrZXksc3RybGVuKCdoaWRkZW5fJykpOwoJICAkYXJyID0gc3BsaXQoIjsiLCRwYXJhbXNbJGtleV0pOwoKCSAgaWYoIHByZWdfbWF0Y2goJy9lbWFpbC9pJywkYXJyWzBdKSB8fCAkYXJyWzFdID09IDIgKQoJICAgIHsKCSAgICAgIC8vIGZvdW5kIHNvbWV0aGluZyByZXNlbWJsaW5nIGFuIGVtYWlsIGZpZWxkCgkgICAgICAkZW1haWxfZmllbGQgPSAnaW5wdXRfJy4kcHJvcG5hbWU7CgkgICAgICBicmVhazsKCSAgICB9Cgl9CiAgICB9ICAgIAogICAgaWYoICRlbWFpbF9maWVsZCA9PSAnJyApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vZW1haWxhZGRyZXNzJyk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgaWYoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZWxmcmVnX2ZvcmNlX2VtYWlsX3R3aWNlJykgKQogICAgICB7CglpZiggIWlzc2V0KCRwYXJhbXNbJGVtYWlsX2ZpZWxkLidfYWdhaW4nXSApICkKCSAgewoJICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9ub3NlY29uZGVtYWlsYWRkcmVzcycpOwoJICAgICR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CgkgICAgcmV0dXJuOwoJICB9CgoJaWYoICRwYXJhbXNbJGVtYWlsX2ZpZWxkXSAhPSAkcGFyYW1zWyRlbWFpbF9maWVsZC4nX2FnYWluJ10gKQoJICB7CgkgICAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkgICAgJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2VtYWlsZG9lc25vdG1hdGNoJyk7CgkgICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCSAgICByZXR1cm47CgkgIH0KICAgICAgfQoKCiAgICAvLyBnZW5lcmF0ZSBhIHVuaXF1ZSBjb2RlIHRoYXQgdGhlIHVzZXIgY2FuIGVudGVyIHRvIGRvdWJsZSBjb25maXJtCiAgICAvLyBoaXMgbG9naW4uCiAgICAkY29kZSA9ICRmZXVzZXJzLT5HZW5lcmF0ZVJhbmRvbVByaW50YWJsZVN0cmluZygpOwoKICAgIC8vIGhhdmUgdG8gYWRkIHRoZSByZWNvcmQgdG8gdGhlIGRhdGFiYXNlIHNvIHRoYXQgd2Uga25vdyB3aG8gdGhpcyBndXkgaXMKICAgIC8vIHdoZW4gaGUgY29tZXMgYmFjawogICAgJHJldHVybiA9ICR0aGlzLT5DcmVhdGVUZW1wVXNlciggJHBhcmFtc1snZ3JvdXBfaWQnXSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjb2RlICk7CiAgICBpZiggJHJldHVyblswXSA9PSBmYWxzZSApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHJldHVyblsxXTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBhbmQgYWRkIGhpcyBwcm9wZXJ0aWVzIHRvbwogICAgLy8gYnV0IGZpcnN0IHdlIHJlbW92ZSB0aGUgb25lcyB3ZSd2ZSBoYW5kbGVkIGFscmVhZHkKICAgICR0bXB1aWQgPSAkcmV0dXJuWzFdOwogICAgdW5zZXQoJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSApOwogICAgdW5zZXQoJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSApOwogICAgdW5zZXQoJHBhcmFtc1snaW5wdXRfcmVwZWF0cGFzc3dvcmQnXSApOwogICAgdW5zZXQoJHBhcmFtc1snaGlkZGVuX3VzZXJuYW1lJ10gKTsKICAgIHVuc2V0KCRwYXJhbXNbJ2hpZGRlbl9wYXNzd29yZCddICk7CiAgICB1bnNldCgkcGFyYW1zWydoaWRkZW5fcmVwZWF0cGFzc3dvcmQnXSApOwogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWwgKQogICAgewogICAgICBpZiggcHJlZ19tYXRjaCggJy9eaGlkZGVuXy8nLCAka2V5ICkgKQoJewoJICAkcHJvcG5hbWUgPSBzdWJzdHIoJGtleSxzdHJsZW4oJ2hpZGRlbl8nKSk7CgkgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ2lucHV0XycuJHByb3BuYW1lXSApICkgCgkgICAgewoJICAgICAgY29udGludWU7CgkgICAgfQoJICAkcmV0dXJuID0gJHRoaXMtPkFkZFRlbXBVc2VyUHJvcGVydHkoICR0bXB1aWQsICRwcm9wbmFtZSwgCgkJCQkJCSRwYXJhbXNbJ2lucHV0XycuJHByb3BuYW1lXSApOwoJICBpZiggJHJldHVyblswXSA9PSBmYWxzZSApCgkgICAgewoJICAgICAgLy8gbm93IHdlIGhhdmUgYW4gaXNzdWUgdG8gZmlndXJlIG91dAoJICAgICAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkgICAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmV0dXJuWzFdOwoJICAgICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCSAgICAgIHJldHVybjsKCSAgICB9Cgl9CiAgICB9CgogICAgaWYoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlX2VtYWlsX2NvbmZpcm1hdGlvbicsMSkgKQogICAgICB7CgkvLyBva2F5LCB3ZSdyZSBub3cgcmVhZHkgdG8gc2VuZCB0aGUgZW1haWwsIHlhaG9vLCB5YWhvbywgeWFob28KCS8vIG5vdyB3ZSBoYXZlIHRvIGRlY2lkZSB3aGF0IGdvZXMgaW4gaXQuCgkkdGhpcy0+X1NlbmRVc2VyQ29uZmlybWF0aW9uRW1haWwoJGlkLCRyZXR1cm5pZCwkcGFyYW1zWyRlbWFpbF9maWVsZF0sCgkJCQkJICAkdXNlcm5hbWUsICRwYXJhbXNbJ2dyb3VwX2lkJ10sICRjb2RlICk7CgkKCS8vIHNlbmQgYW4gZXZlbnQKCSR0aGlzLT5TZW5kRXZlbnQoJ29uTmV3VXNlcicsCgkJCSBhcnJheSgndXNlcm5hbWUnPT4kdXNlcm5hbWUsCgkJCSAgICAgICAnZW1haWwnPT4kcGFyYW1zWyRlbWFpbF9maWVsZF0pKTsKCgkvLyB3ZSdyZSBub3QgcmVkaXJlY3RpbmcgYW55d2hlcmUgd2UgbmVlZCB0byBkaXNwbGF5IHNvbWUgbmljZSBtZXNzYWdlCgkvLyBhYm91dCB3ZSBqdXN0IHNwYW1tZWQgeW91ciBpbmJveCwgZXRjLCBldGMuCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3NpdGVuYW1lJywgJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3VzZXJuYW1lJywkdXNlcm5hbWUpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbWFpbCcsICRhZGRyZXNzICk7CgllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ3NlbGZyZWdfcG9zdHJlZzFfdGVtcGxhdGUnKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkvLyBpdCBhcHBlYXJzIHdlJ3JlIGFsbG93aW5nIGluc3RhbnQgcmVnaXN0cmF0aW9uCgkkcmVzdWx0ID0gJHRoaXMtPl9DcmVhdGVGcm9udGVuZFVzZXIoICR0bXB1aWQsICRwYXJhbXNbJ2dyb3VwX2lkJ10sCgkJCQkgICAkdXNlcm5hbWUsICRwYXNzd29yZCApOwoJCglpZiggJHJlc3VsdCAhPSAnJyApCgkgIHsKCSAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmVzdWx0OwoJICAgICR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CgkgIH0KCgkvLyB3b29ob29vLCB0aGUgdXNlciBiZSBjcmVhdGVkIChob3BlZnVsbHkpLgoJLy8gZGVsZXRlIHRoZSByZWNvcmRzIGZyb20gdGhlIFNlbGZSZWcgdGFibGVzCgkkdGhpcy0+RGVsZXRlVGVtcFVzZXJQcm9wZXJ0aWVzKCAkdG1wdWlkICk7CgkkdGhpcy0+RGVsZXRlVGVtcFVzZXIoICR0bXB1aWQgKTsKICAgICAgfQogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgU2VuZEFub3RoZXJFbWFpbCgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9TZW5kQW5vdGhlclJlZ0VtYWlsKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIC8vIHdlIGhhdmUgdGhlIHVzZXJuYW1lICh0aGVvcmV0aWNhbGx5KSBpbiB0aGUgJHBhcmFtcwogICAgaWYoICFpc3NldCggJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSApICkKICAgICAgewoJJHBhcm1zWydtb2RlJ10gPSAnc2VuZGFub3RoZXJlbWFpbCc7CgkkcGFybXNbJ2Vycm9yJ10gPSAxOwoJJHBhcm1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJyk7CgkkcGFybXNbJ21vZGUnXSA9ICdzZW5kYW5vdGhlcmVtYWlsJzsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFybXMgKTsKCXJldHVybjsKICAgICAgfQogICAgJHVzZXJuYW1lID0gJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXTsKCiAgICAvLyBsb29rIHVwIHRoZSB1c2VybmFtZSBhbmQgZ2V0IGFuIGlkCiAgICAkdGVtcHVzZXJpZCA9ICR0aGlzLT5HZXRUZW1wVXNlcklEKCAkdXNlcm5hbWUgKTsKICAgIGlmKCAhJHRlbXB1c2VyaWQgKQogICAgICB7CgkkcGFybXNbJ2Vycm9yJ10gPSAxOwoJJHBhcm1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfdXNlcm5vdGZvdW5kJykuIigyKSI7CgkkcGFybXNbJ21vZGUnXSA9ICdzZW5kYW5vdGhlcmVtYWlsJzsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFybXMgKTsKCXJldHVybjsgCiAgICAgIH0KCiAgICAvLyBhbmQgd2hhdGV2ZXIgZGV0YWlscyB3ZSBjYW4gZnJvbSB0aGUgdXNlcnMgdGFibGUKICAgICRkZXRhaWxzID0gJHRoaXMtPkdldFRlbXBVc2VyRGV0YWlscyggJHRlbXB1c2VyaWQgKTsKICAgIGlmKCAkZGV0YWlscyA9PSBmYWxzZSApCiAgICAgIHsKCSRwYXJtc1snZXJyb3InXSA9IDE7CgkkcGFybXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl91c2Vybm90Zm91bmQnKTsKCSRwYXJtc1snbW9kZSddID0gJ3NlbmRhbm90aGVyZW1haWwnOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJtcyApOwoJcmV0dXJuOyAKICAgICAgfQoKICAgIC8vIG5vdyBnZXQgcHJvcGVydGllcwogICAgJHRlbXB1c2VycHJvcHMgPSAkdGhpcy0+R2V0VGVtcFVzZXJQcm9wZXJ0aWVzKCAkdGVtcHVzZXJpZCApOwogICAgaWYoICR0ZW1wdXNlcnByb3BzID09IGZhbHNlICkKICAgICAgewoJJHBhcm1zWydlcnJvciddID0gMTsKCSRwYXJtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vcHJvcGVydGllcycpOwoJJHBhcm1zWydtb2RlJ10gPSAnc2VuZGFub3RoZXJlbWFpbCc7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcm1zICk7CglyZXR1cm47IAogICAgICB9CgogICAgJGZldXNlcnMgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgIGlmKCAhJGZldXNlcnMgKQogICAgICB7CgkkcGFybXNbJ2Vycm9yJ10gPSAxOwoJJHBhcm1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3Jfbm9mZXVzZXJzbW9kdWxlJyk7CgkkcGFybXNbJ21vZGUnXSA9ICdzZW5kYW5vdGhlcmVtYWlsJzsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFybXMgKTsKCXJldHVybjsgCiAgICAgIH0KCiAgICAvLyBoYXZlIHRoZSBncm91cCBpZCwgZ2V0IHRoZSBncm91cCBwcm9wZXJ0eSByZWxhdGlvbnMKICAgICRyZWxhdGlvbnMgPSAkZmV1c2Vycy0+R2V0R3JvdXBQcm9wZXJ0eVJlbGF0aW9ucyggJGRldGFpbHNbJ2dyb3VwX2lkJ10gKTsKICAgIGlmKCAkcmVsYXRpb25zWzBdID09IGZhbHNlICkKICAgICAgewoJJHBhcm1zWydlcnJvciddID0gMTsKCSRwYXJtc1snbWVzc2FnZSddID0gJHJlbGF0aW9uc1sxXTsKCSRwYXJtc1snbW9kZSddID0gJ3NlbmRhbm90aGVyZW1haWwnOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJtcyApOwoJcmV0dXJuOyAKICAgICAgfQoKICAgICRwcm9wcyA9ICRmZXVzZXJzLT5HZXRQcm9wZXJ0eURlZm5zKCk7CiAgICBpZiggJHByb3BzID09IGZhbHNlICkKICAgICAgewoJJHBhcm1zWydlcnJvciddID0gMTsKCSRwYXJtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2RiZXJyb3InKTsKCSRwYXJtc1snbW9kZSddID0gJ3NlbmRhbm90aGVyZW1haWwnOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJtcyApOwoJcmV0dXJuOyAKICAgICAgfQoKICAgIC8vIG5vdyBmaW5kIGFuIGVtYWlsIGFkZHJlc3MgcHJvcGVydHkKICAgIC8vIGFuZCBtYWtlIHN1cmUgaXQncyBvZiB0eXBlIDIKICAgICRmb3VuZCA9ICcnOwogICAgZm9yZWFjaCggJHJlbGF0aW9ucyBhcyAkcmVsbiApCiAgICAgIHsKCWZvcmVhY2goICRwcm9wcyBhcyAkcHJvcCApCgkgIHsKCSAgICBpZiggJHByb3BbJ3R5cGUnXSA9PSAyICYmICRyZWxuWyduYW1lJ10gPT0gJHByb3BbJ25hbWUnXSApCgkgICAgICB7CgkJLy8gZm91bmQgYW4gZW1haWwgcHJvcGVydHkKCQlmb3JlYWNoKCAkdGVtcHVzZXJwcm9wcyBhcyAkdGVtcHByb3AgKQoJCSAgewoJCSAgICBpZiggJHJlbG5bJ25hbWUnXSA9PSAkdGVtcHByb3BbJ3RpdGxlJ10gKQoJCSAgICAgIHsKCQkJJGZvdW5kID0gJHRlbXBwcm9wWydkYXRhJ107CgkJCWJyZWFrOwoJCSAgICAgIH0KCQkgIH0KCSAgICAgIH0KCSAgICBpZiggJGZvdW5kICE9ICcnICkKCSAgICAgIHsKCQlicmVhazsKCSAgICAgIH0KCSAgfQoJaWYoICRmb3VuZCAhPSAnJyApCgkgIHsKCSAgICBicmVhazsKCSAgfQogICAgICB9CiAgICBpZiggISRmb3VuZCApCiAgICAgIHsKCSRwYXJtc1snZXJyb3InXSA9IDE7CgkkcGFybXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9ub2VtYWlsYWRkcmVzcycpOwoJJHBhcm1zWydtb2RlJ10gPSAnc2VuZGFub3RoZXJlbWFpbCc7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcm1zICk7CglyZXR1cm47IAogICAgICB9CgogICAgJHRoaXMtPl9TZW5kVXNlckNvbmZpcm1hdGlvbkVtYWlsKCAkaWQsJHJldHVybmlkLCRmb3VuZCwgJHVzZXJuYW1lLCAkZGV0YWlsc1snZ3JvdXBfaWQnXSwKCQkJCSAgICAgICAkZGV0YWlsc1snY29kZSddICk7CgogICAgLy8gd2UncmUgbm90IHJlZGlyZWN0aW5nIGFueXdoZXJlIHdlIG5lZWQgdG8gZGlzcGxheSBzb21lIG5pY2UgbWVzc2FnZQogICAgLy8gYWJvdXQgd2UganVzdCBzcGFtbWVkIHlvdXIgaW5ib3gsIGV0YywgZXRjLgogICAgZ2xvYmFsICRnQ21zOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzaXRlbmFtZScsICRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10pOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd1c2VybmFtZScsJHVzZXJuYW1lKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW1haWwnLCAkZm91bmQgKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnc2VsZnJlZ19wb3N0X3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnKTsKICB9ICAKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgU2VuZFVzZXJDb25maXJtYXRpb25FbWFpbCgkYWRkcmVzcywkdXNlcm5hbWUsJGdyb3VwX2lkLCRjb2RlKTsKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfU2VuZFVzZXJDb25maXJtYXRpb25FbWFpbCgkaWQsJHJldHVybmlkLCRhZGRyZXNzLCR1c2VybmFtZSwkZ3JvdXBfaWQsJGNvZGUpCiAgewogICAgZ2xvYmFsICRnQ21zOwogICAgJGNtc21haWxlciA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnQ01TTWFpbGVyJyk7CiAgICBpZiggISRjbXNtYWlsZXIgKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAkY21zbWFpbGVyLT5BZGRBZGRyZXNzKCAkYWRkcmVzcyApOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCduYW1lJywkdXNlcm5hbWUpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjb2RlJywkY29kZSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3NpdGVuYW1lJywgJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXSk7CiAgICAkcGFybXMgPSBhcnJheSggJ21vZGUnID0+ICd2ZXJpZnknLAoJCSAgICAnaW5wdXRfdXNlcm5hbWUnID0+ICR1c2VybmFtZSwKCQkgICAgJ2lucHV0X2dyb3VwX2lkJyA9PiAkZ3JvdXBfaWQsCgkJICAgICdpbnB1dF9jb2RlJyA9PiAkY29kZSApOwogICAgJHVybCA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCcnLCRwYXJtcywnJyx0cnVlLHRydWUpOwogICAgJHNtYWxsdXJsID0gJHRoaXMtPkNyZWF0ZUxpbmsoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICcnLCBhcnJheSgnbW9kZScgPT4gJ3ZlcmlmeScpLCcnLHRydWUsIHRydWUpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd1cmwnLCR1cmwpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzbWFsbHVybCcsJHNtYWxsdXJsKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignbGluaycsJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0JywkcmV0dXJuaWQsJHVybCwkcGFybXMsJycsZmFsc2UsdHJ1ZSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzbWFsbGxpbmsnLCR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCRzbWFsbHVybCxhcnJheSgnbW9kZSc9Pid2ZXJpZnknKSwnJyxmYWxzZSx0cnVlKSk7CiAgICAkaHRtbGJvZHkgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdzZWxmcmVnX2VtYWlsY29uZmlybV90ZW1wbGF0ZScpOwogICAgJHRleHRib2R5ID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnc2VsZnJlZ19lbWFpbGNvbmZpcm1fdGV4dHRlbXBsYXRlJyk7CiAgICAkY21zbWFpbGVyLT5TZXRCb2R5KCAkdGV4dGJvZHkgKTsKICAgIGlmKCAkaHRtbGJvZHkgIT0gJycgKQogICAgICB7CgkkY21zbWFpbGVyLT5Jc0hUTUwodHJ1ZSk7ICAvLyB3ZSdyZSBzZW5kaW5nIGFuIGh0bWwgbWFpbAoJJGNtc21haWxlci0+U2V0Qm9keSggJGh0bWxib2R5ICk7CgkkY21zbWFpbGVyLT5TZXRBbHRCb2R5KCAkdGV4dGJvZHkgKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkkY21zbWFpbGVyLT5Jc0hUTUwoZmFsc2UpOyAgLy8gd2UncmUgc2VuZGluZyBhbiBodG1sIG1haWwKCSRjbXNtYWlsZXItPlNldEJvZHkoICR0ZXh0Ym9keSApOwogICAgICB9CiAgICAkY21zbWFpbGVyLT5TZXRTdWJqZWN0KCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZWxmcmVnX2VtYWlsY29uZmlybV9zdWJqZWN0JywkdGhpcy0+TGFuZygncmVnaXN0cmF0aW9uX2NvbmZpcm1hdGlvbicpKSk7CiAgICAkY21zbWFpbGVyLT5TZW5kKCk7CgogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgU2V0QWRtaW5QcmVmZXJlbmNlcygkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9TZXRBZG1pblByZWZlcmVuY2VzKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcmVtb3ZlYWxsJ10gKSApCiAgICAgIHsKCSR0aGlzLT5FeHBpcmVPbGRUZW1wVXNlcnMoJy01IHllYXJzJyk7CglyZXR1cm47CiAgICAgIH0KCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3JlbW92ZTF3ZWVrJ10gKSApCiAgICAgIHsKCSR0aGlzLT5FeHBpcmVPbGRUZW1wVXNlcnMoJy0xIHdlZWsnKTsKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAncHJlZnMnKTsKICAgICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcmVtb3ZlMW1vbnRoJ10gKSApCiAgICAgIHsKCSR0aGlzLT5FeHBpcmVPbGRUZW1wVXNlcnMoJy0xIG1vbnRoJyk7CgkkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ3ByZWZzJyk7CiAgICAgIH0KCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3JlbW92ZTFtb250aCddICkgKQogICAgICB7CgkkdGhpcy0+RXhwaXJlT2xkVGVtcFVzZXJzKCctMjQgaG91cnMnKTsKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAncHJlZnMnKTsKICAgICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfbGlzdDFkYXknXSApICkKICAgICAgewoJIyBjcmVhdGUgYSBjc3YgZmlsZSBmb3IgdGVtcCB1c2VycyB0aGF0IGhhdmUKCSMgYmVlbiBpbiB0aGVyZSBtb3JlIHRoYW4gb25lIGRheQoJJHJlc3VsdCA9ICR0aGlzLT5DU1ZPbGRUZW1wVXNlcnMoJy0yNCBob3VycycpOwoJaWYoICRyZXN1bHQgPT0gJycgKQoJICB7CgkgICAgZWNobyAiPGgzPk5vIHJlc3VsdHMgcmV0dXJuZWQ8L2gzPiI7CgkgICAgcmV0dXJuOwoJICB9CgloZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTsKCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9mb3JjZS1kb3dubG9hZCcpOwoJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT10cmFwcGVkaW5zZWxmcmVnLmNzdicpOwoJd2hpbGUoQG9iX2VuZF9jbGVhbigpKTsKCWVjaG8gJHJlc3VsdDsKCWV4aXQoKTsKICAgICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfbm90aWZ5J10gKSApCiAgICAgIHsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdub3RpZnlfb25fcmVnaXN0cmF0aW9uJywKCQkJICAgICAkcGFyYW1zWydpbnB1dF9ub3RpZnknXSk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ25vdGlmeV9vbl9yZWdpc3RyYXRpb24nLCAwKTsKICAgICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfZW1haWxfY29uZmlybWF0aW9uJ10gKSApCiAgICAgIHsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdyZXF1aXJlX2VtYWlsX2NvbmZpcm1hdGlvbicsCgkJCSAgICAgJHBhcmFtc1snaW5wdXRfZW1haWxfY29uZmlybWF0aW9uJ10pOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdyZXF1aXJlX2VtYWlsX2NvbmZpcm1hdGlvbicsIDApOwogICAgICB9CgogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9jb25maXJtbWFpbF90byddICkgKQogICAgICB7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnc2VuZF9lbWFpbHNfdG8nLAoJCQkgICAgICRwYXJhbXNbJ2lucHV0X2NvbmZpcm1tYWlsX3RvJ10pOwogICAgICB9CgogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9mb3JjZV9lbWFpbF90d2ljZSddICkgKQogICAgICB7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnc2VsZnJlZ19mb3JjZV9lbWFpbF90d2ljZScsIDEpOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzZWxmcmVnX2ZvcmNlX2VtYWlsX3R3aWNlJywgMCk7CiAgICAgIH0KCiAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCAkaWQsICdwcmVmZXJlbmNlcycgKTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFNldEFkbWluUmVnMVRlbXBsYXRlKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX1NldEFkbWluUmVnMVRlbXBsYXRlKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZGVmYXVsdGJ1dHRvbiddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX3JlZzF0ZW1wbGF0ZScsCgkJCSAgICAkdGhpcy0+ZGZsdF9yZWdpc3RyYXRpb24xX3RlbXBsYXRlICk7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX3Bvc3RyZWcxX3RlbXBsYXRlJywKCQkJICAgICR0aGlzLT5kZmx0X3Bvc3RyZWcxX3RlbXBsYXRlICk7CiAgICAgIH0KICAgIGVsc2UgaWYoIGlzc2V0KCAkcGFyYW1zWydyZWcxX3RlbXBsYXRlY29udGVudCddICkgfHwKCSAgICAgaXNzZXQoICRwYXJhbXNbJ3Bvc3RyZWcxX3RlbXBsYXRlY29udGVudCddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX3JlZzF0ZW1wbGF0ZScsCgkJCSAgICAkcGFyYW1zWydyZWcxX3RlbXBsYXRlY29udGVudCddICk7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX3Bvc3RyZWcxX3RlbXBsYXRlJywKCQkJICAgICRwYXJhbXNbJ3Bvc3RyZWcxX3RlbXBsYXRlY29udGVudCddICk7CiAgICAgIH0KICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ3JlZzF0ZW1wbGF0ZScgKTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFNldEFkbWluUmVnMlRlbXBsYXRlKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX1NldEFkbWluUmVnMlRlbXBsYXRlKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZGVmYXVsdGJ1dHRvbiddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX3JlZzJ0ZW1wbGF0ZScsCgkJCSAgICAkdGhpcy0+ZGZsdF9yZWdpc3RyYXRpb24yX3RlbXBsYXRlICk7CiAgICAgIH0KICAgIGVsc2UgaWYoIGlzc2V0KCAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQnXSApICkKICAgICAgewoJJHRoaXMtPlNldFRlbXBsYXRlKCAnc2VsZnJlZ19yZWcydGVtcGxhdGUnLAoJCQkgICAgJHBhcmFtc1sndGVtcGxhdGVjb250ZW50J10gKTsKICAgICAgfQogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYiggJGlkLCAncmVnMnRlbXBsYXRlJyApOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFNldEFkbWluRW1haWxDb25maXJtYXRpb25UZW1wbGF0ZSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9TZXRBZG1pbkVtYWlsQ29uZmlybVRlbXBsYXRlKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZGVmYXVsdGJ1dHRvbiddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX2VtYWlsY29uZmlybV90ZW1wbGF0ZScsCgkJCSAgICAkdGhpcy0+ZGZsdF9lbWFpbGNvbmZpcm1fdGVtcGxhdGUgKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfZW1haWxjb25maXJtX3RleHR0ZW1wbGF0ZScsCgkJCSAgICAkdGhpcy0+ZGZsdF9lbWFpbGNvbmZpcm1fdGV4dHRlbXBsYXRlICk7CiAgICAgIH0KICAgIGVsc2UgCiAgICAgIHsKCSRodG1sdGVtcGxhdGUgPSAnJzsKCWlmKCBpc3NldCggJHBhcmFtc1sndGVtcGxhdGVjb250ZW50J10gKSApCgkgIHsKCSAgICAkaHRtbHRlbXBsYXRlID0gJHBhcmFtc1sndGVtcGxhdGVjb250ZW50J107CgkgIH0KCSR0ZXh0dGVtcGxhdGUgPSAnJzsKCWlmKCBpc3NldCggJHBhcmFtc1sndGV4dHRlbXBsYXRlY29udGVudCddICkgKQoJICB7CgkgICAgJHRleHR0ZW1wbGF0ZSA9ICRwYXJhbXNbJ3RleHR0ZW1wbGF0ZWNvbnRlbnQnXTsKCSAgfQoJJHN1YmplY3QgPSAnJzsKCWlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfc3ViamVjdCddICkgKQoJICB7CgkgICAgJHN1YmplY3QgPSAkcGFyYW1zWydpbnB1dF9zdWJqZWN0J107CgkgIH0KCWlmKCAkc3ViamVjdCA9PSAnJyApCgkgIHsKCSAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCRwYXJhbXMsJHJldHVybmlkLAoJCQkJICAgICAkdGhpcy0+TGFuZygnZXJyb3JfbXVzdHNwZWNpZnlzdWJqZWN0JykpOwoJICAgIHJldHVybjsKCSAgfQoJaWYoICR0ZXh0dGVtcGxhdGUgPT0gJycgKQoJICB7CgkgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwkcGFyYW1zLCRyZXR1cm5pZCwKCQkJCSAgICAgJHRoaXMtPkxhbmcoJ2Vycm9yX211c3RzcGVjaWZ5dGV4dHRlbXBsYXRlJykpOwoJICAgIHJldHVybjsKCSAgfQoKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfZW1haWxjb25maXJtX3RlbXBsYXRlJywKCQkJICAgICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddICk7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX2VtYWlsY29uZmlybV90ZXh0dGVtcGxhdGUnLAoJCQkgICAgJHBhcmFtc1sndGV4dHRlbXBsYXRlY29udGVudCddICk7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSggJ3NlbGZyZWdfZW1haWxjb25maXJtX3N1YmplY3QnLAoJCQkgICAgICAkcGFyYW1zWydpbnB1dF9zdWJqZWN0J10gKTsKCQogICAgICB9CiAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCAkaWQsICdlbWFpbGNvbmZpcm1fdGVtcGxhdGUnICk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgU2V0QWRtaW5GaW5hbE1lc3NhZ2VUZW1wbGF0ZSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9TZXRBZG1pbkZpbmFsTWVzc2FnZVRlbXBsYXRlKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZGVmYXVsdGJ1dHRvbiddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX2ZpbmFsbWVzc2FnZV90ZW1wbGF0ZScsCgkJCSAgICAkdGhpcy0+ZGZsdF9maW5hbG1lc3NhZ2VfdGVtcGxhdGUgKTsKICAgICAgfQogICAgZWxzZSBpZiggaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX2ZpbmFsbWVzc2FnZV90ZW1wbGF0ZScsCgkJCSAgICAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQnXSApOwogICAgICB9CiAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCAkaWQsICdmaW5hbG1lc3NhZ2VfdGVtcGxhdGUnICk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgU2V0QWRtaW5FbWFpbENvbmZpcm1hdGlvblRlbXBsYXRlKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX1NldEFkbWluRW1haWxVc2VyRWRpdGVkVGVtcGxhdGUoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydkZWZhdWx0YnV0dG9uJ10gKSApCiAgICAgIHsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfZW1haWx1c2VyZWRpdGVkX3RlbXBsYXRlJywKCQkJICAgICR0aGlzLT5kZmx0X2VtYWlsdXNlcmVkaXRlZF90ZW1wbGF0ZSApOwoJJHRoaXMtPlNldFRlbXBsYXRlKCAnc2VsZnJlZ19lbWFpbHVzZXJlZGl0ZWRfdGV4dHRlbXBsYXRlJywKCQkJICAgICR0aGlzLT5kZmx0X2VtYWlsdXNlcmVkaXRlZF90ZXh0dGVtcGxhdGUgKTsKICAgICAgfQogICAgZWxzZSAKICAgICAgewoJJGh0bWx0ZW1wbGF0ZSA9ICcnOwoJaWYoIGlzc2V0KCAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQnXSApICkKCSAgewoJICAgICRodG1sdGVtcGxhdGUgPSAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQnXTsKCSAgfQoJJHRleHR0ZW1wbGF0ZSA9ICcnOwoJaWYoIGlzc2V0KCAkcGFyYW1zWyd0ZXh0dGVtcGxhdGVjb250ZW50J10gKSApCgkgIHsKCSAgICAkdGV4dHRlbXBsYXRlID0gJHBhcmFtc1sndGV4dHRlbXBsYXRlY29udGVudCddOwoJICB9Cgkkc3ViamVjdCA9ICcnOwoJaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9zdWJqZWN0J10gKSApCgkgIHsKCSAgICAkc3ViamVjdCA9ICRwYXJhbXNbJ2lucHV0X3N1YmplY3QnXTsKCSAgfQoJaWYoICRzdWJqZWN0ID09ICcnICkKCSAgewoJICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsJHBhcmFtcywkcmV0dXJuaWQsCgkJCQkgICAgICR0aGlzLT5MYW5nKCdlcnJvcl9tdXN0c3BlY2lmeXN1YmplY3QnKSk7CgkgICAgcmV0dXJuOwoJICB9CglpZiggJHRleHR0ZW1wbGF0ZSA9PSAnJyApCgkgIHsKCSAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCRwYXJhbXMsJHJldHVybmlkLAoJCQkJICAgICAkdGhpcy0+TGFuZygnZXJyb3JfbXVzdHNwZWNpZnl0ZXh0dGVtcGxhdGUnKSk7CgkgICAgcmV0dXJuOwoJICB9CgoJJHRoaXMtPlNldFRlbXBsYXRlKCAnc2VsZnJlZ19lbWFpbHVzZXJlZGl0ZWRfdGVtcGxhdGUnLAoJCQkgICAgJHBhcmFtc1sndGVtcGxhdGVjb250ZW50J10gKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfZW1haWx1c2VyZWRpdGVkX3RleHR0ZW1wbGF0ZScsCgkJCSAgICAkcGFyYW1zWyd0ZXh0dGVtcGxhdGVjb250ZW50J10gKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCAnc2VsZnJlZ19lbWFpbHVzZXJlZGl0ZWRfc3ViamVjdCcsCgkJCSAgICAgICRwYXJhbXNbJ2lucHV0X3N1YmplY3QnXSApOwoJCiAgICAgIH0KICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ2VtYWlsdXNlcmVkaXRlZF90ZW1wbGF0ZScgKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBTZXRBZG1pblNldEFub3RoZXJFbWFpbFRlbXBsYXRlKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX1NldEFkbWluU2VuZEFub3RoZXJFbWFpbFRlbXBsYXRlKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZGVmYXVsdGJ1dHRvbiddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnLAoJCQkgICAgJHRoaXMtPmRmbHRfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZSApOwoJJHRoaXMtPlNldFRlbXBsYXRlKCAnc2VsZnJlZ19wb3N0X3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnLAoJCQkgICAgJHRoaXMtPmRmbHRfcG9zdF9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlICk7CiAgICAgIH0KICAgIGVsc2UgaWYoIGlzc2V0KCAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQnXSApICkKICAgICAgewoJJHRoaXMtPlNldFRlbXBsYXRlKCAnc2VsZnJlZ19zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJywKCQkJICAgICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddICk7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX3Bvc3Rfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZScsCgkJCSAgICAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQyJ10gKTsKICAgICAgfQogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYiggJGlkLCAnc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZScgKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfVmVyaWZ5VXNlcigkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9WZXJpZnlVc2VyKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKCiAgICAvLyBzZXQgdGhlIG1vZGUgc28gd2UgZ2V0IHNlbnQgYmFjayB0byB0aGUgcmlnaHQgZm9ybSBpZiB3ZSBoYXZlIHRvIAogICAgLy8gcmVkaXJlY3QuCiAgICAkcGFyYW1zWydtb2RlJ10gPSAndmVyaWZ5JzsKCiAgICAvLyBub3cgYWxsIHdlIGhhdmUgdG8gZG8gaXMgZ2V0IHRoZSB1c2VybmFtZSwgY29kZSwgYW5kIHBhc3N3b3JkCiAgICAvLyBhbmQgbWFrZSBzdXJlIGl0IGFsbCBtYXRjaGVzCiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddICkgKQogICAgICB7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ3VzZXJuYW1lJyk7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CiAgICAgIH0KICAgICR1c2VybmFtZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSk7CiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddICkgKQogICAgICB7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ3Bhc3N3b3JkJyk7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CiAgICAgIH0KICAgICRwYXNzd29yZCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSk7CiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWydpbnB1dF9jb2RlJ10gKSApCiAgICAgIHsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5nY29kZScpOwoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwogICAgICB9CiAgICAkY29kZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfY29kZSddKTsKCiAgICAvLyBub3cgZ2V0IHRoZSBkZXRhaWxzIG91dCBvZiB0aGUgZGF0YWJhc2UgZm9yIHRocyB1c2VyCiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3VzZXJzCiAgICAgICAgICBXSEVSRSB1c2VybmFtZSA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICR1c2VybmFtZSApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9kYmVycm9yJyk7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CiAgICAgIH0KICAgIGlmKCAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgIT0gMSApCiAgICAgIHsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl91c2Vybm90Zm91bmQnKTsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksIAoJCSAgICAgICR0aGlzLT5MYW5nKCdlcnJvcl91c2Vybm90Zm91bmQnKS4iOiAiLiR1c2VybmFtZSk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwogICAgICB9CiAgICAKICAgICR0bXB1c2VyID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgaWYoIG1kNSgkcGFzc3dvcmQpICE9ICR0bXB1c2VyWydwYXNzc3dvcmQnXSApCiAgICAgIHsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9wYXNzd29yZHNkb250bWF0Y2gnKTsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksIAoJCSAgICAgICR0aGlzLT5MYW5nKCdlcnJvcl9wYXNzd29yZHNkb250bWF0Y2gnKS4iOiAiLiR1c2VybmFtZSk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CiAgICBpZiggJGNvZGUgIT0gJHRtcHVzZXJbJ2NvZGUnXSApCiAgICAgIHsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9jb2Rlc2RvbnRtYXRjaCcpOwoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgCgkJICAgICAgJHRoaXMtPkxhbmcoJ2Vycm9yX2NvZGVzZG9udG1hdGNoJykuIjogIi4kdXNlcm5hbWUpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKICAgICAgfQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9ncm91cF9pZCddICkgJiYgJHBhcmFtc1snaW5wdXRfZ3JvdXBfaWQnXSAhPSAnJyApCiAgICAgIHsKCSRncm91cF9pZCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfZ3JvdXBfaWQnXSk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJGdyb3VwX2lkID0gJHRtcHVzZXJbJ2dyb3VwX2lkJ107CiAgICAgIH0KCiAgICAkcmVzdWx0ID0gJHRoaXMtPl9DcmVhdGVGcm9udGVuZFVzZXIoICR0bXB1c2VyWydpZCddLCAkZ3JvdXBfaWQsCgkJCQkJICAkdXNlcm5hbWUsICRwYXNzd29yZCApOwogICAgaWYoICRyZXN1bHQgIT0gJycgKQogICAgICB7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmVzdWx0OwoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gd29vaG9vbywgdGhlIHVzZXIgYmUgY3JlYXRlZCAoaG9wZWZ1bGx5KS4KICAgIC8vIGRlbGV0ZSB0aGUgcmVjb3JkcyBmcm9tIHRoZSBTZWxmUmVnIHRhYmxlcwogICAgJHRoaXMtPkRlbGV0ZVRlbXBVc2VyUHJvcGVydGllcyggJHRtcHVzZXJbJ2lkJ10gKTsKICAgICR0aGlzLT5EZWxldGVUZW1wVXNlciggJHRtcHVzZXJbJ2lkJ10gKTsKCiAgfSAKCiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAvLyBBUEkgRlVOQ1RJT05TCiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCiAgZnVuY3Rpb24gQWRkVGVtcFVzZXJQcm9wZXJ0eSggJHVpZCwgJHByb3BuYW1lLCAkcHJvcHZhbHVlICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRpZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ191c2Vyc19zZXEiKTsKICAgICRxID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ19wcm9wZXJ0aWVzCiAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8pIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkaWQsICR1aWQsICRwcm9wbmFtZSwgJHByb3B2YWx1ZSApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICByZXR1cm4gYXJyYXkoVFJVRSk7CiAgfQoKCiAgZnVuY3Rpb24gQ291bnRUZW1wVXNlcnMoKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJHEgPSAiU0VMRUNUIGNvdW50KCopIGFzIGNvdW50IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3VzZXJzIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgcmV0dXJuICRyb3dbJ2NvdW50J107CiAgfQoKCiAgZnVuY3Rpb24gQ3JlYXRlVGVtcFVzZXIoICRnaWQsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY29kZSApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICBpZiggJHVzZXJuYW1lID09ICcnIHx8ICRwYXNzd29yZCA9PSAnJyApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQoKICAgIC8vIGdldCBhbiBpZAogICAgJGlkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3VzZXJzX3NlcSIpOwogICAgJHEgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3VzZXJzCiAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/KSI7IAogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRpZCwgJGdpZCwgJHVzZXJuYW1lLCBtZDUoJHBhc3N3b3JkKSwgJGNvZGUsCgkJCQkJIHRyaW0oJGRiLT5EQlRpbWVTVGFtcCh0aW1lKCkpLCInIikpKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgIHJldHVybiBhcnJheShUUlVFLCRpZCk7CiAgfQoKCiAgZnVuY3Rpb24gQ1NWT2xkVGVtcFVzZXJzKCRleHBpcnljb2RlKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJGV4cGlyZXMgPSAkZGItPkRiVGltZVN0YW1wKHN0cnRvdGltZSggJGV4cGlyeWNvZGUgKSk7CiAgICAvLyBmaW5kIGFsbCB0aGUgdXNlciBpZCdzIHRoYXQgbWF0Y2gKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3VzZXJzCiAgICAgICAgICBXSEVSRSBjcmVhdGVkYXRlIDwgPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJGV4cGlyZXMgKSApOyAKICAgICRyZXN1bHQgPSAnJzsKCiAgICB3aGlsZSggJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApIAogICAgICB7CgkkdmFscyA9IGFycmF5X3ZhbHVlcyggJHJvdyApOwoJJHJlc3VsdCAuPSAkcm93WydpZCddLiIsIi4kcm93Wyd1c2VybmFtZSddLiIsIi4kcm93Wydjb2RlJ10uIiwiLiRyb3dbJ2NyZWF0ZWRhdGUnXS4iLCI7CgkkcTIgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfcHJvcGVydGllcwogICAgICAgICAgICAgIFdIRVJFIHVzZXIgPSA/IE9SREVSIGJ5IGlkIjsKCSRkYnJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoICRxMiwgYXJyYXkoICRyb3dbJ2lkJ10gKSApOwoJd2hpbGUoICRyb3cyID0gJGRicmVzdWx0Mi0+RmV0Y2hSb3coKSApCgkgIHsKCSAgICAkcmVzdWx0IC49ICRyb3cyWydkYXRhJ10uIiwiOwoJICB9CgkkcmVzdWx0IC49ICJlbmRcbiI7CiAgICAgIH0KCiAgICByZXR1cm4gJHJlc3VsdDsKICB9CgoKICBmdW5jdGlvbiBFZGl0VGVtcFVzZXIoICR1aWQsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY29kZSApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICBpZiggJHVzZXJuYW1lID09ICcnICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgJHEgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ191c2VycwogICAgICAgICAgU0VUIHVzZXJuYW1lID0gPywgY29kZSA9ID8iOwogICAgJHBhcmFtcyA9IGFycmF5KCR1c2VybmFtZSwkY29kZSk7CiAgICBpZiggJHBhc3N3b3JkICE9ICcnICkKICAgICAgewoJJHEgLj0gIixwYXNzd29yZCA9ID8iOwoJJHBhcmFtc1tdID0gbWQ1KCRwYXNzd29yZCk7CiAgICAgIH0KICAgICRxIC49ICIgV0hFUkUgaWQgPSA/IjsKICAgICRwYXJhbXNbXSA9ICR1aWQ7CgogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgJHBhcmFtcyApOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsJGRiLT5FcnJvck1zZygpKTsKICAgICAgfQogICAgcmV0dXJuIGFycmF5KFRSVUUpOwogIH0KCgogIGZ1bmN0aW9uIEV4cGlyZU9sZFRlbXBVc2VycygkZXhwaXJ5Y29kZSkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRleHBpcmVzID0gJGRiLT5EYlRpbWVTdGFtcChzdHJ0b3RpbWUoICRleHBpcnljb2RlICkpOwogICAgLy8gZmluZCBhbGwgdGhlIHVzZXIgaWQncyB0aGF0IG1hdGNoCiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ191c2VycwogICAgICAgICAgV0hFUkUgY3JlYXRlZGF0ZSA8ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRleHBpcmVzICkgKTsgCiAgICB3aGlsZSggJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApIAogICAgICB7CgkvLyB0aGVuIGRlbGV0ZSB0aGVpciBwcm9wZXJ0aWVzCgkkcTIgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3Byb3BlcnRpZXMKICAgICAgICAgICAgIFdIRVJFIHVzZXIgPSA/IjsKCSRkYnJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoICRxMiwgYXJyYXkoICRyb3dbJ2lkJ10gKSApOwogICAgICB9CgogICAgLy8gdGhlbiBkZWxldGUgdGhlbQogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3VzZXJzCiAgICAgICAgICBXSEVSRSBjcmVhdGVkYXRlID4gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJGV4cGlyZXMgKSApOwogICAgaWYoICEkZGJyZXN1bHQgKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICBmdW5jdGlvbiBEZWxldGVUZW1wVXNlciggJHVpZCApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfdXNlcnMKICAgICAgICAgIFdIRVJFIGlkID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSgkdWlkKSApOwogICAgaWYoICEkZGJyZXN1bHQgKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICBmdW5jdGlvbiBEZWxldGVUZW1wVXNlclByb3BlcnRpZXMoICR1aWQgKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3Byb3BlcnRpZXMgCiAgICAgICAgICBXSEVSRSB1c2VyID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHVpZCApICk7CiAgICBpZiggISRkYnJlc3VsdCApIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KCgogIGZ1bmN0aW9uIEdldFRlbXBVc2VyRGV0YWlscyggJHVpZCApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ191c2VycwogICAgICAgICAgV0hFUkUgaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkdWlkICkgKTsKICAgIGlmKCAhJGRicmVzdWx0IHx8ICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA9PSAwICkgcmV0dXJuIGZhbHNlOwogICAgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKICAgIHJldHVybiAkcm93OwogIH0KCgogIGZ1bmN0aW9uIEdldFRlbXBVc2VySUQoICR1c2VybmFtZSApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CgogICAgaWYoICR1c2VybmFtZSA9PSAnJyApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3VzZXJzIFdIRVJFCiAgICAgICAgICB1c2VybmFtZSA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICR1c2VybmFtZSApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCWVjaG8gIkRFQlVHICIuJGRiLT5FcnJvck1zZygpOwoJcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKICAgIGlmKCAhJHJvdyApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQoKICAgIHJldHVybiAkcm93WydpZCddOwogIH0KCiAgZnVuY3Rpb24gR2V0VGVtcFVzZXJQcm9wZXJ0eSggJHVpZCwgJHByb3BuYW1lLCAkZGZsdCApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJTRUxFQ1QgZGF0YSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ19wcm9wZXJ0aWVzCiAgICAgICAgICBXSEVSRSB1c2VyID0gPyBBTkQgdGl0bGUgPSAgPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHVpZCwgJHByb3BuYW1lICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuICRkZmx0OwogICAgICB9CiAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgaWYoICEkcm93ICkKICAgICAgewoJcmV0dXJuICRkZmx0OwogICAgICB9CiAgICByZXR1cm4gJHJvd1snZGF0YSddOwogIH0KCgogIGZ1bmN0aW9uIEdldFRlbXBVc2VyUHJvcGVydGllcyggJHVpZCApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ19wcm9wZXJ0aWVzCiAgICAgICAgICBXSEVSRSB1c2VyID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHVpZCApICk7CiAgICBpZiggISRkYnJlc3VsdCB8fCAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPT0gMCApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQogICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICB3aGlsZSggJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApCiAgICAgIHsKCSRyZXN1bHRbXSA9ICRyb3c7CiAgICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KCn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/edituser.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBSZWdpc3RyYXRpb24gMSB0ZW1wbGF0ZSAtLT4KeyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KeyRzdGFydGZvcm19CntpZiAkY29udHJvbGNvdW50ID4gMH0KICA8Y2VudGVyPgogIDx0YWJsZSB3aWR0aD0iNzUlIj4Ke2ZvcmVhY2ggZnJvbT0kY29udHJvbHMgaXRlbT1jb250cm9sfQogIDx0cj4KICAgIDx0ZD57JGNvbnRyb2wtPmhpZGRlbn0KICAgIDxmb250IGNvbG9yPSJ7JGNvbnRyb2wtPmNvbG9yfSI+eyRjb250cm9sLT5wcm9tcHR9eyRjb250cm9sLT5tYXJrZXJ9PC9mb250PgogICAgPC90ZD4KICAgIDx0ZD57JGNvbnRyb2wtPmNvbnRyb2x9CiAgICB7aWYgJGNvbnRyb2wtPmV4dHJhdGV4dH0KICAgICAgJm5ic3A7eyRjb250cm9sLT5leHRyYXRleHR9CiAgICB7L2lmfQogICAgPC90ZD4KICA8L3RyPgp7L2ZvcmVhY2h9CiAgPC90YWJsZT4KICA8L2NlbnRlcj4KPGJyLz4Key9pZn0KeyRoaWRkZW59eyRoaWRkZW4yfXskc3VibWl0fXskY2FuY2VsfQp7JGVuZGZvcm19CjwhLS0gUmVnaXN0cmF0aW9uIDEgdGVtcGxhdGUgLS0+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4KPHA+eyRhZG1pbl9uYXZ9PC9wPgp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/prefs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9Cnskc3RhcnRmb3JtfQo8dGFibGUgd2lkdGg9IjEwMCUiPgogIDx0cj4KICAgIDx0ZCB3aWR0aD0iNTAlIj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9ub3RpZnl9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X25vdGlmeX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9jb25maXJtbWFpbF90b306PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY29uZmlybW1haWxfdG99PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfZW1haWxfY29uZmlybWF0aW9ufTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9lbWFpbF9jb25maXJtYXRpb259PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfZm9yY2VfZW1haWxfdHdpY2V9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2ZvcmNlX2VtYWlsX3R3aWNlfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGhpZGRlbn17JHN1Ym1pdH17JGNhbmNlbH08L3A+Cgk8L2Rpdj4KICAgPC90ZD4KICAgPHRkIHdpZHRoPSI1MCUiIHZhbGlnbj0idG9wIj4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfbnVtcmVzZXRyZWNvcmRzfTwvcD4KCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZGF0YV9udW1yZXNldHJlY29yZHN9PC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9yZW1vdmUxd2Vla308L3A+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+Cgk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3JlbW92ZTFtb250aH08L3A+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+Cgk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3JlbW92ZTFkYXl9PC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9yZW1vdmVhbGx9PC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9saXN0MWRheX08L3A+CiAgICAgIDwvZGl2PgogICA8L3RkPgogIDwvdHI+CjwvdGFibGU+CnskZW5kZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/signup.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KeyRzdGFydGZvcm19CntpZiAkY29udHJvbGNvdW50ID4gMH0KICA8Y2VudGVyPgogIDx0YWJsZSB3aWR0aD0iNzUlIj4Ke2ZvcmVhY2ggZnJvbT0kY29udHJvbHMgaXRlbT1jb250cm9sfQogIDx0cj4KICAgIDx0ZD57JGNvbnRyb2wtPmhpZGRlbn0KICAgIDxmb250IGNvbG9yPSJ7JGNvbnRyb2wtPmNvbG9yfSI+eyRjb250cm9sLT5wcm9tcHR9eyRjb250cm9sLT5tYXJrZXJ9PC9mb250PgogICAgPC90ZD4KICAgIDx0ZD57JGNvbnRyb2wtPmNvbnRyb2x9PC90ZD4KICA8L3RyPgp7L2ZvcmVhY2h9CiAgPC90YWJsZT4KICA8L2NlbnRlcj4KPGJyLz4Key9pZn0KeyRoaWRkZW59eyRoaWRkZW4yfXskYmFja317JHN1Ym1pdH17JGNhbmNlbH0KeyRlbmRmb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/userlist.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRqYXZhc2NyaXB0fQp7aWYgJG1lc3NhZ2UgIT0gJyd9CiAge2lmICRlcnJvciAhPSAnJ30KICAgIDxwPjxmb250IGNvbG9yPSJyZWQiPnskbWVzc2FnZX08L2ZvbnQ+PC9wPgogIHtlbHNlfQogICAgPHA+eyRtZXNzYWdlfTwvcD4KICB7L2lmfQp7ZWxzZX0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfTwvcD48L2Rpdj4Ke2lmICRpdGVtY291bnQgPiAwfQp7JHN0YXJ0Zm9ybX0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KCTx0aGVhZD4KCQk8dHI+CgkJCTx0aCB3aWR0aD0iNSUiPnskdXNlcmlkdGV4dH08L3RoPgoJCQk8dGg+eyR1c2VybmFtZXRleHR9PC90aD4KCQkJPHRoPnskZ3JwbmFtZXRleHR9PC90aD4KCQkJPHRoPnskY3JlYXRlZHRleHR9PC90aD4KCQkJPHRoPnskZW1haWx0ZXh0fTwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPnskZGVsZXRldGV4dH08L3RoPgoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgoJCTwvdHI+Cgk8L3RoZWFkPgoJPHRib2R5Pgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQoJCTx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4KCQkJPHRkPnskZW50cnktPnVzZXJpZH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+dXNlcm5hbWV9PC90ZD4KCQkJPHRkPnskZW50cnktPmdycG5hbWV9PC90ZD4KCQkJPHRkPnskZW50cnktPmNyZWF0ZWR9PC90ZD4KCQkJPHRkPnskZW50cnktPmVtYWlsfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5tYXJrZGVsZXRlYm94fTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPgoJCTwvdHI+CgkgCnsvZm9yZWFjaH0KCTwvdGJvZHk+CjwvdGFibGU+CnskY2hlY2thbGxib3h9PGJyLz4KeyRzdWJtaXR9CnsvaWZ9CnskZW5kZm9ybX0Key9pZn0K]]></data>
	</file>
</module>
