<?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>MAS_Socials</name>
	<version>1.0.0</version>
    <mincmsversion>2.2</mincmsversion>
	<help><![CDATA[PGgzPkFib3V0IE1BU19Tb2NpYWxzPC9oMz4KPHA+PHN0cm9uZz5MYXN0IHVwZGF0ZWQ6PC9zdHJvbmc+IDE1LzA0LzIwMjY8L3A+CjxwPk1BU19Tb2NpYWxzIGlzIGEgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZSB0aGF0IGNlbnRyYWxpemVzIHNvY2lhbCBwdWJsaXNoaW5nIGZvciBOZXdzIGFuZCBDR0Jsb2cgY29udGVudC4gSXQgc3VwcG9ydHMgbWFudWFsIHBvc3RpbmcsIGF1dG9tYXRpYyBwb3N0aW5nIG9uIHB1Ymxpc2gvZWRpdCBldmVudHMsIGd1aWRlZCBkaWFnbm9zdGljcywgYW5kIHBsYXRmb3JtLXNwZWNpZmljIHRlc3QgYWN0aW9ucy48L3A+Cgo8aDM+TWFpbiBGZWF0dXJlczwvaDM+Cjx1bD4KICA8bGk+UHVibGlzaCB0byBtdWx0aXBsZSBzb2NpYWwgcGxhdGZvcm1zIGZyb20gb25lIG1vZHVsZS48L2xpPgogIDxsaT5BdXRvbWF0aWMgc2hhcmluZyBmb3IgTmV3cyBhbmQgQ0dCbG9nIHdoZW4gYXJ0aWNsZXMgYXJlIHB1Ymxpc2hlZCBvciBlZGl0ZWQuPC9saT4KICA8bGk+UGVyLXBsYXRmb3JtIHRlbXBsYXRlcyBmb3IgRGlzY29yZCwgRmFjZWJvb2ssIFR3aXR0ZXIgKFgpLCBhbmQgVGlrVG9rLjwvbGk+CiAgPGxpPkJ1aWx0LWluIHByb3ZpZGVyIHRlc3RzIHdpdGggY2xlYXIgc3VjY2Vzcy9lcnJvciBmZWVkYmFjay48L2xpPgogIDxsaT5GYWNlYm9vayBtb2RlIHN1cHBvcnQgZm9yIGJvdGggT0F1dGggdXNlci9wYWdlIHRva2VuIGFuZCBTeXN0ZW0gVXNlciB0b2tlbiBmbG93cy48L2xpPgogIDxsaT5GYWNlYm9vayB0b29sczogRGlzY292ZXIgTWFuYWdlZCBQYWdlcywgVmFsaWRhdGUgVG9rZW4gKyBQYWdlIElELCBhbmQgTWV0YSBSZXZpZXcgQVBJIFRlc3QgQ2FsbHMuPC9saT4KICA8bGk+V2ViIHB1c2ggaW50ZWdyYXRpb24gdGhyb3VnaCBDR1dlYlB1c2gsIGluY2x1ZGluZyBWQVBJRCBrZXkgcmVnZW5lcmF0aW9uLjwvbGk+CiAgPGxpPkZhY2Vib29rIGRhdGEgZGVsZXRpb24gY2FsbGJhY2sgYW5kIHN0YXR1cyBVUkwgc3VwcG9ydC48L2xpPgogIDxsaT5UaWtUb2sgdmVyaWZpY2F0aW9uIHN1cHBvcnQgZm9yIEROUyBhbmQgc2lnbmF0dXJlLWZpbGUgbWV0aG9kcy48L2xpPgogIDxsaT5CbGFzdCB3b3JrZmxvdyB3aXRoIGRlc3RpbmF0aW9uLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb24gdGhlIHNlY29uZCBzdGVwLjwvbGk+CiAgPGxpPkRpc2NvcmQgbWVzc2FnZSBmb3JtYXQgbW9kZXM6IG5vcm1hbCwgZW1iZWQgKyBtZXNzYWdlLCBlbWJlZCBvbmx5LjwvbGk+CiAgPGxpPkRpc2NvcmQgYmxhc3QgZW1iZWQgYnVpbGRlciB3aXRoIG9wdGlvbmFsIGZpZWxkcywgZHluYW1pYyBjdXN0b20gZW1iZWQgZmllbGRzICh1cCB0byBEaXNjb3JkIGxpbWl0KSwgYW5kIGxpdmUgcHJldmlldy48L2xpPgo8L3VsPgoKPGgzPkNvbmZpZ3VyYXRpb24gYW5kIFNlY3JldHM8L2gzPgo8dWw+CiAgPGxpPkJ5IGRlZmF1bHQsIE1BU19Tb2NpYWxzIHNhdmVzIHNldHRpbmdzIGluIENNU01TIGRhdGFiYXNlIHByZWZlcmVuY2VzLjwvbGk+CiAgPGxpPklmIG1hdGNoaW5nIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiA8Y29kZT5jb25maWcucGhwPC9jb2RlPiwgdGhvc2UgdmFsdWVzIGFyZSB0cmVhdGVkIGFzIG92ZXJyaWRlcy48L2xpPgogIDxsaT5UbyB1c2UgZGF0YWJhc2UgdmFsdWVzIG9ubHksIGtlZXAgTUFTX1NvY2lhbHMga2V5cyBlbXB0eSBvciB1bnNldCBpbiA8Y29kZT5jb25maWcucGhwPC9jb2RlPi48L2xpPgo8L3VsPgoKPGgzPlF1aWNrIFN0YXJ0PC9oMz4KPG9sPgogIDxsaT5PcGVuIDxlbT5FeHRlbnNpb25zIC0+IE1BU19Tb2NpYWxzPC9lbT4gaW4gdGhlIENNU01TIGFkbWluIHBhbmVsLjwvbGk+CiAgPGxpPkNvbmZpZ3VyZSBjcmVkZW50aWFscyBpbiBlYWNoIHBsYXRmb3JtIHRhYiBhbmQgc2F2ZS48L2xpPgogIDxsaT5FbmFibGUgdGhlIHBsYXRmb3JtIGFuZCBzYXZlIHNldHRpbmdzLjwvbGk+CiAgPGxpPlJ1biB0ZXN0IGFjdGlvbnMgaW4gZWFjaCB0YWIgdG8gdmFsaWRhdGUgY29ubmVjdGl2aXR5LjwvbGk+CiAgPGxpPkZvciBGYWNlYm9vaywgdXNlIDxlbT5EaXNjb3ZlciBNYW5hZ2VkIFBhZ2VzPC9lbT4gYmVmb3JlIHBvc3RpbmcgdGVzdHMgd2hlbiB1c2luZyBPQXV0aCBtb2RlLjwvbGk+CiAgPGxpPkVuYWJsZSBhdXRvbWF0aWMgcG9zdGluZyBpbiB0aGUgU2V0dGluZ3MgdGFiIGZvciBOZXdzIGFuZC9vciBDR0Jsb2cuPC9saT4KPC9vbD4KCjxoMz5GYWNlYm9vayBNb2RlczwvaDM+Cjx1bD4KICA8bGk+PHN0cm9uZz5PQXV0aCB1c2VyIC0+IFBhZ2UgdG9rZW46PC9zdHJvbmc+IHVzZSBGYWNlYm9vayBPQXV0aCwgdGhlbiBEaXNjb3ZlciBNYW5hZ2VkIFBhZ2VzIHRvIGJpbmQgdGhlIFBhZ2UgSUQvdG9rZW4gcGFpci48L2xpPgogIDxsaT48c3Ryb25nPlN5c3RlbSBVc2VyIHRva2VuOjwvc3Ryb25nPiB1c2UgYSBCdXNpbmVzcyBNYW5hZ2VyIHN5c3RlbSB1c2VyIHRva2VuIHdpdGggcGFnZSBhc3NldCBhc3NpZ25tZW50IGFuZCByZXF1aXJlZCBwZXJtaXNzaW9ucy48L2xpPgogIDxsaT5JZiBkaWFnbm9zdGljcyBzaG93IDxjb2RlPm1hbmFnZWRfcGFnZXM9MDwvY29kZT4sIHRoZSB0b2tlbiBjYW5ub3QgbWFuYWdlIGFueSBwYWdlcyBpbiA8Y29kZT4vbWUvYWNjb3VudHM8L2NvZGU+IGFuZCBwb3N0aW5nIGlzIGJsb2NrZWQgYnkgTWV0YS48L2xpPgo8L3VsPgoKPGgzPkJsYXN0IChTdGVwIDIpIE5vdGVzPC9oMz4KPHVsPgogIDxsaT5BZnRlciBjbGlja2luZyA8ZW0+TmV4dDwvZW0+LCBjaG9vc2Ugb25lIG9yIG1vcmUgZGVzdGluYXRpb25zIG9uIHRoZSBNYWluIHRhYiBiZWZvcmUgY2xpY2tpbmcgU3VibWl0LjwvbGk+CiAgPGxpPkRpc2NvcmQgYmxhc3QgdGFiIHN1cHBvcnRzIGVtYmVkIGluY2x1ZGUvZXhjbHVkZSB0b2dnbGVzIGFuZCBkeW5hbWljIGN1c3RvbSBmaWVsZHMgYWRkZWQgd2l0aCA8ZW0+KyBBZGQgZmllbGQ8L2VtPi48L2xpPgogIDxsaT5MaXZlIHByZXZpZXcgcmVmbGVjdHMgbWVzc2FnZSBtb2RlIGFuZCBlbWJlZCBzZWxlY3Rpb25zIGZvciBEaXNjb3JkIGJlZm9yZSBzdWJtaXNzaW9uLjwvbGk+CjwvdWw+Cgo8aDM+VGVtcGxhdGUgVmFyaWFibGVzPC9oMz4KPHA+VGhlIHBsYXRmb3JtIG1lc3NhZ2UgdGVtcGxhdGUgaXMgcGFyc2VkIHRocm91Z2ggU21hcnR5IGFuZCBjYW4gdXNlIHRoZXNlIHZhbHVlczo8L3A+Cjx1bD4KICA8bGk+PGNvZGU+eyRjb250ZW50LT50aXRsZX08L2NvZGU+IC0gQ29udGVudCB0aXRsZS48L2xpPgogIDxsaT48Y29kZT57JGNvbnRlbnQtPnN1bW1hcnl9PC9jb2RlPiAtIFN1bW1hcnkvYm9keSB0ZXh0LjwvbGk+CiAgPGxpPjxjb2RlPnskY29udGVudC0+Y2Fub25pY2FsfTwvY29kZT4gLSBDYW5vbmljYWwgVVJMLjwvbGk+CjwvdWw+Cgo8aDM+Q29tbW9uIFRyb3VibGVzaG9vdGluZzwvaDM+Cjx1bD4KICA8bGk+PHN0cm9uZz5GYWNlYm9vazo8L3N0cm9uZz4gaWYgPGNvZGU+bWFuYWdlZF9wYWdlcz0wPC9jb2RlPiwgcmUtcnVuIE9BdXRoIGFzIGEgcGFnZSBhZG1pbi9lZGl0b3IgYW5kIGdyYW50IHJlcXVpcmVkIHBlcm1pc3Npb25zIGJlZm9yZSBEaXNjb3ZlciBNYW5hZ2VkIFBhZ2VzLjwvbGk+CiAgPGxpPjxzdHJvbmc+RmFjZWJvb2sgQXBwIFJldmlldzo8L3N0cm9uZz4gcnVuIE1ldGEgcmV2aWV3IHRlc3QgY2FsbHMgZnJvbSB0aGUgRmFjZWJvb2sgdGFiIGFmdGVyIHRva2VuL3BhZ2UgY29uZmlndXJhdGlvbiBpcyB2YWxpZC48L2xpPgogIDxsaT48c3Ryb25nPlR3aXR0ZXIgKFgpOjwvc3Ryb25nPiB0aGUgYXBwIG11c3QgYmUgYXR0YWNoZWQgdG8gYSBQcm9qZWN0IHdpdGggYSB0aWVyIHRoYXQgYWxsb3dzIHBvc3RpbmcgdG8gPGNvZGU+LzIvdHdlZXRzPC9jb2RlPi48L2xpPgogIDxsaT48c3Ryb25nPlRpa1Rvazo8L3N0cm9uZz4gcG9zdGluZyByZXF1aXJlcyBib3RoIGFjY2VzcyB0b2tlbiBhbmQgYnVzaW5lc3MgYWNjb3VudCBJRC48L2xpPgogIDxsaT48c3Ryb25nPldlYiBQdXNoOjwvc3Ryb25nPiB2ZXJpZnkgYWN0aXZlIHN1YnNjcmlwdGlvbnMgYW5kIFZBUElEIGtleXMgaW4gQ0dXZWJQdXNoLjwvbGk+CiAgPGxpPjxzdHJvbmc+Qmxhc3Qgc3VibWl0Ojwvc3Ryb25nPiBlbnN1cmUgYXQgbGVhc3Qgb25lIGRlc3RpbmF0aW9uIGlzIHNlbGVjdGVkOyBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgcGVyIHNlbmRlciB3aXRoIHZhbGlkYXRpb24gZXJyb3JzLjwvbGk+CjwvdWw+Cgo8aDM+U3VwcG9ydDwvaDM+CjxwPkZvciBsb2NhbCBzdXBwb3J0IGluIHRoaXMgZW52aXJvbm1lbnQsIGNvbnRhY3Q6IDxhIGhyZWY9Im1haWx0bzppbmZvQG5ld3N0YXJnZXRlZC5jb20iPmluZm9AbmV3c3RhcmdldGVkLmNvbTwvYT4uPC9wPgoKPGgzPkxpY2Vuc2U8L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBkaXN0cmlidXRlZCB1bmRlciBHUEwtMy4wLW9yLWxhdGVyLiBTZWUgPGNvZGU+ZG9jL0NPUFlJTkc8L2NvZGU+IGZvciBmdWxsIGxpY2Vuc2UgdGV4dC48L3A+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBtYXN0ZXIzMzk1ICZsdDtpbmZvQG5ld3N0YXJnZXRlZC5jb20mZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMS4wLjA8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+Cgk8bGk+VmVyc2lvbiAxLjAuMSAoMTUvMDQvMjAyNikKCQk8dWw+CgkJPGxpPlVwZGF0ZWQgQWJvdXQvSGVscCBkb2N1bWVudGF0aW9uIHdpdGggY3VycmVudCBtb2R1bGUgYmVoYXZpb3IuPC9saT4KCQk8bGk+QWRkZWQgY2xlYXIgbm90ZXMgZm9yIGRhdGFiYXNlLWZpcnN0IHNldHRpbmdzIHdpdGggb3B0aW9uYWwgY29uZmlnLnBocCBvdmVycmlkZS48L2xpPgoJCTxsaT5VcGRhdGVkIHRyb3VibGVzaG9vdGluZyBndWlkYW5jZSBmb3IgRmFjZWJvb2ssIFR3aXR0ZXIgKFgpLCBUaWtUb2ssIGFuZCBXZWIgUHVzaCB0ZXN0cy48L2xpPgoJCTxsaT5FeHBhbmRlZCBBYm91dC9IZWxwIHdpdGggbGF0ZXN0IEZhY2Vib29rIG1vZGUgZ3VpZGFuY2UsIGJsYXN0IHdvcmtmbG93IG5vdGVzLCBhbmQgRGlzY29yZCBlbWJlZCBidWlsZGVyIGRvY3VtZW50YXRpb24uPC9saT4KCQk8bGk+RG9jdW1lbnRlZCBGYWNlYm9vayBkaWFnbm9zdGljcyBhbmQgTWV0YSByZXZpZXcgdGVzdC1jYWxsIHRvb2xpbmcgaW4gYWRtaW4uPC9saT4KCQk8bGk+RG9jdW1lbnRlZCBEaXNjb3JkIG1lc3NhZ2UgbW9kZXMgYW5kIGR5bmFtaWMgZW1iZWQgZmllbGQgc3VwcG9ydCBpbiBibGFzdCBzdGVwIDIuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDEuMSAoMTYvMTEvMjAyNSkKCQk8dWw+CgkJPGxpPkNhbiBub3cgc2VuZCBhIHNvY2lhbCBibGFzdCBmcm9tIHdpdGhpbiB0aGUgYWRtaW4gcGFuZWwuPC9saT4KCQk8bGk+SW1wcm92ZWQgYmxhc3Qgd29ya2Zsb3cgYW5kIHRlbXBsYXRpbmcuPC9saT4KCQk8bGk+TmV3IHNtYXJ0eSBwbHVnaW4gZm9yIGFkZGluZyBwYXJhbWV0ZXJzIHRvIFVSTFMgYmVmb3JlIHNob3J0ZW5pbmcuPC9saT4KCQk8bGk+TmV3IGJsYXN0IHByb3RvY29sIG1ldGhvZC48L2xpPgoJCTxsaT5DaGFuZ2UgdG8gY2FwYWJpbGl0eSBuYW1lLjwvbGk+CgkJPC91bD4KCTwvbGk+CjwvdWw+CjxiciAvPg==]]></about>
	<description><![CDATA[Unified social sharing for News and CGBlog with Discord, Facebook, Twitter/X and TikTok support]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_post.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5WaXNpYmxlVG9BZG1pblVzZXIoKSApIGV4aXQ7CgovLyBFbnN1cmUgbG9jYWwgY2xhc3NlcyBhcmUgYXZhaWxhYmxlCnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9saWIvU3VwcG9ydC9QYXJhbS5waHAnOwokUCA9ICdcTUFTX1NvY2lhbHNcU3VwcG9ydFxQYXJhbSc7CiRjb25maWcgPSBjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsKCnRyeSB7CiAgICByZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL2NsYXNzLnNiX2NvbnRlbnQucGhwJzsKICAgICRvYmogPSBuZXcgc2JfY29udGVudDsKICAgICRvYmotPnRpdGxlID0gJFA6OmdldFN0cmluZygkcGFyYW1zLCdzdWJqZWN0Jyk7CiAgICAkb2JqLT5zdW1tYXJ5ID0gc3RyaXBfdGFncygkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsJ2JvZHknKSk7CiAgICAkb2JqLT5jYW5vbmljYWwgPSAkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsJ3VybCcpOwogICAgJHBpY3R1cmUgPSAkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsJ3BpY3R1cmUnKTsKICAgIGlmKCAkcGljdHVyZSApIHsKICAgICAgICAkcGljdHVyZSA9ICRjb25maWdbJ3VwbG9hZHNfdXJsJ10uJy8nLiRwaWN0dXJlOwogICAgICAgICRvYmotPmFkZF9waWN0dXJlKCRwaWN0dXJlLGJhc2VuYW1lKCRwaWN0dXJlKSk7CiAgICB9OwogICAgJHJldHVybnRvID0gJHRoaXMtPmNyZWF0ZV91cmwoJ20xXycsJ2RlZmF1bHRhZG1pbicsJycpOwogICAgJGRhdGEgPSBbICdzYl9jb250ZW50JyA9PiAkb2JqLCAncmV0dXJudG8nPT4kcmV0dXJudG8gXTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJ2JsYXN0JywkcmV0dXJuaWQsWyAnZGF0YSc9PmJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKCRkYXRhKSkgXSk7Cn0KY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICAkdGhpcy0+U2V0RXJyb3IoICRlLT5HZXRNZXNzYWdlKCkgKTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/action.blast.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5WaXNpYmxlVG9BZG1pblVzZXIoKSApIHJldHVybjsKCnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9saWIvU2VydmljZXMvQ29uZmlnUmVwb3NpdG9yeS5waHAnOwoKLy8gTm9ybWFsaXplIENNU01TIGFjdGlvbi1wcmVmaXhlZCBwYXJhbXMgKGUuZy4gbTFfc2JfY29udGVudCA9PiBzYl9jb250ZW50KQovLyBzbyBzdWJtaXQgaGFuZGxpbmcgaXMgcm9idXN0IGFjcm9zcyBkaWZmZXJlbnQgZm9ybSBidWlsZGVycy4KaWYgKGlzc2V0KCRpZCkgJiYgaXNfc3RyaW5nKCRpZCkgJiYgJGlkICE9PSAnJykgewogICAgZm9yZWFjaCAoJHBhcmFtcyBhcyAkayA9PiAkdikgewogICAgICAgIGlmIChpc19zdHJpbmcoJGspICYmIHN0cnBvcygkaywgJGlkKSA9PT0gMCkgewogICAgICAgICAgICAkcGxhaW4gPSBzdWJzdHIoJGssIHN0cmxlbigkaWQpKTsKICAgICAgICAgICAgaWYgKCRwbGFpbiAhPT0gJycgJiYgIWFycmF5X2tleV9leGlzdHMoJHBsYWluLCAkcGFyYW1zKSkgewogICAgICAgICAgICAgICAgJHBhcmFtc1skcGxhaW5dID0gJHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCiRzZW5kZXJzID0gc2JfdXRpbHM6OmdldF9zZW5kZXJfbGlzdCgpOwokc2VuZGVySW5mbyA9IHNiX3V0aWxzOjpnZXRfc2VuZGVyX2luZm8oKTsKJG1hc1NlbmRlcnMgPSBbXTsKJHJlcG8gPSBuZXcgXE1BU19Tb2NpYWxzXFNlcnZpY2VzXENvbmZpZ1JlcG9zaXRvcnkoJHRoaXMpOwokZmFjZWJvb2tDZmcgPSAkcmVwby0+Z2V0RmFjZWJvb2tDb25maWcoKTsKJHRpa3Rva0NmZyA9ICRyZXBvLT5nZXRUaWtUb2tDb25maWcoKTsKCiRkaXNjb3JkUmVhZHkgPSAoYm9vbCkgJHJlcG8tPmdldERpc2NvcmRXZWJob29rKCk7CiRmYWNlYm9va1JlYWR5ID0gKAogICAgdHJpbSgoc3RyaW5nKSgkZmFjZWJvb2tDZmdbJ3BhZ2VfaWQnXSA/PyAnJykpICE9PSAnJwogICAgJiYgKAogICAgICAgIHRyaW0oKHN0cmluZykoJGZhY2Vib29rQ2ZnWydhY2Nlc3NfdG9rZW4nXSA/PyAnJykpICE9PSAnJwogICAgICAgIHx8IHRyaW0oKHN0cmluZykoJGZhY2Vib29rQ2ZnWydzeXN0ZW1fdXNlcl90b2tlbiddID8/ICcnKSkgIT09ICcnCiAgICApCik7CiR0aWt0b2tSZWFkeSA9IHRyaW0oKHN0cmluZykoJHRpa3Rva0NmZ1snYWNjZXNzX3Rva2VuJ10gPz8gJycpKSAhPT0gJyc7CgppZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfRElTQ09SRF9FTkFCTEVELCAxKSB8fCAkZGlzY29yZFJlYWR5KSB7CiAgICAkbWFzU2VuZGVyc1snbWFzX2Rpc2NvcmQnXSA9ICdEaXNjb3JkJzsKfQppZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfRkFDRUJPT0tfRU5BQkxFRCwgMCkgfHwgJGZhY2Vib29rUmVhZHkpIHsKICAgICRtYXNTZW5kZXJzWydtYXNfZmFjZWJvb2snXSA9ICdGYWNlYm9vayc7Cn0KaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX1RJS1RPS19FTkFCTEVELCAwKSB8fCAkdGlrdG9rUmVhZHkpIHsKICAgICRtYXNTZW5kZXJzWydtYXNfdGlrdG9rJ10gPSAnVGlrVG9rJzsKfQppZiAoIWlzX2FycmF5KCRzZW5kZXJzKSkgewogICAgJHNlbmRlcnMgPSBbXTsKfQokc2VuZGVycyA9IGFycmF5X21lcmdlKCRzZW5kZXJzLCAkbWFzU2VuZGVycyk7CmlmICghaXNfYXJyYXkoJHNlbmRlckluZm8pKSB7CiAgICAkc2VuZGVySW5mbyA9IFtdOwp9CiRzZW5kZXJJbmZvID0gYXJyYXlfbWVyZ2UoJHNlbmRlckluZm8sIFsKICAgICdtYXNfZGlzY29yZCcgPT4gWwogICAgICAgICdtb2R1bGUnID0+ICdtYXNfZGlzY29yZCcsCiAgICAgICAgJ3NvY2lhbG5hbWUnID0+ICdEaXNjb3JkJywKICAgICAgICAndGl0bGUnID0+IDEsCiAgICAgICAgJ2NoYXJsaW1pdCcgPT4gMjAwMCwKICAgICAgICAncGljdHVyZScgPT4gMCwKICAgICAgICAnbGluaycgPT4gMSwKICAgICAgICAnbGlua3RpdGxlJyA9PiAwLAogICAgICAgICdjYXB0aW9uJyA9PiAwLAogICAgICAgICdkZXNjcmlwdGlvbicgPT4gMCwKICAgICAgICAnaW5mb19tZXNzYWdlJyA9PiAnVXNlcyBNQVNfU29jaWFscyBEaXNjb3JkIGludGVncmF0aW9uIHNldHRpbmdzLicsCiAgICBdLAogICAgJ21hc19mYWNlYm9vaycgPT4gWwogICAgICAgICdtb2R1bGUnID0+ICdtYXNfZmFjZWJvb2snLAogICAgICAgICdzb2NpYWxuYW1lJyA9PiAnRmFjZWJvb2snLAogICAgICAgICd0aXRsZScgPT4gMSwKICAgICAgICAnY2hhcmxpbWl0JyA9PiAwLAogICAgICAgICdwaWN0dXJlJyA9PiAwLAogICAgICAgICdsaW5rJyA9PiAxLAogICAgICAgICdsaW5rdGl0bGUnID0+IDAsCiAgICAgICAgJ2NhcHRpb24nID0+IDAsCiAgICAgICAgJ2Rlc2NyaXB0aW9uJyA9PiAwLAogICAgICAgICdpbmZvX21lc3NhZ2UnID0+ICdVc2VzIE1BU19Tb2NpYWxzIEZhY2Vib29rIGludGVncmF0aW9uIHNldHRpbmdzLicsCiAgICBdLAogICAgJ21hc190aWt0b2snID0+IFsKICAgICAgICAnbW9kdWxlJyA9PiAnbWFzX3Rpa3RvaycsCiAgICAgICAgJ3NvY2lhbG5hbWUnID0+ICdUaWtUb2snLAogICAgICAgICd0aXRsZScgPT4gMSwKICAgICAgICAnY2hhcmxpbWl0JyA9PiAyMjAwLAogICAgICAgICdwaWN0dXJlJyA9PiAwLAogICAgICAgICdsaW5rJyA9PiAxLAogICAgICAgICdsaW5rdGl0bGUnID0+IDAsCiAgICAgICAgJ2NhcHRpb24nID0+IDAsCiAgICAgICAgJ2Rlc2NyaXB0aW9uJyA9PiAwLAogICAgICAgICdpbmZvX21lc3NhZ2UnID0+ICdVc2VzIE1BU19Tb2NpYWxzIFRpa1RvayBpbnRlZ3JhdGlvbiBzZXR0aW5ncy4nLAogICAgXSwKXSk7Cgp0cnkgewogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSApIHsKICAgICAgICBpZiggaXNzZXQoJHBhcmFtc1sncmV0dXJudG8nXSkgKSByZWRpcmVjdCgkcGFyYW1zWydyZXR1cm50byddKTsKICAgICAgICAkdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnbXNnX2NhbmNlbGxlZCcpKTsKICAgICAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCk7CiAgICB9CiAgICBpZiggaXNzZXQoJHBhcmFtc1snc3VibWl0J10pICkgewogICAgICAgIGlmKCAhaXNzZXQoJHBhcmFtc1snc2VuZGVycyddKSB8fCAhaXNfYXJyYXkoJHBhcmFtc1snc2VuZGVycyddKSB8fCBjb3VudCgkcGFyYW1zWydzZW5kZXJzJ10pID09IDAgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycm9yX25vc2VuZGVycycpKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc3NldCgkcGFyYW1zWydzYl9jb250ZW50J10pIHx8IHRyaW0oKHN0cmluZykgJHBhcmFtc1snc2JfY29udGVudCddKSA9PT0gJycpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQmxhc3QgcGF5bG9hZCBpcyBtaXNzaW5nLiBQbGVhc2UgZ28gYmFjayB0byBCbGFzdCB0YWIgYW5kIGNsaWNrIE5leHQgYWdhaW4uJyk7CiAgICAgICAgfQogICAgICAgICRzYXZlZF9zZW5kZXJzID0gJHBhcmFtc1snc2VuZGVycyddOwogICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzYXZlZF9zZW5kZXJzJyxpbXBsb2RlKCcsJywkc2F2ZWRfc2VuZGVycykpOwogICAgICAgICRub3RpZl9tc2cgPSB1bnNlcmlhbGl6ZShiYXNlNjRfZGVjb2RlKCRwYXJhbXNbJ3NiX2NvbnRlbnQnXSkpOwogICAgICAgIGlmICghJG5vdGlmX21zZyBpbnN0YW5jZW9mIFxzYl9jb250ZW50KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0JsYXN0IHBheWxvYWQgaXMgaW52YWxpZC4gUGxlYXNlIHJlb3BlbiBCbGFzdCBhbmQgcmV0cnkuJyk7CiAgICAgICAgfQogICAgICAgICRzbWFydHktPmFzc2lnbignaW5wdXRfZGF0YScsJG5vdGlmX21zZyk7CgoKICAgICAgICAvLyBidWlsZCB0aGUgbWVzc2FnZXMKICAgICAgICAkZXJyb3IgPSBudWxsOwogICAgICAgIGZvcmVhY2goICRzYXZlZF9zZW5kZXJzIGFzICRvbmUgKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpZiAoc3RycG9zKChzdHJpbmcpICRvbmUsICdtYXNfJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICByZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL1NlcnZpY2VzL0NvbmZpZ1JlcG9zaXRvcnkucGhwJzsKICAgICAgICAgICAgICAgICAgICByZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL1NlcnZpY2VzL0xvZ2dlci5waHAnOwogICAgICAgICAgICAgICAgICAgIHJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9saWIvU2VydmljZXMvRGlzY29yZE5vdGlmaWVyLnBocCc7CiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL2xpYi9TZXJ2aWNlcy9GYWNlYm9va1B1Ymxpc2hlci5waHAnOwogICAgICAgICAgICAgICAgICAgIHJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9saWIvU2VydmljZXMvVGlrVG9rUHVibGlzaGVyLnBocCc7CiAgICAgICAgICAgICAgICAgICAgJHJlcG8gPSBuZXcgXE1BU19Tb2NpYWxzXFNlcnZpY2VzXENvbmZpZ1JlcG9zaXRvcnkoJHRoaXMpOwogICAgICAgICAgICAgICAgICAgICR0ZW1wbGF0ZSA9IHRyaW0oKHN0cmluZykgKCRwYXJhbXNbJG9uZSAuICdfbXNnJ10gPz8gJ3skY29udGVudC0+dGl0bGV9IHskY29udGVudC0+Y2Fub25pY2FsfScpKTsKICAgICAgICAgICAgICAgICAgICAkb2sgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZiAoJG9uZSA9PT0gJ21hc19kaXNjb3JkJykgewogICAgICAgICAgICAgICAgICAgICAgICAkcHVibGlzaGVyID0gbmV3IFxNQVNfU29jaWFsc1xTZXJ2aWNlc1xEaXNjb3JkTm90aWZpZXIoJHRoaXMsICRyZXBvKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGRpc2NvcmRPcHRpb25zID0gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vZGUnID0+IHRyaW0oKHN0cmluZykoJHBhcmFtc1skb25lIC4gJ19tb2RlJ10gPz8gJycpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWJlZF90aXRsZScgPT4gdHJpbSgoc3RyaW5nKSgkcGFyYW1zWyRvbmUgLiAnX2VtYmVkX3RpdGxlJ10gPz8gJycpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWJlZF9kZXNjcmlwdGlvbicgPT4gdHJpbSgoc3RyaW5nKSgkcGFyYW1zWyRvbmUgLiAnX2VtYmVkX2Rlc2NyaXB0aW9uJ10gPz8gJycpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWJlZF91cmwnID0+IHRyaW0oKHN0cmluZykoJHBhcmFtc1skb25lIC4gJ19lbWJlZF91cmwnXSA/PyAnJykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYmVkX2NvbG9yJyA9PiB0cmltKChzdHJpbmcpKCRwYXJhbXNbJG9uZSAuICdfZW1iZWRfY29sb3InXSA/PyAnJykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYmVkX2Zvb3RlcicgPT4gdHJpbSgoc3RyaW5nKSgkcGFyYW1zWyRvbmUgLiAnX2VtYmVkX2Zvb3RlciddID8/ICcnKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1iZWRfYXV0aG9yX25hbWUnID0+IHRyaW0oKHN0cmluZykoJHBhcmFtc1skb25lIC4gJ19lbWJlZF9hdXRob3JfbmFtZSddID8/ICcnKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1iZWRfYXV0aG9yX3VybCcgPT4gdHJpbSgoc3RyaW5nKSgkcGFyYW1zWyRvbmUgLiAnX2VtYmVkX2F1dGhvcl91cmwnXSA/PyAnJykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYmVkX2F1dGhvcl9pY29uJyA9PiB0cmltKChzdHJpbmcpKCRwYXJhbXNbJG9uZSAuICdfZW1iZWRfYXV0aG9yX2ljb24nXSA/PyAnJykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYmVkX3RodW1ibmFpbF91cmwnID0+IHRyaW0oKHN0cmluZykoJHBhcmFtc1skb25lIC4gJ19lbWJlZF90aHVtYm5haWxfdXJsJ10gPz8gJycpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWJlZF9pbWFnZV91cmwnID0+IHRyaW0oKHN0cmluZykoJHBhcmFtc1skb25lIC4gJ19lbWJlZF9pbWFnZV91cmwnXSA/PyAnJykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYmVkX2luY2x1ZGVfdGl0bGUnID0+ICFlbXB0eSgkcGFyYW1zWyRvbmUgLiAnX2VtYmVkX2luY2x1ZGVfdGl0bGUnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1iZWRfaW5jbHVkZV9kZXNjcmlwdGlvbicgPT4gIWVtcHR5KCRwYXJhbXNbJG9uZSAuICdfZW1iZWRfaW5jbHVkZV9kZXNjcmlwdGlvbiddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWJlZF9pbmNsdWRlX3VybCcgPT4gIWVtcHR5KCRwYXJhbXNbJG9uZSAuICdfZW1iZWRfaW5jbHVkZV91cmwnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1iZWRfaW5jbHVkZV9jb2xvcicgPT4gIWVtcHR5KCRwYXJhbXNbJG9uZSAuICdfZW1iZWRfaW5jbHVkZV9jb2xvciddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWJlZF9pbmNsdWRlX2Zvb3RlcicgPT4gIWVtcHR5KCRwYXJhbXNbJG9uZSAuICdfZW1iZWRfaW5jbHVkZV9mb290ZXInXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1iZWRfaW5jbHVkZV90aW1lc3RhbXAnID0+ICFlbXB0eSgkcGFyYW1zWyRvbmUgLiAnX2VtYmVkX2luY2x1ZGVfdGltZXN0YW1wJ10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYmVkX2luY2x1ZGVfYXV0aG9yJyA9PiAhZW1wdHkoJHBhcmFtc1skb25lIC4gJ19lbWJlZF9pbmNsdWRlX2F1dGhvciddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWJlZF9pbmNsdWRlX3RodW1ibmFpbCcgPT4gIWVtcHR5KCRwYXJhbXNbJG9uZSAuICdfZW1iZWRfaW5jbHVkZV90aHVtYm5haWwnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1iZWRfaW5jbHVkZV9pbWFnZScgPT4gIWVtcHR5KCRwYXJhbXNbJG9uZSAuICdfZW1iZWRfaW5jbHVkZV9pbWFnZSddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWJlZF9pbmNsdWRlX2ZpZWxkcycgPT4gIWVtcHR5KCRwYXJhbXNbJG9uZSAuICdfZW1iZWRfaW5jbHVkZV9maWVsZHMnXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZE5hbWVzID0gJHBhcmFtc1skb25lIC4gJ19lbWJlZF9maWVsZF9uYW1lJ10gPz8gW107CiAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZFZhbHVlcyA9ICRwYXJhbXNbJG9uZSAuICdfZW1iZWRfZmllbGRfdmFsdWUnXSA/PyBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGZpZWxkSW5saW5lID0gJHBhcmFtc1skb25lIC4gJ19lbWJlZF9maWVsZF9pbmxpbmUnXSA/PyBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGVtYmVkRmllbGRzID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkZmllbGROYW1lcykgJiYgaXNfYXJyYXkoJGZpZWxkVmFsdWVzKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1heCA9IG1pbihjb3VudCgkZmllbGROYW1lcyksIGNvdW50KCRmaWVsZFZhbHVlcyksIDI1KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRtYXg7ICRpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbiA9IHRyaW0oKHN0cmluZykoJGZpZWxkTmFtZXNbJGldID8/ICcnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHYgPSB0cmltKChzdHJpbmcpKCRmaWVsZFZhbHVlc1skaV0gPz8gJycpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG4gPT09ICcnIHx8ICR2ID09PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVtYmVkRmllbGRzW10gPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyA9PiAkdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lubGluZScgPT4gIWVtcHR5KCRmaWVsZElubGluZVskaV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGRpc2NvcmRPcHRpb25zWydlbWJlZF9maWVsZHMnXSA9ICRlbWJlZEZpZWxkczsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkZW1iZWRGaWVsZHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB1c2VyIHByb3ZpZGVkIGZpZWxkIHJvd3MsIGZvcmNlIGluY2x1ZGVfZmllbGRzIHRvIHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4gd2hlbiBjaGVja2JveCBzdGF0ZSBpcyBtaXNzaW5nIGZyb20gUE9TVCBmb3IgYW55IHJlYXNvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNjb3JkT3B0aW9uc1snZW1iZWRfaW5jbHVkZV9maWVsZHMnXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJG9uZSAuICdfdXNlX2VtYmVkJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzY29yZE9wdGlvbnNbJ3VzZV9lbWJlZCddID0gIWVtcHR5KCRwYXJhbXNbJG9uZSAuICdfdXNlX2VtYmVkJ10pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkcGFyYW1zWyRvbmUgLiAnX2VtYmVkX3RpbWVzdGFtcCddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc2NvcmRPcHRpb25zWydlbWJlZF90aW1lc3RhbXAnXSA9ICFlbXB0eSgkcGFyYW1zWyRvbmUgLiAnX2VtYmVkX3RpbWVzdGFtcCddKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkb2sgPSAkcHVibGlzaGVyLT5pc0NvbmZpZ3VyZWQoKSA/ICRwdWJsaXNoZXItPnNlbmQoJG5vdGlmX21zZywgJHRlbXBsYXRlLCAkZGlzY29yZE9wdGlvbnMpIDogZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRvbmUgPT09ICdtYXNfZmFjZWJvb2snKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwdWJsaXNoZXIgPSBuZXcgXE1BU19Tb2NpYWxzXFNlcnZpY2VzXEZhY2Vib29rUHVibGlzaGVyKCR0aGlzLCAkcmVwbyk7CiAgICAgICAgICAgICAgICAgICAgICAgICRvayA9ICRwdWJsaXNoZXItPmlzQ29uZmlndXJlZCgpID8gJHB1Ymxpc2hlci0+cHVibGlzaCgkbm90aWZfbXNnLCAkdGVtcGxhdGUpIDogZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRvbmUgPT09ICdtYXNfdGlrdG9rJykgewogICAgICAgICAgICAgICAgICAgICAgICAkcHVibGlzaGVyID0gbmV3IFxNQVNfU29jaWFsc1xTZXJ2aWNlc1xUaWtUb2tQdWJsaXNoZXIoJHRoaXMsICRyZXBvKTsKICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gJHB1Ymxpc2hlci0+aXNDb25maWd1cmVkKCkgPyAkcHVibGlzaGVyLT5wdWJsaXNoKCRub3RpZl9tc2csICR0ZW1wbGF0ZSwgW10pIDogZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghJG9rKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ZhaWxlZCBzZW5kaW5nIHRvICcgLiAkb25lIC4gJy4gQ2hlY2sgTUFTX1NvY2lhbHMgc2V0dGluZ3MvdG9rZW4gY29uZmlndXJhdGlvbi4nKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRvbmUpOwogICAgICAgICAgICAgICAgJG1zZyA9IG5ldyBub3RpZmljYXRpb25fbWVzc2FnZTsKICAgICAgICAgICAgICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoICFzdGFydHN3aXRoKCRrZXksJG9uZSkgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICBpZiggJHZhbHVlID09ICcnICkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgJG5ld2tleSA9IHN1YnN0cigka2V5LHN0cmxlbigkb25lKSsxKTsKICAgICAgICAgICAgICAgICAgICBpZiggJG1zZy0+dmFsaWRfa2V5KCRuZXdrZXkpICkgJG1zZy0+JG5ld2tleSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIHRvZG86IG9wdGlvbiB0byBzaG9ydGVuIG1lc3NhZ2UgVVJMJ3MgICgkbXNnLT5zaG9ydGVuKQogICAgICAgICAgICAgICAgLy8gdG9kbzogb3B0aW9uIHRvIGFkanVzdCBsaW5rIHVybHMKICAgICAgICAgICAgICAgICRtb2QtPmJyb2FkY2FzdF9tZXNzYWdlKCRtc2csVFJVRSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2F0Y2goIFxUaHJvd2FibGUgJGUgKSB7CiAgICAgICAgICAgICAgICAvLyBpZiBhbiBlcnJvciBvY2N1cnMgc2VuZGluZyBvbmUgbWVzc2FnZSwgbGV0cyB0cnkgdG8gY29udGludWUgd2l0aCBvdGhlcnMKICAgICAgICAgICAgICAgICRlcnJvciA9ICRlLT5HZXRNZXNzYWdlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoICRlcnJvciApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxDbXNFeGNlcHRpb24oKHN0cmluZykgJGVycm9yKTsKICAgICAgICB9CgogICAgICAgIC8vIGl0IGFsbCB3b3JrZWQuCiAgICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3JldHVybnRvJ10pICkgewogICAgICAgICAgICAkdXJsID0gJHBhcmFtc1sncmV0dXJudG8nXTsKICAgICAgICAgICAgJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ19ibGFzdF9zdWNjZXNzJykpOwogICAgICAgICAgICByZWRpcmVjdCgkdXJsKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ19ibGFzdF9zdWNjZXNzJykpOwogICAgICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIFsnYWN0aXZlX3RhYicgPT4gJ3RhYi1ibGFzdCcsICdzYXZlZCcgPT4gMV0pOwogICAgfQp9CmNhdGNoKCBcVGhyb3dhYmxlICRlICkgewogICAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkZS0+R2V0TWVzc2FnZSgpKTsKfQoKLy8KLy8gYnVpbGQgdGhlIGRpc3BsYXkKLy8KJHNiX2NvbnRlbnQgPSBuZXcgc2JfY29udGVudDsKaWYoIGlzc2V0KCRwYXJhbXNbJ2RhdGEnXSkgKSB7CiAgICAkdG1wID0gdW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkcGFyYW1zWydkYXRhJ10pKTsKICAgIHVuc2V0KCRwYXJhbXNbJ2RhdGEnXSk7CiAgICAkcGFyYW1zID0gYXJyYXlfbWVyZ2UoJHBhcmFtcywkdG1wKTsKICAgIGlmKCBpc3NldCgkcGFyYW1zWydzYl9jb250ZW50J10pICYmICRwYXJhbXNbJ3NiX2NvbnRlbnQnXSBpbnN0YW5jZW9mIFxzYl9jb250ZW50ICkgewogICAgICAgICRzYl9jb250ZW50ID0gJHBhcmFtc1snc2JfY29udGVudCddOwogICAgfQogICAgZWxzZSBpZiggaXNzZXQoJHBhcmFtc1snbW9kdWxlJ10pICYmIGlzc2V0KCRwYXJhbXNbJ2tleSddKSApIHsKICAgICAgICAvLyBjYWxsIGJhY2sgdG8gdGhlIG1vZHVsZSBhbmQgZ2V0IHRoZSBkYXRhLi4uCiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtb2R1bGUnLCRwYXJhbXNbJ21vZHVsZSddKTsKICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRwYXJhbXNbJ21vZHVsZSddKTsKICAgICAgICBpZiggIWlzX29iamVjdCgkbW9kKSB8fCAhbWV0aG9kX2V4aXN0cygkbW9kLCdnZXRfYmxhc3Rlcl9jb250ZW50JykgKSB7CiAgICAgICAgICAgIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX21vZHVsZV9ub3Rjb21wYXRpYmxlJykpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHRtcCA9ICRtb2QtPmdldF9ibGFzdGVyX2NvbnRlbnQoJHBhcmFtc1sna2V5J10pOwogICAgICAgICAgICBpZiggIWlzX29iamVjdCgkdG1wKSApIHsKICAgICAgICAgICAgICAgIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX21vZHVsZV9ub21lc3NhZ2UnKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBjbGVhbiB1cCB0aGUgZGF0YS4KICAgICAgICAgICAgICAgICR0bXAtPnN1bW1hcnkgPSB0cmltKHN0cmlwX3RhZ3MoJHRtcC0+c3VtbWFyeSkpOwogICAgICAgICAgICAgICAgJHNiX2NvbnRlbnQgPSAkdG1wOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CmVsc2UgaWYoIGlzc2V0KCRwYXJhbXNbJ3VzZWRlbW9kYXRhJ10pICkgewogICAgJHNiX2NvbnRlbnQtPnRpdGxlID0gJ1Zpc2l0IG15IENNU01TIHBvd2VyZWQgd2Vic2l0ZSc7CiAgICAkc2JfY29udGVudC0+Y2Fub25pY2FsID0gJGNvbmZpZ1sncm9vdF91cmwnXTsKICAgICRzYl9jb250ZW50LT5zdW1tYXJ5ID0gJ1RoaXMgaXMgYSB0ZXN0JzsKfQoKaWYoIGlzc2V0KCRwYXJhbXNbJ21vZHVsZSddKSApICRwYXJtc1snbW9kdWxlJ10gPSAkcGFyYW1zWydtb2R1bGUnXTsKaWYoIGlzc2V0KCRwYXJhbXNbJ2tleSddKSApICRwYXJtc1sna2V5J10gPSAkcGFyYW1zWydrZXknXTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9kYXRhJywkc2JfY29udGVudCk7CiRzbWFydHktPmFzc2lnbignc291cmNlX2RhdGEnLCRzYl9jb250ZW50KTsKJHNtYXJ0eS0+YXNzaWduKCdzZW5kZXJfaW5mbycsJHNlbmRlckluZm8pOwokc21hcnR5LT5hc3NpZ24oJ3NlbmRlcnMnLCRzZW5kZXJzKTsKJHNtYXJ0eS0+YXNzaWduKCdkaXNjb3JkX21lc3NhZ2VfbW9kZScsICRyZXBvLT5nZXREaXNjb3JkTWVzc2FnZU1vZGUoKSk7CgovLyBwcmVwYXJlIHRoZSBkZWZhdWx0IG1lc3NhZ2UgdGVtcGxhdGVzLgokc2VuZGVyX21zZ3MgPSBhcnJheSgpOwpmb3JlYWNoKCAkc2VuZGVycyBhcyAkb25lID0+ICRuYW1lICkgewogICAgJHR4dCA9ICRzYl9jb250ZW50LT5zdW1tYXJ5OwogICAgaWYgKHN0cnBvcygoc3RyaW5nKSAkb25lLCAnbWFzXycpID09PSAwKSB7CiAgICAgICAgJHRwbE1hcCA9IFsKICAgICAgICAgICAgJ21hc19kaXNjb3JkJyA9PiBNQVNfU29jaWFsczo6UFJFRl9URU1QTEFURV9ESVNDT1JELAogICAgICAgICAgICAnbWFzX2ZhY2Vib29rJyA9PiBNQVNfU29jaWFsczo6UFJFRl9URU1QTEFURV9GQUNFQk9PSywKICAgICAgICAgICAgJ21hc190aWt0b2snID0+IE1BU19Tb2NpYWxzOjpQUkVGX1RFTVBMQVRFX1RJS1RPSywKICAgICAgICBdOwogICAgICAgICR0cGwgPSBpc3NldCgkdHBsTWFwWyRvbmVdKSA/ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCR0cGxNYXBbJG9uZV0sICcnKSA6ICcnOwogICAgICAgIGlmICgkdHBsKSB7CiAgICAgICAgICAgICRzbWFydHktPmFzc2lnbignY29udGVudCcsICRzYl9jb250ZW50KTsKICAgICAgICAgICAgJHR4dCA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkdHBsKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRvbmUpOwogICAgICAgIGlmICghaXNfb2JqZWN0KCRtb2QpKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21lZGlhJywkbW9kLT5nZXRfdHJhbnNwb3J0X25hbWUoKSk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtb2R1bGUnLCRvbmUpOwogICAgICAgICR0cGwgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbXNndHBsXycuJG9uZSk7CiAgICAgICAgaWYoICR0cGwgKSAkdHh0ID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKCR0cGwpOwogICAgfQogICAgLy8gZ2V0IHRoZSBzZW5kZXIgbW9kdWxlLgogICAgJHNlbmRlcl9tc2dzWyRvbmVdID0gJHR4dDsKfQokc21hcnR5LT5hc3NpZ24oJ3NlbmRlcl9tc2dzJywkc2VuZGVyX21zZ3MpOwoKJHNhdmVkX3NlbmRlcnMgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2F2ZWRfc2VuZGVycycpOwppZiggJHNhdmVkX3NlbmRlcnMgIT0gJycgKSB7CiAgICAkc2F2ZWRfc2VuZGVycyA9IGV4cGxvZGUoJywnLCRzYXZlZF9zZW5kZXJzKTsKfQplbHNlIHsKICAgICRzYXZlZF9zZW5kZXJzID0gYXJyYXlfa2V5cygkc2VuZGVycyk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdzYXZlZF9zZW5kZXJzJywkc2F2ZWRfc2VuZGVycyk7CgokcGFybXMgPSBhcnJheSgpOwppZiggaXNzZXQoJHBhcmFtc1sncmV0dXJudG8nXSkgKSAkcGFybXNbJ3JldHVybnRvJ10gPSBodG1sX2VudGl0eV9kZWNvZGUoJHBhcmFtc1sncmV0dXJudG8nXSk7CiRwYXJtc1snc2JfY29udGVudCddID0gYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJHNiX2NvbnRlbnQpKTsKJHNtYXJ0eS0+YXNzaWduKCdibGFzdF9mb3JtJywgaXNfYXJyYXkoJHBhcmFtcykgPyAkcGFyYW1zIDogW10pOwoKJGRpc2NvcmRGaWVsZFJvd3MgPSBbXTsKJGZpZWxkTmFtZXMgPSAkcGFyYW1zWydtYXNfZGlzY29yZF9lbWJlZF9maWVsZF9uYW1lJ10gPz8gW107CiRmaWVsZFZhbHVlcyA9ICRwYXJhbXNbJ21hc19kaXNjb3JkX2VtYmVkX2ZpZWxkX3ZhbHVlJ10gPz8gW107CiRmaWVsZElubGluZSA9ICRwYXJhbXNbJ21hc19kaXNjb3JkX2VtYmVkX2ZpZWxkX2lubGluZSddID8/IFtdOwppZiAoaXNfYXJyYXkoJGZpZWxkTmFtZXMpICYmIGlzX2FycmF5KCRmaWVsZFZhbHVlcykpIHsKICAgICRtYXhSb3dzID0gbWluKGNvdW50KCRmaWVsZE5hbWVzKSwgY291bnQoJGZpZWxkVmFsdWVzKSwgMjUpOwogICAgZm9yICgkaSA9IDA7ICRpIDwgJG1heFJvd3M7ICRpKyspIHsKICAgICAgICAkbiA9IHRyaW0oKHN0cmluZykoJGZpZWxkTmFtZXNbJGldID8/ICcnKSk7CiAgICAgICAgJHYgPSB0cmltKChzdHJpbmcpKCRmaWVsZFZhbHVlc1skaV0gPz8gJycpKTsKICAgICAgICAkZGlzY29yZEZpZWxkUm93c1tdID0gWwogICAgICAgICAgICAnbmFtZScgPT4gJG4sCiAgICAgICAgICAgICd2YWx1ZScgPT4gJHYsCiAgICAgICAgICAgICdpbmxpbmUnID0+ICFlbXB0eSgkZmllbGRJbmxpbmVbJGldKSwKICAgICAgICBdOwogICAgfQp9CiRzbWFydHktPmFzc2lnbignZGlzY29yZF9lbWJlZF9maWVsZF9yb3dzJywgJGRpc2NvcmRGaWVsZFJvd3MpOwoKJHNtYXJ0eS0+YXNzaWduKCdibGFzdF9oaWRkZW5fcmV0dXJudG8nLCBpc3NldCgkcGFybXNbJ3JldHVybnRvJ10pID8gKHN0cmluZykkcGFybXNbJ3JldHVybnRvJ10gOiAnJyk7CiRzbWFydHktPmFzc2lnbignYmxhc3RfaGlkZGVuX3NiX2NvbnRlbnQnLCAoc3RyaW5nKSRwYXJtc1snc2JfY29udGVudCddKTsKCiRmb3JtU3RhcnQgPSAnJzsKaWYgKG1ldGhvZF9leGlzdHMoJHRoaXMsICdDR0NyZWF0ZUZvcm1TdGFydCcpKSB7CiAgICAkZm9ybVN0YXJ0ID0gJHRoaXMtPkNHQ3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2JsYXN0JywgJHJldHVybmlkLCAkcGFybXMpOwp9IGVsc2UgewogICAgJGZvcm1TdGFydCA9ICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnYmxhc3QnLCAkcmV0dXJuaWQsICRwYXJtcyk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCAkZm9ybVN0YXJ0KTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYmxhc3QudHBsJyk7CiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KJGRhdGEgPSBhcnJheSgpOwokZGF0YVsnbW9kdWxlJ10gPSAnJzsKJGRhdGFbJ2tleSddID0gJyc7CiRkYXRhWydzdWJqZWN0J10gPSAnJzsKJGRhdGFbJ2JvZHknXSA9ICcnOwokZGF0YVsncGljdHVyZSddID0gJyc7CgokZGF0YVsndGl0bGUnXSA9ICcnOwokZGF0YVsndXJsb25seSddID0gMDsKJGRhdGFbJ2ljb24nXSA9ICdzb2NpYWxfc20uZ2lmJzsKCmZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsdWUgKSB7CiAgaWYoIGluX2FycmF5KCRrZXksYXJyYXlfa2V5cygkZGF0YSkpICkgJGRhdGFbJGtleV0gPSAkdmFsdWU7Cn0KCgokcGFybXMgPSAkZGF0YTsKdW5zZXQoJGRhdGFbJ3VybG9ubHknXSk7CnVuc2V0KCRkYXRhWydpY29uJ10pOwp1bnNldCgkZGF0YVsndGl0bGUnXSk7Cgokb3V0ID0gbnVsbDsKaWYoICRwYXJtc1sndXJsb25seSddICkgewogICR0bXAgPSBhcnJheSgnZGF0YSc9PmJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKCRkYXRhKSkpOwogICRvdXQgPSAkdGhpcy0+Y3JlYXRlX3VybCgkaWQsJ2JsYXN0JywkcmV0dXJuaWQsJHRtcCk7Cn0KZWxzZSB7CiAgJHRtcCA9IGFycmF5KCdkYXRhJz0+YmFzZTY0X2VuY29kZShzZXJpYWxpemUoJGRhdGEpKSk7CiAgJG91dCA9ICR0aGlzLT5DcmVhdGVJbWFnZUxpbmsoJGlkLCdibGFzdCcsJHJldHVybmlkLCRwYXJtc1sndGl0bGUnXSwkcGFybXNbJ2ljb24nXSwkdG1wKTsKfQoKZWNobyAkb3V0OwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIHsKICAgIGV4aXQ7Cn0KaWYgKCEkdGhpcy0+VmlzaWJsZVRvQWRtaW5Vc2VyKCkpIHsKICAgIHJldHVybjsKfQoKLy8gRW5zdXJlIGxvY2FsIGNsYXNzZXMgYXJlIGF2YWlsYWJsZSAoQ01TTVMgYXV0b2xvYWRlciBkb2VzIG5vdCBQU1ItNCBsb2FkIG1vZHVsZSBuYW1lc3BhY2VzKQpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL1NlcnZpY2VzL0NvbmZpZ1JlcG9zaXRvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL2xpYi9TdXBwb3J0L1BhcmFtLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9saWIvYWRtaW4vZGVmYXVsdGFkbWluX2FjdGlvbl9yZXNvbHZlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL2FkbWluL2RlZmF1bHRhZG1pbl9kZWJ1Zy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL2NsYXNzLnNiX2NvbnRlbnQucGhwJzsKCiRyZXBvID0gbmV3IFxNQVNfU29jaWFsc1xTZXJ2aWNlc1xDb25maWdSZXBvc2l0b3J5KCR0aGlzKTsKJFAgPSAnXE1BU19Tb2NpYWxzXFN1cHBvcnRcUGFyYW0nOwokY29uZmlnID0gY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7CiRzbWFydHktPmFzc2lnbignbW9kJywgJHRoaXMpOwoKLy8gTm9ybWFsaXplIENNU01TIGFjdGlvbi1wcmVmaXhlZCBwYXJhbXMgdG8gcGxhaW4ga2V5cyBmb3Igcm9idXN0IGhhbmRsaW5nLgppZiAoaXNzZXQoJGlkKSAmJiBpc19zdHJpbmcoJGlkKSAmJiAkaWQgIT09ICcnKSB7CiAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRrID0+ICR2KSB7CiAgICAgICAgaWYgKGlzX3N0cmluZygkaykgJiYgc3RycG9zKCRrLCAkaWQpID09PSAwKSB7CiAgICAgICAgICAgICRwbGFpbiA9IHN1YnN0cigkaywgc3RybGVuKCRpZCkpOwogICAgICAgICAgICBpZiAoJHBsYWluICE9PSAnJyAmJiAhYXJyYXlfa2V5X2V4aXN0cygkcGxhaW4sICRwYXJhbXMpKSB7CiAgICAgICAgICAgICAgICAkcGFyYW1zWyRwbGFpbl0gPSAkdjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQptYXNfc29jaWFsc19yZXNvbHZlX2FkbWluX2FjdGlvbigkcGFyYW1zLCAkUCk7CgokYWN0aXZlVGFiID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdhY3RpdmVfdGFiJywgJ3RhYi1ibGFzdCcpKTsKaWYgKCRhY3RpdmVUYWIgPT09ICcnKSB7CiAgICAkYWN0aXZlVGFiID0gJ3RhYi1ibGFzdCc7Cn0KJHNhdmVOb3RpY2UgPSAkUDo6Z2V0Qm9vbCgkcGFyYW1zLCAnc2F2ZWQnLCBmYWxzZSk7CgppZiAoaXNzZXQoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10pICYmIHN0cnRvdXBwZXIoKHN0cmluZykgJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10pID09PSAnUE9TVCcpIHsKICAgIG1hc19zb2NpYWxzX2FkbWluX2RlYnVnX2xvZygkdGhpcywgJHBhcmFtcywgKHN0cmluZykgJGlkKTsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9kZWJ1Z19wcm9iZSddKSkgewogICAgbWFzX3NvY2lhbHNfYWRtaW5fZGVidWdfbG9nKCR0aGlzLCAkcGFyYW1zLCAoc3RyaW5nKSAkaWQpOwogICAgJHRoaXMtPlNldE1lc3NhZ2UoJ0RlYnVnIHN1Ym1pdCBlbnRyeSB3cml0dGVuIHRvIEFkbWluIExvZy4nKTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIFsnYWN0aXZlX3RhYicgPT4gJ3RhYi1zZXR0aW5ncycsICdzYXZlZCcgPT4gMF0pOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0X2JsYXN0X25leHQnXSkpIHsKICAgIHRyeSB7CiAgICAgICAgJGJsYXN0Qm9keSA9IHRyaW0oJFA6OmdldFN0cmluZygkcGFyYW1zLCAnYm9keScpKTsKICAgICAgICBpZiAoJGJsYXN0Qm9keSA9PT0gJycpIHsKICAgICAgICAgICAgJHRoaXMtPlNldEVycm9yKCdCbGFzdCBtZXNzYWdlIGlzIHJlcXVpcmVkLicpOwogICAgICAgICAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBbJ2FjdGl2ZV90YWInID0+ICd0YWItYmxhc3QnXSk7CiAgICAgICAgfQogICAgICAgICRvYmogPSBuZXcgc2JfY29udGVudCgpOwogICAgICAgICRvYmotPnRpdGxlID0gJFA6OmdldFN0cmluZygkcGFyYW1zLCAnc3ViamVjdCcpOwogICAgICAgICRvYmotPnN1bW1hcnkgPSBzdHJpcF90YWdzKCRibGFzdEJvZHkpOwogICAgICAgICRvYmotPmNhbm9uaWNhbCA9ICRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ3VybCcpOwogICAgICAgICRwaWN0dXJlID0gJFA6OmdldFN0cmluZygkcGFyYW1zLCAncGljdHVyZScpOwogICAgICAgIGlmICgkcGljdHVyZSkgewogICAgICAgICAgICAkcGljdHVyZSA9ICRjb25maWdbJ3VwbG9hZHNfdXJsJ10gLiAnLycgLiAkcGljdHVyZTsKICAgICAgICAgICAgJG9iai0+YWRkX3BpY3R1cmUoJHBpY3R1cmUsIGJhc2VuYW1lKCRwaWN0dXJlKSk7CiAgICAgICAgfQogICAgICAgICRyZXR1cm50byA9ICR0aGlzLT5jcmVhdGVfdXJsKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCk7CiAgICAgICAgJGRhdGEgPSBbJ3NiX2NvbnRlbnQnID0+ICRvYmosICdyZXR1cm50bycgPT4gJHJldHVybnRvXTsKICAgICAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnYmxhc3QnLCAkcmV0dXJuaWQsIFsnZGF0YScgPT4gYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJGRhdGEpKV0pOwogICAgfSBjYXRjaCAoXFRocm93YWJsZSAkZSkgewogICAgICAgICR0aGlzLT5TZXRFcnJvcignQ291bGQgbm90IHByZXBhcmUgYmxhc3QgY29udGVudC4nKTsKICAgICAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBbJ2FjdGl2ZV90YWInID0+ICd0YWItYmxhc3QnXSk7CiAgICB9Cn0KCiRhZG1pblNlY3Rpb25zID0gWwogICAgJ2V4dGVuc2lvbnMnID0+ICR0aGlzLT5MYW5nKCdzZWN0aW9uX2V4dGVuc2lvbnMnKSwKICAgICdjb250ZW50JyA9PiAkdGhpcy0+TGFuZygnc2VjdGlvbl9jb250ZW50JyksCiAgICAnc2l0ZWFkbWluJyA9PiAkdGhpcy0+TGFuZygnc2VjdGlvbl9zaXRlYWRtaW4nKSwKICAgICd1c2Vyc2dyb3VwcycgPT4gJHRoaXMtPkxhbmcoJ3NlY3Rpb25fdXNlcnNncm91cHMnKSwKXTsKCmlmIChpc3NldCgkcGFyYW1zWydzdWJtaXRfZ2VuZXJhbCddKSkgewoJJHNlY3Rpb24gPSAkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdhZG1pbl9zZWN0aW9uJywgJ2NvbnRlbnQnKTsKICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygkc2VjdGlvbiwgJGFkbWluU2VjdGlvbnMpKSB7CgkJJHNlY3Rpb24gPSAnY29udGVudCc7CiAgICB9CgoJJGZyaWVuZGx5ID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdmcmllbmRseW5hbWUnKSk7CiAgICBpZiAoJGZyaWVuZGx5ID09PSAnJykgewogICAgICAgICRmcmllbmRseSA9ICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsKICAgIH0KCiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9BRE1JTl9TRUNUSU9OLCAkc2VjdGlvbik7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9GUklFTkRMWU5BTUUsICRmcmllbmRseSk7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9BVVRPX05FV1MsICRQOjpnZXRCb29sKCRwYXJhbXMsICdhdXRvX25ld3MnKSA/IDEgOiAwKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX0FVVE9fQ0dCTE9HLCAkUDo6Z2V0Qm9vbCgkcGFyYW1zLCAnYXV0b19jZ2Jsb2cnKSA/IDEgOiAwKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdoaWRlZG9uYXRpb25zdGFiJywgJFA6OmdldEJvb2woJHBhcmFtcywgJ3Nob3dfZG9uYXRpb25zX3RhYicsIHRydWUpID8gJycgOiAkdGhpcy0+R2V0VmVyc2lvbigpKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX1NIT1dfRE9OQVRJT05TLCAkUDo6Z2V0Qm9vbCgkcGFyYW1zLCAnc2hvd19kb25hdGlvbnNfdGFiJywgdHJ1ZSkgPyAxIDogMCk7CgogICAgJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ19wcmVmc19zYXZlZCcpKTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIFsnYWN0aXZlX3RhYicgPT4gJ3RhYi1zZXR0aW5ncycsICdzYXZlZCcgPT4gMV0pOwp9CgokdHdBdXRoVHBsRGVmYXVsdCA9IDw8PEVPVAp7KiBhdXRob3JpemF0aW9uIHRlbXBsYXRlICp9CjxkaXYgY2xhc3M9ImNndHdlZXRfYXV0aHtcJGF1dGhzdGVwfSI+CntpZiBpc3NldChcJGVycm9yKX0KICA8ZGl2IGNsYXNzPSJlcnJvciI+e1wkZXJyb3J9PC9kaXY+CntlbHNlaWYgaXNzZXQoXCRtZXNzYWdlKX0KICA8ZGl2IGNsYXNzPSJtZXNzYWdlIj57XCRzY3JlZW5fbmFtZX06IHtcJG1lc3NhZ2V9PC9kaXY+CnsvaWZ9Cgp7aWYgaXNzZXQoXCR1cmxfYXV0aG9yaXplKX0KICA8YSBocmVmPSJ7XCR1cmxfYXV0aG9yaXplfSI+Q29ubmVjdCBXaXRoIFR3aXR0ZXI8L2E+CnsvaWZ9CjwvZGl2PgpFT1Q7CgokdHdUaW1lbGluZVRwbERlZmF1bHQgPSA8PDxFT1QKeyogdGltZWxpbmUgdGVtcGxhdGUgKn0KPGRpdiBjbGFzcz0idHdpdHRlcl90aW1lbGluZSI+Cntmb3JlYWNoIGZyb209XCR0aW1lbGluZSBpdGVtPXR3ZWV0fQogIDxkaXYgY2xhc3M9InR3ZWV0IiBpZD0idHdlZXRfe1wkdHdlZXQtPmlkfSI+CiAgICA8cCBjbGFzcz0idHdlZXRfdGV4dCI+e1wkdHdlZXQtPmh0bWx8ZXNjYXBlOidodG1sJ308L3A+CiAgICA8cCBjbGFzcz0idHdlZXRfd2hlbiI+e1wkdHdlZXQtPmNyZWF0ZWRfYXR8Y21zX2RhdGVfZm9ybWF0fTwvcD4KICA8L2Rpdj4Key9mb3JlYWNofQo8L2Rpdj4KRU9UOwoKaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF90d2l0dGVyJ10pKSB7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9UV19TQ1JFRU5OQU1FLCB0cmltKCRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ3R3X3NjcmVlbm5hbWUnKSkpOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfVFdfQVVUSF9URU1QTEFURSwgJFA6OmdldFN0cmluZygkcGFyYW1zLCAndHdfYXV0aF90cGwnLCAkdHdBdXRoVHBsRGVmYXVsdCkpOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfVFdfVElNRUxJTkVfVEVNUExBVEUsICRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ3R3X3RpbWVsaW5lX3RwbCcsICR0d1RpbWVsaW5lVHBsRGVmYXVsdCkpOwoJCgkvLyBTYXZlIFR3aXR0ZXIgY29uZmlnIHRvIENNU01TIGRhdGFiYXNlIHNldHRpbmdzIChjb25maWcucGhwIHN0aWxsIGFsbG93ZWQgYXMgb3ZlcnJpZGUpCgkkdHdDb25maWcgPSBbXTsKCSRhcGlLZXkgPSB0cmltKCRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ3R3aXR0ZXJfYXBpX2tleScpKTsKCWlmICgkYXBpS2V5ICE9PSAnJyAmJiAkYXBpS2V5ICE9PSAnKioqKioqKionKSB7CgkJJHR3Q29uZmlnWydtYXNfc29jaWFsc190d2l0dGVyX2FwaV9rZXknXSA9ICRhcGlLZXk7Cgl9CgkkYXBpU2VjcmV0ID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICd0d2l0dGVyX2FwaV9zZWNyZXQnKSk7CglpZiAoJGFwaVNlY3JldCAhPT0gJycgJiYgJGFwaVNlY3JldCAhPT0gJyoqKioqKioqJykgewoJCSR0d0NvbmZpZ1snbWFzX3NvY2lhbHNfdHdpdHRlcl9hcGlfc2VjcmV0J10gPSAkYXBpU2VjcmV0OwoJfQoJJGJlYXJlclRva2VuID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICd0d2l0dGVyX2JlYXJlcl90b2tlbicpKTsKCWlmICgkYmVhcmVyVG9rZW4gIT09ICcnICYmICRiZWFyZXJUb2tlbiAhPT0gJyoqKioqKioqJykgewoJCSR0d0NvbmZpZ1snbWFzX3NvY2lhbHNfdHdpdHRlcl9iZWFyZXJfdG9rZW4nXSA9ICRiZWFyZXJUb2tlbjsKCX0KCSRhY2Nlc3NUb2tlbiA9IHRyaW0oJFA6OmdldFN0cmluZygkcGFyYW1zLCAndHdpdHRlcl9hY2Nlc3NfdG9rZW4nKSk7CglpZiAoJGFjY2Vzc1Rva2VuICE9PSAnJyAmJiAkYWNjZXNzVG9rZW4gIT09ICcqKioqKioqKicpIHsKCQkkdHdDb25maWdbJ21hc19zb2NpYWxzX3R3aXR0ZXJfYWNjZXNzX3Rva2VuJ10gPSAkYWNjZXNzVG9rZW47Cgl9CgkkYWNjZXNzU2VjcmV0ID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICd0d2l0dGVyX2FjY2Vzc19zZWNyZXQnKSk7CglpZiAoJGFjY2Vzc1NlY3JldCAhPT0gJycgJiYgJGFjY2Vzc1NlY3JldCAhPT0gJyoqKioqKioqJykgewoJCSR0d0NvbmZpZ1snbWFzX3NvY2lhbHNfdHdpdHRlcl9hY2Nlc3Nfc2VjcmV0J10gPSAkYWNjZXNzU2VjcmV0OwoJfQoJCglpZiAoIWVtcHR5KCR0d0NvbmZpZykpIHsKCQkkcmVzdWx0ID0gJHJlcG8tPndyaXRlQ29uZmlnTXVsdGlwbGUoJHR3Q29uZmlnKTsKCQlpZiAoISRyZXN1bHRbJ3N1Y2Nlc3MnXSAmJiAhZW1wdHkoJHJlc3VsdFsnZXJyb3JzJ10pKSB7CgkJCSR0aGlzLT5TZXRFcnJvcihpbXBsb2RlKCcsICcsICRyZXN1bHRbJ2Vycm9ycyddKSk7CgkJfQoJfQoJCgkkdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnbXNnX3ByZWZzX3NhdmVkJykpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgWydhY3RpdmVfdGFiJyA9PiAndGFiLXR3aXR0ZXInLCAnc2F2ZWQnID0+IDFdKTsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9kaXNjb3JkJ10pKSB7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9ESVNDT1JEX0VOQUJMRUQsICRQOjpnZXRCb29sKCRwYXJhbXMsICdlbmFibGVfZGlzY29yZCcpID8gMSA6IDApOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfVEVNUExBVEVfRElTQ09SRCwgJFA6OmdldFN0cmluZygkcGFyYW1zLCAndHBsX2Rpc2NvcmQnLCAneyRjb250ZW50LT50aXRsZX0geyRjb250ZW50LT5jYW5vbmljYWx9JykpOwoJCgkvLyBTYXZlIERpc2NvcmQgd2ViaG9vayB0byBDTVNNUyBkYXRhYmFzZSBzZXR0aW5ncyAoY29uZmlnLnBocCBzdGlsbCBhbGxvd2VkIGFzIG92ZXJyaWRlKQoJJHdlYmhvb2sgPSB0cmltKCRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ2Rpc2NvcmRfd2ViaG9vaycpKTsKCWlmICgkd2ViaG9vayAhPT0gJycgJiYgJHdlYmhvb2sgIT09ICcqKioqKioqKicpIHsKCQkkcmVzdWx0ID0gJHJlcG8tPndyaXRlQ29uZmlnKCdtYXNfc29jaWFsc19kaXNjb3JkX3dlYmhvb2snLCAkd2ViaG9vayk7CgkJaWYgKCEkcmVzdWx0WydzdWNjZXNzJ10pIHsKCQkJJHRoaXMtPlNldEVycm9yKCRyZXN1bHRbJ21lc3NhZ2UnXSk7CgkJfQoJfQoJJGRpc2NvcmRNb2RlID0gc3RydG9sb3dlcih0cmltKCRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ2Rpc2NvcmRfbWVzc2FnZV9tb2RlJywgJ2VtYmVkJykpKTsKCWlmICghaW5fYXJyYXkoJGRpc2NvcmRNb2RlLCBbJ25vcm1hbCcsICdlbWJlZCcsICdlbWJlZF9vbmx5J10sIHRydWUpKSB7CgkJJGRpc2NvcmRNb2RlID0gJ2VtYmVkJzsKCX0KCSRyZXBvLT53cml0ZUNvbmZpZygnbWFzX3NvY2lhbHNfZGlzY29yZF9tZXNzYWdlX21vZGUnLCAkZGlzY29yZE1vZGUpOwoJCgkkdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnbXNnX3ByZWZzX3NhdmVkJykpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgWydhY3RpdmVfdGFiJyA9PiAndGFiLWRpc2NvcmQnLCAnc2F2ZWQnID0+IDFdKTsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9mYWNlYm9vayddKSkgewoJJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfRkFDRUJPT0tfRU5BQkxFRCwgJFA6OmdldEJvb2woJHBhcmFtcywgJ2VuYWJsZV9mYWNlYm9vaycpID8gMSA6IDApOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfVEVNUExBVEVfRkFDRUJPT0ssICRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ3RwbF9mYWNlYm9vaycsICd7JGNvbnRlbnQtPnN1bW1hcnl9IHskY29udGVudC0+Y2Fub25pY2FsfScpKTsKCQoJLy8gU2F2ZSBGYWNlYm9vayBjb25maWcgdG8gQ01TTVMgZGF0YWJhc2Ugc2V0dGluZ3MgKGNvbmZpZy5waHAgc3RpbGwgYWxsb3dlZCBhcyBvdmVycmlkZSkKCSRmYkNvbmZpZyA9IFtdOwoJJGFwcElkID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdmYWNlYm9va19hcHBfaWQnKSk7CglpZiAoJGFwcElkICE9PSAnJyAmJiAkYXBwSWQgIT09ICcqKioqKioqKicpIHsKCQkkZmJDb25maWdbJ21hc19zb2NpYWxzX2ZhY2Vib29rX2FwcF9pZCddID0gJGFwcElkOwoJfQoJJGFwcFNlY3JldCA9IHRyaW0oJFA6OmdldFN0cmluZygkcGFyYW1zLCAnZmFjZWJvb2tfYXBwX3NlY3JldCcpKTsKCWlmICgkYXBwU2VjcmV0ICE9PSAnJyAmJiAkYXBwU2VjcmV0ICE9PSAnKioqKioqKionKSB7CgkJJGZiQ29uZmlnWydtYXNfc29jaWFsc19mYWNlYm9va19hcHBfc2VjcmV0J10gPSAkYXBwU2VjcmV0OwoJfQoJJGNsaWVudFRva2VuID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdmYWNlYm9va19jbGllbnRfdG9rZW4nKSk7CglpZiAoJGNsaWVudFRva2VuICE9PSAnJyAmJiAkY2xpZW50VG9rZW4gIT09ICcqKioqKioqKicpIHsKCQkkZmJDb25maWdbJ21hc19zb2NpYWxzX2ZhY2Vib29rX2NsaWVudF90b2tlbiddID0gJGNsaWVudFRva2VuOwoJfQoJJGFjY2Vzc1Rva2VuID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdmYWNlYm9va19hY2Nlc3NfdG9rZW4nKSk7CglpZiAoJGFjY2Vzc1Rva2VuICE9PSAnJyAmJiAkYWNjZXNzVG9rZW4gIT09ICcqKioqKioqKicpIHsKCQkkZmJDb25maWdbJ21hc19zb2NpYWxzX2ZhY2Vib29rX2FjY2Vzc190b2tlbiddID0gJGFjY2Vzc1Rva2VuOwoJfQoJJHN5c3RlbVVzZXJUb2tlbiA9IHRyaW0oJFA6OmdldFN0cmluZygkcGFyYW1zLCAnZmFjZWJvb2tfc3lzdGVtX3VzZXJfdG9rZW4nKSk7CglpZiAoJHN5c3RlbVVzZXJUb2tlbiAhPT0gJycgJiYgJHN5c3RlbVVzZXJUb2tlbiAhPT0gJyoqKioqKioqJykgewoJCSRmYkNvbmZpZ1snbWFzX3NvY2lhbHNfZmFjZWJvb2tfc3lzdGVtX3VzZXJfdG9rZW4nXSA9ICRzeXN0ZW1Vc2VyVG9rZW47Cgl9CgkkdG9rZW5Nb2RlID0gc3RydG9sb3dlcih0cmltKCRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ2ZhY2Vib29rX3Rva2VuX21vZGUnLCAnb2F1dGhfdXNlcl9wYWdlJykpKTsKCWlmICgkdG9rZW5Nb2RlICE9PSAnc3lzdGVtX3VzZXInKSB7CgkJJHRva2VuTW9kZSA9ICdvYXV0aF91c2VyX3BhZ2UnOwoJfQoJJGZiQ29uZmlnWydtYXNfc29jaWFsc19mYWNlYm9va190b2tlbl9tb2RlJ10gPSAkdG9rZW5Nb2RlOwoJJHBhZ2VJZCA9IHRyaW0oJFA6OmdldFN0cmluZygkcGFyYW1zLCAnZmFjZWJvb2tfcGFnZV9pZCcpKTsKCWlmICgkcGFnZUlkICE9PSAnJykgewoJCSRmYkNvbmZpZ1snbWFzX3NvY2lhbHNfZmFjZWJvb2tfZGVmYXVsdF9wYWdlX2lkJ10gPSAkcGFnZUlkOwoJfQoJJGFwaVZlcnNpb24gPSB0cmltKCRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ2ZhY2Vib29rX2FwaV92ZXJzaW9uJykpOwoJaWYgKCRhcGlWZXJzaW9uICE9PSAnJykgewoJCSRmYkNvbmZpZ1snbWFzX3NvY2lhbHNfZmFjZWJvb2tfYXBpX3ZlcnNpb24nXSA9ICRhcGlWZXJzaW9uOwoJfQoJJGRhdGFEZWxldGlvbkNhbGxiYWNrID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdmYWNlYm9va19kYXRhX2RlbGV0aW9uX2NhbGxiYWNrX3VybCcpKTsKCWlmICgkZGF0YURlbGV0aW9uQ2FsbGJhY2sgIT09ICcnKSB7CgkJJGZiQ29uZmlnWydtYXNfc29jaWFsc19mYWNlYm9va19kYXRhX2RlbGV0aW9uX2NhbGxiYWNrX3VybCddID0gJGRhdGFEZWxldGlvbkNhbGxiYWNrOwoJfQoJJGRhdGFEZWxldGlvblN0YXR1cyA9IHRyaW0oJFA6OmdldFN0cmluZygkcGFyYW1zLCAnZmFjZWJvb2tfZGF0YV9kZWxldGlvbl9zdGF0dXNfdXJsJykpOwoJaWYgKCRkYXRhRGVsZXRpb25TdGF0dXMgIT09ICcnKSB7CgkJJGZiQ29uZmlnWydtYXNfc29jaWFsc19mYWNlYm9va19kYXRhX2RlbGV0aW9uX3N0YXR1c191cmwnXSA9ICRkYXRhRGVsZXRpb25TdGF0dXM7Cgl9CgkkZGF0YURlbGV0aW9uU2VjcmV0ID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdmYWNlYm9va19kYXRhX2RlbGV0aW9uX3NlY3JldCcpKTsKCWlmICgkZGF0YURlbGV0aW9uU2VjcmV0ICE9PSAnJyAmJiAkZGF0YURlbGV0aW9uU2VjcmV0ICE9PSAnKioqKioqKionKSB7CgkJJGZiQ29uZmlnWydtYXNfc29jaWFsc19mYWNlYm9va19kYXRhX2RlbGV0aW9uX3NlY3JldCddID0gJGRhdGFEZWxldGlvblNlY3JldDsKCX0KCSRmYkNvbmZpZ1snbWFzX3NvY2lhbHNfZmFjZWJvb2tfb2F1dGhfZW5hYmxlZCddID0gJFA6OmdldEJvb2woJHBhcmFtcywgJ2ZhY2Vib29rX29hdXRoX2VuYWJsZWQnKSA/ICcxJyA6ICcwJzsKCSRvYXV0aFJlZGlyZWN0VXJpID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdmYWNlYm9va19vYXV0aF9yZWRpcmVjdF91cmknKSk7CglpZiAoJG9hdXRoUmVkaXJlY3RVcmkgIT09ICcnKSB7CgkJJGZiQ29uZmlnWydtYXNfc29jaWFsc19mYWNlYm9va19vYXV0aF9yZWRpcmVjdF91cmknXSA9ICRvYXV0aFJlZGlyZWN0VXJpOwoJfQoJCglpZiAoIWVtcHR5KCRmYkNvbmZpZykpIHsKCQkkcmVzdWx0ID0gJHJlcG8tPndyaXRlQ29uZmlnTXVsdGlwbGUoJGZiQ29uZmlnKTsKCQlpZiAoISRyZXN1bHRbJ3N1Y2Nlc3MnXSAmJiAhZW1wdHkoJHJlc3VsdFsnZXJyb3JzJ10pKSB7CgkJCSR0aGlzLT5TZXRFcnJvcihpbXBsb2RlKCcsICcsICRyZXN1bHRbJ2Vycm9ycyddKSk7CgkJfQoJfQoJCgkkdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnbXNnX3ByZWZzX3NhdmVkJykpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgWydhY3RpdmVfdGFiJyA9PiAndGFiLWZhY2Vib29rJywgJ3NhdmVkJyA9PiAxXSk7Cn0KCmlmIChpc3NldCgkcGFyYW1zWydzdWJtaXRfdGlrdG9rJ10pKSB7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9USUtUT0tfRU5BQkxFRCwgJFA6OmdldEJvb2woJHBhcmFtcywgJ2VuYWJsZV90aWt0b2snKSA/IDEgOiAwKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX1RFTVBMQVRFX1RJS1RPSywgJFA6OmdldFN0cmluZygkcGFyYW1zLCAndHBsX3Rpa3RvaycsICd7JGNvbnRlbnQtPnRpdGxlfScpKTsKCQoJLy8gU2F2ZSBUaWtUb2sgY29uZmlnIHRvIENNU01TIGRhdGFiYXNlIHNldHRpbmdzIChjb25maWcucGhwIHN0aWxsIGFsbG93ZWQgYXMgb3ZlcnJpZGUpCgkkdGlrdG9rQ29uZmlnID0gW107CgkkY2xpZW50S2V5ID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICd0aWt0b2tfY2xpZW50X2tleScpKTsKCWlmICgkY2xpZW50S2V5ICE9PSAnJyAmJiAkY2xpZW50S2V5ICE9PSAnKioqKioqKionKSB7CgkJJHRpa3Rva0NvbmZpZ1snbWFzX3NvY2lhbHNfdGlrdG9rX2NsaWVudF9rZXknXSA9ICRjbGllbnRLZXk7Cgl9CgkkY2xpZW50U2VjcmV0ID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICd0aWt0b2tfY2xpZW50X3NlY3JldCcpKTsKCWlmICgkY2xpZW50U2VjcmV0ICE9PSAnJyAmJiAkY2xpZW50U2VjcmV0ICE9PSAnKioqKioqKionKSB7CgkJJHRpa3Rva0NvbmZpZ1snbWFzX3NvY2lhbHNfdGlrdG9rX2NsaWVudF9zZWNyZXQnXSA9ICRjbGllbnRTZWNyZXQ7Cgl9CgkkYWNjZXNzVG9rZW4gPSB0cmltKCRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ3Rpa3Rva19hY2Nlc3NfdG9rZW4nKSk7CglpZiAoJGFjY2Vzc1Rva2VuICE9PSAnJyAmJiAkYWNjZXNzVG9rZW4gIT09ICcqKioqKioqKicpIHsKCQkkdGlrdG9rQ29uZmlnWydtYXNfc29jaWFsc190aWt0b2tfYWNjZXNzX3Rva2VuJ10gPSAkYWNjZXNzVG9rZW47Cgl9CgkkYnVzaW5lc3NBY2NvdW50SWQgPSB0cmltKCRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ3Rpa3Rva19idXNpbmVzc19hY2NvdW50X2lkJykpOwoJaWYgKCRidXNpbmVzc0FjY291bnRJZCAhPT0gJycpIHsKCQkkdGlrdG9rQ29uZmlnWydtYXNfc29jaWFsc190aWt0b2tfYnVzaW5lc3NfYWNjb3VudF9pZCddID0gJGJ1c2luZXNzQWNjb3VudElkOwoJfQoJJHVwbG9hZFJlZ2lvbiA9IHRyaW0oJFA6OmdldFN0cmluZygkcGFyYW1zLCAndGlrdG9rX3VwbG9hZF9yZWdpb24nKSk7CglpZiAoJHVwbG9hZFJlZ2lvbiAhPT0gJycpIHsKCQkkdGlrdG9rQ29uZmlnWydtYXNfc29jaWFsc190aWt0b2tfdXBsb2FkX3JlZ2lvbiddID0gJHVwbG9hZFJlZ2lvbjsKCX0KCSR2ZXJpZnlGaWxlTmFtZSA9IHRyaW0oJFA6OmdldFN0cmluZygkcGFyYW1zLCAndGlrdG9rX3ZlcmlmeV9maWxlX25hbWUnKSk7CgkkdmVyaWZ5RmlsZUNvbnRlbnQgPSB0cmltKCRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ3Rpa3Rva192ZXJpZnlfZmlsZV9jb250ZW50JykpOwoJaWYgKCR2ZXJpZnlGaWxlTmFtZSAhPT0gJycpIHsKCQkkdGlrdG9rQ29uZmlnWydtYXNfc29jaWFsc190aWt0b2tfdmVyaWZ5X2ZpbGVfbmFtZSddID0gJHZlcmlmeUZpbGVOYW1lOwoJfQoJaWYgKCR2ZXJpZnlGaWxlQ29udGVudCAhPT0gJycpIHsKCQkkdGlrdG9rQ29uZmlnWydtYXNfc29jaWFsc190aWt0b2tfdmVyaWZ5X2ZpbGVfY29udGVudCddID0gJHZlcmlmeUZpbGVDb250ZW50OwoJfQoJCglpZiAoIWVtcHR5KCR0aWt0b2tDb25maWcpKSB7CgkJJHJlc3VsdCA9ICRyZXBvLT53cml0ZUNvbmZpZ011bHRpcGxlKCR0aWt0b2tDb25maWcpOwoJCWlmICghJHJlc3VsdFsnc3VjY2VzcyddICYmICFlbXB0eSgkcmVzdWx0WydlcnJvcnMnXSkpIHsKCQkJJHRoaXMtPlNldEVycm9yKGltcGxvZGUoJywgJywgJHJlc3VsdFsnZXJyb3JzJ10pKTsKCQl9Cgl9CglpZiAoJHZlcmlmeUZpbGVOYW1lICE9PSAnJyAmJiAkdmVyaWZ5RmlsZUNvbnRlbnQgIT09ICcnKSB7CgkJJHJvb3RQYXRoID0gcnRyaW0oKHN0cmluZykgJGNvbmZpZ1sncm9vdF9wYXRoJ10sICcvJyk7CgkJJHNhZmVOYW1lID0gbHRyaW0oYmFzZW5hbWUoJHZlcmlmeUZpbGVOYW1lKSwgJy8nKTsKCQkkdGFyZ2V0UGF0aCA9ICRyb290UGF0aCAuICcvJyAuICRzYWZlTmFtZTsKCQlpZiAoQGZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRQYXRoLCAkdmVyaWZ5RmlsZUNvbnRlbnQsIExPQ0tfRVgpID09PSBmYWxzZSkgewoJCQkkdGhpcy0+U2V0RXJyb3IoJ0NvdWxkIG5vdCB3cml0ZSBUaWtUb2sgdmVyaWZpY2F0aW9uIGZpbGUgdG8gc2l0ZSByb290LicpOwoJCX0KCX0KCQoJJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ19wcmVmc19zYXZlZCcpKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIFsnYWN0aXZlX3RhYicgPT4gJ3RhYi10aWt0b2snLCAnc2F2ZWQnID0+IDFdKTsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9zaG9ydGVuZXInXSkpIHsKCSRwcm92aWRlciA9IHN0cnRvbG93ZXIodHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdzaG9ydGVuZXJfcHJvdmlkZXInKSkpOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19zb2NpYWxzX3Nob3J0ZW5lcicsICRwcm92aWRlcik7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX3NvY2lhbHNfeW91cmxzX2VuZHBvaW50JywgdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICd5b3VybHNfZW5kcG9pbnQnKSkpOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19zb2NpYWxzX3lvdXJsc19zaWduYXR1cmUnLCB0cmltKCRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ3lvdXJsc19zaWduYXR1cmUnKSkpOwoJJGJpdGx5VG9rZW4gPSB0cmltKCRQOjpnZXRTdHJpbmcoJHBhcmFtcywgJ2JpdGx5X3Rva2VuJykpOwoJLy8gS2VlcCBleGlzdGluZyBpZiB1c2VyIGxlZnQgdGhlIG1hc2tlZCBwbGFjZWhvbGRlcgoJaWYgKCRiaXRseVRva2VuICE9PSAnJyAmJiAkYml0bHlUb2tlbiAhPT0gJyoqKioqKioqJykgewoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfc29jaWFsc19iaXRseV90b2tlbicsICRiaXRseVRva2VuKTsKCX0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfc29jaWFsc19zaG9ydGVuZXJfY2FjaGUnLCAkUDo6Z2V0Qm9vbCgkcGFyYW1zLCAnc2hvcnRlbmVyX2NhY2hlJykgPyAxIDogMCk7CgkkdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnbXNnX3ByZWZzX3NhdmVkJykpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgWydhY3RpdmVfdGFiJyA9PiAndGFiLXNob3J0ZW5lcicsICdzYXZlZCcgPT4gMV0pOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0X3Nob3J0ZW5lcl90ZXN0J10pKSB7CglyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL1NlcnZpY2VzL1VybFNob3J0ZW5lci5waHAnOwoJJHNob3J0ZW5lciA9IG5ldyBcTUFTX1NvY2lhbHNcU2VydmljZXNcVXJsU2hvcnRlbmVyKCR0aGlzKTsKCSR0ZXN0VXJsID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdzaG9ydGVuZXJfdGVzdF91cmwnKSk7CgkkdGVzdFJlc3VsdCA9IG51bGw7CglpZiAoJHRlc3RVcmwgIT09ICcnKSB7CgkJJHRlc3RSZXN1bHQgPSAkc2hvcnRlbmVyLT5zaG9ydGVuKCR0ZXN0VXJsKTsKCX0KCSRzbWFydHktPmFzc2lnbignc2hvcnRlbmVyX3Rlc3RfdXJsJywgJHRlc3RVcmwpOwoJJHNtYXJ0eS0+YXNzaWduKCdzaG9ydGVuZXJfdGVzdF9yZXN1bHQnLCAkdGVzdFJlc3VsdCA/OiAnTm8gcmVzdWx0Jyk7Cn0KCmlmIChpc3NldCgkcGFyYW1zWydzdWJtaXRfc2hvcnRlbmVyX2NsZWFyJ10pKSB7CgkkZGIgPSBcQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+R2V0RGIoKTsKCSRjYWNoZVRhYmxlID0gY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tYXNfc29jaWFsc19zaG9ydGNhY2hlJzsKCSRkYi0+RXhlY3V0ZSgiVFJVTkNBVEUgVEFCTEUgJGNhY2hlVGFibGUiKTsKCSR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCdtc2dfcHJlZnNfc2F2ZWQnKSk7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBbJ2FjdGl2ZV90YWInID0+ICd0YWItc2hvcnRlbmVyJywgJ3NhdmVkJyA9PiAxXSk7Cn0KCmlmIChpc3NldCgkcGFyYW1zWydoaWRlZG9uYXRpb25zc3VibWl0J10pKSB7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnaGlkZWRvbmF0aW9uc3RhYicsICR0aGlzLT5HZXRWZXJzaW9uKCkpOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfU0hPV19ET05BVElPTlMsIDApOwoJJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ2RvbmF0aW9uc190YWJfaGlkZGVuJykpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgWydhY3RpdmVfdGFiJyA9PiAndGFiLWRvbmF0aW9ucyddKTsKfQoKLy8gUGVyc2lzdCBGYWNlYm9vayBmaWVsZHMgYmVmb3JlIGRpYWdub3N0aWNzL3Rlc3RzIHNvIG1vZGUgQS9CIGNhbiBiZSB2YWxpZGF0ZWQgaW1tZWRpYXRlbHkuCmlmICgKICAgIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF90ZXN0X2ZhY2Vib29rJ10pCiAgICB8fCBpc3NldCgkcGFyYW1zWydzdWJtaXRfZGlhZ19mYWNlYm9vayddKQogICAgfHwgaXNzZXQoJHBhcmFtc1snc3VibWl0X2Rpc2NvdmVyX2ZhY2Vib29rX3BhZ2VzJ10pCiAgICB8fCBpc3NldCgkcGFyYW1zWydzdWJtaXRfdmFsaWRhdGVfZmFjZWJvb2tfdGFyZ2V0J10pCiAgICB8fCBpc3NldCgkcGFyYW1zWydzdWJtaXRfbWV0YV9yZXZpZXdfZmFjZWJvb2tfY2FsbHMnXSkKKSB7CgkkZmJSdW50aW1lQ29uZmlnID0gW107CgkkcnVudGltZVRva2VuTW9kZSA9IHN0cnRvbG93ZXIodHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdmYWNlYm9va190b2tlbl9tb2RlJywgJycpKSk7CglpZiAoJHJ1bnRpbWVUb2tlbk1vZGUgPT09ICdzeXN0ZW1fdXNlcicgfHwgJHJ1bnRpbWVUb2tlbk1vZGUgPT09ICdvYXV0aF91c2VyX3BhZ2UnKSB7CgkJJGZiUnVudGltZUNvbmZpZ1snbWFzX3NvY2lhbHNfZmFjZWJvb2tfdG9rZW5fbW9kZSddID0gJHJ1bnRpbWVUb2tlbk1vZGU7Cgl9CgkkcnVudGltZUFjY2Vzc1Rva2VuID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdmYWNlYm9va19hY2Nlc3NfdG9rZW4nKSk7CglpZiAoJHJ1bnRpbWVBY2Nlc3NUb2tlbiAhPT0gJycgJiYgJHJ1bnRpbWVBY2Nlc3NUb2tlbiAhPT0gJyoqKioqKioqJykgewoJCSRmYlJ1bnRpbWVDb25maWdbJ21hc19zb2NpYWxzX2ZhY2Vib29rX2FjY2Vzc190b2tlbiddID0gJHJ1bnRpbWVBY2Nlc3NUb2tlbjsKCX0KCSRydW50aW1lU3lzdGVtVXNlclRva2VuID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdmYWNlYm9va19zeXN0ZW1fdXNlcl90b2tlbicpKTsKCWlmICgkcnVudGltZVN5c3RlbVVzZXJUb2tlbiAhPT0gJycgJiYgJHJ1bnRpbWVTeXN0ZW1Vc2VyVG9rZW4gIT09ICcqKioqKioqKicpIHsKCQkkZmJSdW50aW1lQ29uZmlnWydtYXNfc29jaWFsc19mYWNlYm9va19zeXN0ZW1fdXNlcl90b2tlbiddID0gJHJ1bnRpbWVTeXN0ZW1Vc2VyVG9rZW47Cgl9CgkkcnVudGltZVBhZ2VJZCA9IHRyaW0oJFA6OmdldFN0cmluZygkcGFyYW1zLCAnZmFjZWJvb2tfcGFnZV9pZCcpKTsKCWlmICgkcnVudGltZVBhZ2VJZCAhPT0gJycpIHsKCQkkZmJSdW50aW1lQ29uZmlnWydtYXNfc29jaWFsc19mYWNlYm9va19kZWZhdWx0X3BhZ2VfaWQnXSA9ICRydW50aW1lUGFnZUlkOwoJfQoJJHJ1bnRpbWVBcGlWZXJzaW9uID0gdHJpbSgkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdmYWNlYm9va19hcGlfdmVyc2lvbicpKTsKCWlmICgkcnVudGltZUFwaVZlcnNpb24gIT09ICcnKSB7CgkJJGZiUnVudGltZUNvbmZpZ1snbWFzX3NvY2lhbHNfZmFjZWJvb2tfYXBpX3ZlcnNpb24nXSA9ICRydW50aW1lQXBpVmVyc2lvbjsKCX0KCWlmICghZW1wdHkoJGZiUnVudGltZUNvbmZpZykpIHsKCQkkcmVwby0+d3JpdGVDb25maWdNdWx0aXBsZSgkZmJSdW50aW1lQ29uZmlnKTsKCX0KfQoKLy8gVGVzdCBoYW5kbGVycwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL1NlcnZpY2VzL0xvZ2dlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL1NlcnZpY2VzL0Rpc2NvcmROb3RpZmllci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL1NlcnZpY2VzL0ZhY2Vib29rUHVibGlzaGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9saWIvU2VydmljZXMvVHdpdHRlclB1Ymxpc2hlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL1NlcnZpY2VzL1Rpa1Rva1B1Ymxpc2hlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL1NlcnZpY2VzL1Rlc3RTZXJ2aWNlLnBocCc7CiR0ZXN0U2VydmljZSA9IG5ldyBcTUFTX1NvY2lhbHNcU2VydmljZXNcVGVzdFNlcnZpY2UoJHRoaXMsICRyZXBvKTsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL2xpYi9hZG1pbi9kZWZhdWx0YWRtaW5fdGVzdHMucGhwJzsKJGNnd2VicHVzaCA9IG1hc19zb2NpYWxzX2hhbmRsZV9hZG1pbl90ZXN0cygkdGhpcywgJHNtYXJ0eSwgJHBhcmFtcywgJGlkLCAkcmV0dXJuaWQsICRQLCAkdGVzdFNlcnZpY2UsICRhY3RpdmVUYWIpOwoKaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9kaXNjb3Zlcl9mYWNlYm9va19wYWdlcyddKSkgewogICAgJGRpc2NvdmVyID0gJHRlc3RTZXJ2aWNlLT5kaXNjb3ZlckZhY2Vib29rUGFnZXMoKTsKICAgICRzbWFydHktPmFzc2lnbignZGlzY292ZXJfcmVzdWx0X2ZhY2Vib29rJywgJGRpc2NvdmVyKTsKICAgIGlmICghZW1wdHkoJGRpc2NvdmVyWydzdWNjZXNzJ10pICYmICFlbXB0eSgkZGlzY292ZXJbJ3BhZ2VzJ10pICYmIGlzX2FycmF5KCRkaXNjb3ZlclsncGFnZXMnXSkpIHsKICAgICAgICAkZmJDdXJyZW50ID0gJHJlcG8tPmdldEZhY2Vib29rQ29uZmlnKCk7CiAgICAgICAgJHByZWZlcnJlZFBhZ2UgPSB0cmltKChzdHJpbmcpKCRmYkN1cnJlbnRbJ3BhZ2VfaWQnXSA/PyAnJykpOwogICAgICAgICRwcmVmZXJyZWRVcmwgPSB0cmltKChzdHJpbmcpKCRmYkN1cnJlbnRbJ3BhZ2VfdXJsJ10gPz8gJycpKTsKICAgICAgICAkcHJlZmVycmVkU2x1ZyA9ICcnOwogICAgICAgIGlmICgkcHJlZmVycmVkVXJsICE9PSAnJykgewogICAgICAgICAgICAkcHJlZmVycmVkU2x1ZyA9IHRyaW0oKHN0cmluZylwYXJzZV91cmwoJHByZWZlcnJlZFVybCwgUEhQX1VSTF9QQVRIKSwgJy8nKTsKICAgICAgICB9CgogICAgICAgICRzZWxlY3RlZCA9ICRkaXNjb3ZlclsncGFnZXMnXVswXTsKICAgICAgICBmb3JlYWNoICgkZGlzY292ZXJbJ3BhZ2VzJ10gYXMgJHBhZ2UpIHsKICAgICAgICAgICAgJHBpZCA9IHRyaW0oKHN0cmluZykoJHBhZ2VbJ2lkJ10gPz8gJycpKTsKICAgICAgICAgICAgJHBuYW1lID0gdHJpbSgoc3RyaW5nKSgkcGFnZVsnbmFtZSddID8/ICcnKSk7CiAgICAgICAgICAgIGlmICgkcHJlZmVycmVkUGFnZSAhPT0gJycgJiYgKCRwaWQgPT09ICRwcmVmZXJyZWRQYWdlIHx8IHN0cmNhc2VjbXAoJHBuYW1lLCAkcHJlZmVycmVkUGFnZSkgPT09IDApKSB7CiAgICAgICAgICAgICAgICAkc2VsZWN0ZWQgPSAkcGFnZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkcHJlZmVycmVkU2x1ZyAhPT0gJycgJiYgJHBuYW1lICE9PSAnJyAmJiBzdHJpcG9zKCRwbmFtZSwgJHByZWZlcnJlZFNsdWcpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJHNlbGVjdGVkID0gJHBhZ2U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHVwZGF0ZXMgPSBbXTsKICAgICAgICAkc2VsZWN0ZWRJZCA9IHRyaW0oKHN0cmluZykoJHNlbGVjdGVkWydpZCddID8/ICcnKSk7CiAgICAgICAgJHNlbGVjdGVkVG9rZW4gPSB0cmltKChzdHJpbmcpKCRzZWxlY3RlZFsnYWNjZXNzX3Rva2VuJ10gPz8gJycpKTsKICAgICAgICBpZiAoJHNlbGVjdGVkSWQgIT09ICcnKSB7CiAgICAgICAgICAgICR1cGRhdGVzWydtYXNfc29jaWFsc19mYWNlYm9va19kZWZhdWx0X3BhZ2VfaWQnXSA9ICRzZWxlY3RlZElkOwogICAgICAgIH0KICAgICAgICAvLyBJbiBPQXV0aCBtb2RlLCBkaXNjb3ZlcmVkIHBhZ2UgdG9rZW4gc2hvdWxkIGJlY29tZSBkZWZhdWx0IHBvc3QgdG9rZW4uCiAgICAgICAgaWYgKHN0cnRvbG93ZXIodHJpbSgoc3RyaW5nKSgkZmJDdXJyZW50Wyd0b2tlbl9tb2RlJ10gPz8gJ29hdXRoX3VzZXJfcGFnZScpKSkgIT09ICdzeXN0ZW1fdXNlcicgJiYgJHNlbGVjdGVkVG9rZW4gIT09ICcnKSB7CiAgICAgICAgICAgICR1cGRhdGVzWydtYXNfc29jaWFsc19mYWNlYm9va19hY2Nlc3NfdG9rZW4nXSA9ICRzZWxlY3RlZFRva2VuOwogICAgICAgIH0KICAgICAgICBpZiAoIWVtcHR5KCR1cGRhdGVzKSkgewogICAgICAgICAgICAkcmVwby0+d3JpdGVDb25maWdNdWx0aXBsZSgkdXBkYXRlcyk7CiAgICAgICAgfQogICAgICAgICRhY3RpdmVUYWIgPSAndGFiLWZhY2Vib29rJzsKICAgIH0KfQoKJG5ldHdvcmtTdGF0dXMgPSBbCiAgICAnZGlzY29yZCcgPT4gWwogICAgICAgICdlbmFibGVkJyA9PiAoYm9vbCkgJHRoaXMtPkdldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfRElTQ09SRF9FTkFCTEVELCAxKSwKICAgICAgICAnY29uZmlndXJlZCcgPT4gKGJvb2wpICRyZXBvLT5nZXREaXNjb3JkV2ViaG9vaygpLAogICAgICAgICdjb25maWdfa2V5JyA9PiAnbWFzX3NvY2lhbHNfZGlzY29yZF93ZWJob29rJywKICAgIF0sCiAgICAnZmFjZWJvb2snID0+IFsKICAgICAgICAnZW5hYmxlZCcgPT4gKGJvb2wpICR0aGlzLT5HZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX0ZBQ0VCT09LX0VOQUJMRUQsIDApLAogICAgICAgICdjb25maWd1cmVkJyA9PiAoYm9vbCkgKAogICAgICAgICAgICAoCiAgICAgICAgICAgICAgICBzdHJ0b2xvd2VyKChzdHJpbmcpKCRyZXBvLT5nZXRGYWNlYm9va0NvbmZpZygpWyd0b2tlbl9tb2RlJ10gPz8gJ29hdXRoX3VzZXJfcGFnZScpKSA9PT0gJ3N5c3RlbV91c2VyJwogICAgICAgICAgICAgICAgPyAoc3RyaW5nKSgkcmVwby0+Z2V0RmFjZWJvb2tDb25maWcoKVsnc3lzdGVtX3VzZXJfdG9rZW4nXSA/PyAnJykKICAgICAgICAgICAgICAgIDogKHN0cmluZykoJHJlcG8tPmdldEZhY2Vib29rQ29uZmlnKClbJ2FjY2Vzc190b2tlbiddID8/ICcnKQogICAgICAgICAgICApICE9PSAnJwogICAgICAgICksCiAgICAgICAgJ2NvbmZpZ19rZXknID0+ICdtYXNfc29jaWFsc19mYWNlYm9va19hY2Nlc3NfdG9rZW4nLAogICAgICAgICdhcGlfdmVyc2lvbicgPT4gJHJlcG8tPmdldEZhY2Vib29rQ29uZmlnKClbJ2FwaV92ZXJzaW9uJ10sCiAgICBdLAogICAgJ3R3aXR0ZXInID0+IFsKICAgICAgICAnZW5hYmxlZCcgPT4gKGJvb2wpICR0aGlzLT5HZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX1RXSVRURVJfRU5BQkxFRCwgMCksCiAgICAgICAgJ2NvbmZpZ3VyZWQnID0+IChib29sKSAkcmVwby0+Z2V0VHdpdHRlckNvbmZpZygpWydiZWFyZXJfdG9rZW4nXSwKICAgICAgICAnY29uZmlnX2tleScgPT4gJ21hc19zb2NpYWxzX3R3aXR0ZXJfYmVhcmVyX3Rva2VuJywKICAgIF0sCgkndGlrdG9rJyA9PiBbCgkJJ2VuYWJsZWQnID0+IChib29sKSAkdGhpcy0+R2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9USUtUT0tfRU5BQkxFRCwgMCksCgkJJ2NvbmZpZ3VyZWQnID0+IChib29sKSAkcmVwby0+Z2V0VGlrVG9rQ29uZmlnKClbJ2FjY2Vzc190b2tlbiddLAoJCSdjb25maWdfa2V5JyA9PiAnbWFzX3NvY2lhbHNfdGlrdG9rX2FjY2Vzc190b2tlbicsCiAgICBdLApdOwoKJHdlYnB1c2hJbmZvID0gbnVsbDsKaWYgKCRjZ3dlYnB1c2gpIHsKICAgICR3ZWJwdXNoSW5mbyA9IFsKICAgICAgICAndGl0bGUnID0+ICRjZ3dlYnB1c2gtPkdldFByZWZlcmVuY2UoJ3RpdGxlJyksCiAgICAgICAgJ2ljb24nID0+ICRjZ3dlYnB1c2gtPkdldFByZWZlcmVuY2UoJ2ljb24nKSwKICAgICAgICAncHVibGljX2tleScgPT4gc3Vic3RyKCRjZ3dlYnB1c2gtPkdldFByZWZlcmVuY2UoJ3ZhcGlkX3B1YmxpYycpLCAwLCAzMCksCiAgICBdOwp9CgokYnJpZGdlcyA9IFsKICAgICdjZ3dlYnB1c2gnID0+IFsKICAgICAgICAnYXZhaWxhYmxlJyA9PiAoYm9vbCkgJGNnd2VicHVzaCwKICAgICAgICAnZGF0YScgPT4gJHdlYnB1c2hJbmZvLAogICAgXSwKICAgICdjZ3R3ZWV0JyA9PiBbCiAgICAgICAgJ2F2YWlsYWJsZScgPT4gKGJvb2wpIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ0dUd2VldCcpLAogICAgXSwKICAgICdjZ3RpbnknID0+IFsKICAgICAgICAnYXZhaWxhYmxlJyA9PiAoYm9vbCkgY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDR1RpbnknKSwKICAgIF0sCiAgICAnY2dmYmFwcCcgPT4gWwogICAgICAgICdhdmFpbGFibGUnID0+IChib29sKSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0NHRkJBcHAnKSwKICAgIF0sCl07Cgokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5hc3NpZ24oJ2ZyaWVuZGx5bmFtZScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX0ZSSUVORExZTkFNRSkpOwokc21hcnR5LT5hc3NpZ24oJ2FkbWluX3NlY3Rpb25zJywgJGFkbWluU2VjdGlvbnMpOwokc21hcnR5LT5hc3NpZ24oJ2N1cnJlbnRfc2VjdGlvbicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX0FETUlOX1NFQ1RJT04sICdleHRlbnNpb25zJykpOwokc21hcnR5LT5hc3NpZ24oJ2F1dG9fbmV3cycsIChib29sKSAkdGhpcy0+R2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9BVVRPX05FV1MsIDEpKTsKJHNtYXJ0eS0+YXNzaWduKCdhdXRvX2NnYmxvZycsIChib29sKSAkdGhpcy0+R2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9BVVRPX0NHQkxPRywgMSkpOwokc21hcnR5LT5hc3NpZ24oJ25ldHdvcmtfc3RhdHVzJywgJG5ldHdvcmtTdGF0dXMpOwokc21hcnR5LT5hc3NpZ24oJ2FjdGl2ZV90YWInLCAkYWN0aXZlVGFiKTsKJHNtYXJ0eS0+YXNzaWduKCdzYXZlX25vdGljZScsICRzYXZlTm90aWNlKTsKJHNob3dEb25hdGlvbnMgPSAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2hpZGVkb25hdGlvbnN0YWInLCAnJykgIT09ICR0aGlzLT5HZXRWZXJzaW9uKCkpOwokc21hcnR5LT5hc3NpZ24oJ3Nob3dfZG9uYXRpb25zJywgKGJvb2wpICRzaG93RG9uYXRpb25zKTsKJHNtYXJ0eS0+YXNzaWduKCd0cGxfZGlzY29yZCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX1RFTVBMQVRFX0RJU0NPUkQsICd7JGNvbnRlbnQtPnRpdGxlfSB7JGNvbnRlbnQtPmNhbm9uaWNhbH0nKSk7CiRzbWFydHktPmFzc2lnbigndHBsX2ZhY2Vib29rJywgJHRoaXMtPkdldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfVEVNUExBVEVfRkFDRUJPT0ssICd7JGNvbnRlbnQtPnN1bW1hcnl9IHskY29udGVudC0+Y2Fub25pY2FsfScpKTsKJHNtYXJ0eS0+YXNzaWduKCd0cGxfdHdpdHRlcicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX1RFTVBMQVRFX1RXSVRURVIsICd7JGNvbnRlbnQtPnRpdGxlfSB7JGNvbnRlbnQtPmNhbm9uaWNhbH0nKSk7CiRzbWFydHktPmFzc2lnbigndHBsX3Rpa3RvaycsICR0aGlzLT5HZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX1RFTVBMQVRFX1RJS1RPSywgJ3skY29udGVudC0+dGl0bGV9JykpOwokc21hcnR5LT5hc3NpZ24oJ2JyaWRnZXMnLCAkYnJpZGdlcyk7CiRzbWFydHktPmFzc2lnbignYmxhc3Rtb2R1bGVzJywgW10pOwokc21hcnR5LT5hc3NpZ24oJ2hvc3Rtb2R1bGVzJywgW10pOwokc21hcnR5LT5hc3NpZ24oJ2NvbmZpZ19wYXRoJywgY21zX2pvaW5fcGF0aCgkY29uZmlnWydyb290X3BhdGgnXSwgJ2NvbmZpZy5waHAnKSk7Cgokc21hcnR5LT5hc3NpZ24oJ3R3X3NjcmVlbm5hbWUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9UV19TQ1JFRU5OQU1FKSk7CiRzbWFydHktPmFzc2lnbigndHdfYXV0aF90cGwnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9UV19BVVRIX1RFTVBMQVRFLCAkdHdBdXRoVHBsRGVmYXVsdCkpOwokc21hcnR5LT5hc3NpZ24oJ3R3X3RpbWVsaW5lX3RwbCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX1RXX1RJTUVMSU5FX1RFTVBMQVRFLCAkdHdUaW1lbGluZVRwbERlZmF1bHQpKTsKCiRzbWFydHktPmFzc2lnbignc2hvcnRlbmVyX3Byb3ZpZGVyJywgc3RydG9sb3dlcigoc3RyaW5nKSR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXNfc29jaWFsc19zaG9ydGVuZXInKSkpOwokc21hcnR5LT5hc3NpZ24oJ3lvdXJsc19lbmRwb2ludCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXNfc29jaWFsc195b3VybHNfZW5kcG9pbnQnKSk7CiRzbWFydHktPmFzc2lnbigneW91cmxzX3NpZ25hdHVyZScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXNfc29jaWFsc195b3VybHNfc2lnbmF0dXJlJykpOwokc21hcnR5LT5hc3NpZ24oJ2JpdGx5X3Rva2VuJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21hc19zb2NpYWxzX2JpdGx5X3Rva2VuJykgPyAnKioqKioqKionIDogJycpOwokc21hcnR5LT5hc3NpZ24oJ3Nob3J0ZW5lcl9jYWNoZScsIChib29sKSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWFzX3NvY2lhbHNfc2hvcnRlbmVyX2NhY2hlJywgMSkpOwokc21hcnR5LT5hc3NpZ24oJ3Nob3J0ZW5lcl90ZXN0X3VybCcsICRzbWFydHktPmdldF90ZW1wbGF0ZV92YXJzKCdzaG9ydGVuZXJfdGVzdF91cmwnKSk7CiRzbWFydHktPmFzc2lnbignc2hvcnRlbmVyX3Rlc3RfcmVzdWx0JywgJHNtYXJ0eS0+Z2V0X3RlbXBsYXRlX3ZhcnMoJ3Nob3J0ZW5lcl90ZXN0X3Jlc3VsdCcpKTsKCiRkYiA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXREYigpOwokY2FjaGVUYWJsZSA9IGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWFzX3NvY2lhbHNfc2hvcnRjYWNoZSc7CkAkZGItPkV4ZWN1dGUoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICRjYWNoZVRhYmxlICgKCWlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKCWxvbmdfdXJsIFZBUkNIQVIoMjA0OCkgTk9UIE5VTEwsCglzaG9ydF91cmwgVkFSQ0hBUig1MTIpIE5PVCBOVUxMLAoJY3JlYXRlZF9hdCBEQVRFVElNRSBOT1QgTlVMTAopIEVOR0lORT1Jbm5vREIiKTsKJHBhZ2UgPSBtYXgoMSwgKGludCkkUDo6Z2V0U3RyaW5nKCRwYXJhbXMsICdzaG9ydGVuZXJfcGFnZScsICcxJykpOwokcGVyUGFnZSA9IDI1Owokc3RhcnQgPSAoJHBhZ2UgLSAxKSAqICRwZXJQYWdlOwokdG90YWwgPSAoaW50KSRkYi0+R2V0T25lKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkY2FjaGVUYWJsZSIpOwokcm93cyA9ICRkYi0+R2V0QWxsKCJTRUxFQ1QgbG9uZ191cmwsIHNob3J0X3VybCwgY3JlYXRlZF9hdCBGUk9NICRjYWNoZVRhYmxlIE9SREVSIEJZIGlkIERFU0MgTElNSVQgJHN0YXJ0LCAkcGVyUGFnZSIpOwokcGFnZXMgPSAkdG90YWwgPiAwID8gKGludCljZWlsKCR0b3RhbCAvICRwZXJQYWdlKSA6IDE7CiRzbWFydHktPmFzc2lnbignc2hvcnRlbmVyX2NhY2hlX3Jvd3MnLCAkcm93cyA/OiBbXSk7CiRzbWFydHktPmFzc2lnbignc2hvcnRlbmVyX2NhY2hlX3RvdGFsJywgJHRvdGFsKTsKJHNtYXJ0eS0+YXNzaWduKCdzaG9ydGVuZXJfY2FjaGVfcGFnZScsICRwYWdlKTsKJHNtYXJ0eS0+YXNzaWduKCdzaG9ydGVuZXJfY2FjaGVfcGFnZXMnLCAkcGFnZXMpOwokc21hcnR5LT5hc3NpZ24oJ3Nob3J0ZW5lcl9jYWNoZV9wZXJwYWdlJywgJHBlclBhZ2UpOwoKJGZiID0gJHJlcG8tPmdldEZhY2Vib29rQ29uZmlnKCk7CiR0dyA9ICRyZXBvLT5nZXRUd2l0dGVyQ29uZmlnKCk7CiR0dCA9ICRyZXBvLT5nZXRUaWtUb2tDb25maWcoKTsKJGRpc2NvcmRXZWJob29rID0gJHJlcG8tPmdldERpc2NvcmRXZWJob29rKCk7CiRmYWNlYm9va0RlbGV0aW9uRGVmYXVsdFVybCA9IHJ0cmltKChzdHJpbmcpICRjb25maWdbJ3Jvb3RfdXJsJ10sICcvJykgLiAnL2ZhY2Vib29rLWRhdGEtZGVsZXRpb24nOwokZmFjZWJvb2tEZWxldGlvblN0YXR1c0RlZmF1bHRVcmwgPSBydHJpbSgoc3RyaW5nKSAkY29uZmlnWydyb290X3VybCddLCAnLycpIC4gJy9mYWNlYm9vay1kYXRhLWRlbGV0aW9uLXN0YXR1cz9jb2RlPXtjb25maXJtYXRpb25fY29kZX0nOwokZmFjZWJvb2tPYXV0aENhbGxiYWNrRGVmYXVsdFVybCA9IHJ0cmltKChzdHJpbmcpICRjb25maWdbJ3Jvb3RfdXJsJ10sICcvJykgLiAnL2ZhY2Vib29rLW9hdXRoLWNhbGxiYWNrLnBocCc7CiRmYWNlYm9va09hdXRoU3RhcnRVcmwgPSBydHJpbSgoc3RyaW5nKSAkY29uZmlnWydyb290X3VybCddLCAnLycpIC4gJy9mYWNlYm9vay1vYXV0aC1zdGFydC5waHAnOwoKLy8gQXNzaWduIGFjdHVhbCB2YWx1ZXMgZm9yIGVkaXRpbmcgKG5vdCBtYXNrZWQpCiRzbWFydHktPmFzc2lnbignZGlzY29yZF93ZWJob29rJywgJGRpc2NvcmRXZWJob29rID86ICcnKTsKJHNtYXJ0eS0+YXNzaWduKCdkaXNjb3JkX21lc3NhZ2VfbW9kZScsICRyZXBvLT5nZXREaXNjb3JkTWVzc2FnZU1vZGUoKSk7CiRzbWFydHktPmFzc2lnbignZmFjZWJvb2tfY29uZmlnJywgWwoJJ2FwcF9pZCcgPT4gJGZiWydhcHBfaWQnXSwKCSdhcHBfc2VjcmV0JyA9PiAkZmJbJ2FwcF9zZWNyZXQnXSwKCSdjbGllbnRfdG9rZW4nID0+ICRmYlsnY2xpZW50X3Rva2VuJ10sCgkndG9rZW5fbW9kZScgPT4gJGZiWyd0b2tlbl9tb2RlJ10gIT09ICcnID8gJGZiWyd0b2tlbl9tb2RlJ10gOiAnb2F1dGhfdXNlcl9wYWdlJywKCSdhY2Nlc3NfdG9rZW4nID0+ICRmYlsnYWNjZXNzX3Rva2VuJ10sCgknc3lzdGVtX3VzZXJfdG9rZW4nID0+ICRmYlsnc3lzdGVtX3VzZXJfdG9rZW4nXSwKCSdwYWdlX2lkJyA9PiAkZmJbJ3BhZ2VfaWQnXSwKCSdhcGlfdmVyc2lvbicgPT4gJGZiWydhcGlfdmVyc2lvbiddLAoJJ2RhdGFfZGVsZXRpb25fY2FsbGJhY2tfdXJsJyA9PiAkZmJbJ2RhdGFfZGVsZXRpb25fY2FsbGJhY2tfdXJsJ10gPzogJGZhY2Vib29rRGVsZXRpb25EZWZhdWx0VXJsLAoJJ2RhdGFfZGVsZXRpb25fc3RhdHVzX3VybCcgPT4gJGZiWydkYXRhX2RlbGV0aW9uX3N0YXR1c191cmwnXSA/OiAkZmFjZWJvb2tEZWxldGlvblN0YXR1c0RlZmF1bHRVcmwsCgknZGF0YV9kZWxldGlvbl9zZWNyZXQnID0+ICRmYlsnZGF0YV9kZWxldGlvbl9zZWNyZXQnXSwKCSdvYXV0aF9lbmFibGVkJyA9PiAkZmJbJ29hdXRoX2VuYWJsZWQnXSA9PT0gJzEnID8gJzEnIDogJzAnLAoJJ29hdXRoX3JlZGlyZWN0X3VyaScgPT4gJGZiWydvYXV0aF9yZWRpcmVjdF91cmknXSA/OiAkZmFjZWJvb2tPYXV0aENhbGxiYWNrRGVmYXVsdFVybCwKXSk7CiRzbWFydHktPmFzc2lnbignZmFjZWJvb2tfb2F1dGhfc3RhcnRfdXJsJywgJGZhY2Vib29rT2F1dGhTdGFydFVybCk7CiRzbWFydHktPmFzc2lnbigndHdpdHRlcl9jb25maWcnLCBbCgknYXBpX2tleScgPT4gJHR3WydhcGlfa2V5J10sCgknYXBpX3NlY3JldCcgPT4gJHR3WydhcGlfc2VjcmV0J10sCgknYmVhcmVyX3Rva2VuJyA9PiAkdHdbJ2JlYXJlcl90b2tlbiddLAoJJ2FjY2Vzc190b2tlbicgPT4gJHR3WydhY2Nlc3NfdG9rZW4nXSwKCSdhY2Nlc3Nfc2VjcmV0JyA9PiAkdHdbJ2FjY2Vzc19zZWNyZXQnXSwKXSk7CiRzbWFydHktPmFzc2lnbigndGlrdG9rX2NvbmZpZycsIFsKCSdjbGllbnRfa2V5JyA9PiAkdHRbJ2NsaWVudF9rZXknXSwKCSdjbGllbnRfc2VjcmV0JyA9PiAkdHRbJ2NsaWVudF9zZWNyZXQnXSwKCSdhY2Nlc3NfdG9rZW4nID0+ICR0dFsnYWNjZXNzX3Rva2VuJ10sCgknYnVzaW5lc3NfYWNjb3VudF9pZCcgPT4gJHR0WydidXNpbmVzc19hY2NvdW50X2lkJ10sCgkndXBsb2FkX3JlZ2lvbicgPT4gJHR0Wyd1cGxvYWRfcmVnaW9uJ10sCgkndmVyaWZ5X2ZpbGVfbmFtZScgPT4gJHR0Wyd2ZXJpZnlfZmlsZV9uYW1lJ10sCgkndmVyaWZ5X2ZpbGVfY29udGVudCcgPT4gJHR0Wyd2ZXJpZnlfZmlsZV9jb250ZW50J10sCl0pOwokc21hcnR5LT5hc3NpZ24oJ3ZhbHVlX3NvdXJjZXMnLCBbCgknZGlzY29yZF93ZWJob29rJyA9PiAkcmVwby0+Z2V0U291cmNlKCdtYXNfc29jaWFsc19kaXNjb3JkX3dlYmhvb2snLCAnJyksCgknZGlzY29yZF9tZXNzYWdlX21vZGUnID0+ICRyZXBvLT5nZXRTb3VyY2UoJ21hc19zb2NpYWxzX2Rpc2NvcmRfbWVzc2FnZV9tb2RlJywgJ2VtYmVkJyksCgknZmFjZWJvb2tfYXBwX2lkJyA9PiAkcmVwby0+Z2V0U291cmNlKCdtYXNfc29jaWFsc19mYWNlYm9va19hcHBfaWQnLCAnJyksCgknZmFjZWJvb2tfYWNjZXNzX3Rva2VuJyA9PiAkcmVwby0+Z2V0U291cmNlKCdtYXNfc29jaWFsc19mYWNlYm9va19hY2Nlc3NfdG9rZW4nLCAnJyksCgknZmFjZWJvb2tfc3lzdGVtX3VzZXJfdG9rZW4nID0+ICRyZXBvLT5nZXRTb3VyY2UoJ21hc19zb2NpYWxzX2ZhY2Vib29rX3N5c3RlbV91c2VyX3Rva2VuJywgJycpLAoJJ2ZhY2Vib29rX3Rva2VuX21vZGUnID0+ICRyZXBvLT5nZXRTb3VyY2UoJ21hc19zb2NpYWxzX2ZhY2Vib29rX3Rva2VuX21vZGUnLCAnb2F1dGhfdXNlcl9wYWdlJyksCgknZmFjZWJvb2tfYXBpX3ZlcnNpb24nID0+ICRyZXBvLT5nZXRTb3VyY2UoJ21hc19zb2NpYWxzX2ZhY2Vib29rX2FwaV92ZXJzaW9uJywgJ3YyNS4wJyksCgkndHdpdHRlcl9hcGlfa2V5JyA9PiAkcmVwby0+Z2V0U291cmNlKCdtYXNfc29jaWFsc190d2l0dGVyX2FwaV9rZXknLCAnJyksCgkndHdpdHRlcl9hY2Nlc3NfdG9rZW4nID0+ICRyZXBvLT5nZXRTb3VyY2UoJ21hc19zb2NpYWxzX3R3aXR0ZXJfYWNjZXNzX3Rva2VuJywgJycpLAoJJ3R3aXR0ZXJfYmVhcmVyX3Rva2VuJyA9PiAkcmVwby0+Z2V0U291cmNlKCdtYXNfc29jaWFsc190d2l0dGVyX2JlYXJlcl90b2tlbicsICcnKSwKCSd0aWt0b2tfY2xpZW50X2tleScgPT4gJHJlcG8tPmdldFNvdXJjZSgnbWFzX3NvY2lhbHNfdGlrdG9rX2NsaWVudF9rZXknLCAnJyksCgkndGlrdG9rX2FjY2Vzc190b2tlbicgPT4gJHJlcG8tPmdldFNvdXJjZSgnbWFzX3NvY2lhbHNfdGlrdG9rX2FjY2Vzc190b2tlbicsICcnKSwKXSk7CiR0aWt0b2tWZXJpZnlVcmwgPSAnJzsKaWYgKCR0dFsndmVyaWZ5X2ZpbGVfbmFtZSddICE9PSAnJykgewoJJHRpa3Rva1ZlcmlmeVVybCA9IHJ0cmltKChzdHJpbmcpICRjb25maWdbJ3Jvb3RfdXJsJ10sICcvJykgLiAnLycgLiBsdHJpbSgkdHRbJ3ZlcmlmeV9maWxlX25hbWUnXSwgJy8nKTsKfQokc21hcnR5LT5hc3NpZ24oJ3Rpa3Rva192ZXJpZnlfdXJsJywgJHRpa3Rva1ZlcmlmeVVybCk7CgovLyBBc3NpZ24gZG9uYXRpb25zLXJlbGF0ZWQgdmFyaWFibGVzCiRzbWFydHktPmFzc2lnbignZG9uYXRpb25zdGV4dCcsICR0aGlzLT5MYW5nKCdkb25hdGlvbnN0ZXh0JykpOwokc21hcnR5LT5hc3NpZ24oJ3Nwb25zb3JzJywgJHRoaXMtPkxhbmcoJ3Nwb25zb3JzJykpOwokc21hcnR5LT5hc3NpZ24oJ2hpZGVkb25hdGlvbnNzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnaGlkZWRvbmF0aW9uc3N1Ym1pdCcsICR0aGlzLT5MYW5nKCdoaWRlZG9uYXRpb25zc3VibWl0JykpKTsKJHNtYXJ0eS0+YXNzaWduKCdkZWJ1Z19wcm9iZV91cmwnLCAkdGhpcy0+Y3JlYXRlX3VybCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIFsKICAgICdzdWJtaXRfZGVidWdfcHJvYmUnID0+IDEsCiAgICAnYWN0aXZlX3RhYicgPT4gJ3RhYi1zZXR0aW5ncycsCl0pKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZGVmYXVsdGFkbWluLnRwbCcpOwo=]]></data>
	</file>
	<file>
	  <filename>/action.facebook_data_deletion.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEZhY2Vib29rIERhdGEgRGVsZXRpb24gQ2FsbGJhY2sgZW5kcG9pbnQgZm9yIE1BU19Tb2NpYWxzLgogKi8KaWYgKCFpc3NldCgkZ0NtcykpIHsKICAgIGV4aXQ7Cn0KCnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9saWIvU2VydmljZXMvQ29uZmlnUmVwb3NpdG9yeS5waHAnOwokcmVwbyA9IG5ldyBcTUFTX1NvY2lhbHNcU2VydmljZXNcQ29uZmlnUmVwb3NpdG9yeSgkdGhpcyk7CiRmYiA9ICRyZXBvLT5nZXRGYWNlYm9va0NvbmZpZygpOwoKJHNpZ25lZFJlcXVlc3QgPSBpc3NldCgkX1BPU1RbJ3NpZ25lZF9yZXF1ZXN0J10pID8gKHN0cmluZykgJF9QT1NUWydzaWduZWRfcmVxdWVzdCddIDogJyc7CmlmICgkc2lnbmVkUmVxdWVzdCA9PT0gJycpIHsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7CiAgICBodHRwX3Jlc3BvbnNlX2NvZGUoNDAwKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoWydlcnJvcicgPT4gJ21pc3Npbmcgc2lnbmVkX3JlcXVlc3QnXSwgSlNPTl9QUkVUVFlfUFJJTlQgfCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICByZXR1cm47Cn0KCiRwYXJ0cyA9IGV4cGxvZGUoJy4nLCAkc2lnbmVkUmVxdWVzdCwgMik7CmlmIChjb3VudCgkcGFydHMpICE9PSAyKSB7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpOwogICAgaHR0cF9yZXNwb25zZV9jb2RlKDQwMCk7CiAgICBlY2hvIGpzb25fZW5jb2RlKFsnZXJyb3InID0+ICdpbnZhbGlkIHNpZ25lZF9yZXF1ZXN0J10sIEpTT05fUFJFVFRZX1BSSU5UIHwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgcmV0dXJuOwp9CgokZW5jb2RlZFNpZyA9IHN0cnRyKCRwYXJ0c1swXSwgJy1fJywgJysvJyk7CiRwYXlsb2FkID0gc3RydHIoJHBhcnRzWzFdLCAnLV8nLCAnKy8nKTsKJGRlY29kZWQgPSBqc29uX2RlY29kZShiYXNlNjRfZGVjb2RlKCRwYXlsb2FkKSwgdHJ1ZSk7CmlmICghaXNfYXJyYXkoJGRlY29kZWQpKSB7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpOwogICAgaHR0cF9yZXNwb25zZV9jb2RlKDQwMCk7CiAgICBlY2hvIGpzb25fZW5jb2RlKFsnZXJyb3InID0+ICdpbnZhbGlkIHBheWxvYWQnXSwgSlNPTl9QUkVUVFlfUFJJTlQgfCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICByZXR1cm47Cn0KCiR2ZXJpZnlTZWNyZXQgPSAkZmJbJ2FwcF9zZWNyZXQnXSAhPT0gJycgPyAkZmJbJ2FwcF9zZWNyZXQnXSA6ICRmYlsnZGF0YV9kZWxldGlvbl9zZWNyZXQnXTsKaWYgKCR2ZXJpZnlTZWNyZXQgIT09ICcnKSB7CiAgICAkZXhwZWN0ZWQgPSBoYXNoX2htYWMoJ3NoYTI1NicsICRwYXJ0c1sxXSwgJHZlcmlmeVNlY3JldCwgdHJ1ZSk7CiAgICAkcmVjZWl2ZWQgPSBiYXNlNjRfZGVjb2RlKCRlbmNvZGVkU2lnKTsKICAgIGlmICghaGFzaF9lcXVhbHMoJGV4cGVjdGVkLCAoc3RyaW5nKSAkcmVjZWl2ZWQpKSB7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKICAgICAgICBodHRwX3Jlc3BvbnNlX2NvZGUoNDAzKTsKICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnZXJyb3InID0+ICdzaWduYXR1cmUgdmFsaWRhdGlvbiBmYWlsZWQnXSwgSlNPTl9QUkVUVFlfUFJJTlQgfCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICAgICAgcmV0dXJuOwogICAgfQp9CgokY29uZmlybWF0aW9uQ29kZSA9IGhhc2goJ3NoYTI1NicsICRzaWduZWRSZXF1ZXN0IC4gJ3wnIC4gbWljcm90aW1lKHRydWUpKTsKJHN0YXR1c1VybCA9ICRmYlsnZGF0YV9kZWxldGlvbl9zdGF0dXNfdXJsJ107CmlmICgkc3RhdHVzVXJsID09PSAnJykgewogICAgJHN0YXR1c1VybCA9ICR0aGlzLT5jcmVhdGVfdXJsKCRpZCwgJ2ZhY2Vib29rX2RhdGFfZGVsZXRpb25fc3RhdHVzJywgJHJldHVybmlkLCBbJ2NvZGUnID0+ICRjb25maXJtYXRpb25Db2RlXSwgdHJ1ZSwgZmFsc2UpOwp9CgpoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpOwplY2hvIGpzb25fZW5jb2RlKAogICAgWwogICAgICAgICd1cmwnID0+ICRzdGF0dXNVcmwsCiAgICAgICAgJ2NvbmZpcm1hdGlvbl9jb2RlJyA9PiAkY29uZmlybWF0aW9uQ29kZSwKICAgIF0sCiAgICBKU09OX1BSRVRUWV9QUklOVCB8IEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFCik7Cg==]]></data>
	</file>
	<file>
	  <filename>/action.facebook_data_deletion_status.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEZhY2Vib29rIERhdGEgRGVsZXRpb24gU3RhdHVzIGVuZHBvaW50IGZvciBNQVNfU29jaWFscy4KICovCmlmICghaXNzZXQoJGdDbXMpKSB7CiAgICBleGl0Owp9CgokY29kZSA9IGlzc2V0KCRwYXJhbXNbJ2NvZGUnXSkgPyB0cmltKChzdHJpbmcpICRwYXJhbXNbJ2NvZGUnXSkgOiAnJzsKaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKZWNobyBqc29uX2VuY29kZSgKICAgIFsKICAgICAgICAnc3RhdHVzJyA9PiAnY29tcGxldGVkJywKICAgICAgICAnY29kZScgPT4gJGNvZGUsCiAgICAgICAgJ21lc3NhZ2UnID0+ICdEZWxldGlvbiByZXF1ZXN0IGhhcyBiZWVuIGFja25vd2xlZGdlZCBieSBOZXdzIFRhcmdldGVkIENNUy4nLAogICAgXSwKICAgIEpTT05fUFJFVFRZX1BSSU5UIHwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUKKTsK]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgoJPGxpPlZlcnNpb24gMS4wLjEgKDE1LzA0LzIwMjYpCgkJPHVsPgoJCTxsaT5VcGRhdGVkIEFib3V0L0hlbHAgZG9jdW1lbnRhdGlvbiB3aXRoIGN1cnJlbnQgbW9kdWxlIGJlaGF2aW9yLjwvbGk+CgkJPGxpPkFkZGVkIGNsZWFyIG5vdGVzIGZvciBkYXRhYmFzZS1maXJzdCBzZXR0aW5ncyB3aXRoIG9wdGlvbmFsIGNvbmZpZy5waHAgb3ZlcnJpZGUuPC9saT4KCQk8bGk+VXBkYXRlZCB0cm91Ymxlc2hvb3RpbmcgZ3VpZGFuY2UgZm9yIEZhY2Vib29rLCBUd2l0dGVyIChYKSwgVGlrVG9rLCBhbmQgV2ViIFB1c2ggdGVzdHMuPC9saT4KCQk8bGk+RXhwYW5kZWQgQWJvdXQvSGVscCB3aXRoIGxhdGVzdCBGYWNlYm9vayBtb2RlIGd1aWRhbmNlLCBibGFzdCB3b3JrZmxvdyBub3RlcywgYW5kIERpc2NvcmQgZW1iZWQgYnVpbGRlciBkb2N1bWVudGF0aW9uLjwvbGk+CgkJPGxpPkRvY3VtZW50ZWQgRmFjZWJvb2sgZGlhZ25vc3RpY3MgYW5kIE1ldGEgcmV2aWV3IHRlc3QtY2FsbCB0b29saW5nIGluIGFkbWluLjwvbGk+CgkJPGxpPkRvY3VtZW50ZWQgRGlzY29yZCBtZXNzYWdlIG1vZGVzIGFuZCBkeW5hbWljIGVtYmVkIGZpZWxkIHN1cHBvcnQgaW4gYmxhc3Qgc3RlcCAyLjwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+VmVyc2lvbiAxLjEgKDE2LzExLzIwMjUpCgkJPHVsPgoJCTxsaT5DYW4gbm93IHNlbmQgYSBzb2NpYWwgYmxhc3QgZnJvbSB3aXRoaW4gdGhlIGFkbWluIHBhbmVsLjwvbGk+CgkJPGxpPkltcHJvdmVkIGJsYXN0IHdvcmtmbG93IGFuZCB0ZW1wbGF0aW5nLjwvbGk+CgkJPGxpPk5ldyBzbWFydHkgcGx1Z2luIGZvciBhZGRpbmcgcGFyYW1ldGVycyB0byBVUkxTIGJlZm9yZSBzaG9ydGVuaW5nLjwvbGk+CgkJPGxpPk5ldyBibGFzdCBwcm90b2NvbCBtZXRob2QuPC9saT4KCQk8bGk+Q2hhbmdlIHRvIGNhcGFiaWxpdHkgbmFtZS48L2xpPgoJCTwvdWw+Cgk8L2xpPgo8L3VsPgo=]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/function.donations.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIERvbmF0aW9ucyBGdW5jdGlvbiBmb3IgTUFTX1NvY2lhbHMKICoKICogQHBhY2thZ2UgTUFTX1NvY2lhbHMKICogQGF1dGhvciBtYXN0ZXIzMzk1CiAqIEBjb3B5cmlnaHQgMjAyNSBtYXN0ZXIzMzk1CiAqIEBsaWNlbnNlIEdQTC0zLjAtb3ItbGF0ZXIKICovCmlmICghaXNzZXQoJGdDbXMpKSB7CiAgICBleGl0Owp9CmlmICghJHRoaXMtPlZpc2libGVUb0FkbWluVXNlcigpKSB7CiAgICByZXR1cm47Cn0KCiRzbWFydHktPmFzc2lnbignbW9kdWxlJywgJHRoaXMpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5hc3NpZ24oJ2hpZGVzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnaGlkZWRvbmF0aW9uc3N1Ym1pdCcsICR0aGlzLT5MYW5nKCdoaWRlZG9uYXRpb25zc3VibWl0JykpKTsKJHNtYXJ0eS0+YXNzaWduKCdkb25hdGlvbnN0ZXh0JywgJHRoaXMtPkxhbmcoJ2RvbmF0aW9uc3RleHQnKSk7CiRzbWFydHktPmFzc2lnbignc3BvbnNvcnN0ZXh0JywgJHRoaXMtPkxhbmcoJ3Nwb25zb3JzJykpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdkb25hdGlvbnMudHBsJyk7Cgo=]]></data>
	</file>
	<file>
	  <filename>/help.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPkFib3V0IE1BU19Tb2NpYWxzPC9oMz4KPHA+PHN0cm9uZz5MYXN0IHVwZGF0ZWQ6PC9zdHJvbmc+IDE1LzA0LzIwMjY8L3A+CjxwPk1BU19Tb2NpYWxzIGlzIGEgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZSB0aGF0IGNlbnRyYWxpemVzIHNvY2lhbCBwdWJsaXNoaW5nIGZvciBOZXdzIGFuZCBDR0Jsb2cgY29udGVudC4gSXQgc3VwcG9ydHMgbWFudWFsIHBvc3RpbmcsIGF1dG9tYXRpYyBwb3N0aW5nIG9uIHB1Ymxpc2gvZWRpdCBldmVudHMsIGd1aWRlZCBkaWFnbm9zdGljcywgYW5kIHBsYXRmb3JtLXNwZWNpZmljIHRlc3QgYWN0aW9ucy48L3A+Cgo8aDM+TWFpbiBGZWF0dXJlczwvaDM+Cjx1bD4KICA8bGk+UHVibGlzaCB0byBtdWx0aXBsZSBzb2NpYWwgcGxhdGZvcm1zIGZyb20gb25lIG1vZHVsZS48L2xpPgogIDxsaT5BdXRvbWF0aWMgc2hhcmluZyBmb3IgTmV3cyBhbmQgQ0dCbG9nIHdoZW4gYXJ0aWNsZXMgYXJlIHB1Ymxpc2hlZCBvciBlZGl0ZWQuPC9saT4KICA8bGk+UGVyLXBsYXRmb3JtIHRlbXBsYXRlcyBmb3IgRGlzY29yZCwgRmFjZWJvb2ssIFR3aXR0ZXIgKFgpLCBhbmQgVGlrVG9rLjwvbGk+CiAgPGxpPkJ1aWx0LWluIHByb3ZpZGVyIHRlc3RzIHdpdGggY2xlYXIgc3VjY2Vzcy9lcnJvciBmZWVkYmFjay48L2xpPgogIDxsaT5GYWNlYm9vayBtb2RlIHN1cHBvcnQgZm9yIGJvdGggT0F1dGggdXNlci9wYWdlIHRva2VuIGFuZCBTeXN0ZW0gVXNlciB0b2tlbiBmbG93cy48L2xpPgogIDxsaT5GYWNlYm9vayB0b29sczogRGlzY292ZXIgTWFuYWdlZCBQYWdlcywgVmFsaWRhdGUgVG9rZW4gKyBQYWdlIElELCBhbmQgTWV0YSBSZXZpZXcgQVBJIFRlc3QgQ2FsbHMuPC9saT4KICA8bGk+V2ViIHB1c2ggaW50ZWdyYXRpb24gdGhyb3VnaCBDR1dlYlB1c2gsIGluY2x1ZGluZyBWQVBJRCBrZXkgcmVnZW5lcmF0aW9uLjwvbGk+CiAgPGxpPkZhY2Vib29rIGRhdGEgZGVsZXRpb24gY2FsbGJhY2sgYW5kIHN0YXR1cyBVUkwgc3VwcG9ydC48L2xpPgogIDxsaT5UaWtUb2sgdmVyaWZpY2F0aW9uIHN1cHBvcnQgZm9yIEROUyBhbmQgc2lnbmF0dXJlLWZpbGUgbWV0aG9kcy48L2xpPgogIDxsaT5CbGFzdCB3b3JrZmxvdyB3aXRoIGRlc3RpbmF0aW9uLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb24gdGhlIHNlY29uZCBzdGVwLjwvbGk+CiAgPGxpPkRpc2NvcmQgbWVzc2FnZSBmb3JtYXQgbW9kZXM6IG5vcm1hbCwgZW1iZWQgKyBtZXNzYWdlLCBlbWJlZCBvbmx5LjwvbGk+CiAgPGxpPkRpc2NvcmQgYmxhc3QgZW1iZWQgYnVpbGRlciB3aXRoIG9wdGlvbmFsIGZpZWxkcywgZHluYW1pYyBjdXN0b20gZW1iZWQgZmllbGRzICh1cCB0byBEaXNjb3JkIGxpbWl0KSwgYW5kIGxpdmUgcHJldmlldy48L2xpPgo8L3VsPgoKPGgzPkNvbmZpZ3VyYXRpb24gYW5kIFNlY3JldHM8L2gzPgo8dWw+CiAgPGxpPkJ5IGRlZmF1bHQsIE1BU19Tb2NpYWxzIHNhdmVzIHNldHRpbmdzIGluIENNU01TIGRhdGFiYXNlIHByZWZlcmVuY2VzLjwvbGk+CiAgPGxpPklmIG1hdGNoaW5nIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiA8Y29kZT5jb25maWcucGhwPC9jb2RlPiwgdGhvc2UgdmFsdWVzIGFyZSB0cmVhdGVkIGFzIG92ZXJyaWRlcy48L2xpPgogIDxsaT5UbyB1c2UgZGF0YWJhc2UgdmFsdWVzIG9ubHksIGtlZXAgTUFTX1NvY2lhbHMga2V5cyBlbXB0eSBvciB1bnNldCBpbiA8Y29kZT5jb25maWcucGhwPC9jb2RlPi48L2xpPgo8L3VsPgoKPGgzPlF1aWNrIFN0YXJ0PC9oMz4KPG9sPgogIDxsaT5PcGVuIDxlbT5FeHRlbnNpb25zIC0+IE1BU19Tb2NpYWxzPC9lbT4gaW4gdGhlIENNU01TIGFkbWluIHBhbmVsLjwvbGk+CiAgPGxpPkNvbmZpZ3VyZSBjcmVkZW50aWFscyBpbiBlYWNoIHBsYXRmb3JtIHRhYiBhbmQgc2F2ZS48L2xpPgogIDxsaT5FbmFibGUgdGhlIHBsYXRmb3JtIGFuZCBzYXZlIHNldHRpbmdzLjwvbGk+CiAgPGxpPlJ1biB0ZXN0IGFjdGlvbnMgaW4gZWFjaCB0YWIgdG8gdmFsaWRhdGUgY29ubmVjdGl2aXR5LjwvbGk+CiAgPGxpPkZvciBGYWNlYm9vaywgdXNlIDxlbT5EaXNjb3ZlciBNYW5hZ2VkIFBhZ2VzPC9lbT4gYmVmb3JlIHBvc3RpbmcgdGVzdHMgd2hlbiB1c2luZyBPQXV0aCBtb2RlLjwvbGk+CiAgPGxpPkVuYWJsZSBhdXRvbWF0aWMgcG9zdGluZyBpbiB0aGUgU2V0dGluZ3MgdGFiIGZvciBOZXdzIGFuZC9vciBDR0Jsb2cuPC9saT4KPC9vbD4KCjxoMz5GYWNlYm9vayBNb2RlczwvaDM+Cjx1bD4KICA8bGk+PHN0cm9uZz5PQXV0aCB1c2VyIC0+IFBhZ2UgdG9rZW46PC9zdHJvbmc+IHVzZSBGYWNlYm9vayBPQXV0aCwgdGhlbiBEaXNjb3ZlciBNYW5hZ2VkIFBhZ2VzIHRvIGJpbmQgdGhlIFBhZ2UgSUQvdG9rZW4gcGFpci48L2xpPgogIDxsaT48c3Ryb25nPlN5c3RlbSBVc2VyIHRva2VuOjwvc3Ryb25nPiB1c2UgYSBCdXNpbmVzcyBNYW5hZ2VyIHN5c3RlbSB1c2VyIHRva2VuIHdpdGggcGFnZSBhc3NldCBhc3NpZ25tZW50IGFuZCByZXF1aXJlZCBwZXJtaXNzaW9ucy48L2xpPgogIDxsaT5JZiBkaWFnbm9zdGljcyBzaG93IDxjb2RlPm1hbmFnZWRfcGFnZXM9MDwvY29kZT4sIHRoZSB0b2tlbiBjYW5ub3QgbWFuYWdlIGFueSBwYWdlcyBpbiA8Y29kZT4vbWUvYWNjb3VudHM8L2NvZGU+IGFuZCBwb3N0aW5nIGlzIGJsb2NrZWQgYnkgTWV0YS48L2xpPgo8L3VsPgoKPGgzPkJsYXN0IChTdGVwIDIpIE5vdGVzPC9oMz4KPHVsPgogIDxsaT5BZnRlciBjbGlja2luZyA8ZW0+TmV4dDwvZW0+LCBjaG9vc2Ugb25lIG9yIG1vcmUgZGVzdGluYXRpb25zIG9uIHRoZSBNYWluIHRhYiBiZWZvcmUgY2xpY2tpbmcgU3VibWl0LjwvbGk+CiAgPGxpPkRpc2NvcmQgYmxhc3QgdGFiIHN1cHBvcnRzIGVtYmVkIGluY2x1ZGUvZXhjbHVkZSB0b2dnbGVzIGFuZCBkeW5hbWljIGN1c3RvbSBmaWVsZHMgYWRkZWQgd2l0aCA8ZW0+KyBBZGQgZmllbGQ8L2VtPi48L2xpPgogIDxsaT5MaXZlIHByZXZpZXcgcmVmbGVjdHMgbWVzc2FnZSBtb2RlIGFuZCBlbWJlZCBzZWxlY3Rpb25zIGZvciBEaXNjb3JkIGJlZm9yZSBzdWJtaXNzaW9uLjwvbGk+CjwvdWw+Cgo8aDM+VGVtcGxhdGUgVmFyaWFibGVzPC9oMz4KPHA+VGhlIHBsYXRmb3JtIG1lc3NhZ2UgdGVtcGxhdGUgaXMgcGFyc2VkIHRocm91Z2ggU21hcnR5IGFuZCBjYW4gdXNlIHRoZXNlIHZhbHVlczo8L3A+Cjx1bD4KICA8bGk+PGNvZGU+eyRjb250ZW50LT50aXRsZX08L2NvZGU+IC0gQ29udGVudCB0aXRsZS48L2xpPgogIDxsaT48Y29kZT57JGNvbnRlbnQtPnN1bW1hcnl9PC9jb2RlPiAtIFN1bW1hcnkvYm9keSB0ZXh0LjwvbGk+CiAgPGxpPjxjb2RlPnskY29udGVudC0+Y2Fub25pY2FsfTwvY29kZT4gLSBDYW5vbmljYWwgVVJMLjwvbGk+CjwvdWw+Cgo8aDM+Q29tbW9uIFRyb3VibGVzaG9vdGluZzwvaDM+Cjx1bD4KICA8bGk+PHN0cm9uZz5GYWNlYm9vazo8L3N0cm9uZz4gaWYgPGNvZGU+bWFuYWdlZF9wYWdlcz0wPC9jb2RlPiwgcmUtcnVuIE9BdXRoIGFzIGEgcGFnZSBhZG1pbi9lZGl0b3IgYW5kIGdyYW50IHJlcXVpcmVkIHBlcm1pc3Npb25zIGJlZm9yZSBEaXNjb3ZlciBNYW5hZ2VkIFBhZ2VzLjwvbGk+CiAgPGxpPjxzdHJvbmc+RmFjZWJvb2sgQXBwIFJldmlldzo8L3N0cm9uZz4gcnVuIE1ldGEgcmV2aWV3IHRlc3QgY2FsbHMgZnJvbSB0aGUgRmFjZWJvb2sgdGFiIGFmdGVyIHRva2VuL3BhZ2UgY29uZmlndXJhdGlvbiBpcyB2YWxpZC48L2xpPgogIDxsaT48c3Ryb25nPlR3aXR0ZXIgKFgpOjwvc3Ryb25nPiB0aGUgYXBwIG11c3QgYmUgYXR0YWNoZWQgdG8gYSBQcm9qZWN0IHdpdGggYSB0aWVyIHRoYXQgYWxsb3dzIHBvc3RpbmcgdG8gPGNvZGU+LzIvdHdlZXRzPC9jb2RlPi48L2xpPgogIDxsaT48c3Ryb25nPlRpa1Rvazo8L3N0cm9uZz4gcG9zdGluZyByZXF1aXJlcyBib3RoIGFjY2VzcyB0b2tlbiBhbmQgYnVzaW5lc3MgYWNjb3VudCBJRC48L2xpPgogIDxsaT48c3Ryb25nPldlYiBQdXNoOjwvc3Ryb25nPiB2ZXJpZnkgYWN0aXZlIHN1YnNjcmlwdGlvbnMgYW5kIFZBUElEIGtleXMgaW4gQ0dXZWJQdXNoLjwvbGk+CiAgPGxpPjxzdHJvbmc+Qmxhc3Qgc3VibWl0Ojwvc3Ryb25nPiBlbnN1cmUgYXQgbGVhc3Qgb25lIGRlc3RpbmF0aW9uIGlzIHNlbGVjdGVkOyBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgcGVyIHNlbmRlciB3aXRoIHZhbGlkYXRpb24gZXJyb3JzLjwvbGk+CjwvdWw+Cgo8aDM+U3VwcG9ydDwvaDM+CjxwPkZvciBsb2NhbCBzdXBwb3J0IGluIHRoaXMgZW52aXJvbm1lbnQsIGNvbnRhY3Q6IDxhIGhyZWY9Im1haWx0bzppbmZvQG5ld3N0YXJnZXRlZC5jb20iPmluZm9AbmV3c3RhcmdldGVkLmNvbTwvYT4uPC9wPgoKPGgzPkxpY2Vuc2U8L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBkaXN0cmlidXRlZCB1bmRlciBHUEwtMy4wLW9yLWxhdGVyLiBTZWUgPGNvZGU+ZG9jL0NPUFlJTkc8L2NvZGU+IGZvciBmdWxsIGxpY2Vuc2UgdGV4dC48L3A+]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/social.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/social_sm.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/social_sm2.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0EKCgojQgokbGFuZ1snYmxhc3QnXSA9ICdCbGFzdCc7CiRsYW5nWydibGFzdF9hcnRpY2xlX2Zyb20nXSA9ICdTaGFyaW5nIGFuIGFydGljbGUgZnJvbSAlcyc7CgojQwokbGFuZ1snY2FuY2VsJ10gPSAnQ2FuY2VsJzsKJGxhbmdbJ2NoYXJhY3Rlcl9jb3VudCddID0gJ0NoYXJhY3RlcnMnOwokbGFuZ1snY29uZmlndXJhdGlvbiddID0gJ0NvbmZpZ3VyYXRpb24nOwoKI0QKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnRGVzY3JpcHRpb24nOwokbGFuZ1snZGVzdGluYXRpb25zJ10gPSAnRGVzdGluYXRpb25zJzsKJGxhbmdbJ2RldGVjdGVkX2hvc3Rtb2R1bGVzJ10gPSAnTW9kdWxlcyB0aGF0IGhhdmUgdGhlIGFiaWxpdHkgdG8gc2hhcmUnOwokbGFuZ1snZGV0ZWN0ZWRfYmxhc3Rtb2R1bGVzJ10gPSAnTW9kdWxlcyB0aGF0IGhhdmUgdGhlIGFiaWxpdHkgdG8gc2VuZCBpbmZvcm1hdGlvbiB0byBzb2NpYWwgbmV0d29ya3Mgb3IgdG8gY29udGFjdHMgZW4tbWFzcy4nOwoKI0UKJGxhbmdbJ2Vycm9yX21vZHVsZV9ub3Rjb21wYXRpYmxlJ10gPSAnVGhlICZxdW90O2JsYXN0JnF1b3Q7IGFjdGlvbiB3YXMgY2FsbGVkIHdpdGggYSBtb2R1bGUgYW5kIGtleSwgYnV0IHRoZSBtb2R1bGUgc3BlY2lmaWVkIGNhbm5vdCBiZSBmb3VuZCBvciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBhc3NvY2lhdGVkIGNhbGxiYWNrJzsKJGxhbmdbJ2Vycm9yX21vZHVsZV9ub21lc3NhZ2UnXSA9ICdUaGUgJnF1b3Q7Ymxhc3QmcXVvdDsgYWN0aW9uIHdhcyBjYWxsZWQgd2l0aCBhIG1vZHVsZSBhbmQga2V5LCBidXQgd2UgY291bGQgbm90IGdldCB0aGUgcmVxdWVzdGVkIGluZm8gZnJvbSB0aGUgY2FsbGJhY2snOwoKI0YKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ01BU19Tb2NpYWxzJzsKCiNHCgoKI0gKJGxhbmdbJ2hlbHAnXSA9ICdIZWxwJzsKCiNJCiRsYW5nWydpbmZvX2ZyaWVuZGx5bmFtZSddID0gJ1RoaXMgc3BlY2lmaWVzIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgaWRlbnRpZnkgdGhpcyBtb2R1bGUgaW4gdGhlIGFkbWluIG5hdmlnYXRpb24uICBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLiAgWW91IG1heSBoYXZlIHRvIGNsZWFyIHRoZSBDTVNNUyBjYWNoZSBhZnRlciBjaGFuZ2luZyB0aGlzIHZhbHVlLic7CiRsYW5nWydpbmZvX21lc3NhZ2Vib3hfc21hcnR5J10gPSAnVGhlIG1lc3NhZ2UgYm94IG9mIGVhY2ggc29jaWFsIG5ldHdvcmsgdGFiIGlzIHBhc3NlZCB0aHJvdWdoIHNtYXJ0eSBmb3IgcHJvY2Vzc2luZyBiZWZvcmUgc2VuZGluZy4gIEJlbG93IGlzIGEgbGlzdCBvZiBzb21lIG9mIHRoZSBhdmFpbGFibGUgc21hcnR5IHZhcmlhYmxlcy4nOwokbGFuZ1snaW5mb19tZXNzYWdlX3RlbXBsYXRlJ10gPSAnVGhpcyBmaWVsZCBjb250YWlucyBhIHNtYXJ0eSB0ZW1wbGF0ZSB1c2VkIHRvIGZvcm1hdCB0aGUgbWVzc2FnZSBmb3IgdGhpcyBzcGVjaWZpYyBwbGF0Zm9ybS4gIFdoZW4gc2VuZGluZyBhIHNvY2lhbCBibGFzdCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGZ1cnRoZXIgY3VzdG9taXplIHRoZSBvdXRwdXQgbWVzc2FnZSBwZXIgcGxhdGZvcm0nOwokbGFuZ1snaW5mb19uZXdwb3N0J10gPSAnQ3JlYXRlIGEgbmV3IHBvc3QuICBUaGlzIHBvc3QgY2FuIGJlIHNlbnQgdmlhIG11bHRpcGxlIHBsYXRmb3Jtcy4gIEVhY2ggc2VuZGVyIHBsYXRmb3JtIGhhcyBkaWZmZXJlbnQgY2FwYWJpbGl0aWVzLiAgSW4gdGhlIG5leHQgc2NyZWVuIHlvdSBjYW4gY3VzdG9taXplIHRoZSBzZXR0aW5ncyBmb3IgZWFjaCBwbGF0Zm9ybS4nOwokbGFuZ1snaW5mb19zZW5kZXJzJ10gPSAnU2VsZWN0IHdoaWNoIHNvY2lhbCBtZWRpYSBvdXRsZXRzIHRvIHNlbmQgdG8gZnJvbSB0aG9zZSBhdmFpbGFibGUuIDxzdHJvbmc+UmVtaW5kZXI6PC9zdHJvbmc+IFlvdSBtYXkgbmVlZCB0byBpbnN0YWxsIG1vcmUgc29jaWFsIG1lZGlhIG1vZHVsZXMuPGJyLz5Zb3UgY2FuIENUUkwrQ2xpY2sgb24gaXRlbXMgdG8gc2VsZWN0IG11bHRpcGxlIHNvY2lhbCBtZWRpYSBuZXR3b3Jrcy4nOwoKI0oKCgojSwoKCiNMCiRsYW5nWydsaW5rJ10gPSAnTGluayc7CiRsYW5nWydsaW5rX3RpdGxlJ10gPSAnTGluayBUaXRsZSc7CiRsYW5nWydsaW5rX2NhcHRpb24nXSA9ICdMaW5rIENhcHRpb24nOwokbGFuZ1snbGlua19kZXNjcmlwdGlvbiddID0gJ0xpbmsgRGVzY3JpcHRpb24nOwoKI00KJGxhbmdbJ21haW4nXSA9ICdNYWluJzsKJGxhbmdbJ21lc3NhZ2UnXSA9ICdNZXNzYWdlJzsKJGxhbmdbJ21lc3NhZ2VfdGVtcGxhdGUnXSA9ICdNZXNzYWdlIFRlbXBsYXRlJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnVW5pZmllZCBzb2NpYWwgc2hhcmluZyBmb3IgTmV3cyBhbmQgQ0dCbG9nIHdpdGggRGlzY29yZCwgRmFjZWJvb2ssIFR3aXR0ZXIvWCBhbmQgVGlrVG9rIHN1cHBvcnQnOwokbGFuZ1snbXNnX2JsYXN0X3N1Y2Nlc3MnXSA9ICdTb2NpYWwgbWVkaWEgYmxhc3Qgd2FzIHN1Y2Nlc3NmdWxsJzsKJGxhbmdbJ21zZ19jYW5jZWxsZWQnXSA9ICdPcGVyYXRpb24gQ2FuY2VsbGVkJzsKJGxhbmdbJ21zZ19wcmVmc19zYXZlZCddID0gJ1ByZWZlcmVuY2VzIFNhdmVkJzsKCiNOCiRsYW5nWyduZXh0J10gPSAnTmV4dCc7CiRsYW5nWydub25lJ10gPSAnTm9uZSc7CgojTwoKCiNQCiRsYW5nWydwaWN0dXJlJ10gPSAnUGljdHVyZSc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ01BU19Tb2NpYWxzIGhhcyBiZWVuIGluc3RhbGxlZC4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01BU19Tb2NpYWxzIGhhcyBiZWVuIHVuaW5zdGFsbGVkLic7CiRsYW5nWydwcm9tcHRfZnJpZW5kbHluYW1lJ10gPSAnTW9kdWxlIEZyaWVuZGx5IE5hbWUnOwoKI1EKCgojUgokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgdGhpcyBtb2R1bGU/JzsKCiNTCiRsYW5nWydzZW5kX21lc3NhZ2UnXSA9ICdTaGFyZSB0byBTb2NpYWwgTWVkaWEnOwokbGFuZ1snc3JjZGF0YV90aXRsZSddID0gJ1RoZSB0aXRsZSBvZiB0aGUgb3JpZ2luYWwgaXRlbSc7CiRsYW5nWydzcmNkYXRhX2Nhbm9uaWNhbCddID0gJ1RoZSBjYW5vbmljYWwgVVJMIHRvIHRoZSBvcmlnaW5hbCBpdGVtJzsKJGxhbmdbJ3NyY2RhdGFfY2Fub25pY2FsX3Nob3J0J10gPSAnVGhlIHNob3J0ZW5lZCBjYW5vbmljYWwgVVJMIHRvIHRoZSBvcmlnaW5hbCBpdGVtLiAgSWYgc2hvcnRlbmluZyBjb3VsZCBub3QgYmUgcGVyZm9ybWVkIHRoaXMgd2lsbCBjb250YWluIHRoZSBvcmlnaW5hbCBVUkwuJzsKJGxhbmdbJ3NyY2RhdGFfc3VtbWFyeSddID0gJ1RoZSBzdW1tYXJ5IG9mIHRoZSBhcnRpY2xlIChtYXkgYWxzbyBiZSB0aGUgZnVsbCBjb250ZW50IG9mIHRoZSBpdGVtLi4uIHRoZSBzZW5kaW5nIG1vZHVsZSBkZWNpZGVzIGhvdyB0byBmaWxsIHRoaXMgZmllbGQnOwokbGFuZ1snc3JjZGF0YV9waWN0dXJlcyddID0gJ0FuIGFycmF5IG9mIFVSTFMgcmVwcmVzZW50aW5nIHBpY3R1cmVzIGF0dGFjaGVkIHRvIHRoZSBvcmlnaW5hbCBpdGVtLiAgRm9yIHNvY2lhbCBuZXR3b3JrcyB0aGF0IHN1cHBvcnQgdGhlbSwgdGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcm9wZG93biBib3ggdG8gc2VsZWN0IG9uZSBpbWFnZSB0byBpbmNsdWRlIGluIHRoZSBwb3N0JzsKJGxhbmdbJ3NyY2RhdGFfbGlua3MnXSA9IDw8PEVPVApBbiBhcnJheSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgdmFyaW91cyBsaW5rcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIGl0ZW0gYmVpbmcgc2hhcmVkLiAgVGhlIGFycmF5IGNhbiBiZSBhY2Nlc3NlZCB3aXRoIGEgc21hcnR5IGZvcmVhY2ggc3RhdGVtZW50LiAgaS5lOjxici8+CjxwcmU+PGNvZGU+e2ZvcmVhY2ggXCRpbnB1dF9kYXRhIGFzIFwkbGlua30KJm5ic3A7Jm5ic3A7e1wkbGluay0+bmFtZX0gPSB7XCRsaW5rLT51cmx9L3tcJGxpbmstPmNhcHRpb259L3tcJGxpbmstPmRlc2NyaXB0aW9ufQp7L2ZvcmVhY2h9PC9wcmU+PC9jb2RlPgpFT1Q7CiRsYW5nWydzdWJqZWN0J10gPSAnU3ViamVjdCc7CiRsYW5nWydzdWJtaXQnXSA9ICdTdWJtaXQnOwoKI1QKJGxhbmdbJ3RhYl9zZXR0aW5ncyddID0gJ1NldHRpbmdzJzsKJGxhbmdbJ3RlbXBsYXRlX2ZvciddID0gJ1RlbXBsYXRlIGZvciAlcyc7CiRsYW5nWyd0ZXN0J10gPSAnQ3JlYXRlIGEgVGVzdCBCbGFzdCc7CiRsYW5nWyd0aXRsZSddID0gJ1RpdGxlJzsKJGxhbmdbJ3RpdGxlX3NoYXJlX3NvY2lhbCddID0gJ1NoYXJlIHRoaXMgYXJ0aWNsZSB0byBzb2NpYWwgbWVkaWEnOwokbGFuZ1sndGl0bGVfdGVzdCddID0gJ1NlbmQgYSB0ZXN0IG1lc3NhZ2UgdG8gc29jaWFsIG1lZGlhJzsKCiNVCgoKI1YKJGxhbmdbJ3ZhcmlhYmxlJ10gPSAnVmFyaWFibGUnOwovLyBBZG1pbiBzZWN0aW9uIGxhYmVscyB1c2VkIGluIHNldHRpbmdzIHNlbGVjdAokbGFuZ1snc2VjdGlvbl9leHRlbnNpb25zJ10gPSAnRXh0ZW5zaW9ucyc7CiRsYW5nWydzZWN0aW9uX2NvbnRlbnQnXSA9ICdDb250ZW50JzsKJGxhbmdbJ3NlY3Rpb25fc2l0ZWFkbWluJ10gPSAnU2l0ZSBBZG1pbic7CiRsYW5nWydzZWN0aW9uX3VzZXJzZ3JvdXBzJ10gPSAnVXNlcnMgJiBHcm91cHMnOwoKLy8gRG9uYXRpb25zCiRsYW5nWydkb25hdGlvbnN0YWInXSA9ICdEb25hdGlvbnMnOwokbGFuZ1snaGlkZWRvbmF0aW9uc3N1Ym1pdCddID0gJ0hpZGUgZG9uYXRpb25zIHRhYic7CiRsYW5nWydkb25hdGlvbnNfdGFiX2hpZGRlbiddID0gJ0RvbmF0aW9ucyB0YWIgaGFzIGJlZW4gaGlkZGVuLiBZb3UgY2FuIHNob3cgaXQgYWdhaW4gaW4gU2V0dGluZ3MuJzsKJGxhbmdbJ2RvbmF0aW9uc3RleHQnXSA9ICdBIGxvdCBvZiB0aW1lIGFuZCBlZmZvcnQgaGFzIGJlZW4gcHV0IGludG8gY3JlYXRpbmcgdGhpcyBtb2R1bGUuIFBsZWFzZSBjb25zaWRlciBhIHNtYWxsIGRvbmF0aW9uICg14oKsIGZvciBpbnN0YW5jZSwgb3Igd2hhdCB5b3UgY2FuIHNwYXJlKSB1c2luZyB0aGUgUGF5UGFsLWJ1dHRvbiBiZWxvdywgZXNwZWNpYWxseSBpZiB5b3UgdXNlIHRoaXMgbW9kdWxlIGluIGEgY29tbWVyY2lhbCBjb250ZXh0Ljxici8+PGJyLz5JZiB5b3UgZG9uYXRlIG1vcmUgdGhhbiAzMOKCrCB5b3UgY2FuIGhhdmUgYSBsaW5rIHRvIHlvdXIgY29tcGFueSBvbiB0aGlzIHBhZ2UsIGlmIHlvdSB3aXNoIHRvLiBTZW5kIG1lIGFuIGVtYWlsIGFib3V0IHdoYXQgeW91IHdvdWxkIGxpa2Ugc2hvd24gYW5kIEkgd2lsbCBwdXQgaXQgaW4gZm9yIHRoZSBuZXh0IHZlcnNpb24uPGJyLz48YnIvPlRoYW5rIHlvdSEnOwokbGFuZ1snc3BvbnNvcnMnXSA9ICdDdXJyZW50IHNwb25zb3JzLCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEnOwoKLy8gQ0dXZWJQdXNoCiRsYW5nWyd3ZWJwdXNoX3RpdGxlJ10gPSAnV2ViIFB1c2ggVGl0bGUnOwokbGFuZ1snd2VicHVzaF9pY29uJ10gPSAnV2ViIFB1c2ggSWNvbic7CiRsYW5nWyd3ZWJwdXNoX3ZhcGlkX2tleXMnXSA9ICdWQVBJRCBLZXlzJzsKJGxhbmdbJ3dlYnB1c2hfcmVnZW5lcmF0ZSddID0gJ1JlZ2VuZXJhdGUgVkFQSUQgS2V5cyc7CiRsYW5nWyd3ZWJwdXNoX3Rlc3QnXSA9ICdUZXN0IFdlYiBQdXNoJzsKCiNXCiRsYW5nWyd3YXJuaW5nX25vc2VuZGVycyddID0gJ05vIG1vZHVsZXMgd2VyZSBmb3VuZCB0aGF0IGNvdWxkIGFjdHVhbGx5IHNlbmQgdG8gc29jaWFsIG1lZGlhLiAgUGxlYXNlIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSBtb2R1bGVzIGxpa2UgQ0dUd2VldCBvciBvdGhlcnMuJzsKJGxhbmdbJ3dhcm5pbmdfbm9mZWVkZXJzJ10gPSAnTm8gbW9kdWxlcyB3ZXJlIGZvdW5kIHRoYXQgY291bGQgZmVlZCBpbmZvcm1hdGlvbiB0byB0aGlzIG1vZHVsZS4nOwoKI1gKCgojWQoKCiNaCgoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/admin/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/admin/defaultadmin_action_resolver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFJlc29sdmUgYWRtaW4gZm9ybSBhY3Rpb25zIGZvciBNQVNfU29jaWFscyBkZWZhdWx0YWRtaW4uCiAqLwoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ21hc19zb2NpYWxzX3Jlc29sdmVfYWRtaW5fYWN0aW9uJykpIHsKICAgIGZ1bmN0aW9uIG1hc19zb2NpYWxzX3Jlc29sdmVfYWRtaW5fYWN0aW9uKGFycmF5ICYkcGFyYW1zLCAkcGFyYW1DbGFzcyk6IHZvaWQKICAgIHsKICAgICAgICAkZm9ybUFjdGlvbiA9IHRyaW0oJHBhcmFtQ2xhc3M6OmdldFN0cmluZygkcGFyYW1zLCAnZm9ybV9hY3Rpb24nLCAnJykpOwogICAgICAgIGlmICgkZm9ybUFjdGlvbiAhPT0gJycgJiYgIWlzc2V0KCRwYXJhbXNbJGZvcm1BY3Rpb25dKSkgewogICAgICAgICAgICAkcGFyYW1zWyRmb3JtQWN0aW9uXSA9IDE7CiAgICAgICAgfQoKICAgICAgICAka25vd25BY3Rpb25zID0gWwogICAgICAgICAgICAnc3VibWl0X2dlbmVyYWwnLAogICAgICAgICAgICAnc3VibWl0X2Rpc2NvcmQnLAogICAgICAgICAgICAnc3VibWl0X3R3aXR0ZXInLAogICAgICAgICAgICAnc3VibWl0X2ZhY2Vib29rJywKICAgICAgICAgICAgJ3N1Ym1pdF90aWt0b2snLAogICAgICAgICAgICAnc3VibWl0X3Nob3J0ZW5lcicsCiAgICAgICAgICAgICdzdWJtaXRfc2hvcnRlbmVyX3Rlc3QnLAogICAgICAgICAgICAnc3VibWl0X3Nob3J0ZW5lcl9jbGVhcicsCiAgICAgICAgICAgICdzdWJtaXRfYmxhc3RfbmV4dCcsCiAgICAgICAgICAgICdzdWJtaXRfdGVzdF9kaXNjb3JkJywKICAgICAgICAgICAgJ3N1Ym1pdF90ZXN0X3R3aXR0ZXInLAogICAgICAgICAgICAnc3VibWl0X3Rlc3RfZmFjZWJvb2snLAogICAgICAgICAgICAnc3VibWl0X2RpYWdfZmFjZWJvb2snLAogICAgICAgICAgICAnc3VibWl0X2Rpc2NvdmVyX2ZhY2Vib29rX3BhZ2VzJywKICAgICAgICAgICAgJ3N1Ym1pdF92YWxpZGF0ZV9mYWNlYm9va190YXJnZXQnLAogICAgICAgICAgICAnc3VibWl0X21ldGFfcmV2aWV3X2ZhY2Vib29rX2NhbGxzJywKICAgICAgICAgICAgJ3N1Ym1pdF90ZXN0X3Rpa3RvaycsCiAgICAgICAgICAgICdzdWJtaXRfdGVzdF93ZWJwdXNoJywKICAgICAgICAgICAgJ3dlYnB1c2hfc2F2ZScsCiAgICAgICAgICAgICd3ZWJwdXNoX3JlZ2VuJywKICAgICAgICAgICAgJ3N1Ym1pdF9kZWJ1Z19wcm9iZScsCiAgICAgICAgXTsKCiAgICAgICAgZm9yZWFjaCAoJGtub3duQWN0aW9ucyBhcyAkYWN0aW9uS2V5KSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkcGFyYW1zWyRhY3Rpb25LZXldKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddKSB8fCBzdHJ0b3VwcGVyKChzdHJpbmcpICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddKSAhPT0gJ1BPU1QnKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRwb3N0ZWRUYWIgPSB0cmltKCRwYXJhbUNsYXNzOjpnZXRTdHJpbmcoJHBhcmFtcywgJ2FjdGl2ZV90YWInLCAndGFiLXNldHRpbmdzJykpOwogICAgICAgICR0YWJBY3Rpb25NYXAgPSBbCiAgICAgICAgICAgICd0YWItYmxhc3QnID0+ICdzdWJtaXRfYmxhc3RfbmV4dCcsCiAgICAgICAgICAgICd0YWItc2V0dGluZ3MnID0+ICdzdWJtaXRfZ2VuZXJhbCcsCiAgICAgICAgICAgICd0YWItZGlzY29yZCcgPT4gJ3N1Ym1pdF9kaXNjb3JkJywKICAgICAgICAgICAgJ3RhYi10d2l0dGVyJyA9PiAnc3VibWl0X3R3aXR0ZXInLAogICAgICAgICAgICAndGFiLWZhY2Vib29rJyA9PiAnc3VibWl0X2ZhY2Vib29rJywKICAgICAgICAgICAgJ3RhYi10aWt0b2snID0+ICdzdWJtaXRfdGlrdG9rJywKICAgICAgICAgICAgJ3RhYi1zaG9ydGVuZXInID0+ICdzdWJtaXRfc2hvcnRlbmVyJywKICAgICAgICAgICAgJ3RhYi13ZWJwdXNoJyA9PiAnd2VicHVzaF9zYXZlJywKICAgICAgICBdOwogICAgICAgIGlmIChpc3NldCgkdGFiQWN0aW9uTWFwWyRwb3N0ZWRUYWJdKSkgewogICAgICAgICAgICAkcGFyYW1zWyR0YWJBY3Rpb25NYXBbJHBvc3RlZFRhYl1dID0gMTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/admin/defaultadmin_debug.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIERlYnVnIGhlbHBlcnMgZm9yIE1BU19Tb2NpYWxzIGFkbWluIGZvcm0gc3VibWlzc2lvbnMuCiAqLwoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ21hc19zb2NpYWxzX2FkbWluX2RlYnVnX2xvZycpKSB7CiAgICBmdW5jdGlvbiBtYXNfc29jaWFsc19hZG1pbl9kZWJ1Z19sb2coJG1vZHVsZSwgYXJyYXkgJHBhcmFtcywgc3RyaW5nICRpZCk6IHZvaWQKICAgIHsKICAgICAgICAkcmF3S2V5cyA9IGFycmF5X2tleXMoJF9QT1NUID8/IFtdKTsKICAgICAgICAkbm9ybWFsaXplZEtleXMgPSBhcnJheV9rZXlzKCRwYXJhbXMpOwogICAgICAgICRyYXdLZXlzU3RyID0gaW1wbG9kZSgnLCcsIGFycmF5X3NsaWNlKGFycmF5X21hcCgnc3RydmFsJywgJHJhd0tleXMpLCAwLCA0MCkpOwogICAgICAgICRub3JtS2V5c1N0ciA9IGltcGxvZGUoJywnLCBhcnJheV9zbGljZShhcnJheV9tYXAoJ3N0cnZhbCcsICRub3JtYWxpemVkS2V5cyksIDAsIDQwKSk7CiAgICAgICAgJGFjdGl2ZVRhYiA9IGlzc2V0KCRwYXJhbXNbJ2FjdGl2ZV90YWInXSkgPyAoc3RyaW5nKSAkcGFyYW1zWydhY3RpdmVfdGFiJ10gOiAnJzsKICAgICAgICAkZm9ybUFjdGlvbiA9IGlzc2V0KCRwYXJhbXNbJ2Zvcm1fYWN0aW9uJ10pID8gKHN0cmluZykgJHBhcmFtc1snZm9ybV9hY3Rpb24nXSA6ICcnOwogICAgICAgICRyZXF1ZXN0TWV0aG9kID0gaXNzZXQoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10pID8gKHN0cmluZykgJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gOiAnJzsKCiAgICAgICAgJG1lc3NhZ2UgPSBzcHJpbnRmKAogICAgICAgICAgICAnREVCVUcgc3VibWl0IHByb2JlIHwgbWV0aG9kPSVzIHwgYWN0aXZlX3RhYj0lcyB8IGZvcm1fYWN0aW9uPSVzIHwgaWQ9JXMgfCByYXdfcG9zdF9rZXlzPSVzIHwgbm9ybWFsaXplZF9rZXlzPSVzJywKICAgICAgICAgICAgJHJlcXVlc3RNZXRob2QsCiAgICAgICAgICAgICRhY3RpdmVUYWIsCiAgICAgICAgICAgICRmb3JtQWN0aW9uLAogICAgICAgICAgICAkaWQsCiAgICAgICAgICAgICRyYXdLZXlzU3RyLAogICAgICAgICAgICAkbm9ybUtleXNTdHIKICAgICAgICApOwoKICAgICAgICAvLyBUcnkgbm9ybWFsIENNU01TIGF1ZGl0IGZpcnN0LgogICAgICAgIEBhdWRpdCgnJywgJ01BU19Tb2NpYWxzJywgJG1lc3NhZ2UpOwoKICAgICAgICAvLyBXcml0ZSBkaXJlY3RseSB0byBhZG1pbmxvZyB0YWJsZSB0byBndWFyYW50ZWUgdmlzaWJpbGl0eSBpbiBBZG1pbiBMb2cgVUkuCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJGRiID0gXENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldERiKCk7CiAgICAgICAgICAgIGlmICghJGRiKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRhYmxlID0gY21zX2RiX3ByZWZpeCgpIC4gJ2FkbWlubG9nJzsKICAgICAgICAgICAgJHVpZCA9IDA7CiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2dldF91c2VyaWQnKSkgewogICAgICAgICAgICAgICAgJHVpZCA9IChpbnQpIGdldF91c2VyaWQoZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR1c2VybmFtZSA9ICcnOwogICAgICAgICAgICBpZiAoJHVpZCA+IDApIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgJHVzZXJPcHMgPSBcVXNlck9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICAgICAgICAgICAgIGlmICgkdXNlck9wcykgewogICAgICAgICAgICAgICAgICAgICAgICAkdXNlciA9ICR1c2VyT3BzLT5Mb2FkVXNlckJ5SWQoJHVpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19vYmplY3QoJHVzZXIpICYmIHByb3BlcnR5X2V4aXN0cygkdXNlciwgJ3VzZXJuYW1lJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1c2VybmFtZSA9IChzdHJpbmcpICR1c2VyLT51c2VybmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICAgICAkdXNlcm5hbWUgPSAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkaXAgPSBpc3NldCgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSkgPyAoc3RyaW5nKSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSA6ICcnOwogICAgICAgICAgICAkZGItPkV4ZWN1dGUoCiAgICAgICAgICAgICAgICAiSU5TRVJUIElOVE8geyR0YWJsZX0gKHRpbWVzdGFtcCwgdXNlcl9pZCwgdXNlcm5hbWUsIGl0ZW1faWQsIGl0ZW1fbmFtZSwgYWN0aW9uLCBpcF9hZGRyKSBWQUxVRVMgKD8sPyw/LD8sPyw/LD8pIiwKICAgICAgICAgICAgICAgIFt0aW1lKCksICR1aWQsICR1c2VybmFtZSwgMCwgJ01BU19Tb2NpYWxzJywgJG1lc3NhZ2UsICRpcF0KICAgICAgICAgICAgKTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIC8vIExhc3QtcmVzb3J0IHN3YWxsb3c6IGRlYnVnIGxvZ2dlciBzaG91bGQgbmV2ZXIgYnJlYWsgbW9kdWxlIGFjdGlvbnMuCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/admin/defaultadmin_tests.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEFkbWluIHRlc3QgaGFuZGxlcnMgZm9yIE1BU19Tb2NpYWxzIGRlZmF1bHRhZG1pbiBhY3Rpb24uCiAqLwoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ21hc19zb2NpYWxzX2hhbmRsZV9hZG1pbl90ZXN0cycpKSB7CiAgICBmdW5jdGlvbiBtYXNfc29jaWFsc19oYW5kbGVfYWRtaW5fdGVzdHMoCiAgICAgICAgJG1vZHVsZSwKICAgICAgICAkc21hcnR5LAogICAgICAgICRwYXJhbXMsCiAgICAgICAgJGlkLAogICAgICAgICRyZXR1cm5pZCwKICAgICAgICAkcGFyYW1DbGFzcywKICAgICAgICAkdGVzdFNlcnZpY2UsCiAgICAgICAgJiRhY3RpdmVUYWIKICAgICkgewogICAgICAgICRzZXRUZXN0RmVlZGJhY2sgPSBmdW5jdGlvbiAoYXJyYXkgJHJlc3VsdCkgdXNlICgkbW9kdWxlKSB7CiAgICAgICAgICAgIGlmICghZW1wdHkoJHJlc3VsdFsnc3VjY2VzcyddKSkgewogICAgICAgICAgICAgICAgJG1vZHVsZS0+U2V0TWVzc2FnZSgoc3RyaW5nKSAkcmVzdWx0WydtZXNzYWdlJ10pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG1vZHVsZS0+U2V0RXJyb3IoKHN0cmluZykgJHJlc3VsdFsnbWVzc2FnZSddKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydzdWJtaXRfdGVzdF9kaXNjb3JkJ10pKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAkdGVzdFNlcnZpY2UtPnRlc3REaXNjb3JkKCk7CiAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigndGVzdF9yZXN1bHRfZGlzY29yZCcsICRyZXN1bHQpOwogICAgICAgICAgICAkc2V0VGVzdEZlZWRiYWNrKCRyZXN1bHQpOwogICAgICAgICAgICAkYWN0aXZlVGFiID0gJ3RhYi1kaXNjb3JkJzsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydzdWJtaXRfdGVzdF9mYWNlYm9vayddKSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJHRlc3RTZXJ2aWNlLT50ZXN0RmFjZWJvb2soKTsKICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCd0ZXN0X3Jlc3VsdF9mYWNlYm9vaycsICRyZXN1bHQpOwogICAgICAgICAgICAkc2V0VGVzdEZlZWRiYWNrKCRyZXN1bHQpOwogICAgICAgICAgICAkYWN0aXZlVGFiID0gJ3RhYi1mYWNlYm9vayc7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0X2RpYWdfZmFjZWJvb2snXSkpIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICR0ZXN0U2VydmljZS0+ZGlhZ25vc2VGYWNlYm9vaygpOwogICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2RpYWdfcmVzdWx0X2ZhY2Vib29rJywgJHJlc3VsdCk7CiAgICAgICAgICAgICRzZXRUZXN0RmVlZGJhY2soJHJlc3VsdCk7CiAgICAgICAgICAgICRhY3RpdmVUYWIgPSAndGFiLWZhY2Vib29rJzsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydzdWJtaXRfZGlzY292ZXJfZmFjZWJvb2tfcGFnZXMnXSkpIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICR0ZXN0U2VydmljZS0+ZGlzY292ZXJGYWNlYm9va1BhZ2VzKCk7CiAgICAgICAgICAgICRzbWFydHktPmFzc2lnbignZGlzY292ZXJfcmVzdWx0X2ZhY2Vib29rJywgJHJlc3VsdCk7CiAgICAgICAgICAgICRzZXRUZXN0RmVlZGJhY2soJHJlc3VsdCk7CiAgICAgICAgICAgICRhY3RpdmVUYWIgPSAndGFiLWZhY2Vib29rJzsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydzdWJtaXRfdmFsaWRhdGVfZmFjZWJvb2tfdGFyZ2V0J10pKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAkdGVzdFNlcnZpY2UtPnZhbGlkYXRlRmFjZWJvb2tUYXJnZXQoKTsKICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCd2YWxpZGF0ZV9yZXN1bHRfZmFjZWJvb2snLCAkcmVzdWx0KTsKICAgICAgICAgICAgJHNldFRlc3RGZWVkYmFjaygkcmVzdWx0KTsKICAgICAgICAgICAgJGFjdGl2ZVRhYiA9ICd0YWItZmFjZWJvb2snOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9tZXRhX3Jldmlld19mYWNlYm9va19jYWxscyddKSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJHRlc3RTZXJ2aWNlLT5ydW5GYWNlYm9va01ldGFSZXZpZXdUZXN0Q2FsbHMoKTsKICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtZXRhX3Jldmlld19yZXN1bHRfZmFjZWJvb2snLCAkcmVzdWx0KTsKICAgICAgICAgICAgJHNldFRlc3RGZWVkYmFjaygkcmVzdWx0KTsKICAgICAgICAgICAgJGFjdGl2ZVRhYiA9ICd0YWItZmFjZWJvb2snOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF90ZXN0X3R3aXR0ZXInXSkpIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICR0ZXN0U2VydmljZS0+dGVzdFR3aXR0ZXIoKTsKICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCd0ZXN0X3Jlc3VsdF90d2l0dGVyJywgJHJlc3VsdCk7CiAgICAgICAgICAgICRzZXRUZXN0RmVlZGJhY2soJHJlc3VsdCk7CiAgICAgICAgICAgICRhY3RpdmVUYWIgPSAndGFiLXR3aXR0ZXInOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF90ZXN0X3Rpa3RvayddKSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJHRlc3RTZXJ2aWNlLT50ZXN0VGlrVG9rKCk7CiAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigndGVzdF9yZXN1bHRfdGlrdG9rJywgJHJlc3VsdCk7CiAgICAgICAgICAgICRzZXRUZXN0RmVlZGJhY2soJHJlc3VsdCk7CiAgICAgICAgICAgICRhY3RpdmVUYWIgPSAndGFiLXRpa3Rvayc7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0X3Rlc3Rfd2VicHVzaCddKSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJHRlc3RTZXJ2aWNlLT50ZXN0V2ViUHVzaCgpOwogICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ3Rlc3RfcmVzdWx0X3dlYnB1c2gnLCAkcmVzdWx0KTsKICAgICAgICAgICAgJHNldFRlc3RGZWVkYmFjaygkcmVzdWx0KTsKICAgICAgICAgICAgJGFjdGl2ZVRhYiA9ICd0YWItd2VicHVzaCc7CiAgICAgICAgfQoKICAgICAgICAkY2d3ZWJwdXNoID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDR1dlYlB1c2gnKTsKICAgICAgICBpZiAoJGNnd2VicHVzaCAmJiBpc3NldCgkcGFyYW1zWyd3ZWJwdXNoX3NhdmUnXSkpIHsKICAgICAgICAgICAgJHRpdGxlID0gJHBhcmFtQ2xhc3M6OmdldFN0cmluZygkcGFyYW1zLCAnd2VicHVzaF90aXRsZScpOwogICAgICAgICAgICAkaWNvbiA9ICRwYXJhbUNsYXNzOjpnZXRTdHJpbmcoJHBhcmFtcywgJ3dlYnB1c2hfaWNvbicpOwogICAgICAgICAgICAkY2d3ZWJwdXNoLT5TZXRQcmVmZXJlbmNlKCd0aXRsZScsICR0aXRsZSk7CiAgICAgICAgICAgICRjZ3dlYnB1c2gtPlNldFByZWZlcmVuY2UoJ2ljb24nLCAkaWNvbik7CiAgICAgICAgICAgICRtb2R1bGUtPlNldE1lc3NhZ2UoJG1vZHVsZS0+TGFuZygnbXNnX3ByZWZzX3NhdmVkJykpOwogICAgICAgICAgICAkbW9kdWxlLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIFsnYWN0aXZlX3RhYicgPT4gJ3RhYi13ZWJwdXNoJywgJ3NhdmVkJyA9PiAxXSk7CiAgICAgICAgfQogICAgICAgIGlmICgkY2d3ZWJwdXNoICYmIGlzc2V0KCRwYXJhbXNbJ3dlYnB1c2hfcmVnZW4nXSkpIHsKICAgICAgICAgICAgcmVxdWlyZV9vbmNlIGNtc19qb2luX3BhdGgoJGNnd2VicHVzaC0+R2V0TW9kdWxlUGF0aCgpLCAndmVuZG9yJywgJ2F1dG9sb2FkLnBocCcpOwogICAgICAgICAgICAka2V5cyA9IFxNaW5pc2hsaW5rXFdlYlB1c2hcVkFQSUQ6OmNyZWF0ZVZhcGlkS2V5cygpOwogICAgICAgICAgICAkY2d3ZWJwdXNoLT5TZXRQcmVmZXJlbmNlKCd2YXBpZF9wdWJsaWMnLCAka2V5c1sncHVibGljS2V5J10pOwogICAgICAgICAgICAkY2d3ZWJwdXNoLT5TZXRQcmVmZXJlbmNlKCd2YXBpZF9wcml2YXRlJywgJGtleXNbJ3ByaXZhdGVLZXknXSk7CiAgICAgICAgICAgICRtb2R1bGUtPlNldE1lc3NhZ2UoJG1vZHVsZS0+TGFuZygnbXNnX3ByZWZzX3NhdmVkJykpOwogICAgICAgICAgICAkbW9kdWxlLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIFsnYWN0aXZlX3RhYicgPT4gJ3RhYi13ZWJwdXNoJywgJ3NhdmVkJyA9PiAxXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNnd2VicHVzaDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/Bridges/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.sb_content.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KLyoqCiAqIEEgc2ltcGxlIGNsYXNzIHRoYXQgZGVzY3JpYmVzIHRoZSBpbmZvcm1hdGlvbiByZXR1cm5lZCBieSBhIG1vZHVsZSBmb3IgTUFTX1NvY2lhbHMgdG8gYmxhc3Qgb3V0CiAqIHRoaXMgaXMgdXN1YWxseSBzb21lIGluZm9ybWF0aW9uIGZyb20gYSBibG9nIGFydGljbGUgb3IgYSBuZXdzIGFydGljbGUKICoKICogVGhpcyBpbmZvcm1hdGlvbiBpcyB0aGVuIHVzZWQgaW4gdGhlIGJsYXN0IGZvcm0gdG8gZmlsbCBvdXQgdGhlIGRlZmF1bHQgZm9ybSB2YWx1ZXMgZm9yIHNlbmRpbmcgZGF0YSB0byB0aGUgdmFyaW91cyBzb2NpYWwgbWVkaWEKICogcGxhdGZvcm1zLiAgU29tZSBzb2NpYWwgbWVkaWEgcGxhdGZvcm1zIG1heSB1c2UgZGlmZmVyZW50IGZpZWxkcywgb3IgY29tYmluZSB0aGVtLgogKgogKiBQdWJsaWMgbWVtYmVyczoKICogIHRpdGxlOiAtIChzdHJpbmcpIEEgdGl0bGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgc2hhcmVkLgogKiAgY2Fub25pY2FsOiAtIChzdHJpbmcpIEEgY2Fub25pY2FsIFVSTCB0byB0aGUgb2JqZWN0IGJlaW5nIHNoYXJlZC4KICogIHN1bW1hcnk6IChzdHJpbmcpIFNvbWUgdGV4dCBkZXNjcmliaW5nIHRoZSBvYmplY3QgKG5vdGUsIGRpZmZlcmVudCBtZWRpYSBwbGF0Zm9ybXMgaGF2ZSBkaWZmZXJlbnQgbGltaXRzIG9uIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSBzZW50LgogKiAgcGljdHVyZXM6IChhcnJheSBvZiBuYW1lcyBhbmQgVVJMcykgdG8gaW1hZ2VzLiAgVGhlIE1BU19Tb2NpYWxzIG1vZHVsZSB3aWxsIGFsbG93IHRoZSBhZG1pbmlzdHJhdG9yIHRvIGNob29zZSBvbmUgaW1hZ2UgdG8gYXR0YWNoIHRvIHRoZSBzb2NpYWwgbWVkaWEgcG9zdCAoaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIGl0KS4KICoKICogUHVibGljIG1ldGhvZHM6CiAqICAgYWRkX3BpY3R1cmUoJHVybCwkbmFtZSkgLSBBZGRzIGEgcGljdHVyZSB0byB0aGUgc2JfY29udGVudCBvYmplY3QuLi4gbm90ZSwgZHVwbGljYXRlcyBhcmUgbm90IHBlcm1pdHRlZC4KICogICBjb3VudF9waWN0dXJlcygpIC0gUmV0dXJucyBhIGNvdW50IG9mIHRoZSBwaWN0dXJlcyBhZGRlZCB0byB0aGUgb2JqZWN0CiAqLwpmaW5hbCBjbGFzcyBzYl9jb250ZW50CnsKICAgIHByaXZhdGUgJF90aXRsZTsKICAgIHByaXZhdGUgJF9saW5rdGl0bGU7CiAgICBwcml2YXRlICRfc3VtbWFyeTsKICAgIHByaXZhdGUgJF9jYW5vbmljYWw7CiAgICBwcml2YXRlICRfcGljdHVyZXMgPSBhcnJheSgpOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogICAgewogICAgICAgIHN3aXRjaCgka2V5KSB7CiAgICAgICAgY2FzZSAndGl0bGUnOgogICAgICAgIGNhc2UgJ2xpbmt0aXRsZSc6CiAgICAgICAgY2FzZSAnc3VtbWFyeSc6CiAgICAgICAgY2FzZSAncGljdHVyZXMnOgogICAgICAgIGNhc2UgJ2Nhbm9uaWNhbCc6CiAgICAgICAgICAgICRrZXkgPSAnXycuJGtleTsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT4ka2V5OwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnY2Fub25pY2FsX3Nob3J0JzoKICAgICAgICAgICAgJGtleSA9ICdfY2Fub25pY2FsJzsKICAgICAgICAgICAgJHRtcCA9IE1vZHVsZU9wZXJhdGlvbnM6OmdldF9tb2R1bGVzX3dpdGhfY2FwYWJpbGl0eSgnc2hvcnRlbl91cmwnKTsKICAgICAgICAgICAgaWYoICFpc19hcnJheSgkdG1wKSB8fCBjb3VudCgkdG1wKSA9PSAwICkgcmV0dXJuICR0aGlzLT5jYW5vbmljYWw7CiAgICAgICAgICAgIGZvcmVhY2goICR0bXAgYXMgJG5hbWUgKSB7CiAgICAgICAgICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRuYW1lKTsKICAgICAgICAgICAgICAgIGlmKCAhJG1vZCApIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgcmV0dXJuICRtb2QtPnNob3J0ZW5fdXJsKCR0aGlzLT5jYW5vbmljYWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJGtleS4nIGlzIGFuIGludmFsaWQgbWVtYmVyIGZvciBhICcuZ2V0X2NsYXNzKCR0aGlzKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgka2V5LCR2YWwpCiAgICB7CiAgICAgICAgc3dpdGNoKCRrZXkpIHsKICAgICAgICBjYXNlICd0aXRsZSc6CiAgICAgICAgY2FzZSAnbGlua3RpdGxlJzoKICAgICAgICBjYXNlICdzdW1tYXJ5JzoKICAgICAgICBjYXNlICdjYW5vbmljYWwnOgogICAgICAgICAgICAka2V5ID0gJ18nLiRrZXk7CiAgICAgICAgICAgICR0aGlzLT4ka2V5ID0gdHJpbSgkdmFsKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3BpY3R1cmVzJzoKICAgICAgICAgICAgaWYoICFpc19hcnJheSgkdmFsKSB8fCBjb3VudCgkdmFsKSA9PSAwICkgdGhyb3cgbmV3IENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdwaWN0dXJlcyBtdXN0IGJlIGEgaGFzaCBvZiBuYW1lIGFuZCB1cmwnKTsKICAgICAgICAgICAgJHRoaXMtPnBpY3R1cmVzID0gJHZhbDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbigka2V5LicgaXMgYW4gaW52YWxpZCBtZW1iZXIgZm9yIGEgJy5nZXRfY2xhc3MoJHRoaXMpKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9waWN0dXJlKCR1cmwsJG5hbWUpCiAgICB7CiAgICAgICAgJHVybCA9IHRyaW0oJHVybCk7CiAgICAgICAgJG5hbWUgPSB0cmltKCRuYW1lKTsKICAgICAgICBpZiggIXN0YXJ0c3dpdGgoJHVybCwnaHR0cCcpICYmICFzdGFydHN3aXRoKCR1cmwsJ2Z0cDonKSApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdJbnZhbGlkIFVSTCBwYXNzZWQgdG8gc2JfY29udGVudC0+YWRkX3BpY3R1cmUnKTsKICAgICAgICB9CiAgICAgICAgaWYoICRuYW1lID09ICcnICkgdGhyb3cgbmV3IENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdJbnZhbGlkIHBpY3R1cmUgbmFtZSBwYXNzZWQgdG8gc2JfY29udGVudC0+YWRkX3BpY3R1cmUnKTsKICAgICAgICAkdGhpcy0+X3BpY3R1cmVzWyR1cmxdID0gJG5hbWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50X3BpY3R1cmVzKCkKICAgIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPl9waWN0dXJlcyk7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.sb_sender_info.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KY2xhc3Mgc2Jfc2VuZGVyX2luZm8gaW1wbGVtZW50cyBBcnJheUFjY2Vzcwp7CiAgICBwcml2YXRlICRfZGF0YSA9IGFycmF5KCk7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtb2R1bGUsJHNvY2lhbG5hbWUsJGNoYXJsaW1pdCwkcGljdHVyZSA9IDApCiAgICB7CiAgICAgICAgJHRoaXMtPl9kYXRhWydtb2R1bGUnXSA9ICRtb2R1bGU7CiAgICAgICAgJHRoaXMtPl9kYXRhWydzb2NpYWxuYW1lJ10gPSAkc29jaWFsbmFtZTsKICAgICAgICAkdGhpcy0+X2RhdGFbJ2NoYXJsaW1pdCddID0gKGludCkkY2hhcmxpbWl0OwogICAgICAgICR0aGlzLT5fZGF0YVsncGljdHVyZSddID0gJHBpY3R1cmU7IC8vIGJvb2wKICAgICAgICAkdGhpcy0+X2RhdGFbJ2xpbmt0aXRsZSddID0gMDsgLy8gYm9vbAogICAgICAgICR0aGlzLT5fZGF0YVsndGl0bGUnXSA9IDA7IC8vIGJvb2wKICAgICAgICAkdGhpcy0+X2RhdGFbJ2xpbmsnXSA9IDA7IC8vIGJvb2wKICAgICAgICAkdGhpcy0+X2RhdGFbJ2NhcHRpb24nXSA9IDA7IC8vIGJvb2wKICAgICAgICAkdGhpcy0+X2RhdGFbJ2Rlc2NyaXB0aW9uJ10gPSAwOyAvLyBib29sCiAgICAgICAgJHRoaXMtPl9kYXRhWydpbmZvX21lc3NhZ2UnXSA9ICcnOyAvLyBzdHJpbmcKICAgICAgICAkdGhpcy0+X2RhdGFbJ2RmbHRfdGVtcGxhdGUnXSA9ICd7JGlucHV0X2RhdGEtPnN1bW1hcnl9IHskaW5wdXRfZGF0YS0+Y2Fub25pY2FsfSc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIE9mZnNldEdldCgkaykKICAgIHsKICAgICAgICBzd2l0Y2goICRrICkgewogICAgICAgIGNhc2UgJ21vZHVsZSc6CiAgICAgICAgY2FzZSAnc29jaWFsbmFtZSc6CiAgICAgICAgY2FzZSAnY2hhcmxpbWl0JzoKICAgICAgICBjYXNlICdsaW5rdGl0bGUnOgogICAgICAgIGNhc2UgJ3BpY3R1cmUnOgogICAgICAgIGNhc2UgJ3RpdGxlJzoKICAgICAgICBjYXNlICdpbmZvX21lc3NhZ2UnOgogICAgICAgIGNhc2UgJ2RmbHRfdGVtcGxhdGUnOgogICAgICAgIGNhc2UgJ2xpbmsnOgogICAgICAgIGNhc2UgJ2NhcHRpb24nOgogICAgICAgIGNhc2UgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fZGF0YVska107CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFsaWQga2V5ICRrIGZvciBzYl9zZW5kZXJfaW5mbyBvYmplY3QiKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIE9mZnNldFNldCgkaywkdikKICAgIHsKICAgICAgICBzd2l0Y2goICRrICkgewogICAgICAgIGNhc2UgJ21vZHVsZSc6CiAgICAgICAgY2FzZSAnc29jaWFsbmFtZSc6CiAgICAgICAgY2FzZSAnbGlua3RpdGxlJzoKICAgICAgICBjYXNlICd0aXRsZSc6CiAgICAgICAgY2FzZSAncGljdHVyZSc6CiAgICAgICAgY2FzZSAnaW5mb19tZXNzYWdlJzoKICAgICAgICBjYXNlICdkZmx0X3RlbXBsYXRlJzoKICAgICAgICBjYXNlICdsaW5rJzoKICAgICAgICBjYXNlICdjYXB0aW9uJzoKICAgICAgICBjYXNlICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAgICR0aGlzLT5fZGF0YVska10gPSB0cmltKCR2KTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2NoYXJsaW1pdCc6CiAgICAgICAgICAgICR0aGlzLT5fZGF0YVska10gPSAoaW50KSR2OwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBrZXkgJGsgZm9yIHNiX3NlbmRlcl9pbmZvIG9iamVjdCIpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gT2Zmc2V0RXhpc3RzKCRrKQogICAgewogICAgICAgIHN3aXRjaCggJGsgKSB7CiAgICAgICAgY2FzZSAnbW9kdWxlJzoKICAgICAgICBjYXNlICdsaW5rdGl0bGUnOgogICAgICAgIGNhc2UgJ2luZm9fbWVzc2FnZSc6CiAgICAgICAgY2FzZSAnZGZsdF90ZW1wbGF0ZSc6CiAgICAgICAgY2FzZSAncGljdHVyZSc6CiAgICAgICAgY2FzZSAnc29jaWFsbmFtZSc6CiAgICAgICAgY2FzZSAnY2hhcmxpbWl0JzoKICAgICAgICBjYXNlICdsaW5rJzoKICAgICAgICBjYXNlICd0aXRsZSc6CiAgICAgICAgY2FzZSAnY2FwdGlvbic6CiAgICAgICAgY2FzZSAnZGVzY3JpcHRpb24nOgogICAgICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPl9kYXRhWyRrXSk7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFsaWQga2V5ICRrIGZvciBzYl9zZW5kZXJfaW5mbyBvYmplY3QiKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIE9mZnNldFVuc2V0KCRrKQogICAgewogICAgICAgIHJldHVybjsgLy8gZG8gbm90aGluZy4KICAgIH0KfQoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.sb_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KZmluYWwgY2xhc3Mgc2JfdXRpbHMKewogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfZmVlZGVycygpCiAgICB7CiAgICAgICAgJGhvc3Rtb2R1bGVzID0gTW9kdWxlT3BlcmF0aW9uczo6Z2V0X21vZHVsZXNfd2l0aF9jYXBhYmlsaXR5KCdjZ19zb2NpYWxibGFzdF9mZWVkZXInKTsKICAgICAgICByZXR1cm4gJGhvc3Rtb2R1bGVzOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3NlbmRlcnMoKQogICAgewogICAgICAgICRibGFzdG1vZHVsZXMgPSBNb2R1bGVPcGVyYXRpb25zOjpnZXRfbW9kdWxlc193aXRoX2NhcGFiaWxpdHkoJ2NnX3NvY2lhbGJsYXN0X3RyYW5zcG9ydCcpOwogICAgICAgIGlmKCAhJGJsYXN0bW9kdWxlcyApIHJldHVybjsKCiAgICAgICAgJG91dCA9IFtdOwogICAgICAgIGZvcmVhY2goICRibGFzdG1vZHVsZXMgYXMgJG1vZG5hbWUgKSB7CiAgICAgICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCAkbW9kbmFtZSApOwogICAgICAgICAgICAkbGJsID0gJG1vZC0+Z2V0X3RyYW5zcG9ydF9uYW1lKCk7CiAgICAgICAgICAgIGlmKCAhJGxibCApICRsYmwgPSAkbW9kbmFtZTsKICAgICAgICAgICAgJG91dFskbW9kbmFtZV0gPSAkbGJsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9zZW5kZXJfdGVtcGxhdGUoICRzZW5kZXJfbW9kICkKICAgIHsKICAgICAgICAkbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZShNT0RfTUFTX1NPQ0lBTFMpOwogICAgICAgICR0cGwgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdtc2d0cGxfJy4kc2VuZGVyX21vZC0+R2V0TmFtZSgpKTsKICAgICAgICByZXR1cm4gJHRwbDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldF9zZW5kZXJfdGVtcGxhdGUoICRzZW5kZXJfbW9kLCAkdHh0ICkKICAgIHsKICAgICAgICAkbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZShNT0RfTUFTX1NPQ0lBTFMpOwogICAgICAgICRtb2QtPlNldFByZWZlcmVuY2UoJ21zZ3RwbF8nLiRzZW5kZXJfbW9kLCAkdHh0ICk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfc2VuZGVyX2luZm8oKQogICAgewogICAgICAgICR0bXAgPSBzZWxmOjpnZXRfc2VuZGVycygpOwogICAgICAgIGlmKCBpc19hcnJheSgkdG1wKSAmJiBjb3VudCgkdG1wKSApIHsKICAgICAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2goICR0bXAgYXMgJG9uZSA9PiAkbGJsICkgewogICAgICAgICAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgkb25lKTsKICAgICAgICAgICAgICAgIGlmKCAhaXNfb2JqZWN0KCRtb2QpICkgY29udGludWU7IC8vIHdlaXJkLCBidXQgb2theS4uLgogICAgICAgICAgICAgICAgaWYoICFtZXRob2RfZXhpc3RzKCRtb2QsJ2dldF9zZW5kZXJfaW5mbycpICkgY29udGludWU7IC8vIG9vcHMsIGltcHJvcGVyIGltcGxlbWVudGF0aW9uLgogICAgICAgICAgICAgICAgJHJlcyA9ICRtb2QtPmdldF9zZW5kZXJfaW5mbygpOwogICAgICAgICAgICAgICAgaWYoICFpc19vYmplY3QoJHJlcykgKSBjb250aW51ZTsgLy8gd2VpcmQuCiAgICAgICAgICAgICAgICAkb3V0WyRyZXNbJ21vZHVsZSddXSA9ICRyZXM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoIGlzX2FycmF5KCRvdXQpICYmIGNvdW50KCRvdXQpICkgcmV0dXJuICRvdXQ7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3NlbmRlcl9saXN0KCkKICAgIHsKICAgICAgICAkc2VuZGVycyA9IHNlbGY6OmdldF9zZW5kZXJfaW5mbygpOwogICAgICAgIGlmKCBpc19hcnJheSgkc2VuZGVycykgJiYgY291bnQoJHNlbmRlcnMpICkgewogICAgICAgICAgICAkbGlzdCA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2goICRzZW5kZXJzIGFzICRvbmUgKSB7CiAgICAgICAgICAgICAgICAkbGlzdFskb25lWydtb2R1bGUnXV0gPSAkb25lWydzb2NpYWxuYW1lJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICRsaXN0OwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHRvX25vdGlmaWNhdGlvbl9tc2coICRzZW5kZXJfbW9kLCBcc2JfY29udGVudCAkY29udGVudCApCiAgICB7CiAgICAgICAgLy8gY29udmVydCB0aGUgc2JfY29udGVudCBvYmplY3QgdG8gYSBub3RpZmljYXRpb24gbXNnLgogICAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21lZGlhJywkc2VuZGVyX21vZC0+Z2V0X3RyYW5zcG9ydF9uYW1lKCkpOwogICAgICAgICRzbWFydHktPmFzc2lnbignbW9kdWxlJywkc2VuZGVyX21vZC0+R2V0TmFtZSgpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2lucHV0X2RhdGEnLCRjb250ZW50KTsKICAgICAgICAkbXNnID0gbmV3IFxub3RpZmljYXRpb25fbWVzc2FnZTsKICAgICAgICAkdHBsID0gc2VsZjo6Z2V0X3NlbmRlcl90ZW1wbGF0ZSggJHNlbmRlcl9tb2QgKTsKICAgICAgICAkbXNnLT5zdWJqZWN0ID0gc3RyaXBfdGFncygkY29udGVudC0+dGl0bGUpOwogICAgICAgICRtc2ctPmJvZHkgPSAkc21hcnR5LT5mZXRjaCgnc3RyaW5nOicuJHRwbCk7CiAgICAgICAgJG1zZy0+bGluayA9ICRjb250ZW50LT5jYW5vbmljYWw7CiAgICAgICAgJG1zZy0+bGlua25hbWUgPSAkY29udGVudC0+bGlua3RpdGxlOwogICAgICAgIGlmKCAkY29udGVudC0+Y291bnRfcGljdHVyZXMoKSApIHsKICAgICAgICAgICAgJHBpY3R1cmVzID0gYXJyYXlfa2V5cyggJGNvbnRlbnQtPnBpY3R1cmVzICk7CiAgICAgICAgICAgICRtc2ctPnBpY3R1cmUgPSAkcGljdHVyZXNbMF07CiAgICAgICAgICAgICRtc2ctPmNhcHRpb24gPSAkcGljdHVyZXNbJG1zZy0+cGljdHVyZV07CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbXNnOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2VuZF9ibGFzdCggXHNiX2NvbnRlbnQgJGNvbnRlbnQsIGFycmF5ICRzZW5kZXJzID0gbnVsbCApCiAgICB7CiAgICAgICAgLy8gY2FsbGVkIHRvIHNlbmQgYSBibGFzdCB3aXRob3V0IGFkbWluIHVzZXIgaW50ZXJhY3Rpb24uCiAgICAgICAgaWYoICEkc2VuZGVycyApICRzZW5kZXJzID0gYXJyYXlfa2V5cyggc2VsZjo6Z2V0X3NlbmRlcnMoKSApOwoKICAgICAgICAkZXJyb3IgPSBudWxsOwogICAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ3NvdXJjZV9kYXRhJywkY29udGVudCk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdzb3VyY2VfaW5mbycsc2JfdXRpbHM6OmdldF9zZW5kZXJfaW5mbygpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ3NlbmRlcnMnLCBzZWxmOjpnZXRfc2VuZGVycygpKTsKICAgICAgICBmb3JlYWNoKCAkc2VuZGVycyBhcyAkb25lICkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgkb25lKTsKICAgICAgICAgICAgICAgIGlmKCAhJG1vZCApIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgJG1zZyA9IHNlbGY6OnRvX25vdGlmaWNhdGlvbl9tc2coICRtb2QsICRjb250ZW50ICk7CiAgICAgICAgICAgICAgICAkbW9kLT5icm9hZGNhc3RfbWVzc2FnZSgkbXNnLFRSVUUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoKCBFeGNlcHRpb24gJGUgKSB7CiAgICAgICAgICAgICAgICAvLyBpZiBhbiBlcnJvciBvY2N1cnMgc2VuZGluZyBvbmUgbWVzc2FnZSwgbGV0cyB0cnkgdG8gY29udGludWUgd2l0aCBvdGhlcnMKICAgICAgICAgICAgICAgICRlcnJvciA9ICRlLT5HZXRNZXNzYWdlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0gLy8gY2xhc3MKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/sb_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KZmluYWwgY2xhc3Mgc2JfdXRpbHMgCnsKICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfZmVlZGVycygpCiAgewogICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZShNT0RfTUFTX1NPQ0lBTFMpOwogICAgJGhvc3Rtb2R1bGVzID0gJG1vZC0+R2V0TW9kdWxlc1dpdGhDYXBhYmlsaXR5KCdjZ19zb2NpYWxibGFzdF9mZWVkZXInKTsKICAgIHJldHVybiAkaG9zdG1vZHVsZXM7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9zZW5kZXJzKCkKICB7CiAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKE1PRF9NQVNfU09DSUFMUyk7CiAgICAkYmxhc3Rtb2R1bGVzID0gJG1vZC0+R2V0TW9kdWxlc1dpdGhDYXBhYmlsaXR5KCdjZ19zb2NpYWxibGFzdF9zZW5kZXInKTsKICAgIHJldHVybiAkYmxhc3Rtb2R1bGVzOwogIH0KfQojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/Services/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/Services/ConfigRepository.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KCm5hbWVzcGFjZSBNQVNfU29jaWFsc1xTZXJ2aWNlczsKCnVzZSBNQVNfU29jaWFsczsKCmNsYXNzIENvbmZpZ1JlcG9zaXRvcnkKewogICAgcHJpdmF0ZSBNQVNfU29jaWFscyAkbW9kdWxlOwogICAgcHJpdmF0ZSAkY29uZmlnOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChNQVNfU29jaWFscyAkbW9kdWxlKQogICAgewogICAgICAgICR0aGlzLT5tb2R1bGUgPSAkbW9kdWxlOwogICAgICAgICR0aGlzLT5jb25maWcgPSBcY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldChzdHJpbmcgJGtleSwgJGRlZmF1bHQgPSBudWxsKQogICAgewogICAgICAgICRyZXNvbHZlZCA9ICR0aGlzLT5nZXRXaXRoU291cmNlKCRrZXksICRkZWZhdWx0KTsKICAgICAgICByZXR1cm4gJHJlc29sdmVkWyd2YWx1ZSddOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRXaXRoU291cmNlKHN0cmluZyAka2V5LCAkZGVmYXVsdCA9IG51bGwpOiBhcnJheQogICAgewogICAgICAgIC8vIFByZWZlciBkYXRhYmFzZSAoQ01TTVMgbW9kdWxlIHByZWZlcmVuY2VzKSBmaXJzdC4KICAgICAgICAvLyBBbGxvdyBjb25maWcucGhwIGFzIGZhbGxiYWNrIG92ZXJyaWRlIHdoZW4gREIgdmFsdWUgaXMgZW1wdHkuCiAgICAgICAgJHByZWYgPSAkdGhpcy0+bW9kdWxlLT5HZXRQcmVmZXJlbmNlKCRrZXksIG51bGwpOwogICAgICAgIGlmICgkcHJlZiAhPT0gbnVsbCkgewogICAgICAgICAgICBpZiAoIWlzX3N0cmluZygkcHJlZikgfHwgdHJpbSgkcHJlZikgIT09ICcnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWyd2YWx1ZScgPT4gJHByZWYsICdzb3VyY2UnID0+ICdkYXRhYmFzZSddOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmNvbmZpZ1ska2V5XSkpIHsKICAgICAgICAgICAgICAgICRjb25maWdWYWx1ZSA9ICR0aGlzLT5jb25maWdbJGtleV07CiAgICAgICAgICAgICAgICBpZiAoJGNvbmZpZ1ZhbHVlICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc19zdHJpbmcoJGNvbmZpZ1ZhbHVlKSB8fCAkdGhpcy0+aXNVc2FibGVDb25maWdTdHJpbmcoJGNvbmZpZ1ZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyd2YWx1ZScgPT4gJGNvbmZpZ1ZhbHVlLCAnc291cmNlJyA9PiAnY29uZmlnLnBocCddOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQuCiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyd2YWx1ZScgPT4gJGRlZmF1bHQsICdzb3VyY2UnID0+ICdkZWZhdWx0J107CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNvdXJjZShzdHJpbmcgJGtleSwgJGRlZmF1bHQgPSBudWxsKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc29sdmVkID0gJHRoaXMtPmdldFdpdGhTb3VyY2UoJGtleSwgJGRlZmF1bHQpOwogICAgICAgIHJldHVybiAoc3RyaW5nKSAkcmVzb2x2ZWRbJ3NvdXJjZSddOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaXNVc2FibGVDb25maWdTdHJpbmcoc3RyaW5nICR2YWx1ZSk6IGJvb2wKICAgIHsKICAgICAgICAkdHJpbW1lZCA9IHRyaW0oJHZhbHVlKTsKICAgICAgICBpZiAoJHRyaW1tZWQgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIElnbm9yZSB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnMgc28gREIgcHJlZmVyZW5jZXMgY2FuIGJlIHVzZWQuCiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eX19TRVRfW0EtWjAtOV9dK19fJC8nLCAkdHJpbW1lZCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByZWYoc3RyaW5nICRrZXksICRkZWZhdWx0ID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1vZHVsZS0+R2V0UHJlZmVyZW5jZSgka2V5LCAkZGVmYXVsdCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFByZWYoc3RyaW5nICRrZXksICR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+bW9kdWxlLT5TZXRQcmVmZXJlbmNlKCRrZXksICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZVByZWYoc3RyaW5nICRrZXkpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPm1vZHVsZS0+UmVtb3ZlUHJlZmVyZW5jZSgka2V5KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGlzY29yZFdlYmhvb2soKTogP3N0cmluZwogICAgewogICAgICAgICR2YWx1ZSA9IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfZGlzY29yZF93ZWJob29rJywgJycpKTsKICAgICAgICByZXR1cm4gJHZhbHVlICE9PSAnJyA/ICR2YWx1ZSA6IG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldERpc2NvcmRNZXNzYWdlTW9kZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkbW9kZSA9IHN0cnRvbG93ZXIodHJpbSgoc3RyaW5nKSAkdGhpcy0+Z2V0KCdtYXNfc29jaWFsc19kaXNjb3JkX21lc3NhZ2VfbW9kZScsICdlbWJlZCcpKSk7CiAgICAgICAgcmV0dXJuIGluX2FycmF5KCRtb2RlLCBbJ25vcm1hbCcsICdlbWJlZCcsICdlbWJlZF9vbmx5J10sIHRydWUpID8gJG1vZGUgOiAnZW1iZWQnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGYWNlYm9va0NvbmZpZygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdhcHBfaWQnID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfZmFjZWJvb2tfYXBwX2lkJywgJycpKSwKICAgICAgICAgICAgJ2FwcF9zZWNyZXQnID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfZmFjZWJvb2tfYXBwX3NlY3JldCcsICcnKSksCiAgICAgICAgICAgICdjbGllbnRfdG9rZW4nID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfZmFjZWJvb2tfY2xpZW50X3Rva2VuJywgJycpKSwKICAgICAgICAgICAgJ3Rva2VuX21vZGUnID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfZmFjZWJvb2tfdG9rZW5fbW9kZScsICdvYXV0aF91c2VyX3BhZ2UnKSksCiAgICAgICAgICAgICdhY2Nlc3NfdG9rZW4nID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfZmFjZWJvb2tfYWNjZXNzX3Rva2VuJywgJycpKSwKICAgICAgICAgICAgJ3N5c3RlbV91c2VyX3Rva2VuJyA9PiB0cmltKChzdHJpbmcpICR0aGlzLT5nZXQoJ21hc19zb2NpYWxzX2ZhY2Vib29rX3N5c3RlbV91c2VyX3Rva2VuJywgJycpKSwKICAgICAgICAgICAgJ3BhZ2VfaWQnID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfZmFjZWJvb2tfZGVmYXVsdF9wYWdlX2lkJywgJycpKSwKICAgICAgICAgICAgJ3BhZ2VfdXJsJyA9PiB0cmltKChzdHJpbmcpICR0aGlzLT5nZXQoJ21hc19zb2NpYWxzX2ZhY2Vib29rX2RlZmF1bHRfcGFnZScsICcnKSksCiAgICAgICAgICAgICdhcGlfdmVyc2lvbicgPT4gdHJpbSgoc3RyaW5nKSAkdGhpcy0+Z2V0KCdtYXNfc29jaWFsc19mYWNlYm9va19hcGlfdmVyc2lvbicsICd2MjUuMCcpKSwKICAgICAgICAgICAgJ2RhdGFfZGVsZXRpb25fY2FsbGJhY2tfdXJsJyA9PiB0cmltKChzdHJpbmcpICR0aGlzLT5nZXQoJ21hc19zb2NpYWxzX2ZhY2Vib29rX2RhdGFfZGVsZXRpb25fY2FsbGJhY2tfdXJsJywgJycpKSwKICAgICAgICAgICAgJ2RhdGFfZGVsZXRpb25fc3RhdHVzX3VybCcgPT4gdHJpbSgoc3RyaW5nKSAkdGhpcy0+Z2V0KCdtYXNfc29jaWFsc19mYWNlYm9va19kYXRhX2RlbGV0aW9uX3N0YXR1c191cmwnLCAnJykpLAogICAgICAgICAgICAnZGF0YV9kZWxldGlvbl9zZWNyZXQnID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfZmFjZWJvb2tfZGF0YV9kZWxldGlvbl9zZWNyZXQnLCAnJykpLAogICAgICAgICAgICAnb2F1dGhfZW5hYmxlZCcgPT4gdHJpbSgoc3RyaW5nKSAkdGhpcy0+Z2V0KCdtYXNfc29jaWFsc19mYWNlYm9va19vYXV0aF9lbmFibGVkJywgJzAnKSksCiAgICAgICAgICAgICdvYXV0aF9yZWRpcmVjdF91cmknID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfZmFjZWJvb2tfb2F1dGhfcmVkaXJlY3RfdXJpJywgJycpKSwKICAgICAgICBdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUd2l0dGVyQ29uZmlnKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ2FwaV9rZXknID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfdHdpdHRlcl9hcGlfa2V5JywgJycpKSwKICAgICAgICAgICAgJ2FwaV9zZWNyZXQnID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfdHdpdHRlcl9hcGlfc2VjcmV0JywgJycpKSwKICAgICAgICAgICAgJ2JlYXJlcl90b2tlbicgPT4gdHJpbSgoc3RyaW5nKSAkdGhpcy0+Z2V0KCdtYXNfc29jaWFsc190d2l0dGVyX2JlYXJlcl90b2tlbicsICcnKSksCiAgICAgICAgICAgICdhY2Nlc3NfdG9rZW4nID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfdHdpdHRlcl9hY2Nlc3NfdG9rZW4nLCAnJykpLAogICAgICAgICAgICAnYWNjZXNzX3NlY3JldCcgPT4gdHJpbSgoc3RyaW5nKSAkdGhpcy0+Z2V0KCdtYXNfc29jaWFsc190d2l0dGVyX2FjY2Vzc19zZWNyZXQnLCAnJykpLAogICAgICAgIF07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpa1Rva0NvbmZpZygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdjbGllbnRfa2V5JyA9PiB0cmltKChzdHJpbmcpICR0aGlzLT5nZXQoJ21hc19zb2NpYWxzX3Rpa3Rva19jbGllbnRfa2V5JywgJycpKSwKICAgICAgICAgICAgJ2NsaWVudF9zZWNyZXQnID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfdGlrdG9rX2NsaWVudF9zZWNyZXQnLCAnJykpLAogICAgICAgICAgICAnYWNjZXNzX3Rva2VuJyA9PiB0cmltKChzdHJpbmcpICR0aGlzLT5nZXQoJ21hc19zb2NpYWxzX3Rpa3Rva19hY2Nlc3NfdG9rZW4nLCAnJykpLAogICAgICAgICAgICAnYnVzaW5lc3NfYWNjb3VudF9pZCcgPT4gdHJpbSgoc3RyaW5nKSAkdGhpcy0+Z2V0KCdtYXNfc29jaWFsc190aWt0b2tfYnVzaW5lc3NfYWNjb3VudF9pZCcsICcnKSksCiAgICAgICAgICAgIC8vIG9wdGlvbmFsOiBwcmVmZXJyZWQgdXBsb2FkIHJlZ2lvbgogICAgICAgICAgICAndXBsb2FkX3JlZ2lvbicgPT4gdHJpbSgoc3RyaW5nKSAkdGhpcy0+Z2V0KCdtYXNfc29jaWFsc190aWt0b2tfdXBsb2FkX3JlZ2lvbicsICcnKSksCiAgICAgICAgICAgICd2ZXJpZnlfZmlsZV9uYW1lJyA9PiB0cmltKChzdHJpbmcpICR0aGlzLT5nZXQoJ21hc19zb2NpYWxzX3Rpa3Rva192ZXJpZnlfZmlsZV9uYW1lJywgJycpKSwKICAgICAgICAgICAgJ3ZlcmlmeV9maWxlX2NvbnRlbnQnID0+IHRyaW0oKHN0cmluZykgJHRoaXMtPmdldCgnbWFzX3NvY2lhbHNfdGlrdG9rX3ZlcmlmeV9maWxlX2NvbnRlbnQnLCAnJykpLAogICAgICAgIF07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEFkbWluU2VjdGlvbigpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZGVmYXVsdCA9ICR0aGlzLT5nZXQoJ21hc19zb2NpYWxzX2RlZmF1bHRfYWRtaW5fc2VjdGlvbicsICdleHRlbnNpb25zJyk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tb2R1bGUtPkdldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfQURNSU5fU0VDVElPTiwgJGRlZmF1bHQpOwogICAgfQoKICAgIC8qKgogICAgICogU2F2ZSBhIHNldHRpbmcgdG8gQ01TTVMgbW9kdWxlIHByZWZlcmVuY2VzIChkYXRhYmFzZSkuCiAgICAgKiBjb25maWcucGhwIHZhbHVlcyByZW1haW4gc3VwcG9ydGVkIGFzIHJlYWQtb25seSBvdmVycmlkZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZUNvbmZpZyhzdHJpbmcgJGtleSwgc3RyaW5nICR2YWx1ZSk6IGFycmF5CiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRoaXMtPm1vZHVsZS0+U2V0UHJlZmVyZW5jZSgka2V5LCAkdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gWydzdWNjZXNzJyA9PiB0cnVlLCAnbWVzc2FnZScgPT4gJ1NldHRpbmcgdXBkYXRlZCBpbiBkYXRhYmFzZSddOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgcmV0dXJuIFsnc3VjY2VzcycgPT4gZmFsc2UsICdtZXNzYWdlJyA9PiAnRmFpbGVkIHRvIHNhdmUgc2V0dGluZyBpbiBkYXRhYmFzZSddOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFdyaXRlIG11bHRpcGxlIGNvbmZpZyB2YWx1ZXMgYXQgb25jZQogICAgICogCiAgICAgKiBAcGFyYW0gYXJyYXkgJHZhbHVlcyBLZXktdmFsdWUgcGFpcnMKICAgICAqIEByZXR1cm4gYXJyYXkgWydzdWNjZXNzJyA9PiBib29sLCAnbWVzc2FnZScgPT4gc3RyaW5nLCAnZXJyb3JzJyA9PiBhcnJheV0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlQ29uZmlnTXVsdGlwbGUoYXJyYXkgJHZhbHVlcyk6IGFycmF5CiAgICB7CiAgICAgICAgJGVycm9ycyA9IFtdOwogICAgICAgICRzdWNjZXNzQ291bnQgPSAwOwogICAgICAgIAogICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT53cml0ZUNvbmZpZygka2V5LCAoc3RyaW5nKSR2YWx1ZSk7CiAgICAgICAgICAgIGlmICgkcmVzdWx0WydzdWNjZXNzJ10pIHsKICAgICAgICAgICAgICAgICRzdWNjZXNzQ291bnQrKzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRlcnJvcnNbJGtleV0gPSAkcmVzdWx0WydtZXNzYWdlJ107CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+ICRzdWNjZXNzQ291bnQgPT09IGNvdW50KCR2YWx1ZXMpLAogICAgICAgICAgICAnbWVzc2FnZScgPT4gIlVwZGF0ZWQgeyRzdWNjZXNzQ291bnR9IG9mICIgLiBjb3VudCgkdmFsdWVzKSAuICIgY29uZmlnIHZhbHVlcyIsCiAgICAgICAgICAgICdlcnJvcnMnID0+ICRlcnJvcnMKICAgICAgICBdOwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/lib/Services/DiscordNotifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KCm5hbWVzcGFjZSBNQVNfU29jaWFsc1xTZXJ2aWNlczsKCnVzZSBNQVNfU29jaWFsczsKdXNlIHNiX2NvbnRlbnQ7CgpjbGFzcyBEaXNjb3JkTm90aWZpZXIKewogICAgcHJpdmF0ZSBNQVNfU29jaWFscyAkbW9kdWxlOwogICAgcHJpdmF0ZSBDb25maWdSZXBvc2l0b3J5ICRjb25maWc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KE1BU19Tb2NpYWxzICRtb2R1bGUsIENvbmZpZ1JlcG9zaXRvcnkgJGNvbmZpZykKICAgIHsKICAgICAgICAkdGhpcy0+bW9kdWxlID0gJG1vZHVsZTsKICAgICAgICAkdGhpcy0+Y29uZmlnID0gJGNvbmZpZzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNDb25maWd1cmVkKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gKGJvb2wpICR0aGlzLT5jb25maWctPmdldERpc2NvcmRXZWJob29rKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlbmQoc2JfY29udGVudCAkY29udGVudCwgc3RyaW5nICR0ZW1wbGF0ZSwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IGJvb2wKICAgIHsKICAgICAgICAkd2ViaG9vayA9ICR0aGlzLT5jb25maWctPmdldERpc2NvcmRXZWJob29rKCk7CiAgICAgICAgaWYgKCEkd2ViaG9vaykgewogICAgICAgICAgICBMb2dnZXI6OmxvZygnd2FybmluZycsICdEaXNjb3JkIHdlYmhvb2sgaXMgbm90IGNvbmZpZ3VyZWQnKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJG1lc3NhZ2UgPSAkdGhpcy0+cmVuZGVyVGVtcGxhdGUoJHRlbXBsYXRlLCAkY29udGVudCk7CiAgICAgICAgJG1vZGUgPSBzdHJ0b2xvd2VyKHRyaW0oKHN0cmluZykoJG9wdGlvbnNbJ21vZGUnXSA/PyAkdGhpcy0+Y29uZmlnLT5nZXREaXNjb3JkTWVzc2FnZU1vZGUoKSkpKTsKICAgICAgICBpZiAoIWluX2FycmF5KCRtb2RlLCBbJ25vcm1hbCcsICdlbWJlZCcsICdlbWJlZF9vbmx5J10sIHRydWUpKSB7CiAgICAgICAgICAgICRtb2RlID0gJ2VtYmVkJzsKICAgICAgICB9CgogICAgICAgICRwYXlsb2FkID0gW107CiAgICAgICAgaWYgKCRtb2RlICE9PSAnZW1iZWRfb25seScpIHsKICAgICAgICAgICAgJHBheWxvYWRbJ2NvbnRlbnQnXSA9ICRtZXNzYWdlOwogICAgICAgIH0KCiAgICAgICAgJHVzZUVtYmVkID0gKCRtb2RlID09PSAnZW1iZWQnIHx8ICRtb2RlID09PSAnZW1iZWRfb25seScpOwogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCd1c2VfZW1iZWQnLCAkb3B0aW9ucykpIHsKICAgICAgICAgICAgJHVzZUVtYmVkID0gKGJvb2wpJG9wdGlvbnNbJ3VzZV9lbWJlZCddOwogICAgICAgIH0KICAgICAgICBpZiAoJHVzZUVtYmVkKSB7CiAgICAgICAgICAgICRlbWJlZFRpdGxlID0gdHJpbSgoc3RyaW5nKSgkb3B0aW9uc1snZW1iZWRfdGl0bGUnXSA/PyAkY29udGVudC0+dGl0bGUpKTsKICAgICAgICAgICAgJGVtYmVkRGVzY3JpcHRpb24gPSB0cmltKChzdHJpbmcpKCRvcHRpb25zWydlbWJlZF9kZXNjcmlwdGlvbiddID8/IG1iX3N1YnN0cihzdHJpcF90YWdzKCRjb250ZW50LT5zdW1tYXJ5KSwgMCwgMTgwMCkpKTsKICAgICAgICAgICAgJGVtYmVkVXJsID0gdHJpbSgoc3RyaW5nKSgkb3B0aW9uc1snZW1iZWRfdXJsJ10gPz8gJGNvbnRlbnQtPmNhbm9uaWNhbCkpOwogICAgICAgICAgICAkZW1iZWRGb290ZXIgPSB0cmltKChzdHJpbmcpKCRvcHRpb25zWydlbWJlZF9mb290ZXInXSA/PyAnJykpOwogICAgICAgICAgICAkZW1iZWRBdXRob3JOYW1lID0gdHJpbSgoc3RyaW5nKSgkb3B0aW9uc1snZW1iZWRfYXV0aG9yX25hbWUnXSA/PyAnJykpOwogICAgICAgICAgICAkZW1iZWRBdXRob3JVcmwgPSB0cmltKChzdHJpbmcpKCRvcHRpb25zWydlbWJlZF9hdXRob3JfdXJsJ10gPz8gJycpKTsKICAgICAgICAgICAgJGVtYmVkQXV0aG9ySWNvbiA9IHRyaW0oKHN0cmluZykoJG9wdGlvbnNbJ2VtYmVkX2F1dGhvcl9pY29uJ10gPz8gJycpKTsKICAgICAgICAgICAgJGVtYmVkVGh1bWJuYWlsVXJsID0gdHJpbSgoc3RyaW5nKSgkb3B0aW9uc1snZW1iZWRfdGh1bWJuYWlsX3VybCddID8/ICcnKSk7CiAgICAgICAgICAgICRlbWJlZEltYWdlVXJsID0gdHJpbSgoc3RyaW5nKSgkb3B0aW9uc1snZW1iZWRfaW1hZ2VfdXJsJ10gPz8gJycpKTsKICAgICAgICAgICAgJGVtYmVkQ29sb3JSYXcgPSB0cmltKChzdHJpbmcpKCRvcHRpb25zWydlbWJlZF9jb2xvciddID8/ICcnKSk7CiAgICAgICAgICAgICRlbWJlZENvbG9yID0gbnVsbDsKICAgICAgICAgICAgaWYgKCRlbWJlZENvbG9yUmF3ICE9PSAnJykgewogICAgICAgICAgICAgICAgJGVtYmVkQ29sb3JSYXcgPSBsdHJpbSgkZW1iZWRDb2xvclJhdywgJyMnKTsKICAgICAgICAgICAgICAgIGlmIChjdHlwZV94ZGlnaXQoJGVtYmVkQ29sb3JSYXcpKSB7CiAgICAgICAgICAgICAgICAgICAgJGVtYmVkQ29sb3IgPSBoZXhkZWMoJGVtYmVkQ29sb3JSYXcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkZW1iZWQgPSBbXTsKICAgICAgICAgICAgJGluY2x1ZGVUaXRsZSA9ICFhcnJheV9rZXlfZXhpc3RzKCdlbWJlZF9pbmNsdWRlX3RpdGxlJywgJG9wdGlvbnMpIHx8ICFlbXB0eSgkb3B0aW9uc1snZW1iZWRfaW5jbHVkZV90aXRsZSddKTsKICAgICAgICAgICAgJGluY2x1ZGVEZXNjcmlwdGlvbiA9ICFhcnJheV9rZXlfZXhpc3RzKCdlbWJlZF9pbmNsdWRlX2Rlc2NyaXB0aW9uJywgJG9wdGlvbnMpIHx8ICFlbXB0eSgkb3B0aW9uc1snZW1iZWRfaW5jbHVkZV9kZXNjcmlwdGlvbiddKTsKICAgICAgICAgICAgJGluY2x1ZGVVcmwgPSAhYXJyYXlfa2V5X2V4aXN0cygnZW1iZWRfaW5jbHVkZV91cmwnLCAkb3B0aW9ucykgfHwgIWVtcHR5KCRvcHRpb25zWydlbWJlZF9pbmNsdWRlX3VybCddKTsKICAgICAgICAgICAgJGluY2x1ZGVDb2xvciA9ICFhcnJheV9rZXlfZXhpc3RzKCdlbWJlZF9pbmNsdWRlX2NvbG9yJywgJG9wdGlvbnMpIHx8ICFlbXB0eSgkb3B0aW9uc1snZW1iZWRfaW5jbHVkZV9jb2xvciddKTsKICAgICAgICAgICAgJGluY2x1ZGVGb290ZXIgPSAhYXJyYXlfa2V5X2V4aXN0cygnZW1iZWRfaW5jbHVkZV9mb290ZXInLCAkb3B0aW9ucykgfHwgIWVtcHR5KCRvcHRpb25zWydlbWJlZF9pbmNsdWRlX2Zvb3RlciddKTsKICAgICAgICAgICAgJGluY2x1ZGVUaW1lc3RhbXAgPSAhYXJyYXlfa2V5X2V4aXN0cygnZW1iZWRfaW5jbHVkZV90aW1lc3RhbXAnLCAkb3B0aW9ucykgfHwgIWVtcHR5KCRvcHRpb25zWydlbWJlZF9pbmNsdWRlX3RpbWVzdGFtcCddKTsKICAgICAgICAgICAgJGluY2x1ZGVBdXRob3IgPSAhYXJyYXlfa2V5X2V4aXN0cygnZW1iZWRfaW5jbHVkZV9hdXRob3InLCAkb3B0aW9ucykgfHwgIWVtcHR5KCRvcHRpb25zWydlbWJlZF9pbmNsdWRlX2F1dGhvciddKTsKICAgICAgICAgICAgJGluY2x1ZGVUaHVtYm5haWwgPSAhYXJyYXlfa2V5X2V4aXN0cygnZW1iZWRfaW5jbHVkZV90aHVtYm5haWwnLCAkb3B0aW9ucykgfHwgIWVtcHR5KCRvcHRpb25zWydlbWJlZF9pbmNsdWRlX3RodW1ibmFpbCddKTsKICAgICAgICAgICAgJGluY2x1ZGVJbWFnZSA9ICFhcnJheV9rZXlfZXhpc3RzKCdlbWJlZF9pbmNsdWRlX2ltYWdlJywgJG9wdGlvbnMpIHx8ICFlbXB0eSgkb3B0aW9uc1snZW1iZWRfaW5jbHVkZV9pbWFnZSddKTsKICAgICAgICAgICAgJGhhc0R5bmFtaWNGaWVsZHMgPSBpc3NldCgkb3B0aW9uc1snZW1iZWRfZmllbGRzJ10pICYmIGlzX2FycmF5KCRvcHRpb25zWydlbWJlZF9maWVsZHMnXSkgJiYgY291bnQoJG9wdGlvbnNbJ2VtYmVkX2ZpZWxkcyddKSA+IDA7CiAgICAgICAgICAgICRpbmNsdWRlRmllbGRzID0gJGhhc0R5bmFtaWNGaWVsZHMgfHwgIWFycmF5X2tleV9leGlzdHMoJ2VtYmVkX2luY2x1ZGVfZmllbGRzJywgJG9wdGlvbnMpIHx8ICFlbXB0eSgkb3B0aW9uc1snZW1iZWRfaW5jbHVkZV9maWVsZHMnXSk7CgogICAgICAgICAgICBpZiAoJGluY2x1ZGVUaXRsZSAmJiAkZW1iZWRUaXRsZSAhPT0gJycpIHsKICAgICAgICAgICAgICAgICRlbWJlZFsndGl0bGUnXSA9ICRlbWJlZFRpdGxlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkaW5jbHVkZURlc2NyaXB0aW9uICYmICRlbWJlZERlc2NyaXB0aW9uICE9PSAnJykgewogICAgICAgICAgICAgICAgJGVtYmVkWydkZXNjcmlwdGlvbiddID0gJGVtYmVkRGVzY3JpcHRpb247CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRpbmNsdWRlVXJsICYmICRlbWJlZFVybCAhPT0gJycpIHsKICAgICAgICAgICAgICAgICRlbWJlZFsndXJsJ10gPSAkZW1iZWRVcmw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRpbmNsdWRlQ29sb3IgJiYgJGVtYmVkQ29sb3IgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRlbWJlZFsnY29sb3InXSA9ICRlbWJlZENvbG9yOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkaW5jbHVkZUZvb3RlciAmJiAkZW1iZWRGb290ZXIgIT09ICcnKSB7CiAgICAgICAgICAgICAgICAkZW1iZWRbJ2Zvb3RlciddID0gWyd0ZXh0JyA9PiAkZW1iZWRGb290ZXJdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkaW5jbHVkZUF1dGhvciAmJiAkZW1iZWRBdXRob3JOYW1lICE9PSAnJykgewogICAgICAgICAgICAgICAgJGVtYmVkWydhdXRob3InXSA9IFsnbmFtZScgPT4gJGVtYmVkQXV0aG9yTmFtZV07CiAgICAgICAgICAgICAgICBpZiAoJGVtYmVkQXV0aG9yVXJsICE9PSAnJykgewogICAgICAgICAgICAgICAgICAgICRlbWJlZFsnYXV0aG9yJ11bJ3VybCddID0gJGVtYmVkQXV0aG9yVXJsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRlbWJlZEF1dGhvckljb24gIT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgJGVtYmVkWydhdXRob3InXVsnaWNvbl91cmwnXSA9ICRlbWJlZEF1dGhvckljb247CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRpbmNsdWRlVGh1bWJuYWlsICYmICRlbWJlZFRodW1ibmFpbFVybCAhPT0gJycpIHsKICAgICAgICAgICAgICAgICRlbWJlZFsndGh1bWJuYWlsJ10gPSBbJ3VybCcgPT4gJGVtYmVkVGh1bWJuYWlsVXJsXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGluY2x1ZGVJbWFnZSAmJiAkZW1iZWRJbWFnZVVybCAhPT0gJycpIHsKICAgICAgICAgICAgICAgICRlbWJlZFsnaW1hZ2UnXSA9IFsndXJsJyA9PiAkZW1iZWRJbWFnZVVybF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRpbmNsdWRlRmllbGRzKSB7CiAgICAgICAgICAgICAgICAkZmllbGRzID0gW107CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2VtYmVkX2ZpZWxkcyddKSAmJiBpc19hcnJheSgkb3B0aW9uc1snZW1iZWRfZmllbGRzJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoYXJyYXlfc2xpY2UoJG9wdGlvbnNbJ2VtYmVkX2ZpZWxkcyddLCAwLCAyNSkgYXMgJHJvdykgewogICAgICAgICAgICAgICAgICAgICAgICAkZk5hbWUgPSB0cmltKChzdHJpbmcpKCRyb3dbJ25hbWUnXSA/PyAnJykpOwogICAgICAgICAgICAgICAgICAgICAgICAkZlZhbHVlID0gdHJpbSgoc3RyaW5nKSgkcm93Wyd2YWx1ZSddID8/ICcnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRmSW5saW5lID0gIWVtcHR5KCRyb3dbJ2lubGluZSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmTmFtZSA9PT0gJycgfHwgJGZWYWx1ZSA9PT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZHNbXSA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiBtYl9zdWJzdHIoJGZOYW1lLCAwLCAyNTYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyA9PiBtYl9zdWJzdHIoJGZWYWx1ZSwgMCwgMTAyNCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5saW5lJyA9PiAkZklubGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIG9sZGVyIHN0YXRpYyBmaWVsZCBpbnB1dHMuCiAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9IDE7ICRpIDw9IDM7ICRpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGZOYW1lID0gdHJpbSgoc3RyaW5nKSgkb3B0aW9uc1snZW1iZWRfZmllbGRfJyAuICRpIC4gJ19uYW1lJ10gPz8gJycpKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGZWYWx1ZSA9IHRyaW0oKHN0cmluZykoJG9wdGlvbnNbJ2VtYmVkX2ZpZWxkXycgLiAkaSAuICdfdmFsdWUnXSA/PyAnJykpOwogICAgICAgICAgICAgICAgICAgICAgICAkZklubGluZSA9ICFlbXB0eSgkb3B0aW9uc1snZW1iZWRfZmllbGRfJyAuICRpIC4gJ19pbmxpbmUnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZk5hbWUgIT09ICcnICYmICRmVmFsdWUgIT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmllbGRzW10gPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+IG1iX3N1YnN0cigkZk5hbWUsIDAsIDI1NiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyA9PiBtYl9zdWJzdHIoJGZWYWx1ZSwgMCwgMTAyNCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lubGluZScgPT4gJGZJbmxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkZmllbGRzKSkgewogICAgICAgICAgICAgICAgICAgICRlbWJlZFsnZmllbGRzJ10gPSAkZmllbGRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkaW5jbHVkZVRpbWVzdGFtcCAmJiAoJG9wdGlvbnNbJ2VtYmVkX3RpbWVzdGFtcCddID8/IHRydWUpICYmICFpc3NldCgkZW1iZWRbJ3RpbWVzdGFtcCddKSkgewogICAgICAgICAgICAgICAgJGVtYmVkWyd0aW1lc3RhbXAnXSA9IGRhdGUoREFURV9BVE9NKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWVtcHR5KCRlbWJlZCkpIHsKICAgICAgICAgICAgICAgICRwYXlsb2FkWydlbWJlZHMnXSA9IFskZW1iZWRdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KCRwYXlsb2FkWydjb250ZW50J10pICYmIGVtcHR5KCRwYXlsb2FkWydlbWJlZHMnXSkpIHsKICAgICAgICAgICAgJHBheWxvYWRbJ2NvbnRlbnQnXSA9ICRtZXNzYWdlICE9PSAnJyA/ICRtZXNzYWdlIDogJyAnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5wb3N0SnNvbigkd2ViaG9vaywgJHBheWxvYWQpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmVuZGVyVGVtcGxhdGUoc3RyaW5nICR0ZW1wbGF0ZSwgc2JfY29udGVudCAkY29udGVudCk6IHN0cmluZwogICAgewogICAgICAgICRzbWFydHkgPSBcQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+R2V0U21hcnR5KCk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdjb250ZW50JywgJGNvbnRlbnQpOwogICAgICAgIHJldHVybiB0cmltKCRzbWFydHktPmZldGNoKCdzdHJpbmc6JyAuICR0ZW1wbGF0ZSkpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcG9zdEpzb24oc3RyaW5nICR1cmwsIGFycmF5ICRwYXlsb2FkKTogYm9vbAogICAgewogICAgICAgICRjaCA9IGN1cmxfaW5pdCgkdXJsKTsKICAgICAgICAkYm9keSA9IGpzb25fZW5jb2RlKCRwYXlsb2FkLCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICAgICAgY3VybF9zZXRvcHRfYXJyYXkoJGNoLCBbCiAgICAgICAgICAgIENVUkxPUFRfUE9TVCA9PiB0cnVlLAogICAgICAgICAgICBDVVJMT1BUX1BPU1RGSUVMRFMgPT4gJGJvZHksCiAgICAgICAgICAgIENVUkxPUFRfSFRUUEhFQURFUiA9PiBbCiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aDogJyAuIHN0cmxlbigkYm9keSksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gdHJ1ZSwKICAgICAgICAgICAgQ1VSTE9QVF9USU1FT1VUID0+IChpbnQpICR0aGlzLT5jb25maWctPmdldCgnbWFzX3NvY2lhbHNfZGlzY29yZF90aW1lb3V0JywgMTApLAogICAgICAgIF0pOwoKICAgICAgICAkcmVzcG9uc2UgPSBjdXJsX2V4ZWMoJGNoKTsKICAgICAgICAkc3RhdHVzID0gY3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSk7CiAgICAgICAgJGVycm9yID0gY3VybF9lcnJvcigkY2gpOwogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKCiAgICAgICAgaWYgKCRyZXNwb25zZSA9PT0gZmFsc2UgfHwgJHN0YXR1cyA+PSA0MDApIHsKICAgICAgICAgICAgTG9nZ2VyOjpsb2coJ2Vycm9yJywgJ0Rpc2NvcmQgd2ViaG9vayBmYWlsdXJlJywgWwogICAgICAgICAgICAgICAgJ3N0YXR1cycgPT4gJHN0YXR1cywKICAgICAgICAgICAgICAgICdyZXNwb25zZScgPT4gJHJlc3BvbnNlLAogICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkZXJyb3IsCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBMb2dnZXI6OmxvZygnaW5mbycsICdEaXNjb3JkIHdlYmhvb2sgZGVsaXZlcmVkJywgWydzdGF0dXMnID0+ICRzdGF0dXNdKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQoK]]></data>
	</file>
	<file>
	  <filename>/lib/Services/FacebookPublisher.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KCm5hbWVzcGFjZSBNQVNfU29jaWFsc1xTZXJ2aWNlczsKCnVzZSBNQVNfU29jaWFsczsKdXNlIHNiX2NvbnRlbnQ7CgpjbGFzcyBGYWNlYm9va1B1Ymxpc2hlcgp7CiAgICBwcml2YXRlIE1BU19Tb2NpYWxzICRtb2R1bGU7CiAgICBwcml2YXRlIENvbmZpZ1JlcG9zaXRvcnkgJGNvbmZpZzsKICAgIHByaXZhdGUgc3RyaW5nICRsYXN0RXJyb3IgPSAnJzsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoTUFTX1NvY2lhbHMgJG1vZHVsZSwgQ29uZmlnUmVwb3NpdG9yeSAkY29uZmlnKQogICAgewogICAgICAgICR0aGlzLT5tb2R1bGUgPSAkbW9kdWxlOwogICAgICAgICR0aGlzLT5jb25maWcgPSAkY29uZmlnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc0NvbmZpZ3VyZWQoKTogYm9vbAogICAgewogICAgICAgICRjZmcgPSAkdGhpcy0+Y29uZmlnLT5nZXRGYWNlYm9va0NvbmZpZygpOwogICAgICAgICR0b2tlbiA9ICR0aGlzLT5yZXNvbHZlQWNjZXNzVG9rZW4oJGNmZyk7CiAgICAgICAgcmV0dXJuICR0b2tlbiAhPT0gJycgJiYgJGNmZ1sncGFnZV9pZCddICE9PSAnJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcHVibGlzaChzYl9jb250ZW50ICRjb250ZW50LCBzdHJpbmcgJHRlbXBsYXRlKTogYm9vbAogICAgewogICAgICAgICR0aGlzLT5sYXN0RXJyb3IgPSAnJzsKICAgICAgICAkY2ZnID0gJHRoaXMtPmNvbmZpZy0+Z2V0RmFjZWJvb2tDb25maWcoKTsKICAgICAgICBpZiAoISR0aGlzLT5pc0NvbmZpZ3VyZWQoKSkgewogICAgICAgICAgICAkdGhpcy0+bGFzdEVycm9yID0gJ0ZhY2Vib29rIHBhZ2UgSUQgb3IgYWNjZXNzIHRva2VuIGlzIG1pc3NpbmcuJzsKICAgICAgICAgICAgTG9nZ2VyOjpsb2coJ3dhcm5pbmcnLCAnRmFjZWJvb2sgY3JlZGVudGlhbHMgbWlzc2luZycpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkbWVzc2FnZSA9ICR0aGlzLT5yZW5kZXJUZW1wbGF0ZSgkdGVtcGxhdGUsICRjb250ZW50KTsKICAgICAgICAkcmVzb2x2ZWRUb2tlbiA9ICR0aGlzLT5yZXNvbHZlQWNjZXNzVG9rZW4oJGNmZyk7CiAgICAgICAgaWYgKCRyZXNvbHZlZFRva2VuID09PSAnJykgewogICAgICAgICAgICAkdGhpcy0+bGFzdEVycm9yID0gJ0ZhY2Vib29rIHRva2VuIGlzIG1pc3NpbmcgZm9yIHNlbGVjdGVkIHRva2VuIG1vZGUuJzsKICAgICAgICAgICAgTG9nZ2VyOjpsb2coJ3dhcm5pbmcnLCAnRmFjZWJvb2sgdG9rZW4gbWlzc2luZyBmb3IgbW9kZScsIFsKICAgICAgICAgICAgICAgICd0b2tlbl9tb2RlJyA9PiAoc3RyaW5nKSgkY2ZnWyd0b2tlbl9tb2RlJ10gPz8gJycpLAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkcGF5bG9hZCA9IFsKICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICRtZXNzYWdlLAogICAgICAgICAgICAnbGluaycgPT4gJGNvbnRlbnQtPmNhbm9uaWNhbCwKICAgICAgICAgICAgJ2FjY2Vzc190b2tlbicgPT4gJHJlc29sdmVkVG9rZW4sCiAgICAgICAgXTsKICAgICAgICBpZiAoJGNmZ1snYXBwX3NlY3JldCddICE9PSAnJykgewogICAgICAgICAgICAkcGF5bG9hZFsnYXBwc2VjcmV0X3Byb29mJ10gPSBoYXNoX2htYWMoJ3NoYTI1NicsICRyZXNvbHZlZFRva2VuLCAkY2ZnWydhcHBfc2VjcmV0J10pOwogICAgICAgIH0KCiAgICAgICAgJGVuZHBvaW50ID0gc3ByaW50ZigKICAgICAgICAgICAgJ2h0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tLyVzLyVzL2ZlZWQnLAogICAgICAgICAgICByYXd1cmxlbmNvZGUoJGNmZ1snYXBpX3ZlcnNpb24nXSA/OiAndjI1LjAnKSwKICAgICAgICAgICAgcmF3dXJsZW5jb2RlKCRjZmdbJ3BhZ2VfaWQnXSkKICAgICAgICApOwoKICAgICAgICAkY2ggPSBjdXJsX2luaXQoJGVuZHBvaW50KTsKICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsIFsKICAgICAgICAgICAgQ1VSTE9QVF9QT1NUID0+IHRydWUsCiAgICAgICAgICAgIENVUkxPUFRfUE9TVEZJRUxEUyA9PiBodHRwX2J1aWxkX3F1ZXJ5KCRwYXlsb2FkKSwKICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiB0cnVlLAogICAgICAgICAgICBDVVJMT1BUX1RJTUVPVVQgPT4gMTUsCiAgICAgICAgXSk7CgogICAgICAgICRyZXNwb25zZSA9IGN1cmxfZXhlYygkY2gpOwogICAgICAgICRzdGF0dXMgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19SRVNQT05TRV9DT0RFKTsKICAgICAgICAkZXJyb3IgPSBjdXJsX2Vycm9yKCRjaCk7CiAgICAgICAgY3VybF9jbG9zZSgkY2gpOwoKICAgICAgICBpZiAoJHJlc3BvbnNlID09PSBmYWxzZSB8fCAkc3RhdHVzID49IDQwMCkgewogICAgICAgICAgICAkZGVjb2RlZCA9IGpzb25fZGVjb2RlKChzdHJpbmcpICRyZXNwb25zZSwgdHJ1ZSk7CiAgICAgICAgICAgICRhcGlFcnJvciA9ICcnOwogICAgICAgICAgICBpZiAoaXNzZXQoJGRlY29kZWRbJ2Vycm9yJ11bJ21lc3NhZ2UnXSkpIHsKICAgICAgICAgICAgICAgICRhcGlFcnJvciA9IChzdHJpbmcpICRkZWNvZGVkWydlcnJvciddWydtZXNzYWdlJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmxhc3RFcnJvciA9IHRyaW0oKCRhcGlFcnJvciA/OiAnRmFjZWJvb2sgQVBJIHJlcXVlc3QgZmFpbGVkJykgLiAoJGVycm9yID8gJyAoJyAuICRlcnJvciAuICcpJyA6ICcnKSk7CiAgICAgICAgICAgIExvZ2dlcjo6bG9nKCdlcnJvcicsICdGYWNlYm9vayBwdWJsaXNoIGZhaWxlZCcsIFsKICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICRzdGF0dXMsCiAgICAgICAgICAgICAgICAnZXJyb3InID0+ICRlcnJvciwKICAgICAgICAgICAgICAgICdyZXNwb25zZScgPT4gJHJlc3BvbnNlLAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgTG9nZ2VyOjpsb2coJ2luZm8nLCAnRmFjZWJvb2sgcG9zdCBjcmVhdGVkJywgWydzdGF0dXMnID0+ICRzdGF0dXNdKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlKHN0cmluZyAkdGVtcGxhdGUsIHNiX2NvbnRlbnQgJGNvbnRlbnQpOiBzdHJpbmcKICAgIHsKICAgICAgICAkc21hcnR5ID0gXENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldFNtYXJ0eSgpOwogICAgICAgICRzbWFydHktPmFzc2lnbignY29udGVudCcsICRjb250ZW50KTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2ZhY2Vib29rJywgJHRoaXMtPmNvbmZpZy0+Z2V0RmFjZWJvb2tDb25maWcoKSk7CiAgICAgICAgcmV0dXJuIHRyaW0oJHNtYXJ0eS0+ZmV0Y2goJ3N0cmluZzonIC4gJHRlbXBsYXRlKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RFcnJvcigpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmxhc3RFcnJvcjsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlc29sdmVBY2Nlc3NUb2tlbihhcnJheSAkY2ZnKTogc3RyaW5nCiAgICB7CiAgICAgICAgJG1vZGUgPSBzdHJ0b2xvd2VyKHRyaW0oKHN0cmluZykoJGNmZ1sndG9rZW5fbW9kZSddID8/ICdvYXV0aF91c2VyX3BhZ2UnKSkpOwogICAgICAgIGlmICgkbW9kZSA9PT0gJ3N5c3RlbV91c2VyJykgewogICAgICAgICAgICAkc3lzdGVtVG9rZW4gPSB0cmltKChzdHJpbmcpKCRjZmdbJ3N5c3RlbV91c2VyX3Rva2VuJ10gPz8gJycpKTsKICAgICAgICAgICAgaWYgKCRzeXN0ZW1Ub2tlbiAhPT0gJycpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkc3lzdGVtVG9rZW47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQmFja3dhcmQtY29tcGF0aWJsZSBmYWxsYmFjazogaWYgc3lzdGVtIHRva2VuIGZpZWxkIGlzIGVtcHR5LCB1c2UgbGVnYWN5IGFjY2VzcyB0b2tlbiBmaWVsZC4KICAgICAgICAgICAgcmV0dXJuIHRyaW0oKHN0cmluZykoJGNmZ1snYWNjZXNzX3Rva2VuJ10gPz8gJycpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRyaW0oKHN0cmluZykoJGNmZ1snYWNjZXNzX3Rva2VuJ10gPz8gJycpKTsKICAgIH0KfQoK]]></data>
	</file>
	<file>
	  <filename>/lib/Services/Logger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KCm5hbWVzcGFjZSBNQVNfU29jaWFsc1xTZXJ2aWNlczsKCnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKY2xhc3MgTG9nZ2VyCnsKICAgIHByaXZhdGUgY29uc3QgTE9HX0ZJTEUgPSAnbWFzX3NvY2lhbHMubG9nJzsKICAgIHByaXZhdGUgY29uc3QgTUFYX0JZVEVTID0gNTI0Mjg4MDsgLy8gNU1CIGhhcmQgbGltaXQKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvZyhzdHJpbmcgJGxldmVsLCBzdHJpbmcgJG1lc3NhZ2UsIGFycmF5ICRjb250ZXh0ID0gW10pOiB2b2lkCiAgICB7CiAgICAgICAgJGNmZyA9IFxjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICAkbG9nRGlyID0gY21zX2pvaW5fcGF0aCgkY2ZnWydyb290X3BhdGgnXSwgJ2xvZ3MnKTsKICAgICAgICBpZiAoIWlzX2RpcigkbG9nRGlyKSAmJiAhQG1rZGlyKCRsb2dEaXIsIDA3NTUsIHRydWUpICYmICFpc19kaXIoJGxvZ0RpcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byBjcmVhdGUgTUFTX1NvY2lhbHMgbG9nIGRpcmVjdG9yeScpOwogICAgICAgIH0KCiAgICAgICAgJGxpbmUgPSBzcHJpbnRmKAogICAgICAgICAgICAnWyVzXSBbJXNdICVzICVzJXMnLAogICAgICAgICAgICBkYXRlKCdZLW0tZCBIOmk6cycpLAogICAgICAgICAgICBzdHJ0b3VwcGVyKCRsZXZlbCksCiAgICAgICAgICAgIHNlbGY6Om1hc2tTZWNyZXRzKCRtZXNzYWdlKSwKICAgICAgICAgICAgJGNvbnRleHQgPyBqc29uX2VuY29kZShzZWxmOjptYXNrU2VjcmV0cygkY29udGV4dCksIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMpIDogJycsCiAgICAgICAgICAgIFBIUF9FT0wKICAgICAgICApOwoKICAgICAgICAkcGF0aCA9IGNtc19qb2luX3BhdGgoJGxvZ0Rpciwgc2VsZjo6TE9HX0ZJTEUpOwogICAgICAgIHNlbGY6OnJvdGF0ZUlmTmVlZGVkKCRwYXRoKTsKCiAgICAgICAgJGZoID0gZm9wZW4oJHBhdGgsICdhYicpOwogICAgICAgIGlmICghJGZoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gb3BlbiBNQVNfU29jaWFscyBsb2cgZmlsZSBmb3Igd3JpdGluZycpOwogICAgICAgIH0KCiAgICAgICAgZndyaXRlKCRmaCwgJGxpbmUpOwogICAgICAgIGZjbG9zZSgkZmgpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJvdGF0ZUlmTmVlZGVkKHN0cmluZyAkcGF0aCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkc2l6ZSA9IGZpbGVzaXplKCRwYXRoKTsKICAgICAgICBpZiAoJHNpemUgIT09IGZhbHNlICYmICRzaXplID4gc2VsZjo6TUFYX0JZVEVTKSB7CiAgICAgICAgICAgICRhcmNoaXZlID0gJHBhdGggLiAnLicgLiBkYXRlKCdZbWRIaXMnKTsKICAgICAgICAgICAgQHJlbmFtZSgkcGF0aCwgJGFyY2hpdmUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlY3Vyc2l2ZWx5IG1hc2sgc2Vuc2l0aXZlIHZhbHVlcyBiZWZvcmUgbG9nZ2luZy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG1hc2tTZWNyZXRzKCR2YWx1ZSkKICAgIHsKICAgICAgICAkc2Vuc2l0aXZlS2V5cyA9IFsKICAgICAgICAgICAgJ3Rva2VuJywKICAgICAgICAgICAgJ3NlY3JldCcsCiAgICAgICAgICAgICdhY2Nlc3NfdG9rZW4nLAogICAgICAgICAgICAnYXBwX3NlY3JldCcsCiAgICAgICAgICAgICd3ZWJob29rJywKICAgICAgICAgICAgJ3Bhc3N3b3JkJywKICAgICAgICBdOwoKICAgICAgICBpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAkc2FuaXRpemVkID0gW107CiAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZSBhcyAka2V5ID0+ICR2YWwpIHsKICAgICAgICAgICAgICAgIGlmIChpc19zdHJpbmcoJGtleSkgJiYgaW5fYXJyYXkoc3RydG9sb3dlcigka2V5KSwgJHNlbnNpdGl2ZUtleXMsIHRydWUpKSB7CiAgICAgICAgICAgICAgICAgICAgJHNhbml0aXplZFska2V5XSA9ICdbcmVkYWN0ZWRdJzsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRzYW5pdGl6ZWRbJGtleV0gPSBzZWxmOjptYXNrU2VjcmV0cygkdmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJHNhbml0aXplZDsKICAgICAgICB9CgogICAgICAgIGlmIChpc19zdHJpbmcoJHZhbHVlKSAmJiBzdHJsZW4oJHZhbHVlKSA+IDEyOCkgewogICAgICAgICAgICByZXR1cm4gc3Vic3RyKCR2YWx1ZSwgMCwgNjQpIC4gJ+KApic7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/lib/Services/TestService.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRlc3QgU2VydmljZSBmb3IgTUFTX1NvY2lhbHMKICoKICogQHBhY2thZ2UgTUFTX1NvY2lhbHMKICogQGF1dGhvciBtYXN0ZXIzMzk1CiAqIEBjb3B5cmlnaHQgMjAyNSBtYXN0ZXIzMzk1CiAqIEBsaWNlbnNlIEdQTC0zLjAtb3ItbGF0ZXIKICovCgpuYW1lc3BhY2UgTUFTX1NvY2lhbHNcU2VydmljZXM7Cgp1c2UgTUFTX1NvY2lhbHM7CnVzZSBzYl9jb250ZW50OwoKY2xhc3MgVGVzdFNlcnZpY2UKewogICAgcHJpdmF0ZSBNQVNfU29jaWFscyAkbW9kdWxlOwogICAgcHJpdmF0ZSBDb25maWdSZXBvc2l0b3J5ICRjb25maWc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KE1BU19Tb2NpYWxzICRtb2R1bGUsIENvbmZpZ1JlcG9zaXRvcnkgJGNvbmZpZykKICAgIHsKICAgICAgICAkdGhpcy0+bW9kdWxlID0gJG1vZHVsZTsKICAgICAgICAkdGhpcy0+Y29uZmlnID0gJGNvbmZpZzsKICAgIH0KCiAgICAvKioKICAgICAqIFRlc3QgRGlzY29yZCB3ZWJob29rCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RGlzY29yZCgpOiBhcnJheQogICAgewogICAgICAgICR3ZWJob29rID0gJHRoaXMtPmNvbmZpZy0+Z2V0RGlzY29yZFdlYmhvb2soKTsKICAgICAgICBpZiAoISR3ZWJob29rKSB7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ0Rpc2NvcmQgd2ViaG9vayBpcyBub3QgY29uZmlndXJlZCcsCiAgICAgICAgICAgIF07CiAgICAgICAgfQoKICAgICAgICAkdGVzdENvbnRlbnQgPSBuZXcgc2JfY29udGVudCgpOwogICAgICAgICR0ZXN0Q29udGVudC0+dGl0bGUgPSAnVGVzdCBNZXNzYWdlIGZyb20gTUFTX1NvY2lhbHMnOwogICAgICAgICR0ZXN0Q29udGVudC0+c3VtbWFyeSA9ICdUaGlzIGlzIGEgdGVzdCBtZXNzYWdlIHRvIHZlcmlmeSBEaXNjb3JkIGludGVncmF0aW9uIGlzIHdvcmtpbmcgY29ycmVjdGx5Lic7CiAgICAgICAgJHRlc3RDb250ZW50LT5jYW5vbmljYWwgPSAnaHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tJzsKCiAgICAgICAgJG5vdGlmaWVyID0gbmV3IERpc2NvcmROb3RpZmllcigkdGhpcy0+bW9kdWxlLCAkdGhpcy0+Y29uZmlnKTsKICAgICAgICAkcmVzdWx0ID0gJG5vdGlmaWVyLT5zZW5kKCR0ZXN0Q29udGVudCwgJ3skY29udGVudC0+dGl0bGV9IC0geyRjb250ZW50LT5jYW5vbmljYWx9Jyk7CgogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdzdWNjZXNzJyA9PiAkcmVzdWx0LAogICAgICAgICAgICAnbWVzc2FnZScgPT4gJHJlc3VsdCA/ICdUZXN0IG1lc3NhZ2Ugc2VudCBzdWNjZXNzZnVsbHkgdG8gRGlzY29yZCcgOiAnRmFpbGVkIHRvIHNlbmQgdGVzdCBtZXNzYWdlIHRvIERpc2NvcmQnLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBUZXN0IEZhY2Vib29rIHBvc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RGYWNlYm9vaygpOiBhcnJheQogICAgewogICAgICAgICRmYkNvbmZpZyA9ICR0aGlzLT5jb25maWctPmdldEZhY2Vib29rQ29uZmlnKCk7CiAgICAgICAgJHRva2VuTW9kZSA9IHN0cnRvbG93ZXIodHJpbSgoc3RyaW5nKSgkZmJDb25maWdbJ3Rva2VuX21vZGUnXSA/PyAnb2F1dGhfdXNlcl9wYWdlJykpKTsKICAgICAgICAkZWZmZWN0aXZlVG9rZW4gPSB0cmltKChzdHJpbmcpKCRmYkNvbmZpZ1snYWNjZXNzX3Rva2VuJ10gPz8gJycpKTsKICAgICAgICBpZiAoJHRva2VuTW9kZSA9PT0gJ3N5c3RlbV91c2VyJykgewogICAgICAgICAgICAkc3lzdGVtVG9rZW4gPSB0cmltKChzdHJpbmcpKCRmYkNvbmZpZ1snc3lzdGVtX3VzZXJfdG9rZW4nXSA/PyAnJykpOwogICAgICAgICAgICAkZWZmZWN0aXZlVG9rZW4gPSAkc3lzdGVtVG9rZW4gIT09ICcnID8gJHN5c3RlbVRva2VuIDogJGVmZmVjdGl2ZVRva2VuOwogICAgICAgIH0KICAgICAgICBpZiAoJGVmZmVjdGl2ZVRva2VuID09PSAnJyB8fCBlbXB0eSgkZmJDb25maWdbJ3BhZ2VfaWQnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnRmFjZWJvb2sgdG9rZW4gb3IgcGFnZSBJRCBpcyBub3QgY29uZmlndXJlZCBmb3IgdGhlIHNlbGVjdGVkIG1vZGUgKCcgLiAkdG9rZW5Nb2RlIC4gJyknLAogICAgICAgICAgICBdOwogICAgICAgIH0KCiAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBwb3N0aW5nIHdpdGggYSB0b2tlbiB0aGF0IGNhbm5vdCBzZWUgYW55IG1hbmFnZWQgcGFnZXMuCiAgICAgICAgLy8gVGhpcyBhdm9pZHMgb3BhcXVlICIoIzEwMCkgZ2xvYmFsIGlkIGlzIG5vdCBhbGxvd2VkIiBmYWlsdXJlcyBhbmQgcHJvdmlkZXMgY29uY3JldGUgbmV4dCBzdGVwcy4KICAgICAgICAkbWFuYWdlZFBhZ2VzQ2hlY2sgPSAkdGhpcy0+Z2V0RmFjZWJvb2tNYW5hZ2VkUGFnZXNDaGVjaygkZmJDb25maWcsICRlZmZlY3RpdmVUb2tlbik7CiAgICAgICAgaWYgKCR0b2tlbk1vZGUgPT09ICdvYXV0aF91c2VyX3BhZ2UnKSB7CiAgICAgICAgICAgIGlmICghJG1hbmFnZWRQYWdlc0NoZWNrWydzdWNjZXNzJ10pIHsKICAgICAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnRmFjZWJvb2sgT0F1dGggcHJlLWNoZWNrIGZhaWxlZDogJyAuICRtYW5hZ2VkUGFnZXNDaGVja1snbWVzc2FnZSddCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJyBGaXg6IHJ1biBPQXV0aCBhZ2FpbiB3aXRoIHBhZ2VzX3Nob3dfbGlzdCArIHBhZ2VzX3JlYWRfZW5nYWdlbWVudCArIHBhZ2VzX21hbmFnZV9wb3N0cywgbG9naW4gYXMgYSBQYWdlIGFkbWluL2VkaXRvciwgdGhlbiBjbGljayBEaXNjb3ZlciBNYW5hZ2VkIFBhZ2VzIGFuZCBzYXZlIHRoZSBkaXNjb3ZlcmVkIFBhZ2UgSUQvdG9rZW4uJywKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKChpbnQpJG1hbmFnZWRQYWdlc0NoZWNrWydjb3VudCddID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ0ZhY2Vib29rIE9BdXRoIHByZS1jaGVjayBmYWlsZWQ6IC9tZS9hY2NvdW50cyByZXR1cm5lZCAwIG1hbmFnZWQgcGFnZXMuICcKICAgICAgICAgICAgICAgICAgICAgICAgLiAnRml4OiB1c2UgT0F1dGggd2l0aCBwYWdlc19zaG93X2xpc3QgKyBwYWdlc19yZWFkX2VuZ2FnZW1lbnQgKyBwYWdlc19tYW5hZ2VfcG9zdHMsIGxvZ2luIGFzIGFkbWluL2VkaXRvciBvZiB0aGUgdGFyZ2V0IFBhZ2UsIGdyYW50IHBhZ2UgYWNjZXNzLCB0aGVuIGNsaWNrIERpc2NvdmVyIE1hbmFnZWQgUGFnZXMgYW5kIHNhdmUuJywKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0ZXN0Q29udGVudCA9IG5ldyBzYl9jb250ZW50KCk7CiAgICAgICAgJHRlc3RDb250ZW50LT50aXRsZSA9ICdUZXN0IFBvc3QgZnJvbSBNQVNfU29jaWFscyc7CiAgICAgICAgJHRlc3RDb250ZW50LT5zdW1tYXJ5ID0gJ1RoaXMgaXMgYSB0ZXN0IHBvc3QgdG8gdmVyaWZ5IEZhY2Vib29rIGludGVncmF0aW9uIGlzIHdvcmtpbmcgY29ycmVjdGx5Lic7CiAgICAgICAgJHRlc3RDb250ZW50LT5jYW5vbmljYWwgPSAnaHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tJzsKCiAgICAgICAgJHB1Ymxpc2hlciA9IG5ldyBGYWNlYm9va1B1Ymxpc2hlcigkdGhpcy0+bW9kdWxlLCAkdGhpcy0+Y29uZmlnKTsKICAgICAgICAkcmVzdWx0ID0gJHB1Ymxpc2hlci0+cHVibGlzaCgkdGVzdENvbnRlbnQsICd7JGNvbnRlbnQtPnN1bW1hcnl9IHskY29udGVudC0+Y2Fub25pY2FsfScpOwogICAgICAgICRkZXRhaWxzID0gbWV0aG9kX2V4aXN0cygkcHVibGlzaGVyLCAnZ2V0TGFzdEVycm9yJykgPyB0cmltKChzdHJpbmcpICRwdWJsaXNoZXItPmdldExhc3RFcnJvcigpKSA6ICcnOwoKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnc3VjY2VzcycgPT4gJHJlc3VsdCwKICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICRyZXN1bHQKICAgICAgICAgICAgICAgID8gJ1Rlc3QgcG9zdCBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IHRvIEZhY2Vib29rJwogICAgICAgICAgICAgICAgOiAnRmFpbGVkIHRvIHB1Ymxpc2ggdGVzdCBwb3N0IHRvIEZhY2Vib29rJyAuICgkZGV0YWlscyAhPT0gJycgPyAnOiAnIC4gJGRldGFpbHMgOiAnJyksCiAgICAgICAgXTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlhZ25vc2VGYWNlYm9vaygpOiBhcnJheQogICAgewogICAgICAgICRjZmcgPSAkdGhpcy0+Y29uZmlnLT5nZXRGYWNlYm9va0NvbmZpZygpOwogICAgICAgICR0b2tlbk1vZGUgPSBzdHJ0b2xvd2VyKHRyaW0oKHN0cmluZykoJGNmZ1sndG9rZW5fbW9kZSddID8/ICdvYXV0aF91c2VyX3BhZ2UnKSkpOwogICAgICAgICRhY2Nlc3NUb2tlbiA9ICR0aGlzLT5yZXNvbHZlRmFjZWJvb2tBY2Nlc3NUb2tlbigkY2ZnKTsKICAgICAgICBpZiAoJGFjY2Vzc1Rva2VuID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IGZhbHNlLAogICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICdGYWNlYm9vayB0b2tlbiBpcyBtaXNzaW5nIGZvciBkaWFnbm9zdGljcyBpbiBtb2RlOiAnIC4gJHRva2VuTW9kZSwKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgICRhcGlWZXJzaW9uID0gdHJpbSgoc3RyaW5nKSgkY2ZnWydhcGlfdmVyc2lvbiddID86ICd2MjUuMCcpKTsKICAgICAgICAkYXBwU2VjcmV0UHJvb2YgPSAnJzsKICAgICAgICBpZiAoIWVtcHR5KCRjZmdbJ2FwcF9zZWNyZXQnXSkpIHsKICAgICAgICAgICAgJGFwcFNlY3JldFByb29mID0gaGFzaF9obWFjKCdzaGEyNTYnLCAkYWNjZXNzVG9rZW4sIChzdHJpbmcpJGNmZ1snYXBwX3NlY3JldCddKTsKICAgICAgICB9CiAgICAgICAgJGJhc2VQYXJhbXMgPSAnYWNjZXNzX3Rva2VuPScgLiByYXd1cmxlbmNvZGUoJGFjY2Vzc1Rva2VuKTsKICAgICAgICBpZiAoJGFwcFNlY3JldFByb29mICE9PSAnJykgewogICAgICAgICAgICAkYmFzZVBhcmFtcyAuPSAnJmFwcHNlY3JldF9wcm9vZj0nIC4gcmF3dXJsZW5jb2RlKCRhcHBTZWNyZXRQcm9vZik7CiAgICAgICAgfQoKICAgICAgICAkYWNjb3VudHNSZXNwID0gJHRoaXMtPmh0dHBHZXQoc3ByaW50ZigKICAgICAgICAgICAgJ2h0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tLyVzL21lL2FjY291bnRzP2ZpZWxkcz1pZCxuYW1lLHBlcm1zJiVzJywKICAgICAgICAgICAgcmF3dXJsZW5jb2RlKCRhcGlWZXJzaW9uKSwKICAgICAgICAgICAgJGJhc2VQYXJhbXMKICAgICAgICApKTsKCiAgICAgICAgJHBhZ2VJZCA9IHRyaW0oKHN0cmluZykoJGNmZ1sncGFnZV9pZCddID86ICcnKSk7CiAgICAgICAgJG1ldGFkYXRhUmVzcCA9IFsnc3RhdHVzJyA9PiAwLCAnYm9keScgPT4gJycsICdzdWNjZXNzJyA9PiBmYWxzZV07CiAgICAgICAgJHBvc3RSZXNwID0gWydzdGF0dXMnID0+IDAsICdib2R5JyA9PiAnJywgJ3N1Y2Nlc3MnID0+IGZhbHNlXTsKICAgICAgICBpZiAoJHBhZ2VJZCAhPT0gJycpIHsKICAgICAgICAgICAgJG1ldGFkYXRhUmVzcCA9ICR0aGlzLT5odHRwR2V0KHNwcmludGYoCiAgICAgICAgICAgICAgICAnaHR0cHM6Ly9ncmFwaC5mYWNlYm9vay5jb20vJXMvJXM/ZmllbGRzPWlkLG5hbWUmJXMnLAogICAgICAgICAgICAgICAgcmF3dXJsZW5jb2RlKCRhcGlWZXJzaW9uKSwKICAgICAgICAgICAgICAgIHJhd3VybGVuY29kZSgkcGFnZUlkKSwKICAgICAgICAgICAgICAgICRiYXNlUGFyYW1zCiAgICAgICAgICAgICkpOwoKICAgICAgICAgICAgJHBheWxvYWQgPSBbCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ01BU19Tb2NpYWxzIGRpYWdub3N0aWMgcGVybWlzc2lvbiBwcm9iZScsCiAgICAgICAgICAgICAgICAnbGluaycgPT4gJ2h0dHBzOi8vbmV3c3RhcmdldGVkLmNvbScsCiAgICAgICAgICAgICAgICAnYWNjZXNzX3Rva2VuJyA9PiAkYWNjZXNzVG9rZW4sCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGlmICgkYXBwU2VjcmV0UHJvb2YgIT09ICcnKSB7CiAgICAgICAgICAgICAgICAkcGF5bG9hZFsnYXBwc2VjcmV0X3Byb29mJ10gPSAkYXBwU2VjcmV0UHJvb2Y7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHBvc3RSZXNwID0gJHRoaXMtPmh0dHBQb3N0Rm9ybShzcHJpbnRmKAogICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tLyVzLyVzL2ZlZWQnLAogICAgICAgICAgICAgICAgcmF3dXJsZW5jb2RlKCRhcGlWZXJzaW9uKSwKICAgICAgICAgICAgICAgIHJhd3VybGVuY29kZSgkcGFnZUlkKQogICAgICAgICAgICApLCAkcGF5bG9hZCk7CiAgICAgICAgfQoKICAgICAgICAkYWNjb3VudHMgPSBqc29uX2RlY29kZSgoc3RyaW5nKSAkYWNjb3VudHNSZXNwWydib2R5J10sIHRydWUpOwogICAgICAgICRtZXRhID0ganNvbl9kZWNvZGUoKHN0cmluZykgJG1ldGFkYXRhUmVzcFsnYm9keSddLCB0cnVlKTsKICAgICAgICAkcG9zdCA9IGpzb25fZGVjb2RlKChzdHJpbmcpICRwb3N0UmVzcFsnYm9keSddLCB0cnVlKTsKICAgICAgICAkYWNjb3VudHNDb3VudCA9IDA7CiAgICAgICAgaWYgKGlzc2V0KCRhY2NvdW50c1snZGF0YSddKSAmJiBpc19hcnJheSgkYWNjb3VudHNbJ2RhdGEnXSkpIHsKICAgICAgICAgICAgJGFjY291bnRzQ291bnQgPSBjb3VudCgkYWNjb3VudHNbJ2RhdGEnXSk7CiAgICAgICAgfQogICAgICAgICRhY2NvdW50c01zZyA9ICRhY2NvdW50c1snZXJyb3InXVsnbWVzc2FnZSddID8/ICgibWFuYWdlZF9wYWdlcz17JGFjY291bnRzQ291bnR9Iik7CiAgICAgICAgJG1ldGFNc2cgPSAkbWV0YVsnZXJyb3InXVsnbWVzc2FnZSddID8/ICgkcGFnZUlkICE9PSAnJyA/ICdtZXRhZGF0YSBvaycgOiAnbWV0YWRhdGEgc2tpcHBlZCAocGFnZV9pZCBtaXNzaW5nKScpOwogICAgICAgICRwb3N0TXNnID0gJHBvc3RbJ2Vycm9yJ11bJ21lc3NhZ2UnXSA/PyAoJHBhZ2VJZCAhPT0gJycgPyAncG9zdCBvaycgOiAncG9zdCBza2lwcGVkIChwYWdlX2lkIG1pc3NpbmcpJyk7CgogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ21lc3NhZ2UnID0+IHNwcmludGYoCiAgICAgICAgICAgICAgICAnRmFjZWJvb2sgZGlhZ25vc3RpY3MgKG1vZGU9JXMpOiBhY2NvdW50cz0lcyAoSFRUUCAlZCksIG1ldGFkYXRhPSVzIChIVFRQICVkKSwgcG9zdD0lcyAoSFRUUCAlZCkuIE9BdXRoIG1vZGUgcmVxdWlyZXMgYSBQYWdlIEFjY2VzcyBUb2tlbiB0aGF0IGNhbiBsaXN0IHRoZSBwYWdlIGluIC9tZS9hY2NvdW50cyBhbmQgaGFzIHBhZ2VzX3JlYWRfZW5nYWdlbWVudCArIHBhZ2VzX21hbmFnZV9wb3N0cy4gU3lzdGVtIFVzZXIgbW9kZSByZXF1aXJlcyBwYWdlIGFzc2V0IGFzc2lnbm1lbnQgKyBwYWdlc19tYW5hZ2VfcG9zdHMgZm9yIHRoZSBzeXN0ZW0gdXNlciB0b2tlbi4nLAogICAgICAgICAgICAgICAgJHRva2VuTW9kZSwKICAgICAgICAgICAgICAgICRhY2NvdW50c01zZywKICAgICAgICAgICAgICAgIChpbnQpICRhY2NvdW50c1Jlc3BbJ3N0YXR1cyddLAogICAgICAgICAgICAgICAgJG1ldGFNc2csCiAgICAgICAgICAgICAgICAoaW50KSAkbWV0YWRhdGFSZXNwWydzdGF0dXMnXSwKICAgICAgICAgICAgICAgICRwb3N0TXNnLAogICAgICAgICAgICAgICAgKGludCkgJHBvc3RSZXNwWydzdGF0dXMnXQogICAgICAgICAgICApLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBEaXNjb3ZlciBGYWNlYm9vayBwYWdlcyBhdmFpbGFibGUgZm9yIGN1cnJlbnRseSBjb25maWd1cmVkIHRva2VuLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzY292ZXJGYWNlYm9va1BhZ2VzKCk6IGFycmF5CiAgICB7CiAgICAgICAgJGNmZyA9ICR0aGlzLT5jb25maWctPmdldEZhY2Vib29rQ29uZmlnKCk7CiAgICAgICAgJHRva2VuTW9kZSA9IHN0cnRvbG93ZXIodHJpbSgoc3RyaW5nKSgkY2ZnWyd0b2tlbl9tb2RlJ10gPz8gJ29hdXRoX3VzZXJfcGFnZScpKSk7CiAgICAgICAgJGFjY2Vzc1Rva2VuID0gJHRoaXMtPnJlc29sdmVGYWNlYm9va0FjY2Vzc1Rva2VuKCRjZmcpOwogICAgICAgIGlmICgkYWNjZXNzVG9rZW4gPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ0ZhY2Vib29rIHRva2VuIGlzIG1pc3NpbmcgZm9yIHBhZ2UgZGlzY292ZXJ5IGluIG1vZGU6ICcgLiAkdG9rZW5Nb2RlLAogICAgICAgICAgICAgICAgJ3BhZ2VzJyA9PiBbXSwKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgICRhcGlWZXJzaW9uID0gdHJpbSgoc3RyaW5nKSgkY2ZnWydhcGlfdmVyc2lvbiddID86ICd2MjUuMCcpKTsKICAgICAgICAkYXBwU2VjcmV0UHJvb2YgPSAnJzsKICAgICAgICBpZiAoIWVtcHR5KCRjZmdbJ2FwcF9zZWNyZXQnXSkpIHsKICAgICAgICAgICAgJGFwcFNlY3JldFByb29mID0gaGFzaF9obWFjKCdzaGEyNTYnLCAkYWNjZXNzVG9rZW4sIChzdHJpbmcpJGNmZ1snYXBwX3NlY3JldCddKTsKICAgICAgICB9CgogICAgICAgICRiYXNlUGFyYW1zID0gJ2FjY2Vzc190b2tlbj0nIC4gcmF3dXJsZW5jb2RlKCRhY2Nlc3NUb2tlbik7CiAgICAgICAgaWYgKCRhcHBTZWNyZXRQcm9vZiAhPT0gJycpIHsKICAgICAgICAgICAgJGJhc2VQYXJhbXMgLj0gJyZhcHBzZWNyZXRfcHJvb2Y9JyAuIHJhd3VybGVuY29kZSgkYXBwU2VjcmV0UHJvb2YpOwogICAgICAgIH0KCiAgICAgICAgJHJlc3AgPSAkdGhpcy0+aHR0cEdldChzcHJpbnRmKAogICAgICAgICAgICAnaHR0cHM6Ly9ncmFwaC5mYWNlYm9vay5jb20vJXMvbWUvYWNjb3VudHM/ZmllbGRzPWlkLG5hbWUsYWNjZXNzX3Rva2VuLHRhc2tzJiVzJywKICAgICAgICAgICAgcmF3dXJsZW5jb2RlKCRhcGlWZXJzaW9uKSwKICAgICAgICAgICAgJGJhc2VQYXJhbXMKICAgICAgICApKTsKCiAgICAgICAgJGpzb24gPSBqc29uX2RlY29kZSgoc3RyaW5nKSRyZXNwWydib2R5J10sIHRydWUpOwogICAgICAgICRwYWdlcyA9IFtdOwogICAgICAgIGlmIChpc19hcnJheSgkanNvbikgJiYgaXNzZXQoJGpzb25bJ2RhdGEnXSkgJiYgaXNfYXJyYXkoJGpzb25bJ2RhdGEnXSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGpzb25bJ2RhdGEnXSBhcyAkcm93KSB7CiAgICAgICAgICAgICAgICAkcGFnZXNbXSA9IFsKICAgICAgICAgICAgICAgICAgICAnaWQnID0+IChzdHJpbmcpKCRyb3dbJ2lkJ10gPz8gJycpLAogICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAoc3RyaW5nKSgkcm93WyduYW1lJ10gPz8gJycpLAogICAgICAgICAgICAgICAgICAgICdhY2Nlc3NfdG9rZW4nID0+IChzdHJpbmcpKCRyb3dbJ2FjY2Vzc190b2tlbiddID8/ICcnKSwKICAgICAgICAgICAgICAgICAgICAndGFza3MnID0+IGlzc2V0KCRyb3dbJ3Rhc2tzJ10pICYmIGlzX2FycmF5KCRyb3dbJ3Rhc2tzJ10pID8gJHJvd1sndGFza3MnXSA6IFtdLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCFlbXB0eSgkanNvblsnZXJyb3InXVsnbWVzc2FnZSddKSkgewogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IGZhbHNlLAogICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICdGYWNlYm9vayBwYWdlIGRpc2NvdmVyeSBmYWlsZWQ6ICcgLiAoc3RyaW5nKSRqc29uWydlcnJvciddWydtZXNzYWdlJ10sCiAgICAgICAgICAgICAgICAncGFnZXMnID0+ICRwYWdlcywKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdzdWNjZXNzJyA9PiBjb3VudCgkcGFnZXMpID4gMCwKICAgICAgICAgICAgJ21lc3NhZ2UnID0+IGNvdW50KCRwYWdlcykgPiAwCiAgICAgICAgICAgICAgICA/ICgnRGlzY292ZXJlZCAnIC4gY291bnQoJHBhZ2VzKSAuICcgbWFuYWdlZCBwYWdlKHMpLicpCiAgICAgICAgICAgICAgICA6ICdObyBtYW5hZ2VkIHBhZ2VzIHJldHVybmVkIGZvciB0aGlzIHRva2VuICgvbWUvYWNjb3VudHMpLicsCiAgICAgICAgICAgICdwYWdlcycgPT4gJHBhZ2VzLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZSB0aGUgY29uZmlndXJlZCBwYWdlIElEIHdpdGggdGhlIGVmZmVjdGl2ZSB0b2tlbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlRmFjZWJvb2tUYXJnZXQoKTogYXJyYXkKICAgIHsKICAgICAgICAkY2ZnID0gJHRoaXMtPmNvbmZpZy0+Z2V0RmFjZWJvb2tDb25maWcoKTsKICAgICAgICAkdG9rZW5Nb2RlID0gc3RydG9sb3dlcih0cmltKChzdHJpbmcpKCRjZmdbJ3Rva2VuX21vZGUnXSA/PyAnb2F1dGhfdXNlcl9wYWdlJykpKTsKICAgICAgICAkYWNjZXNzVG9rZW4gPSAkdGhpcy0+cmVzb2x2ZUZhY2Vib29rQWNjZXNzVG9rZW4oJGNmZyk7CiAgICAgICAgJHBhZ2VJZCA9IHRyaW0oKHN0cmluZykoJGNmZ1sncGFnZV9pZCddID8/ICcnKSk7CiAgICAgICAgaWYgKCRhY2Nlc3NUb2tlbiA9PT0gJycgfHwgJHBhZ2VJZCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnVG9rZW4gb3IgcGFnZSBJRCBpcyBtaXNzaW5nIGZvciB0YXJnZXQgdmFsaWRhdGlvbi4nLAogICAgICAgICAgICBdOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0b2tlbk1vZGUgPT09ICdvYXV0aF91c2VyX3BhZ2UnKSB7CiAgICAgICAgICAgICRtYW5hZ2VkUGFnZXMgPSAkdGhpcy0+Z2V0RmFjZWJvb2tNYW5hZ2VkUGFnZXMoJGNmZywgJGFjY2Vzc1Rva2VuKTsKICAgICAgICAgICAgaWYgKCEkbWFuYWdlZFBhZ2VzWydzdWNjZXNzJ10pIHsKICAgICAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnRmFjZWJvb2sgdGFyZ2V0IHZhbGlkYXRpb24gYmxvY2tlZDogY291bGQgbm90IHF1ZXJ5IC9tZS9hY2NvdW50cy4gJyAuICRtYW5hZ2VkUGFnZXNbJ21lc3NhZ2UnXSwKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNvdW50KCRtYW5hZ2VkUGFnZXNbJ3BhZ2VzJ10pID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ0ZhY2Vib29rIHRhcmdldCB2YWxpZGF0aW9uIGJsb2NrZWQ6IC9tZS9hY2NvdW50cyByZXR1cm5lZCAwIG1hbmFnZWQgcGFnZXMuICcKICAgICAgICAgICAgICAgICAgICAgICAgLiAnVXNlIE9BdXRoIHdpdGggcGFnZXNfc2hvd19saXN0ICsgcGFnZXNfcmVhZF9lbmdhZ2VtZW50ICsgcGFnZXNfbWFuYWdlX3Bvc3RzLCBsb2dpbiBhcyBQYWdlIGFkbWluL2VkaXRvciwgZ3JhbnQgcGFnZSBhY2Nlc3MsIHRoZW4gY2xpY2sgRGlzY292ZXIgTWFuYWdlZCBQYWdlcy4nLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoISR0aGlzLT5wYWdlSWRFeGlzdHNJbk1hbmFnZWRQYWdlcygkcGFnZUlkLCAkbWFuYWdlZFBhZ2VzWydwYWdlcyddKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICdGYWNlYm9vayB0YXJnZXQgdmFsaWRhdGlvbiBibG9ja2VkOiBjb25maWd1cmVkIHBhZ2UgSUQgaXMgbm90IHByZXNlbnQgaW4gL21lL2FjY291bnRzIGZvciBjdXJyZW50IE9BdXRoIHRva2VuLicsCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkYXBpVmVyc2lvbiA9IHRyaW0oKHN0cmluZykoJGNmZ1snYXBpX3ZlcnNpb24nXSA/OiAndjI1LjAnKSk7CiAgICAgICAgJGFwcFNlY3JldFByb29mID0gJyc7CiAgICAgICAgaWYgKCFlbXB0eSgkY2ZnWydhcHBfc2VjcmV0J10pKSB7CiAgICAgICAgICAgICRhcHBTZWNyZXRQcm9vZiA9IGhhc2hfaG1hYygnc2hhMjU2JywgJGFjY2Vzc1Rva2VuLCAoc3RyaW5nKSRjZmdbJ2FwcF9zZWNyZXQnXSk7CiAgICAgICAgfQogICAgICAgICRwYXJhbXMgPSAnYWNjZXNzX3Rva2VuPScgLiByYXd1cmxlbmNvZGUoJGFjY2Vzc1Rva2VuKTsKICAgICAgICBpZiAoJGFwcFNlY3JldFByb29mICE9PSAnJykgewogICAgICAgICAgICAkcGFyYW1zIC49ICcmYXBwc2VjcmV0X3Byb29mPScgLiByYXd1cmxlbmNvZGUoJGFwcFNlY3JldFByb29mKTsKICAgICAgICB9CgogICAgICAgICRyZXNwID0gJHRoaXMtPmh0dHBHZXQoc3ByaW50ZigKICAgICAgICAgICAgJ2h0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tLyVzLyVzP2ZpZWxkcz1pZCxuYW1lJiVzJywKICAgICAgICAgICAgcmF3dXJsZW5jb2RlKCRhcGlWZXJzaW9uKSwKICAgICAgICAgICAgcmF3dXJsZW5jb2RlKCRwYWdlSWQpLAogICAgICAgICAgICAkcGFyYW1zCiAgICAgICAgKSk7CiAgICAgICAgJGpzb24gPSBqc29uX2RlY29kZSgoc3RyaW5nKSRyZXNwWydib2R5J10sIHRydWUpOwogICAgICAgIGlmICghZW1wdHkoJGpzb25bJ2Vycm9yJ11bJ21lc3NhZ2UnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnRmFjZWJvb2sgdGFyZ2V0IHZhbGlkYXRpb24gZmFpbGVkICgnIC4gJHRva2VuTW9kZSAuICcpOiAnIC4gKHN0cmluZykkanNvblsnZXJyb3InXVsnbWVzc2FnZSddLAogICAgICAgICAgICBdOwogICAgICAgIH0KCiAgICAgICAgJGlkID0gKHN0cmluZykoJGpzb25bJ2lkJ10gPz8gJycpOwogICAgICAgICRuYW1lID0gKHN0cmluZykoJGpzb25bJ25hbWUnXSA/PyAnJyk7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+ICgkaWQgIT09ICcnKSwKICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICRpZCAhPT0gJycKICAgICAgICAgICAgICAgID8gKCdGYWNlYm9vayB0YXJnZXQgaXMgdmFsaWQ6ICcgLiAkbmFtZSAuICcgKCcgLiAkaWQgLiAnKScpCiAgICAgICAgICAgICAgICA6ICdGYWNlYm9vayB0YXJnZXQgdmFsaWRhdGlvbiByZXR1cm5lZCBubyBwYWdlIG9iamVjdC4nLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIHRoZSB0aHJlZSBHcmFwaCBBUEkgY2FsbHMgcmVxdWlyZWQgZm9yIE1ldGEgQXBwIFJldmlldyB0ZXN0aW5nOgogICAgICogLSBwYWdlc19zaG93X2xpc3QKICAgICAqIC0gcGFnZXNfcmVhZF9lbmdhZ2VtZW50CiAgICAgKiAtIHBhZ2VzX21hbmFnZV9wb3N0cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcnVuRmFjZWJvb2tNZXRhUmV2aWV3VGVzdENhbGxzKCk6IGFycmF5CiAgICB7CiAgICAgICAgJGNmZyA9ICR0aGlzLT5jb25maWctPmdldEZhY2Vib29rQ29uZmlnKCk7CiAgICAgICAgJHRva2VuTW9kZSA9IHN0cnRvbG93ZXIodHJpbSgoc3RyaW5nKSgkY2ZnWyd0b2tlbl9tb2RlJ10gPz8gJ29hdXRoX3VzZXJfcGFnZScpKSk7CiAgICAgICAgJGFjY2Vzc1Rva2VuID0gJHRoaXMtPnJlc29sdmVGYWNlYm9va0FjY2Vzc1Rva2VuKCRjZmcpOwogICAgICAgICRwYWdlSWQgPSB0cmltKChzdHJpbmcpKCRjZmdbJ3BhZ2VfaWQnXSA/PyAnJykpOwogICAgICAgIGlmICgkYWNjZXNzVG9rZW4gPT09ICcnIHx8ICRwYWdlSWQgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ01ldGEgcmV2aWV3IGNhbGxzIHJlcXVpcmUgYm90aCB0b2tlbiBhbmQgcGFnZSBJRC4nLAogICAgICAgICAgICAgICAgJ2NhbGxzJyA9PiBbXSwKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgICRhcGlWZXJzaW9uID0gdHJpbSgoc3RyaW5nKSgkY2ZnWydhcGlfdmVyc2lvbiddID86ICd2MjUuMCcpKTsKICAgICAgICAkYXBwU2VjcmV0UHJvb2YgPSAnJzsKICAgICAgICBpZiAoIWVtcHR5KCRjZmdbJ2FwcF9zZWNyZXQnXSkpIHsKICAgICAgICAgICAgJGFwcFNlY3JldFByb29mID0gaGFzaF9obWFjKCdzaGEyNTYnLCAkYWNjZXNzVG9rZW4sIChzdHJpbmcpJGNmZ1snYXBwX3NlY3JldCddKTsKICAgICAgICB9CgogICAgICAgICRwYXJhbXMgPSAnYWNjZXNzX3Rva2VuPScgLiByYXd1cmxlbmNvZGUoJGFjY2Vzc1Rva2VuKTsKICAgICAgICBpZiAoJGFwcFNlY3JldFByb29mICE9PSAnJykgewogICAgICAgICAgICAkcGFyYW1zIC49ICcmYXBwc2VjcmV0X3Byb29mPScgLiByYXd1cmxlbmNvZGUoJGFwcFNlY3JldFByb29mKTsKICAgICAgICB9CgogICAgICAgICRjYWxscyA9IFtdOwogICAgICAgICRhbGxPayA9IHRydWU7CgogICAgICAgIC8vIDEpIHBhZ2VzX3Nob3dfbGlzdAogICAgICAgICRtYW5hZ2VkID0gJHRoaXMtPmdldEZhY2Vib29rTWFuYWdlZFBhZ2VzKCRjZmcsICRhY2Nlc3NUb2tlbik7CiAgICAgICAgJHNob3dMaXN0RXJyID0gJG1hbmFnZWRbJ3N1Y2Nlc3MnXSA/ICcnIDogKHN0cmluZykkbWFuYWdlZFsnbWVzc2FnZSddOwogICAgICAgICRzaG93TGlzdENvdW50ID0gY291bnQoJG1hbmFnZWRbJ3BhZ2VzJ10pOwogICAgICAgICRzaG93TGlzdE9rID0gJG1hbmFnZWRbJ3N1Y2Nlc3MnXTsKICAgICAgICBpZiAoISRzaG93TGlzdE9rKSB7CiAgICAgICAgICAgICRhbGxPayA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICAkY2FsbHNbXSA9IFsKICAgICAgICAgICAgJ3Blcm1pc3Npb24nID0+ICdwYWdlc19zaG93X2xpc3QnLAogICAgICAgICAgICAnb2snID0+ICRzaG93TGlzdE9rLAogICAgICAgICAgICAnaHR0cF9zdGF0dXMnID0+IChpbnQpKCRtYW5hZ2VkWydzdGF0dXMnXSA/PyAwKSwKICAgICAgICAgICAgJ2RldGFpbCcgPT4gJHNob3dMaXN0T2sgPyAoJ21hbmFnZWRfcGFnZXM9JyAuICRzaG93TGlzdENvdW50KSA6ICRzaG93TGlzdEVyciwKICAgICAgICBdOwoKICAgICAgICAvLyBIYXJkLXN0b3A6IGF2b2lkIG1pc2xlYWRpbmcgZm9sbG93LXVwIGZhaWx1cmVzIHdoZW4gbm8gbWFuYWdlYWJsZSBwYWdlcyBhcmUgYXZhaWxhYmxlLgogICAgICAgIGlmICghJHNob3dMaXN0T2sgfHwgJHNob3dMaXN0Q291bnQgPT09IDApIHsKICAgICAgICAgICAgaWYgKCRzaG93TGlzdENvdW50ID09PSAwKSB7CiAgICAgICAgICAgICAgICAkYWxsT2sgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY2FsbHNbXSA9IFsKICAgICAgICAgICAgICAgICdwZXJtaXNzaW9uJyA9PiAncGFnZXNfcmVhZF9lbmdhZ2VtZW50JywKICAgICAgICAgICAgICAgICdvaycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAnaHR0cF9zdGF0dXMnID0+IDAsCiAgICAgICAgICAgICAgICAnZGV0YWlsJyA9PiAnU2tpcHBlZDogbm8gbWFuYWdlZCBwYWdlcyBmcm9tIC9tZS9hY2NvdW50cyBmb3IgY3VycmVudCB0b2tlbi4nLAogICAgICAgICAgICBdOwogICAgICAgICAgICAkY2FsbHNbXSA9IFsKICAgICAgICAgICAgICAgICdwZXJtaXNzaW9uJyA9PiAncGFnZXNfbWFuYWdlX3Bvc3RzJywKICAgICAgICAgICAgICAgICdvaycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAnaHR0cF9zdGF0dXMnID0+IDAsCiAgICAgICAgICAgICAgICAnZGV0YWlsJyA9PiAnU2tpcHBlZDogbm8gbWFuYWdlZCBwYWdlcyBmcm9tIC9tZS9hY2NvdW50cyBmb3IgY3VycmVudCB0b2tlbi4nLAogICAgICAgICAgICBdOwoKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnTWV0YSByZXZpZXcgQVBJIHRlc3QgY2FsbHMgYmxvY2tlZDogL21lL2FjY291bnRzIHJldHVybmVkIG5vIG1hbmFnZWQgcGFnZXMgZm9yIGN1cnJlbnQgdG9rZW4uICcKICAgICAgICAgICAgICAgICAgICAuICdSZS1ydW4gT0F1dGggYXMgUGFnZSBhZG1pbi9lZGl0b3IgYW5kIGdyYW50IHJlcXVpcmVkIHBlcm1pc3Npb25zLCB0aGVuIERpc2NvdmVyIE1hbmFnZWQgUGFnZXMuJywKICAgICAgICAgICAgICAgICdjYWxscycgPT4gJGNhbGxzLAogICAgICAgICAgICBdOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0b2tlbk1vZGUgPT09ICdvYXV0aF91c2VyX3BhZ2UnICYmICEkdGhpcy0+cGFnZUlkRXhpc3RzSW5NYW5hZ2VkUGFnZXMoJHBhZ2VJZCwgJG1hbmFnZWRbJ3BhZ2VzJ10pKSB7CiAgICAgICAgICAgICRhbGxPayA9IGZhbHNlOwogICAgICAgICAgICAkY2FsbHNbXSA9IFsKICAgICAgICAgICAgICAgICdwZXJtaXNzaW9uJyA9PiAncGFnZXNfcmVhZF9lbmdhZ2VtZW50JywKICAgICAgICAgICAgICAgICdvaycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAnaHR0cF9zdGF0dXMnID0+IDAsCiAgICAgICAgICAgICAgICAnZGV0YWlsJyA9PiAnU2tpcHBlZDogY29uZmlndXJlZCBwYWdlIElEIGlzIG5vdCBpbiAvbWUvYWNjb3VudHMgZm9yIGN1cnJlbnQgdG9rZW4uJywKICAgICAgICAgICAgXTsKICAgICAgICAgICAgJGNhbGxzW10gPSBbCiAgICAgICAgICAgICAgICAncGVybWlzc2lvbicgPT4gJ3BhZ2VzX21hbmFnZV9wb3N0cycsCiAgICAgICAgICAgICAgICAnb2snID0+IGZhbHNlLAogICAgICAgICAgICAgICAgJ2h0dHBfc3RhdHVzJyA9PiAwLAogICAgICAgICAgICAgICAgJ2RldGFpbCcgPT4gJ1NraXBwZWQ6IGNvbmZpZ3VyZWQgcGFnZSBJRCBpcyBub3QgaW4gL21lL2FjY291bnRzIGZvciBjdXJyZW50IHRva2VuLicsCiAgICAgICAgICAgIF07CgogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IGZhbHNlLAogICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICdNZXRhIHJldmlldyBBUEkgdGVzdCBjYWxscyBibG9ja2VkOiBjb25maWd1cmVkIHBhZ2UgSUQgaXMgbm90IGF2YWlsYWJsZSB0byBjdXJyZW50IE9BdXRoIHRva2VuLicsCiAgICAgICAgICAgICAgICAnY2FsbHMnID0+ICRjYWxscywKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgIC8vIDIpIHBhZ2VzX3JlYWRfZW5nYWdlbWVudAogICAgICAgICRyZWFkRW5nYWdlbWVudCA9ICR0aGlzLT5odHRwR2V0KHNwcmludGYoCiAgICAgICAgICAgICdodHRwczovL2dyYXBoLmZhY2Vib29rLmNvbS8lcy8lcz9maWVsZHM9aWQsbmFtZSxmYW5fY291bnQmJXMnLAogICAgICAgICAgICByYXd1cmxlbmNvZGUoJGFwaVZlcnNpb24pLAogICAgICAgICAgICByYXd1cmxlbmNvZGUoJHBhZ2VJZCksCiAgICAgICAgICAgICRwYXJhbXMKICAgICAgICApKTsKICAgICAgICAkcmVhZEVuZ2FnZW1lbnRKc29uID0ganNvbl9kZWNvZGUoKHN0cmluZykkcmVhZEVuZ2FnZW1lbnRbJ2JvZHknXSwgdHJ1ZSk7CiAgICAgICAgJHJlYWRFcnIgPSAoc3RyaW5nKSgkcmVhZEVuZ2FnZW1lbnRKc29uWydlcnJvciddWydtZXNzYWdlJ10gPz8gJycpOwogICAgICAgICRyZWFkT2sgPSAkcmVhZEVyciA9PT0gJycgJiYgKGludCkkcmVhZEVuZ2FnZW1lbnRbJ3N0YXR1cyddIDwgNDAwOwogICAgICAgIGlmICghJHJlYWRPaykgewogICAgICAgICAgICAkYWxsT2sgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgJGNhbGxzW10gPSBbCiAgICAgICAgICAgICdwZXJtaXNzaW9uJyA9PiAncGFnZXNfcmVhZF9lbmdhZ2VtZW50JywKICAgICAgICAgICAgJ29rJyA9PiAkcmVhZE9rLAogICAgICAgICAgICAnaHR0cF9zdGF0dXMnID0+IChpbnQpJHJlYWRFbmdhZ2VtZW50WydzdGF0dXMnXSwKICAgICAgICAgICAgJ2RldGFpbCcgPT4gJHJlYWRPawogICAgICAgICAgICAgICAgPyAoJ3BhZ2U9JyAuIChzdHJpbmcpKCRyZWFkRW5nYWdlbWVudEpzb25bJ25hbWUnXSA/PyAkcGFnZUlkKSkKICAgICAgICAgICAgICAgIDogJHJlYWRFcnIsCiAgICAgICAgXTsKCiAgICAgICAgLy8gMykgcGFnZXNfbWFuYWdlX3Bvc3RzCiAgICAgICAgJHJldmlld01lc3NhZ2UgPSAnTWV0YSBBcHAgUmV2aWV3IHRlc3QgY2FsbCBmcm9tIE1BU19Tb2NpYWxzICgnIC4gZGF0ZSgnWS1tLWQgSDppOnMnKSAuICcpJzsKICAgICAgICAkcG9zdCA9ICR0aGlzLT5odHRwUG9zdEZvcm0oc3ByaW50ZigKICAgICAgICAgICAgJ2h0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tLyVzLyVzL2ZlZWQnLAogICAgICAgICAgICByYXd1cmxlbmNvZGUoJGFwaVZlcnNpb24pLAogICAgICAgICAgICByYXd1cmxlbmNvZGUoJHBhZ2VJZCkKICAgICAgICApLCBbCiAgICAgICAgICAgICdtZXNzYWdlJyA9PiAkcmV2aWV3TWVzc2FnZSwKICAgICAgICAgICAgJ2FjY2Vzc190b2tlbicgPT4gJGFjY2Vzc1Rva2VuLAogICAgICAgICAgICAnYXBwc2VjcmV0X3Byb29mJyA9PiAkYXBwU2VjcmV0UHJvb2YsCiAgICAgICAgXSk7CiAgICAgICAgJHBvc3RKc29uID0ganNvbl9kZWNvZGUoKHN0cmluZykkcG9zdFsnYm9keSddLCB0cnVlKTsKICAgICAgICAkcG9zdEVyciA9IChzdHJpbmcpKCRwb3N0SnNvblsnZXJyb3InXVsnbWVzc2FnZSddID8/ICcnKTsKICAgICAgICAkcG9zdE9rID0gJHBvc3RFcnIgPT09ICcnICYmIChpbnQpJHBvc3RbJ3N0YXR1cyddIDwgNDAwOwogICAgICAgIGlmICghJHBvc3RPaykgewogICAgICAgICAgICAkYWxsT2sgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgJGNhbGxzW10gPSBbCiAgICAgICAgICAgICdwZXJtaXNzaW9uJyA9PiAncGFnZXNfbWFuYWdlX3Bvc3RzJywKICAgICAgICAgICAgJ29rJyA9PiAkcG9zdE9rLAogICAgICAgICAgICAnaHR0cF9zdGF0dXMnID0+IChpbnQpJHBvc3RbJ3N0YXR1cyddLAogICAgICAgICAgICAnZGV0YWlsJyA9PiAkcG9zdE9rID8gKCdwb3N0X2lkPScgLiAoc3RyaW5nKSgkcG9zdEpzb25bJ2lkJ10gPz8gJ29rJykpIDogJHBvc3RFcnIsCiAgICAgICAgXTsKCiAgICAgICAgJG1lc3NhZ2UgPSAkYWxsT2sKICAgICAgICAgICAgPyAoJ01ldGEgcmV2aWV3IEFQSSB0ZXN0IGNhbGxzIHN1Y2NlZWRlZCBmb3IgbW9kZSAnIC4gJHRva2VuTW9kZSAuICcuJykKICAgICAgICAgICAgOiAoJ01ldGEgcmV2aWV3IEFQSSB0ZXN0IGNhbGxzIGNvbXBsZXRlZCB3aXRoIGZhaWx1cmVzIGZvciBtb2RlICcgLiAkdG9rZW5Nb2RlIC4gJy4nKTsKCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+ICRhbGxPaywKICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICRtZXNzYWdlLAogICAgICAgICAgICAnY2FsbHMnID0+ICRjYWxscywKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICogVGVzdCBUd2l0dGVyIHR3ZWV0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0VHdpdHRlcigpOiBhcnJheQogICAgewogICAgICAgICR0d0NvbmZpZyA9ICR0aGlzLT5jb25maWctPmdldFR3aXR0ZXJDb25maWcoKTsKICAgICAgICBpZiAoZW1wdHkoJHR3Q29uZmlnWydiZWFyZXJfdG9rZW4nXSkgJiYgZW1wdHkoJHR3Q29uZmlnWydhY2Nlc3NfdG9rZW4nXSkpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnVHdpdHRlciBiZWFyZXIgdG9rZW4gb3IgYWNjZXNzIHRva2VuIGlzIG5vdCBjb25maWd1cmVkJywKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgICR0ZXN0Q29udGVudCA9IG5ldyBzYl9jb250ZW50KCk7CiAgICAgICAgJHRlc3RDb250ZW50LT50aXRsZSA9ICdUZXN0IFR3ZWV0IGZyb20gTUFTX1NvY2lhbHMnOwogICAgICAgICR0ZXN0Q29udGVudC0+c3VtbWFyeSA9ICdUaGlzIGlzIGEgdGVzdCB0d2VldCB0byB2ZXJpZnkgVHdpdHRlciBpbnRlZ3JhdGlvbiBpcyB3b3JraW5nIGNvcnJlY3RseS4nOwogICAgICAgICR0ZXN0Q29udGVudC0+Y2Fub25pY2FsID0gJ2h0dHBzOi8vbmV3c3RhcmdldGVkLmNvbSc7CgogICAgICAgICRwdWJsaXNoZXIgPSBuZXcgVHdpdHRlclB1Ymxpc2hlcigkdGhpcy0+bW9kdWxlLCAkdGhpcy0+Y29uZmlnKTsKICAgICAgICAkcmVzdWx0ID0gJHB1Ymxpc2hlci0+cHVibGlzaCgkdGVzdENvbnRlbnQsICd7JGNvbnRlbnQtPnRpdGxlfSB7JGNvbnRlbnQtPmNhbm9uaWNhbH0nKTsKICAgICAgICAkZGV0YWlscyA9IG1ldGhvZF9leGlzdHMoJHB1Ymxpc2hlciwgJ2dldExhc3RFcnJvcicpID8gdHJpbSgoc3RyaW5nKSAkcHVibGlzaGVyLT5nZXRMYXN0RXJyb3IoKSkgOiAnJzsKCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+ICRyZXN1bHQsCiAgICAgICAgICAgICdtZXNzYWdlJyA9PiAkcmVzdWx0CiAgICAgICAgICAgICAgICA/ICdUZXN0IHBvc3Qgc2VudCBzdWNjZXNzZnVsbHkgdG8gVHdpdHRlciAoWCknCiAgICAgICAgICAgICAgICA6ICdGYWlsZWQgdG8gc2VuZCB0ZXN0IHBvc3QgdG8gVHdpdHRlciAoWCknIC4gKCRkZXRhaWxzICE9PSAnJyA/ICc6ICcgLiAkZGV0YWlscyA6ICcnKSwKICAgICAgICBdOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaHR0cEdldChzdHJpbmcgJHVybCk6IGFycmF5CiAgICB7CiAgICAgICAgJGNoID0gY3VybF9pbml0KCR1cmwpOwogICAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCwgWwogICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IHRydWUsCiAgICAgICAgICAgIENVUkxPUFRfVElNRU9VVCA9PiAyMCwKICAgICAgICBdKTsKICAgICAgICAkYm9keSA9IGN1cmxfZXhlYygkY2gpOwogICAgICAgICRzdGF0dXMgPSAoaW50KSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19SRVNQT05TRV9DT0RFKTsKICAgICAgICAkZXJyID0gY3VybF9lcnJvcigkY2gpOwogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnc3VjY2VzcycgPT4gJGJvZHkgIT09IGZhbHNlICYmICRzdGF0dXMgPCA0MDAsCiAgICAgICAgICAgICdzdGF0dXMnID0+ICRzdGF0dXMsCiAgICAgICAgICAgICdib2R5JyA9PiAkYm9keSA/OiAnJywKICAgICAgICAgICAgJ2Vycm9yJyA9PiAkZXJyLAogICAgICAgIF07CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBodHRwUG9zdEZvcm0oc3RyaW5nICR1cmwsIGFycmF5ICRwYXlsb2FkKTogYXJyYXkKICAgIHsKICAgICAgICAkY2ggPSBjdXJsX2luaXQoJHVybCk7CiAgICAgICAgY3VybF9zZXRvcHRfYXJyYXkoJGNoLCBbCiAgICAgICAgICAgIENVUkxPUFRfUE9TVCA9PiB0cnVlLAogICAgICAgICAgICBDVVJMT1BUX1BPU1RGSUVMRFMgPT4gaHR0cF9idWlsZF9xdWVyeSgkcGF5bG9hZCksCiAgICAgICAgICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gdHJ1ZSwKICAgICAgICAgICAgQ1VSTE9QVF9USU1FT1VUID0+IDIwLAogICAgICAgIF0pOwogICAgICAgICRib2R5ID0gY3VybF9leGVjKCRjaCk7CiAgICAgICAgJHN0YXR1cyA9IChpbnQpIGN1cmxfZ2V0aW5mbygkY2gsIENVUkxJTkZPX1JFU1BPTlNFX0NPREUpOwogICAgICAgICRlcnIgPSBjdXJsX2Vycm9yKCRjaCk7CiAgICAgICAgY3VybF9jbG9zZSgkY2gpOwogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdzdWNjZXNzJyA9PiAkYm9keSAhPT0gZmFsc2UgJiYgJHN0YXR1cyA8IDQwMCwKICAgICAgICAgICAgJ3N0YXR1cycgPT4gJHN0YXR1cywKICAgICAgICAgICAgJ2JvZHknID0+ICRib2R5ID86ICcnLAogICAgICAgICAgICAnZXJyb3InID0+ICRlcnIsCiAgICAgICAgXTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlc29sdmVGYWNlYm9va0FjY2Vzc1Rva2VuKGFycmF5ICRjZmcpOiBzdHJpbmcKICAgIHsKICAgICAgICAkdG9rZW5Nb2RlID0gc3RydG9sb3dlcih0cmltKChzdHJpbmcpKCRjZmdbJ3Rva2VuX21vZGUnXSA/PyAnb2F1dGhfdXNlcl9wYWdlJykpKTsKICAgICAgICAkYWNjZXNzVG9rZW4gPSB0cmltKChzdHJpbmcpKCRjZmdbJ2FjY2Vzc190b2tlbiddID8/ICcnKSk7CiAgICAgICAgaWYgKCR0b2tlbk1vZGUgPT09ICdzeXN0ZW1fdXNlcicpIHsKICAgICAgICAgICAgJHN5c3RlbVRva2VuID0gdHJpbSgoc3RyaW5nKSgkY2ZnWydzeXN0ZW1fdXNlcl90b2tlbiddID8/ICcnKSk7CiAgICAgICAgICAgIGlmICgkc3lzdGVtVG9rZW4gIT09ICcnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHN5c3RlbVRva2VuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkYWNjZXNzVG9rZW47CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRGYWNlYm9va01hbmFnZWRQYWdlc0NoZWNrKGFycmF5ICRjZmcsIHN0cmluZyAkYWNjZXNzVG9rZW4pOiBhcnJheQogICAgewogICAgICAgICRhcGlWZXJzaW9uID0gdHJpbSgoc3RyaW5nKSgkY2ZnWydhcGlfdmVyc2lvbiddID86ICd2MjUuMCcpKTsKICAgICAgICAkYXBwU2VjcmV0UHJvb2YgPSAnJzsKICAgICAgICBpZiAoIWVtcHR5KCRjZmdbJ2FwcF9zZWNyZXQnXSkpIHsKICAgICAgICAgICAgJGFwcFNlY3JldFByb29mID0gaGFzaF9obWFjKCdzaGEyNTYnLCAkYWNjZXNzVG9rZW4sIChzdHJpbmcpJGNmZ1snYXBwX3NlY3JldCddKTsKICAgICAgICB9CgogICAgICAgICRiYXNlUGFyYW1zID0gJ2FjY2Vzc190b2tlbj0nIC4gcmF3dXJsZW5jb2RlKCRhY2Nlc3NUb2tlbik7CiAgICAgICAgaWYgKCRhcHBTZWNyZXRQcm9vZiAhPT0gJycpIHsKICAgICAgICAgICAgJGJhc2VQYXJhbXMgLj0gJyZhcHBzZWNyZXRfcHJvb2Y9JyAuIHJhd3VybGVuY29kZSgkYXBwU2VjcmV0UHJvb2YpOwogICAgICAgIH0KCiAgICAgICAgJHJlc3AgPSAkdGhpcy0+aHR0cEdldChzcHJpbnRmKAogICAgICAgICAgICAnaHR0cHM6Ly9ncmFwaC5mYWNlYm9vay5jb20vJXMvbWUvYWNjb3VudHM/ZmllbGRzPWlkLG5hbWUsdGFza3MmJXMnLAogICAgICAgICAgICByYXd1cmxlbmNvZGUoJGFwaVZlcnNpb24pLAogICAgICAgICAgICAkYmFzZVBhcmFtcwogICAgICAgICkpOwogICAgICAgICRqc29uID0ganNvbl9kZWNvZGUoKHN0cmluZykkcmVzcFsnYm9keSddLCB0cnVlKTsKCiAgICAgICAgaWYgKCFpc19hcnJheSgkanNvbikpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICdjb3VudCcgPT4gMCwKICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnVW5leHBlY3RlZCByZXNwb25zZSBmb3JtYXQgZnJvbSAvbWUvYWNjb3VudHMgKEhUVFAgJyAuIChpbnQpJHJlc3BbJ3N0YXR1cyddIC4gJyknLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgICBpZiAoIWVtcHR5KCRqc29uWydlcnJvciddWydtZXNzYWdlJ10pKSB7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAnY291bnQnID0+IDAsCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gKHN0cmluZykkanNvblsnZXJyb3InXVsnbWVzc2FnZSddIC4gJyAoSFRUUCAnIC4gKGludCkkcmVzcFsnc3RhdHVzJ10gLiAnKScsCiAgICAgICAgICAgIF07CiAgICAgICAgfQoKICAgICAgICAkY291bnQgPSAoaXNzZXQoJGpzb25bJ2RhdGEnXSkgJiYgaXNfYXJyYXkoJGpzb25bJ2RhdGEnXSkpID8gY291bnQoJGpzb25bJ2RhdGEnXSkgOiAwOwogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdzdWNjZXNzJyA9PiB0cnVlLAogICAgICAgICAgICAnY291bnQnID0+ICRjb3VudCwKICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICdtYW5hZ2VkX3BhZ2VzPScgLiAkY291bnQgLiAnIChIVFRQICcgLiAoaW50KSRyZXNwWydzdGF0dXMnXSAuICcpJywKICAgICAgICBdOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0RmFjZWJvb2tNYW5hZ2VkUGFnZXMoYXJyYXkgJGNmZywgc3RyaW5nICRhY2Nlc3NUb2tlbik6IGFycmF5CiAgICB7CiAgICAgICAgJGFwaVZlcnNpb24gPSB0cmltKChzdHJpbmcpKCRjZmdbJ2FwaV92ZXJzaW9uJ10gPzogJ3YyNS4wJykpOwogICAgICAgICRhcHBTZWNyZXRQcm9vZiA9ICcnOwogICAgICAgIGlmICghZW1wdHkoJGNmZ1snYXBwX3NlY3JldCddKSkgewogICAgICAgICAgICAkYXBwU2VjcmV0UHJvb2YgPSBoYXNoX2htYWMoJ3NoYTI1NicsICRhY2Nlc3NUb2tlbiwgKHN0cmluZykkY2ZnWydhcHBfc2VjcmV0J10pOwogICAgICAgIH0KICAgICAgICAkcGFyYW1zID0gJ2FjY2Vzc190b2tlbj0nIC4gcmF3dXJsZW5jb2RlKCRhY2Nlc3NUb2tlbik7CiAgICAgICAgaWYgKCRhcHBTZWNyZXRQcm9vZiAhPT0gJycpIHsKICAgICAgICAgICAgJHBhcmFtcyAuPSAnJmFwcHNlY3JldF9wcm9vZj0nIC4gcmF3dXJsZW5jb2RlKCRhcHBTZWNyZXRQcm9vZik7CiAgICAgICAgfQoKICAgICAgICAkcmVzcCA9ICR0aGlzLT5odHRwR2V0KHNwcmludGYoCiAgICAgICAgICAgICdodHRwczovL2dyYXBoLmZhY2Vib29rLmNvbS8lcy9tZS9hY2NvdW50cz9maWVsZHM9aWQsbmFtZSx0YXNrcyYlcycsCiAgICAgICAgICAgIHJhd3VybGVuY29kZSgkYXBpVmVyc2lvbiksCiAgICAgICAgICAgICRwYXJhbXMKICAgICAgICApKTsKICAgICAgICAkanNvbiA9IGpzb25fZGVjb2RlKChzdHJpbmcpJHJlc3BbJ2JvZHknXSwgdHJ1ZSk7CiAgICAgICAgaWYgKCFpc19hcnJheSgkanNvbikpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICdzdGF0dXMnID0+IChpbnQpJHJlc3BbJ3N0YXR1cyddLAogICAgICAgICAgICAgICAgJ3BhZ2VzJyA9PiBbXSwKICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnVW5leHBlY3RlZCByZXNwb25zZSBmcm9tIC9tZS9hY2NvdW50cy4nLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgICBpZiAoIWVtcHR5KCRqc29uWydlcnJvciddWydtZXNzYWdlJ10pKSB7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAnc3RhdHVzJyA9PiAoaW50KSRyZXNwWydzdGF0dXMnXSwKICAgICAgICAgICAgICAgICdwYWdlcycgPT4gW10sCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gKHN0cmluZykkanNvblsnZXJyb3InXVsnbWVzc2FnZSddLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgICAkcGFnZXMgPSBpc3NldCgkanNvblsnZGF0YSddKSAmJiBpc19hcnJheSgkanNvblsnZGF0YSddKSA/ICRqc29uWydkYXRhJ10gOiBbXTsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnc3VjY2VzcycgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3N0YXR1cycgPT4gKGludCkkcmVzcFsnc3RhdHVzJ10sCiAgICAgICAgICAgICdwYWdlcycgPT4gJHBhZ2VzLAogICAgICAgICAgICAnbWVzc2FnZScgPT4gJ21hbmFnZWRfcGFnZXM9JyAuIGNvdW50KCRwYWdlcyksCiAgICAgICAgXTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHBhZ2VJZEV4aXN0c0luTWFuYWdlZFBhZ2VzKHN0cmluZyAkcGFnZUlkLCBhcnJheSAkcGFnZXMpOiBib29sCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHBhZ2VzIGFzICRwYWdlKSB7CiAgICAgICAgICAgIGlmICh0cmltKChzdHJpbmcpKCRwYWdlWydpZCddID8/ICcnKSkgPT09ICRwYWdlSWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFRlc3QgVGlrVG9rIGNhcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RUaWtUb2soKTogYXJyYXkKICAgIHsKICAgICAgICAkdHRDb25maWcgPSAkdGhpcy0+Y29uZmlnLT5nZXRUaWtUb2tDb25maWcoKTsKICAgICAgICBpZiAoZW1wdHkoJHR0Q29uZmlnWydhY2Nlc3NfdG9rZW4nXSkpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnVGlrVG9rIGFjY2VzcyB0b2tlbiBpcyBub3QgY29uZmlndXJlZCcsCiAgICAgICAgICAgIF07CiAgICAgICAgfQoKICAgICAgICAvLyBUaWtUb2sgcmVxdWlyZXMgdmlkZW8gY29udGV4dCwgc28gd2UgY2FuIG9ubHkgdGVzdCB0aGUgY2FwdGlvbiBnZW5lcmF0aW9uCiAgICAgICAgJHRlc3RDb250ZW50ID0gbmV3IHNiX2NvbnRlbnQoKTsKICAgICAgICAkdGVzdENvbnRlbnQtPnRpdGxlID0gJ1Rlc3QgQ2FwdGlvbiBmcm9tIE1BU19Tb2NpYWxzJzsKICAgICAgICAkdGVzdENvbnRlbnQtPnN1bW1hcnkgPSAnVGhpcyBpcyBhIHRlc3QgY2FwdGlvbiB0byB2ZXJpZnkgVGlrVG9rIGludGVncmF0aW9uIGlzIHdvcmtpbmcgY29ycmVjdGx5Lic7CiAgICAgICAgJHRlc3RDb250ZW50LT5jYW5vbmljYWwgPSAnaHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tJzsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHB1Ymxpc2hlciA9IG5ldyBUaWtUb2tQdWJsaXNoZXIoJHRoaXMtPm1vZHVsZSwgJHRoaXMtPmNvbmZpZyk7CiAgICAgICAgICAgIC8vIEp1c3QgdmVyaWZ5IGNvbmZpZ3VyYXRpb24sIGFjdHVhbCBwdWJsaXNoaW5nIHJlcXVpcmVzIHZpZGVvCiAgICAgICAgICAgICRjb25maWd1cmVkID0gJHB1Ymxpc2hlci0+aXNDb25maWd1cmVkKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+ICRjb25maWd1cmVkLAogICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICRjb25maWd1cmVkIAogICAgICAgICAgICAgICAgICAgID8gJ1Rpa1RvayBjb25maWd1cmF0aW9uIGlzIHZhbGlkLiBOb3RlOiBBY3R1YWwgcHVibGlzaGluZyByZXF1aXJlcyBhIHZpZGVvIGZpbGUuJyAKICAgICAgICAgICAgICAgICAgICA6ICdUaWtUb2sgaXMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQnLAogICAgICAgICAgICBdOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnVGlrVG9rIHRlc3QgZmFpbGVkOiAnIC4gJGUtPmdldE1lc3NhZ2UoKSwKICAgICAgICAgICAgXTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBUZXN0IFdlYiBQdXNoIG5vdGlmaWNhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFdlYlB1c2goKTogYXJyYXkKICAgIHsKICAgICAgICAkY2d3ZWJwdXNoID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ0dXZWJQdXNoJyk7CiAgICAgICAgaWYgKCEkY2d3ZWJwdXNoKSB7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ0NHV2ViUHVzaCBtb2R1bGUgaXMgbm90IGluc3RhbGxlZCcsCiAgICAgICAgICAgIF07CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBpZiBWQVBJRCBrZXlzIGFyZSBjb25maWd1cmVkCiAgICAgICAgJHB1YmxpY0tleSA9ICRjZ3dlYnB1c2gtPkdldFByZWZlcmVuY2UoJ3ZhcGlkX3B1YmxpYycpOwogICAgICAgICRwcml2YXRlS2V5ID0gJGNnd2VicHVzaC0+R2V0UHJlZmVyZW5jZSgndmFwaWRfcHJpdmF0ZScpOwogICAgICAgIAogICAgICAgIGlmIChlbXB0eSgkcHVibGljS2V5KSB8fCBlbXB0eSgkcHJpdmF0ZUtleSkpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnVkFQSUQga2V5cyBhcmUgbm90IGNvbmZpZ3VyZWQuIFBsZWFzZSByZWdlbmVyYXRlIHRoZW0gZmlyc3QuJywKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgIC8vIFRyeSB0byBzZW5kIGEgdGVzdCBub3RpZmljYXRpb24KICAgICAgICB0cnkgewogICAgICAgICAgICAvLyBMb2FkIENHV2ViUHVzaCBjbGFzc2VzCiAgICAgICAgICAgIHJlcXVpcmVfb25jZSBjbXNfam9pbl9wYXRoKCRjZ3dlYnB1c2gtPkdldE1vZHVsZVBhdGgoKSwgJ2xpYicsICdjbGFzcy5QdXNoTWVzc2FnZS5waHAnKTsKICAgICAgICAgICAgcmVxdWlyZV9vbmNlIGNtc19qb2luX3BhdGgoJGNnd2VicHVzaC0+R2V0TW9kdWxlUGF0aCgpLCAnbGliJywgJ2NsYXNzLldlYlB1c2hEaXNwYXRjaGVyLnBocCcpOwogICAgICAgICAgICByZXF1aXJlX29uY2UgY21zX2pvaW5fcGF0aCgkY2d3ZWJwdXNoLT5HZXRNb2R1bGVQYXRoKCksICdsaWInLCAnY2xhc3MuU3Vic2NyaXB0aW9uU3RvcmFnZS5waHAnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEdldCBNQU1TIHVzZXJzIGluc3RlYWQgb2YgRkVVIHVzZXJzCiAgICAgICAgICAgICRtYW1zID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnTUFNUycpOwogICAgICAgICAgICBpZiAoISRtYW1zKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ01BTVMgbW9kdWxlIGlzIG5vdCBpbnN0YWxsZWQnLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gR2V0IGFsbCBNQU1TIHVzZXIgSURzCiAgICAgICAgICAgICRkYiA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXREYigpOwogICAgICAgICAgICAkbWFtc1RhYmxlID0gY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tYW1zX3VzZXJzJzsKICAgICAgICAgICAgJG1hbXNVc2VySWRzID0gJGRiLT5HZXRDb2woIlNFTEVDVCBpZCBGUk9NICRtYW1zVGFibGUgV0hFUkUgZGlzYWJsZWQgPSAwIEFORCAoZXhwaXJlcyA+IE5PVygpIE9SIGV4cGlyZXMgSVMgTlVMTCkiKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChlbXB0eSgkbWFtc1VzZXJJZHMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ05vIGFjdGl2ZSBNQU1TIHVzZXJzIGZvdW5kLicsCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBHZXQgc3Vic2NyaXB0aW9uIHN0b3JhZ2UgYW5kIGxvYWQgc3Vic2NyaXB0aW9ucyBmb3IgTUFNUyB1c2VycwogICAgICAgICAgICAvLyBOb3RlOiBNQU1TIHVzZXIgSURzIGFyZSBzdG9yZWQgaW4gZmV1X3VpZCBmaWVsZCBpbiBDR1dlYlB1c2gKICAgICAgICAgICAgJGRiID0gXENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldERiKCk7CiAgICAgICAgICAgICRzdG9yYWdlID0gbmV3IFxDR1dlYlB1c2hcU3Vic2NyaXB0aW9uU3RvcmFnZSgkZGIpOwogICAgICAgICAgICAkbGlzdCA9ICRzdG9yYWdlLT5sb2FkX2J5X2ZldV9saXN0KCRtYW1zVXNlcklkcyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoZW1wdHkoJGxpc3QpIHx8IGNvdW50KCRsaXN0KSA9PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICdObyBhY3RpdmUgc3Vic2NyaXB0aW9ucyBmb3VuZCBmb3IgTUFNUyB1c2Vycy4gVXNlcnMgbmVlZCB0byBzdWJzY3JpYmUgdG8gd2ViIHB1c2ggbm90aWZpY2F0aW9ucyBmaXJzdC4nLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQ3JlYXRlIHRlc3QgbWVzc2FnZQogICAgICAgICAgICAkdGVzdFRpdGxlID0gJGNnd2VicHVzaC0+R2V0UHJlZmVyZW5jZSgndGl0bGUnLCAnTmV3cyBUYXJnZXRlZCcpOwogICAgICAgICAgICAkdGVzdE1lc3NhZ2UgPSAnVGVzdCBub3RpZmljYXRpb24gZnJvbSBNQVNfU29jaWFscyAtICcgLiBkYXRlKCdZLW0tZCBIOmk6cycpOwogICAgICAgICAgICAkdGVzdFVybCA9ICdodHRwczovL25ld3N0YXJnZXRlZC5jb20nOwogICAgICAgICAgICAkdGVzdEljb24gPSAkY2d3ZWJwdXNoLT5HZXRQcmVmZXJlbmNlKCdpY29uJywgJycpOwoKICAgICAgICAgICAgJG1zZyA9IG5ldyBcQ0dXZWJQdXNoXFB1c2hNZXNzYWdlKCk7CiAgICAgICAgICAgICRtc2cgPSAkbXNnLT5hZGp1c3RXaXRoKCd0aXRsZScsICR0ZXN0VGl0bGUpOwogICAgICAgICAgICAkbXNnID0gJG1zZy0+YWRqdXN0V2l0aCgnYm9keScsICR0ZXN0TWVzc2FnZSk7CiAgICAgICAgICAgICRtc2cgPSAkbXNnLT5hZGp1c3RXaXRoKCd1cmwnLCAkdGVzdFVybCk7CiAgICAgICAgICAgIGlmICgkdGVzdEljb24pIHsKICAgICAgICAgICAgICAgICRtc2cgPSAkbXNnLT5hZGp1c3RXaXRoKCdpY29uJywgJHRlc3RJY29uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbXNnID0gJG1zZy0+YWRqdXN0V2l0aCgncmVkaXJlY3QnLCB0cnVlKTsKCiAgICAgICAgICAgIC8vIFNlbmQgbm90aWZpY2F0aW9uCiAgICAgICAgICAgICRkaXNwYXRjaGVyID0gbmV3IFxDR1dlYlB1c2hcV2ViUHVzaERpc3BhdGNoZXIoJGxpc3QsICRtc2cpOwogICAgICAgICAgICAkbl9zZW50ID0gJGRpc3BhdGNoZXItPmRpc3BhdGNoKCk7CgogICAgICAgICAgICBpZiAoJG5fc2VudCA+IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IHRydWUsCiAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICJXZWIgcHVzaCB0ZXN0IHNlbnQgc3VjY2Vzc2Z1bGx5IHRvIHskbl9zZW50fSBzdWJzY3JpcHRpb24ocykgYWNyb3NzICIgLiBjb3VudCgkbWFtc1VzZXJJZHMpIC4gIiBhY3RpdmUgTUFNUyB1c2VyKHMpLiIsCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICdEaXNwYXRjaCBjb21wbGV0ZWQgYnV0IHplcm8gbm90aWZpY2F0aW9ucyB3ZXJlIGFjY2VwdGVkLiBDaGVjayBzdWJzY3JpcHRpb24gZnJlc2huZXNzLCBWQVBJRCBrZXlzLCBhbmQgYnJvd3NlciBwZXJtaXNzaW9uIHN0YXRlLicsCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IGZhbHNlLAogICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICdXZWIgUHVzaCB0ZXN0IGZhaWxlZDogJyAuICRlLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgIF07CiAgICAgICAgfQogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/lib/Services/TikTokPublisher.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KCm5hbWVzcGFjZSBNQVNfU29jaWFsc1xTZXJ2aWNlczsKCnVzZSBNQVNfU29jaWFsczsKdXNlIHNiX2NvbnRlbnQ7CgovKioKICogTWluaW1hbCBUaWtUb2sgcHVibGlzaGVyLgogKgogKiBOb3RlczoKICogLSBUaWtUb2sgcmVxdWlyZXMgYSB2aWRlbyB0byBjcmVhdGUgYSBwb3N0LiBJZiBubyB2aWRlbyBVUkwvcGF0aCBpcyBzdXBwbGllZCBpbiAkY29udGV4dFsndmlkZW9fdXJsJ10sCiAqICAgdGhpcyBwdWJsaXNoZXIgd2lsbCBsb2cgYW5kIHNraXAgZ3JhY2VmdWxseS4KICogLSBFeHBlY3RzIGxvbmctbGl2ZWQgYWNjZXNzIHRva2VuIGZvciBhIGJ1c2luZXNzIGFjY291bnQuIEZ1bGwgT0F1dGggb25ib2FyZGluZyBjYW4gYmUgYWRkZWQgbGF0ZXIuCiAqLwpjbGFzcyBUaWtUb2tQdWJsaXNoZXIKewogICAgcHJpdmF0ZSBNQVNfU29jaWFscyAkbW9kdWxlOwogICAgcHJpdmF0ZSBDb25maWdSZXBvc2l0b3J5ICRjb25maWc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KE1BU19Tb2NpYWxzICRtb2R1bGUsIENvbmZpZ1JlcG9zaXRvcnkgJGNvbmZpZykKICAgIHsKICAgICAgICAkdGhpcy0+bW9kdWxlID0gJG1vZHVsZTsKICAgICAgICAkdGhpcy0+Y29uZmlnID0gJGNvbmZpZzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNDb25maWd1cmVkKCk6IGJvb2wKICAgIHsKICAgICAgICAkY2ZnID0gJHRoaXMtPmNvbmZpZy0+Z2V0VGlrVG9rQ29uZmlnKCk7CiAgICAgICAgcmV0dXJuICRjZmdbJ2FjY2Vzc190b2tlbiddICE9PSAnJyAmJiAkY2ZnWydidXNpbmVzc19hY2NvdW50X2lkJ10gIT09ICcnOwogICAgfQoKICAgIC8qKgogICAgICogUHVibGlzaCBhIFRpa1RvayB3aXRoIGNhcHRpb24gdGVtcGxhdGUgYW5kIGFuIG9wdGlvbmFsIHZpZGVvX3VybCBmcm9tIGNvbnRleHQuCiAgICAgKgogICAgICogQHBhcmFtIHNiX2NvbnRlbnQgJGNvbnRlbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICR0ZW1wbGF0ZSAgQ2FwdGlvbiB0ZW1wbGF0ZQogICAgICogQHBhcmFtIGFycmF5ICAgICAgJGNvbnRleHQgICBNdXN0IGNvbnRhaW4gJ3ZpZGVvX3VybCcgKGh0dHAvaHR0cHMpIG9yIGxvY2FsIHBhdGgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1Ymxpc2goc2JfY29udGVudCAkY29udGVudCwgc3RyaW5nICR0ZW1wbGF0ZSwgYXJyYXkgJGNvbnRleHQgPSBbXSk6IGJvb2wKICAgIHsKICAgICAgICAkY2ZnID0gJHRoaXMtPmNvbmZpZy0+Z2V0VGlrVG9rQ29uZmlnKCk7CiAgICAgICAgaWYgKCEkdGhpcy0+aXNDb25maWd1cmVkKCkpIHsKICAgICAgICAgICAgTG9nZ2VyOjpsb2coJ3dhcm5pbmcnLCAnVGlrVG9rIGNyZWRlbnRpYWxzIG1pc3Npbmcgb3Igbm90IGNvbmZpZ3VyZWQnKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHZpZGVvVXJsID0gdHJpbSgoc3RyaW5nKSgkY29udGV4dFsndmlkZW9fdXJsJ10gPz8gJycpKTsKICAgICAgICBpZiAoJHZpZGVvVXJsID09PSAnJykgewogICAgICAgICAgICBMb2dnZXI6OmxvZygnaW5mbycsICdUaWtUb2sgc2tpcHBlZDogbm8gdmlkZW9fdXJsIHByb3ZpZGVkIGluIGNvbnRleHQnKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJGNhcHRpb24gPSAkdGhpcy0+cmVuZGVyQ2FwdGlvbigkdGVtcGxhdGUsICRjb250ZW50KTsKCiAgICAgICAgLy8gU3RlcCAxOiBDcmVhdGUgYSBwb3N0IHRhc2sgKHNpbXBsaWZpZWQgcGxhY2Vob2xkZXIgYWdhaW5zdCBUaWtUb2sgT3BlbkFQSSB2MiBlbmRwb2ludHMpCiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBldm9sdmVzOyB3ZSB1c2UgYSBzYWZlIFBPU1Qgd2l0aCBiZWFyZXIgdG9rZW4sIGxvZyByZXN1bHQsIGFuZCB0cmVhdCAyeHggYXMgc3VjY2Vzcy4KICAgICAgICAkZW5kcG9pbnQgPSAnaHR0cHM6Ly9vcGVuLWFwaS50aWt0b2suY29tL3YyL3Bvc3QvcHVibGlzaC9jb250ZW50L3VybC8nOwogICAgICAgICRwYXlsb2FkID0gWwogICAgICAgICAgICAnYnVzaW5lc3NfaWQnID0+ICRjZmdbJ2J1c2luZXNzX2FjY291bnRfaWQnXSwKICAgICAgICAgICAgJ3ZpZGVvX3VybCcgPT4gJHZpZGVvVXJsLAogICAgICAgICAgICAnY2FwdGlvbicgPT4gJGNhcHRpb24sCiAgICAgICAgXTsKCiAgICAgICAgJGhlYWRlcnMgPSBbCiAgICAgICAgICAgICdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAnQXV0aG9yaXphdGlvbjogQmVhcmVyICcgLiAkY2ZnWydhY2Nlc3NfdG9rZW4nXSwKICAgICAgICBdOwoKICAgICAgICAkY2ggPSBjdXJsX2luaXQoJGVuZHBvaW50KTsKICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsIFsKICAgICAgICAgICAgQ1VSTE9QVF9QT1NUID0+IHRydWUsCiAgICAgICAgICAgIENVUkxPUFRfUE9TVEZJRUxEUyA9PiBqc29uX2VuY29kZSgkcGF5bG9hZCwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpLAogICAgICAgICAgICBDVVJMT1BUX0hUVFBIRUFERVIgPT4gJGhlYWRlcnMsCiAgICAgICAgICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gdHJ1ZSwKICAgICAgICAgICAgQ1VSTE9QVF9USU1FT1VUID0+IDMwLAogICAgICAgIF0pOwoKICAgICAgICAkcmVzcG9uc2UgPSBjdXJsX2V4ZWMoJGNoKTsKICAgICAgICAkc3RhdHVzID0gY3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSk7CiAgICAgICAgJGVycm9yID0gY3VybF9lcnJvcigkY2gpOwogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKCiAgICAgICAgaWYgKCRyZXNwb25zZSA9PT0gZmFsc2UgfHwgJHN0YXR1cyA+PSA0MDApIHsKICAgICAgICAgICAgTG9nZ2VyOjpsb2coJ2Vycm9yJywgJ1Rpa1RvayBwdWJsaXNoIGZhaWxlZCcsIFsKICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICRzdGF0dXMsCiAgICAgICAgICAgICAgICAnZXJyb3InID0+ICRlcnJvciwKICAgICAgICAgICAgICAgICdyZXNwb25zZScgPT4gJHJlc3BvbnNlLAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgTG9nZ2VyOjpsb2coJ2luZm8nLCAnVGlrVG9rIHB1Ymxpc2ggZW5xdWV1ZWQnLCBbJ3N0YXR1cycgPT4gJHN0YXR1c10pOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmVuZGVyQ2FwdGlvbihzdHJpbmcgJHRlbXBsYXRlLCBzYl9jb250ZW50ICRjb250ZW50KTogc3RyaW5nCiAgICB7CiAgICAgICAgJHNtYXJ0eSA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRTbWFydHkoKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2NvbnRlbnQnLCAkY29udGVudCk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCd0aWt0b2snLCAkdGhpcy0+Y29uZmlnLT5nZXRUaWtUb2tDb25maWcoKSk7CiAgICAgICAgcmV0dXJuIHRyaW0oJHNtYXJ0eS0+ZmV0Y2goJ3N0cmluZzonIC4gJHRlbXBsYXRlKSk7CiAgICB9Cn0KCgo=]]></data>
	</file>
	<file>
	  <filename>/lib/Services/TwitterPublisher.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZQogKgogKiBAcGFja2FnZSBNQVNfU29jaWFscwogKiBAYXV0aG9yIG1hc3RlcjMzOTUKICogQGNvcHlyaWdodCAyMDI1IG1hc3RlcjMzOTUKICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlcgogKi8KCm5hbWVzcGFjZSBNQVNfU29jaWFsc1xTZXJ2aWNlczsKCnVzZSBNQVNfU29jaWFsczsKdXNlIHNiX2NvbnRlbnQ7CgpjbGFzcyBUd2l0dGVyUHVibGlzaGVyCnsKICAgIHByaXZhdGUgTUFTX1NvY2lhbHMgJG1vZHVsZTsKICAgIHByaXZhdGUgQ29uZmlnUmVwb3NpdG9yeSAkY29uZmlnOwogICAgcHJpdmF0ZSBzdHJpbmcgJGxhc3RFcnJvciA9ICcnOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChNQVNfU29jaWFscyAkbW9kdWxlLCBDb25maWdSZXBvc2l0b3J5ICRjb25maWcpCiAgICB7CiAgICAgICAgJHRoaXMtPm1vZHVsZSA9ICRtb2R1bGU7CiAgICAgICAgJHRoaXMtPmNvbmZpZyA9ICRjb25maWc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzQ29uZmlndXJlZCgpOiBib29sCiAgICB7CiAgICAgICAgJGNmZyA9ICR0aGlzLT5jb25maWctPmdldFR3aXR0ZXJDb25maWcoKTsKICAgICAgICAkaGFzT0F1dGgxID0gJGNmZ1snYXBpX2tleSddICE9PSAnJyAmJiAkY2ZnWydhcGlfc2VjcmV0J10gIT09ICcnICYmICRjZmdbJ2FjY2Vzc190b2tlbiddICE9PSAnJyAmJiAkY2ZnWydhY2Nlc3Nfc2VjcmV0J10gIT09ICcnOwogICAgICAgIHJldHVybiAkaGFzT0F1dGgxIHx8ICRjZmdbJ2JlYXJlcl90b2tlbiddICE9PSAnJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcHVibGlzaChzYl9jb250ZW50ICRjb250ZW50LCBzdHJpbmcgJHRlbXBsYXRlKTogYm9vbAogICAgewogICAgICAgICR0aGlzLT5sYXN0RXJyb3IgPSAnJzsKICAgICAgICBpZiAoISR0aGlzLT5pc0NvbmZpZ3VyZWQoKSkgewogICAgICAgICAgICAkdGhpcy0+bGFzdEVycm9yID0gJ1R3aXR0ZXIvWCBjcmVkZW50aWFscyBhcmUgaW5jb21wbGV0ZS4nOwogICAgICAgICAgICBMb2dnZXI6OmxvZygnd2FybmluZycsICdUd2l0dGVyIGNyZWRlbnRpYWxzIG1pc3NpbmcnKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJG1lc3NhZ2UgPSAkdGhpcy0+cmVuZGVyVGVtcGxhdGUoJHRlbXBsYXRlLCAkY29udGVudCk7CiAgICAgICAgJG1lc3NhZ2UgPSBtYl9zdWJzdHIoJG1lc3NhZ2UsIDAsIDI4MCk7CgogICAgICAgICRwYXlsb2FkID0gWyd0ZXh0JyA9PiAkbWVzc2FnZV07CiAgICAgICAgJGNmZyA9ICR0aGlzLT5jb25maWctPmdldFR3aXR0ZXJDb25maWcoKTsKCiAgICAgICAgJGNoID0gY3VybF9pbml0KCdodHRwczovL2FwaS50d2l0dGVyLmNvbS8yL3R3ZWV0cycpOwogICAgICAgICRoZWFkZXJzID0gWydDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nXTsKICAgICAgICBpZiAoJHRoaXMtPmNhblVzZU9BdXRoMSgkY2ZnKSkgewogICAgICAgICAgICAkaGVhZGVyc1tdID0gJHRoaXMtPmJ1aWxkT0F1dGgxSGVhZGVyKCdQT1NUJywgJ2h0dHBzOi8vYXBpLnR3aXR0ZXIuY29tLzIvdHdlZXRzJywgJGNmZyk7CiAgICAgICAgfSBlbHNlaWYgKCRjZmdbJ2JlYXJlcl90b2tlbiddICE9PSAnJykgewogICAgICAgICAgICAkaGVhZGVyc1tdID0gJ0F1dGhvcml6YXRpb246IEJlYXJlciAnIC4gJGNmZ1snYmVhcmVyX3Rva2VuJ107CiAgICAgICAgfQoKICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsIFsKICAgICAgICAgICAgQ1VSTE9QVF9QT1NUID0+IHRydWUsCiAgICAgICAgICAgIENVUkxPUFRfUE9TVEZJRUxEUyA9PiBqc29uX2VuY29kZSgkcGF5bG9hZCwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpLAogICAgICAgICAgICBDVVJMT1BUX0hUVFBIRUFERVIgPT4gJGhlYWRlcnMsCiAgICAgICAgICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gdHJ1ZSwKICAgICAgICAgICAgQ1VSTE9QVF9USU1FT1VUID0+IDE1LAogICAgICAgIF0pOwoKICAgICAgICAkcmVzcG9uc2UgPSBjdXJsX2V4ZWMoJGNoKTsKICAgICAgICAkc3RhdHVzID0gY3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSk7CiAgICAgICAgJGVycm9yID0gY3VybF9lcnJvcigkY2gpOwogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKCiAgICAgICAgaWYgKCRyZXNwb25zZSA9PT0gZmFsc2UgfHwgJHN0YXR1cyA+PSA0MDApIHsKICAgICAgICAgICAgJGRlY29kZWQgPSBqc29uX2RlY29kZSgoc3RyaW5nKSAkcmVzcG9uc2UsIHRydWUpOwogICAgICAgICAgICAkYXBpRXJyb3IgPSAnJzsKICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRkZWNvZGVkKSkgewogICAgICAgICAgICAgICAgJGFwaUVycm9yID0gJGRlY29kZWRbJ2RldGFpbCddID8/ICgkZGVjb2RlZFsndGl0bGUnXSA/PyAoJGRlY29kZWRbJ2Vycm9yJ10gPz8gJycpKTsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZGVjb2RlZFsnZXJyb3JzJ11bMF1bJ21lc3NhZ2UnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkYXBpRXJyb3IgPSAkZGVjb2RlZFsnZXJyb3JzJ11bMF1bJ21lc3NhZ2UnXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+bGFzdEVycm9yID0gdHJpbSgoJGFwaUVycm9yID86ICdUd2l0dGVyL1ggQVBJIHJlcXVlc3QgZmFpbGVkJykgLiAoJGVycm9yID8gJyAoJyAuICRlcnJvciAuICcpJyA6ICcnKSk7CiAgICAgICAgICAgIExvZ2dlcjo6bG9nKCdlcnJvcicsICdUd2l0dGVyIHB1Ymxpc2ggZmFpbGVkJywgWwogICAgICAgICAgICAgICAgJ3N0YXR1cycgPT4gJHN0YXR1cywKICAgICAgICAgICAgICAgICdlcnJvcicgPT4gJGVycm9yLAogICAgICAgICAgICAgICAgJ3Jlc3BvbnNlJyA9PiAkcmVzcG9uc2UsCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBMb2dnZXI6OmxvZygnaW5mbycsICdUd2VldCBjcmVhdGVkJywgWydzdGF0dXMnID0+ICRzdGF0dXNdKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlKHN0cmluZyAkdGVtcGxhdGUsIHNiX2NvbnRlbnQgJGNvbnRlbnQpOiBzdHJpbmcKICAgIHsKICAgICAgICAkc21hcnR5ID0gXENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldFNtYXJ0eSgpOwogICAgICAgICRzbWFydHktPmFzc2lnbignY29udGVudCcsICRjb250ZW50KTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ3R3aXR0ZXInLCAkdGhpcy0+Y29uZmlnLT5nZXRUd2l0dGVyQ29uZmlnKCkpOwogICAgICAgIHJldHVybiB0cmltKCRzbWFydHktPmZldGNoKCdzdHJpbmc6JyAuICR0ZW1wbGF0ZSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0RXJyb3IoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5sYXN0RXJyb3I7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjYW5Vc2VPQXV0aDEoYXJyYXkgJGNmZyk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJGNmZ1snYXBpX2tleSddICE9PSAnJwogICAgICAgICAgICAmJiAkY2ZnWydhcGlfc2VjcmV0J10gIT09ICcnCiAgICAgICAgICAgICYmICRjZmdbJ2FjY2Vzc190b2tlbiddICE9PSAnJwogICAgICAgICAgICAmJiAkY2ZnWydhY2Nlc3Nfc2VjcmV0J10gIT09ICcnOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYnVpbGRPQXV0aDFIZWFkZXIoc3RyaW5nICRtZXRob2QsIHN0cmluZyAkdXJsLCBhcnJheSAkY2ZnKTogc3RyaW5nCiAgICB7CiAgICAgICAgJG9hdXRoUGFyYW1zID0gWwogICAgICAgICAgICAnb2F1dGhfY29uc3VtZXJfa2V5JyA9PiAkY2ZnWydhcGlfa2V5J10sCiAgICAgICAgICAgICdvYXV0aF9ub25jZScgPT4gYmluMmhleChyYW5kb21fYnl0ZXMoMTYpKSwKICAgICAgICAgICAgJ29hdXRoX3NpZ25hdHVyZV9tZXRob2QnID0+ICdITUFDLVNIQTEnLAogICAgICAgICAgICAnb2F1dGhfdGltZXN0YW1wJyA9PiAoc3RyaW5nKSB0aW1lKCksCiAgICAgICAgICAgICdvYXV0aF90b2tlbicgPT4gJGNmZ1snYWNjZXNzX3Rva2VuJ10sCiAgICAgICAgICAgICdvYXV0aF92ZXJzaW9uJyA9PiAnMS4wJywKICAgICAgICBdOwoKICAgICAgICAkYmFzZVN0cmluZyA9ICR0aGlzLT5idWlsZEJhc2VTdHJpbmcoJG1ldGhvZCwgJHVybCwgJG9hdXRoUGFyYW1zKTsKICAgICAgICAkc2lnbmluZ0tleSA9IHJhd3VybGVuY29kZSgkY2ZnWydhcGlfc2VjcmV0J10pIC4gJyYnIC4gcmF3dXJsZW5jb2RlKCRjZmdbJ2FjY2Vzc19zZWNyZXQnXSk7CiAgICAgICAgJG9hdXRoUGFyYW1zWydvYXV0aF9zaWduYXR1cmUnXSA9IGJhc2U2NF9lbmNvZGUoaGFzaF9obWFjKCdzaGExJywgJGJhc2VTdHJpbmcsICRzaWduaW5nS2V5LCB0cnVlKSk7CgogICAgICAgICRoZWFkZXJQYXJ0cyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRvYXV0aFBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAkaGVhZGVyUGFydHNbXSA9IHJhd3VybGVuY29kZSgka2V5KSAuICc9IicgLiByYXd1cmxlbmNvZGUoJHZhbHVlKSAuICciJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAnQXV0aG9yaXphdGlvbjogT0F1dGggJyAuIGltcGxvZGUoJywgJywgJGhlYWRlclBhcnRzKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkQmFzZVN0cmluZyhzdHJpbmcgJG1ldGhvZCwgc3RyaW5nICR1cmwsIGFycmF5ICRwYXJhbXMpOiBzdHJpbmcKICAgIHsKICAgICAgICBrc29ydCgkcGFyYW1zKTsKICAgICAgICAkcGFpcnMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICRwYWlyc1tdID0gcmF3dXJsZW5jb2RlKCRrZXkpIC4gJz0nIC4gcmF3dXJsZW5jb2RlKChzdHJpbmcpICR2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RydG91cHBlcigkbWV0aG9kKSAuICcmJwogICAgICAgICAgICAuIHJhd3VybGVuY29kZSgkdXJsKSAuICcmJwogICAgICAgICAgICAuIHJhd3VybGVuY29kZShpbXBsb2RlKCcmJywgJHBhaXJzKSk7CiAgICB9Cn0KCg==]]></data>
	</file>
	<file>
	  <filename>/lib/Services/UrlShortener.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIE1BU19Tb2NpYWxzXFNlcnZpY2VzOwoKdXNlIE1BU19Tb2NpYWxzOwoKY2xhc3MgVXJsU2hvcnRlbmVyCnsKCXByaXZhdGUgTUFTX1NvY2lhbHMgJG1vZHVsZTsKCXByaXZhdGUgQ29uZmlnUmVwb3NpdG9yeSAkY29uZmlnOwoJcHJpdmF0ZSBcQURPQ29ubmVjdGlvbiAkZGI7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KE1BU19Tb2NpYWxzICRtb2R1bGUpCgl7CgkJJHRoaXMtPm1vZHVsZSA9ICRtb2R1bGU7CgkJJHRoaXMtPmNvbmZpZyA9IG5ldyBDb25maWdSZXBvc2l0b3J5KCRtb2R1bGUpOwoJCSR0aGlzLT5kYiA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXREYigpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzaG9ydGVuKHN0cmluZyAkdXJsKTogP3N0cmluZwoJewoJCSRwcm92aWRlciA9IHN0cnRvbG93ZXIodHJpbSgoc3RyaW5nKSAkdGhpcy0+Y29uZmlnLT5nZXQoJ21hc19zb2NpYWxzX3Nob3J0ZW5lcicsICcnKSkpOwoJCWlmICgkcHJvdmlkZXIgPT09ICcnKSByZXR1cm4gbnVsbDsKCQkkdXNlQ2FjaGUgPSAoYm9vbCkgJHRoaXMtPm1vZHVsZS0+R2V0UHJlZmVyZW5jZSgnbWFzX3NvY2lhbHNfc2hvcnRlbmVyX2NhY2hlJywgMSk7CgkJaWYgKCR1c2VDYWNoZSkgewoJCQkkdGhpcy0+ZW5zdXJlQ2FjaGVUYWJsZSgpOwoJCQkkY2FjaGVkID0gJHRoaXMtPmdldEZyb21DYWNoZSgkdXJsKTsKCQkJaWYgKCRjYWNoZWQpIHJldHVybiAkY2FjaGVkOwoJCX0KCQlzd2l0Y2ggKCRwcm92aWRlcikgewoJCQljYXNlICd5b3VybHMnOgoJCQkJJHNob3J0ID0gJHRoaXMtPnNob3J0ZW5Zb3VybHMoJHVybCk7CgkJCQlicmVhazsKCQkJY2FzZSAnYml0bHknOgoJCQkJJHNob3J0ID0gJHRoaXMtPnNob3J0ZW5CaXRseSgkdXJsKTsKCQkJCWJyZWFrOwoJCQljYXNlICd0aW55dXJsJzoKCQkJCSRzaG9ydCA9ICR0aGlzLT5zaG9ydGVuVGlueVVybCgkdXJsKTsKCQkJCWJyZWFrOwoJCQlkZWZhdWx0OgoJCQkJJHNob3J0ID0gbnVsbDsKCQl9CgkJaWYgKCR1c2VDYWNoZSAmJiAkc2hvcnQpIHsKCQkJJHRoaXMtPnNhdmVUb0NhY2hlKCR1cmwsICRzaG9ydCk7CgkJfQoJCXJldHVybiAkc2hvcnQ7Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBzaG9ydGVuWW91cmxzKHN0cmluZyAkdXJsKTogP3N0cmluZwoJewoJCSRlbmRwb2ludCA9IHRyaW0oKHN0cmluZykgJHRoaXMtPmNvbmZpZy0+Z2V0KCdtYXNfc29jaWFsc195b3VybHNfZW5kcG9pbnQnLCAnJykpOwoJCSRzaWduYXR1cmUgPSB0cmltKChzdHJpbmcpICR0aGlzLT5jb25maWctPmdldCgnbWFzX3NvY2lhbHNfeW91cmxzX3NpZ25hdHVyZScsICcnKSk7CgkJaWYgKCRlbmRwb2ludCA9PT0gJycgfHwgJHNpZ25hdHVyZSA9PT0gJycpIHJldHVybiBudWxsOwoKCQkkY2ggPSBjdXJsX2luaXQoJGVuZHBvaW50KTsKCQkkcG9zdCA9IGh0dHBfYnVpbGRfcXVlcnkoWwoJCQknc2lnbmF0dXJlJyA9PiAkc2lnbmF0dXJlLAoJCQknYWN0aW9uJyA9PiAnc2hvcnR1cmwnLAoJCQknZm9ybWF0JyA9PiAnanNvbicsCgkJCSd1cmwnID0+ICR1cmwsCgkJXSk7CgkJY3VybF9zZXRvcHRfYXJyYXkoJGNoLCBbCgkJCUNVUkxPUFRfUE9TVCA9PiB0cnVlLAoJCQlDVVJMT1BUX1BPU1RGSUVMRFMgPT4gJHBvc3QsCgkJCUNVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gdHJ1ZSwKCQkJQ1VSTE9QVF9USU1FT1VUID0+IDEwLAoJCV0pOwoJCSRyZXNwb25zZSA9IGN1cmxfZXhlYygkY2gpOwoJCSRzdGF0dXMgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19SRVNQT05TRV9DT0RFKTsKCQljdXJsX2Nsb3NlKCRjaCk7CgkJaWYgKCRzdGF0dXMgPj0gNDAwIHx8ICRyZXNwb25zZSA9PT0gZmFsc2UpIHJldHVybiBudWxsOwoJCSRkYXRhID0ganNvbl9kZWNvZGUoJHJlc3BvbnNlLCB0cnVlKTsKCQlpZiAoaXNzZXQoJGRhdGFbJ3Nob3J0dXJsJ10pKSByZXR1cm4gJGRhdGFbJ3Nob3J0dXJsJ107CgkJcmV0dXJuIG51bGw7Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBzaG9ydGVuQml0bHkoc3RyaW5nICR1cmwpOiA/c3RyaW5nCgl7CgkJJHRva2VuID0gdHJpbSgoc3RyaW5nKSAkdGhpcy0+Y29uZmlnLT5nZXQoJ21hc19zb2NpYWxzX2JpdGx5X3Rva2VuJywgJycpKTsKCQlpZiAoJHRva2VuID09PSAnJykgcmV0dXJuIG51bGw7CgkJJGNoID0gY3VybF9pbml0KCdodHRwczovL2FwaS1zc2wuYml0bHkuY29tL3Y0L3Nob3J0ZW4nKTsKCQkkcGF5bG9hZCA9IGpzb25fZW5jb2RlKFsnbG9uZ191cmwnID0+ICR1cmxdLCBKU09OX1VORVNDQVBFRF9TTEFTSEVTKTsKCQljdXJsX3NldG9wdF9hcnJheSgkY2gsIFsKCQkJQ1VSTE9QVF9QT1NUID0+IHRydWUsCgkJCUNVUkxPUFRfUE9TVEZJRUxEUyA9PiAkcGF5bG9hZCwKCQkJQ1VSTE9QVF9IVFRQSEVBREVSID0+IFsKCQkJCSdBdXRob3JpemF0aW9uOiBCZWFyZXIgJyAuICR0b2tlbiwKCQkJCSdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nLAoJCQldLAoJCQlDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IHRydWUsCgkJCUNVUkxPUFRfVElNRU9VVCA9PiAxMCwKCQldKTsKCQkkcmVzcG9uc2UgPSBjdXJsX2V4ZWMoJGNoKTsKCQkkc3RhdHVzID0gY3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSk7CgkJY3VybF9jbG9zZSgkY2gpOwoJCWlmICgkc3RhdHVzID49IDQwMCB8fCAkcmVzcG9uc2UgPT09IGZhbHNlKSByZXR1cm4gbnVsbDsKCQkkZGF0YSA9IGpzb25fZGVjb2RlKCRyZXNwb25zZSwgdHJ1ZSk7CgkJaWYgKGlzc2V0KCRkYXRhWydsaW5rJ10pKSByZXR1cm4gJGRhdGFbJ2xpbmsnXTsKCQlyZXR1cm4gbnVsbDsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIHNob3J0ZW5UaW55VXJsKHN0cmluZyAkdXJsKTogP3N0cmluZwoJewoJCSRhcGkgPSAnaHR0cHM6Ly90aW55dXJsLmNvbS9hcGktY3JlYXRlLnBocD91cmw9JyAuIHJhd3VybGVuY29kZSgkdXJsKTsKCQkkcmVzdWx0ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRhcGkpOwoJCWlmICgkcmVzdWx0ICYmIHN0cnBvcygkcmVzdWx0LCAnaHR0cCcpID09PSAwKSByZXR1cm4gdHJpbSgkcmVzdWx0KTsKCQlyZXR1cm4gbnVsbDsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIGVuc3VyZUNhY2hlVGFibGUoKTogdm9pZAoJewoJCSRwcmVmaXggPSBcY21zX2RiX3ByZWZpeCgpOwoJCSR0YWJsZSA9ICRwcmVmaXggLiAnbW9kdWxlX21hc19zb2NpYWxzX3Nob3J0Y2FjaGUnOwoJCSRleGlzdHMgPSAkdGhpcy0+ZGItPk1ldGFUYWJsZXMoJ1RBQkxFUycsIGZhbHNlKTsKCQlpZiAoJGV4aXN0cyAmJiBpbl9hcnJheSgkdGFibGUsICRleGlzdHMpKSByZXR1cm47CgkJJHNxbCA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAkdGFibGUgKAoJCQlpZCBJTlQgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVksCgkJCWxvbmdfdXJsIFZBUkNIQVIoMjA0OCkgTk9UIE5VTEwsCgkJCXNob3J0X3VybCBWQVJDSEFSKDUxMikgTk9UIE5VTEwsCgkJCWNyZWF0ZWRfYXQgREFURVRJTUUgTk9UIE5VTEwKCQkpIEVOR0lORT1Jbm5vREIiOwoJCUAkdGhpcy0+ZGItPkV4ZWN1dGUoJHNxbCk7Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBnZXRGcm9tQ2FjaGUoc3RyaW5nICR1cmwpOiA/c3RyaW5nCgl7CgkJJHByZWZpeCA9IFxjbXNfZGJfcHJlZml4KCk7CgkJJHRhYmxlID0gJHByZWZpeCAuICdtb2R1bGVfbWFzX3NvY2lhbHNfc2hvcnRjYWNoZSc7CgkJJHJvdyA9ICR0aGlzLT5kYi0+R2V0Um93KCJTRUxFQ1Qgc2hvcnRfdXJsIEZST00gJHRhYmxlIFdIRVJFIGxvbmdfdXJsID0gPyIsIFskdXJsXSk7CgkJaWYgKCRyb3cgJiYgIWVtcHR5KCRyb3dbJ3Nob3J0X3VybCddKSkgcmV0dXJuICRyb3dbJ3Nob3J0X3VybCddOwoJCXJldHVybiBudWxsOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gc2F2ZVRvQ2FjaGUoc3RyaW5nICR1cmwsIHN0cmluZyAkc2hvcnQpOiB2b2lkCgl7CgkJJHByZWZpeCA9IFxjbXNfZGJfcHJlZml4KCk7CgkJJHRhYmxlID0gJHByZWZpeCAuICdtb2R1bGVfbWFzX3NvY2lhbHNfc2hvcnRjYWNoZSc7CgkJJHRoaXMtPmRiLT5FeGVjdXRlKCJJTlNFUlQgSU5UTyAkdGFibGUgKGxvbmdfdXJsLCBzaG9ydF91cmwsIGNyZWF0ZWRfYXQpIFZBTFVFUyAoPywgPywgTk9XKCkpIiwgWyR1cmwsICRzaG9ydF0pOwoJfQp9CgoK]]></data>
	</file>
	<file>
	  <filename>/lib/Support/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/Support/Param.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZSBoZWxwZXJzCiAqLwpuYW1lc3BhY2UgTUFTX1NvY2lhbHNcU3VwcG9ydDsKCmZpbmFsIGNsYXNzIFBhcmFtCnsKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U3RyaW5nKCRzcmMsIHN0cmluZyAka2V5LCBzdHJpbmcgJGRlZmF1bHQgPSAnJykKCXsKCQlpZiAoaXNfYXJyYXkoJHNyYykgJiYgYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkc3JjKSkgewoJCQkkdmFsID0gKHN0cmluZykgJHNyY1ska2V5XTsKCQkJcmV0dXJuIHRyaW0oJHZhbCkgIT09ICcnID8gdHJpbSgkdmFsKSA6ICRkZWZhdWx0OwoJCX0KCQlyZXR1cm4gJGRlZmF1bHQ7Cgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRCb29sKCRzcmMsIHN0cmluZyAka2V5LCBib29sICRkZWZhdWx0ID0gZmFsc2UpOiBib29sCgl7CgkJaWYgKGlzX2FycmF5KCRzcmMpICYmIGFycmF5X2tleV9leGlzdHMoJGtleSwgJHNyYykpIHsKCQkJJHZhbCA9ICRzcmNbJGtleV07CgkJCWlmIChpc19ib29sKCR2YWwpKSByZXR1cm4gJHZhbDsKCQkJaWYgKGlzX251bWVyaWMoJHZhbCkpIHJldHVybiAoKGludCkkdmFsKSAhPT0gMDsKCQkJJHZhbCA9IHN0cnRvbG93ZXIoKHN0cmluZykkdmFsKTsKCQkJcmV0dXJuIGluX2FycmF5KCR2YWwsIFsnMScsJ3RydWUnLCd5ZXMnLCdvbiddLCB0cnVlKTsKCQl9CgkJcmV0dXJuICRkZWZhdWx0OwoJfQp9CgoK]]></data>
	</file>
	<file>
	  <filename>/lib/Support/Url.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZSBoZWxwZXJzCiAqLwpuYW1lc3BhY2UgTUFTX1NvY2lhbHNcU3VwcG9ydDsKCmZpbmFsIGNsYXNzIFVybAp7CglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN1cnJlbnQoKTogc3RyaW5nCgl7CgkJJGNvbmZpZyA9IFxjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsKCQkkcm9vdCA9IHJ0cmltKCRjb25maWdbJ3Jvb3RfdXJsJ10sICcvJyk7CgkJJHVyaSA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddID8/ICcvJzsKCQlyZXR1cm4gJHJvb3QgLiAkdXJpOwoJfQp9CgoK]]></data>
	</file>
	<file>
	  <filename>/MAS_Socials.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Cjw/cGhwCi8qKgogKiBNQVMgU29jaWFscyBtb2R1bGUKICoKICogQHBhY2thZ2UgTUFTX1NvY2lhbHMKICogQGF1dGhvciBtYXN0ZXIzMzk1CiAqIEBjb3B5cmlnaHQgMjAyNSBtYXN0ZXIzMzk1CiAqIEBsaWNlbnNlIEdQTC0zLjAtb3ItbGF0ZXIKICovCgp1c2UgQ01TTVNcSG9va01hbmFnZXI7CnVzZSBNQVNfU29jaWFsc1xTZXJ2aWNlc1xDb25maWdSZXBvc2l0b3J5Owp1c2UgTUFTX1NvY2lhbHNcU2VydmljZXNcRGlzY29yZE5vdGlmaWVyOwp1c2UgTUFTX1NvY2lhbHNcU2VydmljZXNcRmFjZWJvb2tQdWJsaXNoZXI7CnVzZSBNQVNfU29jaWFsc1xTZXJ2aWNlc1xMb2dnZXI7CnVzZSBNQVNfU29jaWFsc1xTZXJ2aWNlc1xUd2l0dGVyUHVibGlzaGVyOwp1c2UgTUFTX1NvY2lhbHNcU2VydmljZXNcVGlrVG9rUHVibGlzaGVyOwp1c2UgTUFTX1NvY2lhbHNcU3VwcG9ydFxQYXJhbTsKdXNlIE1BU19Tb2NpYWxzXFN1cHBvcnRcVXJsOwoKaWYgKCFkZWZpbmVkKCdNT0RfTUFTX1NPQ0lBTFMnKSkgewogICAgZGVmaW5lKCdNT0RfTUFTX1NPQ0lBTFMnLCAnTUFTX1NvY2lhbHMnKTsKfQoKZmluYWwgY2xhc3MgTUFTX1NvY2lhbHMgZXh0ZW5kcyBDTVNNb2R1bGUKewogICAgcHVibGljIGNvbnN0IFBFUk1fTUFOQUdFID0gJ01hbmFnZSBNQVMgU29jaWFscyc7CiAgICBwdWJsaWMgY29uc3QgUFJFRl9BRE1JTl9TRUNUSU9OID0gJ21hc19hZG1pbl9zZWN0aW9uJzsKICAgIHB1YmxpYyBjb25zdCBQUkVGX0ZSSUVORExZTkFNRSA9ICdmcmllbmRseW5hbWUnOwogICAgcHVibGljIGNvbnN0IFBSRUZfRElTQ09SRF9FTkFCTEVEID0gJ21hc19kaXNjb3JkX2VuYWJsZWQnOwogICAgcHVibGljIGNvbnN0IFBSRUZfRkFDRUJPT0tfRU5BQkxFRCA9ICdtYXNfZmFjZWJvb2tfZW5hYmxlZCc7CiAgICBwdWJsaWMgY29uc3QgUFJFRl9UV0lUVEVSX0VOQUJMRUQgPSAnbWFzX3R3aXR0ZXJfZW5hYmxlZCc7CiAgICBwdWJsaWMgY29uc3QgUFJFRl9USUtUT0tfRU5BQkxFRCA9ICdtYXNfdGlrdG9rX2VuYWJsZWQnOwogICAgcHVibGljIGNvbnN0IFBSRUZfVEVNUExBVEVfRElTQ09SRCA9ICdtYXNfdHBsX2Rpc2NvcmQnOwogICAgcHVibGljIGNvbnN0IFBSRUZfVEVNUExBVEVfRkFDRUJPT0sgPSAnbWFzX3RwbF9mYWNlYm9vayc7CiAgICBwdWJsaWMgY29uc3QgUFJFRl9URU1QTEFURV9UV0lUVEVSID0gJ21hc190cGxfdHdpdHRlcic7CiAgICBwdWJsaWMgY29uc3QgUFJFRl9URU1QTEFURV9USUtUT0sgPSAnbWFzX3RwbF90aWt0b2snOwogICAgcHVibGljIGNvbnN0IFBSRUZfU0hPV19ET05BVElPTlMgPSAnbWFzX3Nob3dfZG9uYXRpb25zJzsKICAgIHB1YmxpYyBjb25zdCBQUkVGX1RXX1NDUkVFTk5BTUUgPSAnbWFzX3R3X3NjcmVlbm5hbWUnOwogICAgcHVibGljIGNvbnN0IFBSRUZfVFdfQVVUSF9URU1QTEFURSA9ICdtYXNfdHdfYXV0aF90cGwnOwogICAgcHVibGljIGNvbnN0IFBSRUZfVFdfVElNRUxJTkVfVEVNUExBVEUgPSAnbWFzX3R3X3RpbWVsaW5lX3RwbCc7CiAgICBwdWJsaWMgY29uc3QgUFJFRl9BVVRPX05FV1MgPSAnbWFzX2F1dG9fbmV3cyc7CiAgICBwdWJsaWMgY29uc3QgUFJFRl9BVVRPX0NHQkxPRyA9ICdtYXNfYXV0b19jZ2Jsb2cnOwoKICAgIHByaXZhdGUgc3RhdGljIGJvb2wgJGhvb2tzUmVnaXN0ZXJlZCA9IGZhbHNlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRWZXJzaW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gJzEuMC4wJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yKCkKICAgIHsKICAgICAgICByZXR1cm4gJ21hc3RlcjMzOTUnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICdpbmZvQG5ld3N0YXJnZXRlZC5jb20nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3JVUkwoKQogICAgewogICAgICAgIHJldHVybiAnaHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tL2NvbnRhY3QvJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0SGVscCgpCiAgICB7CiAgICAgICAgcmV0dXJuIEBmaWxlX2dldF9jb250ZW50cyhfX0RJUl9fIC4gJy9oZWxwLmluYycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQogICAgewogICAgICAgIHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoX19ESVJfXyAuICcvY2hhbmdlbG9nLmluYycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEhhc0FkbWluKCkKICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkKICAgIHsKICAgICAgICAkY29uZmlnID0gY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICAgJGRlZmF1bHQgPSAkY29uZmlnWydtYXNfc29jaWFsc19kZWZhdWx0X2FkbWluX3NlY3Rpb24nXSA/PyAnZXh0ZW5zaW9ucyc7CiAgICAgICAgcmV0dXJuICR0aGlzLT5HZXRQcmVmZXJlbmNlKHNlbGY6OlBSRUZfQURNSU5fU0VDVElPTiwgJGRlZmF1bHQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCiAgICB7CiAgICAgICAgJHVpZCA9IGdldF91c2VyaWQoZmFsc2UpOwogICAgICAgIGlmICgkdWlkID09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKHNlbGY6OlBFUk1fTUFOQUdFKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNoZWNrX3Blcm1pc3Npb24oJHVpZCwgJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgfHwgY2hlY2tfcGVybWlzc2lvbigkdWlkLCAnTW9kaWZ5IFRlbXBsYXRlcycpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpCiAgICB7CiAgICAgICAgLy8gTm8gZXh0ZXJuYWwsIGRlcHJlY2F0ZWQgZGVwZW5kZW5jaWVzCiAgICAgICAgcmV0dXJuIFtdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpCiAgICB7CiAgICAgICAgcmV0dXJuICcyLjInOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gTGF6eUxvYWRBZG1pbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpCiAgICB7CiAgICAgICAgJGZyaWVuZGx5bmFtZSA9IHRyaW0oJHRoaXMtPkdldFByZWZlcmVuY2Uoc2VsZjo6UFJFRl9GUklFTkRMWU5BTUUpKTsKICAgICAgICBpZiAoISRmcmllbmRseW5hbWUpIHsKICAgICAgICAgICAgJGZyaWVuZGx5bmFtZSA9ICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRmcmllbmRseW5hbWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEluaXRpYWxpemVBZG1pbigpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyU21hcnR5UGx1Z2lucygpOwogICAgICAgICR0aGlzLT5yZWdpc3Rlckhvb2tzKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEluaXRpYWxpemVGcm9udGVuZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyU21hcnR5UGx1Z2lucygpOwogICAgICAgICR0aGlzLT5yZWdpc3Rlckhvb2tzKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIFJlZ2lzdGVyRXZlbnRzKCkKICAgIHsKICAgICAgICAkdGhpcy0+QWRkRXZlbnRIYW5kbGVyKCdOZXdzJywgJ05ld3NBcnRpY2xlQWRkZWQnLCBmYWxzZSk7CiAgICAgICAgJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignTmV3cycsICdOZXdzQXJ0aWNsZUVkaXRlZCcsIGZhbHNlKTsKICAgICAgICAkdGhpcy0+QWRkRXZlbnRIYW5kbGVyKCdDR0Jsb2cnLCAnQ0dCbG9nQXJ0aWNsZUFkZGVkJywgZmFsc2UpOwogICAgICAgICR0aGlzLT5BZGRFdmVudEhhbmRsZXIoJ0NHQmxvZycsICdDR0Jsb2dBcnRpY2xlRWRpdGVkJywgZmFsc2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBEb0V2ZW50KCRvcmlnaW5hdG9yLCAkZXZlbnRuYW1lLCAmJHBhcmFtcykKICAgIHsKICAgICAgICAkcGF5bG9hZCA9IGlzX2FycmF5KCRwYXJhbXMpID8gJHBhcmFtcyA6IFtdOwogICAgICAgIGlmICgkb3JpZ2luYXRvciA9PT0gJ05ld3MnKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZShzZWxmOjpQUkVGX0FVVE9fTkVXUywgMSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5oYW5kbGVOZXdzUGF5bG9hZCgkcGF5bG9hZCwgJGV2ZW50bmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRvcmlnaW5hdG9yID09PSAnQ0dCbG9nJykgewogICAgICAgICAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2Uoc2VsZjo6UFJFRl9BVVRPX0NHQkxPRywgMSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5oYW5kbGVDR0Jsb2dQYXlsb2FkKCRwYXlsb2FkLCAkZXZlbnRuYW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlZ2lzdGVyU21hcnR5UGx1Z2lucygpOiB2b2lkCiAgICB7CiAgICAgICAgJHNtYXJ0eSA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRTbWFydHkoKTsKICAgICAgICAvLyBOZXcsIG5vbi1jb25mbGljdGluZyB0YWcgbmFtZXMKICAgICAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignbWFzX3NoYXJlJywgWyR0aGlzLCAncGx1Z2luX3NvY2lhbF9ibGFzdGVyJ10pOwogICAgICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdtYXNfYWRqdXN0X3VybCcsIFskdGhpcywgJ3BsdWdpbl9jZ3NiX2FkanVzdF91cmwnXSk7CiAgICAgICAgLy8gVW5pcXVlLCBtb2R1bGUtc2NvcGVkIHRhYiBoZWxwZXJzIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBvdGhlciBtb2R1bGVzCiAgICAgICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ21hc19zdGFydF90YWJzJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJzxkaXYgY2xhc3M9Im1hcy10YWJzIj4nOyB9KTsKICAgICAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignbWFzX2VuZF90YWJzJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJzwvZGl2Pic7IH0pOwogICAgICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdtYXNfdGFiaGVhZGVyJywgZnVuY3Rpb24gKCRwYXJhbXMpIHsKICAgICAgICAgICAgJGxhYmVsID0gaXNzZXQoJHBhcmFtc1snbGFiZWwnXSkgPyBodG1sc3BlY2lhbGNoYXJzKChzdHJpbmcpJHBhcmFtc1snbGFiZWwnXSwgRU5UX1FVT1RFUywgJ1VURi04JykgOiAnJzsKICAgICAgICAgICAgcmV0dXJuICc8aDMgY2xhc3M9Im1hcy10YWJoZWFkZXIiPicgLiAkbGFiZWwgLiAnPC9oMz4nOwogICAgICAgIH0pOwogICAgICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdtYXNfdGFiY29udGVudF9zdGFydCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuICc8ZGl2IGNsYXNzPSJtYXMtdGFiY29udGVudCI+JzsgfSk7CiAgICAgICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ21hc190YWJjb250ZW50X2VuZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuICc8L2Rpdj4nOyB9KTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlZ2lzdGVySG9va3MoKTogdm9pZAogICAgewogICAgICAgIGlmIChzZWxmOjokaG9va3NSZWdpc3RlcmVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIEhvb2tNYW5hZ2VyOjphZGRfaG9vaygnTmV3czo6TmV3c0FydGljbGVBZGRlZCcsIGZ1bmN0aW9uIChhcnJheSAkcGF5bG9hZCA9IFtdKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZShzZWxmOjpQUkVGX0FVVE9fTkVXUywgMSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5oYW5kbGVOZXdzUGF5bG9hZCgkcGF5bG9hZCwgJ2FkZGVkJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgSG9va01hbmFnZXI6OmFkZF9ob29rKCdOZXdzOjpOZXdzQXJ0aWNsZUVkaXRlZCcsIGZ1bmN0aW9uIChhcnJheSAkcGF5bG9hZCA9IFtdKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZShzZWxmOjpQUkVGX0FVVE9fTkVXUywgMSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5oYW5kbGVOZXdzUGF5bG9hZCgkcGF5bG9hZCwgJ2VkaXRlZCcpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIEhvb2tNYW5hZ2VyOjphZGRfaG9vaygnQ0dCbG9nOjpDR0Jsb2dBcnRpY2xlQWRkZWQnLCBmdW5jdGlvbiAoYXJyYXkgJHBheWxvYWQgPSBbXSkgewogICAgICAgICAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2Uoc2VsZjo6UFJFRl9BVVRPX0NHQkxPRywgMSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5oYW5kbGVDR0Jsb2dQYXlsb2FkKCRwYXlsb2FkLCAnYWRkZWQnKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBIb29rTWFuYWdlcjo6YWRkX2hvb2soJ0NHQmxvZzo6Q0dCbG9nQXJ0aWNsZUVkaXRlZCcsIGZ1bmN0aW9uIChhcnJheSAkcGF5bG9hZCA9IFtdKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZShzZWxmOjpQUkVGX0FVVE9fQ0dCTE9HLCAxKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmhhbmRsZUNHQmxvZ1BheWxvYWQoJHBheWxvYWQsICdlZGl0ZWQnKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBzZWxmOjokaG9va3NSZWdpc3RlcmVkID0gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcGx1Z2luX2Nnc2JfYWRqdXN0X3VybCgkcGFyYW1zLCAmJHRlbXBsYXRlKQogICAgewogICAgICAgICR1cmwgPSBQYXJhbTo6Z2V0U3RyaW5nKCRwYXJhbXMsICd1cmwnKTsKICAgICAgICBpZiAoISR1cmwpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkc2hvcnRlbiA9IFBhcmFtOjpnZXRCb29sKCRwYXJhbXMsICdzaG9ydGVuJyk7CgogICAgICAgICRvYmogPSBuZXcgXGNtc191cmwoJHVybCk7CiAgICAgICAgaWYgKCEkb2JqLT5nZXRfc2NoZW1lKCkpIHsKICAgICAgICAgICAgJG9iai0+c2V0X3NjaGVtZSgnaHR0cHMnKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleSA9PiAkdmFsKSB7CiAgICAgICAgICAgIHN3aXRjaCAoJGtleSkgewogICAgICAgICAgICAgICAgY2FzZSAndXJsJzoKICAgICAgICAgICAgICAgIGNhc2UgJ2Fzc2lnbic6CiAgICAgICAgICAgICAgICBjYXNlICdzaG9ydGVuJzoKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3NjYWxhcigkdmFsKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkb2JqLT5zZXRfcXVlcnl2YXIoJGtleSwgdXJsZW5jb2RlKCR2YWwpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRvdXQgPSAoc3RyaW5nKSAkb2JqOwoKICAgICAgICBpZiAoJHNob3J0ZW4pIHsKICAgICAgICAgICAgcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL2xpYi9TZXJ2aWNlcy9VcmxTaG9ydGVuZXIucGhwJzsKICAgICAgICAgICAgJHNob3J0ZW5lciA9IG5ldyBcTUFTX1NvY2lhbHNcU2VydmljZXNcVXJsU2hvcnRlbmVyKCR0aGlzKTsKICAgICAgICAgICAgJHRtcCA9ICRzaG9ydGVuZXItPnNob3J0ZW4oJG91dCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0bXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG91dCA9ICR0bXA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwbHVnaW5fc29jaWFsX2JsYXN0ZXIoJHBhcmFtcywgJiR0ZW1wbGF0ZSkKICAgIHsKICAgICAgICAkdWlkID0gZ2V0X3VzZXJpZChmYWxzZSk7CiAgICAgICAgaWYgKCFjaGVja19wZXJtaXNzaW9uKCR1aWQsIHNlbGY6OlBFUk1fTUFOQUdFKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKE1PRF9NQVNfU09DSUFMUyk7CiAgICAgICAgJHNtYXJ0eSA9ICR0ZW1wbGF0ZS0+c21hcnR5OwogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnbW9kdWxlJyA9PiAnJywKICAgICAgICAgICAgJ2tleScgPT4gJycsCiAgICAgICAgICAgICdzdWJqZWN0JyA9PiAnJywKICAgICAgICAgICAgJ2JvZHknID0+ICcnLAogICAgICAgICAgICAncGljdHVyZScgPT4gJycsCiAgICAgICAgICAgICdyZXR1cm50bycgPT4gVXJsOjpjdXJyZW50KCksCiAgICAgICAgICAgICd0aXRsZScgPT4gJG1vZC0+TGFuZygndGl0bGVfc2hhcmVfc29jaWFsJyksCiAgICAgICAgICAgICd1cmxvbmx5JyA9PiAwLAogICAgICAgICAgICAnaWNvbicgPT4gJ3NvY2lhbF9zbS5naWYnLAogICAgICAgIF07CgogICAgICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJHZhbHVlID0gdHJpbSgkdmFsdWUpOwogICAgICAgICAgICBpZiAoJHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJGtleSwgJGRhdGEpKSB7CiAgICAgICAgICAgICAgICAkZGF0YVska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCgkZGF0YVsnbW9kdWxlJ10gPT09ICcnIHx8ICRkYXRhWydrZXknXSA9PT0gJycpICYmICRkYXRhWydib2R5J10gPT09ICcnKSB7CiAgICAgICAgICAgIGF1ZGl0KCcnLCAnTUFTX1NvY2lhbHMnLCAnY2dzb2NibGFzdGVyIHBsdWdpbiBjYWxsZWQgd2l0aCBpbnZhbGlkIHBhcmFtZXRlcnMnKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHBhcm1zID0gJGRhdGE7CiAgICAgICAgdW5zZXQoJGRhdGFbJ3VybG9ubHknXSwgJGRhdGFbJ2ljb24nXSwgJGRhdGFbJ3RpdGxlJ10pOwogICAgICAgIGZvcmVhY2ggKCRkYXRhIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmICgkdmFsdWUgPT09ICcnKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkZGF0YVska2V5XSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0bXAgPSBbJ2RhdGEnID0+IGJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKCRkYXRhKSldOwogICAgICAgICRvdXQgPSBudWxsOwogICAgICAgIGlmICgkcGFybXNbJ3VybG9ubHknXSkgewogICAgICAgICAgICAkb3V0ID0gJG1vZC0+Y3JlYXRlX3VybCgnY2dzYl8nLCAnYmxhc3QnLCAnJywgJHRtcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGltZ1BhdGggPSAkdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpIC4gJy9pbWFnZXMvJyAuIGJhc2VuYW1lKCRwYXJtc1snaWNvbiddKTsKICAgICAgICAgICAgJGltZyA9ICc8aW1nIHNyYz0iJyAuICRpbWdQYXRoIC4gJyIgYWx0PSInIC4gaHRtbHNwZWNpYWxjaGFycygkcGFybXNbJ3RpdGxlJ10sIEVOVF9RVU9URVMsICdVVEYtOCcpIC4gJyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+JzsKICAgICAgICAgICAgJHVybCA9ICRtb2QtPmNyZWF0ZV91cmwoJ2Nnc2JfJywgJ2JsYXN0JywgJycsICR0bXApOwogICAgICAgICAgICAkb3V0ID0gJzxhIGhyZWY9IicgLiAkdXJsIC4gJyIgdGl0bGU9IicgLiBodG1sc3BlY2lhbGNoYXJzKCRwYXJtc1sndGl0bGUnXSwgRU5UX1FVT1RFUywgJ1VURi04JykgLiAnIj4nIC4gJGltZyAuICc8L2E+JzsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpIHsKICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCAkb3V0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBoYW5kbGVOZXdzUGF5bG9hZChhcnJheSAkcGF5bG9hZCwgc3RyaW5nICRldmVudCk6IHZvaWQKICAgIHsKICAgICAgICAkc3RhdHVzID0gc3RydG9sb3dlcih0cmltKChzdHJpbmcpICgkcGF5bG9hZFsnc3RhdHVzJ10gPz8gJycpKSk7CiAgICAgICAgaWYgKCRzdGF0dXMgIT09ICcnICYmICRzdGF0dXMgIT09ICdwdWJsaXNoZWQnKSB7CiAgICAgICAgICAgIExvZ2dlcjo6bG9nKCdpbmZvJywgJ01BUyBTb2NpYWxzIHNraXBwZWQgTmV3cyBwYXlsb2FkIGR1ZSB0byBzdGF0dXMnLCBbJ3N0YXR1cycgPT4gJHN0YXR1c10pOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICRjb250ZW50ID0gJHRoaXMtPmJ1aWxkTmV3c0NvbnRlbnQoJHBheWxvYWQpOwogICAgICAgIGlmICghJGNvbnRlbnQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+YnJvYWRjYXN0Q29udGVudCgkY29udGVudCwgJ05ld3MnLCBhcnJheV9tZXJnZSgkcGF5bG9hZCwgWydldmVudCcgPT4gJGV2ZW50XSkpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaGFuZGxlQ0dCbG9nUGF5bG9hZChhcnJheSAkcGF5bG9hZCwgc3RyaW5nICRldmVudCk6IHZvaWQKICAgIHsKICAgICAgICAkc3RhdHVzID0gc3RydG9sb3dlcih0cmltKChzdHJpbmcpICgkcGF5bG9hZFsnc3RhdHVzJ10gPz8gJycpKSk7CiAgICAgICAgaWYgKCRzdGF0dXMgIT09ICcnICYmICRzdGF0dXMgIT09ICdwdWJsaXNoZWQnKSB7CiAgICAgICAgICAgIExvZ2dlcjo6bG9nKCdpbmZvJywgJ01BUyBTb2NpYWxzIHNraXBwZWQgQ0dCbG9nIHBheWxvYWQgZHVlIHRvIHN0YXR1cycsIFsnc3RhdHVzJyA9PiAkc3RhdHVzXSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJGNvbnRlbnQgPSAkdGhpcy0+YnVpbGRDR0Jsb2dDb250ZW50KCRwYXlsb2FkKTsKICAgICAgICBpZiAoISRjb250ZW50KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmJyb2FkY2FzdENvbnRlbnQoJGNvbnRlbnQsICdDR0Jsb2cnLCBhcnJheV9tZXJnZSgkcGF5bG9hZCwgWydldmVudCcgPT4gJGV2ZW50XSkpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYnVpbGROZXdzQ29udGVudChhcnJheSAkcGF5bG9hZCk6ID9zYl9jb250ZW50CiAgICB7CiAgICAgICAgJHRpdGxlID0gdHJpbSgkcGF5bG9hZFsndGl0bGUnXSA/PyAnJyk7CiAgICAgICAgaWYgKCR0aXRsZSA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkY29udGVudCA9IG5ldyBzYl9jb250ZW50KCk7CiAgICAgICAgJGNvbnRlbnQtPnRpdGxlID0gJHRpdGxlOwogICAgICAgICRjb250ZW50LT5saW5rdGl0bGUgPSAkdGl0bGU7CiAgICAgICAgJHN1bW1hcnkgPSAkcGF5bG9hZFsnc3VtbWFyeSddID8/ICRwYXlsb2FkWydjb250ZW50J10gPz8gJyc7CiAgICAgICAgJGNvbnRlbnQtPnN1bW1hcnkgPSBzdHJpcF90YWdzKCRzdW1tYXJ5KTsKICAgICAgICAkY29udGVudC0+Y2Fub25pY2FsID0gJHRoaXMtPmJ1aWxkTmV3c1VybCgoaW50KSAoJHBheWxvYWRbJ25ld3NfaWQnXSA/PyAwKSk7CiAgICAgICAgcmV0dXJuICRjb250ZW50OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYnVpbGRDR0Jsb2dDb250ZW50KGFycmF5ICRwYXlsb2FkKTogP3NiX2NvbnRlbnQKICAgIHsKICAgICAgICAkdGl0bGUgPSB0cmltKCRwYXlsb2FkWyd0aXRsZSddID8/ICcnKTsKICAgICAgICBpZiAoJHRpdGxlID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRjb250ZW50ID0gbmV3IHNiX2NvbnRlbnQoKTsKICAgICAgICAkY29udGVudC0+dGl0bGUgPSAkdGl0bGU7CiAgICAgICAgJGNvbnRlbnQtPmxpbmt0aXRsZSA9ICR0aXRsZTsKICAgICAgICAkc3VtbWFyeSA9ICRwYXlsb2FkWydzdW1tYXJ5J10gPz8gJHBheWxvYWRbJ2NvbnRlbnQnXSA/PyAnJzsKICAgICAgICAkY29udGVudC0+c3VtbWFyeSA9IHN0cmlwX3RhZ3MoJHN1bW1hcnkpOwogICAgICAgIGlmICghZW1wdHkoJHBheWxvYWRbJ3VybCddKSkgewogICAgICAgICAgICAkY29udGVudC0+Y2Fub25pY2FsID0gJHBheWxvYWRbJ3VybCddOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjb250ZW50LT5jYW5vbmljYWwgPSAkdGhpcy0+YnVpbGRDR0Jsb2dVcmwoKGludCkgKCRwYXlsb2FkWydjZ2Jsb2dfaWQnXSA/PyAwKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkY29udGVudDsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkTmV3c1VybChpbnQgJG5ld3NJZCk6IHN0cmluZwogICAgewogICAgICAgICRjb25maWcgPSBjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICBpZiAoJG5ld3NJZCA8IDEpIHsKICAgICAgICAgICAgcmV0dXJuICRjb25maWdbJ3Jvb3RfdXJsJ107CiAgICAgICAgfQoKICAgICAgICAkbW9kdWxlID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdOZXdzJyk7CiAgICAgICAgaWYgKCRtb2R1bGUpIHsKICAgICAgICAgICAgJGRldGFpbFJldHVybiA9IChpbnQpICRtb2R1bGUtPkdldFByZWZlcmVuY2UoJ2RldGFpbF9yZXR1cm5pZCcsIC0xKTsKICAgICAgICAgICAgaWYgKCRkZXRhaWxSZXR1cm4gPCAxKSB7CiAgICAgICAgICAgICAgICAkZGV0YWlsUmV0dXJuID0gKGludCkgQ29udGVudE9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5HZXREZWZhdWx0Q29udGVudCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRwYXJhbXMgPSBbJ2FydGljbGVpZCcgPT4gJG5ld3NJZF07CiAgICAgICAgICAgICR1cmwgPSAkbW9kdWxlLT5jcmVhdGVfdXJsKCdjbnRudDAxJywgJ2RldGFpbCcsICRkZXRhaWxSZXR1cm4sICRwYXJhbXMsIHRydWUpOwogICAgICAgICAgICBpZiAoJHVybCkgewogICAgICAgICAgICAgICAgcmV0dXJuICR1cmw7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBzcHJpbnRmKCclcy9uZXdzLyVkJywgcnRyaW0oJGNvbmZpZ1sncm9vdF91cmwnXSwgJy8nKSwgJG5ld3NJZCk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBidWlsZENHQmxvZ1VybChpbnQgJGFydGljbGVJZCk6IHN0cmluZwogICAgewogICAgICAgICRjb25maWcgPSBjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICBpZiAoJGFydGljbGVJZCA8IDEpIHsKICAgICAgICAgICAgcmV0dXJuICRjb25maWdbJ3Jvb3RfdXJsJ107CiAgICAgICAgfQoKICAgICAgICAkbW9kdWxlID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDR0Jsb2cnKTsKICAgICAgICBpZiAoJG1vZHVsZSkgewogICAgICAgICAgICAkZGV0YWlsUmV0dXJuID0gKGludCkgJG1vZHVsZS0+R2V0UHJlZmVyZW5jZSgnZGV0YWlsX3JldHVybmlkJywgLTEpOwogICAgICAgICAgICBpZiAoJGRldGFpbFJldHVybiA8IDEpIHsKICAgICAgICAgICAgICAgICRkZXRhaWxSZXR1cm4gPSAoaW50KSBDb250ZW50T3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCktPkdldERlZmF1bHRDb250ZW50KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHBhcmFtcyA9IFsnYXJ0aWNsZWlkJyA9PiAkYXJ0aWNsZUlkXTsKICAgICAgICAgICAgJHVybCA9ICRtb2R1bGUtPmNyZWF0ZV91cmwoJ2NudG50MDEnLCAnZGV0YWlsJywgJGRldGFpbFJldHVybiwgJHBhcmFtcywgdHJ1ZSk7CiAgICAgICAgICAgIGlmICgkdXJsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHVybDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNwcmludGYoJyVzL2NnYmxvZy8lZCcsIHJ0cmltKCRjb25maWdbJ3Jvb3RfdXJsJ10sICcvJyksICRhcnRpY2xlSWQpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYnJvYWRjYXN0Q29udGVudChzYl9jb250ZW50ICRjb250ZW50LCBzdHJpbmcgJHNvdXJjZSwgYXJyYXkgJGNvbnRleHQgPSBbXSk6IHZvaWQKICAgIHsKICAgICAgICAkY29uZmlnID0gJHRoaXMtPmdldENvbmZpZ1JlcG9zaXRvcnkoKTsKICAgICAgICAkcmVzdWx0cyA9IFtdOwoKICAgICAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2Uoc2VsZjo6UFJFRl9ESVNDT1JEX0VOQUJMRUQsIDEpKSB7CiAgICAgICAgICAgICRub3RpZmllciA9IG5ldyBEaXNjb3JkTm90aWZpZXIoJHRoaXMsICRjb25maWcpOwogICAgICAgICAgICBpZiAoJG5vdGlmaWVyLT5pc0NvbmZpZ3VyZWQoKSkgewogICAgICAgICAgICAgICAgJHRwbCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKHNlbGY6OlBSRUZfVEVNUExBVEVfRElTQ09SRCwgJ3skY29udGVudC0+dGl0bGV9IHskY29udGVudC0+Y2Fub25pY2FsfScpOwogICAgICAgICAgICAgICAgJHJlc3VsdHNbJ2Rpc2NvcmQnXSA9ICRub3RpZmllci0+c2VuZCgkY29udGVudCwgJHRwbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZShzZWxmOjpQUkVGX0ZBQ0VCT09LX0VOQUJMRUQsIDApKSB7CiAgICAgICAgICAgICRwdWJsaXNoZXIgPSBuZXcgRmFjZWJvb2tQdWJsaXNoZXIoJHRoaXMsICRjb25maWcpOwogICAgICAgICAgICBpZiAoJHB1Ymxpc2hlci0+aXNDb25maWd1cmVkKCkpIHsKICAgICAgICAgICAgICAgICR0cGwgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZShzZWxmOjpQUkVGX1RFTVBMQVRFX0ZBQ0VCT09LLCAneyRjb250ZW50LT5zdW1tYXJ5fSB7JGNvbnRlbnQtPmNhbm9uaWNhbH0nKTsKICAgICAgICAgICAgICAgICRyZXN1bHRzWydmYWNlYm9vayddID0gJHB1Ymxpc2hlci0+cHVibGlzaCgkY29udGVudCwgJHRwbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZShzZWxmOjpQUkVGX1RXSVRURVJfRU5BQkxFRCwgMCkpIHsKICAgICAgICAgICAgJHR3aXR0ZXIgPSBuZXcgVHdpdHRlclB1Ymxpc2hlcigkdGhpcywgJGNvbmZpZyk7CiAgICAgICAgICAgIGlmICgkdHdpdHRlci0+aXNDb25maWd1cmVkKCkpIHsKICAgICAgICAgICAgICAgICR0cGwgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZShzZWxmOjpQUkVGX1RFTVBMQVRFX1RXSVRURVIsICd7JGNvbnRlbnQtPnRpdGxlfSB7JGNvbnRlbnQtPmNhbm9uaWNhbH0nKTsKICAgICAgICAgICAgICAgICRyZXN1bHRzWyd0d2l0dGVyJ10gPSAkdHdpdHRlci0+cHVibGlzaCgkY29udGVudCwgJHRwbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFRpa1RvayAoY2FwdGlvbi1vbmx5OyByZXF1aXJlcyB2aWRlbyBpbiBjb250ZXh0IHRvIHB1Ymxpc2g7IG90aGVyd2lzZSBza2lwIGdyYWNlZnVsbHkpCiAgICAgICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKHNlbGY6OlBSRUZfVElLVE9LX0VOQUJMRUQsIDApKSB7CiAgICAgICAgICAgICR0aWt0b2sgPSBuZXcgVGlrVG9rUHVibGlzaGVyKCR0aGlzLCAkY29uZmlnKTsKICAgICAgICAgICAgaWYgKCR0aWt0b2stPmlzQ29uZmlndXJlZCgpKSB7CiAgICAgICAgICAgICAgICAkdHBsID0gJHRoaXMtPkdldFByZWZlcmVuY2Uoc2VsZjo6UFJFRl9URU1QTEFURV9USUtUT0ssICd7JGNvbnRlbnQtPnRpdGxlfSB7JGNvbnRlbnQtPmNhbm9uaWNhbH0nKTsKICAgICAgICAgICAgICAgICRyZXN1bHRzWyd0aWt0b2snXSA9ICR0aWt0b2stPnB1Ymxpc2goJGNvbnRlbnQsICR0cGwsICRjb250ZXh0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGxlZ2FjeVNlbmRlcnMgPSBzYl91dGlsczo6Z2V0X3NlbmRlcnMoKTsKICAgICAgICBpZiAoJGxlZ2FjeVNlbmRlcnMpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHNiX3V0aWxzOjpzZW5kX2JsYXN0KCRjb250ZW50LCBhcnJheV9rZXlzKCRsZWdhY3lTZW5kZXJzKSk7CiAgICAgICAgICAgICAgICAkcmVzdWx0c1snbGVnYWN5J10gPSB0cnVlOwogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgIExvZ2dlcjo6bG9nKCdlcnJvcicsICdMZWdhY3kgc2VuZGVyIGJyb2FkY2FzdCBmYWlsZWQnLCBbJ2Vycm9yJyA9PiAkZS0+Z2V0TWVzc2FnZSgpXSk7CiAgICAgICAgICAgICAgICAkcmVzdWx0c1snbGVnYWN5J10gPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgTG9nZ2VyOjpsb2coJ2luZm8nLCAnTUFTIFNvY2lhbHMgYnJvYWRjYXN0IGNvbXBsZXRlJywgWwogICAgICAgICAgICAnc291cmNlJyA9PiAkc291cmNlLAogICAgICAgICAgICAnY29udGV4dCcgPT4gJGNvbnRleHQsCiAgICAgICAgICAgICdyZXN1bHRzJyA9PiAkcmVzdWx0cywKICAgICAgICBdKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldENvbmZpZ1JlcG9zaXRvcnkoKTogQ29uZmlnUmVwb3NpdG9yeQogICAgewogICAgICAgIHJldHVybiBuZXcgQ29uZmlnUmVwb3NpdG9yeSgkdGhpcyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BUyBTb2NpYWxzIG1vZHVsZSBpbnN0YWxsZXIKICovCgokdGhpcy0+UmVnaXN0ZXJNb2R1bGVQbHVnaW4odHJ1ZSk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKE1BU19Tb2NpYWxzOjpQRVJNX01BTkFHRSwgTUFTX1NvY2lhbHM6OlBFUk1fTUFOQUdFKTsKCiRjb25maWcgPSBjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsKJGRlZmF1bHRTZWN0aW9uID0gJGNvbmZpZ1snbWFzX3NvY2lhbHNfZGVmYXVsdF9hZG1pbl9zZWN0aW9uJ10gPz8gJ2V4dGVuc2lvbnMnOwoKJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfQURNSU5fU0VDVElPTiwgJGRlZmF1bHRTZWN0aW9uKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfRlJJRU5ETFlOQU1FLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJykpOwokdGhpcy0+U2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9ESVNDT1JEX0VOQUJMRUQsIDEpOwokdGhpcy0+U2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9GQUNFQk9PS19FTkFCTEVELCAwKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfVFdJVFRFUl9FTkFCTEVELCAwKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfQVVUT19ORVdTLCAxKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfQVVUT19DR0JMT0csIDEpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnaGlkZWRvbmF0aW9uc3RhYicsICcnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfU0hPV19ET05BVElPTlMsIDEpOwoKJHRoaXMtPlNldFByZWZlcmVuY2UoTUFTX1NvY2lhbHM6OlBSRUZfVEVNUExBVEVfRElTQ09SRCwgJ3skY29udGVudC0+dGl0bGV9IHskY29udGVudC0+Y2Fub25pY2FsfScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZShNQVNfU29jaWFsczo6UFJFRl9URU1QTEFURV9GQUNFQk9PSywgJ3skY29udGVudC0+c3VtbWFyeX0geyRjb250ZW50LT5jYW5vbmljYWx9Jyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKE1BU19Tb2NpYWxzOjpQUkVGX1RFTVBMQVRFX1RXSVRURVIsICd7JGNvbnRlbnQtPnRpdGxlfSB7JGNvbnRlbnQtPmNhbm9uaWNhbH0nKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFVuaW5zdGFsbGF0aW9uIE1ldGhvZCBmb3IgTUFTIFNvY2lhbHMKICovCgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY21zbXMnKSkgZXhpdDsKCi8vIFJlbW92ZSBhbGwgcHJlZmVyZW5jZXMgKHVzaW5nIHN0cmluZyBsaXRlcmFscyBpbnN0ZWFkIG9mIGNvbnN0YW50cyBmb3IgdW5pbnN0YWxsIGNvbXBhdGliaWxpdHkpCiRwcmVmZXJlbmNlcyA9IFsKICAgICdtYXNfYWRtaW5fc2VjdGlvbicsCiAgICAnZnJpZW5kbHluYW1lJywKICAgICdtYXNfZGlzY29yZF9lbmFibGVkJywKICAgICdtYXNfZmFjZWJvb2tfZW5hYmxlZCcsCiAgICAnbWFzX3R3aXR0ZXJfZW5hYmxlZCcsCiAgICAnbWFzX3Rpa3Rva19lbmFibGVkJywKICAgICdtYXNfdHBsX2Rpc2NvcmQnLAogICAgJ21hc190cGxfZmFjZWJvb2snLAogICAgJ21hc190cGxfdHdpdHRlcicsCiAgICAnbWFzX3RwbF90aWt0b2snLAogICAgJ21hc19zaG93X2RvbmF0aW9ucycsCiAgICAnaGlkZWRvbmF0aW9uc3RhYicsCiAgICAnbWFzX3R3X3NjcmVlbm5hbWUnLAogICAgJ21hc190d19hdXRoX3RwbCcsCiAgICAnbWFzX3R3X3RpbWVsaW5lX3RwbCcsCiAgICAnbWFzX2F1dG9fbmV3cycsCiAgICAnbWFzX2F1dG9fY2dibG9nJwpdOwoKZm9yZWFjaCAoJHByZWZlcmVuY2VzIGFzICRwcmVmKSB7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgkcHJlZik7Cn0KCi8vIFJlbW92ZSBwZXJtaXNzaW9uICh1c2luZyBzdHJpbmcgbGl0ZXJhbCBpbnN0ZWFkIG9mIGNvbnN0YW50KQokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTWFuYWdlIE1BUyBTb2NpYWxzJyk7CgovLyBSZW1vdmUgZXZlbnQgaGFuZGxlcnMKJHRoaXMtPlJlbW92ZUV2ZW50SGFuZGxlcignTmV3cycsICdOZXdzQXJ0aWNsZUFkZGVkJyk7CiR0aGlzLT5SZW1vdmVFdmVudEhhbmRsZXIoJ05ld3MnLCAnTmV3c0FydGljbGVFZGl0ZWQnKTsKJHRoaXMtPlJlbW92ZUV2ZW50SGFuZGxlcignQ0dCbG9nJywgJ0NHQmxvZ0FydGljbGVBZGRlZCcpOwokdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCdDR0Jsb2cnLCAnQ0dCbG9nQXJ0aWNsZUVkaXRlZCcpOwoKLy8gVW5yZWdpc3RlciBtb2R1bGUgcGx1Z2luCiR0aGlzLT5VbnJlZ2lzdGVyTW9kdWxlUGx1Z2luKHRydWUpOwoKLy8gUHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiR0aGlzLT5BdWRpdCgwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJNQVNfU29jaWFscyIKdmVyc2lvbiA9ICIxLjAuMCIKYXV0aG9yID0gIm1hc3RlcjMzOTUiCmF1dGhvcmVtYWlsID0gImluZm9AbmV3c3RhcmdldGVkLmNvbSIKbWluY21zdmVyc2lvbiA9IDIuMgpsYXp5bG9hZGFkbWluID0gMQpsYXp5bG9hZGZyb250ZW5kID0gMAo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_post_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPnskbW9kLT5MYW5nKCdpbmZvX25ld3Bvc3QnKX08L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPjxsYWJlbCBmb3I9InN1YmplY3QiPnskbW9kLT5MYW5nKCdzdWJqZWN0Jyl9OjwvbGFiZWw+PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJzdWJqZWN0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1YmplY3QiIHNpemU9IjgwIi8+CiAgPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPjxsYWJlbCBmb3I9ImJvZHkiPip7JG1vZC0+TGFuZygnbWVzc2FnZScpfTo8L2xhYmVsPjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDx0ZXh0YXJlYSBpZD0iYm9keSIgbmFtZT0ieyRhY3Rpb25pZH1ib2R5IiByb3dzPSI1IiBjb2xzPSI4MCI+PC90ZXh0YXJlYT4KICA8L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+PGxhYmVsIGZvcj0ibGluayI+eyRtb2QtPkxhbmcoJ2xpbmsnKX06PC9sYWJlbD48L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImxpbmsiIG5hbWU9InskYWN0aW9uaWR9dXJsIiBzaXplPSI4MCIvPgogIDwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij48bGFiZWwgZm9yPSJwaWN0dXJlIj57JG1vZC0+TGFuZygncGljdHVyZScpfTo8L2xhYmVsPjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIHtjbXNfZmlsZXBpY2tlciBuYW1lPSJ7JGFjdGlvbmlkfXBpY3R1cmUiIHR5cGU9ImltYWdlIn0KICA8L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0X2JsYXN0X25leHQiIHZhbHVlPSJ7JG1vZC0+TGFuZygnbmV4dCcpfSIvPgogIDwvcD4KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/blast.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICQoJ3RleHRhcmVhJykua2V5dXAoZnVuY3Rpb24oKXsKICAgdmFyIG4gPSAkKHRoaXMpLnZhbCgpLmxlbmd0aDsKICAgdmFyIGVsX21heCA9ICQodGhpcykucHJldkFsbCgnLmNoYXJsaW1pdCcpOwogICB2YXIgZWxfbnVtID0gJCh0aGlzKS5wcmV2QWxsKCcuY2hhcmNvdW50Jyk7CiAgIGlmKCB0eXBlb2YgZWxfbnVtICE9ICd1bmRlZmluZWQnICkgewogICAgIHZhciBvdXQgPSBuOwogICAgIGlmKCB0eXBlb2YgZWxfbWF4ICE9IHVuZGVmaW5lZCApIHsKICAgICAgIHZhciBtYXggPSAkKGVsX21heCkuaHRtbCgpOwogICAgICAgaWYoIG4gPj0gbWF4ICkgewogICAgICAgICBvdXQgPSAnPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij4nK24rJzwvc3Bhbj4nOwogICAgICAgfSBlbHNlIGlmKCBuIC8gbWF4ID4gMC44NSApIHsKICAgICAgICAgb3V0ID0gJzxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+JytuKyc8L3NwYW4+JzsKICAgICAgIH0KICAgICB9CiAgICAgJChlbF9udW0pLmh0bWwob3V0KTsKICAgfQogIH0pOwogICQoJ3RleHRhcmVhJykudHJpZ2dlcigna2V5dXAnKTsgLy8gdHJpZ2dlciBhIGtleXVwCn0pOwo8L3NjcmlwdD4KPGgzPnskbW9kLT5MYW5nKCdzZW5kX21lc3NhZ2UnKX08L2gzPgp7aWYgaXNzZXQoJG1vZHVsZSl9CjxoND57JG1vZC0+TGFuZygnYmxhc3RfYXJ0aWNsZV9mcm9tJywkbW9kdWxlKX0ge2lmICRzb3VyY2VfZGF0YS0+dGl0bGV9OiB7JHNvdXJjZV9kYXRhLT50aXRsZX17L2lmfTwvaDQ+CnsvaWZ9Cgp7JGZvcm1zdGFydH0Ke2lmIGlzc2V0KCRibGFzdF9oaWRkZW5fc2JfY29udGVudCkgJiYgJGJsYXN0X2hpZGRlbl9zYl9jb250ZW50IG5lICcnfQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7JGFjdGlvbmlkfXNiX2NvbnRlbnQiIHZhbHVlPSJ7JGJsYXN0X2hpZGRlbl9zYl9jb250ZW50fGVzY2FwZX0iLz4Key9pZn0Ke2lmIGlzc2V0KCRibGFzdF9oaWRkZW5fcmV0dXJudG8pICYmICRibGFzdF9oaWRkZW5fcmV0dXJudG8gbmUgJyd9CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InskYWN0aW9uaWR9cmV0dXJudG8iIHZhbHVlPSJ7JGJsYXN0X2hpZGRlbl9yZXR1cm50b3xlc2NhcGV9Ii8+CnsvaWZ9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij48L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgaWQ9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9Y2FuY2VsIiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ2NhbmNlbCcpfSIvPgogIDwvcD4KPC9kaXY+Cgp7bGl0ZXJhbH0KPHN0eWxlPgogIC5tYXMtYmxhc3QtdGFicy1uYXZ7bGlzdC1zdHlsZTpub25lO21hcmdpbjowIDAgMCAwO3BhZGRpbmc6MCAxMHB4IDAgMTBweDtkaXNwbGF5OmZsZXg7Z2FwOjA7ZmxleC13cmFwOndyYXB9CiAgLm1hcy1ibGFzdC10YWJzLW5hdiBsaXtsaXN0LXN0eWxlOm5vbmU7bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2luOjAgMnB4IDAgMH0KICAubWFzLWJsYXN0LXRhYnMtbmF2IGxpOjptYXJrZXJ7ZGlzcGxheTpub25lO2NvbnRlbnQ6Jyd9CiAgLm1hcy1ibGFzdC10YWJzLW5hdiBhewogICAgZGlzcGxheTppbmxpbmUtYmxvY2s7CiAgICBwYWRkaW5nOjZweCAxMnB4OwogICAgYmFja2dyb3VuZDojZThlOGU4OwogICAgYm9yZGVyOjFweCBzb2xpZCAjY2NjOwogICAgYm9yZGVyLWJvdHRvbTpub25lOwogICAgYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDsKICAgIHRleHQtZGVjb3JhdGlvbjpub25lOwogICAgY29sb3I6IzMzMzsKICAgIGZvbnQtd2VpZ2h0OmJvbGQ7CiAgfQogIC5tYXMtYmxhc3QtdGFicy1uYXYgYTpob3ZlcntiYWNrZ3JvdW5kOiNmNWY1ZjV9CiAgLm1hcy1ibGFzdC10YWJzLW5hdiBhLmFjdGl2ZXsKICAgIGJhY2tncm91bmQ6IzBiNWVhNjsKICAgIGNvbG9yOiNmZmY7CiAgICBib3JkZXItY29sb3I6IzBiNWVhNjsKICB9CiAgLm1hcy1ibGFzdC10YWJ7ZGlzcGxheTpub25lO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcDpub25lO21hcmdpbjowIDEwcHggMTBweCAxMHB4O2JhY2tncm91bmQ6I2ZmZjt9CiAgLm1hcy1ibGFzdC10YWIuYWN0aXZle2Rpc3BsYXk6YmxvY2t9CiAgLm1hcy1kaXNjb3JkLWVtYmVkLWZpZWxkc3ttYXJnaW4tdG9wOjhweDtwYWRkaW5nOjhweDtib3JkZXI6MXB4IGRhc2hlZCAjY2NjO2JhY2tncm91bmQ6I2ZhZmFmYX0KICAubWFzLWRpc2NvcmQtcHJldmlld3ttYXJnaW4tdG9wOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjMmYzMTM2O2JhY2tncm91bmQ6IzFlMWYyMjtjb2xvcjojZGJkZWUxO3BhZGRpbmc6MTBweDtib3JkZXItcmFkaXVzOjZweH0KICAubWFzLWRpc2NvcmQtcHJldmlldyAucHYtY29udGVudHttYXJnaW4tYm90dG9tOjhweDt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0KICAubWFzLWRpc2NvcmQtcHJldmlldyAucHYtZW1iZWR7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICMwYjVlYTY7YmFja2dyb3VuZDojMmIyZDMxO3BhZGRpbmc6OHB4O2JvcmRlci1yYWRpdXM6NHB4fQogIC5tYXMtZGlzY29yZC1wcmV2aWV3IC5wdi10aXRsZXtmb250LXdlaWdodDpib2xkO21hcmdpbi1ib3R0b206NHB4fQogIC5tYXMtZGlzY29yZC1wcmV2aWV3IC5wdi11cmx7Y29sb3I6IzdiYjBmZn0KICAubWFzLWRpc2NvcmQtcHJldmlldyAucHYtZmllbGR7bWFyZ2luLXRvcDo2cHg7cGFkZGluZy10b3A6NnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICMzZjQxNDd9CiAgLm1hcy1kaXNjb3JkLXByZXZpZXcgLnB2LWZvb3RlcnttYXJnaW4tdG9wOjhweDtjb2xvcjojYjViYWMxO2ZvbnQtc2l6ZToxMnB4fQogIC5tYXMtZGlzY29yZC1maWVsZC1yb3d7bWFyZ2luOjZweCAwfQogIC5tYXMtZGlzY29yZC1maWVsZHMtc2VjdGlvbntkaXNwbGF5Om5vbmV9Cjwvc3R5bGU+CjxzY3JpcHQ+CiAgKGZ1bmN0aW9uKCl7CiAgICBmdW5jdGlvbiBhY3RpdmF0ZShpZCl7CiAgICAgIHZhciB0YWJzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXMtYmxhc3QtdGFiJyk7IHRhYnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpfSk7CiAgICAgIHZhciBsaW5rcz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWFzLWJsYXN0LXRhYnMtbmF2IGEnKTsgbGlua3MuZm9yRWFjaChmdW5jdGlvbihsKXtsLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpfSk7CiAgICAgIHZhciBlbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGlkKTsgaWYoZWwpe2VsLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO30KICAgICAgdmFyIGxpbms9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hcy1ibGFzdC10YWJzLW5hdiBhW2hyZWY9IicraWQrJyJdJyk7IGlmKGxpbmspe2xpbmsuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7fQogICAgfQogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpewogICAgICB2YXIgYT1lLnRhcmdldC5jbG9zZXN0KCcubWFzLWJsYXN0LXRhYnMtbmF2IGEnKTsgaWYoIWEpIHJldHVybjsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOyBhY3RpdmF0ZShhLmdldEF0dHJpYnV0ZSgnaHJlZicpKTsKICAgIH0pOwogICAgdmFyIGluaXRpYWw9JyN0YWItYmxhc3QtbWFpbic7CiAgICBhY3RpdmF0ZShpbml0aWFsKTsKCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbihlKXsKICAgICAgdmFyIHNlbCA9IGUudGFyZ2V0OwogICAgICBpZiAoIXNlbCB8fCAhc2VsLm1hdGNoZXMoJ3NlbGVjdFtkYXRhLWRpc2NvcmQtbW9kZS1zZWxlY3Rvcl0nKSkgcmV0dXJuOwogICAgICB2YXIgdGFiID0gc2VsLmNsb3Nlc3QoJy5tYXMtYmxhc3QtdGFiJyk7CiAgICAgIGlmICghdGFiKSByZXR1cm47CiAgICAgIHZhciB1c2VFbWJlZCA9IHRhYi5xdWVyeVNlbGVjdG9yKCdpbnB1dFtkYXRhLWRpc2NvcmQtdXNlLWVtYmVkXScpOwogICAgICB2YXIgZW1iZWRGaWVsZHMgPSB0YWIucXVlcnlTZWxlY3RvcignLm1hcy1kaXNjb3JkLWVtYmVkLWZpZWxkcycpOwogICAgICBpZiAoIXVzZUVtYmVkIHx8ICFlbWJlZEZpZWxkcykgcmV0dXJuOwogICAgICBpZiAoc2VsLnZhbHVlID09PSAnbm9ybWFsJykgewogICAgICAgIHVzZUVtYmVkLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICBlbWJlZEZpZWxkcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICB9IGVsc2UgewogICAgICAgIHVzZUVtYmVkLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIGVtYmVkRmllbGRzLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgfQogICAgfSk7CgogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSl7CiAgICAgIHZhciBjYiA9IGUudGFyZ2V0OwogICAgICBpZiAoIWNiIHx8ICFjYi5tYXRjaGVzKCdpbnB1dFtkYXRhLWRpc2NvcmQtdXNlLWVtYmVkXScpKSByZXR1cm47CiAgICAgIHZhciB0YWIgPSBjYi5jbG9zZXN0KCcubWFzLWJsYXN0LXRhYicpOwogICAgICBpZiAoIXRhYikgcmV0dXJuOwogICAgICB2YXIgZW1iZWRGaWVsZHMgPSB0YWIucXVlcnlTZWxlY3RvcignLm1hcy1kaXNjb3JkLWVtYmVkLWZpZWxkcycpOwogICAgICBpZiAoIWVtYmVkRmllbGRzKSByZXR1cm47CiAgICAgIGVtYmVkRmllbGRzLnN0eWxlLmRpc3BsYXkgPSBjYi5jaGVja2VkID8gJycgOiAnbm9uZSc7CiAgICAgIHVwZGF0ZURpc2NvcmRQcmV2aWV3KHRhYik7CiAgICB9KTsKCiAgICBmdW5jdGlvbiBlc2Mocyl7CiAgICAgIHJldHVybiBTdHJpbmcocyB8fCAnJykucmVwbGFjZSgvWyY8PiInXS9nLCBmdW5jdGlvbihjKXsKICAgICAgICByZXR1cm4geycmJzonJmFtcDsnLCc8JzonJmx0OycsJz4nOicmZ3Q7JywnIic6JyZxdW90OycsIiciOicmIzM5Oyd9W2NdOwogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGNoZWNrZWQodGFiLCBuYW1lKXsKICAgICAgdmFyIGVsID0gdGFiLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lJD0iJytuYW1lKyciXScpOwogICAgICByZXR1cm4gISEoZWwgJiYgZWwuY2hlY2tlZCk7CiAgICB9CiAgICBmdW5jdGlvbiB2YWx1ZSh0YWIsIG5hbWUpewogICAgICB2YXIgZWwgPSB0YWIucXVlcnlTZWxlY3RvcignW25hbWUkPSInK25hbWUrJyJdJyk7CiAgICAgIHJldHVybiBlbCA/IFN0cmluZyhlbC52YWx1ZSB8fCAnJykgOiAnJzsKICAgIH0KICAgIGZ1bmN0aW9uIHVwZGF0ZURpc2NvcmRQcmV2aWV3KHRhYil7CiAgICAgIHZhciBwcmV2aWV3ID0gdGFiLnF1ZXJ5U2VsZWN0b3IoJy5tYXMtZGlzY29yZC1wcmV2aWV3Jyk7CiAgICAgIGlmICghcHJldmlldykgcmV0dXJuOwogICAgICB2YXIgbW9kZSA9IHZhbHVlKHRhYiwgJ21hc19kaXNjb3JkX21vZGUnKTsKICAgICAgdmFyIGNvbnRlbnQgPSB2YWx1ZSh0YWIsICdtYXNfZGlzY29yZF9tc2cnKTsKICAgICAgdmFyIHVzZUVtYmVkID0gY2hlY2tlZCh0YWIsICdtYXNfZGlzY29yZF91c2VfZW1iZWQnKTsKICAgICAgaWYgKG1vZGUgPT09ICdub3JtYWwnKSB1c2VFbWJlZCA9IGZhbHNlOwogICAgICBpZiAobW9kZSA9PT0gJ2VtYmVkJyB8fCBtb2RlID09PSAnZW1iZWRfb25seScpIHVzZUVtYmVkID0gdHJ1ZTsKICAgICAgdmFyIHNob3dDb250ZW50ID0gKG1vZGUgIT09ICdlbWJlZF9vbmx5Jyk7CiAgICAgIHZhciBwYXJ0cyA9IFtdOwogICAgICBpZiAoc2hvd0NvbnRlbnQgJiYgY29udGVudC50cmltKCkgIT09ICcnKSB7CiAgICAgICAgcGFydHMucHVzaCgnPGRpdiBjbGFzcz0icHYtY29udGVudCI+Jytlc2MoY29udGVudCkrJzwvZGl2PicpOwogICAgICB9CiAgICAgIGlmICh1c2VFbWJlZCkgewogICAgICAgIHZhciB0aXRsZSA9IGNoZWNrZWQodGFiLCAnbWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV90aXRsZScpID8gdmFsdWUodGFiLCAnbWFzX2Rpc2NvcmRfZW1iZWRfdGl0bGUnKSA6ICcnOwogICAgICAgIHZhciBkZXNjID0gY2hlY2tlZCh0YWIsICdtYXNfZGlzY29yZF9lbWJlZF9pbmNsdWRlX2Rlc2NyaXB0aW9uJykgPyB2YWx1ZSh0YWIsICdtYXNfZGlzY29yZF9lbWJlZF9kZXNjcmlwdGlvbicpIDogJyc7CiAgICAgICAgdmFyIHVybCA9IGNoZWNrZWQodGFiLCAnbWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV91cmwnKSA/IHZhbHVlKHRhYiwgJ21hc19kaXNjb3JkX2VtYmVkX3VybCcpIDogJyc7CiAgICAgICAgdmFyIGZvb3RlciA9IGNoZWNrZWQodGFiLCAnbWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV9mb290ZXInKSA/IHZhbHVlKHRhYiwgJ21hc19kaXNjb3JkX2VtYmVkX2Zvb3RlcicpIDogJyc7CiAgICAgICAgdmFyIHRzID0gY2hlY2tlZCh0YWIsICdtYXNfZGlzY29yZF9lbWJlZF9pbmNsdWRlX3RpbWVzdGFtcCcpICYmIGNoZWNrZWQodGFiLCAnbWFzX2Rpc2NvcmRfZW1iZWRfdGltZXN0YW1wJyk7CiAgICAgICAgdmFyIGVtYmVkID0gJzxkaXYgY2xhc3M9InB2LWVtYmVkIj4nOwogICAgICAgIGlmICh0aXRsZS50cmltKCkgIT09ICcnKSBlbWJlZCArPSAnPGRpdiBjbGFzcz0icHYtdGl0bGUiPicrZXNjKHRpdGxlKSsnPC9kaXY+JzsKICAgICAgICBpZiAoZGVzYy50cmltKCkgIT09ICcnKSBlbWJlZCArPSAnPGRpdj4nK2VzYyhkZXNjKSsnPC9kaXY+JzsKICAgICAgICBpZiAodXJsLnRyaW0oKSAhPT0gJycpIGVtYmVkICs9ICc8ZGl2IGNsYXNzPSJwdi11cmwiPicrZXNjKHVybCkrJzwvZGl2Pic7CiAgICAgICAgaWYgKGNoZWNrZWQodGFiLCAnbWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV9maWVsZHMnKSkgewogICAgICAgICAgdmFyIHJvd3MgPSB0YWIucXVlcnlTZWxlY3RvckFsbCgnLm1hcy1kaXNjb3JkLWZpZWxkLXJvdycpOwogICAgICAgICAgcm93cy5mb3JFYWNoKGZ1bmN0aW9uKHJvdyl7CiAgICAgICAgICAgIHZhciBmbkVsID0gcm93LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtZmllbGQtbmFtZV0nKTsKICAgICAgICAgICAgdmFyIGZ2RWwgPSByb3cucXVlcnlTZWxlY3RvcignaW5wdXRbZGF0YS1maWVsZC12YWx1ZV0nKTsKICAgICAgICAgICAgdmFyIGZuID0gZm5FbCA/IGZuRWwudmFsdWUgOiAnJzsKICAgICAgICAgICAgdmFyIGZ2ID0gZnZFbCA/IGZ2RWwudmFsdWUgOiAnJzsKICAgICAgICAgICAgaWYgKGZuLnRyaW0oKSAhPT0gJycgJiYgZnYudHJpbSgpICE9PSAnJykgewogICAgICAgICAgICAgIGVtYmVkICs9ICc8ZGl2IGNsYXNzPSJwdi1maWVsZCI+PHN0cm9uZz4nK2VzYyhmbikrJzo8L3N0cm9uZz4gJytlc2MoZnYpKyc8L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKGZvb3Rlci50cmltKCkgIT09ICcnIHx8IHRzKSB7CiAgICAgICAgICBlbWJlZCArPSAnPGRpdiBjbGFzcz0icHYtZm9vdGVyIj4nOwogICAgICAgICAgaWYgKGZvb3Rlci50cmltKCkgIT09ICcnKSBlbWJlZCArPSBlc2MoZm9vdGVyKTsKICAgICAgICAgIGlmICh0cykgZW1iZWQgKz0gKGZvb3Rlci50cmltKCkgIT09ICcnID8gJyAtICcgOiAnJykgKyBlc2MobmV3IERhdGUoKS50b0lTT1N0cmluZygpKTsKICAgICAgICAgIGVtYmVkICs9ICc8L2Rpdj4nOwogICAgICAgIH0KICAgICAgICBlbWJlZCArPSAnPC9kaXY+JzsKICAgICAgICBwYXJ0cy5wdXNoKGVtYmVkKTsKICAgICAgfQogICAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgcGFydHMucHVzaCgnPGRpdiBjbGFzcz0icHYtY29udGVudCI+KEVtcHR5IHByZXZpZXcpPC9kaXY+Jyk7CiAgICAgIH0KICAgICAgcHJldmlldy5pbm5lckhUTUwgPSBwYXJ0cy5qb2luKCcnKTsKICAgIH0KCiAgICBmdW5jdGlvbiB1cGRhdGVEaXNjb3JkRmllbGRzVmlzaWJpbGl0eSh0YWIpewogICAgICB2YXIgaW5jbHVkZUZpZWxkcyA9IHRhYi5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lJD0ibWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV9maWVsZHMiXScpOwogICAgICB2YXIgc2VjdGlvbiA9IHRhYi5xdWVyeVNlbGVjdG9yKCcubWFzLWRpc2NvcmQtZmllbGRzLXNlY3Rpb24nKTsKICAgICAgaWYgKCFpbmNsdWRlRmllbGRzIHx8ICFzZWN0aW9uKSByZXR1cm47CiAgICAgIHNlY3Rpb24uc3R5bGUuZGlzcGxheSA9IGluY2x1ZGVGaWVsZHMuY2hlY2tlZCA/ICdibG9jaycgOiAnbm9uZSc7CiAgICAgIGlmIChpbmNsdWRlRmllbGRzLmNoZWNrZWQpIHsKICAgICAgICB2YXIgd3JhcCA9IHRhYi5xdWVyeVNlbGVjdG9yKCdbZGF0YS1kaXNjb3JkLWZpZWxkcy13cmFwXScpOwogICAgICAgIGlmICh3cmFwICYmIHdyYXAucXVlcnlTZWxlY3RvckFsbCgnLm1hcy1kaXNjb3JkLWZpZWxkLXJvdycpLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgdmFyIGFkZEJ0biA9IHRhYi5xdWVyeVNlbGVjdG9yKCdidXR0b25bZGF0YS1hZGQtZGlzY29yZC1maWVsZF0nKTsKICAgICAgICAgIGlmIChhZGRCdG4pIHsKICAgICAgICAgICAgYWRkQnRuLmNsaWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYnVpbGRGaWVsZFJvd0h0bWwoYWN0aW9uUHJlZml4LCBvbmUpIHsKICAgICAgdmFyIG5hbWUgPSBhY3Rpb25QcmVmaXggKyBvbmUgKyAnX2VtYmVkX2ZpZWxkX25hbWVbXSc7CiAgICAgIHZhciB2YWx1ZU5hbWUgPSBhY3Rpb25QcmVmaXggKyBvbmUgKyAnX2VtYmVkX2ZpZWxkX3ZhbHVlW10nOwogICAgICB2YXIgaW5saW5lTmFtZSA9IGFjdGlvblByZWZpeCArIG9uZSArICdfZW1iZWRfZmllbGRfaW5saW5lW10nOwogICAgICByZXR1cm4gJycgKwogICAgICAgICc8ZGl2IGNsYXNzPSJtYXMtZGlzY29yZC1maWVsZC1yb3ciPicgKwogICAgICAgICc8aW5wdXQgdHlwZT0idGV4dCIgZGF0YS1maWVsZC1uYW1lPSIxIiBuYW1lPSInK25hbWUrJyIgdmFsdWU9IiIgc2l6ZT0iMjQiIHBsYWNlaG9sZGVyPSJOYW1lIi8+JyArCiAgICAgICAgJyA8aW5wdXQgdHlwZT0idGV4dCIgZGF0YS1maWVsZC12YWx1ZT0iMSIgbmFtZT0iJyt2YWx1ZU5hbWUrJyIgdmFsdWU9IiIgc2l6ZT0iNDAiIHBsYWNlaG9sZGVyPSJWYWx1ZSIvPicgKwogICAgICAgICcgPGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iJytpbmxpbmVOYW1lKyciIHZhbHVlPSIxIi8+IElubGluZTwvbGFiZWw+JyArCiAgICAgICAgJyA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yZW1vdmUtZGlzY29yZC1maWVsZD0iMSI+LTwvYnV0dG9uPicgKwogICAgICAgICc8L2Rpdj4nOwogICAgfQoKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSl7CiAgICAgIHZhciBhZGRCdG4gPSBlLnRhcmdldC5jbG9zZXN0KCdidXR0b25bZGF0YS1hZGQtZGlzY29yZC1maWVsZF0nKTsKICAgICAgaWYgKGFkZEJ0bikgewogICAgICAgIHZhciB0YWIgPSBhZGRCdG4uY2xvc2VzdCgnLm1hcy1ibGFzdC10YWInKTsKICAgICAgICBpZiAoIXRhYikgcmV0dXJuOwogICAgICAgIHZhciB3cmFwID0gdGFiLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWRpc2NvcmQtZmllbGRzLXdyYXBdJyk7CiAgICAgICAgaWYgKCF3cmFwKSByZXR1cm47CiAgICAgICAgdmFyIGFjdGlvblByZWZpeCA9IGFkZEJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtYWN0aW9uaWQnKSB8fCAnJzsKICAgICAgICB2YXIgb25lID0gYWRkQnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1zZW5kZXInKSB8fCAnbWFzX2Rpc2NvcmQnOwogICAgICAgIHZhciBjb3VudCA9IHdyYXAucXVlcnlTZWxlY3RvckFsbCgnLm1hcy1kaXNjb3JkLWZpZWxkLXJvdycpLmxlbmd0aDsKICAgICAgICBpZiAoY291bnQgPj0gMjUpIHJldHVybjsKICAgICAgICB3cmFwLmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgYnVpbGRGaWVsZFJvd0h0bWwoYWN0aW9uUHJlZml4LCBvbmUpKTsKICAgICAgICB1cGRhdGVEaXNjb3JkUHJldmlldyh0YWIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgcmVtb3ZlQnRuID0gZS50YXJnZXQuY2xvc2VzdCgnYnV0dG9uW2RhdGEtcmVtb3ZlLWRpc2NvcmQtZmllbGRdJyk7CiAgICAgIGlmIChyZW1vdmVCdG4pIHsKICAgICAgICB2YXIgcm93ID0gcmVtb3ZlQnRuLmNsb3Nlc3QoJy5tYXMtZGlzY29yZC1maWVsZC1yb3cnKTsKICAgICAgICB2YXIgdGFiID0gcmVtb3ZlQnRuLmNsb3Nlc3QoJy5tYXMtYmxhc3QtdGFiJyk7CiAgICAgICAgaWYgKHJvdykgcm93LnJlbW92ZSgpOwogICAgICAgIGlmICh0YWIpIHVwZGF0ZURpc2NvcmRQcmV2aWV3KHRhYik7CiAgICAgIH0KICAgIH0pOwoKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oZSl7CiAgICAgIHZhciBlbCA9IGUudGFyZ2V0OwogICAgICBpZiAoIWVsKSByZXR1cm47CiAgICAgIGlmICghZWwubmFtZSB8fCBlbC5uYW1lLmluZGV4T2YoJ21hc19kaXNjb3JkXycpID09PSAtMSkgcmV0dXJuOwogICAgICB2YXIgdGFiID0gZWwuY2xvc2VzdCgnLm1hcy1ibGFzdC10YWInKTsKICAgICAgaWYgKCF0YWIpIHJldHVybjsKICAgICAgdXBkYXRlRGlzY29yZFByZXZpZXcodGFiKTsKICAgIH0pOwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSl7CiAgICAgIHZhciBlbCA9IGUudGFyZ2V0OwogICAgICBpZiAoIWVsKSByZXR1cm47CiAgICAgIGlmICghZWwubmFtZSB8fCBlbC5uYW1lLmluZGV4T2YoJ21hc19kaXNjb3JkXycpID09PSAtMSkgcmV0dXJuOwogICAgICB2YXIgdGFiID0gZWwuY2xvc2VzdCgnLm1hcy1ibGFzdC10YWInKTsKICAgICAgaWYgKCF0YWIpIHJldHVybjsKICAgICAgaWYgKGVsLm5hbWUuaW5kZXhPZignbWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV9maWVsZHMnKSAhPT0gLTEpIHsKICAgICAgICB1cGRhdGVEaXNjb3JkRmllbGRzVmlzaWJpbGl0eSh0YWIpOwogICAgICB9CiAgICAgIHVwZGF0ZURpc2NvcmRQcmV2aWV3KHRhYik7CiAgICB9KTsKCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKXsKICAgICAgdmFyIHRhYiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0YWItYmxhc3QtbWFzX2Rpc2NvcmQnKTsKICAgICAgaWYgKHRhYikgewogICAgICAgIHVwZGF0ZURpc2NvcmRGaWVsZHNWaXNpYmlsaXR5KHRhYik7CiAgICAgICAgdXBkYXRlRGlzY29yZFByZXZpZXcodGFiKTsKICAgICAgfQogICAgfSk7CiAgfSkoKTsKPC9zY3JpcHQ+CnsvbGl0ZXJhbH0KPHVsIGNsYXNzPSJtYXMtYmxhc3QtdGFicy1uYXYiPgogIDxsaT48YSBocmVmPSIjdGFiLWJsYXN0LW1haW4iPnskbW9kLT5MYW5nKCdtYWluJyl9PC9hPjwvbGk+Cntmb3JlYWNoICRzZW5kZXJzIGFzICRvbmU9PiRuYW1lfQogICAgPGxpPjxhIGhyZWY9IiN0YWItYmxhc3QteyRvbmV9Ij57JG5hbWV9PC9hPjwvbGk+CnsvZm9yZWFjaH0KPC91bD4KCjxkaXYgY2xhc3M9Im1hcy1ibGFzdC10YWIgYWN0aXZlIiBpZD0idGFiLWJsYXN0LW1haW4iPgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPjxsYWJlbCBmb3I9InNlbmRlcnMiPnskbW9kLT5MYW5nKCdkZXN0aW5hdGlvbnMnKX06PC9sYWJlbD48L3A+CiAgICA8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICA8dGFibGU+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4KICAgICAgICAgIDxzZWxlY3QgaWQ9InNlbmRlcnMiIG5hbWU9InskYWN0aW9uaWR9c2VuZGVyc1tdIiBtdWx0aXBsZT0ibXVsdGlwbGUiIHNpemU9IjMiPgogICAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRzZW5kZXJzIHNlbGVjdGVkPSRzYXZlZF9zZW5kZXJzfQogICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICA8L3RkPgogICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj57JG1vZC0+TGFuZygnaW5mb19zZW5kZXJzJyl9PC90ZD4KICAgICAgICA8L3RyPgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKe2ZvcmVhY2ggJHNlbmRlcnMgYXMgJG9uZSA9PiAkbmFtZX0KICA8ZGl2IGNsYXNzPSJtYXMtYmxhc3QtdGFiIiBpZD0idGFiLWJsYXN0LXskb25lfSI+CiAgICB7JGluZm89JHNlbmRlcl9pbmZvWyRvbmVdfQogICAgeyogdGhpcyBkZWZpbmVzIHRoZSBtZXNzYWdpbmcgdGFiICp9CiAgICB7aWYgJGluZm8uaW5mb19tZXNzYWdlfTxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIj57JGluZm8uaW5mb19tZXNzYWdlfTwvZGl2PnsvaWZ9CiAgICB7aWYgJHNvdXJjZV9kYXRhLT50aXRsZSAmJiAkaW5mby50aXRsZX0KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCd0aXRsZScpfTo8L3A+CiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4VCIgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fc3ViamVjdCIgdmFsdWU9Inskc291cmNlX2RhdGEtPnRpdGxlfSIgc2l6ZT0iODAiLz4KICAgICAgICA8L3A+CiAgICAgIDwvZGl2PgogICAgey9pZn0KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ21lc3NhZ2UnKX06PC9wPgogICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICB7aWYgJGluZm8uY2hhcmxpbWl0ID4gMH17JG1vZC0+TGFuZygnY2hhcmFjdGVyX2NvdW50Jyl9OiA8c3BhbiBjbGFzcz0iY2hhcmNvdW50Ij4wPC9zcGFuPiAvIDxzcGFuIGNsYXNzPSJjaGFybGltaXQiPnskaW5mby5jaGFybGltaXR9PC9zcGFuPjxici8+ey9pZn0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fbXNnIiByb3dzPSIzIiBjb2xzPSI1MCJ7aWYgJGluZm8uY2hhcmxpbWl0fSBtYXhsZW5ndGg9InskaW5mby5jaGFybGltaXR9InsvaWZ9Pnskc2VuZGVyX21zZ3MuJG9uZX08L3RleHRhcmVhPgogICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIHtpZiAkb25lID09ICdtYXNfZGlzY29yZCd9CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5EaXNjb3JkIG1lc3NhZ2UgZm9ybWF0OjwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fbW9kZSIgZGF0YS1kaXNjb3JkLW1vZGUtc2VsZWN0b3I9IjEiPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPlVzZSBzYXZlZCBzZXR0aW5nICh7JGRpc2NvcmRfbWVzc2FnZV9tb2RlfGVzY2FwZX0pPC9vcHRpb24+CiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im5vcm1hbCIge2lmIGlzc2V0KCRibGFzdF9mb3JtLm1hc19kaXNjb3JkX21vZGUpICYmICRibGFzdF9mb3JtLm1hc19kaXNjb3JkX21vZGUgPT0gJ25vcm1hbCd9c2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9Pk5vcm1hbCBtZXNzYWdlIG9ubHk8L29wdGlvbj4KICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZW1iZWQiIHtpZiBpc3NldCgkYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9tb2RlKSAmJiAkYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9tb2RlID09ICdlbWJlZCd9c2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PkVtYmVkICsgbWVzc2FnZTwvb3B0aW9uPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJlbWJlZF9vbmx5IiB7aWYgaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfbW9kZSkgJiYgJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfbW9kZSA9PSAnZW1iZWRfb25seSd9c2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PkVtYmVkIG9ubHk8L29wdGlvbj4KICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgIDwvcD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5FbWJlZCBvcHRpb25zOjwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9eyRvbmV9X3VzZV9lbWJlZCIgdmFsdWU9IjEiIGRhdGEtZGlzY29yZC11c2UtZW1iZWQ9IjEiIHtpZiAhaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfdXNlX2VtYmVkKSB8fCAkYmxhc3RfZm9ybS5tYXNfZGlzY29yZF91c2VfZW1iZWR9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+IFVzZSBlbWJlZCBmb3IgdGhpcyBibGFzdDwvbGFiZWw+CiAgICAgICAgICA8bGFiZWwgc3R5bGU9Im1hcmdpbi1sZWZ0OjEycHg7Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9eyRvbmV9X2VtYmVkX3RpbWVzdGFtcCIgdmFsdWU9IjEiIHtpZiAhaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfdGltZXN0YW1wKSB8fCAkYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9lbWJlZF90aW1lc3RhbXB9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+IFVzZSBjdXJyZW50IHRpbWVzdGFtcCB2YWx1ZTwvbGFiZWw+CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibWFzLWRpc2NvcmQtZW1iZWQtZmllbGRzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5JbmNsdWRlIGZpZWxkczo8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fZW1iZWRfaW5jbHVkZV90aXRsZSIgdmFsdWU9IjEiIHtpZiAhaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV90aXRsZSkgfHwgJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV90aXRsZX1jaGVja2VkPSJjaGVja2VkInsvaWZ9Lz4gVGl0bGU8L2xhYmVsPgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9Im1hcmdpbi1sZWZ0OjhweDsiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fZW1iZWRfaW5jbHVkZV9kZXNjcmlwdGlvbiIgdmFsdWU9IjEiIHtpZiAhaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV9kZXNjcmlwdGlvbikgfHwgJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV9kZXNjcmlwdGlvbn1jaGVja2VkPSJjaGVja2VkInsvaWZ9Lz4gRGVzY3JpcHRpb248L2xhYmVsPgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9Im1hcmdpbi1sZWZ0OjhweDsiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fZW1iZWRfaW5jbHVkZV91cmwiIHZhbHVlPSIxIiB7aWYgIWlzc2V0KCRibGFzdF9mb3JtLm1hc19kaXNjb3JkX2VtYmVkX2luY2x1ZGVfdXJsKSB8fCAkYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9lbWJlZF9pbmNsdWRlX3VybH1jaGVja2VkPSJjaGVja2VkInsvaWZ9Lz4gVVJMPC9sYWJlbD4KICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJtYXJnaW4tbGVmdDo4cHg7Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9eyRvbmV9X2VtYmVkX2luY2x1ZGVfY29sb3IiIHZhbHVlPSIxIiB7aWYgIWlzc2V0KCRibGFzdF9mb3JtLm1hc19kaXNjb3JkX2VtYmVkX2luY2x1ZGVfY29sb3IpIHx8ICRibGFzdF9mb3JtLm1hc19kaXNjb3JkX2VtYmVkX2luY2x1ZGVfY29sb3J9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+IENvbG9yPC9sYWJlbD4KICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJtYXJnaW4tbGVmdDo4cHg7Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9eyRvbmV9X2VtYmVkX2luY2x1ZGVfZm9vdGVyIiB2YWx1ZT0iMSIge2lmICFpc3NldCgkYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9lbWJlZF9pbmNsdWRlX2Zvb3RlcikgfHwgJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV9mb290ZXJ9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+IEZvb3RlcjwvbGFiZWw+CiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0ibWFyZ2luLWxlZnQ6OHB4OyI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ7JGFjdGlvbmlkfXskb25lfV9lbWJlZF9pbmNsdWRlX3RpbWVzdGFtcCIgdmFsdWU9IjEiIHtpZiAhaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV90aW1lc3RhbXApIHx8ICRibGFzdF9mb3JtLm1hc19kaXNjb3JkX2VtYmVkX2luY2x1ZGVfdGltZXN0YW1wfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0vPiBUaW1lc3RhbXA8L2xhYmVsPgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9Im1hcmdpbi1sZWZ0OjhweDsiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fZW1iZWRfaW5jbHVkZV9hdXRob3IiIHZhbHVlPSIxIiB7aWYgaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV9hdXRob3IpICYmICRibGFzdF9mb3JtLm1hc19kaXNjb3JkX2VtYmVkX2luY2x1ZGVfYXV0aG9yfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0vPiBBdXRob3I8L2xhYmVsPgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9Im1hcmdpbi1sZWZ0OjhweDsiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fZW1iZWRfaW5jbHVkZV90aHVtYm5haWwiIHZhbHVlPSIxIiB7aWYgaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV90aHVtYm5haWwpICYmICRibGFzdF9mb3JtLm1hc19kaXNjb3JkX2VtYmVkX2luY2x1ZGVfdGh1bWJuYWlsfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0vPiBUaHVtYm5haWw8L2xhYmVsPgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9Im1hcmdpbi1sZWZ0OjhweDsiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fZW1iZWRfaW5jbHVkZV9pbWFnZSIgdmFsdWU9IjEiIHtpZiBpc3NldCgkYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9lbWJlZF9pbmNsdWRlX2ltYWdlKSAmJiAkYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9lbWJlZF9pbmNsdWRlX2ltYWdlfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0vPiBJbWFnZTwvbGFiZWw+CiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0ibWFyZ2luLWxlZnQ6OHB4OyI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ7JGFjdGlvbmlkfXskb25lfV9lbWJlZF9pbmNsdWRlX2ZpZWxkcyIgdmFsdWU9IjEiIHtpZiBpc3NldCgkYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9lbWJlZF9pbmNsdWRlX2ZpZWxkcykgJiYgJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfaW5jbHVkZV9maWVsZHN9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+IEZpZWxkczwvbGFiZWw+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+RW1iZWQgdGl0bGU6PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9eyRvbmV9X2VtYmVkX3RpdGxlIiB2YWx1ZT0ie2lmIGlzc2V0KCRibGFzdF9mb3JtLm1hc19kaXNjb3JkX2VtYmVkX3RpdGxlKX17JGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfdGl0bGV8ZXNjYXBlfXtlbHNlfXskc291cmNlX2RhdGEtPnRpdGxlfGVzY2FwZX17L2lmfSIgc2l6ZT0iODAiLz48L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+RW1iZWQgZGVzY3JpcHRpb246PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+PHRleHRhcmVhIG5hbWU9InskYWN0aW9uaWR9eyRvbmV9X2VtYmVkX2Rlc2NyaXB0aW9uIiByb3dzPSIzIiBjb2xzPSI3MCI+e2lmIGlzc2V0KCRibGFzdF9mb3JtLm1hc19kaXNjb3JkX2VtYmVkX2Rlc2NyaXB0aW9uKX17JGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfZGVzY3JpcHRpb258ZXNjYXBlfXtlbHNlfXskc291cmNlX2RhdGEtPnN1bW1hcnl8ZXNjYXBlfXsvaWZ9PC90ZXh0YXJlYT48L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+RW1iZWQgVVJMOjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXskb25lfV9lbWJlZF91cmwiIHZhbHVlPSJ7aWYgaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfdXJsKX17JGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfdXJsfGVzY2FwZX17ZWxzZX17JHNvdXJjZV9kYXRhLT5jYW5vbmljYWx8ZXNjYXBlfXsvaWZ9IiBzaXplPSI4MCIvPjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5FbWJlZCBjb2xvciAoaGV4KTo8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fZW1iZWRfY29sb3IiIHZhbHVlPSJ7aWYgaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfY29sb3IpfXskYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9lbWJlZF9jb2xvcnxlc2NhcGV9e2Vsc2V9IzBiNWVhNnsvaWZ9IiBzaXplPSIxMiIgcGxhY2Vob2xkZXI9IiMwYjVlYTYiLz48L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+RW1iZWQgZm9vdGVyOjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXskb25lfV9lbWJlZF9mb290ZXIiIHZhbHVlPSJ7aWYgaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfZm9vdGVyKX17JGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfZm9vdGVyfGVzY2FwZX17ZWxzZX1OZXdzIFRhcmdldGVkey9pZn0iIHNpemU9IjYwIi8+PC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkVtYmVkIGF1dGhvciBuYW1lOjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXskb25lfV9lbWJlZF9hdXRob3JfbmFtZSIgdmFsdWU9IntpZiBpc3NldCgkYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9lbWJlZF9hdXRob3JfbmFtZSl9eyRibGFzdF9mb3JtLm1hc19kaXNjb3JkX2VtYmVkX2F1dGhvcl9uYW1lfGVzY2FwZX17L2lmfSIgc2l6ZT0iNjAiLz48L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+RW1iZWQgYXV0aG9yIFVSTDo8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fZW1iZWRfYXV0aG9yX3VybCIgdmFsdWU9IntpZiBpc3NldCgkYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9lbWJlZF9hdXRob3JfdXJsKX17JGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfYXV0aG9yX3VybHxlc2NhcGV9ey9pZn0iIHNpemU9IjgwIi8+PC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkVtYmVkIGF1dGhvciBpY29uIFVSTDo8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fZW1iZWRfYXV0aG9yX2ljb24iIHZhbHVlPSJ7aWYgaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfYXV0aG9yX2ljb24pfXskYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9lbWJlZF9hdXRob3JfaWNvbnxlc2NhcGV9ey9pZn0iIHNpemU9IjgwIi8+PC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkVtYmVkIHRodW1ibmFpbCBVUkw6PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9eyRvbmV9X2VtYmVkX3RodW1ibmFpbF91cmwiIHZhbHVlPSJ7aWYgaXNzZXQoJGJsYXN0X2Zvcm0ubWFzX2Rpc2NvcmRfZW1iZWRfdGh1bWJuYWlsX3VybCl9eyRibGFzdF9mb3JtLm1hc19kaXNjb3JkX2VtYmVkX3RodW1ibmFpbF91cmx8ZXNjYXBlfXsvaWZ9IiBzaXplPSI4MCIvPjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5FbWJlZCBpbWFnZSBVUkw6PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9eyRvbmV9X2VtYmVkX2ltYWdlX3VybCIgdmFsdWU9IntpZiBpc3NldCgkYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9lbWJlZF9pbWFnZV91cmwpfXskYmxhc3RfZm9ybS5tYXNfZGlzY29yZF9lbWJlZF9pbWFnZV91cmx8ZXNjYXBlfXsvaWZ9IiBzaXplPSI4MCIvPjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3cgbWFzLWRpc2NvcmQtZmllbGRzLXNlY3Rpb24iPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5FbWJlZCBmaWVsZHM6PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWFkZC1kaXNjb3JkLWZpZWxkPSIxIiBkYXRhLWFjdGlvbmlkPSJ7JGFjdGlvbmlkfGVzY2FwZX0iIGRhdGEtc2VuZGVyPSJ7JG9uZXxlc2NhcGV9Ij4rIEFkZCBmaWVsZDwvYnV0dG9uPgogICAgICAgICAgICA8YnIvPjxlbT5Zb3UgY2FuIGFkZCB1cCB0byAyNSBlbWJlZCBmaWVsZHMgKERpc2NvcmQgbGltaXQpLjwvZW0+CiAgICAgICAgICA8L3A+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiIGRhdGEtZGlzY29yZC1maWVsZHMtd3JhcD0iMSI+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZGlzY29yZF9lbWJlZF9maWVsZF9yb3dzKSAmJiAkZGlzY29yZF9lbWJlZF9maWVsZF9yb3dzfEBjb3VudCBndCAwfQogICAgICAgICAgICAgIHtmb3JlYWNoIGZyb209JGRpc2NvcmRfZW1iZWRfZmllbGRfcm93cyBpdGVtPXJvd30KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcy1kaXNjb3JkLWZpZWxkLXJvdyI+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBkYXRhLWZpZWxkLW5hbWU9IjEiIG5hbWU9InskYWN0aW9uaWR9eyRvbmV9X2VtYmVkX2ZpZWxkX25hbWVbXSIgdmFsdWU9Inskcm93Lm5hbWV8ZXNjYXBlfSIgc2l6ZT0iMjQiIHBsYWNlaG9sZGVyPSJOYW1lIi8+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBkYXRhLWZpZWxkLXZhbHVlPSIxIiBuYW1lPSJ7JGFjdGlvbmlkfXskb25lfV9lbWJlZF9maWVsZF92YWx1ZVtdIiB2YWx1ZT0ieyRyb3cudmFsdWV8ZXNjYXBlfSIgc2l6ZT0iNDAiIHBsYWNlaG9sZGVyPSJWYWx1ZSIvPgogICAgICAgICAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ7JGFjdGlvbmlkfXskb25lfV9lbWJlZF9maWVsZF9pbmxpbmVbXSIgdmFsdWU9IjEiIHtpZiAkcm93LmlubGluZX1jaGVja2VkPSJjaGVja2VkInsvaWZ9Lz4gSW5saW5lPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcmVtb3ZlLWRpc2NvcmQtZmllbGQ9IjEiPi08L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIHsvZm9yZWFjaH0KICAgICAgICAgICAgey9pZn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkxpdmUgcHJldmlldzo8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcy1kaXNjb3JkLXByZXZpZXciPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIHsvaWZ9CiAgICB7aWYgJGluZm8ucGljdHVyZSAmJiAkc291cmNlX2RhdGEtPmNvdW50X3BpY3R1cmVzKCl9CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncGljdHVyZScpfTo8L3A+CiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICA8c2VsZWN0IGNsYXNzPSJwaWN0dXJlX2Ryb3Bkb3duIiBuYW1lPSJ7JGFjdGlvbmlkfXskb25lfV9waWN0dXJlIj4KICAgICAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRzb3VyY2VfZGF0YS0+cGljdHVyZXN9CgkgICAgPG9wdGlvbiB2YWx1ZT0iIj57JG1vZC0+TGFuZygnbm9uZScpfTwvb3B0aW9uPgogICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgIHsvaWZ9CgogICAge2lmICRpbmZvLmxpbmsgJiYgJHNvdXJjZV9kYXRhLT5jYW5vbmljYWwgfQogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2xpbmsnKX06PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgPGlucHV0IHR5cGU9InRleFQiIG5hbWU9InskYWN0aW9uaWR9eyRvbmV9X2xpbmsiIHZhbHVlPSJ7JHNvdXJjZV9kYXRhLT5jYW5vbmljYWx9IiBzaXplPSI4MCIvPgogICAgICAgIDwvcD4KICAgICAgPC9kaXY+CiAgICAgIHtpZiAkaW5mby5saW5rdGl0bGV9CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2xpbmtfdGl0bGUnKX06PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXskb25lfV9saW5rbmFtZSIgdmFsdWU9Inskc291cmNlX2RhdGEtPnRpdGxlfSIgc2l6ZT0iODAiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgey9pZn0KICAgICAge2lmICRpbmZvLmNhcHRpb259CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IGNhcHRpb25fd3JhcCI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdsaW5rX2NhcHRpb24nKX06PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iY2FwdGlvbiIgbmFtZT0ieyRhY3Rpb25pZH17JG9uZX1fY2FwdGlvbiIgdmFsdWU9IiIgc2l6ZT0iODAiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgey9pZn0KICAgICAge2lmICRpbmZvLmRlc2NyaXB0aW9ufQogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyBkZXNjcmlwdGlvbl93cmFwIj4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2xpbmtfZGVzY3JpcHRpb24nKX06PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZGVzY3JpcHRpb24iIG5hbWU9InskYWN0aW9uaWR9eyRvbmV9X2Rlc2NyaXB0aW9uIiB2YWx1ZT0iIiBzaXplPSI4MCIgbWF4bGVuZ3RoPSIyNTUiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgey9pZn0KICAgIHsvaWZ9CiAgPC9kaXY+CnsvZm9yZWFjaH0KeyRmb3JtZW5kfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/defaultadmin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGZpZWxkc2V0PgogIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ2NvbmZpZ3VyYXRpb24nKX06PC9sZWdlbmQ+CiAge2lmICRzYXZlX25vdGljZX0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9ImluZm9ybWF0aW9uIj5TZXR0aW5ncyBzYXZlZCBzdWNjZXNzZnVsbHkuPC9wPgogIDwvZGl2PgogIHsvaWZ9CiAgPHVsIGNsYXNzPSJtYXMtdGFicy1uYXYiPgogICAgPGxpPjxhIGhyZWY9IiN0YWItYmxhc3QiPnskbW9kLT5MYW5nKCdibGFzdCcpfTwvYT48L2xpPgogICAgPGxpPjxhIGhyZWY9IiN0YWItc2V0dGluZ3MiPnskbW9kLT5MYW5nKCd0YWJfc2V0dGluZ3MnKX08L2E+PC9saT4KICAgIDxsaT48YSBocmVmPSIjdGFiLWRpc2NvcmQiPkRpc2NvcmQ8L2E+PC9saT4KICAgIDxsaT48YSBocmVmPSIjdGFiLXR3aXR0ZXIiPlR3aXR0ZXIgKFgpPC9hPjwvbGk+CiAgICA8bGk+PGEgaHJlZj0iI3RhYi1mYWNlYm9vayI+RmFjZWJvb2s8L2E+PC9saT4KICAgIDxsaT48YSBocmVmPSIjdGFiLXRpa3RvayI+VGlrVG9rPC9hPjwvbGk+CiAgICA8bGk+PGEgaHJlZj0iI3RhYi1zaG9ydGVuZXIiPlVSTCBTaG9ydGVuZXI8L2E+PC9saT4KICAgIHtpZiAkYnJpZGdlcy5jZ3dlYnB1c2guYXZhaWxhYmxlfTxsaT48YSBocmVmPSIjdGFiLXdlYnB1c2giPldlYiBQdXNoIE5vdGlmaWNhdGlvbjwvYT48L2xpPnsvaWZ9CiAgICB7aWYgJHNob3dfZG9uYXRpb25zfTxsaT48YSBocmVmPSIjdGFiLWRvbmF0aW9ucyI+RG9uYXRpb25zPC9hPjwvbGk+ey9pZn0KICA8L3VsPgogIHtsaXRlcmFsfQogIDxzdHlsZT4KICAgIC5tYXMtdGFicy1uYXZ7bGlzdC1zdHlsZTpub25lO21hcmdpbjowIDAgMCAwO3BhZGRpbmc6MCAxMHB4IDAgMTBweDtkaXNwbGF5OmZsZXg7Z2FwOjA7ZmxleC13cmFwOndyYXB9CiAgICAubWFzLXRhYnMtbmF2IGxpe2xpc3Qtc3R5bGU6bm9uZTtsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW46MCAycHggMCAwfQogICAgLm1hcy10YWJzLW5hdiBsaTo6bWFya2Vye2Rpc3BsYXk6bm9uZTtjb250ZW50OicnfQogICAgLm1hcy10YWJzLW5hdiBhewogICAgICBkaXNwbGF5OmlubGluZS1ibG9jazsKICAgICAgcGFkZGluZzo2cHggMTJweDsKICAgICAgYmFja2dyb3VuZDojZThlOGU4OwogICAgICBib3JkZXI6MXB4IHNvbGlkICNjY2M7CiAgICAgIGJvcmRlci1ib3R0b206bm9uZTsKICAgICAgYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDsKICAgICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7CiAgICAgIGNvbG9yOiMzMzM7CiAgICAgIGZvbnQtd2VpZ2h0OmJvbGQ7CiAgICB9CiAgICAubWFzLXRhYnMtbmF2IGE6aG92ZXJ7YmFja2dyb3VuZDojZjVmNWY1fQogICAgLm1hcy10YWJzLW5hdiBhLmFjdGl2ZXsKICAgICAgYmFja2dyb3VuZDojMGI1ZWE2OwogICAgICBjb2xvcjojZmZmOwogICAgICBib3JkZXItY29sb3I6IzBiNWVhNjsKICAgIH0KICAgIC5tYXMtdGFie2Rpc3BsYXk6bm9uZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTttYXJnaW46MCAxMHB4IDEwcHggMTBweDtiYWNrZ3JvdW5kOiNmZmY7fQogICAgLm1hcy10YWIuYWN0aXZle2Rpc3BsYXk6YmxvY2t9CiAgICAubWFzLXNhdmUtaW5kaWNhdG9yewogICAgICBwb3NpdGlvbjpmaXhlZDsKICAgICAgdG9wOjYwcHg7CiAgICAgIHJpZ2h0OjIwcHg7CiAgICAgIHBhZGRpbmc6OHB4IDE2cHg7CiAgICAgIGJhY2tncm91bmQ6IzBiNWVhNjsKICAgICAgY29sb3I6I2ZmZjsKICAgICAgYm9yZGVyLXJhZGl1czo0cHg7CiAgICAgIGZvbnQtc2l6ZToxM3B4OwogICAgICB6LWluZGV4OjEwMDAwOwogICAgICBvcGFjaXR5OjA7CiAgICAgIHRyYW5zaXRpb246b3BhY2l0eSAwLjNzOwogICAgICBwb2ludGVyLWV2ZW50czpub25lOwogICAgfQogICAgLm1hcy1zYXZlLWluZGljYXRvci5zaG93e29wYWNpdHk6MX0KICAgIC5tYXMtc2F2ZS1pbmRpY2F0b3Iuc2F2ZWR7YmFja2dyb3VuZDojNGNhZjUwfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0ibWFzLXNhdmUtaW5kaWNhdG9yIiBpZD0ibWFzLXNhdmUtaW5kaWNhdG9yIiBkYXRhLWFjdGl2ZS10YWI9InRhYi1ibGFzdCI+PC9kaXY+CiAgPHNjcmlwdD4KICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpewogICAgICB2YXIgaW5kaWNhdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcy1zYXZlLWluZGljYXRvcicpOwogICAgICB2YXIgYWN0aXZlRmllbGRQcm9iZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWUkPSJhY3RpdmVfdGFiIl0nKTsKICAgICAgdmFyIGZvcm0gPSBhY3RpdmVGaWVsZFByb2JlID8gYWN0aXZlRmllbGRQcm9iZS5mb3JtIDogbnVsbDsKICAgICAgaWYgKCFmb3JtKSByZXR1cm47CiAgICAgIAogICAgICBmdW5jdGlvbiBnZXRBY3RpdmVUYWIoKSB7CiAgICAgICAgdmFyIGFjdGl2ZVRhYiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYXMtdGFiLmFjdGl2ZScpOwogICAgICAgIGlmICghYWN0aXZlVGFiKSByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gYWN0aXZlVGFiLmlkOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNldEZvcm1BY3Rpb25Gcm9tU3VibWl0dGVyKHN1Ym1pdHRlcikgewogICAgICAgIGlmICghc3VibWl0dGVyIHx8ICFzdWJtaXR0ZXIubmFtZSkgcmV0dXJuOwogICAgICAgIHZhciBhY3Rpb25GaWVsZCA9IGZvcm0ucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZSQ9ImZvcm1fYWN0aW9uIl0nKTsKICAgICAgICBpZiAoIWFjdGlvbkZpZWxkKSByZXR1cm47CiAgICAgICAgdmFyIG5hbWUgPSBzdWJtaXR0ZXIubmFtZTsKICAgICAgICB2YXIgdW5kZXJzY29yZVBvcyA9IG5hbWUuaW5kZXhPZignXycpOwogICAgICAgIGlmICh1bmRlcnNjb3JlUG9zID4gMCkgewogICAgICAgICAgYWN0aW9uRmllbGQudmFsdWUgPSBuYW1lLnN1YnN0cmluZyh1bmRlcnNjb3JlUG9zICsgMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFjdGlvbkZpZWxkLnZhbHVlID0gbmFtZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIHNob3dJbmRpY2F0b3IodGV4dCwgY2xhc3NOYW1lKSB7CiAgICAgICAgaW5kaWNhdG9yLnRleHRDb250ZW50ID0gdGV4dDsKICAgICAgICBpbmRpY2F0b3IuY2xhc3NOYW1lID0gJ21hcy1zYXZlLWluZGljYXRvciAnICsgKGNsYXNzTmFtZSB8fCAnJyk7CiAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTsKICAgICAgICB9LCAyMDAwKTsKICAgICAgfQogICAgICAKICAgICAgZnVuY3Rpb24gaXNWYWxpZFRhYklkKGlkKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgJiYgL14jdGFiLVtBLVphLXowLTlfLV0rJC8udGVzdChpZCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYWN0aXZhdGUoaWQpewogICAgICAgIGlmICghaXNWYWxpZFRhYklkKGlkKSkgewogICAgICAgICAgaWQgPSAnI3RhYi1ibGFzdCc7CiAgICAgICAgfQogICAgICAgIHZhciB0YWJzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXMtdGFiJyk7IHRhYnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpfSk7CiAgICAgICAgdmFyIGxpbmtzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXMtdGFicy1uYXYgYScpOyBsaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGwpe2wuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyl9KTsKICAgICAgICB2YXIgZWwgPSBudWxsOwogICAgICAgIHRyeSB7IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpZCk7IH0gY2F0Y2ggKGUpIHsgZWwgPSBudWxsOyB9CiAgICAgICAgaWYoIWVsKXsgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdGFiLWJsYXN0Jyk7IH0KICAgICAgICBpZihlbCl7ZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7fQogICAgICAgIHZhciBhY3RpdmVJZCA9IGVsID8gKCcjJyArIGVsLmlkKSA6ICcjdGFiLWJsYXN0JzsKICAgICAgICB2YXIgbGluaz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWFzLXRhYnMtbmF2IGFbaHJlZj0iJythY3RpdmVJZCsnIl0nKTsgaWYobGluayl7bGluay5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTt9CiAgICAgICAgdmFyIGFjdGl2ZUZpZWxkID0gZm9ybS5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lJD0iYWN0aXZlX3RhYiJdJyk7CiAgICAgICAgaWYgKGFjdGl2ZUZpZWxkICYmIGFjdGl2ZUlkKSB7CiAgICAgICAgICBhY3RpdmVGaWVsZC52YWx1ZSA9IGFjdGl2ZUlkLnJlcGxhY2UoJyMnLCcnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc2Nyb2xsVG9BbmNob3IoYW5jaG9ySWQpIHsKICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhbmNob3JJZCk7CiAgICAgICAgaWYgKCF0YXJnZXQpIHJldHVybjsKICAgICAgICAvLyBGaW5kIHdoaWNoIHRhYiBjb250YWlucyB0aGlzIGVsZW1lbnQKICAgICAgICB2YXIgdGFiID0gdGFyZ2V0LmNsb3Nlc3QoJy5tYXMtdGFiJyk7CiAgICAgICAgaWYgKHRhYikgewogICAgICAgICAgLy8gQWN0aXZhdGUgdGhlIHRhYiBmaXJzdAogICAgICAgICAgYWN0aXZhdGUoJyMnICsgdGFiLmlkKTsKICAgICAgICAgIC8vIFdhaXQgZm9yIHRhYiB0byBiZSBmdWxseSB2aXNpYmxlIGFuZCByZW5kZXJlZAogICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHNjcm9sbCBwb3NpdGlvbiBhY2NvdW50aW5nIGZvciBmaXhlZCBoZWFkZXIKICAgICAgICAgICAgdmFyIHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIHZhciBjdXJyZW50U2Nyb2xsID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7CiAgICAgICAgICAgIHZhciBoZWFkZXJPZmZzZXQgPSAxMDA7IC8vIFNwYWNlIGZvciBDTVNNUyBhZG1pbiBoZWFkZXIKICAgICAgICAgICAgdmFyIHRhcmdldFBvc2l0aW9uID0gdGFyZ2V0UmVjdC50b3AgKyBjdXJyZW50U2Nyb2xsIC0gaGVhZGVyT2Zmc2V0OwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gU21vb3RoIHNjcm9sbCB0byBwb3NpdGlvbiB0aGUgdGFyZ2V0IG5lYXIgdGhlIHRvcCBvZiB2aWV3cG9ydAogICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oewogICAgICAgICAgICAgIHRvcDogdGFyZ2V0UG9zaXRpb24sCiAgICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQWRkIGEgc3VidGxlIGhpZ2hsaWdodCBlZmZlY3QKICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLnRyYW5zaXRpb24gPSAnYm94LXNoYWRvdyAwLjNzIGVhc2UnOwogICAgICAgICAgICB0YXJnZXQuc3R5bGUuYm94U2hhZG93ID0gJzAgMCAxMHB4IHJnYmEoMTEsIDk0LCAxNjYsIDAuNSknOwogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5ib3hTaGFkb3cgPSAnJzsKICAgICAgICAgICAgfSwgMjAwMCk7CiAgICAgICAgICB9LCAzMDApOwogICAgICAgIH0KICAgICAgfQogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZSl7CiAgICAgICAgdmFyIGE9ZS50YXJnZXQuY2xvc2VzdCgnYScpOwogICAgICAgIGlmICghYSkgcmV0dXJuOwogICAgICAgIHZhciBocmVmID0gYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTsKICAgICAgICBpZiAoIWhyZWYgfHwgIWhyZWYuc3RhcnRzV2l0aCgnIycpKSByZXR1cm47CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIHRhYiBuYXZpZ2F0aW9uCiAgICAgICAgaWYgKGEuY2xvc2VzdCgnLm1hcy10YWJzLW5hdicpKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBhY3RpdmF0ZShocmVmKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIGludGVybmFsIGFuY2hvciBsaW5rcyAobGlrZSAjeW91cmxzX3NldHRpbmdzKQogICAgICAgIC8vIENoZWNrIGlmIGl0J3Mgbm90IGEgdGFiIGxpbmsgYW5kIHRoZSB0YXJnZXQgZXhpc3RzIHdpdGhpbiBhIHRhYgogICAgICAgIHZhciB0YXJnZXRFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaHJlZik7CiAgICAgICAgaWYgKHRhcmdldEVsICYmIHRhcmdldEVsLmNsb3Nlc3QoJy5tYXMtdGFiJykgJiYgIWhyZWYuc3RhcnRzV2l0aCgnI3RhYi0nKSkgewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgc2Nyb2xsVG9BbmNob3IoaHJlZik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9KTsKICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICB2YXIgc3VibWl0dGVyID0gZS50YXJnZXQuY2xvc2VzdCgnaW5wdXRbdHlwZT0ic3VibWl0Il0sYnV0dG9uW3R5cGU9InN1Ym1pdCJdJyk7CiAgICAgICAgaWYgKCFzdWJtaXR0ZXIpIHJldHVybjsKICAgICAgICBzZXRGb3JtQWN0aW9uRnJvbVN1Ym1pdHRlcihzdWJtaXR0ZXIpOwogICAgICB9KTsKICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGN1cnJlbnRVcmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZiA/IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCcjJylbMF0gOiAnJzsKICAgICAgICBpZiAoY3VycmVudFVybCAmJiBjdXJyZW50VXJsLmluZGV4T2YoJ21hY3Q9JykgIT09IC0xKSB7CiAgICAgICAgICAvLyBFbnN1cmUgc3VibWl0cyBhbHdheXMgdGFyZ2V0IHRoZSBtb2R1bGUgYWN0aW9uIFVSTCwgbm90IGJhcmUgbW9kdWxlaW50ZXJmYWNlLnBocAogICAgICAgICAgZm9ybS5zZXRBdHRyaWJ1dGUoJ2FjdGlvbicsIGN1cnJlbnRVcmwpOwogICAgICAgIH0KICAgICAgICBpZiAoZS5zdWJtaXR0ZXIpIHsKICAgICAgICAgIHNldEZvcm1BY3Rpb25Gcm9tU3VibWl0dGVyKGUuc3VibWl0dGVyKTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhYklkID0gZ2V0QWN0aXZlVGFiKCkgfHwgJyN0YWItYmxhc3QnOwogICAgICAgIHZhciBhY3RpdmVGaWVsZCA9IGZvcm0ucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZSQ9ImFjdGl2ZV90YWIiXScpOwogICAgICAgIGlmIChhY3RpdmVGaWVsZCAmJiB0YWJJZCkgewogICAgICAgICAgYWN0aXZlRmllbGQudmFsdWUgPSB0YWJJZC5yZXBsYWNlKCcjJywgJycpOwogICAgICAgIH0KICAgICAgICBzaG93SW5kaWNhdG9yKCdTYXZpbmcgc2V0dGluZ3MuLi4nLCAnc2F2ZWQnKTsKICAgICAgfSk7CgogICAgICB2YXIgcHJlZmVycmVkVGFiID0gaW5kaWNhdG9yLmdldEF0dHJpYnV0ZSgnZGF0YS1hY3RpdmUtdGFiJykgfHwgJ3RhYi1ibGFzdCc7CiAgICAgIHZhciBpbml0aWFsID0gJyN0YWItYmxhc3QnOwogICAgICBpZiAobG9jYXRpb24uaGFzaCAmJiBpc1ZhbGlkVGFiSWQobG9jYXRpb24uaGFzaCkgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hcy10YWJzLW5hdiBhW2hyZWY9IicrbG9jYXRpb24uaGFzaCsnIl0nKSkgewogICAgICAgIGluaXRpYWwgPSBsb2NhdGlvbi5oYXNoOwogICAgICB9IGVsc2UgaWYgKGlzVmFsaWRUYWJJZCgnIycgKyBwcmVmZXJyZWRUYWIpICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYXMtdGFicy1uYXYgYVtocmVmPSIjJytwcmVmZXJyZWRUYWIrJyJdJykpIHsKICAgICAgICBpbml0aWFsID0gJyMnICsgcHJlZmVycmVkVGFiOwogICAgICB9CiAgICAgIGFjdGl2YXRlKGluaXRpYWwpOwogICAgICAvLyBIYW5kbGUgaW5pdGlhbCBoYXNoIGlmIGl0J3MgYW4gaW50ZXJuYWwgYW5jaG9yCiAgICAgIGlmIChsb2NhdGlvbi5oYXNoICYmICFsb2NhdGlvbi5oYXNoLnN0YXJ0c1dpdGgoJyN0YWItJykpIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBzY3JvbGxUb0FuY2hvcihsb2NhdGlvbi5oYXNoKTsgfSwgMjAwKTsKICAgICAgfQogICAgfSk7CiAgPC9zY3JpcHQ+CiAgey9saXRlcmFsfQogICAge2lmIGlzc2V0KCRibGFzdG1vZHVsZXMpICYmIGNvdW50KCRibGFzdG1vZHVsZXMpID4gMH0KICAgICAge2ZvcmVhY2ggJGJsYXN0bW9kdWxlcyBhcyAkbW9kdWxlbmFtZSA9PiAkbGJsfQogICAgICAgIHskbGJsPSJ7JG1vZC0+TGFuZygndGVtcGxhdGVfZm9yJywkbGJsKX0ifQogICAgICAgIHtjZ2VfdGFiaGVhZGVyIG5hbWU9JG1vZHVsZW5hbWUgbGFiZWw9JGxibH0KICAgICAgey9mb3JlYWNofQogICAgICB7Y2dlX3RhYmhlYWRlciBuYW1lPSdoZWxwJyBsYWJlbD0kbW9kLT5MYW5nKCdoZWxwJyl9CiAgICB7L2lmfQoKICAgIHskZm9ybXN0YXJ0fQogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieyRhY3Rpb25pZH1hY3RpdmVfdGFiIiB2YWx1ZT0ieyRhY3RpdmVfdGFifGRlZmF1bHQ6J3RhYi1ibGFzdCd9Ii8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7JGFjdGlvbmlkfWZvcm1fYWN0aW9uIiB2YWx1ZT0iIi8+CiAgICA8ZGl2IGNsYXNzPSJtYXMtdGFiIGFjdGl2ZSIgaWQ9InRhYi1ibGFzdCI+CiAgICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpNQVNfU29jaWFsczthZG1pbl9wb3N0X3RhYi50cGwnfQogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJtYXMtdGFiIiBpZD0idGFiLXNldHRpbmdzIj4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZnJpZW5kbHluYW1lJyl9OjwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWZyaWVuZGx5bmFtZSIgdmFsdWU9InskZnJpZW5kbHluYW1lfSIgc2l6ZT0iNTAiLz4KICAgICAgICAgIDxici8+eyRtb2QtPkxhbmcoJ2luZm9fZnJpZW5kbHluYW1lJyl9CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5TaG93IERvbmF0aW9ucyBUYWI8L3A+CiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ7JGFjdGlvbmlkfXNob3dfZG9uYXRpb25zX3RhYiIgdmFsdWU9IjEiIHtpZiAkc2hvd19kb25hdGlvbnN9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+IEVuYWJsZTwvbGFiZWw+CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkF1dG9tYXRpYyBwb3N0aW5nIGZvciBOZXdzIG1vZHVsZTwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9YXV0b19uZXdzIiB2YWx1ZT0iMSIge2lmICRhdXRvX25ld3N9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+IEVuYWJsZSBhdXRvbWF0aWMgc29jaWFsIHB1Ymxpc2hpbmcgd2hlbiBOZXdzIGFydGljbGVzIGFyZSBwdWJsaXNoZWQvZWRpdGVkLjwvbGFiZWw+CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkF1dG9tYXRpYyBwb3N0aW5nIGZvciBDR0Jsb2cgbW9kdWxlPC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1hdXRvX2NnYmxvZyIgdmFsdWU9IjEiIHtpZiAkYXV0b19jZ2Jsb2d9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+IEVuYWJsZSBhdXRvbWF0aWMgc29jaWFsIHB1Ymxpc2hpbmcgd2hlbiBDR0Jsb2cgZW50cmllcyBhcmUgcHVibGlzaGVkL2VkaXRlZC48L2xhYmVsPgogICAgICAgIDwvcD4KICAgICAgPC9kaXY+CgogICAgICA8ZmllbGRzZXQ+CiAgICAgICAgPGxlZ2VuZD5BZG1pbiBwbGFjZW1lbnQ8L2xlZ2VuZD4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkFkbWluIHNlY3Rpb248L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9YWRtaW5fc2VjdGlvbiI+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFpbiIge2lmICRjdXJyZW50X3NlY3Rpb249PSdtYWluJ31zZWxlY3RlZD0ic2VsZWN0ZWQiey9pZn0+TWFpbjwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImNvbnRlbnQiIHtpZiAkY3VycmVudF9zZWN0aW9uPT0nY29udGVudCd9c2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PkNvbnRlbnQ8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsYXlvdXQiIHtpZiAkY3VycmVudF9zZWN0aW9uPT0nbGF5b3V0J31zZWxlY3RlZD0ic2VsZWN0ZWQiey9pZn0+TGF5b3V0PC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idXNlcnNncm91cHMiIHtpZiAkY3VycmVudF9zZWN0aW9uPT0ndXNlcnNncm91cHMnfXNlbGVjdGVkPSJzZWxlY3RlZCJ7L2lmfT5Vc2VyIE1hbmFnZW1lbnQ8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJleHRlbnNpb25zIiB7aWYgJGN1cnJlbnRfc2VjdGlvbj09J2V4dGVuc2lvbnMnfXNlbGVjdGVkPSJzZWxlY3RlZCJ7L2lmfT5FeHRlbnNpb25zPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ic2l0ZWFkbWluIiB7aWYgJGN1cnJlbnRfc2VjdGlvbj09J3NpdGVhZG1pbid9c2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PlNpdGUgQWRtaW48L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJteXByZWZlcmVuY2VzIiB7aWYgJGN1cnJlbnRfc2VjdGlvbj09J215cHJlZmVyZW5jZXMnfXNlbGVjdGVkPSJzZWxlY3RlZCJ7L2lmfT5NeSBQcmVmZXJlbmNlczwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImVjb21tZXJjZSIge2lmICRjdXJyZW50X3NlY3Rpb249PSdlY29tbWVyY2UnfXNlbGVjdGVkPSJzZWxlY3RlZCJ7L2lmfT5FLUNvbW1lcmNlPC9vcHRpb24+CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgPC9maWVsZHNldD4KICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPkNvbmZpZyBmaWxlOiB7JGNvbmZpZ19wYXRofTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXRfZ2VuZXJhbCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iLz4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0X2RlYnVnX3Byb2JlIiB2YWx1ZT0iRGVidWcgU3VibWl0IHRvIEFkbWluIExvZyIvPgogICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbi5ocmVmPSd7JGRlYnVnX3Byb2JlX3VybHxlc2NhcGU6J2phdmFzY3JpcHQnfSciIHN0eWxlPSJtYXJnaW4tbGVmdDo4cHg7Ij5EZWJ1ZyBTdWJtaXQgdG8gQWRtaW4gTG9nIChEaXJlY3QpPC9idXR0b24+CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ibWFzLXRhYiIgaWQ9InRhYi1kaXNjb3JkIj4KICAgICAgPGZpZWxkc2V0PgogICAgICAgIDxsZWdlbmQ+RGlzY29yZDwvbGVnZW5kPgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkVuYWJsZTwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ7JGFjdGlvbmlkfWVuYWJsZV9kaXNjb3JkIiB2YWx1ZT0iMSIge2lmICRuZXR3b3JrX3N0YXR1cy5kaXNjb3JkLmVuYWJsZWR9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+IEVuYWJsZTwvbGFiZWw+CiAgICAgICAgICAgIHtpZiAhJG5ldHdvcmtfc3RhdHVzLmRpc2NvcmQuY29uZmlndXJlZH08c3BhbiBjbGFzcz0id2FybmluZyI+V2ViaG9vayBub3QgY29uZmlndXJlZCBpbiBtb2R1bGUgc2V0dGluZ3MvZGF0YWJhc2Ugb3IgY29uZmlnLnBocCBvdmVycmlkZSAobWFzX3NvY2lhbHNfZGlzY29yZF93ZWJob29rKTwvc3Bhbj57L2lmfQogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPk1lc3NhZ2UgdGVtcGxhdGU8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9IjQiIGNvbHM9IjgwIiBuYW1lPSJ7JGFjdGlvbmlkfXRwbF9kaXNjb3JkIj57JHRwbF9kaXNjb3JkfTwvdGV4dGFyZWE+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZmllbGRzZXQ+CiAgICAgIDxmaWVsZHNldD4KICAgICAgICA8bGVnZW5kPkNvbmZpZ3VyYXRpb248L2xlZ2VuZD4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5EaXNjb3JkIHdlYmhvb2sgVVJMPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWRpc2NvcmRfd2ViaG9vayIgdmFsdWU9InskZGlzY29yZF93ZWJob29rfGVzY2FwZX0iIHNpemU9IjgwIiBwbGFjZWhvbGRlcj0iaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGkvd2ViaG9va3MvLi4uIi8+CiAgICAgICAgICAgIDxici8+PGVtPkVudGVyIHlvdXIgRGlzY29yZCB3ZWJob29rIFVSTC4gVGhpcyBpcyBzYXZlZCBpbiBDTVNNUyBkYXRhYmFzZSBzZXR0aW5ncyBieSBkZWZhdWx0IChjb25maWcucGhwIHZhbHVlcyBjYW4gc3RpbGwgb3ZlcnJpZGUpLjwvZW0+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+TWVzc2FnZSBmb3JtYXQ8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfWRpc2NvcmRfbWVzc2FnZV9tb2RlIj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJub3JtYWwiIHtpZiAkZGlzY29yZF9tZXNzYWdlX21vZGUgPT0gJ25vcm1hbCd9c2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9Pk5vcm1hbCBtZXNzYWdlIG9ubHk8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJlbWJlZCIge2lmICRkaXNjb3JkX21lc3NhZ2VfbW9kZSA9PSAnZW1iZWQnfXNlbGVjdGVkPSJzZWxlY3RlZCJ7L2lmfT5FbWJlZCArIG1lc3NhZ2U8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJlbWJlZF9vbmx5IiB7aWYgJGRpc2NvcmRfbWVzc2FnZV9tb2RlID09ICdlbWJlZF9vbmx5J31zZWxlY3RlZD0ic2VsZWN0ZWQiey9pZn0+RW1iZWQgb25seTwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiI+VmFsdWVzIGFyZSBzdG9yZWQgc2VjdXJlbHkgaW4gQ01TTVMgZGF0YWJhc2Ugc2V0dGluZ3MgYnkgZGVmYXVsdC4gT3B0aW9uYWwgb3ZlcnJpZGVzIGluIHskY29uZmlnX3BhdGh9IGFyZSBzdGlsbCBzdXBwb3J0ZWQuPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPkFjdGl2ZSB2YWx1ZSBzb3VyY2U6IHdlYmhvb2sgPSB7JHZhbHVlX3NvdXJjZXMuZGlzY29yZF93ZWJob29rfGVzY2FwZX0sIG1vZGUgPSB7JHZhbHVlX3NvdXJjZXMuZGlzY29yZF9tZXNzYWdlX21vZGV8ZXNjYXBlfTwvZGl2PgogICAgICA8L2ZpZWxkc2V0PgogICAgICA8ZmllbGRzZXQ+CiAgICAgICAgPGxlZ2VuZD5UZXN0PC9sZWdlbmQ+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+VGVzdCBEaXNjb3JkIEludGVncmF0aW9uPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0X3Rlc3RfZGlzY29yZCIgdmFsdWU9IlNlbmQgVGVzdCBNZXNzYWdlIi8+CiAgICAgICAgICAgIHtpZiBpc3NldCgkdGVzdF9yZXN1bHRfZGlzY29yZCl9CiAgICAgICAgICAgICAgPGJyLz4KICAgICAgICAgICAgICB7aWYgJHRlc3RfcmVzdWx0X2Rpc2NvcmQuc3VjY2Vzc30KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogZ3JlZW47IGZvbnQtd2VpZ2h0OiBib2xkOyI+4pyTIHskdGVzdF9yZXN1bHRfZGlzY29yZC5tZXNzYWdlfGVzY2FwZX08L3NwYW4+CiAgICAgICAgICAgICAge2Vsc2V9CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij7inJcgeyR0ZXN0X3Jlc3VsdF9kaXNjb3JkLm1lc3NhZ2V8ZXNjYXBlfTwvc3Bhbj4KICAgICAgICAgICAgICB7L2lmfQogICAgICAgICAgICB7L2lmfQogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICA8L2ZpZWxkc2V0PgogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXRfZGlzY29yZCIgdmFsdWU9IlNhdmUgRGlzY29yZCBTZXR0aW5ncyIvPgogICAgICAgIDwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im1hcy10YWIiIGlkPSJ0YWItc2hvcnRlbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPk1hbmFnZSBwcm92aWRlcnMganVzdCBsaWtlIHRoZSBjbGFzc2ljIFVSTCB0b29sLiBDbGljayBFZGl0IHRvIGp1bXAgdG8gdGhlIHByb3ZpZGVyIHNldHRpbmdzLjwvZGl2PgogICAgICA8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSI+CiAgICAgICAgPHRoZWFkPjx0cj48dGggc3R5bGU9IndpZHRoOjQwJSI+U2VydmljZTwvdGg+PHRoIHN0eWxlPSJ3aWR0aDoyMCUiPkFjdGl2ZTwvdGg+PHRoPkFjdGlvbjwvdGg+PC90cj48L3RoZWFkPgogICAgICAgIDx0Ym9keT4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPllPVVJMUzwvdGQ+CiAgICAgICAgICAgIDx0ZD57aWYgJHNob3J0ZW5lcl9wcm92aWRlcj09J3lvdXJscyd9WWVze2Vsc2V9Tm97L2lmfTwvdGQ+CiAgICAgICAgICAgIDx0ZD48YSBjbGFzcz0ibGlua2J1dHRvbiIgaHJlZj0iI3lvdXJsc19zZXR0aW5ncyI+RWRpdDwvYT48L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPkJpdGx5PC90ZD4KICAgICAgICAgICAgPHRkPntpZiAkc2hvcnRlbmVyX3Byb3ZpZGVyPT0nYml0bHknfVllc3tlbHNlfU5vey9pZn08L3RkPgogICAgICAgICAgICA8dGQ+PGEgY2xhc3M9ImxpbmtidXR0b24iIGhyZWY9IiNiaXRseV9zZXR0aW5ncyI+RWRpdDwvYT48L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPlRpbnlVUkw8L3RkPgogICAgICAgICAgICA8dGQ+e2lmICRzaG9ydGVuZXJfcHJvdmlkZXI9PSd0aW55dXJsJ31ZZXN7ZWxzZX1Ob3svaWZ9PC90ZD4KICAgICAgICAgICAgPHRkPjxhIGNsYXNzPSJsaW5rYnV0dG9uIiBocmVmPSIjdGlueXVybF9zZXR0aW5ncyI+RWRpdDwvYT48L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICA8L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgICA8ZmllbGRzZXQ+CiAgICAgICAgPGxlZ2VuZD5Qcm92aWRlcjwvbGVnZW5kPgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkFjdGl2ZSBzZXJ2aWNlPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1zaG9ydGVuZXJfcHJvdmlkZXIiPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiIge2lmICRzaG9ydGVuZXJfcHJvdmlkZXI9PScnfXNlbGVjdGVkPSJzZWxlY3RlZCJ7L2lmfT5EaXNhYmxlZDwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InlvdXJscyIge2lmICRzaG9ydGVuZXJfcHJvdmlkZXI9PSd5b3VybHMnfXNlbGVjdGVkPSJzZWxlY3RlZCJ7L2lmfT5ZT1VSTFM8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJiaXRseSIge2lmICRzaG9ydGVuZXJfcHJvdmlkZXI9PSdiaXRseSd9c2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PkJpdGx5PC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idGlueXVybCIge2lmICRzaG9ydGVuZXJfcHJvdmlkZXI9PSd0aW55dXJsJ31zZWxlY3RlZD0ic2VsZWN0ZWQiey9pZn0+VGlueVVSTDwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9maWVsZHNldD4KICAgICAgPGZpZWxkc2V0IGlkPSJ5b3VybHNfc2V0dGluZ3MiPgogICAgICAgIDxsZWdlbmQ+WU9VUkxTPC9sZWdlbmQ+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+QVBJIEVuZHBvaW50PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9eW91cmxzX2VuZHBvaW50IiB2YWx1ZT0ieyR5b3VybHNfZW5kcG9pbnR8ZXNjYXBlfSIgc2l6ZT0iNzAiLz48L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+U2lnbmF0dXJlIFRva2VuPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9eW91cmxzX3NpZ25hdHVyZSIgdmFsdWU9InskeW91cmxzX3NpZ25hdHVyZXxlc2NhcGV9IiBzaXplPSI0MCIvPjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9maWVsZHNldD4KICAgICAgPGZpZWxkc2V0IGlkPSJiaXRseV9zZXR0aW5ncyI+CiAgICAgICAgPGxlZ2VuZD5CaXRseTwvbGVnZW5kPgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkFjY2VzcyBUb2tlbjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWJpdGx5X3Rva2VuIiB2YWx1ZT0ieyRiaXRseV90b2tlbnxlc2NhcGV9IiBzaXplPSI0MCIgcGxhY2Vob2xkZXI9IlN0b3JlZCBpbiBDTVNNUyBkYXRhYmFzZSBzZXR0aW5ncyBieSBkZWZhdWx0Ii8+PC9wPgogICAgICAgIDwvZGl2PgogICAgICA8L2ZpZWxkc2V0PgogICAgICA8ZmllbGRzZXQgaWQ9InRpbnl1cmxfc2V0dGluZ3MiPgogICAgICAgIDxsZWdlbmQ+VGlueVVSTDwvbGVnZW5kPgogICAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIj5ObyBjcmVkZW50aWFscyBhcmUgcmVxdWlyZWQgZm9yIFRpbnlVUkwuPC9kaXY+CiAgICAgIDwvZmllbGRzZXQ+CiAgICAgIDxmaWVsZHNldD4KICAgICAgICA8bGVnZW5kPlNldHRpbmdzPC9sZWdlbmQ+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+RW5hYmxlIGNhY2hpbmc8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1zaG9ydGVuZXJfY2FjaGUiIHZhbHVlPSIxIiB7aWYgJHNob3J0ZW5lcl9jYWNoZX1jaGVja2VkPSJjaGVja2VkInsvaWZ9Lz4gQ2FjaGUgcmVzdWx0czwvbGFiZWw+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZmllbGRzZXQ+CiAgICAgIDxmaWVsZHNldD4KICAgICAgICA8bGVnZW5kPlRlc3Q8L2xlZ2VuZD4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Mb25nIFVSTDwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1zaG9ydGVuZXJfdGVzdF91cmwiIHZhbHVlPSJ7JHNob3J0ZW5lcl90ZXN0X3VybHxlc2NhcGV9IiBzaXplPSI4MCIgcGxhY2Vob2xkZXI9Imh0dHBzOi8vZXhhbXBsZS5jb20vc29tZS9sb25nL3BhdGgiLz4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0X3Nob3J0ZW5lcl90ZXN0IiB2YWx1ZT0iU2hvcnRlbiIvPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIHtpZiBpc3NldCgkc2hvcnRlbmVyX3Rlc3RfcmVzdWx0KX0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5SZXN1bHQ8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSJ7JHNob3J0ZW5lcl90ZXN0X3Jlc3VsdHxlc2NhcGV9IiBzaXplPSI4MCIgcmVhZG9ubHk9InJlYWRvbmx5Ii8+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgey9pZn0KICAgICAgPC9maWVsZHNldD4KICAgICAgPGZpZWxkc2V0PgogICAgICAgIDxsZWdlbmQ+Q2FjaGU8L2xlZ2VuZD4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5FbnRyaWVzICh7JHNob3J0ZW5lcl9jYWNoZV90b3RhbH0pPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0X3Nob3J0ZW5lcl9jbGVhciIgdmFsdWU9IkNsZWFyIGNhY2hlIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybSgnQ2xlYXIgYWxsIGNhY2hlZCBzaG9ydCBsaW5rcz8nKTsiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSI+CiAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgIDx0cj48dGg+Q3JlYXRlZDwvdGg+PHRoPkxvbmcgVVJMPC90aD48dGg+U2hvcnQgVVJMPC90aD48L3RyPgogICAgICAgICAgPC90aGVhZD4KICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAge2lmICRzaG9ydGVuZXJfY2FjaGVfcm93c3xAY291bnQgZ3QgMH0KICAgICAgICAgICAgICB7Zm9yZWFjaCBmcm9tPSRzaG9ydGVuZXJfY2FjaGVfcm93cyBpdGVtPXJvd30KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+eyRyb3cuY3JlYXRlZF9hdHxlc2NhcGV9PC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0id29yZC1icmVhazpicmVhay1hbGw7Ij57JHJvdy5sb25nX3VybHxlc2NhcGV9PC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0id29yZC1icmVhazpicmVhay1hbGw7Ij48YSBocmVmPSJ7JHJvdy5zaG9ydF91cmx8ZXNjYXBlfSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPnskcm93LnNob3J0X3VybHxlc2NhcGV9PC9hPjwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICB7L2ZvcmVhY2h9CiAgICAgICAgICAgIHtlbHNlfQogICAgICAgICAgICAgIDx0cj48dGQgY29sc3Bhbj0iMyI+Tm8gY2FjaGVkIGVudHJpZXM8L3RkPjwvdHI+CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICA8L3Rib2R5PgogICAgICAgIDwvdGFibGU+CiAgICAgICAge2lmICRzaG9ydGVuZXJfY2FjaGVfcGFnZXMgZ3QgMX0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIHthc3NpZ24gdmFyPSJwIiB2YWx1ZT0kc2hvcnRlbmVyX2NhY2hlX3BhZ2V9CiAgICAgICAgICAgIHtzZWN0aW9uIG5hbWU9aSBzdGFydD0xIGxvb3A9JHNob3J0ZW5lcl9jYWNoZV9wYWdlcysxfQogICAgICAgICAgICAgIHtpZiAkc21hcnR5LnNlY3Rpb24uaS5pbmRleCA9PSAkcH0KICAgICAgICAgICAgICAgIDxzdHJvbmc+W3skc21hcnR5LnNlY3Rpb24uaS5pbmRleH1dPC9zdHJvbmc+CiAgICAgICAgICAgICAge2Vsc2V9CiAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JHNtYXJ0eS5zZXJ2ZXIuUkVRVUVTVF9VUkl8ZXNjYXBlfSZ7JGFjdGlvbmlkfXNob3J0ZW5lcl9wYWdlPXskc21hcnR5LnNlY3Rpb24uaS5pbmRleH0iPlt7JHNtYXJ0eS5zZWN0aW9uLmkuaW5kZXh9XTwvYT4KICAgICAgICAgICAgICB7L2lmfQogICAgICAgICAgICB7L3NlY3Rpb259CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgICAgey9pZn0KICAgICAgPC9maWVsZHNldD4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0X3Nob3J0ZW5lciIgdmFsdWU9IlNhdmUgU2hvcnRlbmVyIFNldHRpbmdzIi8+CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ibWFzLXRhYiIgaWQ9InRhYi10d2l0dGVyIj4KICAgICAgPGZpZWxkc2V0PgogICAgICAgIDxsZWdlbmQ+TXkgVHdpdHRlcjwvbGVnZW5kPgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPlNjcmVlbiBOYW1lPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXR3X3NjcmVlbm5hbWUiIHZhbHVlPSJ7JHR3X3NjcmVlbm5hbWV8ZXNjYXBlfSIgc2l6ZT0iNDAiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9maWVsZHNldD4KICAgICAgPGZpZWxkc2V0PgogICAgICAgIDxsZWdlbmQ+QXV0aG9yaXphdGlvbiBUZW1wbGF0ZTwvbGVnZW5kPgogICAgICAgIDx0ZXh0YXJlYSByb3dzPSI4IiBjb2xzPSIxMDAiIG5hbWU9InskYWN0aW9uaWR9dHdfYXV0aF90cGwiPnskdHdfYXV0aF90cGx8Y21zX2VzY2FwZX08L3RleHRhcmVhPgogICAgICA8L2ZpZWxkc2V0PgogICAgICA8ZmllbGRzZXQ+CiAgICAgICAgPGxlZ2VuZD5UaW1lbGluZSBUZW1wbGF0ZTwvbGVnZW5kPgogICAgICAgIDx0ZXh0YXJlYSByb3dzPSI4IiBjb2xzPSIxMDAiIG5hbWU9InskYWN0aW9uaWR9dHdfdGltZWxpbmVfdHBsIj57JHR3X3RpbWVsaW5lX3RwbHxjbXNfZXNjYXBlfTwvdGV4dGFyZWE+CiAgICAgIDwvZmllbGRzZXQ+CiAgICAgIDxmaWVsZHNldD4KICAgICAgICA8bGVnZW5kPkNvbmZpZ3VyYXRpb248L2xlZ2VuZD4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5BUEkgS2V5PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXR3aXR0ZXJfYXBpX2tleSIgdmFsdWU9InskdHdpdHRlcl9jb25maWcuYXBpX2tleXxlc2NhcGV9IiBzaXplPSI2MCIvPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkFQSSBTZWNyZXQ8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9dHdpdHRlcl9hcGlfc2VjcmV0IiB2YWx1ZT0ieyR0d2l0dGVyX2NvbmZpZy5hcGlfc2VjcmV0fGVzY2FwZX0iIHNpemU9IjYwIi8+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+QmVhcmVyIFRva2VuPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXR3aXR0ZXJfYmVhcmVyX3Rva2VuIiB2YWx1ZT0ieyR0d2l0dGVyX2NvbmZpZy5iZWFyZXJfdG9rZW58ZXNjYXBlfSIgc2l6ZT0iODAiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5BY2Nlc3MgVG9rZW48L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9dHdpdHRlcl9hY2Nlc3NfdG9rZW4iIHZhbHVlPSJ7JHR3aXR0ZXJfY29uZmlnLmFjY2Vzc190b2tlbnxlc2NhcGV9IiBzaXplPSI4MCIvPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkFjY2VzcyBTZWNyZXQ8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9dHdpdHRlcl9hY2Nlc3Nfc2VjcmV0IiB2YWx1ZT0ieyR0d2l0dGVyX2NvbmZpZy5hY2Nlc3Nfc2VjcmV0fGVzY2FwZX0iIHNpemU9IjgwIi8+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPlZhbHVlcyBhcmUgc3RvcmVkIHNlY3VyZWx5IGluIENNU01TIGRhdGFiYXNlIHNldHRpbmdzIGJ5IGRlZmF1bHQuIE9wdGlvbmFsIG92ZXJyaWRlcyBpbiB7JGNvbmZpZ19wYXRofSBhcmUgc3RpbGwgc3VwcG9ydGVkLjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIj5BY3RpdmUgdmFsdWUgc291cmNlOiBhcGlfa2V5ID0geyR2YWx1ZV9zb3VyY2VzLnR3aXR0ZXJfYXBpX2tleXxlc2NhcGV9LCBhY2Nlc3NfdG9rZW4gPSB7JHZhbHVlX3NvdXJjZXMudHdpdHRlcl9hY2Nlc3NfdG9rZW58ZXNjYXBlfSwgYmVhcmVyX3Rva2VuID0geyR2YWx1ZV9zb3VyY2VzLnR3aXR0ZXJfYmVhcmVyX3Rva2VufGVzY2FwZX08L2Rpdj4KICAgICAgPC9maWVsZHNldD4KICAgICAgPGZpZWxkc2V0PgogICAgICAgIDxsZWdlbmQ+VGVzdDwvbGVnZW5kPgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPlRlc3QgVHdpdHRlciBJbnRlZ3JhdGlvbjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdF90ZXN0X3R3aXR0ZXIiIHZhbHVlPSJTZW5kIFRlc3QgVHdlZXQiLz4KICAgICAgICAgICAge2lmIGlzc2V0KCR0ZXN0X3Jlc3VsdF90d2l0dGVyKX0KICAgICAgICAgICAgICA8YnIvPgogICAgICAgICAgICAgIHtpZiAkdGVzdF9yZXN1bHRfdHdpdHRlci5zdWNjZXNzfQogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiBncmVlbjsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij7inJMgeyR0ZXN0X3Jlc3VsdF90d2l0dGVyLm1lc3NhZ2V8ZXNjYXBlfTwvc3Bhbj4KICAgICAgICAgICAgICB7ZWxzZX0KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyBmb250LXdlaWdodDogYm9sZDsiPuKclyB7JHRlc3RfcmVzdWx0X3R3aXR0ZXIubWVzc2FnZXxlc2NhcGV9PC9zcGFuPgogICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZmllbGRzZXQ+CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdF90d2l0dGVyIiB2YWx1ZT0iU2F2ZSBUd2l0dGVyIFNldHRpbmdzIi8+CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ibWFzLXRhYiIgaWQ9InRhYi1mYWNlYm9vayI+CiAgICAgIDxmaWVsZHNldD4KICAgICAgICA8bGVnZW5kPkZhY2Vib29rPC9sZWdlbmQ+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+RW5hYmxlPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9ZW5hYmxlX2ZhY2Vib29rIiB2YWx1ZT0iMSIge2lmICRuZXR3b3JrX3N0YXR1cy5mYWNlYm9vay5lbmFibGVkfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0vPiBFbmFibGU8L2xhYmVsPgogICAgICAgICAgICB7aWYgISRuZXR3b3JrX3N0YXR1cy5mYWNlYm9vay5jb25maWd1cmVkfTxzcGFuIGNsYXNzPSJ3YXJuaW5nIj5BY2Nlc3MgdG9rZW4gbm90IGNvbmZpZ3VyZWQgaW4gbW9kdWxlIHNldHRpbmdzL2RhdGFiYXNlIG9yIGNvbmZpZy5waHAgb3ZlcnJpZGU8L3NwYW4+ey9pZn0KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5NZXNzYWdlIHRlbXBsYXRlPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPSI0IiBjb2xzPSI4MCIgbmFtZT0ieyRhY3Rpb25pZH10cGxfZmFjZWJvb2siPnskdHBsX2ZhY2Vib29rfTwvdGV4dGFyZWE+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZmllbGRzZXQ+CiAgICAgIDxmaWVsZHNldD4KICAgICAgICA8bGVnZW5kPkNvbmZpZ3VyYXRpb248L2xlZ2VuZD4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5BcHAgSUQ8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9ZmFjZWJvb2tfYXBwX2lkIiB2YWx1ZT0ieyRmYWNlYm9va19jb25maWcuYXBwX2lkfGVzY2FwZX0iIHNpemU9IjQwIi8+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+QXBwIFNlY3JldDwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1mYWNlYm9va19hcHBfc2VjcmV0IiB2YWx1ZT0ieyRmYWNlYm9va19jb25maWcuYXBwX3NlY3JldHxlc2NhcGV9IiBzaXplPSI2MCIvPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkNsaWVudCBUb2tlbjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1mYWNlYm9va19jbGllbnRfdG9rZW4iIHZhbHVlPSJ7JGZhY2Vib29rX2NvbmZpZy5jbGllbnRfdG9rZW58ZXNjYXBlfSIgc2l6ZT0iNjAiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Ub2tlbiBtb2RlPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1mYWNlYm9va190b2tlbl9tb2RlIj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJvYXV0aF91c2VyX3BhZ2UiIHtpZiAkZmFjZWJvb2tfY29uZmlnLnRva2VuX21vZGUgIT0gJ3N5c3RlbV91c2VyJ31zZWxlY3RlZD0ic2VsZWN0ZWQiey9pZn0+QSkgT0F1dGggdXNlciAtPiBQYWdlIGFjY2VzcyB0b2tlbjwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InN5c3RlbV91c2VyIiB7aWYgJGZhY2Vib29rX2NvbmZpZy50b2tlbl9tb2RlID09ICdzeXN0ZW1fdXNlcid9c2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PkIpIFN5c3RlbSBVc2VyIHRva2VuIChCdXNpbmVzcyBNYW5hZ2VyKTwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPGJyLz48ZW0+Q2hvb3NlIEEgZm9yIGludGVyYWN0aXZlIE9BdXRoIHBhZ2UtdG9rZW4gZmxvdywgb3IgQiBmb3Igc2VydmVyIGF1dG9tYXRpb24gd2l0aCBCdXNpbmVzcyBTeXN0ZW0gVXNlciB0b2tlbi48L2VtPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkFjY2VzcyBUb2tlbjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1mYWNlYm9va19hY2Nlc3NfdG9rZW4iIHZhbHVlPSJ7JGZhY2Vib29rX2NvbmZpZy5hY2Nlc3NfdG9rZW58ZXNjYXBlfSIgc2l6ZT0iODAiLz4KICAgICAgICAgICAgPGJyLz48ZW0+VXNlZCB3aGVuIFRva2VuIG1vZGUgPSBBIChPQXV0aCB1c2VyL3BhZ2UgdG9rZW4pLjwvZW0+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+U3lzdGVtIFVzZXIgQWNjZXNzIFRva2VuPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWZhY2Vib29rX3N5c3RlbV91c2VyX3Rva2VuIiB2YWx1ZT0ieyRmYWNlYm9va19jb25maWcuc3lzdGVtX3VzZXJfdG9rZW58ZXNjYXBlfSIgc2l6ZT0iODAiLz4KICAgICAgICAgICAgPGJyLz48ZW0+VXNlZCB3aGVuIFRva2VuIG1vZGUgPSBCIChTeXN0ZW0gVXNlcikuIEFzc2lnbiBQYWdlIGFzc2V0ICsgcGFnZXNfbWFuYWdlX3Bvc3RzL3BhZ2VzX3JlYWRfZW5nYWdlbWVudCBwZXJtaXNzaW9ucyBpbiBCdXNpbmVzcyBTZXR0aW5ncy48L2VtPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPlBhZ2UgSUQ8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9ZmFjZWJvb2tfcGFnZV9pZCIgdmFsdWU9InskZmFjZWJvb2tfY29uZmlnLnBhZ2VfaWR8ZXNjYXBlfSIgc2l6ZT0iNDAiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5BUEkgVmVyc2lvbjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1mYWNlYm9va19hcGlfdmVyc2lvbiIgdmFsdWU9InskZmFjZWJvb2tfY29uZmlnLmFwaV92ZXJzaW9ufGVzY2FwZX0iIHNpemU9IjIwIi8+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+VXNlciBkYXRhIGRlbGV0aW9uIGNhbGxiYWNrIFVSTDwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1mYWNlYm9va19kYXRhX2RlbGV0aW9uX2NhbGxiYWNrX3VybCIgdmFsdWU9InskZmFjZWJvb2tfY29uZmlnLmRhdGFfZGVsZXRpb25fY2FsbGJhY2tfdXJsfGVzY2FwZX0iIHNpemU9IjkwIi8+CiAgICAgICAgICAgIDxici8+PGVtPlNldCB0aGlzIGluIEZhY2Vib29rIEFwcCBzZXR0aW5ncyB1bmRlciBVc2VyIGRhdGEgZGVsZXRpb24uIERlZmF1bHQgbW9kdWxlIGNhbGxiYWNrIGlzIHByZWZpbGxlZC48L2VtPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPlVzZXIgZGF0YSBkZWxldGlvbiBzdGF0dXMgVVJMPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWZhY2Vib29rX2RhdGFfZGVsZXRpb25fc3RhdHVzX3VybCIgdmFsdWU9InskZmFjZWJvb2tfY29uZmlnLmRhdGFfZGVsZXRpb25fc3RhdHVzX3VybHxlc2NhcGV9IiBzaXplPSI5MCIvPgogICAgICAgICAgICA8YnIvPjxlbT5PcHRpb25hbCBzdGF0dXMgZW5kcG9pbnQgcmV0dXJuZWQgdG8gRmFjZWJvb2sgYWZ0ZXIgY2FsbGJhY2sgcHJvY2Vzc2luZy48L2VtPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkRhdGEgZGVsZXRpb24gc2VjcmV0IChvcHRpb25hbCk8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9ZmFjZWJvb2tfZGF0YV9kZWxldGlvbl9zZWNyZXQiIHZhbHVlPSJ7JGZhY2Vib29rX2NvbmZpZy5kYXRhX2RlbGV0aW9uX3NlY3JldHxlc2NhcGV9IiBzaXplPSI3MCIvPgogICAgICAgICAgICA8YnIvPjxlbT5MZWF2ZSBlbXB0eSB0byB2YWxpZGF0ZSB3aXRoIEFwcCBTZWNyZXQgb25seS48L2VtPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkVuYWJsZSBPQXV0aCBsb2dpbiBmbG93PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9ZmFjZWJvb2tfb2F1dGhfZW5hYmxlZCIgdmFsdWU9IjEiIHtpZiAkZmFjZWJvb2tfY29uZmlnLm9hdXRoX2VuYWJsZWQgPT0gJzEnfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0vPiBFbmFibGUgRmFjZWJvb2sgT0F1dGggbG9naW4gdG8gZmV0Y2gvdXBkYXRlIGFjY2VzcyB0b2tlbnM8L2xhYmVsPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPk9BdXRoIHJlZGlyZWN0IFVSSTwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1mYWNlYm9va19vYXV0aF9yZWRpcmVjdF91cmkiIHZhbHVlPSJ7JGZhY2Vib29rX2NvbmZpZy5vYXV0aF9yZWRpcmVjdF91cml8ZXNjYXBlfSIgc2l6ZT0iOTAiLz4KICAgICAgICAgICAgPGJyLz48ZW0+QWRkIHRoaXMgZXhhY3QgVVJMIGluIE1ldGEgLT4gVmFsaWQgT0F1dGggUmVkaXJlY3QgVVJJcy48L2VtPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPk9BdXRoIHN0YXJ0IFVSTDwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8YSBocmVmPSJ7JGZhY2Vib29rX29hdXRoX3N0YXJ0X3VybHxlc2NhcGV9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj57JGZhY2Vib29rX29hdXRoX3N0YXJ0X3VybHxlc2NhcGV9PC9hPgogICAgICAgICAgICA8YnIvPjxlbT5Vc2UgdGhpcyBVUkwgdG8gc3RhcnQgdGhlIEZhY2Vib29rIE9BdXRoIGxvZ2luIGZsb3cuPC9lbT4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiI+VmFsdWVzIGFyZSBzdG9yZWQgc2VjdXJlbHkgaW4gQ01TTVMgZGF0YWJhc2Ugc2V0dGluZ3MgYnkgZGVmYXVsdC4gT3B0aW9uYWwgb3ZlcnJpZGVzIGluIHskY29uZmlnX3BhdGh9IGFyZSBzdGlsbCBzdXBwb3J0ZWQuPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPkFjdGl2ZSB2YWx1ZSBzb3VyY2U6IGFwcF9pZCA9IHskdmFsdWVfc291cmNlcy5mYWNlYm9va19hcHBfaWR8ZXNjYXBlfSwgdG9rZW5fbW9kZSA9IHskdmFsdWVfc291cmNlcy5mYWNlYm9va190b2tlbl9tb2RlfGVzY2FwZX0sIGFjY2Vzc190b2tlbiA9IHskdmFsdWVfc291cmNlcy5mYWNlYm9va19hY2Nlc3NfdG9rZW58ZXNjYXBlfSwgc3lzdGVtX3VzZXJfdG9rZW4gPSB7JHZhbHVlX3NvdXJjZXMuZmFjZWJvb2tfc3lzdGVtX3VzZXJfdG9rZW58ZXNjYXBlfSwgYXBpX3ZlcnNpb24gPSB7JHZhbHVlX3NvdXJjZXMuZmFjZWJvb2tfYXBpX3ZlcnNpb258ZXNjYXBlfTwvZGl2PgogICAgICA8L2ZpZWxkc2V0PgogICAgICA8ZmllbGRzZXQ+CiAgICAgICAgPGxlZ2VuZD5UZXN0PC9sZWdlbmQ+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+VGVzdCBGYWNlYm9vayBJbnRlZ3JhdGlvbjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdF90ZXN0X2ZhY2Vib29rIiB2YWx1ZT0iU2VuZCBUZXN0IFBvc3QiLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXRfZGlhZ19mYWNlYm9vayIgdmFsdWU9IlJ1biBEaWFnbm9zdGljcyIvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdF9kaXNjb3Zlcl9mYWNlYm9va19wYWdlcyIgdmFsdWU9IkRpc2NvdmVyIE1hbmFnZWQgUGFnZXMiLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXRfdmFsaWRhdGVfZmFjZWJvb2tfdGFyZ2V0IiB2YWx1ZT0iVmFsaWRhdGUgVG9rZW4gKyBQYWdlIElEIi8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0X21ldGFfcmV2aWV3X2ZhY2Vib29rX2NhbGxzIiB2YWx1ZT0iUnVuIE1ldGEgUmV2aWV3IEFQSSBUZXN0IENhbGxzIi8+CiAgICAgICAgICAgIHtpZiBpc3NldCgkdGVzdF9yZXN1bHRfZmFjZWJvb2spfQogICAgICAgICAgICAgIDxici8+CiAgICAgICAgICAgICAge2lmICR0ZXN0X3Jlc3VsdF9mYWNlYm9vay5zdWNjZXNzfQogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiBncmVlbjsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij7inJMgeyR0ZXN0X3Jlc3VsdF9mYWNlYm9vay5tZXNzYWdlfGVzY2FwZX08L3NwYW4+CiAgICAgICAgICAgICAge2Vsc2V9CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij7inJcgeyR0ZXN0X3Jlc3VsdF9mYWNlYm9vay5tZXNzYWdlfGVzY2FwZX08L3NwYW4+CiAgICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAge2lmIGlzc2V0KCRkaWFnX3Jlc3VsdF9mYWNlYm9vayl9CiAgICAgICAgICAgICAgPGJyLz48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzM7IGZvbnQtd2VpZ2h0OiBib2xkOyI+eyRkaWFnX3Jlc3VsdF9mYWNlYm9vay5tZXNzYWdlfGVzY2FwZX08L3NwYW4+CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIHtpZiBpc3NldCgkdmFsaWRhdGVfcmVzdWx0X2ZhY2Vib29rKX0KICAgICAgICAgICAgICA8YnIvPgogICAgICAgICAgICAgIHtpZiAkdmFsaWRhdGVfcmVzdWx0X2ZhY2Vib29rLnN1Y2Nlc3N9CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IGdyZWVuOyBmb250LXdlaWdodDogYm9sZDsiPuKckyB7JHZhbGlkYXRlX3Jlc3VsdF9mYWNlYm9vay5tZXNzYWdlfGVzY2FwZX08L3NwYW4+CiAgICAgICAgICAgICAge2Vsc2V9CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij7inJcgeyR2YWxpZGF0ZV9yZXN1bHRfZmFjZWJvb2subWVzc2FnZXxlc2NhcGV9PC9zcGFuPgogICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIHtpZiBpc3NldCgkZGlzY292ZXJfcmVzdWx0X2ZhY2Vib29rKX0KICAgICAgICAgICAgICA8YnIvPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzMzsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij57JGRpc2NvdmVyX3Jlc3VsdF9mYWNlYm9vay5tZXNzYWdlfGVzY2FwZX08L3NwYW4+CiAgICAgICAgICAgICAge2lmIGlzc2V0KCRkaXNjb3Zlcl9yZXN1bHRfZmFjZWJvb2sucGFnZXMpICYmICRkaXNjb3Zlcl9yZXN1bHRfZmFjZWJvb2sucGFnZXN8QGNvdW50IGd0IDB9CiAgICAgICAgICAgICAgICA8YnIvPjxzdHJvbmc+TWFuYWdlZCBwYWdlcyBkaXNjb3ZlcmVkOjwvc3Ryb25nPgogICAgICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjRweDsiPgogICAgICAgICAgICAgICAge2ZvcmVhY2ggZnJvbT0kZGlzY292ZXJfcmVzdWx0X2ZhY2Vib29rLnBhZ2VzIGl0ZW09cH0KICAgICAgICAgICAgICAgICAgPGxpPnskcC5uYW1lfGVzY2FwZX0gKHskcC5pZHxlc2NhcGV9KXtpZiBpc3NldCgkcC50YXNrcykgJiYgJHAudGFza3N8QGNvdW50IGd0IDB9IC0gdGFza19jb3VudDogeyRwLnRhc2tzfEBjb3VudH17L2lmfTwvbGk+CiAgICAgICAgICAgICAgICB7L2ZvcmVhY2h9CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIHtpZiBpc3NldCgkbWV0YV9yZXZpZXdfcmVzdWx0X2ZhY2Vib29rKX0KICAgICAgICAgICAgICA8YnIvPgogICAgICAgICAgICAgIHtpZiAkbWV0YV9yZXZpZXdfcmVzdWx0X2ZhY2Vib29rLnN1Y2Nlc3N9CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IGdyZWVuOyBmb250LXdlaWdodDogYm9sZDsiPuKckyB7JG1ldGFfcmV2aWV3X3Jlc3VsdF9mYWNlYm9vay5tZXNzYWdlfGVzY2FwZX08L3NwYW4+CiAgICAgICAgICAgICAge2Vsc2V9CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij7inJcgeyRtZXRhX3Jldmlld19yZXN1bHRfZmFjZWJvb2subWVzc2FnZXxlc2NhcGV9PC9zcGFuPgogICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgICAge2lmIGlzc2V0KCRtZXRhX3Jldmlld19yZXN1bHRfZmFjZWJvb2suY2FsbHMpICYmICRtZXRhX3Jldmlld19yZXN1bHRfZmFjZWJvb2suY2FsbHN8QGNvdW50IGd0IDB9CiAgICAgICAgICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6NHB4OyI+CiAgICAgICAgICAgICAgICB7Zm9yZWFjaCBmcm9tPSRtZXRhX3Jldmlld19yZXN1bHRfZmFjZWJvb2suY2FsbHMgaXRlbT1jfQogICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAge2lmICRjLm9rfeKck3tlbHNlfeKcl3svaWZ9CiAgICAgICAgICAgICAgICAgICAgeyRjLnBlcm1pc3Npb258ZXNjYXBlfSAoSFRUUCB7JGMuaHR0cF9zdGF0dXN8ZXNjYXBlfSkgLSB7JGMuZGV0YWlsfGVzY2FwZX0KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIHsvZm9yZWFjaH0KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgey9pZn0KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9maWVsZHNldD4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0X2ZhY2Vib29rIiB2YWx1ZT0iU2F2ZSBGYWNlYm9vayBTZXR0aW5ncyIvPgogICAgICAgIDwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im1hcy10YWIiIGlkPSJ0YWItdGlrdG9rIj4KICAgICAgPGZpZWxkc2V0PgogICAgICAgIDxsZWdlbmQ+VGlrVG9rPC9sZWdlbmQ+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+RW5hYmxlPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9ZW5hYmxlX3Rpa3RvayIgdmFsdWU9IjEiIHtpZiAkbmV0d29ya19zdGF0dXMudGlrdG9rLmVuYWJsZWR9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+IEVuYWJsZTwvbGFiZWw+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Q2FwdGlvbiB0ZW1wbGF0ZTwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8dGV4dGFyZWEgcm93cz0iNCIgY29scz0iODAiIG5hbWU9InskYWN0aW9uaWR9dHBsX3Rpa3RvayI+eyR0cGxfdGlrdG9rfTwvdGV4dGFyZWE+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZmllbGRzZXQ+CiAgICAgIDxmaWVsZHNldD4KICAgICAgICA8bGVnZW5kPkNvbmZpZ3VyYXRpb248L2xlZ2VuZD4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5DbGllbnQgS2V5PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXRpa3Rva19jbGllbnRfa2V5IiB2YWx1ZT0ieyR0aWt0b2tfY29uZmlnLmNsaWVudF9rZXl8ZXNjYXBlfSIgc2l6ZT0iNjAiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5DbGllbnQgU2VjcmV0PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXRpa3Rva19jbGllbnRfc2VjcmV0IiB2YWx1ZT0ieyR0aWt0b2tfY29uZmlnLmNsaWVudF9zZWNyZXR8ZXNjYXBlfSIgc2l6ZT0iNjAiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5BY2Nlc3MgVG9rZW48L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9dGlrdG9rX2FjY2Vzc190b2tlbiIgdmFsdWU9InskdGlrdG9rX2NvbmZpZy5hY2Nlc3NfdG9rZW58ZXNjYXBlfSIgc2l6ZT0iODAiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5CdXNpbmVzcyBBY2NvdW50IElEPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXRpa3Rva19idXNpbmVzc19hY2NvdW50X2lkIiB2YWx1ZT0ieyR0aWt0b2tfY29uZmlnLmJ1c2luZXNzX2FjY291bnRfaWR8ZXNjYXBlfSIgc2l6ZT0iNDAiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5VcGxvYWQgUmVnaW9uPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXRpa3Rva191cGxvYWRfcmVnaW9uIiB2YWx1ZT0ieyR0aWt0b2tfY29uZmlnLnVwbG9hZF9yZWdpb258ZXNjYXBlfSIgc2l6ZT0iMjAiLz4KICAgICAgICAgICAgPGJyLz48ZW0+T3B0aW9uYWw6IFByZWZlcnJlZCB1cGxvYWQgcmVnaW9uIChlLmcuLCBVUywgRVUpPC9lbT4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5WZXJpZmljYXRpb24gZmlsZSBuYW1lIChzaWduYXR1cmUtZmlsZSBtZXRob2QpPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXRpa3Rva192ZXJpZnlfZmlsZV9uYW1lIiB2YWx1ZT0ieyR0aWt0b2tfY29uZmlnLnZlcmlmeV9maWxlX25hbWV8ZXNjYXBlfSIgc2l6ZT0iNTAiIHBsYWNlaG9sZGVyPSJ0aWt0b2tYWFhYWC50eHQiLz4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5WZXJpZmljYXRpb24gZmlsZSBjb250ZW50PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPSIzIiBjb2xzPSI4MCIgbmFtZT0ieyRhY3Rpb25pZH10aWt0b2tfdmVyaWZ5X2ZpbGVfY29udGVudCI+eyR0aWt0b2tfY29uZmlnLnZlcmlmeV9maWxlX2NvbnRlbnR8ZXNjYXBlfTwvdGV4dGFyZWE+CiAgICAgICAgICAgIDxici8+PGVtPldoZW4gYm90aCBmaWVsZHMgYXJlIHNldCBhbmQgc2F2ZWQsIE1BU19Tb2NpYWxzIHdyaXRlcyB0aGUgZmlsZSB0byBzaXRlIHJvb3QgZm9yIFRpa1RvayBVUkwgcHJlZml4IHZlcmlmaWNhdGlvbi48L2VtPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIHtpZiAkdGlrdG9rX3ZlcmlmeV91cmx9CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Q3VycmVudCB2ZXJpZmljYXRpb24gVVJMPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+PGEgaHJlZj0ieyR0aWt0b2tfdmVyaWZ5X3VybHxlc2NhcGV9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj57JHRpa3Rva192ZXJpZnlfdXJsfGVzY2FwZX08L2E+PC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIHsvaWZ9CiAgICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPkROUyBtZXRob2Q6IGNyZWF0ZSBUWFQvQ05BTUUgaW4geW91ciBETlMgem9uZSBhcyByZXF1ZXN0ZWQgYnkgVGlrVG9rLiBTaWduYXR1cmUtZmlsZSBtZXRob2Q6IHByb3ZpZGUgZmlsZW5hbWUgKyBjb250ZW50IGFib3ZlIGFuZCBzYXZlLjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIj5WYWx1ZXMgYXJlIHN0b3JlZCBzZWN1cmVseSBpbiBDTVNNUyBkYXRhYmFzZSBzZXR0aW5ncyBieSBkZWZhdWx0LiBPcHRpb25hbCBvdmVycmlkZXMgaW4geyRjb25maWdfcGF0aH0gYXJlIHN0aWxsIHN1cHBvcnRlZC48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiI+QWN0aXZlIHZhbHVlIHNvdXJjZTogY2xpZW50X2tleSA9IHskdmFsdWVfc291cmNlcy50aWt0b2tfY2xpZW50X2tleXxlc2NhcGV9LCBhY2Nlc3NfdG9rZW4gPSB7JHZhbHVlX3NvdXJjZXMudGlrdG9rX2FjY2Vzc190b2tlbnxlc2NhcGV9PC9kaXY+CiAgICAgIDwvZmllbGRzZXQ+CiAgICAgIDxmaWVsZHNldD4KICAgICAgICA8bGVnZW5kPlRlc3Q8L2xlZ2VuZD4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5UZXN0IFRpa1RvayBJbnRlZ3JhdGlvbjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdF90ZXN0X3Rpa3RvayIgdmFsdWU9IlRlc3QgQ29uZmlndXJhdGlvbiIvPgogICAgICAgICAgICB7aWYgaXNzZXQoJHRlc3RfcmVzdWx0X3Rpa3Rvayl9CiAgICAgICAgICAgICAgPGJyLz4KICAgICAgICAgICAgICB7aWYgJHRlc3RfcmVzdWx0X3Rpa3Rvay5zdWNjZXNzfQogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiBncmVlbjsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij7inJMgeyR0ZXN0X3Jlc3VsdF90aWt0b2subWVzc2FnZXxlc2NhcGV9PC9zcGFuPgogICAgICAgICAgICAgIHtlbHNlfQogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7IGZvbnQtd2VpZ2h0OiBib2xkOyI+4pyXIHskdGVzdF9yZXN1bHRfdGlrdG9rLm1lc3NhZ2V8ZXNjYXBlfTwvc3Bhbj4KICAgICAgICAgICAgICB7L2lmfQogICAgICAgICAgICB7L2lmfQogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICA8L2ZpZWxkc2V0PgogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXRfdGlrdG9rIiB2YWx1ZT0iU2F2ZSBUaWtUb2sgU2V0dGluZ3MiLz4KICAgICAgICA8L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJtYXMtdGFiIiBpZD0idGFiLWhlbHAiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogICAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIiBzdHlsZT0iZGlzcGxheTogYmxvY2s7Ij57JG1vZC0+TGFuZygnaW5mb19tZXNzYWdlYm94X3NtYXJ0eScpfTwvZGl2PgogICAgICAgIDx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIj4KICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0aCB3aWR0aD0iMjUlIj57JG1vZC0+TGFuZygndmFyaWFibGUnKX08L3RoPgogICAgICAgICAgICAgIDx0aD57JG1vZC0+TGFuZygnZGVzY3JpcHRpb24nKX08L3RoPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgPC90aGVhZD4KICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgIDx0cj48dGQ+e2xkZWxpbX0kY29udGVudC0+dGl0bGV7cmRlbGltfTwvdGQ+PHRkPnskbW9kLT5MYW5nKCdzcmNkYXRhX3RpdGxlJyl9PC90ZD48L3RyPgogICAgICAgICAgPHRyPjx0ZD57bGRlbGltfSRjb250ZW50LT5zdW1tYXJ5e3JkZWxpbX08L3RkPjx0ZD57JG1vZC0+TGFuZygnc3JjZGF0YV9zdW1tYXJ5Jyl9PC90ZD48L3RyPgogICAgICAgICAgPHRyPjx0ZD57bGRlbGltfSRjb250ZW50LT5jYW5vbmljYWx7cmRlbGltfTwvdGQ+PHRkPnskbW9kLT5MYW5nKCdzcmNkYXRhX2Nhbm9uaWNhbCcpfTwvdGQ+PC90cj4KICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAge2lmICRicmlkZ2VzLmNnd2VicHVzaC5hdmFpbGFibGV9PGRpdiBjbGFzcz0ibWFzLXRhYiIgaWQ9InRhYi13ZWJwdXNoIj4KICAgICAgPGZpZWxkc2V0PgogICAgICAgIDxsZWdlbmQ+V2ViIFB1c2ggTm90aWZpY2F0aW9uIFNldHRpbmdzPC9sZWdlbmQ+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+VGl0bGU8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9d2VicHVzaF90aXRsZSIgdmFsdWU9InskYnJpZGdlcy5jZ3dlYnB1c2guZGF0YS50aXRsZXxlc2NhcGV9IiBzaXplPSI2MCIvPgogICAgICAgICAgICA8YnIvPjxlbT5UaXRsZSBmb3Igd2ViIHB1c2ggbm90aWZpY2F0aW9uczwvZW0+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+SWNvbjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH13ZWJwdXNoX2ljb24iIHZhbHVlPSJ7JGJyaWRnZXMuY2d3ZWJwdXNoLmRhdGEuaWNvbnxlc2NhcGV9IiBzaXplPSI4MCIvPgogICAgICAgICAgICA8YnIvPjxlbT5JY29uIFVSTCBmb3Igd2ViIHB1c2ggbm90aWZpY2F0aW9uczwvZW0+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZmllbGRzZXQ+CiAgICAgIDxmaWVsZHNldD4KICAgICAgICA8bGVnZW5kPlZBUElEIEtleXM8L2xlZ2VuZD4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5QdWJsaWMgS2V5IChyZWFkLW9ubHkpPC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyRicmlkZ2VzLmNnd2VicHVzaC5kYXRhLnB1YmxpY19rZXl8ZXNjYXBlfS4uLiIgc2l6ZT0iODAiIHJlYWRvbmx5PSJyZWFkb25seSIvPgogICAgICAgICAgICA8YnIvPjxlbT5WQVBJRCBwdWJsaWMga2V5IGZvciB3ZWIgcHVzaCBzdWJzY3JpcHRpb25zPC9lbT4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9d2VicHVzaF9yZWdlbiIgdmFsdWU9IlJlZ2VuZXJhdGUgVkFQSUQgS2V5cyIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oJ1RoaXMgd2lsbCByZWdlbmVyYXRlIHRoZSBWQVBJRCBrZXlzLiBFeGlzdGluZyBzdWJzY3JpcHRpb25zIG1heSBuZWVkIHRvIGJlIHJlLXN1YnNjcmliZWQuIENvbnRpbnVlPycpOyIvPgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIj5WQVBJRCBrZXlzIGFyZSB1c2VkIGZvciBzZWN1cmUgd2ViIHB1c2ggbm90aWZpY2F0aW9ucy4gUmVnZW5lcmF0ZSBvbmx5IGlmIG5lY2Vzc2FyeS48L2Rpdj4KICAgICAgPC9maWVsZHNldD4KICAgICAgPGZpZWxkc2V0PgogICAgICAgIDxsZWdlbmQ+VGVzdDwvbGVnZW5kPgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPlRlc3QgV2ViIFB1c2ggSW50ZWdyYXRpb248L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXRfdGVzdF93ZWJwdXNoIiB2YWx1ZT0iVGVzdCBXZWIgUHVzaCIvPgogICAgICAgICAgICB7aWYgaXNzZXQoJHRlc3RfcmVzdWx0X3dlYnB1c2gpfQogICAgICAgICAgICAgIDxici8+CiAgICAgICAgICAgICAge2lmICR0ZXN0X3Jlc3VsdF93ZWJwdXNoLnN1Y2Nlc3N9CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IGdyZWVuOyBmb250LXdlaWdodDogYm9sZDsiPuKckyB7JHRlc3RfcmVzdWx0X3dlYnB1c2gubWVzc2FnZXxlc2NhcGV9PC9zcGFuPgogICAgICAgICAgICAgIHtlbHNlfQogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7IGZvbnQtd2VpZ2h0OiBib2xkOyI+4pyXIHskdGVzdF9yZXN1bHRfd2VicHVzaC5tZXNzYWdlfGVzY2FwZX08L3NwYW4+CiAgICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgey9pZn0KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9maWVsZHNldD4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9d2VicHVzaF9zYXZlIiB2YWx1ZT0iU2F2ZSBXZWIgUHVzaCBTZXR0aW5ncyIvPgogICAgICAgIDwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj57L2lmfQogICAge2lmICRzaG93X2RvbmF0aW9uc308ZGl2IGNsYXNzPSJtYXMtdGFiIiBpZD0idGFiLWRvbmF0aW9ucyI+CiAgICAgIDxkaXYgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzoxMHB4OyI+CiAgICAgICAgPHN0cm9uZz57JHNwb25zb3JzfTwvc3Ryb25nPgogICAgICAgIDxici8+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+TmV3cyBUYXJnZXRlZDwvYT4KICAgICAgICA8YnIvPgogICAgICA8L2Rpdj4KICAgICAgPGJyLz4KICAgICAgeyRkb25hdGlvbnN0ZXh0fQogICAgICA8YnIvPjxici8+CiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcGF5cGFsbWUvS2ltQlM/bG9jYWxlLng9ZW5fVVMmYW1wO2NvdW50cnkueD1OTyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vZW5fVVMvaS9idG4vYnRuX2RvbmF0ZV9MRy5naWYiIGFsdD0iRG9uYXRlIHdpdGggUGF5UGFsIiB3aWR0aD0iMTIyIiBoZWlnaHQ9IjQ3IiBzdHlsZT0iYm9yZGVyOjA7bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OmF1dG87IiBsb2FkaW5nPSJsYXp5IiBkZWNvZGluZz0iYXN5bmMiIC8+CiAgICAgIDwvYT4KICAgICAgPGJyLz48YnIvPgogICAgICB7JGhpZGVkb25hdGlvbnNzdWJtaXR9CiAgICA8L2Rpdj57L2lmfQoKICB7JGZvcm1lbmR9CjwvZmllbGRzZXQ+]]></data>
	</file>
	<file>
	  <filename>/templates/donations.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogRG9uYXRpb25zIFRlbXBsYXRlIGZvciBNQVNfU29jaWFscyAqfQo8ZGl2IHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6MTBweDsiPgo8c3Ryb25nPnskc3BvbnNvcnN0ZXh0fTwvc3Ryb25nPgo8YnIvPgo8YSBocmVmPSJodHRwczovL25ld3N0YXJnZXRlZC5jb20iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5OZXdzIFRhcmdldGVkPC9hPgo8YnIvPgo8L2Rpdj4KPGJyLz4KeyRkb25hdGlvbnN0ZXh0fQo8YnIvPjxici8+CjxhIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcGF5cGFsbWUvS2ltQlM/bG9jYWxlLng9ZW5fVVMmYW1wO2NvdW50cnkueD1OTyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+CjxpbWcgc3JjPSJodHRwczovL3d3dy5wYXlwYWwuY29tL2VuX1VTL2kvYnRuL2J0bl9kb25hdGVfTEcuZ2lmIiBhbHQ9IkRvbmF0ZSB3aXRoIFBheVBhbCIgd2lkdGg9IjEyMiIgaGVpZ2h0PSI0NyIgc3R5bGU9ImJvcmRlcjowO21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvOyIgbG9hZGluZz0ibGF6eSIgZGVjb2Rpbmc9ImFzeW5jIiAvPgo8L2E+Cjxici8+PGJyLz4KCnskZm9ybXN0YXJ0fQp7JGhpZGVzdWJtaXR9CnskZm9ybWVuZH0KCg==]]></data>
	</file>
</module>
