<?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</version>
  <mincmsversion>1.0</mincmsversion>
	<help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGlzIGRlc2lnbmVkIHRvIGFsbG93IGZyb250IGVuZCB1c2VycyB0byByZWdpc3RlciB0aGVtc2VsdmVzIGFuZCBmaWxsIGluIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4gIEl0IHRoZW4gc2VuZHMgYSBjb25maXJtYXRpb24gZW1haWwsIHdpdGggYSBsaW5rIHRvIGEgc2Vjb25kIHBhZ2UgdGhhdCBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlIHJlZ2lzdHJhdGlvbiBpcyBjb21wbGV0ZS4gIE9uY2UgcmVnaXN0cmF0aW9uIGlzIGNvbXBsZXRlLCBhIHVzZXIgYWNjb3VudCBpcyBjcmVhdGVkIGluIHRoZSBmcm9udCBlbmQgdXNlcnMgbW9kdWxlLjwvcD4KPHA+SW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9kdWxlLCB5b3UgbXVzdCBjcmVhdGUgYSBwcm9wZXJ0eSBvZiB0eXBlICJFbWFpbCBBZGRyZXNzIiBpbiB0aGUgRnJvbnRlbmRVc2VycyBtb2R1bGUsIGFuZCBhc3NvY2lhdGUgdGhhdCBwcm9wZXJ0eSB3aXRoIHRoZSBncm91cCB0byBiZSB1c2VkIGZvciBzZWxmIHJlZ2lzdHJhdGlvbi48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5Zb3UgcGxhY2UgdGhlIGZvbGxvd25nIHRhZyBpbnRvIHlvdXIgcGFnZSB7Y21zX21vZHVsZSBtb2R1bGU9U2VsZlJlZ2lzdHJhdGlvbiBncm91cD11c2VyZ3JvdXB9PC9wPgo8cD5Zb3UgbXVzdCBoYXZlIHByZXZpb3VzbHkgY3JlYXRlZCBwcm9wZXJ0aWVzIGFuZCB1c2VyIGdyb3VwcyBpbiB0aGUgRnJvbnRFbmRVc2VycyBtb2R1bGUgaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yayBwcm9wZXJseS48L3A+CjxoMz5QYXJhbWV0ZXJzPC9oMz4KPHA+PHN0cm9uZz5tb2RlPC9zdHJvbmc+Jm5ic3A7PGVtPm9wdGlvbmFsPC9lbT4gLSBwb3NzaWJsZSB2YWx1ZXMgYXJlICJzaWdudXAiIGFuZCAidmVyaWZ5Ii4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsICJzaWdudXAiIGlzIGFzc3VtYmVkLjwvcD4KPHA+PHN0cm9uZz5ncm91cDwvc3Ryb25nPiZuYnNwOzxlbT5vcHRpb25hbDwvZW0+IC0gVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgaWYgbW9kZSBpcyAic2lnbnVwIiwgb3IgaWYgbW9kZSBpcyBsZWZ0IGVtcHR5LjwvcD4KPHA+PHN0cm9uZz5jYXB0Y2hhPC9zdHJvbmc+Jm5ic3A7PGVtPm9wdGlvbmFsPC9lbT4gLSBUaGlzIHdpbGwgZW5hYmxlIGNhcHRjaGEgb24gdGhlIHNpZ251cCBmb3JtLiBUaGUgQ2FwdGNoYSBtb2R1bGUgbXVzdCBiZSBpbnN0YWxsZWQgZm9yIHRoaXMgcGFyYW1ldGVyIHRvIHdvcmsuPC9wPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IGNhbGd1eSdzCm1vZHVsZSBob21lcGFnZSBhdCA8YSBocmVmPSJodHRwOi8vdGVjaGNvbS5keW5kbnMub3JnIj50ZWNoY29tLmR5bmRucy5vcmc8L2E+LjwvbGk+CjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4KPGxpPlRoZSBhdXRob3IsIGNhbGd1eTEwMDAsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgCjwvdWw+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dApvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA1LCBSb2JlcnQgQ2FtcGJlbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSI+Jmx0O2NhbGd1eTEwMDBAaG90bWFpbC5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgo8aDM+RGVwZW5kZW5jaWVzPC9oMz48dWw+PGxpPkNNU01haWxlciA9Jmd0OyAxLjczLjk8L2xpPjxsaT5Gcm9udEVuZFVzZXJzID0mZ3Q7IDEuMC4wPC9saT48L3VsPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjwvdWw+</help>
	<about>PGJyIC8+QXV0aG9yOiBDYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMS4wPGJyIC8+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+UmVxdWlyZSAwLjEyIHByb3BlciBvZiBjbXMgYXMgYSBtaW5pbXVtPC9wPgo8L2xpPgo8bGk+PHA+VmVyc2lvbiAxLjEuMC4gLSBEZWMgMjAwNjwvcD4KICAgIDxwPkFkZGVkIGV2ZW50cyBhbmQgMS4wIGNvbXBhdGliaWxpdHk8L3A+CiAgICA8cD5DYXB0Y2hhIHN1cHBvcnQgKHRoYW5rcyBEaXR0bWFuKTwvcD4KPC9saT4KPC91bD48YnIgLz4=</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/JzsKJGxhbmdbJ2hkcl91c2VyaWQnXSA9ICdVc2VySUQnOwokbGFuZ1snaGRyX3VzZXJuYW1lJ10gPSAnVXNlcm5hbWUnOwokbGFuZ1snaGRyX2dycG5hbWUnXSA9ICdHcm91cCc7CiRsYW5nWydoZHJfY3JlYXRlZCddID0gJ0NyZWF0ZWQnOwokbGFuZ1snaGRyX2VtYWlsJ10gPSAnRW1haWknOwokbGFuZ1sndXNlcnNmb3VuZCddID0gJ1VzZXJzIGZvdW5kIChsaW1pdGVkIHRvIGEgbWF4aW11bSBvZiAyNTApJzsKJGxhbmdbJ3VzZXJzJ10gPSAnVXNlcnMnOwokbGFuZ1snbGlzdDFkYXknXSA9ICdMaXN0IGFsbCBlbnRyaWVzIG1vcmUgdGhhbiAxIGRheSBvbGQnOwokbGFuZ1snc3ViamVjdCddID0gJ1N1YmplY3QgZm9yIG91dGdvaW5nIGVtYWlsJzsKJGxhbmdbJ2h0bWxib2R5J10gPSAnSFRNTCBtZXNzYWdlIGJvZHknOwokbGFuZ1sndGV4dGJvZHknXSA9ICdUZXh0IG1lc3NhZ2UgYm9keSc7CiRsYW5nWydwcm9tcHRfbnVtcmVzZXRyZWNvcmQnXSA9ICdBIG51bWJlciBvZiB1c2VycyBhcmUgaW4gdGhlIG1pZGRsZSBvZiByZWdpc3RlcmluZy4gIEN1cnJlbnRseSB0aGlzIGNvdW50IGlzIGF0Oic7CiRsYW5nWydyZW1vdmUxd2VlayddID0gJ1JlbW92ZSBhbGwgZW50cmllcyBtb3JlIHRoYW4gYSB3ZWVrIG9sZCc7CiRsYW5nWydyZW1vdmUxbW9udGgnXSA9ICdSZW1vdmUgYWxsIGVudHJpZXMgbW9yZSB0aGFuIGEgbW9udGggb2xkJzsKJGxhbmdbJ3JlbW92ZTFkYXknXSA9ICdSZW1vdmUgYWxsIGVudHJpZXMgbW9yZSB0aGFuIGEgZGF5IG9sZCc7CiRsYW5nWydyZW1vdmVhbGwnXSA9ICdSZW1vdmUgYWxsIGVudHJpZXMnOwokbGFuZ1snYXJleW91c3VyZSddID0gJ0FyZSB5b3Ugc3VyZT8nOyAKJGxhbmdbJ3JlZ2lzdHJhdGlvbl9pbmZvX2VkaXRlZCddID0gJ1lvdXIgcmVnaXN0cmF0aW9uIGluZm8gaGFzIGJlZW4gbW9kaWZpZWQnOwokbGFuZ1sncmVnaXN0cmF0aW9uX2NvbmZpcm1hdGlvbiddID0gJ1JlZ2lzdHJhdGlvbiBDb25maXJtYXRpb24nOwokbGFuZ1sndXNlcl9yZWdpc3RyYXRpb24nXSA9ICdSZWdpc3Rlcic7CiRsYW5nWydmaW5hbG1lc3NhZ2VfdGVtcGxhdGUnXSA9ICdGaW5hbCBNZXNzYWdlIFRlbXBsYXRlJzsKJGxhbmdbJ3RpdGxlX3ZlcmlmeXJlZ2lzdHJhdGlvbiddID0gJ1ZlcmlmeSBSZWdpc3RyYXRpb24nOwokbGFuZ1snY29kZSddID0gJ1ZhbGlkYXRpb24gS2V5JzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdTZXQgVG8gRGVmYXVsdHMnOwokbGFuZ1snZXJyb3Jfbm9wcm9wZXJ0aWVzJ10gPSAnTm8gcHJvcGVydGllcyBmb3VuZCBmb3IgdGhpcyB1c2VyJzsKJGxhbmdbJ2Vycm9yX25vcHJvcHJlbGF0aW9ucyddID0gJ05vIHByb3BlcnR5IHJlbGF0aW9ucyc7CiRsYW5nWydlcnJvcl9lbWFpbGludmFsaWQnXSA9ICdJbnZhbGlkIGVtYWlsIGFkZHJlc3MnOwokbGFuZ1snZXJyb3Jfbm9lbWFpbGFkZHJlc3MnXSA9ICdObyB2YWxpZCBlbWFpbCBhZGRyZXNzIGZpZWxkIGZvdW5kJzsKJGxhbmdbJ2Vycm9yX3JlcXVpcmVkZmllbGQnXSA9ICdGaWVsZCAlcyBtdXN0IGJlIGZpbGxlZCBpbic7CiRsYW5nWydyZWdpc3RyYXRpb24xX3RlbXBsYXRlJ10gPSAnUmVnaXN0cmF0aW9uIFRlbXBsYXRlIDEnOwokbGFuZ1sncmVnaXN0cmF0aW9uMl90ZW1wbGF0ZSddID0gJ1JlZ2lzdHJhdGlvbiBUZW1wbGF0ZSAyJzsKJGxhbmdbJ2VtYWlsY29uZmlybV90ZW1wbGF0ZSddID0gJ0NvbmZpcm1hdGlvbiBFbWFpbCBUZW1wbGF0ZSc7CiRsYW5nWydlbWFpbHVzZXJlZGl0ZWRfdGVtcGxhdGUnXSA9ICdVc2VyIEluZm8gQ2hhbmdlZCBUZW1wbGF0ZSc7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ1ByZWZlcmVuY2VzJzsKJGxhbmdbJ2Vycm9yX3VzZXJub3Rmb3VuZCddID0gJ1VzZXIgbm90IGZvdW5kJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZSddID0gJ1VzZXJuYW1lIGlzIGludmFsaWQgKHRvbyBsb25nLCB0b28gc2hvcnQsIG9yIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycykuICBIaW50LSBVc2VybmFtZXMgbXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgKG5vIHNwYWNlcyknOwokbGFuZ1snZXJyb3JfdXNlcm5hbWV0YWtlbiddID0gJ1RoYXQgdXNlcm5hbWUgaXMgY3VycmVudGx5IGluIHVzZSc7CiRsYW5nWydlcnJvcl9wYXNzd29yZHNkb250bWF0Y2gnXSA9ICdFUlJPUjogUGFzc3dvcmRzIGRvbnQgbWF0Y2gnOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhc3N3b3JkJ10gPSAnUGFzc3dvcmQgaXMgaW52YWxpZCAocGFzc3dvcmRzIG11c3QgYmUgYmV0d2VlbiAlcyBhbmQgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGgpJzsKJGxhbmdbJ2Vycm9yX2VtcHR5dXNlcm5hbWUnXSA9ICdVc2VybmFtZSBjYW5ub3QgYmUgZW1wdHknOwokbGFuZ1sncmVwZWF0cGFzc3dvcmQnXSA9ICdQYXNzd29yZCAoYWdhaW4pJzsKJGxhbmdbJ3Bhc3N3b3JkJ10gPSAnUGFzc3dvcmQnOwokbGFuZ1sndXNlcm5hbWUnXSA9ICdVc2VybmFtZSc7CiRsYW5nWydjYXB0Y2hhX3RpdGxlJ10gPSAnRW50ZXIgdGhlIHRleHQgZnJvbSB0aGUgaW1hZ2UnOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnSW5zdWZmaWNpZW50IG51bWJlciAob3IgaW5jb3JyZWN0KSBwYXJhbWV0ZXJzIHN1cHBsaWVkIHRvIG1vZHVsZSc7CiRsYW5nWydlcnJvcl9ub2ZldXNlcnNtb2R1bGUnXSA9ICdDb3VsZCBub3QgZ2V0IGluc3RhbmNlIG9mIEZyb250RW5kVXNlcnMgbW9kdWxlJzsKJGxhbmdbJ2Vycm9yX25vc3VjaGdyb3VwJ10gPSAnR3JvdXAgbmFtZSBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3QnOwokbGFuZ1snZXJyb3JfY2FwdGNoYW1pc21hdGNoJ10gPSAnVGhlIHRleHQgZnJvbSB0aGUgaW1hZ2Ugd2FzIG5vdCBlbnRlcmVkIGNvcnJlY3RseSc7CiRsYW5nWydzZW5kX2VtYWlsc190byddID0gJ1JlZ2lzdHJhdGlvbiBlbWFpbHMgc2hvdWxkIGJlIHNlbnQgdG8nOwokbGFuZ1sncmVxdWlyZV9lbWFpbF9jb25maXJtYXRpb24nXSA9ICdSZXF1aXJlIHRoZSB1c2VyIHRvIGNvbmZpcm0gcmVnaXN0cmF0aW9uIHZpYSBlbWFpbCc7CiRsYW5nWydub3RpZnlfb25fcmVnaXN0cmF0aW9uJ10gPSAnU2VuZCBhbiBlbWFpbCBub3RpZmljYXRpb24gd2hlbiBzb21lb25lIHJlZ2lzdGVycyc7CiRsYW5nWydjYW5jZWwnXSA9ICdDYW5jZWwnOwokbGFuZ1snc3VibWl0J10gPSAnU3VibWl0JzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1NlbGYgUmVnaXN0cmF0aW9uIE1vZHVsZSc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0luc3RhbGxhdGlvbiBzdWNjZXNzZnVsbCwgcGxlYXNlIHJlbWVtYmVyIHRvIHNldCB0aGUgJnF1b3Q7TW9kaWZ5IFNlbGZSZWdpc3RyYXRpb24gU2V0dGluZ3MmcXVvdDsgcGVybWlzc2lvbi4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1NlbGYgUmVnaXN0cmF0aW9uIG1vZHVsZSBpcyB1bmluc3RhbGxlZC4gIFNlZSB5b3UgbGF0ZXIuJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIFVuaW5zdGFsbGVkLic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ01vZHVsZSBwcmVmZXJlbmNlcyB1cGRhdGVkLic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBY2Nlc3MgRGVuaWVkLiBQbGVhc2UgY2hlY2sgeW91ciBwZXJtaXNzaW9ucy4nOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvciEnOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTW9kdWxlIFByZWZlcmVuY2VzJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsZSBBZG1pbiBQYW5lbCc7CiRsYW5nWyd0aXRsZV9hZG1pbl9wYW5lbCddID0gJ1NlbGYgUmVnaXN0cmF0aW9uIE1vZHVsZSc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0EgbW9kdWxlIHRoYXQgYWxsb3dzIGZyb250IGVuZCB1c2VycyB0byByZWdpc3RlciB0aGVtc2VsdmVzLic7CiRsYW5nWyd3ZWxjb21lX3RleHQnXSA9ICc8cD5XZWxjb21lIHRvIHRoZSBzZWxmIHJlZ2lzdHJhdGlvbiBtb2R1bGUuPC9wPic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+CjxsaT5WZXJzaW9uIDAuMC4xLiBPY3QgMjAwNS4gSW5pdGlhbCBOUlBUIChOb3QgUmVhZHkgZm9yIFByaW1lIFRpbWUpIHJlbGVhc2UuPC9saT4KPGxpPlZlcnNpb24gMC4xLjAuIE9jdCAyMDA1LiBJbml0aWFsIHJlbGVhc2UuPC9saT4KPGxpPlZlcnNpb24gMC4xLjEuIE9jdCAyMDA1LiBTZXQgdGhlIEhUTUwgbWFpbCBmbGFnLjwvbGk+CjxsaT5WZXJzaW9uIDAuMS4yLiBPY3QgMjAwNS4gTW92ZWQgUmFuZG9tIHN0dWZmIGludG8gZmV1c2VycywgYW5kIGFkZGVkIHRoZSBhYmlsaXR5IHRvIGRlbGV0ZSBvbGQgZW50cmllcyBmcm9tIHRoZSByZWdpc3RyYXRpb24gdGVtcG9yYXJ5IHRhYmxlczwvbGk+CjxsaT48cD5WZXJzaW9uIDAuMS4zLiAtIERlYyAyMDA1PC9wPgo8cD5GaXhlZCB0aGUgdG9nZ2xlcyBpbiB0aGUgYWRtaW4gcHJlZmVyZW5jZXMuICBBbHNvLCBjaGFuZ2VkIHRoZSBwZXJtaXNzaW9ucyBtb2RlbCB0byBub3QgcmVxdWlyZSB0aGUgdW5pcXVlIHBlcm1pc3Npb24gYWRkZWQgcHJldmlvdXNseSBmb3IgdGhlIHNlbGZyZWcgbW9kdWxlLjwvcD4KPHA+VGhpcyByZWxlYXNlIHdhcyByZW1vdmVkIGR1ZSB0byBwb3NzaWJsZSBlcnJvcnM8L3A+CjwvbGk+CjxsaT48cD5WZXJzaW9uIDAuMS40LiAtIEphbiAyMDA2PC9wPgo8cD5GaXhlZCBtaW5vciBlcnJvcnMgd2l0aCBDaGVja1Blcm1pc3Npb24sIHJlcGxhY2VkIGFsbCBhc3NpZ25fYnlfcmVmc1wncyB3aXRoIGFzc2lnbnMgZm9yIGhvcGVmdWwgcGhwNSBjb21wYXRpYmlsaXR5LjwvcD4KPGxpPjxwPlZlcnNpb24gMC4xLjUuIC0gSmFuIDIwMDY8L3A+CjxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCB0aGUgc3ViamVjdCBvZiB0aGUgY29uZmlybWF0aW9uIGVtYWlsLCBhbmQgYWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHRleHQgYm9keS4gIFN1YmplY3QsIGFuZCB0ZXh0IGJvZHkgYXJlIHJlcXVpcmVkLjwvcD4KPC9saT4KPGxpPjxwPlZlcnNpb24gMS4wLjAuIC0gRmViIDIwMDY8L3A+CjxwPkZpeGVkIGEgcHJvYmxlbSB3aXRoIHRoZSB2ZXJpZnkgbW9kZS48L3A+CjxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIGVkaXQgYW5kIGRlbGV0ZSB1c2Vycy4gd2l0aCBzZWxlY3Rpb24gb24gdGhlIGNoZWNrYm94ZXMsIGFuZCAiY2hlY2thbGwiPC9wPgo8cD5Ob3cgcmVxdWlyZSBGRVVzZXJzIDAuMS44IGFuZCBDTVNNYWlsZXIgMS43My45PC9wPgo8cD5BZGRlZCBhbm90aGVyIHRhYiBmb3IgdGhlICJ5b3VyIHNldHRpbmdzIGhhdmUgYmVlbiBhZGp1c3RlZCIgZW1haWwgdGVtcGxhdGVzPC9wPgo8cD5BZGRlZCBDU1YgRXhwb3J0aW5nPC9wPgo8cD5BZGRlZCBhICJEZWxldGUgYWxsIHVzZXJzIG9sZGVyIHRoYW4gYSBkYXkiIGJ1dHRvbjwvcD4KPHA+Tm93IHdvcmtzIHdpdGggdGhlIG1heGltdW0gbGVuZ3RoIGZpZWxkIG9mIEZFVXNlcnM8L3A+CjxwPkFkZGVkIHN1cHBvcnQgZm9yIGRyb3Bkb3ducyBhbmQgdGV4dCBhcmVhczwvcD4KPHA+RGlzYWxsb3cgcHVuY3R1YXRpb24gY2hhcmFjdGVycyBpbiB1c2VybmFtZTwvcD4KPC9saT4KPGxpPjxwPlZlcnNpb24gMS4wLjEuIC0gRmViIDIwMDY8L3A+CjxwPkFkZGVkIHRoZSBhYmlsaXR5IGZvciB1c2VycyB0byByZXF1ZXN0IGFub3RoZXIgcmVnaXN0cmF0aW9uIGVtYWlsICh1c2VzIHRoZSBzYW1lIGNvZGUpLCBpbmNhc2UgdGhleSBsb3N0IHRoZWlyIGZpcnN0IG9uZS48L3A+CjwvbGk+CjxsaT48cD5WZXJzaW9uIDEuMC4yLiAtIEZlYiAyMDA2PC9wPgo8cD5UaGUgIlJlcXVpcmUgZW1haWwgY29uZmlybWF0aW9uIiBjaGVja2JveCBub3cgd29ya3MuICBVc2VycyBhcmUgYWRkZWQgc3RyYWlnaHQgdG8gdGhlIGZyb250ZW5kIHVzZXJzIGRhdGFiYXNlPC9wPgo8cD5GaXhlZCBhIGJ1ZyB3aXRoIHRoZSBjb25maXJtYXRpb24gZW1haWxzIGhhdmluZyBsaW5rcyB0byB0aGUgYWRtaW4gc2VjdGlvbiAobmV3IGJ1ZyBvbmx5KS48L3A+CjwvbGk+CjxsaT48cD5WZXJzaW9uIDEuMC4zLiAtIEZlYiAyMDA2PC9wPgo8cD5BZGRlZCB0aGUgKG9wdGlvbmFsKSBhYmlsaXR5IHRvIHJlcXVpcmUgdGhlIHVzZXIgZW50ZXIgdGhlIGVtYWlsIGFkZHJlc3MgdHdpY2U8L3A+CjxwPkZpeGVkIGEgYnVnIHdpdGggdGhlIHVzZXJlZGl0ZWQgbWVzc2FnZSBub3QgYmVpbmcgdGhyb3duIHRocm91Z2ggc21hcnR5PC9wPgo8cD5GaXhlZCB0aGUgZGVmYXVsdCByZWdpc3RyYXRpb24gdGVtcGxhdGUgYSBiaXQgdG8gYWlkZSBpbiB2YWxpZGF0aW9uIGZvciBub24gcmVxdWlyZWQgZmllbGRzIChmaXhlZCBhIHdhcm5pbmcpPC9wPgo8cD5GaXggcHJvYmxlbXMgd2l0aCBpbmxpbmUgYW5kIG5vbi1pbmxpbmUgZm9ybXMgYW5kIGxpbmtzPC9wPgo8cD5IYW5kbGUgYW5vdGhlciBjYXNlIHdoZXJlIHRoZSBhZG1pbiBtYXkgbm90IGhhdmUgY3JlYXRlZCB0aGUgcHJvcGVyIHR5cGUgb2YgZW1haWwgcHJvcGVydHk8L3A+CjxwPkNoYW5nZWQgdG8gcmVxdWlyZSBDTVMgMC4xMi1iZXRhMiBhdCBhIG1pbmltdW0gKGZvciBzYWZldHkgcHVycG9zZXMpPC9wPgo8L2xpPgo8bGk+PHA+VmVyc2lvbiAxLjAuNC4gLSBNYXIgMjAwNjwvcD4KPHA+TW9yZSBjb250cm9sIG92ZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkIHNpemVzIChjb250cm9sbGVkIGJ5IGZldXNlcnMpPC9wPgo8cD5Db25maXJtYXRpb24gb24gZWRpdGluZyBwcmVmZXJlbmNlczwvcD4KPHA+UmVxdWlyZSAwLjEyIHByb3BlciBvZiBjbXMgYXMgYSBtaW5pbXVtPC9wPgo8L2xpPgo8bGk+PHA+VmVyc2lvbiAxLjEuMC4gLSBEZWMgMjAwNjwvcD4KICAgIDxwPkFkZGVkIGV2ZW50cyBhbmQgMS4wIGNvbXBhdGliaWxpdHk8L3A+CiAgICA8cD5DYXB0Y2hhIHN1cHBvcnQgKHRoYW5rcyBEaXR0bWFuKTwvcD4KPC9saT4KPC91bD4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBkZXNpZ25lZCB0byBhbGxvdyBmcm9udCBlbmQgdXNlcnMgdG8gcmVnaXN0ZXIgdGhlbXNlbHZlcyBhbmQgZmlsbCBpbiB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24uICBJdCB0aGVuIHNlbmRzIGEgY29uZmlybWF0aW9uIGVtYWlsLCB3aXRoIGEgbGluayB0byBhIHNlY29uZCBwYWdlIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSByZWdpc3RyYXRpb24gaXMgY29tcGxldGUuICBPbmNlIHJlZ2lzdHJhdGlvbiBpcyBjb21wbGV0ZSwgYSB1c2VyIGFjY291bnQgaXMgY3JlYXRlZCBpbiB0aGUgZnJvbnQgZW5kIHVzZXJzIG1vZHVsZS48L3A+CjxwPkluIG9yZGVyIHRvIHVzZSB0aGlzIG1vZHVsZSwgeW91IG11c3QgY3JlYXRlIGEgcHJvcGVydHkgb2YgdHlwZSAiRW1haWwgQWRkcmVzcyIgaW4gdGhlIEZyb250ZW5kVXNlcnMgbW9kdWxlLCBhbmQgYXNzb2NpYXRlIHRoYXQgcHJvcGVydHkgd2l0aCB0aGUgZ3JvdXAgdG8gYmUgdXNlZCBmb3Igc2VsZiByZWdpc3RyYXRpb24uPC9wPgo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4KPHA+WW91IHBsYWNlIHRoZSBmb2xsb3duZyB0YWcgaW50byB5b3VyIHBhZ2Uge2Ntc19tb2R1bGUgbW9kdWxlPVNlbGZSZWdpc3RyYXRpb24gZ3JvdXA9dXNlcmdyb3VwfTwvcD4KPHA+WW91IG11c3QgaGF2ZSBwcmV2aW91c2x5IGNyZWF0ZWQgcHJvcGVydGllcyBhbmQgdXNlciBncm91cHMgaW4gdGhlIEZyb250RW5kVXNlcnMgbW9kdWxlIGluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmsgcHJvcGVybHkuPC9wPgo8aDM+UGFyYW1ldGVyczwvaDM+CjxwPjxzdHJvbmc+bW9kZTwvc3Ryb25nPiZuYnNwOzxlbT5vcHRpb25hbDwvZW0+IC0gcG9zc2libGUgdmFsdWVzIGFyZSAic2lnbnVwIiBhbmQgInZlcmlmeSIuICBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCAic2lnbnVwIiBpcyBhc3N1bWJlZC48L3A+CjxwPjxzdHJvbmc+Z3JvdXA8L3N0cm9uZz4mbmJzcDs8ZW0+b3B0aW9uYWw8L2VtPiAtIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGlmIG1vZGUgaXMgInNpZ251cCIsIG9yIGlmIG1vZGUgaXMgbGVmdCBlbXB0eS48L3A+CjxwPjxzdHJvbmc+Y2FwdGNoYTwvc3Ryb25nPiZuYnNwOzxlbT5vcHRpb25hbDwvZW0+IC0gVGhpcyB3aWxsIGVuYWJsZSBjYXB0Y2hhIG9uIHRoZSBzaWdudXAgZm9ybS4gVGhlIENhcHRjaGEgbW9kdWxlIG11c3QgYmUgaW5zdGFsbGVkIGZvciB0aGlzIHBhcmFtZXRlciB0byB3b3JrLjwvcD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+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[PD9waHAKJGxhbmdbJ2Vycm9yX2NvZGVzZG9udG1hdGNoJ10gPSAnRGVyICZVdW1sO2JlcnByJnV1bWw7ZnVuZ3NzY2hsJnV1bWw7c3NlbCBpc3QgdW5nJnV1bWw7bHRpZyc7CiRsYW5nWydldmVudF9kZXNjcmlwdGlvbl9vbk5ld1VzZXInXSA9ICdFaW4gRXJlaWduaXMsIGRhcyBhbnplaWd0LCBkYXNzIGVpbiBCZW51dHplciBkYXMgUmVnaXN0cmllcnVuZ3Nmb3JtdWxhciB2b2xsc3QmYXVtbDtuZGlnIGF1c2dlZiZ1dW1sO2xsdCBoYXQnOwokbGFuZ1snZXZlbnRfZGVzY3JpcHRpb25fb25Vc2VyUmVnaXN0ZXJlZCddID0gJ0VpbiBFcmVpZ25pcywgZGFzIGFuemVpZ3QsIGRhc3MgZWluIEJlbnV0emVyIHNlaW5lIEluZm9ybWF0aW9uZW4gJnV1bWw7YmVycHImdXVtbDtmdCBoYXQgdW5kIGpldHp0IHZvbGxzdCZhdW1sO25kaWcgcmVnaXN0cmllcnQgaXN0JzsKJGxhbmdbJ2V2ZW50X2hlbHBfb25OZXdVc2VyJ10gPSAnDQo8cD5FaW4gRXJlaWduaXMsIGRhcyBhbnplaWd0LCBkYXNzIGVpbiBCZW51dHplciBkYXMgUmVnaXN0cmllcnVuZ3Nmb3JtdWxhciB2b2xsc3QmYXVtbDtuZGlnIGF1c2dlZiZ1dW1sO2xsdCBoYXQ8L3A+DQo8aDQ+UGFyYW1ldGVyPC9oND4NCjx1bD4NCjxsaT48ZW0+dXNlcm5hbWU8L2VtPiAtIEJlbnV0emVybmFtZSBkZXMgbmV1ZW4gQmVudXR6ZXJzPC9saT4NCjxsaT48ZW0+ZW1haWw8L2VtPiAtIEVtYWlsYWRyZXNzZSBkZXMgbmV1ZW4gQmVudXR6ZXJzPC9saT4NCjwvdWw+DQonOwokbGFuZ1snZXZlbnRfaGVscF9vblVzZXJSZWdpc3RlcmVkJ10gPSAnDQo8cD5FaW4gRXJlaWduaXMsIGRhcyBhbnplaWd0LCBkYXNzIGVpbiBCZW51dHplciBzZWluZSBJbmZvcm1hdGlvbmVuICZ1dW1sO2JlcnByJnV1bWw7ZnQgaGF0IHVuZCBqZXR6dCB2b2xsc3QmYXVtbDtuZGlnIG1pdCBGcm9udGVuZFVzZXJzIHJlZ2lzdHJpZXJ0IGlzdDwvcD4NCjxoND5QYXJhbWV0ZXI8L2g0Pg0KPHVsPg0KPGxpPjxlbT51c2VybmFtZTwvZW0+IC0gZGVyIHJlZ2lzdHJpZXJ0ZSBCZW51dHplcm5hbWU8L2xpPg0KPC91bD4NCic7CiRsYW5nWydjb25maXJtX3N1Ym1pdHByZWZzJ10gPSAnRGllIEFkbWluaXN0cmF0b3ItRWluc3RlbGx1bmdlbiAmYXVtbDtuZGVybj8nOwokbGFuZ1snaW5mb19hZG1pbl9wYXNzd29yZCddID0gJ0xhc3NlbiBTaWUgZGllc2VzIEZlbGQgbGVlciwgdW0gZGFzIEJlbnV0emVyLVBhc3N3b3J0IGJlaXp1YmVoYWx0ZW4uJzsKJGxhbmdbJ2luZm9fYWRtaW5fcmVwZWF0cGFzc3dvcmQnXSA9ICdMYXNzZW4gU2llIGRpZXNlcyBGZWxkIGxlZXIsIHVtIGRhcyBCZW51dHplci1QYXNzd29ydCBiZWl6dWJlaGFsdGVuLic7CiRsYW5nWydlcnJvcl9lbWFpbGRvZXNub3RtYXRjaCddID0gJ0RpZSBFbWFpbGFkcmVzc2VuIHN0aW1tZW4gbmljaHQgJnV1bWw7YmVyZWluLic7CiRsYW5nWydmb3JjZV9lbWFpbF90d2ljZSddID0gJ0VzIGlzdCBlcmZvcmRlcmxpY2gsIEJlbnV0emVyIGlocmUgRW1haWxhZHJlc3NlIHp3ZWkgTWFsIGVpbmdlYmVuLic7CiRsYW5nWydhZ2FpbiddID0gJ25vY2ggZWlubWFsJzsKJGxhbmdbJ2RlbGV0ZXNlbHVzZXJzJ10gPSAnRGllIGF1c2dldyZhdW1sO2hsdGVuIEJlbnV0emVyIGwmb3VtbDtzY2hlbic7CiRsYW5nWydlcnJvcl9ub3Byb3BkZWZucyddID0gJ0tlaW5lIEVpZ2Vuc2NoYWZ0c2RlZmluaXRpb25lbiBvZGVyIFByb2JsZW1lIGJlaSBkZXNzZW4gQWJydWYgYXVzIGRlciBEYXRlbmJhbmsnOwokbGFuZ1snZXJyb3Jfbm9ncm91cHMnXSA9ICdLZWluZSBCZW51dHplcmdydXBwZW4gb2RlciBlaW4gUHJvYmxlbSBiZWltIEF1ZmZpbmRlbiBkZXIgQmVudXR6ZXJncnVwcGVubGlzdGUnOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0RhdGVuYmFua2ZlaGxlcic7CiRsYW5nWyd0aXRsZV9wb3N0X3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnXSA9ICdOYWNoZm9sZ2VuZGVzIFRlbXBsYXRlIGJlaSB2ZXJsb3JlbmdlZ2FuZ2VuZXIgRW1haWwnOwokbGFuZ1sndGl0bGVfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZSddID0gJ1RlbXBsYXRlIGJlaSB2ZXJsb3JlbmdlZ2FuZ2VuZXIgRW1haWwnOwokbGFuZ1snY2xpY2toZXJlJ10gPSAnSGllciBrbGlja2VuJzsKJGxhbmdbJ21zZ19zZW5kYW5vdGhlcmVtYWlsJ10gPSAnSWNoIGhhYmUgZGFzIFJlZ2lzdHJpZXJ1bmdzZm9ybXVsYXIgYmVyZWl0cyB2b2xsc3QmYXVtbDtuZGlnIGF1c2dlZiZ1dW1sO2xsdCwgaGFiZSBhYmVyIG5vY2gga2VpbmUgRW1haWwgYmVrb21tZW4uIEsmb3VtbDtubmVuIFNpZSBtaXIgZGllc2Ugbm9jaCBlaW5tYWwgc2VuZGVuPyc7CiRsYW5nWydzZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJ10gPSAnVGVtcGxhdGUgYmVpIHZlcmxvcmVuZ2VnYW5nZW5lciBFbWFpbCc7CiRsYW5nWydpbmZvX3VzZXJ2ZXJpZmllZCddID0gJ0VpbiBuZXVlciBCZW51dHplciB3dXJkZSBpbSBGcm9udGVuZFVzZXJzLU1vZHVsIGhpbnp1Z2VmJnV1bWw7Z3QuJzsKJGxhbmdbJ2VkaXQnXSA9ICdCZWFyYmVpdGVuJzsKJGxhbmdbJ3Vua25vd24nXSA9ICdVbmJla2FubnQnOwokbGFuZ1snc2VsZWN0J10gPSAnQXVzdyZhdW1sO2hsZW4nOwokbGFuZ1snY2hlY2tfYWxsJ10gPSAnQWxsZSBhdWYgJnF1b3Q7JlV1bWw7YmVycHImdXVtbDtmdCZxdW90OyBzZXR6ZW4nOwokbGFuZ1sndW5jaGVja19hbGwnXSA9ICdBbGxlIGF1ZiAmcXVvdDtOaWNodCAmdXVtbDtiZXJwciZ1dW1sO2Z0JnF1b3Q7IHNldHplbic7CiRsYW5nWydzZW5kX2FkanVzdG1lbnRlbWFpbCddID0gJ0VpbmUgRW1haWwgYW4gZGVuIEJlbnV0emVyIHNlbmRlbic7CiRsYW5nWyd0eHRfYWRqdXN0bWVudGVtYWlsJ10gPSAnKGluZm9ybWllcnQgZGVuIEJlbnV0emVyLCBkYXNzIHNlaW4gS29udG8ga29ycmlnaWVydCB3dXJkZSknOwokbGFuZ1sndHh0X2NoYW5nZXBhc3N3b3JkJ10gPSAnU2llIG0mdXVtbDtzc2VuIGRpZXNlIEZlbGRlciBhdXNmJnV1bWw7bGxlbiwgdW0gZGFzIEJlbnV0emVyLVBhc3N3b3J0IHp1IHdlY2hzZWxuLic7CiRsYW5nWydlZGl0dXNlciddID0gJ0JlbnV0emVyIGJlYXJiZWl0ZW4nOwokbGFuZ1snYXJleW91c3VyZV9kZWxldGV1c2VyJ10gPSAnU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBkaWVzZW4gdGVpbHdlaXNlIHJlZ2lzdHJpZXJ0ZW4gQmVudXR6ZXIgbCZvdW1sO3NjaGVuIHdvbGxlbj8nOwokbGFuZ1snaGRyX3VzZXJpZCddID0gJ0JlbnV0emVyLUlEJzsKJGxhbmdbJ2hkcl91c2VybmFtZSddID0gJ0JlbnV0emVybmFtZSc7CiRsYW5nWydoZHJfZ3JwbmFtZSddID0gJ0JlbnV0emVyZ3J1cHBlJzsKJGxhbmdbJ2hkcl9jcmVhdGVkJ10gPSAnRXJzdGVsbHQnOwokbGFuZ1snaGRyX2VtYWlsJ10gPSAnRW1haWwnOwokbGFuZ1sndXNlcnNmb3VuZCddID0gJ0JlbnV0emVyIGdlZnVuZGVuIChiZXNjaHImYXVtbDtua3QgYXVmIGVpbiBNYXhpbXVtIHZvbiAyNTAgQmVudXR6ZXJuKSc7CiRsYW5nWyd1c2VycyddID0gJ0JlbnV0emVyJzsKJGxhbmdbJ2xpc3QxZGF5J10gPSAnQWxsZSBFaW50ciZhdW1sO2dlIGF1Zmxpc3RlbiwgZGllICZhdW1sO2x0ZXIgYWxzIDEgVGFnIHNpbmQnOwokbGFuZ1snc3ViamVjdCddID0gJ0JldHJlZmYgZiZ1dW1sO3IgZGllIGF1c2dlaGVuZGUgRW1haWwnOwokbGFuZ1snaHRtbGJvZHknXSA9ICdJbmhhbHQgZGVyIEhUTUwtTmFjaHJpY2h0JzsKJGxhbmdbJ3RleHRib2R5J10gPSAnSW5oYWx0IGRlciBUZXh0LU5hY2hyaWNodCc7CiRsYW5nWydwcm9tcHRfbnVtcmVzZXRyZWNvcmQnXSA9ICdFaW5lIEFuemFobCB2b24gQmVudXR6ZXJuIHNpbmQgZGFiZWksIHZlcmxvcmVuIGdlZ2FuZ2VuZSBQYXNzdyZvdW1sO3J0ZXIgenVyJnV1bWw7Y2t6dXNldHplbi4gQWt0dWVsbCBzaW5kIGRpZXM6JzsKJGxhbmdbJ3JlbW92ZTF3ZWVrJ10gPSAnQWxsZSBFaW50ciZhdW1sO2dlIGVudGZlcm5lbiwgZGllICZhdW1sO2x0ZXIgYWxzIGVpbmUgV29jaGUgc2luZCc7CiRsYW5nWydyZW1vdmUxbW9udGgnXSA9ICdBbGxlIEVpbnRyJmF1bWw7Z2UgZW50ZmVybmVuLCBkaWUgJmF1bWw7bHRlciBhbHMgZWluIE1vbmF0IHNpbmQnOwokbGFuZ1sncmVtb3ZlMWRheSddID0gJ0FsbGUgRWludHImYXVtbDtnZSBlbnRmZXJuZW4sIGRpZSAmYXVtbDtsdGVyIGFscyBlaW5lbiBUYWcgc2luZCc7CiRsYW5nWydyZW1vdmVhbGwnXSA9ICdBbGxlIEVpbnRyJmF1bWw7Z2UgZW50ZmVybmVuJzsKJGxhbmdbJ2FyZXlvdXN1cmUnXSA9ICdTaW5kIFNpZSBzaWNoZXI/JzsKJGxhbmdbJ3JlZ2lzdHJhdGlvbl9pbmZvX2VkaXRlZCddID0gJ0locmUgUmVnaXN0cmllcnVuZ3NpbmZvcm1hdGlvbiB3dXJkZSBtb2RpZml6aWVydC4nOwokbGFuZ1sncmVnaXN0cmF0aW9uX2NvbmZpcm1hdGlvbiddID0gJ1JlZ2lzdHJpZXJ1bmdzYmVzdCZhdW1sO3RpZ3VuZyc7CiRsYW5nWyd1c2VyX3JlZ2lzdHJhdGlvbiddID0gJ1JlZ2lzdHJpZXJlbic7CiRsYW5nWydmaW5hbG1lc3NhZ2VfdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSBmJnV1bWw7ciBBYnNjaGx1c3NuYWNocmljaHQnOwokbGFuZ1sndGl0bGVfdmVyaWZ5cmVnaXN0cmF0aW9uJ10gPSAnUmVnaXN0cmllcnVuZyAmdXVtbDtiZXJwciZ1dW1sO2Zlbic7CiRsYW5nWydjb2RlJ10gPSAnJlV1bWw7YmVycHImdXVtbDtmdW5nc3NjaGwmdXVtbDtzc2VsJzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdBbHMgU3RhbmRhcmQgc2V0emVuJzsKJGxhbmdbJ2Vycm9yX25vcHJvcGVydGllcyddID0gJ0tlaW5lIEVpZ2Vuc2NoYWZ0ZW4gZiZ1dW1sO3IgZGllc2VuIEJlbnV0emVyIGdlZnVuZGVuJzsKJGxhbmdbJ2Vycm9yX25vcHJvcHJlbGF0aW9ucyddID0gJ0tlaW5lIEJlemllaHVuZ2VuIHp1IGRlciBFaWdlbnNjaGFmdCc7CiRsYW5nWydlcnJvcl9lbWFpbGludmFsaWQnXSA9ICdVbmcmdXVtbDtsdGlnZSBFbWFpbGFkcmVzc2UnOwokbGFuZ1snZXJyb3Jfbm9lbWFpbGFkZHJlc3MnXSA9ICdLZWluIGcmdXVtbDtsdGlnZXMgQWRyZXNzZmVsZCBnZWZ1bmRlbic7CiRsYW5nWydlcnJvcl9yZXF1aXJlZGZpZWxkJ10gPSAnRGFzIEZlbGQgJXMgbXVzcyBhdXNnZWYmdXVtbDtsbHQgd2VyZGVuJzsKJGxhbmdbJ3JlZ2lzdHJhdGlvbjFfdGVtcGxhdGUnXSA9ICdSZWdpc3RyaWVydW5ncy1UZW1wbGF0ZSAxJzsKJGxhbmdbJ3JlZ2lzdHJhdGlvbjJfdGVtcGxhdGUnXSA9ICdSZWdpc3RyaWVydW5ncy1UZW1wbGF0ZSAyJzsKJGxhbmdbJ2VtYWlsY29uZmlybV90ZW1wbGF0ZSddID0gJ1RlbXBsYXRlIGYmdXVtbDtyIGRpZSBFbWFpbGJlc3QmYXVtbDt0aWd1bmcnOwokbGFuZ1snZW1haWx1c2VyZWRpdGVkX3RlbXBsYXRlJ10gPSAnVGVtcGxhdGUgZiZ1dW1sO3IgZ2UmYXVtbDtuZGVydGUgQmVudXR6ZXItSW5mb3JtYXRpb25lbic7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ0VpbnN0ZWxsdW5nZW4nOwokbGFuZ1snZXJyb3JfdXNlcm5vdGZvdW5kJ10gPSAnQmVudXR6ZXIgbmljaHQgZ2VmdW5kZW4nOwokbGFuZ1snZXJyb3JfaW52YWxpZHVzZXJuYW1lJ10gPSAnRGVyIEJlbnV0emVyIGlzdCB1bmcmdXVtbDtsdGlnICh6dSBsYW5nLCB6dSBrdXJ6IG9kZXIgZW50aCZhdW1sO2x0IHVuZyZ1dW1sO2x0aWdlIFplaWNoZW4pLg0KSGlud2VpcyAtIEJlbnV0emVybmFtZW4gZCZ1dW1sO3JmZW4gbnVyIGFscGhhbnVtZXJpc2NoZSBaZWljaGVuIGVudGhhbHRlbiAoa2VpbmUgTGVlcnplaWNoZW4pLic7CiRsYW5nWydlcnJvcl91c2VybmFtZXRha2VuJ10gPSAnRGllc2VyIEJlbnV0emVybmFtZSBpc3QgYmVyZWl0cyB2ZXJnZWJlbiEnOwokbGFuZ1snZXJyb3JfcGFzc3dvcmRzZG9udG1hdGNoJ10gPSAnRkVITEVSOiBEaWUgUGFzc3cmb3VtbDtydGVyIHN0aW1tZW4gbmljaHQgJnV1bWw7YmVyZWluISc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFzc3dvcmQnXSA9ICdQYXNzd29ydCBpc3QgdW5nJnV1bWw7bHRpZyAoUGFzc3cmb3VtbDtydGVyIG0mdXVtbDtzc2VuIHp3aXNjaGVuICVzIHVuZCAlcyBaZWljaGVuIGxhbmcgc2VpbiknOwokbGFuZ1snZXJyb3JfZW1wdHl1c2VybmFtZSddID0gJ0RlciBCZW51dHplcm5hbWUgZGFyZiBuaWNodCBsZWVyIGdlbGFzc2VuIHdlcmRlbiEnOwokbGFuZ1sncmVwZWF0cGFzc3dvcmQnXSA9ICdQYXNzd29ydCAobm9jaCBlaW5tYWwpJzsKJGxhbmdbJ3Bhc3N3b3JkJ10gPSAnUGFzc3dvcnQnOwokbGFuZ1sndXNlcm5hbWUnXSA9ICdCZW51dHplcm5hbWUnOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnTW9kdWwgd3VyZGUgbWl0IHVudm9sbHN0JmF1bWw7bmRpZ2VuIChvZGVyIGZhbHNjaGVuKSBQYXJhbWV0ZXJuIGF1ZmdlcnVmZW4hJzsKJGxhbmdbJ2Vycm9yX25vZmV1c2Vyc21vZHVsZSddID0gJ0tvbm50ZSBrZWluZSBWZXJiaW5kdW5nIHp1bSBGcm9udEVuZFVzZXJzLU1vZHVsIGhlcnN0ZWxsZW4hJzsKJGxhbmdbJ2Vycm9yX25vc3VjaGdyb3VwJ10gPSAnRGllc2VyIEdydXBwZW5uYW1lIGV4aXN0aWVydCBuaWNodCEnOwokbGFuZ1snc2VuZF9lbWFpbHNfdG8nXSA9ICdSZWdpc3RyaWVydW5nc2VtYWlscyBzb2xsZW4gdmVyc2FuZHQgd2VyZGVuIGFuJzsKJGxhbmdbJ3JlcXVpcmVfZW1haWxfY29uZmlybWF0aW9uJ10gPSAnRXJmb3JkZXJsaWNoLCBkYXNzIGRlciBCZW51dHplciBkaWUgUmVnaXN0cmllcnVuZyBwZXIgRW1haWwgYmVzdCZhdW1sO3RpZ3QnOwokbGFuZ1snbm90aWZ5X29uX3JlZ2lzdHJhdGlvbiddID0gJ0JlbmFjaHJpY2h0aWd1bmdzZW1haWwgdmVyc2VuZGVuLCB3ZW5uIHNpY2ggamVtYW5kIHJlZ2lzdHJpZXJ0JzsKJGxhbmdbJ2NhbmNlbCddID0gJ0FiYnJlY2hlbic7CiRsYW5nWydzdWJtaXQnXSA9ICdBYnNlbmRlbic7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdTZWxmUmVnaXN0cmF0aW9uLU1vZHVsJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnSW5zdGFsbGF0aW9uIGVyZm9sZ3JlaWNoLCBiaXR0ZSBkZW5rZW4gU2llIGRhcmFuLCBkaWUgQmVyZWNodGlndW5nICZxdW90O01vZGlmeSBTZWxmUmVnaXN0cmF0aW9uIFNldHRpbmdzJnF1b3Q7IHp1IHNldHplbi4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0RhcyBTZWxmUmVnaXN0cmF0aW9uLU1vZHVsIGlzdCBkZWluc3RhbGxpZXJ0LiBCaXMgc3AmYXVtbDt0ZXIgZGFubi4nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bCBkZWluc3RhbGxpZXJ0Lic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bHZlcnNpb24gJXMgaW5zdGFsbGllcnQuJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ01vZHVsZWluc3RlbGx1bmdlbiBha3R1YWxpc2llcnQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ1p1Z3JpZmYgdmVyd2VpZ2VydC4gQml0dGUgJnV1bWw7YmVycHImdXVtbDtmZW4gU2llIElocmUgQmVyZWNodGlndW5nZW4uJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRmVobGVyISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsIGF1ZiBWZXJzaW9uICVzIGFrdHVhbGlzaWVydC4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTW9kdWxlaW5zdGVsbHVuZ2VuJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsYWRtaW5pc3RyYXRpb24nOwokbGFuZ1sndGl0bGVfYWRtaW5fcGFuZWwnXSA9ICdTZWxmUmVnaXN0cmF0aW9uLU1vZHVsJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnRWluIE1vZHVsLCBtaXQgd2VsY2hlbSBzaWNoIEZyb250RW5kLVVzZXIgc2VsYnN0IHJlZ2lzdHJpZXJlbiBrJm91bWw7bm5lbi4nOwokbGFuZ1snd2VsY29tZV90ZXh0J10gPSAnPHA+V2lsbGtvbW1lbiBiZWltIFNlbGZSZWdpc3RyYXRpb24tTW9kdWwuPC9wPic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+DQo8bGk+VmVyc2lvbiAwLjAuMS4gT2N0IDIwMDUuIEluaXRpYWwgTlJQVCAoTm90IFJlYWR5IGZvciBQcmltZSBUaW1lKSByZWxlYXNlLjwvbGk+DQo8bGk+VmVyc2lvbiAwLjEuMC4gT2N0IDIwMDUuIEluaXRpYWwgcmVsZWFzZS48L2xpPg0KPGxpPlZlcnNpb24gMC4xLjEuIE9jdCAyMDA1LiBTZXQgdGhlIEhUTUwgbWFpbCBmbGFnLjwvbGk+DQo8bGk+VmVyc2lvbiAwLjEuMi4gT2N0IDIwMDUuIE1vdmVkIFJhbmRvbSBzdHVmZiBpbnRvIGZldXNlcnMsIGFuZCBhZGRlZCB0aGUgYWJpbGl0eSB0byBkZWxldGUgb2xkIGVudHJpZXMgZnJvbSB0aGUgcmVnaXN0cmF0aW9uIHRlbXBvcmFyeSB0YWJsZXM8L2xpPg0KPGxpPjxwPlZlcnNpb24gMC4xLjMuIC0gRGVjIDIwMDU8L3A+DQo8cD5GaXhlZCB0aGUgdG9nZ2xlcyBpbiB0aGUgYWRtaW4gcHJlZmVyZW5jZXMuICBBbHNvLCBjaGFuZ2VkIHRoZSBwZXJtaXNzaW9ucyBtb2RlbCB0byBub3QgcmVxdWlyZSB0aGUgdW5pcXVlIHBlcm1pc3Npb24gYWRkZWQgcHJldmlvdXNseSBmb3IgdGhlIHNlbGZyZWcgbW9kdWxlLjwvcD4NCjxwPlRoaXMgcmVsZWFzZSB3YXMgcmVtb3ZlZCBkdWUgdG8gcG9zc2libGUgZXJyb3JzPC9wPg0KPC9saT4NCjxsaT48cD5WZXJzaW9uIDAuMS40LiAtIEphbiAyMDA2PC9wPg0KPHA+Rml4ZWQgbWlub3IgZXJyb3JzIHdpdGggQ2hlY2tQZXJtaXNzaW9uLCByZXBsYWNlZCBhbGwgYXNzaWduX2J5X3JlZnMmIzAzOTtzIHdpdGggYXNzaWducyBmb3IgaG9wZWZ1bCBwaHA1IGNvbXBhdGliaWxpdHkuPC9wPg0KPGxpPjxwPlZlcnNpb24gMC4xLjUuIC0gSmFuIDIwMDY8L3A+DQo8cD5BZGRlZCB0aGUgYWJpbGl0eSB0byBzZXQgdGhlIHN1YmplY3Qgb2YgdGhlIGNvbmZpcm1hdGlvbiBlbWFpbCwgYW5kIGFkZGVkIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgYSB0ZXh0IGJvZHkuICBTdWJqZWN0LCBhbmQgdGV4dCBib2R5IGFyZSByZXF1aXJlZC48L3A+DQo8L2xpPg0KPGxpPjxwPlZlcnNpb24gMS4wLjAuIC0gRmViIDIwMDY8L3A+DQo8cD5GaXhlZCBhIHByb2JsZW0gd2l0aCB0aGUgdmVyaWZ5IG1vZGUuPC9wPg0KPHA+QWRkZWQgdGhlIGFiaWxpdHkgdG8gZWRpdCBhbmQgZGVsZXRlIHVzZXJzLiB3aXRoIHNlbGVjdGlvbiBvbiB0aGUgY2hlY2tib3hlcywgYW5kICZxdW90O2NoZWNrYWxsJnF1b3Q7PC9wPg0KPHA+Tm93IHJlcXVpcmUgRkVVc2VycyAwLjEuOCBhbmQgQ01TTWFpbGVyIDEuNzMuOTwvcD4NCjxwPkFkZGVkIGFub3RoZXIgdGFiIGZvciB0aGUgJnF1b3Q7eW91ciBzZXR0aW5ncyBoYXZlIGJlZW4gYWRqdXN0ZWQmcXVvdDsgZW1haWwgdGVtcGxhdGVzPC9wPg0KPHA+QWRkZWQgQ1NWIEV4cG9ydGluZzwvcD4NCjxwPkFkZGVkIGEgJnF1b3Q7RGVsZXRlIGFsbCB1c2VycyBvbGRlciB0aGFuIGEgZGF5JnF1b3Q7IGJ1dHRvbjwvcD4NCjxwPk5vdyB3b3JrcyB3aXRoIHRoZSBtYXhpbXVtIGxlbmd0aCBmaWVsZCBvZiBGRVVzZXJzPC9wPg0KPHA+QWRkZWQgc3VwcG9ydCBmb3IgZHJvcGRvd25zIGFuZCB0ZXh0IGFyZWFzPC9wPg0KPHA+RGlzYWxsb3cgcHVuY3R1YXRpb24gY2hhcmFjdGVycyBpbiB1c2VybmFtZTwvcD4NCjwvbGk+DQo8bGk+PHA+VmVyc2lvbiAxLjAuMS4gLSBGZWIgMjAwNjwvcD4NCjxwPkFkZGVkIHRoZSBhYmlsaXR5IGZvciB1c2VycyB0byByZXF1ZXN0IGFub3RoZXIgcmVnaXN0cmF0aW9uIGVtYWlsICh1c2VzIHRoZSBzYW1lIGNvZGUpLCBpbmNhc2UgdGhleSBsb3N0IHRoZWlyIGZpcnN0IG9uZS48L3A+DQo8L2xpPg0KPGxpPjxwPlZlcnNpb24gMS4wLjIuIC0gRmViIDIwMDY8L3A+DQo8cD5UaGUgJnF1b3Q7UmVxdWlyZSBlbWFpbCBjb25maXJtYXRpb24mcXVvdDsgY2hlY2tib3ggbm93IHdvcmtzLiAgVXNlcnMgYXJlIGFkZGVkIHN0cmFpZ2h0IHRvIHRoZSBmcm9udGVuZCB1c2VycyBkYXRhYmFzZTwvcD4NCjxwPkZpeGVkIGEgYnVnIHdpdGggdGhlIGNvbmZpcm1hdGlvbiBlbWFpbHMgaGF2aW5nIGxpbmtzIHRvIHRoZSBhZG1pbiBzZWN0aW9uIChuZXcgYnVnIG9ubHkpLjwvcD4NCjwvbGk+DQo8bGk+PHA+VmVyc2lvbiAxLjAuMy4gLSBGZWIgMjAwNjwvcD4NCjxwPkFkZGVkIHRoZSAob3B0aW9uYWwpIGFiaWxpdHkgdG8gcmVxdWlyZSB0aGUgdXNlciBlbnRlciB0aGUgZW1haWwgYWRkcmVzcyB0d2ljZTwvcD4NCjxwPkZpeGVkIGEgYnVnIHdpdGggdGhlIHVzZXJlZGl0ZWQgbWVzc2FnZSBub3QgYmVpbmcgdGhyb3duIHRocm91Z2ggc21hcnR5PC9wPg0KPHA+Rml4ZWQgdGhlIGRlZmF1bHQgcmVnaXN0cmF0aW9uIHRlbXBsYXRlIGEgYml0IHRvIGFpZGUgaW4gdmFsaWRhdGlvbiBmb3Igbm9uIHJlcXVpcmVkIGZpZWxkcyAoZml4ZWQgYSB3YXJuaW5nKTwvcD4NCjxwPkZpeCBwcm9ibGVtcyB3aXRoIGlubGluZSBhbmQgbm9uLWlubGluZSBmb3JtcyBhbmQgbGlua3M8L3A+DQo8cD5IYW5kbGUgYW5vdGhlciBjYXNlIHdoZXJlIHRoZSBhZG1pbiBtYXkgbm90IGhhdmUgY3JlYXRlZCB0aGUgcHJvcGVyIHR5cGUgb2YgZW1haWwgcHJvcGVydHk8L3A+DQo8cD5DaGFuZ2VkIHRvIHJlcXVpcmUgQ01TIDAuMTItYmV0YTIgYXQgYSBtaW5pbXVtIChmb3Igc2FmZXR5IHB1cnBvc2VzKTwvcD4NCjwvbGk+DQo8bGk+PHA+VmVyc2lvbiAxLjAuNC4gLSBNYXIgMjAwNjwvcD4NCjxwPk1vcmUgY29udHJvbCBvdmVyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmaWVsZCBzaXplcyAoY29udHJvbGxlZCBieSBmZXVzZXJzKTwvcD4NCjxwPkNvbmZpcm1hdGlvbiBvbiBlZGl0aW5nIHByZWZlcmVuY2VzPC9wPg0KPHA+UmVxdWlyZSAwLjEyIHByb3BlciBvZiBjbXMgYXMgYSBtaW5pbXVtPC9wPg0KPC9saT4NCjwvdWw+JzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2FzIG1hY2h0IGRpZXNlcyBNb2R1bD88L2gzPg0KPHA+TWl0IGRpZXNlbSBNb2R1bCBrJm91bWw7bm5lbiBzaWNoIEZyb250RW5kLUJlbnV0emVyIHNlbGJzdCByZWdpc3RyaWVyZW4gdW5kIGRpZSBub3R3ZW5kaWdlbiBJbmZvcm1hdGlvbmVuIGVpbmdlYmVuLiBEYW5hY2ggd2lyZCBlaW5lIEJlc3QmYXVtbDt0aWd1bmdzZW1haWwgbWl0IGVpbmVtIExpbmsgenUgZWluZXIgendlaXRlbiBTZWl0ZSB2ZXJzYW5kdCwgdW0gZGllIFJlZ2lzdHJpZXJ1bmcgenUga29tcGxldHRpZXJlbi4gTmFjaCBkZXNzZW0gZXJmb2xncmVpY2hlbiBBYnNjaGx1c3Mgd2lyZCBpbSBGcm9udGVuZFVzZXJzLU1vZHVsIGVpbiBuZXVlcyBCZW51dHplci1Lb250byBlcnN0ZWxsdC48L3A+DQo8cD5VbSBkaWVzZXMgTW9kdWwgenUgdmVyd2VuZGVuLCBtJnV1bWw7c3NlbiBTaWUgaW0gRnJvbnRlbmRVc2VyLU1vZHVsIGVpbmUgRWlnZW5zY2hhZnQgdm9tIFR5cCAmcXVvdDtFbWFpbC1BZHJlc3NlJnF1b3Q7IGVyc3RlbGxlbiB1bmQgZGllc2UgRWlnZW5zY2hhZnQgZGFubiBtaXQgZGVyIEdydXBwZSB2ZXJiaW5kZW4sIGRpZSBmJnV1bWw7ciBTZWxic3RyZWdpc3RyaWVydW5nZW4gZWluZ2VzZXR6dCB3ZXJkZW4gc29sbC48L3A+DQo8aDM+V2llIHdpcmQgZXMgZWluZ2VzZXR6dCA/PC9oMz4NCjxwPkYmdXVtbDtnZW4gU2llIGRlbiBUYWcge2Ntc19tb2R1bGUgbW9kdWxlPVNlbGZSZWdpc3RyYXRpb24gZ3JvdXA9dXNlcmdyb3VwfSBpbiBJaHJlIFNlaXRlIGVpbi48L3A+DQo8cD5EYW1pdCBkYXMgTW9kdWwgZnVua3Rpb25pZXJ0LCBtJnV1bWw7c3NlbiBTaWUgamVkb2NoIHp1dm9yIGRpZSBVc2VyZ3J1cHBlbiB1bmQgZGVyZW4gRWlnZW5zY2hhZnRlbiBpbSBGcm9udGVuZFVzZXJzLU1vZHVsIGVyc3RlbGx0IGhhYmVuLjwvcD4NCjxoMz5QYXJhbWV0ZXI8L2gzPg0KPHA+PHN0cm9uZz5tb2RlPC9zdHJvbmc+Jm5ic3A7PGVtPm9wdGlvbmFsPC9lbT4gLSBtJm91bWw7Z2xpY2hlIFdlcnRlIHNpbmQgJnF1b3Q7c2lnbnVwJnF1b3Q7IHVuZCAmcXVvdDt2ZXJpZnkmcXVvdDsuICBXZW5uIGRpZXNlciBQYXJhbWV0ZXIgbmljaHQgZ2VzZXR6dCB3dXJkZSwgaXN0ICZxdW90O3NpZ251cCZxdW90OyBkZXIgU3RhbmRhcmQuPC9wPg0KPHA+PHN0cm9uZz5ncm91cDwvc3Ryb25nPiZuYnNwOzxlbT5vcHRpb25hbDwvZW0+IC0gRGllc2VyIFBhcmFtZXRlciBpc3QgZXJmb3JkZXJsaWNoLCB3ZW5uIGRlciBNb2R1cyAmcXVvdDtzaWdudXAmcXVvdDsgaXN0IG9kZXIgbmljaHQgZ2VzZXR6dCB3dXJkZS48L3A+DQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5EaWVzZXMgTW9kdWwgYmVpbmhhbHRldCBrZWluZW4ga29tbWVyemllbGxlbiBTdXBwb3J0LiBTaWUgayZvdW1sO25uZW4gamVkb2NoICZ1dW1sO2JlciBmb2xnZW5kZSBNJm91bWw7Z2xpY2hrZWl0ZW4gSGlsZmUgenUgZGVtIE1vZHVsIGVyaGFsdGVuOjwvcD4NCjx1bD4NCjxsaT5GJnV1bWw7ciBkaWUgbGV0enRlIFZlcnNpb24gZGllc2VzIE1vZHVscywgRkFRcywgZGVtIFZlcnNhbmQgZWluZXMgRmVobGVycmVwb3J0cyBvZGVyIGRlbSBLYXVmIGtvbW1lcnppZWxsZW4gU3VwcG9ydCBiZXN1Y2hlbiBTaWUgYml0dGUgY2FsZ3V5cyANCkhvbWVwYWdlIHVudGVyIDxhIGhyZWY9JnF1b3Q7aHR0cDovL3RlY2hjb20uZHluZG5zLm9yZyZxdW90Oz50ZWNoY29tLmR5bmRucy5vcmc8L2E+LjwvbGk+DQo8bGk+RWluZSB3ZWl0ZXJlIERpc2t1c3Npb24genUgZGllc2VtIE1vZHVsIGlzdCBhdWNoIGluIGRlbiBGb3JlbiB2b24gPGEgaHJlZj0mcXVvdDtodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmcmcXVvdDs+Q01TIE1hZGUgU2ltcGxlPC9hPiB6dSBmaW5kZW4uPC9saT4NCjxsaT5EZXIgQXV0b3IgY2FsZ3V5MTAwMCwgaXN0IGgmYXVtbDt1ZmlnIGltIDxhIGhyZWY9JnF1b3Q7aXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zJnF1b3Q7PkNNUyBJUkMgQ2hhbm5lbDwvYT4genUgZmluZGVuLjwvbGk+DQo8bGk+TGV0enRsaWNoIGVycmVpY2hlbiBTaWUgZGVuIEF1dG9yIGF1Y2ggJnV1bWw7YmVyIGVpbmUgZGlyZWt0ZSBFbWFpbC48L2xpPiAgICANCjwvdWw+DQo8cD5OYWNoIGRlciBHUEwgd2lyZCBkaWVzZSBTb2Z0d2FyZSBzbyB2ZXImb3VtbDtmZmVudGxpY2h0LCB3aWUgc2llIGlzdC4gQml0dGUgbGVzZW4gU2llIGRlbg0KIExpemVuenRleHQgZiZ1dW1sO3IgZGVuIHZvbGxlbiBIYWZ0dW5nc2F1c3NjaGx1c3MuPC9wPg0KDQo8aDM+Q29weXJpZ2h0IHVuZCBMaXplbno8L2gzPg0KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA1LCBSb2JlcnQgQ2FtcGJlbGwgPGEgaHJlZj0mcXVvdDttYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSZxdW90Oz48Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbT48L2E+LiBBbGxlIFJlY2h0ZSB2b3JiZWhhbHRlbi48L3A+DQo8cD5EaWVzZXMgTW9kdWwgd3VyZGUgdW50ZXIgZGVyIDxhIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMJnF1b3Q7PkdOVSBQdWJsaWMgTGljZW5zZTwvYT4gdmVyJm91bWw7ZmZlbnRsaWNodC4gU2llIG0mdXVtbDtzc2VuIGRpZXNlciBMaXplbnogenVzdGltbWVuLCBiZXZvciBTaWUgZGFzIE1vZHVsIHZlcndlbmRlbi48L3A+DQonOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMTU4MDgyODgxLjY1LjMzLnV0bWNjbj0ocmVmZXJyYWwpfHV0bWNzcj1mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZ3x1dG1jY3Q9L2luZGV4LnBocHx1dG1jbWQ9cmVmZXJyYWwnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My43MTc0NjI3MzYuMTE0NzUxMTg1Ni4xMTU4MTM3MTQzLjExNTgxNzc5MjUuNjcnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/et_EE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2Vycm9yX2NvZGVzZG9udG1hdGNoJ10gPSAnVHVydmFrb29kLCBtaWxsZSBzaXNlc3Rhc2lkLCBvbiB2aWdhbmUnOwokbGFuZ1snZXZlbnRfZGVzY3JpcHRpb25fb25OZXdVc2VyJ10gPSAnUyZ1dW1sO25kbXVzLCBtaXMgbiZhdW1sO2l0YWIsIGV0IHV1cyBrYXN1dGFqYSBvbiByZWdpbWlzdHJlZXJpbWlzdm9ybWkgdCZhdW1sO2l0bnVkJzsKJGxhbmdbJ2V2ZW50X2Rlc2NyaXB0aW9uX29uVXNlclJlZ2lzdGVyZWQnXSA9ICdTJnV1bWw7bmRtdXMsIG1pcyBuJmF1bWw7aXRhYiwgZXQga2FzdXRhamEgb24gb21hIHJlZ2lzdHJlZXJpbmd1IGtpbm5pdGFudWRuaW5nIG9uIHQmYXVtbDtpZWxpa3VsdCBFTEsga2FzdXRhamFrcyByZWdpc3RyZWVyaXR1ZCc7CiRsYW5nWydldmVudF9oZWxwX29uTmV3VXNlciddID0gJzxwPlMmdXVtbDtuZG11cywgbWlzIG4mYXVtbDtpdGFiLCBldCB1dXMga2FzdXRhamEgb24gcmVnaW1pc3RyZWVyaW1pc3Zvcm1pIHQmYXVtbDtpdG51ZDwvcD4NCjxoND5QYXJhbWVldHJpZDwvaDQ+DQo8dWw+DQo8bGk+PGVtPmthc3V0YWphbmltaTwvZW0+IC0gdXVlIGthc3V0YWphIGthc3V0YWphbmltaTwvbGk+DQo8bGk+PGVtPmUtbWFpbDwvZW0+IC0gdXVlIGthc3V0YWphIGUtbWFpbGkgYWFkcmVzczwvbGk+DQo8L3VsPg0KJzsKJGxhbmdbJ2V2ZW50X2hlbHBfb25Vc2VyUmVnaXN0ZXJlZCddID0gJzxwPlMmdXVtbDtuZG11cywgbWlzIG4mYXVtbDtpdGFiLCBldCBrYXN1dGFqYSBvbiBvbWEgcmVnaXN0cmVlcmluZ3Uga2lubml0YW51ZG5pbmcgb24gdCZhdW1sO2llbGlrdWx0IEZFVSBrYXN1dGFqYWtzIHJlZ2lzdHJlZXJpdHVkPC9wPg0KPGg0PlBhcmFtZWV0cmlkPC9oND4NCjx1bD4NCjxsaT48ZW0+a2FzdXRhamFuaW1pPC9lbT4gLSByZWdpc3RyZWVyaW51ZCBrYXN1dGFqYSBrYXN1dGFqYW5pbWk8L2xpPg0KPC91bD4NCic7CiRsYW5nWydjb25maXJtX3N1Ym1pdHByZWZzJ10gPSAnTXV1ZGEgYWRtaW5pc3RyYWF0b3JpIGVlbGlzdHVzaT8nOwokbGFuZ1snaW5mb19hZG1pbl9wYXNzd29yZCddID0gJ0t1aSBzYSBlaSBzb292aSBrYXN1dGFqYSBwYXJvb2xpIG11dXRhLCBqJmF1bWw7dGEgc2VlIHYmYXVtbDtsaSB0JnV1bWw7aGpha3MnOwokbGFuZ1snaW5mb19hZG1pbl9yZXBlYXRwYXNzd29yZCddID0gJ0t1aSBzYSBlaSBzb292aSBrYXN1dGFqYSBwYXJvb2xpIG11dXRhLCBqJmF1bWw7dGEgc2VlIHYmYXVtbDtsaSB0JnV1bWw7aGpha3MnOwokbGFuZ1snZXJyb3JfZW1haWxkb2Vzbm90bWF0Y2gnXSA9ICdFLW1haWxpIGFhZHJlc3NpZCBlaSBrYXR0dSc7CiRsYW5nWydmb3JjZV9lbWFpbF90d2ljZSddID0gJ0UtbWFpbGkgcGVhYiBzaXNlc3RhbWEgMiBrb3JkYSc7CiRsYW5nWydhZ2FpbiddID0gJ3V1ZXN0aSc7CiRsYW5nWydkZWxldGVzZWx1c2VycyddID0gJ0t1c3R1dGEgVmFsaXR1ZCBLYXN1dGFqYWQnOwokbGFuZ1snZXJyb3Jfbm9wcm9wZGVmbnMnXSA9ICdPbWFkdXNpIGVpIG9sZSwgdiZvdGlsZGU7aSBlc2luZXMgcHJvYmxlZW0gbmVuZGUgayZhdW1sO3R0ZXNhYW1pc2VnYSBhbmRtZWJhYXNpc3QuJzsKJGxhbmdbJ2Vycm9yX25vZ3JvdXBzJ10gPSAnR3J1cHBlIGVpIG9sZSwgdiZvdGlsZGU7aSBlc2luZXMgcHJvYmxlZW0gZ3J1cHBpZGUgbmltZWtpcmphIGsmYXVtbDt0dGVzYWFtaXNlZ2EgYW5kbWViYWFzaXN0Lic7CiRsYW5nWydlcnJvcl9kYmVycm9yJ10gPSAnQW5kbWViYWFzaSB2aWdhJzsKJGxhbmdbJ3RpdGxlX3Bvc3Rfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZSddID0gJ1Bvc3RpdGEgS2FkdW51ZCBFLW1haWxpIE1hbGwnOwokbGFuZ1sndGl0bGVfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZSddID0gJ0thZHVudWQgRS1tYWlsaSBNYWxsJzsKJGxhbmdbJ2NsaWNraGVyZSddID0gJ0tsaWtpIFNpaW4nOwokbGFuZ1snbXNnX3NlbmRhbm90aGVyZW1haWwnXSA9ICdNYSBvbGVuIGtvcnJhIGp1YmEgcmVnaXN0cmVlcmltaXN2b3JtaSB0JmF1bWw7aXRudWQsIGt1aWQgZWkgc2FhbnVkIGUtbWFpbGkuIEthcyB0ZSBzYWFrc2l0ZSBzZWxsZSBtdWxlIHV1ZXN0aSBzYWF0YT8nOwokbGFuZ1snc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZSddID0gJ0thZHVudWQgRS1tYWlsaSBNYWxsJzsKJGxhbmdbJ2luZm9fdXNlcnZlcmlmaWVkJ10gPSAnVXVzIGthc3V0YWphIGxpc2F0dWQgRUxLLXNzZSc7CiRsYW5nWydlZGl0J10gPSAnTXV1ZGEnOwokbGFuZ1sndW5rbm93biddID0gJ1R1bmRtYXR1JzsKJGxhbmdbJ3NlbGVjdCddID0gJ1ZhbGknOwokbGFuZ1snY2hlY2tfYWxsJ10gPSAnTSZhdW1sO3JnaXN0YSBLJm90aWxkZTtpayc7CiRsYW5nWyd1bmNoZWNrX2FsbCddID0gJ0VlbWFsZGEgTSZhdW1sO3JnaXN0dXNlZCc7CiRsYW5nWydzZW5kX2FkanVzdG1lbnRlbWFpbCddID0gJ1NhYWRhIGthc3V0YWphbGUgZS1tYWlsJzsKJGxhbmdbJ3R4dF9hZGp1c3RtZW50ZW1haWwnXSA9ICcoaW5mb3JtZWVyaWIga2FzdXRhamF0LCBldCB0ZW1hIGtvbnRvdCBvbiBtdXVkZXR1ZCknOwokbGFuZ1sndHh0X2NoYW5nZXBhc3N3b3JkJ10gPSAnVCZhdW1sO2lkYSBuZWVkIHYmYXVtbDtsamFkLCBrdWkgc29vdmlkIG11dXRhIGthc3V0YWphIHBhcm9vbGknOwokbGFuZ1snZWRpdHVzZXInXSA9ICdNdXVkYSBLYXN1dGFqYXQnOwokbGFuZ1snYXJleW91c3VyZV9kZWxldGV1c2VyJ10gPSAnT2xlZCBzYSBraW5kZWwsIGV0IHNvb3ZpZCBrdXN0dXRhZGEgc2VsbGUgb3NhbGlzZWx0IHJlZ2lzdHJlZXJpbnVkIGthc3V0YWphPyc7CiRsYW5nWydoZHJfdXNlcmlkJ10gPSAnS2FzdXRhamEgSUQnOwokbGFuZ1snaGRyX3VzZXJuYW1lJ10gPSAnS2FzdXRhamFuaW1pJzsKJGxhbmdbJ2hkcl9ncnBuYW1lJ10gPSAnR3J1cHAnOwokbGFuZ1snaGRyX2NyZWF0ZWQnXSA9ICdMb29kdWQnOwokbGFuZ1snaGRyX2VtYWlsJ10gPSAnRS1tYWlsJzsKJGxhbmdbJ3VzZXJzZm91bmQnXSA9ICdLYXN1dGFqYSh0KSBsZWl0dWQgKG1ha3NpbWFhbHNlbHQgMjUwKSc7CiRsYW5nWyd1c2VycyddID0gJ0thc3V0YWphZCc7CiRsYW5nWydsaXN0MWRheSddID0gJ04mYXVtbDtpdGEgayZvdGlsZGU7aWtpIHNpc2VzdHVzaSwgbWlzIG9uIHZhbmVtYWQga3VpIDEgcCZhdW1sO2V2JzsKJGxhbmdbJ3N1YmplY3QnXSA9ICdWJmF1bWw7bGphbWluZXZhIGUtbWFpbGkgdGVlbWEnOwokbGFuZ1snaHRtbGJvZHknXSA9ICdIVE1MIGtpcmphIHNpc3UnOwokbGFuZ1sndGV4dGJvZHknXSA9ICdUZWtzdGlwJm90aWxkZTtoaXNlIGtpcmphIHNpc3UnOwokbGFuZ1sncHJvbXB0X251bXJlc2V0cmVjb3JkJ10gPSAnTSZvdGlsZGU7bmluZ2F0ZSBrYXN1dGFqYXRlIHJlZ2lzdHJlZXJpbWluZSBvbiBwb29sZWxpLiBIZXRrZWwgb24gbmVpZCBrYXN1dGFqYWlkOic7CiRsYW5nWydyZW1vdmUxd2VlayddID0gJ0VlbWFsZGEgayZvdGlsZGU7aWsgc2lzZXN0dXNlZCwgbWlzIG9uIHZhbmVtYWQga3VpIDEgbiZhdW1sO2RhbCc7CiRsYW5nWydyZW1vdmUxbW9udGgnXSA9ICdFZW1hbGRhIGsmb3RpbGRlO2lrIHNpc2VzdHVzZWQsIG1pcyBvbiB2YW5lbWFkIGt1aSAxIGt1dSc7CiRsYW5nWydyZW1vdmUxZGF5J10gPSAnRWVtYWxkYSBrJm90aWxkZTtpayBzaXNlc3R1c2VkLCBtaXMgb24gdmFuZW1hZCBrdWkgMSBwJmF1bWw7ZXYnOwokbGFuZ1sncmVtb3ZlYWxsJ10gPSAnRWVtYWxkYSBrJm90aWxkZTtpayBzaXNlc3R1c2VkJzsKJGxhbmdbJ2FyZXlvdXN1cmUnXSA9ICdPbGVkIHNhIGtpbmRlbD8nOwokbGFuZ1sncmVnaXN0cmF0aW9uX2luZm9fZWRpdGVkJ10gPSAnU2ludSByZWdpc3RyZWVyaW1pc2luZm8gb24gdXVlbmRhdHVkJzsKJGxhbmdbJ3JlZ2lzdHJhdGlvbl9jb25maXJtYXRpb24nXSA9ICdSZWdpc3RyZWVyaW1pc2UgS2lubml0dXMnOwokbGFuZ1sndXNlcl9yZWdpc3RyYXRpb24nXSA9ICdSZWdpc3RyZWVyaSc7CiRsYW5nWydmaW5hbG1lc3NhZ2VfdGVtcGxhdGUnXSA9ICdMJm90aWxkZTtwbGlrdSBUZWF0ZSBNYWxsJzsKJGxhbmdbJ3RpdGxlX3ZlcmlmeXJlZ2lzdHJhdGlvbiddID0gJ0tpbm5pdGEgUmVnaXN0cmVlcmluZyc7CiRsYW5nWydjb2RlJ10gPSAnVHVydmFrb29kJzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdUYWFzdGEgYWxnc2VhZGVkJzsKJGxhbmdbJ2Vycm9yX25vcHJvcGVydGllcyddID0gJ1NlbGxlIGthc3V0YWphIG9tYWR1c2kgZWkgbGVpdHVkJzsKJGxhbmdbJ2Vycm9yX25vcHJvcHJlbGF0aW9ucyddID0gJ1Nlb3NlaWQgb21hZHVzdGVnYSBlaSBvbGUnOwokbGFuZ1snZXJyb3JfZW1haWxpbnZhbGlkJ10gPSAnVmlnYW5lIGUtbWFpbGkgYWFkcmVzcyc7CiRsYW5nWydlcnJvcl9ub2VtYWlsYWRkcmVzcyddID0gJ0tlaHRpdmF0IGUtbWFpbGkgYWFkcmVzc2kgdiZhdW1sO2xqYSBlaSBsZWl0dWQnOwokbGFuZ1snZXJyb3JfcmVxdWlyZWRmaWVsZCddID0gJyVzIHYmYXVtbDtsaSBvbiBrb2h1c3R1c2xpayc7CiRsYW5nWydyZWdpc3RyYXRpb24xX3RlbXBsYXRlJ10gPSAnUmVnc2l0cmVlcmltaXNlIE1hbGwgMSc7CiRsYW5nWydyZWdpc3RyYXRpb24yX3RlbXBsYXRlJ10gPSAnUmVnc2l0cmVlcmltaXNlIE1hbGwgMic7CiRsYW5nWydlbWFpbGNvbmZpcm1fdGVtcGxhdGUnXSA9ICdLaW5uaXR1c2UgRS1tYWlsaSBNYWxsJzsKJGxhbmdbJ2VtYWlsdXNlcmVkaXRlZF90ZW1wbGF0ZSddID0gJ0thc3V0YWphIEluZm8gTXV1ZGV0dWQgTWFsbCc7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ0VlbGlzdHVzZWQnOwokbGFuZ1snZXJyb3JfdXNlcm5vdGZvdW5kJ10gPSAnS2FzdXRhamF0IGVpIGxlaXR1ZCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXNlcm5hbWUnXSA9ICdrYXN1dGFqYW5pbWkgb24gdmlnYW5lIChsaWlnYSBwaWtrLCBsJnV1bWw7aGlrZSwgdiZvdGlsZGU7aSBzaXNhbGRhYiBrZWVsYXR1ZCBtJmF1bWw7cmtlKS4gTWVlbGRldHVsZXR1czoga2FzdXRhamFuaW1pIHYmb3RpbGRlO2liIHNpc2FsZGFkYSB2YWlkIHQmYXVtbDtodGkgKHQmdXVtbDtoaWt1ZCBqYSBzcGV0c2lhYWxzZWQgbSZhdW1sO3JnaWQtcyZ1dW1sO21ib2xpZCBrZWVsYXR1ZCknOwokbGFuZ1snZXJyb3JfdXNlcm5hbWV0YWtlbiddID0gJ1NlZSBrYXN1dGFqYW5pbWkgb24ganViYSBrYXN1dHVzZWwnOwokbGFuZ1snZXJyb3JfcGFzc3dvcmRzZG9udG1hdGNoJ10gPSAnVklHQTogUGFyb29saWQgZWkga2F0dHUnOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhc3N3b3JkJ10gPSAnUGFyb29sIG9uIHZpZ2FuZSAocGFyb29saWQgcGVhdmFkIG9sZW1hIHYmYXVtbDtoZW1hbHQgJXMga3VuaSAlcyB0JmF1bWw7aGVtJmF1bWw7cmtpIHBpa2FkKSc7CiRsYW5nWydlcnJvcl9lbXB0eXVzZXJuYW1lJ10gPSAnS2FzdXRhamFuaW1pIHBlYWIgb2xlbWEgdCZhdW1sO2lkZXR1ZCc7CiRsYW5nWydyZXBlYXRwYXNzd29yZCddID0gJ1Bhcm9vbCAodXVlc3RpKSc7CiRsYW5nWydwYXNzd29yZCddID0gJ1Bhcm9vbCc7CiRsYW5nWyd1c2VybmFtZSddID0gJ0thc3V0YWphbmltaSc7CiRsYW5nWydlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnXSA9ICdNb29kdWxpbGUgYW50dWQgcGFyYW1lZXRyaXRlIGFydiBvbiBlYmFwaWlzYXYgdiZvdGlsZGU7aSB2aWdhbmUnOwokbGFuZ1snZXJyb3Jfbm9mZXVzZXJzbW9kdWxlJ10gPSAnRWkgc3V1ZGEgbGFhZGlkYSBFTEsgbW9vZHVsaXQnOwokbGFuZ1snZXJyb3Jfbm9zdWNoZ3JvdXAnXSA9ICdTZWxsaXNlIG5pbWVnYSBncnVwcGkgZWkgZWtzaXN0ZWVyaSc7CiRsYW5nWydzZW5kX2VtYWlsc190byddID0gJ1JlZ2lzdHJlZXJpbWlzZSBlLW1hbGlkIHR1bGVrcyBzYWF0YSBhYWRyZXNzaWxlJzsKJGxhbmdbJ3JlcXVpcmVfZW1haWxfY29uZmlybWF0aW9uJ10gPSAnS2FzdXRhamEgcGVhYiBvbWEgcmVnaXN0cmVlcmluZ3UgZS1tYWlsaSB0ZWVsIGtpbm5pdGFtYSc7CiRsYW5nWydub3RpZnlfb25fcmVnaXN0cmF0aW9uJ10gPSAnU2FhZGEgdGVhZGEsIGt1aSBrZWVnaSByZWdpc3RyZWVyaWInOwokbGFuZ1snY2FuY2VsJ10gPSAnVCZ1dW1sO2hpc3RhJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1NhYWRhJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VuZXNlIFJlZ2lzdHJlZXJpbWlzZSBNb29kdWwnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdJbnN0YWxsZWVyaW1pbmUgJm90aWxkZTtubmVzdHVzLiBNJmF1bWw7JmF1bWw7cmEga2luZGxhc3RpIGFzamFnYSBzZW90dWQga2FzdXRhamF0ZWxlICZxdW90O01vZGlmeSBTZWxmUmVnaXN0cmF0aW9uIFNldHRpbmdzJnF1b3Q7ICZvdGlsZGU7aWd1cy4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0VuZXNlIFJlZ2lzdHJlZXJpbWlzZSBNb29kdWwgZWVtYWxkYXR1ZC4nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb29kdWwgZWVtYWxkYXR1ZC4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9vZHVsaSB2ZXJzaW9vbiAlcyBpbnN0YWxsZWVyaXR1ZC4nOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9vZHVsaSBlZWxpc3R1c2VkIHV1ZW5kYXR1ZC4nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnTGlnaXAmYXVtbDsmYXVtbDtzIGtlZWxhdHVkLiBQYWx1biBrb250cm9sbGkgb21hICZvdGlsZGU7aWd1c2kuJzsKJGxhbmdbJ2Vycm9yJ10gPSAnVmlnYSEnOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb29kdWwgdXVlbmRhdHVkIHZlcnNpb29uaWxlICVzLic7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdNb29kdWxpIEVlbGlzdHVzZWQnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnTW9vZHVsaSBBZG1pbnN0cmVlcmltaXNwYW5lZWwnOwokbGFuZ1sndGl0bGVfYWRtaW5fcGFuZWwnXSA9ICdFbmVzZSBSZWdpc3RyZWVyaW1pc2UgTW9vZHVsJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnTW9vZHVsLCBtaXMgbGFzZWIgZWVzbGlpdGUgKGtvZHVsZWhlIGthc3V0YWphbGlpZGVzZSkga2FzdXRhamF0ZWwgZW5uYXN0IGlzZSBrYXN1dGFqYWtzIHJlZ3NpdHJlZXJpZGEuJzsKJGxhbmdbJ3dlbGNvbWVfdGV4dCddID0gJzxwPlRlcmUgdHVsZW1hc3QgRW5lc2UgUmVnaXN0cmVlcmltaXNlIE1vb2R1bGlsZS48L3A+JzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4NCjxsaT5WZXJzaW9uIDAuMC4xLiBPY3QgMjAwNS4gSW5pdGlhbCBOUlBUIChOb3QgUmVhZHkgZm9yIFByaW1lIFRpbWUpIHJlbGVhc2UuPC9saT4NCjxsaT5WZXJzaW9uIDAuMS4wLiBPY3QgMjAwNS4gSW5pdGlhbCByZWxlYXNlLjwvbGk+DQo8bGk+VmVyc2lvbiAwLjEuMS4gT2N0IDIwMDUuIFNldCB0aGUgSFRNTCBtYWlsIGZsYWcuPC9saT4NCjxsaT5WZXJzaW9uIDAuMS4yLiBPY3QgMjAwNS4gTW92ZWQgUmFuZG9tIHN0dWZmIGludG8gZmV1c2VycywgYW5kIGFkZGVkIHRoZSBhYmlsaXR5IHRvIGRlbGV0ZSBvbGQgZW50cmllcyBmcm9tIHRoZSByZWdpc3RyYXRpb24gdGVtcG9yYXJ5IHRhYmxlczwvbGk+DQo8bGk+PHA+VmVyc2lvbiAwLjEuMy4gLSBEZWMgMjAwNTwvcD4NCjxwPkZpeGVkIHRoZSB0b2dnbGVzIGluIHRoZSBhZG1pbiBwcmVmZXJlbmNlcy4gIEFsc28sIGNoYW5nZWQgdGhlIHBlcm1pc3Npb25zIG1vZGVsIHRvIG5vdCByZXF1aXJlIHRoZSB1bmlxdWUgcGVybWlzc2lvbiBhZGRlZCBwcmV2aW91c2x5IGZvciB0aGUgc2VsZnJlZyBtb2R1bGUuPC9wPg0KPHA+VGhpcyByZWxlYXNlIHdhcyByZW1vdmVkIGR1ZSB0byBwb3NzaWJsZSBlcnJvcnM8L3A+DQo8L2xpPg0KPGxpPjxwPlZlcnNpb24gMC4xLjQuIC0gSmFuIDIwMDY8L3A+DQo8cD5GaXhlZCBtaW5vciBlcnJvcnMgd2l0aCBDaGVja1Blcm1pc3Npb24sIHJlcGxhY2VkIGFsbCBhc3NpZ25fYnlfcmVmcyYjMDM5O3Mgd2l0aCBhc3NpZ25zIGZvciBob3BlZnVsIHBocDUgY29tcGF0aWJpbGl0eS48L3A+DQo8bGk+PHA+VmVyc2lvbiAwLjEuNS4gLSBKYW4gMjAwNjwvcD4NCjxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCB0aGUgc3ViamVjdCBvZiB0aGUgY29uZmlybWF0aW9uIGVtYWlsLCBhbmQgYWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHRleHQgYm9keS4gIFN1YmplY3QsIGFuZCB0ZXh0IGJvZHkgYXJlIHJlcXVpcmVkLjwvcD4NCjwvbGk+DQo8bGk+PHA+VmVyc2lvbiAxLjAuMC4gLSBGZWIgMjAwNjwvcD4NCjxwPkZpeGVkIGEgcHJvYmxlbSB3aXRoIHRoZSB2ZXJpZnkgbW9kZS48L3A+DQo8cD5BZGRlZCB0aGUgYWJpbGl0eSB0byBlZGl0IGFuZCBkZWxldGUgdXNlcnMuIHdpdGggc2VsZWN0aW9uIG9uIHRoZSBjaGVja2JveGVzLCBhbmQgJnF1b3Q7Y2hlY2thbGwmcXVvdDs8L3A+DQo8cD5Ob3cgcmVxdWlyZSBGRVVzZXJzIDAuMS44IGFuZCBDTVNNYWlsZXIgMS43My45PC9wPg0KPHA+QWRkZWQgYW5vdGhlciB0YWIgZm9yIHRoZSAmcXVvdDt5b3VyIHNldHRpbmdzIGhhdmUgYmVlbiBhZGp1c3RlZCZxdW90OyBlbWFpbCB0ZW1wbGF0ZXM8L3A+DQo8cD5BZGRlZCBDU1YgRXhwb3J0aW5nPC9wPg0KPHA+QWRkZWQgYSAmcXVvdDtEZWxldGUgYWxsIHVzZXJzIG9sZGVyIHRoYW4gYSBkYXkmcXVvdDsgYnV0dG9uPC9wPg0KPHA+Tm93IHdvcmtzIHdpdGggdGhlIG1heGltdW0gbGVuZ3RoIGZpZWxkIG9mIEZFVXNlcnM8L3A+DQo8cD5BZGRlZCBzdXBwb3J0IGZvciBkcm9wZG93bnMgYW5kIHRleHQgYXJlYXM8L3A+DQo8cD5EaXNhbGxvdyBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIGluIHVzZXJuYW1lPC9wPg0KPC9saT4NCjxsaT48cD5WZXJzaW9uIDEuMC4xLiAtIEZlYiAyMDA2PC9wPg0KPHA+QWRkZWQgdGhlIGFiaWxpdHkgZm9yIHVzZXJzIHRvIHJlcXVlc3QgYW5vdGhlciByZWdpc3RyYXRpb24gZW1haWwgKHVzZXMgdGhlIHNhbWUgY29kZSksIGluY2FzZSB0aGV5IGxvc3QgdGhlaXIgZmlyc3Qgb25lLjwvcD4NCjwvbGk+DQo8bGk+PHA+VmVyc2lvbiAxLjAuMi4gLSBGZWIgMjAwNjwvcD4NCjxwPlRoZSAmcXVvdDtSZXF1aXJlIGVtYWlsIGNvbmZpcm1hdGlvbiZxdW90OyBjaGVja2JveCBub3cgd29ya3MuICBVc2VycyBhcmUgYWRkZWQgc3RyYWlnaHQgdG8gdGhlIGZyb250ZW5kIHVzZXJzIGRhdGFiYXNlPC9wPg0KPHA+Rml4ZWQgYSBidWcgd2l0aCB0aGUgY29uZmlybWF0aW9uIGVtYWlscyBoYXZpbmcgbGlua3MgdG8gdGhlIGFkbWluIHNlY3Rpb24gKG5ldyBidWcgb25seSkuPC9wPg0KPC9saT4NCjxsaT48cD5WZXJzaW9uIDEuMC4zLiAtIEZlYiAyMDA2PC9wPg0KPHA+QWRkZWQgdGhlIChvcHRpb25hbCkgYWJpbGl0eSB0byByZXF1aXJlIHRoZSB1c2VyIGVudGVyIHRoZSBlbWFpbCBhZGRyZXNzIHR3aWNlPC9wPg0KPHA+Rml4ZWQgYSBidWcgd2l0aCB0aGUgdXNlcmVkaXRlZCBtZXNzYWdlIG5vdCBiZWluZyB0aHJvd24gdGhyb3VnaCBzbWFydHk8L3A+DQo8cD5GaXhlZCB0aGUgZGVmYXVsdCByZWdpc3RyYXRpb24gdGVtcGxhdGUgYSBiaXQgdG8gYWlkZSBpbiB2YWxpZGF0aW9uIGZvciBub24gcmVxdWlyZWQgZmllbGRzIChmaXhlZCBhIHdhcm5pbmcpPC9wPg0KPHA+Rml4IHByb2JsZW1zIHdpdGggaW5saW5lIGFuZCBub24taW5saW5lIGZvcm1zIGFuZCBsaW5rczwvcD4NCjxwPkhhbmRsZSBhbm90aGVyIGNhc2Ugd2hlcmUgdGhlIGFkbWluIG1heSBub3QgaGF2ZSBjcmVhdGVkIHRoZSBwcm9wZXIgdHlwZSBvZiBlbWFpbCBwcm9wZXJ0eTwvcD4NCjxwPkNoYW5nZWQgdG8gcmVxdWlyZSBDTVMgMC4xMi1iZXRhMiBhdCBhIG1pbmltdW0gKGZvciBzYWZldHkgcHVycG9zZXMpPC9wPg0KPC9saT4NCjxsaT48cD5WZXJzaW9uIDEuMC40LiAtIE1hciAyMDA2PC9wPg0KPHA+TW9yZSBjb250cm9sIG92ZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkIHNpemVzIChjb250cm9sbGVkIGJ5IGZldXNlcnMpPC9wPg0KPHA+Q29uZmlybWF0aW9uIG9uIGVkaXRpbmcgcHJlZmVyZW5jZXM8L3A+DQo8cD5SZXF1aXJlIDAuMTIgcHJvcGVyIG9mIGNtcyBhcyBhIG1pbmltdW08L3A+DQo8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+VGhpcyBtb2R1bGUgaXMgZGVzaWduZWQgdG8gYWxsb3cgZnJvbnQgZW5kIHVzZXJzIHRvIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgYW5kIGZpbGwgaW4gdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLiAgSXQgdGhlbiBzZW5kcyBhIGNvbmZpcm1hdGlvbiBlbWFpbCwgd2l0aCBhIGxpbmsgdG8gYSBzZWNvbmQgcGFnZSB0aGF0IG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSB0aGUgcmVnaXN0cmF0aW9uIGlzIGNvbXBsZXRlLiAgT25jZSByZWdpc3RyYXRpb24gaXMgY29tcGxldGUsIGEgdXNlciBhY2NvdW50IGlzIGNyZWF0ZWQgaW4gdGhlIGZyb250IGVuZCB1c2VycyBtb2R1bGUuPC9wPg0KPHA+SW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9kdWxlLCB5b3UgbXVzdCBjcmVhdGUgYSBwcm9wZXJ0eSBvZiB0eXBlICZxdW90O0VtYWlsIEFkZHJlc3MmcXVvdDsgaW4gdGhlIEZyb250ZW5kVXNlcnMgbW9kdWxlLCBhbmQgYXNzb2NpYXRlIHRoYXQgcHJvcGVydHkgd2l0aCB0aGUgZ3JvdXAgdG8gYmUgdXNlZCBmb3Igc2VsZiByZWdpc3RyYXRpb24uPC9wPg0KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+DQo8cD5Zb3UgcGxhY2UgdGhlIGZvbGxvd25nIHRhZyBpbnRvIHlvdXIgcGFnZSB7Y21zX21vZHVsZSBtb2R1bGU9U2VsZlJlZ2lzdHJhdGlvbiBncm91cD11c2VyZ3JvdXB9PC9wPg0KPHA+WW91IG11c3QgaGF2ZSBwcmV2aW91c2x5IGNyZWF0ZWQgcHJvcGVydGllcyBhbmQgdXNlciBncm91cHMgaW4gdGhlIEZyb250RW5kVXNlcnMgbW9kdWxlIGluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmsgcHJvcGVybHkuPC9wPg0KPGgzPlBhcmFtZXRlcnM8L2gzPg0KPHA+PHN0cm9uZz5tb2RlPC9zdHJvbmc+Jm5ic3A7PGVtPm9wdGlvbmFsPC9lbT4gLSBwb3NzaWJsZSB2YWx1ZXMgYXJlICZxdW90O3NpZ251cCZxdW90OyBhbmQgJnF1b3Q7dmVyaWZ5JnF1b3Q7LiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgJnF1b3Q7c2lnbnVwJnF1b3Q7IGlzIGFzc3VtYmVkLjwvcD4NCjxwPjxzdHJvbmc+Z3JvdXA8L3N0cm9uZz4mbmJzcDs8ZW0+b3B0aW9uYWw8L2VtPiAtIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGlmIG1vZGUgaXMgJnF1b3Q7c2lnbnVwJnF1b3Q7LCBvciBpZiBtb2RlIGlzIGxlZnQgZW1wdHkuPC9wPg0KPGgzPlN1cHBvcnQ8L2gzPg0KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPg0KPHVsPg0KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCBjYWxndXkmIzAzOTtzDQptb2R1bGUgaG9tZXBhZ2UgYXQgPGEgaHJlZj0mcXVvdDtodHRwOi8vdGVjaGNvbS5keW5kbnMub3JnJnF1b3Q7PnRlY2hjb20uZHluZG5zLm9yZzwvYT4uPC9saT4NCjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9JnF1b3Q7aHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7PkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSZxdW90O2lyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyZxdW90Oz5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+DQo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIA0KPC91bD4NCjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dA0Kb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KDQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwNSwgUm9iZXJ0IENhbXBiZWwgPGEgaHJlZj0mcXVvdDttYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSZxdW90Oz48Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbT48L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmcXVvdDs+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4NCic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjExNTcxMjE2MTguMS4xLnV0bWNjbj0oZGlyZWN0KXx1dG1jc3I9KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjE1MjYzMzIwNTMuMTE1NzEyMTYxOC4xMTU3NjU5OTQyLjExNTc3NDU5NTAuNSc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/it_IT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2Vycm9yX2NvZGVzZG9udG1hdGNoJ10gPSAnTGEgY2hpYXZlIGRpIHZhbGlkYXppb25lIG5vbiAmZWdyYXZlOyBpbnZhbGlkYSc7CiRsYW5nWydldmVudF9kZXNjcmlwdGlvbl9vbk5ld1VzZXInXSA9ICdVbiBldmVudG8gaW5kaWNhIGNoZSB1biBudW92byB1dGVudGUgaGEgY29tcGxldGF0byBpbCBtb2R1bG8gZGkgcmVnaXN0cmF6aW9uZSc7CiRsYW5nWydldmVudF9kZXNjcmlwdGlvbl9vblVzZXJSZWdpc3RlcmVkJ10gPSAnVW4gZXZlbnRvIGluZGljYSBjaGUgdW4gdXRlbnRlIGhhIHZlcmlmaWNhdG8gbGUgc3VlIGluZm9ybWF6aW9uaSBlIG9yYSAmZWdyYXZlOyBjb21wbGV0YW1lbnRlIHJlZ2lzdHJhdG8nOwokbGFuZ1snZXZlbnRfaGVscF9vbk5ld1VzZXInXSA9ICc8cD5BbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBuZXcgdXNlciBoYXMgY29tcGxldGVkIHRoZSByZWdpc3RyYXRpb24gZm9ybTwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+dXNlcm5hbWU8L2VtPiAtIFRoZSBuZXcgdXNlcnMgc2VsZWN0ZWQgdXNlcm5hbWU8L2xpPg0KPGxpPjxlbT5lbWFpbDwvZW0+IC0gVGhlIG5ldyB1c2VycyBlbWFpbCBhZGRyZXNzPC9saT4NCjwvdWw+DQonOwokbGFuZ1snZXZlbnRfaGVscF9vblVzZXJSZWdpc3RlcmVkJ10gPSAnPHA+QW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IGEgdXNlciBoYXMgYmVlbiB2ZXJpZmllZCBhbmQgaXMgbm93IHJlZ2lzdGVyZWQgd2l0aCBmZXVzZXJzPC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT51c2VybmFtZTwvZW0+IC0gVGhlIHJlZ2lzdGVyZWQgdXNlcm5hbWU8L2xpPg0KPC91bD4NCic7CiRsYW5nWydjb25maXJtX3N1Ym1pdHByZWZzJ10gPSAnQ2FtYmlhcmUgbGUgcHJlZmVyZW56ZSBkaSBhbW1pbmlzdHJhemlvbmU/JzsKJGxhbmdbJ2luZm9fYWRtaW5fcGFzc3dvcmQnXSA9ICdMYXNjaWEgcXVlc3RvIGNhbXBvIHZ1b3RvIHBlciBwcmVzZXJ2YXJlIGxhIHBhc3N3b3JkJzsKJGxhbmdbJ2luZm9fYWRtaW5fcmVwZWF0cGFzc3dvcmQnXSA9ICdMYXNjaWEgcXVlc3RvIGNhbXBvIHZ1b3RvIHBlciBwcmVzZXJ2YXJlIGxhIHBhc3N3b3JkJzsKJGxhbmdbJ2Vycm9yX2VtYWlsZG9lc25vdG1hdGNoJ10gPSAnSW5kaXJpenppIGVtYWlsIG5vbiBjb2luY2lkb25vJzsKJGxhbmdbJ2ZvcmNlX2VtYWlsX3R3aWNlJ10gPSAnRSYjMDM5OyByaWNoaWVzdG8gY2hlIGwmIzAzOTt1dGVudGUgaW50cm9kdWNhIGwmIzAzOTtpbmRpcml6em8gZW1haWwgZHVlIHZvbHRlJzsKJGxhbmdbJ2FnYWluJ10gPSAnZGkgbnVvdm8nOwokbGFuZ1snZGVsZXRlc2VsdXNlcnMnXSA9ICdDYW5jZWxsYSBnbGkgdXRlbnRpIHNlbGV6aW9uYXRpJzsKJGxhbmdbJ2Vycm9yX25vcHJvcGRlZm5zJ10gPSAnTmVzc3VuYSBkZWZpbml6aW9uZSBkaSBwcm9wcmlldCZhZ3JhdmU7LCBvIHVuIHByb2JsZW1hIGEgcmljZXZlcmxlIGRhbCBkYXRhYmFzZSc7CiRsYW5nWydlcnJvcl9ub2dyb3VwcyddID0gJ05lc3N1biBncnVwcG8sIG8gdW4gcHJvYmxlbWEgYSByaWNldmVyZSBsYSBsaXN0YSBncnVwcGknOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0Vycm9yZSBuZWwgZGF0YWJhc2UnOwokbGFuZ1sndGl0bGVfcG9zdF9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJ10gPSAnTW9kZWxsbyBwZXIgRW1haWwgcGVyc2EgaW5zZXJpdG8nOwokbGFuZ1sndGl0bGVfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZSddID0gJ01vZGVsbG8gcGVyIEVtYWlsIHBlcnNhJzsKJGxhbmdbJ2NsaWNraGVyZSddID0gJ3ByZW1lbmRvIHF1YSc7CiRsYW5nWydtc2dfc2VuZGFub3RoZXJlbWFpbCddID0gJ0F2ZXRlIGNvbXBsZXRhdG8gaWwgbW9kdWxvIGRpIHJlZ2lzdHJhemlvbmUgbWEgbm9uIGF2ZXRlIHJpY2V2dXRvIHVuYSBlbWFpbC4gUG90ZXRlIHJpc3BlZGlyZSB1biYjMDM5O2FsdHJhIGVtYWlsJzsKJGxhbmdbJ3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnXSA9ICdNb2RlbGxvIHBlciBFbWFpbCBwZXJzYSc7CiRsYW5nWydpbmZvX3VzZXJ2ZXJpZmllZCddID0gJ1VuIG51b3ZvIHV0ZW50ZSAmZWdyYXZlOyBzdGF0byBhZ2dpdW50byBhaSBGcm9udEVuZFVzZXJzJzsKJGxhbmdbJ2VkaXQnXSA9ICdNb2RpZmljYSc7CiRsYW5nWyd1bmtub3duJ10gPSAnU2Nvbm9zY2l1dG8nOwokbGFuZ1snc2VsZWN0J10gPSAnU2VsZXppb25hJzsKJGxhbmdbJ2NoZWNrX2FsbCddID0gJ1NlbGV6aW9uYSB0dXR0byc7CiRsYW5nWyd1bmNoZWNrX2FsbCddID0gJ0Rlc2VsZXppb25hIHR1dHRvJzsKJGxhbmdbJ3NlbmRfYWRqdXN0bWVudGVtYWlsJ10gPSAnU3BlZGlzY2UgdW5hIGVtYWlsIGFsbCYjMDM5O3V0ZW50ZSc7CiRsYW5nWyd0eHRfYWRqdXN0bWVudGVtYWlsJ10gPSAnKGluZm9ybWEgbCYjMDM5O3V0ZW50ZSBjaGUgbCYjMDM5O2FjY291bnQgJmVncmF2ZTsgc3RhdG8gY29uc29saWRhdG8nOwokbGFuZ1sndHh0X2NoYW5nZXBhc3N3b3JkJ10gPSAnUmllbXBpcmUgcXVlc3RpIGNhbXBpIHBlciBjYW1iaWFyZSBsYSBwYXNzd29yZCc7CiRsYW5nWydlZGl0dXNlciddID0gJ01vZGlmaWNhIHV0ZW50ZSc7CiRsYW5nWydhcmV5b3VzdXJlX2RlbGV0ZXVzZXInXSA9ICdTZWkgc2ljdXJvIGRpIHZvbGVyIGNhbmNlbGxhcmUgcXVlc3RvIHV0ZW50ZSByZWdpc3RyYXRvIHBhcnppYWxtZW50ZT8nOwokbGFuZ1snaGRyX3VzZXJpZCddID0gJ1VzZXJJRCc7CiRsYW5nWydoZHJfdXNlcm5hbWUnXSA9ICdVc2VybmFtZSc7CiRsYW5nWydoZHJfZ3JwbmFtZSddID0gJ0dydXBwbyc7CiRsYW5nWydoZHJfY3JlYXRlZCddID0gJ0NyZWF0byc7CiRsYW5nWydoZHJfZW1haWwnXSA9ICdFbWFpbCc7CiRsYW5nWyd1c2Vyc2ZvdW5kJ10gPSAnVXRlbnRpIHRyb3ZhdGkgKGxpbWl0YXRvIGFkIHVuIG1hc3NpbW8gZGkgMjUwKSc7CiRsYW5nWyd1c2VycyddID0gJ1V0ZW50aSc7CiRsYW5nWydsaXN0MWRheSddID0gJ1Zpc3VhbGl6emEgdHV0dGUgbGUgZW50cmF0ZSBwaSZ1Z3JhdmU7IHZlY2NoaWUgZGkgdW4gZ2lvcm5vJzsKJGxhbmdbJ3N1YmplY3QnXSA9ICdPZ2dldHRvIHBlciBsZSBlbWFpbCBpbiB1c2NpdGEnOwokbGFuZ1snaHRtbGJvZHknXSA9ICdDb3JwbyBkZWwgbWVzc2FnZ2lvIGluIEhUTUwnOwokbGFuZ1sndGV4dGJvZHknXSA9ICdDb3JwbyBkZWwgbWVzc2FnZ2lvIGNvbWUgdGVzdG8nOwokbGFuZ1sncHJvbXB0X251bXJlc2V0cmVjb3JkJ10gPSAnVW4gbnVtZXJvIGRpIHV0ZW50aSBzb25vIG5lbCBtZXp6byBkZWxsYSByZWdpc3RyYXppb25lLiBJbiBxdWVzdG8gbW9tZW50byBpbCBjb250YXRvcmUgJmVncmF2ZTsgYTonOwokbGFuZ1sncmVtb3ZlMXdlZWsnXSA9ICdSaW11b3ZlIHR1dHRlIGxlIGVudHJhdGUgcGkmdWdyYXZlOyB2ZWNjaGllIGRpIHVuYSBzZXR0aW1hbmEnOwokbGFuZ1sncmVtb3ZlMW1vbnRoJ10gPSAnUmltdW92ZSB0dXR0ZSBsZSBlbnRyYXRlIHBpJnVncmF2ZTsgdmVjY2hpZSBkaSB1biBtZXNlJzsKJGxhbmdbJ3JlbW92ZTFkYXknXSA9ICdSaW11b3ZlIHR1dHRlIGxlIGVudHJhdGUgcGkmdWdyYXZlOyB2ZWNjaGllIGRpIHVuIGdpb3Jubyc7CiRsYW5nWydyZW1vdmVhbGwnXSA9ICdSaW11b3ZlIHR1dHRlIGxlIGVudHJhdGUnOwokbGFuZ1snYXJleW91c3VyZSddID0gJ1NlaSBzaWN1cm8/JzsKJGxhbmdbJ3JlZ2lzdHJhdGlvbl9pbmZvX2VkaXRlZCddID0gJ0xhIHZvc3RyYSByZWdpc3RyYXppb25lICZlZ3JhdmU7IHN0YXRhIG1vZGlmaWNhdGEnOwokbGFuZ1sncmVnaXN0cmF0aW9uX2NvbmZpcm1hdGlvbiddID0gJ0NvbmZlcm1hIGRlbGxhIHJlZ2lzdHJhemlvbmUnOwokbGFuZ1sndXNlcl9yZWdpc3RyYXRpb24nXSA9ICdSZWdpc3RyYXRpJzsKJGxhbmdbJ2ZpbmFsbWVzc2FnZV90ZW1wbGF0ZSddID0gJ01vZGVsbG8gZGVsIG1lc3NhZ2dpbyBmaW5hbGUnOwokbGFuZ1sndGl0bGVfdmVyaWZ5cmVnaXN0cmF0aW9uJ10gPSAnVmVyaWZpY2EgZGVsbGEgcmVnaXN0cmF6aW9uZSc7CiRsYW5nWydjb2RlJ10gPSAnQ2hpYXZlIGRpIHZhbGlkYXppb25lJzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdTZXR0YSBhaSB2YWxvcmkgcHJlZGVmaW5pdGknOwokbGFuZ1snZXJyb3Jfbm9wcm9wZXJ0aWVzJ10gPSAnTmVzc3VuYSBwcm9wcmlldCZhZ3JhdmU7IHBlciBxdWVzdG8gdXRlbnRlJzsKJGxhbmdbJ2Vycm9yX25vcHJvcHJlbGF0aW9ucyddID0gJ05lc3N1bmEgcmVsYXppb25lIGRlbGxlIHByb3ByaWV0JmFncmF2ZTsnOwokbGFuZ1snZXJyb3JfZW1haWxpbnZhbGlkJ10gPSAnSW5kaXJpenpvIGVtYWlsIG5vbiB2YWxpZG8nOwokbGFuZ1snZXJyb3Jfbm9lbWFpbGFkZHJlc3MnXSA9ICdOZXNzdW4gY2FtcG8gcGVyIHVuIHZhbGlkbyBpbmRpcml6em8gZW1haWwgJmVncmF2ZTsgc3RhdG8gdHJvdmF0byc7CiRsYW5nWydlcnJvcl9yZXF1aXJlZGZpZWxkJ10gPSAnSWwgY2FtcG8gJXMgZGV2ZSBlc3NlcmUgcHJlc2VudGUnOwokbGFuZ1sncmVnaXN0cmF0aW9uMV90ZW1wbGF0ZSddID0gJ01vZGVsbG8gMSBwZXIgbGEgcmVnaXN0cmF6aW9uZSc7CiRsYW5nWydyZWdpc3RyYXRpb24yX3RlbXBsYXRlJ10gPSAnTW9kZWxsbyAyIHBlciBsYSByZWdpc3RyYXppb25lJzsKJGxhbmdbJ2VtYWlsY29uZmlybV90ZW1wbGF0ZSddID0gJ01vZGVsbG8gcGVyIGxhIGNvbmZlcm1hIGRhIGVtYWlsJzsKJGxhbmdbJ2VtYWlsdXNlcmVkaXRlZF90ZW1wbGF0ZSddID0gJ01vZGVsbG8gcGVyIGlsIGNhbWJpbyBkZWxsZSBpbmZvcm1hemlvbmkgdXRlbnRlJzsKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnUHJlZmVyZW56ZSc7CiRsYW5nWydlcnJvcl91c2Vybm90Zm91bmQnXSA9ICdVdGVudGUgbm9uIHRyb3ZhdG8nOwokbGFuZ1snZXJyb3JfaW52YWxpZHVzZXJuYW1lJ10gPSAnVXNlcm5hbWUgbm9uIHZhbGlkbyAodHJvcHBvIGx1bmdvLCB0cm9wcG8gY29ydG8gbyBjb250aWVuZSBjYXJhdHRlcmkgbm9uIHZhbGlkaSkuIFNpIHJpY29yZGEgY2hlIGRldmUgY29udGVuZXJlIHNvbG8gY2FyYXR0ZXJpIGFsZmFudW1lcmljaSBzZW56YSBzcGF6aS4nOwokbGFuZ1snZXJyb3JfdXNlcm5hbWV0YWtlbiddID0gJ1F1ZXN0byB1c2VybmFtZSAmZWdyYXZlOyBnaSZhZ3JhdmU7IGluIHVzbyc7CiRsYW5nWydlcnJvcl9wYXNzd29yZHNkb250bWF0Y2gnXSA9ICdFcnJvcmU6IGxlIHBhc3N3b3JkIG5vbiBjb2luY2lkb25vJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRwYXNzd29yZCddID0gJ1Bhc3N3b3JkIGludmFsaWRhIChkZXZlIGVzc2VyZSBjb21wcmVzYSBmcmEgJXMgZSAlcyBjYXJhdHRlcmkgYWxmYW51bWVyaWNpIHNlbnphIHNwYXppKSc7CiRsYW5nWydlcnJvcl9lbXB0eXVzZXJuYW1lJ10gPSAnVXNlcm5hbWUgbm9uIHB1Jm9ncmF2ZTsgZXNzZXJlIHZ1b3RvJzsKJGxhbmdbJ3JlcGVhdHBhc3N3b3JkJ10gPSAnUGFzc3dvcmQgKGRpIG51b3ZvKSc7CiRsYW5nWydwYXNzd29yZCddID0gJ1Bhc3N3b3JkJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnVXNlcm5hbWUnOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnTnVtZXJvIGluc3VmZmljaWVudGUgKG8gbm9uIGNvcnJldHRvKSBkaSBwYXJhbWV0cmkgaW50cm9kb3R0aSBhbCBtb2R1bG8nOwokbGFuZ1snZXJyb3Jfbm9mZXVzZXJzbW9kdWxlJ10gPSAnTm9uIHBvc3NvIHByZW5kZXJlIHVuYSBpc3RhbnphIGRlbCBtb2R1bG8gRnJvbnRFbmRVc2Vycyc7CiRsYW5nWydlcnJvcl9ub3N1Y2hncm91cCddID0gJ0lsIG5vbWUgZ3J1cHBvIHNwZWNpZmljYXRvIG5vbiBlc2lzdGUnOwokbGFuZ1snc2VuZF9lbWFpbHNfdG8nXSA9ICdMYSBlbWFpbCBkaSByZWdpc3RyYXppb25lIHNhciZhZ3JhdmU7IHNwZWRpdGEgYSc7CiRsYW5nWydyZXF1aXJlX2VtYWlsX2NvbmZpcm1hdGlvbiddID0gJ1NpIHJpY2hpZWRlIGNoZSBsJiMwMzk7dXRlbnRlIGNvbmZlcm1pIGxhIHJlZ2lzdHJhemlvbmUgdmlhIGVtYWlsJzsKJGxhbmdbJ25vdGlmeV9vbl9yZWdpc3RyYXRpb24nXSA9ICdTcGVkaXNjZSB1bmEgZW1haWwgZGkgbm90aWZpY2EgcXVhbmRvIHF1YWxjdW5vIHNpIHJlZ2lzdHJhJzsKJGxhbmdbJ2NhbmNlbCddID0gJ0NhbmNlbGxhJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ0lub2x0cmEnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnTW9kdWxvIGRpIFNlbGYgUmVnaXN0cmF0aW9uJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnSW5zdGFsbGF0byBjb24gc3VjY2Vzc28sIHNpIHJpY29yZGkgc2kgc2V0dGFyZSBpbCBwZXJtZXNzbyBwZXIgJnF1b3Q7TW9kaWZ5IFNlbGZSZWdpc3RyYXRpb24gU2V0dGluZ3MmcXVvdDsuJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdJbCBtb2R1bG8gU2VsZiBSZWdpc3RyYXRpb24gJmVncmF2ZTsgZGlzaW5zdGFsbGF0by4nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bG8gZGlzaW5zdGFsbGF0by4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnVmVyc2lvbmUgZGVsIG1vZHVsbyAlcyBpbnN0YWxsYXRhLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdQcmVmZXJlbnplIGRlbCBtb2R1bG8gYWdnaW9ybmF0ZS4nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNzbyBuZWdhdG8uIFNpIHByZWdhIGRpIGNvbnRyb2xsYXJlIGkgcGVybWVzc2kuJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyb3JlISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsbyBhZ2dpb3JuYXRvIGFsbGEgdmVyc2lvbmUgJXMuJzsKJGxhbmdbJ3RpdGxlX21vZF9wcmVmcyddID0gJ1ByZWZlcmVuemUgbW9kdWxvJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ1Bhbm5lbGxvIGRpIGFtbWluaXN0cmF6aW9uZSBkZWwgbW9kdWxvJzsKJGxhbmdbJ3RpdGxlX2FkbWluX3BhbmVsJ10gPSAnTW9kdWxvIFNlbGYgUmVnaXN0cmF0aW9uJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnVW4gbW9kdWxvIGNoZSBwZXJtZXR0ZSBhZ2xpIHV0ZW50aSBkaSBhdXRvIHJlZ2lzdHJhcnNpLic7CiRsYW5nWyd3ZWxjb21lX3RleHQnXSA9ICc8cD5CZW52ZW51dGkgbmVsIG1vZHVsbyBkaSBhdXRvcmVnaXN0cmF6aW9uZS48L3A+JzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4NCjxsaT5WZXJzaW9uIDAuMC4xLiBPY3QgMjAwNS4gSW5pdGlhbCBOUlBUIChOb3QgUmVhZHkgZm9yIFByaW1lIFRpbWUpIHJlbGVhc2UuPC9saT4NCjxsaT5WZXJzaW9uIDAuMS4wLiBPY3QgMjAwNS4gSW5pdGlhbCByZWxlYXNlLjwvbGk+DQo8bGk+VmVyc2lvbiAwLjEuMS4gT2N0IDIwMDUuIFNldCB0aGUgSFRNTCBtYWlsIGZsYWcuPC9saT4NCjxsaT5WZXJzaW9uIDAuMS4yLiBPY3QgMjAwNS4gTW92ZWQgUmFuZG9tIHN0dWZmIGludG8gZmV1c2VycywgYW5kIGFkZGVkIHRoZSBhYmlsaXR5IHRvIGRlbGV0ZSBvbGQgZW50cmllcyBmcm9tIHRoZSByZWdpc3RyYXRpb24gdGVtcG9yYXJ5IHRhYmxlczwvbGk+DQo8bGk+PHA+VmVyc2lvbiAwLjEuMy4gLSBEZWMgMjAwNTwvcD4NCjxwPkZpeGVkIHRoZSB0b2dnbGVzIGluIHRoZSBhZG1pbiBwcmVmZXJlbmNlcy4gIEFsc28sIGNoYW5nZWQgdGhlIHBlcm1pc3Npb25zIG1vZGVsIHRvIG5vdCByZXF1aXJlIHRoZSB1bmlxdWUgcGVybWlzc2lvbiBhZGRlZCBwcmV2aW91c2x5IGZvciB0aGUgc2VsZnJlZyBtb2R1bGUuPC9wPg0KPHA+VGhpcyByZWxlYXNlIHdhcyByZW1vdmVkIGR1ZSB0byBwb3NzaWJsZSBlcnJvcnM8L3A+DQo8L2xpPg0KPGxpPjxwPlZlcnNpb24gMC4xLjQuIC0gSmFuIDIwMDY8L3A+DQo8cD5GaXhlZCBtaW5vciBlcnJvcnMgd2l0aCBDaGVja1Blcm1pc3Npb24sIHJlcGxhY2VkIGFsbCBhc3NpZ25fYnlfcmVmcyYjMDM5O3Mgd2l0aCBhc3NpZ25zIGZvciBob3BlZnVsIHBocDUgY29tcGF0aWJpbGl0eS48L3A+DQo8bGk+PHA+VmVyc2lvbiAwLjEuNS4gLSBKYW4gMjAwNjwvcD4NCjxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCB0aGUgc3ViamVjdCBvZiB0aGUgY29uZmlybWF0aW9uIGVtYWlsLCBhbmQgYWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHRleHQgYm9keS4gIFN1YmplY3QsIGFuZCB0ZXh0IGJvZHkgYXJlIHJlcXVpcmVkLjwvcD4NCjwvbGk+DQo8bGk+PHA+VmVyc2lvbiAxLjAuMC4gLSBGZWIgMjAwNjwvcD4NCjxwPkZpeGVkIGEgcHJvYmxlbSB3aXRoIHRoZSB2ZXJpZnkgbW9kZS48L3A+DQo8cD5BZGRlZCB0aGUgYWJpbGl0eSB0byBlZGl0IGFuZCBkZWxldGUgdXNlcnMuIHdpdGggc2VsZWN0aW9uIG9uIHRoZSBjaGVja2JveGVzLCBhbmQgJnF1b3Q7Y2hlY2thbGwmcXVvdDs8L3A+DQo8cD5Ob3cgcmVxdWlyZSBGRVVzZXJzIDAuMS44IGFuZCBDTVNNYWlsZXIgMS43My45PC9wPg0KPHA+QWRkZWQgYW5vdGhlciB0YWIgZm9yIHRoZSAmcXVvdDt5b3VyIHNldHRpbmdzIGhhdmUgYmVlbiBhZGp1c3RlZCZxdW90OyBlbWFpbCB0ZW1wbGF0ZXM8L3A+DQo8cD5BZGRlZCBDU1YgRXhwb3J0aW5nPC9wPg0KPHA+QWRkZWQgYSAmcXVvdDtEZWxldGUgYWxsIHVzZXJzIG9sZGVyIHRoYW4gYSBkYXkmcXVvdDsgYnV0dG9uPC9wPg0KPHA+Tm93IHdvcmtzIHdpdGggdGhlIG1heGltdW0gbGVuZ3RoIGZpZWxkIG9mIEZFVXNlcnM8L3A+DQo8cD5BZGRlZCBzdXBwb3J0IGZvciBkcm9wZG93bnMgYW5kIHRleHQgYXJlYXM8L3A+DQo8cD5EaXNhbGxvdyBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIGluIHVzZXJuYW1lPC9wPg0KPC9saT4NCjxsaT48cD5WZXJzaW9uIDEuMC4xLiAtIEZlYiAyMDA2PC9wPg0KPHA+QWRkZWQgdGhlIGFiaWxpdHkgZm9yIHVzZXJzIHRvIHJlcXVlc3QgYW5vdGhlciByZWdpc3RyYXRpb24gZW1haWwgKHVzZXMgdGhlIHNhbWUgY29kZSksIGluY2FzZSB0aGV5IGxvc3QgdGhlaXIgZmlyc3Qgb25lLjwvcD4NCjwvbGk+DQo8bGk+PHA+VmVyc2lvbiAxLjAuMi4gLSBGZWIgMjAwNjwvcD4NCjxwPlRoZSAmcXVvdDtSZXF1aXJlIGVtYWlsIGNvbmZpcm1hdGlvbiZxdW90OyBjaGVja2JveCBub3cgd29ya3MuICBVc2VycyBhcmUgYWRkZWQgc3RyYWlnaHQgdG8gdGhlIGZyb250ZW5kIHVzZXJzIGRhdGFiYXNlPC9wPg0KPHA+Rml4ZWQgYSBidWcgd2l0aCB0aGUgY29uZmlybWF0aW9uIGVtYWlscyBoYXZpbmcgbGlua3MgdG8gdGhlIGFkbWluIHNlY3Rpb24gKG5ldyBidWcgb25seSkuPC9wPg0KPC9saT4NCjxsaT48cD5WZXJzaW9uIDEuMC4zLiAtIEZlYiAyMDA2PC9wPg0KPHA+QWRkZWQgdGhlIChvcHRpb25hbCkgYWJpbGl0eSB0byByZXF1aXJlIHRoZSB1c2VyIGVudGVyIHRoZSBlbWFpbCBhZGRyZXNzIHR3aWNlPC9wPg0KPHA+Rml4ZWQgYSBidWcgd2l0aCB0aGUgdXNlcmVkaXRlZCBtZXNzYWdlIG5vdCBiZWluZyB0aHJvd24gdGhyb3VnaCBzbWFydHk8L3A+DQo8cD5GaXhlZCB0aGUgZGVmYXVsdCByZWdpc3RyYXRpb24gdGVtcGxhdGUgYSBiaXQgdG8gYWlkZSBpbiB2YWxpZGF0aW9uIGZvciBub24gcmVxdWlyZWQgZmllbGRzIChmaXhlZCBhIHdhcm5pbmcpPC9wPg0KPHA+Rml4IHByb2JsZW1zIHdpdGggaW5saW5lIGFuZCBub24taW5saW5lIGZvcm1zIGFuZCBsaW5rczwvcD4NCjxwPkhhbmRsZSBhbm90aGVyIGNhc2Ugd2hlcmUgdGhlIGFkbWluIG1heSBub3QgaGF2ZSBjcmVhdGVkIHRoZSBwcm9wZXIgdHlwZSBvZiBlbWFpbCBwcm9wZXJ0eTwvcD4NCjxwPkNoYW5nZWQgdG8gcmVxdWlyZSBDTVMgMC4xMi1iZXRhMiBhdCBhIG1pbmltdW0gKGZvciBzYWZldHkgcHVycG9zZXMpPC9wPg0KPC9saT4NCjxsaT48cD5WZXJzaW9uIDEuMC40LiAtIE1hciAyMDA2PC9wPg0KPHA+TW9yZSBjb250cm9sIG92ZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkIHNpemVzIChjb250cm9sbGVkIGJ5IGZldXNlcnMpPC9wPg0KPHA+Q29uZmlybWF0aW9uIG9uIGVkaXRpbmcgcHJlZmVyZW5jZXM8L3A+DQo8cD5SZXF1aXJlIDAuMTIgcHJvcGVyIG9mIGNtcyBhcyBhIG1pbmltdW08L3A+DQo8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+VGhpcyBtb2R1bGUgaXMgZGVzaWduZWQgdG8gYWxsb3cgZnJvbnQgZW5kIHVzZXJzIHRvIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgYW5kIGZpbGwgaW4gdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLiAgSXQgdGhlbiBzZW5kcyBhIGNvbmZpcm1hdGlvbiBlbWFpbCwgd2l0aCBhIGxpbmsgdG8gYSBzZWNvbmQgcGFnZSB0aGF0IG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSB0aGUgcmVnaXN0cmF0aW9uIGlzIGNvbXBsZXRlLiAgT25jZSByZWdpc3RyYXRpb24gaXMgY29tcGxldGUsIGEgdXNlciBhY2NvdW50IGlzIGNyZWF0ZWQgaW4gdGhlIGZyb250IGVuZCB1c2VycyBtb2R1bGUuPC9wPg0KPHA+SW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9kdWxlLCB5b3UgbXVzdCBjcmVhdGUgYSBwcm9wZXJ0eSBvZiB0eXBlICZxdW90O0VtYWlsIEFkZHJlc3MmcXVvdDsgaW4gdGhlIEZyb250ZW5kVXNlcnMgbW9kdWxlLCBhbmQgYXNzb2NpYXRlIHRoYXQgcHJvcGVydHkgd2l0aCB0aGUgZ3JvdXAgdG8gYmUgdXNlZCBmb3Igc2VsZiByZWdpc3RyYXRpb24uPC9wPg0KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+DQo8cD5Zb3UgcGxhY2UgdGhlIGZvbGxvd25nIHRhZyBpbnRvIHlvdXIgcGFnZSB7Y21zX21vZHVsZSBtb2R1bGU9U2VsZlJlZ2lzdHJhdGlvbiBncm91cD11c2VyZ3JvdXB9PC9wPg0KPHA+WW91IG11c3QgaGF2ZSBwcmV2aW91c2x5IGNyZWF0ZWQgcHJvcGVydGllcyBhbmQgdXNlciBncm91cHMgaW4gdGhlIEZyb250RW5kVXNlcnMgbW9kdWxlIGluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmsgcHJvcGVybHkuPC9wPg0KPGgzPlBhcmFtZXRlcnM8L2gzPg0KPHA+PHN0cm9uZz5tb2RlPC9zdHJvbmc+Jm5ic3A7PGVtPm9wdGlvbmFsPC9lbT4gLSBwb3NzaWJsZSB2YWx1ZXMgYXJlICZxdW90O3NpZ251cCZxdW90OyBhbmQgJnF1b3Q7dmVyaWZ5JnF1b3Q7LiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgJnF1b3Q7c2lnbnVwJnF1b3Q7IGlzIGFzc3VtYmVkLjwvcD4NCjxwPjxzdHJvbmc+Z3JvdXA8L3N0cm9uZz4mbmJzcDs8ZW0+b3B0aW9uYWw8L2VtPiAtIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGlmIG1vZGUgaXMgJnF1b3Q7c2lnbnVwJnF1b3Q7LCBvciBpZiBtb2RlIGlzIGxlZnQgZW1wdHkuPC9wPg0KPGgzPlN1cHBvcnQ8L2gzPg0KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPg0KPHVsPg0KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCBjYWxndXkmIzAzOTtzDQptb2R1bGUgaG9tZXBhZ2UgYXQgPGEgaHJlZj0mcXVvdDtodHRwOi8vdGVjaGNvbS5keW5kbnMub3JnJnF1b3Q7PnRlY2hjb20uZHluZG5zLm9yZzwvYT4uPC9saT4NCjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9JnF1b3Q7aHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7PkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSZxdW90O2lyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyZxdW90Oz5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+DQo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIA0KPC91bD4NCjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dA0Kb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KDQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmYW1wO2NvcHk7IDIwMDUsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9JnF1b3Q7bWFpbHRvOmNhbGd1eTEwMDBAaG90bWFpbC5jb20mcXVvdDs+JmFtcDtsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmFtcDtndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmcXVvdDs+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4nOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My43OTAwMjM2OTkuMTE1MzEyNzgzNi4xMTUzMTI3ODM2LjExNTM5ODUzMTYuMic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjExNTM5ODUzMTYuMi4yLnV0bWNjbj0ocmVmZXJyYWwpfHV0bWNzcj1mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZ3x1dG1jY3Q9L3x1dG1jbWQ9cmVmZXJyYWwnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2Vycm9yX2NvZGVzZG9udG1hdGNoJ10gPSAnVmFsaWRlcmluZ3MgbiZvc2xhc2g7a2tlbGVuIG9wcGdpdHQgZXIgaWtrZSBneWxkaWcnOwokbGFuZ1snZXZlbnRfZGVzY3JpcHRpb25fb25OZXdVc2VyJ10gPSAnRW4gaGVuZGVsc2Ugc29tIGluZGlrZXJlciBhdCBlbiBueSBicnVrZXIgaGFyIGZ5bHQgdXQgcmVnaXN0cmVyaW5nc3NramVtYWV0JzsKJGxhbmdbJ2V2ZW50X2Rlc2NyaXB0aW9uX29uVXNlclJlZ2lzdGVyZWQnXSA9ICdFbiBIZW5kZWxzZSBzb20gaW5kaWtlcmVyIGF0IGVuIGJydWtlciBoYXIgYmVrcmVmdGV0IHNpbiBpbmZvcm1hc2pvbiBvZyBlciBuJmFyaW5nOyBmdWxsdCByZWdpc3RyZXJ0JzsKJGxhbmdbJ2V2ZW50X2hlbHBfb25OZXdVc2VyJ10gPSAnPHA+RW4gSGVuZGVsc2Ugc29tIGluZGlrZXJlciBhdCBlbiBueSBicnVrZXIgaGFyIGZ1bGxmJm9zbGFzaDtydCByZWdpc3RyZXJpbmdzc2tqZW1hZXQ8L3A+DQo8aDQ+SW5uc3RpbGxpbmdlcjwvaDQ+DQo8dWw+DQo8bGk+PGVtPmJydWtlcm5hdm48L2VtPiAtIERlbiBueWUgYnJ1a2VyZW5zIHZhbGd0ZSBicnVrZXJuYXZuPC9saT4NCjxsaT48ZW0+ZW1haWw8L2VtPiAtIERlbiBueWUgYnJ1a2VyZW5zIGVtYWlsYWRyZXNzZTwvbGk+DQo8L3VsPg0KJzsKJGxhbmdbJ2V2ZW50X2hlbHBfb25Vc2VyUmVnaXN0ZXJlZCddID0gJzxwPkVuIEhlbmRlbHNlIHNvbSBpbmRpa2VyZXIgYXQgZW4gYnJ1a2VyIGhhciBibGl0dCBiZWtyZWZ0ZXQgb2cgZXIgbiZhcmluZzsgcmVnaXN0cmVydCBwJmFyaW5nOyBmZXVzZXJzPC9wPg0KPGg0PklubnN0aWxsaW5nZXI8L2g0Pg0KPHVsPg0KPGxpPjxlbT5icnVrZXJuYXZuPC9lbT4gLSBEZXQgcmVnaXN0cmVydGUgYnJ1a2VybmF2bjwvbGk+DQo8L3VsPg0KJzsKJGxhbmdbJ2NvbmZpcm1fc3VibWl0cHJlZnMnXSA9ICdGb3JhbmRyZSBhZG1pbiBwcmVmZXJhbnNlcj8nOwokbGFuZ1snaW5mb19hZG1pbl9wYXNzd29yZCddID0gJ0xhIGRldHRlIGZlbHRldCB2JmFlbGlnO3JlIHRvbXQgZm9yICZhcmluZzsgYmVob2xkZSBicnVrZXJwYXNzb3JkZXQnOwokbGFuZ1snaW5mb19hZG1pbl9yZXBlYXRwYXNzd29yZCddID0gJ0xhIGRldHRlIGZlbHRldCB2JmFlbGlnO3JlIHRvbXQgZm9yICZhcmluZzsgYmVob2xkZSBicnVrZXJwYXNzb3JkZXQnOwokbGFuZ1snZXJyb3JfZW1haWxkb2Vzbm90bWF0Y2gnXSA9ICdFLXBvc3RhZHJlc3NlbmUgZXIgaWtrZSBsaWtlJzsKJGxhbmdbJ2ZvcmNlX2VtYWlsX3R3aWNlJ10gPSAnVHZpbmdlciBicnVrZXJuZSB0aWwgJmFyaW5nOyB0YXN0ZSBpbm4gZS1wb3N0YWRyZXNzZW4gc2luIHRvIGdhbmdlcic7CiRsYW5nWydhZ2FpbiddID0gJ2lnamVuJzsKJGxhbmdbJ2RlbGV0ZXNlbHVzZXJzJ10gPSAnU2xldHQgdmFsZ3RlIGJydWtlcmUnOwokbGFuZ1snZXJyb3Jfbm9wcm9wZGVmbnMnXSA9ICdJbmdlbiBmZWx0IGRlZmluaXNqb25lciwgZWxsZXIgcHJvYmxlbSBtZWQgJmFyaW5nOyBoZW50ZSBkZW0gZnJhIGRhdGFiYXNlbic7CiRsYW5nWydlcnJvcl9ub2dyb3VwcyddID0gJ0luZ2VuIGdydXBwZXIgZnVubmV0LCBlbGxlciBwcm9ibGVtZXIgbWVkICZhcmluZzsgbGVzZSBncnVwcGVsaXN0ZW4nOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0RhdGFiYXNlZmVpbCc7CiRsYW5nWyd0aXRsZV9wb3N0X3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnXSA9ICdNYWwgZm9yICZhcmluZzsgc2VuZGUgbWlzdGV0IHBhc3NvcmQnOwokbGFuZ1sndGl0bGVfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZSddID0gJ01hbCBmb3IgbWlzdGV0IHBhc3NvcmQnOwokbGFuZ1snY2xpY2toZXJlJ10gPSAnS2xpa2sgaGVyJzsKJGxhbmdbJ21zZ19zZW5kYW5vdGhlcmVtYWlsJ10gPSAnSmVnIGhhciBhbGxlcmVkZSBmdWxsZiZvc2xhc2g7cnQgcmVnaXN0cmVyaW5nc3NramVtYWV0LCBtZW4gbW90dG9rIGlra2Ugbm9lbiBlLXBvc3QuIEthbiBkZXJlIHNlbmRlIGRlbiBwJmFyaW5nOyBueXR0Pyc7CiRsYW5nWydzZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJ10gPSAnTWFsIGZvciBtaXN0ZXQgcGFzc29yZCc7CiRsYW5nWydpbmZvX3VzZXJ2ZXJpZmllZCddID0gJ0VuIG55IGJydWtlciBlciBsYWd0IHRpbCBpIEZyb250RW5kVXNlcnMnOwokbGFuZ1snZWRpdCddID0gJ1JlZGlnZXInOwokbGFuZ1sndW5rbm93biddID0gJ1VramVudCc7CiRsYW5nWydzZWxlY3QnXSA9ICdWZWxnJzsKJGxhbmdbJ2NoZWNrX2FsbCddID0gJ1ZlbGcgYWxsZSc7CiRsYW5nWyd1bmNoZWNrX2FsbCddID0gJ1ZlbGcgaW5nZW4nOwokbGFuZ1snc2VuZF9hZGp1c3RtZW50ZW1haWwnXSA9ICdTZW5kIGUtcG9zdCB0aWwgYnJ1a2VyZW4nOwokbGFuZ1sndHh0X2FkanVzdG1lbnRlbWFpbCddID0gJyhpbmZvcm1lcmVyIGJydWtlcmVuIG9tIGF0IGtvbnRvZW4gaGFyIGJsaXR0IGp1c3RlcnQnOwokbGFuZ1sndHh0X2NoYW5nZXBhc3N3b3JkJ10gPSAnRnlsbCB1dCBkaXNzZSBmZWx0ZW5lIGZvciAmYXJpbmc7IGZvcmFuZHJlIGJydWtlcnBhc3NvcmRldCc7CiRsYW5nWydlZGl0dXNlciddID0gJ1JlZGlnZXIgYnJ1a2VyJzsKJGxhbmdbJ2FyZXlvdXN1cmVfZGVsZXRldXNlciddID0gJ0VyIGR1IHNpa2tlciBwJmFyaW5nOyBhdCBkdSB2aWwgc2xldHRlIGRlbm5lIGRlbHZpcyByZWdpc3RyZXJ0ZSBicnVrZXJlbj8nOwokbGFuZ1snaGRyX3VzZXJpZCddID0gJ0JydWtlcklEJzsKJGxhbmdbJ2hkcl91c2VybmFtZSddID0gJ0JydWtlcm5hdm4nOwokbGFuZ1snaGRyX2dycG5hbWUnXSA9ICdHcnVwcGUnOwokbGFuZ1snaGRyX2NyZWF0ZWQnXSA9ICdPcHByZXR0ZXQnOwokbGFuZ1snaGRyX2VtYWlsJ10gPSAnRS1wb3N0JzsKJGxhbmdbJ3VzZXJzZm91bmQnXSA9ICdCcnVrZXJlIGZ1bm5ldCAoZ3JlbnNlIHAmYXJpbmc7IG1ha3MgMjUwKSc7CiRsYW5nWyd1c2VycyddID0gJ0JydWtlcmUnOwokbGFuZ1snbGlzdDFkYXknXSA9ICdMaXN0IGFsbGUgaW5ubGVnZyBtZXIgZW5uIDEgZGFnIGdhbWxlJzsKJGxhbmdbJ3N1YmplY3QnXSA9ICdFbW5lIGZvciB1dGcmYXJpbmc7ZW5kZSBlLXBvc3QnOwokbGFuZ1snaHRtbGJvZHknXSA9ICdIVE1MIG1lbGRpbmdzLWtyb3BwJzsKJGxhbmdbJ3RleHRib2R5J10gPSAnVGV4dCBtZWxkaW5ncy1rcm9wcCc7CiRsYW5nWydwcm9tcHRfbnVtcmVzZXRyZWNvcmQnXSA9ICdFdCBhbnRhbGwgYnJ1a2VyZSBlciBtaWR0IGkgcmVnaXN0cmVyaW5nZW4uIERldHRlIGFudGFsbGVyIGVyIG4mYXJpbmc7Oic7CiRsYW5nWydyZW1vdmUxd2VlayddID0gJ0ZqZXJuIGFsbGUgaW5ubGVnZyBtZXIgZW5uIGVuIHVrZSBnYW1sZSc7CiRsYW5nWydyZW1vdmUxbW9udGgnXSA9ICdGamVybiBhbGxlIGlubmxlZ2cgbWVyIGVubiBlbiBtJmFyaW5nO25lZCBnYW1sZSc7CiRsYW5nWydyZW1vdmUxZGF5J10gPSAnRmplcm4gYWxsZSBpbm5sZWdnIG1lciBlbm4gZW4gZGFnIGdhbWxlJzsKJGxhbmdbJ3JlbW92ZWFsbCddID0gJ0ZqZXJuIGFsbGUgaW5ubGVnZyc7CiRsYW5nWydhcmV5b3VzdXJlJ10gPSAnRXIgZHUgc2lra2VyPyc7CiRsYW5nWydyZWdpc3RyYXRpb25faW5mb19lZGl0ZWQnXSA9ICdEaW5lIHJlZ2lzdHJlcmluZ3NkYXRhIGhhciBibGl0dCBlbmRyZXQnOwokbGFuZ1sncmVnaXN0cmF0aW9uX2NvbmZpcm1hdGlvbiddID0gJ0Jla3JlZnRlbHNlIHAmYXJpbmc7IHJlZ2lzdHJlcmluZyc7CiRsYW5nWyd1c2VyX3JlZ2lzdHJhdGlvbiddID0gJ1JlZ2lzdHJlcic7CiRsYW5nWydmaW5hbG1lc3NhZ2VfdGVtcGxhdGUnXSA9ICdNYWwgZm9yIGF2c2x1dHRlbmRlIG1lbGRpbmcnOwokbGFuZ1sndGl0bGVfdmVyaWZ5cmVnaXN0cmF0aW9uJ10gPSAnQmVrcmVmdCByZWdpc3RyZXJpbmcnOwokbGFuZ1snY29kZSddID0gJ0tvZGVuJm9zbGFzaDtra2VsIChWYWxpZGF0aW9uIEtleSknOwokbGFuZ1snZGVmYXVsdCddID0gJ1RpbGJha2VzdGlsbCB0aWwgc3RhbmRhcmR2ZXJkaWVyJzsKJGxhbmdbJ2Vycm9yX25vcHJvcGVydGllcyddID0gJ0luZ2VuIGZlbHRlci9lZ2Vuc2thcGVyIGZ1bm5ldCBmb3IgZGVubmUgYnJ1a2VyZW4nOwokbGFuZ1snZXJyb3Jfbm9wcm9wcmVsYXRpb25zJ10gPSAnSW5nZW4gZmVsdC9lZ2Vuc2thcHMgcmVsYXNqb24nOwokbGFuZ1snZXJyb3JfZW1haWxpbnZhbGlkJ10gPSAnVWd5bGRpZyBlLXBvc3RhZHJlc3NlJzsKJGxhbmdbJ2Vycm9yX25vZW1haWxhZGRyZXNzJ10gPSAnSW5nZW4gZ3lsZGlnIGVtYWlsYWRyZXNzZSBmZWx0IGZ1bm5ldCc7CiRsYW5nWydlcnJvcl9yZXF1aXJlZGZpZWxkJ10gPSAnRmVsdGV0ICVzIG0mYXJpbmc7IGZ5bGxlcyB1dCc7CiRsYW5nWydyZWdpc3RyYXRpb24xX3RlbXBsYXRlJ10gPSAnTWFsIDEgZm9yIHJlZ2lzdHJlcmluZyc7CiRsYW5nWydyZWdpc3RyYXRpb24yX3RlbXBsYXRlJ10gPSAnTWFsIDIgZm9yIHJlZ2lzdHJlcmluZyc7CiRsYW5nWydlbWFpbGNvbmZpcm1fdGVtcGxhdGUnXSA9ICdNYWwgZm9yIGJla3JlZnRlbHNlc0UtcG9zdCc7CiRsYW5nWydlbWFpbHVzZXJlZGl0ZWRfdGVtcGxhdGUnXSA9ICdNYWwgZm9yIGJydWtlci1pbmZvIGZvcmFuZHJldCc7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ1ByZWZlcmFuc2VyJzsKJGxhbmdbJ2Vycm9yX3VzZXJub3Rmb3VuZCddID0gJ0JydWtlciBpa2tlIGZ1bm5ldCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXNlcm5hbWUnXSA9ICdCcnVrZXJuYXZuZXQgZXIgdWd5bGRpZyAoZm9yIGxhbmd0LCBmb3Iga29ydCwgZWxsZXIgaW5uZWhvbGRlciB1Z3lsZGlnZSB0ZWduKS4gIEhpbnQtIEJydWtlcm5hdm4gbSZhcmluZzsgaW5uZWhvbGRlIGt1biBhbGZhbnVtZXJpc2tlIHRlZ24gKGluZ2VuIG1lbGxvbXJvbSknOwokbGFuZ1snZXJyb3JfdXNlcm5hbWV0YWtlbiddID0gJ0RldCBicnVrZXJuYXZuZXQgZXIgYWxsZXJlZGUgaSBicnVrJzsKJGxhbmdbJ2Vycm9yX3Bhc3N3b3Jkc2RvbnRtYXRjaCddID0gJ0ZFSUw6IHBhc3NvcmRlbmUgZXIgaWtrZSBsaWtlJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRwYXNzd29yZCddID0gJ1Bhc3NvcmRldCBlciB1Z3lsZGlnIChwYXNzb3JkIG0mYXJpbmc7IHYmYWVsaWc7cmUgbWVsbG9tICVzIG9nICVzIGthcmFrdGVyZXIgaSBsZW5nZGUpJzsKJGxhbmdbJ2Vycm9yX2VtcHR5dXNlcm5hbWUnXSA9ICdCcnVrZXJuYXZuZXQga2FuIGlra2UgdiZhZWxpZztyZSB0b210JzsKJGxhbmdbJ3JlcGVhdHBhc3N3b3JkJ10gPSAnUGFzc29yZCAoaWdqZW4pJzsKJGxhbmdbJ3Bhc3N3b3JkJ10gPSAnUGFzc29yZCc7CiRsYW5nWyd1c2VybmFtZSddID0gJ0JydWtlcm5hdm4nOwokbGFuZ1snY2FwdGNoYV90aXRsZSddID0gJ09wcGdpIHRla3N0ZW4gZnJhIGJpbGRldCc7CiRsYW5nWydlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnXSA9ICdVZ3lsZGlnIG51bW1lciAoZWxsZXIgZmVpbCkgcGFyYW1ldGVyZSBnaXR0IHRpbCBtb2R1bGVuJzsKJGxhbmdbJ2Vycm9yX25vZmV1c2Vyc21vZHVsZSddID0gJ0ZhbnQgaWtrZSBGcm9udEVuZFVzZXJzIG1vZHVsZW4nOwokbGFuZ1snZXJyb3Jfbm9zdWNoZ3JvdXAnXSA9ICdPcHBnaXR0IGdydXBwZW5hdm4gZWtzaXN0ZXJlciBpa2tlJzsKJGxhbmdbJ2Vycm9yX2NhcHRjaGFtaXNtYXRjaCddID0gJ1Rla3N0ZW4gZnJhIGJpbGRldCBibGUgaWtrZSBza3JldmV0IHJpa3RpZyc7CiRsYW5nWydzZW5kX2VtYWlsc190byddID0gJ1JlZ2lzdHJlcmluZ3NlbWFpbGVyIHNrdWxsZSBibGkgc2VuZHQgdGlsJzsKJGxhbmdbJ3JlcXVpcmVfZW1haWxfY29uZmlybWF0aW9uJ10gPSAnS3JldiBhdCBicnVrZXJlbiBtJmFyaW5nOyBiZWtyZWZ0ZSByZWdpc3RyZXJpbmdlbiB2aWEgZW1haWwnOwokbGFuZ1snbm90aWZ5X29uX3JlZ2lzdHJhdGlvbiddID0gJ1NlbmQgZW4gZW1haWwgbWVsZGluZyBuJmFyaW5nO3Igbm9lbiByZWdpc3RyZXJlciBzZWcnOwokbGFuZ1snY2FuY2VsJ10gPSAnQXZicnl0JzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1NlbmQnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnU2Vsdi1yZWdpc3RyZXJpbmdzIG1vZHVsJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnSW5zdGFsbGF0c2pvbiB2ZWxseWtrZXQsIGh1c2t0ICZhcmluZzsgc2V0dGUgJnF1b3Q7TW9kaWZ5IFNlbGZSZWdpc3RyYXRpb24gU2V0dGluZ3MmcXVvdDsgcmV0dGlnaGV0ZW4uJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdTZWx2cmVnaXN0cmVyaW5ncyBNb2R1bGVuIGVyIGF2aW5zdGFsbGVydC4gIFNlciBkZWcgc2VuZXJlLic7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZW4gYXZpbnN0YWxsZXJ0Lic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bCB2ZXJzam9uICVzIGluc3RhbGxlcnQuJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ01vZHVsIGlubnN0aWxsaW5nZXIgb3BwZGF0ZXJ0Lic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBZGdhbmcgbmVrdGV0LiBWZW5ubGlnc3Qgc2pla2sgZGluZSByZXR0aWdoZXRlci4nOwokbGFuZ1snZXJyb3InXSA9ICdGZWlsISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsIG9wcGdyYWRlcnQgdGlsIHZlcnNqb24gJXMuJzsKJGxhbmdbJ3RpdGxlX21vZF9wcmVmcyddID0gJ01vZHVsIGlubnN0aWxsbmdlcic7CiRsYW5nWyd0aXRsZV9tb2RfYWRtaW4nXSA9ICdNb2R1bCBhZG1pbmlzdHJhc2pvbnNwYW5lbCc7CiRsYW5nWyd0aXRsZV9hZG1pbl9wYW5lbCddID0gJ1NlbHZyZWdpc3RyZXJpbmdzIE1vZHVsJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnRW4gbW9kdWwgc29tIHRpbGxhdGVyIGZyb250LWVuZCBicnVrZXJlICZhcmluZzsgcmVnaXN0cmVyZSBzZWcgc2Vsdi4nOwokbGFuZ1snd2VsY29tZV90ZXh0J10gPSAnPHA+VmVsa29tbWVuIHRpbCBTZWx2cmVnaXN0cmVyaW5ncyBtb2R1bGVuLjwvcD4nOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnPHVsPg0KPGxpPlZlcnNpb24gMC4wLjEuIE9jdCAyMDA1LiBJbml0aWFsIE5SUFQgKE5vdCBSZWFkeSBmb3IgUHJpbWUgVGltZSkgcmVsZWFzZS48L2xpPg0KPGxpPlZlcnNpb24gMC4xLjAuIE9jdCAyMDA1LiBJbml0aWFsIHJlbGVhc2UuPC9saT4NCjxsaT5WZXJzaW9uIDAuMS4xLiBPY3QgMjAwNS4gU2V0IHRoZSBIVE1MIG1haWwgZmxhZy48L2xpPg0KPGxpPlZlcnNpb24gMC4xLjIuIE9jdCAyMDA1LiBNb3ZlZCBSYW5kb20gc3R1ZmYgaW50byBmZXVzZXJzLCBhbmQgYWRkZWQgdGhlIGFiaWxpdHkgdG8gZGVsZXRlIG9sZCBlbnRyaWVzIGZyb20gdGhlIHJlZ2lzdHJhdGlvbiB0ZW1wb3JhcnkgdGFibGVzPC9saT4NCjxsaT48cD5WZXJzaW9uIDAuMS4zLiAtIERlYyAyMDA1PC9wPg0KPHA+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+Q29weXJpZ2h0ICZjb3B5OyAyMDA1LCBSb2JlcnQgQ2FtcGJlbCA8YSBocmVmPSZxdW90O21haWx0bzpjYWxndXkxMDAwQGhvdG1haWwuY29tJnF1b3Q7PjxjYWxndXkxMDAwQGhvdG1haWwuY29tPjwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCZxdW90Oz5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPg0KJzsKPz4=]]></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+CnsvZm9yZWFjaH0KICA8L3RhYmxlPgogIDwvY2VudGVyPgo8YnIvPgp7L2lmfQp7aWYgJGNhcHRjaGF9CiAgeyRjYXB0Y2hhX3RpdGxlfTogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNhcHRjaGFfcGhyYXNlIiAvPjxiciAvPgogIHskY2FwdGNoYX08YnIgLz4Key9pZn0KIHskaGlkZGVufXskaGlkZGVuMn17JHN1Ym1pdH17JGNhbmNlbH08YnIvPgp7JG1zZ19zZW5kYW5vdGhlcmVtYWlsfSZuYnNwO3skbGlua19zZW5kYW5vdGhlcmVtYWlsfQp7JGVuZGZvcm19CjwhLS0gUmVnaXN0cmF0aW9uIDEgdGVtcGxhdGUgLS0+CiAnOwoKICB2YXIgJGRmbHRfcG9zdHJlZzFfdGVtcGxhdGUgPSAnCjwhLS0gUG9zdCBSZWdpc3RyYXRpb24gMSB0ZW1wbGF0ZSAtLT4KeyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9IFwnXCd9CiAge2lmICRlcnJvciAhPSBcJ1wnfQogICAgPHA+PGZvbnQgY29sb3I9InJlZCI+eyRtZXNzYWdlfTwvZm9udD48L3A+CiAge2Vsc2V9CiAgICA8cD57JG1lc3NhZ2V9PC9wPgogIHsvaWZ9CnsvaWZ9CjxwPlRoYW5rIHlvdSB7JHVzZXJuYW1lfSBmb3IgcmVnaXN0ZXJpbmcgd2l0aCB7JHNpdGVuYW1lfS4gIEFuIGVtYWlsIGhhcyBiZWVuIHNlbnQgdG8geyRlbWFpbH0gd2l0aCBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGNvbnRpbnVlIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzczwvcD4KPCEtLSBQb3N0IFJlZ2lzdHJhdGlvbiAxIHRlbXBsYXRlIC0tPgonOwoKICB2YXIgJGRmbHRfcmVnaXN0cmF0aW9uMl90ZW1wbGF0ZSA9ICcKPCEtLSBSZWdpc3RyYXRpb24gMSB0ZW1wbGF0ZSAtLT4KeyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9IFwnXCd9CiAge2lmICRlcnJvciAhPSBcJ1wnfQogICAgPHA+PGZvbnQgY29sb3I9InJlZCI+eyRtZXNzYWdlfTwvZm9udD48L3A+CiAge2Vsc2V9CiAgICA8cD57JG1lc3NhZ2V9PC9wPgogIHsvaWZ9CnsvaWZ9Cnskc3RhcnRmb3JtfQogIDxjZW50ZXI+CiAgPHRhYmxlIHdpZHRoPSI3NSUiPgogIDx0cj4KICAgIDx0ZD57JHByb21wdF91c2VybmFtZX08L2ZvbnQ+CiAgICA8L3RkPgogICAgPHRkPnskaW5wdXRfdXNlcm5hbWV9PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD57JHByb21wdF9wYXNzd29yZH08L2ZvbnQ+CiAgICA8L3RkPgogICAgPHRkPnskaW5wdXRfcGFzc3dvcmR9PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD57JHByb21wdF9jb2RlfTwvZm9udD4KICAgIDwvdGQ+CiAgICA8dGQ+eyRpbnB1dF9jb2RlfTwvdGQ+CiAgPC90cj4KICA8L3RhYmxlPgogIDwvY2VudGVyPgo8YnIvPgogeyRoaWRkZW59eyRoaWRkZW4yfXskc3VibWl0fXskY2FuY2VsfQp7JGVuZGZvcm19CjwhLS0gUmVnaXN0cmF0aW9uIDIgdGVtcGxhdGUgLS0+CiAnOyAgCgogIHZhciAkZGZsdF9lbWFpbGNvbmZpcm1fdGVtcGxhdGUgPSAnCjwhLS0gRW1haWxDb25maXJtIHRlbXBsYXRlIC0tPgo8aHRtbD4KPGJvZHk+CjxwPkdyZWV0aW5ncyB7JG5hbWV9IHdlbGNvbWUgdG8gdGhlIHNpdGUuICBUaGlzIGVtYWlsIGlzIGJlaW5nIHNlbnQgYmVjYXVzZSBzb21lYm9keSByZWdpc3RlcmVkIGZvciBhY2Nlc3MgdG8geyRzaXRlbmFtZX0gdXNpbmcgdGhpcyBlbWFpbCBhZGRyZXNzLiBJZiB0aGlzIHdhcyB5b3UsIHBsZWFzZSBjbGljayBvbiB0aGUgZm9sbG93aW5nIGxpbmsgYW5kIGVudGVyIHlvdXIgdXNlcm5hbWUsIHBhc3N3b3JkLCBhbmQgdGhlIHVuaXF1ZSBjb2RlIGJlbG93PC9wPgogICA8cD5Gb2xsb3cgdGhpcyBsaW5rOiB7JGxpbmt9PC9wPgogICA8cD5vciB0aGlzIGxpbms6IHskc21hbGxsaW5rfTwvcD4KICAgPHA+Q29kZTogeyRjb2RlfTwvcD4KPC9ib2R5Pgo8L2h0bWw+CjwhLS0gRW1haWxDb25maXJtIHRlbXBsYXRlIC0tPgonOwoKICB2YXIgJGRmbHRfZW1haWxjb25maXJtX3RleHR0ZW1wbGF0ZSA9ICcKR3JlZXRpbmdzIHskbmFtZX0gd2VsY29tZSB0byB0aGUgc2l0ZS4gIFRoaXMgZW1haWwgaXMgYmVpbmcgc2VudCBiZWNhdXNlIHNvbWVib2R5IHJlZ2lzdGVyZWQgZm9yIGFjY2VzcyB0byB7JHNpdGVuYW1lfSB1c2luZyB0aGlzIGVtYWlsIGFkZHJlc3MuIElmIHRoaXMgd2FzIHlvdSwgcGxlYXNlIGNsaWNrIG9uIHRoZSBmb2xsb3dpbmcgbGluayBhbmQgZW50ZXIgeW91ciB1c2VybmFtZSwgcGFzc3dvcmQsIGFuZCB0aGUgdW5pcXVlIGNvZGUgYmVsb3cuCgpGb2xsb3cgdGhpcyBsaW5rOiB7JHVybH0Kb3IgdGhpcyBsaW5rOiB7JHNtYWxsdXJsfTwvcD4KQ29kZTogeyRjb2RlfQonOwoKICB2YXIgJGRmbHRfZW1haWx1c2VyZWRpdGVkX3RlbXBsYXRlID0gJwo8IS0tIEVtYWlsVXNlckVkaXRlZCB0ZW1wbGF0ZSAtLT4KPGh0bWw+Cjxib2R5Pgo8cD5HcmVldGluZ3MgeyRuYW1lfSB3ZWxjb21lIHRvIHRoZSBzaXRlLiAgVGhpcyBlbWFpbCBpcyBiZWluZyBzZW50IGJlY2F1c2UsIGFsdGhvdWdoIHlvdSBoYXZlIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIHskc2l0ZW5hbWV9LCB0aGVyZSB3YXMgYW4gZXJyb3IgaW4geW91ciBpbnB1dC4gIFRoZSBhZG1pbmlzdHJhdG9yIGhhcyBkb25lIGhpcyBiZXN0IHRvIGNvcnJlY3QgdGhpcyBkYXRhLCBhbmQgeW91IGFyZSBub3cgYmVpbmcgc2VudCBhbiB1cGRhdGVkIHJlZ2lzdHJhdGlvbiBmb3JtLiBQbGVhc2UgY2xpY2sgb24gdGhlIGZvbGxvd2luZyBsaW5rIGFuZCBlbnRlciB5b3VyIHVzZXJuYW1lLCBwYXNzd29yZCwgYW5kIHRoZSB1bmlxdWUgY29kZSBiZWxvdzwvcD4KICAgPHA+Rm9sbG93IHRoaXMgbGluazogeyRsaW5rfTwvcD4KICAgPHA+b3IgdGhpcyBsaW5rOiB7JHNtYWxsbGlua308L3A+CiAgIDxwPlBhc3N3b3JkOiB7JHBhc3N3b3JkfTwvcD4KICAgPHA+Q29kZTogeyRjb2RlfTwvcD4KPC9ib2R5Pgo8L2h0bWw+CjwhLS0gRW1haWxVc2VyRWRpdGVkIHRlbXBsYXRlIC0tPgonOwoKICB2YXIgJGRmbHRfZW1haWx1c2VyZWRpdGVkX3RleHR0ZW1wbGF0ZSA9ICcKR3JlZXRpbmdzIHskbmFtZX0gd2VsY29tZSB0byB0aGUgc2l0ZS4gIFRoaXMgZW1haWwgaXMgYmVpbmcgc2VudCBiZWNhdXNlLCBhbHRob3VnaCB5b3UgaGF2ZSBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCB7JHNpdGVuYW1lfSwgdGhlcmUgd2FzIGFuIGVycm9yIGluIHlvdXIgaW5wdXQuICBUaGUgYWRtaW5pc3RyYXRvciBoYXMgZG9uZSBoaXMgYmVzdCB0byBjb3JyZWN0IHRoaXMgZGF0YSwgYW5kIHlvdSBhcmUgbm93IGJlaW5nIHNlbnQgYW4gdXBkYXRlZCByZWdpc3RyYXRpb24gZm9ybS4gUGxlYXNlIGNsaWNrIG9uIHRoZSBmb2xsb3dpbmcgbGluayBhbmQgZW50ZXIgeW91ciB1c2VybmFtZSwgcGFzc3dvcmQsIGFuZCB0aGUgdW5pcXVlIGNvZGUgYmVsb3cKICAgRm9sbG93IHRoaXMgbGluazogeyR1cmx9CiAgICAgb3IgdGhpcyBsaW5rOiB7JHNtYWxsdXJsfTwvcD4KICAgUGFzc3dvcmQ6IHskcGFzc3dvcmR9CiAgIENvZGU6IHskY29kZX0KJzsKCiAgdmFyICRkZmx0X2ZpbmFsbWVzc2FnZV90ZW1wbGF0ZSA9ICcKPCEtLSBGaW5hbE1lc3NhZ2UgVGVtcGxhdGUgLS0+CjxwPldlbGNvbWUgeyR1c2VybmFtZX0gdG8geyRzaXRlbmFtZX0uICBZb3VyIHJlZ2lzdHJhdGlvbiBpcyBjb21wbGV0ZS4gIFBsZWFzZSBsb2dpbiB0byBjb250aW51ZTwvcD4KPCEtLSBGaW5hbE1lc3NhZ2UgVGVtcGxhdGUgLS0+CiAgJzsKCiAgdmFyICRkZmx0X3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUgPSAnCjwhLS0gU2VuZEFub3RoZXJFbWFpbCBUZW1wbGF0ZSAtLT4KeyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9IFwnXCd9CiAge2lmICRlcnJvciAhPSBcJ1wnfQogICAgPHA+PGZvbnQgY29sb3I9InJlZCI+eyRtZXNzYWdlfTwvZm9udD48L3A+CiAge2Vsc2V9CiAgICA8cD57JG1lc3NhZ2V9PC9wPgogIHsvaWZ9CnsvaWZ9CjxwPkkgZGlkblwndCByZWNlaXZlIG15IGNvbmZpcm1hdGlvbiBlbWFpbCwgcGxlYXNlIHNlbmQgYW5vdGhlciBvbmUuPC9wPgo8cD5NeSBVc2VybmFtZSBpczogeyRzdGFydGZvcm19eyRpbnB1dF91c2VybmFtZX0mbmJzcDt7JHN1Ym1pdH17JGVuZGZvcm19PC9wPgo8IS0tIFNlbmRBbm90aGVyRW1haWwgVGVtcGxhdGUgLS0+CiAgJzsKCiAgdmFyICRkZmx0X3Bvc3Rfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZSA9ICcKPCEtLSBQb3N0IFNlbmRBbm90aGVyRW1haWwgdGVtcGxhdGUgLS0+CnskdGl0bGV9CntpZiAkbWVzc2FnZSAhPSBcJ1wnfQogIHtpZiAkZXJyb3IgIT0gXCdcJ30KICAgIDxwPjxmb250IGNvbG9yPSJyZWQiPnskbWVzc2FnZX08L2ZvbnQ+PC9wPgogIHtlbHNlfQogICAgPHA+eyRtZXNzYWdlfTwvcD4KICB7L2lmfQp7L2lmfQo8cD5UaGFuayB5b3UgeyR1c2VybmFtZX0gZm9yIHJlZ2lzdGVyaW5nIHdpdGggeyRzaXRlbmFtZX0uICBXZSBhcmUgc29ycnkgeW91IGhhZCBkaWZmaWN1bHR5IHJlY2VpdmluZyB5b3VyIGVtYWlsLiAgQSBzZWNvbmQgZW1haWwgaGFzIGJlZW4gc2VudCB0byB7JGVtYWlsfSB3aXRoIGluc3RydWN0aW9ucyBvbiBob3cgdG8gY29udGludWUgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzPC9wPgo8IS0tIFBvc3QgU2VuZEFub3RoZXJFbWFpbCB0ZW1wbGF0ZSAtLT4KJzsKCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldE5hbWUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldE5hbWUoKQogIHsKICAgIHJldHVybiAnU2VsZlJlZ2lzdHJhdGlvbic7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RnJpZW5kbHlOYW1lKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7CiAgfQoKCQogIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gIjEuMCI7CiAgfQogIAogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldFZlcnNpb24oKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldFZlcnNpb24oKQogIHsKICAgIHJldHVybiAnMS4xLjAnOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0SGVscCgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0SGVscCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7CiAgfQogIAogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEF1dGhvcigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QXV0aG9yKCkKICB7CiAgICByZXR1cm4gJ0NhbGd1eTEwMDAnOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QXV0aG9yRW1haWwoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkKICB7CiAgICByZXR1cm4gJ2NhbGd1eTEwMDBAaG90bWFpbC5jb20nOwogIH0KICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRDaGFuZ2VMb2coKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTsKICB9CiAgCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSXNQbHVnaW5Nb2R1bGUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEhhc0FkbWluKCkKICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSwgZGVwZW5kaW5nIG9uCiAgIHdoZXRoZXIgeW91ciBtb2R1bGUgYWRkcyBhbnl0aGluZyB0byB0aGUgQWRtaW4gYXJlYSBvZgogICB0aGUgc2l0ZS4gRm9yIHRoZSByZXN0IG9mIHRoZXNlIGNvbW1lbnRzLCBJJ2xsIGJlIGNhbGxpbmcKICAgdGhlIGFkbWluIHBhcnQgb2YgeW91ciBtb2R1bGUgdGhlICJBZG1pbiBQYW5lbCIgZm9yCiAgIHdhbnQgb2YgYSBiZXR0ZXIgdGVybS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBIYXNBZG1pbigpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBZG1pblNlY3Rpb24oKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpCiAgewogICAgcmV0dXJuICd1c2Vyc2dyb3Vwcyc7CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRFdmVudERlc2NyaXB0aW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRFdmVudERlc2NyaXB0aW9uKCAkZXZlbnRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2Rlc2NyaXB0aW9uXycuJGV2ZW50bmFtZSApOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RXZlbnREZXNjcmlwdGlvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0RXZlbnRIZWxwKCAkZXZlbnRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2hlbHBfJy4kZXZlbnRuYW1lICk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOwogIH0KICAKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVmlzaWJsZVRvQWRtaW5Vc2VyKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogIHsKICAgICRzdGF0dXMgPSAkdGhpcy0+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+YXNzaWduKCdsaW5rX3NlbmRhbm90aGVyZW1haWwnLAoJCQkgICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCR0aGlzLT5MYW5nKCdjbGlja2hlcmUnKSwKCQkJCQkgICAgYXJyYXkoJ21vZGUnPT4nc2VuZGFub3RoZXJlbWFpbCcpLCcnLGZhbHNlLHRydWUpKTsKCglpZiAoaXNzZXQoJHBhcmFtc1snY2FwdGNoYSddKSAmJiAkcGFyYW1zWydjYXB0Y2hhJ10gPT0gMSkKCXsKCQlpZiAoaXNzZXQoJHRoaXMtPmNtcy0+bW9kdWxlc1snQ2FwdGNoYSddKSkKCQl7CgkJCSRjYXB0Y2hhID0gJiR0aGlzLT5nZXRNb2R1bGVJbnN0YW5jZSgnQ2FwdGNoYScpOwoKCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYXB0Y2hhX3RpdGxlJywgJHRoaXMtPkxhbmcoJ2NhcHRjaGFfdGl0bGUnKSk7CgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbignY2FwdGNoYScsICRjYXB0Y2hhLT5nZXRDYXB0Y2hhKCkpOwoJCX0KCX0KCQogICAgLy8gdG9kbywgcHV0IHRoaXMgaW50byB0aGUgZGF0YWJhc2UgYW5kIGxldCB0aGUgYWRtaW4gcGxheSB3aXRoIGl0LgogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdzZWxmcmVnX3JlZzF0ZW1wbGF0ZScpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFVzZXJEaXNwbGF5VmVyaWZpY2F0aW9uRm9ybSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9Vc2VyRGlzcGxheVZlcmlmaWNhdGlvbkZvcm0oICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgJGZldXNlcnMgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgIGlmKCAhJGZldXNlcnMgKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICR0aGlzLT5MYW5nKCdlcnJvcl9ub2ZldXNlcnNtb2R1bGUnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2Vycm9yJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCAkcGFyYW1zWydlcnJvciddKTsKICAgICAgfQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydtZXNzYWdlJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICRwYXJhbXNbJ21lc3NhZ2UnXSk7CiAgICAgIH0KCiAgICAkdXNlcm5hbWUgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSApICkKICAgICAgewoJJHVzZXJuYW1lID0gdHJpbSgkcGFyYW1zWydpbnB1dF91c2VybmFtZSddKTsKICAgICAgfQogICAgJHBhc3N3b3JkID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10gKSApCiAgICAgIHsKCSRwYXNzd29yZCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSk7CiAgICAgIH0KICAgICRjb2RlID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2NvZGUnXSApICkKICAgICAgewoJJGNvZGUgPSB0cmltKCRwYXJhbXNbJ2lucHV0X2NvZGUnXSk7CiAgICAgIH0KICAgICRncm91cF9pZCA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9ncm91cF9pZCddICkgKQogICAgICB7CgkkZ3JvdXBfaWQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X2dyb3VwX2lkJ10pOwogICAgICB9CgogICAgLy8gcHJvY2VzcyB0aGUgdGVtcGxhdGUKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGUnLAoJCQkgICR0aGlzLT5MYW5nKCd0aXRsZV92ZXJpZnlyZWdpc3RyYXRpb24nKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF91c2VybmFtZScsCgkJCSAgJHRoaXMtPkxhbmcoJ3VzZXJuYW1lJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF91c2VybmFtZScsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2lucHV0X3VzZXJuYW1lJywKCQkJCQkJICR1c2VybmFtZSwgCgkJCQkJCSAkZmV1c2Vycy0+R2V0UHJlZmVyZW5jZSgndXNlcm5hbWVmbGRsZW5ndGgnKSwKCQkJCQkJICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdtYXhfdXNlcm5hbWVsZW5ndGgnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfcGFzc3dvcmQnLAoJCQkgICR0aGlzLT5MYW5nKCdwYXNzd29yZCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfcGFzc3dvcmQnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFBhc3N3b3JkKCRpZCwnaW5wdXRfcGFzc3dvcmQnLAoJCQkJCQkgICAgICRwYXNzd29yZCwgCgkJCQkJCSAgICAgJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ3Bhc3N3b3JkZmxkbGVuZ3RoJyksCgkJCQkJCSAgICAgJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ21heF9wYXNzd29yZGxlbmd0aCcpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9jb2RlJywKCQkJICAkdGhpcy0+TGFuZygnY29kZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfY29kZScsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2lucHV0X2NvZGUnLAoJCQkJCQkgJGNvZGUsIDMwLCAzMCApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXQnLCR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2NhbmNlbCcsJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCSAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICd2ZXJpZnl1c2VyJywgJHJldHVybmlkICkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdpbnB1dF9ncm91cF9pZCcsICRncm91cF9pZCApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsCgkJCSAgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ3NlbGZyZWdfcmVnMnRlbXBsYXRlJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgUmVnaXN0ZXJVc2VyU3RlcDEoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfUmVnaXN0ZXJVc2VyU3RlcDEoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgZ2xvYmFsICRnQ21zOwoKICAgICRmZXVzZXJzID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CiAgICBpZiggISRmZXVzZXJzICkKICAgICAgewoJLy8gdGhpcyBpcyB1Z2x5IGZvciB0aGUgdXNlciB0byBzZWUKCS8vIGJ1dCBhdCBsZWFzdCB0aGUgYWRtaW4gd2lsbCBiZSBhYmxlIHRvIGZpZ3VyZSBpdCBvdXQKCS8vIHRoaXMgc2hvdWxkbid0IGhhcHBlbiBvbmNlIHRoZSB1c2VyIGhhcyBzZWVuIHRoZSBmb3JtLgoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICcnLCAkcmV0dXJuaWQsCgkJCQkgICR0aGlzLT5MYW5nKCdlcnJvcl9ub2ZldXNlcnNtb2R1bGUnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAkY21zbWFpbGVyID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdDTVNNYWlsZXInKTsKICAgIGlmKCAhJGNtc21haWxlciApCiAgICAgIHsKCS8vIHRoaXMgaXMgdWdseSBmb3IgdGhlIHVzZXIgdG8gc2VlCgkvLyBidXQgYXQgbGVhc3QgdGhlIGFkbWluIHdpbGwgYmUgYWJsZSB0byBmaWd1cmUgaXQgb3V0CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJycsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcoJ2Vycm9yX25vZmV1c2Vyc21vZHVsZScpKTsKCXJldHVybjsKICAgICAgfQoKCiAgICAvLyBjaGVjayBmb3IgcmVxdWlyZWQgcGFyYW1ldGVycwogICAgaWYoICFpc3NldCggJHBhcmFtc1snZ3JvdXBfaWQnXSApICkKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIENoZWNrIHRvIGVuc3VyZSBhbGwgcmVxdWlyZWQgZmllbGRzIGhhdmUgc29tZSBjb250ZW50CiAgICAvLyBhbmQgdmFsaWRhdGUgZW1haWwgZmllbGRzCiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCApCiAgICB7CiAgICAgIGlmKCBwcmVnX21hdGNoKCAnL15oaWRkZW5fLycsICRrZXkgKSApCgl7CgkgICRwcm9wbmFtZSA9IHN1YnN0cigka2V5LHN0cmxlbignaGlkZGVuXycpKTsKCSAgJGFyciA9IHNwbGl0KCI7IiwkcGFyYW1zWyRrZXldKTsKCSAgJHJlcXVpcmVkID0gJGFyclszXTsKCSAgaWYoICRyZXF1aXJlZCA9PSAyICYmIAoJICAgICAgKCFpc3NldCgkcGFyYW1zWydpbnB1dF8nLiRwcm9wbmFtZV0pIHx8ICRwYXJhbXNbJ2lucHV0XycuJHByb3BuYW1lXSA9PSAnJyApICkKCSAgICB7CgkgICAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9yZXF1aXJlZGZpZWxkJywkcHJvcG5hbWUpOwoJICAgICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCSAgICB9CgoJICBpZiggJGFyclsxXSA9PSAnMicgKQoJICAgIHsKCSAgICAgICRyZXN1bHQgPSAkZmV1c2Vycy0+SXNWYWxpZEVtYWlsQWRkcmVzcyggJHBhcmFtc1snaW5wdXRfJy4kcHJvcG5hbWVdLAoJCQkJCQkgICAgICAgJGZldXNlcnMtPkdldFByZWZlcmVuY2UoJ2RvX3NtdHBfdmFsaWRhdGVfZW1haWwnKSApOwoJICAgICAgaWYoICRyZXN1bHRbMF0gPT0gZmFsc2UgKQoJCXsKCQkgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJCSAgJHBhcmFtc1snbWVzc2FnZSddID0gJHJlc3VsdFsxXTsKCQkgICR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CgkJfQoJICAgIH0KCX0KICAgIH0KCgogICAgLy8gZ2V0IHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQKICAgICR1c2VybmFtZSA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddICkgKQogICAgICB7CgkkdXNlcm5hbWUgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10pOwogICAgICB9CiAgICAkcGFzc3dvcmQgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSApICkKICAgICAgewoJJHBhc3N3b3JkID0gdHJpbSgkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddKTsKICAgICAgfQogICAgJHJlcGVhdHBhc3N3b3JkID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3JlcGVhdHBhc3N3b3JkJ10gKSApCiAgICAgIHsKCSRyZXBlYXRwYXNzd29yZCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfcmVwZWF0cGFzc3dvcmQnXSk7CiAgICAgIH0KCiAgICAvLyBjaGVjayBpZiB0aGUgdXNlcm5hbWUgaXMgdmFsaWQgb3IgdGFrZW4KICAgIGlmKCAkdXNlcm5hbWUgPT0gJycgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9lbXB0eXVzZXJuYW1lJyk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgaWYoICEkZmV1c2Vycy0+SXNWYWxpZFVzZXJuYW1lKCAkdXNlcm5hbWUgKSApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWR1c2VybmFtZScpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfQoKICAgICR1aWQgPSAkdGhpcy0+R2V0VGVtcFVzZXJJRCgkdXNlcm5hbWUpOwogICAgaWYoICR1aWQgIT0gZmFsc2UgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl91c2VybmFtZXRha2VuJyk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CiAgICBpZiggJGZldXNlcnMtPkdldFVzZXJJRCgkdXNlcm5hbWUpICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfdXNlcm5hbWV0YWtlbicpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIGNoZWNrIGlmIHRoZSBwYXNzd29yZHMgbWF0Y2ggb3IgaWYgdGhleSdyZSB2YWxpZAogICAgaWYoICRwYXNzd29yZCAhPSAkcmVwZWF0cGFzc3dvcmQgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9wYXNzd29yZHNkb250bWF0Y2gnKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KICAgICRtaW5wd2xlbiA9ICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdtaW5fcGFzc3dvcmRsZW5ndGgnKTsKICAgICRtYXhwd2xlbiA9ICRmZXVzZXJzLT5HZXRQcmVmZXJlbmNlKCdtYXhfcGFzc3dvcmRsZW5ndGgnKTsKICAgIGlmKCBzdHJsZW4oJHBhc3N3b3JkKSA8ICRtaW5wd2xlbiB8fCBzdHJsZW4oJHBhc3N3b3JkKSA+ICRtYXhwd2xlbiApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRwYXNzd29yZCcsCgkJCQkJIGFycmF5KCRtaW5wd2xlbiwkbWF4cHdsZW4pKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBmaW5kIGFuIGVtYWlsIGZpZWxkLi4uIHNvbWV0aGluZyB0aGF0J3MgbmFtZSBoYXMgZW1haWwgaW4gaXQKICAgIC8vIG9yIGlzIG9mIHR5cGUgMgogICAgJGVtYWlsX2ZpZWxkID0gJyc7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCApCiAgICB7CiAgICAgIGlmKCBwcmVnX21hdGNoKCAnL15oaWRkZW5fLycsICRrZXkgKSApCgl7CgkgICRwcm9wbmFtZSA9IHN1YnN0cigka2V5LHN0cmxlbignaGlkZGVuXycpKTsKCSAgJGFyciA9IHNwbGl0KCI7IiwkcGFyYW1zWyRrZXldKTsKCgkgIGlmKCBwcmVnX21hdGNoKCcvZW1haWwvaScsJGFyclswXSkgfHwgJGFyclsxXSA9PSAyICkKCSAgICB7CgkgICAgICAvLyBmb3VuZCBzb21ldGhpbmcgcmVzZW1ibGluZyBhbiBlbWFpbCBmaWVsZAoJICAgICAgJGVtYWlsX2ZpZWxkID0gJ2lucHV0XycuJHByb3BuYW1lOwoJICAgICAgYnJlYWs7CgkgICAgfQoJfQogICAgfSAgICAKICAgIGlmKCAkZW1haWxfZmllbGQgPT0gJycgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9ub2VtYWlsYWRkcmVzcycpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfQoKICAgIGlmKCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2VsZnJlZ19mb3JjZV9lbWFpbF90d2ljZScpICkKICAgICAgewoJaWYoICFpc3NldCgkcGFyYW1zWyRlbWFpbF9maWVsZC4nX2FnYWluJ10gKSApCgkgIHsKCSAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3Jfbm9zZWNvbmRlbWFpbGFkZHJlc3MnKTsKCSAgICAkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJICAgIHJldHVybjsKCSAgfQoKCWlmKCAkcGFyYW1zWyRlbWFpbF9maWVsZF0gIT0gJHBhcmFtc1skZW1haWxfZmllbGQuJ19hZ2FpbiddICkKCSAgewoJICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9lbWFpbGRvZXNub3RtYXRjaCcpOwoJICAgICR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CgkgICAgcmV0dXJuOwoJICB9CiAgICAgIH0KCglpZiAoaXNzZXQoJHBhcmFtc1snY2FwdGNoYSddKSAmJiAkcGFyYW1zWydjYXB0Y2hhJ10gPT0gMSkgewoJCWlmIChpc3NldCgkdGhpcy0+Y21zLT5tb2R1bGVzWydDYXB0Y2hhJ10pKQoJCXsKCQkJJGNhcHRjaGEgPSAmJHRoaXMtPmdldE1vZHVsZUluc3RhbmNlKCdDYXB0Y2hhJyk7CgkJCWlmICghICRjYXB0Y2hhLT5DaGVja0NhcHRjaGEoJF9QT1NUWydjYXB0Y2hhX3BocmFzZSddKSkKCQkJewoJCQkJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkJCQkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfY2FwdGNoYW1pc21hdGNoJyk7CgkJCQkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJCQkJcmV0dXJuOwoJCQl9CgkJfQoJfQoKICAgIC8vIGdlbmVyYXRlIGEgdW5pcXVlIGNvZGUgdGhhdCB0aGUgdXNlciBjYW4gZW50ZXIgdG8gZG91YmxlIGNvbmZpcm0KICAgIC8vIGhpcyBsb2dpbi4KICAgICRjb2RlID0gJGZldXNlcnMtPkdlbmVyYXRlUmFuZG9tUHJpbnRhYmxlU3RyaW5nKCk7CgogICAgLy8gaGF2ZSB0byBhZGQgdGhlIHJlY29yZCB0byB0aGUgZGF0YWJhc2Ugc28gdGhhdCB3ZSBrbm93IHdobyB0aGlzIGd1eSBpcwogICAgLy8gd2hlbiBoZSBjb21lcyBiYWNrCiAgICAkcmV0dXJuID0gJHRoaXMtPkNyZWF0ZVRlbXBVc2VyKCAkcGFyYW1zWydncm91cF9pZCddLCAkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvZGUgKTsKICAgIGlmKCAkcmV0dXJuWzBdID09IGZhbHNlICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmV0dXJuWzFdOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIGFuZCBhZGQgaGlzIHByb3BlcnRpZXMgdG9vCiAgICAvLyBidXQgZmlyc3Qgd2UgcmVtb3ZlIHRoZSBvbmVzIHdlJ3ZlIGhhbmRsZWQgYWxyZWFkeQogICAgJHRtcHVpZCA9ICRyZXR1cm5bMV07CiAgICB1bnNldCgkcGFyYW1zWydpbnB1dF91c2VybmFtZSddICk7CiAgICB1bnNldCgkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddICk7CiAgICB1bnNldCgkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddICk7CiAgICB1bnNldCgkcGFyYW1zWydoaWRkZW5fdXNlcm5hbWUnXSApOwogICAgdW5zZXQoJHBhcmFtc1snaGlkZGVuX3Bhc3N3b3JkJ10gKTsKICAgIHVuc2V0KCRwYXJhbXNbJ2hpZGRlbl9yZXBlYXRwYXNzd29yZCddICk7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCApCiAgICB7CiAgICAgIGlmKCBwcmVnX21hdGNoKCAnL15oaWRkZW5fLycsICRrZXkgKSApCgl7CgkgICRwcm9wbmFtZSA9IHN1YnN0cigka2V5LHN0cmxlbignaGlkZGVuXycpKTsKCSAgaWYoICFpc3NldCggJHBhcmFtc1snaW5wdXRfJy4kcHJvcG5hbWVdICkgKSAKCSAgICB7CgkgICAgICBjb250aW51ZTsKCSAgICB9CgkgICRyZXR1cm4gPSAkdGhpcy0+QWRkVGVtcFVzZXJQcm9wZXJ0eSggJHRtcHVpZCwgJHByb3BuYW1lLCAKCQkJCQkJJHBhcmFtc1snaW5wdXRfJy4kcHJvcG5hbWVdICk7CgkgIGlmKCAkcmV0dXJuWzBdID09IGZhbHNlICkKCSAgICB7CgkgICAgICAvLyBub3cgd2UgaGF2ZSBhbiBpc3N1ZSB0byBmaWd1cmUgb3V0CgkgICAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICRyZXR1cm5bMV07CgkgICAgICAkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJICAgICAgcmV0dXJuOwoJICAgIH0KCX0KICAgIH0KCiAgICBpZiggJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVfZW1haWxfY29uZmlybWF0aW9uJywxKSApCiAgICAgIHsKCS8vIG9rYXksIHdlJ3JlIG5vdyByZWFkeSB0byBzZW5kIHRoZSBlbWFpbCwgeWFob28sIHlhaG9vLCB5YWhvbwoJLy8gbm93IHdlIGhhdmUgdG8gZGVjaWRlIHdoYXQgZ29lcyBpbiBpdC4KCSR0aGlzLT5fU2VuZFVzZXJDb25maXJtYXRpb25FbWFpbCgkaWQsJHJldHVybmlkLCRwYXJhbXNbJGVtYWlsX2ZpZWxkXSwKCQkJCQkgICR1c2VybmFtZSwgJHBhcmFtc1snZ3JvdXBfaWQnXSwgJGNvZGUgKTsKCQoJLy8gc2VuZCBhbiBldmVudAoJJHRoaXMtPlNlbmRFdmVudCgnb25OZXdVc2VyJywKCQkJIGFycmF5KCd1c2VybmFtZSc9PiR1c2VybmFtZSwKCQkJICAgICAgICdlbWFpbCc9PiRwYXJhbXNbJGVtYWlsX2ZpZWxkXSkpOwoKCS8vIHdlJ3JlIG5vdCByZWRpcmVjdGluZyBhbnl3aGVyZSB3ZSBuZWVkIHRvIGRpc3BsYXkgc29tZSBuaWNlIG1lc3NhZ2UKCS8vIGFib3V0IHdlIGp1c3Qgc3BhbW1lZCB5b3VyIGluYm94LCBldGMsIGV0Yy4KCSR0aGlzLT5zbWFydHktPmFzc2lnbignc2l0ZW5hbWUnLCAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbigndXNlcm5hbWUnLCR1c2VybmFtZSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VtYWlsJywgJGFkZHJlc3MgKTsKCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnc2VsZnJlZ19wb3N0cmVnMV90ZW1wbGF0ZScpOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCS8vIGl0IGFwcGVhcnMgd2UncmUgYWxsb3dpbmcgaW5zdGFudCByZWdpc3RyYXRpb24KCSRyZXN1bHQgPSAkdGhpcy0+X0NyZWF0ZUZyb250ZW5kVXNlciggJHRtcHVpZCwgJHBhcmFtc1snZ3JvdXBfaWQnXSwKCQkJCSAgICR1c2VybmFtZSwgJHBhc3N3b3JkICk7CgkKCWlmKCAkcmVzdWx0ICE9ICcnICkKCSAgewoJICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICRyZXN1bHQ7CgkgICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCSAgfQoKCS8vIHdvb2hvb28sIHRoZSB1c2VyIGJlIGNyZWF0ZWQgKGhvcGVmdWxseSkuCgkvLyBkZWxldGUgdGhlIHJlY29yZHMgZnJvbSB0aGUgU2VsZlJlZyB0YWJsZXMKCSR0aGlzLT5EZWxldGVUZW1wVXNlclByb3BlcnRpZXMoICR0bXB1aWQgKTsKCSR0aGlzLT5EZWxldGVUZW1wVXNlciggJHRtcHVpZCApOwogICAgICB9CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBTZW5kQW5vdGhlckVtYWlsKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX1NlbmRBbm90aGVyUmVnRW1haWwoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgLy8gd2UgaGF2ZSB0aGUgdXNlcm5hbWUgKHRoZW9yZXRpY2FsbHkpIGluIHRoZSAkcGFyYW1zCiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddICkgKQogICAgICB7CgkkcGFybXNbJ21vZGUnXSA9ICdzZW5kYW5vdGhlcmVtYWlsJzsKCSRwYXJtc1snZXJyb3InXSA9IDE7CgkkcGFybXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKCSRwYXJtc1snbW9kZSddID0gJ3NlbmRhbm90aGVyZW1haWwnOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJtcyApOwoJcmV0dXJuOwogICAgICB9CiAgICAkdXNlcm5hbWUgPSAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddOwoKICAgIC8vIGxvb2sgdXAgdGhlIHVzZXJuYW1lIGFuZCBnZXQgYW4gaWQKICAgICR0ZW1wdXNlcmlkID0gJHRoaXMtPkdldFRlbXBVc2VySUQoICR1c2VybmFtZSApOwogICAgaWYoICEkdGVtcHVzZXJpZCApCiAgICAgIHsKCSRwYXJtc1snZXJyb3InXSA9IDE7CgkkcGFybXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl91c2Vybm90Zm91bmQnKS4iKDIpIjsKCSRwYXJtc1snbW9kZSddID0gJ3NlbmRhbm90aGVyZW1haWwnOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJtcyApOwoJcmV0dXJuOyAKICAgICAgfQoKICAgIC8vIGFuZCB3aGF0ZXZlciBkZXRhaWxzIHdlIGNhbiBmcm9tIHRoZSB1c2VycyB0YWJsZQogICAgJGRldGFpbHMgPSAkdGhpcy0+R2V0VGVtcFVzZXJEZXRhaWxzKCAkdGVtcHVzZXJpZCApOwogICAgaWYoICRkZXRhaWxzID09IGZhbHNlICkKICAgICAgewoJJHBhcm1zWydlcnJvciddID0gMTsKCSRwYXJtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX3VzZXJub3Rmb3VuZCcpOwoJJHBhcm1zWydtb2RlJ10gPSAnc2VuZGFub3RoZXJlbWFpbCc7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcm1zICk7CglyZXR1cm47IAogICAgICB9CgogICAgLy8gbm93IGdldCBwcm9wZXJ0aWVzCiAgICAkdGVtcHVzZXJwcm9wcyA9ICR0aGlzLT5HZXRUZW1wVXNlclByb3BlcnRpZXMoICR0ZW1wdXNlcmlkICk7CiAgICBpZiggJHRlbXB1c2VycHJvcHMgPT0gZmFsc2UgKQogICAgICB7CgkkcGFybXNbJ2Vycm9yJ10gPSAxOwoJJHBhcm1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3Jfbm9wcm9wZXJ0aWVzJyk7CgkkcGFybXNbJ21vZGUnXSA9ICdzZW5kYW5vdGhlcmVtYWlsJzsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFybXMgKTsKCXJldHVybjsgCiAgICAgIH0KCiAgICAkZmV1c2VycyA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwogICAgaWYoICEkZmV1c2VycyApCiAgICAgIHsKCSRwYXJtc1snZXJyb3InXSA9IDE7CgkkcGFybXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9ub2ZldXNlcnNtb2R1bGUnKTsKCSRwYXJtc1snbW9kZSddID0gJ3NlbmRhbm90aGVyZW1haWwnOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJtcyApOwoJcmV0dXJuOyAKICAgICAgfQoKICAgIC8vIGhhdmUgdGhlIGdyb3VwIGlkLCBnZXQgdGhlIGdyb3VwIHByb3BlcnR5IHJlbGF0aW9ucwogICAgJHJlbGF0aW9ucyA9ICRmZXVzZXJzLT5HZXRHcm91cFByb3BlcnR5UmVsYXRpb25zKCAkZGV0YWlsc1snZ3JvdXBfaWQnXSApOwogICAgaWYoICRyZWxhdGlvbnNbMF0gPT0gZmFsc2UgKQogICAgICB7CgkkcGFybXNbJ2Vycm9yJ10gPSAxOwoJJHBhcm1zWydtZXNzYWdlJ10gPSAkcmVsYXRpb25zWzFdOwoJJHBhcm1zWydtb2RlJ10gPSAnc2VuZGFub3RoZXJlbWFpbCc7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcm1zICk7CglyZXR1cm47IAogICAgICB9CgogICAgJHByb3BzID0gJGZldXNlcnMtPkdldFByb3BlcnR5RGVmbnMoKTsKICAgIGlmKCAkcHJvcHMgPT0gZmFsc2UgKQogICAgICB7CgkkcGFybXNbJ2Vycm9yJ10gPSAxOwoJJHBhcm1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfZGJlcnJvcicpOwoJJHBhcm1zWydtb2RlJ10gPSAnc2VuZGFub3RoZXJlbWFpbCc7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcm1zICk7CglyZXR1cm47IAogICAgICB9CgogICAgLy8gbm93IGZpbmQgYW4gZW1haWwgYWRkcmVzcyBwcm9wZXJ0eQogICAgLy8gYW5kIG1ha2Ugc3VyZSBpdCdzIG9mIHR5cGUgMgogICAgJGZvdW5kID0gJyc7CiAgICBmb3JlYWNoKCAkcmVsYXRpb25zIGFzICRyZWxuICkKICAgICAgewoJZm9yZWFjaCggJHByb3BzIGFzICRwcm9wICkKCSAgewoJICAgIGlmKCAkcHJvcFsndHlwZSddID09IDIgJiYgJHJlbG5bJ25hbWUnXSA9PSAkcHJvcFsnbmFtZSddICkKCSAgICAgIHsKCQkvLyBmb3VuZCBhbiBlbWFpbCBwcm9wZXJ0eQoJCWZvcmVhY2goICR0ZW1wdXNlcnByb3BzIGFzICR0ZW1wcHJvcCApCgkJICB7CgkJICAgIGlmKCAkcmVsblsnbmFtZSddID09ICR0ZW1wcHJvcFsndGl0bGUnXSApCgkJICAgICAgewoJCQkkZm91bmQgPSAkdGVtcHByb3BbJ2RhdGEnXTsKCQkJYnJlYWs7CgkJICAgICAgfQoJCSAgfQoJICAgICAgfQoJICAgIGlmKCAkZm91bmQgIT0gJycgKQoJICAgICAgewoJCWJyZWFrOwoJICAgICAgfQoJICB9CglpZiggJGZvdW5kICE9ICcnICkKCSAgewoJICAgIGJyZWFrOwoJICB9CiAgICAgIH0KICAgIGlmKCAhJGZvdW5kICkKICAgICAgewoJJHBhcm1zWydlcnJvciddID0gMTsKCSRwYXJtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vZW1haWxhZGRyZXNzJyk7CgkkcGFybXNbJ21vZGUnXSA9ICdzZW5kYW5vdGhlcmVtYWlsJzsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFybXMgKTsKCXJldHVybjsgCiAgICAgIH0KCiAgICAkdGhpcy0+X1NlbmRVc2VyQ29uZmlybWF0aW9uRW1haWwoICRpZCwkcmV0dXJuaWQsJGZvdW5kLCAkdXNlcm5hbWUsICRkZXRhaWxzWydncm91cF9pZCddLAoJCQkJICAgICAgICRkZXRhaWxzWydjb2RlJ10gKTsKCiAgICAvLyB3ZSdyZSBub3QgcmVkaXJlY3RpbmcgYW55d2hlcmUgd2UgbmVlZCB0byBkaXNwbGF5IHNvbWUgbmljZSBtZXNzYWdlCiAgICAvLyBhYm91dCB3ZSBqdXN0IHNwYW1tZWQgeW91ciBpbmJveCwgZXRjLCBldGMuCiAgICBnbG9iYWwgJGdDbXM7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3NpdGVuYW1lJywgJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3VzZXJuYW1lJywkdXNlcm5hbWUpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbWFpbCcsICRmb3VuZCApOwogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdzZWxmcmVnX3Bvc3Rfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZScpOwogIH0gIAoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBTZW5kVXNlckNvbmZpcm1hdGlvbkVtYWlsKCRhZGRyZXNzLCR1c2VybmFtZSwkZ3JvdXBfaWQsJGNvZGUpOwogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9TZW5kVXNlckNvbmZpcm1hdGlvbkVtYWlsKCRpZCwkcmV0dXJuaWQsJGFkZHJlc3MsJHVzZXJuYW1lLCRncm91cF9pZCwkY29kZSkKICB7CiAgICBnbG9iYWwgJGdDbXM7CiAgICAkY21zbWFpbGVyID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdDTVNNYWlsZXInKTsKICAgIGlmKCAhJGNtc21haWxlciApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICRjbXNtYWlsZXItPkFkZEFkZHJlc3MoICRhZGRyZXNzICk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25hbWUnLCR1c2VybmFtZSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NvZGUnLCRjb2RlKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc2l0ZW5hbWUnLCAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddKTsKICAgICRwYXJtcyA9IGFycmF5KCAnbW9kZScgPT4gJ3ZlcmlmeScsCgkJICAgICdpbnB1dF91c2VybmFtZScgPT4gJHVzZXJuYW1lLAoJCSAgICAnaW5wdXRfZ3JvdXBfaWQnID0+ICRncm91cF9pZCwKCQkgICAgJ2lucHV0X2NvZGUnID0+ICRjb2RlICk7CiAgICAkdXJsID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0JywkcmV0dXJuaWQsJycsJHBhcm1zLCcnLHRydWUsdHJ1ZSk7CiAgICAkc21hbGx1cmwgPSAkdGhpcy0+Q3JlYXRlTGluayggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJycsIGFycmF5KCdtb2RlJyA9PiAndmVyaWZ5JyksJycsdHJ1ZSwgdHJ1ZSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3VybCcsJHVybCk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3NtYWxsdXJsJywkc21hbGx1cmwpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsaW5rJywkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCwkdXJsLCRwYXJtcywnJyxmYWxzZSx0cnVlKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3NtYWxsbGluaycsJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0JywkcmV0dXJuaWQsJHNtYWxsdXJsLGFycmF5KCdtb2RlJz0+J3ZlcmlmeScpLCcnLGZhbHNlLHRydWUpKTsKICAgICRodG1sYm9keSA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ3NlbGZyZWdfZW1haWxjb25maXJtX3RlbXBsYXRlJyk7CiAgICAkdGV4dGJvZHkgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdzZWxmcmVnX2VtYWlsY29uZmlybV90ZXh0dGVtcGxhdGUnKTsKICAgICRjbXNtYWlsZXItPlNldEJvZHkoICR0ZXh0Ym9keSApOwogICAgaWYoICRodG1sYm9keSAhPSAnJyApCiAgICAgIHsKCSRjbXNtYWlsZXItPklzSFRNTCh0cnVlKTsgIC8vIHdlJ3JlIHNlbmRpbmcgYW4gaHRtbCBtYWlsCgkkY21zbWFpbGVyLT5TZXRCb2R5KCAkaHRtbGJvZHkgKTsKCSRjbXNtYWlsZXItPlNldEFsdEJvZHkoICR0ZXh0Ym9keSApOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSRjbXNtYWlsZXItPklzSFRNTChmYWxzZSk7ICAvLyB3ZSdyZSBzZW5kaW5nIGFuIGh0bWwgbWFpbAoJJGNtc21haWxlci0+U2V0Qm9keSggJHRleHRib2R5ICk7CiAgICAgIH0KICAgICRjbXNtYWlsZXItPlNldFN1YmplY3QoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NlbGZyZWdfZW1haWxjb25maXJtX3N1YmplY3QnLCR0aGlzLT5MYW5nKCdyZWdpc3RyYXRpb25fY29uZmlybWF0aW9uJykpKTsKICAgICRjbXNtYWlsZXItPlNlbmQoKTsKCiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBTZXRBZG1pblByZWZlcmVuY2VzKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX1NldEFkbWluUHJlZmVyZW5jZXMoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9yZW1vdmVhbGwnXSApICkKICAgICAgewoJJHRoaXMtPkV4cGlyZU9sZFRlbXBVc2VycygnLTUgeWVhcnMnKTsKCXJldHVybjsKICAgICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcmVtb3ZlMXdlZWsnXSApICkKICAgICAgewoJJHRoaXMtPkV4cGlyZU9sZFRlbXBVc2VycygnLTEgd2VlaycpOwoJJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsICdwcmVmcycpOwogICAgICB9CgogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9yZW1vdmUxbW9udGgnXSApICkKICAgICAgewoJJHRoaXMtPkV4cGlyZU9sZFRlbXBVc2VycygnLTEgbW9udGgnKTsKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAncHJlZnMnKTsKICAgICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcmVtb3ZlMW1vbnRoJ10gKSApCiAgICAgIHsKCSR0aGlzLT5FeHBpcmVPbGRUZW1wVXNlcnMoJy0yNCBob3VycycpOwoJJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsICdwcmVmcycpOwogICAgICB9CgogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9saXN0MWRheSddICkgKQogICAgICB7CgkjIGNyZWF0ZSBhIGNzdiBmaWxlIGZvciB0ZW1wIHVzZXJzIHRoYXQgaGF2ZQoJIyBiZWVuIGluIHRoZXJlIG1vcmUgdGhhbiBvbmUgZGF5CgkkcmVzdWx0ID0gJHRoaXMtPkNTVk9sZFRlbXBVc2VycygnLTI0IGhvdXJzJyk7CglpZiggJHJlc3VsdCA9PSAnJyApCgkgIHsKCSAgICBlY2hvICI8aDM+Tm8gcmVzdWx0cyByZXR1cm5lZDwvaDM+IjsKCSAgICByZXR1cm47CgkgIH0KCWhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbjogRmlsZSBUcmFuc2ZlcicpOwoJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2ZvcmNlLWRvd25sb2FkJyk7CgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPXRyYXBwZWRpbnNlbGZyZWcuY3N2Jyk7Cgl3aGlsZShAb2JfZW5kX2NsZWFuKCkpOwoJZWNobyAkcmVzdWx0OwoJZXhpdCgpOwogICAgICB9CgogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9ub3RpZnknXSApICkKICAgICAgewoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ25vdGlmeV9vbl9yZWdpc3RyYXRpb24nLAoJCQkgICAgICRwYXJhbXNbJ2lucHV0X25vdGlmeSddKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbm90aWZ5X29uX3JlZ2lzdHJhdGlvbicsIDApOwogICAgICB9CgogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9lbWFpbF9jb25maXJtYXRpb24nXSApICkKICAgICAgewoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3JlcXVpcmVfZW1haWxfY29uZmlybWF0aW9uJywKCQkJICAgICAkcGFyYW1zWydpbnB1dF9lbWFpbF9jb25maXJtYXRpb24nXSk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3JlcXVpcmVfZW1haWxfY29uZmlybWF0aW9uJywgMCk7CiAgICAgIH0KCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2NvbmZpcm1tYWlsX3RvJ10gKSApCiAgICAgIHsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzZW5kX2VtYWlsc190bycsCgkJCSAgICAgJHBhcmFtc1snaW5wdXRfY29uZmlybW1haWxfdG8nXSk7CiAgICAgIH0KCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2ZvcmNlX2VtYWlsX3R3aWNlJ10gKSApCiAgICAgIHsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzZWxmcmVnX2ZvcmNlX2VtYWlsX3R3aWNlJywgMSk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3NlbGZyZWdfZm9yY2VfZW1haWxfdHdpY2UnLCAwKTsKICAgICAgfQoKICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ3ByZWZlcmVuY2VzJyApOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgU2V0QWRtaW5SZWcxVGVtcGxhdGUoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfU2V0QWRtaW5SZWcxVGVtcGxhdGUoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydkZWZhdWx0YnV0dG9uJ10gKSApCiAgICAgIHsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfcmVnMXRlbXBsYXRlJywKCQkJICAgICR0aGlzLT5kZmx0X3JlZ2lzdHJhdGlvbjFfdGVtcGxhdGUgKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfcG9zdHJlZzFfdGVtcGxhdGUnLAoJCQkgICAgJHRoaXMtPmRmbHRfcG9zdHJlZzFfdGVtcGxhdGUgKTsKICAgICAgfQogICAgZWxzZSBpZiggaXNzZXQoICRwYXJhbXNbJ3JlZzFfdGVtcGxhdGVjb250ZW50J10gKSB8fAoJICAgICBpc3NldCggJHBhcmFtc1sncG9zdHJlZzFfdGVtcGxhdGVjb250ZW50J10gKSApCiAgICAgIHsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfcmVnMXRlbXBsYXRlJywKCQkJICAgICRwYXJhbXNbJ3JlZzFfdGVtcGxhdGVjb250ZW50J10gKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfcG9zdHJlZzFfdGVtcGxhdGUnLAoJCQkgICAgJHBhcmFtc1sncG9zdHJlZzFfdGVtcGxhdGVjb250ZW50J10gKTsKICAgICAgfQogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYiggJGlkLCAncmVnMXRlbXBsYXRlJyApOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgU2V0QWRtaW5SZWcyVGVtcGxhdGUoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfU2V0QWRtaW5SZWcyVGVtcGxhdGUoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydkZWZhdWx0YnV0dG9uJ10gKSApCiAgICAgIHsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfcmVnMnRlbXBsYXRlJywKCQkJICAgICR0aGlzLT5kZmx0X3JlZ2lzdHJhdGlvbjJfdGVtcGxhdGUgKTsKICAgICAgfQogICAgZWxzZSBpZiggaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX3JlZzJ0ZW1wbGF0ZScsCgkJCSAgICAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQnXSApOwogICAgICB9CiAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCAkaWQsICdyZWcydGVtcGxhdGUnICk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgU2V0QWRtaW5FbWFpbENvbmZpcm1hdGlvblRlbXBsYXRlKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX1NldEFkbWluRW1haWxDb25maXJtVGVtcGxhdGUoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydkZWZhdWx0YnV0dG9uJ10gKSApCiAgICAgIHsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfZW1haWxjb25maXJtX3RlbXBsYXRlJywKCQkJICAgICR0aGlzLT5kZmx0X2VtYWlsY29uZmlybV90ZW1wbGF0ZSApOwoJJHRoaXMtPlNldFRlbXBsYXRlKCAnc2VsZnJlZ19lbWFpbGNvbmZpcm1fdGV4dHRlbXBsYXRlJywKCQkJICAgICR0aGlzLT5kZmx0X2VtYWlsY29uZmlybV90ZXh0dGVtcGxhdGUgKTsKICAgICAgfQogICAgZWxzZSAKICAgICAgewoJJGh0bWx0ZW1wbGF0ZSA9ICcnOwoJaWYoIGlzc2V0KCAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQnXSApICkKCSAgewoJICAgICRodG1sdGVtcGxhdGUgPSAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQnXTsKCSAgfQoJJHRleHR0ZW1wbGF0ZSA9ICcnOwoJaWYoIGlzc2V0KCAkcGFyYW1zWyd0ZXh0dGVtcGxhdGVjb250ZW50J10gKSApCgkgIHsKCSAgICAkdGV4dHRlbXBsYXRlID0gJHBhcmFtc1sndGV4dHRlbXBsYXRlY29udGVudCddOwoJICB9Cgkkc3ViamVjdCA9ICcnOwoJaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9zdWJqZWN0J10gKSApCgkgIHsKCSAgICAkc3ViamVjdCA9ICRwYXJhbXNbJ2lucHV0X3N1YmplY3QnXTsKCSAgfQoJaWYoICRzdWJqZWN0ID09ICcnICkKCSAgewoJICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsJHBhcmFtcywkcmV0dXJuaWQsCgkJCQkgICAgICR0aGlzLT5MYW5nKCdlcnJvcl9tdXN0c3BlY2lmeXN1YmplY3QnKSk7CgkgICAgcmV0dXJuOwoJICB9CglpZiggJHRleHR0ZW1wbGF0ZSA9PSAnJyApCgkgIHsKCSAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCRwYXJhbXMsJHJldHVybmlkLAoJCQkJICAgICAkdGhpcy0+TGFuZygnZXJyb3JfbXVzdHNwZWNpZnl0ZXh0dGVtcGxhdGUnKSk7CgkgICAgcmV0dXJuOwoJICB9CgoJJHRoaXMtPlNldFRlbXBsYXRlKCAnc2VsZnJlZ19lbWFpbGNvbmZpcm1fdGVtcGxhdGUnLAoJCQkgICAgJHBhcmFtc1sndGVtcGxhdGVjb250ZW50J10gKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfZW1haWxjb25maXJtX3RleHR0ZW1wbGF0ZScsCgkJCSAgICAkcGFyYW1zWyd0ZXh0dGVtcGxhdGVjb250ZW50J10gKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCAnc2VsZnJlZ19lbWFpbGNvbmZpcm1fc3ViamVjdCcsCgkJCSAgICAgICRwYXJhbXNbJ2lucHV0X3N1YmplY3QnXSApOwoJCiAgICAgIH0KICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ2VtYWlsY29uZmlybV90ZW1wbGF0ZScgKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBTZXRBZG1pbkZpbmFsTWVzc2FnZVRlbXBsYXRlKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX1NldEFkbWluRmluYWxNZXNzYWdlVGVtcGxhdGUoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydkZWZhdWx0YnV0dG9uJ10gKSApCiAgICAgIHsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfZmluYWxtZXNzYWdlX3RlbXBsYXRlJywKCQkJICAgICR0aGlzLT5kZmx0X2ZpbmFsbWVzc2FnZV90ZW1wbGF0ZSApOwogICAgICB9CiAgICBlbHNlIGlmKCBpc3NldCggJHBhcmFtc1sndGVtcGxhdGVjb250ZW50J10gKSApCiAgICAgIHsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfZmluYWxtZXNzYWdlX3RlbXBsYXRlJywKCQkJICAgICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddICk7CiAgICAgIH0KICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ2ZpbmFsbWVzc2FnZV90ZW1wbGF0ZScgKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBTZXRBZG1pbkVtYWlsQ29uZmlybWF0aW9uVGVtcGxhdGUoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfU2V0QWRtaW5FbWFpbFVzZXJFZGl0ZWRUZW1wbGF0ZSggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2RlZmF1bHRidXR0b24nXSApICkKICAgICAgewoJJHRoaXMtPlNldFRlbXBsYXRlKCAnc2VsZnJlZ19lbWFpbHVzZXJlZGl0ZWRfdGVtcGxhdGUnLAoJCQkgICAgJHRoaXMtPmRmbHRfZW1haWx1c2VyZWRpdGVkX3RlbXBsYXRlICk7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX2VtYWlsdXNlcmVkaXRlZF90ZXh0dGVtcGxhdGUnLAoJCQkgICAgJHRoaXMtPmRmbHRfZW1haWx1c2VyZWRpdGVkX3RleHR0ZW1wbGF0ZSApOwogICAgICB9CiAgICBlbHNlIAogICAgICB7CgkkaHRtbHRlbXBsYXRlID0gJyc7CglpZiggaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddICkgKQoJICB7CgkgICAgJGh0bWx0ZW1wbGF0ZSA9ICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddOwoJICB9CgkkdGV4dHRlbXBsYXRlID0gJyc7CglpZiggaXNzZXQoICRwYXJhbXNbJ3RleHR0ZW1wbGF0ZWNvbnRlbnQnXSApICkKCSAgewoJICAgICR0ZXh0dGVtcGxhdGUgPSAkcGFyYW1zWyd0ZXh0dGVtcGxhdGVjb250ZW50J107CgkgIH0KCSRzdWJqZWN0ID0gJyc7CglpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3N1YmplY3QnXSApICkKCSAgewoJICAgICRzdWJqZWN0ID0gJHBhcmFtc1snaW5wdXRfc3ViamVjdCddOwoJICB9CglpZiggJHN1YmplY3QgPT0gJycgKQoJICB7CgkgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwkcGFyYW1zLCRyZXR1cm5pZCwKCQkJCSAgICAgJHRoaXMtPkxhbmcoJ2Vycm9yX211c3RzcGVjaWZ5c3ViamVjdCcpKTsKCSAgICByZXR1cm47CgkgIH0KCWlmKCAkdGV4dHRlbXBsYXRlID09ICcnICkKCSAgewoJICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsJHBhcmFtcywkcmV0dXJuaWQsCgkJCQkgICAgICR0aGlzLT5MYW5nKCdlcnJvcl9tdXN0c3BlY2lmeXRleHR0ZW1wbGF0ZScpKTsKCSAgICByZXR1cm47CgkgIH0KCgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX2VtYWlsdXNlcmVkaXRlZF90ZW1wbGF0ZScsCgkJCSAgICAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQnXSApOwoJJHRoaXMtPlNldFRlbXBsYXRlKCAnc2VsZnJlZ19lbWFpbHVzZXJlZGl0ZWRfdGV4dHRlbXBsYXRlJywKCQkJICAgICRwYXJhbXNbJ3RleHR0ZW1wbGF0ZWNvbnRlbnQnXSApOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoICdzZWxmcmVnX2VtYWlsdXNlcmVkaXRlZF9zdWJqZWN0JywKCQkJICAgICAgJHBhcmFtc1snaW5wdXRfc3ViamVjdCddICk7CgkKICAgICAgfQogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYiggJGlkLCAnZW1haWx1c2VyZWRpdGVkX3RlbXBsYXRlJyApOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFNldEFkbWluU2V0QW5vdGhlckVtYWlsVGVtcGxhdGUoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfU2V0QWRtaW5TZW5kQW5vdGhlckVtYWlsVGVtcGxhdGUoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydkZWZhdWx0YnV0dG9uJ10gKSApCiAgICAgIHsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZScsCgkJCSAgICAkdGhpcy0+ZGZsdF9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlICk7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX3Bvc3Rfc2VuZGFub3RoZXJlbWFpbF90ZW1wbGF0ZScsCgkJCSAgICAkdGhpcy0+ZGZsdF9wb3N0X3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUgKTsKICAgICAgfQogICAgZWxzZSBpZiggaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdzZWxmcmVnX3NlbmRhbm90aGVyZW1haWxfdGVtcGxhdGUnLAoJCQkgICAgJHBhcmFtc1sndGVtcGxhdGVjb250ZW50J10gKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ3NlbGZyZWdfcG9zdF9zZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJywKCQkJICAgICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudDInXSApOwogICAgICB9CiAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCAkaWQsICdzZW5kYW5vdGhlcmVtYWlsX3RlbXBsYXRlJyApOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9WZXJpZnlVc2VyKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX1ZlcmlmeVVzZXIoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgZ2xvYmFsICRnQ21zOwoKICAgIC8vIHNldCB0aGUgbW9kZSBzbyB3ZSBnZXQgc2VudCBiYWNrIHRvIHRoZSByaWdodCBmb3JtIGlmIHdlIGhhdmUgdG8gCiAgICAvLyByZWRpcmVjdC4KICAgICRwYXJhbXNbJ21vZGUnXSA9ICd2ZXJpZnknOwoKICAgIC8vIG5vdyBhbGwgd2UgaGF2ZSB0byBkbyBpcyBnZXQgdGhlIHVzZXJuYW1lLCBjb2RlLCBhbmQgcGFzc3dvcmQKICAgIC8vIGFuZCBtYWtlIHN1cmUgaXQgYWxsIG1hdGNoZXMKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10gKSApCiAgICAgIHsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ndXNlcm5hbWUnKTsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKICAgICAgfQogICAgJHVzZXJuYW1lID0gdHJpbSgkcGFyYW1zWydpbnB1dF91c2VybmFtZSddKTsKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10gKSApCiAgICAgIHsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ncGFzc3dvcmQnKTsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKICAgICAgfQogICAgJHBhc3N3b3JkID0gdHJpbSgkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddKTsKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ2lucHV0X2NvZGUnXSApICkKICAgICAgewoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX21pc3Npbmdjb2RlJyk7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CiAgICAgIH0KICAgICRjb2RlID0gdHJpbSgkcGFyYW1zWydpbnB1dF9jb2RlJ10pOwoKICAgIC8vIG5vdyBnZXQgdGhlIGRldGFpbHMgb3V0IG9mIHRoZSBkYXRhYmFzZSBmb3IgdGhzIHVzZXIKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfdXNlcnMKICAgICAgICAgIFdIRVJFIHVzZXJuYW1lID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHVzZXJuYW1lICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2RiZXJyb3InKTsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHQnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKICAgICAgfQogICAgaWYoICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSAhPSAxICkKICAgICAgewoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX3VzZXJub3Rmb3VuZCcpOwoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgCgkJICAgICAgJHRoaXMtPkxhbmcoJ2Vycm9yX3VzZXJub3Rmb3VuZCcpLiI6ICIuJHVzZXJuYW1lKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CiAgICAgIH0KICAgIAogICAgJHRtcHVzZXIgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICBpZiggbWQ1KCRwYXNzd29yZCkgIT0gJHRtcHVzZXJbJ3Bhc3Nzd29yZCddICkKICAgICAgewoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX3Bhc3N3b3Jkc2RvbnRtYXRjaCcpOwoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgCgkJICAgICAgJHRoaXMtPkxhbmcoJ2Vycm9yX3Bhc3N3b3Jkc2RvbnRtYXRjaCcpLiI6ICIuJHVzZXJuYW1lKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KICAgIGlmKCAkY29kZSAhPSAkdG1wdXNlclsnY29kZSddICkKICAgICAgewoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2NvZGVzZG9udG1hdGNoJyk7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAKCQkgICAgICAkdGhpcy0+TGFuZygnZXJyb3JfY29kZXNkb250bWF0Y2gnKS4iOiAiLiR1c2VybmFtZSk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwogICAgICB9CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2dyb3VwX2lkJ10gKSAmJiAkcGFyYW1zWydpbnB1dF9ncm91cF9pZCddICE9ICcnICkKICAgICAgewoJJGdyb3VwX2lkID0gdHJpbSgkcGFyYW1zWydpbnB1dF9ncm91cF9pZCddKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkkZ3JvdXBfaWQgPSAkdG1wdXNlclsnZ3JvdXBfaWQnXTsKICAgICAgfQoKICAgICRyZXN1bHQgPSAkdGhpcy0+X0NyZWF0ZUZyb250ZW5kVXNlciggJHRtcHVzZXJbJ2lkJ10sICRncm91cF9pZCwKCQkJCQkgICR1c2VybmFtZSwgJHBhc3N3b3JkICk7CiAgICBpZiggJHJlc3VsdCAhPSAnJyApCiAgICAgIHsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICRyZXN1bHQ7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyB3b29ob29vLCB0aGUgdXNlciBiZSBjcmVhdGVkIChob3BlZnVsbHkpLgogICAgLy8gZGVsZXRlIHRoZSByZWNvcmRzIGZyb20gdGhlIFNlbGZSZWcgdGFibGVzCiAgICAkdGhpcy0+RGVsZXRlVGVtcFVzZXJQcm9wZXJ0aWVzKCAkdG1wdXNlclsnaWQnXSApOwogICAgJHRoaXMtPkRlbGV0ZVRlbXBVc2VyKCAkdG1wdXNlclsnaWQnXSApOwoKICB9IAoKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIC8vIEFQSSBGVU5DVElPTlMKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKICBmdW5jdGlvbiBBZGRUZW1wVXNlclByb3BlcnR5KCAkdWlkLCAkcHJvcG5hbWUsICRwcm9wdmFsdWUgKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJGlkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3VzZXJzX3NlcSIpOwogICAgJHEgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3Byb3BlcnRpZXMKICAgICAgICAgIFZBTFVFUyAoPyw/LD8sPykiOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRpZCwgJHVpZCwgJHByb3BuYW1lLCAkcHJvcHZhbHVlICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgIHJldHVybiBhcnJheShUUlVFKTsKICB9CgoKICBmdW5jdGlvbiBDb3VudFRlbXBVc2VycygpCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJTRUxFQ1QgY291bnQoKikgYXMgY291bnQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfdXNlcnMiOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSApOwogICAgaWYoICEkZGJyZXN1bHQgKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICByZXR1cm4gJHJvd1snY291bnQnXTsKICB9CgoKICBmdW5jdGlvbiBDcmVhdGVUZW1wVXNlciggJGdpZCwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjb2RlICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgIGlmKCAkdXNlcm5hbWUgPT0gJycgfHwgJHBhc3N3b3JkID09ICcnICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgLy8gZ2V0IGFuIGlkCiAgICAkaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfdXNlcnNfc2VxIik7CiAgICAkcSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfdXNlcnMKICAgICAgICAgIFZBTFVFUyAoPyw/LD8sPyw/LD8pIjsgCiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJGlkLCAkZ2lkLCAkdXNlcm5hbWUsIG1kNSgkcGFzc3dvcmQpLCAkY29kZSwKCQkJCQkgdHJpbSgkZGItPkRCVGltZVNUYW1wKHRpbWUoKSksIiciKSkpOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsJGRiLT5FcnJvck1zZygpKTsKICAgICAgfQogICAgcmV0dXJuIGFycmF5KFRSVUUsJGlkKTsKICB9CgoKICBmdW5jdGlvbiBDU1ZPbGRUZW1wVXNlcnMoJGV4cGlyeWNvZGUpCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkZXhwaXJlcyA9ICRkYi0+RGJUaW1lU3RhbXAoc3RydG90aW1lKCAkZXhwaXJ5Y29kZSApKTsKICAgIC8vIGZpbmQgYWxsIHRoZSB1c2VyIGlkJ3MgdGhhdCBtYXRjaAogICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfdXNlcnMKICAgICAgICAgIFdIRVJFIGNyZWF0ZWRhdGUgPCA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkZXhwaXJlcyApICk7IAogICAgJHJlc3VsdCA9ICcnOwoKICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkgCiAgICAgIHsKCSR2YWxzID0gYXJyYXlfdmFsdWVzKCAkcm93ICk7CgkkcmVzdWx0IC49ICRyb3dbJ2lkJ10uIiwiLiRyb3dbJ3VzZXJuYW1lJ10uIiwiLiRyb3dbJ2NvZGUnXS4iLCIuJHJvd1snY3JlYXRlZGF0ZSddLiIsIjsKCSRxMiA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ19wcm9wZXJ0aWVzCiAgICAgICAgICAgICAgV0hFUkUgdXNlciA9ID8gT1JERVIgYnkgaWQiOwoJJGRicmVzdWx0MiA9ICRkYi0+RXhlY3V0ZSggJHEyLCBhcnJheSggJHJvd1snaWQnXSApICk7Cgl3aGlsZSggJHJvdzIgPSAkZGJyZXN1bHQyLT5GZXRjaFJvdygpICkKCSAgewoJICAgICRyZXN1bHQgLj0gJHJvdzJbJ2RhdGEnXS4iLCI7CgkgIH0KCSRyZXN1bHQgLj0gImVuZFxuIjsKICAgICAgfQoKICAgIHJldHVybiAkcmVzdWx0OwogIH0KCgogIGZ1bmN0aW9uIEVkaXRUZW1wVXNlciggJHVpZCwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjb2RlICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgIGlmKCAkdXNlcm5hbWUgPT0gJycgKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAkcSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3VzZXJzCiAgICAgICAgICBTRVQgdXNlcm5hbWUgPSA/LCBjb2RlID0gPyI7CiAgICAkcGFyYW1zID0gYXJyYXkoJHVzZXJuYW1lLCRjb2RlKTsKICAgIGlmKCAkcGFzc3dvcmQgIT0gJycgKQogICAgICB7CgkkcSAuPSAiLHBhc3N3b3JkID0gPyI7CgkkcGFyYW1zW10gPSBtZDUoJHBhc3N3b3JkKTsKICAgICAgfQogICAgJHEgLj0gIiBXSEVSRSBpZCA9ID8iOwogICAgJHBhcmFtc1tdID0gJHVpZDsKCiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCAkcGFyYW1zICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICByZXR1cm4gYXJyYXkoVFJVRSk7CiAgfQoKCiAgZnVuY3Rpb24gRXhwaXJlT2xkVGVtcFVzZXJzKCRleHBpcnljb2RlKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJGV4cGlyZXMgPSAkZGItPkRiVGltZVN0YW1wKHN0cnRvdGltZSggJGV4cGlyeWNvZGUgKSk7CiAgICAvLyBmaW5kIGFsbCB0aGUgdXNlciBpZCdzIHRoYXQgbWF0Y2gKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3VzZXJzCiAgICAgICAgICBXSEVSRSBjcmVhdGVkYXRlIDwgPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJGV4cGlyZXMgKSApOyAKICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkgCiAgICAgIHsKCS8vIHRoZW4gZGVsZXRlIHRoZWlyIHByb3BlcnRpZXMKCSRxMiA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfcHJvcGVydGllcwogICAgICAgICAgICAgV0hFUkUgdXNlciA9ID8iOwoJJGRicmVzdWx0MiA9ICRkYi0+RXhlY3V0ZSggJHEyLCBhcnJheSggJHJvd1snaWQnXSApICk7CiAgICAgIH0KCiAgICAvLyB0aGVuIGRlbGV0ZSB0aGVtCiAgICAkcSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfdXNlcnMKICAgICAgICAgIFdIRVJFIGNyZWF0ZWRhdGUgPiA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkZXhwaXJlcyApICk7CiAgICBpZiggISRkYnJlc3VsdCApIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KCgogIGZ1bmN0aW9uIERlbGV0ZVRlbXBVc2VyKCAkdWlkICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRxID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VsZnJlZ191c2VycwogICAgICAgICAgV0hFUkUgaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCR1aWQpICk7CiAgICBpZiggISRkYnJlc3VsdCApIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KCgogIGZ1bmN0aW9uIERlbGV0ZVRlbXBVc2VyUHJvcGVydGllcyggJHVpZCApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfcHJvcGVydGllcyAKICAgICAgICAgIFdIRVJFIHVzZXIgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkdWlkICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgZnVuY3Rpb24gR2V0VGVtcFVzZXJEZXRhaWxzKCAkdWlkICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3VzZXJzCiAgICAgICAgICBXSEVSRSBpZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICR1aWQgKSApOwogICAgaWYoICEkZGJyZXN1bHQgfHwgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID09IDAgKSByZXR1cm4gZmFsc2U7CiAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgcmV0dXJuICRyb3c7CiAgfQoKCiAgZnVuY3Rpb24gR2V0VGVtcFVzZXJJRCggJHVzZXJuYW1lICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCiAgICBpZiggJHVzZXJuYW1lID09ICcnICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NlbGZyZWdfdXNlcnMgV0hFUkUKICAgICAgICAgIHVzZXJuYW1lID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHVzZXJuYW1lICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJZWNobyAiREVCVUcgIi4kZGItPkVycm9yTXNnKCk7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgaWYoICEkcm93ICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgcmV0dXJuICRyb3dbJ2lkJ107CiAgfQoKICBmdW5jdGlvbiBHZXRUZW1wVXNlclByb3BlcnR5KCAkdWlkLCAkcHJvcG5hbWUsICRkZmx0ICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRxID0gIlNFTEVDVCBkYXRhIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3Byb3BlcnRpZXMKICAgICAgICAgIFdIRVJFIHVzZXIgPSA/IEFORCB0aXRsZSA9ICA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkdWlkLCAkcHJvcG5hbWUgKSApOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gJGRmbHQ7CiAgICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICBpZiggISRyb3cgKQogICAgICB7CglyZXR1cm4gJGRmbHQ7CiAgICAgIH0KICAgIHJldHVybiAkcm93WydkYXRhJ107CiAgfQoKCiAgZnVuY3Rpb24gR2V0VGVtcFVzZXJQcm9wZXJ0aWVzKCAkdWlkICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZWxmcmVnX3Byb3BlcnRpZXMKICAgICAgICAgIFdIRVJFIHVzZXIgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkdWlkICkgKTsKICAgIGlmKCAhJGRicmVzdWx0IHx8ICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA9PSAwICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAkcmVzdWx0ID0gYXJyYXkoKTsKICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgewoJJHJlc3VsdFtdID0gJHJvdzsKICAgICAgfQogICAgcmV0dXJuICRyZXN1bHQ7CiAgfQoKfQoKPz4K]]></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>
