<?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>Planyo</name>
	<version>1.9</version>
  <mincmsversion>1.10.2</mincmsversion>
	<help><![CDATA[ClBsYW55byBpcyBhIGNvbW1pc3Npb24tZnJlZSBmbGV4aWJsZSBvbmxpbmUgcmVzZXJ2YXRpb24gc3lzdGVtIGZvciBhbnkga2luZCBvZiByZXNvdXJjZXMgc3VjaCBhcyBob3RlbHMsIGhvbGlkYXkgYXBhcnRtZW50cywgeWFjaHQgcmVudGFscywgZHJpdmluZyBzY2hvb2xzLCB0ZW5uaXMgY291cnRzLCBkb2N0b3IgYXBwb2ludG1lbnRzLCBldmVudHMgZXRjLg0KPGJyIC8+PGJyIC8+DQpQbGFueW8gaXMgYXZhaWxhYmxlIGluIDIwIGxhbmd1YWdlcyBhbmQgaGVscHMgeW91IG1hbmFnZSB5b3VyIGNsaWVudHMnIGJvb2tpbmdzIGJ5IGhhbmRsaW5nIGFsbCBlbWFpbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGNsaWVudHMsIGFsbG93aW5nIHZhcmlvdXMgYm9va2luZyBjb25maXJtYXRpb24gbWVjaGFuaXNtcywgaGFuZGxpbmcgcGF5bWVudHMgKGFsc28gb25saW5lIGNyZWRpdCBjYXJkIHBheW1lbnRzKSwgcHJpbnRpbmcgaW52b2ljZXMgZXRjLg0KPGJyIC8+PGJyIC8+DQpUaGlzIG1vZHVsZSBlbWJlZHMgdGhlIHJlc2VydmF0aW9uIHN5c3RlbSAoYXZhaWxhYmlsaXR5IHNlYXJjaCBib3ggYW5kIHRoZSByZXNlcnZhdGlvbiBmb3JtKSBpbnRvIHlvdXIgc2l0ZSBzbyB0aGUgdmlzaXRvcnMgY2FuIGdvIHRocm91Z2ggdGhlIHdob2xlIHByb2Nlc3MgKHNlYXJjaCBhbmQgcmVzZXJ2YXRpb24pIHdpdGhvdXQgZXZlciBsZWF2aW5nIHlvdXIgd2Vic2l0ZS4gQmVmb3JlIHVzaW5nIHRoaXMgbW9kdWxlIHlvdSBzaG91bGQgY3JlYXRlIGFuIGFjY291bnQgYXQgcGxhbnlvLmNvbS4gCjxiciAvPgpQbGVhc2Ugc2VlIGh0dHA6Ly93d3cucGxhbnlvLmNvbS9jbXNtcy1yZXNlcnZhdGlvbi1zeXN0ZW0gZm9yIG1vcmUgaW5mby4gWW91IGNhbiBhbHNvIHNlZSBvdXIgaG9tZSBwYWdlIGF0IGh0dHA6Ly93d3cucGxhbnlvLmNvbSBmb3IgYWRtaW4gYmFja29mZmljZSBvciB2aXNpdG9yIGRlbW9uc3RyYXRpb24sIG9yIGZvciB0dXRvcmlhbCBtb3ZpZXMsIHByaWNpbmcgYW5kIG1vcmUgaW5mby4gCjxiciAvPgo8aDM+VXNhZ2U8L2gzPgpPbmNlIHlvdSBoYXZlIHRoZSBQbGFueW8gbW9kdWxlIGluc3RhbGxlZCwgZ28gdG8gdGhlIHBhZ2Ugd2hlcmUgeW91IHdhbnQgdG8gc2hvdyB0aGUgc2VhcmNoIGZvcm0gYW5kIGFkZCB0aGUgUGxhbnlvIG1vZHVsZSB0YWcuIApGb3IgZGVtbyBwdXJwb3NlcyB5b3UgbWF5IGFkZCB0aGUgdGFnIHdpdGhvdXQgYW55IHBhcmFtZXRlcnM6PGJyIC8+PGJyIC8+CntjbXNfbW9kdWxlIG1vZHVsZT0nUGxhbnlvJ308YnIgLz48YnIgLz4KT3RoZXJ3aXNlLCBhcyBhIG1pbmltdW0sIHRoZSB0YWcgcmVxdWlyZXMgeW91ciBzaXRlIElEIChpZiB5b3UgZG9uJ3QgaGF2ZSBvbmUsIGNyZWF0ZSBhIG5ldyBzaXRlIGF0IHd3dy5wbGFueW8uY29tKTxiciAvPjxiciAvPgp7Y21zX21vZHVsZSBtb2R1bGU9J1BsYW55bycgc2l0ZT0nMTEnfTxiciAvPjxiciAvPgpTZWUgdGhlIHRhYmxlIGJlbG93IGZvciB0aGUgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycyB0aGF0IHlvdSBjYW4gYWRkaXRpb25hbGx5IHVzZSBpbiB0aGUgdGFnLjxiciAvPgoKPGgzPk9wdGlvbmFsIFBhcmFtZXRlcnM8L2gzPgo8dGFibGUgd2lkdGg9JzEwMCUnIGJvcmRlcj0nMScgY2VsbHBhZGRpbmc9JzMnPgo8dGJvZHk+Cjx0cj48dGg+UGFyYW1ldGVyPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjx0aD5EZWZhdWx0PC90aD48L3RyPgo8dHI+PHRkPnNpdGU8L3RkPjx0ZD5wbGFueW8gc2l0ZSBJRDwvdGQ+PHRkPjxiPmRlbW88L2I+ICg9IGRlbW8gc2l0ZSk8L3RkPjwvdHI+Cjx0cj48dGQ+bGFuZ3VhZ2U8L3RkPjx0ZD5sYW5ndWFnZSBvZiB0aGUgdXNlciBpbnRlcmZhY2U7IGN1cnJlbnRseSBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOiBFTiwgRlIsIERFLCBJVCwgRVMsIFBMLCBESywgRkksIFNFLCBJUywgUk8sIE5PLCBSVSwgTkwsIEVMLCBQVCwgQ1MsIENBLCBFVCwgSkE8L3RkPjx0ZD48Yj5FTjwvYj4gKD0gRW5nbGlzaCk8L3RkPjwvdHI+Cjx0cj48dGQ+ZXh0cmFfc2VhcmNoX2ZpZWxkczwvdGQ+PHRkPmNvbW1hLXNlcGFyYXRlZCBleHRyYSBmaWVsZHMgaW4gdGhlIHNlYXJjaCBib3g8L3RkPjx0ZD5ub25lPC90ZD48L3RyPgo8dHI+PHRkPnNvcnRfZmllbGRzPC90ZD48dGQ+Y29tbWEtc2VwYXJhdGVkIHNvcnQgZmllbGRzOyBhIHNpbmdsZSBmaWVsZCB3aWxsIGhpZGUgdGhlIHNvcnQgZHJvcGRvd24gYm94PC90ZD48dGQ+bm9uZTwvdGQ+PC90cj4KPHRyPjx0ZD5kZWZhdWx0X21vZGU8L3RkPjx0ZD5DaG9vc2UgdGhlIGluaXRpYWwgbW9kZTogJ3NlYXJjaCcgdG8gYWxsb3cgY2xpZW50cyB0byBzZWFyY2ggZm9yIGF2YWlsYWJsZSBkYXRlcyBvciAncmVzb3VyY2VfbGlzdCcgdG8gZGlzcGxheSBhIGxpc3Qgb2YgYWxsIHJlc291cmNlcyAoaW4gc3VjaCBjYXNlIHNlYXJjaCBtdXN0IGJlIGluaXRpYXRlZCBieSBlbWJlZGRpbmcgYW4gZXh0cmEgc2VhcmNoIGJveCAtLSBzZWUgbGFzdCBzdGVwIG9mIGludGVncmF0aW9uIGluIFBsYW55bydzIGFkbWluIHBhbmVsKS4gQ2hvb3NpbmcgJ2VtcHR5JyB3aWxsIG5vdCBkaXNwbGF5IGFueXRoaW5nIGJ5IGRlZmF1bHQgYnV0IHdpbGwgcmVxdWlyZSB5b3UgdG8gZWl0aGVyIHBhc3MgdGhlIHJlc291cmNlIElEIHRvIHRoZSBtb2R1bGUgYXMgcGFyYW1ldGVyIGluIHRoZSBVUkwgKHJlc291cmNlX2lkKSBvciBhZGQgYW4gZXh0ZXJuYWwgc2VhcmNoIGJveCBvciBjYWxlbmRhciBwcmV2aWV3PC90ZD48dGQ+PGI+cmVzb3VyY2VzPC9iPjwvdGQ+PC90cj4KPHRyPjx0ZD5qc19mcmFtZXdvcms8L3RkPjx0ZD5PbmUgb2Y6ICdqcXVlcnknLCAnanF1ZXJ5LW5vaW5jbHVkZScsICdtb290b29scycsICdtb290b29scy1ub2luY2x1ZGUnOyBDaG9vc2UgdGhlIEphdmFzY3JpcHQgZnJhbWV3b3JrIHdoaWNoIHdpbGwgYmUgdXNlZCBieSBQbGFueW8uIFBsYW55byB3b3JrcyB3aXRoIGJvdGggbW9vdG9vbHMgYW5kIGpRdWVyeS4gTGVhdmUgdGhlIGRlZmF1bHQgaWYgeW91J3JlIG5vdCBzdXJlIHdoaWNoIG9uZSB0byBjaG9vc2UuIENoYW5nZSB0byAnbW9vdG9vbHMnIGlmIHlvdSBhbHJlYWR5IHVzZSBtb290b29scyBvbiB5b3VyIHdlYnNpdGUgYW5kIGRvbid0IHdhbnQgdG8gaW5jbHVkZSBtdWx0aXBsZSBKUyBmcmFtZXdvcmtzLiBJZiBvdGhlciBwYXJ0cyBvZiB5b3VyIHdlYnNpdGUgYWxyZWFkeSB1c2UgdGhlIGxpYnJhcnkgY2hvc2VuLCBjaG9vc2UgdGhlICd4eHgtbm9pbmNsdWRlJyB2ZXJzaW9uIHRvIGF2b2lkIGluY2x1ZGluZyB0aGUgbGlicmFyeSB0d2ljZTwvdGQ+PHRkPjxiPmpxdWVyeTwvYj48L3RkPjwvdHI+Cjx0cj48dGQ+YXR0cmlidXRlX3N0cmluZzwvdGQ+PHRkPk9wdGlvbmFsIGF0dHJpYnV0ZSBzdHJpbmcgZm9yIHNwZWNpYWwgbW9kZXM8L3RkPjx0ZD5ub25lPC90ZD48L3RyPgo8L3Rib2R5PjwvdGFibGU+CjxiciAvPjxiciAvPgo8aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBYdHJlZW1lIEdtYkggJmx0O3d3dy5wbGFueW8uY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuOTxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPgo8dWw+CjxsaT4xLjAgLSBNYXksIDIwMTEKPHA+VGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZSBvZiB0aGUgbW9kdWxlLjwvcD4KPC9saT4KPGxpPjEuOSAtIERlYywgMjAxMQo8cD5BZGRlZCBvcHRpb25hbCBhdHRyaWJ1dGUgc3RyaW5nIHBhcmFtZXRlciBhbmQgYSBuZXcgbW9kZSwgdXBjb21pbmcgYXZhaWxhYmlsaXR5LCB3aGljaCBsZXRzIHRoZSBjdXN0b21lcnMgc2VlIGFsbCBhdmFpbGFibGUgcmVzb3VyY2VzIGluIHRoZSBjb21pbmcgZGF5cy48L3A+CjwvbGk+CjwvdWw+CjxiciAvPg==]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/button-bg.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAMAAADEfo0+AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAwUExUReZ2F70FAcIUBNE8C80xCcknCMYdBtVHDb8MAuNsFdxbErsAAOBkE8ALA9lRENlRD8WzhMEAAABNSURBVHjalNA5DoBADATB5l7O/f9vYYVE0BNRgeXAkj2G/1bhEDah1uvxltazCIMwCpMwC71QmrN86IRdcqJIbok74tLIEmn9j1uAAQB/lggMJUI3HgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/embed-code-preview.htm</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSAKdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGNhbiBiZSBtb2RpZmllZCBpbiB0aGUgaWZyYW1lIHRhZwotIGhlaWdodCBhbmQgd2lkdGgKCmFuZCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgaW4gdGhlIFVSTCAoc3JjIHByb3BlcnR5KSBjYW4gYmUgYWRkZWQgb3IgbW9kaWZpZWQ6Ci0gY2FsZW5kYXIKLSBmZWVkYmFja191cmwKLSByZXNvdXJjZV9pZCAob3B0aW9uYWwpIC0tIGxpbWl0cyB0aGUgcHJldmlldyB0byBhIHNpbmdsZSByZXNvdXJjZQotLT4KCjxpZnJhbWUgd2lkdGg9Jzk0MCcgaGVpZ2h0PScyNDUnIHNjcm9sbGluZz0nbm8nIGZyYW1lYm9yZGVyPScwJyBzcmM9J2h0dHA6Ly93d3cucGxhbnlvLmNvbS9lbWJlZC1jYWxlbmRhci5waHA/Y2FsZW5kYXI9W0lEIG9mIHlvdXIgcGxhbnlvIHNpdGVdJmZlZWRiYWNrX3VybD1bdXJsIG9mIHRoZSByZXNlcnZhdGlvbiBmb3JtIG9uIHlvdXIgc2VydmVyXSc+PC9pZnJhbWU+Cg==]]></data>
	</file>
	<file>
	  <filename>/embed-code-reserve.htm</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLyBjaGFuZ2UgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBzZXR0aW5ncwp2YXIgdWxhcF9zY3JpcHQ9InVsYXAucGhwIjsgLy8gZmlsZSBuYW1lIHRvIG9uZSBvZiB0aGUgVUxBUCBzY3JpcHRzLCBlLmcuIHVsYXAucGhwCnZhciBwbGFueW9fc2l0ZV9pZD0nW3NpdGUgSURdJzsgLy8gSUQgb2YgeW91ciBwbGFueW8gc2l0ZQp2YXIgcGxhbnlvX2ZpbGVzX2xvY2F0aW9uPScnOyAvLyByZWxhdGl2ZSBvciBhYnNvbHV0ZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHBsYW55byBmaWxlcyBhcmUga2VwdCAodXN1YWxseSAnL3BsYW55by1maWxlcycpCnZhciBleHRyYV9zZWFyY2hfZmllbGRzPScnOyAvLyBjb21tYS1zZXBhcmF0ZWQgZXh0cmEgZmllbGRzIGluIHRoZSBzZWFyY2ggYm94CnZhciBwbGFueW9fbGFuZ3VhZ2U9J0VOJzsgLy8geW91IGNhbiBvcHRpb25hbGx5IGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaGVyZSwgZS5nLiAnRlInIG9yICdFUycgb3IgcGFzcyB0aGUgbGFuZ3VnZSBpbiB0aGUgJ2xhbmcnIHBhcmFtZXRlcgp2YXIgc29ydF9maWVsZHM9J25hbWUscHJpY2UnOyAvLyBjb21tYS1zZXBhcmF0ZWQgc29ydCBmaWVsZHMgLS0gYSBzaW5nbGUgZmllbGQgd2lsbCBoaWRlIHRoZSBzb3J0IGRyb3Bkb3duIGJveAp2YXIgcHJlc2VudGF0aW9uX21vZGU9ZmFsc2U7IC8vIGZhbHNlOiBzaG93IHRoZSBzZWFyY2ggYm94IGJ5IGRlZmF1bHQsIHRydWU6IHNob3cgcmVzb3VyY2UgbGlzdCBieSBkZWZhdWx0CnZhciBwbGFueW9fcmVzb3VyY2VfaWQ9Jyc7IC8vIG9wdGlvbmFsOiBJRCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgcmVzZXJ2ZWQKdmFyIGVtcHR5X21vZGU9ZmFsc2U7IC8vIHNob3VsZCBiZSBhbHdheXMgc2V0IHRvIGZhbHNlCjwvc2NyaXB0PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiBnZXRfcGFyYW0gKG5hbWUpIHtuYW1lID0gbmFtZS5yZXBsYWNlKC9bXFtdLywiXFxcWyIpLnJlcGxhY2UoL1tcXV0vLCJcXFxdIik7dmFyIHJlZ2V4UyA9ICJbXFw/Jl0iK25hbWUrIj0oW14mI10qKSI7dmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCAocmVnZXhTKTt2YXIgcmVzdWx0cyA9IHJlZ2V4LmV4ZWMgKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtpZiAocmVzdWx0cyA9PSBudWxsKSByZXR1cm4gbnVsbDtlbHNlICByZXR1cm4gcmVzdWx0c1sxXTt9CmlmIChnZXRfcGFyYW0oJ21vZGUnKSlwbGFueW9fZW1iZWRfbW9kZSA9IGdldF9wYXJhbSgnbW9kZScpOwpmdW5jdGlvbiBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKG5hbWUpIHtpZihwbGFueW9fZmlsZXNfbG9jYXRpb24ubGVuZ3RoPT0wfHxwbGFueW9fZmlsZXNfbG9jYXRpb24ubGFzdEluZGV4T2YoJy8nKT09cGxhbnlvX2ZpbGVzX2xvY2F0aW9uLmxlbmd0aC0xKXJldHVybiBwbGFueW9fZmlsZXNfbG9jYXRpb24rbmFtZTsgZWxzZSByZXR1cm4gcGxhbnlvX2ZpbGVzX2xvY2F0aW9uKycvJytuYW1lO30KZG9jdW1lbnQud3JpdGUoIjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJwbGFueW8tc3R5bGVzLmNzcyIpKyInIHR5cGU9J3RleHQvY3NzJyAvPiIpOwpkb2N1bWVudC53cml0ZSgiPGRpdiBpZD0ncGxhbnlvX2NvbnRlbnQnPjxpbWcgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoImhvdXJnbGFzcy5naWYiKSsiJyBhbGlnbj0nbWlkZGxlJyAvPjwvZGl2PiIpOwpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJtb290b29scy0xLjItY29yZS5qcyIpKyInPjwvc2MiKyJyaXB0PiIpOwpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJtb290b29scy0xLjItbW9yZS5qcyIpKyInPjwvc2MiKyJyaXB0PiIpOwpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgidXRpbHMuanMiKSsiJyB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPjwvc2MiKyJyaXB0PiIpOwpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgicGxhbnlvLXJlc2VydmF0aW9ucy5qcyIpKyInIHR5cGU9J3RleHQvamF2YXNjcmlwdCc+PC9zYyIrInJpcHQ+Iik7Cjwvc2NyaXB0Pgo8bm9zY3JpcHQ+CjxhIGhyZWY9J2h0dHA6Ly93d3cucGxhbnlvLmNvbS9hYm91dC1jYWxlbmRhci5waHA/Y2FsZW5kYXI9W3NpdGUgSURdJz5NYWtlIGEgcmVzZXJ2YXRpb248L2E+PGJyLz48YnIvPjxhIGhyZWY9J2h0dHA6Ly93d3cucGxhbnlvLmNvbS8nPlJlc2VydmF0aW9uCiAgc3lzdGVtIHBvd2VyZWQgYnkgUGxhbnlvPC9hPgo8L25vc2NyaXB0Pgo=]]></data>
	</file>
	<file>
	  <filename>/embed-code-reserve.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGNoYW5nZSB0aGUgZm9sbG93aW5nIHZhbHVlcyB0byBtYXRjaCB5b3VyIHNldHRpbmdzCiRzaXRlX2lkID0gJ2RlbW8nOyAgLy8gSUQgb2YgeW91ciBwbGFueW8gc2l0ZS4gSXQgY2FuIGJlIGEgbnVtYmVyIG9yIHRoZSBkZWZhdWx0IHZhbHVlICgnZGVtbycpIHRvIHNlZSBkZW1vbnN0cmF0aW9uIG9mIHRoZSBwbHVnaW4KJHBsYW55b19maWxlc19sb2NhdGlvbiA9ICcvcGxhbnlvLWZpbGVzJzsgIC8vIHJlbGF0aXZlIG9yIGFic29sdXRlIGRpcmVjdG9yeSB3aGVyZSB0aGUgcGxhbnlvIGZpbGVzIGFyZSBrZXB0ICh1c3VhbGx5ICcvcGxhbnlvLWZpbGVzJykKJHBsYW55b19sYW5ndWFnZSA9ICdFTic7ICAvLyB5b3UgY2FuIG9wdGlvbmFsbHkgY2hhbmdlIHRoZSBsYW5ndWFnZSBoZXJlLCBlLmcuICdGUicgb3IgJ0VTJyBvciBwYXNzIHRoZSBsYW5ndWdlIGluIHRoZSAnbGFuZycgcGFyYW1ldGVyCiRhbHdheXNfdXNlX2FqYXggPSBmYWxzZTsgIC8vIHNldCB0byB0cnVlIHRvIHVzZSBBSkFYIHRvIGRpc3BsYXkgcmVzb3VyY2UgbGlzdCBhbmQgcmVzb3VyY2UgZGV0YWlscyB2aWV3cwokc29ydF9maWVsZHMgPSAnbmFtZSxwcmljZSc7ICAvLyBjb21tYS1zZXBhcmF0ZWQgc29ydCBmaWVsZHMgLS0gYSBzaW5nbGUgZmllbGQgd2lsbCBoaWRlIHRoZSBzb3J0IGRyb3Bkb3duIGJveAokZXh0cmFfc2VhcmNoX2ZpZWxkcyA9ICcnOyAgLy8gY29tbWEtc2VwYXJhdGVkIGV4dHJhIGZpZWxkcyBpbiB0aGUgc2VhcmNoIGJveAokZGVmYXVsdF9tb2RlID0gJ3Jlc291cmNlX2xpc3QnOyAgLy8gaW5pdGlhbCAoZGVmdWFsdCkgcGx1Z2luIG1vZGU7IG9uZSBvZjogJ3Jlc291cmNlX2xpc3QnLCAnc2VhcmNoJywgJ2VtcHR5JywgJ3VwY29taW5nX2F2YWlsYWJpbGl0eScKJGRvbnRfaW5jbHVkZV9tb290b29scyA9IGZhbHNlOyAgLy8gc2V0IHRvIHRydWUgb25seSBpZiBtb290b29scyBpcyBhbHJlYWR5IGluY2x1ZGVkCgppbmNsdWRlX29uY2UoJ3BsYW55by1wbHVnaW4taW1wbC5waHAnKTsKCnBsYW55b19zZXR1cCgpOwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/embed-code-search-php.htm</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKZ2xvYmFsICRwbGFueW9fc2l0ZV9pZCwgJHBsYW55b19maWxlc19sb2NhdGlvbiwgJHBsYW55b19sYW5ndWFnZSwKICAgJHBsYW55b19hbHdheXNfdXNlX2FqYXgsICRwbGFueW9fc29ydF9maWVsZHMsICRwbGFueW9fcmVzb3VyY2VfaWQsCiAgICRwbGFueW9fanNfbGlicmFyeV91c2VkLCAkcGxhbnlvX2luY2x1ZGVfanNfbGlicmFyeSwgJHBsYW55b19kZWZhdWx0X21vZGUsICRwbGFueW9fZXh0cmFfc2VhcmNoX2ZpZWxkczsKCiRwbGFueW9fc2l0ZV9pZCA9ICdbc2l0ZSBJRF0nOyAgLy8gSUQgb2YgeW91ciBwbGFueW8gc2l0ZS4gSXQgY2FuIGJlIGEgbnVtYmVyIG9yICdkZW1vJyB0byBzZWUgZGVtb25zdHJhdGlvbiBvZiB0aGUgcGx1Z2luCiRwbGFueW9fZmlsZXNfbG9jYXRpb25fcmVhbCA9ICdwbGFueW8tZmlsZXMnOyAvLyByZWxhdGl2ZSBvciBhYnNvbHV0ZSBkaXJlY3RvcnkgKHRoaXMgaXMgcmVhbCBwYXRoLCBub3QgSFRUUCBwYXRoKSB3aGVyZSB0aGUgcGxhbnlvIGZpbGVzIGFyZSBrZXB0CiRwbGFueW9fZmlsZXNfbG9jYXRpb24gPSAnL3BsYW55by1maWxlcyc7ICAvLyByZWxhdGl2ZSBvciBhYnNvbHV0ZSBkaXJlY3RvcnkgKEhUVFAgcGF0aCkgd2hlcmUgdGhlIHBsYW55byBmaWxlcyBhcmUga2VwdCAodXN1YWxseSAnL3BsYW55by1maWxlcycpCiRwbGFueW9fbGFuZ3VhZ2UgPSAnRU4nOyAgLy8geW91IGNhbiBvcHRpb25hbGx5IGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaGVyZSwgZS5nLiAnRlInIG9yICdFUycgb3IgcGFzcyB0aGUgbGFuZ3VnZSBpbiB0aGUgJ2xhbmcnIHBhcmFtZXRlcgokcGxhbnlvX2Fsd2F5c191c2VfYWpheCA9IGZhbHNlOyAgLy8gc2V0IHRvIHRydWUgdG8gdXNlIEFKQVggdG8gZGlzcGxheSByZXNvdXJjZSBsaXN0IGFuZCByZXNvdXJjZSBkZXRhaWxzIHZpZXdzOyBkZWZhdWx0IHZhbHVlIChmYWxzZSkgbWFrZXMgdGhlIG91dHB1dCBjb250ZW50IFNFTy1mcmllbmRseQokcGxhbnlvX3NvcnRfZmllbGRzID0gJ25hbWUscHJpY2UnOyAgLy8gY29tbWEtc2VwYXJhdGVkIHNvcnQgZmllbGRzIC0tIGEgc2luZ2xlIGZpZWxkIHdpbGwgaGlkZSB0aGUgc29ydCBkcm9wZG93biBib3gKJHBsYW55b19leHRyYV9zZWFyY2hfZmllbGRzID0gJyc7ICAvLyBjb21tYS1zZXBhcmF0ZWQgZXh0cmEgZmllbGRzIGluIHRoZSBzZWFyY2ggYm94CiRwbGFueW9fZGVmYXVsdF9tb2RlID0gJ3Jlc291cmNlcyc7IC8vIG9uZSBvZjogJ3Jlc291cmNlcycgKGRpc3BsYXlzIGxpc3Qgb2YgcmVzb3VyY2VzIHdpdGggcGhvdG9zLCBkZXNjcmlwdGlvbnMgZXRjLiksICdzZWFyY2gnIChkaXNwbGF5cyB0aGUgc2VhcmNoIGJveCksICdlbXB0eScgKHdpbGwgbm90IGRpc3BsYXkgYW55dGhpbmcgYnkgZGVmYXVsdCBidXQgd2lsbCByZXF1aXJlIHlvdSB0byBlaXRoZXIgcGFzcyB0aGUgcmVzb3VyY2UgSUQgYXMgcGFyYW1ldGVyIGluIHRoZSBVUkwgKHJlc291cmNlX2lkKSBvciBhZGQgYW4gZXh0ZXJuYWwgc2VhcmNoIGJveCBvciBjYWxlbmRhciBwcmV2aWV3KQokcGxhbnlvX3Jlc291cmNlX2lkID0gbnVsbDsgIC8vIG9wdGlvbmFsOiBJRCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgcmVzZXJ2ZWQgKHNldCBvbmx5IGlmIGFsd2F5cyB0aGUgc2FtZSkKJHBsYW55b19qc19saWJyYXJ5X3VzZWQ9J2pxdWVyeSc7IC8vIHNldCB0aGlzIHRvICdtb290b29scycgaWYgeW91IHdhbnQgdG8gdXNlIG1vb3Rvb2xzIGluc3RlYWQgb2YgalF1ZXJ5CiRwbGFueW9faW5jbHVkZV9qc19saWJyYXJ5PXRydWU7IC8vIHNldCB0aGlzIHRvIGZhbHNlIGlmIHlvdXIgd2Vic2l0ZSBhbHJlYWR5IGluY2x1ZGVzIHRoZSBKYXZhc2NyaXB0IGxpYnJhcnkgY2hvc2VuIGluIHRoZSBsaXZlIGFib3ZlIChqUXVlcnkgb3IgbW9vdG9vbHMpCgpyZXF1aXJlX29uY2UoJHBsYW55b19maWxlc19sb2NhdGlvbl9yZWFsLicvcGxhbnlvLXBsdWdpbi1pbXBsLnBocCcpOwplY2hvICI8ZGl2IGlkPSdwbGFueW9fcGx1Z2luX2NvZGUnPiI7CnBsYW55b19zZXR1cCgpOwplY2hvICI8L2Rpdj4iOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/embed-code-search.htm</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLyBjaGFuZ2UgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBzZXR0aW5ncwp2YXIgdWxhcF9zY3JpcHQ9InVsYXAucGhwIjsgLy8gZmlsZSBuYW1lIHRvIG9uZSBvZiB0aGUgVUxBUCBzY3JpcHRzLCBlLmcuIHVsYXAucGhwCnZhciBwbGFueW9fc2l0ZV9pZD0nW3NpdGUgSURdJzsgLy8gSUQgb2YgeW91ciBwbGFueW8gc2l0ZQp2YXIgcGxhbnlvX2ZpbGVzX2xvY2F0aW9uPScvcGxhbnlvLWZpbGVzJzsgLy8gcmVsYXRpdmUgb3IgYWJzb2x1dGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBwbGFueW8gZmlsZXMgYXJlIGtlcHQgKHVzdWFsbHkgJy9wbGFueW8tZmlsZXMnKQp2YXIgZXh0cmFfc2VhcmNoX2ZpZWxkcz0nJzsgLy8gY29tbWEtc2VwYXJhdGVkIGV4dHJhIGZpZWxkcyBpbiB0aGUgc2VhcmNoIGJveAp2YXIgcGxhbnlvX2xhbmd1YWdlPSdFTic7IC8vIHlvdSBjYW4gb3B0aW9uYWxseSBjaGFuZ2UgdGhlIGxhbmd1YWdlIGhlcmUsIGUuZy4gJ0ZSJyBvciAnRVMnIG9yIHBhc3MgdGhlIGxhbmd1Z2UgaW4gdGhlICdsYW5nJyBwYXJhbWV0ZXIKdmFyIHNvcnRfZmllbGRzPSduYW1lLHByaWNlJzsgLy8gY29tbWEtc2VwYXJhdGVkIHNvcnQgZmllbGRzIC0tIGEgc2luZ2xlIGZpZWxkIHdpbGwgaGlkZSB0aGUgc29ydCBkcm9wZG93biBib3gKdmFyIHByZXNlbnRhdGlvbl9tb2RlPWZhbHNlOyAvLyBmYWxzZTogc2hvdyB0aGUgc2VhcmNoIGJveCBieSBkZWZhdWx0LHRydWU6IHNob3cgcmVzb3VyY2UgbGlzdCBieSBkZWZhdWx0CnZhciBlbXB0eV9tb2RlPWZhbHNlOyAvLyBzaG91bGQgYmUgYWx3YXlzIHNldCB0byBmYWxzZQp2YXIgcGxhbnlvX2pzX2xpYnJhcnlfdXNlZD0nanF1ZXJ5JzsgLy8gc2V0IHRoaXMgdG8gJ21vb3Rvb2xzJyBpZiB5b3Ugd2FudCB0byB1c2UgbW9vdG9vbHMgaW5zdGVhZCBvZiBqUXVlcnkKdmFyIHBsYW55b19pbmNsdWRlX2pzX2xpYnJhcnk9dHJ1ZTsgLy8gc2V0IHRoaXMgdG8gZmFsc2UgaWYgeW91ciB3ZWJzaXRlIGFscmVhZHkgaW5jbHVkZXMgdGhlIEphdmFzY3JpcHQgbGlicmFyeSBjaG9zZW4gaW4gdGhlIGxpdmUgYWJvdmUgKGpRdWVyeSBvciBtb290b29scykKdmFyIHBsYW55b191c2VfaHR0cHM9KCJodHRwczoiID09IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sKTsgLy8gc2V0IHRoaXMgdG8gdHJ1ZSBpZiBlbWJlZGRpbmcgcGxhbnlvIG9uIGEgc2VjdXJlIHdlYnNpdGUgKFNTTCkKPC9zY3JpcHQ+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmZ1bmN0aW9uIGdldF9wYXJhbSAobmFtZSkge25hbWUgPSBuYW1lLnJlcGxhY2UoL1tcW10vLCJcXFxbIikucmVwbGFjZSgvW1xdXS8sIlxcXF0iKTt2YXIgcmVnZXhTID0gIltcXD8mXSIrbmFtZSsiPShbXiYjXSopIjt2YXIgcmVnZXggPSBuZXcgUmVnRXhwIChyZWdleFMpO3ZhciByZXN1bHRzID0gcmVnZXguZXhlYyAod2luZG93LmxvY2F0aW9uLmhyZWYpO2lmIChyZXN1bHRzID09IG51bGwpIHJldHVybiBudWxsO2Vsc2UgIHJldHVybiByZXN1bHRzWzFdO30KaWYgKGdldF9wYXJhbSgnbW9kZScpKXBsYW55b19lbWJlZF9tb2RlID0gZ2V0X3BhcmFtKCdtb2RlJyk7CmZ1bmN0aW9uIGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgobmFtZSkge2lmKHBsYW55b19maWxlc19sb2NhdGlvbi5sZW5ndGg9PTB8fHBsYW55b19maWxlc19sb2NhdGlvbi5sYXN0SW5kZXhPZignLycpPT1wbGFueW9fZmlsZXNfbG9jYXRpb24ubGVuZ3RoLTEpcmV0dXJuIHBsYW55b19maWxlc19sb2NhdGlvbituYW1lOyBlbHNlIHJldHVybiBwbGFueW9fZmlsZXNfbG9jYXRpb24rJy8nK25hbWU7fQpkb2N1bWVudC53cml0ZSgiPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoInBsYW55by1zdHlsZXMuY3NzIikrIicgdHlwZT0ndGV4dC9jc3MnIC8+Iik7CmRvY3VtZW50LndyaXRlKCI8ZGl2IGlkPSdwbGFueW9fY29udGVudCc+PGltZyBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgiaG91cmdsYXNzLmdpZiIpKyInIGFsaWduPSdtaWRkbGUnIC8+PC9kaXY+Iik7CmlmIChwbGFueW9fanNfbGlicmFyeV91c2VkPT0nanF1ZXJ5JyB8fCBwbGFueW9fanNfbGlicmFyeV91c2VkPT0nalF1ZXJ5JykgewogIGlmIChwbGFueW9faW5jbHVkZV9qc19saWJyYXJ5KSBkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJqcXVlcnkuanMiKSsiJz48L3NjIisicmlwdD4iKTsKICBkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgicGxhbnlvLWpxdWVyeS11dGlscy5qcyIpKyInIHR5cGU9J3RleHQvamF2YXNjcmlwdCc+PC9zYyIrInJpcHQ+Iik7CiAgZG9jdW1lbnQud3JpdGUoIjxzYyIrInJpcHQgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoInBsYW55by1qcXVlcnktcmVzZXJ2YXRpb25zLmpzIikrIicgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz48L3NjIisicmlwdD4iKTsKfQplbHNlIHsKICBpZiAocGxhbnlvX2luY2x1ZGVfanNfbGlicmFyeSkgewogICAgZG9jdW1lbnQud3JpdGUoIjxzYyIrInJpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgibW9vdG9vbHMtMS4yLWNvcmUuanMiKSsiJz48L3NjIisicmlwdD4iKTsKICAgIGRvY3VtZW50LndyaXRlKCI8c2MiKyJyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoIm1vb3Rvb2xzLTEuMi1tb3JlLmpzIikrIic+PC9zYyIrInJpcHQ+Iik7CiAgfQogIGRvY3VtZW50LndyaXRlKCI8c2MiKyJyaXB0IHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJ1dGlscy5qcyIpKyInIHR5cGU9J3RleHQvamF2YXNjcmlwdCc+PC9zYyIrInJpcHQ+Iik7CiAgZG9jdW1lbnQud3JpdGUoIjxzYyIrInJpcHQgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoInBsYW55by1yZXNlcnZhdGlvbnMuanMiKSsiJyB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPjwvc2MiKyJyaXB0PiIpOwp9Cjwvc2NyaXB0Pgo8bm9zY3JpcHQ+PGEgaHJlZj0naHR0cDovL3d3dy5wbGFueW8uY29tL2Fib3V0LWNhbGVuZGFyLnBocD9jYWxlbmRhcj1bc2l0ZSBJRF0nPk1ha2UgYSByZXNlcnZhdGlvbjwvYT48YnIvPjxici8+PGEgaHJlZj0naHR0cDovL3d3dy5wbGFueW8uY29tLyc+UmVzZXJ2YXRpb24gc3lzdGVtIHBvd2VyZWQgYnkgUGxhbnlvPC9hPjwvbm9zY3JpcHQ+Cg==]]></data>
	</file>
	<file>
	  <filename>/hourglass.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhGAAYAPQAAP///wAAAM7Ozvr6+uDg4LCwsOjo6I6OjsjIyJycnNjY2KioqMDAwPLy8nZ2doaGhri4uGhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJBwAAACwAAAAAGAAYAAAFriAgjiQAQWVaDgr5POSgkoTDjFE0NoQ8iw8HQZQTDQjDn4jhSABhAAOhoTqSDg7qSUQwxEaEwwFhXHhHgzOA1xshxAnfTzotGRaHglJqkJcaVEqCgyoCBQkJBQKDDXQGDYaIioyOgYSXA36XIgYMBWRzXZoKBQUMmil0lgalLSIClgBpO0g+s26nUWddXyoEDIsACq5SsTMMDIECwUdJPw0Mzsu0qHYkw72bBmozIQAh+QQJBwAAACwAAAAAGAAYAAAFsCAgjiTAMGVaDgR5HKQwqKNxIKPjjFCk0KNXC6ATKSI7oAhxWIhezwhENTCQEoeGCdWIPEgzESGxEIgGBWstEW4QCGGAIJEoxGmGt5ZkgCRQQHkGd2CESoeIIwoMBQUMP4cNeQQGDYuNj4iSb5WJnmeGng0CDGaBlIQEJziHk3sABidDAHBgagButSKvAAoyuHuUYHgCkAZqebw0AgLBQyyzNKO3byNuoSS8x8OfwIchACH5BAkHAAAALAAAAAAYABgAAAW4ICCOJIAgZVoOBJkkpDKoo5EI43GMjNPSokXCINKJCI4HcCRIQEQvqIOhGhBHhUTDhGo4diOZyFAoKEQDxra2mAEgjghOpCgz3LTBIxJ5kgwMBShACREHZ1V4Kg1rS44pBAgMDAg/Sw0GBAQGDZGTlY+YmpyPpSQDiqYiDQoCliqZBqkGAgKIS5kEjQ21VwCyp76dBHiNvz+MR74AqSOdVwbQuo+abppo10ssjdkAnc0rf8vgl8YqIQAh+QQJBwAAACwAAAAAGAAYAAAFrCAgjiQgCGVaDgZZFCQxqKNRKGOSjMjR0qLXTyciHA7AkaLACMIAiwOC1iAxCrMToHHYjWQiA4NBEA0Q1RpWxHg4cMXxNDk4OBxNUkPAQAEXDgllKgMzQA1pSYopBgonCj9JEA8REQ8QjY+RQJOVl4ugoYssBJuMpYYjDQSliwasiQOwNakALKqsqbWvIohFm7V6rQAGP6+JQLlFg7KDQLKJrLjBKbvAor3IKiEAIfkECQcAAAAsAAAAABgAGAAABbUgII4koChlmhokw5DEoI4NQ4xFMQoJO4uuhignMiQWvxGBIQC+AJBEUyUcIRiyE6CR0CllW4HABxBURTUw4nC4FcWo5CDBRpQaCoF7VjgsyCUDYDMNZ0mHdwYEBAaGMwwHDg4HDA2KjI4qkJKUiJ6faJkiA4qAKQkRB3E0i6YpAw8RERAjA4tnBoMApCMQDhFTuySKoSKMJAq6rD4GzASiJYtgi6PUcs9Kew0xh7rNJMqIhYchACH5BAkHAAAALAAAAAAYABgAAAW0ICCOJEAQZZo2JIKQxqCOjWCMDDMqxT2LAgELkBMZCoXfyCBQiFwiRsGpku0EshNgUNAtrYPT0GQVNRBWwSKBMp98P24iISgNDAS4ipGA6JUpA2WAhDR4eWM/CAkHBwkIDYcGiTOLjY+FmZkNlCN3eUoLDmwlDW+AAwcODl5bYl8wCVYMDw5UWzBtnAANEQ8kBIM0oAAGPgcREIQnVloAChEOqARjzgAQEbczg8YkWJq8nSUhACH5BAkHAAAALAAAAAAYABgAAAWtICCOJGAYZZoOpKKQqDoORDMKwkgwtiwSBBYAJ2owGL5RgxBziQQMgkwoMkhNqAEDARPSaiMDFdDIiRSFQowMXE8Z6RdpYHWnEAWGPVkajPmARVZMPUkCBQkJBQINgwaFPoeJi4GVlQ2Qc3VJBQcLV0ptfAMJBwdcIl+FYjALQgimoGNWIhAQZA4HXSpLMQ8PIgkOSHxAQhERPw7ASTSFyCMMDqBTJL8tf3y2fCEAIfkECQcAAAAsAAAAABgAGAAABa8gII4k0DRlmg6kYZCoOg5EDBDEaAi2jLO3nEkgkMEIL4BLpBAkVy3hCTAQKGAznM0AFNFGBAbj2cA9jQixcGZAGgECBu/9HnTp+FGjjezJFAwFBQwKe2Z+KoCChHmNjVMqA21nKQwJEJRlbnUFCQlFXlpeCWcGBUACCwlrdw8RKGImBwktdyMQEQciB7oACwcIeA4RVwAODiIGvHQKERAjxyMIB5QlVSTLYLZ0sW8hACH5BAkHAAAALAAAAAAYABgAAAW0ICCOJNA0ZZoOpGGQrDoOBCoSxNgQsQzgMZyIlvOJdi+AS2SoyXrK4umWPM5wNiV0UDUIBNkdoepTfMkA7thIECiyRtUAGq8fm2O4jIBgMBA1eAZ6Knx+gHaJR4QwdCMKBxEJRggFDGgQEREPjjAMBQUKIwIRDhBDC2QNDDEKoEkDoiMHDigICGkJBS2dDA6TAAnAEAkCdQ8ORQcHTAkLcQQODLPMIgIJaCWxJMIkPIoAt3EhACH5BAkHAAAALAAAAAAYABgAAAWtICCOJNA0ZZoOpGGQrDoOBCoSxNgQsQzgMZyIlvOJdi+AS2SoyXrK4umWHM5wNiV0UN3xdLiqr+mENcWpM9TIbrsBkEck8oC0DQqBQGGIz+t3eXtob0ZTPgNrIwQJDgtGAgwCWSIMDg4HiiUIDAxFAAoODwxDBWINCEGdSTQkCQcoegADBaQ6MggHjwAFBZUFCm0HB0kJCUy9bAYHCCPGIwqmRq0jySMGmj6yRiEAIfkECQcAAAAsAAAAABgAGAAABbIgII4k0DRlmg6kYZCsOg4EKhLE2BCxDOAxnIiW84l2L4BLZKipBopW8XRLDkeCiAMyMvQAA+uON4JEIo+vqukkKQ6RhLHplVGN+LyKcXA4Dgx5DWwGDXx+gIKENnqNdzIDaiMECwcFRgQCCowiCAcHCZIlCgICVgSfCEMMnA0CXaU2YSQFoQAKUQMMqjoyAglcAAyBAAIMRUYLCUkFlybDeAYJryLNk6xGNCTQXY0juHghACH5BAkHAAAALAAAAAAYABgAAAWzICCOJNA0ZVoOAmkY5KCSSgSNBDE2hDyLjohClBMNij8RJHIQvZwEVOpIekRQJyJs5AMoHA+GMbE1lnm9EcPhOHRnhpwUl3AsknHDm5RN+v8qCAkHBwkIfw1xBAYNgoSGiIqMgJQifZUjBhAJYj95ewIJCQV7KYpzBAkLLQADCHOtOpY5PgNlAAykAEUsQ1wzCgWdCIdeArczBQVbDJ0NAqyeBb64nQAGArBTt8R8mLuyPyEAOwAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/icon-calendar.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhGAAYALMAAP///9DQ0KCgoPLy8tnZ2dlREPX19eLi4vz8/AAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAYABgAAAR9EMhJq6Ui6827QYAQjGRplsJhhGd7CsTAunQAy12ux+EU+EBJoEC89YRBwE9ILBgFyaXS13zWaE8qUcqdZJnbqJcHBRe6SIn12vpO08qm1I2Oh9VksXlOZrfzcHV8OHpvhnSFgyE6jBo8BgcEkpOUlZQqAAgGA5ydnp+eHxEAOw==]]></data>
	</file>
	<file>
	  <filename>/icon-calendar.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8AdwBruPm69gAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kIHQwYOb/iyvEAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAR1JREFUSMfllUFKxEAQRV9PokYGURB3rg2EQDyBG68gZJkcIRt33sCdJ+i+T8AOZJMTuBgEFUQiDOVqhmRmzJAxQcS/+1Vd/an6BaVEhO9gjDmjB5Ikma3GlIhgjBEGRpqmU6B2jTFTgDAMcV13kM+ttQCnwPOE8XAIOJMkSd5HFGE5k7IsxxWI43gZrKoK3/d7cXV39brgjzcPx2sCnue1lPvyvfpt4yaOaXK7g6IoWom+/PPenjT2dF0giqJW8f7t5UuzeDXfxW1DYPQR/Z4HrZnu4MlWD7bxLo/+iQe99r7DA0QErbU0Ya39EddaC3ABHP19D8a8yT7w5C4OdJZl13mezzY9DoLgfAeND2CuRASllAMcAM6ATcyB+gtFuttczzsCuQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/icon-help.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFAAUAMZsAP/50f+ohv9JAv9dHf9IAP/+/f/DrN/Xsv+DTv/tw//74P/62f/7+f/97v9MBf/htf/Kmf9rKvv1zf+mb/9JAf9UDv+TaffxyuTdt//59v/28uLbtv/97f5NB//39P/85v33z//97/+IWfbwyfjyy+3mwP740P/Wxv/28+PHnv/51f/73/Xux/5PCOjhu//51OnivP/50vPtxv9gHfdrK/9lJPHrxOfguvjes//98f/nx/r0zP/Wp/z2z+7nwfuPVf/61//63PDpw//p3P+QZP+ndf5QCf7ImP/+9f/62v9xN//Twv9wNfltLerPpezmv/+DT//73f7Jmf/Twf1PCf/bzf9QC/9zNfDqw/vgtf+yff1SDf+/k/9OCPTux//86vOARfR6PuqldP/o1eyfbP/73uvlv/++i/9UD/9RC+bfuvz1zv///////////////////////////////////////////////////////////////////////////////yH5BAEAAH8ALAAAAAAUABQAAAfxgH+Cg4SFhoUnBoqLJ4eCAQNpSlAIlZVMVgMBhQECQ0g5IQ2jDRwcXzoCm4MDYyEfK1wzBGhFQVFlKjgDhAIfCi8JFREQEwRnADE7TwKEDgpJAAlaD9IEEwAAJDAdzgoL2dk8ERUJ2RcuLd7g2cIR1efpzivsABAEEOEAIzfdgwILVJjI9mACPAA9bGCgQGhAFhZeRkg4QkDKmgssfGxIwWtQJycb1GCRAIJECQwHDqSgsMrjACNNfpiQYOYAGBpUNDnSYKEGECEHwliY4miQhS4KZBwQI6LoIApXQJQgs0XEEqeCBAggQIBIFaxgw4oNBAA7]]></data>
	</file>
	<file>
	  <filename>/icon-help.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oJAQwxMs1NP6sAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAqhJREFUOMutlE1IVFEYhp9zZ8R/xbLsx4KoFkURBEHRz7LGghZRtCgqgqhWbQoyI+iHIqKFREFBVBa5aGeLokUtglrVLiXQ7A91GrVRr4xz7z33bXEbc5qRWnjghcP5znn5zvu932ckMZMrPm2kyWxALCgaM/TxTG+LhvIyPLn5Hj++HMIdhkUrLLWzs5giPxhOxvj6sYSyqgli8VYe95+ZjEmKkKBZCSMlu6VwXLIjkv0p2eG/MBQh+CH1v5USJtSOeEuO5w/hvgVWAx8ikqBP8nulVzekQ4ukBNLuWqn9lOR1S36P5H+Ssh808emptHdOJsfzR8Ohfof6OghHIHTB/Qk3W6ChES7chu5OeHANGubCxq2Awfc93LIqSkcGSwuLEouBvAjY6OzACVizHuY1wtKV0NYKA99zYhGGwgYWOU5oCgiNmbwIQFUNbNsd7Xs64ebF/LMp+hNzco9x/mksdxTOHY3219sj0iI+moawiEV6OiPSgyeir0+9PVlZimRo7W8NA/K82dAYadmQT2ZtiO/7WGsx1jeFRamelQn6usu9mlkIcByHkpI4sf5vmLZWtHQlYf18/CAgtJZs1sN1xzGDA1A33xZ2SpNpBnM5deURE1V1xONxKirLqayswHEcfD9g3B0nk8nge36UTXqQxvOHAc7wTFcKW6/JNFNTf1bZsXJv4ZIgtnx1Sex4C9Za0ulR3NExZrdddePJb7Y0lax2Kmo8RlIXcmT5rTcVO6nWnvqHOrJM8rqUTr5Wb1eHxk5vstpVe1/b2VL0XV7rTcU2bmlnmeR/1tjQG/V2dWjg7rGUEqZ9OqLC1sut7Y5YtY7w0h3Sqc+Ez5+Eizvu4/jZl0i3/mVbUzBgm5zwtxiRFdZu7eLdi/081/v/GbBmpie2wwyvX+fg2Y04BS2DAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBkdW1teSBpbmRleC5odG1sIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/index.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/jquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSB2MS43IGpxdWVyeS5jb20gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY0EoYSl7cmV0dXJuIGYuaXNXaW5kb3coYSk/YTphLm5vZGVUeXBlPT09OT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjeChhKXtpZighY21bYV0pe3ZhciBiPWMuYm9keSxkPWYoIjwiK2ErIj4iKS5hcHBlbmRUbyhiKSxlPWQuY3NzKCJkaXNwbGF5Iik7ZC5yZW1vdmUoKTtpZihlPT09Im5vbmUifHxlPT09IiIpe2NufHwoY249Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxjbi5mcmFtZUJvcmRlcj1jbi53aWR0aD1jbi5oZWlnaHQ9MCksYi5hcHBlbmRDaGlsZChjbik7aWYoIWNvfHwhY24uY3JlYXRlRWxlbWVudCljbz0oY24uY29udGVudFdpbmRvd3x8Y24uY29udGVudERvY3VtZW50KS5kb2N1bWVudCxjby53cml0ZSgoYy5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiPyI8IWRvY3R5cGUgaHRtbD4iOiIiKSsiPGh0bWw+PGJvZHk+IiksY28uY2xvc2UoKTtkPWNvLmNyZWF0ZUVsZW1lbnQoYSksY28uYm9keS5hcHBlbmRDaGlsZChkKSxlPWYuY3NzKGQsImRpc3BsYXkiKSxiLnJlbW92ZUNoaWxkKGNuKX1jbVthXT1lfXJldHVybiBjbVthXX1mdW5jdGlvbiBjdyhhLGIpe3ZhciBjPXt9O2YuZWFjaChjcy5jb25jYXQuYXBwbHkoW10sY3Muc2xpY2UoMCxiKSksZnVuY3Rpb24oKXtjW3RoaXNdPWF9KTtyZXR1cm4gY31mdW5jdGlvbiBjdigpe2N0PWJ9ZnVuY3Rpb24gY3UoKXtzZXRUaW1lb3V0KGN2LDApO3JldHVybiBjdD1mLm5vdygpfWZ1bmN0aW9uIGNsKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319ZnVuY3Rpb24gY2soKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gY2UoYSxjKXthLmRhdGFGaWx0ZXImJihjPWEuZGF0YUZpbHRlcihjLGEuZGF0YVR5cGUpKTt2YXIgZD1hLmRhdGFUeXBlcyxlPXt9LGcsaCxpPWQubGVuZ3RoLGosaz1kWzBdLGwsbSxuLG8scDtmb3IoZz0xO2c8aTtnKyspe2lmKGc9PT0xKWZvcihoIGluIGEuY29udmVydGVycyl0eXBlb2YgaD09InN0cmluZyImJihlW2gudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2hdKTtsPWssaz1kW2ddO2lmKGs9PT0iKiIpaz1sO2Vsc2UgaWYobCE9PSIqIiYmbCE9PWspe209bCsiICIrayxuPWVbbV18fGVbIiogIitrXTtpZighbil7cD1iO2ZvcihvIGluIGUpe2o9by5zcGxpdCgiICIpO2lmKGpbMF09PT1sfHxqWzBdPT09IioiKXtwPWVbalsxXSsiICIra107aWYocCl7bz1lW29dLG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmYuZXJyb3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSksbiE9PSEwJiYoYz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGNkKGEsYyxkKXt2YXIgZT1hLmNvbnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3BvbnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4gZylpIGluIGQmJihjW2dbaV1dPWRbaV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1iJiYoaD1hLm1pbWVUeXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaClmb3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2JyZWFrfWlmKGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBdfHxhLmNvbnZlcnRlcnNbaSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1qPWp8fGt9aWYoail7aiE9PWZbMF0mJmYudW5zaGlmdChqKTtyZXR1cm4gZFtqXX19ZnVuY3Rpb24gY2MoYSxiLGMsZCl7aWYoZi5pc0FycmF5KGIpKWYuZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8YkcudGVzdChhKT9kKGEsZSk6Y2MoYSsiWyIrKHR5cGVvZiBlPT0ib2JqZWN0Inx8Zi5pc0FycmF5KGUpP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZiIT1udWxsJiZ0eXBlb2YgYj09Im9iamVjdCIpZm9yKHZhciBlIGluIGIpY2MoYSsiWyIrZSsiXSIsYltlXSxjLGQpO2Vsc2UgZChhLGIpfWZ1bmN0aW9uIGNiKGEsYyl7dmFyIGQsZSxnPWYuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoZCBpbiBjKWNbZF0hPT1iJiYoKGdbZF0/YTplfHwoZT17fSkpW2RdPWNbZF0pO2UmJmYuZXh0ZW5kKCEwLGEsZSl9ZnVuY3Rpb24gY2EoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoPWFbZl0saT0wLGo9aD9oLmxlbmd0aDowLGs9YT09PWJWLGw7Zm9yKDtpPGomJihrfHwhbCk7aSsrKWw9aFtpXShjLGQsZSksdHlwZW9mIGw9PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwpLGw9Y2EoYSxjLGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9Y2EoYSxjLGQsZSwiKiIsZykpO3JldHVybiBsfWZ1bmN0aW9uIGJfKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT0ic3RyaW5nIiYmKGM9YixiPSIqIik7aWYoZi5pc0Z1bmN0aW9uKGMpKXt2YXIgZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlIpLGU9MCxnPWQubGVuZ3RoLGgsaSxqO2Zvcig7ZTxnO2UrKyloPWRbZV0saj0vXlwrLy50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVuc2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBiRShhLGIsYyl7dmFyIGQ9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxlPWI9PT0id2lkdGgiP2J6OmJBO2lmKGQ+MCl7YyE9PSJib3JkZXIiJiZmLmVhY2goZSxmdW5jdGlvbigpe2N8fChkLT1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK3RoaXMpKXx8MCksYz09PSJtYXJnaW4iP2QrPXBhcnNlRmxvYXQoZi5jc3MoYSxjK3RoaXMpKXx8MDpkLT1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrdGhpcysiV2lkdGgiKSl8fDB9KTtyZXR1cm4gZCsicHgifWQ9YkIoYSxiLGIpO2lmKGQ8MHx8ZD09bnVsbClkPWEuc3R5bGVbYl18fDA7ZD1wYXJzZUZsb2F0KGQpfHwwLGMmJmYuZWFjaChlLGZ1bmN0aW9uKCl7ZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIit0aGlzKSl8fDAsYyE9PSJwYWRkaW5nIiYmKGQrPXBhcnNlRmxvYXQoZi5jc3MoYSwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCksYz09PSJtYXJnaW4iJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLGMrdGhpcykpfHwwKX0pO3JldHVybiBkKyJweCJ9ZnVuY3Rpb24gYnIoYSxiKXtiLnNyYz9mLmFqYXgoe3VybDpiLnNyYyxhc3luYzohMSxkYXRhVHlwZToic2NyaXB0In0pOmYuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoYmksIi8qJDAqLyIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBicShhKXt2YXIgYj0oYS5ub2RlTmFtZXx8IiIpLnRvTG93ZXJDYXNlKCk7Yj09PSJpbnB1dCI/YnAoYSk6YiE9PSJzY3JpcHQiJiZ0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJmYuZ3JlcChhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLGJwKX1mdW5jdGlvbiBicChhKXtpZihhLnR5cGU9PT0iY2hlY2tib3gifHxhLnR5cGU9PT0icmFkaW8iKWEuZGVmYXVsdENoZWNrZWQ9YS5jaGVja2VkfWZ1bmN0aW9uIGJvKGEpe3JldHVybiB0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOnR5cGVvZiBhLnF1ZXJ5U2VsZWN0b3JBbGwhPSJ1bmRlZmluZWQiP2EucXVlcnlTZWxlY3RvckFsbCgiKiIpOltdfWZ1bmN0aW9uIGJuKGEsYil7dmFyIGM7aWYoYi5ub2RlVHlwZT09PTEpe2IuY2xlYXJBdHRyaWJ1dGVzJiZiLmNsZWFyQXR0cmlidXRlcygpLGIubWVyZ2VBdHRyaWJ1dGVzJiZiLm1lcmdlQXR0cmlidXRlcyhhKSxjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihjPT09Im9iamVjdCIpYi5vdXRlckhUTUw9YS5vdXRlckhUTUw7ZWxzZSBpZihjIT09ImlucHV0Inx8YS50eXBlIT09ImNoZWNrYm94IiYmYS50eXBlIT09InJhZGlvIil7aWYoYz09PSJvcHRpb24iKWIuc2VsZWN0ZWQ9YS5kZWZhdWx0U2VsZWN0ZWQ7ZWxzZSBpZihjPT09ImlucHV0Inx8Yz09PSJ0ZXh0YXJlYSIpYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWV9ZWxzZSBhLmNoZWNrZWQmJihiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQpLGIudmFsdWUhPT1hLnZhbHVlJiYoYi52YWx1ZT1hLnZhbHVlKTtiLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pfX1mdW5jdGlvbiBibShhLGIpe2lmKGIubm9kZVR5cGU9PT0xJiYhIWYuaGFzRGF0YShhKSl7dmFyIGMsZCxlLGc9Zi5fZGF0YShhKSxoPWYuX2RhdGEoYixnKSxpPWcuZXZlbnRzO2lmKGkpe2RlbGV0ZSBoLmhhbmRsZSxoLmV2ZW50cz17fTtmb3IoYyBpbiBpKWZvcihkPTAsZT1pW2NdLmxlbmd0aDtkPGU7ZCsrKWYuZXZlbnQuYWRkKGIsYysoaVtjXVtkXS5uYW1lc3BhY2U/Ii4iOiIiKStpW2NdW2RdLm5hbWVzcGFjZSxpW2NdW2RdLGlbY11bZF0uZGF0YSl9aC5kYXRhJiYoaC5kYXRhPWYuZXh0ZW5kKHt9LGguZGF0YSkpfX1mdW5jdGlvbiBibChhLGIpe3JldHVybiBmLm5vZGVOYW1lKGEsInRhYmxlIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiBYKGEpe3ZhciBiPVkuc3BsaXQoIiAiKSxjPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKGMuY3JlYXRlRWxlbWVudCl3aGlsZShiLmxlbmd0aCljLmNyZWF0ZUVsZW1lbnQoYi5wb3AoKSk7cmV0dXJuIGN9ZnVuY3Rpb24gVyhhLGIsYyl7Yj1ifHwwO2lmKGYuaXNGdW5jdGlvbihiKSlyZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXt2YXIgZT0hIWIuY2FsbChhLGQsYSk7cmV0dXJuIGU9PT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT09PWI9PT1jfSk7aWYodHlwZW9mIGI9PSJzdHJpbmciKXt2YXIgZD1mLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PTF9KTtpZihSLnRlc3QoYikpcmV0dXJuIGYuZmlsdGVyKGIsZCwhYyk7Yj1mLmZpbHRlcihiLGQpfXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiBmLmluQXJyYXkoYSxiKT49MD09PWN9KX1mdW5jdGlvbiBWKGEpe3JldHVybiFhfHwhYS5wYXJlbnROb2RlfHxhLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMX1mdW5jdGlvbiBOKCl7cmV0dXJuITB9ZnVuY3Rpb24gTSgpe3JldHVybiExfWZ1bmN0aW9uIG4oYSxiLGMpe3ZhciBkPWIrImRlZmVyIixlPWIrInF1ZXVlIixnPWIrIm1hcmsiLGg9Zi5fZGF0YShhLGQpO2gmJihjPT09InF1ZXVlInx8IWYuX2RhdGEoYSxlKSkmJihjPT09Im1hcmsifHwhZi5fZGF0YShhLGcpKSYmc2V0VGltZW91dChmdW5jdGlvbigpeyFmLl9kYXRhKGEsZSkmJiFmLl9kYXRhKGEsZykmJihmLnJlbW92ZURhdGEoYSxkLCEwKSxoLmZpcmUoKSl9LDApfWZ1bmN0aW9uIG0oYSl7Zm9yKHZhciBiIGluIGEpe2lmKGI9PT0iZGF0YSImJmYuaXNFbXB0eU9iamVjdChhW2JdKSljb250aW51ZTtpZihiIT09InRvSlNPTiIpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gbChhLGMsZCl7aWYoZD09PWImJmEubm9kZVR5cGU9PT0xKXt2YXIgZT0iZGF0YS0iK2MucmVwbGFjZShrLCItJDEiKS50b0xvd2VyQ2FzZSgpO2Q9YS5nZXRBdHRyaWJ1dGUoZSk7aWYodHlwZW9mIGQ9PSJzdHJpbmciKXt0cnl7ZD1kPT09InRydWUiPyEwOmQ9PT0iZmFsc2UiPyExOmQ9PT0ibnVsbCI/bnVsbDpmLmlzTnVtZXJpYyhkKT9wYXJzZUZsb2F0KGQpOmoudGVzdChkKT9mLnBhcnNlSlNPTihkKTpkfWNhdGNoKGcpe31mLmRhdGEoYSxjLGQpfWVsc2UgZD1ifXJldHVybiBkfWZ1bmN0aW9uIGgoYSl7dmFyIGI9Z1thXT17fSxjLGQ7YT1hLnNwbGl0KC9ccysvKTtmb3IoYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyliW2FbY11dPSEwO3JldHVybiBifXZhciBjPWEuZG9jdW1lbnQsZD1hLm5hdmlnYXRvcixlPWEubG9jYXRpb24sZj1mdW5jdGlvbigpe2Z1bmN0aW9uIEsoKXtpZighZS5pc1JlYWR5KXt0cnl7Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChhKXtzZXRUaW1lb3V0KEssMSk7cmV0dXJufWUucmVhZHkoKX19dmFyIGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IGUuZm4uaW5pdChhLGIsaCl9LGY9YS5qUXVlcnksZz1hLiQsaCxpPS9eKD86W14jPF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0qKSQpLyxqPS9cUy8saz0vXlxzKy8sbD0vXHMrJC8sbT0vXGQvLG49L148KFx3KylccypcLz8+KD86PFwvXDE+KT8kLyxvPS9eW1xdLDp7fVxzXSokLyxwPS9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2cscT0vIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2cscj0vKD86Xnw6fCwpKD86XHMqXFspKy9nLHM9Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8sdD0vKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8sdT0vKG1zaWUpIChbXHcuXSspLyx2PS8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKykpPy8sdz0vLShbYS16XXxbMC05XSkvaWcseD0vXi1tcy0vLHk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYisiIikudG9VcHBlckNhc2UoKX0sej1kLnVzZXJBZ2VudCxBLEIsQyxEPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEY9QXJyYXkucHJvdG90eXBlLnB1c2gsRz1BcnJheS5wcm90b3R5cGUuc2xpY2UsSD1TdHJpbmcucHJvdG90eXBlLnRyaW0sST1BcnJheS5wcm90b3R5cGUuaW5kZXhPZixKPXt9O2UuZm49ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaW5pdDpmdW5jdGlvbihhLGQsZil7dmFyIGcsaCxqLGs7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKGE9PT0iYm9keSImJiFkJiZjLmJvZHkpe3RoaXMuY29udGV4dD1jLHRoaXNbMF09Yy5ib2R5LHRoaXMuc2VsZWN0b3I9YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT0ic3RyaW5nIil7YS5jaGFyQXQoMCkhPT0iPCJ8fGEuY2hhckF0KGEubGVuZ3RoLTEpIT09Ij4ifHxhLmxlbmd0aDwzP2c9aS5leGVjKGEpOmc9W251bGwsYSxudWxsXTtpZihnJiYoZ1sxXXx8IWQpKXtpZihnWzFdKXtkPWQgaW5zdGFuY2VvZiBlP2RbMF06ZCxrPWQ/ZC5vd25lckRvY3VtZW50fHxkOmMsaj1uLmV4ZWMoYSksaj9lLmlzUGxhaW5PYmplY3QoZCk/KGE9W2MuY3JlYXRlRWxlbWVudChqWzFdKV0sZS5mbi5hdHRyLmNhbGwoYSxkLCEwKSk6YT1bay5jcmVhdGVFbGVtZW50KGpbMV0pXTooaj1lLmJ1aWxkRnJhZ21lbnQoW2dbMV1dLFtrXSksYT0oai5jYWNoZWFibGU/ZS5jbG9uZShqLmZyYWdtZW50KTpqLmZyYWdtZW50KS5jaGlsZE5vZGVzKTtyZXR1cm4gZS5tZXJnZSh0aGlzLGEpfWg9Yy5nZXRFbGVtZW50QnlJZChnWzJdKTtpZihoJiZoLnBhcmVudE5vZGUpe2lmKGguaWQhPT1nWzJdKXJldHVybiBmLmZpbmQoYSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPWh9dGhpcy5jb250ZXh0PWMsdGhpcy5zZWxlY3Rvcj1hO3JldHVybiB0aGlzfXJldHVybiFkfHxkLmpxdWVyeT8oZHx8ZikuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGQpLmZpbmQoYSl9aWYoZS5pc0Z1bmN0aW9uKGEpKXJldHVybiBmLnJlYWR5KGEpO2Euc2VsZWN0b3IhPT1iJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpO3JldHVybiBlLm1ha2VBcnJheShhLHRoaXMpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuNyIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBHLmNhbGwodGhpcywwKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP3RoaXMudG9BcnJheSgpOmE8MD90aGlzW3RoaXMubGVuZ3RoK2FdOnRoaXNbYV19LHB1c2hTdGFjazpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5jb25zdHJ1Y3RvcigpO2UuaXNBcnJheShhKT9GLmFwcGx5KGQsYSk6ZS5tZXJnZShkLGEpLGQucHJldk9iamVjdD10aGlzLGQuY29udGV4dD10aGlzLmNvbnRleHQsYj09PSJmaW5kIj9kLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStjOmImJihkLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2MrIikiKTtyZXR1cm4gZH0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBlLmVhY2godGhpcyxhLGIpfSxyZWFkeTpmdW5jdGlvbihhKXtlLmJpbmRSZWFkeSgpLEIuYWRkKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXtyZXR1cm4gYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLCthKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhHLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLEcuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNoOkYsc29ydDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2V9LGUuZm4uaW5pdC5wcm90b3R5cGU9ZS5mbixlLmV4dGVuZD1lLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGMsZCxmLGcsaCxpPWFyZ3VtZW50c1swXXx8e30saj0xLGs9YXJndW1lbnRzLmxlbmd0aCxsPSExO3R5cGVvZiBpPT0iYm9vbGVhbiImJihsPWksaT1hcmd1bWVudHNbMV18fHt9LGo9MiksdHlwZW9mIGkhPSJvYmplY3QiJiYhZS5pc0Z1bmN0aW9uKGkpJiYoaT17fSksaz09PWomJihpPXRoaXMsLS1qKTtmb3IoO2o8aztqKyspaWYoKGE9YXJndW1lbnRzW2pdKSE9bnVsbClmb3IoYyBpbiBhKXtkPWlbY10sZj1hW2NdO2lmKGk9PT1mKWNvbnRpbnVlO2wmJmYmJihlLmlzUGxhaW5PYmplY3QoZil8fChnPWUuaXNBcnJheShmKSkpPyhnPyhnPSExLGg9ZCYmZS5pc0FycmF5KGQpP2Q6W10pOmg9ZCYmZS5pc1BsYWluT2JqZWN0KGQpP2Q6e30saVtjXT1lLmV4dGVuZChsLGgsZikpOmYhPT1iJiYoaVtjXT1mKX1yZXR1cm4gaX0sZS5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oYil7YS4kPT09ZSYmKGEuJD1nKSxiJiZhLmpRdWVyeT09PWUmJihhLmpRdWVyeT1mKTtyZXR1cm4gZX0saXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9lLnJlYWR5V2FpdCsrOmUucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXtpZihhPT09ITAmJiEtLWUucmVhZHlXYWl0fHxhIT09ITAmJiFlLmlzUmVhZHkpe2lmKCFjLmJvZHkpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtlLmlzUmVhZHk9ITA7aWYoYSE9PSEwJiYtLWUucmVhZHlXYWl0PjApcmV0dXJuO0IuZmlyZVdpdGgoYyxbZV0pLGUuZm4udHJpZ2dlciYmZShjKS50cmlnZ2VyKCJyZWFkeSIpLnVuYmluZCgicmVhZHkiKX19LGJpbmRSZWFkeTpmdW5jdGlvbigpe2lmKCFCKXtCPWUuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpO2lmKGMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtpZihjLmFkZEV2ZW50TGlzdGVuZXIpYy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixDLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGUucmVhZHksITEpO2Vsc2UgaWYoYy5hdHRhY2hFdmVudCl7Yy5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixDKSxhLmF0dGFjaEV2ZW50KCJvbmxvYWQiLGUucmVhZHkpO3ZhciBiPSExO3RyeXtiPWEuZnJhbWVFbGVtZW50PT1udWxsfWNhdGNoKGQpe31jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCYmYiYmSygpfX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGUudHlwZShhKT09PSJmdW5jdGlvbiJ9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGUudHlwZShhKT09PSJhcnJheSJ9LGlzV2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZ0eXBlb2YgYT09Im9iamVjdCImJiJzZXRJbnRlcnZhbCJpbiBhfSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGwmJm0udGVzdChhKSYmIWlzTmFOKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpKW0QuY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxlLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8ZS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIUUuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhRS5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9dmFyIGQ7Zm9yKGQgaW4gYSk7cmV0dXJuIGQ9PT1ifHxFLmNhbGwoYSxkKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgYX0scGFyc2VKU09OOmZ1bmN0aW9uKGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5nInx8IWIpcmV0dXJuIG51bGw7Yj1lLnRyaW0oYik7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKTtpZihvLnRlc3QoYi5yZXBsYWNlKHAsIkAiKS5yZXBsYWNlKHEsIl0iKS5yZXBsYWNlKHIsIiIpKSlyZXR1cm4obmV3IEZ1bmN0aW9uKCJyZXR1cm4gIitiKSkoKTtlLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LHBhcnNlWE1MOmZ1bmN0aW9uKGMpe3ZhciBkLGY7dHJ5e2EuRE9NUGFyc2VyPyhmPW5ldyBET01QYXJzZXIsZD1mLnBhcnNlRnJvbVN0cmluZyhjLCJ0ZXh0L3htbCIpKTooZD1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGQuYXN5bmM9ImZhbHNlIixkLmxvYWRYTUwoYykpfWNhdGNoKGcpe2Q9Yn0oIWR8fCFkLmRvY3VtZW50RWxlbWVudHx8ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZlLmVycm9yKCJJbnZhbGlkIFhNTDogIitjKTtyZXR1cm4gZH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZqLnRlc3QoYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoeCwibXMtIikucmVwbGFjZSh3LHkpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT1iLnRvVXBwZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGc9MCxoPWEubGVuZ3RoLGk9aD09PWJ8fGUuaXNGdW5jdGlvbihhKTtpZihkKXtpZihpKXtmb3IoZiBpbiBhKWlmKGMuYXBwbHkoYVtmXSxkKT09PSExKWJyZWFrfWVsc2UgZm9yKDtnPGg7KWlmKGMuYXBwbHkoYVtnKytdLGQpPT09ITEpYnJlYWt9ZWxzZSBpZihpKXtmb3IoZiBpbiBhKWlmKGMuY2FsbChhW2ZdLGYsYVtmXSk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmNhbGwoYVtnXSxnLGFbZysrXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpIP2Z1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOkguY2FsbChhKX06ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6KGErIiIpLnJlcGxhY2UoaywiIikucmVwbGFjZShsLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107aWYoYSE9bnVsbCl7dmFyIGQ9ZS50eXBlKGEpO2EubGVuZ3RoPT1udWxsfHxkPT09InN0cmluZyJ8fGQ9PT0iZnVuY3Rpb24ifHxkPT09InJlZ2V4cCJ8fGUuaXNXaW5kb3coYSk/Ri5jYWxsKGMsYSk6ZS5tZXJnZShjLGEpfXJldHVybiBjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihiKXtpZihJKXJldHVybiBJLmNhbGwoYixhLGMpO2Q9Yi5sZW5ndGgsYz1jP2M8MD9NYXRoLm1heCgwLGQrYyk6YzowO2Zvcig7YzxkO2MrKylpZihjIGluIGImJmJbY109PT1hKXJldHVybiBjfXJldHVybi0xfSxtZXJnZTpmdW5jdGlvbihhLGMpe3ZhciBkPWEubGVuZ3RoLGU9MDtpZih0eXBlb2YgYy5sZW5ndGg9PSJudW1iZXIiKWZvcih2YXIgZj1jLmxlbmd0aDtlPGY7ZSsrKWFbZCsrXT1jW2VdO2Vsc2Ugd2hpbGUoY1tlXSE9PWIpYVtkKytdPWNbZSsrXTthLmxlbmd0aD1kO3JldHVybiBhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlO2M9ISFjO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGg7ZjxnO2YrKyllPSEhYihhW2ZdLGYpLGMhPT1lJiZkLnB1c2goYVtmXSk7cmV0dXJuIGR9LG1hcDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoPVtdLGk9MCxqPWEubGVuZ3RoLGs9YSBpbnN0YW5jZW9mIGV8fGohPT1iJiZ0eXBlb2Ygaj09Im51bWJlciImJihqPjAmJmFbMF0mJmFbai0xXXx8aj09PTB8fGUuaXNBcnJheShhKSk7aWYoaylmb3IoO2k8ajtpKyspZj1jKGFbaV0saSxkKSxmIT1udWxsJiYoaFtoLmxlbmd0aF09Zik7ZWxzZSBmb3IoZyBpbiBhKWY9YyhhW2ddLGcsZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO3JldHVybiBoLmNvbmNhdC5hcHBseShbXSxoKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYyl7aWYodHlwZW9mIGM9PSJzdHJpbmciKXt2YXIgZD1hW2NdO2M9YSxhPWR9aWYoIWUuaXNGdW5jdGlvbihhKSlyZXR1cm4gYjt2YXIgZj1HLmNhbGwoYXJndW1lbnRzLDIpLGc9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShjLGYuY29uY2F0KEcuY2FsbChhcmd1bWVudHMpKSl9O2cuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxnLmd1aWR8fGUuZ3VpZCsrO3JldHVybiBnfSxhY2Nlc3M6ZnVuY3Rpb24oYSxjLGQsZixnLGgpe3ZhciBpPWEubGVuZ3RoO2lmKHR5cGVvZiBjPT0ib2JqZWN0Iil7Zm9yKHZhciBqIGluIGMpZS5hY2Nlc3MoYSxqLGNbal0sZixnLGQpO3JldHVybiBhfWlmKGQhPT1iKXtmPSFoJiZmJiZlLmlzRnVuY3Rpb24oZCk7Zm9yKHZhciBrPTA7azxpO2srKylnKGFba10sYyxmP2QuY2FsbChhW2tdLGssZyhhW2tdLGMpKTpkLGgpO3JldHVybiBhfXJldHVybiBpP2coYVswXSxjKTpifSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sdWFNYXRjaDpmdW5jdGlvbihhKXthPWEudG9Mb3dlckNhc2UoKTt2YXIgYj1zLmV4ZWMoYSl8fHQuZXhlYyhhKXx8dS5leGVjKGEpfHxhLmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiZ2LmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmJbMV18fCIiLHZlcnNpb246YlsyXXx8IjAifX0sc3ViOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3JldHVybiBuZXcgYS5mbi5pbml0KGIsYyl9ZS5leHRlbmQoITAsYSx0aGlzKSxhLnN1cGVyY2xhc3M9dGhpcyxhLmZuPWEucHJvdG90eXBlPXRoaXMoKSxhLmZuLmNvbnN0cnVjdG9yPWEsYS5zdWI9dGhpcy5zdWIsYS5mbi5pbml0PWZ1bmN0aW9uKGQsZil7ZiYmZiBpbnN0YW5jZW9mIGUmJiEoZiBpbnN0YW5jZW9mIGEpJiYoZj1hKGYpKTtyZXR1cm4gZS5mbi5pbml0LmNhbGwodGhpcyxkLGYsYil9LGEuZm4uaW5pdC5wcm90b3R5cGU9YS5mbjt2YXIgYj1hKGMpO3JldHVybiBhfSxicm93c2VyOnt9fSksZS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7SlsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KSxBPWUudWFNYXRjaCh6KSxBLmJyb3dzZXImJihlLmJyb3dzZXJbQS5icm93c2VyXT0hMCxlLmJyb3dzZXIudmVyc2lvbj1BLnZlcnNpb24pLGUuYnJvd3Nlci53ZWJraXQmJihlLmJyb3dzZXIuc2FmYXJpPSEwKSxqLnRlc3QoIsKgIikmJihrPS9eW1xzXHhBMF0rLyxsPS9bXHNceEEwXSskLyksaD1lKGMpLGMuYWRkRXZlbnRMaXN0ZW5lcj9DPWZ1bmN0aW9uKCl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixDLCExKSxlLnJlYWR5KCl9OmMuYXR0YWNoRXZlbnQmJihDPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmKGMuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQyksZS5yZWFkeSgpKX0pLHR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQmJmRlZmluZS5hbWQualF1ZXJ5JiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gZX0pO3JldHVybiBlfSgpLGc9e307Zi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT1hP2dbYV18fGgoYSk6e307dmFyIGM9W10sZD1bXSxlLGksaixrLGwsbT1mdW5jdGlvbihiKXt2YXIgZCxlLGcsaCxpO2ZvcihkPTAsZT1iLmxlbmd0aDtkPGU7ZCsrKWc9YltkXSxoPWYudHlwZShnKSxoPT09ImFycmF5Ij9tKGcpOmg9PT0iZnVuY3Rpb24iJiYoIWEudW5pcXVlfHwhby5oYXMoZykpJiZjLnB1c2goZyl9LG49ZnVuY3Rpb24oYixmKXtmPWZ8fFtdLGU9IWEubWVtb3J5fHxbYixmXSxpPSEwLGw9anx8MCxqPTAsaz1jLmxlbmd0aDtmb3IoO2MmJmw8aztsKyspaWYoY1tsXS5hcHBseShiLGYpPT09ITEmJmEuc3RvcE9uRmFsc2Upe2U9ITA7YnJlYWt9aT0hMSxjJiYoYS5vbmNlP2U9PT0hMD9vLmRpc2FibGUoKTpjPVtdOmQmJmQubGVuZ3RoJiYoZT1kLnNoaWZ0KCksby5maXJlV2l0aChlWzBdLGVbMV0pKSl9LG89e2FkZDpmdW5jdGlvbigpe2lmKGMpe3ZhciBhPWMubGVuZ3RoO20oYXJndW1lbnRzKSxpP2s9Yy5sZW5ndGg6ZSYmZSE9PSEwJiYoaj1hLG4oZVswXSxlWzFdKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe2lmKGMpe3ZhciBiPWFyZ3VtZW50cyxkPTAsZT1iLmxlbmd0aDtmb3IoO2Q8ZTtkKyspZm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspaWYoYltkXT09PWNbZl0pe2kmJmY8PWsmJihrLS0sZjw9bCYmbC0tKSxjLnNwbGljZShmLS0sMSk7aWYoYS51bmlxdWUpYnJlYWt9fXJldHVybiB0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7aWYoYyl7dmFyIGI9MCxkPWMubGVuZ3RoO2Zvcig7YjxkO2IrKylpZihhPT09Y1tiXSlyZXR1cm4hMH1yZXR1cm4hMX0sZW1wdHk6ZnVuY3Rpb24oKXtjPVtdO3JldHVybiB0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7Yz1kPWU9YjtyZXR1cm4gdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hY30sbG9jazpmdW5jdGlvbigpe2Q9YiwoIWV8fGU9PT0hMCkmJm8uZGlzYWJsZSgpO3JldHVybiB0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hZH0sZmlyZVdpdGg6ZnVuY3Rpb24oYixjKXtkJiYoaT9hLm9uY2V8fGQucHVzaChbYixjXSk6KCFhLm9uY2V8fCFlKSYmbihiLGMpKTtyZXR1cm4gdGhpc30sZmlyZTpmdW5jdGlvbigpe28uZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZX19O3JldHVybiBvfTt2YXIgaT1bXS5zbGljZTtmLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksYz1mLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxkPWYuQ2FsbGJhY2tzKCJtZW1vcnkiKSxlPSJwZW5kaW5nIixnPXtyZXNvbHZlOmIscmVqZWN0OmMsbm90aWZ5OmR9LGg9e2RvbmU6Yi5hZGQsZmFpbDpjLmFkZCxwcm9ncmVzczpkLmFkZCxzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBlfSxpc1Jlc29sdmVkOmIuZmlyZWQsaXNSZWplY3RlZDpjLmZpcmVkLHRoZW46ZnVuY3Rpb24oYSxiLGMpe2kuZG9uZShhKS5mYWlsKGIpLnByb2dyZXNzKGMpO3JldHVybiB0aGlzfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lLmFwcGx5KGksYXJndW1lbnRzKS5mYWlsLmFwcGx5KGksYXJndW1lbnRzKX0scGlwZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuRGVmZXJyZWQoZnVuY3Rpb24oZCl7Zi5lYWNoKHtkb25lOlthLCJyZXNvbHZlIl0sZmFpbDpbYiwicmVqZWN0Il0scHJvZ3Jlc3M6W2MsIm5vdGlmeSJdfSxmdW5jdGlvbihhLGIpe3ZhciBjPWJbMF0sZT1iWzFdLGc7Zi5pc0Z1bmN0aW9uKGMpP2lbYV0oZnVuY3Rpb24oKXtnPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpLGcmJmYuaXNGdW5jdGlvbihnLnByb21pc2UpP2cucHJvbWlzZSgpLnRoZW4oZC5yZXNvbHZlLGQucmVqZWN0LGQubm90aWZ5KTpkW2UrIldpdGgiXSh0aGlzPT09aT9kOnRoaXMsW2ddKX0pOmlbYV0oZFtlXSl9KX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtpZihhPT1udWxsKWE9aDtlbHNlIGZvcih2YXIgYiBpbiBoKWFbYl09aFtiXTtyZXR1cm4gYX19LGk9aC5wcm9taXNlKHt9KSxqO2ZvcihqIGluIGcpaVtqXT1nW2pdLmZpcmUsaVtqKyJXaXRoIl09Z1tqXS5maXJlV2l0aDtpLmRvbmUoZnVuY3Rpb24oKXtlPSJyZXNvbHZlZCJ9LGMuZGlzYWJsZSxkLmxvY2spLmZhaWwoZnVuY3Rpb24oKXtlPSJyZWplY3RlZCJ9LGIuZGlzYWJsZSxkLmxvY2spLGEmJmEuY2FsbChpLGkpO3JldHVybiBpfSx3aGVuOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2VbYV09YXJndW1lbnRzLmxlbmd0aD4xP2kuY2FsbChhcmd1bWVudHMsMCk6YixqLm5vdGlmeVdpdGgoayxlKX19ZnVuY3Rpb24gbChhKXtyZXR1cm4gZnVuY3Rpb24oYyl7YlthXT1hcmd1bWVudHMubGVuZ3RoPjE/aS5jYWxsKGFyZ3VtZW50cywwKTpjLC0tZ3x8ai5yZXNvbHZlV2l0aChqLGIpfX12YXIgYj1pLmNhbGwoYXJndW1lbnRzLDApLGM9MCxkPWIubGVuZ3RoLGU9QXJyYXkoZCksZz1kLGg9ZCxqPWQ8PTEmJmEmJmYuaXNGdW5jdGlvbihhLnByb21pc2UpP2E6Zi5EZWZlcnJlZCgpLGs9ai5wcm9taXNlKCk7aWYoZD4xKXtmb3IoO2M8ZDtjKyspYltjXSYmYltjXS5wcm9taXNlJiZmLmlzRnVuY3Rpb24oYltjXS5wcm9taXNlKT9iW2NdLnByb21pc2UoKS50aGVuKGwoYyksai5yZWplY3QsbShjKSk6LS1nO2d8fGoucmVzb2x2ZVdpdGgoaixiKX1lbHNlIGohPT1hJiZqLnJlc29sdmVXaXRoKGosZD9bYV06W10pO3JldHVybiBrfX0pLGYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYj1jLmRvY3VtZW50RWxlbWVudCxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7YS5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxhLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0ndG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjU1Oyc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz48bmF2PjwvbmF2PiIsZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksZT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoIWR8fCFkLmxlbmd0aHx8IWUpcmV0dXJue307Zz1jLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGg9Zy5hcHBlbmRDaGlsZChjLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxpPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0saz17bGVhZGluZ1doaXRlc3BhY2U6YS5maXJzdENoaWxkLm5vZGVUeXBlPT09Myx0Ym9keTohYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChlLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNTUvLnRlc3QoZS5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIWUuc3R5bGUuY3NzRmxvYXQsdW5rbm93bkVsZW1zOiEhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibmF2IikubGVuZ3RoLGNoZWNrT246aS52YWx1ZT09PSJvbiIsb3B0U2VsZWN0ZWQ6aC5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6YS5jbGFzc05hbWUhPT0idCIsZW5jdHlwZTohIWMuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsc3VibWl0QnViYmxlczohMCxjaGFuZ2VCdWJibGVzOiEwLGZvY3VzaW5CdWJibGVzOiExLGRlbGV0ZUV4cGFuZG86ITAsbm9DbG9uZUV2ZW50OiEwLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZU1hcmdpblJpZ2h0OiEwfSxpLmNoZWNrZWQ9ITAsay5ub0Nsb25lQ2hlY2tlZD1pLmNsb25lTm9kZSghMCkuY2hlY2tlZCxnLmRpc2FibGVkPSEwLGsub3B0RGlzYWJsZWQ9IWguZGlzYWJsZWQ7dHJ5e2RlbGV0ZSBhLnRlc3R9Y2F0Y2godil7ay5kZWxldGVFeHBhbmRvPSExfSFhLmFkZEV2ZW50TGlzdGVuZXImJmEuYXR0YWNoRXZlbnQmJmEuZmlyZUV2ZW50JiYoYS5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24oKXtrLm5vQ2xvbmVFdmVudD0hMX0pLGEuY2xvbmVOb2RlKCEwKS5maXJlRXZlbnQoIm9uY2xpY2siKSksaT1jLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaS52YWx1ZT0idCIsaS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGsucmFkaW9WYWx1ZT1pLnZhbHVlPT09InQiLGkuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGEuYXBwZW5kQ2hpbGQoaSksbD1jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsLmFwcGVuZENoaWxkKGEubGFzdENoaWxkKSxrLmNoZWNrQ2xvbmU9bC5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsYS5pbm5lckhUTUw9IiIsYS5zdHlsZS53aWR0aD1hLnN0eWxlLnBhZGRpbmdMZWZ0PSIxcHgiLG09Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLG89Yy5jcmVhdGVFbGVtZW50KG0/ImRpdiI6ImJvZHkiKSxwPXt2aXNpYmlsaXR5OiJoaWRkZW4iLHdpZHRoOjAsaGVpZ2h0OjAsYm9yZGVyOjAsbWFyZ2luOjAsYmFja2dyb3VuZDoibm9uZSJ9LG0mJmYuZXh0ZW5kKHAse3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiLTk5OXB4Iix0b3A6Ii05OTlweCJ9KTtmb3IodCBpbiBwKW8uc3R5bGVbdF09cFt0XTtvLmFwcGVuZENoaWxkKGEpLG49bXx8YixuLmluc2VydEJlZm9yZShvLG4uZmlyc3RDaGlsZCksay5hcHBlbmRDaGVja2VkPWkuY2hlY2tlZCxrLmJveE1vZGVsPWEub2Zmc2V0V2lkdGg9PT0yLCJ6b29tImluIGEuc3R5bGUmJihhLnN0eWxlLmRpc3BsYXk9ImlubGluZSIsYS5zdHlsZS56b29tPTEsay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWEub2Zmc2V0V2lkdGg9PT0yLGEuc3R5bGUuZGlzcGxheT0iIixhLmlubmVySFRNTD0iPGRpdiBzdHlsZT0nd2lkdGg6NHB4Oyc+PC9kaXY+IixrLnNocmlua1dyYXBCbG9ja3M9YS5vZmZzZXRXaWR0aCE9PTIpLGEuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIscT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLHU9cVswXS5vZmZzZXRIZWlnaHQ9PT0wLHFbMF0uc3R5bGUuZGlzcGxheT0iIixxWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGsucmVsaWFibGVIaWRkZW5PZmZzZXRzPXUmJnFbMF0ub2Zmc2V0SGVpZ2h0PT09MCxhLmlubmVySFRNTD0iIixjLmRlZmF1bHRWaWV3JiZjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihqPWMuY3JlYXRlRWxlbWVudCgiZGl2Iiksai5zdHlsZS53aWR0aD0iMCIsai5zdHlsZS5tYXJnaW5SaWdodD0iMCIsYS5hcHBlbmRDaGlsZChqKSxrLnJlbGlhYmxlTWFyZ2luUmlnaHQ9KHBhcnNlSW50KChjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoaixudWxsKXx8e21hcmdpblJpZ2h0OjB9KS5tYXJnaW5SaWdodCwxMCl8fDApPT09MCk7aWYoYS5hdHRhY2hFdmVudClmb3IodCBpbntzdWJtaXQ6MSxjaGFuZ2U6MSxmb2N1c2luOjF9KXM9Im9uIit0LHU9cyBpbiBhLHV8fChhLnNldEF0dHJpYnV0ZShzLCJyZXR1cm47IiksdT10eXBlb2YgYVtzXT09ImZ1bmN0aW9uIiksa1t0KyJCdWJibGVzIl09dTtmKGZ1bmN0aW9uKCl7dmFyIGEsYixkLGUsZyxoLGk9MSxqPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7bWFyZ2luOjA7IixsPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MDsiLG49InN0eWxlPSciK2orImJvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7JyIscD0iPGRpdiAiK24rIj48ZGl2PjwvZGl2PjwvZGl2PiIrIjx0YWJsZSAiK24rIiBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPiIrIjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IjttPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTshbXx8KGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxhLnN0eWxlLmNzc1RleHQ9bCsid2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9wOjA7bWFyZ2luLXRvcDoiK2krInB4IixtLmluc2VydEJlZm9yZShhLG0uZmlyc3RDaGlsZCksbz1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG8uc3R5bGUuY3NzVGV4dD1qK2wsby5pbm5lckhUTUw9cCxhLmFwcGVuZENoaWxkKG8pLGI9by5maXJzdENoaWxkLGQ9Yi5maXJzdENoaWxkLGc9Yi5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQsaD17ZG9lc05vdEFkZEJvcmRlcjpkLm9mZnNldFRvcCE9PTUsZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHM6Zy5vZmZzZXRUb3A9PT01fSxkLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsZC5zdHlsZS50b3A9IjIwcHgiLGguZml4ZWRQb3NpdGlvbj1kLm9mZnNldFRvcD09PTIwfHxkLm9mZnNldFRvcD09PTE1LGQuc3R5bGUucG9zaXRpb249ZC5zdHlsZS50b3A9IiIsYi5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixiLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsaC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGU9ZC5vZmZzZXRUb3A9PT0tNSxoLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PW0ub2Zmc2V0VG9wIT09aSxtLnJlbW92ZUNoaWxkKGEpLG89YT1udWxsLGYuZXh0ZW5kKGssaCkpfSksby5pbm5lckhUTUw9IiIsbi5yZW1vdmVDaGlsZChvKSxvPWw9Zz1oPW09aj1hPWk9bnVsbDtyZXR1cm4ga30oKSxmLmJveE1vZGVsPWYuc3VwcG9ydC5ib3hNb2RlbDt2YXIgaj0vXig/Olx7LipcfXxcWy4qXF0pJC8saz0vKFtBLVpdKS9nO2YuZXh0ZW5kKHtjYWNoZTp7fSx1dWlkOjAsZXhwYW5kbzoialF1ZXJ5IisoZi5mbi5qcXVlcnkrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9EYXRhOntlbWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsYXBwbGV0OiEwfSxoYXNEYXRhOmZ1bmN0aW9uKGEpe2E9YS5ub2RlVHlwZT9mLmNhY2hlW2FbZi5leHBhbmRvXV06YVtmLmV4cGFuZG9dO3JldHVybiEhYSYmIW0oYSl9LGRhdGE6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBnLGgsaSxqPWYuZXhwYW5kbyxrPXR5cGVvZiBjPT0ic3RyaW5nIixsPWEubm9kZVR5cGUsbT1sP2YuY2FjaGU6YSxuPWw/YVtmLmV4cGFuZG9dOmFbZi5leHBhbmRvXSYmZi5leHBhbmRvLG89Yz09PSJldmVudHMiO2lmKCghbnx8IW1bbl18fCFvJiYhZSYmIW1bbl0uZGF0YSkmJmsmJmQ9PT1iKXJldHVybjtufHwobD9hW2YuZXhwYW5kb109bj0rK2YudXVpZDpuPWYuZXhwYW5kbyksbVtuXXx8KG1bbl09e30sbHx8KG1bbl0udG9KU09OPWYubm9vcCkpO2lmKHR5cGVvZiBjPT0ib2JqZWN0Inx8dHlwZW9mIGM9PSJmdW5jdGlvbiIpZT9tW25dPWYuZXh0ZW5kKG1bbl0sYyk6bVtuXS5kYXRhPWYuZXh0ZW5kKG1bbl0uZGF0YSxjKTtnPWg9bVtuXSxlfHwoaC5kYXRhfHwoaC5kYXRhPXt9KSxoPWguZGF0YSksZCE9PWImJihoW2YuY2FtZWxDYXNlKGMpXT1kKTtpZihvJiYhaFtjXSlyZXR1cm4gZy5ldmVudHM7az8oaT1oW2NdLGk9PW51bGwmJihpPWhbZi5jYW1lbENhc2UoYyldKSk6aT1oO3JldHVybiBpfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhLGIsYyl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBkLGUsZyxoPWYuZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP2YuY2FjaGU6YSxrPWk/YVtmLmV4cGFuZG9dOmYuZXhwYW5kbztpZighaltrXSlyZXR1cm47aWYoYil7ZD1jP2pba106altrXS5kYXRhO2lmKGQpe2YuaXNBcnJheShiKT9iPWI6YiBpbiBkP2I9W2JdOihiPWYuY2FtZWxDYXNlKGIpLGIgaW4gZD9iPVtiXTpiPWIuc3BsaXQoIiAiKSk7Zm9yKGU9MCxnPWIubGVuZ3RoO2U8ZztlKyspZGVsZXRlIGRbYltlXV07aWYoIShjP206Zi5pc0VtcHR5T2JqZWN0KShkKSlyZXR1cm59fWlmKCFjKXtkZWxldGUgaltrXS5kYXRhO2lmKCFtKGpba10pKXJldHVybn1mLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8IWouc2V0SW50ZXJ2YWw/ZGVsZXRlIGpba106altrXT1udWxsLGkmJihmLnN1cHBvcnQuZGVsZXRlRXhwYW5kbz9kZWxldGUgYVtmLmV4cGFuZG9dOmEucmVtb3ZlQXR0cmlidXRlP2EucmVtb3ZlQXR0cmlidXRlKGYuZXhwYW5kbyk6YVtmLmV4cGFuZG9dPW51bGwpfX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRhdGEoYSxiLGMsITApfSxhY2NlcHREYXRhOmZ1bmN0aW9uKGEpe2lmKGEubm9kZU5hbWUpe3ZhciBiPWYubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoYilyZXR1cm4gYiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn1yZXR1cm4hMH19KSxmLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGMpe3ZhciBkLGUsZyxoPW51bGw7aWYodHlwZW9mIGE9PSJ1bmRlZmluZWQiKXtpZih0aGlzLmxlbmd0aCl7aD1mLmRhdGEodGhpc1swXSk7aWYodGhpc1swXS5ub2RlVHlwZT09PTEmJiFmLl9kYXRhKHRoaXNbMF0sInBhcnNlZEF0dHJzIikpe2U9dGhpc1swXS5hdHRyaWJ1dGVzO2Zvcih2YXIgaT0wLGo9ZS5sZW5ndGg7aTxqO2krKylnPWVbaV0ubmFtZSxnLmluZGV4T2YoImRhdGEtIik9PT0wJiYoZz1mLmNhbWVsQ2FzZShnLnN1YnN0cmluZyg1KSksbCh0aGlzWzBdLGcsaFtnXSkpO2YuX2RhdGEodGhpc1swXSwicGFyc2VkQXR0cnMiLCEwKX19cmV0dXJuIGh9aWYodHlwZW9mIGE9PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRhdGEodGhpcyxhKX0pO2Q9YS5zcGxpdCgiLiIpLGRbMV09ZFsxXT8iLiIrZFsxXToiIjtpZihjPT09Yil7aD10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitkWzFdKyIhIixbZFswXV0pLGg9PT1iJiZ0aGlzLmxlbmd0aCYmKGg9Zi5kYXRhKHRoaXNbMF0sYSksaD1sKHRoaXNbMF0sYSxoKSk7cmV0dXJuIGg9PT1iJiZkWzFdP3RoaXMuZGF0YShkWzBdKTpofXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mKHRoaXMpLGU9W2RbMF0sY107Yi50cmlnZ2VySGFuZGxlcigic2V0RGF0YSIrZFsxXSsiISIsZSksZi5kYXRhKHRoaXMsYSxjKSxiLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitkWzFdKyIhIixlKX0pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLGYuZXh0ZW5kKHtfbWFyazpmdW5jdGlvbihhLGIpe2EmJihiPShifHwiZngiKSsibWFyayIsZi5fZGF0YShhLGIsKGYuX2RhdGEoYSxiKXx8MCkrMSkpfSxfdW5tYXJrOmZ1bmN0aW9uKGEsYixjKXthIT09ITAmJihjPWIsYj1hLGE9ITEpO2lmKGIpe2M9Y3x8ImZ4Ijt2YXIgZD1jKyJtYXJrIixlPWE/MDooZi5fZGF0YShiLGQpfHwxKS0xO2U/Zi5fZGF0YShiLGQsZSk6KGYucmVtb3ZlRGF0YShiLGQsITApLG4oYixjLCJtYXJrIikpfX0scXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGEpe2I9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1mLl9kYXRhKGEsYiksYyYmKCFkfHxmLmlzQXJyYXkoYyk/ZD1mLl9kYXRhKGEsYixmLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKTtyZXR1cm4gZHx8W119fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPWYucXVldWUoYSxiKSxkPWMuc2hpZnQoKSxlPXt9O2Q9PT0iaW5wcm9ncmVzcyImJihkPWMuc2hpZnQoKSksZCYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxmLl9kYXRhKGEsYisiLnJ1biIsZSksZC5jYWxsKGEsZnVuY3Rpb24oKXtmLmRlcXVldWUoYSxiKX0sZSkpLGMubGVuZ3RofHwoZi5yZW1vdmVEYXRhKGEsYisicXVldWUgIitiKyIucnVuIiwhMCksbihhLGIsInF1ZXVlIikpfX0pLGYuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGMpe3R5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPSJmeCIpO2lmKGM9PT1iKXJldHVybiBmLnF1ZXVlKHRoaXNbMF0sYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYucXVldWUodGhpcyxhLGMpO2E9PT0iZngiJiZiWzBdIT09ImlucHJvZ3Jlc3MiJiZmLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9Zi5meD9mLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9c2V0VGltZW91dChiLGEpO2Muc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChkKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIG0oKXstLWh8fGQucmVzb2x2ZVdpdGgoZSxbZV0pfXR5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPWIpLGE9YXx8ImZ4Ijt2YXIgZD1mLkRlZmVycmVkKCksZT10aGlzLGc9ZS5sZW5ndGgsaD0xLGk9YSsiZGVmZXIiLGo9YSsicXVldWUiLGs9YSsibWFyayIsbDt3aGlsZShnLS0paWYobD1mLmRhdGEoZVtnXSxpLGIsITApfHwoZi5kYXRhKGVbZ10saixiLCEwKXx8Zi5kYXRhKGVbZ10sayxiLCEwKSkmJmYuZGF0YShlW2ddLGksZi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksITApKWgrKyxsLmFkZChtKTttKCk7cmV0dXJuIGQucHJvbWlzZSgpfX0pO3ZhciBvPS9bXG5cdFxyXS9nLHA9L1xzKy8scT0vXHIvZyxyPS9eKD86YnV0dG9ufGlucHV0KSQvaSxzPS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLHQ9L15hKD86cmVhKT8kL2ksdT0vXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSx2PWYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUsdyx4LHk7Zi5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGIsITAsZi5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5yZW1vdmVBdHRyKHRoaXMsYSl9KX0scHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGEsYiwhMCxmLnByb3ApfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe2E9Zi5wcm9wRml4W2FdfHxhO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1thXT1iLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGMpe319KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZyxoLGk7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihhJiZ0eXBlb2YgYT09InN0cmluZyIpe2I9YS5zcGxpdChwKTtmb3IoYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl7ZT10aGlzW2NdO2lmKGUubm9kZVR5cGU9PT0xKWlmKCFlLmNsYXNzTmFtZSYmYi5sZW5ndGg9PT0xKWUuY2xhc3NOYW1lPWE7ZWxzZXtnPSIgIitlLmNsYXNzTmFtZSsiICI7Zm9yKGg9MCxpPWIubGVuZ3RoO2g8aTtoKyspfmcuaW5kZXhPZigiICIrYltoXSsiICIpfHwoZys9YltoXSsiICIpO2UuY2xhc3NOYW1lPWYudHJpbShnKX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZyxoLGksajtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nInx8YT09PWIpe2M9KGF8fCIiKS5zcGxpdChwKTtmb3IoZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO2lmKGcubm9kZVR5cGU9PT0xJiZnLmNsYXNzTmFtZSlpZihhKXtoPSgiICIrZy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKG8sIiAiKTtmb3IoaT0wLGo9Yy5sZW5ndGg7aTxqO2krKyloPWgucmVwbGFjZSgiICIrY1tpXSsiICIsIiAiKTtnLmNsYXNzTmFtZT1mLnRyaW0oaCl9ZWxzZSBnLmNsYXNzTmFtZT0iIn19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEsZD10eXBlb2YgYj09ImJvb2xlYW4iO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe2YodGhpcykudG9nZ2xlQ2xhc3MoYS5jYWxsKHRoaXMsYyx0aGlzLmNsYXNzTmFtZSxiKSxiKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihjPT09InN0cmluZyIpe3ZhciBlLGc9MCxoPWYodGhpcyksaT1iLGo9YS5zcGxpdChwKTt3aGlsZShlPWpbZysrXSlpPWQ/aTohaC5oYXNDbGFzcyhlKSxoW2k/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlmKGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29sZWFuIil0aGlzLmNsYXNzTmFtZSYmZi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGI9IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Zvcig7YzxkO2MrKylpZih0aGlzW2NdLm5vZGVUeXBlPT09MSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobywiICIpLmluZGV4T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZz10aGlzWzBdO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtpZihnKXtjPWYudmFsSG9va3NbZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXXx8Zi52YWxIb29rc1tnLnR5cGVdO2lmKGMmJiJnZXQiaW4gYyYmKGQ9Yy5nZXQoZywidmFsdWUiKSkhPT1iKXJldHVybiBkO2Q9Zy52YWx1ZTtyZXR1cm4gdHlwZW9mIGQ9PSJzdHJpbmciP2QucmVwbGFjZShxLCIiKTpkPT1udWxsPyIiOmR9cmV0dXJuIGJ9ZT1mLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihkKXt2YXIgZz1mKHRoaXMpLGg7aWYodGhpcy5ub2RlVHlwZT09PTEpe2U/aD1hLmNhbGwodGhpcyxkLGcudmFsKCkpOmg9YSxoPT1udWxsP2g9IiI6dHlwZW9mIGg9PSJudW1iZXIiP2grPSIiOmYuaXNBcnJheShoKSYmKGg9Zi5tYXAoaCxmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjphKyIifSkpLGM9Zi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldfHxmLnZhbEhvb2tzW3RoaXMudHlwZV07aWYoIWN8fCEoInNldCJpbiBjKXx8Yy5zZXQodGhpcyxoLCJ2YWx1ZSIpPT09Yil0aGlzLnZhbHVlPWh9fSl9fSksZi5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWJ8fGIuc3BlY2lmaWVkP2EudmFsdWU6YS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZz1hLnNlbGVjdGVkSW5kZXgsaD1bXSxpPWEub3B0aW9ucyxqPWEudHlwZT09PSJzZWxlY3Qtb25lIjtpZihnPDApcmV0dXJuIG51bGw7Yz1qP2c6MCxkPWo/ZysxOmkubGVuZ3RoO2Zvcig7YzxkO2MrKyl7ZT1pW2NdO2lmKGUuc2VsZWN0ZWQmJihmLnN1cHBvcnQub3B0RGlzYWJsZWQ/IWUuZGlzYWJsZWQ6ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFlLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFmLm5vZGVOYW1lKGUucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2I9ZihlKS52YWwoKTtpZihqKXJldHVybiBiO2gucHVzaChiKX19aWYoaiYmIWgubGVuZ3RoJiZpLmxlbmd0aClyZXR1cm4gZihpW2ddKS52YWwoKTtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5tYWtlQXJyYXkoYik7ZihhKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1mLmluQXJyYXkoZih0aGlzKS52YWwoKSxjKT49MH0pLGMubGVuZ3RofHwoYS5zZWxlY3RlZEluZGV4PS0xKTtyZXR1cm4gY319fSxhdHRyRm46e3ZhbDohMCxjc3M6ITAsaHRtbDohMCx0ZXh0OiEwLGRhdGE6ITAsd2lkdGg6ITAsaGVpZ2h0OiEwLG9mZnNldDohMH0sYXR0cjpmdW5jdGlvbihhLGMsZCxlKXt2YXIgZyxoLGksaj1hLm5vZGVUeXBlO2lmKCFhfHxqPT09M3x8aj09PTh8fGo9PT0yKXJldHVybiBiO2lmKGUmJmMgaW4gZi5hdHRyRm4pcmV0dXJuIGYoYSlbY10oZCk7aWYoISgiZ2V0QXR0cmlidXRlImluIGEpKXJldHVybiBmLnByb3AoYSxjLGQpO2k9aiE9PTF8fCFmLmlzWE1MRG9jKGEpLGkmJihjPWMudG9Mb3dlckNhc2UoKSxoPWYuYXR0ckhvb2tzW2NdfHwodS50ZXN0KGMpP3g6dykpO2lmKGQhPT1iKXtpZihkPT09bnVsbCl7Zi5yZW1vdmVBdHRyKGEsYyk7cmV0dXJuIGJ9aWYoaCYmInNldCJpbiBoJiZpJiYoZz1oLnNldChhLGQsYykpIT09YilyZXR1cm4gZzthLnNldEF0dHJpYnV0ZShjLCIiK2QpO3JldHVybiBkfWlmKGgmJiJnZXQiaW4gaCYmaSYmKGc9aC5nZXQoYSxjKSkhPT1udWxsKXJldHVybiBnO2c9YS5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIGc9PT1udWxsP2I6Z30scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxnLGg9MDtpZihhLm5vZGVUeXBlPT09MSl7ZD0oYnx8IiIpLnNwbGl0KHApLGc9ZC5sZW5ndGg7Zm9yKDtoPGc7aCsrKWU9ZFtoXS50b0xvd2VyQ2FzZSgpLGM9Zi5wcm9wRml4W2VdfHxlLGYuYXR0cihhLGUsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHY/ZTpjKSx1LnRlc3QoZSkmJmMgaW4gYSYmKGFbY109ITEpfX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZihyLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSlmLmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKTtlbHNlIGlmKCFmLnN1cHBvcnQucmFkaW9WYWx1ZSYmYj09PSJyYWRpbyImJmYubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTthLnNldEF0dHJpYnV0ZSgidHlwZSIsYiksYyYmKGEudmFsdWU9Yyk7cmV0dXJuIGJ9fX0sdmFsdWU6e2dldDpmdW5jdGlvbihhLGIpe2lmKHcmJmYubm9kZU5hbWUoYSwiYnV0dG9uIikpcmV0dXJuIHcuZ2V0KGEsYik7cmV0dXJuIGIgaW4gYT9hLnZhbHVlOm51bGx9LHNldDpmdW5jdGlvbihhLGIsYyl7aWYodyYmZi5ub2RlTmFtZShhLCJidXR0b24iKSlyZXR1cm4gdy5zZXQoYSxiLGMpO2EudmFsdWU9Yn19fSxwcm9wRml4Ont0YWJpbmRleDoidGFiSW5kZXgiLHJlYWRvbmx5OiJyZWFkT25seSIsImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIsY2VsbHBhZGRpbmc6ImNlbGxQYWRkaW5nIixyb3dzcGFuOiJyb3dTcGFuIixjb2xzcGFuOiJjb2xTcGFuIix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIixjb250ZW50ZWRpdGFibGU6ImNvbnRlbnRFZGl0YWJsZSJ9LHByb3A6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGcsaCxpPWEubm9kZVR5cGU7aWYoIWF8fGk9PT0zfHxpPT09OHx8aT09PTIpcmV0dXJuIGI7aD1pIT09MXx8IWYuaXNYTUxEb2MoYSksaCYmKGM9Zi5wcm9wRml4W2NdfHxjLGc9Zi5wcm9wSG9va3NbY10pO3JldHVybiBkIT09Yj9nJiYic2V0ImluIGcmJihlPWcuc2V0KGEsZCxjKSkhPT1iP2U6YVtjXT1kOmcmJiJnZXQiaW4gZyYmKGU9Zy5nZXQoYSxjKSkhPT1udWxsP2U6YVtjXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBjPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTtyZXR1cm4gYyYmYy5zcGVjaWZpZWQ/cGFyc2VJbnQoYy52YWx1ZSwxMCk6cy50ZXN0KGEubm9kZU5hbWUpfHx0LnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOmJ9fX19KSxmLmF0dHJIb29rcy50YWJpbmRleD1mLnByb3BIb29rcy50YWJJbmRleCx4PXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlPWYucHJvcChhLGMpO3JldHVybiBlPT09ITB8fHR5cGVvZiBlIT0iYm9vbGVhbiImJihkPWEuZ2V0QXR0cmlidXRlTm9kZShjKSkmJmQubm9kZVZhbHVlIT09ITE/Yy50b0xvd2VyQ2FzZSgpOmJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7Yj09PSExP2YucmVtb3ZlQXR0cihhLGMpOihkPWYucHJvcEZpeFtjXXx8YyxkIGluIGEmJihhW2RdPSEwKSxhLnNldEF0dHJpYnV0ZShjLGMudG9Mb3dlckNhc2UoKSkpO3JldHVybiBjfX0sdnx8KHk9e25hbWU6ITAsaWQ6ITB9LHc9Zi52YWxIb29rcy5idXR0b249e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkO2Q9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkJiYoeVtjXT9kLm5vZGVWYWx1ZSE9PSIiOmQuc3BlY2lmaWVkKT9kLm5vZGVWYWx1ZTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEuZ2V0QXR0cmlidXRlTm9kZShkKTtlfHwoZT1jLmNyZWF0ZUF0dHJpYnV0ZShkKSxhLnNldEF0dHJpYnV0ZU5vZGUoZSkpO3JldHVybiBlLm5vZGVWYWx1ZT1iKyIifX0sZi5hdHRySG9va3MudGFiaW5kZXguc2V0PXcuc2V0LGYuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtmLmF0dHJIb29rc1tiXT1mLmV4dGVuZChmLmF0dHJIb29rc1tiXSx7c2V0OmZ1bmN0aW9uKGEsYyl7aWYoYz09PSIiKXthLnNldEF0dHJpYnV0ZShiLCJhdXRvIik7cmV0dXJuIGN9fX0pfSksZi5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtnZXQ6dy5nZXQsc2V0OmZ1bmN0aW9uKGEsYixjKXtiPT09IiImJihiPSJmYWxzZSIpLHcuc2V0KGEsYixjKX19KSxmLnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWR8fGYuZWFjaChbImhyZWYiLCJzcmMiLCJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYyl7Zi5hdHRySG9va3NbY109Zi5leHRlbmQoZi5hdHRySG9va3NbY10se2dldDpmdW5jdGlvbihhKXt2YXIgZD1hLmdldEF0dHJpYnV0ZShjLDIpO3JldHVybiBkPT09bnVsbD9iOmR9fSl9KSxmLnN1cHBvcnQuc3R5bGV8fChmLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKXx8Yn0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD0iIitifX0pLGYuc3VwcG9ydC5vcHRTZWxlY3RlZHx8KGYucHJvcEhvb2tzLnNlbGVjdGVkPWYuZXh0ZW5kKGYucHJvcEhvb2tzLnNlbGVjdGVkLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO2ImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCk7cmV0dXJuIG51bGx9fSkpLGYuc3VwcG9ydC5lbmN0eXBlfHwoZi5wcm9wRml4LmVuY3R5cGU9ImVuY29kaW5nIiksZi5zdXBwb3J0LmNoZWNrT258fGYuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe2YudmFsSG9va3NbdGhpc109e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoInZhbHVlIik9PT1udWxsPyJvbiI6YS52YWx1ZX19fSksZi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT1mLmV4dGVuZChmLnZhbEhvb2tzW3RoaXNdLHtzZXQ6ZnVuY3Rpb24oYSxiKXtpZihmLmlzQXJyYXkoYikpcmV0dXJuIGEuY2hlY2tlZD1mLmluQXJyYXkoZihhKS52YWwoKSxiKT49MH19KX0pO3ZhciB6PS9cLiguKikkLyxBPS9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSxCPS9cLi9nLEM9LyAvZyxEPS9bXlx3XHMufGBdL2csRT0vXihbXlwuXSopPyg/OlwuKC4rKSk/JC8sRj0vXGJob3ZlcihcLlxTKyk/LyxHPS9ea2V5LyxIPS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxJPS9eKFx3KikoPzojKFtcd1wtXSspKT8oPzpcLihbXHdcLV0rKSk/JC8sSj1mdW5jdGlvbihhKXt2YXIgYj1JLmV4ZWMoYSk7YiYmCihiWzFdPShiWzFdfHwiIikudG9Mb3dlckNhc2UoKSxiWzNdPWJbM10mJm5ldyBSZWdFeHAoIig/Ol58XFxzKSIrYlszXSsiKD86XFxzfCQpIikpO3JldHVybiBifSxLPWZ1bmN0aW9uKGEsYil7cmV0dXJuKCFiWzFdfHxhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iWzFdKSYmKCFiWzJdfHxhLmlkPT09YlsyXSkmJighYlszXXx8YlszXS50ZXN0KGEuY2xhc3NOYW1lKSl9LEw9ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZXZlbnQuc3BlY2lhbC5ob3Zlcj9hOmEucmVwbGFjZShGLCJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIil9O2YuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGMsZCxlLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scCxxLHIscztpZighKGEubm9kZVR5cGU9PT0zfHxhLm5vZGVUeXBlPT09OHx8IWN8fCFkfHwhKGg9Zi5fZGF0YShhKSkpKXtkLmhhbmRsZXImJihwPWQsZD1wLmhhbmRsZXIpLGQuZ3VpZHx8KGQuZ3VpZD1mLmd1aWQrKyksaj1oLmV2ZW50cyxqfHwoaC5ldmVudHM9aj17fSksaT1oLmhhbmRsZSxpfHwoaC5oYW5kbGU9aT1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGYhPSJ1bmRlZmluZWQiJiYoIWF8fGYuZXZlbnQudHJpZ2dlcmVkIT09YS50eXBlKT9mLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGkuZWxlbSxhcmd1bWVudHMpOmJ9LGkuZWxlbT1hKSxjPUwoYykuc3BsaXQoIiAiKTtmb3Ioaz0wO2s8Yy5sZW5ndGg7aysrKXtsPUUuZXhlYyhjW2tdKXx8W10sbT1sWzFdLG49KGxbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxzPWYuZXZlbnQuc3BlY2lhbFttXXx8e30sbT0oZz9zLmRlbGVnYXRlVHlwZTpzLmJpbmRUeXBlKXx8bSxzPWYuZXZlbnQuc3BlY2lhbFttXXx8e30sbz1mLmV4dGVuZCh7dHlwZTptLG9yaWdUeXBlOmxbMV0sZGF0YTplLGhhbmRsZXI6ZCxndWlkOmQuZ3VpZCxzZWxlY3RvcjpnLG5hbWVzcGFjZTpuLmpvaW4oIi4iKX0scCksZyYmKG8ucXVpY2s9SihnKSwhby5xdWljayYmZi5leHByLm1hdGNoLlBPUy50ZXN0KGcpJiYoby5pc1Bvc2l0aW9uYWw9ITApKSxyPWpbbV07aWYoIXIpe3I9alttXT1bXSxyLmRlbGVnYXRlQ291bnQ9MDtpZighcy5zZXR1cHx8cy5zZXR1cC5jYWxsKGEsZSxuLGkpPT09ITEpYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihtLGksITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIittLGkpfXMuYWRkJiYocy5hZGQuY2FsbChhLG8pLG8uaGFuZGxlci5ndWlkfHwoby5oYW5kbGVyLmd1aWQ9ZC5ndWlkKSksZz9yLnNwbGljZShyLmRlbGVnYXRlQ291bnQrKywwLG8pOnIucHVzaChvKSxmLmV2ZW50Lmdsb2JhbFttXT0hMH1hPW51bGx9fSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWYuaGFzRGF0YShhKSYmZi5fZGF0YShhKSxnLGgsaSxqLGssbCxtLG4sbyxwLHE7aWYoISFlJiYhIShtPWUuZXZlbnRzKSl7Yj1MKGJ8fCIiKS5zcGxpdCgiICIpO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe2g9RS5leGVjKGJbZ10pfHxbXSxpPWhbMV0saj1oWzJdO2lmKCFpKXtqPWo/Ii4iK2o6IiI7Zm9yKGwgaW4gbSlmLmV2ZW50LnJlbW92ZShhLGwraixjLGQpO3JldHVybn1uPWYuZXZlbnQuc3BlY2lhbFtpXXx8e30saT0oZD9uLmRlbGVnYXRlVHlwZTpuLmJpbmRUeXBlKXx8aSxwPW1baV18fFtdLGs9cC5sZW5ndGgsaj1qP25ldyBSZWdFeHAoIihefFxcLikiK2ouc3BsaXQoIi4iKS5zb3J0KCkuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIik6bnVsbDtpZihjfHxqfHxkfHxuLnJlbW92ZSlmb3IobD0wO2w8cC5sZW5ndGg7bCsrKXtxPXBbbF07aWYoIWN8fGMuZ3VpZD09PXEuZ3VpZClpZighanx8ai50ZXN0KHEubmFtZXNwYWNlKSlpZighZHx8ZD09PXEuc2VsZWN0b3J8fGQ9PT0iKioiJiZxLnNlbGVjdG9yKXAuc3BsaWNlKGwtLSwxKSxxLnNlbGVjdG9yJiZwLmRlbGVnYXRlQ291bnQtLSxuLnJlbW92ZSYmbi5yZW1vdmUuY2FsbChhLHEpfWVsc2UgcC5sZW5ndGg9MDtwLmxlbmd0aD09PTAmJmshPT1wLmxlbmd0aCYmKCghbi50ZWFyZG93bnx8bi50ZWFyZG93bi5jYWxsKGEsaik9PT0hMSkmJmYucmVtb3ZlRXZlbnQoYSxpLGUuaGFuZGxlKSxkZWxldGUgbVtpXSl9Zi5pc0VtcHR5T2JqZWN0KG0pJiYobz1lLmhhbmRsZSxvJiYoby5lbGVtPW51bGwpLGYucmVtb3ZlRGF0YShhLFsiZXZlbnRzIiwiaGFuZGxlIl0sITApKX19LGN1c3RvbUV2ZW50OntnZXREYXRhOiEwLHNldERhdGE6ITAsY2hhbmdlRGF0YTohMH0sdHJpZ2dlcjpmdW5jdGlvbihjLGQsZSxnKXtpZighZXx8ZS5ub2RlVHlwZSE9PTMmJmUubm9kZVR5cGUhPT04KXt2YXIgaD1jLnR5cGV8fGMsaT1bXSxqLGssbCxtLG4sbyxwLHEscixzO2guaW5kZXhPZigiISIpPj0wJiYoaD1oLnNsaWNlKDAsLTEpLGs9ITApLGguaW5kZXhPZigiLiIpPj0wJiYoaT1oLnNwbGl0KCIuIiksaD1pLnNoaWZ0KCksaS5zb3J0KCkpO2lmKCghZXx8Zi5ldmVudC5jdXN0b21FdmVudFtoXSkmJiFmLmV2ZW50Lmdsb2JhbFtoXSlyZXR1cm47Yz10eXBlb2YgYz09Im9iamVjdCI/Y1tmLmV4cGFuZG9dP2M6bmV3IGYuRXZlbnQoaCxjKTpuZXcgZi5FdmVudChoKSxjLnR5cGU9aCxjLmlzVHJpZ2dlcj0hMCxjLmV4Y2x1c2l2ZT1rLGMubmFtZXNwYWNlPWkuam9pbigiLiIpLGMubmFtZXNwYWNlX3JlPWMubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2kuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIik6bnVsbCxvPWguaW5kZXhPZigiOiIpPDA/Im9uIitoOiIiLChnfHwhZSkmJmMucHJldmVudERlZmF1bHQoKTtpZighZSl7aj1mLmNhY2hlO2ZvcihsIGluIGopaltsXS5ldmVudHMmJmpbbF0uZXZlbnRzW2hdJiZmLmV2ZW50LnRyaWdnZXIoYyxkLGpbbF0uaGFuZGxlLmVsZW0sITApO3JldHVybn1jLnJlc3VsdD1iLGMudGFyZ2V0fHwoYy50YXJnZXQ9ZSksZD1kIT1udWxsP2YubWFrZUFycmF5KGQpOltdLGQudW5zaGlmdChjKSxwPWYuZXZlbnQuc3BlY2lhbFtoXXx8e307aWYocC50cmlnZ2VyJiZwLnRyaWdnZXIuYXBwbHkoZSxkKT09PSExKXJldHVybjtyPVtbZSxwLmJpbmRUeXBlfHxoXV07aWYoIWcmJiFwLm5vQnViYmxlJiYhZi5pc1dpbmRvdyhlKSl7cz1wLmRlbGVnYXRlVHlwZXx8aCxuPW51bGw7Zm9yKG09ZS5wYXJlbnROb2RlO207bT1tLnBhcmVudE5vZGUpci5wdXNoKFttLHNdKSxuPW07biYmbj09PWUub3duZXJEb2N1bWVudCYmci5wdXNoKFtuLmRlZmF1bHRWaWV3fHxuLnBhcmVudFdpbmRvd3x8YSxzXSl9Zm9yKGw9MDtsPHIubGVuZ3RoO2wrKyl7bT1yW2xdWzBdLGMudHlwZT1yW2xdWzFdLHE9KGYuX2RhdGEobSwiZXZlbnRzIil8fHt9KVtjLnR5cGVdJiZmLl9kYXRhKG0sImhhbmRsZSIpLHEmJnEuYXBwbHkobSxkKSxxPW8mJm1bb10scSYmZi5hY2NlcHREYXRhKG0pJiZxLmFwcGx5KG0sZCk7aWYoYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrfWMudHlwZT1oLGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fCghcC5fZGVmYXVsdHx8cC5fZGVmYXVsdC5hcHBseShlLm93bmVyRG9jdW1lbnQsZCk9PT0hMSkmJihoIT09ImNsaWNrInx8IWYubm9kZU5hbWUoZSwiYSIpKSYmZi5hY2NlcHREYXRhKGUpJiZvJiZlW2hdJiYoaCE9PSJmb2N1cyImJmghPT0iYmx1ciJ8fGMudGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiFmLmlzV2luZG93KGUpJiYobj1lW29dLG4mJihlW29dPW51bGwpLGYuZXZlbnQudHJpZ2dlcmVkPWgsZVtoXSgpLGYuZXZlbnQudHJpZ2dlcmVkPWIsbiYmKGVbb109bikpO3JldHVybiBjLnJlc3VsdH19LGRpc3BhdGNoOmZ1bmN0aW9uKGMpe2M9Zi5ldmVudC5maXgoY3x8YS5ldmVudCk7dmFyIGQ9KGYuX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtjLnR5cGVdfHxbXSxlPWQuZGVsZWdhdGVDb3VudCxnPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApLGg9IWMuZXhjbHVzaXZlJiYhYy5uYW1lc3BhY2UsaT0oZi5ldmVudC5zcGVjaWFsW2MudHlwZV18fHt9KS5oYW5kbGUsaj1bXSxrLGwsbSxuLG8scCxxLHIscyx0LHU7Z1swXT1jLGMuZGVsZWdhdGVUYXJnZXQ9dGhpcztpZihlJiYhYy50YXJnZXQuZGlzYWJsZWQmJighYy5idXR0b258fGMudHlwZSE9PSJjbGljayIpKWZvcihtPWMudGFyZ2V0O20hPXRoaXM7bT1tLnBhcmVudE5vZGV8fHRoaXMpe289e30scT1bXTtmb3Ioaz0wO2s8ZTtrKyspcj1kW2tdLHM9ci5zZWxlY3Rvcix0PW9bc10sci5pc1Bvc2l0aW9uYWw/dD0odHx8KG9bc109ZihzKSkpLmluZGV4KG0pPj0wOnQ9PT1iJiYodD1vW3NdPXIucXVpY2s/SyhtLHIucXVpY2spOmYobSkuaXMocykpLHQmJnEucHVzaChyKTtxLmxlbmd0aCYmai5wdXNoKHtlbGVtOm0sbWF0Y2hlczpxfSl9ZC5sZW5ndGg+ZSYmai5wdXNoKHtlbGVtOnRoaXMsbWF0Y2hlczpkLnNsaWNlKGUpfSk7Zm9yKGs9MDtrPGoubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2srKyl7cD1qW2tdLGMuY3VycmVudFRhcmdldD1wLmVsZW07Zm9yKGw9MDtsPHAubWF0Y2hlcy5sZW5ndGgmJiFjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7bCsrKXtyPXAubWF0Y2hlc1tsXTtpZihofHwhYy5uYW1lc3BhY2UmJiFyLm5hbWVzcGFjZXx8Yy5uYW1lc3BhY2VfcmUmJmMubmFtZXNwYWNlX3JlLnRlc3Qoci5uYW1lc3BhY2UpKWMuZGF0YT1yLmRhdGEsYy5oYW5kbGVPYmo9cixuPShpfHxyLmhhbmRsZXIpLmFwcGx5KHAuZWxlbSxnKSxuIT09YiYmKGMucmVzdWx0PW4sbj09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpKX19cmV0dXJuIGMucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7YS53aGljaD09bnVsbCYmKGEud2hpY2g9Yi5jaGFyQ29kZSE9bnVsbD9iLmNoYXJDb2RlOmIua2V5Q29kZSk7cmV0dXJuIGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50IHdoZWVsRGVsdGEiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsZCl7dmFyIGUsZixnLGg9ZC5idXR0b24saT1kLmZyb21FbGVtZW50O2EucGFnZVg9PW51bGwmJmQuY2xpZW50WCE9bnVsbCYmKGU9YS50YXJnZXQub3duZXJEb2N1bWVudHx8YyxmPWUuZG9jdW1lbnRFbGVtZW50LGc9ZS5ib2R5LGEucGFnZVg9ZC5jbGllbnRYKyhmJiZmLnNjcm9sbExlZnR8fGcmJmcuc2Nyb2xsTGVmdHx8MCktKGYmJmYuY2xpZW50TGVmdHx8ZyYmZy5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWQuY2xpZW50WSsoZiYmZi5zY3JvbGxUb3B8fGcmJmcuc2Nyb2xsVG9wfHwwKS0oZiYmZi5jbGllbnRUb3B8fGcmJmcuY2xpZW50VG9wfHwwKSksIWEucmVsYXRlZFRhcmdldCYmaSYmKGEucmVsYXRlZFRhcmdldD1pPT09YS50YXJnZXQ/ZC50b0VsZW1lbnQ6aSksIWEud2hpY2gmJmghPT1iJiYoYS53aGljaD1oJjE/MTpoJjI/MzpoJjQ/MjowKTtyZXR1cm4gYX19LGZpeDpmdW5jdGlvbihhKXtpZihhW2YuZXhwYW5kb10pcmV0dXJuIGE7dmFyIGQsZSxnPWEsaD1mLmV2ZW50LmZpeEhvb2tzW2EudHlwZV18fHt9LGk9aC5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChoLnByb3BzKTp0aGlzLnByb3BzO2E9Zi5FdmVudChnKTtmb3IoZD1pLmxlbmd0aDtkOyllPWlbLS1kXSxhW2VdPWdbZV07YS50YXJnZXR8fChhLnRhcmdldD1nLnNyY0VsZW1lbnR8fGMpLGEudGFyZ2V0Lm5vZGVUeXBlPT09MyYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGEubWV0YUtleT09PWImJihhLm1ldGFLZXk9YS5jdHJsS2V5KTtyZXR1cm4gaC5maWx0ZXI/aC5maWx0ZXIoYSxnKTphfSxzcGVjaWFsOntyZWFkeTp7c2V0dXA6Zi5iaW5kUmVhZHl9LGZvY3VzOntkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4iLG5vQnViYmxlOiEwfSxibHVyOntkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0Iixub0J1YmJsZTohMH0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsYyl7Zi5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9Yyl9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7dGhpcy5vbmJlZm9yZXVubG9hZD09PWImJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWYuZXh0ZW5kKG5ldyBmLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7ZD9mLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOmYuZXZlbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LGYuZXZlbnQuaGFuZGxlPWYuZXZlbnQuZGlzcGF0Y2gsZi5yZW1vdmVFdmVudD1jLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXthLmRldGFjaEV2ZW50JiZhLmRldGFjaEV2ZW50KCJvbiIrYixjKX0sZi5FdmVudD1mdW5jdGlvbihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGYuRXZlbnQpKXJldHVybiBuZXcgZi5FdmVudChhLGIpO2EmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fGEucmV0dXJuVmFsdWU9PT0hMXx8YS5nZXRQcmV2ZW50RGVmYXVsdCYmYS5nZXRQcmV2ZW50RGVmYXVsdCgpP046TSk6dGhpcy50eXBlPWEsYiYmZi5leHRlbmQodGhpcyxiKSx0aGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8Zi5ub3coKSx0aGlzW2YuZXhwYW5kb109ITB9LGYuRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPU47dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50OyFhfHwoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6YS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9Tjt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7IWF8fChhLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKSxhLmNhbmNlbEJ1YmJsZT0hMCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9Tix0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6TSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpNLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOk19LGYuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7Zi5ldmVudC5zcGVjaWFsW2FdPWYuZXZlbnQuc3BlY2lhbFtiXT17ZGVsZWdhdGVUeXBlOmIsYmluZFR5cGU6YixoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWEucmVsYXRlZFRhcmdldCxkPWEuaGFuZGxlT2JqLGU9ZC5zZWxlY3RvcixnLGg7aWYoIWN8fGQub3JpZ1R5cGU9PT1hLnR5cGV8fGMhPT1iJiYhZi5jb250YWlucyhiLGMpKWc9YS50eXBlLGEudHlwZT1kLm9yaWdUeXBlLGg9ZC5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLnR5cGU9ZztyZXR1cm4gaH19fSksZi5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fChmLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe2lmKGYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO2YuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGM9YS50YXJnZXQsZD1mLm5vZGVOYW1lKGMsImlucHV0Iil8fGYubm9kZU5hbWUoYywiYnV0dG9uIik/Yy5mb3JtOmI7ZCYmIWQuX3N1Ym1pdF9hdHRhY2hlZCYmKGYuZXZlbnQuYWRkKGQsInN1Ym1pdC5fc3VibWl0IixmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJmYuZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGEsITApfSksZC5fc3VibWl0X2F0dGFjaGVkPSEwKX0pfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKGYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSksZi5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8fChmLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe2lmKEEudGVzdCh0aGlzLm5vZGVOYW1lKSl7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIilmLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXthLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLGYuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RfY2hhbmdlZCYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSxmLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCkpfSk7cmV0dXJuITF9Zi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7QS50ZXN0KGIubm9kZU5hbWUpJiYhYi5fY2hhbmdlX2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoYiwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNTaW11bGF0ZWQmJmYuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEsITApfSksYi5fY2hhbmdlX2F0dGFjaGVkPSEwKX0pfSxoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7aWYodGhpcyE9PWJ8fGEuaXNTaW11bGF0ZWR8fGEuaXNUcmlnZ2VyfHxiLnR5cGUhPT0icmFkaW8iJiZiLnR5cGUhPT0iY2hlY2tib3giKXJldHVybiBhLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtmLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpO3JldHVybiBBLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksZi5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHxmLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGQ9MCxlPWZ1bmN0aW9uKGEpe2YuZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxmLmV2ZW50LmZpeChhKSwhMCl9O2YuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXtkKys9PT0wJiZjLmFkZEV2ZW50TGlzdGVuZXIoYSxlLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLWQ9PT0wJiZjLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxlLCEwKX19fSksZi5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGEsYyxkLGUsZyl7dmFyIGgsaTtpZih0eXBlb2YgYT09Im9iamVjdCIpe3R5cGVvZiBjIT0ic3RyaW5nIiYmKGQ9YyxjPWIpO2ZvcihpIGluIGEpdGhpcy5vbihpLGMsZCxhW2ldLGcpO3JldHVybiB0aGlzfWQ9PW51bGwmJmU9PW51bGw/KGU9YyxkPWM9Yik6ZT09bnVsbCYmKHR5cGVvZiBjPT0ic3RyaW5nIj8oZT1kLGQ9Yik6KGU9ZCxkPWMsYz1iKSk7aWYoZT09PSExKWU9TTtlbHNlIGlmKCFlKXJldHVybiB0aGlzO2c9PT0xJiYoaD1lLGU9ZnVuY3Rpb24oYSl7ZigpLm9mZihhKTtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUuZ3VpZD1oLmd1aWR8fChoLmd1aWQ9Zi5ndWlkKyspKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5ldmVudC5hZGQodGhpcyxhLGUsZCxjKX0pfSxvbmU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24uY2FsbCh0aGlzLGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGMsZCl7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmope3ZhciBlPWEuaGFuZGxlT2JqO2YoYS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGUubmFtZXNwYWNlP2UudHlwZSsiLiIrZS5uYW1lc3BhY2U6ZS50eXBlLGUuc2VsZWN0b3IsZS5oYW5kbGVyKTtyZXR1cm4gdGhpc31pZih0eXBlb2YgYT09Im9iamVjdCIpe2Zvcih2YXIgZyBpbiBhKXRoaXMub2ZmKGcsYyxhW2ddKTtyZXR1cm4gdGhpc31pZihjPT09ITF8fHR5cGVvZiBjPT0iZnVuY3Rpb24iKWQ9YyxjPWI7ZD09PSExJiYoZD1NKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5ldmVudC5yZW1vdmUodGhpcyxhLGQsYyl9KX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGxpdmU6ZnVuY3Rpb24oYSxiLGMpe2YodGhpcy5jb250ZXh0KS5vbihhLHRoaXMuc2VsZWN0b3IsYixjKTtyZXR1cm4gdGhpc30sZGllOmZ1bmN0aW9uKGEsYil7Zih0aGlzLmNvbnRleHQpLm9mZihhLHRoaXMuc2VsZWN0b3J8fCIqKiIsYik7cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MT90aGlzLm9mZihhLCIqKiIpOnRoaXMub2ZmKGIsYSxjKX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7aWYodGhpc1swXSlyZXR1cm4gZi5ldmVudC50cmlnZ2VyKGEsYix0aGlzWzBdLCEwKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cyxjPWEuZ3VpZHx8Zi5ndWlkKyssZD0wLGU9ZnVuY3Rpb24oYyl7dmFyIGU9KGYuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtmLl9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCxlKzEpLGMucHJldmVudERlZmF1bHQoKTtyZXR1cm4gYltlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtlLmd1aWQ9Yzt3aGlsZShkPGIubGVuZ3RoKWJbZCsrXS5ndWlkPWM7cmV0dXJuIHRoaXMuY2xpY2soZSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pLGYuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09ZnVuY3Rpb24oYSxjKXtjPT1udWxsJiYoYz1hLGE9bnVsbCk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLmJpbmQoYixhLGMpOnRoaXMudHJpZ2dlcihiKX0sZi5hdHRyRm4mJihmLmF0dHJGbltiXT0hMCksRy50ZXN0KGIpJiYoZi5ldmVudC5maXhIb29rc1tiXT1mLmV2ZW50LmtleUhvb2tzKSxILnRlc3QoYikmJihmLmV2ZW50LmZpeEhvb2tzW2JdPWYuZXZlbnQubW91c2VIb29rcyl9KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHgoYSxiLGMsZSxmLGcpe2Zvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9ZVtoXTtpZihqKXt2YXIgaz0hMTtqPWpbYV07d2hpbGUoail7aWYoaltkXT09PWMpe2s9ZVtqLnNpenNldF07YnJlYWt9aWYoai5ub2RlVHlwZT09PTEpe2d8fChqW2RdPWMsai5zaXpzZXQ9aCk7aWYodHlwZW9mIGIhPSJzdHJpbmciKXtpZihqPT09Yil7az0hMDticmVha319ZWxzZSBpZihtLmZpbHRlcihiLFtqXSkubGVuZ3RoPjApe2s9ajticmVha319aj1qW2FdfWVbaF09a319fWZ1bmN0aW9uIHcoYSxiLGMsZSxmLGcpe2Zvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9ZVtoXTtpZihqKXt2YXIgaz0hMTtqPWpbYV07d2hpbGUoail7aWYoaltkXT09PWMpe2s9ZVtqLnNpenNldF07YnJlYWt9ai5ub2RlVHlwZT09PTEmJiFnJiYoaltkXT1jLGouc2l6c2V0PWgpO2lmKGoubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIpe2s9ajticmVha31qPWpbYV19ZVtoXT1rfX19dmFyIGE9LygoPzpcKCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXlxbXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZyxkPSJzaXpjYWNoZSIrKE1hdGgucmFuZG9tKCkrIiIpLnJlcGxhY2UoIi4iLCIiKSxlPTAsZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGg9ITEsaT0hMCxqPS9cXC9nLGs9L1xyXG4vZyxsPS9cVy87WzAsMF0uc29ydChmdW5jdGlvbigpe2k9ITE7cmV0dXJuIDB9KTt2YXIgbT1mdW5jdGlvbihiLGQsZSxmKXtlPWV8fFtdLGQ9ZHx8Yzt2YXIgaD1kO2lmKGQubm9kZVR5cGUhPT0xJiZkLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighYnx8dHlwZW9mIGIhPSJzdHJpbmciKXJldHVybiBlO3ZhciBpLGosayxsLG4scSxyLHQsdT0hMCx2PW0uaXNYTUwoZCksdz1bXSx4PWI7ZG97YS5leGVjKCIiKSxpPWEuZXhlYyh4KTtpZihpKXt4PWlbM10sdy5wdXNoKGlbMV0pO2lmKGlbMl0pe2w9aVszXTticmVha319fXdoaWxlKGkpO2lmKHcubGVuZ3RoPjEmJnAuZXhlYyhiKSlpZih3Lmxlbmd0aD09PTImJm8ucmVsYXRpdmVbd1swXV0paj15KHdbMF0rd1sxXSxkLGYpO2Vsc2V7aj1vLnJlbGF0aXZlW3dbMF1dP1tkXTptKHcuc2hpZnQoKSxkKTt3aGlsZSh3Lmxlbmd0aCliPXcuc2hpZnQoKSxvLnJlbGF0aXZlW2JdJiYoYis9dy5zaGlmdCgpKSxqPXkoYixqLGYpfWVsc2V7IWYmJncubGVuZ3RoPjEmJmQubm9kZVR5cGU9PT05JiYhdiYmby5tYXRjaC5JRC50ZXN0KHdbMF0pJiYhby5tYXRjaC5JRC50ZXN0KHdbdy5sZW5ndGgtMV0pJiYobj1tLmZpbmQody5zaGlmdCgpLGQsdiksZD1uLmV4cHI/bS5maWx0ZXIobi5leHByLG4uc2V0KVswXTpuLnNldFswXSk7aWYoZCl7bj1mP3tleHByOncucG9wKCksc2V0OnMoZil9Om0uZmluZCh3LnBvcCgpLHcubGVuZ3RoPT09MSYmKHdbMF09PT0ifiJ8fHdbMF09PT0iKyIpJiZkLnBhcmVudE5vZGU/ZC5wYXJlbnROb2RlOmQsdiksaj1uLmV4cHI/bS5maWx0ZXIobi5leHByLG4uc2V0KTpuLnNldCx3Lmxlbmd0aD4wP2s9cyhqKTp1PSExO3doaWxlKHcubGVuZ3RoKXE9dy5wb3AoKSxyPXEsby5yZWxhdGl2ZVtxXT9yPXcucG9wKCk6cT0iIixyPT1udWxsJiYocj1kKSxvLnJlbGF0aXZlW3FdKGsscix2KX1lbHNlIGs9dz1bXX1rfHwoaz1qKSxrfHxtLmVycm9yKHF8fGIpO2lmKGcuY2FsbChrKT09PSJbb2JqZWN0IEFycmF5XSIpaWYoIXUpZS5wdXNoLmFwcGx5KGUsayk7ZWxzZSBpZihkJiZkLm5vZGVUeXBlPT09MSlmb3IodD0wO2tbdF0hPW51bGw7dCsrKWtbdF0mJihrW3RdPT09ITB8fGtbdF0ubm9kZVR5cGU9PT0xJiZtLmNvbnRhaW5zKGQsa1t0XSkpJiZlLnB1c2goalt0XSk7ZWxzZSBmb3IodD0wO2tbdF0hPW51bGw7dCsrKWtbdF0mJmtbdF0ubm9kZVR5cGU9PT0xJiZlLnB1c2goalt0XSk7ZWxzZSBzKGssZSk7bCYmKG0obCxoLGUsZiksbS51bmlxdWVTb3J0KGUpKTtyZXR1cm4gZX07bS51bmlxdWVTb3J0PWZ1bmN0aW9uKGEpe2lmKHUpe2g9aSxhLnNvcnQodSk7aWYoaClmb3IodmFyIGI9MTtiPGEubGVuZ3RoO2IrKylhW2JdPT09YVtiLTFdJiZhLnNwbGljZShiLS0sMSl9cmV0dXJuIGF9LG0ubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBtKGEsbnVsbCxudWxsLGIpfSxtLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGIpe3JldHVybiBtKGIsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9LG0uZmluZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2lmKCFhKXJldHVybltdO2ZvcihlPTAsZj1vLm9yZGVyLmxlbmd0aDtlPGY7ZSsrKXtoPW8ub3JkZXJbZV07aWYoZz1vLmxlZnRNYXRjaFtoXS5leGVjKGEpKXtpPWdbMV0sZy5zcGxpY2UoMSwxKTtpZihpLnN1YnN0cihpLmxlbmd0aC0xKSE9PSJcXCIpe2dbMV09KGdbMV18fCIiKS5yZXBsYWNlKGosIiIpLGQ9by5maW5kW2hdKGcsYixjKTtpZihkIT1udWxsKXthPWEucmVwbGFjZShvLm1hdGNoW2hdLCIiKTticmVha319fX1kfHwoZD10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOltdKTtyZXR1cm57c2V0OmQsZXhwcjphfX0sbS5maWx0ZXI9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixwLHE9YSxyPVtdLHM9Yyx0PWMmJmNbMF0mJm0uaXNYTUwoY1swXSk7d2hpbGUoYSYmYy5sZW5ndGgpe2ZvcihoIGluIG8uZmlsdGVyKWlmKChmPW8ubGVmdE1hdGNoW2hdLmV4ZWMoYSkpIT1udWxsJiZmWzJdKXtrPW8uZmlsdGVyW2hdLGw9ZlsxXSxnPSExLGYuc3BsaWNlKDEsMSk7aWYobC5zdWJzdHIobC5sZW5ndGgtMSk9PT0iXFwiKWNvbnRpbnVlO3M9PT1yJiYocj1bXSk7aWYoby5wcmVGaWx0ZXJbaF0pe2Y9by5wcmVGaWx0ZXJbaF0oZixzLGQscixlLHQpO2lmKCFmKWc9aT0hMDtlbHNlIGlmKGY9PT0hMCljb250aW51ZX1pZihmKWZvcihuPTA7KGo9c1tuXSkhPW51bGw7bisrKWomJihpPWsoaixmLG4scykscD1lXmksZCYmaSE9bnVsbD9wP2c9ITA6c1tuXT0hMTpwJiYoci5wdXNoKGopLGc9ITApKTtpZihpIT09Yil7ZHx8KHM9ciksYT1hLnJlcGxhY2Uoby5tYXRjaFtoXSwiIik7aWYoIWcpcmV0dXJuW107YnJlYWt9fWlmKGE9PT1xKWlmKGc9PW51bGwpbS5lcnJvcihhKTtlbHNlIGJyZWFrO3E9YX1yZXR1cm4gc30sbS5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2F9O3ZhciBuPW0uZ2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YS5ub2RlVHlwZSxlPSIiO2lmKGQpe2lmKGQ9PT0xKXtpZih0eXBlb2YgYS50ZXh0Q29udGVudD09InN0cmluZyIpcmV0dXJuIGEudGV4dENvbnRlbnQ7aWYodHlwZW9mIGEuaW5uZXJUZXh0PT0ic3RyaW5nIilyZXR1cm4gYS5pbm5lclRleHQucmVwbGFjZShrLCIiKTtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpZSs9bihhKX1lbHNlIGlmKGQ9PT0zfHxkPT09NClyZXR1cm4gYS5ub2RlVmFsdWV9ZWxzZSBmb3IoYj0wO2M9YVtiXTtiKyspYy5ub2RlVHlwZSE9PTgmJihlKz1uKGMpKTtyZXR1cm4gZX0sbz1tLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sTkFNRTovXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpcXS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLyxUQUc6L14oKD86W1x3XHUwMGMwLVx1RkZGRlwqXC1dfFxcLikrKS8sQ0hJTEQ6Lzoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wtXT9cZCt8KD86WytcLV0/XGQqKT9uXHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLFBTRVVETzovOigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKSg/OlwoKFsnIl0/KSgoPzpcKFteXCldK1wpfFteXChcKV0qKSspXDJcKSk/L30sbGVmdE1hdGNoOnt9LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidHlwZSIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBiPT0ic3RyaW5nIixkPWMmJiFsLnRlc3QoYiksZT1jJiYhZDtkJiYoYj1iLnRvTG93ZXJDYXNlKCkpO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGgsaDtmPGc7ZisrKWlmKGg9YVtmXSl7d2hpbGUoKGg9aC5wcmV2aW91c1NpYmxpbmcpJiZoLm5vZGVUeXBlIT09MSk7YVtmXT1lfHxoJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iP2h8fCExOmg9PT1ifWUmJm0uZmlsdGVyKGIsYSwhMCl9LCI+IjpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9dHlwZW9mIGI9PSJzdHJpbmciLGU9MCxmPWEubGVuZ3RoO2lmKGQmJiFsLnRlc3QoYikpe2I9Yi50b0xvd2VyQ2FzZSgpO2Zvcig7ZTxmO2UrKyl7Yz1hW2VdO2lmKGMpe3ZhciBnPWMucGFyZW50Tm9kZTthW2VdPWcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/ZzohMX19fWVsc2V7Zm9yKDtlPGY7ZSsrKWM9YVtlXSxjJiYoYVtlXT1kP2MucGFyZW50Tm9kZTpjLnBhcmVudE5vZGU9PT1iKTtkJiZtLmZpbHRlcihiLGEsITApfX0sIiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwYXJlbnROb2RlIixiLGYsYSxkLGMpfSwifiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwcmV2aW91c1NpYmxpbmciLGIsZixhLGQsYyl9fSxmaW5kOntJRDpmdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQhPSJ1bmRlZmluZWQiJiYhYyl7dmFyIGQ9Yi5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZCYmZC5wYXJlbnROb2RlP1tkXTpbXX19LE5BTUU6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5TmFtZSE9InVuZGVmaW5lZCIpe3ZhciBjPVtdLGQ9Yi5nZXRFbGVtZW50c0J5TmFtZShhWzFdKTtmb3IodmFyIGU9MCxmPWQubGVuZ3RoO2U8ZjtlKyspZFtlXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PWFbMV0mJmMucHVzaChkW2VdKTtyZXR1cm4gYy5sZW5ndGg9PT0wP251bGw6Y319LFRBRzpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIilyZXR1cm4gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKX19LHByZUZpbHRlcjp7Q0xBU1M6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2E9IiAiK2FbMV0ucmVwbGFjZShqLCIiKSsiICI7aWYoZilyZXR1cm4gYTtmb3IodmFyIGc9MCxoOyhoPWJbZ10pIT1udWxsO2crKyloJiYoZV4oaC5jbGFzc05hbWUmJigiICIraC5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKC9bXHRcblxyXS9nLCIgIikuaW5kZXhPZihhKT49MCk/Y3x8ZC5wdXNoKGgpOmMmJihiW2ddPSExKSk7cmV0dXJuITF9LElEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIil9LFRBRzpmdW5jdGlvbihhLGIpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIikudG9Mb3dlckNhc2UoKX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7aWYoYVsxXT09PSJudGgiKXthWzJdfHxtLmVycm9yKGFbMF0pLGFbMl09YVsyXS5yZXBsYWNlKC9eXCt8XHMqL2csIiIpO3ZhciBiPS8oLT8pKFxkKikoPzpuKFsrXC1dP1xkKikpPy8uZXhlYyhhWzJdPT09ImV2ZW4iJiYiMm4ifHxhWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChhWzJdKSYmIjBuKyIrYVsyXXx8YVsyXSk7YVsyXT1iWzFdKyhiWzJdfHwxKS0wLGFbM109YlszXS0wfWVsc2UgYVsyXSYmbS5lcnJvcihhWzBdKTthWzBdPWUrKztyZXR1cm4gYX0sQVRUUjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YVsxXT1hWzFdLnJlcGxhY2UoaiwiIik7IWYmJm8uYXR0ck1hcFtnXSYmKGFbMV09by5hdHRyTWFwW2ddKSxhWzRdPShhWzRdfHxhWzVdfHwiIikucmVwbGFjZShqLCIiKSxhWzJdPT09In49IiYmKGFbNF09IiAiK2FbNF0rIiAiKTtyZXR1cm4gYX0sUFNFVURPOmZ1bmN0aW9uKGIsYyxkLGUsZil7aWYoYlsxXT09PSJub3QiKWlmKChhLmV4ZWMoYlszXSl8fCIiKS5sZW5ndGg+MXx8L15cdy8udGVzdChiWzNdKSliWzNdPW0oYlszXSxudWxsLG51bGwsYyk7ZWxzZXt2YXIgZz1tLmZpbHRlcihiWzNdLGMsZCwhMF5mKTtkfHxlLnB1c2guYXBwbHkoZSxnKTtyZXR1cm4hMX1lbHNlIGlmKG8ubWF0Y2guUE9TLnRlc3QoYlswXSl8fG8ubWF0Y2guQ0hJTEQudGVzdChiWzBdKSlyZXR1cm4hMDtyZXR1cm4gYn0sUE9TOmZ1bmN0aW9uKGEpe2EudW5zaGlmdCghMCk7cmV0dXJuIGF9fSxmaWx0ZXJzOntlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITEmJmEudHlwZSE9PSJoaWRkZW4ifSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNoZWNrZWQ9PT0hMH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtyZXR1cm4gYS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuISFhLmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGEpe3JldHVybiFhLmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuISFtKGNbM10sYSkubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuL2hcZC9pLnRlc3QoYS5ub2RlTmFtZSl9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSxjPWEudHlwZTtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInRleHQiPT09YyYmKGI9PT1jfHxiPT09bnVsbCl9LHJhZGlvOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicmFkaW8iPT09YS50eXBlfSxjaGVja2JveDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImNoZWNrYm94Ij09PWEudHlwZX0sZmlsZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImZpbGUiPT09YS50eXBlfSxwYXNzd29yZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInBhc3N3b3JkIj09PWEudHlwZX0sc3VibWl0OmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYj09PSJpbnB1dCJ8fGI9PT0iYnV0dG9uIikmJiJzdWJtaXQiPT09YS50eXBlfSxpbWFnZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImltYWdlIj09PWEudHlwZX0scmVzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInJlc2V0Ij09PWEudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYj09PSJpbnB1dCImJiJidXR0b24iPT09YS50eXBlfHxiPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChhLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1hLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0wfSxsYXN0OmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBiPT09ZC5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MX0sbHQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPGNbM10tMH0sZ3Q6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPmNbM10tMH0sbnRoOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn0sZXE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsxXSxmPW8uZmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpO2lmKGU9PT0iY29udGFpbnMiKXJldHVybihhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8bihbYV0pfHwiIikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiExO3JldHVybiEwfW0uZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz1iWzFdLGw9YTtzd2l0Y2goayl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShsPWwucHJldmlvdXNTaWJsaW5nKWlmKGwubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGs9PT0iZmlyc3QiKXJldHVybiEwO2w9YTtjYXNlImxhc3QiOndoaWxlKGw9bC5uZXh0U2libGluZylpZihsLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMDtjYXNlIm50aCI6Yz1iWzJdLGU9YlszXTtpZihjPT09MSYmZT09PTApcmV0dXJuITA7Zj1iWzBdLGc9YS5wYXJlbnROb2RlO2lmKGcmJihnW2RdIT09Znx8IWEubm9kZUluZGV4KSl7aT0wO2ZvcihsPWcuZmlyc3RDaGlsZDtsO2w9bC5uZXh0U2libGluZylsLm5vZGVUeXBlPT09MSYmKGwubm9kZUluZGV4PSsraSk7Z1tkXT1mfWo9YS5ub2RlSW5kZXgtZTtyZXR1cm4gYz09PTA/aj09PTA6aiVjPT09MCYmai9jPj0wfX0sSUQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0iKiImJmEubm9kZVR5cGU9PT0xfHwhIWEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9bS5hdHRyP20uYXR0cihhLGMpOm8uYXR0ckhhbmRsZVtjXT9vLmF0dHJIYW5kbGVbY10oYSk6YVtjXSE9bnVsbD9hW2NdOmEuZ2V0QXR0cmlidXRlKGMpLGU9ZCsiIixmPWJbMl0sZz1iWzRdO3JldHVybiBkPT1udWxsP2Y9PT0iIT0iOiFmJiZtLmF0dHI/ZCE9bnVsbDpmPT09Ij0iP2U9PT1nOmY9PT0iKj0iP2UuaW5kZXhPZihnKT49MDpmPT09In49Ij8oIiAiK2UrIiAiKS5pbmRleE9mKGcpPj0wOmc/Zj09PSIhPSI/ZSE9PWc6Zj09PSJePSI/ZS5pbmRleE9mKGcpPT09MDpmPT09IiQ9Ij9lLnN1YnN0cihlLmxlbmd0aC1nLmxlbmd0aCk9PT1nOmY9PT0ifD0iP2U9PT1nfHxlLnN1YnN0cigwLGcubGVuZ3RoKzEpPT09ZysiLSI6ITE6ZSYmZCE9PSExfSxQT1M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsyXSxmPW8uc2V0RmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpfX19LHA9by5tYXRjaC5QT1MscT1mdW5jdGlvbihhLGIpe3JldHVybiJcXCIrKGItMCsxKX07Zm9yKHZhciByIGluIG8ubWF0Y2gpby5tYXRjaFtyXT1uZXcgUmVnRXhwKG8ubWF0Y2hbcl0uc291cmNlKy8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSksby5sZWZ0TWF0Y2hbcl09bmV3IFJlZ0V4cCgvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlK28ubWF0Y2hbcl0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZyxxKSk7dmFyIHM9ZnVuY3Rpb24oYSxiKXthPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsMCk7aWYoYil7Yi5wdXNoLmFwcGx5KGIsYSk7cmV0dXJuIGJ9cmV0dXJuIGF9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApWzBdLm5vZGVUeXBlfWNhdGNoKHQpe3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9Ynx8W107aWYoZy5jYWxsKGEpPT09IltvYmplY3QgQXJyYXldIilBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkLGEpO2Vsc2UgaWYodHlwZW9mIGEubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGU9YS5sZW5ndGg7YzxlO2MrKylkLnB1c2goYVtjXSk7ZWxzZSBmb3IoO2FbY107YysrKWQucHVzaChhW2NdKTtyZXR1cm4gZH19dmFyIHUsdjtjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj91PWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2g9ITA7cmV0dXJuIDB9aWYoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPy0xOjE7cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmND8tMToxfToodT1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtoPSEwO3JldHVybiAwfWlmKGEuc291cmNlSW5kZXgmJmIuc291cmNlSW5kZXgpcmV0dXJuIGEuc291cmNlSW5kZXgtYi5zb3VyY2VJbmRleDt2YXIgYyxkLGU9W10sZj1bXSxnPWEucGFyZW50Tm9kZSxpPWIucGFyZW50Tm9kZSxqPWc7aWYoZz09PWkpcmV0dXJuIHYoYSxiKTtpZighZylyZXR1cm4tMTtpZighaSlyZXR1cm4gMTt3aGlsZShqKWUudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtqPWk7d2hpbGUoailmLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7Yz1lLmxlbmd0aCxkPWYubGVuZ3RoO2Zvcih2YXIgaz0wO2s8YyYmazxkO2srKylpZihlW2tdIT09ZltrXSlyZXR1cm4gdihlW2tdLGZba10pO3JldHVybiBrPT09Yz92KGEsZltrXSwtMSk6dihlW2tdLGIsMSl9LHY9ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PT1iKXJldHVybiBjO3ZhciBkPWEubmV4dFNpYmxpbmc7d2hpbGUoZCl7aWYoZD09PWIpcmV0dXJuLTE7ZD1kLm5leHRTaWJsaW5nfXJldHVybiAxfSksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCksZT1jLmRvY3VtZW50RWxlbWVudDthLmlubmVySFRNTD0iPGEgbmFtZT0nIitkKyInLz4iLGUuaW5zZXJ0QmVmb3JlKGEsZS5maXJzdENoaWxkKSxjLmdldEVsZW1lbnRCeUlkKGQpJiYoby5maW5kLklEPWZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYy5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5lZCImJiFkKXt2YXIgZT1jLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBlP2UuaWQ9PT1hWzFdfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlIT0idW5kZWZpbmVkIiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1ZT09PWFbMV0/W2VdOmI6W119fSxvLmZpbHRlci5JRD1mdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUhPSJ1bmRlZmluZWQiJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGEubm9kZVR5cGU9PT0xJiZjJiZjLm5vZGVWYWx1ZT09PWJ9KSxlLnJlbW92ZUNoaWxkKGEpLGU9YT1udWxsfSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmFwcGVuZENoaWxkKGMuY3JlYXRlQ29tbWVudCgiIikpLGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCYmKG8uZmluZC5UQUc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pO2lmKGFbMV09PT0iKiIpe3ZhciBkPVtdO2Zvcih2YXIgZT0wO2NbZV07ZSsrKWNbZV0ubm9kZVR5cGU9PT0xJiZkLnB1c2goY1tlXSk7Yz1kfXJldHVybiBjfSksYS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLGEuZmlyc3RDaGlsZCYmdHlwZW9mIGEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPSJ1bmRlZmluZWQiJiZhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyImJihvLmF0dHJIYW5kbGUuaHJlZj1mdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImhyZWYiLDIpfSksYT1udWxsfSgpLGMucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIgYT1tLGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJfX3NpenpsZV9fIjtiLmlubmVySFRNTD0iPHAgY2xhc3M9J1RFU1QnPjwvcD4iO2lmKCFiLnF1ZXJ5U2VsZWN0b3JBbGx8fGIucXVlcnlTZWxlY3RvckFsbCgiLlRFU1QiKS5sZW5ndGghPT0wKXttPWZ1bmN0aW9uKGIsZSxmLGcpe2U9ZXx8YztpZighZyYmIW0uaXNYTUwoZSkpe3ZhciBoPS9eKFx3KyQpfF5cLihbXHdcLV0rJCl8XiMoW1x3XC1dKyQpLy5leGVjKGIpO2lmKGgmJihlLm5vZGVUeXBlPT09MXx8ZS5ub2RlVHlwZT09PTkpKXtpZihoWzFdKXJldHVybiBzKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYiksZik7aWYoaFsyXSYmby5maW5kLkNMQVNTJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIHMoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGhbMl0pLGYpfWlmKGUubm9kZVR5cGU9PT05KXtpZihiPT09ImJvZHkiJiZlLmJvZHkpcmV0dXJuIHMoW2UuYm9keV0sZik7aWYoaCYmaFszXSl7dmFyIGk9ZS5nZXRFbGVtZW50QnlJZChoWzNdKTtpZighaXx8IWkucGFyZW50Tm9kZSlyZXR1cm4gcyhbXSxmKTtpZihpLmlkPT09aFszXSlyZXR1cm4gcyhbaV0sZil9dHJ5e3JldHVybiBzKGUucXVlcnlTZWxlY3RvckFsbChiKSxmKX1jYXRjaChqKXt9fWVsc2UgaWYoZS5ub2RlVHlwZT09PTEmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXt2YXIgaz1lLGw9ZS5nZXRBdHRyaWJ1dGUoImlkIiksbj1sfHxkLHA9ZS5wYXJlbnROb2RlLHE9L15ccypbK35dLy50ZXN0KGIpO2w/bj1uLnJlcGxhY2UoLycvZywiXFwkJiIpOmUuc2V0QXR0cmlidXRlKCJpZCIsbikscSYmcCYmKGU9ZS5wYXJlbnROb2RlKTt0cnl7aWYoIXF8fHApcmV0dXJuIHMoZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWQ9JyIrbisiJ10gIitiKSxmKX1jYXRjaChyKXt9ZmluYWxseXtsfHxrLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBhKGIsZSxmLGcpfTtmb3IodmFyIGUgaW4gYSltW2VdPWFbZV07Yj1udWxsfX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuZG9jdW1lbnRFbGVtZW50LGI9YS5tYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcjtpZihiKXt2YXIgZD0hYi5jYWxsKGMuY3JlYXRlRWxlbWVudCgiZGl2IiksImRpdiIpLGU9ITE7dHJ5e2IuY2FsbChjLmRvY3VtZW50RWxlbWVudCwiW3Rlc3QhPScnXTpzaXp6bGUiKX1jYXRjaChmKXtlPSEwfW0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYyl7Yz1jLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCFtLmlzWE1MKGEpKXRyeXtpZihlfHwhby5tYXRjaC5QU0VVRE8udGVzdChjKSYmIS8hPS8udGVzdChjKSl7dmFyIGY9Yi5jYWxsKGEsYyk7aWYoZnx8IWR8fGEuZG9jdW1lbnQmJmEuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSlyZXR1cm4gZn19Y2F0Y2goZyl7fXJldHVybiBtKGMsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9fX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J3Rlc3QgZSc+PC9kaXY+PGRpdiBjbGFzcz0ndGVzdCc+PC9kaXY+IjtpZighIWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MCl7YS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIjtpZihhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0xKXJldHVybjtvLm9yZGVyLnNwbGljZSgxLDAsIkNMQVNTIiksby5maW5kLkNMQVNTPWZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT0idW5kZWZpbmVkIiYmIWMpcmV0dXJuIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhWzFdKX0sYT1udWxsfX0oKSxjLmRvY3VtZW50RWxlbWVudC5jb250YWlucz9tLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEhPT1iJiYoYS5jb250YWlucz9hLmNvbnRhaW5zKGIpOiEwKX06Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/bS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpfTptLmNvbnRhaW5zPWZ1bmN0aW9uKCl7cmV0dXJuITF9LG0uaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9KGE/YS5vd25lckRvY3VtZW50fHxhOjApLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiExfTt2YXIgeT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZT1bXSxmPSIiLGc9Yi5ub2RlVHlwZT9bYl06Yjt3aGlsZShkPW8ubWF0Y2guUFNFVURPLmV4ZWMoYSkpZis9ZFswXSxhPWEucmVwbGFjZShvLm1hdGNoLlBTRVVETywiIik7YT1vLnJlbGF0aXZlW2FdP2ErIioiOmE7Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKW0oYSxnW2hdLGUsYyk7cmV0dXJuIG0uZmlsdGVyKGYsZSl9O20uYXR0cj1mLmF0dHIsbS5zZWxlY3RvcnMuYXR0ck1hcD17fSxmLmZpbmQ9bSxmLmV4cHI9bS5zZWxlY3RvcnMsZi5leHByWyI6Il09Zi5leHByLmZpbHRlcnMsZi51bmlxdWU9bS51bmlxdWVTb3J0LGYudGV4dD1tLmdldFRleHQsZi5pc1hNTERvYz1tLmlzWE1MLGYuY29udGFpbnM9bS5jb250YWluc30oKTt2YXIgTz0vVW50aWwkLyxQPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLFE9LywvLFI9L14uW146I1xbXC4sXSokLyxTPUFycmF5LnByb3RvdHlwZS5zbGljZSxUPWYuZXhwci5tYXRjaC5QT1MsVT17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGMsZDtpZih0eXBlb2YgYSE9InN0cmluZyIpcmV0dXJuIGYoYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspaWYoZi5jb250YWlucyhiW2NdLHRoaXMpKXJldHVybiEwfSk7dmFyIGU9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGcsaCxpO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtnPWUubGVuZ3RoLGYuZmluZChhLHRoaXNbY10sZSk7aWYoYz4wKWZvcihoPWc7aDxlLmxlbmd0aDtoKyspZm9yKGk9MDtpPGc7aSsrKWlmKGVbaV09PT1lW2hdKXtlLnNwbGljZShoLS0sMSk7YnJlYWt9fXJldHVybiBlfSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9ZihhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxjPWIubGVuZ3RoO2E8YzthKyspaWYoZi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVyh0aGlzLGEsITEpLCJub3QiLGEpfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFcodGhpcyxhLCEwKSwiZmlsdGVyIixhKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuISFhJiYodHlwZW9mIGE9PSJzdHJpbmciP1QudGVzdChhKT9mKGEsdGhpcy5jb250ZXh0KS5pbmRleCh0aGlzWzBdKT49MDpmLmZpbHRlcihhLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGEpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQsZSxnPXRoaXNbMF07aWYoZi5pc0FycmF5KGEpKXt2YXIgaD0xO3doaWxlKGcmJmcub3duZXJEb2N1bWVudCYmZyE9PWIpe2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspZihnKS5pcyhhW2RdKSYmYy5wdXNoKHtzZWxlY3RvcjphW2RdLGVsZW06ZyxsZXZlbDpofSk7Zz1nLnBhcmVudE5vZGUsaCsrfXJldHVybiBjfXZhciBpPVQudGVzdChhKXx8dHlwZW9mIGEhPSJzdHJpbmciP2YoYSxifHx0aGlzLmNvbnRleHQpOjA7Zm9yKGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspe2c9dGhpc1tkXTt3aGlsZShnKXtpZihpP2kuaW5kZXgoZyk+LTE6Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihnLGEpKXtjLnB1c2goZyk7YnJlYWt9Zz1nLnBhcmVudE5vZGU7aWYoIWd8fCFnLm93bmVyRG9jdW1lbnR8fGc9PT1ifHxnLm5vZGVUeXBlPT09MTEpYnJlYWt9fWM9Yy5sZW5ndGg+MT9mLnVuaXF1ZShjKTpjO3JldHVybiB0aGlzLnB1c2hTdGFjayhjLCJjbG9zZXN0IixhKX0saW5kZXg6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLnByZXZBbGwoKS5sZW5ndGg6LTE7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBmLmluQXJyYXkodGhpc1swXSxmKGEpKTtyZXR1cm4gZi5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9PSJzdHJpbmciP2YoYSxiKTpmLm1ha2VBcnJheShhJiZhLm5vZGVUeXBlP1thXTphKSxkPWYubWVyZ2UodGhpcy5nZXQoKSxjKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVihjWzBdKXx8VihkWzBdKT9kOmYudW5pcXVlKGQpKX0sYW5kU2VsZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3QpfX0pLGYuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmYi5ub2RlVHlwZSE9PTExP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwYXJlbnROb2RlIixjKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBmLm50aChhLDIsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciLGMpfSxwcmV2VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEucGFyZW50Tm9kZS5maXJzdENoaWxkLGEpfSxjaGlsZHJlbjpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBmLm5vZGVOYW1lKGEsImlmcmFtZSIpP2EuY29udGVudERvY3VtZW50fHxhLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6Zi5tYWtlQXJyYXkoYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPWYubWFwKHRoaXMsYixjKSxnPVMuY2FsbChhcmd1bWVudHMpO08udGVzdChhKXx8KGQ9YyksZCYmdHlwZW9mIGQ9PSJzdHJpbmciJiYoZT1mLmZpbHRlcihkLGUpKSxlPXRoaXMubGVuZ3RoPjEmJiFVW2FdP2YudW5pcXVlKGUpOmUsKHRoaXMubGVuZ3RoPjF8fFEudGVzdChkKSkmJlAudGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhlLGEsZy5qb2luKCIsIikpfX0pLGYuZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oYSxiLGMpe2MmJihhPSI6bm90KCIrYSsiKSIpO3JldHVybiBiLmxlbmd0aD09PTE/Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihiWzBdLGEpP1tiWzBdXTpbXTpmLmZpbmQubWF0Y2hlcyhhLGIpfSxkaXI6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPVtdLGc9YVtjXTt3aGlsZShnJiZnLm5vZGVUeXBlIT09OSYmKGQ9PT1ifHxnLm5vZGVUeXBlIT09MXx8IWYoZykuaXMoZCkpKWcubm9kZVR5cGU9PT0xJiZlLnB1c2goZyksZz1nW2NdO3JldHVybiBlfSxudGg6ZnVuY3Rpb24oYSxiLGMsZCl7Yj1ifHwxO3ZhciBlPTA7Zm9yKDthO2E9YVtjXSlpZihhLm5vZGVUeXBlPT09MSYmKytlPT09YilicmVhaztyZXR1cm4gYX0sc2libGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPVtdO2Zvcig7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PTEmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSk7dmFyIFk9ImFiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgZGF0YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8iLFo9LyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZywkPS9eXHMrLyxfPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vaWcsYmE9LzwoW1x3Ol0rKS8sYmI9Lzx0Ym9keS9pLGJjPS88fCYjP1x3KzsvLGJkPS88KD86c2NyaXB0fHN0eWxlKS9pLGJlPS88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ksYmY9bmV3IFJlZ0V4cCgiPCg/OiIrWS5yZXBsYWNlKCIgIiwifCIpKyIpIiwiaSIpLGJnPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGJoPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksYmk9L15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sYmo9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sYms9WChjKTtiai5vcHRncm91cD1iai5vcHRpb24sYmoudGJvZHk9YmoudGZvb3Q9YmouY29sZ3JvdXA9YmouY2FwdGlvbj1iai50aGVhZCxiai50aD1iai50ZCxmLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KGJqLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdKSxmLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MudGV4dChhLmNhbGwodGhpcyxiLGMudGV4dCgpKSl9KTtpZih0eXBlb2YgYSE9Im9iamVjdCImJmEhPT1iKXJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gZi50ZXh0KHRoaXMpfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1mKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdENoaWxkJiZhLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKWE9YS5maXJzdENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYodGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YodGhpcykud3JhcEFsbChhKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7Zi5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fGYodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuYXBwZW5kQ2hpbGQoYSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihhKXt0aGlzLm5vZGVUeXBlPT09MSYmdGhpcy5pbnNlcnRCZWZvcmUoYSx0aGlzLmZpcnN0Q2hpbGQpfSl9LGJlZm9yZTpmdW5jdGlvbigpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9Zihhcmd1bWVudHNbMF0pO2EucHVzaC5hcHBseShhLHRoaXMudG9BcnJheSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYSwiYmVmb3JlIixhcmd1bWVudHMpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPXRoaXMucHVzaFN0YWNrKHRoaXMsImFmdGVyIgosYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxmKGFyZ3VtZW50c1swXSkudG9BcnJheSgpKTtyZXR1cm4gYX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ7KGQ9dGhpc1tjXSkhPW51bGw7YysrKWlmKCFhfHxmLmZpbHRlcihhLFtkXSkubGVuZ3RoKSFiJiZkLm5vZGVUeXBlPT09MSYmKGYuY2xlYW5EYXRhKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksZi5jbGVhbkRhdGEoW2RdKSksZC5wYXJlbnROb2RlJiZkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYjsoYj10aGlzW2FdKSE9bnVsbDthKyspe2Iubm9kZVR5cGU9PT0xJiZmLmNsZWFuRGF0YShiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3doaWxlKGIuZmlyc3RDaGlsZCliLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7YT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6YjtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09YilyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShaLCIiKTpudWxsO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJkLnRlc3QoYSkmJihmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCEkLnRlc3QoYSkpJiYhYmpbKGJhLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXthPWEucmVwbGFjZShfLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXRoaXNbY10ubm9kZVR5cGU9PT0xJiYoZi5jbGVhbkRhdGEodGhpc1tjXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSx0aGlzW2NdLmlubmVySFRNTD1hKX1jYXRjaChlKXt0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfX1lbHNlIGYuaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKTtjLmh0bWwoYS5jYWxsKHRoaXMsYixjLmh0bWwoKSkpfSk6dGhpcy5lbXB0eSgpLmFwcGVuZChhKTtyZXR1cm4gdGhpc30scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpLGQ9Yy5odG1sKCk7Yy5yZXBsYWNlV2l0aChhLmNhbGwodGhpcyxiLGQpKX0pO3R5cGVvZiBhIT0ic3RyaW5nIiYmKGE9ZihhKS5kZXRhY2goKSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsYz10aGlzLnBhcmVudE5vZGU7Zih0aGlzKS5yZW1vdmUoKSxiP2YoYikuYmVmb3JlKGEpOmYoYykuYXBwZW5kKGEpfSl9cmV0dXJuIHRoaXMubGVuZ3RoP3RoaXMucHVzaFN0YWNrKGYoZi5pc0Z1bmN0aW9uKGEpP2EoKTphKSwicmVwbGFjZVdpdGgiLGEpOnRoaXN9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnLGgsaSxqPWFbMF0saz1bXTtpZighZi5zdXBwb3J0LmNoZWNrQ2xvbmUmJmFyZ3VtZW50cy5sZW5ndGg9PT0zJiZ0eXBlb2Ygaj09InN0cmluZyImJmJnLnRlc3QoaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YodGhpcykuZG9tTWFuaXAoYSxjLGQsITApfSk7aWYoZi5pc0Z1bmN0aW9uKGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGc9Zih0aGlzKTthWzBdPWouY2FsbCh0aGlzLGUsYz9nLmh0bWwoKTpiKSxnLmRvbU1hbmlwKGEsYyxkKX0pO2lmKHRoaXNbMF0pe2k9aiYmai5wYXJlbnROb2RlLGYuc3VwcG9ydC5wYXJlbnROb2RlJiZpJiZpLm5vZGVUeXBlPT09MTEmJmkuY2hpbGROb2Rlcy5sZW5ndGg9PT10aGlzLmxlbmd0aD9lPXtmcmFnbWVudDppfTplPWYuYnVpbGRGcmFnbWVudChhLHRoaXMsayksaD1lLmZyYWdtZW50LGguY2hpbGROb2Rlcy5sZW5ndGg9PT0xP2c9aD1oLmZpcnN0Q2hpbGQ6Zz1oLmZpcnN0Q2hpbGQ7aWYoZyl7Yz1jJiZmLm5vZGVOYW1lKGcsInRyIik7Zm9yKHZhciBsPTAsbT10aGlzLmxlbmd0aCxuPW0tMTtsPG07bCsrKWQuY2FsbChjP2JsKHRoaXNbbF0sZyk6dGhpc1tsXSxlLmNhY2hlYWJsZXx8bT4xJiZsPG4/Zi5jbG9uZShoLCEwLCEwKTpoKX1rLmxlbmd0aCYmZi5lYWNoKGssYnIpfXJldHVybiB0aGlzfX0pLGYuYnVpbGRGcmFnbWVudD1mdW5jdGlvbihhLGIsZCl7dmFyIGUsZyxoLGksaj1hWzBdO2ImJmJbMF0mJihpPWJbMF0ub3duZXJEb2N1bWVudHx8YlswXSksaS5jcmVhdGVEb2N1bWVudEZyYWdtZW50fHwoaT1jKSxhLmxlbmd0aD09PTEmJnR5cGVvZiBqPT0ic3RyaW5nIiYmai5sZW5ndGg8NTEyJiZpPT09YyYmai5jaGFyQXQoMCk9PT0iPCImJiFiZS50ZXN0KGopJiYoZi5zdXBwb3J0LmNoZWNrQ2xvbmV8fCFiZy50ZXN0KGopKSYmIWYuc3VwcG9ydC51bmtub3duRWxlbXMmJmJmLnRlc3QoaikmJihnPSEwLGg9Zi5mcmFnbWVudHNbal0saCYmaCE9PTEmJihlPWgpKSxlfHwoZT1pLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxmLmNsZWFuKGEsaSxlLGQpKSxnJiYoZi5mcmFnbWVudHNbal09aD9lOjEpO3JldHVybntmcmFnbWVudDplLGNhY2hlYWJsZTpnfX0sZi5mcmFnbWVudHM9e30sZi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGMpe3ZhciBkPVtdLGU9ZihjKSxnPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKGcmJmcubm9kZVR5cGU9PT0xMSYmZy5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJmUubGVuZ3RoPT09MSl7ZVtiXSh0aGlzWzBdKTtyZXR1cm4gdGhpc31mb3IodmFyIGg9MCxpPWUubGVuZ3RoO2g8aTtoKyspe3ZhciBqPShoPjA/dGhpcy5jbG9uZSghMCk6dGhpcykuZ2V0KCk7ZihlW2hdKVtiXShqKSxkPWQuY29uY2F0KGopfXJldHVybiB0aGlzLnB1c2hTdGFjayhkLGEsZS5zZWxlY3Rvcil9fSksZi5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmNsb25lTm9kZSghMCksZSxnLGg7aWYoKCFmLnN1cHBvcnQubm9DbG9uZUV2ZW50fHwhZi5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSYmKGEubm9kZVR5cGU9PT0xfHxhLm5vZGVUeXBlPT09MTEpJiYhZi5pc1hNTERvYyhhKSl7Ym4oYSxkKSxlPWJvKGEpLGc9Ym8oZCk7Zm9yKGg9MDtlW2hdOysraClnW2hdJiZibihlW2hdLGdbaF0pfWlmKGIpe2JtKGEsZCk7aWYoYyl7ZT1ibyhhKSxnPWJvKGQpO2ZvcihoPTA7ZVtoXTsrK2gpYm0oZVtoXSxnW2hdKX19ZT1nPW51bGw7cmV0dXJuIGR9LGNsZWFuOmZ1bmN0aW9uKGEsYixkLGUpe3ZhciBnO2I9Ynx8Yyx0eXBlb2YgYi5jcmVhdGVFbGVtZW50PT0idW5kZWZpbmVkIiYmKGI9Yi5vd25lckRvY3VtZW50fHxiWzBdJiZiWzBdLm93bmVyRG9jdW1lbnR8fGMpO3ZhciBoPVtdLGk7Zm9yKHZhciBqPTAsazsoaz1hW2pdKSE9bnVsbDtqKyspe3R5cGVvZiBrPT0ibnVtYmVyIiYmKGsrPSIiKTtpZighayljb250aW51ZTtpZih0eXBlb2Ygaz09InN0cmluZyIpaWYoIWJjLnRlc3Qoaykpaz1iLmNyZWF0ZVRleHROb2RlKGspO2Vsc2V7az1rLnJlcGxhY2UoXywiPCQxPjwvJDI+Iik7dmFyIGw9KGJhLmV4ZWMoayl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksbT1ialtsXXx8YmouX2RlZmF1bHQsbj1tWzBdLG89Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTtiPT09Yz9iay5hcHBlbmRDaGlsZChvKTpYKGIpLmFwcGVuZENoaWxkKG8pLG8uaW5uZXJIVE1MPW1bMV0rayttWzJdO3doaWxlKG4tLSlvPW8ubGFzdENoaWxkO2lmKCFmLnN1cHBvcnQudGJvZHkpe3ZhciBwPWJiLnRlc3QoaykscT1sPT09InRhYmxlIiYmIXA/by5maXJzdENoaWxkJiZvLmZpcnN0Q2hpbGQuY2hpbGROb2RlczptWzFdPT09Ijx0YWJsZT4iJiYhcD9vLmNoaWxkTm9kZXM6W107Zm9yKGk9cS5sZW5ndGgtMTtpPj0wOy0taSlmLm5vZGVOYW1lKHFbaV0sInRib2R5IikmJiFxW2ldLmNoaWxkTm9kZXMubGVuZ3RoJiZxW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocVtpXSl9IWYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmJC50ZXN0KGspJiZvLmluc2VydEJlZm9yZShiLmNyZWF0ZVRleHROb2RlKCQuZXhlYyhrKVswXSksby5maXJzdENoaWxkKSxrPW8uY2hpbGROb2Rlc312YXIgcjtpZighZi5zdXBwb3J0LmFwcGVuZENoZWNrZWQpaWYoa1swXSYmdHlwZW9mIChyPWsubGVuZ3RoKT09Im51bWJlciIpZm9yKGk9MDtpPHI7aSsrKWJxKGtbaV0pO2Vsc2UgYnEoayk7ay5ub2RlVHlwZT9oLnB1c2goayk6aD1mLm1lcmdlKGgsayl9aWYoZCl7Zz1mdW5jdGlvbihhKXtyZXR1cm4hYS50eXBlfHxiaC50ZXN0KGEudHlwZSl9O2ZvcihqPTA7aFtqXTtqKyspaWYoZSYmZi5ub2RlTmFtZShoW2pdLCJzY3JpcHQiKSYmKCFoW2pdLnR5cGV8fGhbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKWUucHVzaChoW2pdLnBhcmVudE5vZGU/aFtqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhbal0pOmhbal0pO2Vsc2V7aWYoaFtqXS5ub2RlVHlwZT09PTEpe3ZhciBzPWYuZ3JlcChoW2pdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxnKTtoLnNwbGljZS5hcHBseShoLFtqKzEsMF0uY29uY2F0KHMpKX1kLmFwcGVuZENoaWxkKGhbal0pfX1yZXR1cm4gaH0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1mLmNhY2hlLGU9Zi5ldmVudC5zcGVjaWFsLGc9Zi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG87Zm9yKHZhciBoPTAsaTsoaT1hW2hdKSE9bnVsbDtoKyspe2lmKGkubm9kZU5hbWUmJmYubm9EYXRhW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pY29udGludWU7Yz1pW2YuZXhwYW5kb107aWYoYyl7Yj1kW2NdO2lmKGImJmIuZXZlbnRzKXtmb3IodmFyIGogaW4gYi5ldmVudHMpZVtqXT9mLmV2ZW50LnJlbW92ZShpLGopOmYucmVtb3ZlRXZlbnQoaSxqLGIuaGFuZGxlKTtiLmhhbmRsZSYmKGIuaGFuZGxlLmVsZW09bnVsbCl9Zz9kZWxldGUgaVtmLmV4cGFuZG9dOmkucmVtb3ZlQXR0cmlidXRlJiZpLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pLGRlbGV0ZSBkW2NdfX19fSk7dmFyIGJzPS9hbHBoYVwoW14pXSpcKS9pLGJ0PS9vcGFjaXR5PShbXildKikvLGJ1PS8oW0EtWl18Xm1zKS9nLGJ2PS9eLT9cZCsoPzpweCk/JC9pLGJ3PS9eLT9cZC8sYng9L14oW1wtK10pPShbXC0rLlxkZV0rKS8sYnk9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJ6PVsiTGVmdCIsIlJpZ2h0Il0sYkE9WyJUb3AiLCJCb3R0b20iXSxiQixiQyxiRDtmLmZuLmNzcz1mdW5jdGlvbihhLGMpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZjPT09YilyZXR1cm4gdGhpcztyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGMsITAsZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkIT09Yj9mLnN0eWxlKGEsYyxkKTpmLmNzcyhhLGMpfSl9LGYuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9YkIoYSwib3BhY2l0eSIsIm9wYWNpdHkiKTtyZXR1cm4gYz09PSIiPyIxIjpjfXJldHVybiBhLnN0eWxlLm9wYWNpdHl9fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6Zi5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWEmJmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCYmISFhLnN0eWxlKXt2YXIgZyxoLGk9Zi5jYW1lbENhc2UoYyksaj1hLnN0eWxlLGs9Zi5jc3NIb29rc1tpXTtjPWYuY3NzUHJvcHNbaV18fGk7aWYoZD09PWIpe2lmKGsmJiJnZXQiaW4gayYmKGc9ay5nZXQoYSwhMSxlKSkhPT1iKXJldHVybiBnO3JldHVybiBqW2NdfWg9dHlwZW9mIGQsaD09PSJzdHJpbmciJiYoZz1ieC5leGVjKGQpKSYmKGQ9KyhnWzFdKzEpKitnWzJdK3BhcnNlRmxvYXQoZi5jc3MoYSxjKSksaD0ibnVtYmVyIik7aWYoZD09bnVsbHx8aD09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47aD09PSJudW1iZXIiJiYhZi5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZigha3x8ISgic2V0ImluIGspfHwoZD1rLnNldChhLGQpKSE9PWIpdHJ5e2pbY109ZH1jYXRjaChsKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnO2M9Zi5jYW1lbENhc2UoYyksZz1mLmNzc0hvb2tzW2NdLGM9Zi5jc3NQcm9wc1tjXXx8YyxjPT09ImNzc0Zsb2F0IiYmKGM9ImZsb2F0Iik7aWYoZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGQpKSE9PWIpcmV0dXJuIGU7aWYoYkIpcmV0dXJuIGJCKGEsYyl9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O2Zvcih2YXIgZSBpbiBiKWRbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07Yy5jYWxsKGEpO2ZvcihlIGluIGIpYS5zdHlsZVtlXT1kW2VdfX0pLGYuY3VyQ1NTPWYuY3NzLGYuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtmLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlO2lmKGMpe2lmKGEub2Zmc2V0V2lkdGghPT0wKXJldHVybiBiRShhLGIsZCk7Zi5zd2FwKGEsYnksZnVuY3Rpb24oKXtlPWJFKGEsYixkKX0pO3JldHVybiBlfX0sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIWJ2LnRlc3QoYikpcmV0dXJuIGI7Yj1wYXJzZUZsb2F0KGIpO2lmKGI+PTApcmV0dXJuIGIrInB4In19fSksZi5zdXBwb3J0Lm9wYWNpdHl8fChmLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBidC50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9Zi5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSI6IiIsZz1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xO2lmKGI+PTEmJmYudHJpbShnLnJlcGxhY2UoYnMsIiIpKT09PSIiKXtjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIik7aWYoZCYmIWQuZmlsdGVyKXJldHVybn1jLmZpbHRlcj1icy50ZXN0KGcpP2cucmVwbGFjZShicyxlKTpnKyIgIitlfX0pLGYoZnVuY3Rpb24oKXtmLnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KGYuY3NzSG9va3MubWFyZ2luUmlnaHQ9e2dldDpmdW5jdGlvbihhLGIpe3ZhciBjO2Yuc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxmdW5jdGlvbigpe2I/Yz1iQihhLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW5SaWdodCIpOmM9YS5zdHlsZS5tYXJnaW5SaWdodH0pO3JldHVybiBjfX0pfSksYy5kZWZhdWx0VmlldyYmYy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoYkM9ZnVuY3Rpb24oYSxjKXt2YXIgZCxlLGc7Yz1jLnJlcGxhY2UoYnUsIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoIShlPWEub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykpcmV0dXJuIGI7aWYoZz1lLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKSlkPWcuZ2V0UHJvcGVydHlWYWx1ZShjKSxkPT09IiImJiFmLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYSkmJihkPWYuc3R5bGUoYSxjKSk7cmV0dXJuIGR9KSxjLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihiRD1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWEuY3VycmVudFN0eWxlJiZhLmN1cnJlbnRTdHlsZVtiXSxnPWEuc3R5bGU7Zj09PW51bGwmJmcmJihlPWdbYl0pJiYoZj1lKSwhYnYudGVzdChmKSYmYncudGVzdChmKSYmKGM9Zy5sZWZ0LGQ9YS5ydW50aW1lU3R5bGUmJmEucnVudGltZVN0eWxlLmxlZnQsZCYmKGEucnVudGltZVN0eWxlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksZy5sZWZ0PWI9PT0iZm9udFNpemUiPyIxZW0iOmZ8fDAsZj1nLnBpeGVsTGVmdCsicHgiLGcubGVmdD1jLGQmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWQpKTtyZXR1cm4gZj09PSIiPyJhdXRvIjpmfSksYkI9YkN8fGJELGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRXaWR0aCxjPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBiPT09MCYmYz09PTB8fCFmLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxmLmNzcyhhLCJkaXNwbGF5IikpPT09Im5vbmUifSxmLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFmLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9KTt2YXIgYkY9LyUyMC9nLGJHPS9cW1xdJC8sYkg9L1xyP1xuL2csYkk9LyMuKiQvLGJKPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsYks9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGJMPS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sYk09L14oPzpHRVR8SEVBRCkkLyxiTj0vXlwvXC8vLGJPPS9cPy8sYlA9LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYlE9L14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksYlI9L1xzKy8sYlM9LyhbPyZdKV89W14mXSovLGJUPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPyk/LyxiVT1mLmZuLmxvYWQsYlY9e30sYlc9e30sYlgsYlksYlo9WyIqLyJdK1siKiJdO3RyeXtiWD1lLmhyZWZ9Y2F0Y2goYiQpe2JYPWMuY3JlYXRlRWxlbWVudCgiYSIpLGJYLmhyZWY9IiIsYlg9YlguaHJlZn1iWT1iVC5leGVjKGJYLnRvTG93ZXJDYXNlKCkpfHxbXSxmLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZiVSlyZXR1cm4gYlUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZT1hLmluZGV4T2YoIiAiKTtpZihlPj0wKXt2YXIgZz1hLnNsaWNlKGUsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGUpfXZhciBoPSJHRVQiO2MmJihmLmlzRnVuY3Rpb24oYyk/KGQ9YyxjPWIpOnR5cGVvZiBjPT0ib2JqZWN0IiYmKGM9Zi5wYXJhbShjLGYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxoPSJQT1NUIikpO3ZhciBpPXRoaXM7Zi5hamF4KHt1cmw6YSx0eXBlOmgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yyxjb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7Yz1hLnJlc3BvbnNlVGV4dCxhLmlzUmVzb2x2ZWQoKSYmKGEuZG9uZShmdW5jdGlvbihhKXtjPWF9KSxpLmh0bWwoZz9mKCI8ZGl2PiIpLmFwcGVuZChjLnJlcGxhY2UoYlAsIiIpKS5maW5kKGcpOmMpKSxkJiZpLmVhY2goZCxbYyxiLGFdKX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGYucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9mLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGJRLnRlc3QodGhpcy5ub2RlTmFtZSl8fGJLLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1mKHRoaXMpLnZhbCgpO3JldHVybiBjPT1udWxsP251bGw6Zi5pc0FycmF5KGMpP2YubWFwKGMsZnVuY3Rpb24oYSxjKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKGJILCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShiSCwiXHJcbiIpfX0pLmdldCgpfX0pLGYuZWFjaCgiYWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtmLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJpbmQoYixhKX19KSxmLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtmW2NdPWZ1bmN0aW9uKGEsZCxlLGcpe2YuaXNGdW5jdGlvbihkKSYmKGc9Z3x8ZSxlPWQsZD1iKTtyZXR1cm4gZi5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpnfSl9fSksZi5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBmLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtiP2NiKGEsZi5hamF4U2V0dGluZ3MpOihiPWEsYT1mLmFqYXhTZXR0aW5ncyksY2IoYSxiKTtyZXR1cm4gYX0sYWpheFNldHRpbmdzOnt1cmw6YlgsaXNMb2NhbDpiTC50ZXN0KGJZWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6Ylp9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpmLnBhcnNlSlNPTiwidGV4dCB4bWwiOmYucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6Yl8oYlYpLGFqYXhUcmFuc3BvcnQ6Yl8oYlcpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB3KGEsYyxsLG0pe2lmKHMhPT0yKXtzPTIscSYmY2xlYXJUaW1lb3V0KHEpLHA9YixuPW18fCIiLHYucmVhZHlTdGF0ZT1hPjA/NDowO3ZhciBvLHIsdSx3PWMseD1sP2NkKGQsdixsKTpiLHksejtpZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihkLmlmTW9kaWZpZWQpe2lmKHk9di5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKWYubGFzdE1vZGlmaWVkW2tdPXk7aWYoej12LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIikpZi5ldGFnW2tdPXp9aWYoYT09PTMwNCl3PSJub3Rtb2RpZmllZCIsbz0hMDtlbHNlIHRyeXtyPWNlKGQseCksdz0ic3VjY2VzcyIsbz0hMH1jYXRjaChBKXt3PSJwYXJzZXJlcnJvciIsdT1BfX1lbHNle3U9dztpZighd3x8YSl3PSJlcnJvciIsYTwwJiYoYT0wKX12LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0iIisoY3x8dyksbz9oLnJlc29sdmVXaXRoKGUsW3Isdyx2XSk6aC5yZWplY3RXaXRoKGUsW3Ysdyx1XSksdi5zdGF0dXNDb2RlKGopLGo9Yix0JiZnLnRyaWdnZXIoImFqYXgiKyhvPyJTdWNjZXNzIjoiRXJyb3IiKSxbdixkLG8/cjp1XSksaS5maXJlV2l0aChlLFt2LHddKSx0JiYoZy50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGRdKSwtLWYuYWN0aXZlfHxmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX10eXBlb2YgYT09Im9iamVjdCImJihjPWEsYT1iKSxjPWN8fHt9O3ZhciBkPWYuYWpheFNldHVwKHt9LGMpLGU9ZC5jb250ZXh0fHxkLGc9ZSE9PWQmJihlLm5vZGVUeXBlfHxlIGluc3RhbmNlb2YgZik/ZihlKTpmLmV2ZW50LGg9Zi5EZWZlcnJlZCgpLGk9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksaj1kLnN0YXR1c0NvZGV8fHt9LGssbD17fSxtPXt9LG4sbyxwLHEscixzPTAsdCx1LHY9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7aWYoIXMpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTthPW1bY109bVtjXXx8YSxsW2FdPWJ9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBzPT09Mj9uOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHM9PT0yKXtpZighbyl7bz17fTt3aGlsZShjPWJKLmV4ZWMobikpb1tjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1vW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtzfHwoZC5taW1lVHlwZT1hKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7YT1hfHwiYWJvcnQiLHAmJnAuYWJvcnQoYSksdygwLGEpO3JldHVybiB0aGlzfX07aC5wcm9taXNlKHYpLHYuc3VjY2Vzcz12LmRvbmUsdi5lcnJvcj12LmZhaWwsdi5jb21wbGV0ZT1pLmFkZCx2LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYoczwyKWZvcihiIGluIGEpaltiXT1baltiXSxhW2JdXTtlbHNlIGI9YVt2LnN0YXR1c10sdi50aGVuKGIsYil9cmV0dXJuIHRoaXN9LGQudXJsPSgoYXx8ZC51cmwpKyIiKS5yZXBsYWNlKGJJLCIiKS5yZXBsYWNlKGJOLGJZWzFdKyIvLyIpLGQuZGF0YVR5cGVzPWYudHJpbShkLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlIpLGQuY3Jvc3NEb21haW49PW51bGwmJihyPWJULmV4ZWMoZC51cmwudG9Mb3dlckNhc2UoKSksZC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT1iWVsxXSYmclsyXT09YllbMl0mJihyWzNdfHwoclsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShiWVszXXx8KGJZWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGQuZGF0YSYmZC5wcm9jZXNzRGF0YSYmdHlwZW9mIGQuZGF0YSE9InN0cmluZyImJihkLmRhdGE9Zi5wYXJhbShkLmRhdGEsZC50cmFkaXRpb25hbCkpLGNhKGJWLGQsYyx2KTtpZihzPT09MilyZXR1cm4hMTt0PWQuZ2xvYmFsLGQudHlwZT1kLnR5cGUudG9VcHBlckNhc2UoKSxkLmhhc0NvbnRlbnQ9IWJNLnRlc3QoZC50eXBlKSx0JiZmLmFjdGl2ZSsrPT09MCYmZi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighZC5oYXNDb250ZW50KXtkLmRhdGEmJihkLnVybCs9KGJPLnRlc3QoZC51cmwpPyImIjoiPyIpK2QuZGF0YSxkZWxldGUgZC5kYXRhKSxrPWQudXJsO2lmKGQuY2FjaGU9PT0hMSl7dmFyIHg9Zi5ub3coKSx5PWQudXJsLnJlcGxhY2UoYlMsIiQxXz0iK3gpO2QudXJsPXkrKHk9PT1kLnVybD8oYk8udGVzdChkLnVybCk/IiYiOiI/IikrIl89Iit4OiIiKX19KGQuZGF0YSYmZC5oYXNDb250ZW50JiZkLmNvbnRlbnRUeXBlIT09ITF8fGMuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZC5jb250ZW50VHlwZSksZC5pZk1vZGlmaWVkJiYoaz1rfHxkLnVybCxmLmxhc3RNb2RpZmllZFtrXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsZi5sYXN0TW9kaWZpZWRba10pLGYuZXRhZ1trXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixmLmV0YWdba10pKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsZC5kYXRhVHlwZXNbMF0mJmQuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0/ZC5hY2NlcHRzW2QuZGF0YVR5cGVzWzBdXSsoZC5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitiWisiOyBxPTAuMDEiOiIiKTpkLmFjY2VwdHNbIioiXSk7Zm9yKHUgaW4gZC5oZWFkZXJzKXYuc2V0UmVxdWVzdEhlYWRlcih1LGQuaGVhZGVyc1t1XSk7aWYoZC5iZWZvcmVTZW5kJiYoZC5iZWZvcmVTZW5kLmNhbGwoZSx2LGQpPT09ITF8fHM9PT0yKSl7di5hYm9ydCgpO3JldHVybiExfWZvcih1IGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbdV0oZFt1XSk7cD1jYShiVyxkLGMsdik7aWYoIXApdygtMSwiTm8gVHJhbnNwb3J0Iik7ZWxzZXt2LnJlYWR5U3RhdGU9MSx0JiZnLnRyaWdnZXIoImFqYXhTZW5kIixbdixkXSksZC5hc3luYyYmZC50aW1lb3V0PjAmJihxPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0Iil9LGQudGltZW91dCkpO3RyeXtzPTEscC5zZW5kKGwsdyl9Y2F0Y2goeil7czwyP3coLTEseik6Zi5lcnJvcih6KX19cmV0dXJuIHZ9LHBhcmFtOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9Zi5pc0Z1bmN0aW9uKGIpP2IoKTpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtjPT09YiYmKGM9Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKGYuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFmLmlzUGxhaW5PYmplY3QoYSkpZi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHZhciBnIGluIGEpY2MoZyxhW2ddLGMsZSk7cmV0dXJuIGQuam9pbigiJiIpLnJlcGxhY2UoYkYsIisiKX19KSxmLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgY2Y9Zi5ub3coKSxjZz0vKFw9KVw/KCZ8JCl8XD9cPy9pO2YuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZi5leHBhbmRvKyJfIitjZisrfX0pLGYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlPWIuY29udGVudFR5cGU9PT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiYmdHlwZW9mIGIuZGF0YT09InN0cmluZyI7aWYoYi5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxiLmpzb25wIT09ITEmJihjZy50ZXN0KGIudXJsKXx8ZSYmY2cudGVzdChiLmRhdGEpKSl7dmFyIGcsaD1iLmpzb25wQ2FsbGJhY2s9Zi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGk9YVtoXSxqPWIudXJsLGs9Yi5kYXRhLGw9IiQxIitoKyIkMiI7Yi5qc29ucCE9PSExJiYoaj1qLnJlcGxhY2UoY2csbCksYi51cmw9PT1qJiYoZSYmKGs9ay5yZXBsYWNlKGNnLGwpKSxiLmRhdGE9PT1rJiYoais9KC9cPy8udGVzdChqKT8iJiI6Ij8iKStiLmpzb25wKyI9IitoKSkpLGIudXJsPWosYi5kYXRhPWssYVtoXT1mdW5jdGlvbihhKXtnPVthXX0sZC5hbHdheXMoZnVuY3Rpb24oKXthW2hdPWksZyYmZi5pc0Z1bmN0aW9uKGkpJiZhW2hdKGdbMF0pfSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7Z3x8Zi5lcnJvcihoKyIgd2FzIG5vdCBjYWxsZWQiKTtyZXR1cm4gZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iO3JldHVybiJzY3JpcHQifX0pLGYuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtmLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fX0pLGYuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihhKXthLmNhY2hlPT09YiYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksZi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBkLGU9Yy5oZWFkfHxjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGYsZyl7ZD1jLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQuYXN5bmM9ImFzeW5jIixhLnNjcmlwdENoYXJzZXQmJihkLmNoYXJzZXQ9YS5zY3JpcHRDaGFyc2V0KSxkLnNyYz1hLnVybCxkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhLGMpe2lmKGN8fCFkLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZC5yZWFkeVN0YXRlKSlkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGUmJmQucGFyZW50Tm9kZSYmZS5yZW1vdmVDaGlsZChkKSxkPWIsY3x8ZygyMDAsInN1Y2Nlc3MiKX0sZS5pbnNlcnRCZWZvcmUoZCxlLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQub25sb2FkKDAsMSl9fX19KTt2YXIgY2g9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGNqKWNqW2FdKDAsMSl9OiExLGNpPTAsY2o7Zi5hamF4U2V0dGluZ3MueGhyPWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJmNrKCl8fGNsKCl9OmNrLGZ1bmN0aW9uKGEpe2YuZXh0ZW5kKGYuc3VwcG9ydCx7YWpheDohIWEsY29yczohIWEmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gYX0pfShmLmFqYXhTZXR0aW5ncy54aHIoKSksZi5zdXBwb3J0LmFqYXgmJmYuYWpheFRyYW5zcG9ydChmdW5jdGlvbihjKXtpZighYy5jcm9zc0RvbWFpbnx8Zi5zdXBwb3J0LmNvcnMpe3ZhciBkO3JldHVybntzZW5kOmZ1bmN0aW9uKGUsZyl7dmFyIGg9Yy54aHIoKSxpLGo7Yy51c2VybmFtZT9oLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMsYy51c2VybmFtZSxjLnBhc3N3b3JkKTpoLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMpO2lmKGMueGhyRmllbGRzKWZvcihqIGluIGMueGhyRmllbGRzKWhbal09Yy54aHJGaWVsZHNbal07Yy5taW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUoYy5taW1lVHlwZSksIWMuY3Jvc3NEb21haW4mJiFlWyJYLVJlcXVlc3RlZC1XaXRoIl0mJihlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihqIGluIGUpaC5zZXRSZXF1ZXN0SGVhZGVyKGosZVtqXSl9Y2F0Y2goayl7fWguc2VuZChjLmhhc0NvbnRlbnQmJmMuZGF0YXx8bnVsbCksZD1mdW5jdGlvbihhLGUpe3ZhciBqLGssbCxtLG47dHJ5e2lmKGQmJihlfHxoLnJlYWR5U3RhdGU9PT00KSl7ZD1iLGkmJihoLm9ucmVhZHlzdGF0ZWNoYW5nZT1mLm5vb3AsY2gmJmRlbGV0ZSBjaltpXSk7aWYoZSloLnJlYWR5U3RhdGUhPT00JiZoLmFib3J0KCk7ZWxzZXtqPWguc3RhdHVzLGw9aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSxtPXt9LG49aC5yZXNwb25zZVhNTCxuJiZuLmRvY3VtZW50RWxlbWVudCYmKG0ueG1sPW4pLG0udGV4dD1oLnJlc3BvbnNlVGV4dDt0cnl7az1oLnN0YXR1c1RleHR9Y2F0Y2gobyl7az0iIn0haiYmYy5pc0xvY2FsJiYhYy5jcm9zc0RvbWFpbj9qPW0udGV4dD8yMDA6NDA0Omo9PT0xMjIzJiYoaj0yMDQpfX19Y2F0Y2gocCl7ZXx8ZygtMSxwKX1tJiZnKGosayxtLGwpfSwhYy5hc3luY3x8aC5yZWFkeVN0YXRlPT09ND9kKCk6KGk9KytjaSxjaCYmKGNqfHwoY2o9e30sZihhKS51bmxvYWQoY2gpKSxjaltpXT1kKSxoLm9ucmVhZHlzdGF0ZWNoYW5nZT1kKX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkKDAsMSl9fX19KTt2YXIgY209e30sY24sY28sY3A9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNxPS9eKFsrXC1dPSk/KFtcZCsuXC1dKykoW2EteiVdKikkL2ksY3IsY3M9W1siaGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxbIndpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxbIm9wYWNpdHkiXV0sY3Q7Zi5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdygic2hvdyIsMyksYSxiLGMpO2Zvcih2YXIgZz0wLGg9dGhpcy5sZW5ndGg7ZzxoO2crKylkPXRoaXNbZ10sZC5zdHlsZSYmKGU9ZC5zdHlsZS5kaXNwbGF5LCFmLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSYmZT09PSJub25lIiYmKGU9ZC5zdHlsZS5kaXNwbGF5PSIiKSxlPT09IiImJmYuY3NzKGQsImRpc3BsYXkiKT09PSJub25lIiYmZi5fZGF0YShkLCJvbGRkaXNwbGF5IixjeChkLm5vZGVOYW1lKSkpO2ZvcihnPTA7ZzxoO2crKyl7ZD10aGlzW2ddO2lmKGQuc3R5bGUpe2U9ZC5zdHlsZS5kaXNwbGF5O2lmKGU9PT0iInx8ZT09PSJub25lIilkLnN0eWxlLmRpc3BsYXk9Zi5fZGF0YShkLCJvbGRkaXNwbGF5Iil8fCIifX1yZXR1cm4gdGhpc30saGlkZTpmdW5jdGlvbihhLGIsYyl7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdygiaGlkZSIsMyksYSxiLGMpO3ZhciBkLGUsZz0wLGg9dGhpcy5sZW5ndGg7Zm9yKDtnPGg7ZysrKWQ9dGhpc1tnXSxkLnN0eWxlJiYoZT1mLmNzcyhkLCJkaXNwbGF5IiksZSE9PSJub25lIiYmIWYuX2RhdGEoZCwib2xkZGlzcGxheSIpJiZmLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGUpKTtmb3IoZz0wO2c8aDtnKyspdGhpc1tnXS5zdHlsZSYmKHRoaXNbZ10uc3R5bGUuZGlzcGxheT0ibm9uZSIpO3JldHVybiB0aGlzfSxfdG9nZ2xlOmYuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dHlwZW9mIGE9PSJib29sZWFuIjtmLmlzRnVuY3Rpb24oYSkmJmYuaXNGdW5jdGlvbihiKT90aGlzLl90b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE9PW51bGx8fGQ/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ZD9hOmYodGhpcykuaXMoIjpoaWRkZW4iKTtmKHRoaXMpW2I/InNob3ciOiJoaWRlIl0oKX0pOnRoaXMuYW5pbWF0ZShjdygidG9nZ2xlIiwzKSxhLGIsYyk7cmV0dXJuIHRoaXN9LGZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoIjpoaWRkZW4iKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBnKCl7ZS5xdWV1ZT09PSExJiZmLl9tYXJrKHRoaXMpO3ZhciBiPWYuZXh0ZW5kKHt9LGUpLGM9dGhpcy5ub2RlVHlwZT09PTEsZD1jJiZmKHRoaXMpLmlzKCI6aGlkZGVuIiksZyxoLGksaixrLGwsbSxuLG87Yi5hbmltYXRlZFByb3BlcnRpZXM9e307Zm9yKGkgaW4gYSl7Zz1mLmNhbWVsQ2FzZShpKSxpIT09ZyYmKGFbZ109YVtpXSxkZWxldGUgYVtpXSksaD1hW2ddLGYuaXNBcnJheShoKT8oYi5hbmltYXRlZFByb3BlcnRpZXNbZ109aFsxXSxoPWFbZ109aFswXSk6Yi5hbmltYXRlZFByb3BlcnRpZXNbZ109Yi5zcGVjaWFsRWFzaW5nJiZiLnNwZWNpYWxFYXNpbmdbZ118fGIuZWFzaW5nfHwic3dpbmciO2lmKGg9PT0iaGlkZSImJmR8fGg9PT0ic2hvdyImJiFkKXJldHVybiBiLmNvbXBsZXRlLmNhbGwodGhpcyk7YyYmKGc9PT0iaGVpZ2h0Inx8Zz09PSJ3aWR0aCIpJiYoYi5vdmVyZmxvdz1bdGhpcy5zdHlsZS5vdmVyZmxvdyx0aGlzLnN0eWxlLm92ZXJmbG93WCx0aGlzLnN0eWxlLm92ZXJmbG93WV0sZi5jc3ModGhpcywiZGlzcGxheSIpPT09ImlubGluZSImJmYuY3NzKHRoaXMsImZsb2F0Iik9PT0ibm9uZSImJighZi5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXR8fGN4KHRoaXMubm9kZU5hbWUpPT09ImlubGluZSI/dGhpcy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOnRoaXMuc3R5bGUuem9vbT0xKSl9Yi5vdmVyZmxvdyE9bnVsbCYmKHRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2ZvcihpIGluIGEpaj1uZXcgZi5meCh0aGlzLGIsaSksaD1hW2ldLGNwLnRlc3QoaCk/KG89Zi5fZGF0YSh0aGlzLCJ0b2dnbGUiK2kpfHwoaD09PSJ0b2dnbGUiP2Q/InNob3ciOiJoaWRlIjowKSxvPyhmLl9kYXRhKHRoaXMsInRvZ2dsZSIraSxvPT09InNob3ciPyJoaWRlIjoic2hvdyIpLGpbb10oKSk6altoXSgpKTooaz1jcS5leGVjKGgpLGw9ai5jdXIoKSxrPyhtPXBhcnNlRmxvYXQoa1syXSksbj1rWzNdfHwoZi5jc3NOdW1iZXJbaV0/IiI6InB4IiksbiE9PSJweCImJihmLnN0eWxlKHRoaXMsaSwobXx8MSkrbiksbD0obXx8MSkvai5jdXIoKSpsLGYuc3R5bGUodGhpcyxpLGwrbikpLGtbMV0mJihtPShrWzFdPT09Ii09Ij8tMToxKSptK2wpLGouY3VzdG9tKGwsbSxuKSk6ai5jdXN0b20obCxoLCIiKSk7cmV0dXJuITB9dmFyIGU9Zi5zcGVlZChiLGMsZCk7aWYoZi5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZS5jb21wbGV0ZSxbITFdKTthPWYuZXh0ZW5kKHt9LGEpO3JldHVybiBlLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZS5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGMsZCl7dHlwZW9mIGEhPSJzdHJpbmciJiYoZD1jLGM9YSxhPWIpLGMmJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChhLGIsYyl7dmFyIGU9YltjXTtmLnJlbW92ZURhdGEoYSxjLCEwKSxlLnN0b3AoZCl9dmFyIGIsYz0hMSxlPWYudGltZXJzLGc9Zi5fZGF0YSh0aGlzKTtkfHxmLl91bm1hcmsoITAsdGhpcyk7aWYoYT09bnVsbClmb3IoYiBpbiBnKWdbYl0uc3RvcCYmYi5pbmRleE9mKCIucnVuIik9PT1iLmxlbmd0aC00JiZoKHRoaXMsZyxiKTtlbHNlIGdbYj1hKyIucnVuIl0mJmdbYl0uc3RvcCYmaCh0aGlzLGcsYik7Zm9yKGI9ZS5sZW5ndGg7Yi0tOyllW2JdLmVsZW09PT10aGlzJiYoYT09bnVsbHx8ZVtiXS5xdWV1ZT09PWEpJiYoZD9lW2JdKCEwKTplW2JdLnNhdmVTdGF0ZSgpLGM9ITAsZS5zcGxpY2UoYiwxKSk7KCFkfHwhYykmJmYuZGVxdWV1ZSh0aGlzLGEpfSl9fSksZi5lYWNoKHtzbGlkZURvd246Y3coInNob3ciLDEpLHNsaWRlVXA6Y3coImhpZGUiLDEpLHNsaWRlVG9nZ2xlOmN3KCJ0b2dnbGUiLDEpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLGYuZXh0ZW5kKHtzcGVlZDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmdHlwZW9mIGE9PSJvYmplY3QiP2YuZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8Zi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFmLmlzRnVuY3Rpb24oYikmJmJ9O2QuZHVyYXRpb249Zi5meC5vZmY/MDp0eXBlb2YgZC5kdXJhdGlvbj09Im51bWJlciI/ZC5kdXJhdGlvbjpkLmR1cmF0aW9uIGluIGYuZnguc3BlZWRzP2YuZnguc3BlZWRzW2QuZHVyYXRpb25dOmYuZnguc3BlZWRzLl9kZWZhdWx0O2lmKGQucXVldWU9PW51bGx8fGQucXVldWU9PT0hMClkLnF1ZXVlPSJmeCI7ZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKGEpe2YuaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZT9mLmRlcXVldWUodGhpcyxkLnF1ZXVlKTphIT09ITEmJmYuX3VubWFyayh0aGlzKX07cmV0dXJuIGR9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjK2QqYX0sc3dpbmc6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKC1NYXRoLmNvcyhhKk1hdGguUEkpLzIrLjUpKmQrY319LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsYyl7dGhpcy5vcHRpb25zPWIsdGhpcy5lbGVtPWEsdGhpcy5wcm9wPWMsYi5vcmlnPWIub3JpZ3x8e319fSksZi5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSwoZi5meC5zdGVwW3RoaXMucHJvcF18fGYuZnguc3RlcC5fZGVmYXVsdCkodGhpcyl9LGN1cjpmdW5jdGlvbigpe2lmKHRoaXMuZWxlbVt0aGlzLnByb3BdIT1udWxsJiYoIXRoaXMuZWxlbS5zdHlsZXx8dGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF09PW51bGwpKXJldHVybiB0aGlzLmVsZW1bdGhpcy5wcm9wXTt2YXIgYSxiPWYuY3NzKHRoaXMuZWxlbSx0aGlzLnByb3ApO3JldHVybiBpc05hTihhPXBhcnNlRmxvYXQoYikpPyFifHxiPT09ImF1dG8iPzA6YjphfSxjdXN0b206ZnVuY3Rpb24oYSxjLGQpe2Z1bmN0aW9uIGgoYSl7cmV0dXJuIGUuc3RlcChhKX12YXIgZT10aGlzLGc9Zi5meDt0aGlzLnN0YXJ0VGltZT1jdHx8Y3UoKSx0aGlzLmVuZD1jLHRoaXMubm93PXRoaXMuc3RhcnQ9YSx0aGlzLnBvcz10aGlzLnN0YXRlPTAsdGhpcy51bml0PWR8fHRoaXMudW5pdHx8KGYuY3NzTnVtYmVyW3RoaXMucHJvcF0/IiI6InB4IiksaC5xdWV1ZT10aGlzLm9wdGlvbnMucXVldWUsaC5lbGVtPXRoaXMuZWxlbSxoLnNhdmVTdGF0ZT1mdW5jdGlvbigpe2Uub3B0aW9ucy5oaWRlJiZmLl9kYXRhKGUuZWxlbSwiZnhzaG93IitlLnByb3ApPT09YiYmZi5fZGF0YShlLmVsZW0sImZ4c2hvdyIrZS5wcm9wLGUuc3RhcnQpfSxoKCkmJmYudGltZXJzLnB1c2goaCkmJiFjciYmKGNyPXNldEludGVydmFsKGcudGljayxnLmludGVydmFsKSl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgYT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09YXx8Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuc2hvdz0hMCxhIT09Yj90aGlzLmN1c3RvbSh0aGlzLmN1cigpLGEpOnRoaXMuY3VzdG9tKHRoaXMucHJvcD09PSJ3aWR0aCJ8fHRoaXMucHJvcD09PSJoZWlnaHQiPzE6MCx0aGlzLmN1cigpKSxmKHRoaXMuZWxlbSkuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApfHxmLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApLHRoaXMub3B0aW9ucy5oaWRlPSEwLHRoaXMuY3VzdG9tKHRoaXMuY3VyKCksMCl9LHN0ZXA6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9Y3R8fGN1KCksZz0hMCxoPXRoaXMuZWxlbSxpPXRoaXMub3B0aW9ucztpZihhfHxlPj1pLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz10aGlzLmVuZCx0aGlzLnBvcz10aGlzLnN0YXRlPTEsdGhpcy51cGRhdGUoKSxpLmFuaW1hdGVkUHJvcGVydGllc1t0aGlzLnByb3BdPSEwO2ZvcihiIGluIGkuYW5pbWF0ZWRQcm9wZXJ0aWVzKWkuYW5pbWF0ZWRQcm9wZXJ0aWVzW2JdIT09ITAmJihnPSExKTtpZihnKXtpLm92ZXJmbG93IT1udWxsJiYhZi5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MmJmYuZWFjaChbIiIsIlgiLCJZIl0sZnVuY3Rpb24oYSxiKXtoLnN0eWxlWyJvdmVyZmxvdyIrYl09aS5vdmVyZmxvd1thXX0pLGkuaGlkZSYmZihoKS5oaWRlKCk7aWYoaS5oaWRlfHxpLnNob3cpZm9yKGIgaW4gaS5hbmltYXRlZFByb3BlcnRpZXMpZi5zdHlsZShoLGIsaS5vcmlnW2JdKSxmLnJlbW92ZURhdGEoaCwiZnhzaG93IitiLCEwKSxmLnJlbW92ZURhdGEoaCwidG9nZ2xlIitiLCEwKTtkPWkuY29tcGxldGUsZCYmKGkuY29tcGxldGU9ITEsZC5jYWxsKGgpKX1yZXR1cm4hMX1pLmR1cmF0aW9uPT1JbmZpbml0eT90aGlzLm5vdz1lOihjPWUtdGhpcy5zdGFydFRpbWUsdGhpcy5zdGF0ZT1jL2kuZHVyYXRpb24sdGhpcy5wb3M9Zi5lYXNpbmdbaS5hbmltYXRlZFByb3BlcnRpZXNbdGhpcy5wcm9wXV0odGhpcy5zdGF0ZSxjLDAsMSxpLmR1cmF0aW9uKSx0aGlzLm5vdz10aGlzLnN0YXJ0Kyh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0aGlzLnBvcyksdGhpcy51cGRhdGUoKTtyZXR1cm4hMH19LGYuZXh0ZW5kKGYuZngse3RpY2s6ZnVuY3Rpb24oKXt2YXIgYSxiPWYudGltZXJzLGM9MDtmb3IoO2M8Yi5sZW5ndGg7YysrKWE9YltjXSwhYSgpJiZiW2NdPT09YSYmYi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxmLmZ4LnN0b3AoKX0saW50ZXJ2YWw6MTMsc3RvcDpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoY3IpLGNyPW51bGx9LHNwZWVkczp7c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxzdGVwOntvcGFjaXR5OmZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLCJvcGFjaXR5IixhLm5vdyl9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe2EuZWxlbS5zdHlsZSYmYS5lbGVtLnN0eWxlW2EucHJvcF0hPW51bGw/YS5lbGVtLnN0eWxlW2EucHJvcF09YS5ub3crYS51bml0OmEuZWxlbVthLnByb3BdPWEubm93fX19KSxmLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7Zi5meC5zdGVwW2JdPWZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLGIsTWF0aC5tYXgoMCxhLm5vdykpfX0pLGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZi5ncmVwKGYudGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGN5PS9edCg/OmFibGV8ZHxoKSQvaSxjej0vXig/OmJvZHl8aHRtbCkkL2k7ImdldEJvdW5kaW5nQ2xpZW50UmVjdCJpbiBjLmRvY3VtZW50RWxlbWVudD9mLmZuLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdLGM7aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dHJ5e2M9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChkKXt9dmFyIGU9Yi5vd25lckRvY3VtZW50LGc9ZS5kb2N1bWVudEVsZW1lbnQ7aWYoIWN8fCFmLmNvbnRhaW5zKGcsYikpcmV0dXJuIGM/e3RvcDpjLnRvcCxsZWZ0OmMubGVmdH06e3RvcDowLGxlZnQ6MH07dmFyIGg9ZS5ib2R5LGk9Y0EoZSksaj1nLmNsaWVudFRvcHx8aC5jbGllbnRUb3B8fDAsaz1nLmNsaWVudExlZnR8fGguY2xpZW50TGVmdHx8MCxsPWkucGFnZVlPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wLG09aS5wYWdlWE9mZnNldHx8Zi5zdXBwb3J0LmJveE1vZGVsJiZnLnNjcm9sbExlZnR8fGguc2Nyb2xsTGVmdCxuPWMudG9wK2wtaixvPWMubGVmdCttLWs7cmV0dXJue3RvcDpuLGxlZnQ6b319OmYuZm4ub2Zmc2V0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dmFyIGMsZD1iLm9mZnNldFBhcmVudCxlPWIsZz1iLm93bmVyRG9jdW1lbnQsaD1nLmRvY3VtZW50RWxlbWVudCxpPWcuYm9keSxqPWcuZGVmYXVsdFZpZXcsaz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGw9Yi5vZmZzZXRUb3AsbT1iLm9mZnNldExlZnQ7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmYiE9PWkmJmIhPT1oKXtpZihmLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7Yz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGwtPWIuc2Nyb2xsVG9wLG0tPWIuc2Nyb2xsTGVmdCxiPT09ZCYmKGwrPWIub2Zmc2V0VG9wLG0rPWIub2Zmc2V0TGVmdCxmLnN1cHBvcnQuZG9lc05vdEFkZEJvcmRlciYmKCFmLnN1cHBvcnQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHN8fCFjeS50ZXN0KGIubm9kZU5hbWUpKSYmKGwrPXBhcnNlRmxvYXQoYy5ib3JkZXJUb3BXaWR0aCl8fDAsbSs9cGFyc2VGbG9hdChjLmJvcmRlckxlZnRXaWR0aCl8fDApLGU9ZCxkPWIub2Zmc2V0UGFyZW50KSxmLnN1cHBvcnQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZjLm92ZXJmbG93IT09InZpc2libGUiJiYobCs9cGFyc2VGbG9hdChjLmJvcmRlclRvcFdpZHRoKXx8MCxtKz1wYXJzZUZsb2F0KGMuYm9yZGVyTGVmdFdpZHRoKXx8MCksaz1jfWlmKGsucG9zaXRpb249PT0icmVsYXRpdmUifHxrLnBvc2l0aW9uPT09InN0YXRpYyIpbCs9aS5vZmZzZXRUb3AsbSs9aS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5maXhlZFBvc2l0aW9uJiZrLnBvc2l0aW9uPT09ImZpeGVkIiYmKGwrPU1hdGgubWF4KGguc2Nyb2xsVG9wLGkuc2Nyb2xsVG9wKSxtKz1NYXRoLm1heChoLnNjcm9sbExlZnQsaS5zY3JvbGxMZWZ0KSk7cmV0dXJue3RvcDpsLGxlZnQ6bX19LGYub2Zmc2V0PXtib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGM9YS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCk7cmV0dXJue3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Zi5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPWYoYSksZz1lLm9mZnNldCgpLGg9Zi5jc3MoYSwidG9wIiksaT1mLmNzcyhhLCJsZWZ0Iiksaj0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmZi5pbkFycmF5KCJhdXRvIixbaCxpXSk+LTEsaz17fSxsPXt9LG0sbjtqPyhsPWUucG9zaXRpb24oKSxtPWwudG9wLG49bC5sZWZ0KToobT1wYXJzZUZsb2F0KGgpfHwwLG49cGFyc2VGbG9hdChpKXx8MCksZi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGcpKSxiLnRvcCE9bnVsbCYmKGsudG9wPWIudG9wLWcudG9wK20pLGIubGVmdCE9bnVsbCYmKGsubGVmdD1iLmxlZnQtZy5sZWZ0K24pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGspOmUuY3NzKGspfX0sZi5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuIG51bGw7dmFyIGE9dGhpc1swXSxiPXRoaXMub2Zmc2V0UGFyZW50KCksYz10aGlzLm9mZnNldCgpLGQ9Y3oudGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO2MudG9wLT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjLmxlZnQtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCxkLnRvcCs9cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8MCxkLmxlZnQrPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyTGVmdFdpZHRoIikpfHwwO3JldHVybnt0b3A6Yy50b3AtZC50b3AsbGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fGMuYm9keTt3aGlsZShhJiYhY3oudGVzdChhLm5vZGVOYW1lKSYmZi5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KSxmLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxjKXt2YXIgZD0ic2Nyb2xsIitjO2YuZm5bZF09ZnVuY3Rpb24oYyl7dmFyIGUsZztpZihjPT09Yil7ZT10aGlzWzBdO2lmKCFlKXJldHVybiBudWxsO2c9Y0EoZSk7cmV0dXJuIGc/InBhZ2VYT2Zmc2V0ImluIGc/Z1thPyJwYWdlWU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06Zi5zdXBwb3J0LmJveE1vZGVsJiZnLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8Zy5kb2N1bWVudC5ib2R5W2RdOmVbZF19cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2c9Y0EodGhpcyksZz9nLnNjcm9sbFRvKGE/ZihnKS5zY3JvbGxMZWZ0KCk6YyxhP2M6ZihnKS5zY3JvbGxUb3AoKSk6dGhpc1tkXT1jfSl9fSksZi5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGMpe3ZhciBkPWMudG9Mb3dlckNhc2UoKTtmLmZuWyJpbm5lciIrY109ZnVuY3Rpb24oKXt2YXIgYT10aGlzWzBdO3JldHVybiBhP2Euc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhhLGQsInBhZGRpbmciKSk6dGhpc1tkXSgpOm51bGx9LGYuZm5bIm91dGVyIitjXT1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO3JldHVybiBiP2Iuc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhiLGQsYT8ibWFyZ2luIjoiYm9yZGVyIikpOnRoaXNbZF0oKTpudWxsfSxmLmZuW2RdPWZ1bmN0aW9uKGEpe3ZhciBlPXRoaXNbMF07aWYoIWUpcmV0dXJuIGE9PW51bGw/bnVsbDp0aGlzO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Y1tkXShhLmNhbGwodGhpcyxiLGNbZF0oKSkpfSk7aWYoZi5pc1dpbmRvdyhlKSl7dmFyIGc9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10saD1lLmRvY3VtZW50LmJvZHk7cmV0dXJuIGUuZG9jdW1lbnQuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmZ3x8aCYmaFsiY2xpZW50IitjXXx8Z31pZihlLm5vZGVUeXBlPT09OSlyZXR1cm4gTWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10sZS5ib2R5WyJzY3JvbGwiK2NdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2NdLGUuYm9keVsib2Zmc2V0IitjXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitjXSk7aWYoYT09PWIpe3ZhciBpPWYuY3NzKGUsZCksaj1wYXJzZUZsb2F0KGkpO3JldHVybiBmLmlzTnVtZXJpYyhqKT9qOml9cmV0dXJuIHRoaXMuY3NzKGQsdHlwZW9mIGE9PSJzdHJpbmciP2E6YSsicHgiKX19KSxhLmpRdWVyeT1hLiQ9Zn0pKHdpbmRvdyk7]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ3ByZXVuaW5zdGFsbCddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgdGhlIFBsYW55byBtb2R1bGU/JzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnUGxhbnlvIFJlc2VydmF0aW9uIFN5c3RlbSBtb2R1bGUgc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCEnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1BsYW55byBzdWNjZXNzZnVsbHkgdW4taW5zdGFsbGVkLic7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdQbGFueW8gUmVzZXJ2YXRpb24gU3lzdGVtJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnQSBtb2R1bGUgZm9yIGZhY2lsaXRhdGluZyBTT0FQIHRyYW5zYWN0aW9ucyB3aXRoaW4gQ01TTVMnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnSW5zdGFsbGVkJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnVXBncmFkZWQnOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvcic7CiRsYW5nWydoZWxwY29udGVudCddID0gIgpQbGFueW8gaXMgYSBjb21taXNzaW9uLWZyZWUgZmxleGlibGUgb25saW5lIHJlc2VydmF0aW9uIHN5c3RlbSBmb3IgYW55IGtpbmQgb2YgcmVzb3VyY2VzIHN1Y2ggYXMgaG90ZWxzLCBob2xpZGF5IGFwYXJ0bWVudHMsIHlhY2h0IHJlbnRhbHMsIGRyaXZpbmcgc2Nob29scywgdGVubmlzIGNvdXJ0cywgZG9jdG9yIGFwcG9pbnRtZW50cywgZXZlbnRzIGV0Yy4NCjxiciAvPjxiciAvPg0KUGxhbnlvIGlzIGF2YWlsYWJsZSBpbiAyMCBsYW5ndWFnZXMgYW5kIGhlbHBzIHlvdSBtYW5hZ2UgeW91ciBjbGllbnRzJyBib29raW5ncyBieSBoYW5kbGluZyBhbGwgZW1haWwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBjbGllbnRzLCBhbGxvd2luZyB2YXJpb3VzIGJvb2tpbmcgY29uZmlybWF0aW9uIG1lY2hhbmlzbXMsIGhhbmRsaW5nIHBheW1lbnRzIChhbHNvIG9ubGluZSBjcmVkaXQgY2FyZCBwYXltZW50cyksIHByaW50aW5nIGludm9pY2VzIGV0Yy4NCjxiciAvPjxiciAvPg0KVGhpcyBtb2R1bGUgZW1iZWRzIHRoZSByZXNlcnZhdGlvbiBzeXN0ZW0gKGF2YWlsYWJpbGl0eSBzZWFyY2ggYm94IGFuZCB0aGUgcmVzZXJ2YXRpb24gZm9ybSkgaW50byB5b3VyIHNpdGUgc28gdGhlIHZpc2l0b3JzIGNhbiBnbyB0aHJvdWdoIHRoZSB3aG9sZSBwcm9jZXNzIChzZWFyY2ggYW5kIHJlc2VydmF0aW9uKSB3aXRob3V0IGV2ZXIgbGVhdmluZyB5b3VyIHdlYnNpdGUuIEJlZm9yZSB1c2luZyB0aGlzIG1vZHVsZSB5b3Ugc2hvdWxkIGNyZWF0ZSBhbiBhY2NvdW50IGF0IHBsYW55by5jb20uIAo8YnIgLz4KUGxlYXNlIHNlZSBodHRwOi8vd3d3LnBsYW55by5jb20vY21zbXMtcmVzZXJ2YXRpb24tc3lzdGVtIGZvciBtb3JlIGluZm8uIFlvdSBjYW4gYWxzbyBzZWUgb3VyIGhvbWUgcGFnZSBhdCBodHRwOi8vd3d3LnBsYW55by5jb20gZm9yIGFkbWluIGJhY2tvZmZpY2Ugb3IgdmlzaXRvciBkZW1vbnN0cmF0aW9uLCBvciBmb3IgdHV0b3JpYWwgbW92aWVzLCBwcmljaW5nIGFuZCBtb3JlIGluZm8uIAo8YnIgLz4KPGgzPlVzYWdlPC9oMz4KT25jZSB5b3UgaGF2ZSB0aGUgUGxhbnlvIG1vZHVsZSBpbnN0YWxsZWQsIGdvIHRvIHRoZSBwYWdlIHdoZXJlIHlvdSB3YW50IHRvIHNob3cgdGhlIHNlYXJjaCBmb3JtIGFuZCBhZGQgdGhlIFBsYW55byBtb2R1bGUgdGFnLiAKRm9yIGRlbW8gcHVycG9zZXMgeW91IG1heSBhZGQgdGhlIHRhZyB3aXRob3V0IGFueSBwYXJhbWV0ZXJzOjxiciAvPjxiciAvPgp7Y21zX21vZHVsZSBtb2R1bGU9J1BsYW55byd9PGJyIC8+PGJyIC8+Ck90aGVyd2lzZSwgYXMgYSBtaW5pbXVtLCB0aGUgdGFnIHJlcXVpcmVzIHlvdXIgc2l0ZSBJRCAoaWYgeW91IGRvbid0IGhhdmUgb25lLCBjcmVhdGUgYSBuZXcgc2l0ZSBhdCB3d3cucGxhbnlvLmNvbSk8YnIgLz48YnIgLz4Ke2Ntc19tb2R1bGUgbW9kdWxlPSdQbGFueW8nIHNpdGU9JzExJ308YnIgLz48YnIgLz4KU2VlIHRoZSB0YWJsZSBiZWxvdyBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMgdGhhdCB5b3UgY2FuIGFkZGl0aW9uYWxseSB1c2UgaW4gdGhlIHRhZy48YnIgLz4KCjxoMz5PcHRpb25hbCBQYXJhbWV0ZXJzPC9oMz4KPHRhYmxlIHdpZHRoPScxMDAlJyBib3JkZXI9JzEnIGNlbGxwYWRkaW5nPSczJz4KPHRib2R5Pgo8dHI+PHRoPlBhcmFtZXRlcjwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48dGg+RGVmYXVsdDwvdGg+PC90cj4KPHRyPjx0ZD5zaXRlPC90ZD48dGQ+cGxhbnlvIHNpdGUgSUQ8L3RkPjx0ZD48Yj5kZW1vPC9iPiAoPSBkZW1vIHNpdGUpPC90ZD48L3RyPgo8dHI+PHRkPmxhbmd1YWdlPC90ZD48dGQ+bGFuZ3VhZ2Ugb2YgdGhlIHVzZXIgaW50ZXJmYWNlOyBjdXJyZW50bHkgc3VwcG9ydGVkIGxhbmd1YWdlczogRU4sIEZSLCBERSwgSVQsIEVTLCBQTCwgREssIEZJLCBTRSwgSVMsIFJPLCBOTywgUlUsIE5MLCBFTCwgUFQsIENTLCBDQSwgRVQsIEpBPC90ZD48dGQ+PGI+RU48L2I+ICg9IEVuZ2xpc2gpPC90ZD48L3RyPgo8dHI+PHRkPmV4dHJhX3NlYXJjaF9maWVsZHM8L3RkPjx0ZD5jb21tYS1zZXBhcmF0ZWQgZXh0cmEgZmllbGRzIGluIHRoZSBzZWFyY2ggYm94PC90ZD48dGQ+bm9uZTwvdGQ+PC90cj4KPHRyPjx0ZD5zb3J0X2ZpZWxkczwvdGQ+PHRkPmNvbW1hLXNlcGFyYXRlZCBzb3J0IGZpZWxkczsgYSBzaW5nbGUgZmllbGQgd2lsbCBoaWRlIHRoZSBzb3J0IGRyb3Bkb3duIGJveDwvdGQ+PHRkPm5vbmU8L3RkPjwvdHI+Cjx0cj48dGQ+ZGVmYXVsdF9tb2RlPC90ZD48dGQ+Q2hvb3NlIHRoZSBpbml0aWFsIG1vZGU6ICdzZWFyY2gnIHRvIGFsbG93IGNsaWVudHMgdG8gc2VhcmNoIGZvciBhdmFpbGFibGUgZGF0ZXMgb3IgJ3Jlc291cmNlX2xpc3QnIHRvIGRpc3BsYXkgYSBsaXN0IG9mIGFsbCByZXNvdXJjZXMgKGluIHN1Y2ggY2FzZSBzZWFyY2ggbXVzdCBiZSBpbml0aWF0ZWQgYnkgZW1iZWRkaW5nIGFuIGV4dHJhIHNlYXJjaCBib3ggLS0gc2VlIGxhc3Qgc3RlcCBvZiBpbnRlZ3JhdGlvbiBpbiBQbGFueW8ncyBhZG1pbiBwYW5lbCkuIENob29zaW5nICdlbXB0eScgd2lsbCBub3QgZGlzcGxheSBhbnl0aGluZyBieSBkZWZhdWx0IGJ1dCB3aWxsIHJlcXVpcmUgeW91IHRvIGVpdGhlciBwYXNzIHRoZSByZXNvdXJjZSBJRCB0byB0aGUgbW9kdWxlIGFzIHBhcmFtZXRlciBpbiB0aGUgVVJMIChyZXNvdXJjZV9pZCkgb3IgYWRkIGFuIGV4dGVybmFsIHNlYXJjaCBib3ggb3IgY2FsZW5kYXIgcHJldmlldzwvdGQ+PHRkPjxiPnJlc291cmNlczwvYj48L3RkPjwvdHI+Cjx0cj48dGQ+anNfZnJhbWV3b3JrPC90ZD48dGQ+T25lIG9mOiAnanF1ZXJ5JywgJ2pxdWVyeS1ub2luY2x1ZGUnLCAnbW9vdG9vbHMnLCAnbW9vdG9vbHMtbm9pbmNsdWRlJzsgQ2hvb3NlIHRoZSBKYXZhc2NyaXB0IGZyYW1ld29yayB3aGljaCB3aWxsIGJlIHVzZWQgYnkgUGxhbnlvLiBQbGFueW8gd29ya3Mgd2l0aCBib3RoIG1vb3Rvb2xzIGFuZCBqUXVlcnkuIExlYXZlIHRoZSBkZWZhdWx0IGlmIHlvdSdyZSBub3Qgc3VyZSB3aGljaCBvbmUgdG8gY2hvb3NlLiBDaGFuZ2UgdG8gJ21vb3Rvb2xzJyBpZiB5b3UgYWxyZWFkeSB1c2UgbW9vdG9vbHMgb24geW91ciB3ZWJzaXRlIGFuZCBkb24ndCB3YW50IHRvIGluY2x1ZGUgbXVsdGlwbGUgSlMgZnJhbWV3b3Jrcy4gSWYgb3RoZXIgcGFydHMgb2YgeW91ciB3ZWJzaXRlIGFscmVhZHkgdXNlIHRoZSBsaWJyYXJ5IGNob3NlbiwgY2hvb3NlIHRoZSAneHh4LW5vaW5jbHVkZScgdmVyc2lvbiB0byBhdm9pZCBpbmNsdWRpbmcgdGhlIGxpYnJhcnkgdHdpY2U8L3RkPjx0ZD48Yj5qcXVlcnk8L2I+PC90ZD48L3RyPgo8dHI+PHRkPmF0dHJpYnV0ZV9zdHJpbmc8L3RkPjx0ZD5PcHRpb25hbCBhdHRyaWJ1dGUgc3RyaW5nIGZvciBzcGVjaWFsIG1vZGVzPC90ZD48dGQ+bm9uZTwvdGQ+PC90cj4KPC90Ym9keT48L3RhYmxlPgo8YnIgLz48YnIgLz4KIjsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJwo8dWw+CjxsaT4xLjAgLSBNYXksIDIwMTEKPHA+VGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZSBvZiB0aGUgbW9kdWxlLjwvcD4KPC9saT4KPGxpPjEuOSAtIERlYywgMjAxMQo8cD5BZGRlZCBvcHRpb25hbCBhdHRyaWJ1dGUgc3RyaW5nIHBhcmFtZXRlciBhbmQgYSBuZXcgbW9kZSwgdXBjb21pbmcgYXZhaWxhYmlsaXR5LCB3aGljaCBsZXRzIHRoZSBjdXN0b21lcnMgc2VlIGFsbCBhdmFpbGFibGUgcmVzb3VyY2VzIGluIHRoZSBjb21pbmcgZGF5cy48L3A+CjwvbGk+CjwvdWw+Cic7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBkdW1teSBpbmRleC5odG1sIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/mobile.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+DQo8aHRtbD4NCjxoZWFkPiAgICANCiAgICA8dGl0bGU+TWFrZSByZXNlcnZhdGlvbjwvdGl0bGU+DQogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCIgLz4NCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgKiB7bWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweDsgYm9yZGVyOiAwcHg7fQogICAgICBodG1sIHtoZWlnaHQ6IDEwMCU7fQ0KICAgICAgYm9keSB7aGVpZ2h0OiAxMDAlO30NCiAgICA8L3N0eWxlPg0KPC9oZWFkPgo8Ym9keT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiBwbGFueW9fZ2V0X3BhcmFtIChuYW1lKSB7CiAgbmFtZSA9IG5hbWUucmVwbGFjZSgvW1xbXS8sIlxcXFsiKS5yZXBsYWNlKC9bXF1dLywiXFxcXSIpOwogIHZhciByZWdleFMgPSAiW1xcPyZdIituYW1lKyI9KFteJiNdKikiOwogIHZhciByZWdleCA9IG5ldyBSZWdFeHAgKHJlZ2V4Uyk7CiAgdmFyIHJlc3VsdHMgPSByZWdleC5leGVjICh3aW5kb3cubG9jYXRpb24uaHJlZik7CiAgaWYgKHJlc3VsdHMgPT0gbnVsbCkKICAgIHJldHVybiBudWxsOwogIGVsc2UKICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0c1sxXSkucmVwbGFjZSgvXCsvZywgJyAnKTsKfQp2YXIgdGl0bGUgPSBwbGFueW9fZ2V0X3BhcmFtICgndCcpOwppZiAodGl0bGUpCiAgZG9jdW1lbnQudGl0bGUgPSB0aXRsZTsgICAKZG9jdW1lbnQud3JpdGUgKCI8IisiaWZyYW1lIGlkPSdtb2JpbGVfc3JjJyBzcmM9XCIiICsgcGxhbnlvX2dldF9wYXJhbSAoJ3NyYycpICsgIlwiIHdpZHRoPScxMDAlJyBzdHlsZT0nbWluLWhlaWdodDo5OCU7JyBmcmFtZWJvcmRlcj0nMCcgbWFyZ2luaGVpZ2h0PScwJyBtYXJnaW53aWR0aD0nMCc+Iik7DQpkb2N1bWVudC53cml0ZSAoIiA8IisicD5Zb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBpZnJhbWVzLjwvIisicD4iKTsNCmRvY3VtZW50LndyaXRlICgiPC8iKyJpZnJhbWU+Iik7CgpmdW5jdGlvbiBwbGFueW9fbXNnX2xpc3RlbmVyKGV2ZW50KSB7CmlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuaW5kZXhPZignc2Nyb2xsJykgIT0gLTEpCiAgIHdpbmRvdy5zY3JvbGxUbygwLDApOwp9CmlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikKIGFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBwbGFueW9fbXNnX2xpc3RlbmVyLCBmYWxzZSkKZWxzZQogYXR0YWNoRXZlbnQoIm9ubWVzc2FnZSIsIHBsYW55b19tc2dfbGlzdGVuZXIpCgo8L3NjcmlwdD4KCjwvYm9keT4=]]></data>
	</file>
	<file>
	  <filename>/mootools-1.2-core.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly9Nb29Ub29scywgPGh0dHA6Ly9tb290b29scy5uZXQ+LCBNeSBPYmplY3QgT3JpZW50ZWQgKEphdmFTY3JpcHQpIFRvb2xzLiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBWYWxlcmlvIFByb2lldHRpLCA8aHR0cDovL21hZDRtaWxrLm5ldD4sIE1JVCBTdHlsZSBMaWNlbnNlLgoKdmFyIE1vb1Rvb2xzPXt2ZXJzaW9uOiIxLjIuNCIsYnVpbGQ6IjBkOTExMzI0MWE5MGI5Y2Q1NjQzYjkyNjc5NTg1MmEyMDI2NzEwZDQifTt2YXIgTmF0aXZlPWZ1bmN0aW9uKGspe2s9a3x8e307dmFyIGE9ay5uYW1lO3ZhciBpPWsubGVnYWN5O3ZhciBiPWsucHJvdGVjdDsKdmFyIGM9ay5pbXBsZW1lbnQ7dmFyIGg9ay5nZW5lcmljczt2YXIgZj1rLmluaXRpYWxpemU7dmFyIGc9ay5hZnRlckltcGxlbWVudHx8ZnVuY3Rpb24oKXt9O3ZhciBkPWZ8fGk7aD1oIT09ZmFsc2U7ZC5jb25zdHJ1Y3Rvcj1OYXRpdmU7ZC4kZmFtaWx5PXtuYW1lOiJuYXRpdmUifTsKaWYoaSYmZil7ZC5wcm90b3R5cGU9aS5wcm90b3R5cGU7fWQucHJvdG90eXBlLmNvbnN0cnVjdG9yPWQ7aWYoYSl7dmFyIGU9YS50b0xvd2VyQ2FzZSgpO2QucHJvdG90eXBlLiRmYW1pbHk9e25hbWU6ZX07TmF0aXZlLnR5cGl6ZShkLGUpO312YXIgaj1mdW5jdGlvbihuLGwsbyxtKXtpZighYnx8bXx8IW4ucHJvdG90eXBlW2xdKXtuLnByb3RvdHlwZVtsXT1vOwp9aWYoaCl7TmF0aXZlLmdlbmVyaWNpemUobixsLGIpO31nLmNhbGwobixsLG8pO3JldHVybiBuO307ZC5hbGlhcz1mdW5jdGlvbihuLGwscCl7aWYodHlwZW9mIG49PSJzdHJpbmciKXt2YXIgbz10aGlzLnByb3RvdHlwZVtuXTtpZigobj1vKSl7cmV0dXJuIGoodGhpcyxsLG4scCk7Cn19Zm9yKHZhciBtIGluIG4pe3RoaXMuYWxpYXMobSxuW21dLGwpO31yZXR1cm4gdGhpczt9O2QuaW1wbGVtZW50PWZ1bmN0aW9uKG0sbCxvKXtpZih0eXBlb2YgbT09InN0cmluZyIpe3JldHVybiBqKHRoaXMsbSxsLG8pO31mb3IodmFyIG4gaW4gbSl7aih0aGlzLG4sbVtuXSxsKTsKfXJldHVybiB0aGlzO307aWYoYyl7ZC5pbXBsZW1lbnQoYyk7fXJldHVybiBkO307TmF0aXZlLmdlbmVyaWNpemU9ZnVuY3Rpb24oYixjLGEpe2lmKCghYXx8IWJbY10pJiZ0eXBlb2YgYi5wcm90b3R5cGVbY109PSJmdW5jdGlvbiIpe2JbY109ZnVuY3Rpb24oKXt2YXIgZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwpyZXR1cm4gYi5wcm90b3R5cGVbY10uYXBwbHkoZC5zaGlmdCgpLGQpO307fX07TmF0aXZlLmltcGxlbWVudD1mdW5jdGlvbihkLGMpe2Zvcih2YXIgYj0wLGE9ZC5sZW5ndGg7YjxhO2IrKyl7ZFtiXS5pbXBsZW1lbnQoYyk7fX07TmF0aXZlLnR5cGl6ZT1mdW5jdGlvbihhLGIpe2lmKCFhLnR5cGUpe2EudHlwZT1mdW5jdGlvbihjKXtyZXR1cm4oJHR5cGUoYyk9PT1iKTsKfTt9fTsoZnVuY3Rpb24oKXt2YXIgYT17QXJyYXk6QXJyYXksRGF0ZTpEYXRlLEZ1bmN0aW9uOkZ1bmN0aW9uLE51bWJlcjpOdW1iZXIsUmVnRXhwOlJlZ0V4cCxTdHJpbmc6U3RyaW5nfTtmb3IodmFyIGggaW4gYSl7bmV3IE5hdGl2ZSh7bmFtZTpoLGluaXRpYWxpemU6YVtoXSxwcm90ZWN0OnRydWV9KTsKfXZhciBkPXsiYm9vbGVhbiI6Qm9vbGVhbiwibmF0aXZlIjpOYXRpdmUsb2JqZWN0Ok9iamVjdH07Zm9yKHZhciBjIGluIGQpe05hdGl2ZS50eXBpemUoZFtjXSxjKTt9dmFyIGY9e0FycmF5OlsiY29uY2F0IiwiaW5kZXhPZiIsImpvaW4iLCJsYXN0SW5kZXhPZiIsInBvcCIsInB1c2giLCJyZXZlcnNlIiwic2hpZnQiLCJzbGljZSIsInNvcnQiLCJzcGxpY2UiLCJ0b1N0cmluZyIsInVuc2hpZnQiLCJ2YWx1ZU9mIl0sU3RyaW5nOlsiY2hhckF0IiwiY2hhckNvZGVBdCIsImNvbmNhdCIsImluZGV4T2YiLCJsYXN0SW5kZXhPZiIsIm1hdGNoIiwicmVwbGFjZSIsInNlYXJjaCIsInNsaWNlIiwic3BsaXQiLCJzdWJzdHIiLCJzdWJzdHJpbmciLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwidmFsdWVPZiJdfTsKZm9yKHZhciBlIGluIGYpe2Zvcih2YXIgYj1mW2VdLmxlbmd0aDtiLS07KXtOYXRpdmUuZ2VuZXJpY2l6ZShhW2VdLGZbZV1bYl0sdHJ1ZSk7fX19KSgpO3ZhciBIYXNoPW5ldyBOYXRpdmUoe25hbWU6Ikhhc2giLGluaXRpYWxpemU6ZnVuY3Rpb24oYSl7aWYoJHR5cGUoYSk9PSJoYXNoIil7YT0kdW5saW5rKGEuZ2V0Q2xlYW4oKSk7Cn1mb3IodmFyIGIgaW4gYSl7dGhpc1tiXT1hW2JdO31yZXR1cm4gdGhpczt9fSk7SGFzaC5pbXBsZW1lbnQoe2ZvckVhY2g6ZnVuY3Rpb24oYixjKXtmb3IodmFyIGEgaW4gdGhpcyl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShhKSl7Yi5jYWxsKGMsdGhpc1thXSxhLHRoaXMpOwp9fX0sZ2V0Q2xlYW46ZnVuY3Rpb24oKXt2YXIgYj17fTtmb3IodmFyIGEgaW4gdGhpcyl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShhKSl7YlthXT10aGlzW2FdO319cmV0dXJuIGI7fSxnZXRMZW5ndGg6ZnVuY3Rpb24oKXt2YXIgYj0wO2Zvcih2YXIgYSBpbiB0aGlzKXtpZih0aGlzLmhhc093blByb3BlcnR5KGEpKXtiKys7Cn19cmV0dXJuIGI7fX0pO0hhc2guYWxpYXMoImZvckVhY2giLCJlYWNoIik7QXJyYXkuaW1wbGVtZW50KHtmb3JFYWNoOmZ1bmN0aW9uKGMsZCl7Zm9yKHZhciBiPTAsYT10aGlzLmxlbmd0aDtiPGE7YisrKXtjLmNhbGwoZCx0aGlzW2JdLGIsdGhpcyk7fX19KTtBcnJheS5hbGlhcygiZm9yRWFjaCIsImVhY2giKTsKZnVuY3Rpb24gJEEoYil7aWYoYi5pdGVtKXt2YXIgYT1iLmxlbmd0aCxjPW5ldyBBcnJheShhKTt3aGlsZShhLS0pe2NbYV09YlthXTt9cmV0dXJuIGM7fXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiKTt9ZnVuY3Rpb24gJGFyZ3VtZW50cyhhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzW2FdOwp9O31mdW5jdGlvbiAkY2hrKGEpe3JldHVybiAhIShhfHxhPT09MCk7fWZ1bmN0aW9uICRjbGVhcihhKXtjbGVhclRpbWVvdXQoYSk7Y2xlYXJJbnRlcnZhbChhKTtyZXR1cm4gbnVsbDt9ZnVuY3Rpb24gJGRlZmluZWQoYSl7cmV0dXJuKGEhPXVuZGVmaW5lZCk7fWZ1bmN0aW9uICRlYWNoKGMsYixkKXt2YXIgYT0kdHlwZShjKTsKKChhPT0iYXJndW1lbnRzInx8YT09ImNvbGxlY3Rpb24ifHxhPT0iYXJyYXkiKT9BcnJheTpIYXNoKS5lYWNoKGMsYixkKTt9ZnVuY3Rpb24gJGVtcHR5KCl7fWZ1bmN0aW9uICRleHRlbmQoYyxhKXtmb3IodmFyIGIgaW4gKGF8fHt9KSl7Y1tiXT1hW2JdO31yZXR1cm4gYzsKfWZ1bmN0aW9uICRIKGEpe3JldHVybiBuZXcgSGFzaChhKTt9ZnVuY3Rpb24gJGxhbWJkYShhKXtyZXR1cm4oJHR5cGUoYSk9PSJmdW5jdGlvbiIpP2E6ZnVuY3Rpb24oKXtyZXR1cm4gYTt9O31mdW5jdGlvbiAkbWVyZ2UoKXt2YXIgYT1BcnJheS5zbGljZShhcmd1bWVudHMpOwphLnVuc2hpZnQoe30pO3JldHVybiAkbWl4aW4uYXBwbHkobnVsbCxhKTt9ZnVuY3Rpb24gJG1peGluKGUpe2Zvcih2YXIgZD0xLGE9YXJndW1lbnRzLmxlbmd0aDtkPGE7ZCsrKXt2YXIgYj1hcmd1bWVudHNbZF07aWYoJHR5cGUoYikhPSJvYmplY3QiKXtjb250aW51ZTsKfWZvcih2YXIgYyBpbiBiKXt2YXIgZz1iW2NdLGY9ZVtjXTtlW2NdPShmJiYkdHlwZShnKT09Im9iamVjdCImJiR0eXBlKGYpPT0ib2JqZWN0Iik/JG1peGluKGYsZyk6JHVubGluayhnKTt9fXJldHVybiBlO31mdW5jdGlvbiAkcGljaygpe2Zvcih2YXIgYj0wLGE9YXJndW1lbnRzLmxlbmd0aDsKYjxhO2IrKyl7aWYoYXJndW1lbnRzW2JdIT11bmRlZmluZWQpe3JldHVybiBhcmd1bWVudHNbYl07fX1yZXR1cm4gbnVsbDt9ZnVuY3Rpb24gJHJhbmRvbShiLGEpe3JldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGEtYisxKStiKTt9ZnVuY3Rpb24gJHNwbGF0KGIpe3ZhciBhPSR0eXBlKGIpOwpyZXR1cm4oYSk/KChhIT0iYXJyYXkiJiZhIT0iYXJndW1lbnRzIik/W2JdOmIpOltdO312YXIgJHRpbWU9RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuICtuZXcgRGF0ZTt9O2Z1bmN0aW9uICR0cnkoKXtmb3IodmFyIGI9MCxhPWFyZ3VtZW50cy5sZW5ndGg7YjxhOwpiKyspe3RyeXtyZXR1cm4gYXJndW1lbnRzW2JdKCk7fWNhdGNoKGMpe319cmV0dXJuIG51bGw7fWZ1bmN0aW9uICR0eXBlKGEpe2lmKGE9PXVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlO31pZihhLiRmYW1pbHkpe3JldHVybihhLiRmYW1pbHkubmFtZT09Im51bWJlciImJiFpc0Zpbml0ZShhKSk/ZmFsc2U6YS4kZmFtaWx5Lm5hbWU7Cn1pZihhLm5vZGVOYW1lKXtzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSAxOnJldHVybiJlbGVtZW50IjtjYXNlIDM6cmV0dXJuKC9cUy8pLnRlc3QoYS5ub2RlVmFsdWUpPyJ0ZXh0bm9kZSI6IndoaXRlc3BhY2UiO319ZWxzZXtpZih0eXBlb2YgYS5sZW5ndGg9PSJudW1iZXIiKXtpZihhLmNhbGxlZSl7cmV0dXJuImFyZ3VtZW50cyI7Cn1lbHNle2lmKGEuaXRlbSl7cmV0dXJuImNvbGxlY3Rpb24iO319fX1yZXR1cm4gdHlwZW9mIGE7fWZ1bmN0aW9uICR1bmxpbmsoYyl7dmFyIGI7c3dpdGNoKCR0eXBlKGMpKXtjYXNlIm9iamVjdCI6Yj17fTtmb3IodmFyIGUgaW4gYyl7YltlXT0kdW5saW5rKGNbZV0pOwp9YnJlYWs7Y2FzZSJoYXNoIjpiPW5ldyBIYXNoKGMpO2JyZWFrO2Nhc2UiYXJyYXkiOmI9W107Zm9yKHZhciBkPTAsYT1jLmxlbmd0aDtkPGE7ZCsrKXtiW2RdPSR1bmxpbmsoY1tkXSk7fWJyZWFrO2RlZmF1bHQ6cmV0dXJuIGM7fXJldHVybiBiO312YXIgQnJvd3Nlcj0kbWVyZ2Uoe0VuZ2luZTp7bmFtZToidW5rbm93biIsdmVyc2lvbjowfSxQbGF0Zm9ybTp7bmFtZTood2luZG93Lm9yaWVudGF0aW9uIT11bmRlZmluZWQpPyJpcG9kIjoobmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKC9tYWN8d2lufGxpbnV4L2kpfHxbIm90aGVyIl0pWzBdLnRvTG93ZXJDYXNlKCl9LEZlYXR1cmVzOnt4cGF0aDohIShkb2N1bWVudC5ldmFsdWF0ZSksYWlyOiEhKHdpbmRvdy5ydW50aW1lKSxxdWVyeTohIShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKX0sUGx1Z2luczp7fSxFbmdpbmVzOntwcmVzdG86ZnVuY3Rpb24oKXtyZXR1cm4oIXdpbmRvdy5vcGVyYSk/ZmFsc2U6KChhcmd1bWVudHMuY2FsbGVlLmNhbGxlcik/OTYwOigoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSk/OTUwOjkyNSkpOwp9LHRyaWRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4oIXdpbmRvdy5BY3RpdmVYT2JqZWN0KT9mYWxzZTooKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCk/KChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKT82OjUpOjQpO30sd2Via2l0OmZ1bmN0aW9uKCl7cmV0dXJuKG5hdmlnYXRvci50YWludEVuYWJsZWQpP2ZhbHNlOigoQnJvd3Nlci5GZWF0dXJlcy54cGF0aCk/KChCcm93c2VyLkZlYXR1cmVzLnF1ZXJ5KT81MjU6NDIwKTo0MTkpOwp9LGdlY2tvOmZ1bmN0aW9uKCl7cmV0dXJuKCFkb2N1bWVudC5nZXRCb3hPYmplY3RGb3ImJndpbmRvdy5tb3pJbm5lclNjcmVlblg9PW51bGwpP2ZhbHNlOigoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSk/MTk6MTgpO319fSxCcm93c2VyfHx7fSk7QnJvd3Nlci5QbGF0Zm9ybVtCcm93c2VyLlBsYXRmb3JtLm5hbWVdPXRydWU7CkJyb3dzZXIuZGV0ZWN0PWZ1bmN0aW9uKCl7Zm9yKHZhciBiIGluIHRoaXMuRW5naW5lcyl7dmFyIGE9dGhpcy5FbmdpbmVzW2JdKCk7aWYoYSl7dGhpcy5FbmdpbmU9e25hbWU6Yix2ZXJzaW9uOmF9O3RoaXMuRW5naW5lW2JdPXRoaXMuRW5naW5lW2IrYV09dHJ1ZTsKYnJlYWs7fX1yZXR1cm57bmFtZTpiLHZlcnNpb246YX07fTtCcm93c2VyLmRldGVjdCgpO0Jyb3dzZXIuUmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiAkdHJ5KGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO30sZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1TWE1MMi5YTUxIVFRQIik7Cn0sZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7fSk7fTtCcm93c2VyLkZlYXR1cmVzLnhocj0hIShCcm93c2VyLlJlcXVlc3QoKSk7QnJvd3Nlci5QbHVnaW5zLkZsYXNoPShmdW5jdGlvbigpe3ZhciBhPSgkdHJ5KGZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci5wbHVnaW5zWyJTaG9ja3dhdmUgRmxhc2giXS5kZXNjcmlwdGlvbjsKfSxmdW5jdGlvbigpe3JldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2giKS5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKTt9KXx8IjAgcjAiKS5tYXRjaCgvXGQrL2cpO3JldHVybnt2ZXJzaW9uOnBhcnNlSW50KGFbMF18fDArIi4iK2FbMV0sMTApfHwwLGJ1aWxkOnBhcnNlSW50KGFbMl0sMTApfHwwfTsKfSkoKTtmdW5jdGlvbiAkZXhlYyhiKXtpZighYil7cmV0dXJuIGI7fWlmKHdpbmRvdy5leGVjU2NyaXB0KXt3aW5kb3cuZXhlY1NjcmlwdChiKTt9ZWxzZXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTthLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvamF2YXNjcmlwdCIpOwphWyhCcm93c2VyLkVuZ2luZS53ZWJraXQmJkJyb3dzZXIuRW5naW5lLnZlcnNpb248NDIwKT8iaW5uZXJUZXh0IjoidGV4dCJdPWI7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChhKTtkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGEpO31yZXR1cm4gYjt9TmF0aXZlLlVJRD0xOwp2YXIgJHVpZD0oQnJvd3Nlci5FbmdpbmUudHJpZGVudCk/ZnVuY3Rpb24oYSl7cmV0dXJuKGEudWlkfHwoYS51aWQ9W05hdGl2ZS5VSUQrK10pKVswXTt9OmZ1bmN0aW9uKGEpe3JldHVybiBhLnVpZHx8KGEudWlkPU5hdGl2ZS5VSUQrKyk7fTt2YXIgV2luZG93PW5ldyBOYXRpdmUoe25hbWU6IldpbmRvdyIsbGVnYWN5OihCcm93c2VyLkVuZ2luZS50cmlkZW50KT9udWxsOndpbmRvdy5XaW5kb3csaW5pdGlhbGl6ZTpmdW5jdGlvbihhKXskdWlkKGEpOwppZighYS5FbGVtZW50KXthLkVsZW1lbnQ9JGVtcHR5O2lmKEJyb3dzZXIuRW5naW5lLndlYmtpdCl7YS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTt9YS5FbGVtZW50LnByb3RvdHlwZT0oQnJvd3Nlci5FbmdpbmUud2Via2l0KT93aW5kb3dbIltbRE9NRWxlbWVudC5wcm90b3R5cGVdXSJdOnt9Owp9YS5kb2N1bWVudC53aW5kb3c9YTtyZXR1cm4gJGV4dGVuZChhLFdpbmRvdy5Qcm90b3R5cGUpO30sYWZ0ZXJJbXBsZW1lbnQ6ZnVuY3Rpb24oYixhKXt3aW5kb3dbYl09V2luZG93LlByb3RvdHlwZVtiXT1hO319KTtXaW5kb3cuUHJvdG90eXBlPXskZmFtaWx5OntuYW1lOiJ3aW5kb3cifX07Cm5ldyBXaW5kb3cod2luZG93KTt2YXIgRG9jdW1lbnQ9bmV3IE5hdGl2ZSh7bmFtZToiRG9jdW1lbnQiLGxlZ2FjeTooQnJvd3Nlci5FbmdpbmUudHJpZGVudCk/bnVsbDp3aW5kb3cuRG9jdW1lbnQsaW5pdGlhbGl6ZTpmdW5jdGlvbihhKXskdWlkKGEpO2EuaGVhZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07CmEuaHRtbD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF07aWYoQnJvd3Nlci5FbmdpbmUudHJpZGVudCYmQnJvd3Nlci5FbmdpbmUudmVyc2lvbjw9NCl7JHRyeShmdW5jdGlvbigpe2EuZXhlY0NvbW1hbmQoIkJhY2tncm91bmRJbWFnZUNhY2hlIixmYWxzZSx0cnVlKTsKfSk7fWlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe2Eud2luZG93LmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsZnVuY3Rpb24oKXthLndpbmRvdy5kZXRhY2hFdmVudCgib251bmxvYWQiLGFyZ3VtZW50cy5jYWxsZWUpO2EuaGVhZD1hLmh0bWw9YS53aW5kb3c9bnVsbDsKfSk7fXJldHVybiAkZXh0ZW5kKGEsRG9jdW1lbnQuUHJvdG90eXBlKTt9LGFmdGVySW1wbGVtZW50OmZ1bmN0aW9uKGIsYSl7ZG9jdW1lbnRbYl09RG9jdW1lbnQuUHJvdG90eXBlW2JdPWE7fX0pO0RvY3VtZW50LlByb3RvdHlwZT17JGZhbWlseTp7bmFtZToiZG9jdW1lbnQifX07Cm5ldyBEb2N1bWVudChkb2N1bWVudCk7QXJyYXkuaW1wbGVtZW50KHtldmVyeTpmdW5jdGlvbihjLGQpe2Zvcih2YXIgYj0wLGE9dGhpcy5sZW5ndGg7YjxhO2IrKyl7aWYoIWMuY2FsbChkLHRoaXNbYl0sYix0aGlzKSl7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7Cn0sZmlsdGVyOmZ1bmN0aW9uKGQsZSl7dmFyIGM9W107Zm9yKHZhciBiPTAsYT10aGlzLmxlbmd0aDtiPGE7YisrKXtpZihkLmNhbGwoZSx0aGlzW2JdLGIsdGhpcykpe2MucHVzaCh0aGlzW2JdKTt9fXJldHVybiBjO30sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoJGRlZmluZWQpOwp9LGluZGV4T2Y6ZnVuY3Rpb24oYyxkKXt2YXIgYT10aGlzLmxlbmd0aDtmb3IodmFyIGI9KGQ8MCk/TWF0aC5tYXgoMCxhK2QpOmR8fDA7YjxhO2IrKyl7aWYodGhpc1tiXT09PWMpe3JldHVybiBiO319cmV0dXJuIC0xO30sbWFwOmZ1bmN0aW9uKGQsZSl7dmFyIGM9W107CmZvcih2YXIgYj0wLGE9dGhpcy5sZW5ndGg7YjxhO2IrKyl7Y1tiXT1kLmNhbGwoZSx0aGlzW2JdLGIsdGhpcyk7fXJldHVybiBjO30sc29tZTpmdW5jdGlvbihjLGQpe2Zvcih2YXIgYj0wLGE9dGhpcy5sZW5ndGg7YjxhO2IrKyl7aWYoYy5jYWxsKGQsdGhpc1tiXSxiLHRoaXMpKXtyZXR1cm4gdHJ1ZTsKfX1yZXR1cm4gZmFsc2U7fSxhc3NvY2lhdGU6ZnVuY3Rpb24oYyl7dmFyIGQ9e30sYj1NYXRoLm1pbih0aGlzLmxlbmd0aCxjLmxlbmd0aCk7Zm9yKHZhciBhPTA7YTxiO2ErKyl7ZFtjW2FdXT10aGlzW2FdO31yZXR1cm4gZDt9LGxpbms6ZnVuY3Rpb24oYyl7dmFyIGE9e307CmZvcih2YXIgZT0wLGI9dGhpcy5sZW5ndGg7ZTxiO2UrKyl7Zm9yKHZhciBkIGluIGMpe2lmKGNbZF0odGhpc1tlXSkpe2FbZF09dGhpc1tlXTtkZWxldGUgY1tkXTticmVhazt9fX1yZXR1cm4gYTt9LGNvbnRhaW5zOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuaW5kZXhPZihhLGIpIT0tMTsKfSxleHRlbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBiPTAsYT1jLmxlbmd0aDtiPGE7YisrKXt0aGlzLnB1c2goY1tiXSk7fXJldHVybiB0aGlzO30sZ2V0TGFzdDpmdW5jdGlvbigpe3JldHVybih0aGlzLmxlbmd0aCk/dGhpc1t0aGlzLmxlbmd0aC0xXTpudWxsO30sZ2V0UmFuZG9tOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMubGVuZ3RoKT90aGlzWyRyYW5kb20oMCx0aGlzLmxlbmd0aC0xKV06bnVsbDsKfSxpbmNsdWRlOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbnRhaW5zKGEpKXt0aGlzLnB1c2goYSk7fXJldHVybiB0aGlzO30sY29tYmluZTpmdW5jdGlvbihjKXtmb3IodmFyIGI9MCxhPWMubGVuZ3RoO2I8YTtiKyspe3RoaXMuaW5jbHVkZShjW2JdKTt9cmV0dXJuIHRoaXM7Cn0sZXJhc2U6ZnVuY3Rpb24oYil7Zm9yKHZhciBhPXRoaXMubGVuZ3RoO2EtLTthKXtpZih0aGlzW2FdPT09Yil7dGhpcy5zcGxpY2UoYSwxKTt9fXJldHVybiB0aGlzO30sZW1wdHk6ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aD0wO3JldHVybiB0aGlzO30sZmxhdHRlbjpmdW5jdGlvbigpe3ZhciBkPVtdOwpmb3IodmFyIGI9MCxhPXRoaXMubGVuZ3RoO2I8YTtiKyspe3ZhciBjPSR0eXBlKHRoaXNbYl0pO2lmKCFjKXtjb250aW51ZTt9ZD1kLmNvbmNhdCgoYz09ImFycmF5Inx8Yz09ImNvbGxlY3Rpb24ifHxjPT0iYXJndW1lbnRzIik/QXJyYXkuZmxhdHRlbih0aGlzW2JdKTp0aGlzW2JdKTsKfXJldHVybiBkO30saGV4VG9SZ2I6ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGghPTMpe3JldHVybiBudWxsO312YXIgYT10aGlzLm1hcChmdW5jdGlvbihjKXtpZihjLmxlbmd0aD09MSl7Yys9Yzt9cmV0dXJuIGMudG9JbnQoMTYpO30pO3JldHVybihiKT9hOiJyZ2IoIithKyIpIjsKfSxyZ2JUb0hleDpmdW5jdGlvbihkKXtpZih0aGlzLmxlbmd0aDwzKXtyZXR1cm4gbnVsbDt9aWYodGhpcy5sZW5ndGg9PTQmJnRoaXNbM109PTAmJiFkKXtyZXR1cm4idHJhbnNwYXJlbnQiO312YXIgYj1bXTtmb3IodmFyIGE9MDthPDM7YSsrKXt2YXIgYz0odGhpc1thXS0wKS50b1N0cmluZygxNik7CmIucHVzaCgoYy5sZW5ndGg9PTEpPyIwIitjOmMpO31yZXR1cm4oZCk/YjoiIyIrYi5qb2luKCIiKTt9fSk7RnVuY3Rpb24uaW1wbGVtZW50KHtleHRlbmQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpe3RoaXNbYl09YVtiXTt9cmV0dXJuIHRoaXM7fSxjcmVhdGU6ZnVuY3Rpb24oYil7dmFyIGE9dGhpczsKYj1ifHx7fTtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGM9Yi5hcmd1bWVudHM7Yz0oYyE9dW5kZWZpbmVkKT8kc3BsYXQoYyk6QXJyYXkuc2xpY2UoYXJndW1lbnRzLChiLmV2ZW50KT8xOjApO2lmKGIuZXZlbnQpe2M9W2R8fHdpbmRvdy5ldmVudF0uZXh0ZW5kKGMpOwp9dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShiLmJpbmR8fG51bGwsYyk7fTtpZihiLmRlbGF5KXtyZXR1cm4gc2V0VGltZW91dChlLGIuZGVsYXkpO31pZihiLnBlcmlvZGljYWwpe3JldHVybiBzZXRJbnRlcnZhbChlLGIucGVyaW9kaWNhbCk7fWlmKGIuYXR0ZW1wdCl7cmV0dXJuICR0cnkoZSk7Cn1yZXR1cm4gZSgpO307fSxydW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5hcHBseShiLCRzcGxhdChhKSk7fSxwYXNzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuY3JlYXRlKHtiaW5kOmIsYXJndW1lbnRzOmF9KTt9LGJpbmQ6ZnVuY3Rpb24oYixhKXtyZXR1cm4gdGhpcy5jcmVhdGUoe2JpbmQ6Yixhcmd1bWVudHM6YX0pOwp9LGJpbmRXaXRoRXZlbnQ6ZnVuY3Rpb24oYixhKXtyZXR1cm4gdGhpcy5jcmVhdGUoe2JpbmQ6Yixhcmd1bWVudHM6YSxldmVudDp0cnVlfSk7fSxhdHRlbXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuY3JlYXRlKHtiaW5kOmIsYXJndW1lbnRzOmEsYXR0ZW1wdDp0cnVlfSkoKTsKfSxkZWxheTpmdW5jdGlvbihiLGMsYSl7cmV0dXJuIHRoaXMuY3JlYXRlKHtiaW5kOmMsYXJndW1lbnRzOmEsZGVsYXk6Yn0pKCk7fSxwZXJpb2RpY2FsOmZ1bmN0aW9uKGMsYixhKXtyZXR1cm4gdGhpcy5jcmVhdGUoe2JpbmQ6Yixhcmd1bWVudHM6YSxwZXJpb2RpY2FsOmN9KSgpOwp9fSk7TnVtYmVyLmltcGxlbWVudCh7bGltaXQ6ZnVuY3Rpb24oYixhKXtyZXR1cm4gTWF0aC5taW4oYSxNYXRoLm1heChiLHRoaXMpKTt9LHJvdW5kOmZ1bmN0aW9uKGEpe2E9TWF0aC5wb3coMTAsYXx8MCk7cmV0dXJuIE1hdGgucm91bmQodGhpcyphKS9hO30sdGltZXM6ZnVuY3Rpb24oYixjKXtmb3IodmFyIGE9MDsKYTx0aGlzO2ErKyl7Yi5jYWxsKGMsYSx0aGlzKTt9fSx0b0Zsb2F0OmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7fSx0b0ludDpmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQodGhpcyxhfHwxMCk7fX0pO051bWJlci5hbGlhcygidGltZXMiLCJlYWNoIik7CihmdW5jdGlvbihiKXt2YXIgYT17fTtiLmVhY2goZnVuY3Rpb24oYyl7aWYoIU51bWJlcltjXSl7YVtjXT1mdW5jdGlvbigpe3JldHVybiBNYXRoW2NdLmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdCgkQShhcmd1bWVudHMpKSk7fTt9fSk7TnVtYmVyLmltcGxlbWVudChhKTsKfSkoWyJhYnMiLCJhY29zIiwiYXNpbiIsImF0YW4iLCJhdGFuMiIsImNlaWwiLCJjb3MiLCJleHAiLCJmbG9vciIsImxvZyIsIm1heCIsIm1pbiIsInBvdyIsInNpbiIsInNxcnQiLCJ0YW4iXSk7U3RyaW5nLmltcGxlbWVudCh7dGVzdDpmdW5jdGlvbihhLGIpe3JldHVybigodHlwZW9mIGE9PSJzdHJpbmciKT9uZXcgUmVnRXhwKGEsYik6YSkudGVzdCh0aGlzKTsKfSxjb250YWluczpmdW5jdGlvbihhLGIpe3JldHVybihiKT8oYit0aGlzK2IpLmluZGV4T2YoYithK2IpPi0xOnRoaXMuaW5kZXhPZihhKT4tMTt9LHRyaW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7fSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoL1xzKy9nLCIgIikudHJpbSgpOwp9LGNhbWVsQ2FzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoLy1cRC9nLGZ1bmN0aW9uKGEpe3JldHVybiBhLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO30pO30saHlwaGVuYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVwbGFjZSgvW0EtWl0vZyxmdW5jdGlvbihhKXtyZXR1cm4oIi0iK2EuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpOwp9KTt9LGNhcGl0YWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC9cYlthLXpdL2csZnVuY3Rpb24oYSl7cmV0dXJuIGEudG9VcHBlckNhc2UoKTt9KTt9LGVzY2FwZVJlZ0V4cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoLyhbLS4qKz9eJHt9KCl8W1xdXC9cXF0pL2csIlxcJDEiKTsKfSx0b0ludDpmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQodGhpcyxhfHwxMCk7fSx0b0Zsb2F0OmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7fSxoZXhUb1JnYjpmdW5jdGlvbihiKXt2YXIgYT10aGlzLm1hdGNoKC9eIz8oXHd7MSwyfSkoXHd7MSwyfSkoXHd7MSwyfSkkLyk7CnJldHVybihhKT9hLnNsaWNlKDEpLmhleFRvUmdiKGIpOm51bGw7fSxyZ2JUb0hleDpmdW5jdGlvbihiKXt2YXIgYT10aGlzLm1hdGNoKC9cZHsxLDN9L2cpO3JldHVybihhKT9hLnJnYlRvSGV4KGIpOm51bGw7fSxzdHJpcFNjcmlwdHM6ZnVuY3Rpb24oYil7dmFyIGE9IiI7CnZhciBjPXRoaXMucmVwbGFjZSgvPHNjcmlwdFtePl0qPihbXHNcU10qPyk8XC9zY3JpcHQ+L2dpLGZ1bmN0aW9uKCl7YSs9YXJndW1lbnRzWzFdKyJcbiI7cmV0dXJuIiI7fSk7aWYoYj09PXRydWUpeyRleGVjKGEpO31lbHNle2lmKCR0eXBlKGIpPT0iZnVuY3Rpb24iKXtiKGEsYyk7Cn19cmV0dXJuIGM7fSxzdWJzdGl0dXRlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucmVwbGFjZShifHwoL1xcP1x7KFtee31dKylcfS9nKSxmdW5jdGlvbihkLGMpe2lmKGQuY2hhckF0KDApPT0iXFwiKXtyZXR1cm4gZC5zbGljZSgxKTt9cmV0dXJuKGFbY10hPXVuZGVmaW5lZCk/YVtjXToiIjsKfSk7fX0pO0hhc2guaW1wbGVtZW50KHtoYXM6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxrZXlPZjpmdW5jdGlvbihiKXtmb3IodmFyIGEgaW4gdGhpcyl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShhKSYmdGhpc1thXT09PWIpe3JldHVybiBhO319cmV0dXJuIG51bGw7Cn0saGFzVmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuKEhhc2gua2V5T2YodGhpcyxhKSE9PW51bGwpO30sZXh0ZW5kOmZ1bmN0aW9uKGEpe0hhc2guZWFjaChhfHx7fSxmdW5jdGlvbihjLGIpe0hhc2guc2V0KHRoaXMsYixjKTt9LHRoaXMpO3JldHVybiB0aGlzO30sY29tYmluZTpmdW5jdGlvbihhKXtIYXNoLmVhY2goYXx8e30sZnVuY3Rpb24oYyxiKXtIYXNoLmluY2x1ZGUodGhpcyxiLGMpOwp9LHRoaXMpO3JldHVybiB0aGlzO30sZXJhc2U6ZnVuY3Rpb24oYSl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShhKSl7ZGVsZXRlIHRoaXNbYV07fXJldHVybiB0aGlzO30sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybih0aGlzLmhhc093blByb3BlcnR5KGEpKT90aGlzW2FdOm51bGw7Cn0sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIXRoaXNbYV18fHRoaXMuaGFzT3duUHJvcGVydHkoYSkpe3RoaXNbYV09Yjt9cmV0dXJuIHRoaXM7fSxlbXB0eTpmdW5jdGlvbigpe0hhc2guZWFjaCh0aGlzLGZ1bmN0aW9uKGIsYSl7ZGVsZXRlIHRoaXNbYV07fSx0aGlzKTsKcmV0dXJuIHRoaXM7fSxpbmNsdWRlOmZ1bmN0aW9uKGEsYil7aWYodGhpc1thXT09dW5kZWZpbmVkKXt0aGlzW2FdPWI7fXJldHVybiB0aGlzO30sbWFwOmZ1bmN0aW9uKGIsYyl7dmFyIGE9bmV3IEhhc2g7SGFzaC5lYWNoKHRoaXMsZnVuY3Rpb24oZSxkKXthLnNldChkLGIuY2FsbChjLGUsZCx0aGlzKSk7Cn0sdGhpcyk7cmV0dXJuIGE7fSxmaWx0ZXI6ZnVuY3Rpb24oYixjKXt2YXIgYT1uZXcgSGFzaDtIYXNoLmVhY2godGhpcyxmdW5jdGlvbihlLGQpe2lmKGIuY2FsbChjLGUsZCx0aGlzKSl7YS5zZXQoZCxlKTt9fSx0aGlzKTtyZXR1cm4gYTt9LGV2ZXJ5OmZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBhIGluIHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoYSkmJiFiLmNhbGwoYyx0aGlzW2FdLGEpKXtyZXR1cm4gZmFsc2U7Cn19cmV0dXJuIHRydWU7fSxzb21lOmZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBhIGluIHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoYSkmJmIuY2FsbChjLHRoaXNbYV0sYSkpe3JldHVybiB0cnVlO319cmV0dXJuIGZhbHNlO30sZ2V0S2V5czpmdW5jdGlvbigpe3ZhciBhPVtdOwpIYXNoLmVhY2godGhpcyxmdW5jdGlvbihjLGIpe2EucHVzaChiKTt9KTtyZXR1cm4gYTt9LGdldFZhbHVlczpmdW5jdGlvbigpe3ZhciBhPVtdO0hhc2guZWFjaCh0aGlzLGZ1bmN0aW9uKGIpe2EucHVzaChiKTt9KTtyZXR1cm4gYTt9LHRvUXVlcnlTdHJpbmc6ZnVuY3Rpb24oYSl7dmFyIGI9W107Ckhhc2guZWFjaCh0aGlzLGZ1bmN0aW9uKGYsZSl7aWYoYSl7ZT1hKyJbIitlKyJdIjt9dmFyIGQ7c3dpdGNoKCR0eXBlKGYpKXtjYXNlIm9iamVjdCI6ZD1IYXNoLnRvUXVlcnlTdHJpbmcoZixlKTticmVhaztjYXNlImFycmF5Ijp2YXIgYz17fTtmLmVhY2goZnVuY3Rpb24oaCxnKXtjW2ddPWg7Cn0pO2Q9SGFzaC50b1F1ZXJ5U3RyaW5nKGMsZSk7YnJlYWs7ZGVmYXVsdDpkPWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmKTt9aWYoZiE9dW5kZWZpbmVkKXtiLnB1c2goZCk7fX0pO3JldHVybiBiLmpvaW4oIiYiKTt9fSk7SGFzaC5hbGlhcyh7a2V5T2Y6ImluZGV4T2YiLGhhc1ZhbHVlOiJjb250YWlucyJ9KTsKdmFyIEV2ZW50PW5ldyBOYXRpdmUoe25hbWU6IkV2ZW50Iixpbml0aWFsaXplOmZ1bmN0aW9uKGEsZil7Zj1mfHx3aW5kb3c7dmFyIGs9Zi5kb2N1bWVudDthPWF8fGYuZXZlbnQ7aWYoYS4kZXh0ZW5kZWQpe3JldHVybiBhO310aGlzLiRleHRlbmRlZD10cnVlO3ZhciBqPWEudHlwZTsKdmFyIGc9YS50YXJnZXR8fGEuc3JjRWxlbWVudDt3aGlsZShnJiZnLm5vZGVUeXBlPT0zKXtnPWcucGFyZW50Tm9kZTt9aWYoai50ZXN0KC9rZXkvKSl7dmFyIGI9YS53aGljaHx8YS5rZXlDb2RlO3ZhciBtPUV2ZW50LktleXMua2V5T2YoYik7aWYoaj09ImtleWRvd24iKXt2YXIgZD1iLTExMTsKaWYoZD4wJiZkPDEzKXttPSJmIitkO319bT1tfHxTdHJpbmcuZnJvbUNoYXJDb2RlKGIpLnRvTG93ZXJDYXNlKCk7fWVsc2V7aWYoai5tYXRjaCgvKGNsaWNrfG1vdXNlfG1lbnUpL2kpKXtrPSghay5jb21wYXRNb2RlfHxrLmNvbXBhdE1vZGU9PSJDU1MxQ29tcGF0Iik/ay5odG1sOmsuYm9keTsKdmFyIGk9e3g6YS5wYWdlWHx8YS5jbGllbnRYK2suc2Nyb2xsTGVmdCx5OmEucGFnZVl8fGEuY2xpZW50WStrLnNjcm9sbFRvcH07dmFyIGM9e3g6KGEucGFnZVgpP2EucGFnZVgtZi5wYWdlWE9mZnNldDphLmNsaWVudFgseTooYS5wYWdlWSk/YS5wYWdlWS1mLnBhZ2VZT2Zmc2V0OmEuY2xpZW50WX07CmlmKGoubWF0Y2goL0RPTU1vdXNlU2Nyb2xsfG1vdXNld2hlZWwvKSl7dmFyIGg9KGEud2hlZWxEZWx0YSk/YS53aGVlbERlbHRhLzEyMDotKGEuZGV0YWlsfHwwKS8zO312YXIgZT0oYS53aGljaD09Myl8fChhLmJ1dHRvbj09Mik7dmFyIGw9bnVsbDtpZihqLm1hdGNoKC9vdmVyfG91dC8pKXtzd2l0Y2goail7Y2FzZSJtb3VzZW92ZXIiOmw9YS5yZWxhdGVkVGFyZ2V0fHxhLmZyb21FbGVtZW50OwpicmVhaztjYXNlIm1vdXNlb3V0IjpsPWEucmVsYXRlZFRhcmdldHx8YS50b0VsZW1lbnQ7fWlmKCEoZnVuY3Rpb24oKXt3aGlsZShsJiZsLm5vZGVUeXBlPT0zKXtsPWwucGFyZW50Tm9kZTt9cmV0dXJuIHRydWU7fSkuY3JlYXRlKHthdHRlbXB0OkJyb3dzZXIuRW5naW5lLmdlY2tvfSkoKSl7bD1mYWxzZTsKfX19fXJldHVybiAkZXh0ZW5kKHRoaXMse2V2ZW50OmEsdHlwZTpqLHBhZ2U6aSxjbGllbnQ6YyxyaWdodENsaWNrOmUsd2hlZWw6aCxyZWxhdGVkVGFyZ2V0OmwsdGFyZ2V0OmcsY29kZTpiLGtleTptLHNoaWZ0OmEuc2hpZnRLZXksY29udHJvbDphLmN0cmxLZXksYWx0OmEuYWx0S2V5LG1ldGE6YS5tZXRhS2V5fSk7Cn19KTtFdmVudC5LZXlzPW5ldyBIYXNoKHtlbnRlcjoxMyx1cDozOCxkb3duOjQwLGxlZnQ6MzcscmlnaHQ6MzksZXNjOjI3LHNwYWNlOjMyLGJhY2tzcGFjZTo4LHRhYjo5LCJkZWxldGUiOjQ2fSk7RXZlbnQuaW1wbGVtZW50KHtzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCkucHJldmVudERlZmF1bHQoKTsKfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbil7dGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTt9ZWxzZXt0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZT10cnVlO31yZXR1cm4gdGhpczt9LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCl7dGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpOwp9ZWxzZXt0aGlzLmV2ZW50LnJldHVyblZhbHVlPWZhbHNlO31yZXR1cm4gdGhpczt9fSk7ZnVuY3Rpb24gQ2xhc3MoYil7aWYoYiBpbnN0YW5jZW9mIEZ1bmN0aW9uKXtiPXtpbml0aWFsaXplOmJ9O312YXIgYT1mdW5jdGlvbigpe09iamVjdC5yZXNldCh0aGlzKTtpZihhLl9wcm90b3R5cGluZyl7cmV0dXJuIHRoaXM7Cn10aGlzLl9jdXJyZW50PSRlbXB0eTt2YXIgYz0odGhpcy5pbml0aWFsaXplKT90aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXM7ZGVsZXRlIHRoaXMuX2N1cnJlbnQ7ZGVsZXRlIHRoaXMuY2FsbGVyO3JldHVybiBjO30uZXh0ZW5kKHRoaXMpOwphLmltcGxlbWVudChiKTthLmNvbnN0cnVjdG9yPUNsYXNzO2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPWE7cmV0dXJuIGE7fUZ1bmN0aW9uLnByb3RvdHlwZS5wcm90ZWN0PWZ1bmN0aW9uKCl7dGhpcy5fcHJvdGVjdGVkPXRydWU7cmV0dXJuIHRoaXM7fTtPYmplY3QucmVzZXQ9ZnVuY3Rpb24oYSxjKXtpZihjPT1udWxsKXtmb3IodmFyIGUgaW4gYSl7T2JqZWN0LnJlc2V0KGEsZSk7Cn1yZXR1cm4gYTt9ZGVsZXRlIGFbY107c3dpdGNoKCR0eXBlKGFbY10pKXtjYXNlIm9iamVjdCI6dmFyIGQ9ZnVuY3Rpb24oKXt9O2QucHJvdG90eXBlPWFbY107dmFyIGI9bmV3IGQ7YVtjXT1PYmplY3QucmVzZXQoYik7YnJlYWs7Y2FzZSJhcnJheSI6YVtjXT0kdW5saW5rKGFbY10pOwpicmVhazt9cmV0dXJuIGE7fTtuZXcgTmF0aXZlKHtuYW1lOiJDbGFzcyIsaW5pdGlhbGl6ZTpDbGFzc30pLmV4dGVuZCh7aW5zdGFudGlhdGU6ZnVuY3Rpb24oYil7Yi5fcHJvdG90eXBpbmc9dHJ1ZTt2YXIgYT1uZXcgYjtkZWxldGUgYi5fcHJvdG90eXBpbmc7cmV0dXJuIGE7Cn0sd3JhcDpmdW5jdGlvbihhLGIsYyl7aWYoYy5fb3JpZ2luKXtjPWMuX29yaWdpbjt9cmV0dXJuIGZ1bmN0aW9uKCl7aWYoYy5fcHJvdGVjdGVkJiZ0aGlzLl9jdXJyZW50PT1udWxsKXt0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgIicrYisnIiBjYW5ub3QgYmUgY2FsbGVkLicpOwp9dmFyIGU9dGhpcy5jYWxsZXIsZj10aGlzLl9jdXJyZW50O3RoaXMuY2FsbGVyPWY7dGhpcy5fY3VycmVudD1hcmd1bWVudHMuY2FsbGVlO3ZhciBkPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX2N1cnJlbnQ9Zjt0aGlzLmNhbGxlcj1lO3JldHVybiBkO30uZXh0ZW5kKHtfb3duZXI6YSxfb3JpZ2luOmMsX25hbWU6Yn0pOwp9fSk7Q2xhc3MuaW1wbGVtZW50KHtpbXBsZW1lbnQ6ZnVuY3Rpb24oYSxkKXtpZigkdHlwZShhKT09Im9iamVjdCIpe2Zvcih2YXIgZSBpbiBhKXt0aGlzLmltcGxlbWVudChlLGFbZV0pO31yZXR1cm4gdGhpczt9dmFyIGY9Q2xhc3MuTXV0YXRvcnNbYV07aWYoZil7ZD1mLmNhbGwodGhpcyxkKTsKaWYoZD09bnVsbCl7cmV0dXJuIHRoaXM7fX12YXIgYz10aGlzLnByb3RvdHlwZTtzd2l0Y2goJHR5cGUoZCkpe2Nhc2UiZnVuY3Rpb24iOmlmKGQuX2hpZGRlbil7cmV0dXJuIHRoaXM7fWNbYV09Q2xhc3Mud3JhcCh0aGlzLGEsZCk7YnJlYWs7Y2FzZSJvYmplY3QiOnZhciBiPWNbYV07CmlmKCR0eXBlKGIpPT0ib2JqZWN0Iil7JG1peGluKGIsZCk7fWVsc2V7Y1thXT0kdW5saW5rKGQpO31icmVhaztjYXNlImFycmF5IjpjW2FdPSR1bmxpbmsoZCk7YnJlYWs7ZGVmYXVsdDpjW2FdPWQ7fXJldHVybiB0aGlzO319KTtDbGFzcy5NdXRhdG9ycz17RXh0ZW5kczpmdW5jdGlvbihhKXt0aGlzLnBhcmVudD1hOwp0aGlzLnByb3RvdHlwZT1DbGFzcy5pbnN0YW50aWF0ZShhKTt0aGlzLmltcGxlbWVudCgicGFyZW50IixmdW5jdGlvbigpe3ZhciBiPXRoaXMuY2FsbGVyLl9uYW1lLGM9dGhpcy5jYWxsZXIuX293bmVyLnBhcmVudC5wcm90b3R5cGVbYl07aWYoIWMpe3Rocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCAiJytiKyciIGhhcyBubyBwYXJlbnQuJyk7Cn1yZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fS5wcm90ZWN0KCkpO30sSW1wbGVtZW50czpmdW5jdGlvbihhKXskc3BsYXQoYSkuZWFjaChmdW5jdGlvbihiKXtpZihiIGluc3RhbmNlb2YgRnVuY3Rpb24pe2I9Q2xhc3MuaW5zdGFudGlhdGUoYik7fXRoaXMuaW1wbGVtZW50KGIpOwp9LHRoaXMpO319O3ZhciBDaGFpbj1uZXcgQ2xhc3MoeyRjaGFpbjpbXSxjaGFpbjpmdW5jdGlvbigpe3RoaXMuJGNoYWluLmV4dGVuZChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykpO3JldHVybiB0aGlzO30sY2FsbENoYWluOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuJGNoYWluLmxlbmd0aCk/dGhpcy4kY2hhaW4uc2hpZnQoKS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZmFsc2U7Cn0sY2xlYXJDaGFpbjpmdW5jdGlvbigpe3RoaXMuJGNoYWluLmVtcHR5KCk7cmV0dXJuIHRoaXM7fX0pO3ZhciBFdmVudHM9bmV3IENsYXNzKHskZXZlbnRzOnt9LGFkZEV2ZW50OmZ1bmN0aW9uKGMsYixhKXtjPUV2ZW50cy5yZW1vdmVPbihjKTtpZihiIT0kZW1wdHkpe3RoaXMuJGV2ZW50c1tjXT10aGlzLiRldmVudHNbY118fFtdOwp0aGlzLiRldmVudHNbY10uaW5jbHVkZShiKTtpZihhKXtiLmludGVybmFsPXRydWU7fX1yZXR1cm4gdGhpczt9LGFkZEV2ZW50czpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSl7dGhpcy5hZGRFdmVudChiLGFbYl0pO31yZXR1cm4gdGhpczt9LGZpcmVFdmVudDpmdW5jdGlvbihjLGIsYSl7Yz1FdmVudHMucmVtb3ZlT24oYyk7CmlmKCF0aGlzLiRldmVudHN8fCF0aGlzLiRldmVudHNbY10pe3JldHVybiB0aGlzO310aGlzLiRldmVudHNbY10uZWFjaChmdW5jdGlvbihkKXtkLmNyZWF0ZSh7YmluZDp0aGlzLGRlbGF5OmEsImFyZ3VtZW50cyI6Yn0pKCk7fSx0aGlzKTtyZXR1cm4gdGhpczt9LHJlbW92ZUV2ZW50OmZ1bmN0aW9uKGIsYSl7Yj1FdmVudHMucmVtb3ZlT24oYik7CmlmKCF0aGlzLiRldmVudHNbYl0pe3JldHVybiB0aGlzO31pZighYS5pbnRlcm5hbCl7dGhpcy4kZXZlbnRzW2JdLmVyYXNlKGEpO31yZXR1cm4gdGhpczt9LHJlbW92ZUV2ZW50czpmdW5jdGlvbihjKXt2YXIgZDtpZigkdHlwZShjKT09Im9iamVjdCIpe2ZvcihkIGluIGMpe3RoaXMucmVtb3ZlRXZlbnQoZCxjW2RdKTsKfXJldHVybiB0aGlzO31pZihjKXtjPUV2ZW50cy5yZW1vdmVPbihjKTt9Zm9yKGQgaW4gdGhpcy4kZXZlbnRzKXtpZihjJiZjIT1kKXtjb250aW51ZTt9dmFyIGI9dGhpcy4kZXZlbnRzW2RdO2Zvcih2YXIgYT1iLmxlbmd0aDthLS07YSl7dGhpcy5yZW1vdmVFdmVudChkLGJbYV0pOwp9fXJldHVybiB0aGlzO319KTtFdmVudHMucmVtb3ZlT249ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvXm9uKFtBLVpdKS8sZnVuY3Rpb24oYixjKXtyZXR1cm4gYy50b0xvd2VyQ2FzZSgpO30pO307dmFyIE9wdGlvbnM9bmV3IENsYXNzKHtzZXRPcHRpb25zOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zPSRtZXJnZS5ydW4oW3RoaXMub3B0aW9uc10uZXh0ZW5kKGFyZ3VtZW50cykpOwppZighdGhpcy5hZGRFdmVudCl7cmV0dXJuIHRoaXM7fWZvcih2YXIgYSBpbiB0aGlzLm9wdGlvbnMpe2lmKCR0eXBlKHRoaXMub3B0aW9uc1thXSkhPSJmdW5jdGlvbiJ8fCEoL15vbltBLVpdLykudGVzdChhKSl7Y29udGludWU7fXRoaXMuYWRkRXZlbnQoYSx0aGlzLm9wdGlvbnNbYV0pOwpkZWxldGUgdGhpcy5vcHRpb25zW2FdO31yZXR1cm4gdGhpczt9fSk7dmFyIEVsZW1lbnQ9bmV3IE5hdGl2ZSh7bmFtZToiRWxlbWVudCIsbGVnYWN5OndpbmRvdy5FbGVtZW50LGluaXRpYWxpemU6ZnVuY3Rpb24oYSxiKXt2YXIgYz1FbGVtZW50LkNvbnN0cnVjdG9ycy5nZXQoYSk7CmlmKGMpe3JldHVybiBjKGIpO31pZih0eXBlb2YgYT09InN0cmluZyIpe3JldHVybiBkb2N1bWVudC5uZXdFbGVtZW50KGEsYik7fXJldHVybiBkb2N1bWVudC5pZChhKS5zZXQoYik7fSxhZnRlckltcGxlbWVudDpmdW5jdGlvbihhLGIpe0VsZW1lbnQuUHJvdG90eXBlW2FdPWI7CmlmKEFycmF5W2FdKXtyZXR1cm47fUVsZW1lbnRzLmltcGxlbWVudChhLGZ1bmN0aW9uKCl7dmFyIGM9W10sZz10cnVlO2Zvcih2YXIgZT0wLGQ9dGhpcy5sZW5ndGg7ZTxkO2UrKyl7dmFyIGY9dGhpc1tlXVthXS5hcHBseSh0aGlzW2VdLGFyZ3VtZW50cyk7Yy5wdXNoKGYpOwppZihnKXtnPSgkdHlwZShmKT09ImVsZW1lbnQiKTt9fXJldHVybihnKT9uZXcgRWxlbWVudHMoYyk6Yzt9KTt9fSk7RWxlbWVudC5Qcm90b3R5cGU9eyRmYW1pbHk6e25hbWU6ImVsZW1lbnQifX07RWxlbWVudC5Db25zdHJ1Y3RvcnM9bmV3IEhhc2g7dmFyIElGcmFtZT1uZXcgTmF0aXZlKHtuYW1lOiJJRnJhbWUiLGdlbmVyaWNzOmZhbHNlLGluaXRpYWxpemU6ZnVuY3Rpb24oKXt2YXIgZj1BcnJheS5saW5rKGFyZ3VtZW50cyx7cHJvcGVydGllczpPYmplY3QudHlwZSxpZnJhbWU6JGRlZmluZWR9KTsKdmFyIGQ9Zi5wcm9wZXJ0aWVzfHx7fTt2YXIgYz1kb2N1bWVudC5pZChmLmlmcmFtZSk7dmFyIGU9ZC5vbmxvYWR8fCRlbXB0eTtkZWxldGUgZC5vbmxvYWQ7ZC5pZD1kLm5hbWU9JHBpY2soZC5pZCxkLm5hbWUsYz8oYy5pZHx8Yy5uYW1lKToiSUZyYW1lXyIrJHRpbWUoKSk7CmM9bmV3IEVsZW1lbnQoY3x8ImlmcmFtZSIsZCk7dmFyIGI9ZnVuY3Rpb24oKXt2YXIgZz0kdHJ5KGZ1bmN0aW9uKCl7cmV0dXJuIGMuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ob3N0O30pO2lmKCFnfHxnPT13aW5kb3cubG9jYXRpb24uaG9zdCl7dmFyIGg9bmV3IFdpbmRvdyhjLmNvbnRlbnRXaW5kb3cpOwpuZXcgRG9jdW1lbnQoYy5jb250ZW50V2luZG93LmRvY3VtZW50KTskZXh0ZW5kKGguRWxlbWVudC5wcm90b3R5cGUsRWxlbWVudC5Qcm90b3R5cGUpO31lLmNhbGwoYy5jb250ZW50V2luZG93LGMuY29udGVudFdpbmRvdy5kb2N1bWVudCk7fTt2YXIgYT0kdHJ5KGZ1bmN0aW9uKCl7cmV0dXJuIGMuY29udGVudFdpbmRvdzsKfSk7KChhJiZhLmRvY3VtZW50LmJvZHkpfHx3aW5kb3cuZnJhbWVzW2QuaWRdKT9iKCk6Yy5hZGRMaXN0ZW5lcigibG9hZCIsYik7cmV0dXJuIGM7fX0pO3ZhciBFbGVtZW50cz1uZXcgTmF0aXZlKHtpbml0aWFsaXplOmZ1bmN0aW9uKGYsYil7Yj0kZXh0ZW5kKHtkZHVwOnRydWUsY2FzaDp0cnVlfSxiKTsKZj1mfHxbXTtpZihiLmRkdXB8fGIuY2FzaCl7dmFyIGc9e30sZT1bXTtmb3IodmFyIGM9MCxhPWYubGVuZ3RoO2M8YTtjKyspe3ZhciBkPWRvY3VtZW50LmlkKGZbY10sIWIuY2FzaCk7aWYoYi5kZHVwKXtpZihnW2QudWlkXSl7Y29udGludWU7fWdbZC51aWRdPXRydWU7Cn1pZihkKXtlLnB1c2goZCk7fX1mPWU7fXJldHVybihiLmNhc2gpPyRleHRlbmQoZix0aGlzKTpmO319KTtFbGVtZW50cy5pbXBsZW1lbnQoe2ZpbHRlcjpmdW5jdGlvbihhLGIpe2lmKCFhKXtyZXR1cm4gdGhpczt9cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywodHlwZW9mIGE9PSJzdHJpbmciKT9mdW5jdGlvbihjKXtyZXR1cm4gYy5tYXRjaChhKTsKfTphLGIpKTt9fSk7RG9jdW1lbnQuaW1wbGVtZW50KHtuZXdFbGVtZW50OmZ1bmN0aW9uKGEsYil7aWYoQnJvd3Nlci5FbmdpbmUudHJpZGVudCYmYil7WyJuYW1lIiwidHlwZSIsImNoZWNrZWQiXS5lYWNoKGZ1bmN0aW9uKGMpe2lmKCFiW2NdKXtyZXR1cm47fWErPSIgIitjKyc9IicrYltjXSsnIic7CmlmKGMhPSJjaGVja2VkIil7ZGVsZXRlIGJbY107fX0pO2E9IjwiK2ErIj4iO31yZXR1cm4gZG9jdW1lbnQuaWQodGhpcy5jcmVhdGVFbGVtZW50KGEpKS5zZXQoYik7fSxuZXdUZXh0Tm9kZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jcmVhdGVUZXh0Tm9kZShhKTsKfSxnZXREb2N1bWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzO30sZ2V0V2luZG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2luZG93O30saWQ6KGZ1bmN0aW9uKCl7dmFyIGE9e3N0cmluZzpmdW5jdGlvbihkLGMsYil7ZD1iLmdldEVsZW1lbnRCeUlkKGQpO3JldHVybihkKT9hLmVsZW1lbnQoZCxjKTpudWxsOwp9LGVsZW1lbnQ6ZnVuY3Rpb24oYixlKXskdWlkKGIpO2lmKCFlJiYhYi4kZmFtaWx5JiYhKC9eb2JqZWN0fGVtYmVkJC9pKS50ZXN0KGIudGFnTmFtZSkpe3ZhciBjPUVsZW1lbnQuUHJvdG90eXBlO2Zvcih2YXIgZCBpbiBjKXtiW2RdPWNbZF07fX1yZXR1cm4gYjt9LG9iamVjdDpmdW5jdGlvbihjLGQsYil7aWYoYy50b0VsZW1lbnQpe3JldHVybiBhLmVsZW1lbnQoYy50b0VsZW1lbnQoYiksZCk7Cn1yZXR1cm4gbnVsbDt9fTthLnRleHRub2RlPWEud2hpdGVzcGFjZT1hLndpbmRvdz1hLmRvY3VtZW50PSRhcmd1bWVudHMoMCk7cmV0dXJuIGZ1bmN0aW9uKGMsZSxkKXtpZihjJiZjLiRmYW1pbHkmJmMudWlkKXtyZXR1cm4gYzt9dmFyIGI9JHR5cGUoYyk7cmV0dXJuKGFbYl0pP2FbYl0oYyxlLGR8fGRvY3VtZW50KTpudWxsOwp9O30pKCl9KTtpZih3aW5kb3cuJD09bnVsbCl7V2luZG93LmltcGxlbWVudCh7JDpmdW5jdGlvbihhLGIpe3JldHVybiBkb2N1bWVudC5pZChhLGIsdGhpcy5kb2N1bWVudCk7fX0pO31XaW5kb3cuaW1wbGVtZW50KHskJDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoPT0xJiZ0eXBlb2YgYT09InN0cmluZyIpe3JldHVybiB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzKGEpOwp9dmFyIGY9W107dmFyIGM9QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpO2Zvcih2YXIgZD0wLGI9Yy5sZW5ndGg7ZDxiO2QrKyl7dmFyIGU9Y1tkXTtzd2l0Y2goJHR5cGUoZSkpe2Nhc2UiZWxlbWVudCI6Zi5wdXNoKGUpO2JyZWFrO2Nhc2Uic3RyaW5nIjpmLmV4dGVuZCh0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzKGUsdHJ1ZSkpOwp9fXJldHVybiBuZXcgRWxlbWVudHMoZik7fSxnZXREb2N1bWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY3VtZW50O30sZ2V0V2luZG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM7fX0pO05hdGl2ZS5pbXBsZW1lbnQoW0VsZW1lbnQsRG9jdW1lbnRdLHtnZXRFbGVtZW50OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGRvY3VtZW50LmlkKHRoaXMuZ2V0RWxlbWVudHMoYSx0cnVlKVswXXx8bnVsbCxiKTsKfSxnZXRFbGVtZW50czpmdW5jdGlvbihhLGQpe2E9YS5zcGxpdCgiLCIpO3ZhciBjPVtdO3ZhciBiPShhLmxlbmd0aD4xKTthLmVhY2goZnVuY3Rpb24oZSl7dmFyIGY9dGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShlLnRyaW0oKSk7KGIpP2MuZXh0ZW5kKGYpOmM9ZjsKfSx0aGlzKTtyZXR1cm4gbmV3IEVsZW1lbnRzKGMse2RkdXA6YixjYXNoOiFkfSk7fX0pOyhmdW5jdGlvbigpe3ZhciBoPXt9LGY9e307dmFyIGk9e2lucHV0OiJjaGVja2VkIixvcHRpb246InNlbGVjdGVkIix0ZXh0YXJlYTooQnJvd3Nlci5FbmdpbmUud2Via2l0JiZCcm93c2VyLkVuZ2luZS52ZXJzaW9uPDQyMCk/ImlubmVySFRNTCI6InZhbHVlIn07CnZhciBjPWZ1bmN0aW9uKGwpe3JldHVybihmW2xdfHwoZltsXT17fSkpO307dmFyIGc9ZnVuY3Rpb24obixsKXtpZighbil7cmV0dXJuO312YXIgbT1uLnVpZDtpZihCcm93c2VyLkVuZ2luZS50cmlkZW50KXtpZihuLmNsZWFyQXR0cmlidXRlcyl7dmFyIHE9bCYmbi5jbG9uZU5vZGUoZmFsc2UpOwpuLmNsZWFyQXR0cmlidXRlcygpO2lmKHEpe24ubWVyZ2VBdHRyaWJ1dGVzKHEpO319ZWxzZXtpZihuLnJlbW92ZUV2ZW50cyl7bi5yZW1vdmVFdmVudHMoKTt9fWlmKCgvb2JqZWN0L2kpLnRlc3Qobi50YWdOYW1lKSl7Zm9yKHZhciBvIGluIG4pe2lmKHR5cGVvZiBuW29dPT0iZnVuY3Rpb24iKXtuW29dPSRlbXB0eTsKfX1FbGVtZW50LmRpc3Bvc2Uobik7fX1pZighbSl7cmV0dXJuO31oW21dPWZbbV09bnVsbDt9O3ZhciBkPWZ1bmN0aW9uKCl7SGFzaC5lYWNoKGgsZyk7aWYoQnJvd3Nlci5FbmdpbmUudHJpZGVudCl7JEEoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpKS5lYWNoKGcpOwp9aWYod2luZG93LkNvbGxlY3RHYXJiYWdlKXtDb2xsZWN0R2FyYmFnZSgpO31oPWY9bnVsbDt9O3ZhciBqPWZ1bmN0aW9uKG4sbCxzLG0scCxyKXt2YXIgbz1uW3N8fGxdO3ZhciBxPVtdO3doaWxlKG8pe2lmKG8ubm9kZVR5cGU9PTEmJighbXx8RWxlbWVudC5tYXRjaChvLG0pKSl7aWYoIXApe3JldHVybiBkb2N1bWVudC5pZChvLHIpOwp9cS5wdXNoKG8pO31vPW9bbF07fXJldHVybihwKT9uZXcgRWxlbWVudHMocSx7ZGR1cDpmYWxzZSxjYXNoOiFyfSk6bnVsbDt9O3ZhciBlPXtodG1sOiJpbm5lckhUTUwiLCJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IiLGRlZmF1bHRWYWx1ZToiZGVmYXVsdFZhbHVlIix0ZXh0OihCcm93c2VyLkVuZ2luZS50cmlkZW50fHwoQnJvd3Nlci5FbmdpbmUud2Via2l0JiZCcm93c2VyLkVuZ2luZS52ZXJzaW9uPDQyMCkpPyJpbm5lclRleHQiOiJ0ZXh0Q29udGVudCJ9Owp2YXIgYj1bImNvbXBhY3QiLCJub3dyYXAiLCJpc21hcCIsImRlY2xhcmUiLCJub3NoYWRlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwicmVhZG9ubHkiLCJtdWx0aXBsZSIsInNlbGVjdGVkIiwibm9yZXNpemUiLCJkZWZlciJdO3ZhciBrPVsidmFsdWUiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiYWNjZXNzS2V5IiwiY2VsbFBhZGRpbmciLCJjZWxsU3BhY2luZyIsImNvbFNwYW4iLCJmcmFtZUJvcmRlciIsIm1heExlbmd0aCIsInJlYWRPbmx5Iiwicm93U3BhbiIsInRhYkluZGV4IiwidXNlTWFwIl07CmI9Yi5hc3NvY2lhdGUoYik7SGFzaC5leHRlbmQoZSxiKTtIYXNoLmV4dGVuZChlLGsuYXNzb2NpYXRlKGsubWFwKFN0cmluZy50b0xvd2VyQ2FzZSkpKTt2YXIgYT17YmVmb3JlOmZ1bmN0aW9uKG0sbCl7aWYobC5wYXJlbnROb2RlKXtsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG0sbCk7Cn19LGFmdGVyOmZ1bmN0aW9uKG0sbCl7aWYoIWwucGFyZW50Tm9kZSl7cmV0dXJuO312YXIgbj1sLm5leHRTaWJsaW5nOyhuKT9sLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG0sbik6bC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKG0pO30sYm90dG9tOmZ1bmN0aW9uKG0sbCl7bC5hcHBlbmRDaGlsZChtKTsKfSx0b3A6ZnVuY3Rpb24obSxsKXt2YXIgbj1sLmZpcnN0Q2hpbGQ7KG4pP2wuaW5zZXJ0QmVmb3JlKG0sbik6bC5hcHBlbmRDaGlsZChtKTt9fTthLmluc2lkZT1hLmJvdHRvbTtIYXNoLmVhY2goYSxmdW5jdGlvbihsLG0pe209bS5jYXBpdGFsaXplKCk7RWxlbWVudC5pbXBsZW1lbnQoImluamVjdCIrbSxmdW5jdGlvbihuKXtsKHRoaXMsZG9jdW1lbnQuaWQobix0cnVlKSk7CnJldHVybiB0aGlzO30pO0VsZW1lbnQuaW1wbGVtZW50KCJncmFiIittLGZ1bmN0aW9uKG4pe2woZG9jdW1lbnQuaWQobix0cnVlKSx0aGlzKTtyZXR1cm4gdGhpczt9KTt9KTtFbGVtZW50LmltcGxlbWVudCh7c2V0OmZ1bmN0aW9uKG8sbSl7c3dpdGNoKCR0eXBlKG8pKXtjYXNlIm9iamVjdCI6Zm9yKHZhciBuIGluIG8pe3RoaXMuc2V0KG4sb1tuXSk7Cn1icmVhaztjYXNlInN0cmluZyI6dmFyIGw9RWxlbWVudC5Qcm9wZXJ0aWVzLmdldChvKTsobCYmbC5zZXQpP2wuc2V0LmFwcGx5KHRoaXMsQXJyYXkuc2xpY2UoYXJndW1lbnRzLDEpKTp0aGlzLnNldFByb3BlcnR5KG8sbSk7fXJldHVybiB0aGlzO30sZ2V0OmZ1bmN0aW9uKG0pe3ZhciBsPUVsZW1lbnQuUHJvcGVydGllcy5nZXQobSk7CnJldHVybihsJiZsLmdldCk/bC5nZXQuYXBwbHkodGhpcyxBcnJheS5zbGljZShhcmd1bWVudHMsMSkpOnRoaXMuZ2V0UHJvcGVydHkobSk7fSxlcmFzZTpmdW5jdGlvbihtKXt2YXIgbD1FbGVtZW50LlByb3BlcnRpZXMuZ2V0KG0pOyhsJiZsLmVyYXNlKT9sLmVyYXNlLmFwcGx5KHRoaXMpOnRoaXMucmVtb3ZlUHJvcGVydHkobSk7CnJldHVybiB0aGlzO30sc2V0UHJvcGVydHk6ZnVuY3Rpb24obSxuKXt2YXIgbD1lW21dO2lmKG49PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMucmVtb3ZlUHJvcGVydHkobSk7fWlmKGwmJmJbbV0pe249ISFuO30obCk/dGhpc1tsXT1uOnRoaXMuc2V0QXR0cmlidXRlKG0sIiIrbik7CnJldHVybiB0aGlzO30sc2V0UHJvcGVydGllczpmdW5jdGlvbihsKXtmb3IodmFyIG0gaW4gbCl7dGhpcy5zZXRQcm9wZXJ0eShtLGxbbV0pO31yZXR1cm4gdGhpczt9LGdldFByb3BlcnR5OmZ1bmN0aW9uKG0pe3ZhciBsPWVbbV07dmFyIG49KGwpP3RoaXNbbF06dGhpcy5nZXRBdHRyaWJ1dGUobSwyKTsKcmV0dXJuKGJbbV0pPyEhbjoobCk/bjpufHxudWxsO30sZ2V0UHJvcGVydGllczpmdW5jdGlvbigpe3ZhciBsPSRBKGFyZ3VtZW50cyk7cmV0dXJuIGwubWFwKHRoaXMuZ2V0UHJvcGVydHksdGhpcykuYXNzb2NpYXRlKGwpO30scmVtb3ZlUHJvcGVydHk6ZnVuY3Rpb24obSl7dmFyIGw9ZVttXTsKKGwpP3RoaXNbbF09KGwmJmJbbV0pP2ZhbHNlOiIiOnRoaXMucmVtb3ZlQXR0cmlidXRlKG0pO3JldHVybiB0aGlzO30scmVtb3ZlUHJvcGVydGllczpmdW5jdGlvbigpe0FycmF5LmVhY2goYXJndW1lbnRzLHRoaXMucmVtb3ZlUHJvcGVydHksdGhpcyk7cmV0dXJuIHRoaXM7Cn0saGFzQ2xhc3M6ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMuY2xhc3NOYW1lLmNvbnRhaW5zKGwsIiAiKTt9LGFkZENsYXNzOmZ1bmN0aW9uKGwpe2lmKCF0aGlzLmhhc0NsYXNzKGwpKXt0aGlzLmNsYXNzTmFtZT0odGhpcy5jbGFzc05hbWUrIiAiK2wpLmNsZWFuKCk7Cn1yZXR1cm4gdGhpczt9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGwpe3RoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgiKF58XFxzKSIrbCsiKD86XFxzfCQpIiksIiQxIik7cmV0dXJuIHRoaXM7fSx0b2dnbGVDbGFzczpmdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5oYXNDbGFzcyhsKT90aGlzLnJlbW92ZUNsYXNzKGwpOnRoaXMuYWRkQ2xhc3MobCk7Cn0sYWRvcHQ6ZnVuY3Rpb24oKXtBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykuZWFjaChmdW5jdGlvbihsKXtsPWRvY3VtZW50LmlkKGwsdHJ1ZSk7aWYobCl7dGhpcy5hcHBlbmRDaGlsZChsKTt9fSx0aGlzKTtyZXR1cm4gdGhpczt9LGFwcGVuZFRleHQ6ZnVuY3Rpb24obSxsKXtyZXR1cm4gdGhpcy5ncmFiKHRoaXMuZ2V0RG9jdW1lbnQoKS5uZXdUZXh0Tm9kZShtKSxsKTsKfSxncmFiOmZ1bmN0aW9uKG0sbCl7YVtsfHwiYm90dG9tIl0oZG9jdW1lbnQuaWQobSx0cnVlKSx0aGlzKTtyZXR1cm4gdGhpczt9LGluamVjdDpmdW5jdGlvbihtLGwpe2FbbHx8ImJvdHRvbSJdKHRoaXMsZG9jdW1lbnQuaWQobSx0cnVlKSk7cmV0dXJuIHRoaXM7fSxyZXBsYWNlczpmdW5jdGlvbihsKXtsPWRvY3VtZW50LmlkKGwsdHJ1ZSk7CmwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcyxsKTtyZXR1cm4gdGhpczt9LHdyYXBzOmZ1bmN0aW9uKG0sbCl7bT1kb2N1bWVudC5pZChtLHRydWUpO3JldHVybiB0aGlzLnJlcGxhY2VzKG0pLmdyYWIobSxsKTt9LGdldFByZXZpb3VzOmZ1bmN0aW9uKGwsbSl7cmV0dXJuIGoodGhpcywicHJldmlvdXNTaWJsaW5nIixudWxsLGwsZmFsc2UsbSk7Cn0sZ2V0QWxsUHJldmlvdXM6ZnVuY3Rpb24obCxtKXtyZXR1cm4gaih0aGlzLCJwcmV2aW91c1NpYmxpbmciLG51bGwsbCx0cnVlLG0pO30sZ2V0TmV4dDpmdW5jdGlvbihsLG0pe3JldHVybiBqKHRoaXMsIm5leHRTaWJsaW5nIixudWxsLGwsZmFsc2UsbSk7fSxnZXRBbGxOZXh0OmZ1bmN0aW9uKGwsbSl7cmV0dXJuIGoodGhpcywibmV4dFNpYmxpbmciLG51bGwsbCx0cnVlLG0pOwp9LGdldEZpcnN0OmZ1bmN0aW9uKGwsbSl7cmV0dXJuIGoodGhpcywibmV4dFNpYmxpbmciLCJmaXJzdENoaWxkIixsLGZhbHNlLG0pO30sZ2V0TGFzdDpmdW5jdGlvbihsLG0pe3JldHVybiBqKHRoaXMsInByZXZpb3VzU2libGluZyIsImxhc3RDaGlsZCIsbCxmYWxzZSxtKTsKfSxnZXRQYXJlbnQ6ZnVuY3Rpb24obCxtKXtyZXR1cm4gaih0aGlzLCJwYXJlbnROb2RlIixudWxsLGwsZmFsc2UsbSk7fSxnZXRQYXJlbnRzOmZ1bmN0aW9uKGwsbSl7cmV0dXJuIGoodGhpcywicGFyZW50Tm9kZSIsbnVsbCxsLHRydWUsbSk7fSxnZXRTaWJsaW5nczpmdW5jdGlvbihsLG0pe3JldHVybiB0aGlzLmdldFBhcmVudCgpLmdldENoaWxkcmVuKGwsbSkuZXJhc2UodGhpcyk7Cn0sZ2V0Q2hpbGRyZW46ZnVuY3Rpb24obCxtKXtyZXR1cm4gaih0aGlzLCJuZXh0U2libGluZyIsImZpcnN0Q2hpbGQiLGwsdHJ1ZSxtKTt9LGdldFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O30sZ2V0RG9jdW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50Owp9LGdldEVsZW1lbnRCeUlkOmZ1bmN0aW9uKG8sbil7dmFyIG09dGhpcy5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG8pO2lmKCFtKXtyZXR1cm4gbnVsbDt9Zm9yKHZhciBsPW0ucGFyZW50Tm9kZTtsIT10aGlzO2w9bC5wYXJlbnROb2RlKXtpZighbCl7cmV0dXJuIG51bGw7Cn19cmV0dXJuIGRvY3VtZW50LmlkKG0sbik7fSxnZXRTZWxlY3RlZDpmdW5jdGlvbigpe3JldHVybiBuZXcgRWxlbWVudHMoJEEodGhpcy5vcHRpb25zKS5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIGwuc2VsZWN0ZWQ7fSkpO30sZ2V0Q29tcHV0ZWRTdHlsZTpmdW5jdGlvbihtKXtpZih0aGlzLmN1cnJlbnRTdHlsZSl7cmV0dXJuIHRoaXMuY3VycmVudFN0eWxlW20uY2FtZWxDYXNlKCldOwp9dmFyIGw9dGhpcy5nZXREb2N1bWVudCgpLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKTtyZXR1cm4obCk/bC5nZXRQcm9wZXJ0eVZhbHVlKFttLmh5cGhlbmF0ZSgpXSk6bnVsbDt9LHRvUXVlcnlTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgbD1bXTsKdGhpcy5nZXRFbGVtZW50cygiaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEiLHRydWUpLmVhY2goZnVuY3Rpb24obSl7aWYoIW0ubmFtZXx8bS5kaXNhYmxlZHx8bS50eXBlPT0ic3VibWl0Inx8bS50eXBlPT0icmVzZXQifHxtLnR5cGU9PSJmaWxlIil7cmV0dXJuO312YXIgbj0obS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJzZWxlY3QiKT9FbGVtZW50LmdldFNlbGVjdGVkKG0pLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gby52YWx1ZTsKfSk6KChtLnR5cGU9PSJyYWRpbyJ8fG0udHlwZT09ImNoZWNrYm94IikmJiFtLmNoZWNrZWQpP251bGw6bS52YWx1ZTskc3BsYXQobikuZWFjaChmdW5jdGlvbihvKXtpZih0eXBlb2YgbyE9InVuZGVmaW5lZCIpe2wucHVzaChtLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChvKSk7Cn19KTt9KTtyZXR1cm4gbC5qb2luKCImIik7fSxjbG9uZTpmdW5jdGlvbihvLGwpe289byE9PWZhbHNlO3ZhciByPXRoaXMuY2xvbmVOb2RlKG8pO3ZhciBuPWZ1bmN0aW9uKHYsdSl7aWYoIWwpe3YucmVtb3ZlQXR0cmlidXRlKCJpZCIpO31pZihCcm93c2VyLkVuZ2luZS50cmlkZW50KXt2LmNsZWFyQXR0cmlidXRlcygpOwp2Lm1lcmdlQXR0cmlidXRlcyh1KTt2LnJlbW92ZUF0dHJpYnV0ZSgidWlkIik7aWYodi5vcHRpb25zKXt2YXIgdz12Lm9wdGlvbnMscz11Lm9wdGlvbnM7Zm9yKHZhciB0PXcubGVuZ3RoO3QtLTspe3dbdF0uc2VsZWN0ZWQ9c1t0XS5zZWxlY3RlZDt9fX12YXIgeD1pW3UudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTsKaWYoeCYmdVt4XSl7dlt4XT11W3hdO319O2lmKG8pe3ZhciBwPXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxxPXRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtmb3IodmFyIG09cC5sZW5ndGg7bS0tOyl7bihwW21dLHFbbV0pO319bihyLHRoaXMpO3JldHVybiBkb2N1bWVudC5pZChyKTsKfSxkZXN0cm95OmZ1bmN0aW9uKCl7RWxlbWVudC5lbXB0eSh0aGlzKTtFbGVtZW50LmRpc3Bvc2UodGhpcyk7Zyh0aGlzLHRydWUpO3JldHVybiBudWxsO30sZW1wdHk6ZnVuY3Rpb24oKXskQSh0aGlzLmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rpb24obCl7RWxlbWVudC5kZXN0cm95KGwpOwp9KTtyZXR1cm4gdGhpczt9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5wYXJlbnROb2RlKT90aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyk6dGhpczt9LGhhc0NoaWxkOmZ1bmN0aW9uKGwpe2w9ZG9jdW1lbnQuaWQobCx0cnVlKTtpZighbCl7cmV0dXJuIGZhbHNlOwp9aWYoQnJvd3Nlci5FbmdpbmUud2Via2l0JiZCcm93c2VyLkVuZ2luZS52ZXJzaW9uPDQyMCl7cmV0dXJuICRBKHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobC50YWdOYW1lKSkuY29udGFpbnMobCk7fXJldHVybih0aGlzLmNvbnRhaW5zKT8odGhpcyE9bCYmdGhpcy5jb250YWlucyhsKSk6ISEodGhpcy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihsKSYxNik7Cn0sbWF0Y2g6ZnVuY3Rpb24obCl7cmV0dXJuKCFsfHwobD09dGhpcyl8fChFbGVtZW50LmdldCh0aGlzLCJ0YWciKT09bCkpO319KTtOYXRpdmUuaW1wbGVtZW50KFtFbGVtZW50LFdpbmRvdyxEb2N1bWVudF0se2FkZExpc3RlbmVyOmZ1bmN0aW9uKG8sbil7aWYobz09InVubG9hZCIpe3ZhciBsPW4sbT10aGlzOwpuPWZ1bmN0aW9uKCl7bS5yZW1vdmVMaXN0ZW5lcigidW5sb2FkIixuKTtsKCk7fTt9ZWxzZXtoW3RoaXMudWlkXT10aGlzO31pZih0aGlzLmFkZEV2ZW50TGlzdGVuZXIpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLG4sZmFsc2UpO31lbHNle3RoaXMuYXR0YWNoRXZlbnQoIm9uIitvLG4pOwp9cmV0dXJuIHRoaXM7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihtLGwpe2lmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcil7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG0sbCxmYWxzZSk7fWVsc2V7dGhpcy5kZXRhY2hFdmVudCgib24iK20sbCk7fXJldHVybiB0aGlzOwp9LHJldHJpZXZlOmZ1bmN0aW9uKG0sbCl7dmFyIG89Yyh0aGlzLnVpZCksbj1vW21dO2lmKGwhPXVuZGVmaW5lZCYmbj09dW5kZWZpbmVkKXtuPW9bbV09bDt9cmV0dXJuICRwaWNrKG4pO30sc3RvcmU6ZnVuY3Rpb24obSxsKXt2YXIgbj1jKHRoaXMudWlkKTtuW21dPWw7CnJldHVybiB0aGlzO30sZWxpbWluYXRlOmZ1bmN0aW9uKGwpe3ZhciBtPWModGhpcy51aWQpO2RlbGV0ZSBtW2xdO3JldHVybiB0aGlzO319KTt3aW5kb3cuYWRkTGlzdGVuZXIoInVubG9hZCIsZCk7fSkoKTtFbGVtZW50LlByb3BlcnRpZXM9bmV3IEhhc2g7RWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlPXtzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5zdHlsZS5jc3NUZXh0PWE7Cn0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUuY3NzVGV4dDt9LGVyYXNlOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5jc3NUZXh0PSIiO319O0VsZW1lbnQuUHJvcGVydGllcy50YWc9e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKfX07RWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWw9KGZ1bmN0aW9uKCl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dmFyIGE9e3RhYmxlOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxzZWxlY3Q6WzEsIjxzZWxlY3Q+IiwiPC9zZWxlY3Q+Il0sdGJvZHk6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRyOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXX07CmEudGhlYWQ9YS50Zm9vdD1hLnRib2R5O3ZhciBiPXtzZXQ6ZnVuY3Rpb24oKXt2YXIgZT1BcnJheS5mbGF0dGVuKGFyZ3VtZW50cykuam9pbigiIik7dmFyIGY9QnJvd3Nlci5FbmdpbmUudHJpZGVudCYmYVt0aGlzLmdldCgidGFnIildO2lmKGYpe3ZhciBnPWM7Zy5pbm5lckhUTUw9ZlsxXStlK2ZbMl07CmZvcih2YXIgZD1mWzBdO2QtLTspe2c9Zy5maXJzdENoaWxkO310aGlzLmVtcHR5KCkuYWRvcHQoZy5jaGlsZE5vZGVzKTt9ZWxzZXt0aGlzLmlubmVySFRNTD1lO319fTtiLmVyYXNlPWIuc2V0O3JldHVybiBiO30pKCk7aWYoQnJvd3Nlci5FbmdpbmUud2Via2l0JiZCcm93c2VyLkVuZ2luZS52ZXJzaW9uPDQyMCl7RWxlbWVudC5Qcm9wZXJ0aWVzLnRleHQ9e2dldDpmdW5jdGlvbigpe2lmKHRoaXMuaW5uZXJUZXh0KXtyZXR1cm4gdGhpcy5pbm5lclRleHQ7Cn12YXIgYT10aGlzLm93bmVyRG9jdW1lbnQubmV3RWxlbWVudCgiZGl2Iix7aHRtbDp0aGlzLmlubmVySFRNTH0pLmluamVjdCh0aGlzLm93bmVyRG9jdW1lbnQuYm9keSk7dmFyIGI9YS5pbm5lclRleHQ7YS5kZXN0cm95KCk7cmV0dXJuIGI7fX07fUVsZW1lbnQuUHJvcGVydGllcy5ldmVudHM9e3NldDpmdW5jdGlvbihhKXt0aGlzLmFkZEV2ZW50cyhhKTsKfX07TmF0aXZlLmltcGxlbWVudChbRWxlbWVudCxXaW5kb3csRG9jdW1lbnRdLHthZGRFdmVudDpmdW5jdGlvbihlLGcpe3ZhciBoPXRoaXMucmV0cmlldmUoImV2ZW50cyIse30pO2hbZV09aFtlXXx8e2tleXM6W10sdmFsdWVzOltdfTtpZihoW2VdLmtleXMuY29udGFpbnMoZykpe3JldHVybiB0aGlzOwp9aFtlXS5rZXlzLnB1c2goZyk7dmFyIGY9ZSxhPUVsZW1lbnQuRXZlbnRzLmdldChlKSxjPWcsaT10aGlzO2lmKGEpe2lmKGEub25BZGQpe2Eub25BZGQuY2FsbCh0aGlzLGcpO31pZihhLmNvbmRpdGlvbil7Yz1mdW5jdGlvbihqKXtpZihhLmNvbmRpdGlvbi5jYWxsKHRoaXMsaikpe3JldHVybiBnLmNhbGwodGhpcyxqKTsKfXJldHVybiB0cnVlO307fWY9YS5iYXNlfHxmO312YXIgZD1mdW5jdGlvbigpe3JldHVybiBnLmNhbGwoaSk7fTt2YXIgYj1FbGVtZW50Lk5hdGl2ZUV2ZW50c1tmXTtpZihiKXtpZihiPT0yKXtkPWZ1bmN0aW9uKGope2o9bmV3IEV2ZW50KGosaS5nZXRXaW5kb3coKSk7CmlmKGMuY2FsbChpLGopPT09ZmFsc2Upe2ouc3RvcCgpO319O310aGlzLmFkZExpc3RlbmVyKGYsZCk7fWhbZV0udmFsdWVzLnB1c2goZCk7cmV0dXJuIHRoaXM7fSxyZW1vdmVFdmVudDpmdW5jdGlvbihjLGIpe3ZhciBhPXRoaXMucmV0cmlldmUoImV2ZW50cyIpO2lmKCFhfHwhYVtjXSl7cmV0dXJuIHRoaXM7Cn12YXIgZj1hW2NdLmtleXMuaW5kZXhPZihiKTtpZihmPT0tMSl7cmV0dXJuIHRoaXM7fWFbY10ua2V5cy5zcGxpY2UoZiwxKTt2YXIgZT1hW2NdLnZhbHVlcy5zcGxpY2UoZiwxKVswXTt2YXIgZD1FbGVtZW50LkV2ZW50cy5nZXQoYyk7aWYoZCl7aWYoZC5vblJlbW92ZSl7ZC5vblJlbW92ZS5jYWxsKHRoaXMsYik7Cn1jPWQuYmFzZXx8Yzt9cmV0dXJuKEVsZW1lbnQuTmF0aXZlRXZlbnRzW2NdKT90aGlzLnJlbW92ZUxpc3RlbmVyKGMsZSk6dGhpczt9LGFkZEV2ZW50czpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSl7dGhpcy5hZGRFdmVudChiLGFbYl0pO31yZXR1cm4gdGhpczsKfSxyZW1vdmVFdmVudHM6ZnVuY3Rpb24oYSl7dmFyIGM7aWYoJHR5cGUoYSk9PSJvYmplY3QiKXtmb3IoYyBpbiBhKXt0aGlzLnJlbW92ZUV2ZW50KGMsYVtjXSk7fXJldHVybiB0aGlzO312YXIgYj10aGlzLnJldHJpZXZlKCJldmVudHMiKTtpZighYil7cmV0dXJuIHRoaXM7Cn1pZighYSl7Zm9yKGMgaW4gYil7dGhpcy5yZW1vdmVFdmVudHMoYyk7fXRoaXMuZWxpbWluYXRlKCJldmVudHMiKTt9ZWxzZXtpZihiW2FdKXt3aGlsZShiW2FdLmtleXNbMF0pe3RoaXMucmVtb3ZlRXZlbnQoYSxiW2FdLmtleXNbMF0pO31iW2FdPW51bGw7fX1yZXR1cm4gdGhpczsKfSxmaXJlRXZlbnQ6ZnVuY3Rpb24oZCxiLGEpe3ZhciBjPXRoaXMucmV0cmlldmUoImV2ZW50cyIpO2lmKCFjfHwhY1tkXSl7cmV0dXJuIHRoaXM7fWNbZF0ua2V5cy5lYWNoKGZ1bmN0aW9uKGUpe2UuY3JlYXRlKHtiaW5kOnRoaXMsZGVsYXk6YSwiYXJndW1lbnRzIjpifSkoKTsKfSx0aGlzKTtyZXR1cm4gdGhpczt9LGNsb25lRXZlbnRzOmZ1bmN0aW9uKGQsYSl7ZD1kb2N1bWVudC5pZChkKTt2YXIgYz1kLnJldHJpZXZlKCJldmVudHMiKTtpZighYyl7cmV0dXJuIHRoaXM7fWlmKCFhKXtmb3IodmFyIGIgaW4gYyl7dGhpcy5jbG9uZUV2ZW50cyhkLGIpOwp9fWVsc2V7aWYoY1thXSl7Y1thXS5rZXlzLmVhY2goZnVuY3Rpb24oZSl7dGhpcy5hZGRFdmVudChhLGUpO30sdGhpcyk7fX1yZXR1cm4gdGhpczt9fSk7RWxlbWVudC5OYXRpdmVFdmVudHM9e2NsaWNrOjIsZGJsY2xpY2s6Mixtb3VzZXVwOjIsbW91c2Vkb3duOjIsY29udGV4dG1lbnU6Mixtb3VzZXdoZWVsOjIsRE9NTW91c2VTY3JvbGw6Mixtb3VzZW92ZXI6Mixtb3VzZW91dDoyLG1vdXNlbW92ZToyLHNlbGVjdHN0YXJ0OjIsc2VsZWN0ZW5kOjIsa2V5ZG93bjoyLGtleXByZXNzOjIsa2V5dXA6Mixmb2N1czoyLGJsdXI6MixjaGFuZ2U6MixyZXNldDoyLHNlbGVjdDoyLHN1Ym1pdDoyLGxvYWQ6MSx1bmxvYWQ6MSxiZWZvcmV1bmxvYWQ6MixyZXNpemU6MSxtb3ZlOjEsRE9NQ29udGVudExvYWRlZDoxLHJlYWR5c3RhdGVjaGFuZ2U6MSxlcnJvcjoxLGFib3J0OjEsc2Nyb2xsOjF9OwooZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbihiKXt2YXIgYz1iLnJlbGF0ZWRUYXJnZXQ7aWYoYz09dW5kZWZpbmVkKXtyZXR1cm4gdHJ1ZTt9aWYoYz09PWZhbHNlKXtyZXR1cm4gZmFsc2U7fXJldHVybigkdHlwZSh0aGlzKSE9ImRvY3VtZW50IiYmYyE9dGhpcyYmYy5wcmVmaXghPSJ4dWwiJiYhdGhpcy5oYXNDaGlsZChjKSk7Cn07RWxlbWVudC5FdmVudHM9bmV3IEhhc2goe21vdXNlZW50ZXI6e2Jhc2U6Im1vdXNlb3ZlciIsY29uZGl0aW9uOmF9LG1vdXNlbGVhdmU6e2Jhc2U6Im1vdXNlb3V0Iixjb25kaXRpb246YX0sbW91c2V3aGVlbDp7YmFzZTooQnJvd3Nlci5FbmdpbmUuZ2Vja28pPyJET01Nb3VzZVNjcm9sbCI6Im1vdXNld2hlZWwifX0pOwp9KSgpO0VsZW1lbnQuUHJvcGVydGllcy5zdHlsZXM9e3NldDpmdW5jdGlvbihhKXt0aGlzLnNldFN0eWxlcyhhKTt9fTtFbGVtZW50LlByb3BlcnRpZXMub3BhY2l0eT17c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWIpe2lmKGE9PTApe2lmKHRoaXMuc3R5bGUudmlzaWJpbGl0eSE9ImhpZGRlbiIpe3RoaXMuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjsKfX1lbHNle2lmKHRoaXMuc3R5bGUudmlzaWJpbGl0eSE9InZpc2libGUiKXt0aGlzLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUiO319fWlmKCF0aGlzLmN1cnJlbnRTdHlsZXx8IXRoaXMuY3VycmVudFN0eWxlLmhhc0xheW91dCl7dGhpcy5zdHlsZS56b29tPTE7fWlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe3RoaXMuc3R5bGUuZmlsdGVyPShhPT0xKT8iIjoiYWxwaGEob3BhY2l0eT0iK2EqMTAwKyIpIjsKfXRoaXMuc3R5bGUub3BhY2l0eT1hO3RoaXMuc3RvcmUoIm9wYWNpdHkiLGEpO30sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmV0cmlldmUoIm9wYWNpdHkiLDEpO319O0VsZW1lbnQuaW1wbGVtZW50KHtzZXRPcGFjaXR5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldCgib3BhY2l0eSIsYSx0cnVlKTsKfSxnZXRPcGFjaXR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJvcGFjaXR5Iik7fSxzZXRTdHlsZTpmdW5jdGlvbihiLGEpe3N3aXRjaChiKXtjYXNlIm9wYWNpdHkiOnJldHVybiB0aGlzLnNldCgib3BhY2l0eSIscGFyc2VGbG9hdChhKSk7Y2FzZSJmbG9hdCI6Yj0oQnJvd3Nlci5FbmdpbmUudHJpZGVudCk/InN0eWxlRmxvYXQiOiJjc3NGbG9hdCI7Cn1iPWIuY2FtZWxDYXNlKCk7aWYoJHR5cGUoYSkhPSJzdHJpbmciKXt2YXIgYz0oRWxlbWVudC5TdHlsZXMuZ2V0KGIpfHwiQCIpLnNwbGl0KCIgIik7YT0kc3BsYXQoYSkubWFwKGZ1bmN0aW9uKGUsZCl7aWYoIWNbZF0pe3JldHVybiIiO31yZXR1cm4oJHR5cGUoZSk9PSJudW1iZXIiKT9jW2RdLnJlcGxhY2UoIkAiLE1hdGgucm91bmQoZSkpOmU7Cn0pLmpvaW4oIiAiKTt9ZWxzZXtpZihhPT1TdHJpbmcoTnVtYmVyKGEpKSl7YT1NYXRoLnJvdW5kKGEpO319dGhpcy5zdHlsZVtiXT1hO3JldHVybiB0aGlzO30sZ2V0U3R5bGU6ZnVuY3Rpb24oZyl7c3dpdGNoKGcpe2Nhc2Uib3BhY2l0eSI6cmV0dXJuIHRoaXMuZ2V0KCJvcGFjaXR5Iik7CmNhc2UiZmxvYXQiOmc9KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpPyJzdHlsZUZsb2F0IjoiY3NzRmxvYXQiO31nPWcuY2FtZWxDYXNlKCk7dmFyIGE9dGhpcy5zdHlsZVtnXTtpZighJGNoayhhKSl7YT1bXTtmb3IodmFyIGYgaW4gRWxlbWVudC5TaG9ydFN0eWxlcyl7aWYoZyE9Zil7Y29udGludWU7Cn1mb3IodmFyIGUgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1tmXSl7YS5wdXNoKHRoaXMuZ2V0U3R5bGUoZSkpO31yZXR1cm4gYS5qb2luKCIgIik7fWE9dGhpcy5nZXRDb21wdXRlZFN0eWxlKGcpO31pZihhKXthPVN0cmluZyhhKTt2YXIgYz1hLm1hdGNoKC9yZ2JhP1woW1xkXHMsXStcKS8pOwppZihjKXthPWEucmVwbGFjZShjWzBdLGNbMF0ucmdiVG9IZXgoKSk7fX1pZihCcm93c2VyLkVuZ2luZS5wcmVzdG98fChCcm93c2VyLkVuZ2luZS50cmlkZW50JiYhJGNoayhwYXJzZUludChhLDEwKSkpKXtpZihnLnRlc3QoL14oaGVpZ2h0fHdpZHRoKSQvKSl7dmFyIGI9KGc9PSJ3aWR0aCIpP1sibGVmdCIsInJpZ2h0Il06WyJ0b3AiLCJib3R0b20iXSxkPTA7CmIuZWFjaChmdW5jdGlvbihoKXtkKz10aGlzLmdldFN0eWxlKCJib3JkZXItIitoKyItd2lkdGgiKS50b0ludCgpK3RoaXMuZ2V0U3R5bGUoInBhZGRpbmctIitoKS50b0ludCgpO30sdGhpcyk7cmV0dXJuIHRoaXNbIm9mZnNldCIrZy5jYXBpdGFsaXplKCldLWQrInB4IjsKfWlmKChCcm93c2VyLkVuZ2luZS5wcmVzdG8pJiZTdHJpbmcoYSkudGVzdCgicHgiKSl7cmV0dXJuIGE7fWlmKGcudGVzdCgvKGJvcmRlciguKylXaWR0aHxtYXJnaW58cGFkZGluZykvKSl7cmV0dXJuIjBweCI7fX1yZXR1cm4gYTt9LHNldFN0eWxlczpmdW5jdGlvbihiKXtmb3IodmFyIGEgaW4gYil7dGhpcy5zZXRTdHlsZShhLGJbYV0pOwp9cmV0dXJuIHRoaXM7fSxnZXRTdHlsZXM6ZnVuY3Rpb24oKXt2YXIgYT17fTtBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykuZWFjaChmdW5jdGlvbihiKXthW2JdPXRoaXMuZ2V0U3R5bGUoYik7fSx0aGlzKTtyZXR1cm4gYTt9fSk7RWxlbWVudC5TdHlsZXM9bmV3IEhhc2goe2xlZnQ6IkBweCIsdG9wOiJAcHgiLGJvdHRvbToiQHB4IixyaWdodDoiQHB4Iix3aWR0aDoiQHB4IixoZWlnaHQ6IkBweCIsbWF4V2lkdGg6IkBweCIsbWF4SGVpZ2h0OiJAcHgiLG1pbldpZHRoOiJAcHgiLG1pbkhlaWdodDoiQHB4IixiYWNrZ3JvdW5kQ29sb3I6InJnYihALCBALCBAKSIsYmFja2dyb3VuZFBvc2l0aW9uOiJAcHggQHB4Iixjb2xvcjoicmdiKEAsIEAsIEApIixmb250U2l6ZToiQHB4IixsZXR0ZXJTcGFjaW5nOiJAcHgiLGxpbmVIZWlnaHQ6IkBweCIsY2xpcDoicmVjdChAcHggQHB4IEBweCBAcHgpIixtYXJnaW46IkBweCBAcHggQHB4IEBweCIscGFkZGluZzoiQHB4IEBweCBAcHggQHB4Iixib3JkZXI6IkBweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEApIixib3JkZXJXaWR0aDoiQHB4IEBweCBAcHggQHB4Iixib3JkZXJTdHlsZToiQCBAIEAgQCIsYm9yZGVyQ29sb3I6InJnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSIsekluZGV4OiJAIix6b29tOiJAIixmb250V2VpZ2h0OiJAIix0ZXh0SW5kZW50OiJAcHgiLG9wYWNpdHk6IkAifSk7CkVsZW1lbnQuU2hvcnRTdHlsZXM9e21hcmdpbjp7fSxwYWRkaW5nOnt9LGJvcmRlcjp7fSxib3JkZXJXaWR0aDp7fSxib3JkZXJTdHlsZTp7fSxib3JkZXJDb2xvcjp7fX07WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXS5lYWNoKGZ1bmN0aW9uKGcpe3ZhciBmPUVsZW1lbnQuU2hvcnRTdHlsZXM7CnZhciBiPUVsZW1lbnQuU3R5bGVzO1sibWFyZ2luIiwicGFkZGluZyJdLmVhY2goZnVuY3Rpb24oaCl7dmFyIGk9aCtnO2ZbaF1baV09YltpXT0iQHB4Ijt9KTt2YXIgZT0iYm9yZGVyIitnO2YuYm9yZGVyW2VdPWJbZV09IkBweCBAIHJnYihALCBALCBAKSI7dmFyIGQ9ZSsiV2lkdGgiLGE9ZSsiU3R5bGUiLGM9ZSsiQ29sb3IiOwpmW2VdPXt9O2YuYm9yZGVyV2lkdGhbZF09ZltlXVtkXT1iW2RdPSJAcHgiO2YuYm9yZGVyU3R5bGVbYV09ZltlXVthXT1iW2FdPSJAIjtmLmJvcmRlckNvbG9yW2NdPWZbZV1bY109YltjXT0icmdiKEAsIEAsIEApIjt9KTsoZnVuY3Rpb24oKXtFbGVtZW50LmltcGxlbWVudCh7c2Nyb2xsVG86ZnVuY3Rpb24oaCxpKXtpZihiKHRoaXMpKXt0aGlzLmdldFdpbmRvdygpLnNjcm9sbFRvKGgsaSk7Cn1lbHNle3RoaXMuc2Nyb2xsTGVmdD1oO3RoaXMuc2Nyb2xsVG9wPWk7fXJldHVybiB0aGlzO30sZ2V0U2l6ZTpmdW5jdGlvbigpe2lmKGIodGhpcykpe3JldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNpemUoKTt9cmV0dXJue3g6dGhpcy5vZmZzZXRXaWR0aCx5OnRoaXMub2Zmc2V0SGVpZ2h0fTsKfSxnZXRTY3JvbGxTaXplOmZ1bmN0aW9uKCl7aWYoYih0aGlzKSl7cmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsU2l6ZSgpO31yZXR1cm57eDp0aGlzLnNjcm9sbFdpZHRoLHk6dGhpcy5zY3JvbGxIZWlnaHR9O30sZ2V0U2Nyb2xsOmZ1bmN0aW9uKCl7aWYoYih0aGlzKSl7cmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsKCk7Cn1yZXR1cm57eDp0aGlzLnNjcm9sbExlZnQseTp0aGlzLnNjcm9sbFRvcH07fSxnZXRTY3JvbGxzOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcyxoPXt4OjAseTowfTt3aGlsZShpJiYhYihpKSl7aC54Kz1pLnNjcm9sbExlZnQ7aC55Kz1pLnNjcm9sbFRvcDtpPWkucGFyZW50Tm9kZTsKfXJldHVybiBoO30sZ2V0T2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7dmFyIGg9dGhpcztpZihiKGgpKXtyZXR1cm4gbnVsbDt9aWYoIUJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe3JldHVybiBoLm9mZnNldFBhcmVudDt9d2hpbGUoKGg9aC5wYXJlbnROb2RlKSYmIWIoaCkpe2lmKGQoaCwicG9zaXRpb24iKSE9InN0YXRpYyIpe3JldHVybiBoOwp9fXJldHVybiBudWxsO30sZ2V0T2Zmc2V0czpmdW5jdGlvbigpe2lmKHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgaj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG09ZG9jdW1lbnQuaWQodGhpcy5nZXREb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCkscD1tLmdldFNjcm9sbCgpLGs9dGhpcy5nZXRTY3JvbGxzKCksaT10aGlzLmdldFNjcm9sbCgpLGg9KGQodGhpcywicG9zaXRpb24iKT09ImZpeGVkIik7CnJldHVybnt4OmoubGVmdC50b0ludCgpK2sueC1pLngrKChoKT8wOnAueCktbS5jbGllbnRMZWZ0LHk6ai50b3AudG9JbnQoKStrLnktaS55KygoaCk/MDpwLnkpLW0uY2xpZW50VG9wfTt9dmFyIGw9dGhpcyxuPXt4OjAseTowfTtpZihiKHRoaXMpKXtyZXR1cm4gbjsKfXdoaWxlKGwmJiFiKGwpKXtuLngrPWwub2Zmc2V0TGVmdDtuLnkrPWwub2Zmc2V0VG9wO2lmKEJyb3dzZXIuRW5naW5lLmdlY2tvKXtpZighZihsKSl7bi54Kz1jKGwpO24ueSs9ZyhsKTt9dmFyIG89bC5wYXJlbnROb2RlO2lmKG8mJmQobywib3ZlcmZsb3ciKSE9InZpc2libGUiKXtuLngrPWMobyk7Cm4ueSs9ZyhvKTt9fWVsc2V7aWYobCE9dGhpcyYmQnJvd3Nlci5FbmdpbmUud2Via2l0KXtuLngrPWMobCk7bi55Kz1nKGwpO319bD1sLm9mZnNldFBhcmVudDt9aWYoQnJvd3Nlci5FbmdpbmUuZ2Vja28mJiFmKHRoaXMpKXtuLngtPWModGhpcyk7bi55LT1nKHRoaXMpOwp9cmV0dXJuIG47fSxnZXRQb3NpdGlvbjpmdW5jdGlvbihrKXtpZihiKHRoaXMpKXtyZXR1cm57eDowLHk6MH07fXZhciBsPXRoaXMuZ2V0T2Zmc2V0cygpLGk9dGhpcy5nZXRTY3JvbGxzKCk7dmFyIGg9e3g6bC54LWkueCx5OmwueS1pLnl9O3ZhciBqPShrJiYoaz1kb2N1bWVudC5pZChrKSkpP2suZ2V0UG9zaXRpb24oKTp7eDowLHk6MH07CnJldHVybnt4OmgueC1qLngseTpoLnktai55fTt9LGdldENvb3JkaW5hdGVzOmZ1bmN0aW9uKGope2lmKGIodGhpcykpe3JldHVybiB0aGlzLmdldFdpbmRvdygpLmdldENvb3JkaW5hdGVzKCk7fXZhciBoPXRoaXMuZ2V0UG9zaXRpb24oaiksaT10aGlzLmdldFNpemUoKTsKdmFyIGs9e2xlZnQ6aC54LHRvcDpoLnksd2lkdGg6aS54LGhlaWdodDppLnl9O2sucmlnaHQ9ay5sZWZ0K2sud2lkdGg7ay5ib3R0b209ay50b3Aray5oZWlnaHQ7cmV0dXJuIGs7fSxjb21wdXRlUG9zaXRpb246ZnVuY3Rpb24oaCl7cmV0dXJue2xlZnQ6aC54LWUodGhpcywibWFyZ2luLWxlZnQiKSx0b3A6aC55LWUodGhpcywibWFyZ2luLXRvcCIpfTsKfSxzZXRQb3NpdGlvbjpmdW5jdGlvbihoKXtyZXR1cm4gdGhpcy5zZXRTdHlsZXModGhpcy5jb21wdXRlUG9zaXRpb24oaCkpO319KTtOYXRpdmUuaW1wbGVtZW50KFtEb2N1bWVudCxXaW5kb3ddLHtnZXRTaXplOmZ1bmN0aW9uKCl7aWYoQnJvd3Nlci5FbmdpbmUucHJlc3RvfHxCcm93c2VyLkVuZ2luZS53ZWJraXQpe3ZhciBpPXRoaXMuZ2V0V2luZG93KCk7CnJldHVybnt4OmkuaW5uZXJXaWR0aCx5OmkuaW5uZXJIZWlnaHR9O312YXIgaD1hKHRoaXMpO3JldHVybnt4OmguY2xpZW50V2lkdGgseTpoLmNsaWVudEhlaWdodH07fSxnZXRTY3JvbGw6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmdldFdpbmRvdygpLGg9YSh0aGlzKTsKcmV0dXJue3g6aS5wYWdlWE9mZnNldHx8aC5zY3JvbGxMZWZ0LHk6aS5wYWdlWU9mZnNldHx8aC5zY3JvbGxUb3B9O30sZ2V0U2Nyb2xsU2l6ZTpmdW5jdGlvbigpe3ZhciBpPWEodGhpcyksaD10aGlzLmdldFNpemUoKTtyZXR1cm57eDpNYXRoLm1heChpLnNjcm9sbFdpZHRoLGgueCkseTpNYXRoLm1heChpLnNjcm9sbEhlaWdodCxoLnkpfTsKfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybnt4OjAseTowfTt9LGdldENvb3JkaW5hdGVzOmZ1bmN0aW9uKCl7dmFyIGg9dGhpcy5nZXRTaXplKCk7cmV0dXJue3RvcDowLGxlZnQ6MCxib3R0b206aC55LHJpZ2h0OmgueCxoZWlnaHQ6aC55LHdpZHRoOmgueH07Cn19KTt2YXIgZD1FbGVtZW50LmdldENvbXB1dGVkU3R5bGU7ZnVuY3Rpb24gZShoLGkpe3JldHVybiBkKGgsaSkudG9JbnQoKXx8MDt9ZnVuY3Rpb24gZihoKXtyZXR1cm4gZChoLCItbW96LWJveC1zaXppbmciKT09ImJvcmRlci1ib3giO31mdW5jdGlvbiBnKGgpe3JldHVybiBlKGgsImJvcmRlci10b3Atd2lkdGgiKTsKfWZ1bmN0aW9uIGMoaCl7cmV0dXJuIGUoaCwiYm9yZGVyLWxlZnQtd2lkdGgiKTt9ZnVuY3Rpb24gYihoKXtyZXR1cm4oL14oPzpib2R5fGh0bWwpJC9pKS50ZXN0KGgudGFnTmFtZSk7fWZ1bmN0aW9uIGEoaCl7dmFyIGk9aC5nZXREb2N1bWVudCgpO3JldHVybighaS5jb21wYXRNb2RlfHxpLmNvbXBhdE1vZGU9PSJDU1MxQ29tcGF0Iik/aS5odG1sOmkuYm9keTsKfX0pKCk7RWxlbWVudC5hbGlhcygic2V0UG9zaXRpb24iLCJwb3NpdGlvbiIpO05hdGl2ZS5pbXBsZW1lbnQoW1dpbmRvdyxEb2N1bWVudCxFbGVtZW50XSx7Z2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7fSxnZXRXaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNpemUoKS54Owp9LGdldFNjcm9sbFRvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNjcm9sbCgpLnk7fSxnZXRTY3JvbGxMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueDt9LGdldFNjcm9sbEhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS55Owp9LGdldFNjcm9sbFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLng7fSxnZXRUb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7fSxnZXRMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS54Owp9fSk7TmF0aXZlLmltcGxlbWVudChbRG9jdW1lbnQsRWxlbWVudF0se2dldEVsZW1lbnRzOmZ1bmN0aW9uKGgsZyl7aD1oLnNwbGl0KCIsIik7dmFyIGMsZT17fTtmb3IodmFyIGQ9MCxiPWgubGVuZ3RoO2Q8YjtkKyspe3ZhciBhPWhbZF0sZj1TZWxlY3RvcnMuVXRpbHMuc2VhcmNoKHRoaXMsYSxlKTsKaWYoZCE9MCYmZi5pdGVtKXtmPSRBKGYpO31jPShkPT0wKT9mOihjLml0ZW0pPyRBKGMpLmNvbmNhdChmKTpjLmNvbmNhdChmKTt9cmV0dXJuIG5ldyBFbGVtZW50cyhjLHtkZHVwOihoLmxlbmd0aD4xKSxjYXNoOiFnfSk7fX0pO0VsZW1lbnQuaW1wbGVtZW50KHttYXRjaDpmdW5jdGlvbihiKXtpZighYnx8KGI9PXRoaXMpKXtyZXR1cm4gdHJ1ZTsKfXZhciBkPVNlbGVjdG9ycy5VdGlscy5wYXJzZVRhZ0FuZElEKGIpO3ZhciBhPWRbMF0sZT1kWzFdO2lmKCFTZWxlY3RvcnMuRmlsdGVycy5ieUlEKHRoaXMsZSl8fCFTZWxlY3RvcnMuRmlsdGVycy5ieVRhZyh0aGlzLGEpKXtyZXR1cm4gZmFsc2U7fXZhciBjPVNlbGVjdG9ycy5VdGlscy5wYXJzZVNlbGVjdG9yKGIpOwpyZXR1cm4oYyk/U2VsZWN0b3JzLlV0aWxzLmZpbHRlcih0aGlzLGMse30pOnRydWU7fX0pO3ZhciBTZWxlY3RvcnM9e0NhY2hlOntudGg6e30scGFyc2VkOnt9fX07U2VsZWN0b3JzLlJlZ0V4cHM9e2lkOigvIyhbXHctXSspLyksdGFnOigvXihcdyt8XCopLykscXVpY2s6KC9eKFx3K3xcKikkLyksc3BsaXR0ZXI6KC9ccyooWys+flxzXSlccyooW2EtekEtWiMuKjpcW10pL2cpLGNvbWJpbmVkOigvXC4oW1x3LV0rKXxcWyhcdyspKD86KFshKl4kfnxdPz0pKFsiJ10/KShbXlw0XSo/KVw0KT9cXXw6KFtcdy1dKykoPzpcKFsiJ10/KC4qPyk/WyInXT9cKXwkKS9nKX07ClNlbGVjdG9ycy5VdGlscz17Y2hrOmZ1bmN0aW9uKGIsYyl7aWYoIWMpe3JldHVybiB0cnVlO312YXIgYT0kdWlkKGIpO2lmKCFjW2FdKXtyZXR1cm4gY1thXT10cnVlO31yZXR1cm4gZmFsc2U7fSxwYXJzZU50aEFyZ3VtZW50OmZ1bmN0aW9uKGgpe2lmKFNlbGVjdG9ycy5DYWNoZS5udGhbaF0pe3JldHVybiBTZWxlY3RvcnMuQ2FjaGUubnRoW2hdOwp9dmFyIGU9aC5tYXRjaCgvXihbKy1dP1xkKik/KFthLXpdKyk/KFsrLV0/XGQqKT8kLyk7aWYoIWUpe3JldHVybiBmYWxzZTt9dmFyIGc9cGFyc2VJbnQoZVsxXSwxMCk7dmFyIGQ9KGd8fGc9PT0wKT9nOjE7dmFyIGY9ZVsyXXx8ZmFsc2U7dmFyIGM9cGFyc2VJbnQoZVszXSwxMCl8fDA7CmlmKGQhPTApe2MtLTt3aGlsZShjPDEpe2MrPWQ7fXdoaWxlKGM+PWQpe2MtPWQ7fX1lbHNle2Q9YztmPSJpbmRleCI7fXN3aXRjaChmKXtjYXNlIm4iOmU9e2E6ZCxiOmMsc3BlY2lhbDoibiJ9O2JyZWFrO2Nhc2Uib2RkIjplPXthOjIsYjowLHNwZWNpYWw6Im4ifTsKYnJlYWs7Y2FzZSJldmVuIjplPXthOjIsYjoxLHNwZWNpYWw6Im4ifTticmVhaztjYXNlImZpcnN0IjplPXthOjAsc3BlY2lhbDoiaW5kZXgifTticmVhaztjYXNlImxhc3QiOmU9e3NwZWNpYWw6Imxhc3QtY2hpbGQifTticmVhaztjYXNlIm9ubHkiOmU9e3NwZWNpYWw6Im9ubHktY2hpbGQifTsKYnJlYWs7ZGVmYXVsdDplPXthOihkLTEpLHNwZWNpYWw6ImluZGV4In07fXJldHVybiBTZWxlY3RvcnMuQ2FjaGUubnRoW2hdPWU7fSxwYXJzZVNlbGVjdG9yOmZ1bmN0aW9uKGUpe2lmKFNlbGVjdG9ycy5DYWNoZS5wYXJzZWRbZV0pe3JldHVybiBTZWxlY3RvcnMuQ2FjaGUucGFyc2VkW2VdOwp9dmFyIGQsaD17Y2xhc3NlczpbXSxwc2V1ZG9zOltdLGF0dHJpYnV0ZXM6W119O3doaWxlKChkPVNlbGVjdG9ycy5SZWdFeHBzLmNvbWJpbmVkLmV4ZWMoZSkpKXt2YXIgaT1kWzFdLGc9ZFsyXSxmPWRbM10sYj1kWzVdLGM9ZFs2XSxqPWRbN107aWYoaSl7aC5jbGFzc2VzLnB1c2goaSk7Cn1lbHNle2lmKGMpe3ZhciBhPVNlbGVjdG9ycy5Qc2V1ZG8uZ2V0KGMpO2lmKGEpe2gucHNldWRvcy5wdXNoKHtwYXJzZXI6YSxhcmd1bWVudDpqfSk7fWVsc2V7aC5hdHRyaWJ1dGVzLnB1c2goe25hbWU6YyxvcGVyYXRvcjoiPSIsdmFsdWU6an0pO319ZWxzZXtpZihnKXtoLmF0dHJpYnV0ZXMucHVzaCh7bmFtZTpnLG9wZXJhdG9yOmYsdmFsdWU6Yn0pOwp9fX19aWYoIWguY2xhc3Nlcy5sZW5ndGgpe2RlbGV0ZSBoLmNsYXNzZXM7fWlmKCFoLmF0dHJpYnV0ZXMubGVuZ3RoKXtkZWxldGUgaC5hdHRyaWJ1dGVzO31pZighaC5wc2V1ZG9zLmxlbmd0aCl7ZGVsZXRlIGgucHNldWRvczt9aWYoIWguY2xhc3NlcyYmIWguYXR0cmlidXRlcyYmIWgucHNldWRvcyl7aD1udWxsOwp9cmV0dXJuIFNlbGVjdG9ycy5DYWNoZS5wYXJzZWRbZV09aDt9LHBhcnNlVGFnQW5kSUQ6ZnVuY3Rpb24oYil7dmFyIGE9Yi5tYXRjaChTZWxlY3RvcnMuUmVnRXhwcy50YWcpO3ZhciBjPWIubWF0Y2goU2VsZWN0b3JzLlJlZ0V4cHMuaWQpO3JldHVyblsoYSk/YVsxXToiKiIsKGMpP2NbMV06ZmFsc2VdOwp9LGZpbHRlcjpmdW5jdGlvbihmLGMsZSl7dmFyIGQ7aWYoYy5jbGFzc2VzKXtmb3IoZD1jLmNsYXNzZXMubGVuZ3RoO2QtLTtkKXt2YXIgZz1jLmNsYXNzZXNbZF07aWYoIVNlbGVjdG9ycy5GaWx0ZXJzLmJ5Q2xhc3MoZixnKSl7cmV0dXJuIGZhbHNlO319fWlmKGMuYXR0cmlidXRlcyl7Zm9yKGQ9Yy5hdHRyaWJ1dGVzLmxlbmd0aDsKZC0tO2Qpe3ZhciBiPWMuYXR0cmlidXRlc1tkXTtpZighU2VsZWN0b3JzLkZpbHRlcnMuYnlBdHRyaWJ1dGUoZixiLm5hbWUsYi5vcGVyYXRvcixiLnZhbHVlKSl7cmV0dXJuIGZhbHNlO319fWlmKGMucHNldWRvcyl7Zm9yKGQ9Yy5wc2V1ZG9zLmxlbmd0aDtkLS07ZCl7dmFyIGE9Yy5wc2V1ZG9zW2RdOwppZighU2VsZWN0b3JzLkZpbHRlcnMuYnlQc2V1ZG8oZixhLnBhcnNlcixhLmFyZ3VtZW50LGUpKXtyZXR1cm4gZmFsc2U7fX19cmV0dXJuIHRydWU7fSxnZXRCeVRhZ0FuZElEOmZ1bmN0aW9uKGIsYSxkKXtpZihkKXt2YXIgYz0oYi5nZXRFbGVtZW50QnlJZCk/Yi5nZXRFbGVtZW50QnlJZChkLHRydWUpOkVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoYixkLHRydWUpOwpyZXR1cm4oYyYmU2VsZWN0b3JzLkZpbHRlcnMuYnlUYWcoYyxhKSk/W2NdOltdO31lbHNle3JldHVybiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO319LHNlYXJjaDpmdW5jdGlvbihvLGgsdCl7dmFyIGI9W107dmFyIGM9aC50cmltKCkucmVwbGFjZShTZWxlY3RvcnMuUmVnRXhwcy5zcGxpdHRlcixmdW5jdGlvbihrLGosaSl7Yi5wdXNoKGopOwpyZXR1cm4iOikiK2k7fSkuc3BsaXQoIjopIik7dmFyIHAsZSxBO2Zvcih2YXIgej0wLHY9Yy5sZW5ndGg7ejx2O3orKyl7dmFyIHk9Y1t6XTtpZih6PT0wJiZTZWxlY3RvcnMuUmVnRXhwcy5xdWljay50ZXN0KHkpKXtwPW8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoeSk7CmNvbnRpbnVlO312YXIgYT1iW3otMV07dmFyIHE9U2VsZWN0b3JzLlV0aWxzLnBhcnNlVGFnQW5kSUQoeSk7dmFyIEI9cVswXSxyPXFbMV07aWYoej09MCl7cD1TZWxlY3RvcnMuVXRpbHMuZ2V0QnlUYWdBbmRJRChvLEIscik7fWVsc2V7dmFyIGQ9e30sZz1bXTtmb3IodmFyIHg9MCx3PXAubGVuZ3RoOwp4PHc7eCsrKXtnPVNlbGVjdG9ycy5HZXR0ZXJzW2FdKGcscFt4XSxCLHIsZCk7fXA9Zzt9dmFyIGY9U2VsZWN0b3JzLlV0aWxzLnBhcnNlU2VsZWN0b3IoeSk7aWYoZil7ZT1bXTtmb3IodmFyIHU9MCxzPXAubGVuZ3RoO3U8czt1Kyspe0E9cFt1XTtpZihTZWxlY3RvcnMuVXRpbHMuZmlsdGVyKEEsZix0KSl7ZS5wdXNoKEEpOwp9fXA9ZTt9fXJldHVybiBwO319O1NlbGVjdG9ycy5HZXR0ZXJzPXsiICI6ZnVuY3Rpb24oaCxnLGosYSxlKXt2YXIgZD1TZWxlY3RvcnMuVXRpbHMuZ2V0QnlUYWdBbmRJRChnLGosYSk7Zm9yKHZhciBjPTAsYj1kLmxlbmd0aDtjPGI7YysrKXt2YXIgZj1kW2NdO2lmKFNlbGVjdG9ycy5VdGlscy5jaGsoZixlKSl7aC5wdXNoKGYpOwp9fXJldHVybiBoO30sIj4iOmZ1bmN0aW9uKGgsZyxqLGEsZil7dmFyIGM9U2VsZWN0b3JzLlV0aWxzLmdldEJ5VGFnQW5kSUQoZyxqLGEpO2Zvcih2YXIgZT0wLGQ9Yy5sZW5ndGg7ZTxkO2UrKyl7dmFyIGI9Y1tlXTtpZihiLnBhcmVudE5vZGU9PWcmJlNlbGVjdG9ycy5VdGlscy5jaGsoYixmKSl7aC5wdXNoKGIpOwp9fXJldHVybiBoO30sIisiOmZ1bmN0aW9uKGMsYixhLGUsZCl7d2hpbGUoKGI9Yi5uZXh0U2libGluZykpe2lmKGIubm9kZVR5cGU9PTEpe2lmKFNlbGVjdG9ycy5VdGlscy5jaGsoYixkKSYmU2VsZWN0b3JzLkZpbHRlcnMuYnlUYWcoYixhKSYmU2VsZWN0b3JzLkZpbHRlcnMuYnlJRChiLGUpKXtjLnB1c2goYik7Cn1icmVhazt9fXJldHVybiBjO30sIn4iOmZ1bmN0aW9uKGMsYixhLGUsZCl7d2hpbGUoKGI9Yi5uZXh0U2libGluZykpe2lmKGIubm9kZVR5cGU9PTEpe2lmKCFTZWxlY3RvcnMuVXRpbHMuY2hrKGIsZCkpe2JyZWFrO31pZihTZWxlY3RvcnMuRmlsdGVycy5ieVRhZyhiLGEpJiZTZWxlY3RvcnMuRmlsdGVycy5ieUlEKGIsZSkpe2MucHVzaChiKTsKfX19cmV0dXJuIGM7fX07U2VsZWN0b3JzLkZpbHRlcnM9e2J5VGFnOmZ1bmN0aW9uKGIsYSl7cmV0dXJuKGE9PSIqInx8KGIudGFnTmFtZSYmYi50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PWEpKTt9LGJ5SUQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oIWJ8fChhLmlkJiZhLmlkPT1iKSk7Cn0sYnlDbGFzczpmdW5jdGlvbihiLGEpe3JldHVybihiLmNsYXNzTmFtZSYmYi5jbGFzc05hbWUuY29udGFpbnMmJmIuY2xhc3NOYW1lLmNvbnRhaW5zKGEsIiAiKSk7fSxieVBzZXVkbzpmdW5jdGlvbihhLGQsYyxiKXtyZXR1cm4gZC5jYWxsKGEsYyxiKTt9LGJ5QXR0cmlidXRlOmZ1bmN0aW9uKGMsZCxiLGUpe3ZhciBhPUVsZW1lbnQucHJvdG90eXBlLmdldFByb3BlcnR5LmNhbGwoYyxkKTsKaWYoIWEpe3JldHVybihiPT0iIT0iKTt9aWYoIWJ8fGU9PXVuZGVmaW5lZCl7cmV0dXJuIHRydWU7fXN3aXRjaChiKXtjYXNlIj0iOnJldHVybihhPT1lKTtjYXNlIio9IjpyZXR1cm4oYS5jb250YWlucyhlKSk7Y2FzZSJePSI6cmV0dXJuKGEuc3Vic3RyKDAsZS5sZW5ndGgpPT1lKTsKY2FzZSIkPSI6cmV0dXJuKGEuc3Vic3RyKGEubGVuZ3RoLWUubGVuZ3RoKT09ZSk7Y2FzZSIhPSI6cmV0dXJuKGEhPWUpO2Nhc2Uifj0iOnJldHVybiBhLmNvbnRhaW5zKGUsIiAiKTtjYXNlInw9IjpyZXR1cm4gYS5jb250YWlucyhlLCItIik7fXJldHVybiBmYWxzZTsKfX07U2VsZWN0b3JzLlBzZXVkbz1uZXcgSGFzaCh7Y2hlY2tlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoZWNrZWQ7fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiAhKHRoaXMuaW5uZXJUZXh0fHx0aGlzLnRleHRDb250ZW50fHwiIikubGVuZ3RoO30sbm90OmZ1bmN0aW9uKGEpe3JldHVybiAhRWxlbWVudC5tYXRjaCh0aGlzLGEpOwp9LGNvbnRhaW5zOmZ1bmN0aW9uKGEpe3JldHVybih0aGlzLmlubmVyVGV4dHx8dGhpcy50ZXh0Q29udGVudHx8IiIpLmNvbnRhaW5zKGEpO30sImZpcnN0LWNoaWxkIjpmdW5jdGlvbigpe3JldHVybiBTZWxlY3RvcnMuUHNldWRvLmluZGV4LmNhbGwodGhpcywwKTt9LCJsYXN0LWNoaWxkIjpmdW5jdGlvbigpe3ZhciBhPXRoaXM7CndoaWxlKChhPWEubmV4dFNpYmxpbmcpKXtpZihhLm5vZGVUeXBlPT0xKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTt9LCJvbmx5LWNoaWxkIjpmdW5jdGlvbigpe3ZhciBiPXRoaXM7d2hpbGUoKGI9Yi5wcmV2aW91c1NpYmxpbmcpKXtpZihiLm5vZGVUeXBlPT0xKXtyZXR1cm4gZmFsc2U7Cn19dmFyIGE9dGhpczt3aGlsZSgoYT1hLm5leHRTaWJsaW5nKSl7aWYoYS5ub2RlVHlwZT09MSl7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7fSwibnRoLWNoaWxkIjpmdW5jdGlvbihnLGUpe2c9KGc9PXVuZGVmaW5lZCk/Im4iOmc7dmFyIGM9U2VsZWN0b3JzLlV0aWxzLnBhcnNlTnRoQXJndW1lbnQoZyk7CmlmKGMuc3BlY2lhbCE9Im4iKXtyZXR1cm4gU2VsZWN0b3JzLlBzZXVkb1tjLnNwZWNpYWxdLmNhbGwodGhpcyxjLmEsZSk7fXZhciBmPTA7ZS5wb3NpdGlvbnM9ZS5wb3NpdGlvbnN8fHt9O3ZhciBkPSR1aWQodGhpcyk7aWYoIWUucG9zaXRpb25zW2RdKXt2YXIgYj10aGlzOwp3aGlsZSgoYj1iLnByZXZpb3VzU2libGluZykpe2lmKGIubm9kZVR5cGUhPTEpe2NvbnRpbnVlO31mKys7dmFyIGE9ZS5wb3NpdGlvbnNbJHVpZChiKV07aWYoYSE9dW5kZWZpbmVkKXtmPWErZjticmVhazt9fWUucG9zaXRpb25zW2RdPWY7fXJldHVybihlLnBvc2l0aW9uc1tkXSVjLmE9PWMuYik7Cn0saW5kZXg6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPTA7d2hpbGUoKGI9Yi5wcmV2aW91c1NpYmxpbmcpKXtpZihiLm5vZGVUeXBlPT0xJiYrK2M+YSl7cmV0dXJuIGZhbHNlO319cmV0dXJuKGM9PWEpO30sZXZlbjpmdW5jdGlvbihiLGEpe3JldHVybiBTZWxlY3RvcnMuUHNldWRvWyJudGgtY2hpbGQiXS5jYWxsKHRoaXMsIjJuKzEiLGEpOwp9LG9kZDpmdW5jdGlvbihiLGEpe3JldHVybiBTZWxlY3RvcnMuUHNldWRvWyJudGgtY2hpbGQiXS5jYWxsKHRoaXMsIjJuIixhKTt9LHNlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWQ7fSxlbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZGlzYWJsZWQ9PT1mYWxzZSk7Cn19KTtFbGVtZW50LkV2ZW50cy5kb21yZWFkeT17b25BZGQ6ZnVuY3Rpb24oYSl7aWYoQnJvd3Nlci5sb2FkZWQpe2EuY2FsbCh0aGlzKTt9fX07KGZ1bmN0aW9uKCl7dmFyIGI9ZnVuY3Rpb24oKXtpZihCcm93c2VyLmxvYWRlZCl7cmV0dXJuO31Ccm93c2VyLmxvYWRlZD10cnVlOwp3aW5kb3cuZmlyZUV2ZW50KCJkb21yZWFkeSIpO2RvY3VtZW50LmZpcmVFdmVudCgiZG9tcmVhZHkiKTt9O3dpbmRvdy5hZGRFdmVudCgibG9hZCIsYik7aWYoQnJvd3Nlci5FbmdpbmUudHJpZGVudCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CihmdW5jdGlvbigpeygkdHJ5KGZ1bmN0aW9uKCl7YS5kb1Njcm9sbCgpO3JldHVybiBkb2N1bWVudC5pZChhKS5pbmplY3QoZG9jdW1lbnQuYm9keSkuc2V0KCJodG1sIiwidGVtcCIpLmRpc3Bvc2UoKTt9KSk/YigpOmFyZ3VtZW50cy5jYWxsZWUuZGVsYXkoNTApO30pKCk7Cn1lbHNle2lmKEJyb3dzZXIuRW5naW5lLndlYmtpdCYmQnJvd3Nlci5FbmdpbmUudmVyc2lvbjw1MjUpeyhmdW5jdGlvbigpeyhbImxvYWRlZCIsImNvbXBsZXRlIl0uY29udGFpbnMoZG9jdW1lbnQucmVhZHlTdGF0ZSkpP2IoKTphcmd1bWVudHMuY2FsbGVlLmRlbGF5KDUwKTsKfSkoKTt9ZWxzZXtkb2N1bWVudC5hZGRFdmVudCgiRE9NQ29udGVudExvYWRlZCIsYik7fX19KSgpO3ZhciBKU09OPW5ldyBIYXNoKHRoaXMuSlNPTiYme3N0cmluZ2lmeTpKU09OLnN0cmluZ2lmeSxwYXJzZTpKU09OLnBhcnNlfSkuZXh0ZW5kKHskc3BlY2lhbENoYXJzOnsiXGIiOiJcXGIiLCJcdCI6IlxcdCIsIlxuIjoiXFxuIiwiXGYiOiJcXGYiLCJcciI6IlxcciIsJyInOidcXCInLCJcXCI6IlxcXFwifSwkcmVwbGFjZUNoYXJzOmZ1bmN0aW9uKGEpe3JldHVybiBKU09OLiRzcGVjaWFsQ2hhcnNbYV18fCJcXHUwMCIrTWF0aC5mbG9vcihhLmNoYXJDb2RlQXQoKS8xNikudG9TdHJpbmcoMTYpKyhhLmNoYXJDb2RlQXQoKSUxNikudG9TdHJpbmcoMTYpOwp9LGVuY29kZTpmdW5jdGlvbihiKXtzd2l0Y2goJHR5cGUoYikpe2Nhc2Uic3RyaW5nIjpyZXR1cm4nIicrYi5yZXBsYWNlKC9bXHgwMC1ceDFmXFwiXS9nLEpTT04uJHJlcGxhY2VDaGFycykrJyInO2Nhc2UiYXJyYXkiOnJldHVybiJbIitTdHJpbmcoYi5tYXAoSlNPTi5lbmNvZGUpLmNsZWFuKCkpKyJdIjsKY2FzZSJvYmplY3QiOmNhc2UiaGFzaCI6dmFyIGE9W107SGFzaC5lYWNoKGIsZnVuY3Rpb24oZSxkKXt2YXIgYz1KU09OLmVuY29kZShlKTtpZihjKXthLnB1c2goSlNPTi5lbmNvZGUoZCkrIjoiK2MpO319KTtyZXR1cm4ieyIrYSsifSI7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIFN0cmluZyhiKTsKY2FzZSBmYWxzZTpyZXR1cm4ibnVsbCI7fXJldHVybiBudWxsO30sZGVjb2RlOmZ1bmN0aW9uKHN0cmluZyxzZWN1cmUpe2lmKCR0eXBlKHN0cmluZykhPSJzdHJpbmcifHwhc3RyaW5nLmxlbmd0aCl7cmV0dXJuIG51bGw7fWlmKHNlY3VyZSYmISgvXlssOnt9XFtcXTAtOS5cLStFYWVmbG5yLXUgXG5cclx0XSokLykudGVzdChzdHJpbmcucmVwbGFjZSgvXFwuL2csIkAiKS5yZXBsYWNlKC8iW14iXFxcblxyXSoiL2csIiIpKSl7cmV0dXJuIG51bGw7Cn1yZXR1cm4gZXZhbCgiKCIrc3RyaW5nKyIpIik7fX0pO05hdGl2ZS5pbXBsZW1lbnQoW0hhc2gsQXJyYXksU3RyaW5nLE51bWJlcl0se3RvSlNPTjpmdW5jdGlvbigpe3JldHVybiBKU09OLmVuY29kZSh0aGlzKTt9fSk7dmFyIENvb2tpZT1uZXcgQ2xhc3Moe0ltcGxlbWVudHM6T3B0aW9ucyxvcHRpb25zOntwYXRoOmZhbHNlLGRvbWFpbjpmYWxzZSxkdXJhdGlvbjpmYWxzZSxzZWN1cmU6ZmFsc2UsZG9jdW1lbnQ6ZG9jdW1lbnR9LGluaXRpYWxpemU6ZnVuY3Rpb24oYixhKXt0aGlzLmtleT1iOwp0aGlzLnNldE9wdGlvbnMoYSk7fSx3cml0ZTpmdW5jdGlvbihiKXtiPWVuY29kZVVSSUNvbXBvbmVudChiKTtpZih0aGlzLm9wdGlvbnMuZG9tYWluKXtiKz0iOyBkb21haW49Iit0aGlzLm9wdGlvbnMuZG9tYWluO31pZih0aGlzLm9wdGlvbnMucGF0aCl7Yis9IjsgcGF0aD0iK3RoaXMub3B0aW9ucy5wYXRoOwp9aWYodGhpcy5vcHRpb25zLmR1cmF0aW9uKXt2YXIgYT1uZXcgRGF0ZSgpO2Euc2V0VGltZShhLmdldFRpbWUoKSt0aGlzLm9wdGlvbnMuZHVyYXRpb24qMjQqNjAqNjAqMTAwMCk7Yis9IjsgZXhwaXJlcz0iK2EudG9HTVRTdHJpbmcoKTt9aWYodGhpcy5vcHRpb25zLnNlY3VyZSl7Yis9Ijsgc2VjdXJlIjsKfXRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWU9dGhpcy5rZXkrIj0iK2I7cmV0dXJuIHRoaXM7fSxyZWFkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgiKD86Xnw7KVxccyoiK3RoaXMua2V5LmVzY2FwZVJlZ0V4cCgpKyI9KFteO10qKSIpOwpyZXR1cm4oYSk/ZGVjb2RlVVJJQ29tcG9uZW50KGFbMV0pOm51bGw7fSxkaXNwb3NlOmZ1bmN0aW9uKCl7bmV3IENvb2tpZSh0aGlzLmtleSwkbWVyZ2UodGhpcy5vcHRpb25zLHtkdXJhdGlvbjotMX0pKS53cml0ZSgiIik7cmV0dXJuIHRoaXM7fX0pO0Nvb2tpZS53cml0ZT1mdW5jdGlvbihiLGMsYSl7cmV0dXJuIG5ldyBDb29raWUoYixhKS53cml0ZShjKTsKfTtDb29raWUucmVhZD1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IENvb2tpZShhKS5yZWFkKCk7fTtDb29raWUuZGlzcG9zZT1mdW5jdGlvbihiLGEpe3JldHVybiBuZXcgQ29va2llKGIsYSkuZGlzcG9zZSgpO307dmFyIFN3aWZmPW5ldyBDbGFzcyh7SW1wbGVtZW50czpbT3B0aW9uc10sb3B0aW9uczp7aWQ6bnVsbCxoZWlnaHQ6MSx3aWR0aDoxLGNvbnRhaW5lcjpudWxsLHByb3BlcnRpZXM6e30scGFyYW1zOntxdWFsaXR5OiJoaWdoIixhbGxvd1NjcmlwdEFjY2VzczoiYWx3YXlzIix3TW9kZToidHJhbnNwYXJlbnQiLHN3TGl2ZUNvbm5lY3Q6dHJ1ZX0sY2FsbEJhY2tzOnt9LHZhcnM6e319LHRvRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9iamVjdDsKfSxpbml0aWFsaXplOmZ1bmN0aW9uKGwsbSl7dGhpcy5pbnN0YW5jZT0iU3dpZmZfIiskdGltZSgpO3RoaXMuc2V0T3B0aW9ucyhtKTttPXRoaXMub3B0aW9uczt2YXIgYj10aGlzLmlkPW0uaWR8fHRoaXMuaW5zdGFuY2U7dmFyIGE9ZG9jdW1lbnQuaWQobS5jb250YWluZXIpOwpTd2lmZi5DYWxsQmFja3NbdGhpcy5pbnN0YW5jZV09e307dmFyIGU9bS5wYXJhbXMsZz1tLnZhcnMsZj1tLmNhbGxCYWNrczt2YXIgaD0kZXh0ZW5kKHtoZWlnaHQ6bS5oZWlnaHQsd2lkdGg6bS53aWR0aH0sbS5wcm9wZXJ0aWVzKTt2YXIgaz10aGlzO2Zvcih2YXIgZCBpbiBmKXtTd2lmZi5DYWxsQmFja3NbdGhpcy5pbnN0YW5jZV1bZF09KGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KGsub2JqZWN0LGFyZ3VtZW50cyk7Cn07fSkoZltkXSk7Z1tkXT0iU3dpZmYuQ2FsbEJhY2tzLiIrdGhpcy5pbnN0YW5jZSsiLiIrZDt9ZS5mbGFzaFZhcnM9SGFzaC50b1F1ZXJ5U3RyaW5nKGcpO2lmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe2guY2xhc3NpZD0iY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIjsKZS5tb3ZpZT1sO31lbHNle2gudHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giO2guZGF0YT1sO312YXIgaj0nPG9iamVjdCBpZD0iJytiKyciJztmb3IodmFyIGkgaW4gaCl7ais9IiAiK2krJz0iJytoW2ldKyciJzt9ais9Ij4iO2Zvcih2YXIgYyBpbiBlKXtpZihlW2NdKXtqKz0nPHBhcmFtIG5hbWU9IicrYysnIiB2YWx1ZT0iJytlW2NdKyciIC8+JzsKfX1qKz0iPC9vYmplY3Q+Ijt0aGlzLm9iamVjdD0oKGEpP2EuZW1wdHkoKTpuZXcgRWxlbWVudCgiZGl2IikpLnNldCgiaHRtbCIsaikuZmlyc3RDaGlsZDt9LHJlcGxhY2VzOmZ1bmN0aW9uKGEpe2E9ZG9jdW1lbnQuaWQoYSx0cnVlKTthLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMudG9FbGVtZW50KCksYSk7CnJldHVybiB0aGlzO30saW5qZWN0OmZ1bmN0aW9uKGEpe2RvY3VtZW50LmlkKGEsdHJ1ZSkuYXBwZW5kQ2hpbGQodGhpcy50b0VsZW1lbnQoKSk7cmV0dXJuIHRoaXM7fSxyZW1vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gU3dpZmYucmVtb3RlLmFwcGx5KFN3aWZmLFt0aGlzLnRvRWxlbWVudCgpXS5leHRlbmQoYXJndW1lbnRzKSk7Cn19KTtTd2lmZi5DYWxsQmFja3M9e307U3dpZmYucmVtb3RlPWZ1bmN0aW9uKG9iaixmbil7dmFyIHJzPW9iai5DYWxsRnVuY3Rpb24oJzxpbnZva2UgbmFtZT0iJytmbisnIiByZXR1cm50eXBlPSJqYXZhc2NyaXB0Ij4nK19fZmxhc2hfX2FyZ3VtZW50c1RvWE1MKGFyZ3VtZW50cywyKSsiPC9pbnZva2U+Iik7CnJldHVybiBldmFsKHJzKTt9O3ZhciBGeD1uZXcgQ2xhc3Moe0ltcGxlbWVudHM6W0NoYWluLEV2ZW50cyxPcHRpb25zXSxvcHRpb25zOntmcHM6NTAsdW5pdDpmYWxzZSxkdXJhdGlvbjo1MDAsbGluazoiaWdub3JlIn0saW5pdGlhbGl6ZTpmdW5jdGlvbihhKXt0aGlzLnN1YmplY3Q9dGhpcy5zdWJqZWN0fHx0aGlzOwp0aGlzLnNldE9wdGlvbnMoYSk7dGhpcy5vcHRpb25zLmR1cmF0aW9uPUZ4LkR1cmF0aW9uc1t0aGlzLm9wdGlvbnMuZHVyYXRpb25dfHx0aGlzLm9wdGlvbnMuZHVyYXRpb24udG9JbnQoKTt2YXIgYj10aGlzLm9wdGlvbnMud2FpdDtpZihiPT09ZmFsc2Upe3RoaXMub3B0aW9ucy5saW5rPSJjYW5jZWwiOwp9fSxnZXRUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiAtKE1hdGguY29zKE1hdGguUEkqYSktMSkvMjt9O30sc3RlcDpmdW5jdGlvbigpe3ZhciBhPSR0aW1lKCk7aWYoYTx0aGlzLnRpbWUrdGhpcy5vcHRpb25zLmR1cmF0aW9uKXt2YXIgYj10aGlzLnRyYW5zaXRpb24oKGEtdGhpcy50aW1lKS90aGlzLm9wdGlvbnMuZHVyYXRpb24pOwp0aGlzLnNldCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLHRoaXMudG8sYikpO31lbHNle3RoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20sdGhpcy50bywxKSk7dGhpcy5jb21wbGV0ZSgpO319LHNldDpmdW5jdGlvbihhKXtyZXR1cm4gYTt9LGNvbXB1dGU6ZnVuY3Rpb24oYyxiLGEpe3JldHVybiBGeC5jb21wdXRlKGMsYixhKTsKfSxjaGVjazpmdW5jdGlvbigpe2lmKCF0aGlzLnRpbWVyKXtyZXR1cm4gdHJ1ZTt9c3dpdGNoKHRoaXMub3B0aW9ucy5saW5rKXtjYXNlImNhbmNlbCI6dGhpcy5jYW5jZWwoKTtyZXR1cm4gdHJ1ZTtjYXNlImNoYWluIjp0aGlzLmNoYWluKHRoaXMuY2FsbGVyLmJpbmQodGhpcyxhcmd1bWVudHMpKTsKcmV0dXJuIGZhbHNlO31yZXR1cm4gZmFsc2U7fSxzdGFydDpmdW5jdGlvbihiLGEpe2lmKCF0aGlzLmNoZWNrKGIsYSkpe3JldHVybiB0aGlzO310aGlzLmZyb209Yjt0aGlzLnRvPWE7dGhpcy50aW1lPTA7dGhpcy50cmFuc2l0aW9uPXRoaXMuZ2V0VHJhbnNpdGlvbigpOwp0aGlzLnN0YXJ0VGltZXIoKTt0aGlzLm9uU3RhcnQoKTtyZXR1cm4gdGhpczt9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5zdG9wVGltZXIoKSl7dGhpcy5vbkNvbXBsZXRlKCk7fXJldHVybiB0aGlzO30sY2FuY2VsOmZ1bmN0aW9uKCl7aWYodGhpcy5zdG9wVGltZXIoKSl7dGhpcy5vbkNhbmNlbCgpOwp9cmV0dXJuIHRoaXM7fSxvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoInN0YXJ0Iix0aGlzLnN1YmplY3QpO30sb25Db21wbGV0ZTpmdW5jdGlvbigpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsdGhpcy5zdWJqZWN0KTtpZighdGhpcy5jYWxsQ2hhaW4oKSl7dGhpcy5maXJlRXZlbnQoImNoYWluQ29tcGxldGUiLHRoaXMuc3ViamVjdCk7Cn19LG9uQ2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoImNhbmNlbCIsdGhpcy5zdWJqZWN0KS5jbGVhckNoYWluKCk7fSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuc3RvcFRpbWVyKCk7cmV0dXJuIHRoaXM7fSxyZXN1bWU6ZnVuY3Rpb24oKXt0aGlzLnN0YXJ0VGltZXIoKTsKcmV0dXJuIHRoaXM7fSxzdG9wVGltZXI6ZnVuY3Rpb24oKXtpZighdGhpcy50aW1lcil7cmV0dXJuIGZhbHNlO310aGlzLnRpbWU9JHRpbWUoKS10aGlzLnRpbWU7dGhpcy50aW1lcj0kY2xlYXIodGhpcy50aW1lcik7cmV0dXJuIHRydWU7fSxzdGFydFRpbWVyOmZ1bmN0aW9uKCl7aWYodGhpcy50aW1lcil7cmV0dXJuIGZhbHNlOwp9dGhpcy50aW1lPSR0aW1lKCktdGhpcy50aW1lO3RoaXMudGltZXI9dGhpcy5zdGVwLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwL3RoaXMub3B0aW9ucy5mcHMpLHRoaXMpO3JldHVybiB0cnVlO319KTtGeC5jb21wdXRlPWZ1bmN0aW9uKGMsYixhKXtyZXR1cm4oYi1jKSphK2M7Cn07RnguRHVyYXRpb25zPXsic2hvcnQiOjI1MCxub3JtYWw6NTAwLCJsb25nIjoxMDAwfTtGeC5DU1M9bmV3IENsYXNzKHtFeHRlbmRzOkZ4LHByZXBhcmU6ZnVuY3Rpb24oZCxlLGIpe2I9JHNwbGF0KGIpO3ZhciBjPWJbMV07aWYoISRjaGsoYykpe2JbMV09YlswXTsKYlswXT1kLmdldFN0eWxlKGUpO312YXIgYT1iLm1hcCh0aGlzLnBhcnNlKTtyZXR1cm57ZnJvbTphWzBdLHRvOmFbMV19O30scGFyc2U6ZnVuY3Rpb24oYSl7YT0kbGFtYmRhKGEpKCk7YT0odHlwZW9mIGE9PSJzdHJpbmciKT9hLnNwbGl0KCIgIik6JHNwbGF0KGEpOwpyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYyl7Yz1TdHJpbmcoYyk7dmFyIGI9ZmFsc2U7RnguQ1NTLlBhcnNlcnMuZWFjaChmdW5jdGlvbihmLGUpe2lmKGIpe3JldHVybjt9dmFyIGQ9Zi5wYXJzZShjKTtpZigkY2hrKGQpKXtiPXt2YWx1ZTpkLHBhcnNlcjpmfTt9fSk7CmI9Ynx8e3ZhbHVlOmMscGFyc2VyOkZ4LkNTUy5QYXJzZXJzLlN0cmluZ307cmV0dXJuIGI7fSk7fSxjb21wdXRlOmZ1bmN0aW9uKGQsYyxiKXt2YXIgYT1bXTsoTWF0aC5taW4oZC5sZW5ndGgsYy5sZW5ndGgpKS50aW1lcyhmdW5jdGlvbihlKXthLnB1c2goe3ZhbHVlOmRbZV0ucGFyc2VyLmNvbXB1dGUoZFtlXS52YWx1ZSxjW2VdLnZhbHVlLGIpLHBhcnNlcjpkW2VdLnBhcnNlcn0pOwp9KTthLiRmYW1pbHk9e25hbWU6ImZ4OmNzczp2YWx1ZSJ9O3JldHVybiBhO30sc2VydmU6ZnVuY3Rpb24oYyxiKXtpZigkdHlwZShjKSE9ImZ4OmNzczp2YWx1ZSIpe2M9dGhpcy5wYXJzZShjKTt9dmFyIGE9W107Yy5lYWNoKGZ1bmN0aW9uKGQpe2E9YS5jb25jYXQoZC5wYXJzZXIuc2VydmUoZC52YWx1ZSxiKSk7Cn0pO3JldHVybiBhO30scmVuZGVyOmZ1bmN0aW9uKGEsZCxjLGIpe2Euc2V0U3R5bGUoZCx0aGlzLnNlcnZlKGMsYikpO30sc2VhcmNoOmZ1bmN0aW9uKGEpe2lmKEZ4LkNTUy5DYWNoZVthXSl7cmV0dXJuIEZ4LkNTUy5DYWNoZVthXTt9dmFyIGI9e307QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNoZWV0cyxmdW5jdGlvbihlLGQpe3ZhciBjPWUuaHJlZjsKaWYoYyYmYy5jb250YWlucygiOi8vIikmJiFjLmNvbnRhaW5zKGRvY3VtZW50LmRvbWFpbikpe3JldHVybjt9dmFyIGY9ZS5ydWxlc3x8ZS5jc3NSdWxlcztBcnJheS5lYWNoKGYsZnVuY3Rpb24oaixnKXtpZighai5zdHlsZSl7cmV0dXJuO312YXIgaD0oai5zZWxlY3RvclRleHQpP2ouc2VsZWN0b3JUZXh0LnJlcGxhY2UoL15cdysvLGZ1bmN0aW9uKGkpe3JldHVybiBpLnRvTG93ZXJDYXNlKCk7Cn0pOm51bGw7aWYoIWh8fCFoLnRlc3QoIl4iK2ErIiQiKSl7cmV0dXJuO31FbGVtZW50LlN0eWxlcy5lYWNoKGZ1bmN0aW9uKGssaSl7aWYoIWouc3R5bGVbaV18fEVsZW1lbnQuU2hvcnRTdHlsZXNbaV0pe3JldHVybjt9az1TdHJpbmcoai5zdHlsZVtpXSk7YltpXT0oay50ZXN0KC9ecmdiLykpP2sucmdiVG9IZXgoKTprOwp9KTt9KTt9KTtyZXR1cm4gRnguQ1NTLkNhY2hlW2FdPWI7fX0pO0Z4LkNTUy5DYWNoZT17fTtGeC5DU1MuUGFyc2Vycz1uZXcgSGFzaCh7Q29sb3I6e3BhcnNlOmZ1bmN0aW9uKGEpe2lmKGEubWF0Y2goL14jWzAtOWEtZl17Myw2fSQvaSkpe3JldHVybiBhLmhleFRvUmdiKHRydWUpOwp9cmV0dXJuKChhPWEubWF0Y2goLyhcZCspLFxzKihcZCspLFxzKihcZCspLykpKT9bYVsxXSxhWzJdLGFbM11dOmZhbHNlO30sY29tcHV0ZTpmdW5jdGlvbihjLGIsYSl7cmV0dXJuIGMubWFwKGZ1bmN0aW9uKGUsZCl7cmV0dXJuIE1hdGgucm91bmQoRnguY29tcHV0ZShjW2RdLGJbZF0sYSkpOwp9KTt9LHNlcnZlOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1hcChOdW1iZXIpO319LE51bWJlcjp7cGFyc2U6cGFyc2VGbG9hdCxjb21wdXRlOkZ4LmNvbXB1dGUsc2VydmU6ZnVuY3Rpb24oYixhKXtyZXR1cm4oYSk/YithOmI7fX0sU3RyaW5nOntwYXJzZTokbGFtYmRhKGZhbHNlKSxjb21wdXRlOiRhcmd1bWVudHMoMSksc2VydmU6JGFyZ3VtZW50cygwKX19KTsKRnguVHdlZW49bmV3IENsYXNzKHtFeHRlbmRzOkZ4LkNTUyxpbml0aWFsaXplOmZ1bmN0aW9uKGIsYSl7dGhpcy5lbGVtZW50PXRoaXMuc3ViamVjdD1kb2N1bWVudC5pZChiKTt0aGlzLnBhcmVudChhKTt9LHNldDpmdW5jdGlvbihiLGEpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe2E9YjsKYj10aGlzLnByb3BlcnR5fHx0aGlzLm9wdGlvbnMucHJvcGVydHk7fXRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCxiLGEsdGhpcy5vcHRpb25zLnVuaXQpO3JldHVybiB0aGlzO30sc3RhcnQ6ZnVuY3Rpb24oYyxlLGQpe2lmKCF0aGlzLmNoZWNrKGMsZSxkKSl7cmV0dXJuIHRoaXM7Cn12YXIgYj1BcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7dGhpcy5wcm9wZXJ0eT10aGlzLm9wdGlvbnMucHJvcGVydHl8fGIuc2hpZnQoKTt2YXIgYT10aGlzLnByZXBhcmUodGhpcy5lbGVtZW50LHRoaXMucHJvcGVydHksYik7cmV0dXJuIHRoaXMucGFyZW50KGEuZnJvbSxhLnRvKTsKfX0pO0VsZW1lbnQuUHJvcGVydGllcy50d2Vlbj17c2V0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmV0cmlldmUoInR3ZWVuIik7aWYoYil7Yi5jYW5jZWwoKTt9cmV0dXJuIHRoaXMuZWxpbWluYXRlKCJ0d2VlbiIpLnN0b3JlKCJ0d2VlbjpvcHRpb25zIiwkZXh0ZW5kKHtsaW5rOiJjYW5jZWwifSxhKSk7Cn0sZ2V0OmZ1bmN0aW9uKGEpe2lmKGF8fCF0aGlzLnJldHJpZXZlKCJ0d2VlbiIpKXtpZihhfHwhdGhpcy5yZXRyaWV2ZSgidHdlZW46b3B0aW9ucyIpKXt0aGlzLnNldCgidHdlZW4iLGEpO310aGlzLnN0b3JlKCJ0d2VlbiIsbmV3IEZ4LlR3ZWVuKHRoaXMsdGhpcy5yZXRyaWV2ZSgidHdlZW46b3B0aW9ucyIpKSk7Cn1yZXR1cm4gdGhpcy5yZXRyaWV2ZSgidHdlZW4iKTt9fTtFbGVtZW50LmltcGxlbWVudCh7dHdlZW46ZnVuY3Rpb24oYSxjLGIpe3RoaXMuZ2V0KCJ0d2VlbiIpLnN0YXJ0KGFyZ3VtZW50cyk7cmV0dXJuIHRoaXM7fSxmYWRlOmZ1bmN0aW9uKGMpe3ZhciBlPXRoaXMuZ2V0KCJ0d2VlbiIpLGQ9Im9wYWNpdHkiLGE7CmM9JHBpY2soYywidG9nZ2xlIik7c3dpdGNoKGMpe2Nhc2UiaW4iOmUuc3RhcnQoZCwxKTticmVhaztjYXNlIm91dCI6ZS5zdGFydChkLDApO2JyZWFrO2Nhc2Uic2hvdyI6ZS5zZXQoZCwxKTticmVhaztjYXNlImhpZGUiOmUuc2V0KGQsMCk7YnJlYWs7Y2FzZSJ0b2dnbGUiOnZhciBiPXRoaXMucmV0cmlldmUoImZhZGU6ZmxhZyIsdGhpcy5nZXQoIm9wYWNpdHkiKT09MSk7CmUuc3RhcnQoZCwoYik/MDoxKTt0aGlzLnN0b3JlKCJmYWRlOmZsYWciLCFiKTthPXRydWU7YnJlYWs7ZGVmYXVsdDplLnN0YXJ0KGQsYXJndW1lbnRzKTt9aWYoIWEpe3RoaXMuZWxpbWluYXRlKCJmYWRlOmZsYWciKTt9cmV0dXJuIHRoaXM7fSxoaWdobGlnaHQ6ZnVuY3Rpb24oYyxhKXtpZighYSl7YT10aGlzLnJldHJpZXZlKCJoaWdobGlnaHQ6b3JpZ2luYWwiLHRoaXMuZ2V0U3R5bGUoImJhY2tncm91bmQtY29sb3IiKSk7CmE9KGE9PSJ0cmFuc3BhcmVudCIpPyIjZmZmIjphO312YXIgYj10aGlzLmdldCgidHdlZW4iKTtiLnN0YXJ0KCJiYWNrZ3JvdW5kLWNvbG9yIixjfHwiI2ZmZmY4OCIsYSkuY2hhaW4oZnVuY3Rpb24oKXt0aGlzLnNldFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIix0aGlzLnJldHJpZXZlKCJoaWdobGlnaHQ6b3JpZ2luYWwiKSk7CmIuY2FsbENoYWluKCk7fS5iaW5kKHRoaXMpKTtyZXR1cm4gdGhpczt9fSk7RnguTW9ycGg9bmV3IENsYXNzKHtFeHRlbmRzOkZ4LkNTUyxpbml0aWFsaXplOmZ1bmN0aW9uKGIsYSl7dGhpcy5lbGVtZW50PXRoaXMuc3ViamVjdD1kb2N1bWVudC5pZChiKTt0aGlzLnBhcmVudChhKTsKfSxzZXQ6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXthPXRoaXMuc2VhcmNoKGEpO31mb3IodmFyIGIgaW4gYSl7dGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LGIsYVtiXSx0aGlzLm9wdGlvbnMudW5pdCk7fXJldHVybiB0aGlzO30sY29tcHV0ZTpmdW5jdGlvbihlLGQsYyl7dmFyIGE9e307CmZvcih2YXIgYiBpbiBlKXthW2JdPXRoaXMucGFyZW50KGVbYl0sZFtiXSxjKTt9cmV0dXJuIGE7fSxzdGFydDpmdW5jdGlvbihiKXtpZighdGhpcy5jaGVjayhiKSl7cmV0dXJuIHRoaXM7fWlmKHR5cGVvZiBiPT0ic3RyaW5nIil7Yj10aGlzLnNlYXJjaChiKTt9dmFyIGU9e30sZD17fTsKZm9yKHZhciBjIGluIGIpe3ZhciBhPXRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsYyxiW2NdKTtlW2NdPWEuZnJvbTtkW2NdPWEudG87fXJldHVybiB0aGlzLnBhcmVudChlLGQpO319KTtFbGVtZW50LlByb3BlcnRpZXMubW9ycGg9e3NldDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnJldHJpZXZlKCJtb3JwaCIpOwppZihiKXtiLmNhbmNlbCgpO31yZXR1cm4gdGhpcy5lbGltaW5hdGUoIm1vcnBoIikuc3RvcmUoIm1vcnBoOm9wdGlvbnMiLCRleHRlbmQoe2xpbms6ImNhbmNlbCJ9LGEpKTt9LGdldDpmdW5jdGlvbihhKXtpZihhfHwhdGhpcy5yZXRyaWV2ZSgibW9ycGgiKSl7aWYoYXx8IXRoaXMucmV0cmlldmUoIm1vcnBoOm9wdGlvbnMiKSl7dGhpcy5zZXQoIm1vcnBoIixhKTsKfXRoaXMuc3RvcmUoIm1vcnBoIixuZXcgRnguTW9ycGgodGhpcyx0aGlzLnJldHJpZXZlKCJtb3JwaDpvcHRpb25zIikpKTt9cmV0dXJuIHRoaXMucmV0cmlldmUoIm1vcnBoIik7fX07RWxlbWVudC5pbXBsZW1lbnQoe21vcnBoOmZ1bmN0aW9uKGEpe3RoaXMuZ2V0KCJtb3JwaCIpLnN0YXJ0KGEpOwpyZXR1cm4gdGhpczt9fSk7RnguaW1wbGVtZW50KHtnZXRUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLnRyYW5zaXRpb258fEZ4LlRyYW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O2lmKHR5cGVvZiBhPT0ic3RyaW5nIil7dmFyIGI9YS5zcGxpdCgiOiIpOwphPUZ4LlRyYW5zaXRpb25zO2E9YVtiWzBdXXx8YVtiWzBdLmNhcGl0YWxpemUoKV07aWYoYlsxXSl7YT1hWyJlYXNlIitiWzFdLmNhcGl0YWxpemUoKSsoYlsyXT9iWzJdLmNhcGl0YWxpemUoKToiIildO319cmV0dXJuIGE7fX0pO0Z4LlRyYW5zaXRpb249ZnVuY3Rpb24oYixhKXthPSRzcGxhdChhKTsKcmV0dXJuICRleHRlbmQoYix7ZWFzZUluOmZ1bmN0aW9uKGMpe3JldHVybiBiKGMsYSk7fSxlYXNlT3V0OmZ1bmN0aW9uKGMpe3JldHVybiAxLWIoMS1jLGEpO30sZWFzZUluT3V0OmZ1bmN0aW9uKGMpe3JldHVybihjPD0wLjUpP2IoMipjLGEpLzI6KDItYigyKigxLWMpLGEpKS8yOwp9fSk7fTtGeC5UcmFuc2l0aW9ucz1uZXcgSGFzaCh7bGluZWFyOiRhcmd1bWVudHMoMCl9KTtGeC5UcmFuc2l0aW9ucy5leHRlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpe0Z4LlRyYW5zaXRpb25zW2JdPW5ldyBGeC5UcmFuc2l0aW9uKGFbYl0pO319O0Z4LlRyYW5zaXRpb25zLmV4dGVuZCh7UG93OmZ1bmN0aW9uKGIsYSl7cmV0dXJuIE1hdGgucG93KGIsYVswXXx8Nik7Cn0sRXhwbzpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5wb3coMiw4KihhLTEpKTt9LENpcmM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEtTWF0aC5zaW4oTWF0aC5hY29zKGEpKTt9LFNpbmU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEtTWF0aC5zaW4oKDEtYSkqTWF0aC5QSS8yKTsKfSxCYWNrOmZ1bmN0aW9uKGIsYSl7YT1hWzBdfHwxLjYxODtyZXR1cm4gTWF0aC5wb3coYiwyKSooKGErMSkqYi1hKTt9LEJvdW5jZTpmdW5jdGlvbihmKXt2YXIgZTtmb3IodmFyIGQ9MCxjPTE7MTtkKz1jLGMvPTIpe2lmKGY+PSg3LTQqZCkvMTEpe2U9YypjLU1hdGgucG93KCgxMS02KmQtMTEqZikvNCwyKTsKYnJlYWs7fX1yZXR1cm4gZTt9LEVsYXN0aWM6ZnVuY3Rpb24oYixhKXtyZXR1cm4gTWF0aC5wb3coMiwxMCotLWIpKk1hdGguY29zKDIwKmIqTWF0aC5QSSooYVswXXx8MSkvMyk7fX0pO1siUXVhZCIsIkN1YmljIiwiUXVhcnQiLCJRdWludCJdLmVhY2goZnVuY3Rpb24oYixhKXtGeC5UcmFuc2l0aW9uc1tiXT1uZXcgRnguVHJhbnNpdGlvbihmdW5jdGlvbihjKXtyZXR1cm4gTWF0aC5wb3coYyxbYSsyXSk7Cn0pO30pO3ZhciBSZXF1ZXN0PW5ldyBDbGFzcyh7SW1wbGVtZW50czpbQ2hhaW4sRXZlbnRzLE9wdGlvbnNdLG9wdGlvbnM6e3VybDoiIixkYXRhOiIiLGhlYWRlcnM6eyJYLVJlcXVlc3RlZC1XaXRoIjoiWE1MSHR0cFJlcXVlc3QiLEFjY2VwdDoidGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKiJ9LGFzeW5jOnRydWUsZm9ybWF0OmZhbHNlLG1ldGhvZDoicG9zdCIsbGluazoiaWdub3JlIixpc1N1Y2Nlc3M6bnVsbCxlbXVsYXRpb246dHJ1ZSx1cmxFbmNvZGVkOnRydWUsZW5jb2Rpbmc6InV0Zi04IixldmFsU2NyaXB0czpmYWxzZSxldmFsUmVzcG9uc2U6ZmFsc2Usbm9DYWNoZTpmYWxzZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihhKXt0aGlzLnhocj1uZXcgQnJvd3Nlci5SZXF1ZXN0KCk7CnRoaXMuc2V0T3B0aW9ucyhhKTt0aGlzLm9wdGlvbnMuaXNTdWNjZXNzPXRoaXMub3B0aW9ucy5pc1N1Y2Nlc3N8fHRoaXMuaXNTdWNjZXNzO3RoaXMuaGVhZGVycz1uZXcgSGFzaCh0aGlzLm9wdGlvbnMuaGVhZGVycyk7fSxvblN0YXRlQ2hhbmdlOmZ1bmN0aW9uKCl7aWYodGhpcy54aHIucmVhZHlTdGF0ZSE9NHx8IXRoaXMucnVubmluZyl7cmV0dXJuOwp9dGhpcy5ydW5uaW5nPWZhbHNlO3RoaXMuc3RhdHVzPTA7JHRyeShmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMueGhyLnN0YXR1czt9LmJpbmQodGhpcykpO3RoaXMueGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT0kZW1wdHk7aWYodGhpcy5vcHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsdGhpcy5zdGF0dXMpKXt0aGlzLnJlc3BvbnNlPXt0ZXh0OnRoaXMueGhyLnJlc3BvbnNlVGV4dCx4bWw6dGhpcy54aHIucmVzcG9uc2VYTUx9Owp0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LHRoaXMucmVzcG9uc2UueG1sKTt9ZWxzZXt0aGlzLnJlc3BvbnNlPXt0ZXh0Om51bGwseG1sOm51bGx9O3RoaXMuZmFpbHVyZSgpO319LGlzU3VjY2VzczpmdW5jdGlvbigpe3JldHVybigodGhpcy5zdGF0dXM+PTIwMCkmJih0aGlzLnN0YXR1czwzMDApKTsKfSxwcm9jZXNzU2NyaXB0czpmdW5jdGlvbihhKXtpZih0aGlzLm9wdGlvbnMuZXZhbFJlc3BvbnNlfHwoLyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRlcigiQ29udGVudC10eXBlIikpKXtyZXR1cm4gJGV4ZWMoYSk7fXJldHVybiBhLnN0cmlwU2NyaXB0cyh0aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpOwp9LHN1Y2Nlc3M6ZnVuY3Rpb24oYixhKXt0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3JpcHRzKGIpLGEpO30sb25TdWNjZXNzOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoImNvbXBsZXRlIixhcmd1bWVudHMpLmZpcmVFdmVudCgic3VjY2VzcyIsYXJndW1lbnRzKS5jYWxsQ2hhaW4oKTsKfSxmYWlsdXJlOmZ1bmN0aW9uKCl7dGhpcy5vbkZhaWx1cmUoKTt9LG9uRmFpbHVyZTpmdW5jdGlvbigpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIpLmZpcmVFdmVudCgiZmFpbHVyZSIsdGhpcy54aHIpO30sc2V0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dGhpcy5oZWFkZXJzLnNldChhLGIpOwpyZXR1cm4gdGhpczt9LGdldEhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4gJHRyeShmdW5jdGlvbigpe3JldHVybiB0aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcihhKTt9LmJpbmQodGhpcykpO30sY2hlY2s6ZnVuY3Rpb24oKXtpZighdGhpcy5ydW5uaW5nKXtyZXR1cm4gdHJ1ZTsKfXN3aXRjaCh0aGlzLm9wdGlvbnMubGluayl7Y2FzZSJjYW5jZWwiOnRoaXMuY2FuY2VsKCk7cmV0dXJuIHRydWU7Y2FzZSJjaGFpbiI6dGhpcy5jaGFpbih0aGlzLmNhbGxlci5iaW5kKHRoaXMsYXJndW1lbnRzKSk7cmV0dXJuIGZhbHNlO31yZXR1cm4gZmFsc2U7fSxzZW5kOmZ1bmN0aW9uKGspe2lmKCF0aGlzLmNoZWNrKGspKXtyZXR1cm4gdGhpczsKfXRoaXMucnVubmluZz10cnVlO3ZhciBpPSR0eXBlKGspO2lmKGk9PSJzdHJpbmcifHxpPT0iZWxlbWVudCIpe2s9e2RhdGE6a307fXZhciBkPXRoaXMub3B0aW9ucztrPSRleHRlbmQoe2RhdGE6ZC5kYXRhLHVybDpkLnVybCxtZXRob2Q6ZC5tZXRob2R9LGspO3ZhciBnPWsuZGF0YSxiPVN0cmluZyhrLnVybCksYT1rLm1ldGhvZC50b0xvd2VyQ2FzZSgpOwpzd2l0Y2goJHR5cGUoZykpe2Nhc2UiZWxlbWVudCI6Zz1kb2N1bWVudC5pZChnKS50b1F1ZXJ5U3RyaW5nKCk7YnJlYWs7Y2FzZSJvYmplY3QiOmNhc2UiaGFzaCI6Zz1IYXNoLnRvUXVlcnlTdHJpbmcoZyk7fWlmKHRoaXMub3B0aW9ucy5mb3JtYXQpe3ZhciBqPSJmb3JtYXQ9Iit0aGlzLm9wdGlvbnMuZm9ybWF0OwpnPShnKT9qKyImIitnOmo7fWlmKHRoaXMub3B0aW9ucy5lbXVsYXRpb24mJiFbImdldCIsInBvc3QiXS5jb250YWlucyhhKSl7dmFyIGg9Il9tZXRob2Q9IithO2c9KGcpP2grIiYiK2c6aDthPSJwb3N0Ijt9aWYodGhpcy5vcHRpb25zLnVybEVuY29kZWQmJmE9PSJwb3N0Iil7dmFyIGM9KHRoaXMub3B0aW9ucy5lbmNvZGluZyk/IjsgY2hhcnNldD0iK3RoaXMub3B0aW9ucy5lbmNvZGluZzoiIjsKdGhpcy5oZWFkZXJzLnNldCgiQ29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIitjKTt9aWYodGhpcy5vcHRpb25zLm5vQ2FjaGUpe3ZhciBmPSJub0NhY2hlPSIrbmV3IERhdGUoKS5nZXRUaW1lKCk7Zz0oZyk/ZisiJiIrZzpmOwp9dmFyIGU9Yi5sYXN0SW5kZXhPZigiLyIpO2lmKGU+LTEmJihlPWIuaW5kZXhPZigiIyIpKT4tMSl7Yj1iLnN1YnN0cigwLGUpO31pZihnJiZhPT0iZ2V0Iil7Yj1iKyhiLmNvbnRhaW5zKCI/Iik/IiYiOiI/IikrZztnPW51bGw7fXRoaXMueGhyLm9wZW4oYS50b1VwcGVyQ2FzZSgpLGIsdGhpcy5vcHRpb25zLmFzeW5jKTsKdGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlPXRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpO3RoaXMuaGVhZGVycy5lYWNoKGZ1bmN0aW9uKG0sbCl7dHJ5e3RoaXMueGhyLnNldFJlcXVlc3RIZWFkZXIobCxtKTt9Y2F0Y2gobil7dGhpcy5maXJlRXZlbnQoImV4Y2VwdGlvbiIsW2wsbV0pOwp9fSx0aGlzKTt0aGlzLmZpcmVFdmVudCgicmVxdWVzdCIpO3RoaXMueGhyLnNlbmQoZyk7aWYoIXRoaXMub3B0aW9ucy5hc3luYyl7dGhpcy5vblN0YXRlQ2hhbmdlKCk7fXJldHVybiB0aGlzO30sY2FuY2VsOmZ1bmN0aW9uKCl7aWYoIXRoaXMucnVubmluZyl7cmV0dXJuIHRoaXM7Cn10aGlzLnJ1bm5pbmc9ZmFsc2U7dGhpcy54aHIuYWJvcnQoKTt0aGlzLnhoci5vbnJlYWR5c3RhdGVjaGFuZ2U9JGVtcHR5O3RoaXMueGhyPW5ldyBCcm93c2VyLlJlcXVlc3QoKTt0aGlzLmZpcmVFdmVudCgiY2FuY2VsIik7cmV0dXJuIHRoaXM7fX0pOyhmdW5jdGlvbigpe3ZhciBhPXt9OwpbImdldCIsInBvc3QiLCJwdXQiLCJkZWxldGUiLCJHRVQiLCJQT1NUIiwiUFVUIiwiREVMRVRFIl0uZWFjaChmdW5jdGlvbihiKXthW2JdPWZ1bmN0aW9uKCl7dmFyIGM9QXJyYXkubGluayhhcmd1bWVudHMse3VybDpTdHJpbmcudHlwZSxkYXRhOiRkZWZpbmVkfSk7CnJldHVybiB0aGlzLnNlbmQoJGV4dGVuZChjLHttZXRob2Q6Yn0pKTt9O30pO1JlcXVlc3QuaW1wbGVtZW50KGEpO30pKCk7RWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQ9e3NldDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnJldHJpZXZlKCJzZW5kIik7aWYoYil7Yi5jYW5jZWwoKTsKfXJldHVybiB0aGlzLmVsaW1pbmF0ZSgic2VuZCIpLnN0b3JlKCJzZW5kOm9wdGlvbnMiLCRleHRlbmQoe2RhdGE6dGhpcyxsaW5rOiJjYW5jZWwiLG1ldGhvZDp0aGlzLmdldCgibWV0aG9kIil8fCJwb3N0Iix1cmw6dGhpcy5nZXQoImFjdGlvbiIpfSxhKSk7fSxnZXQ6ZnVuY3Rpb24oYSl7aWYoYXx8IXRoaXMucmV0cmlldmUoInNlbmQiKSl7aWYoYXx8IXRoaXMucmV0cmlldmUoInNlbmQ6b3B0aW9ucyIpKXt0aGlzLnNldCgic2VuZCIsYSk7Cn10aGlzLnN0b3JlKCJzZW5kIixuZXcgUmVxdWVzdCh0aGlzLnJldHJpZXZlKCJzZW5kOm9wdGlvbnMiKSkpO31yZXR1cm4gdGhpcy5yZXRyaWV2ZSgic2VuZCIpO319O0VsZW1lbnQuaW1wbGVtZW50KHtzZW5kOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0KCJzZW5kIik7CmIuc2VuZCh7ZGF0YTp0aGlzLHVybDphfHxiLm9wdGlvbnMudXJsfSk7cmV0dXJuIHRoaXM7fX0pO1JlcXVlc3QuSFRNTD1uZXcgQ2xhc3Moe0V4dGVuZHM6UmVxdWVzdCxvcHRpb25zOnt1cGRhdGU6ZmFsc2UsYXBwZW5kOmZhbHNlLGV2YWxTY3JpcHRzOnRydWUsZmlsdGVyOmZhbHNlfSxwcm9jZXNzSFRNTDpmdW5jdGlvbihjKXt2YXIgYj1jLm1hdGNoKC88Ym9keVtePl0qPihbXHNcU10qPyk8XC9ib2R5Pi9pKTsKYz0oYik/YlsxXTpjO3ZhciBhPW5ldyBFbGVtZW50KCJkaXYiKTtyZXR1cm4gJHRyeShmdW5jdGlvbigpe3ZhciBkPSI8cm9vdD4iK2MrIjwvcm9vdD4iLGc7aWYoQnJvd3Nlci5FbmdpbmUudHJpZGVudCl7Zz1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpOwpnLmFzeW5jPWZhbHNlO2cubG9hZFhNTChkKTt9ZWxzZXtnPW5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoZCwidGV4dC94bWwiKTt9ZD1nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJyb290IilbMF07aWYoIWQpe3JldHVybiBudWxsO31mb3IodmFyIGY9MCxlPWQuY2hpbGROb2Rlcy5sZW5ndGg7CmY8ZTtmKyspe3ZhciBoPUVsZW1lbnQuY2xvbmUoZC5jaGlsZE5vZGVzW2ZdLHRydWUsdHJ1ZSk7aWYoaCl7YS5ncmFiKGgpO319cmV0dXJuIGE7fSl8fGEuc2V0KCJodG1sIixjKTt9LHN1Y2Nlc3M6ZnVuY3Rpb24oZCl7dmFyIGM9dGhpcy5vcHRpb25zLGI9dGhpcy5yZXNwb25zZTsKYi5odG1sPWQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKGUpe2IuamF2YXNjcmlwdD1lO30pO3ZhciBhPXRoaXMucHJvY2Vzc0hUTUwoYi5odG1sKTtiLnRyZWU9YS5jaGlsZE5vZGVzO2IuZWxlbWVudHM9YS5nZXRFbGVtZW50cygiKiIpO2lmKGMuZmlsdGVyKXtiLnRyZWU9Yi5lbGVtZW50cy5maWx0ZXIoYy5maWx0ZXIpOwp9aWYoYy51cGRhdGUpe2RvY3VtZW50LmlkKGMudXBkYXRlKS5lbXB0eSgpLnNldCgiaHRtbCIsYi5odG1sKTt9ZWxzZXtpZihjLmFwcGVuZCl7ZG9jdW1lbnQuaWQoYy5hcHBlbmQpLmFkb3B0KGEuZ2V0Q2hpbGRyZW4oKSk7fX1pZihjLmV2YWxTY3JpcHRzKXskZXhlYyhiLmphdmFzY3JpcHQpOwp9dGhpcy5vblN1Y2Nlc3MoYi50cmVlLGIuZWxlbWVudHMsYi5odG1sLGIuamF2YXNjcmlwdCk7fX0pO0VsZW1lbnQuUHJvcGVydGllcy5sb2FkPXtzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5yZXRyaWV2ZSgibG9hZCIpO2lmKGIpe2IuY2FuY2VsKCk7fXJldHVybiB0aGlzLmVsaW1pbmF0ZSgibG9hZCIpLnN0b3JlKCJsb2FkOm9wdGlvbnMiLCRleHRlbmQoe2RhdGE6dGhpcyxsaW5rOiJjYW5jZWwiLHVwZGF0ZTp0aGlzLG1ldGhvZDoiZ2V0In0sYSkpOwp9LGdldDpmdW5jdGlvbihhKXtpZihhfHwhdGhpcy5yZXRyaWV2ZSgibG9hZCIpKXtpZihhfHwhdGhpcy5yZXRyaWV2ZSgibG9hZDpvcHRpb25zIikpe3RoaXMuc2V0KCJsb2FkIixhKTt9dGhpcy5zdG9yZSgibG9hZCIsbmV3IFJlcXVlc3QuSFRNTCh0aGlzLnJldHJpZXZlKCJsb2FkOm9wdGlvbnMiKSkpOwp9cmV0dXJuIHRoaXMucmV0cmlldmUoImxvYWQiKTt9fTtFbGVtZW50LmltcGxlbWVudCh7bG9hZDpmdW5jdGlvbigpe3RoaXMuZ2V0KCJsb2FkIikuc2VuZChBcnJheS5saW5rKGFyZ3VtZW50cyx7ZGF0YTpPYmplY3QudHlwZSx1cmw6U3RyaW5nLnR5cGV9KSk7cmV0dXJuIHRoaXM7Cn19KTtSZXF1ZXN0LkpTT049bmV3IENsYXNzKHtFeHRlbmRzOlJlcXVlc3Qsb3B0aW9uczp7c2VjdXJlOnRydWV9LGluaXRpYWxpemU6ZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnQoYSk7dGhpcy5oZWFkZXJzLmV4dGVuZCh7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiWC1SZXF1ZXN0IjoiSlNPTiJ9KTsKfSxzdWNjZXNzOmZ1bmN0aW9uKGEpe3RoaXMucmVzcG9uc2UuanNvbj1KU09OLmRlY29kZShhLHRoaXMub3B0aW9ucy5zZWN1cmUpO3RoaXMub25TdWNjZXNzKHRoaXMucmVzcG9uc2UuanNvbixhKTt9fSk7]]></data>
	</file>
	<file>
	  <filename>/mootools-1.2-more.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly9Nb29Ub29scyBNb3JlLCA8aHR0cDovL21vb3Rvb2xzLm5ldC9tb3JlPi4gQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgQWFyb24gTmV3dG9uIDxodHRwOi8vY2xpZW50Y2lkZS5jb20vPiwgVmFsZXJpbyBQcm9pZXR0aSA8aHR0cDovL21hZDRtaWxrLm5ldD4gJiB0aGUgTW9vVG9vbHMgdGVhbSA8aHR0cDovL21vb3Rvb2xzLm5ldC9kZXZlbG9wZXJzPiwgTUlUIFN0eWxlIExpY2Vuc2UuCgpNb29Ub29scy5Nb3JlPXt2ZXJzaW9uOiIxLjIuNC40IixidWlsZDoiNmY2MDU3ZGM2NDVmZGI3NTQ3Njg5MTgzYjIzMTEwNjNiZDY1M2RkZiJ9O0VsZW1lbnQuaW1wbGVtZW50KHttZWFzdXJlOmZ1bmN0aW9uKGUpe3ZhciBnPWZ1bmN0aW9uKGgpe3JldHVybiAhISghaHx8aC5vZmZzZXRIZWlnaHR8fGgub2Zmc2V0V2lkdGgpOwp9O2lmKGcodGhpcykpe3JldHVybiBlLmFwcGx5KHRoaXMpO312YXIgZD10aGlzLmdldFBhcmVudCgpLGY9W10sYj1bXTt3aGlsZSghZyhkKSYmZCE9ZG9jdW1lbnQuYm9keSl7Yi5wdXNoKGQuZXhwb3NlKCkpO2Q9ZC5nZXRQYXJlbnQoKTt9dmFyIGM9dGhpcy5leHBvc2UoKTsKdmFyIGE9ZS5hcHBseSh0aGlzKTtjKCk7Yi5lYWNoKGZ1bmN0aW9uKGgpe2goKTt9KTtyZXR1cm4gYTt9LGV4cG9zZTpmdW5jdGlvbigpe2lmKHRoaXMuZ2V0U3R5bGUoImRpc3BsYXkiKSE9Im5vbmUiKXtyZXR1cm4gJGVtcHR5O312YXIgYT10aGlzLnN0eWxlLmNzc1RleHQ7CnRoaXMuc2V0U3R5bGVzKHtkaXNwbGF5OiJibG9jayIscG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4ifSk7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5jc3NUZXh0PWE7fS5iaW5kKHRoaXMpO30sZ2V0RGltZW5zaW9uczpmdW5jdGlvbihhKXthPSRtZXJnZSh7Y29tcHV0ZVNpemU6ZmFsc2V9LGEpOwp2YXIgZj17fTt2YXIgZD1mdW5jdGlvbihnLGUpe3JldHVybihlLmNvbXB1dGVTaXplKT9nLmdldENvbXB1dGVkU2l6ZShlKTpnLmdldFNpemUoKTt9O3ZhciBiPXRoaXMuZ2V0UGFyZW50KCJib2R5Iik7aWYoYiYmdGhpcy5nZXRTdHlsZSgiZGlzcGxheSIpPT0ibm9uZSIpe2Y9dGhpcy5tZWFzdXJlKGZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcyxhKTsKfSk7fWVsc2V7aWYoYil7dHJ5e2Y9ZCh0aGlzLGEpO31jYXRjaChjKXt9fWVsc2V7Zj17eDowLHk6MH07fX1yZXR1cm4gJGNoayhmLngpPyRleHRlbmQoZix7d2lkdGg6Zi54LGhlaWdodDpmLnl9KTokZXh0ZW5kKGYse3g6Zi53aWR0aCx5OmYuaGVpZ2h0fSk7fSxnZXRDb21wdXRlZFNpemU6ZnVuY3Rpb24oYSl7YT0kbWVyZ2Uoe3N0eWxlczpbInBhZGRpbmciLCJib3JkZXIiXSxwbGFpbnM6e2hlaWdodDpbInRvcCIsImJvdHRvbSJdLHdpZHRoOlsibGVmdCIsInJpZ2h0Il19LG1vZGU6ImJvdGgifSxhKTsKdmFyIGM9e3dpZHRoOjAsaGVpZ2h0OjB9O3N3aXRjaChhLm1vZGUpe2Nhc2UidmVydGljYWwiOmRlbGV0ZSBjLndpZHRoO2RlbGV0ZSBhLnBsYWlucy53aWR0aDticmVhaztjYXNlImhvcml6b250YWwiOmRlbGV0ZSBjLmhlaWdodDtkZWxldGUgYS5wbGFpbnMuaGVpZ2h0OwpicmVhazt9dmFyIGI9W107JGVhY2goYS5wbGFpbnMsZnVuY3Rpb24oZyxmKXtnLmVhY2goZnVuY3Rpb24oaCl7YS5zdHlsZXMuZWFjaChmdW5jdGlvbihpKXtiLnB1c2goKGk9PSJib3JkZXIiKT9pKyItIitoKyItd2lkdGgiOmkrIi0iK2gpO30pO30pO30pO3ZhciBlPXt9OwpiLmVhY2goZnVuY3Rpb24oZil7ZVtmXT10aGlzLmdldENvbXB1dGVkU3R5bGUoZik7fSx0aGlzKTt2YXIgZD1bXTskZWFjaChhLnBsYWlucyxmdW5jdGlvbihnLGYpe3ZhciBoPWYuY2FwaXRhbGl6ZSgpO2NbInRvdGFsIitoXT1jWyJjb21wdXRlZCIraF09MDtnLmVhY2goZnVuY3Rpb24oaSl7Y1siY29tcHV0ZWQiK2kuY2FwaXRhbGl6ZSgpXT0wOwpiLmVhY2goZnVuY3Rpb24oayxqKXtpZihrLnRlc3QoaSkpe2Vba109ZVtrXS50b0ludCgpfHwwO2NbInRvdGFsIitoXT1jWyJ0b3RhbCIraF0rZVtrXTtjWyJjb21wdXRlZCIraS5jYXBpdGFsaXplKCldPWNbImNvbXB1dGVkIitpLmNhcGl0YWxpemUoKV0rZVtrXTt9aWYoay50ZXN0KGkpJiZmIT1rJiYoay50ZXN0KCJib3JkZXIiKXx8ay50ZXN0KCJwYWRkaW5nIikpJiYhZC5jb250YWlucyhrKSl7ZC5wdXNoKGspOwpjWyJjb21wdXRlZCIraF09Y1siY29tcHV0ZWQiK2hdLWVba107fX0pO30pO30pO1siV2lkdGgiLCJIZWlnaHQiXS5lYWNoKGZ1bmN0aW9uKGcpe3ZhciBmPWcudG9Mb3dlckNhc2UoKTtpZighJGNoayhjW2ZdKSl7cmV0dXJuO31jW2ZdPWNbZl0rdGhpc1sib2Zmc2V0IitnXStjWyJjb21wdXRlZCIrZ107CmNbInRvdGFsIitnXT1jW2ZdK2NbInRvdGFsIitnXTtkZWxldGUgY1siY29tcHV0ZWQiK2ddO30sdGhpcyk7cmV0dXJuICRleHRlbmQoZSxjKTt9fSk7KGZ1bmN0aW9uKCl7dmFyIGE9RWxlbWVudC5wcm90b3R5cGUucG9zaXRpb247RWxlbWVudC5pbXBsZW1lbnQoe3Bvc2l0aW9uOmZ1bmN0aW9uKGcpe2lmKGcmJigkZGVmaW5lZChnLngpfHwkZGVmaW5lZChnLnkpKSl7cmV0dXJuIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpczsKfSRlYWNoKGd8fHt9LGZ1bmN0aW9uKHUsdCl7aWYoISRkZWZpbmVkKHUpKXtkZWxldGUgZ1t0XTt9fSk7Zz0kbWVyZ2Uoe3JlbGF0aXZlVG86ZG9jdW1lbnQuYm9keSxwb3NpdGlvbjp7eDoiY2VudGVyIix5OiJjZW50ZXIifSxlZGdlOmZhbHNlLG9mZnNldDp7eDowLHk6MH0scmV0dXJuUG9zOmZhbHNlLHJlbEZpeGVkUG9zaXRpb246ZmFsc2UsaWdub3JlTWFyZ2luczpmYWxzZSxpZ25vcmVTY3JvbGw6ZmFsc2UsYWxsb3dOZWdhdGl2ZTpmYWxzZX0sZyk7CnZhciByPXt4OjAseTowfSxlPWZhbHNlO3ZhciBjPXRoaXMubWVhc3VyZShmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5pZCh0aGlzLmdldE9mZnNldFBhcmVudCgpKTt9KTtpZihjJiZjIT10aGlzLmdldERvY3VtZW50KCkuYm9keSl7cj1jLm1lYXN1cmUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpOwp9KTtlPWMhPWRvY3VtZW50LmlkKGcucmVsYXRpdmVUbyk7Zy5vZmZzZXQueD1nLm9mZnNldC54LXIueDtnLm9mZnNldC55PWcub2Zmc2V0Lnktci55O312YXIgcz1mdW5jdGlvbih0KXtpZigkdHlwZSh0KSE9InN0cmluZyIpe3JldHVybiB0O310PXQudG9Mb3dlckNhc2UoKTsKdmFyIHU9e307aWYodC50ZXN0KCJsZWZ0Iikpe3UueD0ibGVmdCI7fWVsc2V7aWYodC50ZXN0KCJyaWdodCIpKXt1Lng9InJpZ2h0Ijt9ZWxzZXt1Lng9ImNlbnRlciI7fX1pZih0LnRlc3QoInVwcGVyIil8fHQudGVzdCgidG9wIikpe3UueT0idG9wIjt9ZWxzZXtpZih0LnRlc3QoImJvdHRvbSIpKXt1Lnk9ImJvdHRvbSI7Cn1lbHNle3UueT0iY2VudGVyIjt9fXJldHVybiB1O307Zy5lZGdlPXMoZy5lZGdlKTtnLnBvc2l0aW9uPXMoZy5wb3NpdGlvbik7aWYoIWcuZWRnZSl7aWYoZy5wb3NpdGlvbi54PT0iY2VudGVyIiYmZy5wb3NpdGlvbi55PT0iY2VudGVyIil7Zy5lZGdlPXt4OiJjZW50ZXIiLHk6ImNlbnRlciJ9Owp9ZWxzZXtnLmVkZ2U9e3g6ImxlZnQiLHk6InRvcCJ9O319dGhpcy5zZXRTdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpO3ZhciBmPWRvY3VtZW50LmlkKGcucmVsYXRpdmVUbyl8fGRvY3VtZW50LmJvZHksZD1mPT1kb2N1bWVudC5ib2R5P3dpbmRvdy5nZXRTY3JvbGwoKTpmLmdldFBvc2l0aW9uKCksbD1kLnksaD1kLng7CnZhciBuPXRoaXMuZ2V0RGltZW5zaW9ucyh7Y29tcHV0ZVNpemU6dHJ1ZSxzdHlsZXM6WyJwYWRkaW5nIiwiYm9yZGVyIiwibWFyZ2luIl19KTt2YXIgaj17fSxvPWcub2Zmc2V0LnkscT1nLm9mZnNldC54LGs9d2luZG93LmdldFNpemUoKTtzd2l0Y2goZy5wb3NpdGlvbi54KXtjYXNlImxlZnQiOmoueD1oK3E7CmJyZWFrO2Nhc2UicmlnaHQiOmoueD1oK3ErZi5vZmZzZXRXaWR0aDticmVhaztkZWZhdWx0OmoueD1oKygoZj09ZG9jdW1lbnQuYm9keT9rLng6Zi5vZmZzZXRXaWR0aCkvMikrcTticmVhazt9c3dpdGNoKGcucG9zaXRpb24ueSl7Y2FzZSJ0b3AiOmoueT1sK287YnJlYWs7CmNhc2UiYm90dG9tIjpqLnk9bCtvK2Yub2Zmc2V0SGVpZ2h0O2JyZWFrO2RlZmF1bHQ6ai55PWwrKChmPT1kb2N1bWVudC5ib2R5P2sueTpmLm9mZnNldEhlaWdodCkvMikrbzticmVhazt9aWYoZy5lZGdlKXt2YXIgYj17fTtzd2l0Y2goZy5lZGdlLngpe2Nhc2UibGVmdCI6Yi54PTA7CmJyZWFrO2Nhc2UicmlnaHQiOmIueD0tbi54LW4uY29tcHV0ZWRSaWdodC1uLmNvbXB1dGVkTGVmdDticmVhaztkZWZhdWx0OmIueD0tKG4udG90YWxXaWR0aC8yKTticmVhazt9c3dpdGNoKGcuZWRnZS55KXtjYXNlInRvcCI6Yi55PTA7YnJlYWs7Y2FzZSJib3R0b20iOmIueT0tbi55LW4uY29tcHV0ZWRUb3Atbi5jb21wdXRlZEJvdHRvbTsKYnJlYWs7ZGVmYXVsdDpiLnk9LShuLnRvdGFsSGVpZ2h0LzIpO2JyZWFrO31qLngrPWIueDtqLnkrPWIueTt9aj17bGVmdDooKGoueD49MHx8ZXx8Zy5hbGxvd05lZ2F0aXZlKT9qLng6MCkudG9JbnQoKSx0b3A6KChqLnk+PTB8fGV8fGcuYWxsb3dOZWdhdGl2ZSk/ai55OjApLnRvSW50KCl9Owp2YXIgaT17bGVmdDoieCIsdG9wOiJ5In07WyJtaW5pbXVtIiwibWF4aW11bSJdLmVhY2goZnVuY3Rpb24odCl7WyJsZWZ0IiwidG9wIl0uZWFjaChmdW5jdGlvbih1KXt2YXIgdj1nW3RdP2dbdF1baVt1XV06bnVsbDtpZih2IT1udWxsJiZqW3VdPHYpe2pbdV09djt9fSk7Cn0pO2lmKGYuZ2V0U3R5bGUoInBvc2l0aW9uIik9PSJmaXhlZCJ8fGcucmVsRml4ZWRQb3NpdGlvbil7dmFyIG09d2luZG93LmdldFNjcm9sbCgpO2oudG9wKz1tLnk7ai5sZWZ0Kz1tLng7fWlmKGcuaWdub3JlU2Nyb2xsKXt2YXIgcD1mLmdldFNjcm9sbCgpO2oudG9wLT1wLnk7CmoubGVmdC09cC54O31pZihnLmlnbm9yZU1hcmdpbnMpe2oubGVmdCs9KGcuZWRnZS54PT0icmlnaHQiP25bIm1hcmdpbi1yaWdodCJdOmcuZWRnZS54PT0iY2VudGVyIj8tblsibWFyZ2luLWxlZnQiXSsoKG5bIm1hcmdpbi1yaWdodCJdK25bIm1hcmdpbi1sZWZ0Il0pLzIpOi1uWyJtYXJnaW4tbGVmdCJdKTsKai50b3ArPShnLmVkZ2UueT09ImJvdHRvbSI/blsibWFyZ2luLWJvdHRvbSJdOmcuZWRnZS55PT0iY2VudGVyIj8tblsibWFyZ2luLXRvcCJdKygoblsibWFyZ2luLWJvdHRvbSJdK25bIm1hcmdpbi10b3AiXSkvMik6LW5bIm1hcmdpbi10b3AiXSk7fWoubGVmdD1NYXRoLmNlaWwoai5sZWZ0KTsKai50b3A9TWF0aC5jZWlsKGoudG9wKTtpZihnLnJldHVyblBvcyl7cmV0dXJuIGo7fWVsc2V7dGhpcy5zZXRTdHlsZXMoaik7fXJldHVybiB0aGlzO319KTt9KSgpO0Z4LlNsaWRlPW5ldyBDbGFzcyh7RXh0ZW5kczpGeCxvcHRpb25zOnttb2RlOiJ2ZXJ0aWNhbCIsd3JhcHBlcjpmYWxzZSxoaWRlT3ZlcmZsb3c6dHJ1ZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihiLGEpe3RoaXMuYWRkRXZlbnQoImNvbXBsZXRlIixmdW5jdGlvbigpe3RoaXMub3Blbj0odGhpcy53cmFwcGVyWyJvZmZzZXQiK3RoaXMubGF5b3V0LmNhcGl0YWxpemUoKV0hPTApOwppZih0aGlzLm9wZW4pe3RoaXMud3JhcHBlci5zZXRTdHlsZSgiaGVpZ2h0IiwiIik7fWlmKHRoaXMub3BlbiYmQnJvd3Nlci5FbmdpbmUud2Via2l0NDE5KXt0aGlzLmVsZW1lbnQuZGlzcG9zZSgpLmluamVjdCh0aGlzLndyYXBwZXIpO319LHRydWUpO3RoaXMuZWxlbWVudD10aGlzLnN1YmplY3Q9ZG9jdW1lbnQuaWQoYik7CnRoaXMucGFyZW50KGEpO3ZhciBkPXRoaXMuZWxlbWVudC5yZXRyaWV2ZSgid3JhcHBlciIpO3ZhciBjPXRoaXMuZWxlbWVudC5nZXRTdHlsZXMoIm1hcmdpbiIsInBvc2l0aW9uIiwib3ZlcmZsb3ciKTtpZih0aGlzLm9wdGlvbnMuaGlkZU92ZXJmbG93KXtjPSRleHRlbmQoYyx7b3ZlcmZsb3c6ImhpZGRlbiJ9KTsKfWlmKHRoaXMub3B0aW9ucy53cmFwcGVyKXtkPWRvY3VtZW50LmlkKHRoaXMub3B0aW9ucy53cmFwcGVyKS5zZXRTdHlsZXMoYyk7fXRoaXMud3JhcHBlcj1kfHxuZXcgRWxlbWVudCgiZGl2Iix7c3R5bGVzOmN9KS53cmFwcyh0aGlzLmVsZW1lbnQpO3RoaXMuZWxlbWVudC5zdG9yZSgid3JhcHBlciIsdGhpcy53cmFwcGVyKS5zZXRTdHlsZSgibWFyZ2luIiwwKTsKdGhpcy5ub3c9W107dGhpcy5vcGVuPXRydWU7fSx2ZXJ0aWNhbDpmdW5jdGlvbigpe3RoaXMubWFyZ2luPSJtYXJnaW4tdG9wIjt0aGlzLmxheW91dD0iaGVpZ2h0Ijt0aGlzLm9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0O30saG9yaXpvbnRhbDpmdW5jdGlvbigpe3RoaXMubWFyZ2luPSJtYXJnaW4tbGVmdCI7CnRoaXMubGF5b3V0PSJ3aWR0aCI7dGhpcy5vZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoO30sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudC5zZXRTdHlsZSh0aGlzLm1hcmdpbixhWzBdKTt0aGlzLndyYXBwZXIuc2V0U3R5bGUodGhpcy5sYXlvdXQsYVsxXSk7CnJldHVybiB0aGlzO30sY29tcHV0ZTpmdW5jdGlvbihjLGIsYSl7cmV0dXJuWzAsMV0ubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBGeC5jb21wdXRlKGNbZF0sYltkXSxhKTt9KTt9LHN0YXJ0OmZ1bmN0aW9uKGIsZSl7aWYoIXRoaXMuY2hlY2soYixlKSl7cmV0dXJuIHRoaXM7Cn10aGlzW2V8fHRoaXMub3B0aW9ucy5tb2RlXSgpO3ZhciBkPXRoaXMuZWxlbWVudC5nZXRTdHlsZSh0aGlzLm1hcmdpbikudG9JbnQoKTt2YXIgYz10aGlzLndyYXBwZXIuZ2V0U3R5bGUodGhpcy5sYXlvdXQpLnRvSW50KCk7dmFyIGE9W1tkLGNdLFswLHRoaXMub2Zmc2V0XV07CnZhciBnPVtbZCxjXSxbLXRoaXMub2Zmc2V0LDBdXTt2YXIgZjtzd2l0Y2goYil7Y2FzZSJpbiI6Zj1hO2JyZWFrO2Nhc2Uib3V0IjpmPWc7YnJlYWs7Y2FzZSJ0b2dnbGUiOmY9KGM9PTApP2E6Zzt9cmV0dXJuIHRoaXMucGFyZW50KGZbMF0sZlsxXSk7fSxzbGlkZUluOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnN0YXJ0KCJpbiIsYSk7Cn0sc2xpZGVPdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc3RhcnQoIm91dCIsYSk7fSxoaWRlOmZ1bmN0aW9uKGEpe3RoaXNbYXx8dGhpcy5vcHRpb25zLm1vZGVdKCk7dGhpcy5vcGVuPWZhbHNlO3JldHVybiB0aGlzLnNldChbLXRoaXMub2Zmc2V0LDBdKTt9LHNob3c6ZnVuY3Rpb24oYSl7dGhpc1thfHx0aGlzLm9wdGlvbnMubW9kZV0oKTsKdGhpcy5vcGVuPXRydWU7cmV0dXJuIHRoaXMuc2V0KFswLHRoaXMub2Zmc2V0XSk7fSx0b2dnbGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc3RhcnQoInRvZ2dsZSIsYSk7fX0pO0VsZW1lbnQuUHJvcGVydGllcy5zbGlkZT17c2V0OmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMucmV0cmlldmUoInNsaWRlIik7CmlmKGEpe2EuY2FuY2VsKCk7fXJldHVybiB0aGlzLmVsaW1pbmF0ZSgic2xpZGUiKS5zdG9yZSgic2xpZGU6b3B0aW9ucyIsJGV4dGVuZCh7bGluazoiY2FuY2VsIn0sYikpO30sZ2V0OmZ1bmN0aW9uKGEpe2lmKGF8fCF0aGlzLnJldHJpZXZlKCJzbGlkZSIpKXtpZihhfHwhdGhpcy5yZXRyaWV2ZSgic2xpZGU6b3B0aW9ucyIpKXt0aGlzLnNldCgic2xpZGUiLGEpOwp9dGhpcy5zdG9yZSgic2xpZGUiLG5ldyBGeC5TbGlkZSh0aGlzLHRoaXMucmV0cmlldmUoInNsaWRlOm9wdGlvbnMiKSkpO31yZXR1cm4gdGhpcy5yZXRyaWV2ZSgic2xpZGUiKTt9fTtFbGVtZW50LmltcGxlbWVudCh7c2xpZGU6ZnVuY3Rpb24oZCxlKXtkPWR8fCJ0b2dnbGUiOwp2YXIgYj10aGlzLmdldCgic2xpZGUiKSxhO3N3aXRjaChkKXtjYXNlImhpZGUiOmIuaGlkZShlKTticmVhaztjYXNlInNob3ciOmIuc2hvdyhlKTticmVhaztjYXNlInRvZ2dsZSI6dmFyIGM9dGhpcy5yZXRyaWV2ZSgic2xpZGU6ZmxhZyIsYi5vcGVuKTtiW2M/InNsaWRlT3V0Ijoic2xpZGVJbiJdKGUpOwp0aGlzLnN0b3JlKCJzbGlkZTpmbGFnIiwhYyk7YT10cnVlO2JyZWFrO2RlZmF1bHQ6Yi5zdGFydChkLGUpO31pZighYSl7dGhpcy5lbGltaW5hdGUoInNsaWRlOmZsYWciKTt9cmV0dXJuIHRoaXM7fX0pO3ZhciBEcmFnPW5ldyBDbGFzcyh7SW1wbGVtZW50czpbRXZlbnRzLE9wdGlvbnNdLG9wdGlvbnM6e3NuYXA6Nix1bml0OiJweCIsZ3JpZDpmYWxzZSxzdHlsZTp0cnVlLGxpbWl0OmZhbHNlLGhhbmRsZTpmYWxzZSxpbnZlcnQ6ZmFsc2UscHJldmVudERlZmF1bHQ6ZmFsc2Usc3RvcFByb3BhZ2F0aW9uOmZhbHNlLG1vZGlmaWVyczp7eDoibGVmdCIseToidG9wIn19LGluaXRpYWxpemU6ZnVuY3Rpb24oKXt2YXIgYj1BcnJheS5saW5rKGFyZ3VtZW50cyx7b3B0aW9uczpPYmplY3QudHlwZSxlbGVtZW50OiRkZWZpbmVkfSk7CnRoaXMuZWxlbWVudD1kb2N1bWVudC5pZChiLmVsZW1lbnQpO3RoaXMuZG9jdW1lbnQ9dGhpcy5lbGVtZW50LmdldERvY3VtZW50KCk7dGhpcy5zZXRPcHRpb25zKGIub3B0aW9uc3x8e30pO3ZhciBhPSR0eXBlKHRoaXMub3B0aW9ucy5oYW5kbGUpO3RoaXMuaGFuZGxlcz0oKGE9PSJhcnJheSJ8fGE9PSJjb2xsZWN0aW9uIik/JCQodGhpcy5vcHRpb25zLmhhbmRsZSk6ZG9jdW1lbnQuaWQodGhpcy5vcHRpb25zLmhhbmRsZSkpfHx0aGlzLmVsZW1lbnQ7CnRoaXMubW91c2U9e25vdzp7fSxwb3M6e319O3RoaXMudmFsdWU9e3N0YXJ0Ont9LG5vdzp7fX07dGhpcy5zZWxlY3Rpb249KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpPyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biI7dGhpcy5ib3VuZD17c3RhcnQ6dGhpcy5zdGFydC5iaW5kKHRoaXMpLGNoZWNrOnRoaXMuY2hlY2suYmluZCh0aGlzKSxkcmFnOnRoaXMuZHJhZy5iaW5kKHRoaXMpLHN0b3A6dGhpcy5zdG9wLmJpbmQodGhpcyksY2FuY2VsOnRoaXMuY2FuY2VsLmJpbmQodGhpcyksZXZlbnRTdG9wOiRsYW1iZGEoZmFsc2UpfTsKdGhpcy5hdHRhY2goKTt9LGF0dGFjaDpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5hZGRFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5kLnN0YXJ0KTtyZXR1cm4gdGhpczt9LGRldGFjaDpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5yZW1vdmVFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5kLnN0YXJ0KTsKcmV0dXJuIHRoaXM7fSxzdGFydDpmdW5jdGlvbihjKXtpZihjLnJpZ2h0Q2xpY2spe3JldHVybjt9aWYodGhpcy5vcHRpb25zLnByZXZlbnREZWZhdWx0KXtjLnByZXZlbnREZWZhdWx0KCk7fWlmKHRoaXMub3B0aW9ucy5zdG9wUHJvcGFnYXRpb24pe2Muc3RvcFByb3BhZ2F0aW9uKCk7Cn10aGlzLm1vdXNlLnN0YXJ0PWMucGFnZTt0aGlzLmZpcmVFdmVudCgiYmVmb3JlU3RhcnQiLHRoaXMuZWxlbWVudCk7dmFyIGE9dGhpcy5vcHRpb25zLmxpbWl0O3RoaXMubGltaXQ9e3g6W10seTpbXX07Zm9yKHZhciBkIGluIHRoaXMub3B0aW9ucy5tb2RpZmllcnMpe2lmKCF0aGlzLm9wdGlvbnMubW9kaWZpZXJzW2RdKXtjb250aW51ZTsKfWlmKHRoaXMub3B0aW9ucy5zdHlsZSl7dGhpcy52YWx1ZS5ub3dbZF09dGhpcy5lbGVtZW50LmdldFN0eWxlKHRoaXMub3B0aW9ucy5tb2RpZmllcnNbZF0pLnRvSW50KCk7fWVsc2V7dGhpcy52YWx1ZS5ub3dbZF09dGhpcy5lbGVtZW50W3RoaXMub3B0aW9ucy5tb2RpZmllcnNbZF1dOwp9aWYodGhpcy5vcHRpb25zLmludmVydCl7dGhpcy52YWx1ZS5ub3dbZF0qPS0xO310aGlzLm1vdXNlLnBvc1tkXT1jLnBhZ2VbZF0tdGhpcy52YWx1ZS5ub3dbZF07aWYoYSYmYVtkXSl7Zm9yKHZhciBiPTI7Yi0tO2Ipe2lmKCRjaGsoYVtkXVtiXSkpe3RoaXMubGltaXRbZF1bYl09JGxhbWJkYShhW2RdW2JdKSgpOwp9fX19aWYoJHR5cGUodGhpcy5vcHRpb25zLmdyaWQpPT0ibnVtYmVyIil7dGhpcy5vcHRpb25zLmdyaWQ9e3g6dGhpcy5vcHRpb25zLmdyaWQseTp0aGlzLm9wdGlvbnMuZ3JpZH07fXRoaXMuZG9jdW1lbnQuYWRkRXZlbnRzKHttb3VzZW1vdmU6dGhpcy5ib3VuZC5jaGVjayxtb3VzZXVwOnRoaXMuYm91bmQuY2FuY2VsfSk7CnRoaXMuZG9jdW1lbnQuYWRkRXZlbnQodGhpcy5zZWxlY3Rpb24sdGhpcy5ib3VuZC5ldmVudFN0b3ApO30sY2hlY2s6ZnVuY3Rpb24oYSl7aWYodGhpcy5vcHRpb25zLnByZXZlbnREZWZhdWx0KXthLnByZXZlbnREZWZhdWx0KCk7fXZhciBiPU1hdGgucm91bmQoTWF0aC5zcXJ0KE1hdGgucG93KGEucGFnZS54LXRoaXMubW91c2Uuc3RhcnQueCwyKStNYXRoLnBvdyhhLnBhZ2UueS10aGlzLm1vdXNlLnN0YXJ0LnksMikpKTsKaWYoYj50aGlzLm9wdGlvbnMuc25hcCl7dGhpcy5jYW5jZWwoKTt0aGlzLmRvY3VtZW50LmFkZEV2ZW50cyh7bW91c2Vtb3ZlOnRoaXMuYm91bmQuZHJhZyxtb3VzZXVwOnRoaXMuYm91bmQuc3RvcH0pO3RoaXMuZmlyZUV2ZW50KCJzdGFydCIsW3RoaXMuZWxlbWVudCxhXSkuZmlyZUV2ZW50KCJzbmFwIix0aGlzLmVsZW1lbnQpOwp9fSxkcmFnOmZ1bmN0aW9uKGEpe2lmKHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCl7YS5wcmV2ZW50RGVmYXVsdCgpO310aGlzLm1vdXNlLm5vdz1hLnBhZ2U7Zm9yKHZhciBiIGluIHRoaXMub3B0aW9ucy5tb2RpZmllcnMpe2lmKCF0aGlzLm9wdGlvbnMubW9kaWZpZXJzW2JdKXtjb250aW51ZTsKfXRoaXMudmFsdWUubm93W2JdPXRoaXMubW91c2Uubm93W2JdLXRoaXMubW91c2UucG9zW2JdO2lmKHRoaXMub3B0aW9ucy5pbnZlcnQpe3RoaXMudmFsdWUubm93W2JdKj0tMTt9aWYodGhpcy5vcHRpb25zLmxpbWl0JiZ0aGlzLmxpbWl0W2JdKXtpZigkY2hrKHRoaXMubGltaXRbYl1bMV0pJiYodGhpcy52YWx1ZS5ub3dbYl0+dGhpcy5saW1pdFtiXVsxXSkpe3RoaXMudmFsdWUubm93W2JdPXRoaXMubGltaXRbYl1bMV07Cn1lbHNle2lmKCRjaGsodGhpcy5saW1pdFtiXVswXSkmJih0aGlzLnZhbHVlLm5vd1tiXTx0aGlzLmxpbWl0W2JdWzBdKSl7dGhpcy52YWx1ZS5ub3dbYl09dGhpcy5saW1pdFtiXVswXTt9fX1pZih0aGlzLm9wdGlvbnMuZ3JpZFtiXSl7dGhpcy52YWx1ZS5ub3dbYl0tPSgodGhpcy52YWx1ZS5ub3dbYl0tKHRoaXMubGltaXRbYl1bMF18fDApKSV0aGlzLm9wdGlvbnMuZ3JpZFtiXSk7Cn1pZih0aGlzLm9wdGlvbnMuc3R5bGUpe3RoaXMuZWxlbWVudC5zZXRTdHlsZSh0aGlzLm9wdGlvbnMubW9kaWZpZXJzW2JdLHRoaXMudmFsdWUubm93W2JdK3RoaXMub3B0aW9ucy51bml0KTt9ZWxzZXt0aGlzLmVsZW1lbnRbdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tiXV09dGhpcy52YWx1ZS5ub3dbYl07Cn19dGhpcy5maXJlRXZlbnQoImRyYWciLFt0aGlzLmVsZW1lbnQsYV0pO30sY2FuY2VsOmZ1bmN0aW9uKGEpe3RoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnQoIm1vdXNlbW92ZSIsdGhpcy5ib3VuZC5jaGVjayk7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91c2V1cCIsdGhpcy5ib3VuZC5jYW5jZWwpOwppZihhKXt0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50KHRoaXMuc2VsZWN0aW9uLHRoaXMuYm91bmQuZXZlbnRTdG9wKTt0aGlzLmZpcmVFdmVudCgiY2FuY2VsIix0aGlzLmVsZW1lbnQpO319LHN0b3A6ZnVuY3Rpb24oYSl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCh0aGlzLnNlbGVjdGlvbix0aGlzLmJvdW5kLmV2ZW50U3RvcCk7CnRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnQoIm1vdXNlbW92ZSIsdGhpcy5ib3VuZC5kcmFnKTt0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50KCJtb3VzZXVwIix0aGlzLmJvdW5kLnN0b3ApO2lmKGEpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsW3RoaXMuZWxlbWVudCxhXSk7Cn19fSk7RWxlbWVudC5pbXBsZW1lbnQoe21ha2VSZXNpemFibGU6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IERyYWcodGhpcywkbWVyZ2Uoe21vZGlmaWVyczp7eDoid2lkdGgiLHk6ImhlaWdodCJ9fSxhKSk7dGhpcy5zdG9yZSgicmVzaXplciIsYik7cmV0dXJuIGIuYWRkRXZlbnQoImRyYWciLGZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoInJlc2l6ZSIsYik7Cn0uYmluZCh0aGlzKSk7fX0pO0RyYWcuTW92ZT1uZXcgQ2xhc3Moe0V4dGVuZHM6RHJhZyxvcHRpb25zOntkcm9wcGFibGVzOltdLGNvbnRhaW5lcjpmYWxzZSxwcmVjYWxjdWxhdGU6ZmFsc2UsaW5jbHVkZU1hcmdpbnM6dHJ1ZSxjaGVja0Ryb3BwYWJsZXM6dHJ1ZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihiLGEpe3RoaXMucGFyZW50KGIsYSk7CmI9dGhpcy5lbGVtZW50O3RoaXMuZHJvcHBhYmxlcz0kJCh0aGlzLm9wdGlvbnMuZHJvcHBhYmxlcyk7dGhpcy5jb250YWluZXI9ZG9jdW1lbnQuaWQodGhpcy5vcHRpb25zLmNvbnRhaW5lcik7aWYodGhpcy5jb250YWluZXImJiR0eXBlKHRoaXMuY29udGFpbmVyKSE9ImVsZW1lbnQiKXt0aGlzLmNvbnRhaW5lcj1kb2N1bWVudC5pZCh0aGlzLmNvbnRhaW5lci5nZXREb2N1bWVudCgpLmJvZHkpOwp9dmFyIGM9Yi5nZXRTdHlsZXMoImxlZnQiLCJ0b3AiLCJwb3NpdGlvbiIpO2lmKGMubGVmdD09ImF1dG8ifHxjLnRvcD09ImF1dG8iKXtiLnNldFBvc2l0aW9uKGIuZ2V0UG9zaXRpb24oYi5nZXRPZmZzZXRQYXJlbnQoKSkpO31pZihjLnBvc2l0aW9uPT0ic3RhdGljIil7Yi5zZXRTdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpOwp9dGhpcy5hZGRFdmVudCgic3RhcnQiLHRoaXMuY2hlY2tEcm9wcGFibGVzLHRydWUpO3RoaXMub3ZlcmVkPW51bGw7fSxzdGFydDpmdW5jdGlvbihhKXtpZih0aGlzLmNvbnRhaW5lcil7dGhpcy5vcHRpb25zLmxpbWl0PXRoaXMuY2FsY3VsYXRlTGltaXQoKTt9aWYodGhpcy5vcHRpb25zLnByZWNhbGN1bGF0ZSl7dGhpcy5wb3NpdGlvbnM9dGhpcy5kcm9wcGFibGVzLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi5nZXRDb29yZGluYXRlcygpOwp9KTt9dGhpcy5wYXJlbnQoYSk7fSxjYWxjdWxhdGVMaW1pdDpmdW5jdGlvbigpe3ZhciBkPXRoaXMuZWxlbWVudC5nZXRPZmZzZXRQYXJlbnQoKSxnPXRoaXMuY29udGFpbmVyLmdldENvb3JkaW5hdGVzKGQpLGY9e30sYz17fSxiPXt9LGk9e30saz17fTtbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLmVhY2goZnVuY3Rpb24obyl7ZltvXT10aGlzLmNvbnRhaW5lci5nZXRTdHlsZSgiYm9yZGVyLSIrbykudG9JbnQoKTsKYltvXT10aGlzLmVsZW1lbnQuZ2V0U3R5bGUoImJvcmRlci0iK28pLnRvSW50KCk7Y1tvXT10aGlzLmVsZW1lbnQuZ2V0U3R5bGUoIm1hcmdpbi0iK28pLnRvSW50KCk7aVtvXT10aGlzLmNvbnRhaW5lci5nZXRTdHlsZSgibWFyZ2luLSIrbykudG9JbnQoKTtrW29dPWQuZ2V0U3R5bGUoInBhZGRpbmctIitvKS50b0ludCgpOwp9LHRoaXMpO3ZhciBlPXRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCtjLmxlZnQrYy5yaWdodCxuPXRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQrYy50b3ArYy5ib3R0b20saD0wLGo9MCxtPWcucmlnaHQtZi5yaWdodC1lLGE9Zy5ib3R0b20tZi5ib3R0b20tbjtpZih0aGlzLm9wdGlvbnMuaW5jbHVkZU1hcmdpbnMpe2grPWMubGVmdDsKais9Yy50b3A7fWVsc2V7bSs9Yy5yaWdodDthKz1jLmJvdHRvbTt9aWYodGhpcy5lbGVtZW50LmdldFN0eWxlKCJwb3NpdGlvbiIpPT0icmVsYXRpdmUiKXt2YXIgbD10aGlzLmVsZW1lbnQuZ2V0Q29vcmRpbmF0ZXMoZCk7bC5sZWZ0LT10aGlzLmVsZW1lbnQuZ2V0U3R5bGUoImxlZnQiKS50b0ludCgpOwpsLnRvcC09dGhpcy5lbGVtZW50LmdldFN0eWxlKCJ0b3AiKS50b0ludCgpO2grPWYubGVmdC1sLmxlZnQ7ais9Zi50b3AtbC50b3A7bSs9Yy5sZWZ0LWwubGVmdDthKz1jLnRvcC1sLnRvcDtpZih0aGlzLmNvbnRhaW5lciE9ZCl7aCs9aS5sZWZ0K2subGVmdDtqKz0oQnJvd3Nlci5FbmdpbmUudHJpZGVudDQ/MDppLnRvcCkray50b3A7Cn19ZWxzZXtoLT1jLmxlZnQ7ai09Yy50b3A7aWYodGhpcy5jb250YWluZXI9PWQpe20tPWYubGVmdDthLT1mLnRvcDt9ZWxzZXtoKz1nLmxlZnQrZi5sZWZ0O2orPWcudG9wK2YudG9wO319cmV0dXJue3g6W2gsbV0seTpbaixhXX07fSxjaGVja0FnYWluc3Q6ZnVuY3Rpb24oYyxiKXtjPSh0aGlzLnBvc2l0aW9ucyk/dGhpcy5wb3NpdGlvbnNbYl06Yy5nZXRDb29yZGluYXRlcygpOwp2YXIgYT10aGlzLm1vdXNlLm5vdztyZXR1cm4oYS54PmMubGVmdCYmYS54PGMucmlnaHQmJmEueTxjLmJvdHRvbSYmYS55PmMudG9wKTt9LGNoZWNrRHJvcHBhYmxlczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZHJvcHBhYmxlcy5maWx0ZXIodGhpcy5jaGVja0FnYWluc3QsdGhpcykuZ2V0TGFzdCgpOwppZih0aGlzLm92ZXJlZCE9YSl7aWYodGhpcy5vdmVyZWQpe3RoaXMuZmlyZUV2ZW50KCJsZWF2ZSIsW3RoaXMuZWxlbWVudCx0aGlzLm92ZXJlZF0pO31pZihhKXt0aGlzLmZpcmVFdmVudCgiZW50ZXIiLFt0aGlzLmVsZW1lbnQsYV0pO310aGlzLm92ZXJlZD1hO319LGRyYWc6ZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnQoYSk7CmlmKHRoaXMub3B0aW9ucy5jaGVja0Ryb3BwYWJsZXMmJnRoaXMuZHJvcHBhYmxlcy5sZW5ndGgpe3RoaXMuY2hlY2tEcm9wcGFibGVzKCk7fX0sc3RvcDpmdW5jdGlvbihhKXt0aGlzLmNoZWNrRHJvcHBhYmxlcygpO3RoaXMuZmlyZUV2ZW50KCJkcm9wIixbdGhpcy5lbGVtZW50LHRoaXMub3ZlcmVkLGFdKTsKdGhpcy5vdmVyZWQ9bnVsbDtyZXR1cm4gdGhpcy5wYXJlbnQoYSk7fX0pO0VsZW1lbnQuaW1wbGVtZW50KHttYWtlRHJhZ2dhYmxlOmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBEcmFnLk1vdmUodGhpcyxhKTt0aGlzLnN0b3JlKCJkcmFnZ2VyIixiKTtyZXR1cm4gYjt9fSk7CnZhciBTb3J0YWJsZXM9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7c25hcDo0LG9wYWNpdHk6MSxjbG9uZTpmYWxzZSxyZXZlcnQ6ZmFsc2UsaGFuZGxlOmZhbHNlLGNvbnN0cmFpbjpmYWxzZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihhLGIpe3RoaXMuc2V0T3B0aW9ucyhiKTsKdGhpcy5lbGVtZW50cz1bXTt0aGlzLmxpc3RzPVtdO3RoaXMuaWRsZT10cnVlO3RoaXMuYWRkTGlzdHMoJCQoZG9jdW1lbnQuaWQoYSl8fGEpKTtpZighdGhpcy5vcHRpb25zLmNsb25lKXt0aGlzLm9wdGlvbnMucmV2ZXJ0PWZhbHNlO31pZih0aGlzLm9wdGlvbnMucmV2ZXJ0KXt0aGlzLmVmZmVjdD1uZXcgRnguTW9ycGgobnVsbCwkbWVyZ2Uoe2R1cmF0aW9uOjI1MCxsaW5rOiJjYW5jZWwifSx0aGlzLm9wdGlvbnMucmV2ZXJ0KSk7Cn19LGF0dGFjaDpmdW5jdGlvbigpe3RoaXMuYWRkTGlzdHModGhpcy5saXN0cyk7cmV0dXJuIHRoaXM7fSxkZXRhY2g6ZnVuY3Rpb24oKXt0aGlzLmxpc3RzPXRoaXMucmVtb3ZlTGlzdHModGhpcy5saXN0cyk7cmV0dXJuIHRoaXM7fSxhZGRJdGVtczpmdW5jdGlvbigpe0FycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudHMucHVzaChhKTsKdmFyIGI9YS5yZXRyaWV2ZSgic29ydGFibGVzOnN0YXJ0Iix0aGlzLnN0YXJ0LmJpbmRXaXRoRXZlbnQodGhpcyxhKSk7KHRoaXMub3B0aW9ucy5oYW5kbGU/YS5nZXRFbGVtZW50KHRoaXMub3B0aW9ucy5oYW5kbGUpfHxhOmEpLmFkZEV2ZW50KCJtb3VzZWRvd24iLGIpOwp9LHRoaXMpO3JldHVybiB0aGlzO30sYWRkTGlzdHM6ZnVuY3Rpb24oKXtBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykuZWFjaChmdW5jdGlvbihhKXt0aGlzLmxpc3RzLnB1c2goYSk7dGhpcy5hZGRJdGVtcyhhLmdldENoaWxkcmVuKCkpO30sdGhpcyk7cmV0dXJuIHRoaXM7Cn0scmVtb3ZlSXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm4gJCQoQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLm1hcChmdW5jdGlvbihhKXt0aGlzLmVsZW1lbnRzLmVyYXNlKGEpO3ZhciBiPWEucmV0cmlldmUoInNvcnRhYmxlczpzdGFydCIpOyh0aGlzLm9wdGlvbnMuaGFuZGxlP2EuZ2V0RWxlbWVudCh0aGlzLm9wdGlvbnMuaGFuZGxlKXx8YTphKS5yZW1vdmVFdmVudCgibW91c2Vkb3duIixiKTsKcmV0dXJuIGE7fSx0aGlzKSk7fSxyZW1vdmVMaXN0czpmdW5jdGlvbigpe3JldHVybiAkJChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykubWFwKGZ1bmN0aW9uKGEpe3RoaXMubGlzdHMuZXJhc2UoYSk7dGhpcy5yZW1vdmVJdGVtcyhhLmdldENoaWxkcmVuKCkpO3JldHVybiBhOwp9LHRoaXMpKTt9LGdldENsb25lOmZ1bmN0aW9uKGIsYSl7aWYoIXRoaXMub3B0aW9ucy5jbG9uZSl7cmV0dXJuIG5ldyBFbGVtZW50KCJkaXYiKS5pbmplY3QoZG9jdW1lbnQuYm9keSk7fWlmKCR0eXBlKHRoaXMub3B0aW9ucy5jbG9uZSk9PSJmdW5jdGlvbiIpe3JldHVybiB0aGlzLm9wdGlvbnMuY2xvbmUuY2FsbCh0aGlzLGIsYSx0aGlzLmxpc3QpOwp9dmFyIGM9YS5jbG9uZSh0cnVlKS5zZXRTdHlsZXMoe21hcmdpbjoiMHB4Iixwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsd2lkdGg6YS5nZXRTdHlsZSgid2lkdGgiKX0pO2lmKGMuZ2V0KCJodG1sIikudGVzdCgicmFkaW8iKSl7Yy5nZXRFbGVtZW50cygiaW5wdXRbdHlwZT1yYWRpb10iKS5lYWNoKGZ1bmN0aW9uKGQsZSl7ZC5zZXQoIm5hbWUiLCJjbG9uZV8iK2UpOwp9KTt9cmV0dXJuIGMuaW5qZWN0KHRoaXMubGlzdCkuc2V0UG9zaXRpb24oYS5nZXRQb3NpdGlvbihhLmdldE9mZnNldFBhcmVudCgpKSk7fSxnZXREcm9wcGFibGVzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5saXN0LmdldENoaWxkcmVuKCk7aWYoIXRoaXMub3B0aW9ucy5jb25zdHJhaW4pe2E9dGhpcy5saXN0cy5jb25jYXQoYSkuZXJhc2UodGhpcy5saXN0KTsKfXJldHVybiBhLmVyYXNlKHRoaXMuY2xvbmUpLmVyYXNlKHRoaXMuZWxlbWVudCk7fSxpbnNlcnQ6ZnVuY3Rpb24oYyxiKXt2YXIgYT0iaW5zaWRlIjtpZih0aGlzLmxpc3RzLmNvbnRhaW5zKGIpKXt0aGlzLmxpc3Q9Yjt0aGlzLmRyYWcuZHJvcHBhYmxlcz10aGlzLmdldERyb3BwYWJsZXMoKTsKfWVsc2V7YT10aGlzLmVsZW1lbnQuZ2V0QWxsUHJldmlvdXMoKS5jb250YWlucyhiKT8iYmVmb3JlIjoiYWZ0ZXIiO310aGlzLmVsZW1lbnQuaW5qZWN0KGIsYSk7dGhpcy5maXJlRXZlbnQoInNvcnQiLFt0aGlzLmVsZW1lbnQsdGhpcy5jbG9uZV0pO30sc3RhcnQ6ZnVuY3Rpb24oYixhKXtpZighdGhpcy5pZGxlKXtyZXR1cm47Cn10aGlzLmlkbGU9ZmFsc2U7dGhpcy5lbGVtZW50PWE7dGhpcy5vcGFjaXR5PWEuZ2V0KCJvcGFjaXR5Iik7dGhpcy5saXN0PWEuZ2V0UGFyZW50KCk7dGhpcy5jbG9uZT10aGlzLmdldENsb25lKGIsYSk7dGhpcy5kcmFnPW5ldyBEcmFnLk1vdmUodGhpcy5jbG9uZSx7c25hcDp0aGlzLm9wdGlvbnMuc25hcCxjb250YWluZXI6dGhpcy5vcHRpb25zLmNvbnN0cmFpbiYmdGhpcy5lbGVtZW50LmdldFBhcmVudCgpLGRyb3BwYWJsZXM6dGhpcy5nZXREcm9wcGFibGVzKCksb25TbmFwOmZ1bmN0aW9uKCl7Yi5zdG9wKCk7CnRoaXMuY2xvbmUuc2V0U3R5bGUoInZpc2liaWxpdHkiLCJ2aXNpYmxlIik7dGhpcy5lbGVtZW50LnNldCgib3BhY2l0eSIsdGhpcy5vcHRpb25zLm9wYWNpdHl8fDApO3RoaXMuZmlyZUV2ZW50KCJzdGFydCIsW3RoaXMuZWxlbWVudCx0aGlzLmNsb25lXSk7fS5iaW5kKHRoaXMpLG9uRW50ZXI6dGhpcy5pbnNlcnQuYmluZCh0aGlzKSxvbkNhbmNlbDp0aGlzLnJlc2V0LmJpbmQodGhpcyksb25Db21wbGV0ZTp0aGlzLmVuZC5iaW5kKHRoaXMpfSk7CnRoaXMuY2xvbmUuaW5qZWN0KHRoaXMuZWxlbWVudCwiYmVmb3JlIik7dGhpcy5kcmFnLnN0YXJ0KGIpO30sZW5kOmZ1bmN0aW9uKCl7dGhpcy5kcmFnLmRldGFjaCgpO3RoaXMuZWxlbWVudC5zZXQoIm9wYWNpdHkiLHRoaXMub3BhY2l0eSk7aWYodGhpcy5lZmZlY3Qpe3ZhciBhPXRoaXMuZWxlbWVudC5nZXRTdHlsZXMoIndpZHRoIiwiaGVpZ2h0Iik7CnZhciBiPXRoaXMuY2xvbmUuY29tcHV0ZVBvc2l0aW9uKHRoaXMuZWxlbWVudC5nZXRQb3NpdGlvbih0aGlzLmNsb25lLm9mZnNldFBhcmVudCkpO3RoaXMuZWZmZWN0LmVsZW1lbnQ9dGhpcy5jbG9uZTt0aGlzLmVmZmVjdC5zdGFydCh7dG9wOmIudG9wLGxlZnQ6Yi5sZWZ0LHdpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0LG9wYWNpdHk6MC4yNX0pLmNoYWluKHRoaXMucmVzZXQuYmluZCh0aGlzKSk7Cn1lbHNle3RoaXMucmVzZXQoKTt9fSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaWRsZT10cnVlO3RoaXMuY2xvbmUuZGVzdHJveSgpO3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsdGhpcy5lbGVtZW50KTt9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3ZhciBjPUFycmF5LmxpbmsoYXJndW1lbnRzLHttb2RpZmllcjpGdW5jdGlvbi50eXBlLGluZGV4OiRkZWZpbmVkfSk7CnZhciBiPXRoaXMubGlzdHMubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldENoaWxkcmVuKCkubWFwKGMubW9kaWZpZXJ8fGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgiaWQiKTt9LHRoaXMpO30sdGhpcyk7dmFyIGE9Yy5pbmRleDtpZih0aGlzLmxpc3RzLmxlbmd0aD09MSl7YT0wOwp9cmV0dXJuICRjaGsoYSkmJmE+PTAmJmE8dGhpcy5saXN0cy5sZW5ndGg/YlthXTpiO319KTsoZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbihjLGIpe3JldHVybihjKT8oJHR5cGUoYyk9PSJmdW5jdGlvbiI/YyhiKTpiLmdldChjKSk6IiI7fTt0aGlzLlRpcHM9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7b25TaG93OmZ1bmN0aW9uKCl7dGhpcy50aXAuc2V0U3R5bGUoImRpc3BsYXkiLCJibG9jayIpOwp9LG9uSGlkZTpmdW5jdGlvbigpe3RoaXMudGlwLnNldFN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpO30sdGl0bGU6InRpdGxlIix0ZXh0OmZ1bmN0aW9uKGIpe3JldHVybiBiLmdldCgicmVsIil8fGIuZ2V0KCJocmVmIik7fSxzaG93RGVsYXk6MTAwLGhpZGVEZWxheToxMDAsY2xhc3NOYW1lOiJ0aXAtd3JhcCIsb2Zmc2V0Ont4OjE2LHk6MTZ9LHdpbmRvd1BhZGRpbmc6e3g6MCx5OjB9LGZpeGVkOmZhbHNlfSxpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGI9QXJyYXkubGluayhhcmd1bWVudHMse29wdGlvbnM6T2JqZWN0LnR5cGUsZWxlbWVudHM6JGRlZmluZWR9KTsKdGhpcy5zZXRPcHRpb25zKGIub3B0aW9ucyk7aWYoYi5lbGVtZW50cyl7dGhpcy5hdHRhY2goYi5lbGVtZW50cyk7fXRoaXMuY29udGFpbmVyPW5ldyBFbGVtZW50KCJkaXYiLHsiY2xhc3MiOiJ0aXAifSk7fSx0b0VsZW1lbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLnRpcCl7cmV0dXJuIHRoaXMudGlwOwp9cmV0dXJuIHRoaXMudGlwPW5ldyBFbGVtZW50KCJkaXYiLHsiY2xhc3MiOnRoaXMub3B0aW9ucy5jbGFzc05hbWUsc3R5bGVzOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MH19KS5hZG9wdChuZXcgRWxlbWVudCgiZGl2Iix7ImNsYXNzIjoidGlwLXRvcCJ9KSx0aGlzLmNvbnRhaW5lcixuZXcgRWxlbWVudCgiZGl2Iix7ImNsYXNzIjoidGlwLWJvdHRvbSJ9KSkuaW5qZWN0KGRvY3VtZW50LmJvZHkpOwp9LGF0dGFjaDpmdW5jdGlvbihiKXskJChiKS5lYWNoKGZ1bmN0aW9uKGQpe3ZhciBmPWEodGhpcy5vcHRpb25zLnRpdGxlLGQpLGU9YSh0aGlzLm9wdGlvbnMudGV4dCxkKTtkLmVyYXNlKCJ0aXRsZSIpLnN0b3JlKCJ0aXA6bmF0aXZlIixmKS5yZXRyaWV2ZSgidGlwOnRpdGxlIixmKTsKZC5yZXRyaWV2ZSgidGlwOnRleHQiLGUpO3RoaXMuZmlyZUV2ZW50KCJhdHRhY2giLFtkXSk7dmFyIGM9WyJlbnRlciIsImxlYXZlIl07aWYoIXRoaXMub3B0aW9ucy5maXhlZCl7Yy5wdXNoKCJtb3ZlIik7fWMuZWFjaChmdW5jdGlvbihoKXt2YXIgZz1kLnJldHJpZXZlKCJ0aXA6IitoKTsKaWYoIWcpe2c9dGhpc1siZWxlbWVudCIraC5jYXBpdGFsaXplKCldLmJpbmRXaXRoRXZlbnQodGhpcyxkKTt9ZC5zdG9yZSgidGlwOiIraCxnKS5hZGRFdmVudCgibW91c2UiK2gsZyk7fSx0aGlzKTt9LHRoaXMpO3JldHVybiB0aGlzO30sZGV0YWNoOmZ1bmN0aW9uKGIpeyQkKGIpLmVhY2goZnVuY3Rpb24oZCl7WyJlbnRlciIsImxlYXZlIiwibW92ZSJdLmVhY2goZnVuY3Rpb24oZSl7ZC5yZW1vdmVFdmVudCgibW91c2UiK2UsZC5yZXRyaWV2ZSgidGlwOiIrZSkpLmVsaW1pbmF0ZSgidGlwOiIrZSk7Cn0pO3RoaXMuZmlyZUV2ZW50KCJkZXRhY2giLFtkXSk7aWYodGhpcy5vcHRpb25zLnRpdGxlPT0idGl0bGUiKXt2YXIgYz1kLnJldHJpZXZlKCJ0aXA6bmF0aXZlIik7aWYoYyl7ZC5zZXQoInRpdGxlIixjKTt9fX0sdGhpcyk7cmV0dXJuIHRoaXM7fSxlbGVtZW50RW50ZXI6ZnVuY3Rpb24oYyxiKXt0aGlzLmNvbnRhaW5lci5lbXB0eSgpOwpbInRpdGxlIiwidGV4dCJdLmVhY2goZnVuY3Rpb24oZSl7dmFyIGQ9Yi5yZXRyaWV2ZSgidGlwOiIrZSk7aWYoZCl7dGhpcy5maWxsKG5ldyBFbGVtZW50KCJkaXYiLHsiY2xhc3MiOiJ0aXAtIitlfSkuaW5qZWN0KHRoaXMuY29udGFpbmVyKSxkKTt9fSx0aGlzKTskY2xlYXIodGhpcy50aW1lcik7CnRoaXMudGltZXI9KGZ1bmN0aW9uKCl7dGhpcy5zaG93KHRoaXMsYik7dGhpcy5wb3NpdGlvbigodGhpcy5vcHRpb25zLmZpeGVkKT97cGFnZTpiLmdldFBvc2l0aW9uKCl9OmMpO30pLmRlbGF5KHRoaXMub3B0aW9ucy5zaG93RGVsYXksdGhpcyk7fSxlbGVtZW50TGVhdmU6ZnVuY3Rpb24oYyxiKXskY2xlYXIodGhpcy50aW1lcik7CnRoaXMudGltZXI9dGhpcy5oaWRlLmRlbGF5KHRoaXMub3B0aW9ucy5oaWRlRGVsYXksdGhpcyxiKTt0aGlzLmZpcmVGb3JQYXJlbnQoYyxiKTt9LGZpcmVGb3JQYXJlbnQ6ZnVuY3Rpb24oYyxiKXtiPWIuZ2V0UGFyZW50KCk7aWYoIWJ8fGI9PWRvY3VtZW50LmJvZHkpe3JldHVybjsKfWlmKGIucmV0cmlldmUoInRpcDplbnRlciIpKXtiLmZpcmVFdmVudCgibW91c2VlbnRlciIsYyk7fWVsc2V7dGhpcy5maXJlRm9yUGFyZW50KGMsYik7fX0sZWxlbWVudE1vdmU6ZnVuY3Rpb24oYyxiKXt0aGlzLnBvc2l0aW9uKGMpO30scG9zaXRpb246ZnVuY3Rpb24oZSl7aWYoIXRoaXMudGlwKXtkb2N1bWVudC5pZCh0aGlzKTsKfXZhciBjPXdpbmRvdy5nZXRTaXplKCksYj13aW5kb3cuZ2V0U2Nyb2xsKCksZj17eDp0aGlzLnRpcC5vZmZzZXRXaWR0aCx5OnRoaXMudGlwLm9mZnNldEhlaWdodH0sZD17eDoibGVmdCIseToidG9wIn0sZz17fTtmb3IodmFyIGggaW4gZCl7Z1tkW2hdXT1lLnBhZ2VbaF0rdGhpcy5vcHRpb25zLm9mZnNldFtoXTsKaWYoKGdbZFtoXV0rZltoXS1iW2hdKT5jW2hdLXRoaXMub3B0aW9ucy53aW5kb3dQYWRkaW5nW2hdKXtnW2RbaF1dPWUucGFnZVtoXS10aGlzLm9wdGlvbnMub2Zmc2V0W2hdLWZbaF07fX10aGlzLnRpcC5zZXRTdHlsZXMoZyk7fSxmaWxsOmZ1bmN0aW9uKGIsYyl7aWYodHlwZW9mIGM9PSJzdHJpbmciKXtiLnNldCgiaHRtbCIsYyk7Cn1lbHNle2IuYWRvcHQoYyk7fX0sc2hvdzpmdW5jdGlvbihiKXtpZighdGhpcy50aXApe2RvY3VtZW50LmlkKHRoaXMpO310aGlzLmZpcmVFdmVudCgic2hvdyIsW3RoaXMudGlwLGJdKTt9LGhpZGU6ZnVuY3Rpb24oYil7aWYoIXRoaXMudGlwKXtkb2N1bWVudC5pZCh0aGlzKTsKfXRoaXMuZmlyZUV2ZW50KCJoaWRlIixbdGhpcy50aXAsYl0pO319KTt9KSgpOw==]]></data>
	</file>
	<file>
	  <filename>/planyo-jquery-reservations.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gJElkJAoKdmFyIHBsYW55b19zZXR0aW5ncyA9IHdpbmRvdzsKalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShpbml0X3BsYW55byk7CgpmdW5jdGlvbiBwbGFueW8kKHgpIHsKICByZXR1cm4galF1ZXJ5KHgpOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X3BhcmFtKG5hbWUpIHsKICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5wbGFueW9fb3ZlcnJpZGVzKSAmJiB3aW5kb3cucGxhbnlvX292ZXJyaWRlc1tuYW1lXSkKICAgIHJldHVybiB3aW5kb3cucGxhbnlvX292ZXJyaWRlc1tuYW1lXTsKICBuYW1lID0gbmFtZS5yZXBsYWNlKC9bXFtdLywiXFxcWyIpLnJlcGxhY2UoL1tcXV0vLCJcXFxdIik7CiAgdmFyIHJlZ2V4UyA9ICJbXFw/Jl0iK25hbWUrIj0oW14mI10qKSI7CiAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFMpOwogIHZhciByZXN1bHRzID0gcmVnZXguZXhlYyh3aW5kb3cubG9jYXRpb24uaHJlZik7CiAgaWYgKHJlc3VsdHMgPT0gbnVsbCAmJiBwbGFueW9faXNzZXQocGxhbnlvX3NldHRpbmdzLnBsYW55b19hdHRyaWJzKSkKICAgIHJlc3VsdHMgPSByZWdleC5leGVjIChwbGFueW9fc2V0dGluZ3MucGxhbnlvX2F0dHJpYnMpOwogIGlmIChyZXN1bHRzID09IG51bGwpCiAgICByZXR1cm4gbnVsbDsKICBlbHNlCiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdHNbMV0pLnJlcGxhY2UoL1wrL2csICcgJyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19nZXRfcHJlZml4ZWRfcGFyYW1zIChwcmVmaXgpIHsKICBwcmVmaXggPSBwcmVmaXgucmVwbGFjZSgvW1xbXS8sIlxcXFsiKS5yZXBsYWNlKC9bXF1dLywiXFxcXSIpOwogIHZhciByZWdleFMgPSAiW1xcPyZdKCIrcHJlZml4KyJbQS1aYS16MC05X10rKT0oW14mI10qKSI7CiAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFMsJ2cnKTsKICB2YXIgcmV0c3RyID0gIiI7CiAgd2hpbGUgKChyZXN1bHRzID0gcmVnZXguZXhlYyh3aW5kb3cubG9jYXRpb24uaHJlZikpICE9IG51bGwpIHsKICAgICAgaWYgKHJlc3VsdHNbMl0pIHsKICAgICAgICAgIGlmIChyZXN1bHRzWzJdLmxlbmd0aCA+IDEwMCkKICAgICAgICAgICAgICByZXN1bHRzWzJdID0gcmVzdWx0c1syXS5zdWJzdHIoMCwxMDApOwogICAgICAgICAgcmV0c3RyICs9IChyZXRzdHIubGVuZ3RoPjA/IiYiOiIiKStyZXN1bHRzWzFdKyI9IityZXN1bHRzWzJdOwogICAgICB9CiAgfQogIHJldHVybiByZXRzdHI7Cn0KCmZ1bmN0aW9uIHBsYW55b19nZXRfZm9ybV9kYXRhKG9iaikgewogIHZhciBnZXRzdHIgPSAiIjsKICByZXR1cm4gb2JqLnNlcmlhbGl6ZSgpOwp9CgpmdW5jdGlvbiBwbGFueW9fb25fcmVzZXJ2YXRpb25fc3VjY2VzcyhyZXNlcnZhdGlvbl9pZCwgdXNlcl90ZXh0KSB7CiAgalF1ZXJ5KCcjcGxhbnlvX2NvbnRlbnQnKS5jaGlsZHJlbigpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICBqUXVlcnkoJyNyZXNfZXJyb3JfbXNnJykuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogIGpRdWVyeSgnI3Jlc19va19tc2cnKS5jc3MoJ2Rpc3BsYXknLCdpbmxpbmUnKTsKICBqUXVlcnkoJyNyZXNlcnZlX2Zvcm0nKS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgalF1ZXJ5KCcjcHJvZHVjdF9mb3JtJykuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogIGpRdWVyeSgnI3ByaWNlX2luZm9fZGl2JykuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogIGlmIChyZXNlcnZhdGlvbl9pZCAmJiB1c2VyX3RleHQuaW5kZXhPZiAoIjwhLS0gU0hPV19BRERJVElPTkFMX1BST0RVQ1RTIC0tPiIpICE9IC0xKSB7CiAgICBwbGFueW9fZW1iZWRfYWRkaXRpb25hbF9wcm9kdWN0c19mb3JtKHJlc2VydmF0aW9uX2lkKTsKICB9CiAgZWxzZSB7CiAgICBqUXVlcnkoJyNyZXNfb2tfbXNnJykuaHRtbCh1c2VyX3RleHQpOwogICAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKSkgewogICAgICBkb2N1bWVudC5yZXNlcnZhdGlvbl9pZCA9IHJlc2VydmF0aW9uX2lkOwogICAgICB3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKCdyZXNlcnZhdGlvbl9kb25lJyk7CiAgICB9CiAgfQogIGpRdWVyeSgnI3Jlc19va19tc2cnKS5wYXJlbnQoKS5jc3MoJ2Rpc3BsYXknLCdpbmxpbmUnKTsKfQogCmZ1bmN0aW9uIHBsYW55b19vbl9yZXNlcnZhdGlvbl9mYWlsdXJlKGVycm9yX3RleHQpIHsKICAgdmFyIGVycm9yX2RpdiA9IGpRdWVyeSgnI3Jlc19lcnJvcl9tc2cnKTsKICAgZXJyb3JfZGl2LmNzcygnZGlzcGxheScsJ2Jsb2NrJyk7CiAgIGVycm9yX2Rpdi5odG1sKGVycm9yX3RleHQrIjxwPiIpOwogICBqUXVlcnkod2luZG93KS5zY3JvbGxUb3AoMCk7CiAgIGlmIChwbGFueW9faXNzZXQod2luZG93Lm9uX3BsYW55b19mb3JtX2xvYWRlZCkpIHsKICAgICB3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKCdyZXNlcnZhdGlvbl9mYWlsdXJlJyk7CiAgIH0KfQogCmZ1bmN0aW9uIHBsYW55b19nZXRfY3VycmVudF91cmwoKSB7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ2ZlZWRiYWNrX3VybCcpKQogICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChwbGFueW9fZ2V0X3BhcmFtKCdmZWVkYmFja191cmwnKSk7CiAgZWxzZQogICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh3aW5kb3cubG9jYXRpb24uaHJlZik7Cn0KCmZ1bmN0aW9uIHBsYW55b19zaG93X2hvdXJnbGFzcyhoaWRlX2VsZW1lbnQpIHsKICBkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX3BlbmRpbmcgPSB0cnVlOwogIGlmIChoaWRlX2VsZW1lbnQgJiYgaGlkZV9lbGVtZW50Lmxlbmd0aCA+IDApIHsKICAgIGRvY3VtZW50LnBsYW55b19hamF4X2NhbGxfaGlkZV9lbGVtZW50ID0gaGlkZV9lbGVtZW50OwogICAgaGlkZV9lbGVtZW50LmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICBoaWRlX2VsZW1lbnQuYmVmb3JlKCI8ZGl2IGlkPSdob3VyZ2xhc3NfZWxlbWVudCc+PGRpdiBjbGFzcz0naG91cmdsYXNzX2ltZyc+PC9kaXY+PC9kaXY+Iik7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9faGlkZV9ob3VyZ2xhc3MoKSB7CiAgaWYgKGRvY3VtZW50LnBsYW55b19hamF4X2NhbGxfcGVuZGluZykgewogICAgaWYgKGRvY3VtZW50LnBsYW55b19hamF4X2NhbGxfaGlkZV9lbGVtZW50ICYmIGRvY3VtZW50LnBsYW55b19hamF4X2NhbGxfaGlkZV9lbGVtZW50Lmxlbmd0aCA+IDApIHsKICAgICAgZG9jdW1lbnQucGxhbnlvX2FqYXhfY2FsbF9oaWRlX2VsZW1lbnQuY3NzKCdkaXNwbGF5JywgJ2lubGluZScpOwogICAgICBqUXVlcnkoJyNob3VyZ2xhc3NfZWxlbWVudCcpLnJlbW92ZSgpOwogICAgICBkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX2hpZGVfZWxlbWVudCA9IG51bGw7CiAgICB9CiAgICBkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX3BlbmRpbmcgPSBmYWxzZTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19vbl9yZXF1ZXN0X2ZhaWx1cmUoKSB7CiAgcGxhbnlvX2hpZGVfaG91cmdsYXNzKCk7CiAgdmFyIGVycm9yX2RpdiA9IGpRdWVyeSgnI3Jlc19lcnJvcl9tc2cnKTsKICBlcnJvcl9kaXYuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7CiAgZXJyb3JfZGl2Lmh0bWwoIlVua25vd24gZXJyb3IgaW4gIiArIHBsYW55b19zZXR0aW5ncy51bGFwX3NjcmlwdCArICI8cD4iKTsKfQoKZnVuY3Rpb24gcGxhbnlvX3Vuc2VyaWFsaXplKHVybCkgewogIHZhciBwYXJhbXMgPSB1cmw7CiAgaWYgKHVybC5tYXRjaCgvXD8oLispJC8pKSB7CiAgICAgIHBhcmFtcyA9IFJlZ0V4cC4kMTsKICB9CiAgdmFyIHBBcnJheSA9IHBhcmFtcy5zcGxpdCgiJiIpOwogIHZhciBwSGFzaCA9IHt9OwogIGZvcih2YXIgaSA9IDA7IGkgPCBwQXJyYXkubGVuZ3RoOyBpKyspIHsKICAgIHZhciB0ZW1wID0gcEFycmF5W2ldLnNwbGl0KCI9Iik7CiAgICBpZiAodGVtcFswXSAhPSAncScgfHwgIXdpbmRvdy5EcnVwYWwpCiAgICAgIHBIYXNoW3RlbXBbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KHRlbXBbMV0pLnJlcGxhY2UoL1wrL2csICcgJyk7CiAgfQogIHJldHVybiBwSGFzaDsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9jb29raWUoY19uYW1lKSB7CiAgaWYgKGRvY3VtZW50LmNvb2tpZS5sZW5ndGggPiAwKSB7CiAgICBjX3N0YXJ0ID0gZG9jdW1lbnQuY29va2llLmluZGV4T2YoY19uYW1lICsgIj0iKTsKICAgIGlmIChjX3N0YXJ0ICE9IC0xKSB7CiAgICAgIGNfc3RhcnQgPSBjX3N0YXJ0ICsgY19uYW1lLmxlbmd0aCsxOwogICAgICBjX2VuZCA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCI7IiwgY19zdGFydCk7CiAgICAgIGlmIChjX2VuZCA9PSAtMSkgCiAgICAgICAgY19lbmQgPSBkb2N1bWVudC5jb29raWUubGVuZ3RoOwogICAgICByZXR1cm4gdW5lc2NhcGUoZG9jdW1lbnQuY29va2llLnN1YnN0cmluZyhjX3N0YXJ0LCBjX2VuZCkpOwogICAgfQogIH0KICByZXR1cm4gIiI7Cn0KCmZ1bmN0aW9uIHBsYW55b19zZW5kX3JlcXVlc3QoZGF0YSwgb25fY29tcGxldGVfZnVuY3Rpb24sIGhpZGVfaXRlbSkgewogIHBsYW55b19zaG93X2hvdXJnbGFzcyhoaWRlX2l0ZW0pOwogIHZhciByZXFfZGF0YSA9IGRhdGE7CiAgaWYgKHJlcV9kYXRhLmluZGV4T2YoJ2ZlZWRiYWNrX3VybD0nKSA9PSAtMSkKICAgIHJlcV9kYXRhICs9ICImZmVlZGJhY2tfdXJsPSIgKyBwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCk7CiAgaWYgKHJlcV9kYXRhLmluZGV4T2YoJ3VsYXBfdXJsPScpID09IC0xKQogICAgcmVxX2RhdGEgKz0gIiZ1bGFwX3VybD0iKyhwbGFueW9fc2V0dGluZ3MucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwIjsKICBpZiAocGxhbnlvX3NldHRpbmdzLnBsYW55b19sYW5ndWFnZSkKICAgIHJlcV9kYXRhICs9ICImbGFuZ3VhZ2U9IiArIHBsYW55b19zZXR0aW5ncy5wbGFueW9fbGFuZ3VhZ2U7CiAgdmFyIHNob3BwaW5nX2NhcnRfaWQgPSBwbGFueW9fZ2V0X2Nvb2tpZSgncGxhbnlvX2NhcnRfaWQnKTsKICBpZiAoc2hvcHBpbmdfY2FydF9pZCAmJiByZXFfZGF0YS5pbmRleE9mKCdjYXJ0X2lkPScpID09IC0xKQogICAgcmVxX2RhdGEgKz0gIiZjYXJ0X2lkPSIgKyBzaG9wcGluZ19jYXJ0X2lkICsgIiZmaXJzdF9yZXNlcnZhdGlvbl9pZD0iICsgcGxhbnlvX2dldF9jb29raWUoJ3BsYW55b19maXJzdF9yZXNlcnZhdGlvbl9pZCcpOwogIGlmIChwbGFueW9faXNzZXQocGxhbnlvX3NldHRpbmdzLnBsYW55b19sb2dpbikgJiYgcGxhbnlvX2lzc2V0KHBsYW55b19zZXR0aW5ncy5wbGFueW9fbG9naW4sICdsb2dpbl9jcycpICYmIHBsYW55b19pc3NldChwbGFueW9fc2V0dGluZ3MucGxhbnlvX2xvZ2luLCAnZW1haWwnKSkKICAgIHJlcV9kYXRhICs9ICImbG9naW5fY3M9IiArIHBsYW55b19zZXR0aW5ncy5wbGFueW9fbG9naW5bJ2xvZ2luX2NzJ10gKyAiJmxvZ2luX2VtYWlsPSIgKyBwbGFueW9fc2V0dGluZ3MucGxhbnlvX2xvZ2luWydlbWFpbCddOwogIHZhciBwcHBfcGFyYW1zID0gcGxhbnlvX2dldF9wcmVmaXhlZF9wYXJhbXMoJ3BwcF8nKTsKICBpZiAocHBwX3BhcmFtcy5sZW5ndGggPiAwKQogICAgcmVxX2RhdGEgKz0gIiYiICsgcHBwX3BhcmFtczsKICByZXFfZGF0YSArPSAiJnVzZXJfYWdlbnQ9IiArIG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgdmFyIHJlcV9kYXRhX2FyciA9IHBsYW55b191bnNlcmlhbGl6ZShyZXFfZGF0YSk7CiAgalF1ZXJ5LnBvc3QocGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0LCByZXFfZGF0YV9hcnIsCgkgICAgZnVuY3Rpb24oZGF0YSwgc3RhdHVzKSB7CgkgICAgICBpZiAoc3RhdHVzID09ICJzdWNjZXNzIikKCQlvbl9jb21wbGV0ZV9mdW5jdGlvbihkYXRhKTsKCSAgICAgIGVsc2UKCQlwbGFueW9fb25fcmVxdWVzdF9mYWlsdXJlKCk7CgkgfSwgJ2pzb24nKTsKfQoKZnVuY3Rpb24gcGxhbnlvX29uX2NvbXBsZXRlX3Nob3dfc3RhdHVzKHR4dCkgewogIGpRdWVyeSgnI3BsYW55b19jb250ZW50JykuaHRtbCgiIik7CiAgcGxhbnlvX2hpZGVfaG91cmdsYXNzKCk7CiAgdmFyIG9iaiA9ICh0eHQgJiYgdHlwZW9mIHR4dCA9PSAnb2JqZWN0JykgPyB0eHQgOiBqUXVlcnkucGFyc2VKU09OKHR4dCk7CiAgaWYgKCFvYmopIAogICAgcmV0dXJuOwogIHZhciBjb2RlID0gb2JqWydyZXNwb25zZV9jb2RlJ107CiAgaWYgKGNvZGUgPT0gMCkgewogICAgLy8gc3VjY2VzcwogICAgdmFyIG9rX2RpdiA9IGpRdWVyeSgnI3Jlc19va19tc2cnKTsKICAgIGlmICghb2tfZGl2IHx8IG9rX2Rpdi5sZW5ndGggPT0gMCkgewogICAgICBqUXVlcnkoJyNwbGFueW9fY29udGVudCcpLmFwcGVuZCgiPGRpdiBpZD0ncmVzX29rX21zZyc+PC9kaXY+Iik7CiAgICAgIG9rX2RpdiA9IGpRdWVyeSgnI3Jlc19va19tc2cnKTsKICAgIH0KICAgIG9rX2Rpdi5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lJyk7CiAgICBva19kaXYuaHRtbChvYmpbJ2RhdGEnXVsndXNlcl90ZXh0J10pOwoKICAgIGlmIChwbGFueW9faXNzZXQob2JqLCAnZGF0YScsICdyZWRpcmVjdF9sb2NhdGlvbicpKQogICAgICBldmFsKG9ialsnZGF0YSddWydyZWRpcmVjdF9sb2NhdGlvbiddKTsKCiAgICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQpKQogICAgICB3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKHBsYW55b19nZXRfcGFyYW0oJ21vZGUnKSk7CiAgfQogIGVsc2UgewogICAgdmFyIGVycm9yX2RpdiA9IGpRdWVyeSgnI3Jlc19lcnJvcl9tc2cnKTsKICAgIGlmICghZXJyb3JfZGl2IHx8IGVycm9yX2Rpdi5sZW5ndGggPT0gMCkgewogICAgICBqUXVlcnkoJyNwbGFueW9fY29udGVudCcpLmFwcGVuZCgiPGRpdiBpZD0ncmVzX2Vycm9yX21zZyc+PC9kaXY+Iik7CiAgICAgIGVycm9yX2RpdiA9IGpRdWVyeSgnI3Jlc19lcnJvcl9tc2cnKTsKICAgIH0KICAgIGVycm9yX2Rpdi5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsKICAgIGVycm9yX2Rpdi5odG1sKG9ialsncmVzcG9uc2VfbWVzc2FnZSddKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19pbml0X2NhbmNlbF9tb2RlKCkgewogIHBsYW55b19zZW5kX3JlcXVlc3QoIm1vZGU9Y2FuY2VsJmM9IiArIHBsYW55b19nZXRfcGFyYW0oJ2MnKSArICImdXNlcl9pZD0iICsgcGxhbnlvX2dldF9wYXJhbSgndXNlcl9pZCcpICsgIiZzaXRlX2lkPSIgKyBwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQgKyAiJnJlc2VydmF0aW9uX2lkPSIgKyBwbGFueW9fZ2V0X3BhcmFtKCdyZXNlcnZhdGlvbl9pZCcpICsgIiZyZXNvdXJjZV9pZD0iICsgcGxhbnlvX2dldF9wYXJhbSgncmVzb3VyY2VfaWQnKSArICImcmVhc29uPSIgKyBwbGFueW9fZ2V0X3BhcmFtKCdyZWFzb24nKSwgcGxhbnlvX29uX2NvbXBsZXRlX3Nob3dfc3RhdHVzLCBudWxsKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2luaXRfdmVyaWZ5X2VtYWlsX21vZGUoKSB7CiAgcGxhbnlvX3NlbmRfcmVxdWVzdCgibW9kZT12ZXJpZnlfZW1haWwmdmVyaWZpY2F0aW9uX2NvZGU9IiArIHBsYW55b19nZXRfcGFyYW0oJ3ZlcmlmaWNhdGlvbl9jb2RlJykgKyAiJnNpdGVfaWQ9IiArIHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCArICImcmVzZXJ2YXRpb25faWQ9IiArIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJyksIHBsYW55b19vbl9jb21wbGV0ZV9zaG93X3N0YXR1cywgbnVsbCk7Cn0KCmZ1bmN0aW9uIHBsYW55b19pbml0X3BheW1lbnRfY29uZmlybWF0aW9uX21vZGUoKSB7CiAgcGxhbnlvX3NlbmRfcmVxdWVzdCgibW9kZT1wYXltZW50X2NvbmZpcm1hdGlvbiZyZXNlcnZhdGlvbl9pZD0iICsgcGxhbnlvX2dldF9wYXJhbSgncmVzZXJ2YXRpb25faWQnKSArICImc2l0ZV9pZD0iICsgcGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkLCBwbGFueW9fb25fY29tcGxldGVfc2hvd19zdGF0dXMsIG51bGwpOwp9CiAKZnVuY3Rpb24gcGxhbnlvX29uX3Jlc2VydmF0aW9uX2NvbXBsZXRlKHR4dCkgewogIHBsYW55b19oaWRlX2hvdXJnbGFzcygpOwoKICB2YXIgb2JqID0gbnVsbDsKICB0cnkgewogICAgb2JqID0gKHR4dCAmJiB0eXBlb2YgdHh0ID09ICdvYmplY3QnKSA/IHR4dCA6IGpRdWVyeS5wYXJzZUpTT04odHh0KTsKICB9CiAgY2F0Y2goZXJyKSB7CiAgfQogIGlmICghb2JqKSB7CiAgICBwbGFueW9fb25fcmVzZXJ2YXRpb25fZmFpbHVyZSgnVW5rbm93biByZXNlcnZhdGlvbiBlcnJvcjogJyArIHR4dCk7CiAgICByZXR1cm47CiAgfQoKICB2YXIgY29kZSA9IG9ialsncmVzcG9uc2VfY29kZSddOwogIGlmIChjb2RlID09IDApIHsKICAgIC8vIHN1Y2Nlc3MKICAgIHBsYW55b19vbl9yZXNlcnZhdGlvbl9zdWNjZXNzKG9ialsnZGF0YSddWydyZXNlcnZhdGlvbl9pZCddLCBvYmpbJ2RhdGEnXVsndXNlcl90ZXh0J10pOwogIH0KICBlbHNlIHsKICAgIHBsYW55b19vbl9yZXNlcnZhdGlvbl9mYWlsdXJlKG9ialsncmVzcG9uc2VfbWVzc2FnZSddKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19zZW5kX3Jlc2VydmF0aW9uX2Zvcm0oKSB7CiAgcGxhbnlvX3NlbmRfcmVxdWVzdCgibW9kZT1tYWtlX3Jlc2VydmF0aW9uJnNpdGVfaWQ9IiArIHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCArICImIiArIHBsYW55b19nZXRfZm9ybV9kYXRhKGpRdWVyeSgnI3Jlc2VydmVfZm9ybScpKSwgcGxhbnlvX29uX3Jlc2VydmF0aW9uX2NvbXBsZXRlLCBqUXVlcnkoJyNzdWJtaXRfYnV0dG9uJykpOwogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX3NlbmRfcHJvZHVjdF9mb3JtKCkgewogIHBsYW55b19zZW5kX3JlcXVlc3QoIm1vZGU9cmVzZXJ2ZV9wcm9kdWN0cyZzaXRlX2lkPSIgKyBwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQgKyAiJiIgKyBwbGFueW9fZ2V0X2Zvcm1fZGF0YShqUXVlcnkoJyNwcm9kdWN0X2Zvcm0nKSksIHBsYW55b19vbl9yZXNlcnZhdGlvbl9jb21wbGV0ZSwgalF1ZXJ5KCcjc3VibWl0X2J1dHRvbicpKTsKICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIHBsYW55b19zZW5kX21vZGlmeV9kYXRhX2Zvcm0oKSB7CiAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9IisocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRvX21vZGlmeV9kYXRhJiIgKyBwbGFueW9fZ2V0X2Zvcm1fZGF0YShqUXVlcnkoJyNtb2RpZnlfZGF0YV9mb3JtJykpICsgIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCk7CiAgIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwogICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIHBsYW55b19vbl9zZWFyY2hfc3VjY2VzcyhyZXN1bHRzKSB7CiAgalF1ZXJ5KCcjcmVzX2Vycm9yX21zZycpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgdmFyIHJlc3VsdHNfY29kZSA9IHJlc3VsdHM7CgogIGpRdWVyeSgnI3NlYXJjaF9yZXN1bHRzJykuaHRtbChyZXN1bHRzX2NvZGUpOwoKICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQpKQogICAgd2luZG93Lm9uX3BsYW55b19mb3JtX2xvYWRlZCgnc2VhcmNoX3N1Y2Nlc3MnKTsKfQogCmZ1bmN0aW9uIHBsYW55b19vbl9zZWFyY2hfZmFpbHVyZShlcnJvcl90ZXh0KSB7CiAgIHZhciBlcnJvcl9kaXYgPSBqUXVlcnkoJyNyZXNfZXJyb3JfbXNnJyk7CiAgIGVycm9yX2Rpdi5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsKICAgZXJyb3JfZGl2Lmh0bWwoZXJyb3JfdGV4dCArICc8cD4nKTsKICAgalF1ZXJ5KCcjc2VhcmNoX3Jlc3VsdHMnKS5odG1sKCcnKTsKICAgalF1ZXJ5KHdpbmRvdykuc2Nyb2xsVG9wKDApOwoKICAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKSkKICAgICB3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKCdzZWFyY2hfZmFpbHVyZScpOwp9CgpmdW5jdGlvbiBwbGFueW9fb25fc2VhcmNoX2NvbXBsZXRlKHR4dCkgewogIHBsYW55b19oaWRlX2hvdXJnbGFzcygpOwogIHZhciBvYmogPSBudWxsOwogIHRyeSB7CiAgICBvYmogPSAodHh0ICYmIHR5cGVvZiB0eHQgPT0gJ29iamVjdCcpID8gdHh0IDogalF1ZXJ5LnBhcnNlSlNPTih0eHQpOwogIH0KICBjYXRjaChlcnIpIHsKICB9CiAgaWYgKCFvYmopIHsKICAgIHBsYW55b19vbl9zZWFyY2hfZmFpbHVyZSgnVW5rbm93biBzZWFyY2ggZXJyb3I6ICcgKyB0eHQpOwogICAgcmV0dXJuOwogIH0KICB2YXIgY29kZSA9IG9ialsncmVzcG9uc2VfY29kZSddOwogIGlmIChjb2RlID09IDApIHsKICAgIC8vIHN1Y2Nlc3MKICAgIHBsYW55b19vbl9zZWFyY2hfc3VjY2VzcyhvYmpbJ2RhdGEnXVsnY29kZSddKTsKICB9CiAgZWxzZSB7CiAgICBwbGFueW9fb25fc2VhcmNoX2ZhaWx1cmUob2JqWydyZXNwb25zZV9tZXNzYWdlJ10pOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX3VwY29taW5nX2F2YWlsYWJpbGl0eV9mb3JtX2RhdGFfY2hhbmdlZCAoKSB7CiAgcGxhbnlvX3NlbmRfdXBjb21pbmdfYXZhaWxhYmlsaXR5X3NlYXJjaF9mb3JtKCk7Cn0KCmZ1bmN0aW9uIHBsYW55b19zZW5kX3VwY29taW5nX2F2YWlsYWJpbGl0eV9zZWFyY2hfZm9ybSgpIHsKICBwbGFueW9fc2VuZF9yZXF1ZXN0ICgibW9kZT11cGNvbWluZ19hdmFpbGFiaWxpdHlfc2VhcmNoJm91dHB1dD1odG1sJnNpdGVfaWQ9IiArIHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCArICImIiArIHBsYW55b19nZXRfZm9ybV9kYXRhKGpRdWVyeSgnI2F2YWlsYWJpbGl0eV9mb3JtJykpLCBwbGFueW9fb25fc2VhcmNoX2NvbXBsZXRlLCBqUXVlcnkoJyNzZWFyY2hfcmVzdWx0cycpKTsKICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIHBsYW55b19zZW5kX3NlYXJjaF9mb3JtKCkgewogIHBsYW55b19zZW5kX3JlcXVlc3QoIm1vZGU9cmVzb3VyY2Vfc2VhcmNoJm91dHB1dD1odG1sJnNpdGVfaWQ9IiArIHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCArICImIiArIHBsYW55b19nZXRfZm9ybV9kYXRhKGpRdWVyeSgnI3NlYXJjaF9mb3JtJykpLCBwbGFueW9fb25fc2VhcmNoX2NvbXBsZXRlLCBqUXVlcnkoJyNzdWJtaXRfYnV0dG9uJykpOwogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX2lzX3NwZWNpYWxfbW9kZShtb2RlKSB7CiAgcmV0dXJuIChtb2RlID09ICJ2ZXJpZnlfZW1haWwiIHx8IG1vZGUgPT0gInBheW1lbnRfY29uZmlybWF0aW9uIiB8fCBtb2RlID09ICJjYW5jZWwiIHx8IG1vZGUgPT0gImNhbmNlbF9jb2RlIiB8fCBtb2RlID09ICJyZXNlcnZhdGlvbl9kZXRhaWxzIiB8fCBtb2RlID09ICJwYXltZW50X2Zvcm0iIHx8IG1vZGUgPT0gInJlc2VydmF0aW9uX2xpc3QiIHx8IG1vZGUgPT0gInNob3dfY2FydCIgfHwgbW9kZSA9PSAiY2hlY2tvdXQiIHx8IG1vZGUgPT0gIndpZGdldCIgfHwgbW9kZSA9PSAiYWRkaXRpb25hbF9wcm9kdWN0c19jb2RlIiB8fCBtb2RlID09ICJtb2RpZnlfZGF0YV9mb3JtIik7Cn0KCmZ1bmN0aW9uIHBsYW55b19pbml0X3NwZWNpYWxfbW9kZXMoKSB7CiAgdmFyIG1vZGUgPSBwbGFueW9fZ2V0X3BhcmFtKCdtb2RlJyk7CiAgaWYgKHBsYW55b19pc19zcGVjaWFsX21vZGUobW9kZSkpIHsKICAgIGlmIChtb2RlID09ICJ2ZXJpZnlfZW1haWwiKSB7CiAgICAgIHBsYW55b19pbml0X3ZlcmlmeV9lbWFpbF9tb2RlKCk7CiAgICB9CiAgICBlbHNlIGlmIChtb2RlID09ICJwYXltZW50X2NvbmZpcm1hdGlvbiIpIHsKICAgICAgcGxhbnlvX2luaXRfcGF5bWVudF9jb25maXJtYXRpb25fbW9kZSgpOwogICAgfQogICAgZWxzZSBpZiAobW9kZSA9PSAiY2FuY2VsIikgewogICAgICBwbGFueW9faW5pdF9jYW5jZWxfbW9kZSgpOwogICAgfQogICAgZWxzZSBpZiAobW9kZSA9PSAncmVzZXJ2YXRpb25fZGV0YWlscycpIHsKICAgICAgcGxhbnlvX2VtYmVkX3Jlc2VydmF0aW9uX2RldGFpbHMocGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkLCBwbGFueW9fZ2V0X3BhcmFtKCdyZXNlcnZhdGlvbl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCd1c2VyX2lkJykpOwogICAgfQogICAgZWxzZSBpZiAobW9kZSA9PSAncmVzZXJ2YXRpb25fbGlzdCcpIHsKICAgICAgcGxhbnlvX2VtYmVkX3Jlc2VydmF0aW9uX2xpc3QocGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkLCBwbGFueW9fZ2V0X3BhcmFtKCdyZXNlcnZhdGlvbl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCd1c2VyX2lkJykpOwogICAgfQogICAgZWxzZSBpZiAobW9kZSA9PSAnY2FuY2VsX2NvZGUnKSB7CiAgICAgIHBsYW55b19lbWJlZF9jYW5jZWxfY29kZShwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQsIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ2MnKSwgcGxhbnlvX2dldF9wYXJhbSgndXNlcl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdyZXNvdXJjZV9pZCcpKTsKICAgIH0KICAgIGVsc2UgaWYgKG1vZGUgPT0gJ3BheW1lbnRfZm9ybScpIHsKICAgICAgcGxhbnlvX2VtYmVkX3BheW1lbnRfZm9ybShwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQsIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ3VzZXJfaWQnKSwgcGxhbnlvX2dldF9wYXJhbSgnYXV0b19yZWRpcmVjdCcpKTsKICAgIH0KICAgIGVsc2UgaWYgKG1vZGUgPT0gJ3Nob3dfY2FydCcpIHsKICAgICAgcGxhbnlvX2VtYmVkX2NhcnRfY29kZShwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQsIHBsYW55b19nZXRfcGFyYW0oJ2NhcnRfaWQnKSwgcGxhbnlvX2dldF9wYXJhbSgnZmlyc3RfcmVzZXJ2YXRpb25faWQnKSwgcGxhbnlvX2dldF9wYXJhbSgncmVtb3ZlX3Jlc2VydmF0aW9uX2lkJykpOwogICAgfQogICAgZWxzZSBpZiAobW9kZSA9PSAnY2hlY2tvdXQnKSB7CiAgICAgIHBsYW55b19lbWJlZF9jaGVja291dF9jb2RlKHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgnY2FydF9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdmaXJzdF9yZXNlcnZhdGlvbl9pZCcpKTsKICAgIH0KICAgIGVsc2UgaWYgKG1vZGUgPT0gJ3dpZGdldCcpIHsKICAgICAgcGxhbnlvX2VtYmVkX3dpZGdldChwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQpOwogICAgfQogICAgZWxzZSBpZiAobW9kZSA9PSAnYWRkaXRpb25hbF9wcm9kdWN0c19jb2RlJykgewogICAgICBwbGFueW9fZW1iZWRfbm9uX3Jlc2VydmF0aW9uX3N0ZXBfYWRkaXRpb25hbF9wcm9kdWN0c19mb3JtKHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ3VzZXJfaWQnKSk7CiAgICB9CiAgICBlbHNlIGlmIChtb2RlID09ICdtb2RpZnlfZGF0YV9mb3JtJykgewogICAgICBwbGFueW9fZW1iZWRfbW9kaWZ5X2RhdGFfZm9ybShwbGFueW9fZ2V0X3BhcmFtKCdyZXNlcnZhdGlvbl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCd1c2VyX2lkJykpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9waG9uZV9jb2RlcyhuYW1lKSB7CnJldHVybiAiPHNlbGVjdCBpZD0nIiArIG5hbWUgKyAiJyBuYW1lPSciICsgbmFtZSArICInID48b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSctMSc+LS0gQ291bnRyeSBjb2RlIC0tJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzkzJz5BZmdoYW5pc3RhbiAoOTMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1NSc+QWxiYW5pYSAoMzU1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMTMnPkFsZ2VyaWEgKDIxMykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzc2Jz5BbmRvcnJhICgzNzYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI0NCc+QW5nb2xhICgyNDQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2NCc+QW5ndWlsbGEgKDI2NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjcyJz5BbnRhcmN0aWNhICg2NzIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU0Jz5BcmdlbnRpbmEgKDU0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNzQnPkFybWVuaWEgKDM3NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjk3Jz5BcnViYSAoMjk3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2MSc+QXVzdHJhbGlhICg2MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDMnPkF1c3RyaWEgKDQzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5OTQnPkF6ZXJiYWlqYW4gKDk5NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjQyJz5CYWhhbWFzICgyNDIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk3Myc+QmFocmFpbiAoOTczKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4ODAnPkJhbmdsYWRlc2ggKDg4MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjQ2Jz5CYXJiYWRvcyAoMjQ2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNzUnPkJlbGFydXMgKDM3NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzInPkJlbGdpdW0gKDMyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1MDEnPkJlbGl6ZSAoNTAxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0NDEnPkJlcm11ZGEgKDQ0MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTc1Jz5CaHV0YW4gKDk3NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTkxJz5Cb2xpdmlhICg1OTEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2Nyc+Qm90c3dhbmEgKDI2NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTUnPkJyYXppbCAoNTUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY3Myc+QnJ1bmVpICg2NzMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1OSc+QnVsZ2FyaWEgKDM1OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjI2Jz5CdXJraW5hIEZhc28gKDIyNikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjU3Jz5CdXJ1bmRpICgyNTcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg1NSc+Q2FtYm9kaWEgKDg1NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjM3Jz5DYW1lcm9vbiAoMjM3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScxJz5DYW5hZGEgLyBVU0EgKDEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU2Jz5DaGlsZSAoNTYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg2Jz5DaGluYSAoODYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU3Jz5Db2xvbWJpYSAoNTcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI0Mic+Q29uZ28gKDI0MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjgyJz5Db29rIElzbGFuZHMgKDY4MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTA2Jz5Db3N0YSBSaWNhICg1MDYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM4NSc+Q3JvYXRpYSAoMzg1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1Myc+Q3ViYSAoNTMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5OSc+Q3VyYWNhbyAoNTk5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNTcnPkN5cHJ1cyAoMzU3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0MjAnPkN6ZWNoIFJlcHVibGljICg0MjApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQ1Jz5EZW5tYXJrICg0NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjQ2Jz5EaWVnbyBHYXJjaWEgKDI0NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjUzJz5Eamlib3V0aSAoMjUzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4MDknPkRvbWluaWNhICg4MDkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5Myc+RWN1YWRvciAoNTkzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMCc+RWd5cHQgKDIwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1MDMnPkVsIFNhbHZhZG9yICg1MDMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3Mic+RXN0b25pYSAoMzcyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyOTgnPkZhZXJvZSBJc2xhbmRzICgyOTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUwMCc+RmFsa2xhbmQgKDUwMCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjc5Jz5GaWppIElzbGFuZHMgKDY3OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzU4Jz5GaW5sYW5kICgzNTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzMzJz5GcmFuY2UgKDMzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTYnPkFudGlsbGVzICAoNTk2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTQnPkd1aWFuYSAoNTk0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNDEnPkdhYm9uIFJlcHVibGljICgyNDEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIyMCc+R2FtYmlhICgyMjApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk5NSc+R2VvcmdpYSAoOTk1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0OSc+R2VybWFueSAoNDkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIzMyc+R2hhbmEgKDIzMykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzUwJz5HaWJyYWx0YXIgKDM1MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzAnPkdyZWVjZSAoMzApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI5OSc+R3JlZW5sYW5kICgyOTkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQ3Myc+R3JlbmFkYSAoNDczKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTAnPkd1YWRlbG91cGUgKDU5MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjcxJz5HdWFtICg2NzEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUwMic+R3VhdGVtYWxhICg1MDIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5Mic+R3V5YW5hICg1OTIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUwOSc+SGFpdGkgKDUwOSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTA0Jz5Ib25kdXJhcyAoNTA0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4NTInPkhvbmcgS29uZyAoODUyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNic+SHVuZ2FyeSAoMzYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1NCc+SWNlbGFuZCAoMzU0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5MSc+SW5kaWEgKDkxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2Mic+SW5kb25lc2lhICg2MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTgnPklyYW4gKDk4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NjQnPklyYXEgKDk2NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzUzJz5JcmVsYW5kICgzNTMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk3Mic+SXNyYWVsICg5NzIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM5Jz5JdGFseSAoMzkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg3Nic+SmFtYWljYSAoODc2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4MSc+SmFwYW4gSWRjICg4MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODEnPkphcGFuIEtkZCAoODEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2Mic+Sm9yZGFuICg5NjIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzcnPkthemFraHN0YW4gKDcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI1NCc+S2VueWEgKDI1NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjg2Jz5LaXJpYmF0aSAoNjg2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4NTAnPktvcmVhLCBOb3J0aCAoODUwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4Mic+S29yZWEsIFNvdXRoICg4MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTY1Jz5LdXdhaXQgKDk2NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNyc+S3lyZ3l6c3RhbiAoNykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODU2Jz5MYW9zICg4NTYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3MSc+TGF0dmlhICgzNzEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2MSc+TGViYW5vbiAoOTYxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjYnPkxlc290aG8gKDI2NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjMxJz5MaWJlcmlhICgyMzEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIxOCc+TGlieWEgKDIxOCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDIzJz5MaWVjaHRlbnN0ZWluICg0MjMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3MCc+TGl0aHVhbmlhICgzNzApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1Mic+THV4ZW1ib3VyZyAoMzUyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4NTMnPk1hY2FvICg4NTMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM4OSc+TWFjZWRvbmlhICgzODkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2MSc+TWFkYWdhc2NhciAoMjYxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjUnPk1hbGF3aSAoMjY1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2MCc+TWFsYXlzaWEgKDYwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NjAnPk1hbGRpdmVzICg5NjApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIyMyc+TWFsaSBSZXB1YmxpYyAoMjIzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNTYnPk1hbHRhICgzNTYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY5Mic+TWFyc2hhbGwgSXNsYW5kcyAoNjkyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMjInPk1hdXJpdGFuaWEgKDIyMikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjMwJz5NYXVyaXRpdXMgKDIzMCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjY5Jz5NYXlvdHRlIElzbGFuZCAoMjY5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1Mic+TWV4aWNvICg1MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjkxJz5NaWNyb25lc2lhICg2OTEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3Myc+TW9sZG92YSAoMzczKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczMyc+TW9uYWNvICgzMykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDczJz5Nb250c2VycmF0ICg0NzMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIxMic+TW9yb2NjbyAoMjEyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNTgnPk1vemFtYmlxdWUgKDI1OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTUnPk15YW5tYXIgKDk1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjQnPk5hbWliaWEgKDI2NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjc0Jz5OYXVydSAoNjc0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NzcnPk5lcGFsICg5NzcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzMxJz5OZXRoZXJsYW5kcyAoMzEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5OSc+QW50aWxsZXMgKDU5OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjg3Jz5OZXcgQ2FsZWRvbmlhICg2ODcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY0Jz5OZXcgWmVhbGFuZCAoNjQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUwNSc+TmljYXJhZ3VhICg1MDUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIzNCc+TmlnZXJpYSAoMjM0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMjcnPk5pZ2VyIFJlcHVibGljICgyMjcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY4Myc+Tml1ZSAoNjgzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NzInPk5vcmZvbGsgSXNsYW5kICg2NzIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQ3Jz5Ob3J3YXkgKDQ3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NjgnPk9tYW4gKDk2OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTInPlBha2lzdGFuICg5MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjgwJz5QYWxhdSAoNjgwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTUnPlBhcmFndWF5ICg1OTUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUxJz5QZXJ1ICg1MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjMnPlBoaWxpcHBpbmVzICg2MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDgnPlBvbGFuZCAoNDgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1MSc+UG9ydHVnYWwgKDM1MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNzg3Jz5QdWVydG8gUmljbyAoNzg3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NzQnPlFhdGFyICg5NzQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2Mic+UmV1bmlvbiBJc2xhbmQgKDI2MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDAnPlJvbWFuaWEgKDQwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc3Jz5SdXNzaWEgKDcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI1MCc+UndhbmRhICgyNTApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5OSc+U3QgRXVzdGF0aXVzICg1OTkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI5MCc+U3QgSGVsZW5hICgyOTApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzc1OCc+U3QgTHVjaWEgKDc1OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTk5Jz5TdCBNYWFydGVuICg1OTkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzgwOSc+U3QgVmluY2VudCAoODA5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2ODQnPlNhbW9hICg2ODQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3OCc+U2FuIE1hcmlubyAoMzc4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMzknPlNhbyBUb21lICgyMzkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2Nic+U2F1ZGkgQXJhYmlhICg5NjYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIyMSc+U2VuZWdhbCAoMjIxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMzInPlNpZXJyYSBMZW9uZSAoMjMyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NSc+U2luZ2Fwb3JlICg2NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDIxJz5TbG92YWtpYSAoNDIxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczODYnPlNsb3ZlbmlhICgzODYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY3Nyc+U29sb21vbiBJc2xhbmRzICg2NzcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI1Mic+U29tYWxpYSAoMjUyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNyc+U291dGggQWZyaWNhICgyNykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzQnPlNwYWluICgzNCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTQnPlNyaSBMYW5rYSAoOTQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI0OSc+U3VkYW4gKDI0OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTk3Jz5TdXJpbmFtZSAoNTk3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjgnPlN3YXppbGFuZCAoMjY4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0Nic+U3dlZGVuICg0NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDEnPlN3aXR6ZXJsYW5kICg0MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTYzJz5TeXJpYSAoOTYzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4ODYnPlRhaXdhbiAoODg2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc3Jz5UYWppa2lzdGFuICg3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNTUnPlRhbnphbmlhICgyNTUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY2Jz5UaGFpbGFuZCAoNjYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIyOCc+VG9nbyAoMjI4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NzYnPlRvbmdhIElzbGFuZHMgKDY3NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjE2Jz5UdW5pc2lhICgyMTYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzkwJz5UdXJrZXkgKDkwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5OTMnPlR1cmttZW5pc3RhbiAoOTkzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2ODgnPlR1dmFsdSAoNjg4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNTYnPlVnYW5kYSAoMjU2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczODAnPlVrcmFpbmUgKDM4MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDQnPlVLICg0NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMSc+VVNBIC8gQ2FuYWRhICgxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTgnPlVydWd1YXkgKDU5OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTk4Jz5VemJla2lzdGFuICg5OTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY3OCc+VmFudWF0dSAoNjc4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczOSc+VmF0aWNhbiBDaXR5ICgzOSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTgnPlZlbmV6dWVsYSAoNTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg0Jz5WaWV0bmFtICg4NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjgxJz5XYWxsaXMgKDY4MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjg1Jz5XZXN0ZXJuIFNhbW9hICg2ODUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2Nyc+WWVtZW4gKDk2NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzgxJz5TZXJiaWEgKDM4MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjYwJz5aYW1iaWEgKDI2MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjYzJz5aaW1iYWJ3ZSAoMjYzKSZuYnNwOzwvb3B0aW9uPjwvc2VsZWN0PiAiOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2NvdW50cnlfY29kZXMoKSB7CiAgcmV0dXJuICI8c2VsZWN0IGlkPSdjb3VudHJ5JyBuYW1lPSdjb3VudHJ5Jz48b3B0aW9uIHNlbGVjdGVkPSdzZWxlY3RlZCcgdmFsdWU9J25vbmUnPi0tLTwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBRic+QWZnaGFuaXN0YW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQUwnPkFsYmFuaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRFonPkFsZ2VyaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQVMnPkFtZXJpY2FuIFNhbW9hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FEJz5BbmRvcnJhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FPJz5BbmdvbGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQUknPkFuZ3VpbGxhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FRJz5BbnRhcmN0aWNhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FHJz5BbnRpZ3VhIGFuZCBCYXJidWRhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FSJz5BcmdlbnRpbmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQU0nPkFybWVuaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQVcnPkFydWJhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FVJz5BdXN0cmFsaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQVQnPkF1c3RyaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQVonPkF6ZXJiYWlqYW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQlMnPkJhaGFtYXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkgnPkJhaHJhaW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkQnPkJhbmdsYWRlc2gmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkInPkJhcmJhZG9zJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JZJz5CZWxhcnVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JFJz5CZWxnaXVtJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JaJz5CZWxpemUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkonPkJlbmluJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JNJz5CZXJtdWRhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JUJz5CaHV0YW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQk8nPkJvbGl2aWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkEnPkJvc25pYSBhbmQgSGVyemVnb3ZpbmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQlcnPkJvdHN3YW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JWJz5Cb3V2ZXQgSXNsYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JSJz5CcmF6aWwmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSU8nPkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCTic+QnJ1bmVpIERhcnVzc2FsYW0mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkcnPkJ1bGdhcmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JGJz5CdXJraW5hIEZhc28mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkknPkJ1cnVuZGkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS0gnPkNhbWJvZGlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NNJz5DYW1lcm9vbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDQSc+Q2FuYWRhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NWJz5DYXBlIFZlcmRlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tZJz5DYXltYW4gSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDRic+Q2VudHJhbCBBZnJpY2FuIFJlcHVibGljJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1REJz5DaGFkJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NMJz5DaGlsZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDTic+Q2hpbmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ1gnPkNocmlzdG1hcyBJc2xhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ0MnPkNvY29zIChLZWVsaW5nKSBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NPJz5Db2xvbWJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLTSc+Q29tb3JvcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDRyc+Q29uZ28mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ0QnPkNvbmdvLCB0aGUgRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ0snPkNvb2sgSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDUic+Q29zdGEgUmljYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDSSc+Q290ZSBEJ0l2b2lyZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdIUic+Q3JvYXRpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDVSc+Q3ViYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDWSc+Q3lwcnVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NaJz5DemVjaCBSZXB1YmxpYyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdESyc+RGVubWFyayZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdESic+RGppYm91dGkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRE0nPkRvbWluaWNhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0RPJz5Eb21pbmljYW4gUmVwdWJsaWMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRUMnPkVjdWFkb3ImbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRUcnPkVneXB0Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NWJz5FbCBTYWx2YWRvciZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHUSc+RXF1YXRvcmlhbCBHdWluZWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRVInPkVyaXRyZWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRUUnPkVzdG9uaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRVQnPkV0aGlvcGlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0ZLJz5GYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRk8nPkZhcm9lIElzbGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRkonPkZpamkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRkknPkZpbmxhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRlInPkZyYW5jZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHRic+RnJlbmNoIEd1aWFuYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQRic+RnJlbmNoIFBvbHluZXNpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdURic+RnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dBJz5HYWJvbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHTSc+R2FtYmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dFJz5HZW9yZ2lhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0RFJz5HZXJtYW55Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dIJz5HaGFuYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHSSc+R2licmFsdGFyJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dSJz5HcmVlY2UmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR0wnPkdyZWVubGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHRCc+R3JlbmFkYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHUCc+R3VhZGVsb3VwZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHVSc+R3VhbSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHVCc+R3VhdGVtYWxhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dOJz5HdWluZWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR1cnPkd1aW5lYS1CaXNzYXUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR1knPkd1eWFuYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdIVCc+SGFpdGkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSE0nPkhlYXJkIElzbGFuZCBhbmQgTWNkb25hbGQgSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdWQSc+SG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSE4nPkhvbmR1cmFzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0hLJz5Ib25nIEtvbmcmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSFUnPkh1bmdhcnkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSVMnPkljZWxhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSU4nPkluZGlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0QnPkluZG9uZXNpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJUic+SXJhbiwgSXNsYW1pYyBSZXB1YmxpYyBvZiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJUSc+SXJhcSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJRSc+SXJlbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJTCc+SXNyYWVsJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0lUJz5JdGFseSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdKTSc+SmFtYWljYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdKUCc+SmFwYW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSk8nPkpvcmRhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLWic+S2F6YWtoc3RhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLRSc+S2VueWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS0knPktpcmliYXRpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tQJz5Lb3JlYSwgRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLUic+S29yZWEsIFJlcHVibGljIG9mJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tXJz5LdXdhaXQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS0cnPkt5cmd5enN0YW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTEEnPkxhbyBQZW9wbGUncyBEZW1vY3JhdGljIFJlcHVibGljJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0xWJz5MYXR2aWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTEInPkxlYmFub24mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFMnPkxlc290aG8mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFInPkxpYmVyaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFknPkxpYnlhbiBBcmFiIEphbWFoaXJpeWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTEknPkxpZWNodGVuc3RlaW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFQnPkxpdGh1YW5pYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMVSc+THV4ZW1ib3VyZyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNTyc+TWFjYW8mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUsnPk1hY2Vkb25pYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNRyc+TWFkYWdhc2NhciZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNVyc+TWFsYXdpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01ZJz5NYWxheXNpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNVic+TWFsZGl2ZXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUwnPk1hbGkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVQnPk1hbHRhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01IJz5NYXJzaGFsbCBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01RJz5NYXJ0aW5pcXVlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01SJz5NYXVyaXRhbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01VJz5NYXVyaXRpdXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nWVQnPk1heW90dGUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVgnPk1leGljbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdGTSc+TWljcm9uZXNpYSwgRmVkZXJhdGVkIFN0YXRlcyBvZiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNRCc+TW9sZG92YSwgUmVwdWJsaWMgb2YmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUMnPk1vbmFjbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNTic+TW9uZ29saWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVMnPk1vbnRzZXJyYXQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUEnPk1vcm9jY28mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVonPk1vemFtYmlxdWUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTU0nPk15YW5tYXImbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTkEnPk5hbWliaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTlInPk5hdXJ1Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05QJz5OZXBhbCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOTCc+TmV0aGVybGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQU4nPk5ldGhlcmxhbmRzIEFudGlsbGVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05DJz5OZXcgQ2FsZWRvbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05aJz5OZXcgWmVhbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOSSc+TmljYXJhZ3VhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05FJz5OaWdlciZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdORyc+TmlnZXJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOVSc+Tml1ZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdORic+Tm9yZm9sayBJc2xhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVAnPk5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOTyc+Tm9yd2F5Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J09NJz5PbWFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BLJz5QYWtpc3RhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQVyc+UGFsYXUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUFMnPlBhbGVzdGluaWFuIFRlcnJpdG9yeSwgT2NjdXBpZWQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUEEnPlBhbmFtYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQRyc+UGFwdWEgTmV3IEd1aW5lYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQWSc+UGFyYWd1YXkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUEUnPlBlcnUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUEgnPlBoaWxpcHBpbmVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BOJz5QaXRjYWlybiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQTCc+UG9sYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BUJz5Qb3J0dWdhbCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQUic+UHVlcnRvIFJpY28mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUUEnPlFhdGFyJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1JFJz5SZXVuaW9uJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1JPJz5Sb21hbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1JVJz5SdXNzaWFuIEZlZGVyYXRpb24mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUlcnPlJ3YW5kYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTSCc+U2FpbnQgSGVsZW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tOJz5TYWludCBLaXR0cyBhbmQgTmV2aXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTEMnPlNhaW50IEx1Y2lhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BNJz5TYWludCBQaWVycmUgYW5kIE1pcXVlbG9uJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ZDJz5TYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdXUyc+U2Ftb2EmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU00nPlNhbiBNYXJpbm8mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU1QnPlNhbyBUb21lIGFuZCBQcmluY2lwZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTQSc+U2F1ZGkgQXJhYmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NOJz5TZW5lZ2FsJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NTJz5TZXJiaWEgYW5kIE1vbnRlbmVncm8mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0MnPlNleWNoZWxsZXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0wnPlNpZXJyYSBMZW9uZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTRyc+U2luZ2Fwb3JlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NLJz5TbG92YWtpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTSSc+U2xvdmVuaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0InPlNvbG9tb24gSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTTyc+U29tYWxpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdaQSc+U291dGggQWZyaWNhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dTJz5Tby4gR2VvcmdpYSBhbmQgdGhlIFNvLiBTYW5kd2ljaCBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0VTJz5TcGFpbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMSyc+U3JpIExhbmthJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NEJz5TdWRhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTUic+U3VyaW5hbWUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0onPlN2YWxiYXJkIGFuZCBKYW4gTWF5ZW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU1onPlN3YXppbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTRSc+U3dlZGVuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nQ0gnPlN3aXR6ZXJsYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NZJz5TeXJpYW4gQXJhYiBSZXB1YmxpYyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUVyc+VGFpd2FuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RKJz5UYWppa2lzdGFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RaJz5UYW56YW5pYSwgVW5pdGVkIFJlcHVibGljIG9mJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RIJz5UaGFpbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUTCc+VGltb3ItTGVzdGUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVEcnPlRvZ28mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVEsnPlRva2VsYXUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVE8nPlRvbmdhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RUJz5UcmluaWRhZCBhbmQgVG9iYWdvJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ROJz5UdW5pc2lhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RSJz5UdXJrZXkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVE0nPlR1cmttZW5pc3RhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUQyc+VHVya3MgYW5kIENhaWNvcyBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RWJz5UdXZhbHUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVUcnPlVnYW5kYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdVQSc+VWtyYWluZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBRSc+VW5pdGVkIEFyYWIgRW1pcmF0ZXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR0InPlVuaXRlZCBLaW5nZG9tJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1VTJz5Vbml0ZWQgU3RhdGVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1VNJz5Vbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVVknPlVydWd1YXkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVVonPlV6YmVraXN0YW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVlUnPlZhbnVhdHUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVkUnPlZlbmV6dWVsYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdWTic+VmlldCBOYW0mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVkcnPlZpcmdpbiBJc2xhbmRzLCBCcml0aXNoJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ZJJz5WaXJnaW4gSXNsYW5kcywgVS5zLiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdXRic+V2FsbGlzIGFuZCBGdXR1bmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRUgnPldlc3Rlcm4gU2FoYXJhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1lFJz5ZZW1lbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdaTSc+WmFtYmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1pXJz5aaW1iYWJ3ZSZuYnNwOzwvb3B0aW9uPjwvc2VsZWN0PiAiOwp9CgpmdW5jdGlvbiBwbGFueW9fc2V0X2VsZW1lbnRfdmFsdWUoZWwsIHZhbHVlKSB7CglpZiAoZWwuaXMoIjpjaGVja2JveCIpKQoJCWVsLmF0dHIgKCdjaGVja2VkJywgKHZhbHVlID09ICdvbicgfHwgdmFsdWUgPT0gJ3llcycgfHwgdmFsdWUgPT0gJzEnKSA/ICdjaGVja2VkJyA6ICcnKTsKICBlbHNlCgkJZWwudmFsKHZhbHVlKTsKfQoKZnVuY3Rpb24gcGxhbnlvX3ByZWZpbGxfcGFyYW1zKHBhcmFtcykgewogIGZvciAodmFyIHAgaW4gcGFyYW1zKSB7CiAgICB2YXIgbmFtZSA9IHBhcmFtc1twXTsKICAgIGlmICh0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJykgewogICAgICB2YXIgdmFsdWUgPSBwbGFueW9fZ2V0X3BhcmFtKG5hbWUpOwogICAgICBpZiAodmFsdWUgJiYgalF1ZXJ5KCcjJyArIG5hbWUpLmxlbmd0aCA+IDApCgkJCQkJcGxhbnlvX3NldF9lbGVtZW50X3ZhbHVlKGpRdWVyeSgnIycgKyBuYW1lKSwgdmFsdWUpOwogICAgICBpZiAodmFsdWUgJiYgalF1ZXJ5KCcjYm94XycgKyBuYW1lKS5sZW5ndGggPiAwKQoJCQkJCXBsYW55b19zZXRfZWxlbWVudF92YWx1ZShqUXVlcnkoJyNib3hfJyArIG5hbWUpLCB2YWx1ZSk7CiAgICAgIGlmICh2YWx1ZSAmJiBuYW1lLmluZGV4T2YoJ2JveF8nKSA9PSAwICYmIGpRdWVyeSgnIycgKyBuYW1lLnN1YnN0cig0KSkubGVuZ3RoID4gMCkKCQkJCQlwbGFueW9fc2V0X2VsZW1lbnRfdmFsdWUoalF1ZXJ5KCcjJyArIG5hbWUuc3Vic3RyKDQpKSwgdmFsdWUpOwogICAgfQogIH0KfQoKZnVuY3Rpb24gZ2V0X3BsYW55b19tb2RlKCkgewogIGlmICh3aW5kb3cucGxhbnlvX2ZvcmNlX21vZGUpCiAgICByZXR1cm4gd2luZG93LnBsYW55b19mb3JjZV9tb2RlOwogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdtb2RlJykpCiAgICByZXR1cm4gcGxhbnlvX2dldF9wYXJhbSgnbW9kZScpOwoKICB2YXIgcmVzb3VyY2VfaWQgPSBwbGFueW9fZ2V0X3BhcmFtKCdyZXNvdXJjZV9pZCcpIHx8IChwbGFueW9faXNzZXQocGxhbnlvX3NldHRpbmdzLnBsYW55b19yZXNvdXJjZV9pZCkgJiYgcGxhbnlvX3NldHRpbmdzLnBsYW55b19yZXNvdXJjZV9pZCA+IDApOwogIGlmIChyZXNvdXJjZV9pZCAmJiAocGxhbnlvX2dldF9wYXJhbSgncHJlZmlsbCcpIHx8IHBsYW55b19nZXRfcGFyYW0oJ3N1Ym1pdHRlZCcpKSkKICAgIHJldHVybiAncmVzZXJ2ZSc7CiAgZWxzZSBpZiAocmVzb3VyY2VfaWQpCiAgICByZXR1cm4gJ3Jlc291cmNlX2Rlc2MnOwogIGVsc2UgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3ByZXNlbnRhdGlvbl9tb2RlJykgPT0gJzEnKSB7CiAgICBpZiAoU3RyaW5nKHdpbmRvdy5wbGFueW9fc2l0ZV9pZCkuaW5kZXhPZignTScpID09IDAgJiYgIXBsYW55b19nZXRfcGFyYW0oJ3NpdGVfaWQnKSkKICAgICAgcmV0dXJuICdzaXRlX2xpc3QnOwogICAgZWxzZQogICAgICByZXR1cm4gJ3Jlc291cmNlX2xpc3QnOwogIH0KCiAgaWYgKHBsYW55b19zZXR0aW5ncy5wbGFueW9fZGVmYXVsdF9tb2RlKQogICAgcmV0dXJuIHBsYW55b19zZXR0aW5ncy5wbGFueW9fZGVmYXVsdF9tb2RlOwoKICByZXR1cm4gJ3NlYXJjaCc7Cn0KCmZ1bmN0aW9uIHBsYW55b19nZXRfYWRkaXRpb25hbF9wcm9wcyhmb3JtLCBlbHMpIHsKICBqUXVlcnkoIjppbnB1dFtuYW1lXj0ncHJvcF9yZXNfJ10iKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgZWxzW2Vscy5sZW5ndGhdID0gdGhpcy5uYW1lOwogIH0pOwogIGpRdWVyeSgiOmlucHV0W25hbWVePSdyZW50YWxfcHJvcF8nXSIpLmVhY2goZnVuY3Rpb24oKSB7CiAgICBlbHNbZWxzLmxlbmd0aF0gPSB0aGlzLm5hbWU7CiAgfSk7CiAgcmV0dXJuIGVsczsKfQoKZnVuY3Rpb24gcGxhbnlvX2Zvcm1fbG9hZGVkKGNvZGUpIHsKICBpZiAoIWNvZGUgfHwgY29kZS5zdWJzdHIgKDAsIDUpID09ICJFcnJvciIpIHsKICAgIHdpbmRvdy5sb2NhdGlvbiA9IChwbGFueW9fc2V0dGluZ3MucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXNlcnZlLnBocD9jYWxlbmRhcj0iICsgcGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkOwogIH0KICBlbHNlIHsKICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoIntQSC1tb2JpbGVfY291bnRyeV9wYXJhbX0iLCBwbGFueW9fZ2V0X3Bob25lX2NvZGVzKCJtb2JpbGVfY291bnRyeV9wYXJhbSIpKTsKICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoIntQSC1waG9uZV9jb3VudHJ5X3BhcmFtfSIsIHBsYW55b19nZXRfcGhvbmVfY29kZXMoInBob25lX2NvdW50cnlfcGFyYW0iKSk7CiAgICBjb2RlID0gY29kZS5yZXBsYWNlKCJ7Q08tY291bnRyeV9wYXJhbX0iLCBwbGFueW9fZ2V0X2NvdW50cnlfY29kZXMoKSk7CiAgICBjb2RlID0gY29kZS5yZXBsYWNlKC9wbGFueW8tc3R5bGVzLmNzcy9nLCBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJwbGFueW8tc3R5bGVzLmNzcyIpKTsKICAgIGpRdWVyeSgnI3BsYW55b19jb250ZW50JykuaHRtbChjb2RlKTsKCiAgICB2YXIgcGxhbnlvX21vZGUgPSBwbGFueW9fZ2V0X3BhcmFtKCdtb2RlJyk7CiAgICBpZiAoIXBsYW55b19pc19zcGVjaWFsX21vZGUocGxhbnlvX21vZGUpKQogICAgICBwbGFueW9fbW9kZSA9IGdldF9wbGFueW9fbW9kZSgpOwogICAgaWYgKHBsYW55b19tb2RlID09ICdzZWFyY2gnKSB7CiAgICAgIGpRdWVyeSgnI3NlYXJjaF9mb3JtJykuc3VibWl0KHBsYW55b19zZW5kX3NlYXJjaF9mb3JtKTsKICAgICAgICB2YXIgcGFyYW1zX2FycmF5ID0gbmV3IEFycmF5KCdzdGFydF9kYXRlJywgJ2VuZF9kYXRlJywgJ29uZV9kYXRlJywgJ3N0YXJ0X3RpbWUnLCAnZW5kX3RpbWUnLCAnc29ydCcsICdib3hfc3RhcnRfZGF0ZScsICdib3hfZW5kX2RhdGUnLCAnYm94X29uZV9kYXRlJywgJ2JveF9zdGFydF90aW1lJywgJ2JveF9lbmRfdGltZScsICdyZW50YWxfdGltZV92YWx1ZScsICdpc19uaWdodCcpOwogICAgICBwbGFueW9fZ2V0X2FkZGl0aW9uYWxfcHJvcHMoalF1ZXJ5KCcjc2VhcmNoX2Zvcm0nKSwgcGFyYW1zX2FycmF5KTsKICAgICAgcGxhbnlvX3ByZWZpbGxfcGFyYW1zKHBhcmFtc19hcnJheSk7CiAgICAgIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdzdWJtaXR0ZWQnKSkgewoJcGxhbnlvX3NlbmRfc2VhcmNoX2Zvcm0oKTsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAocGxhbnlvX21vZGUgPT0gJ3Jlc2VydmUnKSB7CiAgICAgIGRvY3VtZW50LnBsYW55b19ub19ob3VyZ2xhc3MgPSB0cnVlOwogICAgICBzZXRUaW1lb3V0KCJpZih3aW5kb3cucGxhbnlvX2RhdGVzX2NoYW5nZWQpIHBsYW55b19kYXRlc19jaGFuZ2VkKCk7IiwgMTAwKTsKICAgICAgc2V0VGltZW91dCgiaWYod2luZG93LnBsYW55b19kYXRlc19jaGFuZ2VkKSBwbGFueW9fZGF0ZXNfY2hhbmdlZCgpOyIsIDE1MDApOwogICAgICBzZXRUaW1lb3V0KCJpZih3aW5kb3cucGxhbnlvX2RhdGVzX2NoYW5nZWQpIHtwbGFueW9fZGF0ZXNfY2hhbmdlZCgpO2RvY3VtZW50LnBsYW55b19ub19ob3VyZ2xhc3MgPSBmYWxzZTt9IiwgNTAwMCk7CiAgICAgIGpRdWVyeSgnI3Jlc2VydmVfZm9ybScpLnN1Ym1pdChwbGFueW9fc2VuZF9yZXNlcnZhdGlvbl9mb3JtKTsKICAgICAgalF1ZXJ5KCcjcHJvZHVjdF9mb3JtJykuc3VibWl0KHBsYW55b19zZW5kX3Byb2R1Y3RfZm9ybSk7CiAgICAgIGlmIChwbGFueW9faXNzZXQocGxhbnlvX3NldHRpbmdzLnBsYW55b19sb2dpbikpIHsKICAgICAgICBmb3IgKGtleSBpbiBwbGFueW9fc2V0dGluZ3MucGxhbnlvX2xvZ2luKSB7CiAgICAgICAgICB2YXIgdmFsdWUgPSBwbGFueW9fc2V0dGluZ3MucGxhbnlvX2xvZ2luW2tleV07CiAgICAgICAgICB2YXIgbW9kX2tleSA9IGtleTsKICAgICAgICAgIGlmIChrZXkgPT0gJ2ZpcnN0X25hbWUnKSAKICAgICAgICAgICAgbW9kX2tleSA9ICdmaXJzdCc7CiAgICAgICAgICBlbHNlIGlmIChrZXkgPT0gJ2xhc3RfbmFtZScpCiAgICAgICAgICAgIG1vZF9rZXkgPSAnbGFzdCc7CiAgICAgICAgICBlbHNlIGlmIChrZXkgPT0gJ2VtYWlsJykKICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCJbYXRdIiwgIkAiKTsKICAgICAgICAgIGlmICh2YWx1ZSAmJiBqUXVlcnkoJyMnK21vZF9rZXkpICYmICFqUXVlcnkoJyMnK21vZF9rZXkpLnZhbCgpKQogICAgICAgICAgICBqUXVlcnkoJyMnK21vZF9rZXkpLnZhbCh2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBwYXJhbXNfYXJyYXkgPSBuZXcgQXJyYXkoJ3N0YXJ0X2RhdGUnLCAnZW5kX2RhdGUnLCAnb25lX2RhdGUnLCAnc3RhcnRfdGltZScsICdlbmRfdGltZScsICdib3hfc3RhcnRfZGF0ZScsICdib3hfZW5kX2RhdGUnLCAnYm94X29uZV9kYXRlJywgJ2JveF9zdGFydF90aW1lJywgJ2JveF9lbmRfdGltZScsICdyZW50YWxfdGltZV92YWx1ZScpOwogICAgICBwbGFueW9fZ2V0X2FkZGl0aW9uYWxfcHJvcHMoalF1ZXJ5KCcjcmVzZXJ2ZV9mb3JtJyksIHBhcmFtc19hcnJheSk7CiAgICAgIHBsYW55b19wcmVmaWxsX3BhcmFtcyhwYXJhbXNfYXJyYXkpOwogICAgICBpZihqUXVlcnkoJyNwbGFueW9fcHJpY2VfaG9sZGVyJykubGVuZ3RoKSB7CiAgICAgICAgalF1ZXJ5KCcjcGxhbnlvX3ByaWNlX2hvbGRlcicpLmFwcGVuZChqUXVlcnkoJyNwcmljZV9pbmZvJykpOwogICAgICAgIGpRdWVyeSgnI3BsYW55b19wcmljZV9ob2xkZXInKS5jc3MoJ2Rpc3BsYXknLCcnKQogICAgICAgIGpRdWVyeSgnI3ByaWNlX2luZm9fZGl2JykuY3NzKCdkaXNwbGF5Jywnbm9uZScpCiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHBsYW55b19tb2RlID09ICdtb2RpZnlfZGF0YV9mb3JtJykgewogICAgICBqUXVlcnkoJyNtb2RpZnlfZGF0YV9mb3JtJykuc3VibWl0KHBsYW55b19zZW5kX21vZGlmeV9kYXRhX2Zvcm0pOwogICAgfQogICAgZWxzZSBpZiAocGxhbnlvX21vZGUgPT0gJ2FkZGl0aW9uYWxfcHJvZHVjdHNfY29kZScpIHsKICAgICAgalF1ZXJ5KCcjcHJvZHVjdF9mb3JtJykuc3VibWl0KHBsYW55b19zZW5kX3Byb2R1Y3RfZm9ybSk7CiAgICB9CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAnY2hlY2tvdXQnKSB7CiAgICAgIGlmIChwbGFueW9faXNzZXQod2luZG93LmpzX3N1Ym1pdF9wYXltZW50X2Zvcm0pKQogICAgICAgIHdpbmRvdy5qc19zdWJtaXRfcGF5bWVudF9mb3JtKCk7CiAgICB9CiAgICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQpKQogICAgICB3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKHBsYW55b19tb2RlKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9jb2RlKGZvcm1fdXJsLCBmb3JtX3VybF9wYXJhbXMpIHsKICBpZiAocGxhbnlvX3NldHRpbmdzLnBsYW55b19sYW5ndWFnZSkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAiJmxhbmd1YWdlPSIgKyBwbGFueW9fc2V0dGluZ3MucGxhbnlvX2xhbmd1YWdlOwogIGZvcm1fdXJsX3BhcmFtcyArPSAiJmh0bWxfY29udGVudF90eXBlPTEiOwogIGZvcm1fdXJsX3BhcmFtcyArPSAiJnBsdWdpbl9tb2RlPTEwIjsKICB2YXIgc2hvcHBpbmdfY2FydF9pZCA9IHBsYW55b19nZXRfY29va2llKCdwbGFueW9fY2FydF9pZCcpOwogIGlmIChzaG9wcGluZ19jYXJ0X2lkICYmIGZvcm1fdXJsX3BhcmFtcy5pbmRleE9mKCdjYXJ0X2lkPScpID09IC0xKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICImY2FydF9pZD0iICsgc2hvcHBpbmdfY2FydF9pZCArICImZmlyc3RfcmVzZXJ2YXRpb25faWQ9IiArIHBsYW55b19nZXRfY29va2llKCdwbGFueW9fZmlyc3RfcmVzZXJ2YXRpb25faWQnKTsKICBpZiAocGxhbnlvX2lzc2V0KHBsYW55b19zZXR0aW5ncy5wbGFueW9fbG9naW4pICYmIHBsYW55b19pc3NldChwbGFueW9fc2V0dGluZ3MucGxhbnlvX2xvZ2luLCAnbG9naW5fY3MnKSAmJiBwbGFueW9faXNzZXQocGxhbnlvX3NldHRpbmdzLnBsYW55b19sb2dpbiwgJ2VtYWlsJykpCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZsb2dpbl9jcz0iICsgcGxhbnlvX3NldHRpbmdzLnBsYW55b19sb2dpblsnbG9naW5fY3MnXSArICImbG9naW5fZW1haWw9IiArIHBsYW55b19zZXR0aW5ncy5wbGFueW9fbG9naW5bJ2VtYWlsJ107CiAgdmFyIHBwcF9wYXJhbXMgPSBwbGFueW9fZ2V0X3ByZWZpeGVkX3BhcmFtcygncHBwXycpOwogIGlmIChwcHBfcGFyYW1zLmxlbmd0aCA+IDApCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiYiICsgcHBwX3BhcmFtczsKICBmb3JtX3VybF9wYXJhbXMgKz0gIiZ1c2VyX2FnZW50PSIgKyBuYXZpZ2F0b3IudXNlckFnZW50OwogIGRvY3VtZW50LnBsYW55b19maWxlX3BhdGggPSBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCcnKTsKICB2YXIgZm9ybV91cmxfcGFyYW1zX2FyciA9IHBsYW55b191bnNlcmlhbGl6ZShmb3JtX3VybF9wYXJhbXMpOwogIGpRdWVyeS5wb3N0KGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtc19hcnIscGxhbnlvX2Zvcm1fbG9hZGVkKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX25vbl9yZXNlcnZhdGlvbl9zdGVwX2FkZGl0aW9uYWxfcHJvZHVjdHNfZm9ybSAocmVzZXJ2YXRpb25faWQsIHVzZXJfaWQpIHsKICBpZiAocmVzZXJ2YXRpb25faWQpIHsKICAgIHZhciBmb3JtX3VybCA9IHBsYW55b19zZXR0aW5ncy51bGFwX3NjcmlwdDsKICAgIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9IisocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfYWRkaXRpb25hbF9wcm9kdWN0c19jb2RlJnJlc2VydmF0aW9uX2lkPSIrcmVzZXJ2YXRpb25faWQrIiZ1c2VyX2lkPSIrdXNlcl9pZCsiJm5vbl9yZXNlcnZhdGlvbl9zdGVwPTEmZmVlZGJhY2tfdXJsPSIrcGxhbnlvX2dldF9jdXJyZW50X3VybCgpOwogICAgcGxhbnlvX2VtYmVkX2NvZGUoZm9ybV91cmwsZm9ybV91cmxfcGFyYW1zKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9tb2RpZnlfZGF0YV9mb3JtIChyZXNlcnZhdGlvbl9pZCwgdXNlcl9pZCkgewogIGlmIChyZXNlcnZhdGlvbl9pZCkgewogICAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogICAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyhwbGFueW9fc2V0dGluZ3MucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9bW9kaWZ5X2RhdGFfZm9ybSZyZXNlcnZhdGlvbl9pZD0iK3Jlc2VydmF0aW9uX2lkKyImdXNlcl9pZD0iK3VzZXJfaWQrIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCk7CiAgICBwbGFueW9fZW1iZWRfY29kZShmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX2NhbmNlbF9jb2RlKHNpdGVfaWQsIHJlc2VydmF0aW9uX2lkLCBjLCB1c2VyX2lkLCByZXNvdXJjZV9pZCkgewogIGlmIChyZXNlcnZhdGlvbl9pZCkgewogICAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogICAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyhwbGFueW9fc2V0dGluZ3MucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9jYW5jZWxfY29kZSZyZXNlcnZhdGlvbl9pZD0iK3Jlc2VydmF0aW9uX2lkKyImYz0iK2MrIiZyZXNvdXJjZV9pZD0iK3Jlc291cmNlX2lkKyImdXNlcl9pZD0iK3VzZXJfaWQrIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkrIiZzaXRlX2lkPSIrc2l0ZV9pZDsKICAgIHBsYW55b19lbWJlZF9jb2RlKGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtcyk7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfcmVzZXJ2YXRpb25fZGV0YWlscyhzaXRlX2lkLCByZXNlcnZhdGlvbl9pZCwgdXNlcl9pZCkgewogIGlmIChyZXNlcnZhdGlvbl9pZCkgewogICAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogICAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyhwbGFueW9fc2V0dGluZ3MucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9yZXNlcnZhdGlvbl9kZXRhaWxzX2NvZGUmcmVzZXJ2YXRpb25faWQ9IityZXNlcnZhdGlvbl9pZCsiJnVzZXJfaWQ9Iit1c2VyX2lkKyImZmVlZGJhY2tfdXJsPSIrcGxhbnlvX2dldF9jdXJyZW50X3VybCgpKyImc2l0ZV9pZD0iK3NpdGVfaWQ7CiAgICBwbGFueW9fZW1iZWRfY29kZShmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX3Jlc2VydmF0aW9uX2xpc3Qoc2l0ZV9pZCwgcmVzZXJ2YXRpb25faWQsIHVzZXJfaWQpIHsKICB2YXIgZm9ybV91cmwgPSBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQ7CiAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyhwbGFueW9fc2V0dGluZ3MucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9yZXNlcnZhdGlvbl9saXN0X2NvZGUiOwogIGZvcm1fdXJsX3BhcmFtcyArPSAiJmZlZWRiYWNrX3VybD0iK3BsYW55b19nZXRfY3VycmVudF91cmwoKSsiJnNpdGVfaWQ9IitzaXRlX2lkOwogIGlmIChyZXNlcnZhdGlvbl9pZCAmJiB1c2VyX2lkKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICImcmVzZXJ2YXRpb25faWQ9IityZXNlcnZhdGlvbl9pZCsiJnVzZXJfaWQ9Iit1c2VyX2lkOwoKICBwbGFueW9fZW1iZWRfY29kZShmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfcGF5bWVudF9mb3JtKHNpdGVfaWQsIHJlc2VydmF0aW9uX2lkLCB1c2VyX2lkLCBhdXRvX3JlZGlyZWN0KSB7CiAgaWYgKHJlc2VydmF0aW9uX2lkKSB7CiAgICB2YXIgZm9ybV91cmwgPSBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQ7CiAgICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHBsYW55b19zZXR0aW5ncy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X3BheW1lbnRfZm9ybV9jb2RlJnJlc2VydmF0aW9uX2lkPSIrcmVzZXJ2YXRpb25faWQrIiZ1c2VyX2lkPSIrdXNlcl9pZCsiJmZlZWRiYWNrX3VybD0iK3BsYW55b19nZXRfY3VycmVudF91cmwoKSsiJnNpdGVfaWQ9IitzaXRlX2lkKyhhdXRvX3JlZGlyZWN0ID8gIiZhdXRvX3JlZGlyZWN0PSIrYXV0b19yZWRpcmVjdCA6ICIiKTsKICAgIHZhciBhbW91bnQgPSBwbGFueW9fZ2V0X3BhcmFtKCdhbW91bnQnKTsKICAgIGlmIChhbW91bnQpCiAgICAgIGZvcm1fdXJsX3BhcmFtcyArPSAiJmFtb3VudD0iK2Ftb3VudDsKICAgIHBsYW55b19lbWJlZF9jb2RlKGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtcyk7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfY2FydF9jb2RlKHNpdGVfaWQsIGNhcnRfaWQsIGZpcnN0X3Jlc2VydmF0aW9uX2lkLCByZW1vdmVfcmVzZXJ2YXRpb25faWQpIHsKICBpZiAoIWNhcnRfaWQpIHsKICAgIGNhcnRfaWQgPSBwbGFueW9fZ2V0X2Nvb2tpZSgncGxhbnlvX2NhcnRfaWQnKTsKICAgIGZpcnN0X3Jlc2VydmF0aW9uX2lkID0gcGxhbnlvX2dldF9jb29raWUoJ3BsYW55b19maXJzdF9yZXNlcnZhdGlvbl9pZCcpOwogIH0KICB2YXIgZm9ybV91cmwgPSBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQ7CiAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyhwbGFueW9fc2V0dGluZ3MucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9jYXJ0X2NvZGUmZmlyc3RfcmVzZXJ2YXRpb25faWQ9IitmaXJzdF9yZXNlcnZhdGlvbl9pZCsiJnJlbW92ZV9yZXNlcnZhdGlvbl9pZD0iKyhyZW1vdmVfcmVzZXJ2YXRpb25faWQgPyByZW1vdmVfcmVzZXJ2YXRpb25faWQgOiAiIikrIiZjYXJ0X2lkPSIrY2FydF9pZCsiJmZlZWRiYWNrX3VybD0iK3BsYW55b19nZXRfY3VycmVudF91cmwoKSsiJnNpdGVfaWQ9IitzaXRlX2lkOwogIHBsYW55b19lbWJlZF9jb2RlKGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9jaGVja291dF9jb2RlKHNpdGVfaWQsIGNhcnRfaWQsIGZpcnN0X3Jlc2VydmF0aW9uX2lkKSB7CiAgaWYgKCFjYXJ0X2lkKSB7CiAgICBjYXJ0X2lkID0gcGxhbnlvX2dldF9jb29raWUoJ3BsYW55b19jYXJ0X2lkJyk7CiAgICBmaXJzdF9yZXNlcnZhdGlvbl9pZCA9IHBsYW55b19nZXRfY29va2llKCdwbGFueW9fZmlyc3RfcmVzZXJ2YXRpb25faWQnKTsKICB9CiAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9IisocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfY2hlY2tvdXRfY29kZSZmaXJzdF9yZXNlcnZhdGlvbl9pZD0iK2ZpcnN0X3Jlc2VydmF0aW9uX2lkKyImY2FydF9pZD0iK2NhcnRfaWQrIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkrIiZzaXRlX2lkPSIrc2l0ZV9pZDsKICBwbGFueW9fZW1iZWRfY29kZShmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfd2lkZ2V0KHNpdGVfaWQpIHsKICB2YXIgZm9ybV91cmwgPSBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQ7CiAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyhwbGFueW9fc2V0dGluZ3MucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV93aWRnZXQmZmVlZGJhY2tfdXJsPSIrcGxhbnlvX2dldF9jdXJyZW50X3VybCgpKyImc2l0ZV9pZD0iK3NpdGVfaWQ7CiAgcGxhbnlvX2VtYmVkX2NvZGUoZm9ybV91cmwsZm9ybV91cmxfcGFyYW1zKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX3Jlc2VydmF0aW9uX2Zvcm0oc2l0ZV9pZCwgcmVzb3VyY2VfaWQpIHsKICB2YXIgZm9ybV91cmwgPSBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQ7CiAgaWYgKCFyZXNvdXJjZV9pZCkgewogICAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cucGxhbnlvX3Jlc291cmNlX2lkKSkKICAgICAgcmVzb3VyY2VfaWQgPSB3aW5kb3cucGxhbnlvX3Jlc291cmNlX2lkOwogICAgZWxzZQogICAgICByZXNvdXJjZV9pZCA9ICcnOwogIH0KICB2YXIgZGF0ZV9zdHIgPSAnJzsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnc3RhcnRfZGF0ZScpKQogICAgZGF0ZV9zdHIgPSAiJnN0YXJ0X2RhdGU9IiArIHBsYW55b19nZXRfcGFyYW0oJ3N0YXJ0X2RhdGUnKTsKICBlbHNlIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdvbmVfZGF0ZScpKQogICAgZGF0ZV9zdHIgPSAiJm9uZV9kYXRlPSIgKyBwbGFueW9fZ2V0X3BhcmFtKCdvbmVfZGF0ZScpOwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9IisocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfcmVzZXJ2YXRpb25fZm9ybV9jb2RlJnNpdGVfaWQ9IiArIHNpdGVfaWQgKyAiJnJlc291cmNlX2lkPSIgKyByZXNvdXJjZV9pZCArICImZmVlZGJhY2tfdXJsPSIgKyBwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkgKyBkYXRlX3N0cjsKICBwbGFueW9fZW1iZWRfY29kZShmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfYWRkaXRpb25hbF9wcm9kdWN0c19mb3JtKHJlc2VydmF0aW9uX2lkKSB7CiAgaWYgKHJlc2VydmF0aW9uX2lkKSB7CiAgICB2YXIgZm9ybV91cmwgPSBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQ7CiAgICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHBsYW55b19zZXR0aW5ncy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X2FkZGl0aW9uYWxfcHJvZHVjdHNfY29kZSZyZXNlcnZhdGlvbl9pZD0iICsgcmVzZXJ2YXRpb25faWQgKyAiJmZlZWRiYWNrX3VybD0iICsgcGxhbnlvX2dldF9jdXJyZW50X3VybCgpOwogICAgcGxhbnlvX2VtYmVkX2NvZGUoZm9ybV91cmwsZm9ybV91cmxfcGFyYW1zKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF91cGNvbWluZ19hdmFpbGFiaWxpdHlfc2VhcmNoX2Zvcm0oc2l0ZV9pZCkgewogIHZhciBmb3JtX3VybCA9IHBsYW55b19zZXR0aW5ncy51bGFwX3NjcmlwdDsKICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHBsYW55b19zZXR0aW5ncy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X3VwY29taW5nX2F2YWlsYWJpbGl0eV9zZWFyY2hfZm9ybV9jb2RlJmZlZWRiYWNrX3VybD0iICsgcGxhbnlvX2dldF9jdXJyZW50X3VybCgpICsgIiZleHRyYV9zZWFyY2hfZmllbGRzPSIgKyAocGxhbnlvX2dldF9wYXJhbSgnZXh0cmFfc2VhcmNoX2ZpZWxkcycpID8gcGxhbnlvX2dldF9wYXJhbSgnZXh0cmFfc2VhcmNoX2ZpZWxkcycpIDogcGxhbnlvX3NldHRpbmdzLmV4dHJhX3NlYXJjaF9maWVsZHMpICsgIiZzaXRlX2lkPSIrc2l0ZV9pZDsKICBwbGFueW9fZW1iZWRfY29kZSAoZm9ybV91cmwsIGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9zZWFyY2hfZm9ybShzaXRlX2lkKSB7CiAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9IisocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfc2VhcmNoX2Zvcm1fY29kZSZmZWVkYmFja191cmw9IiArIHBsYW55b19nZXRfY3VycmVudF91cmwoKSArICImZXh0cmFfc2VhcmNoX2ZpZWxkcz0iICsgKHBsYW55b19nZXRfcGFyYW0oJ2V4dHJhX3NlYXJjaF9maWVsZHMnKSA/IHBsYW55b19nZXRfcGFyYW0oJ2V4dHJhX3NlYXJjaF9maWVsZHMnKSA6IHBsYW55b19zZXR0aW5ncy5leHRyYV9zZWFyY2hfZmllbGRzKSArICImc2l0ZV9pZD0iICsgc2l0ZV9pZDsKICBpZiAocGxhbnlvX2lzc2V0KHBsYW55b19zZXR0aW5ncy5zb3J0X2ZpZWxkcykpCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZzb3J0X2ZpZWxkcz0iICsgcGxhbnlvX3NldHRpbmdzLnNvcnRfZmllbGRzOwogIHZhciByYW5nZV9zZWFyY2ggPSBwbGFueW9fZ2V0X3BhcmFtKCdyYW5nZV9zZWFyY2gnKTsKICBpZiAoIXJhbmdlX3NlYXJjaCkKICAgIHJhbmdlX3NlYXJjaCA9IGRvY3VtZW50LnJhbmdlX3NlYXJjaDsKICBpZiAocmFuZ2Vfc2VhcmNoKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICImcmFuZ2Vfc2VhcmNoPSIrcmFuZ2Vfc2VhcmNoOwogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdzZXBhcmF0ZS11bml0cycpKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICImc2VwYXJhdGUtdW5pdHM9MSI7CiAgdmFyIHNlYXJjaF9tb2RlbF9zaXRlID0gcGxhbnlvX2dldF9wYXJhbSgnc2VhcmNoX21vZGVsX3NpdGUnKTsKICBpZiAoc2VhcmNoX21vZGVsX3NpdGUpCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZzZWFyY2hfbW9kZWxfc2l0ZT0iK3NlYXJjaF9tb2RlbF9zaXRlOwogIHBsYW55b19lbWJlZF9jb2RlKGZvcm1fdXJsLCBmb3JtX3VybF9wYXJhbXMpOwp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfcmVzb3VyY2VfbGlzdChzaXRlX2lkKSB7CiAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9IisocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfcmVzb3VyY2VfbGlzdF9jb2RlJmZlZWRiYWNrX3VybD0iICsgcGxhbnlvX2dldF9jdXJyZW50X3VybCgpICsgIiZzaXRlX2lkPSIgKyBzaXRlX2lkOwogIGlmIChTdHJpbmcocGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkKS5pbmRleE9mKCdNJyk9PTApCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZtZXRhc2l0ZV9pZD0iK3BsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZC5zdWJzdHIoMSk7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3Jlc19maWx0ZXJfbmFtZScpKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICcmJyArIHBsYW55b19nZXRfcGFyYW0oJ3Jlc19maWx0ZXJfbmFtZScpICsgJz0nICsgcGxhbnlvX2dldF9wYXJhbSgncmVzX2ZpbHRlcl92YWx1ZScpOwogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdjYWxfZmlsdGVyX25hbWUnKSkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAnJicgKyBwbGFueW9fZ2V0X3BhcmFtKCdjYWxfZmlsdGVyX25hbWUnKSArICc9JyArIHBsYW55b19nZXRfcGFyYW0oJ2NhbF9maWx0ZXJfdmFsdWUnKTsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnc29ydCcpKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICcmc29ydD0nICsgcGxhbnlvX2dldF9wYXJhbSgnc29ydCcpOwogIGVsc2UgaWYgKHBsYW55b19zZXR0aW5ncy5wbGFueW9fcmVzb3VyY2Vfb3JkZXJpbmcpCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gJyZzb3J0PScgKyBwbGFueW9fc2V0dGluZ3MucGxhbnlvX3Jlc291cmNlX29yZGVyaW5nOwogIHBsYW55b19lbWJlZF9jb2RlKGZvcm1fdXJsLCBmb3JtX3VybF9wYXJhbXMpOwp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfc2l0ZV9saXN0KG1ldGFzaXRlX2lkKSB7CiAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9IisocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfc2l0ZV9saXN0X2NvZGUmZmVlZGJhY2tfdXJsPSIgKyBwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkgKyAiJm1ldGFzaXRlX2lkPSIgKyBtZXRhc2l0ZV9pZDsKICBwbGFueW9fZW1iZWRfY29kZShmb3JtX3VybCwgZm9ybV91cmxfcGFyYW1zKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX3Jlc291cmNlX2Rlc2MocmVzb3VyY2VfaWQsIHNpdGVfaWQpIHsKICBpZiAoIXJlc291cmNlX2lkKSB7CiAgICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5wbGFueW9fcmVzb3VyY2VfaWQpKQogICAgICByZXNvdXJjZV9pZCA9IHdpbmRvdy5wbGFueW9fcmVzb3VyY2VfaWQ7CiAgICBlbHNlCiAgICAgIHJlc291cmNlX2lkID0gJyc7CiAgfQogIHZhciBmb3JtX3VybCA9IHBsYW55b19zZXR0aW5ncy51bGFwX3NjcmlwdDsKICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHBsYW55b19zZXR0aW5ncy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X3NpbmdsZV9yZXNvdXJjZV9jb2RlJmZlZWRiYWNrX3VybD0iICsgcGxhbnlvX2dldF9jdXJyZW50X3VybCgpICsgIiZyZXNvdXJjZV9pZD0iICsgcmVzb3VyY2VfaWQgKyImc2l0ZV9pZD0iK3NpdGVfaWQ7CiAgcGxhbnlvX2VtYmVkX2NvZGUoZm9ybV91cmwsIGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIGluaXRfcGxhbnlvKCkgewogIGlmICh3aW5kb3cuRHJ1cGFsICYmICFwbGFueW9faXNzZXQod2luZG93LnBsYW55b19kb250X3VzZV9kcnVwYWxfcGx1Z2luKSkKICAgIHBsYW55b19zZXR0aW5ncyA9IERydXBhbC5zZXR0aW5ncy5wbGFueW87CiAgaWYoalF1ZXJ5KCcjcGxhbnlvX3ByaWNlX2hvbGRlcicpLmxlbmd0aCkKICAgIGpRdWVyeSgnI3BsYW55b19wcmljZV9ob2xkZXInKS5jc3MoJ2Rpc3BsYXknLCdub25lJykKICBpZiAoIXdpbmRvdy5EcnVwYWwgfHwgcGxhbnlvX2lzc2V0KHdpbmRvdy5wbGFueW9fZG9udF91c2VfZHJ1cGFsX3BsdWdpbikpIHsKICAgIHBsYW55b19zZXR0aW5ncy51bGFwX3NjcmlwdCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgocGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0KTsKICB9CiAgaWYgKHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCA9PSAnZGVtbycpCiAgICBwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQgPSAxMTsgLy8gZGlzcGxheSB0aGUgZGVtbyBzaXRlCiAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ2xhbmcnKSkKICAgIHBsYW55b19zZXR0aW5ncy5wbGFueW9fbGFuZ3VhZ2UgPSBwbGFueW9fZ2V0X3BhcmFtKCdsYW5nJyk7CiAgaWYgKCFwbGFueW9faW5pdF9zcGVjaWFsX21vZGVzKCkpIHsKICAgIHZhciBwbGFueW9fbW9kZSA9IGdldF9wbGFueW9fbW9kZSgpOwogICAgaWYgKHBsYW55b19tb2RlID09ICdlbXB0eScgJiYgcGxhbnlvX2dldF9wYXJhbSgnc3VibWl0dGVkJykpCiAgICAgIHBsYW55b19tb2RlID0gJ3Jlc2VydmUnOwogICAgaWYgKHBsYW55b19tb2RlID09ICdzZWFyY2gnKQogICAgICBwbGFueW9fZW1iZWRfc2VhcmNoX2Zvcm0ocGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkKTsKICAgIGVsc2UgaWYgKHBsYW55b19tb2RlID09ICd1cGNvbWluZ19hdmFpbGFiaWxpdHknKQogICAgICBwbGFueW9fZW1iZWRfdXBjb21pbmdfYXZhaWxhYmlsaXR5X3NlYXJjaF9mb3JtKHdpbmRvdy5wbGFueW9fc2l0ZV9pZCk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAncmVzZXJ2ZScpCiAgICAgIHBsYW55b19lbWJlZF9yZXNlcnZhdGlvbl9mb3JtKHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgncmVzb3VyY2VfaWQnKSk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAncmVzb3VyY2VfbGlzdCcpCiAgICAgIHBsYW55b19lbWJlZF9yZXNvdXJjZV9saXN0KChwbGFueW9fZ2V0X3BhcmFtKCdzaXRlX2lkJykgJiYgU3RyaW5nKHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCkuaW5kZXhPZignTScpPT0wKSA/IHBsYW55b19nZXRfcGFyYW0oJ3NpdGVfaWQnKSA6IHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAnc2l0ZV9saXN0JyAmJiBTdHJpbmcocGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkKS5pbmRleE9mKCdNJyk9PTApCiAgICAgIHBsYW55b19lbWJlZF9zaXRlX2xpc3QocGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkLnN1YnN0cigxKSk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAncmVzb3VyY2VfZGVzYycpCiAgICAgIHBsYW55b19lbWJlZF9yZXNvdXJjZV9kZXNjKHBsYW55b19nZXRfcGFyYW0oJ3Jlc291cmNlX2lkJyksIHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAnZW1wdHknKQogICAgICBqUXVlcnkoJyNwbGFueW9fY29udGVudCcpLmh0bWwoJycpOwogIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/planyo-jquery-utils.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gJElkJAoKZnVuY3Rpb24gcGxhbnlvX2dldF9uZXh0X21vbnRoKG1vbnRoLCB5ZWFyKSB7CiAgdmFyIG5leHRfbW9udGggPSBtb250aCArIDE7CiAgdmFyIG5leHRfeWVhciA9IHllYXI7CiAgaWYgKG5leHRfbW9udGggPT0gMTMpIHsKICAgIG5leHRfbW9udGggPSAxOwogICAgbmV4dF95ZWFyKys7CiAgfQogIHJldHVybiBuZXcgQXJyYXkobmV4dF9tb250aCwgbmV4dF95ZWFyKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9wcmV2X21vbnRoKG1vbnRoLCB5ZWFyKSB7CiAgdmFyIHByZXZfbW9udGggPSBtb250aCAtIDE7CiAgdmFyIHByZXZfeWVhciA9IHllYXI7CiAgaWYgKHByZXZfbW9udGggPT0gMCkgewogICAgcHJldl9tb250aCA9IDEyOwogICAgcHJldl95ZWFyLS07CiAgfQogIHJldHVybiBuZXcgQXJyYXkocHJldl9tb250aCwgcHJldl95ZWFyKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9tb250aF9zcGVjcyAobW9udGgsIHllYXIpIHsKICAvLyByZXR1cm5zIGFuIGFycmF5OiAob2Zmc2V0IG9mIHRoZSBmaXJzdCBkYXkgb2YgbW9udGgsICMgb2YgZGF5cyBpbiBsYXN0IG1vbnRoLCAjIG9mIGRheXMgaW4gY3VycmVudCBtb250aCwgbW9udGgsIHllYXIpCiAgICAgIAogIHZhciBkID0gbmV3IERhdGUoKTsKICBpZiAoIW1vbnRoIHx8ICF5ZWFyKQogICAgZC5zZXRGdWxsWWVhcihkLmdldEZ1bGxZZWFyICgpLCBkLmdldE1vbnRoICgpLCAxKTsKICBlbHNlCiAgICBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoIC0gMSwgMSk7CiAgdmFyIGZpcnN0X3dlZWtkYXkgPSBwbGFueW9faXNzZXQoZG9jdW1lbnQuZmlyc3Rfd2Vla2RheSkgPyBkb2N1bWVudC5maXJzdF93ZWVrZGF5IDogMTsKICB2YXIgZmlyc3Rfb2Zmc2V0ID0gKDcgLSBmaXJzdF93ZWVrZGF5ICsgZC5nZXREYXkoKSkgJSA3OwogIHZhciBsYXN0X21vbnRoX2xhc3RfZGF0ZSA9IG5ldyBEYXRlKGQpOwogIGxhc3RfbW9udGhfbGFzdF9kYXRlLnNldERhdGUoZC5nZXREYXRlKCktMSk7CiAgdmFyIHByZXZfbW9udGhfY291bnQgPSBsYXN0X21vbnRoX2xhc3RfZGF0ZS5nZXREYXRlKCk7CiAgdmFyIHRoaXNfbW9udGhfbGFzdF9kYXRlID0gbmV3IERhdGUoZCk7CiAgdGhpc19tb250aF9sYXN0X2RhdGUuc2V0TW9udGgoZC5nZXRNb250aCgpICsgMSk7CiAgdGhpc19tb250aF9sYXN0X2RhdGUuc2V0RGF0ZSh0aGlzX21vbnRoX2xhc3RfZGF0ZS5nZXREYXRlKCkgLSAxKTsKICB2YXIgdGhpc19tb250aF9jb3VudCA9IHRoaXNfbW9udGhfbGFzdF9kYXRlLmdldERhdGUoKTsKICByZXR1cm4gbmV3IEFycmF5KGZpcnN0X29mZnNldCwgcHJldl9tb250aF9jb3VudCwgdGhpc19tb250aF9jb3VudCwgbW9udGgsIHllYXIpOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2RheV9uYW1lKG4sIGlzX3Nob3J0KSB7CiAgdmFyIGZpcnN0X3dlZWtkYXkgPSBwbGFueW9faXNzZXQoZG9jdW1lbnQuZmlyc3Rfd2Vla2RheSkgPyBkb2N1bWVudC5maXJzdF93ZWVrZGF5IDogMTsKICAvLyBkYXkgbmFtZXMgYXJlIGltcG9ydGVkIGZyb20gcGxhbnlvLmNvbSB1c2luZyB0aGUgY2hvc2VuIGxhbmd1YWdlOyBvbmx5IGlmIG5vIHRyYW5zbGF0aW9ucyBhcmUgZm91bmQsIHRoZSBFbmdsaXNoIHZlcnNpb25zIGFyZSB1c2VkCiAgdmFyIGFyciA9IHBsYW55b19pc3NldChkb2N1bWVudC5zX3dlZWtkYXlzX3Nob3J0KSA/IChpc19zaG9ydCA/IGRvY3VtZW50LnNfd2Vla2RheXNfc2hvcnQgOiBkb2N1bWVudC5zX3dlZWtkYXlzX21lZCkgOgogICAgKGlzX3Nob3J0ID8gbmV3IEFycmF5KCJNIiwgIlQiLCAiVyIsICJUIiwgIkYiLCAiUyIsICJTIikgOiBuZXcgQXJyYXkoIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biIpKTsKICByZXR1cm4gYXJyIFsobiArIGZpcnN0X3dlZWtkYXkgKyA2KSAlIDddOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X21vbnRoX25hbWUobiwgaXNfc2hvcnQpIHsKICAvLyBtb250aCBuYW1lcyBhcmUgaW1wb3J0ZWQgZnJvbSBwbGFueW8uY29tIHVzaW5nIHRoZSBjaG9zZW4gbGFuZ3VhZ2U7IG9ubHkgaWYgbm8gdHJhbnNsYXRpb25zIGFyZSBmb3VuZCwgdGhlIEVuZ2xpc2ggdmVyc2lvbnMgYXJlIHVzZWQKICB2YXIgYXJyID0gcGxhbnlvX2lzc2V0KGRvY3VtZW50LnNfbW9udGhzX3Nob3J0KSA/IChpc19zaG9ydCA/IGRvY3VtZW50LnNfbW9udGhzX3Nob3J0IDogZG9jdW1lbnQuc19tb250aHNfbG9uZykgOgogICAgKGlzX3Nob3J0ID8gbmV3IEFycmF5KCJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIpIDogbmV3IEFycmF5KCJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgIk1hcmNoIiwgIkFwcmlsIiwgIk1heSIsICJKdW5lIiwgIkp1bHkiLCAiQXVndXN0IiwgIlNlcHRlbWJlciIsICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIikpOwogIHJldHVybiBhcnIgW24gLSAxXTsKfQoKZnVuY3Rpb24gcGxhbnlvX291dHB1dF9ob3VyX29ubHkoaG91ciwgZXVyb3BlYW5fc3R5bGVfcG9zdGZpeCkgewogIGlmIChkb2N1bWVudC50aW1lX2Zvcm1hdCAmJiBkb2N1bWVudC50aW1lX2Zvcm1hdC5pbmRleE9mKCdhJykgIT0gLTEpCiAgICByZXR1cm4gKChob3VyICUgMTIpID09IDAgPyAxMiA6IGhvdXIgJSAxMikgKyAnICcrIChob3VyIDwgMTIgPyAnYW0nIDogJ3BtJyk7CiAgcmV0dXJuIGhvdXIgKyAoZXVyb3BlYW5fc3R5bGVfcG9zdGZpeCA/IGV1cm9wZWFuX3N0eWxlX3Bvc3RmaXggOiAnJyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19vdXRwdXRfdGltZShob3VyLCBtaW51dGUpIHsKICB2YXIgdGltZV9zdHIgPSBkb2N1bWVudC50aW1lX2Zvcm1hdDsKICBpZiAoIXRpbWVfc3RyKQogICAgdGltZV9zdHIgPSAiSDppIjsKICB0aW1lX3N0ciA9IHRpbWVfc3RyLnJlcGxhY2UoIkgiLCBob3VyKTsKICB0aW1lX3N0ciA9IHRpbWVfc3RyLnJlcGxhY2UoImgiLCAoaG91ciAlIDEyKSA9PSAwID8gMTIgOiBob3VyICUgMTIpOwogIHRpbWVfc3RyID0gdGltZV9zdHIucmVwbGFjZSgiYSIsIGhvdXIgPCAxMiA/ICdhbScgOiAncG0nKTsKICB0aW1lX3N0ciA9IHRpbWVfc3RyLnJlcGxhY2UoImkiLCBtaW51dGUgPCAxMCA/ICcwJyArIG1pbnV0ZSA6IG1pbnV0ZSk7CiAgcmV0dXJuIHRpbWVfc3RyOwp9CgpmdW5jdGlvbiBwbGFueW9fb3V0cHV0X2RhdGUoeWVhciwgbW9udGgsIGRheSkgewogIHZhciBkYXRlID0gZG9jdW1lbnQuZGF0ZV9mb3JtYXQ7CiAgaWYgKCFkYXRlKQogICAgZGF0ZSA9ICJZLW0tZCI7CiAgZGF0ZSA9IGRhdGUucmVwbGFjZSgiWSIsIHllYXIpOwogIGRhdGUgPSBkYXRlLnJlcGxhY2UoIm0iLCBtb250aCA8IDEwID8gJzAnK21vbnRoIDogbW9udGgpOwogIGRhdGUgPSBkYXRlLnJlcGxhY2UoIk0iLCBwbGFueW9fZ2V0X21vbnRoX25hbWUobW9udGgsIHRydWUpKTsKICBkYXRlID0gZGF0ZS5yZXBsYWNlKCJkIiwgZGF5IDwgMTAgPyAnMCcgKyBkYXkgOiBkYXkpOwogIHJldHVybiBkYXRlOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2RheV9pbmZvX2Zvcl9tb250aChtb250aCwgeWVhcikgewogIHZhciBub3cgPSBuZXcgRGF0ZSgpOwoKICB2YXIgZGF5X2luZm8gPSBuZXcgQXJyYXkoKTsKICAKICB2YXIgbW9udGhfc3BlY3MgPSBwbGFueW9fZ2V0X21vbnRoX3NwZWNzKG1vbnRoLCB5ZWFyKTsKICB2YXIgZGF5X2l0ZXJhdG9yID0gbW9udGhfc3BlY3MgWzFdIC0gbW9udGhfc3BlY3MgWzBdICsgMTsKICB2YXIgZGF5c19pbl9tb250aF9sZWZ0ID0gbW9udGhfc3BlY3MgWzBdIC0gMTsKICB2YXIgbW9udGhfaXRlcmF0b3IgPSAtMTsKICBpZiAoZGF5c19pbl9tb250aF9sZWZ0ID09IC0xKSB7CiAgICBtb250aF9pdGVyYXRvciA9IDA7CiAgICBkYXlzX2luX21vbnRoX2xlZnQgPSBtb250aF9zcGVjcyBbMl0gLSAxOwogICAgZGF5X2l0ZXJhdG9yID0gMTsKICB9CiAgZm9yICh2YXIgeSA9IDA7IHkgPCA2OyB5KyspIHsKICAgIGRheV9pbmZvIFt5XSA9IG5ldyBBcnJheSgpOwogICAgZm9yICh2YXIgeCA9IDA7IHggPCA3OyB4KyspIHsKICAgICAgZGF5X2luZm8gW3ldW3hdID0gbmV3IEFycmF5KCk7CiAgICAgIHZhciBkYXlfY2xhc3M7CiAgICAgIGlmIChtb250aCAtIDEgPT0gbm93LmdldE1vbnRoKCkgJiYgbW9udGhfaXRlcmF0b3IgPT0gMCAmJiBkYXlfaXRlcmF0b3IgPT0gbm93LmdldERhdGUoKSAmJiB5ZWFyID09IG5vdy5nZXRGdWxsWWVhciAoKSkKCWRheV9jbGFzcyA9ICdhY3RpdmVfZGF5JzsKICAgICAgZWxzZQoJZGF5X2NsYXNzID0gKG1vbnRoX2l0ZXJhdG9yID09IDAgPyAnY3VyX21vbnRoX2RheScgOiAnZXh0X21vbnRoX2RheScpOwoKICAgICAgZGF5X2luZm9beV1beF1bJ3R5cGUnXSA9IGRheV9jbGFzczsKICAgICAgZGF5X2luZm9beV1beF1bJ2RheSddID0gZGF5X2l0ZXJhdG9yOwogICAgICBkYXlfaW5mb1t5XVt4XVsnbW9udGgnXSA9IG1vbnRoICsgbW9udGhfaXRlcmF0b3I7CiAgICAgIGRheV9pbmZvW3ldW3hdWyd5ZWFyJ10gPSB5ZWFyOwogICAgICBpZiAobW9udGggKyBtb250aF9pdGVyYXRvciA9PSAwKSB7CglkYXlfaW5mb1t5XVt4XVsnbW9udGgnXSA9IDEyOwoJZGF5X2luZm9beV1beF1bJ3llYXInXSA9IHllYXIgLSAxOwogICAgICB9IGVsc2UgaWYgKG1vbnRoICsgbW9udGhfaXRlcmF0b3IgPT0gMTMpIHsKCWRheV9pbmZvW3ldW3hdWydtb250aCddID0gMTsKCWRheV9pbmZvW3ldW3hdWyd5ZWFyJ10gPSB5ZWFyICsgMTsKICAgICAgfQogICAgICAKICAgICAgaWYgKGRheXNfaW5fbW9udGhfbGVmdCA9PSAwKSB7Cgltb250aF9pdGVyYXRvcisrOwoJZGF5c19pbl9tb250aF9sZWZ0ID0gbW9udGhfc3BlY3MgWzJdOwoJZGF5X2l0ZXJhdG9yID0gMDsKICAgICAgfQogICAgICBkYXlzX2luX21vbnRoX2xlZnQtLTsKICAgICAgZGF5X2l0ZXJhdG9yKys7CiAgICB9CiAgfQoKICByZXR1cm4gZGF5X2luZm87Cn0KCmZ1bmN0aW9uIHBsYW55b19zaG93X2NhbGVuZGFyX3BpY2tlcihtb250aCwgeWVhciwgZGl2X2lkLCBkYXRlX2Z1bikgewogIHZhciBub3cgPSBuZXcgRGF0ZSgpOwogIGlmIChtb250aCA9PSBudWxsICYmIHllYXIgPT0gbnVsbCkgewogICAgbW9udGggPSBub3cuZ2V0TW9udGgoKSArIDE7CiAgICB5ZWFyID0gbm93LmdldEZ1bGxZZWFyKCk7CiAgfQogIGVsc2UgaWYgKG1vbnRoID09IDApIHsKICAgIG1vbnRoID0gMTI7CiAgICB5ZWFyLS07CiAgfQogIGVsc2UgaWYgKG1vbnRoID09IDEzKSB7CiAgICBtb250aCA9IDE7CiAgICB5ZWFyKys7CiAgfQogIHZhciBkYXlfaW5mbyA9IHBsYW55b19nZXRfZGF5X2luZm9fZm9yX21vbnRoKG1vbnRoLCB5ZWFyKTsKICAKICB2YXIgZGl2X2NvZGUgPSAiPHRhYmxlIGNsYXNzPSdjYWxwaWNrZXInPjxjYXB0aW9uPjxhIGNsYXNzPSduYXYnIGhyZWY9XCJqYXZhc2NyaXB0OnBsYW55b19zaG93X2NhbGVuZGFyX3BpY2tlcigiICsgKG1vbnRoLTEpICsgIiwgIiArIHllYXIgKyAiLCAnIiArIGRpdl9pZCArICInLCciICsgZGF0ZV9mdW4gKyAiJyk7XCI+JmxhcXVvOzwvYT48YSBjbGFzcz0nbmF2JyBocmVmPVwiamF2YXNjcmlwdDpwbGFueW9fc2hvd19jYWxlbmRhcl9waWNrZXIoIiArIChtb250aCArIDEpICsgIiwiICsgeWVhciArICIsICciICsgZGl2X2lkICsgIicsJyIgKyBkYXRlX2Z1biArICInKTtcIj4mcmFxdW87PC9hPiAiICsgcGxhbnlvX2dldF9tb250aF9uYW1lKG1vbnRoLCBmYWxzZSkgKyAiICIgKyB5ZWFyICsgIjwvY2FwdGlvbj48dGhlYWQ+PHRyPiI7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCA3OyBpKyspIHsKICAgIGRpdl9jb2RlICs9ICI8dGg+IiArIHBsYW55b19nZXRfZGF5X25hbWUoaSwgdHJ1ZSkgKyAiPC90aD4iOwogIH0KICBkaXZfY29kZSArPSAiPC90aGVhZD48dGJvZHk+IjsKICBmb3IgKHZhciB5ID0gMDsgeSA8IDY7IHkrKykgewogICAgZGl2X2NvZGUgKz0gIjx0cj4iOwogICAgZm9yICh2YXIgeCA9IDA7IHggPCA3OyB4KyspIHsKICAgICAgZGl2X2NvZGUgKz0gIjx0ZCBjbGFzcz0nIiArIGRheV9pbmZvW3ldW3hdWyd0eXBlJ10gKyAiJyBvbmNsaWNrPSciICsgZGF0ZV9mdW4gKyAiKCIgKyBkYXlfaW5mb1t5XVt4XVsnZGF5J10gKyAiLCIgKyBkYXlfaW5mb1t5XVt4XVsnbW9udGgnXSArICIsIiArIGRheV9pbmZvW3ldW3hdWyd5ZWFyJ10gKyAiKSc+IiArIGRheV9pbmZvW3ldW3hdWydkYXknXSArICI8L3RkPiI7CiAgICB9CiAgICBkaXZfY29kZSArPSAiPC90cj4iOwogIH0KICBkaXZfY29kZSArPSAiPC90cj4iOwogIGRpdl9jb2RlICs9ICI8L3Rib2R5PjwvdGFibGU+IjsKICBqUXVlcnkoJyMnICsgZGl2X2lkKS5odG1sKGRpdl9jb2RlKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9wcmV2X2RheShkYXksIG1vbnRoLCB5ZWFyLCBvZmZzZXQpIHsKICAvLyByZXR1cm5zIGFuIGFycmF5OiAoZGF5LCBtb250aCwgeWVhcikKICAvLyBub3RlOiBvZmZzZXQgbXVzdCBiZSA8IDI4CiAgCiAgdmFyIHNwZWNzID0gcGxhbnlvX2dldF9tb250aF9zcGVjcyhtb250aCwgeWVhcik7CgogIHZhciByZXRfdmFsID0gbmV3IEFycmF5ICgpOwogIGlmICghb2Zmc2V0KSBvZmZzZXQgPSAxOwogIGlmIChkYXkgLSBvZmZzZXQgPD0gMCkgewogICAgcmV0X3ZhbFswXSA9IHNwZWNzWzFdIC0gb2Zmc2V0ICsgZGF5OwogICAgcmV0X3ZhbFsxXSA9IG1vbnRoIC0gMTsKICAgIHJldF92YWxbMl0gPSB5ZWFyOwogICAgaWYgKHJldF92YWxbMV0gPT0gMCkgewogICAgICByZXRfdmFsWzFdID0gMTI7CiAgICAgIHJldF92YWxbMl0gPSB5ZWFyIC0gMTsKICAgIH0KICB9CiAgZWxzZSB7CiAgICByZXRfdmFsWzBdID0gZGF5IC0gb2Zmc2V0OwogICAgcmV0X3ZhbFsxXSA9IG1vbnRoOwogICAgcmV0X3ZhbFsyXSA9IHllYXI7CiAgfQogIHJldHVybiByZXRfdmFsOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X25leHRfZGF5KGRheSwgbW9udGgsIHllYXIsIG9mZnNldCkgewogIC8vIHJldHVybnMgYW4gYXJyYXk6IChkYXksIG1vbnRoLCB5ZWFyKQogIC8vIG5vdGU6IG9mZnNldCBtdXN0IGJlIDwgMjgKICAKICB2YXIgc3BlY3MgPSBwbGFueW9fZ2V0X21vbnRoX3NwZWNzKG1vbnRoLCB5ZWFyKTsKCiAgdmFyIHJldF92YWwgPSBuZXcgQXJyYXkgKCk7CiAgaWYgKCFvZmZzZXQpIG9mZnNldCA9IDE7CiAgaWYgKGRheSArIG9mZnNldCA+IHNwZWNzIFsyXSkgewogICAgcmV0X3ZhbFswXSA9IGRheSArIG9mZnNldCAtIHNwZWNzIFsyXTsKICAgIHJldF92YWxbMV0gPSBtb250aCArIDE7CiAgICByZXRfdmFsWzJdID0geWVhcjsKICAgIGlmIChyZXRfdmFsWzFdID09IDEzKSB7CiAgICAgIHJldF92YWxbMV0gPSAxOwogICAgICByZXRfdmFsWzJdID0geWVhciArIDE7CiAgICB9CiAgfQogIGVsc2UgewogICAgcmV0X3ZhbFswXSA9IGRheSArIG9mZnNldDsKICAgIHJldF92YWxbMV0gPSBtb250aDsKICAgIHJldF92YWxbMl0gPSB5ZWFyOwogIH0KICByZXR1cm4gcmV0X3ZhbDsKfQoKLy8gcmV0dXJucyBhbiBhcnJheSAobWluLCBtYXgpIG9mIG1pbiBhbmQgbWF4IHZhbHVlcyBvZiBhcnJheQovLyBpZiBhcnJheSdzIHZhbHVlcyBhcmUgYW4gYXJyYXkgb2YgcHJvcGVydGllcywgcHJvcGVydHkgdG8gYmUgdXNlZCBjYW4gYmUgc3BlY2lmaWVkCi8vIG90aGVyd2lzZSwgbGVhdmUgcHJvcGVydHkgbnVsbApmdW5jdGlvbiBwbGFueW9fZ2V0X2FycmF5X21pbl9tYXgoYXJyLCBwcm9wZXJ0eSkgewogIHZhciBtaW47CiAgdmFyIG1heDsKICB2YXIgbiA9IDA7CiAgZm9yICh2YXIgaXQgaW4gYXJyKSB7CiAgICB2YXIgdmFsID0gKHByb3BlcnR5ID8gaXQgW3Byb3BlcnR5XSA6IGl0KTsKICAgIGlmIChuID09IDAgfHwgdmFsIDwgbWluKQogICAgICBtaW4gPSB2YWw7CiAgICBpZiAobiA9PSAwIHx8IHZhbCA+IG1heCkKICAgICAgbWF4ID0gdmFsOwogICAgbisrOwogIH0KICByZXR1cm4gbmV3IEFycmF5KG1pbixtYXgpOwp9CgpmdW5jdGlvbiBwbGFueW9fY29uZmlybV9hY3Rpb25fd2l0aF9pbnB1dCh0ZXh0KSB7CiAgcmV0dXJuIHByb21wdCh0ZXh0KTsKfQoKZnVuY3Rpb24gcGxhbnlvX2NvbmZpcm1fYWN0aW9uKHRleHQpIHsKICBpZiAoY29uZmlybSh0ZXh0KSkKICAgIHJldHVybiB0cnVlOwogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX2lzc2V0KG9iaiwgZDEsIGQyLCBkMywgZDQsIGQ1KSB7CiAgdHJ5IHsKICAgIGlmIChkNSAhPSBudWxsKQogICAgICByZXR1cm4gb2JqW2QxXVtkMl1bZDNdW2Q0XVtkNV0gIT0gdW5kZWZpbmVkOwogICAgaWYgKGQ0ICE9IG51bGwpCiAgICAgIHJldHVybiBvYmpbZDFdW2QyXVtkM11bZDRdICE9IHVuZGVmaW5lZDsKICAgIGlmIChkMyAhPSBudWxsKQogICAgICByZXR1cm4gb2JqW2QxXVtkMl1bZDNdICE9IHVuZGVmaW5lZDsKICAgIGlmIChkMiAhPSBudWxsKQogICAgICByZXR1cm4gb2JqW2QxXVtkMl0gIT0gdW5kZWZpbmVkOwogICAgaWYgKGQxICE9IG51bGwpCiAgICAgIHJldHVybiBvYmpbZDFdICE9IHVuZGVmaW5lZDsKICAgIHJldHVybiBvYmogIT0gdW5kZWZpbmVkOwogIH0KICBjYXRjaCAoZXJyKSB7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX2Nsb3NlX2NhbGVuZGFyKCkgewogIGlmIChkb2N1bWVudC5jdXJyZW50X3BpY2tlcikgewogICAgdmFyIGVsID0galF1ZXJ5KCcjJyArIGRvY3VtZW50LmN1cnJlbnRfcGlja2VyICsgJ2NhbCcpOwogICAgZWwuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpOwogICAgZWwuY3NzKCdsZWZ0JywgJy0xMDAwJyk7CiAgfQp9CgpmdW5jdGlvbiBjb252ZXJ0X2VudGl0aWVzX3RvX3V0ZjggKHN0cikgewogIHZhciBpID0gc3RyLmluZGV4T2YgKCImIyIpOw0KICB3aGlsZSAoaSAhPSAtMSkgewogICAgdmFyIGlTQyA9IHN0ci5pbmRleE9mICgiOyIsIGkpOwogICAgaWYgKGlTQyAhPSAtMSAmJiAoaVNDIC0gaSAtIDIpID4gMCAmJiAoaVNDIC0gaSAtIDIpIDw9IDUpIHsKICAgICAgdmFyIGRlY2ltYWwgPSBzdHIuc3Vic3RyIChpICsgMiwgaVNDIC0gaSAtIDIpOwogICAgICBpZiAoIWlzTmFOIChkZWNpbWFsKSAmJiBkZWNpbWFsID09IHBhcnNlSW50IChkZWNpbWFsKSkgewogICAgICAgIHN0ciA9IHN0ci5zdWJzdHIgKDAsIGkpICsgU3RyaW5nLmZyb21DaGFyQ29kZSAoZGVjaW1hbCkgKyAoKHN0ci5sZW5ndGggPiBpU0MgKyAxKSA/IHN0ci5zdWJzdHIgKGlTQyArIDEpIDogJycpOwogICAgICB9CiAgICB9CiAgICBpID0gc3RyLmluZGV4T2YgKCImIyIsIGkgKyAxKTsKICB9ICAKICByZXR1cm4gc3RyOwp9CgpmdW5jdGlvbiBwbGFueW9fY2FsZW5kYXJfZGF0ZV9jaG9zZW4oZGF5LCBtb250aCwgeWVhcikgewogIHZhciBwaWNrZXIgPSBqUXVlcnkoJyMnICsgZG9jdW1lbnQuY3VycmVudF9waWNrZXIpOwogIHBpY2tlci52YWwoY29udmVydF9lbnRpdGllc190b191dGY4IChwbGFueW9fb3V0cHV0X2RhdGUoeWVhciwgbW9udGgsIGRheSkpKTsKICBpZiAoZG9jdW1lbnQuY3VycmVudF9waWNrZXJfb25jaGFuZ2UpCiAgICBldmFsKGRvY3VtZW50LmN1cnJlbnRfcGlja2VyX29uY2hhbmdlKTsKICBkb2N1bWVudC5wcmV2aW91c19tb250aF9waWNrZWQgPSBtb250aDsKICBkb2N1bWVudC5wcmV2aW91c195ZWFyX3BpY2tlZCA9IHllYXI7CiAgcGxhbnlvX2Nsb3NlX2NhbGVuZGFyKCk7CiAgaWYgKHdpbmRvdy5qc19uYXYpIHsKICAgIGlmIChkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9PSAnc3RhcnRfZGF0ZScpCiAgICAgIGpzX25hdihudWxsLCBtb250aCwgeWVhcik7CiAgICBlbHNlIGlmIChkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9PSAnb25lX2RhdGUnIHx8IGRvY3VtZW50LmN1cnJlbnRfcGlja2VyID09ICdkYXRlJykKICAgICAganNfbmF2KGRheSwgbW9udGgsIHllYXIpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX3Nob3dfY2FsZW5kYXIoY2FsLG9uY2hhbmdlKSB7CiAgdmFyIGNhbF9lbCA9IGpRdWVyeSgnIycgKyBjYWwpOwogIHZhciBjYWxfcmVmX2VsID0galF1ZXJ5KCcjJyArIGNhbCArICdjYWxyZWYnKTsKICB2YXIgb2xkX2RhdGUgPSBEYXRlLnBhcnNlKGNhbF9lbC52YWwoKSk7CiAgaWYgKCFjYWxfZWwudmFsKCkpIHsKICAgIGlmICghZG9jdW1lbnQuY3VycmVudF9waWNrZXIpIHsKICAgICAgaWYgKGpRdWVyeSgnI3N0YXJ0X2RhdGUnKSkKICAgICAgICBkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9ICdzdGFydF9kYXRlJzsKICAgICAgZWxzZSBpZiAoalF1ZXJ5KCcjb25lX2RhdGUnKSkKICAgICAgICBkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9ICdvbmVfZGF0ZSc7CiAgICB9CiAgICB2YXIgcGlja2VyID0galF1ZXJ5KCcjJyArIGRvY3VtZW50LmN1cnJlbnRfcGlja2VyKTsKICAgIGlmIChwaWNrZXIpCiAgICAgIG9sZF9kYXRlID0gRGF0ZS5wYXJzZShwaWNrZXIudmFsKCkpOwogIH0KICBkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9IGNhbDsKICBkb2N1bWVudC5jdXJyZW50X3BpY2tlcl9vbmNoYW5nZSA9IG9uY2hhbmdlOwogIHZhciBtb250aCA9IG51bGw7CiAgdmFyIHllYXIgPSBudWxsOwogIGlmIChkb2N1bWVudC5wcmV2aW91c195ZWFyX3BpY2tlZCAhPSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5wcmV2aW91c19tb250aF9waWNrZWQgIT0gJ3VuZGVmaW5lZCcpIHsKICAgIG1vbnRoID0gZG9jdW1lbnQucHJldmlvdXNfbW9udGhfcGlja2VkOwogICAgeWVhciA9IGRvY3VtZW50LnByZXZpb3VzX3llYXJfcGlja2VkOwogIH0KICBpZiAob2xkX2RhdGUgIT0gJ3VuZGVmaW5lZCcgJiYgb2xkX2RhdGUgPiAwKSB7CiAgICB2YXIgb2xkX2RhdGVfb2JqID0gbmV3IERhdGUoKTsKICAgIG9sZF9kYXRlX29iai5zZXRUaW1lKG9sZF9kYXRlKTsKICAgIG1vbnRoID0gb2xkX2RhdGVfb2JqLmdldE1vbnRoKCkgKyAxOwogICAgeWVhciA9IG9sZF9kYXRlX29iai5nZXRGdWxsWWVhcigpOwogIH0KICB2YXIgY2FsX2NhbF9lbCA9IGpRdWVyeSgnIycgKyBjYWwgKyAnY2FsJyk7CiAgaWYgKGNhbF9jYWxfZWwucGFyZW50KCkgIT0galF1ZXJ5KCdib2R5JykpIAogICAgalF1ZXJ5KCdib2R5JykuYXBwZW5kKGNhbF9jYWxfZWwpOwogIHBsYW55b19zaG93X2NhbGVuZGFyX3BpY2tlciAobW9udGgsIHllYXIsIGNhbCArICdjYWwnLCAncGxhbnlvX2NhbGVuZGFyX2RhdGVfY2hvc2VuJyk7CiAgY2FsX2NhbF9lbC5jc3MoJ2xlZnQnLCBjYWxfcmVmX2VsLm9mZnNldCgpLmxlZnQgKyAncHgnKTsKICBjYWxfY2FsX2VsLmNzcygndG9wJywgKGNhbF9yZWZfZWwub2Zmc2V0KCkudG9wICsgY2FsX3JlZl9lbC5oZWlnaHQoKSArIDUpICsgJ3B4Jyk7CiAgY2FsX2NhbF9lbC5jc3MoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X3BhcmFtKG5hbWUpIHsKICBuYW1lID0gbmFtZS5yZXBsYWNlKC9bXFtdLywiXFxcWyIpLnJlcGxhY2UoL1tcXV0vLCJcXFxdIik7CiAgdmFyIHJlZ2V4UyA9ICJbXFw/Jl0iK25hbWUrIj0oW14mI10qKSI7CiAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFMpOwogIHZhciByZXN1bHRzID0gcmVnZXguZXhlYyh3aW5kb3cubG9jYXRpb24uaHJlZik7CiAgaWYgKHJlc3VsdHMgPT0gbnVsbCkKICAgIHJldHVybiBudWxsOwogIGVsc2UKICAgIHJldHVybiByZXN1bHRzWzFdOwp9CgpmdW5jdGlvbiBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKG5hbWUpIHsKICB2YXIgbG9jID0gd2luZG93LnBsYW55b19maWxlc19sb2NhdGlvbjsKICBpZiAoIWxvYykKICAgIGxvYyA9IHBsYW55b19zZXR0aW5ncy5wbGFueW9fZmlsZXNfbG9jYXRpb247CiAgaWYgKGxvYy5sZW5ndGggPT0gMCB8fCBsb2MubGFzdEluZGV4T2YoJy8nKSA9PSBsb2MubGVuZ3RoIC0gMSkKICAgIHJldHVybiBsb2MgKyBuYW1lOwogIGVsc2UKICAgIHJldHVybiBsb2MgKyAnLycgKyBuYW1lOwp9CgpmdW5jdGlvbiBzaG93X3Byb2R1Y3RfaW1hZ2VzIChwYXJlbnRfLCBpZCkgewogIHZhciBib3ggPSBqUXVlcnkoJyNwcm9kdWN0X2JveF8nICsgaWQpOwogIHZhciBwYXJlbnQgPSBqUXVlcnkgKHBhcmVudF8pOwogIGlmIChib3ggJiYgcGFyZW50KSB7ICAgIAogICAgYm94LmNzcygndG9wJywgcGFyZW50Lm9mZnNldCgpLnRvcCArICdweCcpOwogICAgYm94LmNzcygnbGVmdCcsIChwYXJlbnQub2Zmc2V0KCkubGVmdCArIDMwKSArICdweCcpOwogICAgYm94LmNzcygnZGlzcGxheScsICcnKTsKICB9ICAKfQoKZnVuY3Rpb24gaGlkZV9wcm9kdWN0X2ltYWdlcyAoaWQpIHsKICB2YXIgYm94ID0galF1ZXJ5ICgnI3Byb2R1Y3RfYm94XycgKyBpZCk7CiAgaWYgKGJveCkgewogICAgYm94LmNzcygnZGlzcGxheScsICdub25lJyk7CiAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/planyo-plugin-impl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJHBsYW55b19zZXRfY29udGVudF90eXBlKSkKICBAaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIpOyAgCiRoZWFkZXJfd3JpdHRlbiA9IHRydWU7CgpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy91bGFwLnBocCcpOwoKZnVuY3Rpb24gcGxhbnlvX2dldF9hdHRyaWJzX2FzX2FycmF5ICgkc3RyKSB7CiAgJGFycmF5ID0gYXJyYXkgKCk7CiAgJHBhaXJzID0gZXhwbG9kZSgnJicsICRzdHIpOyAgCiAgaWYgKCRwYWlycyAmJiBpc19hcnJheSAoJHBhaXJzKSkgeyAgCiAgICBmb3JlYWNoKCRwYWlycyBhcyAkcGFpcikgewogICAgICBpZiAoaXNfc3RyaW5nKCRwYWlyKSAmJiBzdHJwb3MoJHBhaXIsICc9JykgIT09IGZhbHNlKSB7IAogICAgICAgIGxpc3QoJG5hbWUsICR2YWx1ZSkgPSBleHBsb2RlKCc9JywgJHBhaXIsIDIpOwogICAgICAgICRuYW1lID0gdHJpbSAoJG5hbWUpOwogICAgICAgICR2YWx1ZSA9IHRyaW0gKCR2YWx1ZSk7CiAgICAgICAgaWYgKGlzX3N0cmluZyAoJG5hbWUpICYmIHN0cmxlbiAoJG5hbWUpID4gMCkKICAgICAgICAgICRhcnJheSBbJG5hbWVdID0gJHZhbHVlOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiAkYXJyYXk7Cn0KCmZ1bmN0aW9uIHBsYW55b19zaG91bGRfdXNlX2F0dHJpYnMoKSB7CiAgcmV0dXJuICEoaXNzZXQoJF9HRVRbJ21vZGUnXSkgfHwgaXNzZXQoJF9HRVRbJ3ByZXNlbnRhdGlvbl9tb2RlJ10pIHx8IGlzc2V0KCRfR0VUWydwcmVmaWxsJ10pIHx8IGlzc2V0KCRfR0VUWydzdWJtaXR0ZWQnXSkgfHwgaXNzZXQoJF9QT1NUWydtb2RlJ10pIHx8IGlzc2V0KCRfUE9TVFsncHJlc2VudGF0aW9uX21vZGUnXSkgfHwgaXNzZXQoJF9QT1NUWydwcmVmaWxsJ10pIHx8IGlzc2V0KCRfUE9TVFsnc3VibWl0dGVkJ10pKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9wYXJhbSgkbmFtZSkgewogIGdsb2JhbCAkX0dFVDsKICBnbG9iYWwgJF9QT1NUOwogIGdsb2JhbCAkcGxhbnlvX2F0dHJpYnM7CiAgaWYgKGlzc2V0ICgkX0dFVCBbJG5hbWVdKSkKICAgIHJldHVybiAkX0dFVCBbJG5hbWVdOwogIGlmIChpc3NldCAoJF9QT1NUIFskbmFtZV0pKQogICAgcmV0dXJuICRfUE9TVCBbJG5hbWVdOwogIGlmICgkcGxhbnlvX2F0dHJpYnMgJiYgaXNfc3RyaW5nKCRwbGFueW9fYXR0cmlicykgJiYgcGxhbnlvX3Nob3VsZF91c2VfYXR0cmlicygpKSB7CiAgICAkYXR0cmliX2FycmF5ID0gcGxhbnlvX2dldF9hdHRyaWJzX2FzX2FycmF5KCRwbGFueW9fYXR0cmlicyk7CiAgICBpZiAoaXNzZXQgKCRhdHRyaWJfYXJyYXkgWyRuYW1lXSkpCiAgICAgIHJldHVybiAkYXR0cmliX2FycmF5IFskbmFtZV07CiAgfQogIHJldHVybiBudWxsOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2NvbnRlbnRzKCR1cmwsICRwYXJhbXMpIHsKICByZXR1cm4gc2VuZF9odHRwX3Bvc3QoJHVybCwgJHBhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19vdXRwdXRfcmVzb3VyY2VfbGlzdCgpIHsKICBnbG9iYWwgJHBsYW55b19zaXRlX2lkLCAkcGxhbnlvX21ldGFzaXRlX2lkLCAkcGxhbnlvX2ZlZWRiYWNrX3VybCwgJHBsYW55b19kZWZhdWx0X21vZGUsICRwbGFueW9fbGFuZ3VhZ2UsICRwbGFueW9fZmlsZXNfbG9jYXRpb24sICRwbGFueW9fcmVzb3VyY2Vfb3JkZXJpbmcsICRwbGFueW9fbG9naW5faW5mbzsKICAkcGxhbnlvX2RlZmF1bHRfbW9kZSA9ICdlbXB0eSc7CiAgJGxhbmd1YWdlID0gJHBsYW55b19sYW5ndWFnZTsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnbGFuZycpKQogICAgJGxhbmd1YWdlID0gcGxhbnlvX2dldF9wYXJhbSgnbGFuZycpOwogIGlmICgkcGxhbnlvX21ldGFzaXRlX2lkICYmIHBsYW55b19nZXRfcGFyYW0oJ3NpdGVfaWQnKSkgewogICAgJHNpdGVfaWRfdXNlZCA9IHBsYW55b19nZXRfcGFyYW0oJ3NpdGVfaWQnKTsKICAgICRtZXRhc2l0ZV9pZF91c2VkID0gJHBsYW55b19tZXRhc2l0ZV9pZDsKICB9CiAgZWxzZSBpZiAoJHBsYW55b19zaXRlX2lkICYmICEkcGxhbnlvX21ldGFzaXRlX2lkKSB7CiAgICAkc2l0ZV9pZF91c2VkID0gJHBsYW55b19zaXRlX2lkOwogICAgJG1ldGFzaXRlX2lkX3VzZWQgPSAnJzsKICB9CiAgZWxzZSB7CiAgICAkc2l0ZV9pZF91c2VkID0gJyc7CiAgICAkbWV0YXNpdGVfaWRfdXNlZCA9ICRwbGFueW9fbWV0YXNpdGVfaWQ7CiAgfQogICRwYXJhbXMgPSBhcnJheSgnbW9kdmVyJz0+JzEuOScsJ3NpdGVfaWQnPT4kc2l0ZV9pZF91c2VkLCdtZXRhc2l0ZV9pZCc9PiRtZXRhc2l0ZV9pZF91c2VkLCAnbW9kZSc9PidkaXNwbGF5X3Jlc291cmNlX2xpc3RfY29kZScsJ2ZlZWRiYWNrX3VybCc9PiRwbGFueW9fZmVlZGJhY2tfdXJsLCAnbGFuZ3VhZ2UnPT4kbGFuZ3VhZ2UgPyAkbGFuZ3VhZ2UgOiAnJywgJ3NvcnQnPT5wbGFueW9fZ2V0X3BhcmFtKCdzb3J0JykgPyBwbGFueW9fZ2V0X3BhcmFtKCdzb3J0JykgOiAkcGxhbnlvX3Jlc291cmNlX29yZGVyaW5nLCAncmVzX2ZpbHRlcl9uYW1lJz0+cGxhbnlvX2dldF9wYXJhbSgncmVzX2ZpbHRlcl9uYW1lJyksICdyZXNfZmlsdGVyX3ZhbHVlJz0+cGxhbnlvX2dldF9wYXJhbSgncmVzX2ZpbHRlcl92YWx1ZScpLCAncGxhbnlvX2ZpbGVzX2xvY2F0aW9uJz0+JHBsYW55b19maWxlc19sb2NhdGlvbik7CiAgaWYgKGlzX2FycmF5KCRwbGFueW9fbG9naW5faW5mbykpIHsKICAgICRwYXJhbXNbJ2xvZ2luX2NzJ10gPSAkcGxhbnlvX2xvZ2luX2luZm9bJ2xvZ2luX2NzJ107CiAgICAkcGFyYW1zWydsb2dpbl9lbWFpbCddID0gJHBsYW55b19sb2dpbl9pbmZvWydsb2dpbl9lbWFpbCddOwogIH0KICAkcGFyYW1zWyd1c2VyX2FnZW50J10gPSAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ107CiAgZWNobyBwbGFueW9fZ2V0X2NvbnRlbnRzKCgoaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddID09ICdvbicpID8gImh0dHBzIiA6ICJodHRwIikuIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAiLCAkcGFyYW1zKTsKICBlY2hvICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+XG52YXIgcGxhbnlvX2ZvcmNlX21vZGU9J2VtcHR5Jztcbjwvc2NyaXB0PlxuIjsKfQoKZnVuY3Rpb24gcGxhbnlvX291dHB1dF9zaXRlX2xpc3QoKSB7CiAgZ2xvYmFsICRwbGFueW9fbWV0YXNpdGVfaWQsICRwbGFueW9fZmVlZGJhY2tfdXJsLCAkcGxhbnlvX2RlZmF1bHRfbW9kZSwgJHBsYW55b19sYW5ndWFnZSwgJHBsYW55b19maWxlc19sb2NhdGlvbiwgJHBsYW55b19sb2dpbl9pbmZvOwogICRwbGFueW9fZGVmYXVsdF9tb2RlID0gJ2VtcHR5JzsKICAkbGFuZ3VhZ2UgPSAkcGxhbnlvX2xhbmd1YWdlOwogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdsYW5nJykpCiAgICAkbGFuZ3VhZ2UgPSBwbGFueW9fZ2V0X3BhcmFtKCdsYW5nJyk7CiAgJHBhcmFtcyA9IGFycmF5KCdtb2R2ZXInPT4nMS45Jywnc2l0ZV9pZCc9PiIiLCdtZXRhc2l0ZV9pZCc9PiAkcGxhbnlvX21ldGFzaXRlX2lkLCAnbW9kZSc9PidkaXNwbGF5X3NpdGVfbGlzdF9jb2RlJywnZmVlZGJhY2tfdXJsJz0+JHBsYW55b19mZWVkYmFja191cmwsICdsYW5ndWFnZSc9PiRsYW5ndWFnZSA/ICRsYW5ndWFnZSA6ICcnLCAnc29ydCc9PnBsYW55b19nZXRfcGFyYW0oJ3NvcnQnKSwgJ2NhbF9maWx0ZXJfbmFtZSc9PnBsYW55b19nZXRfcGFyYW0oJ2NhbF9maWx0ZXJfbmFtZScpLCAnY2FsX2ZpbHRlcl92YWx1ZSc9PnBsYW55b19nZXRfcGFyYW0oJ2NhbF9maWx0ZXJfdmFsdWUnKSwgJ3BsYW55b19maWxlc19sb2NhdGlvbic9PiRwbGFueW9fZmlsZXNfbG9jYXRpb24pOwogIGlmIChpc19hcnJheSgkcGxhbnlvX2xvZ2luX2luZm8pKSB7CiAgICAkcGFyYW1zWydsb2dpbl9jcyddID0gJHBsYW55b19sb2dpbl9pbmZvWydsb2dpbl9jcyddOwogICAgJHBhcmFtc1snbG9naW5fZW1haWwnXSA9ICRwbGFueW9fbG9naW5faW5mb1snbG9naW5fZW1haWwnXTsKICB9CiAgJHBhcmFtc1sndXNlcl9hZ2VudCddID0gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOwogIGVjaG8gcGxhbnlvX2dldF9jb250ZW50cygoKGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PSAnb24nKSA/ICJodHRwcyIgOiAiaHR0cCIpLiI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwIiwgJHBhcmFtcyk7CiAgZWNobyAiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPlxudmFyIHBsYW55b19mb3JjZV9tb2RlPSdlbXB0eSc7XG48L3NjcmlwdD5cbiI7Cn0KCmZ1bmN0aW9uIHBsYW55b19vdXRwdXRfcmVzb3VyY2VfZGV0YWlscygpIHsKICBnbG9iYWwgJHBsYW55b19zaXRlX2lkLCAkcGxhbnlvX21ldGFzaXRlX2lkLCAkcGxhbnlvX2ZlZWRiYWNrX3VybCwgJHBsYW55b19kZWZhdWx0X21vZGUsICRwbGFueW9fbGFuZ3VhZ2UsICRwbGFueW9fZmlsZXNfbG9jYXRpb24sICRwbGFueW9fcmVzb3VyY2VfaWQ7CiAgJHBsYW55b19kZWZhdWx0X21vZGUgPSAnZW1wdHknOwogICRsYW5ndWFnZSA9ICRwbGFueW9fbGFuZ3VhZ2U7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ2xhbmcnKSkKICAgICRsYW5ndWFnZSA9IHBsYW55b19nZXRfcGFyYW0oJ2xhbmcnKTsKICBlY2hvIHBsYW55b19nZXRfY29udGVudHMoKGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PSAnb24nID8gImh0dHBzIiA6ICJodHRwIikuIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAiLCBhcnJheSgnbW9kdmVyJz0+JzEuOScsJ3NpdGVfaWQnPT4oJHBsYW55b19zaXRlX2lkICYmICEkcGxhbnlvX21ldGFzaXRlX2lkID8gJHBsYW55b19zaXRlX2lkIDogIiIpLCdtZXRhc2l0ZV9pZCc9PigkcGxhbnlvX21ldGFzaXRlX2lkID8gJHBsYW55b19tZXRhc2l0ZV9pZCA6ICIiKSwgJ3Jlc291cmNlX2lkJz0+KCRwbGFueW9fcmVzb3VyY2VfaWQgPyAkcGxhbnlvX3Jlc291cmNlX2lkIDogcGxhbnlvX2dldF9wYXJhbSgncmVzb3VyY2VfaWQnKSksICdtb2RlJz0+J2Rpc3BsYXlfc2luZ2xlX3Jlc291cmNlX2NvZGUnLCdmZWVkYmFja191cmwnPT4kcGxhbnlvX2ZlZWRiYWNrX3VybCwgJ2xhbmd1YWdlJz0+JGxhbmd1YWdlID8gJGxhbmd1YWdlIDogJycsICd1c2VyX2FnZW50Jz0+JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCAncGxhbnlvX2ZpbGVzX2xvY2F0aW9uJz0+JHBsYW55b19maWxlc19sb2NhdGlvbikpOwogIGVjaG8gIjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz5cbnZhciBwbGFueW9fZm9yY2VfbW9kZT0nZW1wdHknO1xuPC9zY3JpcHQ+XG4iOwp9CgpmdW5jdGlvbiBwbGFueW9fc2V0dXAoKSB7CiAgZ2xvYmFsICRwbGFueW9fZmVlZGJhY2tfdXJsLCAkcGxhbnlvX2Fsd2F5c191c2VfYWpheCwgJHBsYW55b19zaXRlX2lkLCAkcGxhbnlvX21ldGFzaXRlX2lkLCAkcGxhbnlvX2RlZmF1bHRfbW9kZSwgJHBsYW55b19yZXNvdXJjZV9pZCwgJHBsYW55b19maWxlc19sb2NhdGlvbiwgJHBsYW55b19sYW5ndWFnZSwgJHBsYW55b19zb3J0X2ZpZWxkcywgJHBsYW55b19leHRyYV9zZWFyY2hfZmllbGRzLCAkcGxhbnlvX2pzX2xpYnJhcnlfdXNlZCwgJHBsYW55b19pbmNsdWRlX2pzX2xpYnJhcnksICRwbGFueW9fbG9naW5faW5mbywgJHBsYW55b19yZXNvdXJjZV9vcmRlcmluZywgJHBsYW55b19hdHRyaWJzOwoKICAkcGxhbnlvX21ldGFzaXRlX2lkID0gbnVsbDsKICBpZiAoISRwbGFueW9fc2l0ZV9pZCB8fCAkcGxhbnlvX3NpdGVfaWQgPT0gJ2RlbW8nKQogICAgJHBsYW55b19zaXRlX2lkID0gMTE7ICAvLyBkZW1vIHNpdGUKICBlbHNlIGlmIChzdWJzdHIoJHBsYW55b19zaXRlX2lkLCAwLCAxKSA9PSAnTScpCiAgICAkcGxhbnlvX21ldGFzaXRlX2lkID0gc3Vic3RyKCRwbGFueW9fc2l0ZV9pZCwgMSk7ICAvLyBtZXRhc2l0ZSBJRDogc2V0IG9ubHkgZm9yIG1ldGFzaXRlcwoKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnbW9kZScpKSB7CiAgICAkcGxhbnlvX2RlZmF1bHRfbW9kZSA9IHBsYW55b19nZXRfcGFyYW0oJ21vZGUnKTsKICB9CiAgZWxzZSB7CiAgICAkcmVzb3VyY2VfaWQgPSBwbGFueW9fZ2V0X3BhcmFtKCdyZXNvdXJjZV9pZCcpOwogICAgJHByZXNlbnRhdGlvbl9vZmYgPSAocGxhbnlvX2dldF9wYXJhbSgncHJlc2VudGF0aW9uX21vZGUnKSA9PSAnMCcgfHwgKCFwbGFueW9fZ2V0X3BhcmFtKCdwcmVzZW50YXRpb25fbW9kZScpICYmICRwbGFueW9fZGVmYXVsdF9tb2RlID09ICdzZWFyY2gnKSk7CiAgICBpZiAoJHJlc291cmNlX2lkICYmIChwbGFueW9fZ2V0X3BhcmFtKCdwcmVmaWxsJykgfHwgcGxhbnlvX2dldF9wYXJhbSgnc3VibWl0dGVkJykpKQogICAgICAkcGxhbnlvX2RlZmF1bHRfbW9kZSA9ICdyZXNlcnZlJzsKICAgIGVsc2UgaWYgKCRwcmVzZW50YXRpb25fb2ZmKQogICAgICAkcGxhbnlvX2RlZmF1bHRfbW9kZSA9ICdzZWFyY2gnOwogICAgZWxzZSBpZiAoJHJlc291cmNlX2lkKQogICAgICAkcGxhbnlvX2RlZmF1bHRfbW9kZSA9ICdyZXNvdXJjZV9kZXNjJzsKICAgIGVsc2UgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3ByZXNlbnRhdGlvbl9tb2RlJykgPT0gJzEnIHx8ICEkcGxhbnlvX2RlZmF1bHRfbW9kZSkKICAgICAgJHBsYW55b19kZWZhdWx0X21vZGUgPSAncmVzb3VyY2VfbGlzdCc7CiAgfQoKICBpZiAoISRwbGFueW9fYWx3YXlzX3VzZV9hamF4KSB7CiAgICAkcGxhbnlvX2ZlZWRiYWNrX3VybCA9IHBsYW55b19nZXRfcGFyYW0oJ2ZlZWRiYWNrX3VybCcpOwogICAgaWYgKCEkcGxhbnlvX2ZlZWRiYWNrX3VybCkKICAgICAgJHBsYW55b19mZWVkYmFja191cmwgPSAoKGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PSAnb24nKSA/ICJodHRwcyIgOiAiaHR0cCIpLiI6Ly8iIC4gJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10gLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsKICAgIAogICAgaWYgKCRwbGFueW9fZGVmYXVsdF9tb2RlID09ICdyZXNvdXJjZV9kZXNjJyAmJiAocGxhbnlvX2dldF9wYXJhbSgncmVzb3VyY2VfaWQnKSB8fCAkcGxhbnlvX3Jlc291cmNlX2lkKSkKICAgICAgICBwbGFueW9fb3V0cHV0X3Jlc291cmNlX2RldGFpbHMoKTsKICAgIGVsc2UgaWYgKCRwbGFueW9fbWV0YXNpdGVfaWQgJiYgJHBsYW55b19kZWZhdWx0X21vZGUgPT0gJ3NpdGVfbGlzdCcgJiYgIXBsYW55b19nZXRfcGFyYW0oJ3NpdGVfaWQnKSkKICAgICAgcGxhbnlvX291dHB1dF9zaXRlX2xpc3QoKTsKICAgIGVsc2UgaWYgKCRwbGFueW9fZGVmYXVsdF9tb2RlID09ICdyZXNvdXJjZV9saXN0JykKICAgICAgcGxhbnlvX291dHB1dF9yZXNvdXJjZV9saXN0KCk7CiAgfQoKPz4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLyB0aGVzZSB2YWx1ZXMgYXJlIGNvcGllZCBmcm9tIHRoZSBQSFAgc2V0dGluZ3M7IHBsZWFzZSB1cGRhdGUgdGhlIG9yaWdpbmFsIHZhbHVlcyBhYm92ZSBhbmQgbGVhdmUgdGhlc2UgdW5jaGFuZ2VkCnZhciB1bGFwX3NjcmlwdD0idWxhcC5waHAiOyAvLyBmaWxlIG5hbWUgdG8gb25lIG9mIHRoZSBVTEFQIHNjcmlwdHMsIGUuZy4gdWxhcC5waHAKdmFyIHBsYW55b19zaXRlX2lkPSc8P3BocCBlY2hvICRwbGFueW9fc2l0ZV9pZDs/Pic7IC8vIElEIG9mIHlvdXIgcGxhbnlvIHNpdGUKdmFyIHBsYW55b19yZXNvdXJjZV9pZD0nPD9waHAgaWYgKCRwbGFueW9fcmVzb3VyY2VfaWQpIGVjaG8gJHBsYW55b19yZXNvdXJjZV9pZDs/Pic7IC8vIG9wdGlvbmFsOiBJRCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgcmVzZXJ2ZWQKdmFyIHBsYW55b19maWxlc19sb2NhdGlvbj0nPD9waHAgZWNobyAkcGxhbnlvX2ZpbGVzX2xvY2F0aW9uOz8+JzsgLy8gcmVsYXRpdmUgb3IgYWJzb2x1dGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBwbGFueW8gZmlsZXMgYXJlIGtlcHQgKHVzdWFsbHkgJy9wbGFueW8tZmlsZXMnKQp2YXIgcGxhbnlvX2xhbmd1YWdlPSc8P3BocCBlY2hvICRwbGFueW9fbGFuZ3VhZ2U7Pz4nOyAvLyB5b3UgY2FuIG9wdGlvbmFsbHkgY2hhbmdlIHRoZSBsYW5ndWFnZSBoZXJlLCBlLmcuICdGUicgb3IgJ0VTJyBvciBwYXNzIHRoZSBsYW5ndWdlIGluIHRoZSAnbGFuZycgcGFyYW1ldGVyCnZhciBzb3J0X2ZpZWxkcz0nPD9waHAgZWNobyAkcGxhbnlvX3NvcnRfZmllbGRzOz8+JzsgLy8gY29tbWEtc2VwYXJhdGVkIHNvcnQgZmllbGRzIC0tIGEgc2luZ2xlIGZpZWxkIHdpbGwgaGlkZSB0aGUgc29ydCBkcm9wZG93biBib3gKdmFyIHBsYW55b19yZXNvdXJjZV9vcmRlcmluZz0nPD9waHAgaWYgKGlzc2V0KCRwbGFueW9fcmVzb3VyY2Vfb3JkZXJpbmcpKSBlY2hvICRwbGFueW9fcmVzb3VyY2Vfb3JkZXJpbmc7Pz4nOyAvLyBvcHRpb25hbCBzb3J0IGNyaXRlcml1bSBmb3IgcmVzb3VyY2UgbGlzdAp2YXIgZXh0cmFfc2VhcmNoX2ZpZWxkcz0nPD9waHAgZWNobyAkcGxhbnlvX2V4dHJhX3NlYXJjaF9maWVsZHM7Pz4nOyAvLyBjb21tYS1zZXBhcmF0ZWQgZXh0cmEgZmllbGRzIGluIHRoZSBzZWFyY2ggYm94CnZhciBwbGFueW9fZGVmYXVsdF9tb2RlPSc8P3BocCBlY2hvICRwbGFueW9fZGVmYXVsdF9tb2RlOz8+JzsKdmFyIHBsYW55b191c2VfaHR0cHM9PD9waHAgZWNobyAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddID09ICdvbicpID8gInRydWUiIDogImZhbHNlIjs/PjsgLy8gc2V0IHRoaXMgdG8gdHJ1ZSBpZiBlbWJlZGRpbmcgcGxhbnlvIG9uIGEgc2VjdXJlIHdlYnNpdGUgKFNTTCkKdmFyIHBsYW55b19hdHRyaWJzPSc8P3BocCBpZiAoJHBsYW55b19hdHRyaWJzICYmIGlzX3N0cmluZygkcGxhbnlvX2F0dHJpYnMpICYmIHBsYW55b19zaG91bGRfdXNlX2F0dHJpYnMoKSkgZWNobyAnPycuaHRtbF9lbnRpdHlfZGVjb2RlKCRwbGFueW9fYXR0cmlicyk7Pz4nOyAvLyBvcHRpb25hbCBhdHRyaWJ1dGVzIGZvciBub24tZGVmYXVsdCBtb2Rlcwo8P3BocAogICAgaWYgKGlzX2FycmF5KCRwbGFueW9fbG9naW5faW5mbykpIHsKICAgICAgZWNobyAidmFyIHBsYW55b19sb2dpbj1uZXcgQXJyYXkoKTtcbiI7CiAgICAgIGZvcmVhY2goJHBsYW55b19sb2dpbl9pbmZvIGFzICRrZXk9PiR2YWwpIHsKICAgICAgaWYgKCR2YWwpCiAgICAgICAgZWNobyAicGxhbnlvX2xvZ2luWyciLnRyaW0oJGtleSkuIiddPVwiIi5zdHJfcmVwbGFjZSgiXG4iLCAiIiwgc3RyX3JlcGxhY2UoIlwiIiwgIiciLCB0cmltKCR2YWwpKSkuIlwiO1xuIjsKICAgICAgfQogICAgfQo/Pgo8L3NjcmlwdD4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KZnVuY3Rpb24gZ2V0X3BhcmFtIChuYW1lKSB7bmFtZSA9IG5hbWUucmVwbGFjZSgvW1xbXS8sIlxcXFsiKS5yZXBsYWNlKC9bXF1dLywiXFxcXSIpO3ZhciByZWdleFMgPSAiW1xcPyZdIituYW1lKyI9KFteJiNdKikiO3ZhciByZWdleCA9IG5ldyBSZWdFeHAgKHJlZ2V4Uyk7dmFyIHJlc3VsdHMgPSByZWdleC5leGVjICh3aW5kb3cubG9jYXRpb24uaHJlZik7aWYgKHJlc3VsdHMgPT0gbnVsbCkgcmV0dXJuIG51bGw7ZWxzZSAgcmV0dXJuIHJlc3VsdHNbMV07fQppZiAoZ2V0X3BhcmFtKCdtb2RlJykpcGxhbnlvX2VtYmVkX21vZGUgPSBnZXRfcGFyYW0oJ21vZGUnKTsKZnVuY3Rpb24gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aChuYW1lKSB7aWYocGxhbnlvX2ZpbGVzX2xvY2F0aW9uLmxlbmd0aD09MHx8cGxhbnlvX2ZpbGVzX2xvY2F0aW9uLmxhc3RJbmRleE9mKCcvJyk9PXBsYW55b19maWxlc19sb2NhdGlvbi5sZW5ndGgtMSlyZXR1cm4gcGxhbnlvX2ZpbGVzX2xvY2F0aW9uK25hbWU7IGVsc2UgcmV0dXJuIHBsYW55b19maWxlc19sb2NhdGlvbisnLycrbmFtZTt9CmRvY3VtZW50LndyaXRlKCI8IisibGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgicGxhbnlvLXN0eWxlcy5jc3MiKSsiJyB0eXBlPSd0ZXh0L2NzcycgLz4iKTsKZG9jdW1lbnQud3JpdGUoIjwiKyJkaXYgaWQ9J3BsYW55b19jb250ZW50Jz48aW1nIHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJob3VyZ2xhc3MuZ2lmIikrIicgYWxpZ249J21pZGRsZScgLz48LyIrImRpdj4iKTsKPD9waHAKaWYgKCRwbGFueW9fanNfbGlicmFyeV91c2VkID09ICdqcXVlcnknIHx8ICRwbGFueW9fanNfbGlicmFyeV91c2VkID09ICdqUXVlcnknKSB7CiAgICBpZiAoJHBsYW55b19pbmNsdWRlX2pzX2xpYnJhcnkpIHsKPz4KZG9jdW1lbnQud3JpdGUoIjxzYyIrInJpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgianF1ZXJ5LmpzIikrIic+PC9zYyIrInJpcHQ+Iik7Cjw/cGhwCiAgICB9Cj8+CmRvY3VtZW50LndyaXRlKCI8c2MiKyJyaXB0IHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJwbGFueW8tanF1ZXJ5LXV0aWxzLmpzIikrIicgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz48L3NjIisicmlwdD4iKTsKZG9jdW1lbnQud3JpdGUoIjxzYyIrInJpcHQgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoInBsYW55by1qcXVlcnktcmVzZXJ2YXRpb25zLmpzIikrIicgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz48L3NjIisicmlwdD4iKTsKPD9waHAKfQplbHNlIHsKICAgIGlmICgkcGxhbnlvX2luY2x1ZGVfanNfbGlicmFyeSkgewo/Pgpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJtb290b29scy0xLjItY29yZS5qcyIpKyInPjwvc2MiKyJyaXB0PiIpOwpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJtb290b29scy0xLjItbW9yZS5qcyIpKyInPjwvc2MiKyJyaXB0PiIpOwo8P3BocAogICAgfQo/Pgpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgidXRpbHMuanMiKSsiJyB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPjwvc2MiKyJyaXB0PiIpOwpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgicGxhbnlvLXJlc2VydmF0aW9ucy5qcyIpKyInIHR5cGU9J3RleHQvamF2YXNjcmlwdCc+PC9zYyIrInJpcHQ+Iik7Cjw/cGhwCn0KPz4KPC9zY3JpcHQ+Cjxub3NjcmlwdD4KPGEgaHJlZj0naHR0cDovL3d3dy5wbGFueW8uY29tL2Fib3V0LWNhbGVuZGFyLnBocD9jYWxlbmRhcj08P3BocCBlY2hvICRwbGFueW9fc2l0ZV9pZDs/Pic+TWFrZSBhIHJlc2VydmF0aW9uPC9hPjxici8+PGJyLz48YSBocmVmPSdodHRwOi8vd3d3LnBsYW55by5jb20vJz5SZXNlcnZhdGlvbgogIHN5c3RlbSBwb3dlcmVkIGJ5IFBsYW55bzwvYT4KPC9ub3NjcmlwdD4KPD9waHAKfQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/planyo-reservations.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dHJ5IHsKICBpZiAoIXBsYW55b19pc3NldCh3aW5kb3cuSlNPTikgfHwgIXBsYW55b19pc3NldCh3aW5kb3cuSlNPTi5kZWNvZGUpKSB7CiAgICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5Kc29uKSkgSlNPTiA9IEpzb247CiAgICBKc29uLmVuY29kZSA9IEpzb24udG9TdHJpbmc7CiAgICBKc29uLmRlY29kZSA9IEpzb24uZXZhbHVhdGU7CiAgfQogfQpjYXRjaChlcnIpIHt9CgpmdW5jdGlvbiBwbGFueW8kKHgpIHsKICBpZiAocGxhbnlvX2lzc2V0KGRvY3VtZW50LmlkKSkKICAgIHJldHVybiBkb2N1bWVudC5pZCh4KTsKICByZXR1cm4gJCh4KTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9wYXJhbSAobmFtZSkgewogIGlmIChwbGFueW9faXNzZXQod2luZG93LnBsYW55b19vdmVycmlkZXMpICYmIHdpbmRvdy5wbGFueW9fb3ZlcnJpZGVzW25hbWVdKQogICAgcmV0dXJuIHdpbmRvdy5wbGFueW9fb3ZlcnJpZGVzW25hbWVdOwogIG5hbWUgPSBuYW1lLnJlcGxhY2UoL1tcW10vLCJcXFxbIikucmVwbGFjZSgvW1xdXS8sIlxcXF0iKTsKICB2YXIgcmVnZXhTID0gIltcXD8mXSIrbmFtZSsiPShbXiYjXSopIjsKICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwIChyZWdleFMpOwogIHZhciByZXN1bHRzID0gcmVnZXguZXhlYyAod2luZG93LmxvY2F0aW9uLmhyZWYpOwogIGlmIChyZXN1bHRzID09IG51bGwgJiYgcGxhbnlvX2lzc2V0KHdpbmRvdy5wbGFueW9fYXR0cmlicykpCiAgICByZXN1bHRzID0gcmVnZXguZXhlYyAod2luZG93LnBsYW55b19hdHRyaWJzKTsKICBpZiAocmVzdWx0cyA9PSBudWxsKQogICAgcmV0dXJuIG51bGw7CiAgZWxzZQogICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyZXN1bHRzWzFdKS5yZXBsYWNlKC9cKy9nLCAnICcpOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X3ByZWZpeGVkX3BhcmFtcyAocHJlZml4KSB7CiAgcHJlZml4ID0gcHJlZml4LnJlcGxhY2UoL1tcW10vLCJcXFxbIikucmVwbGFjZSgvW1xdXS8sIlxcXF0iKTsKICB2YXIgcmVnZXhTID0gIltcXD8mXSgiK3ByZWZpeCsiW0EtWmEtejAtOV9dKyk9KFteJiNdKikiOwogIHZhciByZWdleCA9IG5ldyBSZWdFeHAocmVnZXhTLCdnJyk7CiAgdmFyIHJldHN0ciA9ICIiOwogIHdoaWxlICgocmVzdWx0cyA9IHJlZ2V4LmV4ZWMod2luZG93LmxvY2F0aW9uLmhyZWYpKSAhPSBudWxsKSB7CiAgICAgIGlmIChyZXN1bHRzWzJdKSB7CiAgICAgICAgICBpZiAocmVzdWx0c1syXS5sZW5ndGggPiAxMDApCiAgICAgICAgICAgICAgcmVzdWx0c1syXSA9IHJlc3VsdHNbMl0uc3Vic3RyKDAsMTAwKTsKICAgICAgICAgIHJldHN0ciArPSAocmV0c3RyLmxlbmd0aD4wPyImIjoiIikrcmVzdWx0c1sxXSsiPSIrcmVzdWx0c1syXTsKICAgICAgfQogIH0KICByZXR1cm4gcmV0c3RyOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2Zvcm1fZGF0YShvYmopIHsKICB2YXIgZ2V0c3RyID0gIiI7CiAgZm9yICh2YXIgaT0wOyBpPG9iai5lbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgdmFyIGVsID0gb2JqLmVsZW1lbnRzW2ldOwogICAgdmFyIHRhZ05hbWUgPSBlbC50YWdOYW1lOwogICAgaWYgKHRhZ05hbWUgPT0gIklOUFVUIikgewogICAgICBpZiAoZWwudHlwZSA9PSAidGV4dCIgfHwgZWwudHlwZSA9PSAiaGlkZGVuIikgewoJZ2V0c3RyICs9IGVsLm5hbWUgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQoZWwudmFsdWUpICsgIiYiOwogICAgICB9CiAgICAgIGlmIChlbC50eXBlID09ICJjaGVja2JveCIpIHsKCWlmIChlbC5jaGVja2VkKSB7CgkgIGdldHN0ciArPSBlbC5uYW1lICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGVsLnZhbHVlKSArICImIjsKCX0gZWxzZSB7CgkgIGdldHN0ciArPSBlbC5uYW1lICsgIj0mIjsKCX0KICAgICAgfQogICAgICBpZiAoZWwudHlwZSA9PSAicmFkaW8iKSB7CglpZiAoZWwuY2hlY2tlZCkgewoJICBnZXRzdHIgKz0gZWwubmFtZSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudChlbC52YWx1ZSkgKyAiJiI7Cgl9CiAgICAgIH0KICAgIH0gICAKICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gIlRFWFRBUkVBIikgewogICAgICBnZXRzdHIgKz0gZWwubmFtZSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudChlbC52YWx1ZSkgKyAiJiI7CiAgICB9CiAgICBlbHNlIGlmICh0YWdOYW1lID09ICJTRUxFQ1QiKSB7CiAgICAgIHZhciBzZWwgPSBlbDsKICAgICAgaWYgKHNlbC5zZWxlY3RlZEluZGV4ID49IDApCiAgICAgICAgZ2V0c3RyICs9IHNlbC5uYW1lICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHNlbC5vcHRpb25zW3NlbC5zZWxlY3RlZEluZGV4XS52YWx1ZSkgKyAiJiI7CiAgICB9CiAgfQogIHJldHVybiBnZXRzdHI7Cn0KCmZ1bmN0aW9uIHBsYW55b19vbl9yZXNlcnZhdGlvbl9zdWNjZXNzKHJlc2VydmF0aW9uX2lkLCB1c2VyX3RleHQpIHsKICBwbGFueW8kKCdwbGFueW9fY29udGVudCcpLmdldENoaWxkcmVuKCkuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOwogIHBsYW55byQoJ3Jlc19va19tc2cnKS5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnOwogIHBsYW55byQoJ3Jlc19lcnJvcl9tc2cnKS5zdHlsZS5kaXNwbGF5PSdub25lJzsKICBpZiAocGxhbnlvJCgncmVzZXJ2ZV9mb3JtJykpCiAgICBwbGFueW8kKCdyZXNlcnZlX2Zvcm0nKS5zdHlsZS5kaXNwbGF5PSdub25lJzsKICBpZiAocGxhbnlvJCgncHJvZHVjdF9mb3JtJykpCiAgICBwbGFueW8kKCdwcm9kdWN0X2Zvcm0nKS5zdHlsZS5kaXNwbGF5PSdub25lJzsKICBpZiAocGxhbnlvJCgncHJpY2VfaW5mb19kaXYnKSkKICAgIHBsYW55byQoJ3ByaWNlX2luZm9fZGl2Jykuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgaWYgKHJlc2VydmF0aW9uX2lkICYmIHVzZXJfdGV4dC5pbmRleE9mICgiPCEtLSBTSE9XX0FERElUSU9OQUxfUFJPRFVDVFMgLS0+IikgIT0gLTEpIHsKICAgIHBsYW55b19lbWJlZF9hZGRpdGlvbmFsX3Byb2R1Y3RzX2Zvcm0ocmVzZXJ2YXRpb25faWQpOwogIH0KICBlbHNlIHsKICAgIHBsYW55byQoJ3Jlc19va19tc2cnKS5pbm5lckhUTUwgPSB1c2VyX3RleHQ7CiAgICBldmFsX2NoaWxkcmVuX3NjcmlwdHMocGxhbnlvJCgncmVzX29rX21zZycpKTsKICAgIGlmIChwbGFueW9faXNzZXQod2luZG93Lm9uX3BsYW55b19mb3JtX2xvYWRlZCkpIHsKICAgICAgZG9jdW1lbnQucmVzZXJ2YXRpb25faWQgPSByZXNlcnZhdGlvbl9pZDsKICAgICAgd2luZG93Lm9uX3BsYW55b19mb3JtX2xvYWRlZCgncmVzZXJ2YXRpb25fZG9uZScpOwogICAgfQogIH0KICBwbGFueW8kKCdyZXNfb2tfbXNnJykucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnOwogIHdpbmRvdy5zY3JvbGwoMCwwKTsKfQogCmZ1bmN0aW9uIHBsYW55b19vbl9yZXNlcnZhdGlvbl9mYWlsdXJlKGVycm9yX3RleHQpIHsKICAgdmFyIGVycm9yX2RpdiA9IHBsYW55byQoJ3Jlc19lcnJvcl9tc2cnKTsKICAgZXJyb3JfZGl2LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsKICAgZXJyb3JfZGl2LmlubmVySFRNTCA9IGVycm9yX3RleHQrIjxwPiI7CiAgIHdpbmRvdy5zY3JvbGwoMCwwKTsKICAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKSkgewogICAgIHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQoJ3Jlc2VydmF0aW9uX2ZhaWx1cmUnKTsKICAgfQp9CiAKZnVuY3Rpb24gcGxhbnlvX2dldF9jdXJyZW50X3VybCgpIHsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnZmVlZGJhY2tfdXJsJykpCiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHBsYW55b19nZXRfcGFyYW0oJ2ZlZWRiYWNrX3VybCcpKTsKICBlbHNlCiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKfQoKZnVuY3Rpb24gcGxhbnlvX3Nob3dfaG91cmdsYXNzKGhpZGVfZWxlbWVudCkgewogIGRvY3VtZW50LnBsYW55b19hamF4X2NhbGxfcGVuZGluZyA9IHRydWU7CiAgaWYgKGhpZGVfZWxlbWVudCkgewogICAgZG9jdW1lbnQucGxhbnlvX2FqYXhfY2FsbF9oaWRlX2VsZW1lbnQgPSBoaWRlX2VsZW1lbnQ7CiAgICBoaWRlX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIHZhciBwYXJlbnQgPSBoaWRlX2VsZW1lbnQucGFyZW50Tm9kZTsKICAgIGlmIChwYXJlbnQpCiAgICAgIHZhciBob3VyZ2xhc3NfZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgaG91cmdsYXNzX2VsZW1lbnQuaWQgPSAiaG91cmdsYXNzX2VsZW1lbnQiOwogICAgaG91cmdsYXNzX2VsZW1lbnQuaW5uZXJIVE1MID0gIjxkaXYgY2xhc3M9J2hvdXJnbGFzc19pbWcnPjwvZGl2PiI7CiAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGhvdXJnbGFzc19lbGVtZW50LCBoaWRlX2VsZW1lbnQpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2hpZGVfaG91cmdsYXNzKCkgewogIGlmIChkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX3BlbmRpbmcpIHsKICAgIGlmIChkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX2hpZGVfZWxlbWVudCkgewogICAgICBkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX2hpZGVfZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7CiAgICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX2hpZGVfZWxlbWVudC5wYXJlbnROb2RlOwogICAgICBpZiAocGFyZW50KQoJcGFyZW50LnJlbW92ZUNoaWxkIChwbGFueW8kKCdob3VyZ2xhc3NfZWxlbWVudCcpKTsKICAgICAgZG9jdW1lbnQucGxhbnlvX2FqYXhfY2FsbF9oaWRlX2VsZW1lbnQgPSBudWxsOwogICAgfQogICAgZG9jdW1lbnQucGxhbnlvX2FqYXhfY2FsbF9wZW5kaW5nID0gZmFsc2U7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fb25fcmVxdWVzdF9mYWlsdXJlICgpIHsKICBwbGFueW9faGlkZV9ob3VyZ2xhc3MoKTsKICB2YXIgZXJyb3JfZGl2ID0gcGxhbnlvJCgncmVzX2Vycm9yX21zZycpOwogIGVycm9yX2Rpdi5zdHlsZS5kaXNwbGF5PSdibG9jayc7CiAgZXJyb3JfZGl2LmlubmVySFRNTCA9ICJVbmtub3duIGVycm9yIGluICIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCkrIiAoTVQiK01vb1Rvb2xzLnZlcnNpb24rIik8cD4iOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2Nvb2tpZShjX25hbWUpIHsKICBpZiAoZG9jdW1lbnQuY29va2llLmxlbmd0aCA+IDApIHsKICAgIGNfc3RhcnQgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZihjX25hbWUgKyAiPSIpOwogICAgaWYgKGNfc3RhcnQgIT0gLTEpIHsKICAgICAgY19zdGFydCA9IGNfc3RhcnQgKyBjX25hbWUubGVuZ3RoKzE7CiAgICAgIGNfZW5kID0gZG9jdW1lbnQuY29va2llLmluZGV4T2YoIjsiLCBjX3N0YXJ0KTsKICAgICAgaWYgKGNfZW5kID09IC0xKSAKICAgICAgICBjX2VuZCA9IGRvY3VtZW50LmNvb2tpZS5sZW5ndGg7CiAgICAgIHJldHVybiB1bmVzY2FwZShkb2N1bWVudC5jb29raWUuc3Vic3RyaW5nKGNfc3RhcnQsIGNfZW5kKSk7CiAgICB9CiAgfQogIHJldHVybiAiIjsKfQoKZnVuY3Rpb24gcGxhbnlvX3NlbmRfcmVxdWVzdCAoZGF0YSwgb25fY29tcGxldGVfZnVuY3Rpb24sIGhpZGVfaXRlbSkgewogIHBsYW55b19zaG93X2hvdXJnbGFzcyhoaWRlX2l0ZW0pOwogIHZhciByZXFfZGF0YSA9IGRhdGE7CiAgaWYgKHJlcV9kYXRhLmluZGV4T2YoJ2ZlZWRiYWNrX3VybD0nKSA9PSAtMSkKICAgIHJlcV9kYXRhICs9ICImZmVlZGJhY2tfdXJsPSIgKyBwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCk7CiAgaWYgKHJlcV9kYXRhLmluZGV4T2YoJ3VsYXBfdXJsPScpID09IC0xKQogICAgcmVxX2RhdGEgKz0gIiZ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwIjsKICBpZiAod2luZG93LnBsYW55b19sYW5ndWFnZSkKICAgIHJlcV9kYXRhICs9ICImbGFuZ3VhZ2U9IiArIHBsYW55b19sYW5ndWFnZTsKICB2YXIgc2hvcHBpbmdfY2FydF9pZCA9IHBsYW55b19nZXRfY29va2llICgncGxhbnlvX2NhcnRfaWQnKTsKICBpZiAoc2hvcHBpbmdfY2FydF9pZCAmJiByZXFfZGF0YS5pbmRleE9mKCdjYXJ0X2lkPScpID09IC0xKQogICAgcmVxX2RhdGEgKz0gIiZjYXJ0X2lkPSIgKyBzaG9wcGluZ19jYXJ0X2lkICsgIiZmaXJzdF9yZXNlcnZhdGlvbl9pZD0iICsgcGxhbnlvX2dldF9jb29raWUoJ3BsYW55b19maXJzdF9yZXNlcnZhdGlvbl9pZCcpOwogIGlmIChwbGFueW9faXNzZXQod2luZG93LnBsYW55b19sb2dpbikgJiYgcGxhbnlvX2lzc2V0KHdpbmRvdy5wbGFueW9fbG9naW4sICdsb2dpbl9jcycpICYmIHBsYW55b19pc3NldCh3aW5kb3cucGxhbnlvX2xvZ2luLCAnZW1haWwnKSkKICAgIHJlcV9kYXRhICs9ICImbG9naW5fY3M9IiArIHdpbmRvdy5wbGFueW9fbG9naW5bJ2xvZ2luX2NzJ10gKyAiJmxvZ2luX2VtYWlsPSIgKyB3aW5kb3cucGxhbnlvX2xvZ2luWydlbWFpbCddOwogIHZhciBwcHBfcGFyYW1zID0gcGxhbnlvX2dldF9wcmVmaXhlZF9wYXJhbXMoJ3BwcF8nKTsKICBpZiAocHBwX3BhcmFtcy5sZW5ndGggPiAwKQogICAgcmVxX2RhdGEgKz0gIiYiICsgcHBwX3BhcmFtczsKICByZXFfZGF0YSArPSAiJnVzZXJfYWdlbnQ9IiArIG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cuUmVxdWVzdCkgJiYgcGxhbnlvX2lzc2V0KHdpbmRvdy5SZXF1ZXN0LkpTT04pKSB7CiAgICB2YXIgeGhyX3JlcSA9IG5ldyBSZXF1ZXN0LkpTT04gKAoJCQkJICAgIHsKCQkJCSAgICB1cmw6Z2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCksCgkJCQkJbWV0aG9kOidwb3N0JywKCQkJCQlvblN1Y2Nlc3M6IG9uX2NvbXBsZXRlX2Z1bmN0aW9uLAoJCQkJCW9uRmFpbHVyZTogcGxhbnlvX29uX3JlcXVlc3RfZmFpbHVyZSwKCQkJCQlvbkV4Y2VwdGlvbjogcGxhbnlvX29uX3JlcXVlc3RfZmFpbHVyZSwKCQkJCQlvbkNhbmNlbDogcGxhbnlvX29uX3JlcXVlc3RfZmFpbHVyZQoJCQkJCX0pLnNlbmQocmVxX2RhdGEpOwogIH0KICBlbHNlIHsKICAgIHZhciB4aHJfcmVxID0gbmV3IFhIUiAoewogICAgICBtZXRob2Q6J3Bvc3QnLAogICAgICAgICAgb25TdWNjZXNzOiBvbl9jb21wbGV0ZV9mdW5jdGlvbiwKICAgICAgICAgIG9uRmFpbHVyZTogcGxhbnlvX29uX3JlcXVlc3RfZmFpbHVyZQoJICB9KS5zZW5kKGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpLCByZXFfZGF0YSk7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fb25fY29tcGxldGVfc2hvd19zdGF0dXMgKHR4dCkgewogIHBsYW55byQoJ3BsYW55b19jb250ZW50JykuaW5uZXJIVE1MID0gIiI7CiAgcGxhbnlvX2hpZGVfaG91cmdsYXNzKCk7CiAgdmFyIG9iaiA9ICh0eHQgJiYgdHlwZW9mIHR4dCA9PSAnb2JqZWN0JykgPyB0eHQgOiBKU09OLmRlY29kZSAodHh0KTsKICBpZiAoIW9iaikgcmV0dXJuOwogIHZhciBjb2RlID0gb2JqWydyZXNwb25zZV9jb2RlJ107CiAgaWYgKGNvZGUgPT0gMCkgey8vIHN1Y2Nlc3MKICAgIHZhciBva19kaXYgPSBwbGFueW8kKCdyZXNfb2tfbXNnJyk7CiAgICBpZiAoIW9rX2RpdikgewogICAgICBva19kaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgb2tfZGl2LmlkID0gJ3Jlc19va19tc2cnOwogICAgICBwbGFueW8kKCdwbGFueW9fY29udGVudCcpLmFwcGVuZENoaWxkKG9rX2Rpdik7CiAgICB9CiAgICBva19kaXYuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOwogICAgb2tfZGl2LmlubmVySFRNTCA9IG9ialsnZGF0YSddWyd1c2VyX3RleHQnXSArICI8YnIvPjxici8+IjsKICAgIGV2YWxfY2hpbGRyZW5fc2NyaXB0cyhwbGFueW8kKCdyZXNfb2tfbXNnJykpOwoKICAgIGlmIChwbGFueW9faXNzZXQob2JqLCdkYXRhJywncmVkaXJlY3RfbG9jYXRpb24nKSkKICAgICAgZXZhbChvYmpbJ2RhdGEnXVsncmVkaXJlY3RfbG9jYXRpb24nXSk7CgogICAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKSkKICAgICAgd2luZG93Lm9uX3BsYW55b19mb3JtX2xvYWRlZChwbGFueW9fZ2V0X3BhcmFtKCdtb2RlJykpOwogIH0KICBlbHNlIHsKICAgIHZhciBlcnJvcl9kaXYgPSBwbGFueW8kKCdyZXNfZXJyb3JfbXNnJyk7CiAgICBpZiAoIWVycm9yX2RpdikgewogICAgICBlcnJvcl9kaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgZXJyb3JfZGl2LmlkID0gJ3Jlc19lcnJvcl9tc2cnOwogICAgICBwbGFueW8kKCdwbGFueW9fY29udGVudCcpLmFwcGVuZENoaWxkKGVycm9yX2Rpdik7CiAgICB9CiAgICBlcnJvcl9kaXYuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICBlcnJvcl9kaXYuaW5uZXJIVE1MID0gb2JqWydyZXNwb25zZV9tZXNzYWdlJ10gKyAiPGJyLz48YnIvPiI7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9faW5pdF9jYW5jZWxfbW9kZSgpIHsKICBwbGFueW9fc2VuZF9yZXF1ZXN0ICgibW9kZT1jYW5jZWwmYz0iICsgcGxhbnlvX2dldF9wYXJhbSgnYycpICsgIiZ1c2VyX2lkPSIgKyBwbGFueW9fZ2V0X3BhcmFtKCd1c2VyX2lkJykgKyAiJnNpdGVfaWQ9IiArIHdpbmRvdy5wbGFueW9fc2l0ZV9pZCArICImcmVzZXJ2YXRpb25faWQ9IiArIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJykgKyAiJnJlc291cmNlX2lkPSIgKyBwbGFueW9fZ2V0X3BhcmFtKCdyZXNvdXJjZV9pZCcpICsgIiZyZWFzb249IiArIHBsYW55b19nZXRfcGFyYW0oJ3JlYXNvbicpLCBwbGFueW9fb25fY29tcGxldGVfc2hvd19zdGF0dXMsIG51bGwpOwp9CgpmdW5jdGlvbiBwbGFueW9faW5pdF92ZXJpZnlfZW1haWxfbW9kZSgpIHsKICBwbGFueW9fc2VuZF9yZXF1ZXN0ICgibW9kZT12ZXJpZnlfZW1haWwmdmVyaWZpY2F0aW9uX2NvZGU9IiArIHBsYW55b19nZXRfcGFyYW0oJ3ZlcmlmaWNhdGlvbl9jb2RlJykgKyAiJnNpdGVfaWQ9IiArIHdpbmRvdy5wbGFueW9fc2l0ZV9pZCArICImcmVzZXJ2YXRpb25faWQ9IiArIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJyksIHBsYW55b19vbl9jb21wbGV0ZV9zaG93X3N0YXR1cywgbnVsbCk7Cn0KCmZ1bmN0aW9uIHBsYW55b19pbml0X3BheW1lbnRfY29uZmlybWF0aW9uX21vZGUoKSB7CiAgcGxhbnlvX3NlbmRfcmVxdWVzdCAoIm1vZGU9cGF5bWVudF9jb25maXJtYXRpb24mcmVzZXJ2YXRpb25faWQ9IiArIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJykgKyAiJnNpdGVfaWQ9IiArIHdpbmRvdy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX29uX2NvbXBsZXRlX3Nob3dfc3RhdHVzLCBudWxsKTsKfQogCmZ1bmN0aW9uIHBsYW55b19vbl9yZXNlcnZhdGlvbl9jb21wbGV0ZSAodHh0KSB7CiAgcGxhbnlvX2hpZGVfaG91cmdsYXNzKCk7CgogIHZhciBvYmogPSBudWxsOwogIHRyeSB7CiAgICBvYmogPSAodHh0ICYmIHR5cGVvZiB0eHQgPT0gJ29iamVjdCcpID8gdHh0IDogSlNPTi5kZWNvZGUgKHR4dCk7CiAgfQogIGNhdGNoIChlcnIpIHsKICB9CiAgaWYgKCFvYmopIHsKICAgIHBsYW55b19vbl9yZXNlcnZhdGlvbl9mYWlsdXJlKCdVbmtub3duIHJlc2VydmF0aW9uIGVycm9yOiAnK3R4dCk7CiAgICByZXR1cm47CiAgfQoKICB2YXIgY29kZSA9IG9ialsncmVzcG9uc2VfY29kZSddOwogIGlmIChjb2RlID09IDApIHsvLyBzdWNjZXNzCiAgICBwbGFueW9fb25fcmVzZXJ2YXRpb25fc3VjY2VzcyAob2JqWydkYXRhJ11bJ3Jlc2VydmF0aW9uX2lkJ10sIG9ialsnZGF0YSddWyd1c2VyX3RleHQnXSk7CiAgfQogIGVsc2UgewogICAgcGxhbnlvX29uX3Jlc2VydmF0aW9uX2ZhaWx1cmUgKG9ialsncmVzcG9uc2VfbWVzc2FnZSddKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19zZW5kX3Jlc2VydmF0aW9uX2Zvcm0oKSB7CiAgcGxhbnlvX3NlbmRfcmVxdWVzdCAoIm1vZGU9bWFrZV9yZXNlcnZhdGlvbiZzaXRlX2lkPSIgKyB3aW5kb3cucGxhbnlvX3NpdGVfaWQgKyAiJiIgKyBwbGFueW9fZ2V0X2Zvcm1fZGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzZXJ2ZV9mb3JtJykpLCBwbGFueW9fb25fcmVzZXJ2YXRpb25fY29tcGxldGUsIHBsYW55byQoJ3N1Ym1pdF9idXR0b24nKSk7CiAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBwbGFueW9fc2VuZF9wcm9kdWN0X2Zvcm0oKSB7CiAgcGxhbnlvX3NlbmRfcmVxdWVzdCAoIm1vZGU9cmVzZXJ2ZV9wcm9kdWN0cyZzaXRlX2lkPSIgKyB3aW5kb3cucGxhbnlvX3NpdGVfaWQgKyImIiArIHBsYW55b19nZXRfZm9ybV9kYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9kdWN0X2Zvcm0nKSksIHBsYW55b19vbl9yZXNlcnZhdGlvbl9jb21wbGV0ZSwgcGxhbnlvJCgnc3VibWl0X2J1dHRvbicpKTsKICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIHBsYW55b19zZW5kX21vZGlmeV9kYXRhX2Zvcm0oKSB7CiAgdmFyIGZvcm1fdXJsID0gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCk7CiAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZG9fbW9kaWZ5X2RhdGEmIiArIHBsYW55b19nZXRfZm9ybV9kYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RpZnlfZGF0YV9mb3JtJykpICsgIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCk7CiAgIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwogICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIHBsYW55b19vbl9zZWFyY2hfc3VjY2VzcyhyZXN1bHRzKSB7CiAgcGxhbnlvJCgncmVzX2Vycm9yX21zZycpLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogIHZhciByZXN1bHRzX2NvZGUgPSByZXN1bHRzOwoKICBwbGFueW8kKCdzZWFyY2hfcmVzdWx0cycpLmlubmVySFRNTCA9IHJlc3VsdHNfY29kZTsKCiAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKSkKICAgIHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQoJ3NlYXJjaF9zdWNjZXNzJyk7Cn0KIApmdW5jdGlvbiBwbGFueW9fb25fc2VhcmNoX2ZhaWx1cmUoZXJyb3JfdGV4dCkgewogICB2YXIgZXJyb3JfZGl2ID0gcGxhbnlvJCgncmVzX2Vycm9yX21zZycpOwogICBlcnJvcl9kaXYuc3R5bGUuZGlzcGxheT0nYmxvY2snOwogICBlcnJvcl9kaXYuaW5uZXJIVE1MID0gZXJyb3JfdGV4dCsiPHA+IjsKICAgcGxhbnlvJCgnc2VhcmNoX3Jlc3VsdHMnKS5pbm5lckhUTUwgPSAiIjsKICAgd2luZG93LnNjcm9sbCgwLDApOwoKICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQpKQogICAgd2luZG93Lm9uX3BsYW55b19mb3JtX2xvYWRlZCgnc2VhcmNoX2ZhaWx1cmUnKTsKfQoKZnVuY3Rpb24gcGxhbnlvX29uX3NlYXJjaF9jb21wbGV0ZSAodHh0KSB7CiAgcGxhbnlvX2hpZGVfaG91cmdsYXNzKCk7CiAgdmFyIG9iaiA9IG51bGw7CiAgdHJ5IHsKICAgIG9iaiA9ICh0eHQgJiYgdHlwZW9mIHR4dCA9PSAnb2JqZWN0JykgPyB0eHQgOiBKU09OLmRlY29kZSAodHh0KTsKICB9CiAgY2F0Y2ggKGVycikgewogIH0KICBpZiAoIW9iaikgewogICAgcGxhbnlvX29uX3NlYXJjaF9mYWlsdXJlKCdVbmtub3duIHNlYXJjaCBlcnJvcjogJyt0eHQpOwogICAgcmV0dXJuOwogIH0KICB2YXIgY29kZSA9IG9ialsncmVzcG9uc2VfY29kZSddOwogIGlmIChjb2RlID09IDApIHsvLyBzdWNjZXNzCiAgICBwbGFueW9fb25fc2VhcmNoX3N1Y2Nlc3MgKG9ialsnZGF0YSddWydjb2RlJ10pOwogIH0KICBlbHNlIHsKICAgIHBsYW55b19vbl9zZWFyY2hfZmFpbHVyZSAob2JqWydyZXNwb25zZV9tZXNzYWdlJ10pOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX3VwY29taW5nX2F2YWlsYWJpbGl0eV9mb3JtX2RhdGFfY2hhbmdlZCAoKSB7CiAgcGxhbnlvX3NlbmRfdXBjb21pbmdfYXZhaWxhYmlsaXR5X3NlYXJjaF9mb3JtKCk7Cn0KCmZ1bmN0aW9uIHBsYW55b19zZW5kX3VwY29taW5nX2F2YWlsYWJpbGl0eV9zZWFyY2hfZm9ybSgpIHsKICBwbGFueW9fc2VuZF9yZXF1ZXN0ICgibW9kZT11cGNvbWluZ19hdmFpbGFiaWxpdHlfc2VhcmNoJm91dHB1dD1odG1sJnNpdGVfaWQ9IiArIHdpbmRvdy5wbGFueW9fc2l0ZV9pZCArICImIiArIHBsYW55b19nZXRfZm9ybV9kYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdmFpbGFiaWxpdHlfZm9ybScpKSwgcGxhbnlvX29uX3NlYXJjaF9jb21wbGV0ZSwgcGxhbnlvJCgnc2VhcmNoX3Jlc3VsdHMnKSk7CiAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBwbGFueW9fc2VuZF9zZWFyY2hfZm9ybSgpIHsKICBwbGFueW9fc2VuZF9yZXF1ZXN0ICgibW9kZT1yZXNvdXJjZV9zZWFyY2gmb3V0cHV0PWh0bWwmc2l0ZV9pZD0iICsgd2luZG93LnBsYW55b19zaXRlX2lkICsgIiYiICsgcGxhbnlvX2dldF9mb3JtX2RhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlYXJjaF9mb3JtJykpLCBwbGFueW9fb25fc2VhcmNoX2NvbXBsZXRlLCBwbGFueW8kKCdzdWJtaXRfYnV0dG9uJykpOwogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX2lzX3NwZWNpYWxfbW9kZShtb2RlKSB7CiAgcmV0dXJuIChtb2RlID09ICJ2ZXJpZnlfZW1haWwiIHx8IG1vZGUgPT0gInBheW1lbnRfY29uZmlybWF0aW9uIiB8fCBtb2RlID09ICJjYW5jZWwiIHx8IG1vZGUgPT0gImNhbmNlbF9jb2RlIiB8fCBtb2RlID09ICJyZXNlcnZhdGlvbl9kZXRhaWxzIiB8fCBtb2RlID09ICJwYXltZW50X2Zvcm0iIHx8IG1vZGUgPT0gInJlc2VydmF0aW9uX2xpc3QiIHx8IG1vZGUgPT0gInNob3dfY2FydCIgfHwgbW9kZSA9PSAiY2hlY2tvdXQiIHx8IG1vZGUgPT0gIndpZGdldCIgfHwgbW9kZSA9PSAiYWRkaXRpb25hbF9wcm9kdWN0c19jb2RlIiB8fCBtb2RlID09ICJtb2RpZnlfZGF0YV9mb3JtIik7Cn0KCmZ1bmN0aW9uIHBsYW55b19pbml0X3NwZWNpYWxfbW9kZXMoKSB7CiAgdmFyIG1vZGUgPSBwbGFueW9fZ2V0X3BhcmFtKCdtb2RlJyk7CiAgaWYgKHBsYW55b19pc19zcGVjaWFsX21vZGUobW9kZSkpIHsKICAgIGlmIChtb2RlID09ICJ2ZXJpZnlfZW1haWwiKQogICAgICBwbGFueW9faW5pdF92ZXJpZnlfZW1haWxfbW9kZSgpOwogICAgZWxzZSBpZiAobW9kZSA9PSAicGF5bWVudF9jb25maXJtYXRpb24iKQogICAgICBwbGFueW9faW5pdF9wYXltZW50X2NvbmZpcm1hdGlvbl9tb2RlKCk7CiAgICBlbHNlIGlmIChtb2RlID09ICJjYW5jZWwiKQogICAgICBwbGFueW9faW5pdF9jYW5jZWxfbW9kZSgpOwogICAgZWxzZSBpZiAobW9kZSA9PSAncmVzZXJ2YXRpb25fZGV0YWlscycpCiAgICAgIHBsYW55b19lbWJlZF9yZXNlcnZhdGlvbl9kZXRhaWxzKHdpbmRvdy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgncmVzZXJ2YXRpb25faWQnKSwgcGxhbnlvX2dldF9wYXJhbSgndXNlcl9pZCcpKTsKICAgIGVsc2UgaWYgKG1vZGUgPT0gJ3Jlc2VydmF0aW9uX2xpc3QnKQogICAgICBwbGFueW9fZW1iZWRfcmVzZXJ2YXRpb25fbGlzdCh3aW5kb3cucGxhbnlvX3NpdGVfaWQsIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ3VzZXJfaWQnKSk7CiAgICBlbHNlIGlmIChtb2RlID09ICdjYW5jZWxfY29kZScpCiAgICAgIHBsYW55b19lbWJlZF9jYW5jZWxfY29kZSh3aW5kb3cucGxhbnlvX3NpdGVfaWQsIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ2MnKSwgcGxhbnlvX2dldF9wYXJhbSgndXNlcl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdyZXNvdXJjZV9pZCcpKTsKICAgIGVsc2UgaWYgKG1vZGUgPT0gJ3BheW1lbnRfZm9ybScpCiAgICAgIHBsYW55b19lbWJlZF9wYXltZW50X2Zvcm0od2luZG93LnBsYW55b19zaXRlX2lkLCBwbGFueW9fZ2V0X3BhcmFtKCdyZXNlcnZhdGlvbl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCd1c2VyX2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ2F1dG9fcmVkaXJlY3QnKSk7CiAgICBlbHNlIGlmIChtb2RlID09ICdzaG93X2NhcnQnKQogICAgICBwbGFueW9fZW1iZWRfY2FydF9jb2RlKHdpbmRvdy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgnY2FydF9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdmaXJzdF9yZXNlcnZhdGlvbl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdyZW1vdmVfcmVzZXJ2YXRpb25faWQnKSk7CiAgICBlbHNlIGlmIChtb2RlID09ICdjaGVja291dCcpCiAgICAgIHBsYW55b19lbWJlZF9jaGVja291dF9jb2RlKHdpbmRvdy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgnY2FydF9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdmaXJzdF9yZXNlcnZhdGlvbl9pZCcpKTsKICAgIGVsc2UgaWYgKG1vZGUgPT0gJ2FkZGl0aW9uYWxfcHJvZHVjdHNfY29kZScpCiAgICAgIHBsYW55b19lbWJlZF9ub25fcmVzZXJ2YXRpb25fc3RlcF9hZGRpdGlvbmFsX3Byb2R1Y3RzX2Zvcm0ocGxhbnlvX2dldF9wYXJhbSgncmVzZXJ2YXRpb25faWQnKSwgcGxhbnlvX2dldF9wYXJhbSgndXNlcl9pZCcpKTsKICAgIGVsc2UgaWYgKG1vZGUgPT0gJ21vZGlmeV9kYXRhX2Zvcm0nKQogICAgICBwbGFueW9fZW1iZWRfbW9kaWZ5X2RhdGFfZm9ybShwbGFueW9fZ2V0X3BhcmFtKCdyZXNlcnZhdGlvbl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCd1c2VyX2lkJykpOwogICAgZWxzZSBpZiAobW9kZSA9PSAnd2lkZ2V0JykKICAgICAgcGxhbnlvX2VtYmVkX3dpZGdldCh3aW5kb3cucGxhbnlvX3NpdGVfaWQpOwogICAgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9waG9uZV9jb2RlcyhuYW1lKSB7CnJldHVybiAiPHNlbGVjdCBpZD0nIituYW1lKyInIG5hbWU9JyIrbmFtZSsiJyA+PG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0nLTEnPi0tIENvdW50cnkgY29kZSAtLSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5Myc+QWZnaGFuaXN0YW4gKDkzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNTUnPkFsYmFuaWEgKDM1NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjEzJz5BbGdlcmlhICgyMTMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3Nic+QW5kb3JyYSAoMzc2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNDQnPkFuZ29sYSAoMjQ0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjQnPkFuZ3VpbGxhICgyNjQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY3Mic+QW50YXJjdGljYSAoNjcyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1NCc+QXJnZW50aW5hICg1NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzc0Jz5Bcm1lbmlhICgzNzQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI5Nyc+QXJ1YmEgKDI5NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjEnPkF1c3RyYWxpYSAoNjEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQzJz5BdXN0cmlhICg0MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTk0Jz5BemVyYmFpamFuICg5OTQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI0Mic+QmFoYW1hcyAoMjQyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NzMnPkJhaHJhaW4gKDk3MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODgwJz5CYW5nbGFkZXNoICg4ODApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI0Nic+QmFyYmFkb3MgKDI0NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzc1Jz5CZWxhcnVzICgzNzUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzMyJz5CZWxnaXVtICgzMikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTAxJz5CZWxpemUgKDUwMSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDQxJz5CZXJtdWRhICg0NDEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk3NSc+Qmh1dGFuICg5NzUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5MSc+Qm9saXZpYSAoNTkxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjcnPkJvdHN3YW5hICgyNjcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU1Jz5CcmF6aWwgKDU1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NzMnPkJydW5laSAoNjczKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNTknPkJ1bGdhcmlhICgzNTkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIyNic+QnVya2luYSBGYXNvICgyMjYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI1Nyc+QnVydW5kaSAoMjU3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4NTUnPkNhbWJvZGlhICg4NTUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIzNyc+Q2FtZXJvb24gKDIzNykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMSc+Q2FuYWRhIC8gVVNBICgxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1Nic+Q2hpbGUgKDU2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4Nic+Q2hpbmEgKDg2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1Nyc+Q29sb21iaWEgKDU3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNDInPkNvbmdvICgyNDIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY4Mic+Q29vayBJc2xhbmRzICg2ODIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUwNic+Q29zdGEgUmljYSAoNTA2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczODUnPkNyb2F0aWEgKDM4NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTMnPkN1YmEgKDUzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTknPkN1cmFjYW8gKDU5OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzU3Jz5DeXBydXMgKDM1NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDIwJz5DemVjaCBSZXB1YmxpYyAoNDIwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0NSc+RGVubWFyayAoNDUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI0Nic+RGllZ28gR2FyY2lhICgyNDYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI1Myc+RGppYm91dGkgKDI1MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODA5Jz5Eb21pbmljYSAoODA5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTMnPkVjdWFkb3IgKDU5MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjAnPkVneXB0ICgyMCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTAzJz5FbCBTYWx2YWRvciAoNTAzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNzInPkVzdG9uaWEgKDM3MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjk4Jz5GYWVyb2UgSXNsYW5kcyAoMjk4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1MDAnPkZhbGtsYW5kICg1MDApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY3OSc+RmlqaSBJc2xhbmRzICg2NzkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1OCc+RmlubGFuZCAoMzU4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczMyc+RnJhbmNlICgzMykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTk2Jz5BbnRpbGxlcyAgKDU5NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTk0Jz5HdWlhbmEgKDU5NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjQxJz5HYWJvbiBSZXB1YmxpYyAoMjQxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMjAnPkdhbWJpYSAoMjIwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5OTUnPkdlb3JnaWEgKDk5NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDknPkdlcm1hbnkgKDQ5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMzMnPkdoYW5hICgyMzMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1MCc+R2licmFsdGFyICgzNTApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzMwJz5HcmVlY2UgKDMwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyOTknPkdyZWVubGFuZCAoMjk5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0NzMnPkdyZW5hZGEgKDQ3MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTkwJz5HdWFkZWxvdXBlICg1OTApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY3MSc+R3VhbSAoNjcxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1MDInPkd1YXRlbWFsYSAoNTAyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTInPkd1eWFuYSAoNTkyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1MDknPkhhaXRpICg1MDkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUwNCc+SG9uZHVyYXMgKDUwNCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODUyJz5Ib25nIEtvbmcgKDg1MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzYnPkh1bmdhcnkgKDM2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNTQnPkljZWxhbmQgKDM1NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTEnPkluZGlhICg5MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjInPkluZG9uZXNpYSAoNjIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk4Jz5JcmFuICg5OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTY0Jz5JcmFxICg5NjQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1Myc+SXJlbGFuZCAoMzUzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NzInPklzcmFlbCAoOTcyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczOSc+SXRhbHkgKDM5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4NzYnPkphbWFpY2EgKDg3NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODEnPkphcGFuIElkYyAoODEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzgxJz5KYXBhbiBLZGQgKDgxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NjInPkpvcmRhbiAoOTYyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc3Jz5LYXpha2hzdGFuICg3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNTQnPktlbnlhICgyNTQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY4Nic+S2lyaWJhdGkgKDY4NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODUwJz5Lb3JlYSwgTm9ydGggKDg1MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODInPktvcmVhLCBTb3V0aCAoODIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2NSc+S3V3YWl0ICg5NjUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzcnPkt5cmd5enN0YW4gKDcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg1Nic+TGFvcyAoODU2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNzEnPkxhdHZpYSAoMzcxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NjEnPkxlYmFub24gKDk2MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjY2Jz5MZXNvdGhvICgyNjYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIzMSc+TGliZXJpYSAoMjMxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMTgnPkxpYnlhICgyMTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQyMyc+TGllY2h0ZW5zdGVpbiAoNDIzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNzAnPkxpdGh1YW5pYSAoMzcwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNTInPkx1eGVtYm91cmcgKDM1MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODUzJz5NYWNhbyAoODUzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczODknPk1hY2Vkb25pYSAoMzg5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjEnPk1hZGFnYXNjYXIgKDI2MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjY1Jz5NYWxhd2kgKDI2NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjAnPk1hbGF5c2lhICg2MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTYwJz5NYWxkaXZlcyAoOTYwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMjMnPk1hbGkgUmVwdWJsaWMgKDIyMykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzU2Jz5NYWx0YSAoMzU2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2OTInPk1hcnNoYWxsIElzbGFuZHMgKDY5MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjIyJz5NYXVyaXRhbmlhICgyMjIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIzMCc+TWF1cml0aXVzICgyMzApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2OSc+TWF5b3R0ZSBJc2xhbmQgKDI2OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTInPk1leGljbyAoNTIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY5MSc+TWljcm9uZXNpYSAoNjkxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNzMnPk1vbGRvdmEgKDM3MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzMnPk1vbmFjbyAoMzMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQ3Myc+TW9udHNlcnJhdCAoNDczKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMTInPk1vcm9jY28gKDIxMikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjU4Jz5Nb3phbWJpcXVlICgyNTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk1Jz5NeWFubWFyICg5NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjY0Jz5OYW1pYmlhICgyNjQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY3NCc+TmF1cnUgKDY3NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTc3Jz5OZXBhbCAoOTc3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczMSc+TmV0aGVybGFuZHMgKDMxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTknPkFudGlsbGVzICg1OTkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY4Nyc+TmV3IENhbGVkb25pYSAoNjg3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NCc+TmV3IFplYWxhbmQgKDY0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1MDUnPk5pY2FyYWd1YSAoNTA1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMzQnPk5pZ2VyaWEgKDIzNCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjI3Jz5OaWdlciBSZXB1YmxpYyAoMjI3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2ODMnPk5pdWUgKDY4MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjcyJz5Ob3Jmb2xrIElzbGFuZCAoNjcyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0Nyc+Tm9yd2F5ICg0NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTY4Jz5PbWFuICg5NjgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzkyJz5QYWtpc3RhbiAoOTIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY4MCc+UGFsYXUgKDY4MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTk1Jz5QYXJhZ3VheSAoNTk1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1MSc+UGVydSAoNTEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzYzJz5QaGlsaXBwaW5lcyAoNjMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQ4Jz5Qb2xhbmQgKDQ4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNTEnPlBvcnR1Z2FsICgzNTEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzc4Nyc+UHVlcnRvIFJpY28gKDc4NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTc0Jz5RYXRhciAoOTc0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjInPlJldW5pb24gSXNsYW5kICgyNjIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQwJz5Sb21hbmlhICg0MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNyc+UnVzc2lhICg3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNTAnPlJ3YW5kYSAoMjUwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTknPlN0IEV1c3RhdGl1cyAoNTk5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyOTAnPlN0IEhlbGVuYSAoMjkwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc3NTgnPlN0IEx1Y2lhICg3NTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5OSc+U3QgTWFhcnRlbiAoNTk5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4MDknPlN0IFZpbmNlbnQgKDgwOSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjg0Jz5TYW1vYSAoNjg0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNzgnPlNhbiBNYXJpbm8gKDM3OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjM5Jz5TYW8gVG9tZSAoMjM5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NjYnPlNhdWRpIEFyYWJpYSAoOTY2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMjEnPlNlbmVnYWwgKDIyMSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjMyJz5TaWVycmEgTGVvbmUgKDIzMikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjUnPlNpbmdhcG9yZSAoNjUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQyMSc+U2xvdmFraWEgKDQyMSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzg2Jz5TbG92ZW5pYSAoMzg2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NzcnPlNvbG9tb24gSXNsYW5kcyAoNjc3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNTInPlNvbWFsaWEgKDI1MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjcnPlNvdXRoIEFmcmljYSAoMjcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM0Jz5TcGFpbiAoMzQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk0Jz5TcmkgTGFua2EgKDk0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNDknPlN1ZGFuICgyNDkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5Nyc+U3VyaW5hbWUgKDU5NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjY4Jz5Td2F6aWxhbmQgKDI2OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDYnPlN3ZWRlbiAoNDYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQxJz5Td2l0emVybGFuZCAoNDEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2Myc+U3lyaWEgKDk2MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODg2Jz5UYWl3YW4gKDg4NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNyc+VGFqaWtpc3RhbiAoNykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjU1Jz5UYW56YW5pYSAoMjU1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2Nic+VGhhaWxhbmQgKDY2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMjgnPlRvZ28gKDIyOCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjc2Jz5Ub25nYSBJc2xhbmRzICg2NzYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIxNic+VHVuaXNpYSAoMjE2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5MCc+VHVya2V5ICg5MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTkzJz5UdXJrbWVuaXN0YW4gKDk5MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjg4Jz5UdXZhbHUgKDY4OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjU2Jz5VZ2FuZGEgKDI1NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzgwJz5Va3JhaW5lICgzODApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQ0Jz5VSyAoNDQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzEnPlVTQSAvIENhbmFkYSAoMSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTk4Jz5VcnVndWF5ICg1OTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk5OCc+VXpiZWtpc3RhbiAoOTk4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NzgnPlZhbnVhdHUgKDY3OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzknPlZhdGljYW4gQ2l0eSAoMzkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU4Jz5WZW5lenVlbGEgKDU4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4NCc+VmlldG5hbSAoODQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY4MSc+V2FsbGlzICg2ODEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY4NSc+V2VzdGVybiBTYW1vYSAoNjg1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NjcnPlllbWVuICg5NjcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM4MSc+U2VyYmlhICgzODEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2MCc+WmFtYmlhICgyNjApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2Myc+WmltYmFid2UgKDI2MykmbmJzcDs8L29wdGlvbj48L3NlbGVjdD4gIjsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9jb3VudHJ5X2NvZGVzKCkgewogIHJldHVybiAiPHNlbGVjdCBpZD0nY291bnRyeScgbmFtZT0nY291bnRyeSc+PG9wdGlvbiBzZWxlY3RlZD0nc2VsZWN0ZWQnIHZhbHVlPSdub25lJz4tLS08L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQUYnPkFmZ2hhbmlzdGFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FMJz5BbGJhbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0RaJz5BbGdlcmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FTJz5BbWVyaWNhbiBTYW1vYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBRCc+QW5kb3JyYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBTyc+QW5nb2xhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FJJz5Bbmd1aWxsYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBUSc+QW50YXJjdGljYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBRyc+QW50aWd1YSBhbmQgQmFyYnVkYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBUic+QXJnZW50aW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FNJz5Bcm1lbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FXJz5BcnViYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBVSc+QXVzdHJhbGlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FUJz5BdXN0cmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FaJz5BemVyYmFpamFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JTJz5CYWhhbWFzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JIJz5CYWhyYWluJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JEJz5CYW5nbGFkZXNoJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JCJz5CYXJiYWRvcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCWSc+QmVsYXJ1cyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCRSc+QmVsZ2l1bSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCWic+QmVsaXplJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JKJz5CZW5pbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCTSc+QmVybXVkYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCVCc+Qmh1dGFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JPJz5Cb2xpdmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JBJz5Cb3NuaWEgYW5kIEhlcnplZ292aW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JXJz5Cb3Rzd2FuYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCVic+Qm91dmV0IElzbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCUic+QnJhemlsJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0lPJz5Ccml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQk4nPkJydW5laSBEYXJ1c3NhbGFtJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JHJz5CdWxnYXJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCRic+QnVya2luYSBGYXNvJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JJJz5CdXJ1bmRpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tIJz5DYW1ib2RpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDTSc+Q2FtZXJvb24mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ0EnPkNhbmFkYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDVic+Q2FwZSBWZXJkZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLWSc+Q2F5bWFuIElzbGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ0YnPkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdURCc+Q2hhZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDTCc+Q2hpbGUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ04nPkNoaW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NYJz5DaHJpc3RtYXMgSXNsYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NDJz5Db2NvcyAoS2VlbGluZykgSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDTyc+Q29sb21iaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS00nPkNvbW9yb3MmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ0cnPkNvbmdvJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NEJz5Db25nbywgdGhlIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NLJz5Db29rIElzbGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ1InPkNvc3RhIFJpY2EmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ0knPkNvdGUgRCdJdm9pcmUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSFInPkNyb2F0aWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ1UnPkN1YmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ1knPkN5cHJ1cyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDWic+Q3plY2ggUmVwdWJsaWMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nREsnPkRlbm1hcmsmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nREonPkRqaWJvdXRpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0RNJz5Eb21pbmljYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdETyc+RG9taW5pY2FuIFJlcHVibGljJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0VDJz5FY3VhZG9yJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0VHJz5FZ3lwdCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTVic+RWwgU2FsdmFkb3ImbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR1EnPkVxdWF0b3JpYWwgR3VpbmVhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0VSJz5Fcml0cmVhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0VFJz5Fc3RvbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0VUJz5FdGhpb3BpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdGSyc+RmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0ZPJz5GYXJvZSBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0ZKJz5GaWppJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0ZJJz5GaW5sYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0ZSJz5GcmFuY2UmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR0YnPkZyZW5jaCBHdWlhbmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUEYnPkZyZW5jaCBQb2x5bmVzaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVEYnPkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHQSc+R2Fib24mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR00nPkdhbWJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHRSc+R2VvcmdpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdERSc+R2VybWFueSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHSCc+R2hhbmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR0knPkdpYnJhbHRhciZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHUic+R3JlZWNlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dMJz5HcmVlbmxhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR0QnPkdyZW5hZGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR1AnPkd1YWRlbG91cGUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR1UnPkd1YW0mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR1QnPkd1YXRlbWFsYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHTic+R3VpbmVhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dXJz5HdWluZWEtQmlzc2F1Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dZJz5HdXlhbmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSFQnPkhhaXRpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0hNJz5IZWFyZCBJc2xhbmQgYW5kIE1jZG9uYWxkIElzbGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVkEnPkhvbHkgU2VlIChWYXRpY2FuIENpdHkgU3RhdGUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0hOJz5Ib25kdXJhcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdISyc+SG9uZyBLb25nJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0hVJz5IdW5nYXJ5Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0lTJz5JY2VsYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0lOJz5JbmRpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJRCc+SW5kb25lc2lhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0lSJz5JcmFuLCBJc2xhbWljIFJlcHVibGljIG9mJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0lRJz5JcmFxJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0lFJz5JcmVsYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0lMJz5Jc3JhZWwmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSVQnPkl0YWx5Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0pNJz5KYW1haWNhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0pQJz5KYXBhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdKTyc+Sm9yZGFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0taJz5LYXpha2hzdGFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tFJz5LZW55YSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLSSc+S2lyaWJhdGkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS1AnPktvcmVhLCBEZW1vY3JhdGljIFBlb3BsZSdzIFJlcHVibGljIG9mJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tSJz5Lb3JlYSwgUmVwdWJsaWMgb2YmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS1cnPkt1d2FpdCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLRyc+S3lyZ3l6c3RhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMQSc+TGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFYnPkxhdHZpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMQic+TGViYW5vbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMUyc+TGVzb3RobyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMUic+TGliZXJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMWSc+TGlieWFuIEFyYWIgSmFtYWhpcml5YSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMSSc+TGllY2h0ZW5zdGVpbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMVCc+TGl0aHVhbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0xVJz5MdXhlbWJvdXJnJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01PJz5NYWNhbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNSyc+TWFjZWRvbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01HJz5NYWRhZ2FzY2FyJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01XJz5NYWxhd2kmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVknPk1hbGF5c2lhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01WJz5NYWxkaXZlcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNTCc+TWFsaSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNVCc+TWFsdGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUgnPk1hcnNoYWxsIElzbGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVEnPk1hcnRpbmlxdWUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVInPk1hdXJpdGFuaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVUnPk1hdXJpdGl1cyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdZVCc+TWF5b3R0ZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNWCc+TWV4aWNvJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0ZNJz5NaWNyb25lc2lhLCBGZWRlcmF0ZWQgU3RhdGVzIG9mJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01EJz5Nb2xkb3ZhLCBSZXB1YmxpYyBvZiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNQyc+TW9uYWNvJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01OJz5Nb25nb2xpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNUyc+TW9udHNlcnJhdCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNQSc+TW9yb2NjbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNWic+TW96YW1iaXF1ZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNTSc+TXlhbm1hciZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOQSc+TmFtaWJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOUic+TmF1cnUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTlAnPk5lcGFsJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05MJz5OZXRoZXJsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBTic+TmV0aGVybGFuZHMgQW50aWxsZXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTkMnPk5ldyBDYWxlZG9uaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTlonPk5ldyBaZWFsYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05JJz5OaWNhcmFndWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTkUnPk5pZ2VyJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05HJz5OaWdlcmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05VJz5OaXVlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05GJz5Ob3Jmb2xrIElzbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNUCc+Tm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05PJz5Ob3J3YXkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nT00nPk9tYW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUEsnPlBha2lzdGFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BXJz5QYWxhdSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQUyc+UGFsZXN0aW5pYW4gVGVycml0b3J5LCBPY2N1cGllZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQQSc+UGFuYW1hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BHJz5QYXB1YSBOZXcgR3VpbmVhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BZJz5QYXJhZ3VheSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQRSc+UGVydSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQSCc+UGhpbGlwcGluZXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUE4nPlBpdGNhaXJuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BMJz5Qb2xhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUFQnPlBvcnR1Z2FsJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BSJz5QdWVydG8gUmljbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdRQSc+UWF0YXImbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUkUnPlJldW5pb24mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUk8nPlJvbWFuaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUlUnPlJ1c3NpYW4gRmVkZXJhdGlvbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdSVyc+UndhbmRhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NIJz5TYWludCBIZWxlbmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS04nPlNhaW50IEtpdHRzIGFuZCBOZXZpcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMQyc+U2FpbnQgTHVjaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUE0nPlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb24mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVkMnPlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1dTJz5TYW1vYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTTSc+U2FuIE1hcmlubyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTVCc+U2FvIFRvbWUgYW5kIFByaW5jaXBlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NBJz5TYXVkaSBBcmFiaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU04nPlNlbmVnYWwmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ1MnPlNlcmJpYSBhbmQgTW9udGVuZWdybyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTQyc+U2V5Y2hlbGxlcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTTCc+U2llcnJhIExlb25lJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NHJz5TaW5nYXBvcmUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0snPlNsb3Zha2lhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NJJz5TbG92ZW5pYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTQic+U29sb21vbiBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NPJz5Tb21hbGlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1pBJz5Tb3V0aCBBZnJpY2EmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR1MnPlNvLiBHZW9yZ2lhIGFuZCB0aGUgU28uIFNhbmR3aWNoIElzbGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRVMnPlNwYWluJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0xLJz5TcmkgTGFua2EmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0QnPlN1ZGFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NSJz5TdXJpbmFtZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTSic+U3ZhbGJhcmQgYW5kIEphbiBNYXllbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTWic+U3dhemlsYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NFJz5Td2VkZW4mbmJzcDs8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdDSCc+U3dpdHplcmxhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU1knPlN5cmlhbiBBcmFiIFJlcHVibGljJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RXJz5UYWl3YW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVEonPlRhamlraXN0YW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVFonPlRhbnphbmlhLCBVbml0ZWQgUmVwdWJsaWMgb2YmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVEgnPlRoYWlsYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RMJz5UaW1vci1MZXN0ZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdURyc+VG9nbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUSyc+VG9rZWxhdSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUTyc+VG9uZ2EmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVFQnPlRyaW5pZGFkIGFuZCBUb2JhZ28mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVE4nPlR1bmlzaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVFInPlR1cmtleSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUTSc+VHVya21lbmlzdGFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RDJz5UdXJrcyBhbmQgQ2FpY29zIElzbGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVFYnPlR1dmFsdSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdVRyc+VWdhbmRhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1VBJz5Va3JhaW5lJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FFJz5Vbml0ZWQgQXJhYiBFbWlyYXRlcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHQic+VW5pdGVkIEtpbmdkb20mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVVMnPlVuaXRlZCBTdGF0ZXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVU0nPlVuaXRlZCBTdGF0ZXMgTWlub3IgT3V0bHlpbmcgSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdVWSc+VXJ1Z3VheSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdVWic+VXpiZWtpc3RhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdWVSc+VmFudWF0dSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdWRSc+VmVuZXp1ZWxhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ZOJz5WaWV0IE5hbSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdWRyc+VmlyZ2luIElzbGFuZHMsIEJyaXRpc2gmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVkknPlZpcmdpbiBJc2xhbmRzLCBVLnMuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1dGJz5XYWxsaXMgYW5kIEZ1dHVuYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdFSCc+V2VzdGVybiBTYWhhcmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nWUUnPlllbWVuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1pNJz5aYW1iaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nWlcnPlppbWJhYndlJm5ic3A7PC9vcHRpb24+PC9zZWxlY3Q+ICI7Cn0KCmZ1bmN0aW9uIHBsYW55b19zZXRfZWxlbWVudF92YWx1ZShlbCwgdmFsdWUpIHsKICBpZiAoZWwudHlwZSA9PSAiY2hlY2tib3giKQoJCWVsLmNoZWNrZWQgPSAodmFsdWUgPT0gJ29uJyB8fCB2YWx1ZSA9PSAneWVzJyB8fCB2YWx1ZSA9PSAnMScpOwogIGVsc2UKCQllbC52YWx1ZSA9IHZhbHVlOwp9CgpmdW5jdGlvbiBwbGFueW9fcHJlZmlsbF9wYXJhbXMocGFyYW1zKSB7CiAgZm9yICh2YXIgcCBpbiBwYXJhbXMpIHsKICAgIHZhciBuYW1lID0gcGFyYW1zW3BdOwogICAgaWYgKHR5cGVvZiBuYW1lID09ICdzdHJpbmcnKSB7CiAgICAgIHZhciB2YWx1ZSA9IHBsYW55b19nZXRfcGFyYW0obmFtZSk7CiAgICAgIGlmICh2YWx1ZSAmJiBwbGFueW8kKG5hbWUpKQoJCQkJcGxhbnlvX3NldF9lbGVtZW50X3ZhbHVlKHBsYW55byQobmFtZSksIHZhbHVlKTsKICAgICAgaWYgKHZhbHVlICYmIHBsYW55byQoJ2JveF8nK25hbWUpKQoJCQkJcGxhbnlvX3NldF9lbGVtZW50X3ZhbHVlKHBsYW55byQoJ2JveF8nK25hbWUpLCB2YWx1ZSk7CiAgICAgIGlmICh2YWx1ZSAmJiBuYW1lLmluZGV4T2YoJ2JveF8nKSA9PSAwICYmIHBsYW55byQobmFtZS5zdWJzdHIoNCkpKSB7CgkJCQlwbGFueW9fc2V0X2VsZW1lbnRfdmFsdWUocGxhbnlvJChuYW1lLnN1YnN0cig0KSksIHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KfQoKZnVuY3Rpb24gZ2V0X3BsYW55b19tb2RlKCkgewogIGlmICh3aW5kb3cucGxhbnlvX2ZvcmNlX21vZGUpCiAgICByZXR1cm4gd2luZG93LnBsYW55b19mb3JjZV9tb2RlOwogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdtb2RlJykpCiAgICByZXR1cm4gcGxhbnlvX2dldF9wYXJhbSgnbW9kZScpOwoKICB2YXIgcmVzb3VyY2VfaWQgPSBwbGFueW9fZ2V0X3BhcmFtKCdyZXNvdXJjZV9pZCcpIHx8IChwbGFueW9faXNzZXQod2luZG93LnBsYW55b19yZXNvdXJjZV9pZCkgJiYgd2luZG93LnBsYW55b19yZXNvdXJjZV9pZCA+IDApOwogIGlmIChyZXNvdXJjZV9pZCAmJiAocGxhbnlvX2dldF9wYXJhbSgncHJlZmlsbCcpIHx8IHBsYW55b19nZXRfcGFyYW0oJ3N1Ym1pdHRlZCcpKSkKICAgIHJldHVybiAncmVzZXJ2ZSc7CiAgZWxzZSBpZiAocmVzb3VyY2VfaWQpCiAgICByZXR1cm4gJ3Jlc291cmNlX2Rlc2MnOwogIGVsc2UgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3ByZXNlbnRhdGlvbl9tb2RlJykgPT0gJzEnKSB7CiAgICBpZiAoU3RyaW5nKHdpbmRvdy5wbGFueW9fc2l0ZV9pZCkuaW5kZXhPZignTScpID09IDAgJiYgIXBsYW55b19nZXRfcGFyYW0oJ3NpdGVfaWQnKSkKICAgICAgcmV0dXJuICdzaXRlX2xpc3QnOwogICAgZWxzZQogICAgICByZXR1cm4gJ3Jlc291cmNlX2xpc3QnOwogIH0KCiAgaWYgKHdpbmRvdy5wbGFueW9fZGVmYXVsdF9tb2RlKQogICAgcmV0dXJuIHdpbmRvdy5wbGFueW9fZGVmYXVsdF9tb2RlOwoKICByZXR1cm4gJ3NlYXJjaCc7Cn0KCmZ1bmN0aW9uIHBsYW55b19nZXRfYWRkaXRpb25hbF9wcm9wcyAoZm9ybSwgZWxzKSB7CiAgaWYgKGZvcm0pIHsKICAgIHZhciBhciA9IGZvcm0uZWxlbWVudHM7CiAgICBmb3IodmFyIGk9MDthciAmJiBpPGFyLmxlbmd0aDtpKyspIHsKICAgICAgaWYgKGFyIFtpXS5uYW1lICYmIChhciBbaV0ubmFtZS5pbmRleE9mKCdwcm9wX3Jlc18nKSA9PSAwIHx8IGFyIFtpXS5uYW1lLmluZGV4T2YoJ3JlbnRhbF9wcm9wXycpID09IDApKQoJZWxzIFtlbHMubGVuZ3RoXSA9IGFyIFtpXS5uYW1lOwogICAgfQogIH0KICByZXR1cm4gZWxzOwp9CgpmdW5jdGlvbiBldmFsX2NoaWxkcmVuX3NjcmlwdHMocGFyKSB7CiAgZG9jdW1lbnQuZXZhbF90ZXh0ID0gbnVsbDsKICBwYXIuZ2V0RWxlbWVudHMoJ3NjcmlwdCcpLmVhY2ggKGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgaWYgKGRvY3VtZW50LmV2YWxfdGV4dCkgZG9jdW1lbnQuZXZhbF90ZXh0ICs9ICJcbiIraXRlbS50ZXh0OyBlbHNlIGRvY3VtZW50LmV2YWxfdGV4dCA9IGl0ZW0udGV4dDsKICAgIH0pOwogIAogIGlmKGRvY3VtZW50LmV2YWxfdGV4dCkgewogICAgaWYod2luZG93LmV4ZWNTY3JpcHQpCiAgICAgIHdpbmRvdy5leGVjU2NyaXB0KGRvY3VtZW50LmV2YWxfdGV4dCk7CiAgICBlbHNlCiAgICAgIHNldFRpbWVvdXQoImV2YWwoZG9jdW1lbnQuZXZhbF90ZXh0KSIsIDApOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2Zvcm1fbG9hZGVkKGNvZGUpIHsKICBpZiAoIWNvZGUgfHwgY29kZS5zdWJzdHIgKDAsIDUpID09ICJFcnJvciIpIHsKICAgIHdpbmRvdy5sb2NhdGlvbiA9ICh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXNlcnZlLnBocD9jYWxlbmRhcj0iICsgd2luZG93LnBsYW55b19zaXRlX2lkOwogIH0KICBlbHNlIHsKICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoIntQSC1tb2JpbGVfY291bnRyeV9wYXJhbX0iLCBwbGFueW9fZ2V0X3Bob25lX2NvZGVzKCJtb2JpbGVfY291bnRyeV9wYXJhbSIpKTsKICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoIntQSC1waG9uZV9jb3VudHJ5X3BhcmFtfSIsIHBsYW55b19nZXRfcGhvbmVfY29kZXMoInBob25lX2NvdW50cnlfcGFyYW0iKSk7CiAgICBjb2RlID0gY29kZS5yZXBsYWNlKCJ7Q08tY291bnRyeV9wYXJhbX0iLCBwbGFueW9fZ2V0X2NvdW50cnlfY29kZXMoKSk7CiAgICAvL2NvZGUgPSBjb2RlLnJlcGxhY2UoL2ljb24tY2FsZW5kYXIucG5nL2csIGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgoImljb24tY2FsZW5kYXIucG5nIikpOwogICAgLy9jb2RlID0gY29kZS5yZXBsYWNlKC9pY29uLWhlbHAuZ2lmL2csIGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgoImljb24taGVscC5naWYiKSk7CiAgICBjb2RlID0gY29kZS5yZXBsYWNlKC9wbGFueW8tc3R5bGVzLmNzcy9nLCBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJwbGFueW8tc3R5bGVzLmNzcyIpKTsKICAgIHBsYW55byQoJ3BsYW55b19jb250ZW50JykuaW5uZXJIVE1MID0gY29kZTsKCiAgICBpZiAoIXBsYW55b19pc3NldCh3aW5kb3cuUmVxdWVzdCkgfHwgIXBsYW55b19pc3NldCh3aW5kb3cuUmVxdWVzdC5KU09OKSkgewogICAgICBldmFsX2NoaWxkcmVuX3NjcmlwdHMocGxhbnlvJCgncGxhbnlvX2NvbnRlbnQnKSk7CiAgICB9CgogICAgdmFyIHBsYW55b19tb2RlID0gcGxhbnlvX2dldF9wYXJhbSgnbW9kZScpOwogICAgaWYgKCFwbGFueW9faXNfc3BlY2lhbF9tb2RlKHBsYW55b19tb2RlKSkKICAgICAgcGxhbnlvX21vZGUgPSBnZXRfcGxhbnlvX21vZGUoKTsKICAgIGlmIChwbGFueW9fbW9kZSA9PSAnc2VhcmNoJykgewogICAgICBwbGFueW8kKCdzZWFyY2hfZm9ybScpLm9uc3VibWl0PXBsYW55b19zZW5kX3NlYXJjaF9mb3JtOwogICAgICAgIHZhciBwYXJhbXNfYXJyYXkgPSBuZXcgQXJyYXkoJ3N0YXJ0X2RhdGUnLCAnZW5kX2RhdGUnLCAnb25lX2RhdGUnLCAnc3RhcnRfdGltZScsICdlbmRfdGltZScsICdzb3J0JywgJ2JveF9zdGFydF9kYXRlJywgJ2JveF9lbmRfZGF0ZScsICdib3hfb25lX2RhdGUnLCAnYm94X3N0YXJ0X3RpbWUnLCAnYm94X2VuZF90aW1lJywgJ3JlbnRhbF90aW1lX3ZhbHVlJywgJ2lzX25pZ2h0Jyk7CiAgICAgIHBsYW55b19nZXRfYWRkaXRpb25hbF9wcm9wcyAocGxhbnlvJCgnc2VhcmNoX2Zvcm0nKSwgcGFyYW1zX2FycmF5KTsKICAgICAgcGxhbnlvX3ByZWZpbGxfcGFyYW1zKHBhcmFtc19hcnJheSk7CiAgICAgIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdzdWJtaXR0ZWQnKSkgewoJcGxhbnlvX3NlbmRfc2VhcmNoX2Zvcm0oKTsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAocGxhbnlvX21vZGUgPT0gJ3Jlc2VydmUnKSB7CiAgICAgIGRvY3VtZW50LnBsYW55b19ub19ob3VyZ2xhc3MgPSB0cnVlOwogICAgICBzZXRUaW1lb3V0KCJpZih3aW5kb3cucGxhbnlvX2RhdGVzX2NoYW5nZWQpIHBsYW55b19kYXRlc19jaGFuZ2VkKCk7IiwxMDApOwogICAgICBzZXRUaW1lb3V0KCJpZih3aW5kb3cucGxhbnlvX2RhdGVzX2NoYW5nZWQpIHBsYW55b19kYXRlc19jaGFuZ2VkKCk7IiwxNTAwKTsKICAgICAgc2V0VGltZW91dCgiaWYod2luZG93LnBsYW55b19kYXRlc19jaGFuZ2VkKSB7cGxhbnlvX2RhdGVzX2NoYW5nZWQoKTtkb2N1bWVudC5wbGFueW9fbm9faG91cmdsYXNzID0gZmFsc2U7fSIsNTAwMCk7CiAgICAgIGlmIChwbGFueW8kKCdyZXNlcnZlX2Zvcm0nKSkKICAgICAgICBwbGFueW8kKCdyZXNlcnZlX2Zvcm0nKS5vbnN1Ym1pdD1wbGFueW9fc2VuZF9yZXNlcnZhdGlvbl9mb3JtOwogICAgICBpZiAocGxhbnlvJCgncHJvZHVjdF9mb3JtJykpCiAgICAgICAgcGxhbnlvJCgncHJvZHVjdF9mb3JtJykub25zdWJtaXQ9cGxhbnlvX3NlbmRfcHJvZHVjdF9mb3JtOwogICAgICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5wbGFueW9fbG9naW4pKSB7CiAgICAgICAgZm9yIChrZXkgaW4gd2luZG93LnBsYW55b19sb2dpbikgewogICAgICAgICAgdmFyIHZhbHVlID0gd2luZG93LnBsYW55b19sb2dpbltrZXldOwogICAgICAgICAgdmFyIG1vZF9rZXkgPSBrZXk7CiAgICAgICAgICBpZiAoa2V5ID09ICdmaXJzdF9uYW1lJykgCiAgICAgICAgICAgIG1vZF9rZXkgPSAnZmlyc3QnOwogICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICdsYXN0X25hbWUnKQogICAgICAgICAgICBtb2Rfa2V5ID0gJ2xhc3QnOwogICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICdlbWFpbCcpCiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgiW2F0XSIsICJAIik7CiAgICAgICAgICBpZiAodmFsdWUgJiYgJChtb2Rfa2V5KSAmJiAhJChtb2Rfa2V5KS52YWx1ZSkKICAgICAgICAgICAgJChtb2Rfa2V5KS52YWx1ZSA9IHZhbHVlOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgcGFyYW1zX2FycmF5ID0gbmV3IEFycmF5KCdzdGFydF9kYXRlJywgJ2VuZF9kYXRlJywgJ29uZV9kYXRlJywgJ3N0YXJ0X3RpbWUnLCAnZW5kX3RpbWUnLCAnYm94X3N0YXJ0X2RhdGUnLCAnYm94X2VuZF9kYXRlJywgJ2JveF9vbmVfZGF0ZScsICdib3hfc3RhcnRfdGltZScsICdib3hfZW5kX3RpbWUnLCAncmVudGFsX3RpbWVfdmFsdWUnKTsKICAgICAgcGxhbnlvX2dldF9hZGRpdGlvbmFsX3Byb3BzIChwbGFueW8kKCdyZXNlcnZlX2Zvcm0nKSwgcGFyYW1zX2FycmF5KTsKICAgICAgcGxhbnlvX3ByZWZpbGxfcGFyYW1zKHBhcmFtc19hcnJheSk7CiAgICAgIGlmIChwbGFueW8kKCJwbGFueW9fcHJpY2VfaG9sZGVyIikpIHsKICAgICAgICBwbGFueW8kKCdwbGFueW9fcHJpY2VfaG9sZGVyJykuYXBwZW5kQ2hpbGQocGxhbnlvJCgncHJpY2VfaW5mbycpKTsKICAgICAgICBwbGFueW8kKCdwbGFueW9fcHJpY2VfaG9sZGVyJykuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgIHBsYW55byQoJ3ByaWNlX2luZm9fZGl2Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAocGxhbnlvX21vZGUgPT0gJ21vZGlmeV9kYXRhX2Zvcm0nKSB7CiAgICAgIHBsYW55byQoJ21vZGlmeV9kYXRhX2Zvcm0nKS5vbnN1Ym1pdD1wbGFueW9fc2VuZF9tb2RpZnlfZGF0YV9mb3JtOwogICAgfQogICAgZWxzZSBpZiAocGxhbnlvX21vZGUgPT0gJ2FkZGl0aW9uYWxfcHJvZHVjdHNfY29kZScpIHsgICAgICAKICAgICAgaWYgKHBsYW55byQoJ3Byb2R1Y3RfZm9ybScpKQogICAgICAgIHBsYW55byQoJ3Byb2R1Y3RfZm9ybScpLm9uc3VibWl0PXBsYW55b19zZW5kX3Byb2R1Y3RfZm9ybTsKICAgIH0KICAgIGVsc2UgaWYgKHBsYW55b19tb2RlID09ICdjaGVja291dCcpIHsKICAgICAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cuanNfc3VibWl0X3BheW1lbnRfZm9ybSkpCiAgICAgICAgd2luZG93LmpzX3N1Ym1pdF9wYXltZW50X2Zvcm0oKTsKICAgIH0KICAgIGlmIChwbGFueW9faXNzZXQod2luZG93Lm9uX3BsYW55b19mb3JtX2xvYWRlZCkpCiAgICAgIHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQocGxhbnlvX21vZGUpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX2NvZGUoZm9ybV91cmwsIGZvcm1fdXJsX3BhcmFtcykgewogIGlmICh3aW5kb3cucGxhbnlvX2xhbmd1YWdlKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICImbGFuZ3VhZ2U9IiArIHBsYW55b19sYW5ndWFnZTsKICBmb3JtX3VybF9wYXJhbXMgKz0gIiZodG1sX2NvbnRlbnRfdHlwZT0xIjsKICB2YXIgc2hvcHBpbmdfY2FydF9pZCA9IHBsYW55b19nZXRfY29va2llICgncGxhbnlvX2NhcnRfaWQnKTsKICBpZiAoc2hvcHBpbmdfY2FydF9pZCAmJiBmb3JtX3VybF9wYXJhbXMuaW5kZXhPZignY2FydF9pZD0nKSA9PSAtMSkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAiJmNhcnRfaWQ9IiArIHNob3BwaW5nX2NhcnRfaWQgKyAiJmZpcnN0X3Jlc2VydmF0aW9uX2lkPSIgKyBwbGFueW9fZ2V0X2Nvb2tpZSgncGxhbnlvX2ZpcnN0X3Jlc2VydmF0aW9uX2lkJyk7CiAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cucGxhbnlvX2xvZ2luKSAmJiBwbGFueW9faXNzZXQod2luZG93LnBsYW55b19sb2dpbiwgJ2xvZ2luX2NzJykgJiYgcGxhbnlvX2lzc2V0KHdpbmRvdy5wbGFueW9fbG9naW4sICdlbWFpbCcpKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICImbG9naW5fY3M9IiArIHdpbmRvdy5wbGFueW9fbG9naW5bJ2xvZ2luX2NzJ10gKyAiJmxvZ2luX2VtYWlsPSIgKyB3aW5kb3cucGxhbnlvX2xvZ2luWydlbWFpbCddOwogIHZhciBwcHBfcGFyYW1zID0gcGxhbnlvX2dldF9wcmVmaXhlZF9wYXJhbXMoJ3BwcF8nKTsKICBpZiAocHBwX3BhcmFtcy5sZW5ndGggPiAwKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICImIiArIHBwcF9wYXJhbXM7CiAgZm9ybV91cmxfcGFyYW1zICs9ICImdXNlcl9hZ2VudD0iICsgbmF2aWdhdG9yLnVzZXJBZ2VudDsKICBkb2N1bWVudC5wbGFueW9fZmlsZV9wYXRoID0gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgnJyk7CiAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cuUmVxdWVzdCkgJiYgcGxhbnlvX2lzc2V0KHdpbmRvdy5SZXF1ZXN0LkpTT04pKSB7CiAgICB2YXIgeGhyX3JlcSA9IG5ldyBSZXF1ZXN0ICgKCQkJCSAgICB7CgkJCQkgICAgdXJsOmZvcm1fdXJsLAoJCQkJCW1ldGhvZDoncG9zdCcsCgkJCQkJb25TdWNjZXNzOiBwbGFueW9fZm9ybV9sb2FkZWQsCgkJCQkJZXZhbFNjcmlwdHM6IHRydWUKCQkJCQl9KS5zZW5kKGZvcm1fdXJsX3BhcmFtcyk7CiAgfQogIGVsc2UgewogICAgdmFyIHhocl9yZXEgPSBuZXcgWEhSICh7CiAgICAgIG1ldGhvZDoncG9zdCcsCgkgIG9uU3VjY2VzczogcGxhbnlvX2Zvcm1fbG9hZGVkLAoJICBldmFsU2NyaXB0czogdHJ1ZQoJICB9KS5zZW5kKGZvcm1fdXJsLCBmb3JtX3VybF9wYXJhbXMpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX25vbl9yZXNlcnZhdGlvbl9zdGVwX2FkZGl0aW9uYWxfcHJvZHVjdHNfZm9ybSAocmVzZXJ2YXRpb25faWQsIHVzZXJfaWQpIHsKICBpZiAocmVzZXJ2YXRpb25faWQpIHsKICAgIHZhciBmb3JtX3VybCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpOwogICAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9hZGRpdGlvbmFsX3Byb2R1Y3RzX2NvZGUmcmVzZXJ2YXRpb25faWQ9IityZXNlcnZhdGlvbl9pZCsiJnVzZXJfaWQ9Iit1c2VyX2lkKyImbm9uX3Jlc2VydmF0aW9uX3N0ZXA9MSZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCk7CiAgICBwbGFueW9fZW1iZWRfY29kZSAoZm9ybV91cmwsZm9ybV91cmxfcGFyYW1zKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9tb2RpZnlfZGF0YV9mb3JtIChyZXNlcnZhdGlvbl9pZCwgdXNlcl9pZCkgewogIGlmIChyZXNlcnZhdGlvbl9pZCkgewogICAgdmFyIGZvcm1fdXJsID0gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCk7CiAgICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHdpbmRvdy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1tb2RpZnlfZGF0YV9mb3JtJnJlc2VydmF0aW9uX2lkPSIrcmVzZXJ2YXRpb25faWQrIiZ1c2VyX2lkPSIrdXNlcl9pZCsiJmZlZWRiYWNrX3VybD0iK3BsYW55b19nZXRfY3VycmVudF91cmwoKTsKICAgIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX2NhbmNlbF9jb2RlKHNpdGVfaWQsIHJlc2VydmF0aW9uX2lkLCBjLCB1c2VyX2lkLCByZXNvdXJjZV9pZCkgewogIGlmIChyZXNlcnZhdGlvbl9pZCkgewogICAgdmFyIGZvcm1fdXJsID0gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCk7CiAgICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHdpbmRvdy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X2NhbmNlbF9jb2RlJnJlc2VydmF0aW9uX2lkPSIrcmVzZXJ2YXRpb25faWQrIiZjPSIrYysiJnJlc291cmNlX2lkPSIrcmVzb3VyY2VfaWQrIiZ1c2VyX2lkPSIrdXNlcl9pZCsiJmZlZWRiYWNrX3VybD0iK3BsYW55b19nZXRfY3VycmVudF91cmwoKSsiJnNpdGVfaWQ9IitzaXRlX2lkOwogICAgcGxhbnlvX2VtYmVkX2NvZGUgKGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtcyk7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfcmVzZXJ2YXRpb25fZGV0YWlscyhzaXRlX2lkLCByZXNlcnZhdGlvbl9pZCwgdXNlcl9pZCkgewogIGlmIChyZXNlcnZhdGlvbl9pZCkgewogICAgdmFyIGZvcm1fdXJsID0gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCk7CiAgICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHdpbmRvdy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X3Jlc2VydmF0aW9uX2RldGFpbHNfY29kZSZyZXNlcnZhdGlvbl9pZD0iK3Jlc2VydmF0aW9uX2lkKyImdXNlcl9pZD0iK3VzZXJfaWQrIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkrIiZzaXRlX2lkPSIrc2l0ZV9pZDsKICAgIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX3Jlc2VydmF0aW9uX2xpc3Qoc2l0ZV9pZCwgcmVzZXJ2YXRpb25faWQsIHVzZXJfaWQpIHsKICB2YXIgZm9ybV91cmwgPSBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKHVsYXBfc2NyaXB0KTsKICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHdpbmRvdy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X3Jlc2VydmF0aW9uX2xpc3RfY29kZSI7CiAgZm9ybV91cmxfcGFyYW1zICs9ICImZmVlZGJhY2tfdXJsPSIrcGxhbnlvX2dldF9jdXJyZW50X3VybCgpKyImc2l0ZV9pZD0iK3NpdGVfaWQ7CiAgaWYgKHJlc2VydmF0aW9uX2lkICYmIHVzZXJfaWQpCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZyZXNlcnZhdGlvbl9pZD0iK3Jlc2VydmF0aW9uX2lkKyImdXNlcl9pZD0iK3VzZXJfaWQ7CiAgcGxhbnlvX2VtYmVkX2NvZGUgKGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9wYXltZW50X2Zvcm0oc2l0ZV9pZCwgcmVzZXJ2YXRpb25faWQsIHVzZXJfaWQsIGF1dG9fcmVkaXJlY3QpIHsKICBpZiAocmVzZXJ2YXRpb25faWQpIHsKICAgIHZhciBmb3JtX3VybCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpOwogICAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9wYXltZW50X2Zvcm1fY29kZSZyZXNlcnZhdGlvbl9pZD0iK3Jlc2VydmF0aW9uX2lkKyImdXNlcl9pZD0iK3VzZXJfaWQrIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkrIiZzaXRlX2lkPSIrc2l0ZV9pZCsoYXV0b19yZWRpcmVjdCA/ICImYXV0b19yZWRpcmVjdD0iK2F1dG9fcmVkaXJlY3QgOiAiIik7CiAgICB2YXIgYW1vdW50ID0gcGxhbnlvX2dldF9wYXJhbSgnYW1vdW50Jyk7CiAgICBpZiAoYW1vdW50KQogICAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZhbW91bnQ9IithbW91bnQ7CiAgICBwbGFueW9fZW1iZWRfY29kZSAoZm9ybV91cmwsZm9ybV91cmxfcGFyYW1zKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9jYXJ0X2NvZGUoc2l0ZV9pZCwgY2FydF9pZCwgZmlyc3RfcmVzZXJ2YXRpb25faWQsIHJlbW92ZV9yZXNlcnZhdGlvbl9pZCkgewogIGlmICghY2FydF9pZCkgewogICAgY2FydF9pZCA9IHBsYW55b19nZXRfY29va2llKCdwbGFueW9fY2FydF9pZCcpOwogICAgZmlyc3RfcmVzZXJ2YXRpb25faWQgPSBwbGFueW9fZ2V0X2Nvb2tpZSgncGxhbnlvX2ZpcnN0X3Jlc2VydmF0aW9uX2lkJyk7CiAgfQogIHZhciBmb3JtX3VybCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpOwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9Iisod2luZG93LnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfY2FydF9jb2RlJmZpcnN0X3Jlc2VydmF0aW9uX2lkPSIrZmlyc3RfcmVzZXJ2YXRpb25faWQrIiZyZW1vdmVfcmVzZXJ2YXRpb25faWQ9IisocmVtb3ZlX3Jlc2VydmF0aW9uX2lkID8gcmVtb3ZlX3Jlc2VydmF0aW9uX2lkIDogIiIpKyImY2FydF9pZD0iK2NhcnRfaWQrIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkrIiZzaXRlX2lkPSIrc2l0ZV9pZDsKICBwbGFueW9fZW1iZWRfY29kZSAoZm9ybV91cmwsZm9ybV91cmxfcGFyYW1zKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX2NoZWNrb3V0X2NvZGUoc2l0ZV9pZCwgY2FydF9pZCwgZmlyc3RfcmVzZXJ2YXRpb25faWQpIHsKICBpZiAoIWNhcnRfaWQpIHsKICAgIGNhcnRfaWQgPSBwbGFueW9fZ2V0X2Nvb2tpZSgncGxhbnlvX2NhcnRfaWQnKTsKICAgIGZpcnN0X3Jlc2VydmF0aW9uX2lkID0gcGxhbnlvX2dldF9jb29raWUoJ3BsYW55b19maXJzdF9yZXNlcnZhdGlvbl9pZCcpOwogIH0KICB2YXIgZm9ybV91cmwgPSBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKHVsYXBfc2NyaXB0KTsKICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHdpbmRvdy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X2NoZWNrb3V0X2NvZGUmZmlyc3RfcmVzZXJ2YXRpb25faWQ9IitmaXJzdF9yZXNlcnZhdGlvbl9pZCsiJmNhcnRfaWQ9IitjYXJ0X2lkKyImZmVlZGJhY2tfdXJsPSIrcGxhbnlvX2dldF9jdXJyZW50X3VybCgpKyImc2l0ZV9pZD0iK3NpdGVfaWQ7CiAgcGxhbnlvX2VtYmVkX2NvZGUgKGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF93aWRnZXQoc2l0ZV9pZCkgewogIHZhciBmb3JtX3VybCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpOwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9Iisod2luZG93LnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfd2lkZ2V0JmZlZWRiYWNrX3VybD0iK3BsYW55b19nZXRfY3VycmVudF91cmwoKSsiJnNpdGVfaWQ9IitzaXRlX2lkOwogIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfcmVzZXJ2YXRpb25fZm9ybShzaXRlX2lkLCByZXNvdXJjZV9pZCkgewogIHZhciBmb3JtX3VybCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpOwogIGlmICghcmVzb3VyY2VfaWQpIHsKICAgIGlmIChwbGFueW9faXNzZXQgKHdpbmRvdy5wbGFueW9fcmVzb3VyY2VfaWQpKQogICAgICByZXNvdXJjZV9pZCA9IHdpbmRvdy5wbGFueW9fcmVzb3VyY2VfaWQ7CiAgICBlbHNlCiAgICAgIHJlc291cmNlX2lkID0gJyc7CiAgfQogIHZhciBkYXRlX3N0ciA9ICcnOwogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdzdGFydF9kYXRlJykpCiAgICBkYXRlX3N0ciA9ICImc3RhcnRfZGF0ZT0iK3BsYW55b19nZXRfcGFyYW0oJ3N0YXJ0X2RhdGUnKTsKICBlbHNlIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdvbmVfZGF0ZScpKQogICAgZGF0ZV9zdHIgPSAiJm9uZV9kYXRlPSIrcGxhbnlvX2dldF9wYXJhbSgnb25lX2RhdGUnKTsKICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHdpbmRvdy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X3Jlc2VydmF0aW9uX2Zvcm1fY29kZSZzaXRlX2lkPSIrc2l0ZV9pZCsiJnJlc291cmNlX2lkPSIrcmVzb3VyY2VfaWQrIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkrZGF0ZV9zdHI7CiAgcGxhbnlvX2VtYmVkX2NvZGUgKGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9hZGRpdGlvbmFsX3Byb2R1Y3RzX2Zvcm0ocmVzZXJ2YXRpb25faWQpIHsKICBpZiAocmVzZXJ2YXRpb25faWQpIHsKICAgIHZhciBmb3JtX3VybCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpOwogICAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9hZGRpdGlvbmFsX3Byb2R1Y3RzX2NvZGUmcmVzZXJ2YXRpb25faWQ9IityZXNlcnZhdGlvbl9pZCsiJmZlZWRiYWNrX3VybD0iK3BsYW55b19nZXRfY3VycmVudF91cmwoKTsKICAgIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX3VwY29taW5nX2F2YWlsYWJpbGl0eV9zZWFyY2hfZm9ybShzaXRlX2lkKSB7CiAgdmFyIGZvcm1fdXJsID0gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCk7CiAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV91cGNvbWluZ19hdmFpbGFiaWxpdHlfc2VhcmNoX2Zvcm1fY29kZSZmZWVkYmFja191cmw9IiArIHBsYW55b19nZXRfY3VycmVudF91cmwoKSArICImZXh0cmFfc2VhcmNoX2ZpZWxkcz0iICsgKHBsYW55b19nZXRfcGFyYW0oJ2V4dHJhX3NlYXJjaF9maWVsZHMnKSA/IHBsYW55b19nZXRfcGFyYW0oJ2V4dHJhX3NlYXJjaF9maWVsZHMnKSA6IGV4dHJhX3NlYXJjaF9maWVsZHMpICsgIiZzaXRlX2lkPSIrc2l0ZV9pZDsKICBwbGFueW9fZW1iZWRfY29kZSAoZm9ybV91cmwsIGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9zZWFyY2hfZm9ybShzaXRlX2lkKSB7CiAgdmFyIGZvcm1fdXJsID0gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCk7CiAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9zZWFyY2hfZm9ybV9jb2RlJmZlZWRiYWNrX3VybD0iICsgcGxhbnlvX2dldF9jdXJyZW50X3VybCgpICsgIiZleHRyYV9zZWFyY2hfZmllbGRzPSIgKyAocGxhbnlvX2dldF9wYXJhbSgnZXh0cmFfc2VhcmNoX2ZpZWxkcycpID8gcGxhbnlvX2dldF9wYXJhbSgnZXh0cmFfc2VhcmNoX2ZpZWxkcycpIDogZXh0cmFfc2VhcmNoX2ZpZWxkcykgKyAiJnNpdGVfaWQ9IitzaXRlX2lkOwogIGlmIChwbGFueW9faXNzZXQod2luZG93LnNvcnRfZmllbGRzKSkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAiJnNvcnRfZmllbGRzPSIrc29ydF9maWVsZHM7CiAgdmFyIHJhbmdlX3NlYXJjaCA9IHBsYW55b19nZXRfcGFyYW0oJ3JhbmdlX3NlYXJjaCcpOwogIGlmICghcmFuZ2Vfc2VhcmNoKQogICAgcmFuZ2Vfc2VhcmNoID0gZG9jdW1lbnQucmFuZ2Vfc2VhcmNoOwogIGlmIChyYW5nZV9zZWFyY2gpCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZyYW5nZV9zZWFyY2g9IityYW5nZV9zZWFyY2g7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3NlcGFyYXRlLXVuaXRzJykpCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZzZXBhcmF0ZS11bml0cz0xIjsKICB2YXIgc2VhcmNoX21vZGVsX3NpdGUgPSBwbGFueW9fZ2V0X3BhcmFtKCdzZWFyY2hfbW9kZWxfc2l0ZScpOwogIGlmIChzZWFyY2hfbW9kZWxfc2l0ZSkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAiJnNlYXJjaF9tb2RlbF9zaXRlPSIrc2VhcmNoX21vZGVsX3NpdGU7CiAgcGxhbnlvX2VtYmVkX2NvZGUgKGZvcm1fdXJsLCBmb3JtX3VybF9wYXJhbXMpOwp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfcmVzb3VyY2VfbGlzdChzaXRlX2lkKSB7CiAgdmFyIGZvcm1fdXJsID0gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCk7CiAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9yZXNvdXJjZV9saXN0X2NvZGUmZmVlZGJhY2tfdXJsPSIgKyBwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkgKyAiJnNpdGVfaWQ9IitzaXRlX2lkOwogIGlmIChTdHJpbmcod2luZG93LnBsYW55b19zaXRlX2lkKS5pbmRleE9mKCdNJyk9PTApCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZtZXRhc2l0ZV9pZD0iK3dpbmRvdy5wbGFueW9fc2l0ZV9pZC5zdWJzdHIoMSk7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3Jlc19maWx0ZXJfbmFtZScpKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICcmJyArIHBsYW55b19nZXRfcGFyYW0oJ3Jlc19maWx0ZXJfbmFtZScpICsgJz0nICsgcGxhbnlvX2dldF9wYXJhbSgncmVzX2ZpbHRlcl92YWx1ZScpOwogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdjYWxfZmlsdGVyX25hbWUnKSkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAnJicgKyBwbGFueW9fZ2V0X3BhcmFtKCdjYWxfZmlsdGVyX25hbWUnKSArICc9JyArIHBsYW55b19nZXRfcGFyYW0oJ2NhbF9maWx0ZXJfdmFsdWUnKTsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnc29ydCcpKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICcmc29ydD0nICsgcGxhbnlvX2dldF9wYXJhbSgnc29ydCcpOwogIGVsc2UgaWYgKHdpbmRvdy5wbGFueW9fcmVzb3VyY2Vfb3JkZXJpbmcpCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gJyZzb3J0PScgKyB3aW5kb3cucGxhbnlvX3Jlc291cmNlX29yZGVyaW5nOwogIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCwgZm9ybV91cmxfcGFyYW1zKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX3NpdGVfbGlzdChtZXRhc2l0ZV9pZCkgewogIHZhciBmb3JtX3VybCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpOwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9Iisod2luZG93LnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfc2l0ZV9saXN0X2NvZGUmZmVlZGJhY2tfdXJsPSIgKyBwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkgKyAiJm1ldGFzaXRlX2lkPSIrbWV0YXNpdGVfaWQ7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3NvcnQnKSkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAnJnNvcnQ9JyArIHBsYW55b19nZXRfcGFyYW0oJ3NvcnQnKTsKICBwbGFueW9fZW1iZWRfY29kZSAoZm9ybV91cmwsIGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9yZXNvdXJjZV9kZXNjKHJlc291cmNlX2lkLCBzaXRlX2lkKSB7CiAgaWYgKCFyZXNvdXJjZV9pZCkgewogICAgaWYgKHBsYW55b19pc3NldCAod2luZG93LnBsYW55b19yZXNvdXJjZV9pZCkpCiAgICAgIHJlc291cmNlX2lkID0gd2luZG93LnBsYW55b19yZXNvdXJjZV9pZDsKICAgIGVsc2UKICAgICAgcmVzb3VyY2VfaWQgPSAnJzsKICB9CiAgdmFyIGZvcm1fdXJsID0gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCk7CiAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9zaW5nbGVfcmVzb3VyY2VfY29kZSZmZWVkYmFja191cmw9IiArIHBsYW55b19nZXRfY3VycmVudF91cmwoKSArICImcmVzb3VyY2VfaWQ9IityZXNvdXJjZV9pZCsiJnNpdGVfaWQ9IitzaXRlX2lkOwogIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCwgZm9ybV91cmxfcGFyYW1zKTsKfQoKZnVuY3Rpb24gaW5pdF9wbGFueW8oKSB7CiAgaWYgKHBsYW55byQoJ3BsYW55b19wcmljZV9ob2xkZXInKSkKICAgIHBsYW55byQoJ3BsYW55b19wcmljZV9ob2xkZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIGlmICh3aW5kb3cucGxhbnlvX3NpdGVfaWQgPT0gJ2RlbW8nKQogICAgd2luZG93LnBsYW55b19zaXRlX2lkID0gMTE7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0gKCdsYW5nJykpCiAgICBwbGFueW9fbGFuZ3VhZ2UgPSBwbGFueW9fZ2V0X3BhcmFtKCdsYW5nJyk7CiAgaWYgKCFwbGFueW9faW5pdF9zcGVjaWFsX21vZGVzKCkpIHsKICAgIHZhciBwbGFueW9fbW9kZSA9IGdldF9wbGFueW9fbW9kZSgpOwogICAgaWYgKHBsYW55b19tb2RlID09ICdlbXB0eScgJiYgcGxhbnlvX2dldF9wYXJhbSgnc3VibWl0dGVkJykpCiAgICAgIHBsYW55b19tb2RlID0gJ3Jlc2VydmUnOwogICAgaWYgKHBsYW55b19tb2RlID09ICdzZWFyY2gnKQogICAgICBwbGFueW9fZW1iZWRfc2VhcmNoX2Zvcm0od2luZG93LnBsYW55b19zaXRlX2lkKTsKICAgIGVsc2UgaWYgKHBsYW55b19tb2RlID09ICd1cGNvbWluZ19hdmFpbGFiaWxpdHknKQogICAgICBwbGFueW9fZW1iZWRfdXBjb21pbmdfYXZhaWxhYmlsaXR5X3NlYXJjaF9mb3JtKHdpbmRvdy5wbGFueW9fc2l0ZV9pZCk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAncmVzZXJ2ZScpCiAgICAgIHBsYW55b19lbWJlZF9yZXNlcnZhdGlvbl9mb3JtKHdpbmRvdy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgncmVzb3VyY2VfaWQnKSk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAncmVzb3VyY2VfbGlzdCcpCiAgICAgIHBsYW55b19lbWJlZF9yZXNvdXJjZV9saXN0KChwbGFueW9fZ2V0X3BhcmFtKCdzaXRlX2lkJykgJiYgU3RyaW5nKHdpbmRvdy5wbGFueW9fc2l0ZV9pZCkuaW5kZXhPZignTScpPT0wKSA/IHBsYW55b19nZXRfcGFyYW0oJ3NpdGVfaWQnKSA6IHdpbmRvdy5wbGFueW9fc2l0ZV9pZCk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAnc2l0ZV9saXN0JyAmJiBTdHJpbmcod2luZG93LnBsYW55b19zaXRlX2lkKS5pbmRleE9mKCdNJyk9PTApCiAgICAgIHBsYW55b19lbWJlZF9zaXRlX2xpc3Qod2luZG93LnBsYW55b19zaXRlX2lkLnN1YnN0cigxKSk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAncmVzb3VyY2VfZGVzYycpCiAgICAgIHBsYW55b19lbWJlZF9yZXNvdXJjZV9kZXNjKHBsYW55b19nZXRfcGFyYW0oJ3Jlc291cmNlX2lkJyksIHdpbmRvdy5wbGFueW9fc2l0ZV9pZCk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAnZW1wdHknKQogICAgICBwbGFueW8kKCdwbGFueW9fY29udGVudCcpLmlubmVySFRNTCA9ICIiOwogIH0KfQoKd2luZG93LmFkZEV2ZW50KCdkb21yZWFkeScsIGluaXRfcGxhbnlvKTsK]]></data>
	</file>
	<file>
	  <filename>/planyo-styles.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I3Jlc2VydmVfZm9ybSwgI3NlYXJjaF9mb3JtLCAjYm94X3NlYXJjaF9mb3JtLCAjcHJvZHVjdF9mb3JtLCAjcHJlc2VudGF0aW9uX2NvZGUsICNyZXNvdXJjZXMgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsJCiAgICBmb250OiBub3JtYWwgMTJweCBUYWhvbWEsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgZGlzcGxheTogYmxvY2s7CiAgICB0ZXh0LWFsaWduOmxlZnQ7Cn0KCiNwbGFueW9fY29udGVudCB7CiAgICBtYXJnaW4tYm90dG9tOjMwcHg7Cn0KCiNwbGFueW9fY29udGVudCBhLCAjcGxhbnlvX3BsdWdpbl9jb2RlIGEgewogICAgY29sb3I6ICNlMDU4MTc7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCiNwbGFueW9fY29udGVudCBhOmhvdmVyLCAjcGxhbnlvX3BsdWdpbl9jb2RlIGE6aG92ZXIgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCiNyZXNlcnZlX2Zvcm0sICNyZXNvdXJjZXMsICNwcmVzZW50YXRpb25fY29kZSB7CiAgICB3aWR0aDoxMDAlOwp9CgojcGxhbnlvX2NvbnRlbnQgZm9ybSBmaWVsZHNldCwgI2JveF9zZWFyY2hfZm9ybSBmaWVsZHNldCwgI3BsYW55b19wbHVnaW5fY29kZSBmb3JtIGZpZWxkc2V0IHsKICAgIHBhZGRpbmc6IDFlbSAwOwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZy10b3A6IDA7Cn0KCiNwbGFueW9fY29udGVudCBmb3JtIGZpZWxkc2V0IGxlZ2VuZCwgI2JveF9zZWFyY2hfZm9ybSBmaWVsZHNldCBsZWdlbmQsICNwbGFueW9fcGx1Z2luX2NvZGUgZm9ybSBmaWVsZHNldCBsZWdlbmQgewogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWJvdHRvbTozcHg7CiAgICBwYWRkaW5nOjA7CiAgICBwYWRkaW5nLXJpZ2h0OiAxZW07CiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2UwZTBlMDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgY29sb3I6IGJsYWNrOwp9CgojcGxhbnlvX2NvbnRlbnQgZm9ybSBsYWJlbCwgI2JveF9zZWFyY2hfZm9ybSBsYWJlbCwgI3BsYW55b19wbHVnaW5fY29kZSBmb3JtIGxhYmVsIHsKICAgIGRpc3BsYXk6IGlubGluZTsKICAgIGZsb2F0OiBsZWZ0OwogICAgY2xlYXI6IGxlZnQ7CiAgICB3aWR0aDogMTJlbTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgIG1hcmdpbi10b3A6MnB4Owp9CgojcGxhbnlvX2NvbnRlbnQgZm9ybSBsYWJlbCBlbSwgI2JveF9zZWFyY2hfZm9ybSBsYWJlbCBlbSwgI3BsYW55b19wbHVnaW5fY29kZSBmb3JtIGxhYmVsIGVtIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgY29sb3I6IHJlZDsKfQoKI3BsYW55b19jb250ZW50IGZvcm0gc2VsZWN0LCAjYm94X3NlYXJjaF9mb3JtIHNlbGVjdCwgI3BsYW55b19wbHVnaW5fY29kZSBmb3JtIHNlbGVjdCB7CiAgICBtYXJnaW4tYm90dG9tOjNweDsKfQoKI3BsYW55b19jb250ZW50IGZvcm0gaW5wdXQsICNib3hfc2VhcmNoX2Zvcm0gaW5wdXQsICNwbGFueW9fcGx1Z2luX2NvZGUgZm9ybSBpbnB1dCB7CiAgICBwYWRkaW5nLXRvcDogMnB4OwogICAgbWFyZ2luLWJvdHRvbTozcHg7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICBkaXNwbGF5OmlubGluZTsKfQoKI3BsYW55b19jb250ZW50IGZvcm0gaW5wdXRbdHlwZT0idGV4dCJdLCAjcGxhbnlvX3BsdWdpbl9jb2RlIGZvcm0gaW5wdXRbdHlwZT0idGV4dCJdIHsKICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CiAgICB3aWR0aDoxNWVtOwp9CgojcGxhbnlvX2NvbnRlbnQgZm9ybSAjb25lX2RhdGUsICNwbGFueW9fY29udGVudCBmb3JtICNzdGFydF9kYXRlLCNwbGFueW9fY29udGVudCBmb3JtICNlbmRfZGF0ZSwKI2JveF9vbmVfZGF0ZSwgI2JveF9zdGFydF9kYXRlLCNib3hfZW5kX2RhdGUsCiNwbGFueW9fcGx1Z2luX2NvZGUgZm9ybSAjb25lX2RhdGUsICNwbGFueW9fcGx1Z2luX2NvZGUgZm9ybSAjc3RhcnRfZGF0ZSwjcGxhbnlvX3BsdWdpbl9jb2RlIGZvcm0gI2VuZF9kYXRlIHsKICAgIHdpZHRoOjhlbTsKfQoKI3Jlc2VydmVfZm9ybSAjcGhvbmUsICNyZXNlcnZlX2Zvcm0gI21vYmlsZV9udW1iZXJfcGFyYW0gewogICAgd2lkdGg6OGVtOwp9CgoucGFnZS1wbGFueW8gI3BsYW55b19jb250ZW50IHVsIHsKICAgIG1hcmdpbi10b3A6MjNweDsKfQoKI3BsYW55b19jb250ZW50IHVsLnN1bW1hcnksICNwbGFueW9fcGx1Z2luX2NvZGUgdWwuc3VtbWFyeSwgI2JveF9zZWFyY2hfZm9ybSB1bC5zdW1tYXJ5IHsKICAgIGxpbmUtaGVpZ2h0OjEuNTsKfQoKI3BsYW55b19jb250ZW50IHVsLCAjcGxhbnlvX3BsdWdpbl9jb2RlIHVsLCAjYm94X3NlYXJjaF9mb3JtIHVsIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOjA7CiAgICB0ZXh0LWluZGVudDowOwp9CgojcGxhbnlvX2NvbnRlbnQgZm9ybSBsaSwgI3BsYW55b19wbHVnaW5fY29kZSBmb3JtIGxpLCAjcmVzb3VyY2VzIGxpLCAjYm94X3NlYXJjaF9mb3JtIHVsIHsKICAgIG1hcmdpbjogMCAwIC41ZW0gMDsKICAgIGNsZWFyOmJvdGg7Cn0KCiNwbGFueW9fY29udGVudCAuYnV0dG9uLCAjcGxhbnlvX3BsdWdpbl9jb2RlIC5idXR0b24sICNwbGFueW9fY29udGVudCAuY2hlY2tvdXRfYnV0dG9uIHsKICAgIGRpc3BsYXk6YmxvY2s7CiAgICBtYXJnaW46IDAgMCAxZW07CiAgICBwYWRkaW5nOiAwIC41ZW07CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBsaW5lLWhlaWdodDoyNHB4OyAgICAKICAgIGJhY2tncm91bmQ6IHVybChidXR0b24tYmcucG5nKTsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItcmFkaXVzOjNweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1czozcHg7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Owp9CgojcGxhbnlvX2NvbnRlbnQgLmNoZWNrb3V0X2J1dHRvbiB7CiAgICBtYXJnaW46NXB4IDAgMjVweDsKICAgIHdpZHRoOjE2MHB4OwogICAgdGV4dC1hbGlnbjpjZW50ZXI7Cn0KCiNwbGFueW9fY29udGVudCBsaSBpbWcsICNwbGFueW9fcGx1Z2luX2NvZGUgbGkgaW1nLCAjYm94X3NlYXJjaF9mb3JtIGxpIGltZyB7CiAgICBib3JkZXI6IG5vbmU7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwkKfQoKI3BsYW55b19jb250ZW50IC5sZWZ0LCAjcGxhbnlvX3BsdWdpbl9jb2RlIC5sZWZ0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgY2xlYXI6IGxlZnQ7CiAgICBmbG9hdDogbm9uZTsKfQoKI3BsYW55b19jb250ZW50IC5yaWdodCwgI3BsYW55b19wbHVnaW5fY29kZSAucmlnaHQgewogICAgZGlzcGxheTogaW5saW5lOwogICAgZmxvYXQ6IHJpZ2h0OwogICAgY2xlYXI6IHJpZ2h0Owp9CgojcGxhbnlvX2NvbnRlbnQgaW1nLCAjcGxhbnlvX3BsdWdpbl9jb2RlIGltZyB7CiAgICBib3JkZXI6MDsKfQoKLnByaWNlX2luZm8gewogIGZvbnQ6IG5vcm1hbCAxMXB4IFRhaG9tYSwgVmVyZGFuYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOjE4cHg7Cn0KCi5wcmljZV9pbmZvX2RpdiAKewogIG1pbi1oZWlnaHQ6IDMycHg7CiAgd2lkdGg6IDEwMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDsKICBjbGVhcjpib3RoOwogIGZsb2F0Om5vbmU7CiAgbWFyZ2luLXRvcDoxMHB4OwogIG1hcmdpbi1ib3R0b206NXB4OwogIGJvcmRlci1yYWRpdXM6NXB4OwogIC1tb3otYm9yZGVyLXJhZGl1czo1cHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweDsKfQoKLnByaWNlX2luZm9fZGl2IC5wcmljZV9pbmZvX2Rpdl9jb250ZW50IHsKICBmb250LXNpemU6MTNweDsKICBwYWRkaW5nOiA4cHg7Cn0KCi5wcmljZV9pbmZvX2RpdiAudGl0bGUKewogIGZvbnQ6IGJvbGQgMjBweCBUYWhvbWEsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOwogIGNvbG9yOiMwNjIyNDU7Cn0KCi5jYWxwaWNrZXIgewogICAgbWFyZ2luOiAwOwogICAgbGluZS1oZWlnaHQ6MTAwJTsKICAgIGNsZWFyOmJvdGg7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwOwogICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgIGJhY2tncm91bmQtY29sb3I6d2hpdGU7CiAgICB3aWR0aDogMTQwcHg7Cn0KCi5jYWxwaWNrZXIgdGggewogICAgYmFja2dyb3VuZDogI2QwZDBkMDsKICAgIGZvbnQ6IG5vcm1hbCAxMXB4IFRhaG9tYSwgVmVyZGFuYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICBwYWRkaW5nOiAycHggM3B4IDJweCAzcHg7CiAgICBib3JkZXItYm90dG9tOiAwcHg7Cn0KCi5jYWxwaWNrZXIgLmFjdGl2ZV9kYXkgewogICAgYmFja2dyb3VuZDogI2JiYmJiYjsKICAgIGNvbG9yOndoaXRlOwp9CgouY2FscGlja2VyIC5yZXNlcnZlZCB7CiAgICBjb2xvcjogcmVkOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5jYWxwaWNrZXIgLnJlc2VydmVkOmhvdmVyIHsKICAgIGN1cnNvcjphdXRvOwogICAgYmFja2dyb3VuZDp3aGl0ZTsKICAgIGNvbG9yOnJlZDsKfQoKLmNhbHBpY2tlciAuY3VyX21vbnRoX2RheSB7CiAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwOwogICAgY29sb3I6YmxhY2s7Cn0KCi5jYWxwaWNrZXIgLmV4dF9tb250aF9kYXkgewogICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgIGNvbG9yOiAjYzVjNWM1Owp9CgouY2FscGlja2VyIHRkOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNlNzc4MTc7CiAgICBjb2xvcjogd2hpdGU7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5jYWxwaWNrZXIgdGQgewogICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDsKICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICBmb250OiBub3JtYWwgMTBweCBUYWhvbWEsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogMnB4IDNweCAycHggM3B4Owp9CgouY2FscGlja2VyIGNhcHRpb24gewogICAgcGFkZGluZzoycHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOwogICAgYm9yZGVyLXRvcDo0cHggc29saWQgI2MwYzBjMDsKICAgIG92ZXJmbG93OmhpZGRlbjsKICAgIGZvbnQ6IG5vcm1hbCAxMnB4IFRhaG9tYSwgVmVyZGFuYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICBjb2xvcjpibGFjazsKfQoKLmNhbHBpY2tlciBjYXB0aW9uIC5uYXYgewogICAgZmxvYXQ6bGVmdDsKICAgIHBhZGRpbmctcmlnaHQ6M3B4OwogICAgY29sb3I6ICNlMDU4MTc7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCiNyZXNfZXJyb3JfbXNnIHsKICAgIGRpc3BsYXk6bm9uZTsKICAgIGNvbG9yOnJlZDsKICAgIGZvbnQ6IGJvbGQgMTJweCBUYWhvbWEsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgbWFyZ2luLXRvcDoxNXB4Owp9CgojcmVzX29rX21zZyB7CiAgICBkaXNwbGF5Om5vbmU7CiAgICBmb250OiBub3JtYWwgMTJweCBUYWhvbWEsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOwp9Cgouc3RkdGFibGUgewogICAgY2xlYXI6Ym90aDsKICAgIGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7Cn0KCi5zdGR0YWJsZSB0ZCB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIHBhZGRpbmc6MnB4IDVweCAycHggNXB4Owp9Cgouc3RkdGFibGUgdGggewogICAgYmFja2dyb3VuZDogI2YwZjBmMDsKICAgIHBhZGRpbmc6IDJweCA1cHggMnB4IDVweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCiNwbGFueW9fY29udGVudCAuZXJyb3IsICNwbGFueW9fcGx1Z2luX2NvZGUgLmVycm9yIHsKICAgIGZvbnQ6IG5vcm1hbCAxMHB4IFRhaG9tYSwgVmVyZGFuYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICBjb2xvcjojY2MwMDAwOwp9CgojcGxhbnlvX2NvbnRlbnQgLmVycm9yYmlnLCAjcGxhbnlvX3BsdWdpbl9jb2RlIC5lcnJvcmJpZyB7CiAgICBmb250OiBib2xkIDEycHggVGFob21hLCBWZXJkYW5hLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgIGNvbG9yOiNjYzAwMDA7CiAgICBjb2xvcjogcmVkOwogICAgcGFkZGluZzogMTBweCAwIDIwcHg7Cn0KCiNzZWFyY2hfcmVzdWx0cyB7CiAgICBtYXJnaW4tdG9wOjIwcHg7Cn0KCiNyZXNvdXJjZXMgLnJlc291cmNlX3ByZXZpZXcgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmbG9hdDpsZWZ0Owp9CgojcHJlc2VudGF0aW9uX2NvZGUgLmJ1dHRvbiB7CiAgICBjbGVhcjpsZWZ0OwogICAgZmxvYXQ6bGVmdDsKICAgIG1hcmdpbi10b3A6MTBweDsKfQoKI3ByZXNlbnRhdGlvbl9jb2RlIC5yZXNvdXJjZV9uYW1lIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiAyNHB4Owp9CgojcHJlc2VudGF0aW9uX2NvZGUgLmNhbGVuZGFyX3ByZXYgewogICAgZmxvYXQ6bGVmdDsKICAgIGNsZWFyOmxlZnQ7CiAgICBtYXJnaW4tdG9wOjIwcHg7Cn0KCi5pbWdfdGh1bWIgewogICAgZmxvYXQ6bGVmdDsKICAgIHdpZHRoOjkwcHg7Cn0KCi5pbWdfdGh1bWJfZGVzYyB7CiAgICBjbGVhcjpsZWZ0OwogICAgZmxvYXQ6bGVmdDsKICAgIG1hcmdpbi1sZWZ0OjVweDsKfQoKI2JnX2hpZGVyIC5idXR0b25zIHsKICAgIHBhZGRpbmc6IDhweDsKfQoKI2JnX2hpZGVyIC5idXR0b25zIC5sZWZ0YnRuIHsKICAgIGZsb2F0OiBsZWZ0Owp9CgojYmdfaGlkZXIgLmJ1dHRvbnMgLnJpZ2h0YnRuIHsKICAgIGZsb2F0OiByaWdodDsKICAgIG1hcmdpbi1yaWdodDoyNXB4Owp9CgojZnVsbF9pbWdfZGl2ICNpbWdfaW5mbyAuY2xvc2UgewogICAgZmxvYXQ6IHJpZ2h0Owp9CgojYmdfaGlkZXIgLmJ1dHRvbnMgLnByZXYsCiNiZ19oaWRlciAuYnV0dG9ucyAubmV4dCwKI2JnX2hpZGVyIC5idXR0b25zIC5wbGF5LAojYmdfaGlkZXIgLmJ1dHRvbnMgLnBhdXNlLAojYmdfaGlkZXIgLmJ1dHRvbnMgLmNsb3NlLAojZnVsbF9pbWdfZGl2ICNpbWdfaW5mbyAuY2xvc2UgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMjhweDsKICAgIGhlaWdodDogMjhweDsKfQoKI2Z1bGxfaW1nX2RpdiAjb25faW1nX3ByZXYsCiNmdWxsX2ltZ19kaXYgI29uX2ltZ19uZXh0IHsKCWRpc3BsYXk6IGJsb2NrOwoJd2lkdGg6IDMwcHg7CgloZWlnaHQ6IDYwcHg7Cn0KCiNiZ19oaWRlciAuYnV0dG9ucyAucHJldiB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cucGxhbnlvLmNvbS9zbGlkZXNob3cvYnRuLXByZXYucG5nKTsKfQojYmdfaGlkZXIgLmJ1dHRvbnMgLnByZXY6aG92ZXIgewogICAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnBsYW55by5jb20vc2xpZGVzaG93L2J0bi1wcmV2LWh2ci5wbmcpOwp9CiNiZ19oaWRlciAuYnV0dG9ucyAubmV4dCB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cucGxhbnlvLmNvbS9zbGlkZXNob3cvYnRuLW5leHQucG5nKTsgCn0KI2JnX2hpZGVyIC5idXR0b25zIC5uZXh0OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5wbGFueW8uY29tL3NsaWRlc2hvdy9idG4tbmV4dC1odnIucG5nKTsKfQojYmdfaGlkZXIgLmJ1dHRvbnMgLnBsYXkgewogICAgbWFyZ2luLWxlZnQ6IDRweDsgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnBsYW55by5jb20vc2xpZGVzaG93L2J0bi1wbGF5LnBuZyk7Cn0KI2JnX2hpZGVyIC5idXR0b25zIC5wbGF5OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5wbGFueW8uY29tL3NsaWRlc2hvdy9idG4tcGxheS1odnIucG5nKTsKfQojYmdfaGlkZXIgLmJ1dHRvbnMgLnBhdXNlIHsKICAgIG1hcmdpbi1sZWZ0OiA0cHg7IGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5wbGFueW8uY29tL3NsaWRlc2hvdy9idG4tcGF1c2UucG5nKTsgCn0KI2JnX2hpZGVyIC5idXR0b25zIC5wYXVzZTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cucGxhbnlvLmNvbS9zbGlkZXNob3cvYnRuLXBhdXNlLWh2ci5wbmcpOwp9CiNiZ19oaWRlciAuYnV0dG9ucyAuY2xvc2UgewogICAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnBsYW55by5jb20vc2xpZGVzaG93L2J0bi1jbG9zZS5wbmcpOwp9CiNiZ19oaWRlciAuYnV0dG9ucyAuY2xvc2U6aG92ZXIgewogICAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnBsYW55by5jb20vc2xpZGVzaG93L2J0bi1jbG9zZS1odnIucG5nKTsKfQojZnVsbF9pbWdfZGl2ICNpbWdfaW5mbyAuY2xvc2UgewogIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5wbGFueW8uY29tL3NsaWRlc2hvdy9idG4tb24tY2xvc2UucG5nKTsgCn0KI2Z1bGxfaW1nX2RpdiAjaW1nX2luZm8gLmNsb3NlOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cucGxhbnlvLmNvbS9zbGlkZXNob3cvYnRuLW9uLWNsb3NlLWh2ci5wbmcpOyAKfQojZnVsbF9pbWdfZGl2ICNvbl9pbWdfcHJldiB7CiAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnBsYW55by5jb20vc2xpZGVzaG93L2J0bi1vbi1pbWctcHJldi5wbmcpOyAKfQojZnVsbF9pbWdfZGl2ICNvbl9pbWdfcHJldjpob3ZlciB7CiAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnBsYW55by5jb20vc2xpZGVzaG93L2J0bi1vbi1pbWctcHJldi1odnIucG5nKTsgCn0KI2Z1bGxfaW1nX2RpdiAjb25faW1nX25leHQgewogIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5wbGFueW8uY29tL3NsaWRlc2hvdy9idG4tb24taW1nLW5leHQucG5nKTsgCn0KI2Z1bGxfaW1nX2RpdiAjb25faW1nX25leHQ6aG92ZXIgewogIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5wbGFueW8uY29tL3NsaWRlc2hvdy9idG4tb24taW1nLW5leHQtaHZyLnBuZyk7Cn0KCiNwbGFueW9fY29udGVudCAuaW1hZ2VzLCAjcGxhbnlvX3BsdWdpbl9jb2RlIC5pbWFnZXMgewogICAgZmxvYXQ6cmlnaHQ7CiAgICBjbGVhcjpyaWdodDsKICAgIGRpc3BsYXk6IGlubGluZTsKfQoKI3BsYW55b19jb250ZW50IC5pbWFnZXMgaW1nLCAjcGxhbnlvX3BsdWdpbl9jb2RlIC5pbWFnZXMgaW1nIHsKICAgIGZsb2F0OiByaWdodDsKICAgIHBhZGRpbmc6M3B4OwogICAgYmFja2dyb3VuZC1jb2xvcjpibGFjazsKICAgIG1hcmdpbjoycHg7Cn0KCiNwbGFueW9fY29udGVudCAuaW1hZ2VzX2xlZnQsICNwbGFueW9fcGx1Z2luX2NvZGUgLmltYWdlc19sZWZ0IHsKICAgIGRpc3BsYXk6IGlubGluZTsKICAgIG1hcmdpbi1sZWZ0OjEwcHg7CiAgICB3aWR0aDozODBweDsKfQoKI3BsYW55b19jb250ZW50IC5pbWFnZXNfbGVmdCBpbWcsICNwbGFueW9fcGx1Z2luX2NvZGUgLmltYWdlc19sZWZ0IGltZyB7CiAgICBwYWRkaW5nOjNweDsKICAgIGJhY2tncm91bmQtY29sb3I6YmxhY2s7CiAgICBtYXJnaW46MnB4OwogICAgd2lkdGg6IDgwcHg7CiAgICBoZWlnaHQ6IDgwcHg7Cn0KCiNwbGFueW9fY29udGVudCAuaW1hZ2VzX3NpbXBsZSwgI3BsYW55b19wbHVnaW5fY29kZSAuaW1hZ2VzX3NpbXBsZSB7CiAgICBmbG9hdDpsZWZ0Owp9CgojcGxhbnlvX2NvbnRlbnQgLmltYWdlX3NpbXBsZSwgI3BsYW55b19wbHVnaW5fY29kZSAuaW1hZ2Vfc2ltcGxlIHsKICAgIGZsb2F0OmxlZnQ7CiAgICBwYWRkaW5nOjNweDsKICAgIGJhY2tncm91bmQtY29sb3I6YmxhY2s7CiAgICBtYXJnaW46MnB4Owp9CgojcGxhbnlvX2NvbnRlbnQgLnNlY3Rpb24sICNwbGFueW9fcGx1Z2luX2NvZGUgLnNlY3Rpb24gewogICAgbWFyZ2luOjI1cHggMCAxMHB4IDA7Cn0KCiNwbGFueW9fY29udGVudCAuc2VjdGlvbiBzcGFuLCAjcGxhbnlvX3BsdWdpbl9jb2RlIC5zZWN0aW9uIHNwYW4gewogICAgZm9udC1zaXplOiAxNHB4OwogICAgY29sb3I6IGJsYWNrOwogICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNlMGUwZTA7CiAgICBmb250LXNpemU6IDE2cHg7IAogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCiNwbGFueW9fY29udGVudCAjY2FuY2VsX3JlYXNvbiwgI3BsYW55b19wbHVnaW5fY29kZSAjY2FuY2VsX3JlYXNvbiB7CiAgICB3aWR0aDoxMDAlOwogICAgaGVpZ2h0OjgwcHg7Cn0KCiNwbGFueW9fbW9iaWxlX3N3aXRjaCB7CiAgICBtYXJnaW4tdG9wOjIwcHg7Cn0KCiNwbGFueW9fY29udGVudCAuaG91cmdsYXNzX2ltZywgI3BsYW55b19wbHVnaW5fY29kZSAuaG91cmdsYXNzX2ltZyB7CiAgICBtYXJnaW4tdG9wOjQwcHg7CiAgICBtYXJnaW4tbGVmdDo0MHB4OwogICAgaGVpZ2h0OjI0cHg7CiAgICB3aWR0aDoyNHB4OwogICAgYmFja2dyb3VuZDp0cmFuc3BhcmVudCB1cmwoaG91cmdsYXNzLmdpZikgbm8tcmVwZWF0IHNjcm9sbCAwIDA7Cn0KCi5yZXN1bHRfcmFuZ2VzIHsKICAgIGNsZWFyOmJvdGg7CiAgICBkaXNwbGF5OmJsb2NrOwp9CgoucmVzdWx0X3JhbmdlIHsKICAgIGZsb2F0OmxlZnQ7CiAgICBmb250LXNpemU6MTBweDsKICAgIGNvbG9yOiM2NjY2NjY7CiAgICBtYXJnaW4tbGVmdDo2cHg7CiAgICBwYWRkaW5nOjJweCA0cHggMnB4IDRweDsKICAgIG1hcmdpbjowIDNweCAzcHggM3B4OwogICAgYmFja2dyb3VuZC1jb2xvcjojZjBmMGYwOwogICAgYm9yZGVyLXJhZGl1czozcHg7CiAgICAtbW96LWJvcmRlci1yYWRpdXM6M3B4OwogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDsKfQoKLnNob3BwaW5nX3RvdGFsIHsKICAgIGZvbnQtc2l6ZToxM3B4Owp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/Planyo.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KJHBsYW55b19zZXRfY29udGVudF90eXBlID0gdHJ1ZTsNCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL3BsYW55by1wbHVnaW4taW1wbC5waHAnKTsNCg0KY2xhc3MgUGxhbnlvIGV4dGVuZHMgQ01TTW9kdWxlDQp7DQogIGZ1bmN0aW9uIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybmlkPS0xKQ0KICB7DQogICAgZ2xvYmFsICRnQ21zOw0KICAgICAgZ2xvYmFsICRwbGFueW9fZmVlZGJhY2tfdXJsLCAkcGxhbnlvX2Fsd2F5c191c2VfYWpheCwgJHBsYW55b19zaXRlX2lkLCAkcGxhbnlvX21ldGFzaXRlX2lkLCAkcGxhbnlvX2RlZmF1bHRfbW9kZSwgJHBsYW55b19yZXNvdXJjZV9pZCwgJHBsYW55b19maWxlc19sb2NhdGlvbiwgJHBsYW55b19sYW5ndWFnZSwgJHBsYW55b19zb3J0X2ZpZWxkcywgJHBsYW55b19leHRyYV9zZWFyY2hfZmllbGRzLCAkcGxhbnlvX2pzX2xpYnJhcnlfdXNlZCwgJHBsYW55b19pbmNsdWRlX2pzX2xpYnJhcnksICRwbGFueW9fYXR0cmliczsKICAgIA0KICAgICRjb25maWcgPSAkZ0Ntcy0+R2V0Q29uZmlnICgpOw0KICAgICRyb290X3VybCA9ICRjb25maWcgPyAkY29uZmlnIFsncm9vdF91cmwnXSA6ICcnOw0KICAgICAgICANCiAgICAkcGxhbnlvX3NpdGVfaWQgPSBpc3NldCgkcGFyYW1zIFsnc2l0ZSddKSA/IHRyaW0oJHBhcmFtcyBbJ3NpdGUnXSwgIidgIikgOiAnZGVtbyc7ICAvLyBJRCBvZiB5b3VyIHBsYW55byBzaXRlLiBJdCBjYW4gYmUgYSBudW1iZXIgb3IgdGhlIGRlZmF1bHQgdmFsdWUgKCdkZW1vJykgdG8gc2VlIGRlbW9uc3RyYXRpb24gb2YgdGhlIHBsdWdpbgogICAgJHBsYW55b19maWxlc19sb2NhdGlvbiA9ICIkcm9vdF91cmwvbW9kdWxlcy9QbGFueW8iOyAgLy8gcmVsYXRpdmUgb3IgYWJzb2x1dGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBwbGFueW8gZmlsZXMgYXJlIGtlcHQgKHVzdWFsbHkgJy9wbGFueW8tZmlsZXMnKQogICAgJHBsYW55b19sYW5ndWFnZSA9IGlzc2V0KCRwYXJhbXMgWydsYW5ndWFnZSddKSA/IHRyaW0oJHBhcmFtcyBbJ2xhbmd1YWdlJ10sICInYCIpIDogJ0VOJzsgIC8vIHlvdSBjYW4gb3B0aW9uYWxseSBjaGFuZ2UgdGhlIGxhbmd1YWdlIGhlcmUsIGUuZy4gJ0ZSJyBvciAnRVMnIG9yIHBhc3MgdGhlIGxhbmd1Z2UgaW4gdGhlICdsYW5nJyBwYXJhbWV0ZXIKICAgICRzZW9fZnJpZW5kbHlfdHIgPSB0cmltKCRwYXJhbXMgWydzZW9fZnJpZW5kbHknXSwgIidgIik7CiAgICAkcGxhbnlvX2Fsd2F5c191c2VfYWpheCA9ICgkc2VvX2ZyaWVuZGx5X3RyPT0nMScgfHwgJHNlb19mcmllbmRseV90cj09J3RydWUnIHx8ICFpc3NldCgkcGFyYW1zIFsnc2VvX2ZyaWVuZGx5J10pKSA/IGZhbHNlIDogdHJ1ZTsgIC8vIHNldCB0byB0cnVlIHRvIHVzZSBBSkFYIHRvIGRpc3BsYXkgcmVzb3VyY2UgbGlzdCBhbmQgcmVzb3VyY2UgZGV0YWlscyB2aWV3cwogICAgJHBsYW55b19hdHRyaWJzID0gaXNzZXQoJHBhcmFtcyBbJ2F0dHJpYnV0ZV9zdHJpbmcnXSkgPyAkcGFyYW1zWydhdHRyaWJ1dGVfc3RyaW5nJ10gOiAnJzsKICAgICRwbGFueW9fc29ydF9maWVsZHMgPSBpc3NldCgkcGFyYW1zIFsnc29ydF9maWVsZHMnXSkgPyB0cmltKCRwYXJhbXMgWydzb3J0X2ZpZWxkcyddLCAiJ2AiKSA6ICcnOyAgLy8gY29tbWEtc2VwYXJhdGVkIHNvcnQgZmllbGRzIC0tIGEgc2luZ2xlIGZpZWxkIHdpbGwgaGlkZSB0aGUgc29ydCBkcm9wZG93biBib3gKICAgICRwbGFueW9fZXh0cmFfc2VhcmNoX2ZpZWxkcyA9IGlzc2V0KCRwYXJhbXMgWydleHRyYV9zZWFyY2hfZmllbGRzJ10pID8gdHJpbSgkcGFyYW1zIFsnZXh0cmFfc2VhcmNoX2ZpZWxkcyddLCAiJ2AiKSA6ICcnOyAgLy8gY29tbWEtc2VwYXJhdGVkIGV4dHJhIGZpZWxkcyBpbiB0aGUgc2VhcmNoIGJveAogICAgJHBsYW55b19kZWZhdWx0X21vZGUgPSBpc3NldCgkcGFyYW1zIFsnZGVmYXVsdF9tb2RlJ10pID8gdHJpbSgkcGFyYW1zIFsnZGVmYXVsdF9tb2RlJ10sICInYCIpIDogJ3Jlc291cmNlX2xpc3QnOwogICAgJHBsYW55b19yZXNvdXJjZV9pZCA9IG51bGw7ICAvLyBvcHRpb25hbDogSUQgb2YgdGhlIHJlc291cmNlIGJlaW5nIHJlc2VydmVkCiAgICAkcGxhbnlvX2pzX2xpYnJhcnlfdXNlZCA9ICghaXNzZXQoJHBhcmFtcyBbJ2pzX2ZyYW1ld29yayddKSB8fCAkcGFyYW1zIFsnanNfZnJhbWV3b3JrJ10gPT0gJ2pxdWVyeScgfHwgJHBhcmFtcyBbJ2pzX2ZyYW1ld29yayddID09ICdqcXVlcnktbm9pbmNsdWRlJykgPyAnanF1ZXJ5JyA6ICdtb290b29scyc7ICAvLyBqcXVlcnkgb3IgbW9vdG9vbHMKICAgICRwbGFueW9faW5jbHVkZV9qc19saWJyYXJ5ID0gIWlzc2V0KCRwYXJhbXMgWydqc19mcmFtZXdvcmsnXSkgfHwgJHBhcmFtcyBbJ2pzX2ZyYW1ld29yayddID09ICdqcXVlcnknIHx8ICRwYXJhbXMgWydqc19mcmFtZXdvcmsnXSA9PSAnbW9vdG9vbHMnOyAvLyBzZXQgdG8gZmFsc2UgaWYgeW91IGFscmVhZHkgaW5jbHVkZSBqUXVlcnkgb24geW91ciBzaXRlCgogICAgb2Jfc3RhcnQoKTsNCiAgICBwbGFueW9fc2V0dXAoKTsNCiAgICAkc3RyID0gb2JfZ2V0X2NvbnRlbnRzKCk7CiAgICBvYl9lbmRfY2xlYW4oKTsKICAgICAgICAgICAgDQogICAgcmV0dXJuICRzdHI7DQogIH0NCg0KICBmdW5jdGlvbiBHZXROYW1lKCkNCiAgew0KICAgICAgcmV0dXJuICdQbGFueW8nOw0KICB9DQoNCiAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+TGFuZ1snZnJpZW5kbHluYW1lJ107DQogIH0NCg0KICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkNCiAgew0KICAgIHJldHVybiAnMS45JzsNCiAgfQ0KDQogIGZ1bmN0aW9uIEdldEhlbHAoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnaGVscGNvbnRlbnQnKTsKICB9DQogIA0KICBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7CiAgfSAgDQogIA0KICBmdW5jdGlvbiBHZXRBdXRob3IoKQogIHsKICAgIHJldHVybiAiWHRyZWVtZSBHbWJIIjsKICB9DQogIA0KICBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCiAgewogICAgcmV0dXJuICd3d3cucGxhbnlvLmNvbSc7CiAgfQ0KICANCiAgZnVuY3Rpb24gSGFzQWRtaW4oKQogIHsKICAgIHJldHVybiBmYWxzZTsKICB9DQogIA0KICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpDQogIHsNCiAgICByZXR1cm4gdHJ1ZTsNCiAgfQ0KDQogIGZ1bmN0aW9uIEluc3RhbGwoKQ0KICB7DQogICAgLy8kdGhpcy0+Q3JlYXRlUGVybWlzc2lvbiAoJ1BsYW55byBBZG1pbicsICdNYW5hZ2UgUGxhbnlvIFJlc2VydmF0aW9uIFN5c3RlbScpOw0KICB9DQogIA0KICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5MYW5nWydwb3N0aW5zdGFsbCddOw0KICB9DQogIA0KICBmdW5jdGlvbiBVbmluc3RhbGwoKQ0KICB7DQogICAgLy8kdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignUGxhbnlvIEFkbWluJyk7DQogIH0NCiAgDQogIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwcmV1bmluc3RhbGwnKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOw0KICB9DQoNCg0KfQ0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/poweredbyplanyo.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAFIAAAAgCAYAAACBxi9RAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kCDAktAggGC9MAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAACR1JREFUaN7tmttvXFcVxn/fPufMnDPj2k6aEie04LaJMKWt3FtiWi5uK6QICkRC0FDxUN76D/AMfwoPFQRQRaQKFJAqnNJCBGmV0hAcQqibktZtnNj1Za7n7MXD7EkmEyc0ZKxGkCXZI++zz1prf/tbl73HMjNuyvWLuwnB/zmQkvZIGltn/NmbQF6bjAHpOuPjH4czcc9OjgYnUmACWAIOmlkjPB8HpsLzo2Z2VNIkMGdmS+H9STOb6ZmPmc2FZ9PAKDAHHDazRpiTApNAw8wOrGcn6EuDjrGg42psnQg6loKt+TC2ZGbz/f4NmpGjwJ4A5kwY29djdB8wCxwGpiR1FzXRw4TpnnCbAtIAwLNhUTPBzr6ed/YCR4HZ8G7XzkyPna4vaRgf+w/Mmw5+zgPPBh/S4FNX9gCNDQttM9tvZnNmdgAY7TItsPOomc0C+8PYbB+Qcz0LHA9zJwJrZ9bRS2DdbJg71WNnrmsnzB01swNBx/6wMVeS/UHn4R4fZ4OutEff/MBDO0i/4qXAoNFex7uhHMJ2LOz4OHAwOLvUE36jYWyyT3cXyEbf2F5Je9eZu7SOb+uKmS31ryGkki6oaQCWjQIyXefvRvhJ+/JpF4DZwM4ueHvDs9keoA6b2cHe98Nm9Idno8umPlvpFXy7Uo5Mu7k9zFvq87UR0smGVe2xLnMkTYXdnQ8OTEsa7Un6sz3OTYXwbQSnx/ueT3ZBC5/PBT39csFOmDsN7O0pEFPhczLkySvJnh5bE32+jANjvZu1UaE9GUJrDjgQwDwaFvdct5qGMMbMZiXt60kLc91Q6kkDB0LIdkP0QAi1/pC8YCcAPde1E3zZI2lPGL9afmtI+lFP57EU9DckHb0am//rvrZ7RAy7N21mP/5fPoGETZ/ttlU3G/JrB3A8sHls0CD2A7k06AR8g8lSKDIbEnEaxO1PRdqFYwpIEKfrBb8zs4UNORdK1dWEHUWb5brZWzcM468XyLI0oYidETiDSLDZjCxJOKgmCzaMlpcxgOFhLlQXLWMfwrKZFddiL5O+1IAn0piZettmbhQg4+tiYkm7FHGri4gjcdzDnWtNfplFfLvV5jtyNFwNlzkMB0WtA6T34B1NPM8D56/RY+dyEOQ3Ut6Ir/P9R4ET9RaHyo6nnThvZpZKR+S420W8lEQstj0jZsRJxDmAZoOtzvHlW0B9BUGAM7NCUgKUgZqZ+V6H+xF8XIqPbSFbWCA3s/p6+gC2SxWAd81q4Xnc6YoujwpJmp4mmpmhsBC2kqqA77UxGCCNmILCzM6XpD8qZhhAKTk5uDbvLLbs3GZpZBGStVYnb0pqZw7wfWEb83l57k2luUrCDjOqEovVkt6otXmtF9CulKQHneMxd540S8grseYpeLlmdmYIbssjvlkp6U15tlrMTu8p0linKsMcSmHUJTyVJTpWb9uhrs6REW1OI/Ye/j0N4GdpqnHlPJbFbMVTVGK9o4JX1szeG0z74ziF4y5JUcvsaL1tLwOQs1Oe1RVYhPCrF7DsUiZeUBcx7GG7i7k398xjnJaxxRtfS2O+uG5IJZQk1iSOO/GBGXfjeFrSiIEwbjPjSYzbZZyUWLaCBxvLfLUB71lBLM8DkrKuzlaN+xsFn0LMl2BCBd+NxHYZxxFzEp8tHM9I2j4QRtZbzJQdT6cRzwyV9Je8TT2OGQceQpxK4Y4sk0tguJSgSqXjrHLGzHNZlcsLCoElES/WGnYSYDjVZ3zBXuBhSX/O4ksju9ayw+HKDElpOeLxvGB3BXY4mCvAMM7WPM+bWX1sTNXls3zfjE8DQ97xtyLn0QzuA/4kqVR2TJQdq1HOX4l4Ck+ee37RMDsFkCVaEDyRRXwB+Pl1A2lmi5WKfmVNvucLtrkYb6ImMWuecwYRDVRKIC94UgWJHCaQOVpU12Glg3aTWvfv5YadyGK9j/GpNGUrDS7JZ8PSrb7MI96zI4speU87jsl9TrUGpA4XOWqWd/La/LytDZW1WORsTlOGGg1eTx0PKeIBSa9VYVMBW0y8sQb1zNhi4kwXRIByzputmN0Stw2q2FCtsrTWphk5frva4m2glmVs8y1Gmmb/DEwZyhyPAxFgnvVD+0onLkFdDpc3KEcXq00xJlVzxzPWZlTiOOJ9J7abZzSOcbfkqACK4lJ7RdHpIsxIzGyhHOsEBfdnsN3D7bknzsr8vVSQtB2J7OLGAnwI7Uy0rSAa2BFxYQEHuKLFh2a2YmYFdSiVLjq/ZQsiQjiE/0hqfU/1jGWMAEWUsUrYBIl8JeGepudWJ47Ucnuh1rZXoohjub+4wKtKs/ORRJwEzEdMWsTnEsfySpMzK9AUNI1OEb3Q9sGwGZm/oGEAjAzL9sA2ST4Y2pq3qFakTwLEJW65MNNh+CtvofeQlBmSFAEuhl0exsxztllnPo25C8DayOLOLY4X3e+VklLEROw6pG2AVT6C+2st5jLHIuJe18HkiJmtSnJmnHPijrJ0fwuOAXEW8VieU44iTg8MyE0dhwsX80RGp4B4TyTHyyrhqUGzBcBvSrAQiLAthq+wsq7KPC/4etmxEkXEvmCzHPU05teNuuWVkloesIgJy3m17Fgzz+4s1p0VR2ZGatCWsTWDk94TRxFJf7Fv5bihcmc7zWwlTTQr2FV46rHn9TDuM+klc3zLOb6Rit3OkeRtPhFH/GNTwaHBMrIDXodtHYmKnPPNdqfPklQfYqi0YisfAFQqKtG+SpgbpyVSIFbMMVocWWzbOwD1NrNpxA5BswFnSp4Xk4RHzFM28Z7KHFaTBwwqZDhanMQ4e2m3zZlSBHmTtZ4e9kQrZ7cX53/Axfl1s7er0k+JeNRgRJAnMX9Yy3m129gPFEg6Dbatl+eAYpXV4mLew1/phO8cMSVeqa3Zu1f5Pub5vlv1/tvu3nd/clnb1raX+sfaBaOtnCiOeeuHfY1/aLxf2MgjYuAf6m1KIoc3sbNa0hBAGlMFompJy52bEjYbrIelvEeqfcRiMQApSQ9HEfc5cXsc8a+hnCMfx1mbRbCsIAccUciRBblzTFjBPaF96bQboQ0JCNZX+sAUtAW1yw+PGwhkmS2+zSbgzbRg5qzZysd2H3lTbv432sDk32PySPsg9mqgAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/rounded-bottom.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAKoAAAAPCAYAAAB0p1TfAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2QYRDhgQCzKHKgAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAACMElEQVRo3u2Zz27aQBCHvwEDVpIDClWVQ6qqb9D3f4q+QiVOVfrnABEYzK+HztJhZTdqSm/zSSOvMF5L9qfZmbUBDTAHFsANcAe0kj4RMLNH4IukjiT5R8xsDryVtK5+/wjsgA3wDOyBbuLn5XECer+gqebuXOgkuQZzdypKWpzr3cXiJZNK0D78aVZN/OwZN0muwY07FZmNuKhJsFZ+4uDRxhkkbYDFQKZNkr9d9htg4U5F2uBfH90sS/8pmHz0lDyUPb8DD2bW5uNOXilpCzy4S0NZtnMH++Al5jHxpmrmTVXr8VnSYaAIfuMTbYGjpF2+guQFORvgFpgCT3VTbmYz4L03Ujtvog4u7akJzVTMqAefcFXftNzAzG79xo2ZfcjXkQQew3gN3LtXG0nbkWtWYdk/Vg0Vsd4safYYMm1rZktJPwaE3eb7SK6UcZfA0jNpWfrPyz6AScLMYgkw5ffeatlf3Uj6mo80+Q+Srvi1d793SbuBjKooKi6quahTr1lnLuwJ+Jb1aHLFuvXeneuqbv8YylHOovqFtawls8aYuvl74JDSJq+QszTsiyBljL6WVBJnUStZSxlQSoFpELeMJyFK6ZAkAO9Ck74O9WbcBu2DmHFz/9xAheNFM4Ukuazi8hNW3BEo8tqApClrAvAUJNsGl8qxH5D34pNplPTcTI2k6SifDYiZkiZj3AXZtlx+/TyNjAcFfVHUSlYqIYfGSTIfGG+CgBoZ8ydJAX4C98IGGsyIoOoAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/rounded-mid.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAKoAAAABCAYAAABOrTWvAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2QYRDhgK9lB+UAAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAAARElEQVQoz+3IwQ1EABQFwPmJWJHtgRK2/yqUQA8iy+W5irOjOU6hQYsPenzRJZlcVNWQZPF6PaSqxiTz7X74Y8WGHccJ7SYRBgNevrsAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/rounded-top.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAKoAAAAPCAYAAAB0p1TfAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2QYRDhgNaDTr8wAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAAB7klEQVRo3u2ZTW8aQRBEXy1rsGIOzoesKDnk//+xyIcQcTAYWEjn4B7UjGYJCeTWJZVopIGVhqfqnkFmxpgkKb4Nr606lTonc7dqGvWJ+gsgVXA3UpPAps4AGuH8NVKbM2QXgdoAtGt4krCmroD04HXt0XTtz0AaoSzuQx3BzREg9aeWH4E8uPehPlTAnqRr34C0gFfAjJ4AW2ANDGa2yd8hdakk3QN3wMzdO6zRBLCPsMrMWpAWKO/cU//gz4QzdUNoPzhzO2Bwl6QtsAJYX53qFVr71D0DXsxskdubutk84IEn6SMwDyG5C3Os3pYavaepqnZfUvQeWJrZMrc29Z+AXUh6BB4bhyhzmE8OU+Vg1Ick3YxBKukBePD1s9zy1BltvZ2vzGzVgHUp6bNzFA9fnSfrEVSFE34fZtPvDUCnwCeP6xWwz7k1dcE82gNzSV+AH2a2q5YtgG9jtwD9SNufAa9mNlQPnANP/qCEM/VX82iA9knS3MxewppB0lcfNyOoB0Bd1fYnofWvG898DzwnpKkroX12lmqtnb1y61S4PLmsL6la2v6mkaZbM9vndqeuhHUPbJ2pqE3gbxLZ7Kr5NP7rNFRf8m4kZVOpf9HamYoaRlg8tn5VwNJIzilvd1yp1C20c6bqpCUC6uY3jHzRvwwBZdEAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/ulap.aspx</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCVAIGltcG9ydCBuYW1lc3BhY2U9InN5c3RlbS5JTyIgJT4NCjwlDQoNClRyeQ0KDQpkaW0gZmllbGRzDQppZiBSZXF1ZXN0LlF1ZXJ5U3RyaW5nKCJ1bGFwX3VybCIpIElzIE5vdGhpbmcgdGhlbg0KICBmaWVsZHMgPSBSZXF1ZXN0LkZvcm0NCmVsc2UNCiAgZmllbGRzID0gUmVxdWVzdC5RdWVyeVN0cmluZw0KZW5kIGlmDQpkaW0gdXJsID0gZmllbGRzKCJ1bGFwX3VybCIpDQoNCmlmIGluc3RyKHVybCwgImh0dHA6Ly93d3cucGxhbnlvLmNvbSIpIDw9IDAgdGhlbg0KICBpZiBpbnN0cih1cmwsICJodHRwczovL3d3dy5wbGFueW8uY29tIikgPD0gMCB0aGVuDQogICAgUmVzcG9uc2UuV3JpdGUoIkVycm9yOiBDYWxsIHRvICIgJiB1cmwgJiAiIG5vdCBhbGxvd2VkIikNCiAgICBSZXNwb25zZS5FbmQNCiAgZW5kIGlmDQplbmQgaWYgDQoNCmRpbSB1cmxlbmNvZGVkID0gIiINCmRpbSBrZXkNCmZvciBlYWNoIGtleSBpbiBmaWVsZHMNCiAgaWYga2V5IElzTm90IE5vdGhpbmcgdGhlbg0KICAgIHVybGVuY29kZWQgPSB1cmxlbmNvZGVkICYga2V5ICYgIj0iICYgU2VydmVyLlVybEVuY29kZShmaWVsZHMoa2V5KSkgJiAiJiINCiAgZW5kIGlmIA0KbmV4dA0KdXJsZW5jb2RlZCA9IHVybGVuY29kZWQgJiAibW9kdmVyPTEuOSINCg0KRGltIHhtbCBhcyBTeXN0ZW0uTmV0Lkh0dHBXZWJSZXF1ZXN0DQpEaW0gdXJpIGFzIG5ldyBVcmkodXJsKQ0KeG1sID0gRGlyZWN0Q2FzdChTeXN0ZW0uTmV0Lkh0dHBXZWJSZXF1ZXN0LkNyZWF0ZSh1cmkpLCBTeXN0ZW0uTmV0Lkh0dHBXZWJSZXF1ZXN0KQ0KeG1sLk1ldGhvZCA9ICJQT1NUIg0KeG1sLkNvbnRlbnRUeXBlID0gImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCINCnhtbC5Db250ZW50TGVuZ3RoID0gdXJsZW5jb2RlZC5MZW5ndGgNCg0KRGltIHdyaXRlciBBcyBOZXcgU3RyZWFtV3JpdGVyKHhtbC5HZXRSZXF1ZXN0U3RyZWFtKQ0Kd3JpdGVyLldyaXRlKHVybGVuY29kZWQpDQp3cml0ZXIuQ2xvc2UoKQ0KRGltIG9SZXNwb25zZSBBcyBTeXN0ZW0uTmV0Lkh0dHBXZWJSZXNwb25zZSA9IHhtbC5HZXRSZXNwb25zZSgpDQpEaW0gcmVhZGVyIEFzIE5ldyBTdHJlYW1SZWFkZXIob1Jlc3BvbnNlLkdldFJlc3BvbnNlU3RyZWFtKCkpDQpEaW0gdG1wIEFzIFN0cmluZyA9IHJlYWRlci5SZWFkVG9FbmQoKQ0Kb1Jlc3BvbnNlLkNsb3NlKCkNClJlc3BvbnNlLldyaXRlKHRtcCkNCg0KQ2F0Y2ggZXggQXMgRXhjZXB0aW9uDQpSZXNwb25zZS5Xcml0ZSgiPHByZT4iK2V4LlRvU3RyaW5nKyI8L3ByZT4iKQ0KRW5kIFRyeQ0KJT4=]]></data>
	</file>
	<file>
	  <filename>/ulap.jsp</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCVAIHBhZ2UgaW1wb3J0PSJqYXZhLnV0aWwuKixqYXZhLm5ldC4qLGphdmEuaW8uKiIgJT4KPCUKU3RyaW5nIHVsYXBfdXJsID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInVsYXBfdXJsIik7CmlmICh1bGFwX3VybCAhPSBudWxsICYmICh1bGFwX3VybC5pbmRleE9mICgiaHR0cDovL3d3dy5wbGFueW8uY29tIikgPT0gMCB8fCB1bGFwX3VybC5pbmRleE9mICgiaHR0cHM6Ly93d3cucGxhbnlvLmNvbSIpID09IDApKSB7CiAgU3RyaW5nIHVybGVuY29kZWQgPSAiIjsKICBFbnVtZXJhdGlvbiBwYXJhbU5hbWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJOYW1lcygpOwogIHdoaWxlKHBhcmFtTmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKICAgIFN0cmluZyBwYXJhbU5hbWUgPSAoU3RyaW5nKXBhcmFtTmFtZXMubmV4dEVsZW1lbnQoKTsKICAgIFN0cmluZyBwYXJhbVZhbHVlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIocGFyYW1OYW1lKTsKICAgIGlmIChwYXJhbVZhbHVlICE9IG51bGwpCiAgICAgIHVybGVuY29kZWQgPSB1cmxlbmNvZGVkLmNvbmNhdCAocGFyYW1OYW1lICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1WYWx1ZSwgIlVURi04IikgKyAiJiIpOwogIH0KICB1cmxlbmNvZGVkID0gdXJsZW5jb2RlZC5jb25jYXQgKCJtb2R2ZXI9MS45Iik7CiAgdHJ5IHsKICAgIFVSTCB1cmwgPSBuZXcgVVJMKHVsYXBfdXJsKTsKICAgIFVSTENvbm5lY3Rpb24gY29ubiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgY29ubi5zZXREb091dHB1dCh0cnVlKTsKICAgIE91dHB1dFN0cmVhbVdyaXRlciB3ciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoY29ubi5nZXRPdXRwdXRTdHJlYW0oKSk7CiAgICB3ci53cml0ZSh1cmxlbmNvZGVkKTsKICAgIHdyLmZsdXNoKCk7CiAgICBCdWZmZXJlZFJlYWRlciByZCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29ubi5nZXRJbnB1dFN0cmVhbSgpKSk7CiAgICBTdHJpbmcgbGluZTsKICAgIHdoaWxlICgobGluZSA9IHJkLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgb3V0LnByaW50bG4obGluZSk7CiAgICB9CiAgICB3ci5jbG9zZSgpOwogICAgcmQuY2xvc2UoKTsKICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgb3V0LndyaXRlKGUudG9TdHJpbmcoKSk7CiAgfQp9CgolPg==]]></data>
	</file>
	<file>
	  <filename>/ulap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGhlYWRlcl93cml0dGVuKSkgewogIGlmIChpc3NldCAoJF9QT1NUIFsnaHRtbF9jb250ZW50X3R5cGUnXSkgfHwgaXNzZXQgKCRfR0VUIFsnaHRtbF9jb250ZW50X3R5cGUnXSkpCiAgICBAaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIpOwogIGVsc2UKICAgIEBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIpOwp9CgovLyBVbHRyYSBMaWdodCBBSkFYIFByb3h5IC0tIFBIUCBpbXBsZW1lbnRhdGlvbgovLyBVc2VkIGJ5IHRoZSBQbGFueW8gcmVzZXJ2YXRpb24gc3lzdGVtOiBzZWUgbW9yZSBhdCBodHRwOi8vd3d3LnBsYW55by5jb20vCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLwovLyBnZXRfY2xpZW50X2lwCi8vCi8vIHJldHVybnMgdXNlcidzIElQIGFkZHJlc3MKCmZ1bmN0aW9uIGdldF9jbGllbnRfaXAgKCkgewogICRpcCA9IG51bGw7CQogIGlmICghZW1wdHkoJF9TRVJWRVIgWydIVFRQX0NMSUVOVF9JUCddKSkgewogICAgJGlwID0gJF9TRVJWRVIgWydIVFRQX0NMSUVOVF9JUCddOwogIH0KICBlbHNlaWYgKCFlbXB0eSgkX1NFUlZFUiBbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pKSB7CiAgICAkaXAgPSAkX1NFUlZFUiBbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ107CiAgfQogIGVsc2VpZiAoIWVtcHR5KCRfU0VSVkVSIFsnSFRUUF9YX0ZPUldBUkRFRCddKSkgewogICAgJGlwID0gJF9TRVJWRVIgWydIVFRQX1hfRk9SV0FSREVEJ107CiAgfQogIGVsc2VpZiAoIWVtcHR5KCRfU0VSVkVSIFsnSFRUUF9GT1JXQVJERURfRk9SJ10pKSB7CiAgICAkaXAgPSAkX1NFUlZFUiBbJ0hUVFBfRk9SV0FSREVEX0ZPUiddOwogIH0KICBlbHNlaWYgKCFlbXB0eSgkX1NFUlZFUiBbJ0hUVFBfRk9SV0FSREVEJ10pKSB7CiAgICAkaXAgPSAkX1NFUlZFUiBbJ0hUVFBfRk9SV0FSREVEJ107CiAgfQogIGVsc2UgewogICAgJGlwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107CiAgfQogIHJldHVybiAkaXA7Cn0KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vCi8vIHNlbmRfaHR0cF9wb3N0Ci8vCi8vIHBvc3RzIGRhdGEgdG8gZ2l2ZW4gVVJMCgpmdW5jdGlvbiBzZW5kX2h0dHBfcG9zdCgkdXJsLCAmJGZpZWxkcykgewogICRwYXJ0cyA9IHBhcnNlX3VybCgkdXJsKTsKICAkaG9zdCA9ICRwYXJ0c1snaG9zdCddOwogIGlmICgkaG9zdCAhPSAid3d3LnBsYW55by5jb20iKQogICAgcmV0dXJuICJFcnJvcjogQ2FsbCB0byAkdXJsIG5vdCBhbGxvd2VkIjsKCiAgJHBhcmFtcyA9ICcnOwogIGlmICgkZmllbGRzICYmIGNvdW50KCRmaWVsZHMpID4gMCkgewogICAgZm9yZWFjaCAoYXJyYXlfa2V5cygkZmllbGRzKSBhcyAka2V5KSB7CiAgICAgICRwYXJhbXMgPSAkcGFyYW1zIC4gIiRrZXk9IiAuIHJhd3VybGVuY29kZSgkZmllbGRzWyRrZXldKTsKICAgICAgJHBhcmFtcyAuPSAnJic7CiAgICB9CiAgfQogICRwYXJhbXMgLj0gJ21vZHZlcj0xLjknOwogICRpcCA9IGdldF9jbGllbnRfaXAoKTsKICBpZiAoJGlwKQogICAgJHBhcmFtcyAuPSAiJmNsaWVudF9pcD0kaXAiOwoKICAkY29udGV4dF9vcHRpb25zID0gYXJyYXkoCgkJCSAgICdodHRwJz0+YXJyYXkoCgkJCQkJICdtZXRob2QnPT4iUE9TVCIsCgkJCQkJICJDb250ZW50LWxlbmd0aDogIiAuIHN0cmxlbigkcGFyYW1zKSAuICJcclxuIiAuCgkJCQkJICJDb250ZW50LXR5cGU6YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiIsCgkJCQkJICdjb250ZW50Jz0+ICRwYXJhbXMpCgkJCSAgICk7CiAgJGNvbnRleHRfb3B0aW9uc1snaHR0cHMnXSA9ICRjb250ZXh0X29wdGlvbnNbJ2h0dHAnXTsKICAkY29udGV4dCA9IEBzdHJlYW1fY29udGV4dF9jcmVhdGUoJGNvbnRleHRfb3B0aW9ucyk7CiAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpIHsKICAgICRjcyA9IEBjdXJsX2luaXQoJHVybCk7CiAgICBpZiAoJGNzKSB7CiAgICAgIEBjdXJsX3NldG9wdCAoJGNzLCBDVVJMT1BUX1BPU1QsIDEpOwogICAgICBAY3VybF9zZXRvcHQgKCRjcywgQ1VSTE9QVF9QT1NURklFTERTLCAkcGFyYW1zKTsKICAgICAgQGN1cmxfc2V0b3B0ICgkY3MsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOwogICAgICBAY3VybF9zZXRvcHQgKCRjcywgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7IAogICAgICAkcmVzcG9uc2UgPSBAY3VybF9leGVjICgkY3MpOwogICAgICBAY3VybF9jbG9zZSAoJGNzKTsKICAgICAgaWYgKCRyZXNwb25zZSAmJiBzdHJsZW4oJHJlc3BvbnNlKSA+IDApCiAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgIH0KICB9CiAgJGZwID0gQGZvcGVuKCR1cmwsICdyJywgZmFsc2UsICRjb250ZXh0KTsKICAkcmVzcG9uc2UgPSAnJzsKICAkb2xkX2Vycm9yX3JlcG9ydGluZyA9IGVycm9yX3JlcG9ydGluZygpOwogIGVycm9yX3JlcG9ydGluZygkb2xkX2Vycm9yX3JlcG9ydGluZyAmIH5FX1dBUk5JTkcpOwogICRtZXRhX2RhdGEgPSBzdHJlYW1fZ2V0X21ldGFfZGF0YSgkZnApOwogIGZvcmVhY2goJG1ldGFfZGF0YVsnd3JhcHBlcl9kYXRhJ10gYXMgJHJlc3BvbnNlX2hlYWRlcikgewogICAgaWYgKHN1YnN0cigkcmVzcG9uc2VfaGVhZGVyLDAsNSkgPT0gJ0hUVFAvJykgewogICAgICAkYml0cyA9IGV4cGxvZGUoJyAnLCAkcmVzcG9uc2VfaGVhZGVyKTsKICAgICAgJGh0dHBzdGF0dXMgPSAoaW50KSAkYml0c1sxXTsKICAgICAgJGh0dHBzdGF0dXNtZXNzYWdlID0gJHJlc3BvbnNlX2hlYWRlcjsKICAgIH0KICB9CiAgaWYgKCRmcCAhPT0gZmFsc2UpIHsKICAgIHdoaWxlICghZmVvZigkZnApKSB7CiAgICAgICRyZXNwb25zZSAuPSBmcmVhZCgkZnAsIDgxOTIpOwogICAgfQogIH0KICBmY2xvc2UoJGZwKTsKICBlcnJvcl9yZXBvcnRpbmcoJG9sZF9lcnJvcl9yZXBvcnRpbmcpOwogIHJldHVybiAkcmVzcG9uc2U7Cn0KCmlmIChpc3NldCAoJF9QT1NUIFsndWxhcF91cmwnXSkpCiAgZWNobyBzZW5kX2h0dHBfcG9zdCAoJF9QT1NUIFsndWxhcF91cmwnXSwgJF9QT1NUKTsKZWxzZSBpZiAoaXNzZXQgKCRfR0VUIFsndWxhcF91cmwnXSkpCiAgZWNobyBzZW5kX2h0dHBfcG9zdCAoJF9HRVQgWyd1bGFwX3VybCddLCAkX0dFVCk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/utils.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZnVuY3Rpb24gcGxhbnlvX2lzc2V0IChvYmosIGQxLCBkMiwgZDMsIGQ0LCBkNSkgewogIHRyeSB7CiAgICBpZiAoZDUgIT0gbnVsbCkKICAgICAgcmV0dXJuIG9iaiBbZDFdW2QyXVtkM11bZDRdW2Q1XSAhPSB1bmRlZmluZWQ7CiAgICBpZiAoZDQgIT0gbnVsbCkKICAgICAgcmV0dXJuIG9iaiBbZDFdW2QyXVtkM11bZDRdICE9IHVuZGVmaW5lZDsKICAgIGlmIChkMyAhPSBudWxsKQogICAgICByZXR1cm4gb2JqIFtkMV1bZDJdW2QzXSAhPSB1bmRlZmluZWQ7CiAgICBpZiAoZDIgIT0gbnVsbCkKICAgICAgcmV0dXJuIG9iaiBbZDFdW2QyXSAhPSB1bmRlZmluZWQ7CiAgICBpZiAoZDEgIT0gbnVsbCkKICAgICAgcmV0dXJuIG9iaiBbZDFdICE9IHVuZGVmaW5lZDsKICAgIHJldHVybiBvYmogIT0gdW5kZWZpbmVkOwogIH0KICBjYXRjaCAoZXJyKSB7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gZHVtcChhcnIsbGV2ZWwpIHsKICB2YXIgZHVtcGVkX3RleHQgPSAiIjsKICBpZighbGV2ZWwpIGxldmVsID0gMDsKICAKICAvL1RoZSBwYWRkaW5nIGdpdmVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuCiAgdmFyIGxldmVsX3BhZGRpbmcgPSAiIjsKICBmb3IodmFyIGo9MDtqPGxldmVsKzE7aisrKSBsZXZlbF9wYWRkaW5nICs9ICIgICAgIjsKICAKICBpZih0eXBlb2YoYXJyKSA9PSAnb2JqZWN0JykgeyAvL0FycmF5L0hhc2hlcy9PYmplY3RzCiAgICBmb3IodmFyIGl0ZW0gaW4gYXJyKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFycltpdGVtXTsKICAgICAgCiAgICAgIGlmKHR5cGVvZih2YWx1ZSkgPT0gJ29iamVjdCcpIHsgLy9JZiBpdCBpcyBhbiBhcnJheSwKCWR1bXBlZF90ZXh0ICs9IGxldmVsX3BhZGRpbmcgKyAiJyIgKyBpdGVtICsgIicgLi4uXG4iOwoJZHVtcGVkX3RleHQgKz0gZHVtcCh2YWx1ZSxsZXZlbCsxKTsKICAgICAgfSBlbHNlIHsKCWR1bXBlZF90ZXh0ICs9IGxldmVsX3BhZGRpbmcgKyAiJyIgKyBpdGVtICsgIicgPSBcIiIgKyB2YWx1ZSArICJcIiB8fCAiOwogICAgICB9CiAgICB9CiAgfSBlbHNlIHsgLy9TdHJpbmdzL0NoYXJzL051bWJlcnMgZXRjLgogICAgZHVtcGVkX3RleHQgPSAiPT09IithcnIrIj09PSgiK3R5cGVvZihhcnIpKyIpIjsKICB9CiAgcmV0dXJuIGR1bXBlZF90ZXh0Owp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X25leHRfbW9udGggKG1vbnRoLCB5ZWFyKSB7CiAgdmFyIG5leHRfbW9udGggPSBtb250aCArIDE7CiAgdmFyIG5leHRfeWVhciA9IHllYXI7CiAgaWYgKG5leHRfbW9udGggPT0gMTMpIHsKICAgIG5leHRfbW9udGggPSAxOwogICAgbmV4dF95ZWFyKys7CiAgfQogIHJldHVybiBuZXcgQXJyYXkgKG5leHRfbW9udGgsIG5leHRfeWVhcik7Cn0KCmZ1bmN0aW9uIHBsYW55b19nZXRfcHJldl9tb250aCAobW9udGgsIHllYXIpIHsKICB2YXIgcHJldl9tb250aCA9IG1vbnRoIC0gMTsKICB2YXIgcHJldl95ZWFyID0geWVhcjsKICBpZiAocHJldl9tb250aCA9PSAwKSB7CiAgICBwcmV2X21vbnRoID0gMTI7CiAgICBwcmV2X3llYXItLTsKICB9CiAgcmV0dXJuIG5ldyBBcnJheSAocHJldl9tb250aCwgcHJldl95ZWFyKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9tb250aF9zcGVjcyAobW9udGgsIHllYXIpIHsKICAvLyByZXR1cm5zIGFuIGFycmF5OiAob2Zmc2V0IG9mIHRoZSBmaXJzdCBkYXkgb2YgbW9udGgsICMgb2YgZGF5cyBpbiBsYXN0IG1vbnRoLCAjIG9mIGRheXMgaW4gY3VycmVudCBtb250aCwgbW9udGgsIHllYXIpCiAgICAgIAogIHZhciBkID0gbmV3IERhdGUgKCk7CiAgaWYgKCFtb250aCB8fCAheWVhcikKICAgIGQuc2V0RnVsbFllYXIgKGQuZ2V0RnVsbFllYXIgKCksIGQuZ2V0TW9udGggKCksIDEpOwogIGVsc2UKICAgIGQuc2V0RnVsbFllYXIgKHllYXIsIG1vbnRoIC0gMSwgMSk7CiAgdmFyIGZpcnN0X3dlZWtkYXkgPSBwbGFueW9faXNzZXQoZG9jdW1lbnQuZmlyc3Rfd2Vla2RheSkgPyBkb2N1bWVudC5maXJzdF93ZWVrZGF5IDogMTsKICB2YXIgZmlyc3Rfb2Zmc2V0ID0gKDcgLSBmaXJzdF93ZWVrZGF5ICsgZC5nZXREYXkoKSkgJSA3OwogIHZhciBsYXN0X21vbnRoX2xhc3RfZGF0ZSA9IG5ldyBEYXRlIChkKTsKICBsYXN0X21vbnRoX2xhc3RfZGF0ZS5zZXREYXRlIChkLmdldERhdGUoKS0xKTsKICB2YXIgcHJldl9tb250aF9jb3VudCA9IGxhc3RfbW9udGhfbGFzdF9kYXRlLmdldERhdGUgKCk7CiAgdmFyIHRoaXNfbW9udGhfbGFzdF9kYXRlID0gbmV3IERhdGUgKGQpOwogIHRoaXNfbW9udGhfbGFzdF9kYXRlLnNldE1vbnRoIChkLmdldE1vbnRoKCkrMSk7CiAgdGhpc19tb250aF9sYXN0X2RhdGUuc2V0RGF0ZSAodGhpc19tb250aF9sYXN0X2RhdGUuZ2V0RGF0ZSgpLTEpOwogIHZhciB0aGlzX21vbnRoX2NvdW50ID0gdGhpc19tb250aF9sYXN0X2RhdGUuZ2V0RGF0ZSgpOwogIHJldHVybiBuZXcgQXJyYXkgKGZpcnN0X29mZnNldCwgcHJldl9tb250aF9jb3VudCwgdGhpc19tb250aF9jb3VudCwgbW9udGgsIHllYXIpOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2RheV9uYW1lIChuLCBpc19zaG9ydCkgewogIHZhciBmaXJzdF93ZWVrZGF5ID0gcGxhbnlvX2lzc2V0KGRvY3VtZW50LmZpcnN0X3dlZWtkYXkpID8gZG9jdW1lbnQuZmlyc3Rfd2Vla2RheSA6IDE7CiAgdmFyIGFyciA9IHBsYW55b19pc3NldCAoZG9jdW1lbnQuc193ZWVrZGF5c19zaG9ydCkgPyAoaXNfc2hvcnQgPyBkb2N1bWVudC5zX3dlZWtkYXlzX3Nob3J0IDogZG9jdW1lbnQuc193ZWVrZGF5c19tZWQpIDoKICAgIChpc19zaG9ydCA/IG5ldyBBcnJheSAoIk0iLCAiVCIsICJXIiwgIlQiLCAiRiIsICJTIiwgIlMiKSA6IG5ldyBBcnJheSAoIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biIpKTsKICByZXR1cm4gYXJyIFsobiArIGZpcnN0X3dlZWtkYXkgKyA2KSAlIDddOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X21vbnRoX25hbWUgKG4sIGlzX3Nob3J0KSB7CiAgdmFyIGFyciA9IHBsYW55b19pc3NldCAoZG9jdW1lbnQuc19tb250aHNfc2hvcnQpID8gKGlzX3Nob3J0ID8gZG9jdW1lbnQuc19tb250aHNfc2hvcnQgOiBkb2N1bWVudC5zX21vbnRoc19sb25nKSA6CiAgICAoaXNfc2hvcnQgPyBuZXcgQXJyYXkgKCJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIpIDogbmV3IEFycmF5ICgiSmFudWFyeSIsICJGZWJydWFyeSIsICJNYXJjaCIsICJBcHJpbCIsICJNYXkiLCAiSnVuZSIsICJKdWx5IiwgIkF1Z3VzdCIsICJTZXB0ZW1iZXIiLCAiT2N0b2JlciIsICJOb3ZlbWJlciIsICJEZWNlbWJlciIpKTsKICByZXR1cm4gYXJyIFtuIC0gMV07Cn0KCmZ1bmN0aW9uIHBsYW55b19vdXRwdXRfaG91cl9vbmx5KGhvdXIsIGV1cm9wZWFuX3N0eWxlX3Bvc3RmaXgpIHsKICBpZiAoZG9jdW1lbnQudGltZV9mb3JtYXQgJiYgZG9jdW1lbnQudGltZV9mb3JtYXQuaW5kZXhPZignYScpICE9IC0xKQogICAgcmV0dXJuICgoaG91ciAlIDEyKSA9PSAwID8gMTIgOiBob3VyICUgMTIpICsnICcrICgoaG91ciA8IDEyIHx8IGhvdXIgPT0gMjQpID8gJ2FtJyA6ICdwbScpOwogIHJldHVybiBob3VyKyhldXJvcGVhbl9zdHlsZV9wb3N0Zml4ID8gZXVyb3BlYW5fc3R5bGVfcG9zdGZpeCA6ICcnKTsKfQoKZnVuY3Rpb24gcGxhbnlvX291dHB1dF90aW1lKGhvdXIsIG1pbnV0ZSkgewogIHZhciB0aW1lX3N0ciA9IGRvY3VtZW50LnRpbWVfZm9ybWF0OwogIGlmICghdGltZV9zdHIpIHRpbWVfc3RyID0gIkg6aSI7CiAgdGltZV9zdHIgPSB0aW1lX3N0ci5yZXBsYWNlKCJIIiwgaG91cik7CiAgdGltZV9zdHIgPSB0aW1lX3N0ci5yZXBsYWNlKCJoIiwgKGhvdXIgJSAxMikgPT0gMCA/IDEyIDogaG91ciAlIDEyKTsKICB0aW1lX3N0ciA9IHRpbWVfc3RyLnJlcGxhY2UoImEiLCAoaG91ciA8IDEyIHx8IGhvdXIgPT0gMjQpID8gJ2FtJyA6ICdwbScpOwogIHRpbWVfc3RyID0gdGltZV9zdHIucmVwbGFjZSgiaSIsIG1pbnV0ZTwxMCA/ICcwJyttaW51dGUgOiBtaW51dGUpOwogIHJldHVybiB0aW1lX3N0cjsKfQoKZnVuY3Rpb24gcGxhbnlvX291dHB1dF9kYXRlKHllYXIsIG1vbnRoLCBkYXkpIHsKICB2YXIgZGF0ZSA9IGRvY3VtZW50LmRhdGVfZm9ybWF0OwogIGlmICghZGF0ZSkgZGF0ZSA9ICJZLW0tZCI7CiAgZGF0ZSA9IGRhdGUucmVwbGFjZSgiWSIsIHllYXIpOwogIGRhdGUgPSBkYXRlLnJlcGxhY2UoIm0iLCBtb250aCA8IDEwID8gJzAnK21vbnRoIDogbW9udGgpOwogIGRhdGUgPSBkYXRlLnJlcGxhY2UoIk0iLCBwbGFueW9fZ2V0X21vbnRoX25hbWUobW9udGgsIHRydWUpKTsKICBkYXRlID0gZGF0ZS5yZXBsYWNlKCJkIiwgZGF5IDwgMTAgPyAnMCcrZGF5IDogZGF5KTsKICByZXR1cm4gZGF0ZTsKfQoKZnVuY3Rpb24gcGxhbnlvX3BhcnNlX2RhdGUgKGRhdGVfc3RyLCBmb3JtYXQpIHsKICAvL3dvcmtzIHdpdGggdGhlIGZvbGxvd2luZyBmb3JtYXRzOiBZL20vZCwgWS1tLWQsIGQubS5ZLCBkIE0gWShFTiksIE0gZCwgWShFTiksIG0vZC9ZCiAgaWYgKCFkYXRlX3N0cikgcmV0dXJuIDA7CgogIHZhciBwYXJzZWQgPSBEYXRlLnBhcnNlKGRhdGVfc3RyKTsKICBpZiAoKCFwYXJzZWQgfHwgcGFyc2VkID09IHVuZGVmaW5lZCB8fCBmb3JtYXQgPT0iZC9tL1kiIHx8IGZvcm1hdCA9PSAiZC5tLlkiKSAmJiBmb3JtYXQpIHsKICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgIGNhc2UgImQubS5ZIjoKICAgICAgICB2YXIgcGFydHMgPSBkYXRlX3N0ci5zcGxpdCgnLicpOwogICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gMikKICAgICAgICAgIHBhcnNlZCA9IERhdGUucGFyc2UocGFydHNbMl0rJy8nK3BhcnRzWzFdKycvJytwYXJ0c1swXSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIlktbS1kIjoKICAgICAgICB2YXIgcGFydHMgPSBkYXRlX3N0ci5zcGxpdCgnLScpOwogICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gMikKICAgICAgICAgIHBhcnNlZCA9IERhdGUucGFyc2UocGFydHNbMF0rJy8nK3BhcnRzWzFdKycvJytwYXJ0c1syXSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImQvbS9ZIjoKICAgICAgICB2YXIgcGFydHMgPSBkYXRlX3N0ci5zcGxpdCgnLycpOwogICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gMikKICAgICAgICAgIHBhcnNlZCA9IERhdGUucGFyc2UocGFydHNbMl0rJy8nK3BhcnRzWzFdKycvJytwYXJ0c1swXSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQogIGlmICghcGFyc2VkIHx8IChwYXJzZWQuZ2V0RnVsbFllYXIgJiYgcGFyc2VkLmdldEZ1bGxZZWFyKCkgPCAyMDAwKSkKICAgIHBhcnNlZCA9IDA7CiAgcmV0dXJuIHBhcnNlZDsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9kYXlfaW5mb19mb3JfbW9udGggKG1vbnRoLCB5ZWFyKSB7CiAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CgogIHZhciBkYXlfaW5mbyA9IG5ldyBBcnJheSgpOwogIAogIHZhciBtb250aF9zcGVjcyA9IHBsYW55b19nZXRfbW9udGhfc3BlY3MgKG1vbnRoLCB5ZWFyKTsKICB2YXIgZGF5X2l0ZXJhdG9yID0gbW9udGhfc3BlY3MgWzFdIC0gbW9udGhfc3BlY3MgWzBdICsgMTsKICB2YXIgZGF5c19pbl9tb250aF9sZWZ0ID0gbW9udGhfc3BlY3MgWzBdIC0gMTsKICB2YXIgbW9udGhfaXRlcmF0b3IgPSAtMTsKICBpZiAoZGF5c19pbl9tb250aF9sZWZ0ID09IC0xKSB7CiAgICBtb250aF9pdGVyYXRvciA9IDA7CiAgICBkYXlzX2luX21vbnRoX2xlZnQgPSBtb250aF9zcGVjcyBbMl0gLSAxOwogICAgZGF5X2l0ZXJhdG9yID0gMTsKICB9CiAgZm9yICh2YXIgeSA9IDA7IHkgPCA2OyB5KyspIHsKICAgIGRheV9pbmZvIFt5XSA9IG5ldyBBcnJheSgpOwogICAgZm9yICh2YXIgeCA9IDA7IHggPCA3OyB4KyspIHsKICAgICAgZGF5X2luZm8gW3ldW3hdID0gbmV3IEFycmF5KCk7CiAgICAgIHZhciBkYXlfY2xhc3M7CiAgICAgIGlmIChtb250aCAtIDEgPT0gbm93LmdldE1vbnRoKCkgJiYgbW9udGhfaXRlcmF0b3IgPT0gMCAmJiBkYXlfaXRlcmF0b3IgPT0gbm93LmdldERhdGUoKSAmJiB5ZWFyID09IG5vdy5nZXRGdWxsWWVhciAoKSkKCWRheV9jbGFzcyA9ICdhY3RpdmVfZGF5JzsKICAgICAgZWxzZQoJZGF5X2NsYXNzID0gKG1vbnRoX2l0ZXJhdG9yID09IDAgPyAnY3VyX21vbnRoX2RheScgOiAnZXh0X21vbnRoX2RheScpOwoKICAgICAgZGF5X2luZm8gW3ldW3hdWyd0eXBlJ10gPSBkYXlfY2xhc3M7CiAgICAgIGRheV9pbmZvIFt5XVt4XVsnZGF5J10gPSBkYXlfaXRlcmF0b3I7CiAgICAgIGRheV9pbmZvIFt5XVt4XVsnbW9udGgnXSA9IG1vbnRoICsgbW9udGhfaXRlcmF0b3I7CiAgICAgIGRheV9pbmZvIFt5XVt4XVsneWVhciddID0geWVhcjsKICAgICAgaWYgKG1vbnRoICsgbW9udGhfaXRlcmF0b3IgPT0gMCkgewoJZGF5X2luZm8gW3ldW3hdWydtb250aCddID0gMTI7CglkYXlfaW5mbyBbeV1beF1bJ3llYXInXSA9IHllYXIgLSAxOwogICAgICB9IGVsc2UgaWYgKG1vbnRoICsgbW9udGhfaXRlcmF0b3IgPT0gMTMpIHsKCWRheV9pbmZvIFt5XVt4XVsnbW9udGgnXSA9IDE7CglkYXlfaW5mbyBbeV1beF1bJ3llYXInXSA9IHllYXIgKyAxOwogICAgICB9CiAgICAgIAogICAgICBpZiAoZGF5c19pbl9tb250aF9sZWZ0ID09IDApIHsKCW1vbnRoX2l0ZXJhdG9yKys7CglkYXlzX2luX21vbnRoX2xlZnQgPSBtb250aF9zcGVjcyBbMl07CglkYXlfaXRlcmF0b3IgPSAwOwogICAgICB9CiAgICAgIGRheXNfaW5fbW9udGhfbGVmdC0tOwogICAgICBkYXlfaXRlcmF0b3IrKzsKICAgIH0KICB9CgogIHJldHVybiBkYXlfaW5mbzsKfQoKZnVuY3Rpb24gcGxhbnlvX3Nob3dfY2FsZW5kYXJfcGlja2VyIChtb250aCwgeWVhciwgZGl2X2lkLCBkYXRlX2Z1bikgewogIHZhciBub3cgPSBuZXcgRGF0ZSgpOwogIGlmICh5ZWFyIDwgMjAwMCkgewogICAgbW9udGggPSBub3cuZ2V0TW9udGgoKSArIDE7CiAgICB5ZWFyID0gbm93LmdldEZ1bGxZZWFyKCk7CiAgfQogIGVsc2UgaWYgKG1vbnRoID09IDApIHsKICAgIG1vbnRoID0gMTI7CiAgICB5ZWFyLS07CiAgfQogIGVsc2UgaWYgKG1vbnRoID09IDEzKSB7CiAgICBtb250aCA9IDE7CiAgICB5ZWFyKys7CiAgfQogIHZhciBkYXlfaW5mbyA9IHBsYW55b19nZXRfZGF5X2luZm9fZm9yX21vbnRoIChtb250aCwgeWVhcik7CiAgCiAgdmFyIGRpdl9jb2RlID0gIjx0YWJsZSBjbGFzcz0nY2FscGlja2VyJz48Y2FwdGlvbj48YSBjbGFzcz0nbmF2JyBocmVmPVwiamF2YXNjcmlwdDpwbGFueW9fc2hvd19jYWxlbmRhcl9waWNrZXIoIisobW9udGgtMSkrIiwgIit5ZWFyKyIsICciK2Rpdl9pZCsiJywnIitkYXRlX2Z1bisiJyk7XCI+JiMxNjA7JmxhcXVvOyYjMTYwOzwvYT48YSBjbGFzcz0nbmF2JyBocmVmPVwiamF2YXNjcmlwdDpwbGFueW9fc2hvd19jYWxlbmRhcl9waWNrZXIoIisobW9udGgrMSkrIiwiK3llYXIrIiwgJyIrZGl2X2lkKyInLCciK2RhdGVfZnVuKyInKTtcIj4mIzE2MDsmcmFxdW87JiMxNjA7PC9hPiAiKyBwbGFueW9fZ2V0X21vbnRoX25hbWUgKG1vbnRoLCBmYWxzZSkgKyIgIiArIHllYXIgKyAiPC9jYXB0aW9uPjx0aGVhZD48dHI+IjsKICBmb3IgKHZhciBpID0gMDsgaSA8IDc7IGkrKykgewogICAgZGl2X2NvZGUgKz0gIjx0aD4iICsgcGxhbnlvX2dldF9kYXlfbmFtZSAoaSwgdHJ1ZSkgKyAiPC90aD4iOwogIH0KICBkaXZfY29kZSArPSAiPC90aGVhZD48dGJvZHk+IjsKICBmb3IgKHZhciB5ID0gMDsgeSA8IDY7IHkrKykgewogICAgZGl2X2NvZGUgKz0gIjx0cj4iOwogICAgZm9yICh2YXIgeCA9IDA7IHggPCA3OyB4KyspIHsKICAgICAgZGl2X2NvZGUgKz0gIjx0ZCBjbGFzcz0nIiArIGRheV9pbmZvIFt5XVt4XVsndHlwZSddICsgIicgb25jbGljaz0nIiArIGRhdGVfZnVuICsgIigiICsgZGF5X2luZm8gW3ldW3hdWydkYXknXSArICIsIitkYXlfaW5mbyBbeV1beF1bJ21vbnRoJ10rIiwiK2RheV9pbmZvIFt5XVt4XVsneWVhciddKyIpJz4iICsgZGF5X2luZm8gW3ldW3hdWydkYXknXSArICI8L3RkPiI7CiAgICB9CiAgICBkaXZfY29kZSArPSAiPC90cj4iOwogIH0KICBkaXZfY29kZSArPSAiPC90cj4iOwogIGRpdl9jb2RlICs9ICI8L3Rib2R5PjwvdGFibGU+IjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAoZGl2X2lkKS5pbm5lckhUTUwgPSBkaXZfY29kZTsKfQoKZnVuY3Rpb24gcGxhbnlvX3NldF9ldmVudChvYmosZXZlbnQsZnVuLGJ1YmJsZSkgewogIGlmIChvYmopIHsKICAgIGlmIChvYmouYWRkRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLmFkZEV2ZW50TGlzdGVuZXIgKGV2ZW50LGV2YWwoZnVuKSxidWJibGUpOwogICAgLy9lbHNlCiAgICAvLyAgZXZhbCgib2JqLm9uIitldmVudCsiPSIrZnVuKTsKICAgIGVsc2UgaWYgKG9iai5hZGRFdmVudCkKICAgICAgb2JqLmFkZEV2ZW50KGV2ZW50LGV2YWwoZnVuKSk7CiAgICBlbHNlCiAgICAgIG9iai5hdHRhY2hFdmVudCgnb24nK2V2ZW50LCBldmFsKGZ1bikpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9wcmV2X2RheSAoZGF5LCBtb250aCwgeWVhciwgb2Zmc2V0KSB7CiAgLy8gcmV0dXJucyBhbiBhcnJheTogKGRheSwgbW9udGgsIHllYXIpCiAgLy8gbm90ZTogb2Zmc2V0IG11c3QgYmUgPCAyOAogIAogIHZhciBzcGVjcyA9IHBsYW55b19nZXRfbW9udGhfc3BlY3MgKG1vbnRoLCB5ZWFyKTsKCiAgdmFyIHJldF92YWwgPSBuZXcgQXJyYXkgKCk7CiAgaWYgKCFvZmZzZXQpIG9mZnNldCA9IDE7CiAgaWYgKGRheSAtIG9mZnNldCA8PSAwKSB7CiAgICByZXRfdmFsIFswXSA9IHNwZWNzIFsxXSAtIG9mZnNldCArIGRheTsKICAgIHJldF92YWwgWzFdID0gbW9udGggLSAxOwogICAgcmV0X3ZhbCBbMl0gPSB5ZWFyOwogICAgaWYgKHJldF92YWwgWzFdID09IDApIHsKICAgICAgcmV0X3ZhbCBbMV0gPSAxMjsKICAgICAgcmV0X3ZhbCBbMl0gPSB5ZWFyIC0gMTsKICAgIH0KICB9CiAgZWxzZSB7CiAgICByZXRfdmFsIFswXSA9IGRheSAtIG9mZnNldDsKICAgIHJldF92YWwgWzFdID0gbW9udGg7CiAgICByZXRfdmFsIFsyXSA9IHllYXI7CiAgfQogIHJldHVybiByZXRfdmFsOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X25leHRfZGF5IChkYXksIG1vbnRoLCB5ZWFyLCBvZmZzZXQpIHsKICAvLyByZXR1cm5zIGFuIGFycmF5OiAoZGF5LCBtb250aCwgeWVhcikKICAvLyBub3RlOiBvZmZzZXQgbXVzdCBiZSA8IDI4CiAgCiAgdmFyIHNwZWNzID0gcGxhbnlvX2dldF9tb250aF9zcGVjcyAobW9udGgsIHllYXIpOwoKICB2YXIgcmV0X3ZhbCA9IG5ldyBBcnJheSAoKTsKICBpZiAoIW9mZnNldCkgb2Zmc2V0ID0gMTsKICBpZiAoZGF5ICsgb2Zmc2V0ID4gc3BlY3MgWzJdKSB7CiAgICByZXRfdmFsIFswXSA9IGRheSArIG9mZnNldCAtIHNwZWNzIFsyXTsKICAgIHJldF92YWwgWzFdID0gbW9udGggKyAxOwogICAgcmV0X3ZhbCBbMl0gPSB5ZWFyOwogICAgaWYgKHJldF92YWwgWzFdID09IDEzKSB7CiAgICAgIHJldF92YWwgWzFdID0gMTsKICAgICAgcmV0X3ZhbCBbMl0gPSB5ZWFyICsgMTsKICAgIH0KICB9CiAgZWxzZSB7CiAgICByZXRfdmFsIFswXSA9IGRheSArIG9mZnNldDsKICAgIHJldF92YWwgWzFdID0gbW9udGg7CiAgICByZXRfdmFsIFsyXSA9IHllYXI7CiAgfQogIHJldHVybiByZXRfdmFsOwp9CgovLyByZXR1cm5zIGFuIGFycmF5IChtaW4sIG1heCkgb2YgbWluIGFuZCBtYXggdmFsdWVzIG9mIGFycmF5Ci8vIGlmIGFycmF5J3MgdmFsdWVzIGFyZSBhbiBhcnJheSBvZiBwcm9wZXJ0aWVzLCBwcm9wZXJ0eSB0byBiZSB1c2VkIGNhbiBiZSBzcGVjaWZpZWQKLy8gb3RoZXJ3aXNlLCBsZWF2ZSBwcm9wZXJ0eSBudWxsCmZ1bmN0aW9uIHBsYW55b19nZXRfYXJyYXlfbWluX21heChhcnIsIHByb3BlcnR5KSB7CiAgdmFyIG1pbjsKICB2YXIgbWF4OwogIHZhciBuID0gMDsKICBmb3IgKHZhciBpdCBpbiBhcnIpIHsKICAgIHZhciB2YWwgPSAocHJvcGVydHkgPyBpdCBbcHJvcGVydHldIDogaXQpOwogICAgaWYgKG4gPT0gMCB8fCB2YWwgPCBtaW4pCiAgICAgIG1pbiA9IHZhbDsKICAgIGlmIChuID09IDAgfHwgdmFsID4gbWF4KQogICAgICBtYXggPSB2YWw7CiAgICBuKys7CiAgfQogIHJldHVybiBuZXcgQXJyYXkobWluLG1heCk7Cn0KCmZ1bmN0aW9uIGVsYnlpZCAoaWQpIHsKICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKGlkKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9pdGVtX2Nvb3JkaW5hdGVzIChpdGVtKSB7CiAgdmFyIGxlZnQ9MDsKICB2YXIgdG9wPTA7CiAgdmFyIHJpZ2h0PTA7CiAgdmFyIGJvdHRvbT0wOwogIHZhciBwYXI9aXRlbTsKICB3aGlsZShwYXIpewogICAgbGVmdD1sZWZ0K3BhcnNlSW50KHBhci5vZmZzZXRMZWZ0KTsKICAgIHRvcD10b3ArcGFyc2VJbnQocGFyLm9mZnNldFRvcCk7CiAgICBpZihwYXIub2Zmc2V0UGFyZW50PT1wYXIgfHwgcGFyLm9mZnNldFBhcmVudD09ZG9jdW1lbnQuYm9keSlicmVhazsKICAgIHBhcj1wYXIub2Zmc2V0UGFyZW50OwogIH0KICByaWdodD1sZWZ0K3BhcnNlSW50KGl0ZW0ub2Zmc2V0V2lkdGgpOwogIGJvdHRvbT10b3ArcGFyc2VJbnQoaXRlbS5vZmZzZXRIZWlnaHQpOwogIHJldHVybiB7bGVmdDpsZWZ0LCB0b3A6dG9wLCByaWdodDpyaWdodCwgYm90dG9tOmJvdHRvbX07Cn0KCmZ1bmN0aW9uIHBsYW55b19kdW1teSAoZSkgewogIGlmKCFlKSBlPWV2ZW50OwogIGlmIChlKSBlLmNhbmNlbEJ1YmJsZT10cnVlOwp9CgpmdW5jdGlvbiBwbGFueW9fY2xvc2VfY2FsZW5kYXIgKCkgewogIGlmIChkb2N1bWVudC5jdXJyZW50X3BpY2tlcikgewogICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZG9jdW1lbnQuY3VycmVudF9waWNrZXIrJ2NhbCcpOwogICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwogICAgZWwuc3R5bGUubGVmdD0tMTAwMDsKICB9Cn0KCmZ1bmN0aW9uIGNvbnZlcnRfZW50aXRpZXNfdG9fdXRmOCAoc3RyKSB7DQogIHZhciBpID0gc3RyLmluZGV4T2YgKCImIyIpOw0KICB3aGlsZSAoaSAhPSAtMSkgew0KICAgIHZhciBpU0MgPSBzdHIuaW5kZXhPZiAoIjsiLCBpKTsNCiAgICBpZiAoaVNDICE9IC0xICYmIChpU0MgLSBpIC0gMikgPiAwICYmIChpU0MgLSBpIC0gMikgPD0gNSkgew0KICAgICAgdmFyIGRlY2ltYWwgPSBzdHIuc3Vic3RyIChpICsgMiwgaVNDIC0gaSAtIDIpOw0KICAgICAgaWYgKCFpc05hTiAoZGVjaW1hbCkgJiYgZGVjaW1hbCA9PSBwYXJzZUludCAoZGVjaW1hbCkpIHsNCiAgICAgICAgc3RyID0gc3RyLnN1YnN0ciAoMCwgaSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlIChkZWNpbWFsKSArICgoc3RyLmxlbmd0aCA+IGlTQyArIDEpID8gc3RyLnN1YnN0ciAoaVNDICsgMSkgOiAnJyk7DQogICAgICB9DQogICAgfQ0KICAgIGkgPSBzdHIuaW5kZXhPZiAoIiYjIiwgaSArIDEpOw0KICB9ICANCiAgcmV0dXJuIHN0cjsNCn0NCgpmdW5jdGlvbiBwbGFueW9fY2FsZW5kYXJfZGF0ZV9jaG9zZW4gKGRheSwgbW9udGgsIHllYXIpIHsKICB2YXIgcGlja2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZG9jdW1lbnQuY3VycmVudF9waWNrZXIpOwogIGlmIChwaWNrZXIuZXhjbHVkZV95ZWFyKQ0KICAgIHBpY2tlci52YWx1ZSA9IGNvbnZlcnRfZW50aXRpZXNfdG9fdXRmOCAoZGF5KycgJytwbGFueW9fZ2V0X21vbnRoX25hbWUgKG1vbnRoLCBmYWxzZSkpOw0KICBlbHNlDQogICAgcGlja2VyLnZhbHVlID0gY29udmVydF9lbnRpdGllc190b191dGY4IChwbGFueW9fb3V0cHV0X2RhdGUoeWVhciwgbW9udGgsIGRheSkpOwogIGlmIChkb2N1bWVudC5jdXJyZW50X3BpY2tlcl9vbmNoYW5nZSkKICAgIGV2YWwoZG9jdW1lbnQuY3VycmVudF9waWNrZXJfb25jaGFuZ2UpOwogIGRvY3VtZW50LnByZXZpb3VzX21vbnRoX3BpY2tlZCA9IG1vbnRoOwogIGRvY3VtZW50LnByZXZpb3VzX3llYXJfcGlja2VkID0geWVhcjsKICBwbGFueW9fY2xvc2VfY2FsZW5kYXIoKTsKICBpZih3aW5kb3cuanNfbmF2KSB7CiAgICBpZiAoZG9jdW1lbnQuY3VycmVudF9waWNrZXIgPT0gJ3N0YXJ0X2RhdGUnKQogICAgICBqc19uYXYobnVsbCxtb250aCwgeWVhcik7CiAgICBlbHNlIGlmIChkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9PSAnb25lX2RhdGUnKQogICAgICBqc19uYXYoZGF5LCBtb250aCwgeWVhcik7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fc2hvd19jYWxlbmRhciAoY2FsLG9uY2hhbmdlKSB7CiAgdmFyIGNhbF9lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbCk7CiAgdmFyIGNhbF9yZWZfZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYWwrJ2NhbHJlZicpOwogIHZhciBjb29yZHMgPSBjYWxfcmVmX2VsLmdldENvb3JkaW5hdGVzID8gY2FsX3JlZl9lbC5nZXRDb29yZGluYXRlcygpIDogcGxhbnlvX2dldF9pdGVtX2Nvb3JkaW5hdGVzKGNhbF9yZWZfZWwpOwogIGlmIChkb2N1bWVudC5pc19tb2JpbGUpCiAgICBjb29yZHMubGVmdCA9ICcyMCc7CiAgdmFyIG9sZF9kYXRlID0gcGxhbnlvX3BhcnNlX2RhdGUoY2FsX2VsLnZhbHVlLCBkb2N1bWVudC5kYXRlX2Zvcm1hdCk7CiAgaWYgKCFjYWxfZWwudmFsdWUpIHsKICAgIGlmICghZG9jdW1lbnQuY3VycmVudF9waWNrZXIpIHsKICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkICgnc3RhcnRfZGF0ZScpKQoJZG9jdW1lbnQuY3VycmVudF9waWNrZXIgPSAnc3RhcnRfZGF0ZSc7CiAgICAgIGVsc2UgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkICgnb25lX2RhdGUnKSkKCWRvY3VtZW50LmN1cnJlbnRfcGlja2VyID0gJ29uZV9kYXRlJzsKICAgIH0KICAgIHZhciBwaWNrZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkb2N1bWVudC5jdXJyZW50X3BpY2tlcik7CiAgICBpZiAocGlja2VyKQogICAgICBvbGRfZGF0ZSA9IHBsYW55b19wYXJzZV9kYXRlKHBpY2tlci52YWx1ZSwgZG9jdW1lbnQuZGF0ZV9mb3JtYXQpOwogIH0KICBkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9IGNhbDsKICBkb2N1bWVudC5jdXJyZW50X3BpY2tlcl9vbmNoYW5nZSA9IG9uY2hhbmdlOwogIHZhciBtb250aCA9IG51bGw7CiAgdmFyIHllYXIgPSBudWxsOwogIGlmIChkb2N1bWVudC5wcmV2aW91c195ZWFyX3BpY2tlZCAhPSB1bmRlZmluZWQgJiYgZG9jdW1lbnQucHJldmlvdXNfbW9udGhfcGlja2VkICE9IHVuZGVmaW5lZCkgewogICAgbW9udGggPSBkb2N1bWVudC5wcmV2aW91c19tb250aF9waWNrZWQ7CiAgICB5ZWFyID0gZG9jdW1lbnQucHJldmlvdXNfeWVhcl9waWNrZWQ7CiAgfQogIGlmIChvbGRfZGF0ZSAhPSB1bmRlZmluZWQgJiYgb2xkX2RhdGUgPiAwKSB7CiAgICB2YXIgb2xkX2RhdGVfb2JqID0gbmV3IERhdGUoKTsKICAgIG9sZF9kYXRlX29iai5zZXRUaW1lIChvbGRfZGF0ZSk7CiAgICBtb250aCA9IG9sZF9kYXRlX29iai5nZXRNb250aCgpICsgMTsKICAgIHllYXIgPSBvbGRfZGF0ZV9vYmouZ2V0RnVsbFllYXIoKTsKICB9CiAgdmFyIGNhbF9jYWxfZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYWwrJ2NhbCcpOwogIGlmKGNhbF9jYWxfZWwucGFyZW50Tm9kZSAhPSBkb2N1bWVudC5ib2R5KSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNhbF9jYWxfZWwpOwogIHBsYW55b19zaG93X2NhbGVuZGFyX3BpY2tlciAobW9udGgsIHllYXIsIGNhbCsnY2FsJywgJ3BsYW55b19jYWxlbmRhcl9kYXRlX2Nob3NlbicpOwogIGNhbF9jYWxfZWwuc3R5bGUubGVmdCA9IGNvb3Jkcy5sZWZ0KydweCc7CiAgY2FsX2NhbF9lbC5zdHlsZS50b3AgPSAoY29vcmRzLmJvdHRvbSs1KSsncHgnOwogIGNhbF9jYWxfZWwuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsKfQoKZnVuY3Rpb24ganNfc2V0X2V2ZW50KG9iaixldmVudCxmdW4sYnViYmxlKSB7CiAgcmV0dXJuIHBsYW55b19zZXRfZXZlbnQob2JqLGV2ZW50LGZ1bixidWJibGUpOwp9CgpmdW5jdGlvbiBqc19kdW1teSAoZSkgewogIHJldHVybiBwbGFueW9fZHVtbXkgKGUpOwp9CgpmdW5jdGlvbiBqc19jbG9zZV9jYWxlbmRhciAoKSB7CiAgcmV0dXJuIHBsYW55b19jbG9zZV9jYWxlbmRhciAoKTsKfQoKZnVuY3Rpb24ganNfc2hvd19jYWxlbmRhciAoY2FsLG9uY2hhbmdlKSB7CiAgcmV0dXJuIHBsYW55b19zaG93X2NhbGVuZGFyIChjYWwsb25jaGFuZ2UpOwp9CgpmdW5jdGlvbiBzaG93X3Byb2R1Y3RfaW1hZ2VzIChwYXJlbnQsIGlkKSB7CiAgdmFyIGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkICgncHJvZHVjdF9ib3hfJyArIGlkKTsKICBpZiAoYm94ICYmIHBhcmVudCkgewogICAgdmFyIGNvb3JkcyA9IHBhcmVudC5nZXRDb29yZGluYXRlcyA/IHBhcmVudC5nZXRDb29yZGluYXRlcyAoKSA6IHBsYW55b19nZXRfaXRlbV9jb29yZGluYXRlcyAocGFyZW50KTsgICAgCiAgICBib3guc3R5bGUudG9wID0gY29vcmRzLnRvcCArICdweCc7CiAgICBib3guc3R5bGUubGVmdCA9IChjb29yZHMubGVmdCArIDMwKSArICdweCc7CiAgICBib3guc3R5bGUuZGlzcGxheSA9ICcnOyAgICAKICB9ICAKfQoKZnVuY3Rpb24gaGlkZV9wcm9kdWN0X2ltYWdlcyAoaWQpIHsKICB2YXIgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKCdwcm9kdWN0X2JveF8nICsgaWQpOwogIGlmIChib3gpIHsKICAgIGJveC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIH0KfQoKCgoKCgoKCgoKCgoK]]></data>
	</file>
</module>
