<?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>Ping</name>
	<version>0.3.0.1</version>
  <mincmsversion>1.10.9</mincmsversion>
	<help><![CDATA[PGgzPlF1ZSBmYWl0IGNlIG1vZHVsZSA/PC9oMz4KPHA+Q2UgbW9kdWxlIHLDqWN1cMOocmUgbGVzIHLDqXN1bHRhdHMgZGUgdm90cmUgY2x1YiBldCByw6lhbGlzZSBkZXMgdHJhaXRlbWVudHMgYWZpbiBkZSBsZXMgZGlzcG9zZXIgc3VyIHZvdHJlIHNpdGUgaW50ZXJuZXQuPC9wPgo8aDM+Q29tbWVudCBsJ3V0aWxpc2VyID88L2gzPgo8cD5MZSB0YWcgcGFyIGTDqWZhdXQgZXN0IGNlbHVpLWNpIHtjbXNfbW9kdWxlIG1vZHVsZT0nUGluZyd9PC9wPgo8aDM+U3VwcG9ydDwvaDM+Cjx1bD4KPGxpPlBvdXIgb2J0ZW5pciBsYSBkZXJuacOocmUgdmVyc2lvbiBvZmZpY2llbGxlLCBGQVFzLCBvdSBwb3VyIHNpZ25hbGVyIHVuIGJ1ZywgZmFpcmUgdW5lIGRlbWFuZGUgZCdhbcOpbGlvcmF0aW9ucywgbWVyY2kgZGUgY29uc3VsdGVyIGxhIGZvcmdlIGR1IG1vZHVsZSDDoCBjZXR0ZSBhZHJlc3NlIDogCjxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvcGluZy8iPlBpbmc8L2E+LjwvbGk+CjwvdWw+CjxwPkNlIG1vZHVsZSBlc3QgZm91cm5pIHNvdXMgbGljZW5jZSBHUEwgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LlBvdXIgdXRpbGlzZXIgbGUgbG9naWNpZWwsIHZvdXMgZGV2ZXogZW4gIGFjY2VwdGVyIGxlcyB0ZXJtZXM8L3A+Cgo8aDM+Q29weXJpZ2h0IGV0IExpY2VuY2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTQsIENsYXVkZSBTaW9oYW4gPGEgaHJlZj0ibWFpbHRvOmNsYXVkZUBhZ2ktd2ViY29uc2VpbC5mciI+Y2xhdWRlQGFnaS13ZWJjb25zZWlsLmZyPC9hPi4gVG91cyBkcm9pdHMgcsOpc2VydsOpcy48L3A+CjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uKTwvZW0+IHRvdXI9IjEiIC0gVXRpbGV6IGxlIE7CsCBkZSBqb3VybsOpZSBwb3VyIG9idGVuaXIgc2VzIHLDqXN1bHRhdHMgdW5pcXVlbWVudDwvbGk+PGxpPjxlbT4ob3B0aW9uKTwvZW0+IHR5cGVfY29tcGV0PSIxIiAtIEZpbHRyZXogbGVzIHLDqXN1bHRhdHMgZW4gcHLDqWNpc2FudCBsZSB0eXBlIGRlIGNvbXDDqXRpdGlvbjwvbGk+PGxpPjxlbT4ob3B0aW9uKTwvZW0+IGRhdGVfZGVidXQ9IiIgLSBVdGlsaXNleiBsYSBkYXRlIGRlIGTDqWJ1dCBkZSBjb21ww6l0aXRpb24gYXUgZm9ybWF0IChhYWFhLW1tLWpqKTwvbGk+PGxpPjxlbT4ob3B0aW9uKTwvZW0+IGRhdGVfZmluPSIiIC0gVXRpbGlzZXogbGEgZGF0ZSBkZSBmaW4gYXZlYyBsYSBkYXRlIGRlIGTDqWJ1dCBhdSBtw6ptZSBmb3JtYXQ8L2xpPjxsaT48ZW0+KG9wdGlvbik8L2VtPiBsaW1pdD0iMTAwMDAiIC0gUG91ciBsaW1pdGVyIGxlIG5iIMOgIHggcsOpc3VsdGF0czwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBhZ2ktd2ViY29uc2VpbCAmbHQ7Y2xhdWRlQGFnaS13ZWJjb25zZWlsLmZyJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDAuMy4wLjE8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+CjxsaT5WZXJzaW9uIDAuMWJldGEzLCBOb3YgMjAxNCBTYyBBbcOpbGlvcmF0aW9ucyBkdSBmcm9udC1vZmZpY2UgZXQgZMOpYm9ndWFnZSBkdSBiYWNrPC9saT4KPHVsPgogICA8bGk+TWlzZSBuZSBwbGFjZSBkdSBmcm9udC1vZmZpY2UuPC9saT4KICAgPGxpPkFtw6lsaW9yYXRpb25zIGR1IGJhY2stb2ZmaWNlIGV0IGNvcnJlY3Rpb25zIGRlIGJ1Z3MuPC9saT4KPC91bD48YnIgLz4=]]></about>
	<description><![CDATA[Ce module calcule vos points FFTT. Compatible cmsms 2.0 et API FFTT]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABgAAAAIAAAAGAAAABALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAsAAAABAAAQAGRzY2xib29sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAQAYwByAG8AbmRzY2xib29sAAAAAAMAYwBzAHNid3NwYmxvYgAAAPlicGxpc3QwMNkBAgMEBQYHCAkKCwoLCgsQEQpdU2hvd1N0YXR1c0JhcltTaG93U2lkZWJhcltTaG93UGF0aGJhcltTaG93VG9vbGJhcltTaG93VGFiVmlld18QFENvbnRhaW5lclNob3dTaWRlYmFyXFdpbmRvd0JvdW5kc1xTaWRlYmFyV2lkdGhfEBVQcmV2aWV3UGFuZVZpc2liaWxpdHkICQgJCAlfEBh7ezY1NSwgMzU3fSwgezc3MCwgNDQwfX0QjggIGyk1QU1ZcH2KoqOkpaanqMPFAAAAAAAAAQEAAAAAAAAAEwAAAAAAAAAAAAAAAAAAAMYAAAADAGMAcwBzZHNjbGJvb2wAAAAABwBpAG4AYwBsAHUAZABlZHNjbGJvb2wAAAAABgBqAHEAcABsAG8AdGRzY2xib29sAAAAAAQAbABhAG4AZ2RzY2xib29sAAAAAAMAbABpAGJkc2NsYm9vbAAAAAAJAHQAZQBtAHAAbABhAHQAZQBzZHNjbGJvb2wBAAAACQB0AGUAbQBwAGwAYQB0AGUAc2xzdlBibG9iAAACjmJwbGlzdDAw2gECAwQFBgcICQoLCw0OQkNEFEVGXxAQdXNlUmVsYXRpdmVEYXRlc18QD3Nob3dJY29uUHJldmlld18QEWNhbGN1bGF0ZUFsbFNpemVzV2NvbHVtbnNfEA9zY3JvbGxQb3NpdGlvbllYdGV4dFNpemVfEA9zY3JvbGxQb3NpdGlvblhac29ydENvbHVtblhpY29uU2l6ZV8QEnZpZXdPcHRpb25zVmVyc2lvbgkJCKoPGB0hJiswNTk+1BAREhMUFQsLWmlkZW50aWZpZXJVd2lkdGhZYXNjZW5kaW5nV3Zpc2libGVUbmFtZREBLAkJ1BAREhMZGg0LXGRhdGVNb2RpZmllZBC1CAnUEBESEx4aDQ1bZGF0ZUNyZWF0ZWQICNQQERITIiMNC1RzaXplEGEICdQQERITJygLC1RraW5kEHMJCdQQERITLC0LDVVsYWJlbBBkCQjUEBESEzEyCw1XdmVyc2lvbhBLCQjUEBESEzYVCw1YY29tbWVudHMJCNQQERITOjsNDV5kYXRlTGFzdE9wZW5lZBDICAjUEBESEz8aDQ1ZZGF0ZUFkZGVkCAgjQIBIAAAAAAAjQCgAAAAAAAAjAAAAAAAAAAAjQDAAAAAAAAAQAAAIAB0AMABCAFYAXgBwAHkAiwCWAJ8AtAC1ALYAtwDCAMsA1gDcAOYA7gDzAPYA9wD4AQEBDgEQAREBEgEbAScBKAEpATIBNwE5AToBOwFEAUkBSwFMAU0BVgFcAV4BXwFgAWkBcQFzAXQBdQF+AYcBiAGJAZIBoQGjAaQBpQGuAbgBuQG6AcMBzAHVAd4AAAAAAAACAQAAAAAAAABHAAAAAAAAAAAAAAAAAAAB4AAAAAkAdABlAG0AcABsAGEAdABlAHNsc3ZwYmxvYgAAApRicGxpc3QwMNoBAgMEBQYHCAkKCwsNDkdISRBKIl8QEHVzZVJlbGF0aXZlRGF0ZXNfEA9zaG93SWNvblByZXZpZXdfEBFjYWxjdWxhdGVBbGxTaXplc1djb2x1bW5zXxAPc2Nyb2xsUG9zaXRpb25ZWHRleHRTaXplXxAPc2Nyb2xsUG9zaXRpb25YWnNvcnRDb2x1bW5YaWNvblNpemVfEBJ2aWV3T3B0aW9uc1ZlcnNpb24JCQjZDxAREhMUFRYXGCElKi80OT5DWGNvbW1lbnRzVG5hbWVbZGF0ZUNyZWF0ZWRUc2l6ZVVsYWJlbFRraW5kV3ZlcnNpb25eZGF0ZUxhc3RPcGVuZWRcZGF0ZU1vZGlmaWVk1BkaGxwdHgsNVWluZGV4VXdpZHRoWWFzY2VuZGluZ1d2aXNpYmxlEAcRASwJCNQZGhscIh4LCxAACQnUGRobHCYnDQ0QAhC1CAjUGRobHCssDQsQAxBhCAnUGRobHDAxCw0QBRBkCQjUGRobHDU2CwsQBBBzCQnUGRobHDo7Cw0QBhBLCQjUGRobHD9ADQ0QCBDICAjUGRobHEQnDQsQAQgJI0CASAAAAAAAI0AoAAAAAAAAIwAAAAAAAAAAI0AwAAAAAAAAAAgAHQAwAEIAVgBeAHAAeQCLAJYAnwC0ALUAtgC3AMoA0wDYAOQA6QDvAPQA/AELARgBIQEnAS0BNwE/AUEBRAFFAUYBTwFRAVIBUwFcAV4BYAFhAWIBawFtAW8BcAFxAXoBfAF+AX8BgAGJAYsBjQGOAY8BmAGaAZwBnQGeAacBqQGrAawBrQG2AbgBuQG6AcMBzAHVAAAAAAAAAgEAAAAAAAAASwAAAAAAAAAAAAAAAAAAAd4AAAAJAHQAZQBtAHAAbABhAHQAZQBzdlNybmxvbmcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAYCwAAAEUAABALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEERFNEQgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAgAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAgAAAAAAAAAAAEAACAAAAAAAQAAQAAAAAABAACAAAAAAAEAAQAAAAAAAQACAAAAAAABAAQAAAAAAAEACAAAAAAAAQAQAAAAAAABACAAAAAAAAEAQAAAAAAAAQCAAAAAAAABAQAAAAAAAAECAAAAAAAAAQQAAAAAAAABCAAAAAAAAAEQAAAAAAAAASAAAAAAAAABQAAAAAAAAABvbllYdGV4dFNpemVfEA9zY3JvbGxQb3NpdGlvblhac29ydENvbHVtblhpY29uU2l6ZV8QEnZpZXdPcHRpb25zVmVyc2lvbgkJCNkPEBESExQVFhcYISUqLzQ5PkNYY29tbWVudHNUbmFtZVtkYXRlQ3JlYXRlZFRzaXplVWxhYmVsVGtpbmRXdmVyc2lvbl5kYXRlTGFzdE9wZW5lZFxkYXRlTW9kaWZpZWTUGRobHB0eCw1VaW5kZXhVd2lkdGhZYXNjZW5kaW5nV3Zpc2libGUQBxEBLAkI1BkaGxwiHgsLEAAJCdQZGhscJicNDRACELUICNQZGhscKywNCxADEGEICdQZGhscMDELDRAFEGQJCNQZGhscNTYLCxAEEHMJCdQZGhscOjsLDRAGEEsJCNQZGhscP0ANDRAIEMgICNQZGhscRCcNCxABCAkjQIBIAAAAAAAjQCgAAAAAAAAjAAAAAAAAAAAjQDAAAAAAAAAACAAdADAAQgBWAF4AcAB5AIsAlgCfALQAtQC2ALcAygDTANgA5ADpAO8A9AD8AQsBGAEhAScBLQE3AT8BQQFEAUUBRgFPAVEBUgFTAVwBXgFgAWEBYgFrAW0BbwFwAXEBegF8AX4BfwGAAYkBiwGNAY4BjwGYAZoBnAGdAZ4BpwGpAasBrAGtAbYBuAG5AboBwwHMAdUAAAAAAAACAQAAAAAAAABLAAAAAAAAAAAAAAAAAAAB3gAAAAkAdABlAG0AcABsAGEAdABlAHN2U3JubG9uZwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA]]></data>
	</file>
	<file>
	  <filename>/action.a-venir.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyAgICAgICAgICAgICAgICAgIFRvIGNvbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIwojIyMgICAgQ2V0dGUgcGFnZSBhZmZpY2hlIGxlcyBwcm9jaGFpbmVzIGNvbXDDqXRpdGlvbnMgw6AgdmVuaXIgICAgICMjIwojIyBQYXJhbXMgaW50ZXJ2YWxsZSBkZSB0ZW1wcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMKIyMgUGFyYW1zIGxpbWl0IHBvdXIgbGltaXRlciBsZSBuYiBkZSByw6lzdWx0YXRzICAgICAgICAgICAgICAgICAgICMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy9sZXMgY29tcMOpdGl0aW9ucyDDoCB2ZW5pcgppZighaXNzZXQoJGdDbXMpKSBleGl0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKLy9sYSByZXF1ZXRlCiRxdWVyeSA9ICJTRUxFQ1QgY2FsLmRhdGVfZGVidXQsIGNhbC5kYXRlX2ZpbiwgY2FsLnR5cGVfY29tcGV0LHRjLm5hbWUsIHRjLmluZGl2cyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jYWxlbmRyaWVyIEFTIGNhbCwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIEFTIHRjICBXSEVSRSB0Yy5jb2RlX2NvbXBldCA9IGNhbC50eXBlX2NvbXBldCBBTkQgY2FsLmRhdGVfZGVidXQgQkVUV0VFTiBOT1coKSAiOy8vQU5EIChOT1coKSArIElOVEVSVkFMIDcgREFZKSI7Ly8vQkVUV0VFTiAnMjAxNC0xMi0wMScgQU5EICgnMjAxNC0xMi0wMScrIElOVEVSVkFMIDcgREFZKSAiOy8vLy8KJHRlbXBzID0gMTQ7CiRxdWVyeS49IiBBTkQgKE5PVygpICsgSU5URVJWQUwgIi4kdGVtcHMuIiBEQVkpIjsKLy9kw6lmaW5pciB1bmUgcHLDqWbDqXJlbmNlIHBvdXIgdW4gaW50ZXJ2YWwgZGUgdGVtcHMKLy9Qb3VyIGNoYXF1ZSByw6lzdWx0YXQgc2F2b2lyIHMnaWwgcydhZ2l0IGQndW5lIGNvbXDDqXRpdGlvbiBlc3QgaW5kaXZpZHVlbGxlIG91IG5vbgovL2ljaSBvbiBwZXV0IGZhaXJlIGRlcyBwcsOpZsOpcmVuY2VzIHBvdXIgYWZmaW5lciBsZXMgcsOpc3VsdGF0cwokbGltaXQgPSAnJzsKJG9yZGVyID0gJyc7CiR0eXBlX2NvbXBldCA9ICcnOwoKCWlmKGlzc2V0KCRwYXJhbXNbJ3R5cGVfY29tcGV0J10pICYmICRwYXJhbXNbJ3R5cGVfY29tcGV0J10gIT0nJykKCXsKCQkkcXVlcnkuPSIgQU5EIGNhbC50eXBlX2NvbXBldCA9ID8iOwoJCSRwYXJtc1sndHlwZV9jb21wZXQnXSA9ICRwYXJhbXNbJ3R5cGVfY29tcGV0J107Cgl9CgkKJHF1ZXJ5Lj0iIE9SREVSIEJZIGNhbC5kYXRlX2RlYnV0IEFTQywgdGMuY29kZV9jb21wZXQiOwkKCglpZihpc3NldCgkcGFyYW1zWydsaW1pdCddKSAmJiAkcGFyYW1zWydsaW1pdCddICE9JycpCgl7CgkJJGxpbWl0ID0gJHBhcmFtc1snbGltaXQnXTsKCQkkcXVlcnkuPSAiIExJTUlUIDAsIi4kbGltaXQ7Cgl9CgkKaWYoJHR5cGVfY29tcGV0ICE9JycpCnsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksICRwYXJtcyk7Cn0KZWxzZQp7CgkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKfQoKCiRyb3dhcnJheSA9IGFycmF5KCk7CiRpPTA7CmlmKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCk+MCkKewoJd2hpbGUoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCXsKCQkkaW5kaXZzID0gJHJvd1snaW5kaXZzJ107CgkJJGRhdGVfZGVidXQgPSAkcm93WydkYXRlX2RlYnV0J107CgkJJGRhdGVfZmluID0gJHJvd1snZGF0ZV9maW4nXTsKCQkkdHlwZV9jb21wZXQgPSAkcm93Wyd0eXBlX2NvbXBldCddOwoJCSRjb21wZXQgPSAkcm93WyduYW1lJ107CgkJJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwoJCSRvbmVyb3ctPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoJCSRvbmVyb3ctPmNvbXBldCA9ICRjb21wZXQ7CgkJJG9uZXJvdy0+ZGF0ZSA9ICRkYXRlX2RlYnV0OwoJCSRvbmVyb3ctPmluZGl2cyA9ICRyb3dbJ2luZGl2cyddOwoJCSAvL29uIGTDqWNsYXJlIHVuIG5vdXZlYXUgdGFibGVhdQoJCSRyb3dhcnJheTIgPSBhcnJheSgpOwoJCWlmKCRpbmRpdnMgPT0gMCkgICAgLy9vbiBlc3Qgc3VyIHVuZSBjb21ww6l0aXRpb24gcGFyIMOpcXVpcGVzCgkJewoJCQkkaSsrOwoJCQkkb25lcm93LT52YWxldXIgPSAkaTsKCQkJLy9vbiByZWZhaXQgdW5lIHJlcXVldGUgcG91ciBleHRyYWlyZSBsZXMgcmVuY29udHJlcwoJCQkkcXVlcnkyID0gIlNFTEVDVCAqLGVxLmZyaWVuZGx5bmFtZSwgZXEubGliZXF1aXBlIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIEFTIHJlbiwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgQVMgZXEgV0hFUkUgcmVuLmlkZGl2ID0gZXEuaWRkaXYgQU5EIHJlbi5pZHBvdWxlID0gZXEuaWRwb3VsZSBBTkQgcmVuLnNhaXNvbiA9IGVxLnNhaXNvbiBBTkQgcmVuLmNsdWIgPSAnMScgQU5EIHJlbi5kYXRlX2V2ZW50ID0gPyBBTkQgZXEudHlwZV9jb21wZXQgPSA/IjsvLyIgQU5EIGRhdGVfZXZlbnQgPj1Ob3coKSI7CgkJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsYXJyYXkoJGRhdGVfZGVidXQsICR0eXBlX2NvbXBldCkpOwoJCQkkbmJsaWduZXMgPSAkZGJyZXN1bHRhdC0+UmVjb3JkQ291bnQoKTsKCQkJLy9lY2hvICJsZSBuYiBkZSBsaWduZXMgZXN0IDogIi4kbmJsaWduZXM7CgkJCWlmKCRkYnJlc3VsdGF0ICYmICRkYnJlc3VsdGF0LT5SZWNvcmRDb3VudCgpPjApCgkJCXsKCQkJCXdoaWxlKCRyb3cyID0gJGRicmVzdWx0YXQtPkZldGNoUm93KCkpCgkJCQl7CgkJCQkJLy8kdmFsZXVyID0gJGk7CgkJCQkJJG9uZXJvdzIgPSBuZXcgU3RkQ2xhc3MoKTsKCQkJCQkkZXF1YSA9ICRyb3cyWydlcXVhJ107CgkJCQkJJGVxdWIgPSAkcm93MlsnZXF1YiddOwoJCQkJCSRsaWJlcXVpcGUgPSAkcm93MlsnbGliZXF1aXBlJ107CgkJCQkJJGZyaWVuZGx5bmFtZSA9ICRyb3cyWydmcmllbmRseW5hbWUnXTsKCQkJCQlpZihpc3NldCgkZnJpZW5kbHluYW1lKSAmJiAkZnJpZW5kbHluYW1lICE9JycpCgkJCQkJewoJCQkJCQlpZiAoJGxpYmVxdWlwZSA9PSAkZXF1YSkKCQkJCQkJewoJCQkJCQkJJG9uZXJvdzItPmVxdWE9ICRyb3cyWydmcmllbmRseW5hbWUnXTsKCQkJCQkJfQoJCQkJCQkKCQkJCQkJZWxzZXsKCQkJCQkJCSRvbmVyb3cyLT5lcXVhPSAkcm93MlsnZXF1YSddOwoJCQkJCQl9CgoJCQkJCX0KCQkJCQllbHNlewoJCQkJCQkkb25lcm93Mi0+ZXF1YT0gJHJvdzJbJ2VxdWEnXTsKCQkJCQl9CgkJCQkJaWYoaXNzZXQoJGZyaWVuZGx5bmFtZSkgJiYgJGZyaWVuZGx5bmFtZSAhPScnKQoJCQkJCXsKCQkJCQkJaWYgKCRsaWJlcXVpcGUgPT0gJGVxdWIpCgkJCQkJCXsKCQkJCQkJCSRvbmVyb3cyLT5lcXViPSAkcm93MlsnZnJpZW5kbHluYW1lJ107CgkJCQkJCX0KCgkJCQkJCWVsc2V7CgkJCQkJCQkkb25lcm93Mi0+ZXF1Yj0gJHJvdzJbJ2VxdWInXTsKCQkJCQkJfQoKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJJG9uZXJvdzItPmVxdWI9ICRyb3cyWydlcXViJ107CgkJCQkJfQoJCQkJCQoJCQkJCS8vJG9uZXJvdzItPnZhbGV1ciA9ICR2YWxldXI7CgkJCQkJJHJvd2FycmF5MltdID0gJG9uZXJvdzI7CgkJCQkJCgkJCQl9CgkJCQkKCQkJCSRzbWFydHktPmFzc2lnbigncHJvZHNfJy4kaSwkcm93YXJyYXkyKTsKCQkJCXVuc2V0KCRyb3dhcnJheTIpOwoJCQkvLwl1bnNldCgkdmFsZXVyKTsKCQkJfQoJCQkKCQl9CgkJZWxzZQoJCXsKCQkJJGRhdGVfZXZlbnQgPSAkcm93WydkYXRlX2RlYnV0J107CgkJCSRuYW1lID0gJHJvd1snbmFtZSddOwoJCQkvLyRvbmVyb3ctPmNvbXBldCA9ICRuYW1lOwoJCX0KCQkkcm93YXJyYXlbXSAgPSAkb25lcm93OwoJCSRzbWFydHktPmFzc2lnbignaXRlbXMnLCAkcm93YXJyYXkpOwoJCQoJfQp9CmVsc2UKewoJJHNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywgJ1BhcyBkZSByw6lzdWx0YXRzJyk7CgllY2hvICdwYXMgZGUgcsOpc3VsdGF0cyc7Cn0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhdmVuaXIudHBsJyk7CiMKI0VPRgojCj8+CgoKCgoKCgo=]]></data>
	</file>
	<file>
	  <filename>/action.able_player.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjICAgICAgICAgICAgICAgICAgICAgICBBY3RpdmF0aW9uL2TDqXNhY3RpdmF0aW9uIGQndW4gam91ZXVyICAjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgTWFuYWdlJykpCiAgewogICAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSk7CglyZXR1cm47CiAgIAogIH0KCiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKJGVycm9yID0gJyc7CiRsaWNlbmNlID0gJyc7CmlmKCBpc3NldCggJHBhcmFtc1snbGljZW5jZSddICkgJiYgJHBhcmFtc1snbGljZW5jZSddICE9ICcnKSAgICAKewoJJGxpY2VuY2UgPSAkcGFyYW1zWydsaWNlbmNlJ107Cn0KZWxzZQp7CgkJJGVycm9yKys7Cn0JCiRhY3RpZiA9ICcnOwppZiggaXNzZXQoICRwYXJhbXNbJ2FjdGlmJ10pICYmICRwYXJhbXNbJ2FjdGlmJ10gIT0gJycpCnsKCSRhY3RpZiA9ICRwYXJhbXNbJ2FjdGlmJ107Cn0KZWxzZQp7CgkkZXJyb3IrKzsKfQoKLy9vbiBjb21wdGUgbGUgbm9tYnJlIGQnZXJyZXVyCmVjaG8gJGVycm9yOwppZigkZXJyb3I+MCkKewoJJHRoaXMtPlNldE1lc3NhZ2UoInBhcmFtw6h0cmVzIG1hbnF1YW50cyIpOwoJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignam91ZXVycycpOwp9CgppZigkcGFyYW1zWydhY3RpZiddID09JzEnKXsKCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgU0VUIGFjdGlmID0nMScgIFdIRVJFIGxpY2VuY2UgPSA/IjsKCSRtZXNzYWdlID0gIkpvdWV1ciBhY3RpdsOpIjsKfQplbHNlCnsKCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgU0VUIGFjdGlmID0nMCcgIFdIRVJFIGxpY2VuY2UgPSA/IjsKCSRtZXNzYWdlID0gIkpvdWV1ciBkw6lzYWN0aXbDqSI7Cn0KICAgIAogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoICRsaWNlbmNlICkpOwogICAgaWYoJGRicmVzdWx0KQogICAgICAKCXsKCQkkdGhpcy0+U2V0TWVzc2FnZSgiJG1lc3NhZ2UiKTsKCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdqb3VldXJzJyk7CgkJCgl9CgoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.add_all_sit_mens.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAgaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3ByZWZzLnBocCcpOwokbm9tX2VxdWlwZXMgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbm9tX2VxdWlwZXMnKTsKJHNhaXNvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKJG1vaXNfY291cmFudCA9IGRhdGUoJ24nKTsKLy9lY2hvICJsZSBtb2lzIGNvdXJhbnQgZXN0IDoiLiRtb2lzX2NvdXJhbnQ7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKZ2xvYmFsICR0aGVtZU9iamVjdDsKJHJlc3VsdD0gYXJyYXkoKTsKJHBhcm1zID0gYXJyYXkoKTsKJHBoYXNlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJyk7CiRhbm5lZV9jb3VyYW50ZSA9IGRhdGUoJ1knKTsKCglpZigkcGhhc2U9PTEpCgl7CgkJJG1vaXNfZGVwYXJ0PTk7CgkJJG1vaXNfZmluID0gMTI7CgkJCgl9CgllbHNlewoJCQoJfQoKCiRyb3dhcnJheSA9IGFycmF5KCk7CiRyb3dqb3VldXIgPSBhcnJheSgpOwokam91ZXVyID0gYXJyYXkoKTsKJHF1ZXJ5MSA9ICJTRUxFQ1QgQ09OQ0FUX1dTKCcgJyxub20sIHByZW5vbSkgQVMgam91ZXVyLCBsaWNlbmNlIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgV0hFUkUgYWN0aWYgPSAnMSciOwokZGJyZXN1bHRhdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkxKTsKCglpZigkZGJyZXN1bHRhdCAmJiAkZGJyZXN1bHRhdC0+UmVjb3JkQ291bnQoKT4wKQoJewoJCXdoaWxlKCRyb3cgPSAkZGJyZXN1bHRhdC0+RmV0Y2hSb3coKSkKCQl7CgkJCS8vJG1heCA9ICAkcm93Wyd0b3RhbCddOwoJCQkkam91ZXVyID0gJHJvd1snam91ZXVyJ107CgkJCS8vZWNobyAkam91ZXVyOwoJCQkkbGljZW5jZSA9ICRyb3dbJ2xpY2VuY2UnXTsKCQkJJHJvd2FycmF5WyRsaWNlbmNlXSA9ICRqb3VldXI7CQoJCQkkc21hcnR5LT5hc3NpZ24oJ3Jvd2pvdWV1cicsJGpvdWV1cik7CgkJCSRzbWFydHktPmFzc2lnbignbGljZW5jZScsJGxpY2VuY2UpOwoJCQkkc21hcnR5LT5hc3NpZ24oJ3Jvd2FycmF5JywgJHJvd2FycmF5KTsKCQkJJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLAoJICAgIAkJCSR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoICRpZCwgJ2RvX2FkZF9hbGxfc2l0X21lbnMnLCAkcmV0dXJuaWQgKSApOwoJCQkJCgkJCQkkc21hcnR5LT5hc3NpZ24oJ2Nob2l4X21vaXMnLAoJCQkJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2Nob2l4X21vaXMnLCRsaXN0ZV9tb2lzLCAkbW9pc19jb3VyYW50LC0xKSk7CgkJCS8vJHNtYXJ0eS0+YXNzaWduKCdsaWduZXMnLCAkbWF4KTsJCgkJCQkJCQoJCQkJCQkJCgkJCSRzbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpLCAnY2xhc3M9ImJ1dHRvbiInKSk7CgkJCSRzbWFydHktPmFzc2lnbignY2FuY2VsJywKCQkJCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdjYW5jZWwnLAoJCQkJCQkJCSR0aGlzLT5MYW5nKCdjYW5jZWwnKSkpOwoJCQkkc21hcnR5LT5hc3NpZ24oJ2JhY2snLAoJCQkJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2JhY2snLAoJCQkJCQkJCSR0aGlzLT5MYW5nKCdiYWNrJykpKTsKCgkJCSRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsCgkJCQkJJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgkJfQkKfQkJCgkJCQoJCQkKCQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkZF9hbGxfc2l0X21lbnMudHBsJyk7CQkKCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.add_compet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKCglpZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgTWFuYWdlJykpCiAgCXsKICAgIAkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSk7CgkJcmV0dXJuOwogICAKICAJfQoKCWlmKCBpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkgKQogIAl7CiAgICAJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbXBldHMnKTsKICAgIAkJcmV0dXJuOwogIAl9Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwokZGIgPSYgJHRoaXMtPkdldERiKCk7Ci8vcydhZ2l0LWlsIGQndW5lIG1vZGlmIG91IGQndW5lIGNyw6lhID8KJHJlY29yZF9pZCA9ICcnOwokdHlwZV9jb21wZXRfc2VsZWN0ZWQgPSAnJzsKJGRhdGVfZGVidXQgPSAnJzsKJGRhdGVfZmluID0gJyc7CiRudW1qb3VybiA9ICcnOwokZWRpdCA9IDA7CgoJaWYoaXNzZXQoJHBhcmFtc1sncmVjb3JkX2lkJ10pICYmICRwYXJhbXNbJ3JlY29yZF9pZCddICE9IiIpCgl7CgkJJHJlY29yZF9pZCA9ICRwYXJhbXNbJ3JlY29yZF9pZCddOwoJCSRlZGl0ID0gMTsvL29uIGVzdCBiaWVuIGVuIHRyYWkgZCfDqWRpdGVyIHVuIGVucmVnaXN0cmVtZW50CgkJLy9PTiBWQSBDSEVSQ0hFUiBsJ2VucmVnaXN0cmVtZW50IGVuIHF1ZXN0aW9uCgkJJHF1ZXJ5ID0gIlNFTEVDVCBjYWwuaWQsIHRjLmlkIEFTIGluZGV4MSwgdGMuaWRlcHJldXZlLCB0Yy5uYW1lLHRjLmluZGl2cywgY2FsLmRhdGVfZGVidXQsIGNhbC5kYXRlX2ZpbiwgY2FsLm51bWpvdXJuIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NhbGVuZHJpZXIgQVMgY2FsLCAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMgQVMgdGMgV0hFUkUgY2FsLmlkZXByZXV2ZSA9IHRjLmlkZXByZXV2ZSBBTkQgY2FsLmlkID0gPyI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHJlY29yZF9pZCkpOwoJCXdoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQkJewoJCQkJJHR5cGVfY29tcGV0X3NlbGVjdGVkID0gJHJvd1snaWRlcHJldXZlJ107CgkJCQkkZGF0ZV9kZWJ1dCA9ICRyb3dbJ2RhdGVfZGVidXQnXTsKCQkJCSRkYXRlX2ZpbiA9ICRyb3dbJ2RhdGVfZmluJ107CgkJCQkkbnVtam91cm4gPSAkcm93WydudW1qb3VybiddOwoJCQkJJG5hbWUgPSAkcm93WyduYW1lJ107CgkJCQkkaW5kaXZzID0gJHJvd1snaW5kaXZzJ107CgkJCQkkaW5kZXggPSAkcm93WydpbmRleDEnXSAtIDE7CgkJCQkvLyRpZGVwcmV1dmUgPSAkcm93WydpZGVwcmV1dmUnXTsKCQkJCQoJCQkJCgkJCQkKCQkJfQoJfQoJLy9vbiBmYWl0IHVuZSByZXF1ZXRlIHBvdXIgY29tcGxldGVyIGwnaW5wdXQgZHJvcGRvd24gZHUgZm9ybXVsYWlyZQoJJHF1ZXJ5ID0gIlNFTEVDVCBuYW1lLCBpZGVwcmV1dmUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMiOwoJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgoJCWlmKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPjApCgkJewoJCQl3aGlsZSgkcm93PSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJCXsKCQkJCSR0eXBlX2NvbXBldFskcm93WyduYW1lJ11dID0gJHJvd1snaWRlcHJldXZlJ107CgkJCX0KCQl9CgoKCQkJCgkKCS8vb24gY29uc3RydWl0IGxlIGZvcm11bGFpcmUKCSRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywKCQkJICAgICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoICRpZCwgJ2RvX2FkZF9jb21wZXQnLCAkcmV0dXJuaWQgKSApOwoJaWYoJGVkaXQ9PTEpCgl7CgkJJHNtYXJ0eS0+YXNzaWduKCdyZWNvcmRfaWQnLAoJCQkJJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwncmVjb3JkX2lkJywkcmVjb3JkX2lkKSk7Cgl9Cgkkc21hcnR5LT5hc3NpZ24oJ2lkZXByZXV2ZScsCgkJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwnaWRlcHJldXZlJywkdHlwZV9jb21wZXQsJHNlbGVjdGVkaW5kZXggPSAkaW5kZXgsICRzZWxlY3RlZHZhbHVlPSRuYW1lKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2RhdGVfZGVidXQnLAoJCQkkdGhpcy0+Q3JlYXRlSW5wdXREYXRlKCRpZCwgJ2RhdGVfZGVidXQnLCRkYXRlX2RlYnV0KSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2RhdGVfZmluJywKCQkJJHRoaXMtPkNyZWF0ZUlucHV0RGF0ZSgkaWQsICdkYXRlX2ZpbicsJGRhdGVfZmluKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ251bWpvdXJuJywKCQkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ251bWpvdXJuJywkbnVtam91cm4sMyw1KSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2luZGl2cycsCgkJCSR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ2luZGl2cycsJGluZGl2cywzLDUpKTsJCgkkc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsCgkJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JyksICdjbGFzcz0iYnV0dG9uIicpKTsKCSRzbWFydHktPmFzc2lnbignY2FuY2VsJywKCQkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY2FuY2VsJywKCQkJCQkJJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2JhY2snLAoJCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdiYWNrJywKCQkJCQkJJHRoaXMtPkxhbmcoJ2JhY2snKSkpOwoKCSRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsCgkJCSR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoJCgkKCgoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZGRfY29tcGV0LnRwbCcpOwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.add_joueur.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBNYW5hZ2UnKSkKICB7CiAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicpKTsKCXJldHVybjsKICAgCiAgfQoKJGRiID0mICR0aGlzLT5HZXREYigpOwovLyRyZWNvcmRfaWQgPSAkcGFyYW1zWydyZWNvcmRfaWQnXTsKCgppZiggIWlzc2V0KCAkcGFyYW1zWydsaWNlbmNlJ10gKSB8fCAkcGFyYW1zWydsaWNlbmNlJ10gPT0gJycpICAgIAp7CgkKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJLy8kdGhpcy0+UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJICAgIC8vcmV0dXJuOwp9CgogICAgLy8gZmluZCB0aGUgdXNlcgogICAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgV0hFUkUgbGljZW5jZSA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5HZXRSb3coJHF1ZXJ5LCBhcnJheSggJHBhcmFtc1snbGljZW5jZSddICkpOwogICAgaWYoJGRicmVzdWx0KQogICAgICAKCXsKCQkkbGljZW5jZSA9ICRkYnJlc3VsdFsnbGljZW5jZSddOwoJCSRhY3RpZiA9ICRkYnJlc3VsdFsnYWN0aWYnXTsKCQkkYmlydGhkYXkgPSAkZGJyZXN1bHRbJ2JpcnRoZGF5J107CgkJJHNleGUgPSAkZGJyZXN1bHRbJ3NleGUnXTsKCQkkbm9tID0gJGRicmVzdWx0Wydub20nXTsKCQkkcHJlbm9tID0gJGRicmVzdWx0WydwcmVub20nXTsKCQkkYWRyZXNzZSA9ICRkYnJlc3VsdFsnYWRyZXNzZSddOwoJCSR2aWxsZSA9ICRkYnJlc3VsdFsndmlsbGUnXTsKCQkkY29kZXBvc3RhbCA9ICRkYnJlc3VsdFsnY29kZXBvc3RhbCddOwoJCSRsaWNlbmNlID0gJGRicmVzdWx0WydsaWNlbmNlJ107CgkJCgkvLwkkYWN0aWYgPSAkZGJyZXN1bHRbJ2FjdGlmJ107CgkJCgl9CgogIAokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsCgkJJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCggJGlkLCAnZG9fZWRpdF9qb3VldXInLCAkcmV0dXJuaWQgKSApOwovKgokc21hcnR5LT5hc3NpZ24oJ3JlY29yZF9pZCcsCgkJICAgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbiggJGlkLCAncmVjb3JkX2lkJywgJHBhcmFtc1sncmVjb3JkX2lkJ10gKSk7CiovCiRpdGVtcyA9IGFycmF5KCdPdWknPT4nMScsICdOb24nPT4nMCcpOwokc21hcnR5LT5hc3NpZ24oJ2FjdGlmJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ2FjdGlmJywkaXRlbXMsLTEsJGFjdGlmKSk7CiRzbWFydHktPmFzc2lnbignbm9tJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnbm9tJywkbm9tLDgwLDE1MCkpOwkJCQkJCiRzbWFydHktPmFzc2lnbigncHJlbm9tJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3ByZW5vbScsJHByZW5vbSw4MCwxNTApKTsKaWYoaXNzZXQoJHBhcmFtc1snbGljZW5jZSddKSAmJiAkcGFyYW1zWydsaWNlbmNlJ10gIT0gJycpewoJJHNtYXJ0eS0+YXNzaWduKCdsaWNlbmNlJywKCQkJJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJ2xpY2VuY2UnLCRsaWNlbmNlKSk7Cn0KZWxzZXsKCSRzbWFydHktPmFzc2lnbignbGljZW5jZScsCgkJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbGljZW5jZScsJGxpY2VuY2UpKTsKfQoKJHNtYXJ0eS0+YXNzaWduKCdiaXJ0aGRheScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RGF0ZSgkaWQsICdiaXJ0aGRheScsJGJpcnRoZGF5KSk7CiRpdGVtcyA9IGFycmF5KCdNYXNjdWxpbic9PidNJywgJ0bDqW1pbmluJz0+J0YnKTsKJHNtYXJ0eS0+YXNzaWduKCdzZXhlJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdzZXhlJywkaXRlbXMsLTEsJHNleGUpKTsKJHNtYXJ0eS0+YXNzaWduKCdhZHJlc3NlJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2FkcmVzc2UnLCRhZHJlc3NlLDEwMCwyODApKTsKJHNtYXJ0eS0+YXNzaWduKCd2aWxsZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd2aWxsZScsJHZpbGxlLDgwLDEwMCkpOwokc21hcnR5LT5hc3NpZ24oJ2NvZGVwb3N0YWwnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnY29kZXBvc3RhbCcsJGNvZGVwb3N0YWwsODAsMTAwKSk7CQkJCQoJCQkJCQkJCQkJCQkJCQkKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpLCAnY2xhc3M9ImJ1dHRvbiInKSk7CiRzbWFydHktPmFzc2lnbignY2FuY2VsJywKCQkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY2FuY2VsJywKCQkJCQkJJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7Cgokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLAoJCSR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdF9qb3VldXIudHBsJyk7CgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.add_sit_mens.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMgICAgICAgICAgICBBam91dCBtYW51ZWwgZCd1bmUgc2l0dWF0aW9uIG1lbnN1ZWxsZSAgICAgIyMjCiMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMKIyMjICAgICAgICAgICAgQXV0ZXVyIDogQ2xhdWRlIFNJT0hBTiAgICAgICAgICAgICAgICAgICAgICMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIwojCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKJG5vbV9lcXVpcGVzID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ25vbV9lcXVpcGVzJyk7CiRzYWlzb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7CiRtb2lzX2NvdXJhbnQgPSBkYXRlKCduJyk7Ci8vJG1vaXNfY291cmFudCA9IDExOwovLyRtb2lzX2NvdXJhbnQgPSA3Oy8vYydlc3QgbGUgbW9pcyBkZSByw6lmw6lyZW5jZSBhdmVjIGxlcXVlbCBpbCBmYXV0IHRyYXZhaWxsZXIgZW4gcHJvZAovL2VjaG8gImxlIG1vaXMgY291cmFudCBlc3QgOiIuJG1vaXNfY291cmFudDsKJGRiID0mICR0aGlzLT5HZXREYigpOwpnbG9iYWwgJHRoZW1lT2JqZWN0OwokcmVzdWx0PSBhcnJheSgpOwokcGFybXMgPSBhcnJheSgpOwokc2Fpc29uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwokcGhhc2UgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGhhc2VfZW5fY291cnMnKTsKLy8kcGhhc2UgPSAxOy8vcG91ciB0ZXN0CiRzbWFydHktPmFzc2lnbigncGhhc2UnLCRwaGFzZSk7CiRhbm5lZV9jb3VyYW50ZSA9IGRhdGUoJ1knKTsKCglpZigkcGhhc2U9PTEpCgl7CgkJJG1vaXNfZGVwYXJ0PTk7CgkJJG1vaXNfZmluID0gMTI7CQkKCX0KCWVsc2V7CgkJJG1vaXNfZGVwYXJ0ID0gNzsgLy9wb3N0dWxhdAkJCgl9CgokbGljZW5jZSA9ICcnOwoKCWlmKGlzc2V0KCRwYXJhbXNbJ2xpY2VuY2UnXSkgJiYgJHBhcmFtc1snbGljZW5jZSddICE9JycpCgl7CgkJJGxpY2VuY2UgPSAkcGFyYW1zWydsaWNlbmNlJ107Cgl9CgllbHNlCgl7CgkJJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPmxhbmdbJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcyddKTsKCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdzaXR1YXRpb24nKTsKCX0KCiRyb3dhcnJheSA9IGFycmF5KCk7CiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywKCQkkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCAkaWQsICdkb19hZGRfc2l0X21lbnMnLCAkcmV0dXJuaWQgKSApOwokc21hcnR5LT5hc3NpZ24oJ2xpY2VuY2UnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdsaWNlbmNlJywkbGljZW5jZSwxMCwxNSkpOwokaT0wOwokcXVlcnkgPSAiU0VMRUNUIGoubm9tLCBqLnByZW5vbSwgai5saWNlbmNlLCBzdC5tb2lzLCBzdC5wb2ludHMgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfc2l0X21lbnMgQVMgc3QsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIEFTIGogIFdIRVJFIHN0LmxpY2VuY2UgPSBqLmxpY2VuY2UgQU5EIGoubGljZW5jZSA9ID8gQU5EIHNhaXNvbiA9ID8iOwovL2VjaG8gJHF1ZXJ5OwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGljZW5jZSwkc2Fpc29uKSk7CgoJaWYoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKT4wKQoJewoJCXdoaWxlKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJewoJCQkvL3Zhcl9kdW1wKCRyb3cpOwkJCQoJCQkkbW9pcyA9ICRyb3dbJ21vaXMnXTsKCQkJJGNsYSA9ICRyb3dbJ3BvaW50cyddOwoJCQkkbm9tID0gJHJvd1snbm9tJ107CgkJCSRwcmVub20gPSAkcm93WydwcmVub20nXTsKCQkJJHJvd2FycmF5WyRtb2lzXSA9ICRjbGE7CgkJCS8vcHJpbnRfcigkcm93YXJyYXkpOwkJCgkJCSRzbWFydHktPmFzc2lnbignbm9tJywKCQkJCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ25vbScsICRub20sIDMwLCA4MCkpOwoJCQkkc21hcnR5LT5hc3NpZ24oJ3ByZW5vbScsCgkJCQkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdwcmVub20nLCAkcHJlbm9tLCAzMCwgODApKTsKCQkJJHNtYXJ0eS0+YXNzaWduKCdtb2lzX2NvdXJhbnQnLCAkbW9pc19jb3VyYW50KTsJCQkJCgkJCSRzbWFydHktPmFzc2lnbigncm93YXJyYXknLCRyb3dhcnJheSk7CgkJCQkJCQkKCQl9CQkJCgkJCQoJfQkKCWVsc2UKCXsJCQoJCSRzbWFydHktPmFzc2lnbignbm9tJywKCQkJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbm9tJywgJG5vbSwgMzAsIDgwKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdwcmVub20nLAoJCQkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdwcmVub20nLCAkcHJlbm9tLCAzMCwgODApKTsKCQkkc21hcnR5LT5hc3NpZ24oJ21vaXNfY291cmFudCcsICRtb2lzX2NvdXJhbnQpOwkJCQkKCQkkc21hcnR5LT5hc3NpZ24oJ3Jvd2FycmF5Jywkcm93YXJyYXkpOwkJCQoJfQkKCQoJJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpLCAnY2xhc3M9ImJ1dHRvbiInKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsCgkJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2NhbmNlbCcsCgkJCQkJCSR0aGlzLT5MYW5nKCdjYW5jZWwnKSkpOwoJJHNtYXJ0eS0+YXNzaWduKCdiYWNrJywKCQkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnYmFjaycsCgkJCQkJCSR0aGlzLT5MYW5nKCdiYWNrJykpKTsKCSRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsCgkJCSR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoJCgkKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZGRfc2l0X21lbnMudHBsJyk7CQkKCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.add_type_compet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBNYW5hZ2UnKSkKICB7CiAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicpKTsKCXJldHVybjsKICAgCiAgfQppZiggaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pICkKICB7CiAgICAkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdyZW5jb250cmVzJyk7CiAgICByZXR1cm47CiAgfQoKJHRoaXMtPlNldEN1cnJlbnRUYWIoJ3VzZXJzJyk7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCiAgIAogICAgJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLAoJCSAgICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCAkaWQsICdkb19hZGRfdHlwZV9jb21wZXQnLCAkcmV0dXJuaWQgKSApOwokc21hcnR5LT5hc3NpZ24oJ3R5cGVfY29tcGV0JywKCQkJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCd0eXBlX2NvbXBldCcsJycsNSwxMCkpOwoKJHNtYXJ0eS0+YXNzaWduKCduYW1lJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnbmFtZScsJG5hbWUsNzUsMTUwKSk7Ci8qCiRzbWFydHktPmFzc2lnbignY29kZV9jb21wZXQnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnY29kZV9jb21wZXQnLCRjb2RlX2NvbXBldCwyLDMpKTsKKi8KJGxpc3RlY29lZmYgPSBhcnJheSgiMCwyNSI9PiIwLjI1IiwiMCw1MCI9PiIwLjUwIiwiMCw3NSI9PiIwLjc1IiwgIjEsMDAiPT4iMS4wMCIsICIxLDI1Ij0+IjEuMjUiLCIxLDUwIj0+IjEuNTAiKTsKJHNtYXJ0eS0+YXNzaWduKCdjb2VmZmljaWVudCcsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnY29lZmZpY2llbnQnLCRsaXN0ZWNvZWZmLDMpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbmRpdnMnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2luZGl2cycsYXJyYXkoIk91aSI9PiJPdWkiLCAiTm9uIj0+Ik5vbiIpKSk7CQokc21hcnR5LT5hc3NpZ24oJ3Rvb2x0aXAnLCRoZWxwdGV4dCA9ICdEb2l0IMOqdHJlIHVuaXF1ZScpOwkKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JyksICdjbGFzcz0iYnV0dG9uIicpKTsKJHNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2NhbmNlbCcsCgkJCQkJJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CiRzbWFydHktPmFzc2lnbignYmFjaycsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnYmFjaycsCgkJCQkJJHRoaXMtPkxhbmcoJ2JhY2snKSkpOwoKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywKCQkkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkZF90eXBlX2NvbXBldC50cGwnKTsKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.admin_calendar_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLyoqLwoJaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9tYXNzZGVsZXRlJ10pICkKICAJewogICAgIAkJaWYoIGlzc2V0KCRwYXJhbXNbJ3NlbCddKSAmJiBpc19hcnJheSgkcGFyYW1zWydzZWwnXSkgJiYgY291bnQoJHBhcmFtc1snc2VsJ10pID4gMCApCiAgICAgIAkJewogICAgICAgIAkJZm9yZWFjaCggJHBhcmFtc1snc2VsJ10gYXMgJGpvdXJuYWxpZCApCgkgIAkJewoJICAgIAkJCXBpbmdfYWRtaW5fb3BzOjpkZWxldGVfam91cm5hbCggJGpvdXJuYWxpZCApOwoJICAJCX0KICAgICAgCQl9CiAgCX0KLyoqLwoKJGRiID0mICR0aGlzLT5HZXREYigpOwpnbG9iYWwgJHRoZW1lT2JqZWN0OwokZGVzaWduYXRpb24gPSAnJzsKJG1haW50ZW5hbnQgPSBkYXRlKCJZLW0tZCIpOwokbW9pc19jb3VyYW50ID0gZGF0ZSgnbicpOwokbW9pc19jaG9pc2kgPSAnJzsKJHBoYXNlX2Nob2lzaWUgPSAnJzsKJHBoYXNlX2VuX2NvdXJzID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJyk7CiRzYWlzb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7CmlmKGlzc2V0KCRwYXJhbXNbJ3BoYXNlX2Nob2lzaWUnXSkgJiYgJHBhcmFtc1sncGhhc2VfY2hvaXNpZSddICE9JycpCnsKCSRwaGFzZV9jaG9pc2llID0gJHBhcmFtc1sncGhhc2VfY2hvaXNpZSddOwp9CmVsc2UKewoJJHBoYXNlX2Nob2lzaWUgPSAkcGhhc2VfZW5fY291cnM7Cn0KJHNtYXJ0eS0+YXNzaWduKCdwaGFzZScsICRwaGFzZV9jaG9pc2llKTsKaWYoaXNzZXQoJHBhcmFtc1snbW9pcyddKSAmJiAkcGFyYW1zWydtb2lzJ10gIT0nJykKewoJJG1vaXNfY2hvaXNpID0gJHBhcmFtc1snbW9pcyddOwoJLy8kYWN0aWYgPSAkbW9pc19jaG9pc2k7Cn0KZWxzZQp7CgkkbW9pc19jaG9pc2kgPSAkbW9pc19jb3VyYW50Owp9CmlmKCRtb2lzX2Nob2lzaSA9PTEpCnsKCSRtb2lzX3ByZWNlZGVudCA9IDEyOwp9CmVsc2UKewoJJG1vaXNfcHJlY2VkZW50ID0gJG1vaXNfY2hvaXNpIC0xOwp9CmlmKCRtb2lzX2Nob2lzaT09MTIpCnsKCSRtb2lzX3N1aXZhbnQgPSAxOwp9CmVsc2UKewoJJG1vaXNfc3VpdmFudCA9ICRtb2lzX2Nob2lzaSArIDE7Cn0KJHNtYXJ0eS0+YXNzaWduKCdTZXAnLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCdTZXB0ZW1icmUnLCBhcnJheSgiYWN0aXZlX3RhYiI9PiJjYWxlbmRyaWVyIiwibW9pcyI9PiI5IiwicGhhc2VfY2hvaXNpZSI9PiIxIiksCgkJJycsIGZhbHNlLCBmYWxzZSwgKCgkbW9pc19jaG9pc2k9PTkpPydjbGFzcz0icGFnZW9wdGlvbnMiJzonY2xhc3M9ImFjdGl2ZSInKSkpOwokc21hcnR5LT5hc3NpZ24oJ09jdCcsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsJ09jdG9icmUnLCBhcnJheSgiYWN0aXZlX3RhYiI9PiJjYWxlbmRyaWVyIiwibW9pcyI9PiIxMCIsInBoYXNlX2Nob2lzaWUiPT4iMSIpLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT0xMCk/J2NsYXNzPSJwYWdlb3B0aW9ucyInOidjbGFzcz0iYWN0aXZlIicpKSk7CiRzbWFydHktPmFzc2lnbignTm92JywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwnTm92ZW1icmUnLCBhcnJheSgiYWN0aXZlX3RhYiI9PiJjYWxlbmRyaWVyIiwibW9pcyI9PiIxMSIsInBoYXNlX2Nob2lzaWUiPT4iMSIpLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT0xMSk/J2NsYXNzPSJwYWdlb3B0aW9ucyInOidjbGFzcz0iYWN0aXZlIicpKSk7CiRzbWFydHktPmFzc2lnbignRGVjJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwnRMOpY2VtYnJlJywgYXJyYXkoImFjdGl2ZV90YWIiPT4iY2FsZW5kcmllciIsIm1vaXMiPT4iMTIiLCJwaGFzZV9jaG9pc2llIj0+IjEiKSwKCQknJywgZmFsc2UsIGZhbHNlLCAoKCRtb2lzX2Nob2lzaT09MTIpPydjbGFzcz0icGFnZW9wdGlvbnMiJzonY2xhc3M9ImFjdGl2ZSInKSkpOwokc21hcnR5LT5hc3NpZ24oJ0phbicsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsJ0phbnZpZXInLCBhcnJheSgiYWN0aXZlX3RhYiI9PiJjYWxlbmRyaWVyIiwibW9pcyI9PiIxIiwicGhhc2VfY2hvaXNpZSI9PiIyIiksCgkJJycsIGZhbHNlLCBmYWxzZSwgKCgkbW9pc19jaG9pc2k9PTEpPydjbGFzcz0icGFnZW9wdGlvbnMiJzonY2xhc3M9ImFjdGl2ZSInKSkpOwokc21hcnR5LT5hc3NpZ24oJ0ZldicsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsJ0bDqXZyaWVyJywgYXJyYXkoImFjdGl2ZV90YWIiPT4iY2FsZW5kcmllciIsIm1vaXMiPT4iMiIsInBoYXNlX2Nob2lzaWUiPT4iMiIpLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT0yKT8nY2xhc3M9InBhZ2VvcHRpb25zIic6J2NsYXNzPSJhY3RpdmUiJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdNYXInLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCdNYXJzJywgYXJyYXkoImFjdGl2ZV90YWIiPT4iY2FsZW5kcmllciIsIm1vaXMiPT4iMyIsInBoYXNlX2Nob2lzaWUiPT4iMiIpLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT0zKT8nY2xhc3M9InBhZ2VvcHRpb25zIic6J2NsYXNzPSJhY3RpdmUiJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdBdnInLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCdBdnJpbCcsIGFycmF5KCJhY3RpdmVfdGFiIj0+ImNhbGVuZHJpZXIiLCJtb2lzIj0+IjQiLCJwaGFzZV9jaG9pc2llIj0+IjIiKSwKCQknJywgZmFsc2UsIGZhbHNlLCAoKCRtb2lzX2Nob2lzaT09NCk/J2NsYXNzPSJwYWdlb3B0aW9ucyInOidjbGFzcz0iYWN0aXZlIicpKSk7CiRzbWFydHktPmFzc2lnbignTWFpJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwnTWFpJywgYXJyYXkoImFjdGl2ZV90YWIiPT4iY2FsZW5kcmllciIsIm1vaXMiPT4iNSIsInBoYXNlX2Nob2lzaWUiPT4iMiIpLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT01KT8nY2xhc3M9InBhZ2VvcHRpb25zIic6J2NsYXNzPSJhY3RpdmUiJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdKdWluJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwnSnVpbicsIGFycmF5KCJhY3RpdmVfdGFiIj0+ImNhbGVuZHJpZXIiLCJtb2lzIj0+IjYiLCJwaGFzZV9jaG9pc2llIj0+IjIiKSwKCQknJywgZmFsc2UsIGZhbHNlLCAoKCRtb2lzX2Nob2lzaT09Nik/J2NsYXNzPSJwYWdlb3B0aW9ucyInOidjbGFzcz0iYWN0aXZlIicpKSk7CiRzbWFydHktPmFzc2lnbignSnVpbCcsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsJ0p1aWxsZXQnLCBhcnJheSgiYWN0aXZlX3RhYiI9PiJjYWxlbmRyaWVyIiwibW9pcyI9PiI3IiwicGhhc2VfY2hvaXNpZSI9PiIyIiksCgkJJycsIGZhbHNlLCBmYWxzZSwgKCgkbW9pc19jaG9pc2k9PTcpPydjbGFzcz0icGFnZW9wdGlvbnMiJzonY2xhc3M9ImFjdGl2ZSInKSkpOwoKJHNtYXJ0eS0+YXNzaWduKCdtb2lzX3ByZWNlZGVudCcsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwgJzw8JywgYXJyYXkoImFjdGl2ZV90YWIiPT4iY2FsZW5kcmllciIsInBoYXNlX2Nob2lzaWUiPT4iMSIsIm1vaXMiPT4iMTIiKSwKCQknJywgZmFsc2UsIGZhbHNlLCAoKCRtb2lzX2Nob2lzaT09MTIpPydjbGFzcz0icGFnZW9wdGlvbnMiJzonY2xhc3M9ImFjdGl2ZSInKSkpOwokc21hcnR5LT5hc3NpZ24oJ21vaXNfc3VpdmFudCcsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwgJz4+JywgYXJyYXkoImFjdGl2ZV90YWIiPT4iY2FsZW5kcmllciIsInBoYXNlX2Nob2lzaWUiPT4iMiIsIm1vaXMiPT4iMSIpICwKCQknJywgZmFsc2UsIGZhbHNlLCAoKCRtb2lzX2Nob2lzaT09MSk/J2NsYXNzPSJwYWdlb3B0aW9ucyInOidjbGFzcz0iYWN0aXZlIicpKSk7CgoKLy9saXN0ZSBkZXMgbGllbnMgcG91ciByw6ljdXDDqXJlciBsZXMgZG9ubsOpZXMgCiRzbWFydHktPmFzc2lnbigncmV0cmlldmVfdXNlcnMnLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2pvdWV1cnNfYnlfY2x1YicsICRyZXR1cm5pZCwgJGNvbnRlbnRzID0gIlLDqWN1cMOpcmF0aW9uIGRlcyBqb3VldXJzIiwgJHdhcm5fbWVzc2FnZSA9ICJFdGVzIHZvdXMgc8O7ciA/IFRyb3AgZCdhcHBlbHMgdmVycyBsYSBiYXNlIGRlIGRvbm7DqWVzIHBldXZlbnQgYXZvaXIgZGVzIGNvbnPDqXF1ZW5jZXMgaW1wb3J0YW50ZXMgISIpKTsKJHNtYXJ0eS0+YXNzaWduKCdyZXRyaWV2ZV90ZWFtcycsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfdGVhbXMnLCAkcmV0dXJuaWQsICRjb250ZW50cyA9ICJSw6ljdXDDqXJhdGlvbiBkZXMgw6lxdWlwZXMgKGNoYW1waW9ubmF0IHNlbmlvcnMpIiwgYXJyYXkoJ3R5cGUnPT4nTScpKSk7CiRzbWFydHktPmFzc2lnbigncmV0cmlldmVfdGVhbXNfYXV0cmVzJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV90ZWFtcycsICRyZXR1cm5pZCwgJGNvbnRlbnRzID0gIlLDqWN1cMOpcmF0aW9uIGRlcyDDqXF1aXBlcyIpKTsKJHNtYXJ0eS0+YXNzaWduKCdyZXRyaWV2ZV9hbGxfcGFydGllcycsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfYWxsX3BhcnRpZXMnLCAkcmV0dXJuaWQsICRjb250ZW50cyA9ICJSw6ljdXDDqXJhdGlvbiBkZSB0b3V0ZXMgbGVzIHBhcnRpZXMgRkZUVCIpKTsKJHNtYXJ0eS0+YXNzaWduKCdyZWN1cF9qb3VldXJzJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZWN1cF9qb3VldXJzJywgJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbigncmV0cmlldmVfYWxsX3NwaWQnLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2FsbF9wYXJ0aWVzX3NwaWQnLCAkcmV0dXJuaWQsICRjb250ZW50cyA9ICdSw6ljdXDDqXJhdGlvbnMgZGUgdG91dGVzIGxlcyBwYXJ0aWVzIFNQSUQnLCAkd2Fybl9tZXNzYWdlID0gJ0V0ZXMgdm91cyBzw7tyID8nKSk7CiRzbWFydHktPmFzc2lnbigncmV0cmlldmVfZGV0YWlsc19yZW5jb250cmVzJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9jbHViJywgJHJldHVybmlkLCAkY29udGVudHMgPSAnUsOpY3Vww6lyYXRpb25zIGR1IGTDqXRhaWwgZGVzIHJlbmNvbnRyZXMnKSk7CgovKiBvbiBmYWl0IHVuIGZvcm11bGFpcmUgZGUgZmlsdHJhZ2UgZGVzIHLDqXN1bHRhdHMqLwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkbWluX2RhdGFfdGFiJykpOyAKJHN0YXR1c2xpc3RbJHRoaXMtPmxhbmcoJ2FsbHN0YXR1cycpXSA9Jyc7CiRkYXRlbGlzdFskdGhpcy0+TGFuZygnYWxsZGF0ZXMnKV0gPSAnJzsKJHR5cGVDb21wZXQgPSBhcnJheSgpOwovLyR0eXBlQ29tcGV0WyR0aGlzLT5MYW5nKCdhbGxjb21wZXQnKV0gPSAnJzsKJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwIjsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CndoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCXsKCQlzZXRsb2NhbGUgKExDX1RJTUUsICdmcl9GUicpOyAKCQkvLyRkYXRlbGlzdFskcm93WydkYXRlY3JlYXRlZCddXSA9IHN0cmZ0aW1lKCIlQSAlZSAlQiAlWSDDoCAlSDolTTolUyIsc3RydG90aW1lKCRyb3dbJ2RhdGVjcmVhdGVkJ10pKTsKCQkkZGF0ZWxpc3RbJHJvd1snZGF0ZWNyZWF0ZWQnXV0gPSAkcm93WydkYXRlY3JlYXRlZCddOyAKCQkvLyAkcGxheWVyc2xpc3RbJHJvd1sncGxheWVyJ11dID0gJHJvd1snbGljZW5jZSddOwoJCSRzdGF0dXNsaXN0WyRyb3dbJ3N0YXR1cyddXSA9ICRyb3dbJ3N0YXR1cyddOwoJCS8vJGVxdWlwZWxpc3RbJHJvd1snZXF1aXBlJ11dID0gJHJvd1snZXF1aXBlJ107CgkJLy8kdHlwZUNvbXBldFskcm93Wydjb2RlY2hhbXAnXV0gPSAkcm93Wydjb2RlY2hhbXAnXTsKCX0KCgkJCWlmKCBpc3NldCgkcGFyYW1zWydzdWJtaXRmaWx0ZXInXSkgKQoJCSAgCXsKCQkgICAgCQlpZiggaXNzZXQoICRwYXJhbXNbJ2RhdGVsaXN0J10pICkKCQkgICAgICAJCXsKCQkJCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGF0ZUNob2lzaScsICRwYXJhbXNbJ2RhdGVsaXN0J10pOwoJCSAgICAgIAkJfQoJCQoJCQkJaWYoIGlzc2V0KCAkcGFyYW1zWydzdGF0dXNsaXN0J10pICkKCQkgICAgICAJCXsKCQkJCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnc3RhdHVzQ2hvaXNpZScsICRwYXJhbXNbJ3N0YXR1c2xpc3QnXSk7CgkJICAgICAgCQl9CgkJCX0KCQkKJGN1cmRhdGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSggJ2RhdGVDaG9pc2knICk7CiRjdXJzdGF0dXMgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc3RhdHVzQ2hvaXNpZScpOwoKJHNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdG91cicsCgkJJHRoaXMtPkxhbmcoJ3RvdXInKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfZGF0ZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCdkYXRlbGlzdCcsJGRhdGVsaXN0LC0xLCRjdXJkYXRlKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfc3RhdHVzJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ3N0YXR1c2xpc3QnLCRzdGF0dXNsaXN0LC0xLCRjdXJzdGF0dXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfZXF1aXBlJywKCQkkdGhpcy0+TGFuZygnZXF1aXBlJykpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdGZpbHRlcicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0ZmlsdGVyJywkdGhpcy0+TGFuZygnZmlsdHJlcycpKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgoKJHJlc3VsdD0gYXJyYXkgKCk7CiRxdWVyeSA9ICJTRUxFQ1QgY2FsLnRhZyxjYWwuaWQsIGNvbXAuY29lZmZpY2llbnQsY29tcC5uYW1lLGNvbXAuaW5kaXZzLGNhbC50eXBlX2NvbXBldCxjYWwuZGF0ZV9kZWJ1dCwgY2FsLmRhdGVfZmluLCBjYWwubnVtam91cm4gRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2FsZW5kcmllciBBUyBjYWwsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyBBUyBjb21wIFdIRVJFIGNhbC5pZGVwcmV1dmUgPSBjb21wLmlkZXByZXV2ZSBBTkQgY2FsLnNhaXNvbiA9ID8gQU5EIE1PTlRIKGNhbC5kYXRlX2RlYnV0KSA9ID8iOwoJCSRxdWVyeSAuPSIgT1JERVIgQlkgY2FsLmRhdGVfZGVidXQgQVNDIjsKCQkkZGJyZXN1bHQ9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRzYWlzb24sICRtb2lzX2Nob2lzaSkpOwoKCS8vZWNobyAkcXVlcnk7CgkKCQlpZiAoISRkYnJlc3VsdCkKCQl7CgoJCQkkZGVzaWduYXRpb24uPSAkZGItPkVycm9yTXNnKCk7CgoJCX0KCgoKCi8vJGRicmVzdWx0PSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKJHJvd2NsYXNzPSAncm93MSc7CiRyb3dhcnJheT0gYXJyYXkgKCk7CgoJaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwKQogIAl7CiAgICAJCXdoaWxlICgkcm93PSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCiAgICAgIAkJewoJCQkkaW5kaXZzID0gJHJvd1snaW5kaXZzJ107CgkJCSRvbmVyb3c9IG5ldyBTdGRDbGFzcygpOwoJCQkkb25lcm93LT5yb3djbGFzcz0gJHJvd2NsYXNzOwoJCQkkb25lcm93LT5pZD0gJHJvd1snaWQnXTsKCQkJJG9uZXJvdy0+bmFtZT0gJHJvd1snbmFtZSddOwoJCQkkb25lcm93LT50eXBlX2NvbXBldD0gJHJvd1sndHlwZV9jb21wZXQnXTsKCQkJJG9uZXJvdy0+Y29lZmYgPSAkcm93Wydjb2VmZmljaWVudCddOwoJCQkkb25lcm93LT5kYXRlX2RlYnV0PSAkcm93WydkYXRlX2RlYnV0J107CgkJCSRvbmVyb3ctPmRhdGVfZmluPSAkcm93WydkYXRlX2ZpbiddOwoJCQkkb25lcm93LT5udW1qb3Vybj0gJHJvd1snbnVtam91cm4nXTsKCQkJJG9uZXJvdy0+dGFnPSAkcm93Wyd0YWcnXTsKCQkJJG9uZXJvdy0+aW5kaXZzID0gJHJvd1snaW5kaXZzJ107CgkJCWlmKCRpbmRpdnMgPT0nMScpCgkJCXsKCQkJCSRvbmVyb3ctPnBhcnRpY2lwZSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3BhcnRpY2lwZScsICRyZXR1cm5pZCwgJ1BhcnRpY2lwYW50cycsIGFycmF5KCd0eXBlX2NvbXBldCc9PiRyb3dbJ3R5cGVfY29tcGV0J10sJ2RhdGVfZGVidXQnPT4kcm93WydkYXRlX2RlYnV0J10sJ2RhdGVfZmluJz0+JHJvd1snZGF0ZV9maW4nXSkpOwoJCQl9CgkJCSRvbmVyb3ctPnJldHJpZXZlbGluaz0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfaW5kaXZzJywgJHJldHVybmlkLCAnUsOpY3Vww6lyZXInLCBhcnJheSgidHlwZV9jb21wZXQiPT4kcm93Wyd0eXBlX2NvbXBldCddLCAiY29lZmZpY2llbnQiPT4kcm93Wydjb2VmZmljaWVudCddKSk7CgkJCSRvbmVyb3ctPmVkaXRsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRfY29tcGV0JywgJHJldHVybmlkLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLGFycmF5KCdyZWNvcmRfaWQnPT4kcm93WydpZCddKSk7CgkJCQoJCQlpZigkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIERlbGV0ZScpKQoJCQkJewoJCQkJCSRvbmVyb3ctPmRlbGV0ZWxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZScsICRyZXR1cm5pZCwgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCdyZWNvcmRfaWQnPT4kcm93WydpZCddLCAndHlwZV9jb21wZXQnPT4nY2FsZW5kcmllcicpLCAkdGhpcy0+TGFuZygnZGVsZXRlX2NvbmZpcm0nKSk7CgkJCQl9CgkJCQkKCQkJKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3M9ICJyb3cyIiA6ICRyb3djbGFzcz0gInJvdzEiKTsKCQkJJHJvd2FycmF5W109ICRvbmVyb3c7CiAgICAgIAkJfQogIAl9CiRzbWFydHktPmFzc2lnbignbWFpbnRlbmFudCcsJG1haW50ZW5hbnQpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zZm91bmQnLCAkdGhpcy0+TGFuZygncmVzdWx0c2ZvdW5kdGV4dCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRyb3dhcnJheSk7CiRzbWFydHktPmFzc2lnbignY3JlYXRlbGluaycsIAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZF9jb21wZXQnLCAkcmV0dXJuaWQsCgkJCQkgICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdhZGQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpKS4KCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRfY29tcGV0JywgJHJldHVybmlkLCAKCQkJCSAgJHRoaXMtPkxhbmcoJ2FkZCcpLCAKCQkJCSAgYXJyYXkoKSkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm0yc3RhcnQnLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdhZG1pbl9kYXRhX3RhYicsJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZm9ybTJlbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdF9tYXNzZGVsZXRlJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXRfbWFzc2RlbGV0ZScsJHRoaXMtPkxhbmcoJ2RlbGV0ZV9zZWxlY3RlZCcpLAoJCQkJCQkJCQkgICAgICcnLCcnLCR0aGlzLT5MYW5nKCdhcmV5b3VzdXJlX2RlbGV0ZW11bHRpcGxlJykpKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdjYWxlbmRhci50cGwnKTsKCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_compets_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKJGRiID0mICR0aGlzLT5HZXREYigpOwpnbG9iYWwgJHRoZW1lT2JqZWN0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKLy9jcsOpYXRpb25zIGRlIGxpZW5zIGRlIHLDqWN1cMOpcmF0aW9uIGRlcyBjb21ww6l0aXRpb25zCi8vb24gcsOpY3Vww6hyZSBkJ2Fib3JkIGxlcyBwcsOpZsOpcmVuY2VzIGRlIHpvbmVzLCBsaWd1ZXMgZXQgZMOpcGFydGVtZW50CiRmZWRlID0gJzEwMDAwMSc7CiR6b25lID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3pvbmUnKTsKJGxpZ3VlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2xpZ3VlJyk7CiRkZXAgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVwJyk7Cgokc21hcnR5LT5hc3NpZ24oJ2RpdmlzaW9ucycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlZmF1bHRhZG1pbjInLCRyZXR1cm5pZCwgJz0+IEFjY8OpZGV6IGF1eCBkaXZpc2lvbnMnKSk7CiRzbWFydHktPmFzc2lnbignem9uZV9pbmRpdnMnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9jb21wZXRzJywkcmV0dXJuaWQsJ1pvbmUgaW5kaXZzJywgYXJyYXkoImlkb3JnYSI9PiR6b25lLCJ0eXBlIj0+IkkiKSkpOwokc21hcnR5LT5hc3NpZ24oJ3pvbmVfZXF1aXBlcycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2NvbXBldHMnLCRyZXR1cm5pZCwnWm9uZSBFcXVpcGVzJywgYXJyYXkoImlkb3JnYSI9PiR6b25lLCJ0eXBlIj0+IkUiKSkpOwokc21hcnR5LT5hc3NpZ24oJ05hdF9pbmRpdnMnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9jb21wZXRzJywkcmV0dXJuaWQsJ05hdGlvbmFsIGluZGl2cycsIGFycmF5KCJpZG9yZ2EiPT4kZmVkZSwidHlwZSI9PiJJIikpKTsKJHNtYXJ0eS0+YXNzaWduKCdOYXRfZXF1aXBlcycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2NvbXBldHMnLCRyZXR1cm5pZCwnTmF0aW9uYWwgRXF1aXBlcycsIGFycmF5KCJpZG9yZ2EiPT4kZmVkZSwidHlwZSI9PiJFIikpKTsKJHNtYXJ0eS0+YXNzaWduKCdsaWd1ZV9pbmRpdnMnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9jb21wZXRzJywkcmV0dXJuaWQsJ0xpZ3VlIGluZGl2cycsIGFycmF5KCJpZG9yZ2EiPT4kbGlndWUsInR5cGUiPT4iSSIpKSk7CiRzbWFydHktPmFzc2lnbignbGlndWVfZXF1aXBlcycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2NvbXBldHMnLCRyZXR1cm5pZCwnTGlndWUgRXF1aXBlcycsIGFycmF5KCJpZG9yZ2EiPT4kbGlndWUsInR5cGUiPT4iRSIpKSk7CiRzbWFydHktPmFzc2lnbignZGVwX2luZGl2cycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2NvbXBldHMnLCRyZXR1cm5pZCwnRMOpcCBpbmRpdnMnLCBhcnJheSgiaWRvcmdhIj0+JGRlcCwidHlwZSI9PiJJIikpKTsKJHNtYXJ0eS0+YXNzaWduKCdkZXBfZXF1aXBlcycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2NvbXBldHMnLCRyZXR1cm5pZCwnRMOpcCBFcXVpcGVzJywgYXJyYXkoImlkb3JnYSI9PiRkZXAsInR5cGUiPT4iRSIpKSk7CiRyZXN1bHQ9IGFycmF5ICgpOwokcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMgT1JERVIgQlkgbmFtZSBBU0MiOwoKJGRicmVzdWx0PSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCgovL2VjaG8gJHF1ZXJ5Owokcm93YXJyYXk9IGFycmF5ICgpOwppZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApCiAgewogICAgd2hpbGUgKCRyb3c9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKICAgICAgewoJJGluZGl2cyA9ICRyb3dbJ2luZGl2cyddOwoJaWYoJGluZGl2cz09MSl7JHR5cGU9J0knO31lbHNleyR0eXBlPSdFJzt9CgkkaWRvcmdhID0gJHJvd1snaWRvcmdhJ107CglpZigkaWRvcmdhID09ICRmZWRlKXskb3JnYSA9ICdGw6lkw6lyYXRpb24nO30KCWlmKCRpZG9yZ2EgPT0gJHpvbmUpeyRvcmdhID0gJ1pvbmUnO30KCWlmKCRpZG9yZ2EgPT0gJGxpZ3VlKXskb3JnYSA9ICdMaWd1ZSc7fQoJaWYoJGlkb3JnYSA9PSAkZGVwKXskb3JnYSA9ICdDb21pdMOpJzt9Cgkkb25lcm93PSBuZXcgU3RkQ2xhc3MoKTsKCSRvbmVyb3ctPnJvd2NsYXNzPSAkcm93Y2xhc3M7Cgkkb25lcm93LT5pZD0gJHJvd1snaWQnXTsKCSRvbmVyb3ctPm5hbWU9ICRyb3dbJ25hbWUnXTsKCSRvbmVyb3ctPnRhZz0gJHJvd1sndGFnJ107Cgkkb25lcm93LT5jb2VmZmljaWVudD0gJHJvd1snY29lZmZpY2llbnQnXTsKCSRvbmVyb3ctPmluZGl2cz0gJHJvd1snaW5kaXZzJ107Cgkkb25lcm93LT5vcmdhID0gJGlkb3JnYTsKCSRvbmVyb3ctPmlkZXByZXV2ZSA9ICRyb3dbJ2lkZXByZXV2ZSddOwoJCgkKCWlmKCRyb3dbJ2luZGl2cyddID09JzEnKQoJewoJCSRvbmVyb3ctPm5hdGlvbmFsID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdyZXRyaWV2ZV9kaXZpc2lvbnMnLCRyZXR1cm5pZCwnTicsIGFycmF5KCJpZG9yZ2EiPT4kZmVkZSwgImlkZXByZXV2ZSI9PiRyb3dbJ2lkZXByZXV2ZSddLCJ0eXBlIj0+JHR5cGUpKTsKCQkkb25lcm93LT56b25lID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdyZXRyaWV2ZV9kaXZpc2lvbnMnLCRyZXR1cm5pZCwnWicsIGFycmF5KCJpZG9yZ2EiPT4kem9uZSwgImlkZXByZXV2ZSI9PiRyb3dbJ2lkZXByZXV2ZSddLCJ0eXBlIj0+JHR5cGUpKTsKCQkkb25lcm93LT5saWd1ZSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwncmV0cmlldmVfZGl2aXNpb25zJywkcmV0dXJuaWQsJ0wnLCBhcnJheSgiaWRvcmdhIj0+JGxpZ3VlLCAiaWRlcHJldXZlIj0+JHJvd1snaWRlcHJldXZlJ10sInR5cGUiPT4kdHlwZSkpOwoJCSRvbmVyb3ctPmRlcCA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwncmV0cmlldmVfZGl2aXNpb25zJywkcmV0dXJuaWQsJ0QnLCBhcnJheSgiaWRvcmdhIj0+JGRlcCwgImlkZXByZXV2ZSI9PiRyb3dbJ2lkZXByZXV2ZSddLCJ0eXBlIj0+JHR5cGUpKTsKCX0KCWVsc2UKCXsKCQkkb25lcm93LT5uYXRpb25hbCA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwncmV0cmlldmVfZGl2aXNpb25zJywkcmV0dXJuaWQsJ04nLCBhcnJheSgiaWRvcmdhIj0+JGZlZGUsICJpZGVwcmV1dmUiPT4kcm93WydpZGVwcmV1dmUnXSwidHlwZSI9PiR0eXBlKSk7Cgl9Cgkkb25lcm93LT5lZGl0bGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRfdHlwZV9jb21wZXQnLCRyZXR1cm5pZCwkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLGFycmF5KCJyZWNvcmRfaWQiPT4kcm93WydpZCddKSk7CgkKCWlmKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgRGVsZXRlJykpCgl7CgkJJG9uZXJvdy0+ZGVsZXRlbGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZScsICRyZXR1cm5pZCwkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAkdGhpcy0+TGFuZygnZGVsZXRlJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSxhcnJheSgicmVjb3JkX2lkIj0+JHJvd1snaWQnXSwgInR5cGVfY29tcGV0Ij0+InR5cGVfY29tcGV0IikpOwoJfQoJCgkoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcz0gInJvdzIiIDogJHJvd2NsYXNzPSAicm93MSIpOwoJJHJvd2FycmF5W109ICRvbmVyb3c7CiAgICAgIH0KICB9CmVsc2UgewoJZWNobyAiPHA+QXVjdW4gcsOpc3VsdGF0cyAhPC9wPiI7Cn0KJHNtYXJ0eS0+YXNzaWduKCdpdGVtc2ZvdW5kJywgJHRoaXMtPkxhbmcoJ3Jlc3VsdHNmb3VuZCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRyb3dhcnJheSk7CiRzbWFydHktPmFzc2lnbignY3JlYXRlbGluaycsIAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZF90eXBlX2NvbXBldCcsICRyZXR1cm5pZCwKCQkJCSAgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywgJHRoaXMtPkxhbmcoJ2FkZF9jb21wZXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpKS4KCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRfdHlwZV9jb21wZXQnLCAkcmV0dXJuaWQsIAoJCQkJICAkdGhpcy0+TGFuZygnYWRkX3R5cGVfY29tcGV0JyksIAoJCQkJICBhcnJheSgpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2xpc3RfY29tcGV0LnRwbCcpOwoKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_compte_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWlzc2V0KCRnQ21zKSApIGV4aXQ7Ci8vb24gw6l0YWJsaXQgbGVzIHBlcm1pc3Npb25zCmlmKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIFNldCBQcmVmcycpKQp7CgkkdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSk7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdqb3VldXJzJyk7Cn0KJGlkQXBwbGkgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaWRBcHBsaScpOwokbW90ZGVwYXNzZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtb3RkZXBhc3NlJyk7CiRzZXJpZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZXJpZScpOwovLyRzZXJpYWwgPSAhZW1wdHkoJHNlcmllKT8kc2VyaWU6IiI7CiRzbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ3VwZGF0ZWNvbXB0ZScsICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCdpZEFwcGxpJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdpZEFwcGxpJywgCihpc3NldCgkaWRBcHBsaSk/JGlkQXBwbGk6JycpICwgMTUsMjUpKTsKJHNtYXJ0eS0+YXNzaWduKCdtb3RkZXBhc3NlJywgJHRoaXMtPkNyZWF0ZUlucHV0UGFzc3dvcmQoJGlkLCdtb3RkZXBhc3NlJywoaXNzZXQoJG1vdGRlcGFzc2UpPyRtb3RkZXBhc3NlOicnKSwgMTUsMjUpKTsKJHNtYXJ0eS0+YXNzaWduKCdzZXJpYWwnLCAoaXNzZXQoJHNlcmllKT8kc2VyaWU6JycpKTsKLy8kc21hcnR5LT5hc3NpZ24oJ3RtJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0bScsJHZhbHVlID0gZGF0ZSgnWW1kSGlzdScpLDI1LDE1MCkpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnY29tcHRlc3VibWl0YnV0dG9uJywgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2NvbXB0ZS50cGwnKTsKIwojRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_divisions_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICAgICAgICAgICAgICAgRElWSVNJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjICAgQWZmaWNoYWdlIGRlcyBkaXZpc2lvbnMgZGVzIMOpcHJldXZlcyAgICAgICAgICAgICAgICAgICMjCiMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKZ2xvYmFsICR0aGVtZU9iamVjdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CnJlcXVpcmVfb25jZShkaXJuYW1lKF9fZmlsZV9fKS4nL2luY2x1ZGUvdHJhdmF1eC5waHAnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19maWxlX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKJHNhaXNvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKLyogb24gZmFpdCB1biBmb3JtdWxhaXJlIGRlIGZpbHRyYWdlIGRlcyByw6lzdWx0YXRzKi8KJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdkZWZhdWx0YWRtaW4yJywnJywgJ3Bvc3QnLCAnJyxmYWxzZSwnJyxhcnJheSgnYWN0aXZlX3RhYic9PidkaXZpc2lvbnMnKSkpOwokZGF0ZWxpc3RbJHRoaXMtPkxhbmcoJ2FsbGRhdGVzJyldID0gJyc7CQovLyRpZG9yZ2FsaXN0WyR0aGlzLT5MYW5nKCdhbGxwbGF5ZXJzJyldID0gJ1RvdXRlcyc7CiR0eXBlQ29tcGV0ID0gYXJyYXkoKTsKJHR5cGVDb21wZXRbJHRoaXMtPkxhbmcoJ2FsbGNvbXBldCcpXSA9ICcnOwokcXVlcnkxID0gIlNFTEVDVCB0Yy5pZGVwcmV1dmUsdGMuaWRvcmdhLCB0Yy5uYW1lIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIEFTIHRjLCAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZGl2X3RvdXJzIEFTIGR0IFdIRVJFIHRjLmlkZXByZXV2ZSA9IGR0LmlkZXByZXV2ZSBPUkRFUiBCWSB0Yy5uYW1lIEFTQyAiOy8vIiAsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIEFTIGogV0hFUkUgcHRzLmxpY2VuY2UgID0gai5saWNlbmNlIEFORCBwdHMuc2Fpc29uID0gPyBPUkRFUiBCWSBqLm5vbSBBU0MsIHB0cy5kYXRlX2V2ZW50IEFTQyI7Ly8iIjsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTEpOwp3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCiAgewogICAgLy8kZGF0ZWxpc3RbJHJvd1snZGF0ZV9ldmVudCddXSA9ICRyb3dbJ2RhdGVfZXZlbnQnXTsKICAgIC8vJHBsYXllcnNsaXN0WyRyb3dbJ3BsYXllciddXSA9ICRyb3dbJ2xpY2VuY2UnXTsKICAgIC8vJGlkb3JnYWxpc3QgPSAgYXJyYXkoIkF1Y3VuIj0+IkF1Y3VuIiwiTmF0aW9uYWwiPT4iRiIsIlpvbmUiPT4iWiIsICJSw6lnaW9uYWwiPT4iTCIsIkTDqXBhcnRlbWVudGFsIj0+IkQiKTsvLyRpZG9yZ2FsaXN0WyRyb3dbJ2lkb3JnYSddXSA9ICRyb3dbJ25hbWUnXTsKICAgICR0eXBlQ29tcGV0WyRyb3dbJ25hbWUnXV0gPSAkcm93WydpZGVwcmV1dmUnXTsKICB9CgoJaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdGZpbHRlciddKSApCiAgCXsKICAgIAkJLyoKaWYoIGlzc2V0KCAkcGFyYW1zWydkYXRlbGlzdCddKSApCiAgICAgIAkJewoJCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGF0ZUNob2lzaScsICRwYXJhbXNbJ2RhdGVsaXN0J10pOwogICAgICAJCX0KCgkJaWYoIGlzc2V0KCAkcGFyYW1zWydpZG9yZ2FsaXN0J10pICYmICRwYXJhbXNbJ2lkb3JnYWxpc3QnXSAhPSAiQXVjdW4iKQogICAgICAJCXsKCQkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2lkb3JnYUNob2lzaScsICRwYXJhbXNbJ2lkb3JnYWxpc3QnXSk7CiAgICAgIAkJfQoqLwogICAgCQlpZiggaXNzZXQoICRwYXJhbXNbJ3R5cGVDb21wZXQnXSkgKQoJCXsgCgkJCSRjdXJDb21wZXQgPSAkcGFyYW1zWyd0eXBlQ29tcGV0J107CgkJfQoJfQoJCi8vJGN1cmRhdGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSggJ2RhdGVDaG9pc2knICk7Ci8vJGN1cnBsYXllciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCAnaWRvcmdhQ2hvaXNpJyk7Ci8vJGN1ckNvbXBldCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCAnY29tcGV0Q2hvaXNpZScpOwokc21hcnR5LT5hc3NpZ24oJ3Byb21wdF90b3VyJywKCQkkdGhpcy0+TGFuZygndG91cicpKTsKLyoKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9kYXRlJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ2RhdGVsaXN0JywkZGF0ZWxpc3QsLTEsJGN1cmRhdGUpKTsKKi8KJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jb21wZXQnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwndHlwZUNvbXBldCcsJHR5cGVDb21wZXQsLTEsKGlzc2V0KCRjdXJDb21wZXQpPyRjdXJDb21wZXQ6IiIpKSk7Ci8qCiRzbWFydHktPmFzc2lnbignaW5wdXRfcGxheWVyJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ2lkb3JnYWxpc3QnLCRpZG9yZ2FsaXN0LC0xLCRjdXJwbGF5ZXIpKTsKKi8JCQokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdGZpbHRlcicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0ZmlsdGVyJywkdGhpcy0+TGFuZygnZmlsdHJlcycpKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7Ci8vb24gZmFpdCBtYWludGVuYW50IGxhIHJlcXVldGUgcHJpbmNpcGFsZS4uLgokcmVzdWx0PSBhcnJheSAoKTsKJHF1ZXJ5ID0gIlNFTEVDVCBkdi5pZCx0Yy5uYW1lLHRjLmluZGl2cywgdGMuaWRvcmdhLCB0Yy5pZGVwcmV1dmUsIGR2LmxpYmVsbGUsIGR2LmlkZGl2aXNpb24sZHYuc2NvcGUsIGR2LnVwbG9hZGVkIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIEFTIHRjICwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2RpdmlzaW9ucyBBUyBkdiBXSEVSRSAgdGMuaWRlcHJldXZlID0gZHYuaWRlcHJldXZlIEFORCBkdi5zYWlzb24gPSA/ICI7CiRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uOwoKCWlmKCBpc3NldCgkcGFyYW1zWydzdWJtaXRmaWx0ZXInXSApKXsKCQkKCS8qCgkJaWYgKCRjdXJkYXRlICE9JycpCgkJewoJCQkkcXVlcnkgLj0iIEFORCBwdHMuZGF0ZV9ldmVudCA9ID8gIjsKCQkJJHBhcm1zWydkYXRlX2V2ZW50J10gPSAkY3VyZGF0ZTsKCQkKCQl9CgkJCgkJaWYgKCRjdXJwbGF5ZXIgIT0nJyB8fCAkY3VycGxheWVyICE9ICJBdWN1biIpCgkJewoJCQkkcXVlcnkgLj0iIEFORCBkdi5zY29wZSA9ID8iOwoJCQkkcGFybXNbJ2lkb3JnYSddID0gJGN1cnBsYXllcjsKCQkKCQl9CgkqLwkKCQlpZiAoJGN1ckNvbXBldCAhPScnKQoJCXsKCQkJJHF1ZXJ5Lj0iIEFORCB0Yy5pZGVwcmV1dmUgPSA/IjsKCQkJJHBhcm1zWydpZGVwcmV1dmUnXSA9ICRjdXJDb21wZXQ7CgkJfQoKCQkkcXVlcnkuPSIgT1JERVIgQlkgdGMuaWRlcHJldXZlIEFTQywgZHYubGliZWxsZSBBU0MiOwoJfQoJZWxzZQoJewoJCSRxdWVyeS49IiBPUkRFUiBCWSB0Yy5pZGVwcmV1dmUsIHRjLmlkb3JnYSBBU0MiOwoJCQoJfQoJCgokZGJyZXN1bHQ9ICRkYi0+RXhlY3V0ZSgkcXVlcnksJHBhcm1zKTsKLy9lY2hvICRxdWVyeTsKaWYgKCEkZGJyZXN1bHQpCnsKCgkJZGllKCdGQVRBTCBTUUwgRVJST1I6ICcuJGRiLT5FcnJvck1zZygpLic8YnIvPlFVRVJZMjogJy4kZGItPnNxbCk7Cgp9Cgokcm93YXJyYXk9IGFycmF5ICgpOwokcm93Y2xhc3MgPSAnJzsKaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwKQogIHsKICAgIHdoaWxlICgkcm93PSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCiAgICAgIHsKCSRzY29wZSA9ICRyb3dbJ3Njb3BlJ107CglpZigkc2NvcGU9PSdGJyl7JG5pdmVhdSA9J05hdGlvbmFsJzt9CglpZigkc2NvcGU9PSdaJyl7JG5pdmVhdSA9J1pvbmUnO30KCWlmKCRzY29wZT09J0wnKXskbml2ZWF1ID0nUsOpZ2lvbmFsJzt9CglpZigkc2NvcGU9PSdEJyl7JG5pdmVhdSA9J0TDqXBhcnRlbWVudGFsJzt9CgkkaW5kaXZzID0gJHJvd1snaW5kaXZzJ107CgkkdXBsb2FkZWQgPSAkcm93Wyd1cGxvYWRlZCddOwoJJG9uZXJvdz0gbmV3IFN0ZENsYXNzKCk7Cgkkb25lcm93LT5yb3djbGFzcz0gJHJvd2NsYXNzOwoJJG9uZXJvdy0+aWQ9ICRyb3dbJ2lkJ107Cgkkb25lcm93LT5pZG9yZ2EgPSAkcm93WydpZG9yZ2EnXTsKCSRvbmVyb3ctPmlkZXByZXV2ZT0gJHJvd1snaWRlcHJldXZlJ107Cgkkb25lcm93LT5pZGRpdmlzaW9uPSAkcm93WydpZGRpdmlzaW9uJ107Cgkkb25lcm93LT5uYW1lPSAkcm93WyduYW1lJ107Cgkkb25lcm93LT5saWJlbGxlPSAkcm93WydsaWJlbGxlJ107Cgkkb25lcm93LT5pbmRpdnMgPSAkcm93WydpbmRpdnMnXTsKCSRvbmVyb3ctPnNjb3BlID0gJG5pdmVhdTsKCS8vJG9uZXJvdy0+dXBsb2FkZWQgPSAkcm93Wyd1cGxvYWRlZCddOwoJaWYoJHVwbG9hZGVkID09MSkKCXsKCQkkb25lcm93LT51cGxvYWRlZD0gJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS90cnVlLmdpZicsICR0aGlzLT5MYW5nKCdhbHJlYWR5X2Rvd25sb2FkZWQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpOwoJfQoJCgkKCWlmKCRpbmRpdnMgPT0xKQoJewoJCSRvbmVyb3ctPnBvdWxlPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9kaXZfcmVzdWx0cycsICRyZXR1cm5pZCwgJ1RvdXJzJyxhcnJheSgiZGlyZWN0aW9uIj0+InRvdXIiLCJpZGVwcmV1dmUiPT4kcm93WydpZGVwcmV1dmUnXSwgImlkZGl2aXNpb24iPT4kcm93WydpZGRpdmlzaW9uJ10sImluZGl2cyI9PiRyb3dbJ2luZGl2cyddKSk7Cgl9CgllbHNlCgl7CgkJJG9uZXJvdy0+cG91bGU9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2Rpdl9yZXN1bHRzJywgJHJldHVybmlkLCAnUG91bGVzJyxhcnJheSgiZGlyZWN0aW9uIj0+InRvdXIiLCJpZGVwcmV1dmUiPT4kcm93WydpZGVwcmV1dmUnXSwgImlkZGl2aXNpb24iPT4kcm93WydpZGRpdmlzaW9uJ10sImluZGl2cyI9PiRyb3dbJ2luZGl2cyddKSk7Cgl9CgkvLyRvbmVyb3ctPmNsYXNzZW1lbnQ9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2Rpdl9yZXN1bHRzJywgJHJldHVybmlkLCAnQ2xhc3NlbWVudCcsYXJyYXkoImRpcmVjdGlvbiI9PiJjbGFzc2VtZW50IiwiaWRlcHJldXZlIj0+JHJvd1snaWRlcHJldXZlJ10sICJpZGRpdmlzaW9uIj0+JHJvd1snaWRkaXZpc2lvbiddKSk7CgkvLyRvbmVyb3ctPmVxdWlwZT0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnY3JlYXRlX25ld191c2VyJywgJHJldHVybmlkLCAkcm93WydlcXVpcGUnXSwgJHJvdyk7Cgkkb25lcm93LT5lZGl0bGluaz0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdF9yZXN1bHRzJywgJHJldHVybmlkLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgncmVjb3JkX2lkJz0+JHJvd1snaWQnXSkpOwoJLy8kb25lcm93LT5kdXBsaWNhdGVsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0X3Jlc3VsdHMnLCAkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vY29weS5naWYnLCAkdGhpcy0+TGFuZygnZHVwbGljYXRlJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3JlY29yZF9pZCc9PiRyb3dbJ2lkJ10sICdkdXBsaWNhdGUnPT4nMScpKTsKCQoJaWYoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBEZWxldGUnKSkKCXsKCQkkb25lcm93LT5kZWxldGVsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGUnLCAkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGVfYWxsX2RpdicpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCdyZWNvcmRfaWQnPT4kcm93WydpZCddLCd0eXBlX2NvbXBldCc9PidkaXZpc2lvbicpLCAkdGhpcy0+TGFuZygnZGVsZXRlX2FsbF9kaXYnKSk7Cgl9CgkoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcz0gInJvdzIiIDogJHJvd2NsYXNzPSAicm93MSIpOwoJJHJvd2FycmF5W109ICRvbmVyb3c7CiAgICAgIH0KICB9Ci8vZGV1eGnDqG1tZSByZXF1ZXRlIHBvdXIgY29tcHRlciBsZXMgcG9pbnRzIGRlIGNldHRlIGpvdXJuw6llCiRzbWFydHktPmFzc2lnbignaXRlbXNmb3VuZCcsICR0aGlzLT5MYW5nKCdzaGVldHNmb3VuZHRleHQnKSk7CiRzbWFydHktPmFzc2lnbignaXRlbWNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiRzbWFydHktPmFzc2lnbignaXRlbXMnLCAkcm93YXJyYXkpOwoKJHNtYXJ0eS0+YXNzaWduKCdmb3JtMnN0YXJ0JywKCQkkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnbWFzc19hY3Rpb24nLCRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm0yZW5kJywKCQkkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJGFydGljbGVzID0gYXJyYXkoIlN1cHByaW1lciI9PiJzdXBwX2RpdiIsIkRhdGVyIj0+ImRhdGVyIik7CiRzbWFydHktPmFzc2lnbignYWN0aW9uZGVtYXNzZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCdhY3Rpb25kZW1hc3NlJywkYXJ0aWNsZXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXRfbWFzc2FjdGlvbicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0X21hc3NhY3Rpb24nLCR0aGlzLT5MYW5nKCdhcHBseV90b19zZWxlY3Rpb24nKSwnJywnJywkdGhpcy0+TGFuZygnYXJleW91c3VyZV9hY3Rpb25tdWx0aXBsZScpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2RpdmlzaW9ucy50cGwnKTsKCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_fftt_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICAgICAgICAgICAgICAgIEZGVFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwokZGIgPSYgJHRoaXMtPkdldERiKCk7Cmdsb2JhbCAkdGhlbWVPYmplY3Q7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwpyZXF1aXJlX29uY2UoZGlybmFtZShfX2ZpbGVfXykuJy9pbmNsdWRlL3RyYXZhdXgucGhwJyk7CnJlcXVpcmVfb25jZShkaXJuYW1lKF9fZmlsZV9fKS4nL2luY2x1ZGUvcHJlZnMucGhwJyk7CiRzYWlzb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7Ci8qIG9uIGZhaXQgdW4gZm9ybXVsYWlyZSBkZSBmaWx0cmFnZSBkZXMgcsOpc3VsdGF0cyovCiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnZGVmYXVsdGFkbWluJywnJywgJ3Bvc3QnLCAnJyxmYWxzZSwnJyxhcnJheSgnYWN0aXZlX3RhYic9PidmZnR0JykpKTsKJGRhdGVsaXN0WyR0aGlzLT5MYW5nKCdhbGxkYXRlcycpXSA9ICcnOwkKJHBsYXllcnNsaXN0WyR0aGlzLT5MYW5nKCdhbGxwbGF5ZXJzJyldID0gJyc7CiR0eXBlQ29tcGV0ID0gYXJyYXkoKTsKJHR5cGVDb21wZXRbJHRoaXMtPkxhbmcoJ2FsbGNvbXBldCcpXSA9ICcnOwokcXVlcnkxID0gIlNFTEVDVCBwdHMuZGF0ZV9ldmVudCxwdHMuY29kZWNoYW1wLHB0cy5saWNlbmNlICwgQ09OQ0FUX1dTKCcgJyxqLm5vbSwgai5wcmVub20pIEFTIHBsYXllciBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzIEFTIHB0cyAgLCAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBBUyBqIFdIRVJFIHB0cy5saWNlbmNlICA9IGoubGljZW5jZSBBTkQgcHRzLnNhaXNvbiA9ID8gT1JERVIgQlkgai5ub20gQVNDLCBwdHMuZGF0ZV9ldmVudCBBU0MiOy8vIiI7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkxLCBhcnJheSgkc2Fpc29uKSk7CndoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKICB7CiAgICAkZGF0ZWxpc3RbJHJvd1snZGF0ZV9ldmVudCddXSA9ICRyb3dbJ2RhdGVfZXZlbnQnXTsKICAgICRwbGF5ZXJzbGlzdFskcm93WydwbGF5ZXInXV0gPSAkcm93WydsaWNlbmNlJ107CiAgICAkdHlwZUNvbXBldFskcm93Wydjb2RlY2hhbXAnXV0gPSAkcm93Wydjb2RlY2hhbXAnXTsKICB9CgoJaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdGZpbHRlciddKSApCiAgCXsKICAgIAkJaWYoIGlzc2V0KCAkcGFyYW1zWydkYXRlbGlzdCddKSApCiAgICAgIAkJewoJCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGF0ZUNob2lzaScsICRwYXJhbXNbJ2RhdGVsaXN0J10pOwogICAgICAJCX0KCQlpZiggaXNzZXQoICRwYXJhbXNbJ3BsYXllcnNsaXN0J10pICkKICAgICAgCQl7CgkJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwbGF5ZXJDaG9pc2knLCAkcGFyYW1zWydwbGF5ZXJzbGlzdCddKTsKICAgICAgCQl9CiAgICAJCWlmKCBpc3NldCggJHBhcmFtc1sndHlwZUNvbXBldCddKSApCgkJeyAKCQkJJHRoaXMtPlNldFByZWZlcmVuY2UgKCAnY29tcGV0Q2hvaXNpZScsICRwYXJhbXNbJ3R5cGVDb21wZXQnXSk7CgkJfQoJfQoJCiRjdXJkYXRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoICdkYXRlQ2hvaXNpJyApOwokY3VycGxheWVyID0gJHRoaXMtPkdldFByZWZlcmVuY2UoICdwbGF5ZXJDaG9pc2knKTsKJGN1ckNvbXBldCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCAnY29tcGV0Q2hvaXNpZScpOwokc21hcnR5LT5hc3NpZ24oJ3Byb21wdF90b3VyJywKCQkkdGhpcy0+TGFuZygndG91cicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9kYXRlJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ2RhdGVsaXN0JywkZGF0ZWxpc3QsLTEsJGN1cmRhdGUpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jb21wZXQnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwndHlwZUNvbXBldCcsJHR5cGVDb21wZXQsLTEsJGN1ckNvbXBldCkpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3BsYXllcicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCdwbGF5ZXJzbGlzdCcsJHBsYXllcnNsaXN0LC0xLCRjdXJwbGF5ZXIpKTsKCQkKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXRmaWx0ZXInLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3N1Ym1pdGZpbHRlcicsJHRoaXMtPkxhbmcoJ2ZpbHRyZXMnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKJHJlc3VsdD0gYXJyYXkgKCk7CiRxdWVyeSA9ICJTRUxFQ1QgQ09OQ0FUX1dTKCcgJywgai5ub20sIGoucHJlbm9tKSBBUyBqb3VldXIsIHB0cy5pZCwgcHRzLnZkLCBwdHMubnVtam91cm4scHRzLmRhdGVfZXZlbnQsIHB0cy5hZHZub21wcmUscHRzLnBvaW50cmVzLCBwdHMuYWR2Y2xhb2YgIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXMgQVMgcHRzICwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgQVMgaiBXSEVSRSBwdHMubGljZW5jZSA9IGoubGljZW5jZSBBTkQgcHRzLnNhaXNvbiA9ID8iOwokcGFybXNbJ3NhaXNvbiddID0gJHNhaXNvbjsKCglpZiggaXNzZXQoJHBhcmFtc1snc3VibWl0ZmlsdGVyJ10gKSl7CgkJCgkJaWYgKCRjdXJkYXRlICE9JycpCgkJewoJCQkkcXVlcnkgLj0iIEFORCBwdHMuZGF0ZV9ldmVudCA9ID8gIjsKCQkJJHBhcm1zWydkYXRlX2V2ZW50J10gPSAkY3VyZGF0ZTsKCQkKCQl9CgkJCgkJaWYgKCRjdXJwbGF5ZXIgIT0nJykKCQl7CgkJCSRxdWVyeSAuPSIgQU5EIHB0cy5saWNlbmNlID0gPyI7CgkJCSRwYXJtc1snbGljZW5jZSddID0gJGN1cnBsYXllcjsKCQkKCQl9CgkJCgkJaWYgKCRjdXJDb21wZXQgIT0nJykKCQl7CgkJCSRxdWVyeS49IiBBTkQgcHRzLmNvZGVjaGFtcCA9ID8iOwoJCQkkcGFybXNbJ2NvZGVjaGFtcCddID0gJGN1ckNvbXBldDsKCQl9CgoJCSRxdWVyeS49IiBPUkRFUiBCWSBqb3VldXIscHRzLmRhdGVfZXZlbnQgQVNDIjsKCX0KCWVsc2UKCXsKCQkkcXVlcnkuPSIgT1JERVIgQlkgam91ZXVyLHB0cy5kYXRlX2V2ZW50IEFTQyBMSU1JVCAxMDAiOwoJCQoJfQoJCgokZGJyZXN1bHQ9ICRkYi0+RXhlY3V0ZSgkcXVlcnksJHBhcm1zKTsKLy9lY2hvICRxdWVyeTsKaWYgKCEkZGJyZXN1bHQpCnsKCgkJZGllKCdGQVRBTCBTUUwgRVJST1I6ICcuJGRiLT5FcnJvck1zZygpLic8YnIvPlFVRVJZMjogJy4kZGItPnNxbCk7Cgp9Cgokcm93YXJyYXk9IGFycmF5ICgpOwppZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApCiAgewogICAgd2hpbGUgKCRyb3c9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKICAgICAgewoJJG9uZXJvdz0gbmV3IFN0ZENsYXNzKCk7Cgkkb25lcm93LT5yb3djbGFzcz0gJHJvd2NsYXNzOwoJJG9uZXJvdy0+aWQ9ICRyb3dbJ2lkJ107Cgkkb25lcm93LT5kYXRlX2V2ZW50ID0gJHJvd1snZGF0ZV9ldmVudCddOwoJJG9uZXJvdy0+bnVtam91cm49ICRyb3dbJ251bWpvdXJuJ107Cgkkb25lcm93LT5qb3VldXI9ICRyb3dbJ2pvdWV1ciddOwoJJG9uZXJvdy0+dmQ9ICRyb3dbJ3ZkJ107IAovLwkkb25lcm93LT5saWNlbmNlID0gJHJvd1snbGljZW5jZSddOwoJJG9uZXJvdy0+YWR2bm9tcHJlPSAkcm93WydhZHZub21wcmUnXTsKLy8JJG9uZXJvdy0+YWR2ZXJzYWlyZT0gJHJvd1snYWR2ZXJzYWlyZSddOwoJJG9uZXJvdy0+cG9pbnRyZXM9ICRyb3dbJ3BvaW50cmVzJ107CgkvLyRvbmVyb3ctPmVxdWlwZT0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnY3JlYXRlX25ld191c2VyJywgJHJldHVybmlkLCAkcm93WydlcXVpcGUnXSwgJHJvdyk7Cgkkb25lcm93LT5lZGl0bGluaz0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdF9yZXN1bHRzJywgJHJldHVybmlkLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgncmVjb3JkX2lkJz0+JHJvd1snaWQnXSkpOwoJCgkKCWlmKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgRGVsZXRlJykpCgl7CgkJJG9uZXJvdy0+ZGVsZXRlbGluaz0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVsZXRlJywgJHJldHVybmlkLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAkdGhpcy0+TGFuZygnZGVsZXRlJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3JlY29yZF9pZCc9PiRyb3dbJ2lkJ10sJ3R5cGVfY29tcGV0Jz0+J2ZmdHQnKSwgJHRoaXMtPkxhbmcoJ2RlbGV0ZV9jb25maXJtJykpOwoJfQoJKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3M9ICJyb3cyIiA6ICRyb3djbGFzcz0gInJvdzEiKTsKCSRyb3dhcnJheVtdPSAkb25lcm93OwogICAgICB9CiAgfQovL2RldXhpw6htbWUgcmVxdWV0ZSBwb3VyIGNvbXB0ZXIgbGVzIHBvaW50cyBkZSBjZXR0ZSBqb3VybsOpZQokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zZm91bmQnLCAkdGhpcy0+TGFuZygnc2hlZXRzZm91bmR0ZXh0JykpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRyb3dhcnJheSkpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKCiRzbWFydHktPmFzc2lnbignZm9ybTJzdGFydCcsCgkJJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ21hc3NfYWN0aW9uJywkcmV0dXJuaWQpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtMmVuZCcsCgkJJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRhcnRpY2xlcyA9IGFycmF5KCJTdXBwcmltZXIiPT4ic3VwcF9mZnR0Iik7CiRzbWFydHktPmFzc2lnbignYWN0aW9uZGVtYXNzZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCdhY3Rpb25kZW1hc3NlJywkYXJ0aWNsZXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXRfbWFzc2FjdGlvbicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0X21hc3NhY3Rpb24nLCR0aGlzLT5MYW5nKCdhcHBseV90b19zZWxlY3Rpb24nKSwnJywnJywkdGhpcy0+TGFuZygnYXJleW91c3VyZV9hY3Rpb25tdWx0aXBsZScpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2ZmdHQudHBsJyk7CgoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.admin_joueurs_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CmlmKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIFVzZScpKQp7CgkkdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSk7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdqb3VldXJzJyk7Cn0KcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19maWxlX18pLicvaW5jbHVkZS90cmF2YXV4LnBocCcpOwpyZXF1aXJlX29uY2UoZGlybmFtZShfX2ZpbGVfXykuJy9pbmNsdWRlL3ByZWZzLnBocCcpOwokZGIgPSYgJHRoaXMtPkdldERiKCk7Cmdsb2JhbCAkdGhlbWVPYmplY3Q7CiRzbWFydHktPmFzc2lnbignc2Fpc29uX2VuX2NvdXJzJywgJHNhaXNvbl9lbl9jb3Vycyk7CiRzbWFydHktPmFzc2lnbignaWQnLCAkdGhpcy0+TGFuZygnaWQnKSk7CiRzbWFydHktPmFzc2lnbigndXNlcm5hbWUnLCAnSm91ZXVyJyk7CiRzbWFydHktPmFzc2lnbigncG9pbnRzJywgJ1BvaW50cycpOwokc2Fpc29uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwokc21hcnR5LT5hc3NpZ24oJ3NhaXNvbicsJHNhaXNvbik7CiRtb2lzX2NvdXJhbnQgPSBkYXRlKCduJyk7CiRhbm5lZV9jb3VyYW50ZSA9IGRhdGUoJ1knKTsKLy8kbW9udGggPSBtb2lzX2ZyYW5jYWlzKCIkbW9pc19jb3VyYW50Iik7Ci8vZWNobyAibGUgbW9pcyBlbiBmcmFuw6dhaXMgOiAiLiRtb250aDsKLy8kc21hcnR5LT5hc3NpZ24oJ21vaXMtZW4tZnJhbmNhaXMnLCAiJG1vbnRoIik7CiRzaXRfY291cmFudGUgPSAnSnVpbiAyMDE0JzsKJHNtYXJ0eS0+YXNzaWduKCdzaXRfY291cmFudGUnLCAiJHNpdF9jb3VyYW50ZSIpOwokc21hcnR5LT5hc3NpZ24oJ2Rpc3BsYXlfdW5hYmxlX3BsYXllcnMnLCAKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2Rpc3BsYXlfdW5hYmxlX3BsYXllcnMnLCAkcmV0dXJuaWQsICdsaXN0ZSBkZXMgam91ZXVycyBpbmFjdGlmcycpKTsKCgokcmVzdWx0PSBhcnJheSAoKTsKLy9TRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIEFTIGogT04gai5saWNlbmNlID0gcmVjLmxpY2VuY2UgIE9SREVSIEJZIGouaWQgQVNDCiRxdWVyeT0gIlNFTEVDVCBpZCwgQ09OQ0FUX1dTKCcgJyxub20sIHByZW5vbSkgQVMgam91ZXVyLCBsaWNlbmNlLCBhY3RpZiwgc2V4ZSwgYmlydGhkYXkgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyAgT1JERVIgQlkgam91ZXVyIEFTQyI7CmlmKCR0cmF2YXV4PT0ndHJ1ZScpe2VjaG8gJHF1ZXJ5O30KJGRicmVzdWx0PSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKJHJvd2NsYXNzPSAncm93MSc7CiRyb3dhcnJheT0gYXJyYXkgKCk7CgppZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApCiAgewogICAgd2hpbGUgKCRyb3c9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKICAgICAgewoJJGFjdGlmID0gJHJvd1snYWN0aWYnXTsKCSRvbmVyb3c9IG5ldyBTdGRDbGFzcygpOwoJJG9uZXJvdy0+cm93Y2xhc3M9ICRyb3djbGFzczsKCSRvbmVyb3ctPmlkPSAkcm93WydpZCddOwoJJG9uZXJvdy0+bGljZW5jZT0gJHJvd1snbGljZW5jZSddOwoJJG9uZXJvdy0+am91ZXVyPSAkcm93Wydqb3VldXInXTsKCSRvbmVyb3ctPmFjdGlmPSAkcm93WydhY3RpZiddOwoJJG9uZXJvdy0+c2V4ZT0gJHJvd1snc2V4ZSddOwoJJG9uZXJvdy0+YmlydGhkYXk9ICRyb3dbJ2JpcnRoZGF5J107Cgkkb25lcm93LT52aWV3X2NvbnRhY3RzPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ3ZpZXdfY29udGFjdHMnLCAkcmV0dXJuaWQsJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3RvcGZpbGVzL215YWNjb3VudC5naWYnLCAkdGhpcy0+TGFuZygndmlld19jb250YWN0cycpLCAnJywgJycsICdzeXN0ZW1pY29uJyksYXJyYXkoJ2xpY2VuY2UnPT4kcm93WydsaWNlbmNlJ10pKTsKCSRvbmVyb3ctPmRvZWRpdD0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkX2pvdWV1cicsICRyZXR1cm5pZCwgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsICR0aGlzLT5MYW5nKCdlZGl0JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSxhcnJheSgnbGljZW5jZSc9PiRyb3dbJ2xpY2VuY2UnXSkpOwoJaWYoJHJvd1snYWN0aWYnXSA9PScxJyl7CgkJJG9uZXJvdy0+ZWRpdGxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3VuYWJsZV9wbGF5ZXInLCAkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnLCAkdGhpcy0+TGFuZygndW5hYmxlJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSxhcnJheSgnbGljZW5jZSc9PiRyb3dbJ2xpY2VuY2UnXSkpOwoJfQoJZWxzZSB7CgkJJG9uZXJvdy0+ZWRpdGxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VuYWJsZV9wbGF5ZXInLCAkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZmFsc2UuZ2lmJywgJHRoaXMtPkxhbmcoJ2VuYWJsZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksYXJyYXkoJ2xpY2VuY2UnPT4kcm93WydsaWNlbmNlJ10pKTsKCX0KCS8vJG9uZXJvdy0+ZWRpdGxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3VuYWJsZV9wbGF5ZXInLCAkcmV0dXJuaWQsICdEw6lzYWN0aXZlcicsYXJyYXkoJ2xpY2VuY2UnPT4kcm93WydsaWNlbmNlJ10pKTsKCSRvbmVyb3ctPnNpdG1lbnNsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9zaXRfbWVucycsICRyZXR1cm5pZCwgJ1NpdHVhdGlvbiBtZW5zdWVsbGUnLCBhcnJheSgnbGljZW5jZSc9PiRyb3dbJ2xpY2VuY2UnXSkpOwoJJG9uZXJvdy0+Z2V0cGFydGllc2xpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX3BhcnRpZXMnLCAkcmV0dXJuaWQsICdQYXJ0aWVzIGRpc3B1dMOpZXMnLCBhcnJheSgnbGljZW5jZSc9PiRyb3dbJ2xpY2VuY2UnXSkpOwoJJG9uZXJvdy0+Z2V0cGFydGllc3NwaWQ9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX3BhcnRpZXNfc3BpZCcsICRyZXR1cm5pZCwgJ1BhcnRpZXMgU1BJRCcsIGFycmF5KCdsaWNlbmNlJz0+JHJvd1snbGljZW5jZSddKSk7Cgkkb25lcm93LT5kZWxldGVsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGVfam91ZXVyJywgJHJldHVybmlkLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAkdGhpcy0+TGFuZygnZGVsZXRlJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3JlY29yZF9pZCc9PiRyb3dbJ2lkJ10pLCAkdGhpcy0+TGFuZygnZGVsZXRlX3Jlc3VsdF9jb25maXJtJykpOwoJKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3M9ICJyb3cyIiA6ICRyb3djbGFzcz0gInJvdzEiKTsKCSRyb3dhcnJheVtdPSAkb25lcm93OwogICAgICB9CiAgfQokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zZm91bmQnLCAkdGhpcy0+TGFuZygncmVzdWx0c2ZvdW5kdGV4dCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRyb3dhcnJheSk7CiRzbWFydHktPmFzc2lnbigncmV0cmlldmVfdXNlcnMnLCAKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV91c2VycycsICRyZXR1cm5pZCwkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ltcG9ydC5naWYnLCAkdGhpcy0+TGFuZygncmV0cmlldmVfdXNlcnMnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpKS4KJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfdXNlcnMnLCAkcmV0dXJuaWQsIAoJCSAgJHRoaXMtPkxhbmcoJ3JldHJpZXZlX3VzZXJzJyksIAoJCSAgYXJyYXkoKSkpOwokc21hcnR5LT5hc3NpZ24oJ2NyZWF0ZWxpbmsnLCAKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRfam91ZXVyJywgJHJldHVybmlkLAoJCQkJICAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAkdGhpcy0+TGFuZygnYWRkX3VzZXInKSwgJycsICcnLCAnc3lzdGVtaWNvbicpKS4KCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRfam91ZXVyJywgJHJldHVybmlkLCAKCQkJCSAgJHRoaXMtPkxhbmcoJ2FkZF91c2VyJyksICAKCQkJCSAgYXJyYXkoKSkpOwokbXNnID0gJyc7CmlmKGlzc2V0KCRwYXJhbXNbJ21lc3NhZ2UnXSkgJiYgJHBhcmFtc1snbWVzc2FnZSddICE9JycpCnsKCSRtZXNzYWdlID0gJHBhcmFtc1snbWVzc2FnZSddOwoJJG1zZyA9ICRtZXNzYWdlOwoJJHNtYXJ0eS0+YXNzaWduKCdtc2cnLCRtZXNzYWdlKTsKfQoKCiRzbWFydHktPmFzc2lnbignZGVsZXRlX2FsbCcsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWxldGVfYWxsJywkcmV0dXJuaWQsJ0ZpbmFsaXNlciBsXGluc3RhbGxhdGlvbicpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtMnN0YXJ0JywKCQkkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnbWFzc19hY3Rpb24nLCRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm0yZW5kJywKCQkkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJGFydGljbGVzID0gYXJyYXkoIkTDqXNhY3RpdmVyIj0+InVuYWJsZSIsIk1ldHRyZSDDoCBtYXNjdWxpbiI9PiJtYXNjdWxpbiIsICJNZXR0cmUgw6AgRsOpbWluaW4iPT4iZmVtaW5pbiIpOwokc21hcnR5LT5hc3NpZ24oJ2FjdGlvbmRlbWFzc2UnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwnYWN0aW9uZGVtYXNzZScsJGFydGljbGVzKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0X21hc3NhY3Rpb24nLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3N1Ym1pdF9tYXNzYWN0aW9uJywkdGhpcy0+TGFuZygnYXBwbHlfdG9fc2VsZWN0aW9uJyksJycsJycsJHRoaXMtPkxhbmcoJ2FyZXlvdXN1cmVfYWN0aW9ubXVsdGlwbGUnKSkpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdqb3VldXJzLnRwbCcpOwoKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_journal_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywnUGFyYW1ldGVycycpOwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjICAgICAgICAgICAgICAgICAgICBKT1VSTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKCWlmIChpc3NldCgkcGFyYW1zWydzdWJtaXRfbWFzc2RlbGV0ZSddKSApCiAgCXsKICAgICAJCWlmKCBpc3NldCgkcGFyYW1zWydzZWwnXSkgJiYgaXNfYXJyYXkoJHBhcmFtc1snc2VsJ10pICYmIGNvdW50KCRwYXJhbXNbJ3NlbCddKSA+IDAgKQogICAgICAJCXsKICAgICAgICAJCWZvcmVhY2goICRwYXJhbXNbJ3NlbCddIGFzICRqb3VybmFsaWQgKQoJICAJCXsKCSAgICAJCQlwaW5nX2FkbWluX29wczo6ZGVsZXRlX2pvdXJuYWwoICRqb3VybmFsaWQgKTsKCSAgCQl9CiAgICAgIAkJfQogIAl9CgoKJGRiID0mICR0aGlzLT5HZXREYigpOwpnbG9iYWwgJHRoZW1lT2JqZWN0OwoKJHRvdGFsY291bnQgPSAkZGItPkdldE9uZSgnU0VMRUNUIENPVU5UKGlkKSBhcyBjb3VudCBGUk9NICcgLiBjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX3BpbmdfcmVjdXAnKTsKCi8vbGlzdGUgZGVzIGxpZW5zIHBvdXIgcsOpY3Vww6lyZXIgbGVzIGRvbm7DqWVzIAokc21hcnR5LT5hc3NpZ24oJ3JldHJpZXZlX3VzZXJzJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9qb3VldXJzX2J5X2NsdWInLCAkcmV0dXJuaWQsICRjb250ZW50cyA9ICJSw6ljdXDDqXJhdGlvbiBkZXMgam91ZXVycyIsICR3YXJuX21lc3NhZ2UgPSAiRXRlcyB2b3VzIHPDu3IgPyBUcm9wIGQnYXBwZWxzIHZlcnMgbGEgYmFzZSBkZSBkb25uw6llcyBwZXV2ZW50IGF2b2lyIGRlcyBjb25zw6lxdWVuY2VzIGltcG9ydGFudGVzICEiKSk7CiRzbWFydHktPmFzc2lnbigncmV0cmlldmVfdGVhbXMnLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX3RlYW1zJywgJHJldHVybmlkLCAkY29udGVudHMgPSAiUsOpY3Vww6lyYXRpb24gZGVzIMOpcXVpcGVzIChjaGFtcGlvbm5hdCBzZW5pb3JzKSIsIGFycmF5KCd0eXBlJz0+J00nKSkpOwokc21hcnR5LT5hc3NpZ24oJ3JldHJpZXZlX3RlYW1zX2F1dHJlcycsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfdGVhbXMnLCAkcmV0dXJuaWQsICRjb250ZW50cyA9ICJSw6ljdXDDqXJhdGlvbiBkZXMgw6lxdWlwZXMiKSk7CiRzbWFydHktPmFzc2lnbigncmV0cmlldmVfYWxsX3BhcnRpZXMnLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2FsbF9wYXJ0aWVzJywgJHJldHVybmlkLCAkY29udGVudHMgPSAiUsOpY3Vww6lyYXRpb24gZGUgdG91dGVzIGxlcyBwYXJ0aWVzIEZGVFQiKSk7CiRzbWFydHktPmFzc2lnbigncmVjdXBfam91ZXVycycsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmVjdXBfam91ZXVycycsICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ3JldHJpZXZlX2FsbF9zcGlkJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9hbGxfcGFydGllc19zcGlkJywgJHJldHVybmlkLCAkY29udGVudHMgPSAnUsOpY3Vww6lyYXRpb25zIGRlIHRvdXRlcyBsZXMgcGFydGllcyBTUElEJywgJHdhcm5fbWVzc2FnZSA9ICdFdGVzIHZvdXMgc8O7ciA/JykpOwokc21hcnR5LT5hc3NpZ24oJ3JldHJpZXZlX2RldGFpbHNfcmVuY29udHJlcycsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfY2x1YicsICRyZXR1cm5pZCwgJGNvbnRlbnRzID0gJ1LDqWN1cMOpcmF0aW9ucyBkdSBkw6l0YWlsIGRlcyByZW5jb250cmVzJykpOwoKLyogb24gZmFpdCB1biBmb3JtdWxhaXJlIGRlIGZpbHRyYWdlIGRlcyByw6lzdWx0YXRzKi8KLy8kc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsICdwb3N0JywgJycsZmFsc2UsJycsYXJyYXkoJ2FjdGl2ZV90YWInPT4nam91cm5hbCcpKSk7CiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdhZG1pbl9qb3VybmFsX3RhYicpKTsKJHN0YXR1c2xpc3RbJHRoaXMtPmxhbmcoJ2FsbHN0YXR1cycpXSA9Jyc7CiRkYXRlbGlzdFskdGhpcy0+TGFuZygnYWxsZGF0ZXMnKV0gPSAnJzsKJHR5cGVDb21wZXQgPSBhcnJheSgpOwovLyR0eXBlQ29tcGV0WyR0aGlzLT5MYW5nKCdhbGxjb21wZXQnKV0gPSAnJzsKJHF1ZXJ5MSA9ICJTRUxFQ1QgZGF0ZWNyZWF0ZWQsIHN0YXR1cyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZWN1cCBPUkRFUiBCWSBkYXRlY3JlYXRlZCBERVNDIjsKJGRicmVzdWx0MSA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkxKTsKCmlmKCRkYnJlc3VsdDEgJiYgJGRicmVzdWx0MS0+UmVjb3JkQ291bnQoKT4wKQp7CgkKCgl3aGlsZSAoJHJvdyA9ICRkYnJlc3VsdDEtPkZldGNoUm93KCkpCgkJewoJCQlzZXRsb2NhbGUgKExDX1RJTUUsICdmcl9GUicpOyAKCQkJJGRhdGVsaXN0WyRyb3dbJ2RhdGVjcmVhdGVkJ11dID0gJHJvd1snZGF0ZWNyZWF0ZWQnXTsgCgkJCSRzdGF0dXNsaXN0WyRyb3dbJ3N0YXR1cyddXSA9ICRyb3dbJ3N0YXR1cyddOwoJCX0KCgkJCQlpZiggaXNzZXQoJHBhcmFtc1snc3VibWl0ZmlsdGVyJ10pICkKCQkJICAJewoJCQkgICAgCQlpZiggaXNzZXQoICRwYXJhbXNbJ2RhdGVsaXN0J10pICkKCQkJICAgICAgCQl7CgkJCQkJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkYXRlQ2hvaXNpJywgJHBhcmFtc1snZGF0ZWxpc3QnXSk7CgkJCSAgICAgIAkJfQoJCQoJCQkJCWlmKCBpc3NldCggJHBhcmFtc1snc3RhdHVzbGlzdCddKSApCgkJCSAgICAgIAkJewoJCQkJCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnc3RhdHVzQ2hvaXNpZScsICRwYXJhbXNbJ3N0YXR1c2xpc3QnXSk7CgkJCSAgICAgIAkJfQoJCQkJfQoKCQkKJGN1cmRhdGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSggJ2RhdGVDaG9pc2knICk7CiRjdXJzdGF0dXMgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc3RhdHVzQ2hvaXNpZScpOwp9Cgokc21hcnR5LT5hc3NpZ24oJ3Byb21wdF90b3VyJywKCQkkdGhpcy0+TGFuZygndG91cicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9kYXRlJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ2RhdGVsaXN0JywkZGF0ZWxpc3QsLTEsJGN1cmRhdGUpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9zdGF0dXMnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwnc3RhdHVzbGlzdCcsJHN0YXR1c2xpc3QsLTEsJGN1cnN0YXR1cykpOwokc21hcnR5LT5hc3NpZ24oJ3Byb21wdF9lcXVpcGUnLAoJCSR0aGlzLT5MYW5nKCdlcXVpcGUnKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0ZmlsdGVyJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXRmaWx0ZXInLCR0aGlzLT5MYW5nKCdmaWx0cmVzJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCiRlZGl0ID0gMDsvL3BvdXIgY29tcGxldGVyIGxhIHJlcXVldGUuCiRwYXJtPSBhcnJheSAoKTsKJGNyaXRlcmUgPSAnJzsKJGFjdGl2YXRpb24gPSAwOwokcXVlcnkyPSAiU0VMRUNUIGlkLCBkYXRlY3JlYXRlZCwgZGVzaWduYXRpb24sIHN0YXR1cyxhY3Rpb24gRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXAiOwokcmVzdWx0PSAkZGItPkV4ZWN1dGUoJHF1ZXJ5Mik7CiR0b3RhbHJvd3MgPSAkcmVzdWx0LT5SZWNvcmRDb3VudCgpOwoJaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdGZpbHRlciddICkpCgl7CgoJCWlmICgkY3VyZGF0ZSAhPScnKQoJCXsKCQkJJGVkaXQgPSAxOwoJCQkkY3JpdGVyZS49IiBXSEVSRSBkYXRlY3JlYXRlZCA9ID8gIjsKCQkJJHBhcm1zWydkYXRlY3JlYXRlZCddID0gJGN1cmRhdGU7CgkJCgkJfQoJCWlmKCRjdXJzdGF0dXMgIT0nJykKCQl7CgkJCWlmKCRlZGl0PT0xKQoJCQl7CgkJCQkkY3JpdGVyZS49IiBBTkQgc3RhdHVzID0gPyI7CgkJCQkkcGFybXNbJ3N0YXR1cyddID0gJGN1cnN0YXR1czsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRjcml0ZXJlLj0iIFdIRVJFIHN0YXR1cyA9ID8iOwoJCQkJJHBhcm1zWydzdGF0dXMnXSA9ICRjdXJzdGF0dXM7CgkJCX0KCQl9CgkJJGFjdGl2YXRpb24gPSAxOy8vcGVybWV0IGRlIGRpZmbDqXJlbmNpZXIgbGVzIGRldXggcmVxdWV0ZXMKCQkKCX0KCQoJJGNyaXRlcmUuPSAiIE9SREVSIEJZIGRhdGVjcmVhdGVkIERFU0MiOwoJLy9vbiBpbnN0YW5jaWUgZGVzIHZhcmlhYmxlcyBwb3VyIGNyw6llciB1bmUgcGFnaW5hdGlvbiBkYW5zIGwnb25nbGV0IGpvdXJuYWwKCQoJLy9maW4gZHUgaWYgZGJyZXN1bHQKCSRkYnJlc3VsdDIgPSAnJzsgCiAgICAgICAgJHBhZ2UgPSAxOwoJaWYgKGlzc2V0KCRfR0VUWydwYWdlJ10pKSRwYWdlID0gJF9HRVRbJ3BhZ2UnXTsKCgkkbGltaXQgPSA1MDA7CglpZihpc3NldCgkcGFyYW1zWydsaW1pdCddKSkKCSRwYWdlX3N0cmluZyA9ICIiOwoJJGZyb20gPSAoJHBhZ2UgKiAkbGltaXQpIC0gJGxpbWl0OwoJaWYoJGFjdGl2YXRpb249PScwJykKCXsKCQkkZGJyZXN1bHQyID0gJGRiLT5TZWxlY3RMaW1pdCgnU0VMRUNUIGlkLCBkYXRlY3JlYXRlZCwgZGVzaWduYXRpb24sIHN0YXR1cyxhY3Rpb24gRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BpbmdfcmVjdXAgJy4kY3JpdGVyZS4nJywgJGxpbWl0LCAkZnJvbSk7CgoJfQoJCgllbHNlaWYoJGFjdGl2YXRpb249PScxJykKCXsKCQkkZGJyZXN1bHQyID0gJGRiLT5TZWxlY3RMaW1pdCgnU0VMRUNUIGlkLCBkYXRlY3JlYXRlZCwgZGVzaWduYXRpb24sIHN0YXR1cyxhY3Rpb24gRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BpbmdfcmVjdXAgJy4kY3JpdGVyZS4nJywgJGxpbWl0LCAkZnJvbSwgJHBhcm1zKTsKCQkKCX0KCS8vZWNobyAkdG90YWxyb3dzOwoJCgkJLyoKCQlpZiAoISRkYnJlc3VsdDIpCgkJewoKCQkJZGllKCdGQVRBTCBTUUwgRVJST1I6ICcuJGRiLT5FcnJvck1zZygpLic8YnIvPlFVRVJZOiAnLiRkYi0+c3FsKTsKCgkJfQoJCSovCgoKCi8vJGRicmVzdWx0PSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKJHJvd2NsYXNzPSAncm93MSc7CiRyb3dhcnJheT0gYXJyYXkgKCk7CgoJaWYgKCRkYnJlc3VsdDIgJiYgJGRicmVzdWx0Mi0+UmVjb3JkQ291bnQoKSA+IDApCiAgCXsKICAgIAkJCgkJLy8kcGFnZV9zdHJpbmcgPSBwaW5nX2FkbWluX29wczo6cGFnaW5hdGlvbjIoJHBhZ2UsICR0b3RhbHJvd3MsICRsaW1pdCwkYWN0aW9uaWQpOwoJCS8vJHNtYXJ0eS0+YXNzaWduKCJwYWdlc3RyaW5nIiwkcGFnZV9zdHJpbmcpOwoJCXdoaWxlICgkcm93PSAkZGJyZXN1bHQyLT5GZXRjaFJvdygpKQogICAgICAJCXsKCQkJJG9uZXJvdz0gbmV3IFN0ZENsYXNzKCk7CgkJCSRvbmVyb3ctPnJvd2NsYXNzPSAkcm93Y2xhc3M7CgkJCSRvbmVyb3ctPmlkPSAkcm93WydpZCddOwoJCQkkb25lcm93LT5kYXRlY3JlYXRlZD0gJHJvd1snZGF0ZWNyZWF0ZWQnXTsKCQkJJG9uZXJvdy0+ZGVzaWduYXRpb249ICRyb3dbJ2Rlc2lnbmF0aW9uJ107CgkJCSRvbmVyb3ctPmFjdGlvbj0gJHJvd1snYWN0aW9uJ107CgkJCS8vJG9uZXJvdy0+c2VsZWN0ID0gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCdzZWxbXScsJHJvd1snaWQnXSk7CgkJCSgkcm93Y2xhc3MgPT0gInJvdzEiID8gJHJvd2NsYXNzPSAicm93MiIgOiAkcm93Y2xhc3M9ICJyb3cxIik7CgkJCSRyb3dhcnJheVtdPSAkb25lcm93OwogICAgICAJCX0KICAJfQokbGltaXQgPSAnNTAnOy8vJHRoaXMtPkdldFByZWZlcmVuY2UoJ2l0ZW1zX3Blcl9wYWdlJyAsIDIwKTsKJHBhZ2UgPSBpc3NldCgkcGFyYW1zWydwYWdlJ10pID8gJHBhcmFtc1sncGFnZSddIDogMTsKJHNtYXJ0eS0+YXNzaWduKCd0b3RhbGNvdW50JywgJHRvdGFsY291bnQpOwokc21hcnR5LT5hc3NpZ24oJ3BhZ2luYXRpb24nLCAkdGhpcy0+Q3JlYXRlUGFnaW5hdGlvbigkaWQsICdQaW5nJywgJycsICRwYWdlLCAkdG90YWxjb3VudCwgJGxpbWl0KSk7CiRzbWFydHktPmFzc2lnbignaXRlbXNmb3VuZCcsICR0aGlzLT5MYW5nKCdyZXN1bHRzZm91bmR0ZXh0JykpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRyb3dhcnJheSkpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKJHNtYXJ0eS0+YXNzaWduKCdjcmVhdGVsaW5rJywgCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkX2NvbXB0ZScsICRyZXR1cm5pZCwKCQkJCSAgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywgJHRoaXMtPkxhbmcoJ2FkZCcpLCAnJywgJycsICdzeXN0ZW1pY29uJykpLgoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZF9jb21wdGUnLCAkcmV0dXJuaWQsIAoJCQkJICAkdGhpcy0+TGFuZygnYWRkbmV3c2hlZXQnKSwgCgkJCQkgIGFycmF5KCkpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtMnN0YXJ0JywkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnYWRtaW5fam91cm5hbF90YWInLCRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm0yZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXRfbWFzc2RlbGV0ZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0X21hc3NkZWxldGUnLCR0aGlzLT5MYW5nKCdkZWxldGVfc2VsZWN0ZWQnKSwKCQkJCQkJCQkJICAgICAnJywnJywkdGhpcy0+TGFuZygnYXJleW91c3VyZV9kZWxldGVtdWx0aXBsZScpKSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnam91cm5hbC50cGwnKTsKCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_options_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwovL29uIHbDqXJpZmllIGxlcyBkcm9pdHMgZGUgY2V0IHV0aWxpc2F0ZXVyCmlmKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIFVzZScpICYmICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIFNldCBQcmVmcycpKXsKCSRtZXNzYWdlID0gIlZvdXMgblwnYXZleiBwYXMgbGVzIGF1dG9yaXNhdGlvbnMgcG91ciBhY2PDqWRlciBhdXggcHLDqWbDqXJlbmNlcyI7CgkkdGhpcy0+U2V0TWVzc2FnZSgiJG1lc3NhZ2UiKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2pvdWV1cnMnKTsKfQogIC8vIENyZWF0ZUZvcm1TdGFydCBzZXRzIHVwIGEgcHJvcGVyIGZvcm0gdGFnIHRoYXQgd2lsbCBjYXVzZSB0aGUgc3VibWl0IHRvCiAgLy8gcmV0dXJuIGNvbnRyb2wgdG8gdGhpcyBtb2R1bGUgZm9yIHByb2Nlc3NpbmcuCgokbW9pc19jb3VyYW50ID0gZGF0ZSgnbScpOwokYW5uZWVfY291cmFudGUgPSBkYXRlKCdZJyk7CgppZigkbW9pc19jb3VyYW50ID49IDcpCnsKCSRhbm5lZV9kZWJ1dCA9ICRhbm5lZV9jb3VyYW50ZTsKCSRhbm5lZV9maW4gPSAkYW5uZWVfY291cmFudGUgKzE7Cn0KZWxzZQp7CgkkYW5uZWVfZGVidXQgPSAkYW5uZWVfY291cmFudGUgLTE7CgkkYW5uZWVfZmluID0gJGFubmVlX2NvdXJhbnRlOwp9CiRzbWFydHktPmFzc2lnbigncmVjdXBfb3JnYScsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX29yZ2FuaXNtZXMnLCRyZXR1cm5pZCwnUsOpY3Vww6lyZXIgbGVzIG9yZ2FuaXNtZXMnKSk7CiRzYWlzb25fYWN0dWVsbGUgPSAkYW5uZWVfZGVidXQuJy0nLiRhbm5lZV9maW47Ci8vJHNhaXNvbmRyb3Bkb3duWycuJHNhaXNvbl9hY3R1ZWxsZS4nXSA9ICRzYWlzb25fYWN0dWVsbGU7CiRzbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAndXBkYXRlb3B0aW9ucycsICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCAoKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfY2x1Yl9udW1iZXInLCR0aGlzLT5MYW5nKCd0aXRsZV9jbHViX251bWJlcicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jbHViX251bWJlcicsJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2NsdWJfbnVtYmVyJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY2x1Yl9udW1iZXInLCcnKSw1MCwyNTUpKTsKLy8gQ29uc3RydWlyZSBsYSBsaXN0ZSBkeW5hbWlxdWVtZW50IGF2ZWMgdW5lIHJlcXVldGUKJHRhYmxlYXUgPSBhcnJheSgnWicsJ0wnLCdEJyk7Ly9vbiBvdWJsaWUgbGEgRsOpZMOpIHF1aSBlc3QgdGpzIMOgIDEwMDAwMQpmb3JlYWNoKCR0YWJsZWF1IGFzICR2YWxldXIpCnsKCSRxdWVyeSA9ICJTRUxFQ1QgaWRvcmdhLCBsaWJlbGxlIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX29yZ2FuaXNtZXMgV0hFUkUgc2NvcGUgPSA/IjsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHZhbGV1cikpOwoJd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJICB7CgkJaWYoJHZhbGV1ciA9PSdMJykKCQl7CgkJCSRsaXN0b3JnYV9MWyRyb3dbJ2xpYmVsbGUnXV0gPSAkcm93WydpZG9yZ2EnXTsKCQl9CgkJZWxzZWlmKCR2YWxldXIgPT0nWicpCgkJewoJCQkkbGlzdG9yZ2FfWlskcm93WydsaWJlbGxlJ11dID0gJHJvd1snaWRvcmdhJ107IAoJCX0KCQllbHNlCgkJewoJCQkkbGlzdG9yZ2FfRFskcm93WydsaWJlbGxlJ11dID0gJHJvd1snaWRvcmdhJ107IAoJCX0KCSAgICAJCgkgIH0KCQp9CgokbGlzdGVsaWd1ZXMgPSBhcnJheSgiQnJldGFnbmUiPT4iMTAwNyIsICJDaGFtcGFnbmUiPT4iMTAwOCIpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2xpZ3VlJywkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdsaWd1ZScsICRsaXN0b3JnYV9MLC0xLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdsaWd1ZScpLDUwLDI1NSkpOwoKJGxpc3Rlem9uZXMgPSBhcnJheSgiQnJldGFnbmUiPT4iMTAwNyIsICJDaGFtcGFnbmUiPT4iMTAwOCIpOwokbGlzdGVkZXBzID0gYXJyYXkoIkZpbmlzdMOocmUiPT4iMjkiLCAiTW9yYmloYW4iPT4iNTYiKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF96b25lJywkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICd6b25lJywgJGxpc3RvcmdhX1osLTEsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3pvbmUnKSw1MCwyNTUpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9kZXAnLCR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2RlcCcsICRsaXN0b3JnYV9ELC0xLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXAnKSw1MCwyNTUpKTsKJHNhaXNvbl9lbmNvdXJzID0gKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fcmVmZXJlbmNlJykpID8gICcyMDEzLTIwMTQnIDogJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9yZWZlcmVuY2UnKTsKLy8kc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2Zvcm1zdWJtaXRfZW1haWxhZGRyZXNzJywkdGhpcy0+TGFuZygnZm9ybXN1Ym1pdF9lbWFpbGFkZHJlc3MnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfcGhhc2UnLCR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdwaGFzZV9lbl9jb3VycycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJywnMScpLDUwLDI1NSkpOwovLyRzbWFydHktPmFzc2lnbigndGl0bGVfZW1haWxfc3ViamVjdCcsJHRoaXMtPkxhbmcoJ2VtYWlsX3N1YmplY3QnKSk7CiRpdGVtcyA9IGFycmF5KCk7CiRpdGVtc1snT3VpJ10gPSAnT3VpJzsKJGl0ZW1zWydOb24nXSA9ICdOb24nOwokc2Fpc29uZHJvcGRvd24gPSBhcnJheSgpOwoKJHNhaXNvbmRyb3Bkb3duWycyMDEzLTIwMTQnXSA9ICcyMDEzLTIwMTQnOwokc2Fpc29uZHJvcGRvd25bJzIwMTQtMjAxNSddID0gJzIwMTQtMjAxNSc7CiRzYWlzb25kcm9wZG93blsnMjAxNS0yMDE2J10gPSAnMjAxNS0yMDE2JzsKCiRzbWFydHktPmFzc2lnbignaW5wdXRfc2Fpc29uX2VuX2NvdXJzJywkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ3NhaXNvbl9lbl9jb3VycycsJHNhaXNvbmRyb3Bkb3duLC0xLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKSw1MCwyNTUpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9ub21fZXF1aXBlcycsIAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbm9tX2VxdWlwZXMnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbm9tX2VxdWlwZXMnLCAnJyksIDUwLDI1MCkpOwokc21hcnR5LT5hc3NpZ24oJ2pvdXJfc2l0X21lbnMnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdqb3VyX3NpdF9tZW5zJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2pvdXJfc2l0X21lbnMnLCAnJyksIDUsIDcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9wb3B1bGF0ZV9jYWxlbmRhcicsJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCdwb3B1bGF0ZV9jYWxlbmRhcicsJGl0ZW1zLC0xLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwb3B1bGF0ZV9jYWxlbmRhcicpLDUwLDI1NSkpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2FmZmljaGVfY2x1Yl91bmlxdWVtZW50JywkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ2FmZmljaGVfY2x1Yl91bmlxdWVtZW50JywkaXRlbXMsLTEsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2FmZmljaGVfY2x1Yl91bmlxdWVtZW50JyksNTAsMjU1KSk7CiR2YWxldXJzX2ludGVydmFsID0gYXJyYXkoIjEgam91ciI9PiIxIiwiMiBqb3VycyI9PiIyIiwiMyBqb3VycyI9PiIzIiwiSmFtYWlzIj0+IjM2NSIpOwokdmFsZXVyc19ub21icmVzX3NwaWQgPSBhcnJheSgiMjUgam91ZXVycyI9PiIyNSIsICI1MCBqb3VldXJzIj0+IjUwIiwgIjc1IGpvdWV1cnMiPT4iNzUiLCIxMDAgam91ZXVycyI9PiIxMDAiKTsKJHZhbGV1cnNfbm9tYnJlc19mZnR0ID0gYXJyYXkoIjI1IGpvdWV1cnMiPT4iMjUiLCAiNTAgam91ZXVycyI9PiI1MCIsICI3NSBqb3VldXJzIj0+Ijc1IiwiMTAwIGpvdWV1cnMiPT4iMTAwIik7CiRzbWFydHktPmFzc2lnbignaW5wdXRfc3BpZF9pbnRlcnZhbCcsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnc3BpZF9pbnRlcnZhbCcsJHZhbGV1cnNfaW50ZXJ2YWwsLTEsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NwaWRfaW50ZXJ2YWwnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3NwaWRfbm9tYnJlcycsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCdzcGlkX25vbWJyZXMnLCR2YWxldXJzX25vbWJyZXNfc3BpZCwtMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc3BpZF9ub21icmVzJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9mZnR0X2ludGVydmFsJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdmZnR0X2ludGVydmFsJywkdmFsZXVyc19pbnRlcnZhbCwtMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZmZ0dF9pbnRlcnZhbCcpKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfZmZ0dF9ub21icmVzJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ2ZmdHRfbm9tYnJlcycsJHZhbGV1cnNfbm9tYnJlc19mZnR0LC0xLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdmZnR0X25vbWJyZXMnKSkpOwovKgokc21hcnR5LT5hc3NpZ24oJ3NpdG1lbnNfb2tfb25seScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCdzaXRtZW5zX29rX29ubHknLCAkaXRlbXMsLTEsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NpdG1lbnNfb2tfb25seScpLDUwLDI1NSkpOwoqLwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnb3B0aW9uc3N1Ym1pdGJ1dHRvbicsICR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwoKLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2FkbWlucHJlZnMudHBsJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_poules.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojICAgICAgICBBZG1pbmlzdHJhdGlvbiBkZXMgcG91bGVzIGluc8OpcsOpZXMgcG91ciBsZSBjbGFzc2VtZW50ICAjIwojICAgICAgICAgICAgICAgICAgICAgICAgIGV0IGxlcyBwYXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKZ2xvYmFsICR0aGVtZU9iamVjdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7Ci8vY3LDqWF0aW9ucyBkZSBsaWVucyBkZSByw6ljdXDDqXJhdGlvbiBkZXMgY29tcMOpdGl0aW9ucwovL29uIHLDqWN1cMOocmUgZCdhYm9yZCBsZXMgcHLDqWbDqXJlbmNlcyBkZSB6b25lcywgbGlndWVzIGV0IGTDqXBhcnRlbWVudAokZmVkZSA9ICcxMDAwMDEnOwokem9uZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd6b25lJyk7CiRsaWd1ZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdsaWd1ZScpOwokZGVwID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RlcCcpOwoKJHJlc3VsdD0gYXJyYXkgKCk7CiRxdWVyeSA9ICJTRUxFQ1QgKixkdi5saWJlbGxlIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2RpdmlzaW9ucyBBUyBkdiwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2Rpdl90b3VycyBBUyBwb3UgV0hFUkUgZHYuaWRlcHJldXZlID0gcG91LmlkZXByZXV2ZSBBTkQgZHYuaWRkaXZpc2lvbiA9IHBvdS5pZGRpdmlzaW9uIE9SREVSIEJZIGR2LmlkZGl2aXNpb24scG91LnRvdXIgQVNDIjsKCiRkYnJlc3VsdD0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7Ci8vIHRoZSB0b3AgbmF2IGJhcgovLyRzbWFydHktPmFzc2lnbigncmV0dXJubGluaycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9iYWNrLmdpZicsICR0aGlzLT5MYW5nKCdiYWNrJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSxhcnJheSgiYWN0aXZlX3RhYiI9PiJkaXZpc2lvbnMiKSkpOwovLyR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRfdHlwZV9jb21wZXQnLCRyZXR1cm5pZCwkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvdG9wZmlsZXMvdGVtcGxhdGUuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLGFycmF5KCJyZWNvcmRfaWQiPT4kcm93WydpZCddKSk7Cgokcm93Y2xhc3MgPSAnJzsKLy9lY2hvICRxdWVyeTsKJHJvd2FycmF5PSBhcnJheSAoKTsKaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwKQogIHsKICAgIHdoaWxlICgkcm93PSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCiAgICAgIHsKCS8qCgkkaW5kaXZzID0gJHJvd1snaW5kaXZzJ107CglpZigkaW5kaXZzPT0xKXskdHlwZT0nSSc7fWVsc2V7JHR5cGU9J0UnO30KCSRpZG9yZ2EgPSAkcm93WydpZG9yZ2EnXTsKCWlmKCRpZG9yZ2EgPT0gJGZlZGUpeyRvcmdhID0gJ0bDqWTDqXJhdGlvbic7fQoJaWYoJGlkb3JnYSA9PSAkem9uZSl7JG9yZ2EgPSAnWm9uZSc7fQoJaWYoJGlkb3JnYSA9PSAkbGlndWUpeyRvcmdhID0gJ0xpZ3VlJzt9CglpZigkaWRvcmdhID09ICRkZXApeyRvcmdhID0gJ0NvbWl0w6knO30KCSovCgkkb25lcm93PSBuZXcgU3RkQ2xhc3MoKTsKCSRvbmVyb3ctPnJvd2NsYXNzPSAkcm93Y2xhc3M7Cgkkb25lcm93LT5pZGVwcmV1dmU9ICRyb3dbJ2lkZXByZXV2ZSddOwoJJG9uZXJvdy0+aWRkaXZpc2lvbj0gJHJvd1snaWRkaXZpc2lvbiddOwoJJG9uZXJvdy0+dG91cj0gJHJvd1sndG91ciddOwoJJG9uZXJvdy0+dGFibGVhdSA9ICRyb3dbJ3RhYmxlYXUnXTsKCSRvbmVyb3ctPmxpYmVsbGU9ICRyb3dbJ2xpYmVsbGUnXTsKCS8vJG9uZXJvdy0+aW5kaXZzPSAkcm93WydpbmRpdnMnXTsKCS8vJG9uZXJvdy0+b3JnYSA9ICRvcmdhOwoJLy8kb25lcm93LT5pZGVwcmV1dmUgPSAkcm93WydpZGVwcmV1dmUnXTsKCQoJLy8kb25lcm93LT5wb3VsZT0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfZGl2X3Jlc3VsdHMnLCAkcmV0dXJuaWQsICdQb3VsZScsYXJyYXkoImRpcmVjdGlvbiI9PiJ0b3VyIiwiaWRlcHJldXZlIj0+JHJvd1snaWRlcHJldXZlJ10sICJpZGRpdmlzaW9uIj0+JHJvd1snaWRkaXZpc2lvbiddKSk7Cgkkb25lcm93LT5jbGFzc2VtZW50PSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9kaXZfcmVzdWx0cycsICRyZXR1cm5pZCwgJ0NsYXNzZW1lbnQnLGFycmF5KCJkaXJlY3Rpb24iPT4iY2xhc3NlbWVudCIsImlkZXByZXV2ZSI9PiRyb3dbJ2lkZXByZXV2ZSddLCAiaWRkaXZpc2lvbiI9PiRyb3dbJ2lkZGl2aXNpb24nXSwidGFibGVhdSI9PiRyb3dbJ3RhYmxlYXUnXSwidG91ciI9PiRyb3dbJ3RvdXInXSkpOwoJJG9uZXJvdy0+cGFydGllPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9kaXZfcmVzdWx0cycsICRyZXR1cm5pZCwgJ1BhcnRpZXMnLGFycmF5KCJkaXJlY3Rpb24iPT4icGFydGllIiwiaWRlcHJldXZlIj0+JHJvd1snaWRlcHJldXZlJ10sICJpZGRpdmlzaW9uIj0+JHJvd1snaWRkaXZpc2lvbiddLCJ0YWJsZWF1Ij0+JHJvd1sndGFibGVhdSddLCJ0b3VyIj0+JHJvd1sndG91ciddKSk7CgkKCS8vJG9uZXJvdy0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0X3R5cGVfY29tcGV0JywkcmV0dXJuaWQsJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsICR0aGlzLT5MYW5nKCdlZGl0JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSxhcnJheSgicmVjb3JkX2lkIj0+JHJvd1snaWQnXSkpOwoJCglpZigkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIERlbGV0ZScpKQoJewoJCSRvbmVyb3ctPmRlbGV0ZWxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGUnLCAkcmV0dXJuaWQsJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksYXJyYXkoInJlY29yZF9pZCI9PiRyb3dbJ2lkJ10sICJ0eXBlX2NvbXBldCI9PiJ0eXBlX2NvbXBldCIpKTsKCX0KCQoJKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3M9ICJyb3cyIiA6ICRyb3djbGFzcz0gInJvdzEiKTsKCSRyb3dhcnJheVtdPSAkb25lcm93OwogICAgICB9CiAgfQplbHNlIHsKCWVjaG8gIjxwPkF1Y3VuIHLDqXN1bHRhdHMgITwvcD4iOwp9CiRzbWFydHktPmFzc2lnbignaXRlbXNmb3VuZCcsICR0aGlzLT5MYW5nKCdyZXN1bHRzZm91bmQnKSk7CiRzbWFydHktPmFzc2lnbignaXRlbWNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiRzbWFydHktPmFzc2lnbignaXRlbXMnLCAkcm93YXJyYXkpOwokc21hcnR5LT5hc3NpZ24oJ2NyZWF0ZWxpbmsnLCAKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRfdHlwZV9jb21wZXQnLCAkcmV0dXJuaWQsCgkJCQkgICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdhZGRfY29tcGV0JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSkuCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkX3R5cGVfY29tcGV0JywgJHJldHVybmlkLCAKCQkJCSAgJHRoaXMtPkxhbmcoJ2FkZF90eXBlX2NvbXBldCcpLCAKCQkJCSAgYXJyYXkoKSkpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdsaXN0X3BvdWxlcy50cGwnKTsKCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_poules_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKJGRiID0mICR0aGlzLT5HZXREYigpOwpnbG9iYWwgJHRoZW1lT2JqZWN0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS90cmF2YXV4LnBocCcpOwoKJHNhaXNvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKLyogb24gZmFpdCB1biBmb3JtdWxhaXJlIGRlIGZpbHRyYWdlIGRlcyByw6lzdWx0YXRzKi8KJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdhZG1pbl9wb3VsZXNfdGFiJykpOyAgCiRwb3VsZXNsaXN0ID0gYXJyYXkoKTsKJHBvdWxlc2xpc3RbJHRoaXMtPkxhbmcoJ2FsbHBvdWxlcycpXSA9ICcnOwoKJHF1ZXJ5MSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19lcXVpcGVzIFdIRVJFIHNhaXNvbiA9ID8iOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MSxhcnJheSgkc2Fpc29uKSk7Ci8vZWNobyAkcXVlcnkxOwp3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCiAgewogICAgJHBvdWxlc2xpc3RbJHJvd1snbGliZGl2aXNpb24nXV0gPSAkcm93WydpZHBvdWxlJ107CiAgfQoKCWlmKCBpc3NldCgkcGFyYW1zWydzdWJtaXRmaWx0ZXInXSkgKQogIAl7CiAgICAJCWlmKCBpc3NldCggJHBhcmFtc1sncG91bGVzbGlzdCddKSApCiAgICAgIAkJewoJCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgncG91bGVDaG9pc2knLCAkcGFyYW1zWydwb3VsZXNsaXN0J10pOwogICAgICAJCX0KCX0KCiRjdXJwb3VsZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCAncG91bGVDaG9pc2knICk7Cgokc21hcnR5LT5hc3NpZ24oJ3Byb21wdF90b3VyJywKCQkkdGhpcy0+TGFuZygndG91cicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF90b3VyJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ3BvdWxlc2xpc3QnLCRwb3VsZXNsaXN0LC0xLCRjdXJwb3VsZSkpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2NsdWJfdW5pcXVlbWVudCcsCgkJJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCdjbHViX3VuaXF1ZW1lbnQnLDEsMSkpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2RlamFfam91ZXNfdW5pcXVlbWVudCcsCgkJJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCdkZWphX2pvdWVzX3VuaXF1ZW1lbnQnLDEsMSkpOwoJCS8vCShpc3NldCgkcGFyYW1zWydjbHViX3VuaXF1ZW1lbnQnXSk/JHBhcmFtc1snY2x1Yl91bmlxdWVtZW50J106JzEnKSwxKSk7CiRzbWFydHktPmFzc2lnbigncHJvbXB0X2VxdWlwZScsCgkJJHRoaXMtPkxhbmcoJ2VxdWlwZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXRmaWx0ZXInLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3N1Ym1pdGZpbHRlcicsJHRoaXMtPkxhbmcoJ2ZpbHRyZXMnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwovL2VjaG8gImxhIHBvdWxlIGVuIGNvdXJzIGVzdCA6ICIuJGN1cnBvdWxlOwokcGFybXMgPSBhcnJheSgpOwokcmVzdWx0PSBhcnJheSgpOwokcXVlcnkyID0gIlNFTEVDVCAqLHJlbi5hZmZpY2hlLHJlbi5jbHViLHJlbi5kYXRlX2V2ZW50LCByZW4uaWQsIGVxLmxpYmVxdWlwZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wb3VsZXNfcmVuY29udHJlcyBBUyByZW4sICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19lcXVpcGVzIEFTIGVxIFdIRVJFIGVxLmlkcG91bGUgPSByZW4uaWRwb3VsZSAgQU5EIHJlbi5zYWlzb24gPSBlcS5zYWlzb24gQU5EIGVxLnNhaXNvbiA9ID8iOwokcGFybXNbJ3NhaXNvbiddID0gJHNhaXNvbjsKCWlmKCBpc3NldCgkcGFyYW1zWydzdWJtaXRmaWx0ZXInXSApKQoJewoJCgkJaWYgKCRjdXJwb3VsZSAhPScnKQoJCXsKCQkJJHF1ZXJ5MiAuPSIgQU5EIGVxLmlkcG91bGUgPSA/IjsKCQkJJHBhcm1zWydpZHBvdWxlJ10gPSAkY3VycG91bGU7CgkJCQoJCQkKCQl9CgkJaWYoJHBhcmFtc1snY2x1Yl91bmlxdWVtZW50J109PScxJykKCQl7CgkJCSRxdWVyeTIuPSIgQU5EIGNsdWIgPSAnMSciOwoJCX0KCQlpZigkcGFyYW1zWydkZWphX2pvdWVzX3VuaXF1ZW1lbnQnXSkKCQl7CgkJCSRxdWVyeTIuPSIgQU5EIChyZW4uc2NvcmVhICE9MCBBTkQgcmVuLnNjb3JlYiAhPTAgKSI7CgkJCgkJfQoJfQovKgkJCgkJJGRicmVzdWx0PSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MiwkcGFybXMpOwoJCgl9CgllbHNlCgl7CgkJJGRicmVzdWx0PSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MixhcnJheSgkc2Fpc29uKSk7Cgl9CiovCgokcXVlcnkyLj0iIE9SREVSIEJZIHJlbi5kYXRlX2V2ZW50IERFU0MiCTsKJGRicmVzdWx0PSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MiwkcGFybXMpOwovL2VjaG8gJHF1ZXJ5MjsKCiRyb3dhcnJheT0gYXJyYXkgKCk7CmlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkKICB7CiAgICB3aGlsZSAoJHJvdz0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQogICAgICB7Cgkkb25lcm93PSBuZXcgU3RkQ2xhc3MoKTsKCSRvbmVyb3ctPnJvd2NsYXNzPSAkcm93Y2xhc3M7Cgkkb25lcm93LT5pZD0gJHJvd1snaWQnXTsKCSRjbHViID0gJHJvd1snY2x1YiddOwoJJGVxdWIgPSAkcm93WydlcXViJ107CgkkZXF1YSA9ICRyb3dbJ2VxdWEnXTsKCSRzY29yZWEgPSAkcm93WydzY29yZWEnXTsKCSRzY29yZWIgPSAkcm93WydzY29yZWInXTsKCSRmcmllbmRseW5hbWUgPSAkcm93WydmcmllbmRseW5hbWUnXTsKCSRsaWJlcXVpcGUgPSAkcm93WydsaWJlcXVpcGUnXTsKCSR1cGxvYWRlZCA9ICRyb3dbJ3VwbG9hZGVkJ107CgkkYWZmaWNoZSA9ICRyb3dbJ2FmZmljaGUnXTsJCgkKCQoJLy8kb25lcm93LT5lcXVpcGU9ICRyb3dbJ2VxdWlwZSddOwoJJG9uZXJvdy0+bGliZWxsZT0gJHJvd1snbGliZWxsZSddOwoJCglpZihpc3NldCgkZnJpZW5kbHluYW1lKSAmJiAkZnJpZW5kbHluYW1lICE9JycpCgl7CgkJaWYgKCRsaWJlcXVpcGUgPT0gJGVxdWEpCgkJewoJCQkkb25lcm93LT5lcXVhPSAkcm93WydmcmllbmRseW5hbWUnXTsKCQl9CgkJZWxzZQoJCXsKCQkJJG9uZXJvdy0+ZXF1YT0gJHJvd1snZXF1YSddOwoJCX0KCQkKCX0KCWVsc2UKCXsKCQkkb25lcm93LT5lcXVhPSAkcm93WydlcXVhJ107Cgl9CgkKCSRvbmVyb3ctPnNjb3JlYT0gJHJvd1snc2NvcmVhJ107Cgkkb25lcm93LT5zY29yZWI9ICRyb3dbJ3Njb3JlYiddOwoJJG9uZXJvdy0+bGliZXF1aXBlPSAkcm93WydsaWJlcXVpcGUnXTsKCQoJaWYoaXNzZXQoJGZyaWVuZGx5bmFtZSkgJiYgJGZyaWVuZGx5bmFtZSAhPScnKQoJewoJCWlmICgkbGliZXF1aXBlID09ICRlcXViKQoJCXsKCQkJJG9uZXJvdy0+ZXF1Yj0gJHJvd1snZnJpZW5kbHluYW1lJ107CgkJfQoJCWVsc2UKCQl7CgkJCSRvbmVyb3ctPmVxdWI9ICRyb3dbJ2VxdWInXTsKCQl9CgkJCgl9CgllbHNlCgl7CgkJJG9uZXJvdy0+ZXF1Yj0gJHJvd1snZXF1YiddOwoJfQoJCglpZigkYWZmaWNoZSA9PTEpCgl7CgkJJG9uZXJvdy0+ZGlzcGxheT0gJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS90cnVlLmdpZicsICR0aGlzLT5MYW5nKCdkb19ub3RfZGlzcGxheScpLCAnJywgJycsICdzeXN0ZW1pY29uJyk7Cgl9CgllbHNlCgl7CgkJJG9uZXJvdy0+ZGlzcGxheT0gJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9mYWxzZS5naWYnLCAkdGhpcy0+TGFuZygnZGlzcGxheV9vbl9mcm9udGVuZCcpLCAnJywgJycsICdzeXN0ZW1pY29uJyk7Cgl9CgkkcGIgPSAwOwoJaWYoJHNjb3JlYSA9PTAgJiYgJHNjb3JlYiA9PSAwKQoJewoJCSRwYiA9IDE7Cgl9CglpZigkdXBsb2FkZWQgPT0wICYmICRjbHViPT0xICYmICRwYj09MCkgewoJCQoJLy8kb25lcm93LT5hZmZpY2hhZ2UgPSAKCSRvbmVyb3ctPnJldHJpZXZlX2RldGFpbHMgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ3JldHJpZXZlX2RldGFpbHNfcmVuY29udHJlczInLCAkcmV0dXJuaWQsJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9pbXBvcnQuZ2lmJywgJHRoaXMtPkxhbmcoJ3JldHJpZXZlYWxscGFydGllc3NwaWQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgncmVjb3JkX2lkJz0+JHJvd1snaWQnXSkpOwoJfQoJCglpZigkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIERlbGV0ZScpKQoJewoJCSRvbmVyb3ctPmRlbGV0ZWxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZScsICRyZXR1cm5pZCwgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCdyZWNvcmRfaWQnPT4kcm93WydpZCddLCAndHlwZV9jb21wZXQnPT4ncG91bGVzJyksICR0aGlzLT5MYW5nKCdkZWxldGVfY29uZmlybScpKTsKCX0KCQoJKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3M9ICJyb3cyIiA6ICRyb3djbGFzcz0gInJvdzEiKTsKCSRyb3dhcnJheVtdPSAkb25lcm93OwogICAgICB9CiAgfQokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zZm91bmQnLCAkdGhpcy0+TGFuZygncmVzdWx0c2ZvdW5kdGV4dCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRyb3dhcnJheSk7CiRzbWFydHktPmFzc2lnbignY3JlYXRlbGluaycsIAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2FsbF9wb3VsZV9yZW5jb250cmVzJywgJHJldHVybmlkLAoJCQkJICAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ltcG9ydC5naWYnLCAkdGhpcy0+TGFuZygnZG93bmxvYWRfYWxsX3BvdWxlX3Jlc3VsdHMnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpKS4KCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9hbGxfcG91bGVfcmVuY29udHJlcycsICRyZXR1cm5pZCwgCgkJCQkgICR0aGlzLT5MYW5nKCdkb3dubG9hZF9hbGxfcG91bGVfcmVzdWx0cycpLCAKCQkJCSAgYXJyYXkoKSkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm0yc3RhcnQnLAoJCSR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdtYXNzX2FjdGlvbicsJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZm9ybTJlbmQnLAoJCSR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokYXJ0aWNsZXMgPSBhcnJheSgiQWZmaWNoZXIgc3VyIGxlIHNpdGUiPT4iZGlzcGxheV9vbl9mcm9udGVuZCIsIk5lIHBsdXMgYWZmaWNoZXIgc3VyIGxlIHNpdGUiPT4iZG9fbm90X2Rpc3BsYXkiLCJTdXBwcmltZXIiPT4iZGVsZXRlX3RlYW1fcmVzdWx0Iik7CiRzbWFydHktPmFzc2lnbignYWN0aW9uZGVtYXNzZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCdhY3Rpb25kZW1hc3NlJywkYXJ0aWNsZXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXRfbWFzc2FjdGlvbicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0X21hc3NhY3Rpb24nLCR0aGlzLT5MYW5nKCdhcHBseV90b19zZWxlY3Rpb24nKSwnJywnJywkdGhpcy0+TGFuZygnYXJleW91c3VyZV9hY3Rpb25tdWx0aXBsZScpKSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgncG91bGVzUmVuY29udHJlcy50cGwnKTsKCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_poules_tab2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyAgICAgICAgICAgICAgICAgIFRvIGNvbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy9sZXMgY29tcMOpdGl0aW9ucyDDoCB2ZW5pcgppZighaXNzZXQoJGdDbXMpKSBleGl0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKJGRhdGVfY291cmFudGUgPSBkYXRlKCdZLW0tZCcpOwovL2VjaG8gImxhIGRhdGUgY291cmFudGUgOiAiLiRkYXRlX2NvdXJhbnRlOwovL29uIHRlc3RlIHVuIGFmZmljaGFnZSBwYXIgbW9pcwokbW9pc19jb3VyYW50ID0gZGF0ZSgnbicpOwokbW9pc19jaG9pc2kgPSAnJzsKJHBoYXNlX2Nob2lzaWUgPSAnJzsKJHBoYXNlX2VuX2NvdXJzID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJyk7CiRzYWlzb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7CmlmKGlzc2V0KCRwYXJhbXNbJ3BoYXNlX2Nob2lzaWUnXSkgJiYgJHBhcmFtc1sncGhhc2VfY2hvaXNpZSddICE9JycpCnsKCSRwaGFzZV9jaG9pc2llID0gJHBhcmFtc1sncGhhc2VfY2hvaXNpZSddOwp9CmVsc2UKewoJJHBoYXNlX2Nob2lzaWUgPSAkcGhhc2VfZW5fY291cnM7Cn0KJHNtYXJ0eS0+YXNzaWduKCdwaGFzZScsICRwaGFzZV9jaG9pc2llKTsKaWYoaXNzZXQoJHBhcmFtc1snbW9pcyddKSAmJiAkcGFyYW1zWydtb2lzJ10gIT0nJykKewoJJG1vaXNfY2hvaXNpID0gJHBhcmFtc1snbW9pcyddOwoJLy8kYWN0aWYgPSAkbW9pc19jaG9pc2k7Cn0KZWxzZQp7CgkkbW9pc19jaG9pc2kgPSAkbW9pc19jb3VyYW50Owp9CmlmKCRtb2lzX2Nob2lzaSA9PTEpCnsKCSRtb2lzX3ByZWNlZGVudCA9IDEyOwp9CmVsc2UKewoJJG1vaXNfcHJlY2VkZW50ID0gJG1vaXNfY2hvaXNpIC0xOwp9CmlmKCRtb2lzX2Nob2lzaT09MTIpCnsKCSRtb2lzX3N1aXZhbnQgPSAxOwp9CmVsc2UKewoJJG1vaXNfc3VpdmFudCA9ICRtb2lzX2Nob2lzaSArIDE7Cn0KJHNtYXJ0eS0+YXNzaWduKCdTZXAnLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCdTZXB0ZW1icmUnLCBhcnJheSgiYWN0aXZlX3RhYiI9PiJyZXN1bHRhdHMiLCJtb2lzIj0+IjkiLCJwaGFzZV9jaG9pc2llIj0+IjEiKSwKCQknJywgZmFsc2UsIGZhbHNlLCAoKCRtb2lzX2Nob2lzaT09OSk/J2NsYXNzPSJwYWdlb3B0aW9ucyInOidjbGFzcz0iYWN0aXZlIicpKSk7CiRzbWFydHktPmFzc2lnbignT2N0JywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwnT2N0b2JyZScsIGFycmF5KCJhY3RpdmVfdGFiIj0+InJlc3VsdGF0cyIsIm1vaXMiPT4iMTAiLCJwaGFzZV9jaG9pc2llIj0+IjEiKSwKCQknJywgZmFsc2UsIGZhbHNlLCAoKCRtb2lzX2Nob2lzaT09MTApPydjbGFzcz0icGFnZW9wdGlvbnMiJzonY2xhc3M9ImFjdGl2ZSInKSkpOwokc21hcnR5LT5hc3NpZ24oJ05vdicsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsJ05vdmVtYnJlJywgYXJyYXkoImFjdGl2ZV90YWIiPT4icmVzdWx0YXRzIiwibW9pcyI9PiIxMSIsInBoYXNlX2Nob2lzaWUiPT4iMSIpLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT0xMSk/J2NsYXNzPSJwYWdlb3B0aW9ucyInOidjbGFzcz0iYWN0aXZlIicpKSk7CiRzbWFydHktPmFzc2lnbignRGVjJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwnRMOpY2VtYnJlJywgYXJyYXkoImFjdGl2ZV90YWIiPT4icmVzdWx0YXRzIiwibW9pcyI9PiIxMiIsInBoYXNlX2Nob2lzaWUiPT4iMSIpLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT0xMik/J2NsYXNzPSJwYWdlb3B0aW9ucyInOidjbGFzcz0iYWN0aXZlIicpKSk7CiRzbWFydHktPmFzc2lnbignSmFuJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwnSmFudmllcicsIGFycmF5KCJhY3RpdmVfdGFiIj0+InJlc3VsdGF0cyIsIm1vaXMiPT4iMSIsInBoYXNlX2Nob2lzaWUiPT4iMiIpLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT0xKT8nY2xhc3M9InBhZ2VvcHRpb25zIic6J2NsYXNzPSJhY3RpdmUiJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdGZXYnLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCdGw6l2cmllcicsIGFycmF5KCJhY3RpdmVfdGFiIj0+InJlc3VsdGF0cyIsIm1vaXMiPT4iMiIsInBoYXNlX2Nob2lzaWUiPT4iMiIpLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT0yKT8nY2xhc3M9InBhZ2VvcHRpb25zIic6J2NsYXNzPSJhY3RpdmUiJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdNYXInLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCdNYXJzJywgYXJyYXkoImFjdGl2ZV90YWIiPT4icmVzdWx0YXRzIiwibW9pcyI9PiIzIiwicGhhc2VfY2hvaXNpZSI9PiIyIiksCgkJJycsIGZhbHNlLCBmYWxzZSwgKCgkbW9pc19jaG9pc2k9PTMpPydjbGFzcz0icGFnZW9wdGlvbnMiJzonY2xhc3M9ImFjdGl2ZSInKSkpOwokc21hcnR5LT5hc3NpZ24oJ0F2cicsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsJ0F2cmlsJywgYXJyYXkoImFjdGl2ZV90YWIiPT4icmVzdWx0YXRzIiwibW9pcyI9PiI0IiwicGhhc2VfY2hvaXNpZSI9PiIyIiksCgkJJycsIGZhbHNlLCBmYWxzZSwgKCgkbW9pc19jaG9pc2k9PTQpPydjbGFzcz0icGFnZW9wdGlvbnMiJzonY2xhc3M9ImFjdGl2ZSInKSkpOwokc21hcnR5LT5hc3NpZ24oJ01haScsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsJ01haScsIGFycmF5KCJhY3RpdmVfdGFiIj0+InJlc3VsdGF0cyIsIm1vaXMiPT4iNSIsInBoYXNlX2Nob2lzaWUiPT4iMiIpLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT01KT8nY2xhc3M9InBhZ2VvcHRpb25zIic6J2NsYXNzPSJhY3RpdmUiJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdKdWluJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwnSnVpbicsIGFycmF5KCJhY3RpdmVfdGFiIj0+InJlc3VsdGF0cyIsIm1vaXMiPT4iNiIsInBoYXNlX2Nob2lzaWUiPT4iMiIpLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT02KT8nY2xhc3M9InBhZ2VvcHRpb25zIic6J2NsYXNzPSJhY3RpdmUiJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdKdWlsJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwnSnVpbGxldCcsIGFycmF5KCJhY3RpdmVfdGFiIj0+InJlc3VsdGF0cyIsIm1vaXMiPT4iNyIsInBoYXNlX2Nob2lzaWUiPT4iMiIpLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT03KT8nY2xhc3M9InBhZ2VvcHRpb25zIic6J2NsYXNzPSJhY3RpdmUiJykpKTsKCiRzbWFydHktPmFzc2lnbignbW9pc19wcmVjZWRlbnQnLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsICc8PCcsIGFycmF5KCJhY3RpdmVfdGFiIj0+InJlc3VsdGF0cyIsInBoYXNlX2Nob2lzaWUiPT4iMSIsIm1vaXMiPT4iMTIiKSwKCQknJywgZmFsc2UsIGZhbHNlLCAoKCRtb2lzX2Nob2lzaT09MTIpPydjbGFzcz0icGFnZW9wdGlvbnMiJzonY2xhc3M9ImFjdGl2ZSInKSkpOwokc21hcnR5LT5hc3NpZ24oJ21vaXNfc3VpdmFudCcsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwgJz4+JywgYXJyYXkoImFjdGl2ZV90YWIiPT4icmVzdWx0YXRzIiwicGhhc2VfY2hvaXNpZSI9PiIyIiwibW9pcyI9PiIxIikgLAoJCScnLCBmYWxzZSwgZmFsc2UsICgoJG1vaXNfY2hvaXNpPT0xKT8nY2xhc3M9InBhZ2VvcHRpb25zIic6J2NsYXNzPSJhY3RpdmUiJykpKTsKCiRzbWFydHktPmFzc2lnbignYWxsX3Jlc3VsdHMnLCAKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9hbGxfcG91bGVfcmVuY29udHJlcycsICRyZXR1cm5pZCwgJ1LDqWN1cMOpcmVyIHRvdXMgbGVzIHLDqXN1bHRhdHMnKSk7Ci8vbGEgcmVxdWV0ZQokcXVlcnkgPSAiU0VMRUNUIHRjLmNvZWZmaWNpZW50LGNhbC5kYXRlX2RlYnV0LCBEQVkoY2FsLmRhdGVfZGVidXQpIEFTIGpvdXJfY29tcGV0LGNhbC5kYXRlX2ZpbiwgdGMuaWRlcHJldXZlLHRjLm5hbWUsIHRjLmluZGl2cyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jYWxlbmRyaWVyIEFTIGNhbCwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIEFTIHRjICBXSEVSRSB0Yy5pZGVwcmV1dmUgPSBjYWwuaWRlcHJldXZlIEFORCBNT05USChjYWwuZGF0ZV9kZWJ1dCkgPSA/IEFORCBjYWwuc2Fpc29uID0gPyI7Ci8vJHBhcm1zWydkYXRlX2RlYnV0J10gPSAkbW9pc19jb3VyYW50OwovKgoJaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJykgPT0nMScgKQoJewoJCWlmKCRwYXJhbXNbJ3BoYXNlJ10gPT0yKQoJCXsKCQkJJHF1ZXJ5Lj0gIiBBTkQgTU9OVEgoY2FsLmRhdGVfZGVidXQpID49IDEgQU5EIE1PTlRIKGNhbC5kYXRlX2RlYnV0KSA8PTciOyAKCQl9CgkJZWxzZQoJCXsKCQkJJHF1ZXJ5Lj0gIiBBTkQgTU9OVEgoY2FsLmRhdGVfZGVidXQpID4gNyBBTkQgTU9OVEgoY2FsLmRhdGVfZGVidXQpIDw9MTIiOyAgLy8vL0JFVFdFRU4gTk9XKCkgQU5EIChOT1coKSArIElOVEVSVkFMIDcgREFZKSI7CgkJfQoJfQoJZWxzZWlmKCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGhhc2VfZW5fY291cnMnKSA9PSAnMicpCgl7CgkJaWYoJHBhcmFtc1sncGhhc2UnXSA9PTEpCgkJewoJCQkkcXVlcnkuPSAiIEFORCBNT05USChjYWwuZGF0ZV9kZWJ1dCkgPiA3IEFORCBNT05USChjYWwuZGF0ZV9kZWJ1dCkgPD0xMiI7ICAvLy8vQkVUV0VFTiBOT1coKSBBTkQgKE5PVygpICsgSU5URVJWQUwgNyBEQVkpIjsKCQl9CgkJZWxzZQoJCXsKCQkJJHF1ZXJ5Lj0gIiBBTkQgTU9OVEgoY2FsLmRhdGVfZGVidXQpID49IDEgQU5EIE1PTlRIKGNhbC5kYXRlX2RlYnV0KSA8PTciOyAgLy8vL0JFVFdFRU4gTk9XKCkgQU5EIChOT1coKSArIElOVEVSVkFMIDcgREFZKSI7CQoJCX0KCX0KKi8KJHF1ZXJ5Lj0iIE9SREVSIEJZIGNhbC5kYXRlX2RlYnV0IEFTQyI7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJG1vaXNfY2hvaXNpLCRzYWlzb24pKTsKLy9lY2hvICRxdWVyeTsKCgokcm93YXJyYXkgPSBhcnJheSgpOwokaT0wOwppZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApCnsKCXdoaWxlKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgl7CgkJJGluZGl2cyA9ICRyb3dbJ2luZGl2cyddOwoJCSRkYXRlX2RlYnV0ID0gJHJvd1snZGF0ZV9kZWJ1dCddOwoJCSRkYXRlX2ZpbiA9ICRyb3dbJ2RhdGVfZmluJ107CgkJJGlkZXByZXV2ZSA9ICRyb3dbJ2lkZXByZXV2ZSddOwoJCSRqb3VyX2NvbXBldCA9ICRyb3dbJ2pvdXJfY29tcGV0J107CgkJJGNvZWZmaWNpZW50ID0gJHJvd1snY29lZmZpY2llbnQnXTsKCQkkY29tcGV0ID0gJHJvd1snbmFtZSddOwoJCSRvbmVyb3cgPSBuZXcgU3RkQ2xhc3MoKTsKCQkkb25lcm93LT5yb3djbGFzcyA9ICRyb3djbGFzczsKCQkkb25lcm93LT5jb21wZXQgPSAkcm93WyduYW1lJ107CgkJJG9uZXJvdy0+ZGF0ZSA9ICRyb3dbJ2RhdGVfZGVidXQnXTsKCQkkb25lcm93LT5pbmRpdnMgPSAkcm93WydpbmRpdnMnXTsKCQkgLy9vbiBkw6ljbGFyZSB1biBub3V2ZWF1IHRhYmxlYXUKCQkkcm93YXJyYXkyID0gYXJyYXkoKTsKCQlpZigkaW5kaXZzID09IDApICAgIC8vb24gZXN0IHN1ciB1bmUgY29tcMOpdGl0aW9uIHBhciDDqXF1aXBlcwoJCXsKCQkJJGkrKzsKCQkJJG9uZXJvdy0+dmFsZXVyID0gJGk7CgkJCS8vb24gcmVmYWl0IHVuZSByZXF1ZXRlIHBvdXIgZXh0cmFpcmUgbGVzIHJlbmNvbnRyZXMKCQkJJHF1ZXJ5MiA9ICJTRUxFQ1QgRElTVElOQ1QgcmVuLmlkLCByZW4uc2NvcmVhLCByZW4uc2NvcmViLCByZW4uZXF1YSwgcmVuLmVxdWIscmVuLmlkZGl2LGVxLmlkZXByZXV2ZSwgcmVuLmlkcG91bGUsZXEuZnJpZW5kbHluYW1lLHJlbi5pZCwgcmVuLmNsdWIscmVuLnVwbG9hZGVkLGVxLmxpYmVxdWlwZSxyZW4uZGF0ZV9ldmVudCxyZW4uYWZmaWNoZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wb3VsZXNfcmVuY29udHJlcyBBUyByZW4sICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19lcXVpcGVzIEFTIGVxIFdIRVJFIHJlbi5pZGRpdiA9IGVxLmlkZGl2IEFORCByZW4uaWRwb3VsZSA9IGVxLmlkcG91bGUgQU5EIHJlbi5zYWlzb24gPSBlcS5zYWlzb24gQU5EIHJlbi5jbHViID0gJzEnIEFORCByZW4uZGF0ZV9ldmVudCA9ID8gQU5EIGVxLmlkZXByZXV2ZSA9ID8iOy8vIiBBTkQgZGF0ZV9ldmVudCA+PU5vdygpIjsKCQkJJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MixhcnJheSgkZGF0ZV9kZWJ1dCwgJGlkZXByZXV2ZSkpOwoJCQkkbmJsaWduZXMgPSAkZGJyZXN1bHRhdC0+UmVjb3JkQ291bnQoKTsKCQkJLy9lY2hvICJsZSBuYiBkZSBsaWduZXMgZXN0IDogIi4kbmJsaWduZXM7CgkJCWlmKCRkYnJlc3VsdGF0ICYmICRkYnJlc3VsdGF0LT5SZWNvcmRDb3VudCgpPjApCgkJCXsKCQkJCXdoaWxlKCRyb3cyID0gJGRicmVzdWx0YXQtPkZldGNoUm93KCkpCgkJCQl7CgkJCQkJLy8kdmFsZXVyID0gJGk7CgkJCQkJJG9uZXJvdzIgPSBuZXcgU3RkQ2xhc3MoKTsKCQkJCQkkaWQgPSAkcm93MlsnaWQnXTsKCQkJCQkkZXF1YSA9ICRyb3cyWydlcXVhJ107CgkJCQkJJGVxdWIgPSAkcm93MlsnZXF1YiddOwoJCQkJCSRpZGRpdiA9ICRyb3cyWydpZGRpdiddOwoJCQkJCSRpZHBvdWxlID0gJHJvdzJbJ2lkcG91bGUnXTsKCQkJCQkkc2NvcmVhID0gJHJvdzJbJ3Njb3JlYSddOwoJCQkJCSRzY29yZWIgPSAkcm93Mlsnc2NvcmViJ107CgkJCQkJJGNsdWIgPSAkcm93MlsnY2x1YiddOwoJCQkJCSRkYXRlX2V2ZW50ID0gJHJvdzJbJ2RhdGVfZXZlbnQnXTsKCQkJCQkkYWZmaWNoZSA9ICRyb3cyWydhZmZpY2hlJ107CgkJCQkJJHVwbG9hZGVkID0gJHJvdzJbJ3VwbG9hZGVkJ107CgkJCQkJJGxpYmVxdWlwZSA9ICRyb3cyWydsaWJlcXVpcGUnXTsKCQkJCQkkZnJpZW5kbHluYW1lID0gJHJvdzJbJ2ZyaWVuZGx5bmFtZSddOwoJCQkJCSRpZGVwcmV1dmUgPSAkcm93MlsnaWRlcHJldXZlJ107CgkJCQkJCgkJCQkJaWYoJGFmZmljaGUgPT0xKQoJCQkJCXsKCQkJCQkJJG9uZXJvdzItPmRpc3BsYXk9ICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnLCAkdGhpcy0+TGFuZygnZG9fbm90X2Rpc3BsYXknKSwgJycsICcnLCAnc3lzdGVtaWNvbicpOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkb25lcm93Mi0+ZGlzcGxheT0gJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9mYWxzZS5naWYnLCAkdGhpcy0+TGFuZygnZGlzcGxheV9vbl9mcm9udGVuZCcpLCAnJywgJycsICdzeXN0ZW1pY29uJyk7CgkJCQkJfQoJCQkJCQoJCQkJCSRwYiA9IDA7CgkJCQkJCgkJCQkJaWYoJHNjb3JlYSA9PTAgJiYgJHNjb3JlYiA9PSAwKQoJCQkJCXsKCQkJCQkJJHBiID0gMTsKCQkJCQl9CgkJCQkJaWYoJHVwbG9hZGVkID09IDApIAoJCQkJCXsKCgkJCQkJIAlpZigkcGI9PTEpIAoJCQkJCQl7CgkJCQkJCQkKCQkJCQkJCWlmKCRkYXRlX2V2ZW50IDw9ICRkYXRlX2NvdXJhbnRlKQoJCQkJCQkJewoJCQkJCQkJCgkJCQkJCQkJJG9uZXJvdzItPnJldHJpZXZlX3BvdWxlX3JlbmNvbnRyZXM9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX3BvdWxlX3JlbmNvbnRyZXMnLCAkcmV0dXJuaWQsJGNvbnRlbnRzID0gJ01BSicsIGFycmF5KCdpZHBvdWxlJz0+JHJvdzJbJ2lkcG91bGUnXSwgJ2lkZGl2Jz0+JHJvdzJbJ2lkZGl2J10sICdpZGVwcmV1dmUnPT4kcm93WydpZGVwcmV1dmUnXSkpOwoJCQkJCQkJCgkJCQkJCQl9CgkJCQkJCQkKCQkJCQkJfQoJCQkJCQkKCQkJCQkJaWYoJGRhdGVfZXZlbnQgPD0gJGRhdGVfY291cmFudGUpCgkJCQkJCXsKCQkJCQkJCgkJCQkJCQkkb25lcm93Mi0+cmV0cmlldmVfZGV0YWlscyA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwncmV0cmlldmVfZGV0YWlsc19yZW5jb250cmVzMicsICRyZXR1cm5pZCwkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ltcG9ydC5naWYnLCAkdGhpcy0+TGFuZygncmV0cmlldmVhbGxwYXJ0aWVzc3BpZCcpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCdyZWNvcmRfaWQnPT4kcm93MlsnaWQnXSkpOwoJCQkJCQl9CgkJCQkJCQoJCQkJCX0KCgkJCQkJaWYoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBEZWxldGUnKSkKCQkJCQl7CgkJCQkJCSRvbmVyb3cyLT5kZWxldGVsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGUnLCAkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgncmVjb3JkX2lkJz0+JHJvdzJbJ2lkJ10sICd0eXBlX2NvbXBldCc9Pidwb3VsZXMnKSwgJHRoaXMtPkxhbmcoJ2RlbGV0ZV9jb25maXJtJykpOwoJCQkJCX0KCQkJCQlpZihpc3NldCgkZnJpZW5kbHluYW1lKSAmJiAkZnJpZW5kbHluYW1lICE9JycpCgkJCQkJewoJCQkJCQlpZiAoJGxpYmVxdWlwZSA9PSAkZXF1YSAmJiBpc3NldCgkZnJpZW5kbHluYW1lKSAmJiAkZnJpZW5kbHluYW1lICE9JycgKQoJCQkJCQl7CgkJCQkJCQkkb25lcm93Mi0+ZXF1YT0gJHJvdzJbJ2ZyaWVuZGx5bmFtZSddOwoJCQkJCQl9CgkJCQkJCQoJCQkJCQllbHNlewoJCQkJCQkJJG9uZXJvdzItPmVxdWE9ICRyb3cyWydlcXVhJ107CgkJCQkJCX0KCQkJCQkKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJJG9uZXJvdzItPmVxdWE9ICRyb3cyWydlcXVhJ107CgkJCQkJfQoJCQkJCWlmKGlzc2V0KCRmcmllbmRseW5hbWUpICYmICRmcmllbmRseW5hbWUgIT0nJykKCQkJCQl7CgkJCQkJCWlmICgkbGliZXF1aXBlID09ICRlcXViKQoJCQkJCQl7CgkJCQkJCQkkb25lcm93Mi0+ZXF1Yj0gJHJvdzJbJ2ZyaWVuZGx5bmFtZSddOwoJCQkJCQl9CgoJCQkJCQllbHNlewoJCQkJCQkJJG9uZXJvdzItPmVxdWI9ICRyb3cyWydlcXViJ107CgkJCQkJCX0KCQkJCQkKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJJG9uZXJvdzItPmVxdWI9ICRyb3cyWydlcXViJ107CgkJCQkJfQoJCQkJCSRvbmVyb3cyLT5zY29yZWEgPSAkc2NvcmVhOwoJCQkJCSRvbmVyb3cyLT5zY29yZWIgPSAkc2NvcmViOwoJCQkJCS8vJG9uZXJvdzItPnZhbGV1ciA9ICR2YWxldXI7CgkJCQkJJHJvd2FycmF5MltdID0gJG9uZXJvdzI7CgkJCQkJCgkJCQl9CgkJCQkKCQkJCSRzbWFydHktPmFzc2lnbigncHJvZHNfJy4kaSwkcm93YXJyYXkyKTsKCQkJLy8JJHNtYXJ0eS0+YXNzaWduKCdhdHRlbnRpb25faW1nJywgJzxpbWcgc3JjPSInLiAkdGhpcy0+R2V0TW9kdWxlVVJMUGF0aC4nL2ltYWdlcy93YXJuaW5nLmdpZiIgYWx0PSInLiR0aGlzLT5MYW5nKCduZXdfdG9waWNfbGFiZWwnKS4nIiB0aXRsZT0iJy4kdGhpcy0+TGFuZygnbmV3X3RvcGljX2xhYmVsJykuJyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiAvPicpOwoJCQkJdW5zZXQoJHJvd2FycmF5Mik7CgkJCS8vCXVuc2V0KCR2YWxldXIpOwoJCQl9CgkJCQoJCX0KCQllbHNlCgkJewoJCQkvL29uIGVzdCBzdXIgdW5lIGNvbXBldCBpbmRpdmlkdWVsbGUKCQkJJGRhdGVfZXZlbnQgPSAkcm93WydkYXRlX2RlYnV0J107CgkJCSRuYW1lID0gJHJvd1snbmFtZSddOwoJCQkkb25lcm93LT5kb3dubG9hZCA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwncmV0cmlldmVfaW5kaXZzJywkcmV0dXJuaWQsJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9pbXBvcnQuZ2lmJywgJHRoaXMtPkxhbmcoJ3JldHJpZXZlYWxscGFydGllc3NwaWQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgndHlwZV9jb21wZXQnPT4kcm93Wyd0eXBlX2NvbXBldCddLCdjb2VmZmljaWVudCc9Pidjb2VmZmljaWVudCcpKTsKCQkJLy8kb25lcm93LT5jb21wZXQgPSAkbmFtZTsKCQl9CgkJJHJvd2FycmF5W10gID0gJG9uZXJvdzsKCQkkc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKCQkkc21hcnR5LT5hc3NpZ24oJ2RhdGVfY291cmFudGUnLCAkZGF0ZV9jb3VyYW50ZSk7CgkJCgl9Cn0KZWxzZQp7Cgkkc21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCAnUGFzIGRlIHLDqXN1bHRhdHMnKTsKCWVjaG8gJ3BhcyBkZSByw6lzdWx0YXRzJzsKfQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3Jlc3VsdGF0cy50cGwnKTsKIwojRU9GCiMKPz4KCgoKCgoKCg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_recup_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19maWxlX18pLicvaW5jbHVkZS90cmF2YXV4LnBocCcpOwokZGIgPSYgJHRoaXMtPkdldERiKCk7Cmdsb2JhbCAkdGhlbWVPYmplY3Q7Cgokc21hcnR5LT5hc3NpZ24oJ2lkJywgJHRoaXMtPkxhbmcoJ2lkJykpOwokc21hcnR5LT5hc3NpZ24oJ3VzZXJuYW1lJywgJ0pvdWV1cicpOwokc21hcnR5LT5hc3NpZ24oJ3BvaW50cycsICdQb2ludHMnKTsKJHNhaXNvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKJG1vaXNfY291cmFudCA9IGRhdGUoJ24nKTsKJGFubmVlX2NvdXJhbnRlID0gZGF0ZSgnWScpOwovLyRtb250aCA9IG1vaXNfZnJhbmNhaXMoIiRtb2lzX2NvdXJhbnQiKTsKLy9lY2hvICJsZSBtb2lzIGVuIGZyYW7Dp2FpcyA6ICIuJG1vbnRoOwovLyRzbWFydHktPmFzc2lnbignbW9pcy1lbi1mcmFuY2FpcycsICIkbW9udGgiKTsKJHNpdF9jb3VyYW50ZSA9ICdKdWluIDIwMTQnOwokc21hcnR5LT5hc3NpZ24oJ3NpdF9jb3VyYW50ZScsICIkc2l0X2NvdXJhbnRlIik7CiRzbWFydHktPmFzc2lnbignZGlzcGxheV91bmFibGVfcGxheWVycycsIAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGlzcGxheV91bmFibGVfcGxheWVycycsICRyZXR1cm5pZCwgJ2xpc3RlIGRlcyBqb3VldXJzIGluYWN0aWZzJykpOwoKCiRkYnJlc3VsdD0gYXJyYXkgKCk7Ci8vU0VMRUNUICogRlJPTSBwaW5nX21vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgQVMgcmVjIHJpZ2h0IEpPSU4gcGluZ19tb2R1bGVfcGluZ19qb3VldXJzIEFTIGogT04gai5saWNlbmNlID0gcmVjLmxpY2VuY2UgIE9SREVSIEJZIGouaWQgQVNDCiRxdWVyeT0gIlNFTEVDVCBqLmlkLCBDT05DQVRfV1MoJyAnLGoubm9tLCBqLnByZW5vbSkgQVMgam91ZXVyLCBqLmxpY2VuY2UscmVjLm1hal9zcGlkLCByZWMubWFqX2ZmdHQsIHJlYy5zaXRfbWVucywgcmVjLmZmdHQsIHJlYy5zcGlkLHJlYy5zcGlkX3RvdGFsLCBqLmFjdGlmIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgQVMgaiBMRUZUIEpPSU4gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgQVMgcmVjIE9OIGoubGljZW5jZSA9IHJlYy5saWNlbmNlIFdIRVJFIGouYWN0aWYgPSAnMScgQU5EIChyZWMuc2Fpc29uID0gPyBPUiByZWMuc2Fpc29uIElTIE5VTEwpIE9SREVSIEJZIGpvdWV1ciBBU0MiOwoKJGRicmVzdWx0PSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkc2Fpc29uKSk7CiRyb3djbGFzcz0gJ3JvdzEnOwokcm93YXJyYXk9IGFycmF5ICgpOwppZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApCiAgewogICAgd2hpbGUgKCRyb3c9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKICAgICAgewoJJGFjdGlmID0gJHJvd1snYWN0aWYnXTsKCSRsaWNlbmNlID0gJHJvd1snbGljZW5jZSddOwoJJHNpdF9tZW5zID0gJHJvd1snc2l0X21lbnMnXTsKCSRmZnR0ID0gcGluZ19hZG1pbl9vcHM6OmNvbXB0ZV9mZnR0KCRsaWNlbmNlKTsKCSRzcGlkID0gcGluZ19hZG1pbl9vcHM6OmNvbXB0ZV9zcGlkKCRsaWNlbmNlKTsKCSRvbmVyb3c9IG5ldyBTdGRDbGFzcygpOwoJJG9uZXJvdy0+cm93Y2xhc3M9ICRyb3djbGFzczsKCSRvbmVyb3ctPmlkPSAkcm93WydpZCddOwoJJG9uZXJvdy0+am91ZXVyPSAkcm93Wydqb3VldXInXTsKCSRvbmVyb3ctPmxpY2VuY2U9ICRyb3dbJ2xpY2VuY2UnXTsKCS8vJG9uZXJvdy0+YWN0aXZlPSAoJHJvd1snYWN0aXZlJ10gPT0gMSkgPyAkdGhpcy0+TGFuZygneWVzJykgOiAnJzsKCSRvbmVyb3ctPnNpdF9tZW5zPSAkcm93WydzaXRfbWVucyddOwoJJG9uZXJvdy0+ZmZ0dD0gJGZmdHQ7CgkvLyRvbmVyb3ctPmZmdHQ9ICRyb3dbJ2ZmdHQnXTsKCSRvbmVyb3ctPm1hal9mZnR0PSAkcm93WydtYWpfZmZ0dCddOwoJLy8kb25lcm93LT5zcGlkPSAkcm93WydzcGlkJ107Cgkkb25lcm93LT5zcGlkPSAkc3BpZDsKCSRvbmVyb3ctPnNwaWRfdG90YWw9ICRyb3dbJ3NwaWRfdG90YWwnXTsKCSRvbmVyb3ctPm1hal9zcGlkPSAkcm93WydtYWpfc3BpZCddOwoJLy8kb25lcm93LT5kb2VkaXQ9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRfam91ZXVyJywgJHJldHVybmlkLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLGFycmF5KCdsaWNlbmNlJz0+JHJvd1snbGljZW5jZSddKSwgJHJvdyk7CglpZigkcm93WydhY3RpZiddID09JzEnKXsKCQkkb25lcm93LT5lZGl0bGluaz0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAndW5hYmxlX3BsYXllcicsICRyZXR1cm5pZCwgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS90cnVlLmdpZicsICR0aGlzLT5MYW5nKCd1bmFibGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLGFycmF5KCdsaWNlbmNlJz0+JHJvd1snbGljZW5jZSddKSk7Cgl9IAoJZWxzZSB7CgkJJG9uZXJvdy0+ZWRpdGxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VuYWJsZV9wbGF5ZXInLCAkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZmFsc2UuZ2lmJywgJHRoaXMtPkxhbmcoJ2VuYWJsZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksYXJyYXkoJ2xpY2VuY2UnPT4kcm93WydsaWNlbmNlJ10pKTsKCX0KCQoJaWYoJHJvd1snc2l0X21lbnMnXSA9PScnKQoJewoJCSRvbmVyb3ctPnB1c2hfcGxheWVyID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncHVzaF9wbGF5ZXInLCRyZXR1cm5pZCwgJ1LDqWN1cMOpcmVyIGxlIGpvdWV1cicsYXJyYXkoJ2xpY2VuY2UnPT4kcm93WydsaWNlbmNlJ10pKTsKCX0KCQoJJG9uZXJvdy0+Y29ycmVjdGlvbj0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkX3NpdF9tZW5zJywgJHJldHVybmlkLCAnQ29ycmlnZXInLCAgYXJyYXkoJ2xpY2VuY2UnPT4kcm93WydsaWNlbmNlJ10pKTsKCS8vJG9uZXJvdy0+ZWRpdGxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3VuYWJsZV9wbGF5ZXInLCAkcmV0dXJuaWQsICdEw6lzYWN0aXZlcicsYXJyYXkoJ2xpY2VuY2UnPT4kcm93WydsaWNlbmNlJ10pKTsKCSRvbmVyb3ctPnNpdG1lbnNsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9zaXRfbWVucycsICRyZXR1cm5pZCwgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9pbXBvcnQuZ2lmJywgJHRoaXMtPkxhbmcoJ3JldHJpZXZlX3NpdF9tZW5zJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSkuCiR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX3NpdF9tZW5zJywgJHJldHVybmlkLCAKCSAgCSR0aGlzLT5MYW5nKCdyZXRyaWV2ZV9zaXRfbWVucycpLCBhcnJheSgnbGljZW5jZSc9PiRyb3dbJ2xpY2VuY2UnXSksJHdhcm5fbWVzc2FnZT0nQXR0ZW50aW9uICEgQWNjw6hzIGxpYnJlID8nKTsKCSRvbmVyb3ctPmdldHBhcnRpZXNsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9wYXJ0aWVzJywgJHJldHVybmlkLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ltcG9ydC5naWYnLCAkdGhpcy0+TGFuZygncmV0cmlldmVfcGFydGllcycpLCAnJywgJycsICdzeXN0ZW1pY29uJykpLgokdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9wYXJ0aWVzJywgJHJldHVybmlkLCAKCSAgCSR0aGlzLT5MYW5nKCdyZXRyaWV2ZV9wYXJ0aWVzJyksIGFycmF5KCdsaWNlbmNlJz0+JHJvd1snbGljZW5jZSddKSk7Cgkkb25lcm93LT5nZXRwYXJ0aWVzc3BpZD0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfcGFydGllc19zcGlkJywgJHJldHVybmlkLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ltcG9ydC5naWYnLCAkdGhpcy0+TGFuZygncmV0cmlldmVfcGFydGllc19zcGlkJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSkuCiR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX3BhcnRpZXNfc3BpZCcsICRyZXR1cm5pZCwgCgkgIAkkdGhpcy0+TGFuZygncmV0cmlldmVfcGFydGllc19zcGlkJyksIGFycmF5KCdsaWNlbmNlJz0+JHJvd1snbGljZW5jZSddKSk7CgkvLyRvbmVyb3ctPmRlbGV0ZWxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZV9qb3VldXInLCAkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgncmVjb3JkX2lkJz0+JHJvd1snaWQnXSksICR0aGlzLT5MYW5nKCdkZWxldGVfcmVzdWx0X2NvbmZpcm0nKSk7CgkoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcz0gInJvdzIiIDogJHJvd2NsYXNzPSAicm93MSIpOwoJJHJvd2FycmF5W109ICRvbmVyb3c7CiAgICAgIH0KICB9CiRzbWFydHktPmFzc2lnbignYmFyY2hhcnRzJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdiYXJjaGFydHMnLCAkcmV0dXJuaWQsICdWb2lyIGdyYXBoaXF1ZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtc2ZvdW5kJywgJHRoaXMtPkxhbmcoJ3Jlc3VsdHNmb3VuZHRleHQnKSk7CiRzbWFydHktPmFzc2lnbignaXRlbWNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiRzbWFydHktPmFzc2lnbignaXRlbXMnLCAkcm93YXJyYXkpOwovKgokc21hcnR5LT5hc3NpZ24oJ3JldHJpZXZlX3VzZXJzJywgCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfdXNlcnMnLCAkcmV0dXJuaWQsJ1LDqWN1cMOpcmF0aW9uIGRlIHRvdXMgbGVzIGpvdWV1cnMnKSk7CiovCiRzbWFydHktPmFzc2lnbignYXR0ZW50aW9uX2ltZycsICc8aW1nIHNyYz0iLi4vbW9kdWxlcy9QaW5nL2ltYWdlcy93YXJuaW5nLmdpZiIgYWx0PSInLiR0aGlzLT5MYW5nKCdtaXNzaW5nX3NpdF9tZW5zJykuJyIgdGl0bGU9IicuJHRoaXMtPkxhbmcoJ21pc3Npbmdfc2l0X21lbnMnKS4nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIC8+Jyk7Cgokc21hcnR5LT5hc3NpZ24oJ2Zvcm0yc3RhcnQnLAoJCSR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdtYXNzX2FjdGlvbicsJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZm9ybTJlbmQnLAoJCSR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokYXJ0aWNsZXMgPSBhcnJheSgiRMOpc2FjdGl2ZXIiPT4idW5hYmxlIiwiUsOpY3Vww6lyZXIgc2l0dWF0aW9uIG1lbnN1ZWxsZSI9PiJzaXR1YXRpb24iLCAiUsOpY3Vww6lyZXIgbGVzIHBhcnRpZXMgZHUgU3BpZCI9PiJzcGlkIiwgIlLDqWN1cMOpcmVyIGxlcyBwYXJ0aWVzIEZGVFQiPT4iZmZ0dF9wYXJ0aWVzIik7CiRzbWFydHktPmFzc2lnbignYWN0aW9uZGVtYXNzZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCdhY3Rpb25kZW1hc3NlJywkYXJ0aWNsZXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXRfbWFzc2FjdGlvbicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0X21hc3NhY3Rpb24nLCR0aGlzLT5MYW5nKCdhcHBseV90b19zZWxlY3Rpb24nKSwnJywnJywkdGhpcy0+TGFuZygnYXJleW91c3VyZV9hY3Rpb25tdWx0aXBsZScpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3JlY3VwcGFydGllcy50cGwnKTsKCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_situation_mensuelle_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMgICAgICAgICAgICAgICAgICAgTCdvbmdsZXQgZGUgbGEgc2l0dWF0aW9uIG1lbnN1ZWxsZSAgICAgICAgICAgIyMjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMKIyBBdXRldXIgOiBDbGF1ZGUgU0lPSEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKJGRiID0mICR0aGlzLT5HZXREYigpOwpnbG9iYWwgJHRoZW1lT2JqZWN0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywnUGFyYW1ldGVycycpOwokbW9pc19jb3VyYW50ID0gZGF0ZSgnbicpOy8vTW9pcyBhdSBmb3JtYXQgMSwgMiwgMyBldGMuLi4uCiRtb2lzX2ZyYW5jYWlzID0gYXJyYXkoJ0phbnZpZXInLCAnRsOpdnJpZXInLCdNYXJzJywgJ0F2cmlsJywgJ01haScsICdKdWluJywgJ0p1aWxsZXQnLCdBb8O7dCcsICdTZXB0ZW1icmUnLCAnT2N0b2JyZScsJ05vdmVtYnJlJywnRMOpY2VtYnJlJyk7CiRub3cgPSB0cmltKCRkYi0+REJUaW1lU3RhbXAodGltZSgpKSwgIiciKTsKJG1vaXNfcmVlbCA9ICRtb2lzX2NvdXJhbnQgLSAxOwokbW9pc19zbSA9ICRtb2lzX2ZyYW5jYWlzWyIkbW9pc19yZWVsIl07CiRhbm5lZV9jb3VyYW50ZSA9IGRhdGUoJ1knKTsKJGpvdXIgPSBkYXRlKCdqJyk7Cgokc2Fpc29uX2NvdXJhbnRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwovL2VjaG8gImwnYW5uw6llIGNvdXJhbnRlIGVzdCA6ICIuJGFubmVlX2NvdXJhbnRlOwoKLyogb24gZmFpdCB1biBmb3JtdWxhaXJlIGRlIGZpbHRyYWdlIGRlcyByw6lzdWx0YXRzKi8KJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdhZG1pbl9zaXR1YXRpb25fbWVuc3VlbGxlX3RhYicpKTsgCiRzYWlzb25zbGlzdFskdGhpcy0+bGFuZygnYWxsc2Vhc29ucycpXSA9Jyc7Ci8vJG1vbnRoc2xpc3RbJHRoaXMtPkxhbmcoJ2FsbG1vbnRocycpXSA9ICcnOwokbW9udGhzbGlzdCA9IGFycmF5KCJUb3VzIGxlcyBtb2lzIj0+IiIsIkp1aWxsZXQiPT4iNyIsICJBb8O7dCI9PiI4Iik7CiR5ZWFyc2xpc3QgPSBhcnJheSgiMjAxNCI9PiIyMDE0Iik7CiR0b3VybGlzdFskdGhpcy0+TGFuZygnYWxsdG91cnMnKV0gPSAnJzsKJGVxdWlwZWxpc3RbJHRoaXMtPkxhbmcoJ2FsbGVxdWlwZXMnKV0gPSAnJzsKJHBsYXllcnNsaXN0WyR0aGlzLT5MYW5nKCdhbGxwbGF5ZXJzJyldID0gJyc7CiR0eXBlQ29tcGV0ID0gYXJyYXkoKTsKJHR5cGVDb21wZXRbJHRoaXMtPkxhbmcoJ2FsbGNvbXBldCcpXSA9ICcnOwoKJHF1ZXJ5ID0gIlNFTEVDVCBwdHMuaWQsIHB0cy5tb2lzICxqLmxpY2VuY2UsIENPTkNBVF9XUygnICcsai5ub20sIGoucHJlbm9tKSBBUyBwbGF5ZXIgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfc2l0X21lbnMgQVMgcHRzICAsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIEFTIGogV0hFUkUgcHRzLmxpY2VuY2UgID0gai5saWNlbmNlIEFORCBqLmFjdGlmID0gJzEnIEFORCBwdHMuc2Fpc29uID0gPyAiOy8vCgokcXVlcnkuPSIgT1JERVIgQlkgai5ub20gQVNDLHB0cy5pZCBBU0MiOwokZGJyZXN1bHRhdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHNhaXNvbl9jb3VyYW50ZSkpOwp3aGlsZSAoJGRicmVzdWx0YXQgJiYgJHJvdyA9ICRkYnJlc3VsdGF0LT5GZXRjaFJvdygpKQogIHsKICAgIAkKICAgIAkkcGxheWVyc2xpc3RbJHJvd1sncGxheWVyJ11dID0gJHJvd1snbGljZW5jZSddOwoJJG1vbnRoc2xpc3RbJHJvd1snbW9pcyddXSA9ICRyb3dbJ21vaXMnXTsKICAgIAkKICB9CgoJaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdGZpbHRlciddKSApCiAgCXsKICAgIAkJaWYoIGlzc2V0KCAkcGFyYW1zWydtb250aHNsaXN0J10pICkKICAgICAgCQl7CgkJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtb2lzQ2hvaXNpJywgJHBhcmFtc1snbW9udGhzbGlzdCddKTsKICAgICAgCQl9CgkJaWYoIGlzc2V0KCAkcGFyYW1zWydwbGF5ZXJzbGlzdCddKSApCiAgICAgIAkJewoJCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGxheWVyQ2hvaXNpJywgJHBhcmFtc1sncGxheWVyc2xpc3QnXSk7CiAgICAgIAkJfQoJfQoJCiRjdXJtb250aCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtb2lzQ2hvaXNpJyk7CiRjdXJwbGF5ZXIgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSggJ3BsYXllckNob2lzaScpOwokY3VyZXF1aXBlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoICdlcXVpcGVDaG9pc2llJyApOwoKCiRzbWFydHktPmFzc2lnbigncHJvbXB0X3RvdXInLAoJCSR0aGlzLT5MYW5nKCd0b3VyJykpOwovKgokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3RvdXInLAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwndG91cmxpc3QnLCR0b3VybGlzdCwtMSwkY3VydG91cikpOwoJCSovCiRzbWFydHktPmFzc2lnbignaW5wdXRfbW9udGgnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwnbW9udGhzbGlzdCcsJG1vbnRoc2xpc3QsLTEsJGN1cm1vbnRoKSk7CiRzbWFydHktPmFzc2lnbigncHJvbXB0X2VxdWlwZScsCgkJJHRoaXMtPkxhbmcoJ2VxdWlwZScpKTsJCi8qCQokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2NvbXBldCcsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCd0eXBlQ29tcGV0JywkdHlwZUNvbXBldCwtMSwkY3VyQ29tcGV0KSk7CiovCiRzbWFydHktPmFzc2lnbignaW5wdXRfcGxheWVyJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ3BsYXllcnNsaXN0JywkcGxheWVyc2xpc3QsLTEsJGN1cnBsYXllcikpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdGZpbHRlcicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0ZmlsdGVyJywkdGhpcy0+TGFuZygnZmlsdHJlcycpKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgoKCiRzbWFydHktPmFzc2lnbignaWQnLCAkdGhpcy0+TGFuZygnaWQnKSk7CiRzbWFydHktPmFzc2lnbigndXNlcm5hbWUnLCAnSm91ZXVyJyk7CiRzbWFydHktPmFzc2lnbigncG9pbnRzJywgJ1BvaW50cycpOwovLyRhY3Rpb24gPSAoZW1wdHkoJF9QT1NUWydhY3Rpb24nXSkpID8gJ2RlZmF1bHQnIDogJF9QT1NUWydhY3Rpb24nXTsKCi8vJG1vaXNfcHJlZiA9JHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZmF1bHRNb250aFNpdE1lbnMnLCAnNicpOwoKJG1vaXNfcHJlZiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0TW9udGhTaXRNZW5zJyk7Ci8vZWNobyAibGUgbW9pcyBwcmVmIGVzdCA6ICIuJG1vaXNfcHJlZjsKLy8kbW9pcyA9ICghZW1wdHkoJG1vaXNfcHJlZikpID8gJG1vaXNfcHJlZiA6ICRtb2lzX2NvdXJhbnQ7Ci8vZWNobyAibGUgbW9pcyByZXRlbnUgZXN0IDogIi4kbW9pczsKCiRyZXN1bHQ9IGFycmF5ICgpOwokcXVlcnkyID0gIlNFTEVDVCAqLCBzbS5zYWlzb24sIHNtLmlkLGoubGljZW5jZSxzbS5pZCxzbS5tb2lzLHNtLnBvaW50cywgc20uYW5uZWUsIENPTkNBVF9XUygnICcsIGoubm9tLCBqLnByZW5vbSkgQVMgam91ZXVyLCBzbS5wcm9nbW9pcywgc20uY2xuYXQsIHNtLnJhbmdyZWcsIHNtLnJhbmdkZXAgIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgQVMgaiBMRUZUIEpPSU4gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3NpdF9tZW5zIEFTIHNtIE9OIGoubGljZW5jZSA9IHNtLmxpY2VuY2UgV0hFUkUgai5hY3RpZiA9ICcxJyAiOy8vQU5EIChzbS5hbm5lZSA9ID8gT1Igc20uYW5uZWUgSVMgTlVMTCkgIjsKLy9Fdml0ZXIgZGUgbWV0dHJlIGRlcyBzaXR1YXRpb25zIG1lbnN1ZWxsZXMgZGVzIGFubsOpZXMgcGFzc8OpZXMKLy8kcGFybXNbJ2FubmVlJ10gPSAkYW5uZWVfY291cmFudGU7Ci8vZWNobyAkcXVlcnk7CgoJaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdGZpbHRlciddICkpCgl7CgkKCQlpZigkY3VybW9udGggIT0nJykKCQl7CgkJCQoJCQkJJHF1ZXJ5MiAuPSIgQU5EIHNtLm1vaXMgPSA/ICAgIjsKCQkJCSRwYXJtc1snbW9pcyddID0gJGN1cm1vbnRoOwoJCQkJCgkJCQoJCQkKCQkJCgkJfQoJCgkJaWYgKCRjdXJwbGF5ZXIgIT0nJykKCQl7CgkJCSRxdWVyeTIgLj0iIEFORCBqLmxpY2VuY2UgPSA/IjsKCQkJJHBhcm1zWydsaWNlbmNlJ10gPSAkY3VycGxheWVyOwoJCQoJCX0KCQkKCQkvLyRxdWVyeTIgLj0iIE9SREVSIEJZIGpvdWV1ciBBU0MiOwoJCQoJCgl9CgkKCQokcXVlcnkyLj0iICBBTkQgc20uc2Fpc29uID0gPyBPUkRFUiBCWSBqb3VldXIgQVNDLHNtLmlkIEFTQyI7CiRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uX2NvdXJhbnRlOwoKJGRicmVzdWx0PSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MiwkcGFybXMpOwovL2VjaG8gJHF1ZXJ5MjsKCglpZiAoISRkYnJlc3VsdCkKCXsKCgkJZWNobyAiRkFUQUwgU1FMIEVSUk9SOiAiLiRkYi0+RXJyb3JNc2coKS4iPGJyLz5RVUVSWTI6ICIuJGRiLT5zcWw7CgkJZWNobyAicGIgcmVxICEiOwoJCSRkZXNpZ25hdGlvbiA9ICRkYi0+RXJyb3JNc2coKTsKCQllY2hvICIkZGVzaWduYXRpb24iOwoKCX0KCgoKJHJvd2NsYXNzPSAncm93MSc7CiRyb3dhcnJheT0gYXJyYXkgKCk7CgoJaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwKQogIAl7CiAgICAJCXdoaWxlICgkcm93PSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCiAgICAgIAkJewoJCQkkb25lcm93PSBuZXcgU3RkQ2xhc3MoKTsKCQkJJG9uZXJvdy0+cm93Y2xhc3M9ICRyb3djbGFzczsKCQkJJG9uZXJvdy0+aWQ9ICRyb3dbJ2lkJ107CgkJCSRvbmVyb3ctPmxpY2VuY2U9ICRyb3dbJ2xpY2VuY2UnXTsKCQkJJG9uZXJvdy0+bW9pcz0gJHJvd1snbW9pcyddOwoJCQkkb25lcm93LT5hbm5lZT0gJHJvd1snYW5uZWUnXTsKCQkJJG9uZXJvdy0+cG9pbnRzPSAkcm93Wydwb2ludHMnXTsKCQkJJG9uZXJvdy0+Y2xuYXQ9ICRyb3dbJ2NsbmF0J107CgkJCSRvbmVyb3ctPnJhbmdyZWc9ICRyb3dbJ3JhbmdyZWcnXTsKCQkJJG9uZXJvdy0+cmFuZ2RlcD0gJHJvd1sncmFuZ2RlcCddOwoJCQkkb25lcm93LT5wcm9nbW9pcz0gJHJvd1sncHJvZ21vaXMnXTsKCQkJLy8kb25lcm93LT5lcXVpcGU9ICR0aGlzLT5jcmVhdGVMaW5rKCRpZCwgJ3ZpZXdzdGVhbXJlc3VsdCcsICRyZXR1cm5pZCwgJHJvd1snZXF1aXBlJ10sYXJyYXkoJ2VxdWlwZSc9PiRyb3dbJ2VxdWlwZSddKSwkcm93KSA7CgkJCSRvbmVyb3ctPmpvdWV1cj0gJHJvd1snam91ZXVyJ107CgkJCSRvbmVyb3ctPmVkaXRsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRfc2l0X21lbnMnLCAkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vaW1wb3J0LmdpZicsICR0aGlzLT5MYW5nKCdhZGQtbWFudWFsbHknKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLGFycmF5KCdsaWNlbmNlJz0+JHJvd1snbGljZW5jZSddKSk7CgkJCSRvbmVyb3ctPnNpdG1lbnNsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9zaXRfbWVucycsICRyZXR1cm5pZCwgJ1NpdHVhdGlvbiBtZW5zdWVsbGUnLCBhcnJheSgnbGljZW5jZSc9PiRyb3dbJ2xpY2VuY2UnXSkpOwoJCQkkb25lcm93LT5nZXRwYXJ0aWVzbGluaz0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfcGFydGllcycsICRyZXR1cm5pZCwgJ1BhcnRpZXMgZGlzcHV0w6llcycsIGFycmF5KCdsaWNlbmNlJz0+JHJvd1snbGljZW5jZSddKSk7CgkJCWlmKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgRGVsZXRlJykpCgkJCXsKCQkJCSRvbmVyb3ctPmRlbGV0ZWxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZScsICRyZXR1cm5pZCwgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCJ0eXBlX2NvbXBldCI9PiJzaXRfbWVucyIsICdyZWNvcmRfaWQnPT4kcm93WydpZCddKSwgJHRoaXMtPkxhbmcoJ2RlbGV0ZV9jb25maXJtJykpOwoJCQl9CgkJCSgkcm93Y2xhc3MgPT0gInJvdzEiID8gJHJvd2NsYXNzPSAicm93MiIgOiAkcm93Y2xhc3M9ICJyb3cxIik7CgkJCSRyb3dhcnJheVtdPSAkb25lcm93OwogICAgICAJCX0KICAJfQokc21hcnR5LT5hc3NpZ24oJ2pvdXInLCRqb3VyKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtc2ZvdW5kJywgJHRoaXMtPkxhbmcoJ3Jlc3VsdHNmb3VuZHRleHQnKSk7CiRzbWFydHktPmFzc2lnbignaXRlbWNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiRzbWFydHktPmFzc2lnbignaXRlbXMnLCAkcm93YXJyYXkpOwokc21hcnR5LT5hc3NpZ24oJ2FkZGFsbHNpdG1lbnNsaW5rJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2FkZF9hbGxfc2l0X21lbnMnLCAkcmV0dXJuaWQsICdBam91dGVyIG1hbnVlbGxlbWVudCBsZXMgc2l0dWF0aW9ucyBtZW5zdWVsbGVzJykpOwokc21hcnR5LT5hc3NpZ24oJ3JldHJpZXZlYWxsc2l0bWVucycsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdyZXRyaWV2ZV9hbGxfc2l0X21lbnMnLCAkcmV0dXJuaWQsICdBam91dGVyIGF1dG9tYXRpcXVlbWVudCBsZXMgc2l0dWF0aW9ucyBtZW5zdWVsbGVzJykpOwokc21hcnR5LT5hc3NpZ24oJ21pc3Npbmdfc2l0X21lbnMnLCAKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdtaXNzaW5nX3NpdF9tZW5zJywgJHJldHVybmlkLCAnTGVzIHNpdHVhdGlvbnMgbWFucXVhbnRlcycpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtMnN0YXJ0JywKCQkkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnbWFzc19hY3Rpb24nLCRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm0yZW5kJywKCQkkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJGFydGljbGVzID0gYXJyYXkoIkTDqXNhY3RpdmVyIj0+InVuYWJsZSIsIlLDqWN1cMOpcmVyIHNpdHVhdGlvbiBtZW5zdWVsbGUiPT4ic2l0dWF0aW9uIik7CiRzbWFydHktPmFzc2lnbignYWN0aW9uZGVtYXNzZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCdhY3Rpb25kZW1hc3NlJywkYXJ0aWNsZXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXRfbWFzc2FjdGlvbicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0X21hc3NhY3Rpb24nLCR0aGlzLT5MYW5nKCdhcHBseV90b19zZWxlY3Rpb24nKSwnJywnJywkdGhpcy0+TGFuZygnYXJleW91c3VyZV9hY3Rpb25tdWx0aXBsZScpKSk7CgkJCQkgIAoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhbGxzaXRtZW5zLnRwbCcpOwoKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_spid_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICAgICAgICAgICBTUElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLwlkZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmNhbGN1bHMucGhwJyk7CiRzYWlzb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7CgokZGIgPSYgJHRoaXMtPkdldERiKCk7Cmdsb2JhbCAkdGhlbWVPYmplY3Q7CgovKiBvbiBmYWl0IHVuIGZvcm11bGFpcmUgZGUgZmlsdHJhZ2UgZGVzIHLDqXN1bHRhdHMqLwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsICdwb3N0JywgJycsZmFsc2UsJycsYXJyYXkoJ2FjdGl2ZV90YWInPT4nc3BpZCcpKSk7Ci8vJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdhZG1pbl9zcGlkX3RhYicpKTsKJGVycm9yX29ubHkgPSAnJzsKJGRhdGVsaXN0WyR0aGlzLT5MYW5nKCdhbGx0b3VycycpXSA9ICcnOwokZXF1aXBlbGlzdFskdGhpcy0+TGFuZygnYWxsZXF1aXBlcycpXSA9ICcnOwokcGxheWVyc2xpc3RbJHRoaXMtPkxhbmcoJ2FsbHBsYXllcnMnKV0gPSAnJzsKJHR5cGVDb21wZXQgPSBhcnJheSgpOwokdHlwZUNvbXBldFskdGhpcy0+TGFuZygnYWxsY29tcGV0JyldID0gJyc7CiRxdWVyeSA9ICJTRUxFQ1QgcHRzLmVwcmV1dmUsIHB0cy5kYXRlX2V2ZW50LCBqLmxpY2VuY2UscHRzLm51bWpvdXJuICwgQ09OQ0FUX1dTKCcgJyxqLm5vbSwgai5wcmVub20pIEFTIHBsYXllciBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQgQVMgcHRzICAsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIEFTIGogV0hFUkUgcHRzLmxpY2VuY2UgID0gai5saWNlbmNlIEFORCBwdHMuc2Fpc29uID0gPyBPUkRFUiBCWSBwdHMuZGF0ZV9ldmVudCBBU0MscGxheWVyIEFTQywgcHRzLm51bWpvdXJuIEFTQyI7Ly8iIjsKLy9lY2hvICRxdWVyeTsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHNhaXNvbikpOwp3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCiAgewogICAgCSRkYXRlbGlzdFskcm93WydkYXRlX2V2ZW50J11dID0gJHJvd1snZGF0ZV9ldmVudCddOwogICAgCSRwbGF5ZXJzbGlzdFskcm93WydwbGF5ZXInXV0gPSAkcm93WydsaWNlbmNlJ107CgkkdHlwZUNvbXBldFskcm93WydlcHJldXZlJ11dID0gJHJvd1snZXByZXV2ZSddOwogIH0KCmlmKCBpc3NldCgkcGFyYW1zWydzdWJtaXRmaWx0ZXInXSkgKQogIHsKICAgIAlpZiggaXNzZXQoICRwYXJhbXNbJ2RhdGVsaXN0J10pICkKICAgICAgCXsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGF0ZUNob2lzaScsICRwYXJhbXNbJ2RhdGVsaXN0J10pOwogICAgICAJfQoJaWYoIGlzc2V0KCAkcGFyYW1zWydwbGF5ZXJzbGlzdCddKSApCiAgICAgIAl7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3BsYXllckNob2lzaScsICRwYXJhbXNbJ3BsYXllcnNsaXN0J10pOwogICAgICAJfQogICAgICAgIGlmKCBpc3NldCggJHBhcmFtc1sndHlwZUNvbXBldCddKSApCgl7IAoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlICggJ2NvbXBldENob2lzaWUnLCAkcGFyYW1zWyd0eXBlQ29tcGV0J10pOwoJfQp9CiRjdXJkYXRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoICdkYXRlQ2hvaXNpJyApOwokY3VycGxheWVyID0gJHRoaXMtPkdldFByZWZlcmVuY2UoICdwbGF5ZXJDaG9pc2knKTsKJGN1ckNvbXBldCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCAnY29tcGV0Q2hvaXNpZScpOwoKJHNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdG91cicsCgkJJHRoaXMtPkxhbmcoJ3RvdXInKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfZGF0ZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCdkYXRlbGlzdCcsJGRhdGVsaXN0LC0xLCRjdXJkYXRlKSk7CQkKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jb21wZXQnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwndHlwZUNvbXBldCcsJHR5cGVDb21wZXQsLTEsJGN1ckNvbXBldCkpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3BsYXllcicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCdwbGF5ZXJzbGlzdCcsJHBsYXllcnNsaXN0LC0xLCRjdXJwbGF5ZXIpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9lcnJvcl9vbmx5JywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsJ2Vycm9yX29ubHknLDEsMSkpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdGZpbHRlcicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0ZmlsdGVyJywkdGhpcy0+TGFuZygnZmlsdHJlcycpKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgokcmVzdWx0PSBhcnJheSAoKTsKCiRxdWVyeTIgPSAiU0VMRUNUIHNwLmlkIEFTIHJlY29yZF9pZCxDT05DQVRfV1MoJyAnLGoubm9tLCBqLnByZW5vbSkgQVMgam91ZXVyLCBzcC5kYXRlX2V2ZW50LCBzcC5lcHJldXZlLCBzcC5ub20gQVMgbmFtZSwgc3AuY2xhc3NlbWVudCwgc3AudmljdG9pcmUsIHNwLmVjYXJ0LCBzcC5jb2VmZiwgc3AucG9pbnRyZXMsIHNwLmZvcmZhaXQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBBUyBqLCAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllc19zcGlkIEFTIHNwICBXSEVSRSBqLmxpY2VuY2UgPSBzcC5saWNlbmNlIEFORCBzcC5zYWlzb24gPSA/ICI7Ly8iICBHUk9VUCBCWSBqb3VldXIsdHlwZV9jb21wZXQgT1JERVIgQlkgam91ZXVyLHR5cGVfY29tcGV0IjsKCiRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uOwoKaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdGZpbHRlciddICkpCnsKCWlmICgkY3VyZGF0ZSAhPScnKQoJewoJCSRxdWVyeTIuPSIgQU5EIHNwLmRhdGVfZXZlbnQgPSA/ICI7CgkJJHBhcm1zWydkYXRlX2V2ZW50J10gPSAkY3VyZGF0ZTsKCQkKCX0KCglpZiAoJGN1cnBsYXllciAhPScnKQoJewoJCSRxdWVyeTIuPSIgQU5EIHNwLmxpY2VuY2UgPSA/IjsKCQkkcGFybXNbJ2xpY2VuY2UnXSA9ICRjdXJwbGF5ZXI7CgkJCgl9CgkKCWlmICgkY3VyQ29tcGV0ICE9JycpCgl7CgkJJHF1ZXJ5Mi49IiBBTkQgc3AuZXByZXV2ZSA9ID8iOwoJCSRwYXJtc1snZXByZXV2ZSddID0gJGN1ckNvbXBldDsKCX0KCWlmKGlzc2V0KCRwYXJhbXNbJ2Vycm9yX29ubHknXSkgJiYgJHBhcmFtc1snZXJyb3Jfb25seSddICE9JycpCgl7CgkJJHF1ZXJ5Mi49IiBBTkQgc3AuY2xhc3NlbWVudCA9IC1zcC5lY2FydCAiOwoJfQoJJHF1ZXJ5Mi49IiBPUkRFUiBCWSBqb3VldXIgQVNDLCBzcC5kYXRlX2V2ZW50IEFTQyI7Cn0KZWxzZQp7CgkkcXVlcnkyLj0iIE9SREVSIEJZIGpvdWV1ciBBU0MsIHNwLmRhdGVfZXZlbnQgQVNDIExJTUlUIDEwMCI7Cn0KCgoKCgoKJGRicmVzdWx0Mj0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsICRwYXJtcyk7Ci8vZWNobyAkcXVlcnkyOwokcm93Y2xhc3M9ICdyb3cxJzsKJHJvd2FycmF5PSBhcnJheSAoKTsKaWYgKCRkYnJlc3VsdDIgJiYgJGRicmVzdWx0Mi0+UmVjb3JkQ291bnQoKSA+IDApCiAgewogICAgd2hpbGUgKCRyb3c9ICRkYnJlc3VsdDItPkZldGNoUm93KCkpCiAgICAgIHsKCSRvbmVyb3c9IG5ldyBTdGRDbGFzcygpOwoJJG9uZXJvdy0+cm93Y2xhc3M9ICRyb3djbGFzczsKCSRvbmVyb3ctPnJlY29yZF9pZD0gJHJvd1sncmVjb3JkX2lkJ107Cgkkb25lcm93LT5qb3VldXI9ICRyb3dbJ2pvdWV1ciddOy8vJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAndmlld191c2VyX3Jlc3VsdHMnLCAkcmV0dXJuaWQsICRyb3dbJ2pvdWV1ciddLGFycmF5KCdqb3VldXInPT4kcm93Wydqb3VldXInXSksJHJvdykgOwoJJG9uZXJvdy0+ZGF0ZV9ldmVudD0gJHJvd1snZGF0ZV9ldmVudCddOwoJJG9uZXJvdy0+ZXByZXV2ZT0gJHJvd1snZXByZXV2ZSddOwoJJG9uZXJvdy0+bmFtZT0gJHJvd1snbmFtZSddOwoJJG9uZXJvdy0+Y2xhc3NlbWVudD0gJHJvd1snY2xhc3NlbWVudCddOwoJJG9uZXJvdy0+dmljdG9pcmU9ICRyb3dbJ3ZpY3RvaXJlJ107Cgkkb25lcm93LT5lY2FydD0gJHJvd1snZWNhcnQnXTsKCSRvbmVyb3ctPmNvZWZmPSAkcm93Wydjb2VmZiddOwoJJG9uZXJvdy0+cG9pbnRyZXM9ICRyb3dbJ3BvaW50cmVzJ107Cgkkb25lcm93LT5mb3JmYWl0PSAkcm93Wydmb3JmYWl0J107Cgkkb25lcm93LT5lZGl0bGluaz0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdF9wbGF5ZXJfcmVzdWx0cycsICRyZXR1cm5pZCwgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsICR0aGlzLT5MYW5nKCdlZGl0JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3JlY29yZF9pZCc9PiRyb3dbJ3JlY29yZF9pZCddKSk7Cgkkb25lcm93LT5kdXBsaWNhdGVsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkb19lZGl0X3Jlc3VsdCcsICRyZXR1cm5pZCwgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9jb3B5LmdpZicsICR0aGlzLT5MYW5nKCdkdXBsaWNhdGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgncmVjb3JkX2lkJz0+JHJvd1sncmVjb3JkX2lkJ10sICdkdXBsaWNhdGUnPT4nMScpKTsKCQoJaWYoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBEZWxldGUnKSkKCXsKCQkkb25lcm93LT5kZWxldGVsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGUnLCAkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgncmVjb3JkX2lkJz0+JHJvd1sncmVjb3JkX2lkJ10sICJ0eXBlX2NvbXBldCI9PiJzcGlkIiksICR0aGlzLT5MYW5nKCdkZWxldGVfY29uZmlybScpKTsKCX0KCQoJKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3M9ICJyb3cyIiA6ICRyb3djbGFzcz0gInJvdzEiKTsKCSRyb3dhcnJheVtdPSAkb25lcm93OwogICAgICB9CiAgfQovKiovCiRzbWFydHktPmFzc2lnbignY3Jvbl9zcGlkX2ZmdHQnLCAKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdjcm9uX3NwaWRfZmZ0dCcsICRyZXR1cm5pZCwgJ1bDqXJpZiBTcGlkIDwtPiBGRlRUJykpOwokc21hcnR5LT5hc3NpZ24oJ3ZlcmlmX3NwaWRfZmZ0dCcsIAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3ZlcmlmX3NwaWRfZmZ0dCcsICRyZXR1cm5pZCwgJ1bDqXJpZiBTcGlkIDwtPiBGRlRUJykpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zZm91bmQnLCAkdGhpcy0+TGFuZygncmVzdWx0c2ZvdW5kdGV4dCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRyb3dhcnJheSk7Ci8qCiRzbWFydHktPmFzc2lnbignY3JlYXRlbGluaycsIAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2NyZWF0ZV9uZXdfdXNlcjMnLCAkcmV0dXJuaWQsCgkJCQkgICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdhZGRuZXdzaGVldCcpLCAnJywgJycsICdzeXN0ZW1pY29uJykpLgoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2NyZWF0ZV9uZXdfdXNlcjMnLCAkcmV0dXJuaWQsIAoJCQkJICAkdGhpcy0+TGFuZygnYWRkbmV3c2hlZXQnKSwgCgkJCQkgIGFycmF5KCkpKTsKCiRzbWFydHktPmFzc2lnbigncmV0cmlldmVfYWxsJywgCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfYWxsX3BhcnRpZXNfc3BpZCcsICRyZXR1cm5pZCwKCQkJCSR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdsb25nX2ltcG9ydCcpLCAnJywgJycsICdzeXN0ZW1pY29uJykpLgoJCQkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfYWxsX3BhcnRpZXNfc3BpZCcsICRyZXR1cm5pZCwgCgkJCQkJCQkJICAkdGhpcy0+TGFuZygncmV0cmlldmVhbGxwYXJ0aWVzc3BpZCcpLCAKCQkJCQkJCQkgIGFycmF5KCkpKTsKKi8KJHNtYXJ0eS0+YXNzaWduKCdmb3JtMnN0YXJ0JywKCQkkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnbWFzc19hY3Rpb24nLCRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm0yZW5kJywKCQkkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJGFydGljbGVzID0gYXJyYXkoIk1ldHRyZSBsZSBDb2VmZiDDoCAwLDUiPT4iY29lZmYwNSIsIk1ldHRyZSBsZSBDb2VmZiDDoCAwLDc1Ij0+ImNvZWZmMDc1IiwiTWV0dHJlIGxlIENvZWZmIMOgIDEiPT4iY29lZmYxIiwiTWV0dHJlIGxlIENvZWZmIMOgIDEsMjUiPT4iY29lZmYxMjUiLCJNZXR0cmUgbGUgQ29lZmYgw6AgMSw1Ij0+ImNvZWZmMTUiLCAiUsOpY3Vww6lyZXIgc2l0dWF0aW9uIG1lbnN1ZWxsZSI9PiJzaXR1YXRpb24iLCJTdXBwcmltZXIiPT4ic3VwcF9zcGlkIik7Cgokc21hcnR5LT5hc3NpZ24oJ2FjdGlvbmRlbWFzc2UnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwnYWN0aW9uZGVtYXNzZScsJGFydGljbGVzKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0X21hc3NhY3Rpb24nLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3N1Ym1pdF9tYXNzYWN0aW9uJywkdGhpcy0+TGFuZygnYXBwbHlfdG9fc2VsZWN0aW9uJyksJycsJycsJHRoaXMtPkxhbmcoJ2FyZXlvdXN1cmVfYWN0aW9ubXVsdGlwbGUnKSkpOwoKCQkJCi8vZmFpcmUgYXBwYXJhaXRyZSBsZXMgcG9pbnRzIHRvdGF1eCBldCBzb21tZSB2aWN0b2lyZSBlbiBiYXMgPyBDZSBzZXJhaXQgcGFzIG1hbAovKiovCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnc3BpZC50cGwnKTsKCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_teams_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgVXNlJykpCnsKCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ25lZWRwZXJtaXNzaW9uJykpOwoJcmV0dXJuOwp9CgpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3ByZWZzLnBocCcpOwokZGIgPSYgJHRoaXMtPkdldERiKCk7Cmdsb2JhbCAkdGhlbWVPYmplY3Q7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwokc2Fpc29uX2NvdXJhbnRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwokcGhhc2VfY291cmFudGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGhhc2VfZW5fY291cnMnKTsKJHBoYXNlID0gKGlzc2V0KCRwYXJhbXNbJ3BoYXNlJ10pKT8kcGFyYW1zWydwaGFzZSddOiRwaGFzZV9jb3VyYW50ZTsKJHNtYXJ0eS0+YXNzaWduKCdwaGFzZTInLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsICdQaGFzZSAyJywgYXJyYXkoImFjdGl2ZV90YWIiPT4iZXF1aXBlcyIsInBoYXNlIj0+IjIiKSApKTsKJHNtYXJ0eS0+YXNzaWduKCdwaGFzZTEnLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsICdQaGFzZSAxJywgYXJyYXkoImFjdGl2ZV90YWIiPT4iZXF1aXBlcyIsInBoYXNlIj0+IjEiKSApKTsKLy9sYSByZXF1ZXRlCiRzbWFydHktPmFzc2lnbignaWQnLCAkdGhpcy0+TGFuZygnaWQnKSk7CiRzbWFydHktPmFzc2lnbignZXF1aXBlJywgJ0VxdWlwZXMnKTsKJHNtYXJ0eS0+YXNzaWduKCd0b3VyJywgJ1RvdXInKTsKJHNtYXJ0eS0+YXNzaWduKCdzY29yZScsICdTY29yZScpOwokc21hcnR5LT5hc3NpZ24oJ2FkdmVyc2FpcmVzJywgJ0FkdmVyc2FpcmVzJyk7CgokcmVzdWx0PSBhcnJheSAoKTsKJHF1ZXJ5ID0gIlNFTEVDVCBESVNUSU5DVCAqLCBlcS5pZCxjb21wLm5hbWUsIGNvbXAuY29kZV9jb21wZXQsIGVxLnRhZyBhcyB0YWdfZXF1aXBlIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgQVMgZXEsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyBBUyBjb21wIFdIRVJFIGVxLnNhaXNvbiA9ID8gQU5EIGNvbXAuaWRlcHJldXZlID0gZXEuaWRlcHJldXZlIjsKaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJykgPT0nMScgKQp7CglpZigkcGhhc2UgPT0yKQoJewoJCSRxdWVyeS49ICIgQU5EIGVxLnBoYXNlPTIiOyAKCX0KCWVsc2UKCXsKCQkkcXVlcnkuPSAiIEFORCBlcS5waGFzZT0xIjsgIC8vLy9CRVRXRUVOIE5PVygpIEFORCAoTk9XKCkgKyBJTlRFUlZBTCA3IERBWSkiOwoJfQp9CmVsc2VpZiggJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJykgPT0gJzInKQp7CglpZigkcGhhc2UgPT0xKQoJewoJCSRxdWVyeS49ICIgQU5EIGVxLnBoYXNlPTEiOyAgLy8vL0JFVFdFRU4gTk9XKCkgQU5EIChOT1coKSArIElOVEVSVkFMIDcgREFZKSI7Cgl9CgllbHNlCgl7CgkJJHF1ZXJ5Lj0gIiBBTkQgZXEucGhhc2U9MiI7ICAvLy8vQkVUV0VFTiBOT1coKSBBTkQgKE5PVygpICsgSU5URVJWQUwgNyBEQVkpIjsJCgl9Cn0KCSRxdWVyeSAuPSIgT1JERVIgQlkgZXEuaWQgQVNDIjsKCS8vZWNobyAkcXVlcnk7CgkkZGJyZXN1bHQ9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHNhaXNvbl9jb3VyYW50ZSkpOwoJJGNhbGVuZGFySW1hZ2UgPSAiPGltZyB0aXRsZT1cIlLDqWN1cMOpcmVyIGxlIGNhbGVuZHJpZXJcIiBzcmM9XCJ7JG1vZHVsZV9kaXJ9L2ltYWdlcy9jYWxlbmRyaWVyLmpwZ1wiIGNsYXNzPVwic3lzdGVtaWNvblwiIGFsdD1cIlLDqWN1cMOpcmVyIGxlIGNhbGVuZHJpZXJcIiAvPiI7CgkkcG9kaXVtSW1hZ2UgPSAiPGltZyB0aXRsZT1cIlLDqWN1cMOpcmVyIGxlIGNsYXNzZW1lbnQgZGUgbGEgcG91bGVcIiBzcmM9XCJ7JG1vZHVsZV9kaXJ9L2ltYWdlcy9wb2RpdW0uanBnXCIgY2xhc3M9XCJzeXN0ZW1pY29uXCIgd2lkdGg9XCIxNlwiIGhlaWdodCA9XCIxMlwiIGFsdD1cIlLDqWN1cMOpcmVyIGxlIGNsYXNzZW1lbnRcIiAvPiI7CgkvL2VjaG8gJHF1ZXJ5OwoJJHJvd2FycmF5PSBhcnJheSAoKTsKCQoJCWlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkKICAJCXsKICAgIAkJCXdoaWxlICgkcm93PSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCiAgICAgIAkJCXsKCQkJCSRvbmVyb3c9IG5ldyBTdGRDbGFzcygpOwoJCQkJJG9uZXJvdy0+cm93Y2xhc3M9ICRyb3djbGFzczsKCQkJCSRjb2RlID0gJHJvd1snY29kZV9jb21wZXQnXTsKCQkJCSRvbmVyb3ctPmlkPSAkcm93WydpZCddOwoJCQkJJG9uZXJvdy0+aWRwb3VsZSA9ICRyb3dbJ2lkcG91bGUnXTsKCQkJCSRvbmVyb3ctPmlkZGl2ID0gJHJvd1snaWRkaXYnXTsKCQkJCS8vJG9uZXJvdy0+ZXF1aXBlPSAkcm93WydlcXVpcGUnXTsKCQkJCSRvbmVyb3ctPmxpYmVxdWlwZT0gICRyb3dbJ2xpYmVxdWlwZSddOwoJCQkJJG9uZXJvdy0+bGliZGl2aXNpb249ICRyb3dbJ2xpYmRpdmlzaW9uJ107CgkJCQkkb25lcm93LT5mcmllbmRseW5hbWU9ICRyb3dbJ2ZyaWVuZGx5bmFtZSddOwoJCQkJJG9uZXJvdy0+bmFtZT0gJHJvd1snbmFtZSddOwoJCQkJJG9uZXJvdy0+dHlwZV9jb21wZXQgPSAkcm93Wydjb2RlX2NvbXBldCddOwoJCQkJJG9uZXJvdy0+dGFnID0gJHJvd1sndGFnX2VxdWlwZSddOwoJCQkJLy8kb25lcm93LT52aWV3PSAkdGhpcy0+Y3JlYXRlTGluaygkaWQsICd2aWV3dGVhbXJlc3VsdCcsICRyZXR1cm5pZCwgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS92aWV3LmdpZicsICR0aGlzLT5MYW5nKCdkb3dubG9hZF9wb3VsZV9yZXN1bHRzJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSxhcnJheSgnY2xlJz0+JHJvd1snY2xlJ10pKSA7CgkJCQkKCQkJCSRvbmVyb3ctPmVkaXRsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0X3RlYW0nLCAkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCAkdGhpcy0+TGFuZygnZWRpdCcpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCdyZWNvcmRfaWQnPT4kcm93WydpZCddKSk7CgkJCQkkb25lcm93LT5hZGRuZXdsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdF90ZWFtJywkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdhZGRtYW51YWxseScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCdyZWNvcmRfaWQnPT4kcm93WydpZCddKSk7CgkJCQkKCQkJCWlmKCRjb2RlICE9ICdVJykKCQkJCXsKCQkJCQkvLyRjYWxlbmRyaWVyaW1hZ2UgPSAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2NhbGVuZHJpZXIuanBnJywgJHRoaXMtPkxhbmcoJ2Rvd25sb2FkX3BvdWxlX3Jlc3VsdHMnKSwnJywnJywnc3lzdGVtaWNvbicpOwoJCQkJCSRvbmVyb3ctPnJldHJpZXZlX3BvdWxlX3JlbmNvbnRyZXM9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX3BvdWxlX3JlbmNvbnRyZXMnLCRyZXR1cm5pZCwkY2FsZW5kYXJJbWFnZSwgYXJyYXkoJ2lkcG91bGUnPT4kcm93WydpZHBvdWxlJ10sICdpZGRpdic9PiRyb3dbJ2lkZGl2J10sICdpZGVwcmV1dmUnPT4kcm93WydpZGVwcmV1dmUnXSkpOwoJCQkJCSRvbmVyb3ctPmNsYXNzZW1lbnQgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdnZXRQb3VsZUNsYXNzZW1lbnQnLCRyZXR1cm5pZCwkcG9kaXVtSW1hZ2UsIGFycmF5KCJpZGRpdiI9PiRyb3dbJ2lkZGl2J10sICJpZHBvdWxlIj0+JHJvd1snaWRwb3VsZSddLCAicmVjb3JkX2lkIj0+JHJvd1snaWQnXSwgInR5cGVfY29tcGV0Ij0+JHJvd1snY29kZV9jb21wZXQnXSkpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSRvbmVyb3ctPmVkaXRsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0X3RlYW0nLCAkcmV0dXJuaWQsJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS93YXJuaW5nLmdpZicsICR0aGlzLT5MYW5nKCdlZGl0JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3JlY29yZF9pZCc9PiRyb3dbJ2lkJ10pKTsKCQkJCX0KCQkJCQoJCQkJaWYoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBEZWxldGUnKSkKCQkJCXsKCQkJCQkkb25lcm93LT5kZWxldGVsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGUnLCAkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgncmVjb3JkX2lkJz0+JHJvd1snaWQnXSwgJ3R5cGVfY29tcGV0Jz0+J3RlYW1zJyksICR0aGlzLT5MYW5nKCdkZWxldGVfY29uZmlybScpKTsKCQkJCX0KCQkJCQoJCQkJKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3M9ICJyb3cyIiA6ICRyb3djbGFzcz0gInJvdzEiKTsKCQkJCSRyb3dhcnJheVtdPSAkb25lcm93OwogICAgICAJCQl9CiAgCQl9CgoJCSRzbWFydHktPmFzc2lnbignaXRlbXNmb3VuZCcsICR0aGlzLT5MYW5nKCdyZXN1bHRzZm91bmR0ZXh0JykpOwoJCSRzbWFydHktPmFzc2lnbignaXRlbWNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRyb3dhcnJheSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdyZXRyaWV2ZV90ZWFtcycsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfdGVhbXMnLCAkcmV0dXJuaWQsICRjb250ZW50cyA9ICJFcXVpcGVzIG1hc2N1bGluZXMiLCBhcnJheSgndHlwZSc9PidNJykpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ3JldHJpZXZlX3RlYW1zX2ZlbScsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfdGVhbXMnLCAkcmV0dXJuaWQsICRjb250ZW50cyA9ICJFcXVpcGVzIGbDqW1pbmluZXMiLCBhcnJheSgndHlwZSc9PidGJykpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ3JldHJpZXZlX3RlYW1zX2F1dHJlcycsCgkJCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV90ZWFtcycsICRyZXR1cm5pZCwgJGNvbnRlbnRzID0gIkF1dHJlcyDDqXF1aXBlcyIpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ2VkaXRfdGVhbScsCgkJCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0X3RlYW0nLCRyZXR1cm5pZCwgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywgJHRoaXMtPkxhbmcoJ2FkZCcpLCAnJywgJycsICdzeXN0ZW1pY29uJykpLiR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRfdGVhbScsICRyZXR1cm5pZCwgCgkJCQkJCQkJICAkdGhpcy0+TGFuZygnYWRkbWFudWFsbHknKSwgCgkJCQkJCQkJICBhcnJheSgpKSk7CgoKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgndGVhbXNjb3Jlcy50cGwnKTsKCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.bar-charts2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7Ci8vcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19maWxlX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19maWxlX18pLicvZnVuY3Rpb24uY2FsY3Vscy5waHAnKTsKJHNhaXNvbiA9IChpc3NldCgkcGFyYW1zWydzYWlzb24nXSkgJiYgJHBhcmFtc1snc2Fpc29uJ10gIT0gJycpID8gJHBhcmFtc1snc2Fpc29uJ106ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKLy9lY2hvICdsYSBzYWlzb24gZXN0IDogJy4kc2Fpc29uX2NvdXJhbnRlOwokbGljZW5jZSA9IChpc3NldCgkcGFyYW1zWydsaWNlbmNlJ10pICYmICRwYXJhbXNbJ2xpY2VuY2UnXSAhPSAnJykgPyAkcGFyYW1zWydsaWNlbmNlJ106ICc1MzEwODA5JzsvLyc1MzEwODA5JzsKLyoKQ3LDqWF0aW9uIGQndW4gbGllbiBlbiBmcm9udGVuZAoqLwokc21hcnR5LT5hc3NpZ24oJ2xpZW5zYWlzb24yJywKCQkkdGhpcy0+Q3JlYXRlRnJvbnRlbmRMaW5rKCRpZCwkcmV0dXJuaWQsJ2Jhci1jaGFydHMyJywgJGNvbnRlbnRzID0gJ1NhaXNvbiAyMDE0LTIwMTUnLCBhcnJheSgnc2Fpc29uJz0+JzIwMTQtMjAxNScsICdsaWNlbmNlJz0+JGxpY2VuY2UpKSk7CiRzbWFydHktPmFzc2lnbignbGllbnNhaXNvbicsCgkJJHRoaXMtPkNyZWF0ZUZyb250ZW5kTGluaygkaWQsJHJldHVybmlkLCdiYXItY2hhcnRzMicsICRjb250ZW50cyA9ICdTYWlzb24gMjAxMy0yMDE0JywgYXJyYXkoJ3NhaXNvbic9PicyMDEzLTIwMTQnLCAnbGljZW5jZSc9PiRsaWNlbmNlKSkpOwokZGIgPSYgJHRoaXMtPkdldERiKCk7Cmdsb2JhbCAkdGhlbWVPYmplY3Q7CgovL29uIGNvbnN0cnVpdCB1biBmb3JtdWxhaXJlIHBvdXIgdHJhbnNpdGVyIGQndW4gam91ZXVyIGwnYXV0cmUKLyogb24gZmFpdCB1biBmb3JtdWxhaXJlIGRlIGZpbHRyYWdlIGRlcyByw6lzdWx0YXRzKi8KJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdiYXItY2hhcnRzMicpKTsgCiRwbGF5ZXJzbGlzdFskdGhpcy0+TGFuZygnYWxscGxheWVycycpXSA9ICcnOwokcXVlcnkgPSAiU0VMRUNUICogLGxpY2VuY2UsIENPTkNBVF9XUygnICcsbm9tLCBwcmVub20pIEFTIHBsYXllciBGUk9NICAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBPUkRFUiBCWSBub20gQVNDIjsvLyIiOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQogIHsKICAgIAogICAgJHBsYXllcnNsaXN0WyRyb3dbJ3BsYXllciddXSA9ICRyb3dbJ2xpY2VuY2UnXTsKICB9CgppZiggaXNzZXQoJHBhcmFtc1snc3VibWl0ZmlsdGVyJ10pICkKICB7CiAgICAJCglpZiggaXNzZXQoICRwYXJhbXNbJ3BsYXllcnNsaXN0J10pICkKICAgICAgCXsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwbGF5ZXJDaG9pc2knLCAkcGFyYW1zWydwbGF5ZXJzbGlzdCddKTsKICAgICAgCX0KCn0KJGN1cnBsYXllciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCAncGxheWVyQ2hvaXNpJyk7CgkJCQkKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9wbGF5ZXInLAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwncGxheWVyc2xpc3QnLCRwbGF5ZXJzbGlzdCwtMSwkY3VycGxheWVyKSk7CgkJCiRzbWFydHktPmFzc2lnbignc3VibWl0ZmlsdGVyJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXRmaWx0ZXInLCR0aGlzLT5MYW5nKCdmaWx0cmVzJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCgovL2ZpbiBkdSBmb3JtdWxhaXJlIGRlIHRyYW5zaXRpb24gZW50cmUgbGVzIGpvdWV1cnMKJHNtYXJ0eS0+YXNzaWduKCdMYWJlbF92aWN0b2lyZXMnLCAnVmljdG9pcmVzJyk7CiRzbWFydHktPmFzc2lnbignTGFiZWxfZGVmYWl0ZScsICdEw6lmYWl0ZXMnKTsKCi8qKi8KJHJlc3VsdCA9IGFycmF5KCk7CiRxdWVyeTIgPSAiU0VMRUNUIENPTkNBVF9XUygnICcsIGoubm9tLCBqLnByZW5vbSkgQVMgam91ZXVyLHAubGljZW5jZSxTVU0ocC5wb2ludHJlcykgYXMgc3VtcG9pbnRzLGNvdW50KHAudmljdG9pcmUpIC0gU1VNKHAudmljdG9pcmUpIEFTIGRlZmFpdGVzLCBTVU0ocC52aWN0b2lyZSkgQVMgdmljdG9pcmVzLGNvdW50KHAudmljdG9pcmUpIEFTIG1hdGNocywgTU9OVEgocC5kYXRlX2V2ZW50KSBBUyBtb2lzIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCBBUyBwLCAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBBUyBqIFdIRVJFIGoubGljZW5jZSA9IHAubGljZW5jZSBBTkQgcC5zYWlzb24gPSA/IEFORCBwLmxpY2VuY2UgPSA/ICI7Ly9HUk9VUCBCWSBtb2lzIE9SREVSIEJZIFlFQVIocC5kYXRlX2V2ZW50KSBBU0MsbW9pcyI7CiRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uOwovLyRxdWVyeSA9ICJTRUxFQ1QgU1VNKHZkKSBBUyB2aWN0b2lyZXMsIGNvdW50KHZkKSBBUyB0b3RhbCwgY291bnQodmQpIC0gU1VNKHZkKSBBUyBkZWZhaXRlcyAgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyBXSEVSRSBzYWlzb24gPSA/IjsKCglpZiggaXNzZXQoJHBhcmFtc1snc3VibWl0ZmlsdGVyJ10gKSl7CgoJCWlmICgkY3VycGxheWVyICE9JycpCgkJewoJCQkkcXVlcnkyIC49IiBBTkQgai5saWNlbmNlID0gPyI7CgkJCSRsaWNlbmNlID0gJGN1cnBsYXllcjsJCQoJCX0KCX0KJHF1ZXJ5MiAuPSIgR1JPVVAgQlkgbW9pcyBPUkRFUiBCWSBZRUFSKHAuZGF0ZV9ldmVudCkgQVNDLG1vaXMiOwoKCiRkYnJlc3VsdD0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsYXJyYXkoJHNhaXNvbiwkbGljZW5jZSkpOwovL2VjaG8gJHF1ZXJ5MjsKLy8kZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkc2Fpc29uX2NvdXJhbnRlLCAkbGljZW5jZSkpOwovLyRpdGVyYXRpb24gPSAkZGItPlJlY29yZENvdW50KCk7CiRzbWFydHktPmFzc2lnbignaXRlcmF0aW9uJywgJGl0ZXJhdGlvbik7Cgokcm93Y2xhc3M9ICdyb3cxJzsKJHJvd2FycmF5PSBhcnJheSgpOwokb3V0cHV0ID0gYXJyYXkoKTsKJGkgPSAwOwoJaWYoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKT4wKQoJewoJCXdoaWxlKCRyb3c9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQl7CgkJCSRpKys7CgkJCSR2aWN0b2lyZXNbXSA9ICRyb3dbJ21vaXMnXTsKCQkJJHN1bXBvaW50c1tdID0gJHJvd1snc3VtcG9pbnRzJ107CgkJCS8vJHRlbXAxW10gPSAiIi4kcm93Wyd2aWN0b2lyZXMnXS4iIjsKCQkJLy8kdGVtcDJbXSA9ICIiLiRyb3dbJ3N1bXBvaW50cyddLiIiOwoKCQkJCgkJfQoJCSRvdXRwdXRbXSA9IGFycmF5KCR2aWN0b2lyZXMsJHN1bXBvaW50cyk7CgkJLy8kb3V0cHV0X3BvaW50c1tdID0gJHN1bXBvaW50czsKCQkvL2VjaG8gIjxwcmU+JG91dHB1dF9wb2ludHM8L3ByZT4iOwoJCSRvdXRwdXRTdHJpbmcgPSBqc29uX2VuY29kZSgkb3V0cHV0KTsKCQkvLyRvdXRwdXRQb2ludHNTdHJpbmcgPSBqc29uX2VuY29kZSgkb3V0cHV0X3BvaW50cyk7CgkJZWNobyAiPHByZT4kb3V0cHV0UG9pbnRzU3RyaW5nPC9wcmU+IjsKCQkKCX0KCi8vJGpzb24gPSBqc29uX2VuY29kZSgkcmVzdWx0cywgSlNPTl9QUkVUVFlfUFJJTlQpOwoKLyoqLwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKLy8kZGF0YWRvbm5lZXMgPSBhcnJheSgnVmljdG9pcmVzJz0+JzEyJywgJ1RvdGFsJz0+JzE2Jyk7CiRzbWFydHktPmFzc2lnbigncGxheWVyJywgJHBsYXllcik7Ci8vJHNtYXJ0eS0+YXNzaWduKCdkb25uZWVzJywgYXJyYXkoJ1ZpY3RvaXJlcyc9PicxMicsICdUb3RhbCc9PicxMicpKTsKJHNtYXJ0eS0+YXNzaWduKCdkYXRhZG9ubmVlcycsICRvdXRwdXRTdHJpbmcpOwovLyRzbWFydHktPmFzc2lnbigncG9pbnRzJywgJG91dHB1dFBvaW50c1N0cmluZyk7Ci8vZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdwaWUtY2hhcnRzLnRwbCcpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Jhci1jaGFydHMyLnRwbCcpOwoKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.classement_equipes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCggJGdDbXMoKSApIGV4aXQ7CnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2luY2x1ZGUvcHJlZnMucGhwJyk7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CiRzYWlzb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7CiRyZWNvcmRfaWQgPSAnJzsKJHF1ZXJ5ID0gIlNFTEVDVCBjbC5pZGVxdWlwZSxlcS5mcmllbmRseW5hbWUsZXEubGliZXF1aXBlLGNsLnBvdWxlLGNsLmNsdCxjbC5lcXVpcGUsY2wuam91ZSxjbC5wdHMgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2xhc3NlbWVudCBBUyBjbCwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgQVMgZXEgV0hFUkUgZXEuaWQgPSBjbC5pZGVxdWlwZSBBTkQgY2wuc2Fpc29uID0gPyI7CiRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uOwovL2VuIHBhcmFtZXRyZXMgcG9zc2libGVzIDogCiNsZSBjaGFtcGlvbm5hdCByZWNoZXJjaMOpIG91IG5vbgojdW5lIGVxdWlwZSBwcsOpY2lzZSBvdSBub24KCglpZihpc3NldCgkcGFyYW1zWydyZWNvcmRfaWQnXSkgJiYgJHBhcmFtc1sncmVjb3JkX2lkJ10gIT0nJykKCXsKCQkJCgkJJHF1ZXJ5Lj0iIEFORCBjbC5pZGVxdWlwZSA9ID8iOwoJCSRwYXJhbXNbJ3JlY29yZF9pZCddID0gJHBhcm1zWydpZGVxdWlwZSddOwoJCgl9CgovL29uIGFvcmRvbm5lIGxhIHRhYmxlCiRxdWVyeS49ICIgT1JERVIgQlkgY2wuaWQgQVNDIjsKCgovL29uIGVmZmVjdHVlIGxhIHJlcXVldGUKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwkcGFybXMpOwplY2hvICRxdWVyeTsKJHJvd2FycmF5ID0gYXJyYXkoKTsKaWYoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKT4wKQp7Cgl3aGlsZSgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJewoJCSRvbmVyb3cgPSBuZXcgU3RkQ2xhc3MoKTsKCQkkb25lcm93LT5yb3djbGFzcyA9ICRyb3djbGFzczsKCQkkb25lcm93LT5mcmllbmRseW5hbWUgPSAkcm93WydmcmllbmRseW5hbWUnXTsKCQkkb25lcm93LT5saWJlcXVpcGUgPSAkcm93WydsaWJlcXVpcGUnXTsKCQkkb25lcm93LT5jbHQgPSAkcm93WydjbHQnXTsKCQkkb25lcm93LT5lcXVpcGUgPSAkcm93WydlcXVpcGUnXTsJCQoJCSRyb3dhcnJheVtdICA9ICRvbmVyb3c7CgkJCQoJfQoKfQplbHNlCnsKCWVjaG8gJ1BhcyBkZSByw6lzdWx0YXRzJzsKfQokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnY2xhc3NlbWVudC50cGwnKTsKIwojRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.cron_retrieve_all_parties.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy9pZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5jYWxjdWxzLnBocCcpOwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3ByZWZzLnBocCcpOwokc2Fpc29uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwokbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CiRxdWVyeSA9ICJTRUxFQ1QgbGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZWN1cF9wYXJ0aWVzIFdIRVJFIG1hal9mZnR0IDwgTk9XKCktSU5URVJWQUwgMyBEQVkgQU5EIHNhaXNvbiA9ID8gT1JERVIgQlkgbWFqX2ZmdHQgREVTQyBMSU1JVCAyNSAiOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkc2Fpc29uKSk7Ci8vb24gYSBkb25jIGxlcyBuIGxpY2VuY2VzIHBvdXIgZmFpcmUgbGEgZGV1eGnDqG1lIHJlcXVldGUKLy9vbiBjb21tZW5jZSDDoCBib3VjbGVyCgokcm93Y2xhc3M9ICdyb3cxJzsKJHJvd2FycmF5PSBhcnJheSAoKTsKCgppZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApCiAgewogIC8vIG9uIGluc3RhbmNpZSBsYSBjbGFzc2UgCgogICAgd2hpbGUgKCRyb3c9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKICAgICAgewoJJHNlcnZpY2UgPSBuZXcgU2VydmljZSgpOwoJJGxpY2VuY2UgPSAkcm93WydsaWNlbmNlJ107Cgkkam91ZXVyID0gJHJvd1snam91ZXVyJ107CiAgICAgCi8qKi8KCSRyZXN1bHQgPSAkc2VydmljZS0+Z2V0Sm91ZXVyUGFydGllcygiJGxpY2VuY2UiKTsKCSRpID0gMDsKCSRjb21wdGFnZSA9IDA7CgkJZm9yZWFjaCgkcmVzdWx0IGFzICRjbGUgPT4kdGFiKQoJCXsKCQkJJGNvbXB0YWdlKys7CgkJCQoJCQkvL29uIHbDqXJpZmllIHF1ZSBsZSBzZXJ2aWNlIGVzdCBvayBzaW5vbiBvbiBwYXNzZSBhdSBzdWl2YW50CgkJCWlmKCFpc19hcnJheSgkcmVzdWx0KSAmJiBjb3VudCgkcmVzdWx0KT09MCkKCQkJewoJCQkJLy9sZSBzZXJ2aWNlIGVzdCBkb3duCgkJCQkkZGVzaWduYXRpb24gPSAiU2VydmljZSBjb3Vww6kgb3UgbGljZW5jZSBpbmRpc3BvbmlibGUgcG91ciAiLiRqb3VldXI7CgkJCQkkc3RhdHVzID0gJ0VjaGVjJzsKCQkJCSRhY3Rpb24gPSdyZXRyaWV2ZV9hbGxfcGFydGllcyc7CgkJCQkKCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csICRzdGF0dXMsICRkZXNpZ25hdGlvbiwgJGFjdGlvbik7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvLyBsZSBzZXJ2aWNlIGVzdCBPaywgb24gY29udGludWUKCQkJCgkJCQkkbGljZW5jZTIgPSAkdGFiW2xpY2VuY2VdOwoJCQkJJGFkdmxpYyA9ICR0YWJbYWR2bGljXTsKCQkJCSR2ZCA9ICR0YWJbdmRdOwoJCgkJCQkJaWYgKCR2ZCA9PSdWJyl7CgkJCQkJCSR2ZCA9IDE7CgkJCQkJCX0KCQkJCQllbHNlIAoJCQkJCQl7JHZkID0gMDsKCQkJCQl9CgkJCgkJCQkkbnVtam91cm4gPSAkdGFiW251bWpvdXJuXTsKCQkJCgkJCQkJaWYoaXNfYXJyYXkoJG51bWpvdXJuKSkKCQkJCQl7CgkJCQkJCSRudW1qb3VybiA9ICcwJzsKCQkJCQl9CgkJCQkKCQkJCSRjb2RlY2hhbXAgPSAkdGFiW2NvZGVjaGFtcF07CgkJCQkkZGF0ZWV2ZW50ID0gJHRhYltkYXRlXTsKCQkJCSRjaGd0ID0gZXhwbG9kZSgiLyIsJGRhdGVldmVudCk7CgkJCQkkZGF0ZV9ldmVudCA9ICRjaGd0WzJdLiItIi4kY2hndFsxXS4iLSIuJGNoZ3RbMF07CgkJCQkvL2VjaG8gImxhIGRhdGUgZXN0Ii4kZGF0ZV9ldmVudDsKCQoJCQkJLy8JJGRhdGVfZXZlbnQgPSBjb252X2RhdGVfdmVyc19teXNxbCgkZGF0ZWV2ZW50KTsKCQkJCSRhZHZzZXhlID0gJHRhYlthZHZzZXhlXTsKCQkJCSRhZHZub21wcmUgPSAkdGFiW2Fkdm5vbXByZV07CgkJCQkkcG9pbnRyZXMgPSAkdGFiW3BvaW50cmVzXTsKCQkJCSRjb2VmY2hhbXAgPSAkdGFiW2NvZWZjaGFtcF07CgkJCQkkYWR2Y2xhb2YgPSAkdGFiW2FkdmNsYW9mXTsKCQoJLyoqLwkJCSRxdWVyeTIgPSAiU0VMRUNUIGxpY2VuY2UsYWR2bGljLCBudW1qb3VybiwgY29kZWNoYW1wLCBkYXRlX2V2ZW50LCBjb2VmY2hhbXAgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyBXSEVSRSBsaWNlbmNlID0gPyBBTkQgYWR2bGljID0gPyBBTkQgbnVtam91cm4gPSA/IEFORCBjb2RlY2hhbXAgPSA/IEFORCBkYXRlX2V2ZW50ID0gPyBBTkQgY29lZmNoYW1wID0gPyI7CgkJCQkkZGJyZXN1bHQyID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsIGFycmF5KCRsaWNlbmNlMiwgJGFkdmxpYywgJG51bWpvdXJuLCAkY29kZWNoYW1wLCAkZGF0ZV9ldmVudCwgJGNvZWZjaGFtcCkpOwoJCQkKCQkJCQlpZigkZGJyZXN1bHQyICAmJiAkZGJyZXN1bHQyLT5SZWNvcmRDb3VudCgpID09IDApIAoJCQkJCXsKCQkJCQkJJHF1ZXJ5MyA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyAoaWQsc2Fpc29uLCBsaWNlbmNlLCBhZHZsaWMsIHZkLCBudW1qb3VybiwgY29kZWNoYW1wLCBkYXRlX2V2ZW50LCBhZHZzZXhlLCBhZHZub21wcmUsIHBvaW50cmVzLCBjb2VmY2hhbXAsIGFkdmNsYW9mKSBWQUxVRVMgKCcnLD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIjsKCQkJCQkJJGkrKzsKCQkJCQkJLy9lY2hvICRxdWVyeTsKCQkJCQkJJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MyxhcnJheSggJHNhaXNvbl9jb3VyYW50ZSwgJGxpY2VuY2UyLCAkYWR2bGljLCAkdmQsICRudW1qb3VybiwgJGNvZGVjaGFtcCwgJGRhdGVfZXZlbnQsICRhZHZzZXhlLCAkYWR2bm9tcHJlLCAkcG9pbnRyZXMsICRjb2VmY2hhbXAsICRhZHZjbGFvZikpOwoJCQoJCQkJCQkJaWYoISRkYnJlc3VsdGF0KQoJCQkJCQkJewoJCQkJCQkJCSRkZXNpZ25hdGlvbiA9ICRkYi0+RXJyb3JNc2coKTsgCgkJCQkJCQkJJHN0YXR1cyA9ICdFY2hlYyc7CgkJCQkJCQkJJGFjdGlvbiA9ICdyZXRyaWV2ZV9hbGxfcGFydGllcyc7CgkJCQkJCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywgJHN0YXR1cywgJGRlc2lnbmF0aW9uLCAkYWN0aW9uKTsKCQkJCQkJCX0KCQkJCQoJCQkJCX0KCQkJCgkJCX0vL2ZpbiBkdSBlbHNlICFpc19hcnJheQoJCX0vL2ZpbiBkdSBmb3JlYWNoCgkKCQkvL29uIHBldXQgZmFpcmUgbGEgbWFqX2ZmdHQgaWNpCgkJCgkJCgkJJGRlc2lnbmF0aW9uID0gIkluY2x1c2lvbiBkZSAiLiRpLiIgcsOpc3VsdGF0cyBwb3VyICIuJGpvdWV1cjsKCQlpZigkaT09MCkKCQl7CgkJCSRkZXNpZ25hdGlvbi49IiBTZXJ2aWNlIGNvdXDDqSA/IExpY2VuY2UgYWJzZW50ZSA/IjsKCQl9CgkJZWxzZQoJCXsKCQkJJGRhdGVfbWFqID0gZGF0ZSgnWS1tLWQnKTsKCQkJJHF1ZXJ5NCA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgU0VUIG1hal9mZnR0ID0gPywgZmZ0dCA9ID8gV0hFUkUgbGljZW5jZSA9ID8gQU5EIHNhaXNvbiA9ID8iOwoJCQkkcmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkZGF0ZV9tYWosICRjb21wdGFnZSwgJGxpY2VuY2UyLCAkc2Fpc29uX2NvdXJhbnRlKSk7CgkJfQoJCQoJCSRzdGF0dXMgPSAnT2snOwoJCSRhY3Rpb24gPSAncmV0cmlldmVfYWxsX3BhcnRpZXMnOwoJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywkZGVzaWduYXRpb24sJGFjdGlvbik7CgkJdW5zZXQoJGxpY2VuY2UyKTsKCQl1bnNldCgkaSk7CgkJCgkJCgl9Ly9maW4gZHUgd2hpbGUKfS8vZmluIGR1IGlmICRkYnJlc3VsdAoKLyoqLwovKgkKCSR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCdzYXZlZF9yZWNvcmQnKSk7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdyZW5jb250cmVzJyk7CiovCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.cron_spid_fftt.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMgICAgICAgICAgVsOpcmlmaWNhdGlvbiBlbnRyZSBTcGlkIGV0IEZGVFQgICAgICAgICAgICAgICMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmlmKCFpc3NldCgkZ0NtcykpIGV4aXQ7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKZ2xvYmFsICR0aGVtZU9iamVjdDsKCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2luY2x1ZGUvcHJlZnMucGhwJyk7CiRkZXNpZ25hdGlvbiA9ICcnOwovLyRxdWVyeSA9ICJTRUwiOwovLyRxdWVyeSA9ICJTRUxFQ1Qgc3AuaWQscC5kYXRlX2V2ZW50LHNwLmxpY2VuY2UgYXMgbGljZW5jZV9zcGlkLCBwLmxpY2VuY2UgYXMgbGljZW5jZV9mZnR0LHNwLm5vbSBhcyBub21fc3BpZCwgcC5hZHZub21wcmUgQVMgbm9tX2ZmdHQsIHNwLm51bWpvdXJuIEFTIG51bWpvdXJuX3NwaWQsIHAubnVtam91cm4gQVMgbnVtam91cm5fZmZ0dCwgc3AudmljdG9pcmUgQVMgdmljdG9pcmVfc3BpZCwgcC52ZCBBUyB2aWN0b2lyZV9mZnR0LCBzcC5jb2VmZiBBUyBjb2VmZl9zcGlkLCBwLmNvZWZjaGFtcCBBUyBjb2VmZl9mZnR0LCBzcC5wb2ludHJlcyBBUyBwb2ludHNfc3BpZCwgcC5wb2ludHJlcyBBUyBwb2ludHNfZmZ0dCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQgQVMgc3AsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzIEFTIHAgV0hFUkUgc3AubGljZW5jZSA9IHAubGljZW5jZSBBTkQgc3Aubm9tID0gcC5hZHZub21wcmUgQU5EIHNwLmRhdGVfZXZlbnQgPSBwLmRhdGVfZXZlbnQgQU5EIHNwLnNhaXNvbiA9ID8gQU5EIChzcC5wb2ludHJlcyAhPXAucG9pbnRyZXMpIE9SREVSIEJZIHNwLmlkIERFU0MiOwokcXVlcnkgPSAiU0VMRUNUIHNwLmlkIEFTIHJlY29yZF9pZCxwLmRhdGVfZXZlbnQsc3AubGljZW5jZSBhcyBsaWNlbmNlX3NwaWQsIHAubGljZW5jZSBhcyBsaWNlbmNlX2ZmdHQsc3Aubm9tIGFzIG5vbV9zcGlkLCBwLmFkdm5vbXByZSBBUyBub21fZmZ0dCwgc3AubnVtam91cm4gQVMgbnVtam91cm5fc3BpZCwgcC5udW1qb3VybiBBUyBudW1qb3Vybl9mZnR0LCBzcC52aWN0b2lyZSBBUyB2aWN0b2lyZV9zcGlkLCBwLnZkIEFTIHZpY3RvaXJlX2ZmdHQsIHNwLmNvZWZmIEFTIGNvZWZmX3NwaWQsIHAuY29lZmNoYW1wIEFTIGNvZWZmX2ZmdHQsIHNwLnBvaW50cmVzIEFTIHBvaW50c19zcGlkLCBwLnBvaW50cmVzIEFTIHBvaW50c19mZnR0IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCBBUyBzcCwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXMgQVMgcCBXSEVSRSBzcC5saWNlbmNlID0gcC5saWNlbmNlIEFORCBzcC5ub20gPSBwLmFkdm5vbXByZSBBTkQgc3AuZGF0ZV9ldmVudCA9IHAuZGF0ZV9ldmVudCBBTkQgc3Auc2Fpc29uID0gPyBBTkQgKChzcC5wb2ludHJlcyAhPXAucG9pbnRyZXMpIE9SIChzcC5udW1qb3VybiAhPXAubnVtam91cm4pIE9SIChzcC5jb2VmZiAhPSBwLmNvZWZjaGFtcCkpIE9SREVSIEJZIHNwLmlkIEFTQyI7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRzYWlzb25fY291cmFudGUpKTsKLy8kcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwokbGljID0gYXJyYXkoKTsKLy8kbGljID0gJHJvd1swXVsnbGljZW5jZSddOwovL2VjaG8gIkxhIHZhbGV1ciBlc3QgOiAiLiRsaWM7CiRsaWduZXMgPSAkZGJyZXN1bHQtPlJlY29yZENvdW50KCk7CmZvcigkaT0wOyRpPD0kbGlnbmVzOyRpKyspCnsKCS8vYXJyYXlfcHVzaCgkbGljLCRyb3dbJGldWydpZCddLCAkcm93WyRpXVsnbnVtam91cm5fZmZ0dCddKTsKCS8vYXJyYXlfcHVzaCgkbGljWyRpXSxhcnJheSgkcm93WydpZCddLCAkcm93WydudW1qb3Vybl9mZnR0J10pKTsKCS8vJGxpY2VuID0gc3Vic3RyKGltcGxvZGUoIiwgIiwgJGxpYyksIDAsIC0zKTsKfQoKLy92YXJfZHVtcCgkZGJyZXN1bHQpOwoKLyoqLwoKJHJvd2FycmF5ID0gYXJyYXkoKTsKJGkgPSAwOwoJaWYoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKT4wKQoJewoJCXdoaWxlKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJewoJCQkvL3BiIHNpIGRvdWJsb25zIG91IHRyaXBsb25zICAhISEKCQkJLy9mYXV0IGRvbmMgdsOpcmlmaWVyIGQnYWJvcmQgZGFucyBsYSB0YWJsZSBmZnR0LCBiZW4gb3VpICEKCQkJLy9vbiBwcmVuZCBkb25jIGxlcyDDqWzDqW1lbnRzIHBvdXIgdsOpcmlmaWVyCgkJCS8vb24gaW5zdGFuY2llIHVuZSB2YXJpYWJsZSBwb3VyIGRpcmUgc2kgYydlc3Qgb2sgb3Uga28gCgkJCSRkb3VibG9ucyA9IDA7CgkJCSRsaWNlbmNlX2pvdWV1ciA9ICRyb3dbJ2xpY2VuY2Vfc3BpZCddOwoJCQkkZGF0ZV9ldmVudCAgPSAkcm93WydkYXRlX2V2ZW50J107CgkJCQoJCQkKCQkJJHF1ZXJ5MyA9ICJTRUxFQ1QgY291bnQoKSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzIFdIRVJFIGxpY2VuY2UgPSA/IEFORCBkYXRlX2V2ZW50ID0gPyBBTkQgYSA9ID8iOwoJCQkKCQkJCgkJCSRyZWNvcmRfaWQgPSAkcm93WydyZWNvcmRfaWQnXTsKCQkJJG51bWpvdXJuX2ZmdHQgPSAkcm93WydudW1qb3Vybl9mZnR0J107CgkJCS8vZWNobyAibGUgbsKwIEZGVFQgZXN0IDogIi4kbnVtam91cm5fZmZ0dC4iIHBvdXIgbGUgTsKwICIuJHJlY29yZF9pZC4iPGJyIC8+IjsKCQkJJGNvZWZjaGFtcCA9ICRyb3dbJ2NvZWZmX2ZmdHQnXTsKCQkJJHBvaW50cmVzID0gJHJvd1sncG9pbnRzX2ZmdHQnXTsKCQkJJHZkID0gJHJvd1sndmljdG9pcmVfZmZ0dCddOwoJCQlpZigkcG9pbnRyZXMgIT0nJykKCQkJewoJCQkJCgkJCQoJCQkJJHF1ZXJ5MiA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCBTRVQgbnVtam91cm4gPSA/LCBjb2VmZiA9ID8sIHBvaW50cmVzID0gPywgdmljdG9pcmUgPSA/IFdIRVJFIGlkID0gPyI7CgkJCQkvL2VjaG8gJHF1ZXJ5MjsKCQkJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsIGFycmF5KCRudW1qb3Vybl9mZnR0LCAkY29lZmNoYW1wLCRwb2ludHJlcywkdmQsICRyZWNvcmRfaWQpKTsKCQkJCSRpKys7CgkJCQkJaWYoISRkYnJlc3VsdGF0KQoJCQkJCXsKCQkJCQkJJGRlc2lnbmF0aW9uLj0gJGRiLT5FcnJvck1zZygpOwoKCQkJCQl9CgkJCX0KCQl9CgkJCgkJJGRlc2lnbmF0aW9uLj0iUmVjdGlmaWNhdGlvbiBkZSAiLiRpLiIgcGFydGllKHMpIjsKCQkKCQkKCX0KCWVsc2UKCXsKCQkkZGVzaWduYXRpb24uPSJQYXMgZGUgcsOpc3VsdGF0cyDDoCBtb2RpZmllciI7Cgl9CgkvL2VjaG8gJGRlc2lnbmF0aW9uOwoKJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwokdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdzcGlkJyk7CgkKCiNFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.dater.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKCglpZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgTWFuYWdlJykpCiAgCXsKICAgIAkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSk7CgkJcmV0dXJuOwogICAKICAJfQoKCWlmKCBpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkgKQogIAl7CiAgICAJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2RpdmlzaW9ucycpOwogICAgCQlyZXR1cm47CiAgCX0KZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwovL2xlIGZvcm11bGFpcmUgYSB0LWlsIMOpdMOpIHNvdW1pcyA/CmlmKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSkKewoJLy9vbiBmYWl0IGxlcyB0cmFpdGVtZW50cwoJLy9vbiB2w6lyaWZpZSBxdWUgdHQgZXN0IGzDoAoJJGRiID0mICR0aGlzLT5HZXREYigpOwoJaWYoaXNzZXQoJHBhcmFtc1snc2VsJ10pICYmICRwYXJhbXNbJ3NlbCddICE9ICcnKQoJewoJCSRzZWwgPSAkcGFyYW1zWydzZWwnXTsKCQkkaWRfc2VsID0gZXhwbG9kZSgnLScsICRzZWwpOwoKCQkkZGF0ZV9kZWJ1dCA9ICRwYXJhbXNbJ2RhdGVfZGVidXQnXTsKCQkkZGF0ZV9maW4gPSAkcGFyYW1zWydkYXRlX2ZpbiddOwoJCSRpID0gMDsvL29uIGluc3RhbmNpZSB1biBjb21wdGV1ciBwb3VyIHJlbmRyZSBjb21wdGUKCQkKCQlmb3JlYWNoKCRpZF9zZWwgYXMgJHZhbGV1cikKCQl7CgkJCQoJCQkvL29uIHZhIGNoZXJjaGVyIGxlcyBpbmZvcyA6IGlkZXByZXV2ZSwgaWRkaXZpc2lvbiBldGMuLgoJCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZGl2aXNpb25zIFdIRVJFIGlkID0gPyAiOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkdmFsZXVyKSk7CgkJCQoJCQlpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApCgkJCXsKCQkJCS8vCgkJCQkkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwoJCQkJJGlkZXByZXV2ZSA9ICRyb3dbJ2lkZXByZXV2ZSddOwoJCQkJJGlkZGl2c2lvbiA9ICRyb3dbJ2lkZGl2aXNpb24nXTsKCQkJCSR0YWJsZWF1ID0gJHJvd1sndGFibGVhdSddOwoJCQkJJGxpYmVsbGUgPSAkcm93WydsaWJlbGxlJ107CgkJCQkkc2Fpc29uID0gJHJvd1snc2Fpc29uJ107CgkJCQkkaW5kaXZzID0gJHJvd1snaW5kaXZzJ107CgkJCQkKCQkJCS8vb24gZmFpdCBsYSByZXF1ZXRlIGQnaW5zZXJ0aW9uCgkJCQkvLyRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2FsZW5kcmllciAoaWQsICkiOwoJCQkJCgkJCX0KCQkJLy8kcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19kaXZpc2lvbnMgU0VUIGRhdGVfZGVidXQgPSA/LCBkYXRlX2ZpbiA9ID8gV0hFUkUgaWQgPSA/IjsKCQkJLy8kZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkZGF0ZV9kZWJ1dCwkZGF0ZV9maW4sJHZhbGV1cikpOwoJCQkKCQl9Cgl9Cn0KZWxzZQp7CglpZihpc3NldCgkcGFyYW1zWydzZWwnXSkgJiYgJHBhcmFtc1snc2VsJ10gIT0iIikKCXsJCQkKCQkkc2VsID0gJHBhcmFtc1snc2VsJ107CgkJCgkJLy9vbiBjb25zdHJ1aXQgbGUgZm9ybXVsYWlyZQoJCSRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywKCQkJCSAgICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCAkaWQsICdkYXRlcicsICRyZXR1cm5pZCApICk7CQoJCSRzbWFydHktPmFzc2lnbigncmVjb3JkX2lkJywKCQkJCSR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3NlbCcsJHNlbCkpOwoJCgkKCQkkc21hcnR5LT5hc3NpZ24oJ2RhdGVfZGVidXQnLAoJCQkJJHRoaXMtPkNyZWF0ZUlucHV0RGF0ZSgkaWQsICdkYXRlX2RlYnV0JykpOwoJCSRzbWFydHktPmFzc2lnbignZGF0ZV9maW4nLAoJCQkJJHRoaXMtPkNyZWF0ZUlucHV0RGF0ZSgkaWQsICdkYXRlX2ZpbicpKTsKCQoJCSRzbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JyksICdjbGFzcz0iYnV0dG9uIicpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsCgkJCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdjYW5jZWwnLAoJCQkJCQkJJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdiYWNrJywKCQkJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2JhY2snLAoJCQkJCQkJJHRoaXMtPkxhbmcoJ2JhY2snKSkpOwoKCQkkc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLAoJCQkJJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgkKCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2RhdGVyLnRwbCcpOwoJfQp9CgoKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAgaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3ByZWZzLnBocCcpOwokbm9tX2VxdWlwZXMgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbm9tX2VxdWlwZXMnKTsKJHNhaXNvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKJGRiID0mICR0aGlzLT5HZXREYigpOwpnbG9iYWwgJHRoZW1lT2JqZWN0OwokcmVzdWx0PSBhcnJheSgpOwokcGFybXMgPSBhcnJheSgpOwovLyRyb3dhcnJheSA9IGFycmF5KCk7Ci8vJHJvd2FycmF5MSA9IGFycmF5KCk7CiRpPTA7CiRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jYWxlbmRyaWVyIFdIRVJFIGRhdGVfZmluPD1OT1coKSBHUk9VUCBCWSBkYXRlX2RlYnV0IE9SREVSIEJZIGRhdGVfZGVidXQgREVTQyI7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKCWlmKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCk+MCkKCXsKCQl3aGlsZSgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJCXsKCQkJJGkrKzsKCQkJJGRhdGVfZGVidXQgPSAkcm93WydkYXRlX2RlYnV0J107CgkJCS8vZWNobyAibGEgZGF0ZSBkw6lidXQgZXN0IDoiLiRkYXRlX2RlYnV0OwoJCQkkZGF0ZWFyciA9IGV4cGxvZGUoJy0nLCAkZGF0ZV9kZWJ1dCk7CgkJCSRkYXRlZnIgPSAkZGF0ZWFyclsyXSAuICctJyAuICRkYXRlYXJyWzFdIC4gJy0nIC4gJGRhdGVhcnJbMF07CgkJCQoJCQkkcXVlcnkyID0gIlNFTEVDVCAqLCByZW4uaWQsIGVxLmxpYmVxdWlwZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wb3VsZXNfcmVuY29udHJlcyBBUyByZW4sICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19lcXVpcGVzIEFTIGVxIFdIRVJFIGVxLmlkcG91bGUgPSByZW4uaWRwb3VsZSAgQU5EIHJlbi5zYWlzb24gPSBlcS5zYWlzb24gQU5EIChyZW4uc2NvcmVhICE9MCBBTkQgc2NvcmViICE9MCkgIEFORCByZW4uZGF0ZV9ldmVudCA9ID8iOwoJCQkvLyRxdWVyeTIgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcG91bGVzX3JlbmNvbnRyZXMgV0hFUkUgZGF0ZV9ldmVudCA9ID8iOwoJCQkvL21vbiBjbHViIHVuaXF1ZW1lbnQgPwoJCQkkcXVlcnkyLj0iIEFORCBjbHViID0gJzEnIjsKCQkJJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MiwgYXJyYXkoJGRhdGVfZGVidXQpKTsKCQkJCgkJCQkKCQkJaWYoJGRicmVzdWx0YXQgJiYgJGRicmVzdWx0YXQtPlJlY29yZENvdW50KCk+MCkKCQkJewoJCQkJCgkJCQkkY29udGVudSA9ICcnOwkJCQkKCQkJCSRjb250ZW51Lj0gIjxoMz5MZXMgcsOpc3VsdGF0cyBkdSAgIi4kZGF0ZWZyLiI8L2gzPiI7CgkJCQkkY29udGVudS49Ijx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkXCI+IjsKCQkJCQoJCQkJd2hpbGUoJHJvdzIgPSAkZGJyZXN1bHRhdC0+RmV0Y2hSb3coKSkKCQkJCXsKCQkJCQkKCQkJCQoJCQkJCQoJCQkJCSRpZD0gJHJvdzJbJ2lkJ107CgkJCQkJJGRhdGVfZXZlbnQ9ICRyb3cyWydkYXRlX2V2ZW50J107CgkJCQkJJGVxdWIgPSAkcm93MlsnZXF1YiddOwoJCQkJCSRlcXVhID0gJHJvdzJbJ2VxdWEnXTsKCQkJCQkkZnJpZW5kbHluYW1lID0gJHJvdzJbJ2ZyaWVuZGx5bmFtZSddOwoJCQkJCSRsaWJlcXVpcGUgPSAkcm93MlsnbGliZXF1aXBlJ107CgkJCQkJLy9lY2hvICJlcXVpcGUgQiBlc3QgOiAiLiRlcXViOwoKCQkJCQkvLyRvbmVyb3ctPmVxdWlwZT0gJHJvd1snZXF1aXBlJ107CgkJCQkJJGxpYmVsbGU9ICAkcm93MlsnbGliZWxsZSddIDsKCQkJCQkKCQkJCQlpZihpc3NldCgkZnJpZW5kbHluYW1lKSAmJiAkZnJpZW5kbHluYW1lICE9JycpCgkJCQkJewoJCQkJCQlpZiAoJGxpYmVxdWlwZSA9PSAkZXF1YSkKCQkJCQkJewoJCQkJCQkJJGVxdWE9ICRyb3cyWydmcmllbmRseW5hbWUnXTsKCQkJCQkJfQoKCQkJCQkJZWxzZXsKCQkJCQkJCSRlcXVhPSAkcm93MlsnZXF1YSddOwoJCQkJCQl9CgoJCQkJCX0KCQkJCQllbHNlewoJCQkJCQkkZXF1YT0gJHJvdzJbJ2VxdWEnXTsKCQkJCQl9CgkJCQkJJHNjb3JlYT0gJHJvdzJbJ3Njb3JlYSddOwoJCQkJCSRzY29yZWI9ICRyb3cyWydzY29yZWInXTsKCQkJCQkKCQkJCQlpZihpc3NldCgkZnJpZW5kbHluYW1lKSAmJiAkZnJpZW5kbHluYW1lICE9JycpCgkJCQkJewoJCQkJCQlpZiAoJGxpYmVxdWlwZSA9PSAkZXF1YikKCQkJCQkJewoJCQkJCQkJJGVxdWI9ICRyb3cyWydmcmllbmRseW5hbWUnXTsKCQkJCQkJfQoKCQkJCQkJZWxzZXsKCQkJCQkJCSRlcXViPSAkcm93MlsnZXF1YiddOwoJCQkJCQl9CgoJCQkJCX0KCQkJCQllbHNlewoJCQkJCQkkZXF1Yj0gJHJvdzJbJ2VxdWInXTsKCQkJCQl9CgkJCQkJJGRldGFpbHM9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2RldGFpbHNfcmVuY29udHJlcycsICRyZXR1cm5pZCwgJ0TDqXRhaWxzJywgYXJyYXkoJ3JlY29yZF9pZCc9PiRyb3cyWydpZCddLCAndGVtcGxhdGUnPT4nMScpKTsKCQkJCQkkY29udGVudS49Ijx0cj4iOwoJCQkJCS8vJGNvbnRlbnUuPSI8dGQ+JGlkPC90ZD4iOwoJCQkJCSRjb250ZW51Lj0iPHRkPiRlcXVhPC90ZD4iOwoJCQkJCSRjb250ZW51Lj0iPHRkPiRzY29yZWE8L3RkPiI7CgkJCQkJJGNvbnRlbnUuPSI8dGQ+JHNjb3JlYjwvdGQ+IjsKCQkJCQkkY29udGVudS49Ijx0ZD4kZXF1YjwvdGQ+IjsKCQkJCQkkY29udGVudS49Ijx0ZD4kZGV0YWlsczwvdGQ+IjsKCQkJCQkkY29udGVudS49IjwvdHI+IjsKCQkJCQkKCQkJCX0KCQkJCQoJCQkJCgkJCQkkY29udGVudS49IjwvdGFibGU+IjsKCQkJCWVjaG8gJGNvbnRlbnU7CgkJCX0KCQkJCgkJCQoJCX0KCQkKCX0KaWYoaXNzZXQoJHBhcmFtc1sndGVtcGxhdGUnXSkgJiYgJHBhcmFtc1sndGVtcGxhdGUnXSA9PSAnMScpCQp7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZGV0YWlsc19yZW5jb250cmUudHBsJyk7Cn0KIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAgaWYgKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsgCglpZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgVXNlJykpCgl7CgkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSk7CgkJcmV0dXJuOwoJfQoJCgovL29uIGluc3RhbmNpZSBsZXMgb25nbGV0cwoKZWNobyAkdGhpcy0+U3RhcnRUYWJoZWFkZXJzKCk7CmlmIChGQUxTRSA9PSBlbXB0eSgkcGFyYW1zWydhY3RpdmVfdGFiJ10pKQogIHsKICAgICR0YWIgPSAkcGFyYW1zWydhY3RpdmVfdGFiJ107CiAgfSBlbHNlIHsKICAkdGFiID0gJ3JlbmNvbnRyZXMnOwogfQkKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignam91ZXVycycsICdKb3VldXJzJywgKCdqb3VldXJzJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZXF1aXBlcycsICdFcXVpcGVzJywgKCdlcXVpcGVzJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignY2FsZW5kcmllcicsICdDYWxlbmRyaWVyJywgKCdjYWxlbmRyaWVyJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZmZ0dCcsICdGRlRUJyAsICgnZmZ0dCcgPT0gJHRhYik/dHJ1ZTpmYWxzZSk7CgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3NwaWQnLCAnU1BJRCcgLCAoJ3NwaWQnID09ICR0YWIpP3RydWU6ZmFsc2UpOwoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdjb21wZXRzJywgJ0NvbXDDqXRpdGlvbnMnICwgKCdjb21wZXQnID09ICR0YWIpP3RydWU6ZmFsc2UpOwoJLy9lY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2RpdmlzaW9ucycsICdEaXZpc2lvbnMnLCAoJ2RpdmlzaW9ucycgPT0gJHRhYik/dHJ1ZTpmYWxzZSk7CQoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdwb3VsZXMnLCAnUsOpc3VsdGF0cycsICgncmVzdWx0YXRzJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigncmVjdXAnLCAnUmVjdXDDqXJhdGlvbicsICgnUsOpY3Vww6lyYXRpb24nID09ICR0YWIpP3RydWU6ZmFsc2UpOwoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdzaXR1YXRpb24nLCAnU2l0dWF0aW9uIG1lbnN1ZWxsZScsICgnc2l0dWF0aW9uJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignam91cm5hbCcsICdKb3VybmFsJywgKCdKb3VybmFsJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKCQoJaWYoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBTZXQgUHJlZnMnKSl7CgkJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdjb25maWd1cmF0aW9uJywgJ0NvbmZpZ3VyYXRpb24nICwgKCdjb25maWd1cmF0aW9uJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKCQllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2NvbXB0ZScsICdjb21wdGUnICwgKCdjb21wdGUnID09ICR0YWIpP3RydWU6ZmFsc2UpOwoJfQoKZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwoKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgkKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdqb3VldXJzJywgJHBhcmFtcyk7CiAgICAJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2FjdGlvbi5hZG1pbl9qb3VldXJzX3RhYi5waHAnKTsKICAgCWVjaG8gJHRoaXMtPkVuZFRhYigpOwoKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdlcXVpcGVzJyAsICRwYXJhbXMpOy8vbGVzIMOpcXVpcGVzCiAgICAJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2FjdGlvbi5hZG1pbl90ZWFtc190YWIucGhwJyk7CiAgIAllY2hvICR0aGlzLT5FbmRUYWIoKTsKCgllY2hvICR0aGlzLT5TdGFydFRhYignY2FsZW5kcmllcicsICRwYXJhbXMpOy8vQ2FsZW5kcmllcgogICAgCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9hY3Rpb24uYWRtaW5fY2FsZW5kYXJfdGFiLnBocCcpOwogICAJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgogICAgICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdmZnR0JywgJHBhcmFtcyk7Ly9GRlRUCiAgICAJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2FjdGlvbi5hZG1pbl9mZnR0X3RhYi5waHAnKTsKICAgCWVjaG8gJHRoaXMtPkVuZFRhYigpOwkKIAoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3NwaWQnICwgJHBhcmFtcyk7Ly9TcGlkCiAgICAJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2FjdGlvbi5hZG1pbl9zcGlkX3RhYi5waHAnKTsKICAgCWVjaG8gJHRoaXMtPkVuZFRhYigpOwoKICAgICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdjb21wZXRzJyAsICRwYXJhbXMpOy8vbGVzIHR5cGVzIGRlIGNvbXDDqXRpdGlvbnMKICAgIAlpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWN0aW9uLmFkbWluX2NvbXBldHNfdGFiLnBocCcpOwogICAJZWNobyAkdGhpcy0+RW5kVGFiKCk7IAoKCS8qCgllY2hvICR0aGlzLT5TdGFydFRhYignZGl2aXNpb25zJywgJHBhcmFtcyk7Ly9sZSBqb3VybmFsCiAgICAJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2FjdGlvbi5hZG1pbl9kaXZpc2lvbnNfdGFiLnBocCcpOwogICAJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgkqLwoKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdwb3VsZXMnICwgJHBhcmFtcyk7Ly9yw6lzdWx0YXRzIGRlcyBwb3VsZXMKICAgIAlpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWN0aW9uLmFkbWluX3BvdWxlc190YWIyLnBocCcpOwogICAJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3JlY3VwJyAsICRwYXJhbXMpOwogICAgCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9hY3Rpb24uYWRtaW5fcmVjdXBfdGFiLnBocCcpOwogICAJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3NpdHVhdGlvbicgLCAkcGFyYW1zKTsvL3NpdHVhdGlvbiBtZW5zdWVsbGUKICAgIAlpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWN0aW9uLmFkbWluX3NpdHVhdGlvbl9tZW5zdWVsbGVfdGFiLnBocCcpOwogICAJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2pvdXJuYWwnLCAkcGFyYW1zKTsvL2xlIGpvdXJuYWwKICAgIAlpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWN0aW9uLmFkbWluX2pvdXJuYWxfdGFiLnBocCcpOwogICAJZWNobyAkdGhpcy0+RW5kVGFiKCk7CmlmKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgU2V0IFByZWZzJykpewoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2NvbmZpZ3VyYXRpb24nICwgJHBhcmFtcyk7CglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWN0aW9uLmFkbWluX29wdGlvbnNfdGFiLnBocCcpOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgllY2hvICR0aGlzLT5TdGFydFRhYignY29tcHRlJyAsICRwYXJhbXMpOwoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2FjdGlvbi5hZG1pbl9jb21wdGVfdGFiLnBocCcpOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7Cn0KZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOwovL29uIGEgcmVmZXJtw6kgbGVzIG9uZ2xldHMKCi8vZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9wYW5lbC50cGwnKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAgaWYgKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsgCglpZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgVXNlJykpCgl7CgkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSk7CgkJcmV0dXJuOwoJfQoJCgovL29uIGluc3RhbmNpZSBsZXMgb25nbGV0cwoKICBlY2hvICc8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyB3aWR0aDogODAlOyI+JzsKICBlY2hvICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsJzw9IE1lbnUgcHJpbmNpcGFsJyk7CiAgZWNobyAnPC9kaXY+JzsKCmVjaG8gJHRoaXMtPlN0YXJ0VGFiaGVhZGVycygpOwppZiAoRkFMU0UgPT0gZW1wdHkoJHBhcmFtc1snYWN0aXZlX3RhYiddKSkKICB7CiAgICAkdGFiID0gJHBhcmFtc1snYWN0aXZlX3RhYiddOwogIH0gZWxzZSB7CiAgJHRhYiA9ICdkaXZpc2lvbnMnOwogfQkKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZGl2aXNpb25zJywgJ0RpdmlzaW9ucycsICgnZGl2aXNpb25zJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigndG91cnMnLCAnVG91cnMnLCAoJ3RvdXJzJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigncGFydGllJywgJ1BhcnRpZXMnLCAoJ3BhcnRpZScgPT0gJHRhYik/dHJ1ZTpmYWxzZSk7CgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2NsYXNzZW1lbnQnLCAnQ2xhc3NlbWVudCcgLCAoJ2NsYXNzZW1lbnQnID09ICR0YWIpP3RydWU6ZmFsc2UpOwoKZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwoKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgkKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdkaXZpc2lvbnMnLCAkcGFyYW1zKTsKICAgIAlpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWN0aW9uLmFkbWluX2RpdmlzaW9uc190YWIucGhwJyk7CiAgIAllY2hvICR0aGlzLT5FbmRUYWIoKTsKCgllY2hvICR0aGlzLT5TdGFydFRhYigndG91cnMnICwgJHBhcmFtcyk7Ly9sZXMgw6lxdWlwZXMKICAgIAlpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWN0aW9uLmFkbWluX3BvdWxlcy5waHAnKTsKICAgCWVjaG8gJHRoaXMtPkVuZFRhYigpOwovKgoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3BhcnRpZScsICRwYXJhbXMpOy8vQ2FsZW5kcmllcgogICAgCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9hY3Rpb24uYWRtaW5fY2FsZW5kYXJfdGFiLnBocCcpOwogICAJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgogICAgICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdjbGFzc2VtZW50JywgJHBhcmFtcyk7Ly9GRlRUCiAgICAJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2FjdGlvbi5hZG1pbl9mZnR0X3RhYi5waHAnKTsKICAgCWVjaG8gJHRoaXMtPkVuZFRhYigpOwkKKi8KCmVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.delete.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBEZWxldGUnKSkKCXsKCSRwYXJhbXMgPSBhcnJheSgnbWVzc2FnZSc9PkxhbmcoJ25lZWRwZXJtaXNzaW9uJyksICdhY3RpdmVfdGFiJyA9PiAndXNlcnMnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCcnLCAkcGFyYW1zKTsKCX0KCQokZXJyb3IgPSAwOwokZGVzaWduYXRpb24gPSAnJzsKCSRyZWNvcmRfaWQgPSAnJzsKCWlmIChpc3NldCgkcGFyYW1zWydyZWNvcmRfaWQnXSkgJiYgJHBhcmFtc1sncmVjb3JkX2lkJ10gIT0gJycpCgl7CgkJJHJlY29yZF9pZCA9ICRwYXJhbXNbJ3JlY29yZF9pZCddOwoJfQoJZWxzZQoJewoJCQkkZXJyb3IrKzsKCX0KCSR0eXBlX2NvbXBldCA9ICcnOwoJaWYoaXNzZXQoJHBhcmFtc1sndHlwZV9jb21wZXQnXSkgJiYgJHBhcmFtc1sndHlwZV9jb21wZXQnXSAhPScnKQoJewoJCQkgJHR5cGVfY29tcGV0ID0gJHBhcmFtc1sndHlwZV9jb21wZXQnXTsKCX0KCWVsc2UKCXsKCQkJJGVycm9yKys7Cgl9CgkJCgkJaWYgKCRlcnJvcj09MCkKCQl7CgkJCXN3aXRjaCgkdHlwZV9jb21wZXQpCgkJCXsKCQkJCWNhc2UgICJzcGlkIiA6CgoJCQkJCSRxdWVyeSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllc19zcGlkIFdIRVJFIGlkID0gPyI7CgkJCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHJlY29yZF9pZCkpOwoJCQkJCQoJCQkJCWlmKCEkZGJyZXN1bHQpCgkJCQkJewoJCQkJCQkkZGVzaWduYXRpb24uPSAkZGItPkVycm9yTXNnKCk7CgkJCQkJCQoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkZGVzaWduYXRpb24uPSJSw6lzdWx0YXQgc3VwcHJpbcOpIjsKCQkJCQkJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJCQkJCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdzcGlkJyk7CgkJCQkJfQkJCQoKCQkJCWJyZWFrOwoJCQkJY2FzZSAiZmZ0dCIgOgoKCgkJCQkJLy9Ob3cgcmVtb3ZlIHRoZSBhcnRpY2xlCgkJCQkJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzIFdIRVJFIGlkID0gPyI7CgkJCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHJlY29yZF9pZCkpOwoKCQkJCQkkdGhpcy0+U2V0TWVzc2FnZSgnUsOpc3VsdGF0IHN1cHByaW3DqScpOwoJCQkJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2ZmdHQnKTsKCQkJCWJyZWFrOwoJCQkJY2FzZSAidHlwZV9jb21wZXQiIDoKCgoJCQkJCS8vTm93IHJlbW92ZSB0aGUgYXJ0aWNsZQoJCQkJCS8vIEF2YW50IGRlIHN1cHByaW1lciBsJ2VucmVnaXN0cmVtZW50LCBzJ2FnaXQtaWwgZCd1bmUgY29tcGV0IGluZGl2aWR1ZWxsZXMgPwoJCQkJCS8vIHNpIG91aSBhbG9ycyBvbiBkw6l0cnVpdCBhdXNzaSBsZXMgZW5yZWdpc3RyZW1lbnRzIGNvcnJlc3BvbmRhbnRzIGRlIGxhIHRhYmxlIHBhcnRpY2lwZSAKCQkJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIFdIRVJFIGlkID0gPyI7CgkJCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHJlY29yZF9pZCkpOwoKCQkJCQkkdGhpcy0+U2V0TWVzc2FnZSgnVHlwZSBkZSBjb21ww6l0aXRpb24gc3VwcHJpbcOpZScpOwoJCQkJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbXBldHMnKTsKCQkJCWJyZWFrOwoJCQkJY2FzZSAidGVhbXMiIDogCgkJCQkJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19lcXVpcGVzIFdIRVJFIGlkID0gPyI7CgkJCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHJlY29yZF9pZCkpOwoKCQkJCQkkdGhpcy0+U2V0TWVzc2FnZSgnRXF1aXBlIHN1cHByaW3DqWUnKTsKCQkJCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdlcXVpcGVzJyk7CgkJCQlicmVhazsKCQkJCQoJCQkJY2FzZSAiY2FsZW5kcmllciIgOiAKCQkJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NhbGVuZHJpZXIgV0hFUkUgaWQgPSA/IjsKCQkJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcmVjb3JkX2lkKSk7CgoJCQkJCSR0aGlzLT5TZXRNZXNzYWdlKCdEYXRlIHN1cHByaW3DqWUnKTsKCQkJCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdjYWxlbmRyaWVyJyk7CgkJCQlicmVhazsKCQkJCQoJCQkJY2FzZSAicG91bGVzIiA6IAoJCQkJCSRxdWVyeSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcG91bGVzX3JlbmNvbnRyZXMgV0hFUkUgaWQgPSA/IjsKCQkJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcmVjb3JkX2lkKSk7CgoJCQkJCSR0aGlzLT5TZXRNZXNzYWdlKCdNYXRjaCBzdXBwcmltw6knKTsKCQkJCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdwb3VsZXMnKTsKCQkJCWJyZWFrOwoJCQkJCgkJCQljYXNlICJzaXRfbWVucyIgOgoJCQkJCSRxdWVyeSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfc2l0X21lbnMgV0hFUkUgaWQgPSA/IjsKCQkJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcmVjb3JkX2lkKSk7CgkJCQkJCgkJCQkJJHRoaXMtPlNldE1lc3NhZ2UoJ3NpdHVhdGlvbiBzdXBwcmltw6llJyk7CgkJCQkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignc2l0dWF0aW9uJyk7CgkJCQlicmVhazsKCQkJCQoJCQkJY2FzZSAiZGl2aXNpb24iIDoKCQkJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2RpdmlzaW9ucyBXSEVSRSBpZCA9ID8iOwoJCQkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRyZWNvcmRfaWQpKTsKCQkJCQkKCQkJCQkvL29uIHN1cHByaW1lIGF1c3NpIGxlcyBhdXRyZXMgdG91cnMgLCBwYXJ0aWVzLCBldCBjbGFzc2VtZW50IGFmZmlsacOpcwoJCQkJCS8vb24gY29tbWVuY2UgcGFyIGxlcyB0b3VycwoJCQkJCSRxdWVyeSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZGl2X3RvdXJzIFdIRVJFIGlkZGl2aXNpb24gPSA/IjsKCQkJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcmVjb3JkX2lkKSk7CgkJCQkJLy9vbiBjb250aW51ZSBwYXIgbGVzIHBhcnRpZXMKCQkJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2Rpdl9wYXJ0aWVzIFdIRVJFIGlkZGl2aXNpb24gPSA/IjsKCQkJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcmVjb3JkX2lkKSk7CgkJCQkJLy9lbmZpbiBsZXMgY2xhc3NlbWVudHMKCQkJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2Rpdl9jbGFzc2VtZW50IFdIRVJFIGlkZGl2aXNpb24gPSA/IjsKCQkJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcmVjb3JkX2lkKSk7CgkJCQkJCgkJCQkJJHRoaXMtPlNldE1lc3NhZ2UoJ0RpdmlzaW9uIHN1cHByaW3DqWUnKTsKCQkJCQkkdGhpcy0+UmVkaXJlY3QoJ2RlZmF1bHRhZG1pbjInKTsKCQkJCWJyZWFrOwoJCQkJCgkJCX0KCQl9CgkJCgkJCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.delete_all.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CiRtZXNzYWdlID0gJyc7CgppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgRGVsZXRlJykpCnsKJHBhcmFtcyA9IGFycmF5KCdtZXNzYWdlJz0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSwgJ2FjdGl2ZV90YWInID0+ICd1c2VycycpOwokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywnJywgJHBhcmFtcyk7Ci8qZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSk7CnJldHVybjsqLwp9CiRzYWlzb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7CiRkZXNpZ25hdGlvbiA9ICcnOwoKJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19hZHZlcnNhaXJlcyI7CiRkYi0+RXhlY3V0ZSgkcXVlcnkpOwokZGVzaWduYXRpb24uPSJUYWJsZSB0ZW1wb3JhaXJlIHZpZMOpZSAhIjsKCiRxdWVyeTIgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZWN1cF9wYXJ0aWVzIFNFVCBzYWlzb24gPSA/LCBzcGlkX3RvdGFsID0gJzAnIjsKJGRicmVzdWx0IC0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsIGFycmF5KCRzYWlzb24pKTsKCgoKJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwokdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdqb3VldXJzJyxhcnJheSgnbWVzc2FnZSc9PidlbXB0eScpKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.delete_contact.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCQlpZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKJG1lc3NhZ2UgPSAnJzsKCgkJaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIERlbGV0ZScpKQoJCXsKCQkkcGFyYW1zID0gYXJyYXkoJ21lc3NhZ2UnPT5MYW5nKCduZWVkcGVybWlzc2lvbicpLCAnYWN0aXZlX3RhYicgPT4gJ3VzZXJzJyk7CgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsJycsICRwYXJhbXMpOwoJCS8qZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSk7CgkJcmV0dXJuOyovCgkJfQoKCQkkcmVjb3JkX2lkID0gJyc7CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ3JlY29yZF9pZCddKSAmJiAkcGFyYW1zWydyZWNvcmRfaWQnXSAhPSAnJykKCQl7CgkJCSRyZWNvcmRfaWQgPSAkcGFyYW1zWydyZWNvcmRfaWQnXTsKCQl9CgkJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jb21tIFdIRVJFIGlkID0gPyI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkcmVjb3JkX2lkKSk7CgkJaWYoISRkYnJlc3VsdCl7CgkJCSRtZXNzYWdlLj0kZGItPkVycm9yTXNnKCk7CgkJfQoJCQoKJHRoaXMtPlNldE1lc3NhZ2UoIiRtZXNzYWdlIik7CiR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2pvdWV1cnMnKTsKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.display_unable_players.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7Ci8vcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19maWxlX18pLicvZnVuY3Rpb24uY2FsY3Vscy5waHAnKTsKJGRiID0mICR0aGlzLT5HZXREYigpOwpnbG9iYWwgJHRoZW1lT2JqZWN0OwoKJG1vaXNfY291cmFudCA9IGRhdGUoJ24nKTsKJGFubmVlX2NvdXJhbnRlID0gZGF0ZSgnWScpOwokc21hcnR5LT5hc3NpZ24oJ2Rpc3BsYXlfZW5hYmxlX3BsYXllcnMnLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkbWluX2pvdWV1cnNfcmVjdXBfdGFiJywgJHJldHVybmlkLCAnSm91ZXVycyBhY3RpZnMnKSk7CgoKJHJlc3VsdD0gYXJyYXkgKCk7CiRxdWVyeT0gIlNFTEVDVCBpZCwgQ09OQ0FUX1dTKCcgJyxub20sIHByZW5vbSkgQVMgam91ZXVyLCBsaWNlbmNlLCBhY3RpZiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzICBXSEVSRSBhY3RpZiA9ICcwJyAgT1JERVIgQlkgaWQgQVNDIjsKLy9lY2hvICRxdWVyeTsKJGRicmVzdWx0PSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKJHJvd2NsYXNzPSAncm93MSc7CiRyb3dhcnJheT0gYXJyYXkgKCk7CmlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkKICB7CiAgICB3aGlsZSAoJHJvdz0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQogICAgICB7CgkKCSRvbmVyb3c9IG5ldyBTdGRDbGFzcygpOwoJJG9uZXJvdy0+cm93Y2xhc3M9ICRyb3djbGFzczsKCSRvbmVyb3ctPmlkPSAkcm93WydpZCddOwoJJG9uZXJvdy0+am91ZXVyPSAkcm93Wydqb3VldXInXTsKCQoJaWYoJHJvd1snYWN0aWYnXSA9PScxJyl7CgkJJG9uZXJvdy0+ZWRpdGxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FibGVfcGxheWVyJywgJHJldHVybmlkLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3RydWUuZ2lmJywgJHRoaXMtPkxhbmcoJ3VuYWJsZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksYXJyYXkoJ2xpY2VuY2UnPT4kcm93WydsaWNlbmNlJ10sICJhY3RpZiI9PiIwIikpOwoJfQoJZWxzZSB7CgkJJG9uZXJvdy0+ZWRpdGxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FibGVfcGxheWVyJywgJHJldHVybmlkLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ZhbHNlLmdpZicsICR0aGlzLT5MYW5nKCdlbmFibGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLGFycmF5KCdsaWNlbmNlJz0+JHJvd1snbGljZW5jZSddLCJhY3RpZiI9PiIxIikpOwoJfQoJKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3M9ICJyb3cyIiA6ICRyb3djbGFzcz0gInJvdzEiKTsKCSRyb3dhcnJheVtdPSAkb25lcm93OwogICAgICB9CiAgfQokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zZm91bmQnLCAkdGhpcy0+TGFuZygncmVzdWx0c2ZvdW5kdGV4dCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRyb3dhcnJheSk7CiRzbWFydHktPmFzc2lnbigncmV0cmlldmVfdXNlcnMnLCAKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV91c2VycycsICRyZXR1cm5pZCwnUsOpY3Vww6lyYXRpb24gZGUgdG91cyBsZXMgam91ZXVycycpKTsKJHNtYXJ0eS0+YXNzaWduKCdjcmVhdGVsaW5rJywgCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnY3JlYXRlX25ld191c2VyMycsICRyZXR1cm5pZCwKCQkJCSAgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywgJHRoaXMtPkxhbmcoJ2FkZG5ld3NoZWV0JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSkuCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnY3JlYXRlX25ld191c2VyMycsICRyZXR1cm5pZCwgCgkJCQkgICR0aGlzLT5MYW5nKCdhZGRuZXdzaGVldCcpLCAKCQkJCSAgYXJyYXkoKSkpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCd1bmFibGVfcGxheWVycy50cGwnKTsKCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.do_add_all_sit_mens.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2luY2x1ZGUvcHJlZnMucGhwJyk7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwokcGhhc2UgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGhhc2VfZW5fY291cnMnKTsKCglpZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgTWFuYWdlJykpCgl7CgkJJGRlc2lnbmF0aW9uLj0kdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKTsKCQkkdGhpcy0+U2V0TWVzc2FnZSgiJGRlc2lnbmF0aW9uIik7CgkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignc2l0dWF0aW9uJyk7Cgl9CgkkYW5uZWUgPSBkYXRlKCdZJyk7Ci8vb24gcsOpY3Vww6hyZSBsZXMgdmFsZXVycwovL3BvdXIgbCdpbnN0YW50IHBhcyBkJ2VycmV1cgokZXJyb3IgPSAwOwokaSA9IDA7CgkJCgkJJGxpY2VuY2UgPSAnJzsKCQlpZiAoaXNzZXQoJHBhcmFtc1snbGljZW5jZSddKSAmJiAkcGFyYW1zWydsaWNlbmNlJ10gIT0gJycpCgkJewoJCQkkbGljZW5jZSA9ICRwYXJhbXNbJ2xpY2VuY2UnXTsKCQl9CgkJZWxzZQoJCXsKCQkJJGVycm9yKys7CgkJfQovL3Zhcl9kdW1wKCRsaWNlbmNlKTsKCQkkY2hvaXhfbW9pcyA9ICcnOwoJCWlmIChpc3NldCgkcGFyYW1zWydjaG9peF9tb2lzJ10pICYmICRwYXJhbXNbJ2Nob2l4X21vaXMnXSAhPSAnJykKCQl7CgkJCSRjaG9peF9tb2lzID0gJHBhcmFtc1snY2hvaXhfbW9pcyddOwoJCQkvLyRlcnJvcisrOwoJCX0KCQllbHNlCgkJewoJCQkkZXJyb3IrKzsKCQl9CgkJaWYoJGVycm9yPjApCgkJewoJCQkkdGhpcy0+U2V0TWVzc2FnZSgncGFyYW3DqHRyZXMgbWFucXVhbnRzJyk7CgkJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3NpdHVhdGlvbicpOwoJCX0KCQkKCQlmb3JlYWNoKCRsaWNlbmNlIGFzICRrZXk9PiR2YWx1ZSkKCQl7CgkJCS8vZWNobyAka2V5LiI9PiIuJHZhbHVlLiI8YnIvPiI7CgkJCWlmKCAkdmFsdWUgIT0wIHx8ICR2YWx1ZSAhPScnKQoJCQkKCQkJewoJCQkJCgkJCQkkcXVlcnkgPSAiU0VMRUNUIG1vaXMsIGFubmVlLCBsaWNlbmNlIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3NpdF9tZW5zIFdIRVJFIGxpY2VuY2UgPSA/IEFORCBtb2lzID0gPyBBTkQgYW5uZWUgPSA/IjsKCQkJCS8vZWNobyAkcXVlcnk7CgkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgka2V5LCRjaG9peF9tb2lzLCRhbm5lZSkpOwoJCQkKCQkJCQlpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPT0wKQoJCQkJCXsKCQkJCQkJCgkJCQkJCSRxdWVyeTIgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3NpdF9tZW5zIChpZCwgZGF0ZWNyZWF0ZWQsIGRhdGVtYWosIG1vaXMsIGFubmVlLCBwaGFzZSwgbGljZW5jZSwgbm9tLCBwcmVub20sIHBvaW50cykgVkFMVUVTICgnJywgPywgPywgPywgPywgPywgPywgPywgPywgPykiOwoJCQkJCQkvL2VjaG8gJHF1ZXJ5MjsKCQkJCQkJJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MiwgYXJyYXkoJG5vdywgJG5vdywgJGNob2l4X21vaXMsICRhbm5lZSwgJHBoYXNlLCAka2V5LCRub20sICRwcmVub20sJHZhbHVlKSk7CgkJCQkJCSRpKys7CgkJCQkJCQoJCQkJCX0KCQkJfQoJCQkJCgkJfQoKJGRlc2lnbmF0aW9uLj0kaS4iIHNpdHVhdGlvbihzKSBtb2RpZmnDqWUocykiOwokdGhpcy0+U2V0TWVzc2FnZSgiJGRlc2lnbmF0aW9uIik7CiR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3NpdHVhdGlvbicpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.do_add_compet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CmRlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKCglpZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgTWFuYWdlJykpCgl7CgkJJGRlc2lnbmF0aW9uIC49JHRoaXMtPkxhbmcoJ25lZWRwZXJtaXNzaW9uJyk7CgkJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbXBldHMnKTsKCX0KLy9vbiByw6ljdXDDqHJlIGxlcyB2YWxldXJzCi8vcG91ciBsJ2luc3RhbnQgcGFzIGQnZXJyZXVyCiRlcnJvciA9IDA7CiRlZGl0ID0gMDsvL3BvdXIgc2F2b2lyIHNpIG9uIGZhaXQgdW4gdXBkYXRlIG91IHVuIGluc2VydDsgMCA9IGluc2VydAoJCQoJCSRpZGVwcmV1dmUgPSAnJzsKCQlpZiAoaXNzZXQoJHBhcmFtc1snaWRlcHJldXZlJ10pICYmICRwYXJhbXNbJ2lkZXByZXV2ZSddICE9ICcnKQoJCXsKCQkJJGlkZXByZXV2ZSA9ICRwYXJhbXNbJ2lkZXByZXV2ZSddOwoJCX0KCQllbHNlCgkJewoJCQkkZXJyb3IrKzsKCQl9CgkJJGRhdGVfZGVidXQgPSAnJzsKCQlpZiAoaXNzZXQoJHBhcmFtc1snZGF0ZV9kZWJ1dCddKSAmJiAkcGFyYW1zWydkYXRlX2RlYnV0J10gIT0nJykKCQl7CgkJCSRkYXRlX2RlYnV0ID0gJHBhcmFtc1snZGF0ZV9kZWJ1dCddOwoJCX0KCQllbHNlCgkJewoJCQkkZXJyb3IrKzsKCQl9CgkJJGRhdGVfZmluID0gJyc7CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ2RhdGVfZmluJ10pICYmICRwYXJhbXNbJ2RhdGVfZmluJ10gIT0nJykKCQl7CgkJCSRkYXRlX2ZpbiA9ICRwYXJhbXNbJ2RhdGVfZmluJ107CgkJfQoJCWVsc2UKCQl7CgkJCSRkYXRlX2ZpbiA9ICRkYXRlX2RlYnV0OwoJCX0KCQkkbnVtam91cm4gPSAnJzsKCQlpZiAoaXNzZXQoJHBhcmFtc1snbnVtam91cm4nXSkgJiYgJHBhcmFtc1snbnVtam91cm4nXSAhPScnKQoJCXsKCQkJJG51bWpvdXJuID0gJHBhcmFtc1snbnVtam91cm4nXTsKCQl9CgkJZWxzZQoJCXsKCQkJJGVycm9yKys7CgkJfQoJCSRpbmRpdnMgPSAnJzsKCQlpZiAoaXNzZXQoJHBhcmFtc1snaW5kaXZzJ10pICYmICRwYXJhbXNbJ2luZGl2cyddICE9JycpCgkJewoJCQkkaW5kaXZzID0gJHBhcmFtc1snaW5kaXZzJ107CgkJfQoJCWVsc2UKCQl7CgkJCSRlcnJvcisrOwoJCX0KCQkvL3MnYWdpdC1pbCBkJ3VuZSDDqWRpdGlvbiBvdSBkJ3VuIGFqb3V0ID8KCQkkcmVjb3JkX2lkID0gJyc7CgkJaWYoaXNzZXQoJHBhcmFtc1sncmVjb3JkX2lkJ10pICYmICRwYXJhbXNbJ3JlY29yZF9pZCddICE9JycpCgkJewoJCQkkcmVjb3JkX2lkID0gJHBhcmFtc1sncmVjb3JkX2lkJ107CgkJCSRlZGl0ID0gMTsvL2MnZXN0IHVuIHVwZGF0ZQoJCX0KCQkkdGFnID0gcGluZ19hZG1pbl9vcHM6OnRhZygkcmVjb3JkX2lkLCRpZGVwcmV1dmUsJGluZGl2cywkZGF0ZV9kZWJ1dCwkZGF0ZV9maW4pOwoJCQoJCS8vb24gY2FsY3VsZSBsZSBuYiBkJ2VycmV1cgoJCWlmKCRlcnJvcj4wKQoJCXsKCQkJJHRoaXMtPlNldG1lc3NhZ2UoJ1BhcmFtZXRyZXMgcmVxdWlzIG1hbnF1YW50cyAhJyk7CgkJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbXBldHMnKTsKCQl9CQkKCQkKCQlpZigkZWRpdCA9PSAwKQoJCXsKCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jYWxlbmRyaWVyIChpZCwgaWRlcHJldXZlLCBkYXRlX2RlYnV0LCBkYXRlX2ZpbiwgbnVtam91cm4sdGFnKSBWQUxVRVMgKCcnLCA/LCA/LCA/LCA/LD8pIjsKCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGlkZXByZXV2ZSwkZGF0ZV9kZWJ1dCwgJGRhdGVfZmluLCAkbnVtam91cm4sJHRhZykpOwoJCQkKCQl9CgkJZWxzZQoJCXsKCQkJJHF1ZXJ5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2FsZW5kcmllciBTRVQgaWRlcHJldXZlID0gPywgZGF0ZV9kZWJ1dCA9PywgZGF0ZV9maW4gPSA/LCBudW1qb3VybiA9ID8sdGFnID0gPyBXSEVSRSBpZCA9ID8iOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkaWRlcHJldXZlLCRkYXRlX2RlYnV0LCAkZGF0ZV9maW4sICRudW1qb3VybiwkdGFnLCRyZWNvcmRfaWQpKTsKCQkJCgkJfQoJCQoJCQlpZighJGRicmVzdWx0KQoJCQl7CgkJCQkkZGVzaWduYXRpb24gPSAkZGItPkVycm9yTXNnKCk7CgkJCQkkdGhpcy0+U2V0TWVzc2FnZSgiJGRlc2lnbmF0aW9uIik7CgkJCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdjYWxlbmRyaWVyJyk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CgkJCQkkc3RhdHVzID0gJ09rJzsKCQkJCSRkZXNpZ25hdGlvbiA9ICJVbmUgbm91dmVsbGUgZGF0ZSBkdSBjYWxlbmRyaWVyIGEgw6l0w6kgZW50csOpZSI7CgkJCQkkYWN0aW9uID0gJ2RvX2FkZF9jb21wZXQnOwoJCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCAkZGVzaWduYXRpb24sJGFjdGlvbik7CgkJCX0KCQkKCiR0aGlzLT5TZXRNZXNzYWdlKCdEYXRlIGVucmVnaXN0csOpZSAhJyk7CiR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbXBldHMnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.do_add_sit_mens.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2luY2x1ZGUvcHJlZnMucGhwJyk7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwokcGhhc2UgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGhhc2VfZW5fY291cnMnKTsKJHNhaXNvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKCWlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBNYW5hZ2UnKSkKCXsKCQkkZGVzaWduYXRpb24uPSR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicpOwoJCSR0aGlzLT5TZXRNZXNzYWdlKCIkZGVzaWduYXRpb24iKTsKCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdzaXR1YXRpb24nKTsKCX0KCSRhbm5lZSA9IGRhdGUoJ1knKTsKCSRtb2lzID0gZGF0ZSgnbicpOwoJCi8vb24gcsOpY3Vww6hyZSBsZXMgdmFsZXVycwovL3BvdXIgbCdpbnN0YW50IHBhcyBkJ2VycmV1cgokZXJyb3IgPSAwOwokaSA9IDA7CgkJCgkJJGxpY2VuY2UgPSAnJzsKCQlpZiAoaXNzZXQoJHBhcmFtc1snbGljZW5jZSddKSAmJiAkcGFyYW1zWydsaWNlbmNlJ10gIT0gJycpCgkJewoJCQkkbGljZW5jZSA9ICRwYXJhbXNbJ2xpY2VuY2UnXTsKCQl9CgkJZWxzZQoJCXsKCQkJJGVycm9yKys7CgkJfQoJCSRub20gPSAnJzsKCQlpZiAoaXNzZXQoJHBhcmFtc1snbm9tJ10pICYmICRwYXJhbXNbJ25vbSddICE9ICcnKQoJCXsKCQkJJG5vbSA9ICRwYXJhbXNbJ25vbSddOwoJCX0KCQkKCQkkcHJlbm9tID0gJyc7CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ3ByZW5vbSddKSAmJiAkcGFyYW1zWydwcmVub20nXSAhPSAnJykKCQl7CgkJCSRwcmVub20gPSAkcGFyYW1zWydwcmVub20nXTsKCQl9CgkJCgkJCgkJJG1vbnRoID0gJyc7CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ21vbnRoJ10pICYmICRwYXJhbXNbJ21vbnRoJ10gIT0gJycpCgkJewoJCQkkbW9udGggPSAkcGFyYW1zWydtb250aCddOwoJCX0KCQkKCQllbHNlCgkJewoJCQkkZXJyb3IrKzsKCQl9CgkJCgkJaWYoJGVycm9yPjApCgkJewoJCQkkdGhpcy0+U2V0TWVzc2FnZSgncGFyYW3DqHRyZXMgbWFucXVhbnRzJyk7CgkJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3NpdHVhdGlvbicpOwoJCX0KCQlmb3JlYWNoKCRtb250aCBhcyAka2V5PT4kdmFsdWUpCgkJewoJCQkKCQlpZigkcGhhc2UgPT0xKQoJCXsKCQkJJGFubmVlX3JlZiA9ICRhbm5lZTsKCQl9CgkJZWxzZWlmKCRwaGFzZSA9PTIpCgkJewoJCQlpZigka2V5ID49OSAmJiAka2V5IDw9MTIpCgkJCXsKCQkJCSRhbm5lZV9yZWYgPSAkYW5uZWUtMTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRhbm5lZV9yZWYgPSAkYW5uZWU7CgkJCX0KCQl9CgkJCSRxdWVyeSA9ICJTRUxFQ1QgbW9pcywgYW5uZWUsIGxpY2VuY2UgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfc2l0X21lbnMgV0hFUkUgbGljZW5jZSA9ID8gQU5EIG1vaXMgPSA/IEFORCBhbm5lZSA9ID8iOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGljZW5jZSwka2V5LCRhbm5lZV9yZWYpKTsKCQkJCgkJCQlpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPT0wKQoJCQkJewoJCQkJCQoJCQkJCQoJCQkJCWlmKCAkdmFsdWUgPjAgKQoJCQkJCXsKCQkJCQkJCgkJCQkJJHF1ZXJ5MiA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfc2l0X21lbnMgKGlkLCBkYXRlY3JlYXRlZCwgZGF0ZW1haiwgc2Fpc29uLCBtb2lzLCBhbm5lZSwgcGhhc2UsIGxpY2VuY2UsIG5vbSwgcHJlbm9tLCBwb2ludHMpIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIjsKCQkJCQkvL2VjaG8gJHF1ZXJ5MjsKCQkJCQkkZGJyZXN1bHRhdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkyLCBhcnJheSgkbm93LCAkbm93LCRzYWlzb24sICRrZXksICRhbm5lZV9yZWYsICRwaGFzZSwgJGxpY2VuY2UsJG5vbSwgJHByZW5vbSwkdmFsdWUpKTsKCQkJCQkkaSsrOwoJCQkJCX0KCQkJCX0KCQkJCS8qCgkJCQllbHNlaWYoJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPT0xKQoJCQkJewoJCQkJCS8vSWwgeSBhIGTDqWrDoCB1biBlbnJlZ2lzdHJlbWVudCwgZXN0LWlsIGNvbXBsZXQgPwoJCQkJCQoJCQkJCWlmKCR2YWx1ZSA+MCkKCQkJCQl7CgkJCQkJCSRxdWVyeTMgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19zaXRfbWVucyBTRVQgcG9pbnRzID0gPyBXSEVSRSBsaWNlbmNlID0gPyBBTkQgbW9pcyA9ID8iOwoJCQkJCQkkZGJyZXMgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MywgYXJyYXkoJHZhbHVlLCRsaWNlbmNlLCRrZXkpKTsKCQkJCQl9CgkJCQkJCgkJCQl9CgkJCQkqLwoJCX0KCiRkZXNpZ25hdGlvbiA9ICRpLiIgc2l0dWF0aW9uKHMpIG1vZGlmacOpZShzKSI7CiR0aGlzLT5TZXRNZXNzYWdlKCIkZGVzaWduYXRpb24iKTsKJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignc2l0dWF0aW9uJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.do_add_type_compet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwoKCWlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBNYW5hZ2UnKSkKCXsKCQkkZGVzaWduYXRpb24gLj0kdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKTsKCQkkdGhpcy0+U2V0TWVzc2FnZSgiJGRlc2lnbmF0aW9uIik7CgkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignY29tcGV0cycpOwoJfQovL29uIHLDqWN1cMOocmUgbGVzIHZhbGV1cnMKLy9wb3VyIGwnaW5zdGFudCBwYXMgZCdlcnJldXIKJGRlc2lnbmF0aW9uID0gJyc7CiRlcnJvciA9IDA7CgkJJG5hbWUgPSAnJzsKCQlpZiAoaXNzZXQoJHBhcmFtc1snbmFtZSddKSAmJiAkcGFyYW1zWyduYW1lJ10gIT0nJykKCQl7CgkJCSRuYW1lID0gJHBhcmFtc1snbmFtZSddOwoJCX0KCQllbHNlCgkJewoJCQkkZXJyb3IrKzsKCQl9CgkJCgkJJGlkZXByZXV2ZSA9ICcnOwoJCWlmIChpc3NldCgkcGFyYW1zWydpZGVwcmV1dmUnXSkgJiYgJHBhcmFtc1snaWRlcHJldXZlJ10gIT0gJycpCgkJewoJCQkkaWRlcHJldXZlID0gJHBhcmFtc1snaWRlcHJldXZlJ107CgkJfQoJCWVsc2UKCQl7CgkJCSRlcnJvcisrOwoJCX0KCQkKCQkkY29lZmZpY2llbnQgPSAnJzsKCQlpZiAoaXNzZXQoJHBhcmFtc1snY29lZmZpY2llbnQnXSkgJiYgJHBhcmFtc1snY29lZmZpY2llbnQnXSAhPScnKQoJCXsKCQkJJGNvZWZmaWNpZW50ID0gJHBhcmFtc1snY29lZmZpY2llbnQnXTsKCQl9CgkJZWxzZQoJCXsKCQkJJGVycm9yKys7CgkJfQoJCSRpbmRpdnMgPSAnJzsKCQlpZiAoaXNzZXQoJHBhcmFtc1snaW5kaXZzJ10pICYmICRwYXJhbXNbJ2luZGl2cyddICE9JycpCgkJewoJCQkkaW5kaXZzID0gJHBhcmFtc1snaW5kaXZzJ107CgkJfQoJCWVsc2UKCQl7CgkJCSRlcnJvcisrOwoJCX0KCQkkaWRvcmdhID0gJyc7CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ2lkb3JnYSddKSAmJiAkcGFyYW1zWydpZG9yZ2EnXSAhPScnKQoJCXsKCQkJJGlkb3JnYSA9ICRwYXJhbXNbJ2lkb3JnYSddOwoJCX0KCQllbHNlCgkJewoJCQkkZXJyb3IrKzsKCQl9CgkJCgkJLy9vbiBjYWxjdWxlIGxlIG5iIGQnZXJyZXVyCgkJaWYoJGVycm9yPjApCgkJewoJCQkkdGhpcy0+U2V0bWVzc2FnZSgnUGFyYW1ldHJlcyByZXF1aXMgbWFucXVhbnRzICEnKTsKCQkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignY29tcGV0cycpOwoJCX0JCQoJCSRlZGl0ID0gJyc7CgkJaWYoaXNzZXQoJHBhcmFtc1snZWRpdCddKSAmJiAkcGFyYW1zWydlZGl0J10gPT0nT3VpJykKCQl7CgkJCS8vb24gcmVnYXJkZSBsZSByZWNvcmRfaWQgcXVpIGVzdCBlbiBwYXJhbWV0cmUKCQkJaWYoaXNzZXQoJHBhcmFtc1sncmVjb3JkX2lkJ10pICYmICRwYXJhbXNbJ3JlY29yZF9pZCddICE9ICcnKQoJCQl7CgkJCQkkcmVjb3JkX2lkPSAkcGFyYW1zWydyZWNvcmRfaWQnXTsKCQkJfQoJCQkvL2lsIGZhdXQgYXVzc2kgY3LDqWVyIHVuIHRhZwoJCQkkdGFnID0gcGluZ19hZG1pbl9vcHM6OnRhZygkcmVjb3JkX2lkLCRpZGVwcmV1dmUsICRpbmRpdnMpOwoJCQkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyBTRVQgbmFtZSA9ID8sIGNvZWZmaWNpZW50ID0gPywgaW5kaXZzID0gPyx0YWcgPSA/LGlkb3JnYSA9ID8gV0hFUkUgaWQgPSA/IjsKCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG5hbWUsICRjb2VmZmljaWVudCwgJGluZGl2cywkdGFnLCAkaWRvcmdhLCRyZWNvcmRfaWQpKTsKCQkJJGRlc2lnbmF0aW9uLj0iQ29tcMOpdGl0aW9uIG1vZGlmacOpZSI7CgkJCSR0aGlzLT5TZXRNZXNzYWdlKCIkZGVzaWduYXRpb24iKTsKCQkJLy8kdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdjb21wZXRzJyk7CgkJfQoJCWVsc2UKCQl7CgkJCS8vb24gY3LDqcOpCgkJJGNvZGVfY29tcGV0ID0gcGluZ19hZG1pbl9vcHM6OnJhbmRvbSgzKTsKCQkkcXVlcnkxID0gIlNIT1cgVEFCTEUgU1RBVFVTIExJS0UgJyIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucycgIjsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MSk7CgkJJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKCQkkcmVjb3JkX2lkID0gJHJvd1snQXV0b19pbmNyZW1lbnQnXTsKCQkkdGFnID0gcGluZ19hZG1pbl9vcHM6OnRhZygkcmVjb3JkX2lkLCRpZGVwcmV1dmUsJGluZGl2cyk7CgkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyAoaWQsIG5hbWUsIGNvZGVfY29tcGV0LCBjb2VmZmljaWVudCwgaW5kaXZzKSBWQUxVRVMgKCcnLCA/LCA/LCA/LCA/KSI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG5hbWUsJGNvZGVfY29tcGV0LCAkY29lZmZpY2llbnQsICRpbmRpdnMpKTsKCQkKCQkJaWYoISRkYnJlc3VsdCkKCQkJewoJCQkJJGRlc2lnbmF0aW9uID0gJGRiLT5FcnJvck1zZygpOwoJCQkJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJCQkvLwkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdjb21wZXRzJyk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CgkJCQkkc3RhdHVzID0gJ09rJzsKCQkJCSRkZXNpZ25hdGlvbiA9ICJVbmUgbm91dmVsbGUgY29tcMOpdGl0aW9uIGEgw6l0w6kgZW50csOpZSI7CgkJCQkkYWN0aW9uID0gJ2RvX2FkZF90eXBlX2NvbXBldGl0aW9uJzsKCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywgJGRlc2lnbmF0aW9uLCRhY3Rpb24pOwoJCQl9CgkJCgkJfQoKJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwokdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdjb21wZXRzJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.do_create_contact.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIGlmICghaXNzZXQoJGdDbXMpKSBleGl0OwpkZWJ1Z19kaXNwbGF5KCRwYXJhbXMsJ1BhcmFtZXRlcnMnKTsKJGRiID0mICR0aGlzLT5HZXREYigpOwokbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CiRtZXNzYWdlID0gJyc7CiAgIAogICBpZiAoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKSAKCXsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHQnLCAkcmV0dXJuaWQpOwoJfQoJCgkvLyAxIC0gb24gdsOpcmlmaWUgbGVzIGNoYW1wcyBwYXNzw6lzCgkkaWRfdXNlciA9ICcnOwoJLyppZiAoaXNzZXQoJHBhcmFtc1snaWRfdXNlciddKSkKCQl7CgkJCSRpZF91c2VyID0gJHBhcmFtc1snaWRfdXNlciddOwoJCX0KCSovCgkkbGljZW5jZSA9ICcnOwoJaWYgKGlzc2V0ICgkcGFyYW1zWydsaWNlbmNlJ10pKQoJCXsKCQkJJGxpY2VuY2UgPSAkcGFyYW1zWydsaWNlbmNlJ107CgkJfQoJJHR5cGVfY29udGFjdCA9ICcnOwoJaWYgKGlzc2V0KCRwYXJhbXNbJ3R5cGVfY29udGFjdCddKSkKCXsKCSAgJHR5cGVfY29udGFjdCA9ICRwYXJhbXNbJ3R5cGVfY29udGFjdCddOwoJfQoJCglpZiAoaXNzZXQoJHBhcmFtc1snY29udGFjdCddKSAmJiAhZW1wdHkoJHBhcmFtc1snY29udGFjdCddKSkKCQl7CgkJCWlmKCR0eXBlX2NvbnRhY3Q9PSdlbWFpbCcpewoJCQkJaWYoIWlzX2VtYWlsKCRwYXJhbXNbJ2NvbnRhY3QnXSkpewoJCQkJCSRtZXNzYWdlLj0iTFwnYWRyZXNzZSBlbWFpbCBlc3QgaW5jb3JyZWN0ZSI7CgkJCQkJJHRoaXMtPlNldE1lc3NhZ2UoIiRtZXNzYWdlIik7CgkJCQkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignam91ZXVycycpOwoJCQkJfQoJCQkJZWxzZXsKCQkJCQkkY29udGFjdCA9ICRwYXJhbXNbJ2NvbnRhY3QnXTsKCQkJCX0KCQkJfQoJCQllbHNlewoJCQkJJGNvbnRhY3QgPSAkcGFyYW1zWydjb250YWN0J107CgkJCX0KCQl9CgkJZWxzZXsKCQkJLy9sZSBjb250YWN0IGVzdCB2aWRlLCBjJ2VzdCBwYXMgYm9uLgoJCX0KCQkKCQkKCSRkZXNjcmlwdGlvbiA9ICcnOwoJaWYgKGlzc2V0ICgkcGFyYW1zWydkZXNjcmlwdGlvbiddKSkKCQl7CgkJCSRkZXNjcmlwdGlvbiA9ICRwYXJhbXNbJ2Rlc2NyaXB0aW9uJ107CgkJfQovL2xlIGNvbnRhY3QgZXN0LWlsIGTDqWrDoCBwcsOpc2VudCA/Ci8vb24gdsOpcmlmaWUKJHF1ZXJ5PSAiU0VMRUNUIGNvbnRhY3QgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY29tbSBXSEVSRSBjb250YWN0ID0gPyI7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRjb250YWN0KSk7CmlmKCRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA+MCkJewoJJG1lc3NhZ2UuPSJDb250YWN0IGTDqWrDoCBwcsOpc2VudCAhIjsKCSR0aGlzLT5TZXRNZXNzYWdlKCIkbWVzc2FnZSIpOwoJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignam91ZXVycycpOwp9CiRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY29tbSAoaWQsIGRhdGVjcmVhdGVkLCBkYXRlbWFqLGxpY2VuY2UsIHR5cGVfY29udGFjdCwgY29udGFjdCwgZGVzY3JpcHRpb24pIFZBTFVFUyAoPyw/LD8sPyw/LD8sPykiOwkKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGlkLCRub3csICRub3csICRsaWNlbmNlLCAkdHlwZV9jb250YWN0LCAkY29udGFjdCwgJGRlc2NyaXB0aW9uKSk7CmlmKCEkZGJyZXN1bHQpewoJJG1lc3NhZ2UuPSRkYi0+RXJyb3JNc2coKTsKfQplbHNlCnsKCSRtZXNzYWdlLj0gIkNvbnRhY3QgYWpvdXTDqSI7Cn0KLy9zaSBsZSB0eXBlIGRlIGNvbnRhY3QgYWpvdXTDqSBlc3QgZW1haWwsIG9uIHZhIHBvdXZvaXIgbCdham91dGVyIGRhbnMgRkVVIHNpIG5vbiBkw6lqw6AgcHLDqXNlbnQKLy8gb24gdmEgaW5zY3JpcmUgbGUgam91ZXVyIGRhbnMgRkVVIHNpIHByw6lzZW50CmlmKCR0eXBlX2NvbnRhY3Q9PSdlbWFpbCcpewokY29udGFjdCA9IAkKJGZldSA9ICRnQ21zLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwovL29uIHRlc3RlIHNpIGxlIG1vZHVsZSBlc3QgcHLDqXNlbnQgb3Ugbm9uCmlmKCEkZmV1KXsKCSRtZXNzYWdlLj0iTW9kdWxlIEZFVSBhYnNlbnQiOwp9CmVsc2UgewoJJG5hbWUgPSAkcGFyYW1zWydjb250YWN0J107CgkkY29udGFjdCA9ICRwYXJhbXNbJ2NvbnRhY3QnXTsKCS8vbCd1dGlsaXNhdGV1ciBleGlzdGUtdC1pbCBkw6lqw6AgPwoJJHF1ZXJ5PSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyBXSEVSRSB1c2VybmFtZSA9ID8iOwoJLy9lY2hvICRxdWVyeTsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRjb250YWN0KSk7CgkvLyRjb3VudGFnZSA9ICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKTsKCWlmKCRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA9PSAwKXsKCSRwc2V1ZG8gPSAnVXh6cXNVSU0nOwoJJGV4cGlyZXMgPSBta3RpbWUoMCwwLDAsZGF0ZSgibSIpLGRhdGUoImQiKSxkYXRlKCJZIikrNSk7CgkkZG9fbWQ1ID0gJyc7CgkkcXVlcnkgPSAkZmV1LT5BZGRVc2VyKCRuYW1lLCAkcHNldWRvLCAkZXhwaXJlcywkZG9fbWQ1ID0gdHJ1ZSk7CgkkZGZsdF9ncm91cCA9ICRmZXUtPkdldFByZWZlcmVuY2UoJ2RlZmF1bHRfZ3JvdXAnKTsKCSRmZXUtPkF1ZGl0KCcnLCRmZXUtPkdldE5hbWUoKSwgJG5hbWUpOwoJCgkkdWlkID0gJGZldS0+R2V0VXNlcklkKCRuYW1lKTsKCS8vJHVpZCA9ICR1c2VyWzFdOwoKCS8vIHNldCBoaXMgZ3JvdXBzLgoJaWYoICRkZmx0X2dyb3VwID4gMCApIHsKCSAkZmV1LT5Bc3NpZ25Vc2VyVG9Hcm91cCggJHVpZCwgJGRmbHRfZ3JvdXAgKTsKCX0KCSRtZXNzYWdlLj0iTm91dmVsIHV0aWxpc2F0ZXVyIGRhbnMgRkVVIjsKCX0KCWVsc2V7CgkJJG1lc3NhZ2UuPSJVdGlsaXNhdGV1ciBkw6lqw6AgaW5zY3JpdCBkYW5zIEZFVSI7Cgl9Cn0vL2ZpbiBkZSBsJ2luc3RhbmNpYXRpb24gZGUgRkVVCgoKLy9vbiB2YSBlc3NheWVyIGRlIGwnaW5jbHVyZSBkYW5zIGxhIG5ld3NsZXR0ZXIKJG5tcyA9ICRnQ21zLT5HZXRNb2R1bGVJbnN0YW5jZSgnTk1TJyk7CmlmKCEkbm1zKXsKCSRtZXNzYWdlLj0iIE1vZHVsZSBOZXdzbGV0dGVyIGluZGlzcG9uaWJsZSI7Cn0KZWxzZXsKCS8vbGUgbW9kdWxlIGVzdCBkaXNwb25pYmxlLCBvbiB2YSB2b2lyIHNpIGwndXRpbGlzYXRldXIgZXN0IGTDqWrDoCBpbnNjcml0CgkkbWVzc2FnZS49IiBMZSBtb2R1bGUgZXN0IE9rLCBvbiBwZXV0IGNvbnRpbnVlciI7CgkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX25tc191c2VycyBXSEVSRSBlbWFpbCA9ID8iOwoJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGNvbnRhY3QpKTsKCQoJaWYoJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApewoJCS8vIGwndXRpbGlzYXRldXIgZXN0IGTDqWrDoCBkcyBOTVMKCQkkbWVzc2FnZS49IkFkcmVzc2UgZW1haWwgZMOpasOgIGRhbnMgbGEgbmV3c2xldHRlciI7Cgl9CgllbHNlewoJCS8vJG1lc3NhZ2UuPSIgT24gcGV1dCBpbmNsdXJlLiI7CgkJLy9sJ3V0aWxpc2F0ZXVyIG4nZXN0IHBhcyBlbmNvcmUgZHMgTk1TLCBvbiBsJ2luY2x1dAoJCSRlbWFpbCA9ICRjb250YWN0OwoJCSRsaXN0cyA9IGFycmF5KCIxIik7CgkJJHVzZXJuYW1lID0gJ1RvcCc7CgkJJGRpc2FibGVkID0gMDsKCQkkY29uZmlybWVkID0gMTsvL29uIHBldXQgYXVzc2kgYXBwZWxlciB1bmUgcHLDqWbDqXJlbmNlIGRhbnMgbGVzIG9wdGlvbnMgZGUgY29uZmlnCgkJLy9kdSBzdHlsZSwgb24gZW52b2llIHVuIGVtYWlsIHBvdXIgY29uZmlybWVyIGxhIGRlbWFuZGUgb3UgcGFzCgkJCgkJJHF1ZXJ5ID0gJG5tcy0+QWRkVXNlcigkZW1haWwsJGxpc3RzLCR1c2VybmFtZSwkZGlzYWJsZWQsJGNvbmZpcm1lZCk7CgkJaWYoISRxdWVyeSl7CgkJCSRtZXNzYWdlLj0kZGItPkVycm9yTXNnKCk7CgkJfQoJCWVsc2V7CgkJCSRtZXNzYWdlLj0iVXRpbGlzYXRldXIgYWpvdXTDqSDDoCBsYSBuZXdzbGV0dGVyIjsKCQl9Cgl9Cn0KfS8vZmluIGR1IGlmIGNvbnRhY3QgPSBlbWFpbAokdGhpcy0+U2V0TWVzc2FnZSgiJG1lc3NhZ2UiKTsKJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignam91ZXVycycpOwoJCgogICAgICAgPz4=]]></data>
	</file>
	<file>
	  <filename>/action.do_edit_joueur.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwppZiAoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKSB7ICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOyB9CiRub3cgPSB0cmltKCRkYi0+REJUaW1lU3RhbXAodGltZSgpKSwgIiciKTsKJHNhaXNvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKJGRiID0mICR0aGlzLT5HZXREYigpOwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3RyYXZhdXgucGhwJyk7CiRkZXNpZ25hdGlvbiA9ICcnOwovL2VjaG8gJHBhcmFtc1sncmVjb3JkX2lkJ107Ci8qCgkJaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgQ29tbWVudHMnKSkKCQl7CgkJCWVjaG8gJzxwIGNsYXNzPSJlcnJvciI+Jy4kdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTWFuYWdlIENvbW1lbnRzJykpLic8L3A+JzsKCQkJcmV0dXJuOwoJCX0KKi8KCQkvKk9uIHLDqWN1cMOocmUgbGVzIHZhcmlhYmxlIGV0IG9uIGxlcyB0cmFpdGUgKi8KCQlpZiAoIGlzc2V0KCRwYXJhbXNbJ2xpY2VuY2UnXSApKQoJCXsKCQkJJGxpY2VuY2UgPSAkcGFyYW1zWydsaWNlbmNlJ107CgkJCQoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snYWN0aWYnXSkpCgkJewoJCQkkYWN0aWYgPSAkcGFyYW1zWydhY3RpZiddOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snbm9tJ10pKQoJCXsKCQkJJG5vbSA9IHN0cnRvdXBwZXIoJHBhcmFtc1snbm9tJ10pOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1sncHJlbm9tJ10pKQoJCXsKCQkJJHByZW5vbSA9ICRwYXJhbXNbJ3ByZW5vbSddOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snYmlydGhkYXknXSkpCgkJewoJCQkkYmlydGhkYXkgPSAkcGFyYW1zWydiaXJ0aGRheSddOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snc2V4ZSddKSkKCQl7CgkJCSRzZXhlID0gJHBhcmFtc1snc2V4ZSddOwoJCX0KCQkKCQlpZiAoaXNzZXQoJHBhcmFtc1snYWRyZXNzZSddKSkKCQl7CgkJCSRhZHJlc3NlID0gJHBhcmFtc1snYWRyZXNzZSddOwoJCX0KCQkKCQlpZiAoIGlzc2V0KCAkcGFyYW1zWyd2aWxsZSddICkpCgkJewoJCQkkdmlsbGUgPSAkcGFyYW1zWyd2aWxsZSddOwoJCX0KCQlpZiAoIGlzc2V0KCAkcGFyYW1zWydjb2RlcG9zdGFsJ10gKSkKCQl7CgkJCSRjb2RlcG9zdGFsID0gJHBhcmFtc1snY29kZXBvc3RhbCddOwoJCX0KCQkvL29uIHJlZ2FyZGUgc2kgbGUgam91ZXVyIGV4aXN0ZSBkw6lqw6Agc2kgb3VpIFVQREFURSBzaSBub24gSU5TRVJUIElOVE8KCQkkcXVlcnkgPSAiU0VMRUNUIGxpY2VuY2UgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBXSEVSRSBsaWNlbmNlID0gPyI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGxpY2VuY2UpKTsKCQkkY291bnQgPSAkZGJyZXN1bHQtPlJlY29yZENvdW50KCk7CgkJaWYgKCRjb3VudD4wKXsKCQkJJGFqb3V0ID0gMTsKCQkJJHF1ZXJ5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBTRVQgIGFjdGlmID0gPywgbm9tID0gPywgcHJlbm9tID0gPywgYmlydGhkYXkgPSA/LCBzZXhlID0gPywgYWRyZXNzZSA9ID8sIHZpbGxlID0gPywgY29kZXBvc3RhbCA9ID8gV0hFUkUgbGljZW5jZSA9ID8iOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkYWN0aWYsJG5vbSwkcHJlbm9tLCRiaXJ0aGRheSwgJHNleGUsICRhZHJlc3NlLCAkdmlsbGUsICRjb2RlcG9zdGFsLCAkbGljZW5jZSkpOwoJCQkkZGVzaWduYXRpb24uPSJNaXNlIMOgIGpvdXIgZGUiLiRub20uICIgIi4kcHJlbm9tOwoJCX0KCQllbHNlewoJCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgKGlkLGFjdGlmLGxpY2VuY2Usbm9tLCBwcmVub20sIGJpcnRoZGF5LCBzZXhlLCBhZHJlc3NlLCB2aWxsZSwgY29kZXBvc3RhbCkgVkFMVUVTICgnJywgPywgPywgPywgPywgPywgPywgPywgPywgPykiOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkYWN0aWYsICRsaWNlbmNlLCAkbm9tLCAkcHJlbm9tLCAkYmlydGhkYXksICRzZXhlLCAkYWRyZXNzZSwgJHZpbGxlLCAkY29kZXBvc3RhbCkpOwoJCQkKCQkJaWYoISRkYnJlc3VsdCl7CgkJCQkkZGVzaWduYXRpb24uPSAkZGItPkVycm9yTXNnKCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkZGVzaWduYXRpb24uPSJBam91dCBkZSAiLiRub20uIiAiLiRwcmVub207CgkJCX0KCQkJCgkJCS8vaWwgZmF1dCBhdXNzaSBpbnPDqXJlciBsZSBqb3VldXIgZGFucyBsYSB0YWJsZSBkZXMgc2l0dWF0aW9ucyBtZW5zdWVsbGVzCgkJCS8vZXN0LWlsIGTDqWrDoCBwcsOpc2VudCA/CgkJCSRxdWVyeSA9ICJTRUxFQ1QgbGljZW5jZSBGUk9NIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgV0hFUkUgbGljZW5jZSA9ID8iOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGljZW5jZSkpOwoJCQkkY29tcHRldXIgPSAkZGJyZXN1bHQtPlJlY29yZENvdW50KCk7CgkJCWlmKCRjb21wdGV1ciA9PTApCgkJCXsJCQkKCQkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXBfcGFydGllcyAoaWQsIHNhaXNvbiwgZGF0ZW1haiwgbGljZW5jZSwgc2l0X21lbnMsIGZmdHQsIHNwaWQpIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8pIjsKCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRzYWlzb24sICRub3csICRsaWNlbmNlLCAnSmFudmllciAyMDAwJywgJzAnLCcwJykpOwoJCQkKCQkJCWlmKCEkZGJyZXN1bHQpewoJCQkJCSRkZXNpZ25hdGlvbi49ICRkYi0+RXJyb3JNc2coKTsKCQkJCX0KCQkJfQoJCQkKCQl9CgkJCgkJCgkJCgoJCQoJCgkJCS8vb24gYSBwYXMgZGUgbW9kaWZpY2F0aW9uIGR1IGNvZWZmLCBvbiBjaGFuZ2Ugc2ltcGxlbWVudCBsZXMgZG9ubsOpZXMgc2FucyByZWNhbGN1bGVyCgkJCgkJCQoJCQoJCS8vIGxhIHRhYmxlIHBvaW50cyBlc3QgbW9kaWZpw6ksIG9uIHBhc3NlIMOgIGxhIHRhYmxlIHJlbmNvbnRyZXMKCQkkc3RhdHVzID0gJ09rJzsKCQkvLyRkZXNpZ25hdGlvbiA9ICdBam91dC9tb2RpZmljYXRpb24gZGUgJy4kbm9tLicgJy4kcHJlbm9tOwoJCSRhY3Rpb24gPSAnZG9fZWRpdF9qb3VldXInOwoJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywgJGRlc2lnbmF0aW9uLCRhY3Rpb24pOwoJCQokdGhpcy0+U2V0TWVzc2FnZSgiJGRlc2lnbmF0aW9uIik7CgokdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdKb3VldXJzJyk7CgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.do_edit_result.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwokZGIgPSYgJHRoaXMtPkdldERiKCk7Cmdsb2JhbCAkdGhlbWVPYmplY3Q7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwovL2lmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpIHsgJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCk7IH0KcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uY2FsY3Vscy5waHAnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKCiRkZXNpZ25hdGlvbiA9ICcnOwoKLyokaWRfdXNlciA9ICcnOyovCglpZiAoIGlzc2V0KCRwYXJhbXNbJ3JlY29yZF9pZCddICkpCgl7CgkJJHJlY29yZF9pZCA9ICRwYXJhbXNbJ3JlY29yZF9pZCddOwoJfQoJaWYoaXNzZXQoJHBhcmFtc1snZHVwbGljYXRlJ10pICYmICRwYXJhbXNbJ2R1cGxpY2F0ZSddID09JzEnKQoJewoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQgV0hFUkUgaWQgPSA/IjsKCQoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRyZWNvcmRfaWQpKTsKCQkKCQkJaWYoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKT4wKQoJCQl7CgkJCQl3aGlsZSgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJCQkJewoJCQkJCSRzYWlzb24gPSAkcm93WydsaWNlbmNlJ107CgkJCQkJLy9wYXMgZGUgZGF0ZW1hagoJCQkJCSRsaWNlbmNlID0gJHJvd1snbGljZW5jZSddOwoJCQkJCSRkYXRlX2V2ZW50ID0gJHJvd1snZGF0ZV9ldmVudCddOwoJCQkJCSRlcHJldXZlID0gJHJvd1snZXByZXV2ZSddOwoJCQkJCSRub20gPSAkcm93Wydub20nXTsKCQkJCQkkbnVtam91cm4gPSAkcm93WydudW1qb3VybiddOwoJCQkJCSRjbGFzc2VtZW50ID0gJHJvd1snY2xhc3NlbWVudCddOwoJCQkJCSR2aWN0b2lyZSA9ICRyb3dbJ3ZpY3RvaXJlJ107CgkJCQkJJGVjYXJ0ID0gJHJvd1snZWNhcnQnXTsKCQkJCQkkdHlwZV9lY2FydCA9ICRyb3dbJ3R5cGVfZWNhcnQnXTsKCQkJCQkkY29lZmYgPSAkcm93Wydjb2VmZiddOwoJCQkJCSRwb2ludHJlcyA9ICRyb3dbJ3BvaW50cmVzJ107CgkJCQkJJGZvcmZhaXQgPSAkcm93Wydmb3JmYWl0J107CgkJCQkJCQkJCQkKCQkJCQkkcXVlcnkyID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQgKGlkLCBzYWlzb24sIGRhdGVtYWosIGxpY2VuY2UsIGRhdGVfZXZlbnQsIGVwcmV1dmUsIG5vbSwgbnVtam91cm4sIGNsYXNzZW1lbnQsIHZpY3RvaXJlLCBlY2FydCwgdHlwZV9lY2FydCwgY29lZmYsIHBvaW50cmVzLCBmb3JmYWl0KSBWQUxVRVMgKCcnLCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSI7CgkJCQkJJGRicmVzdWx0MiA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkyLCBhcnJheSgkc2Fpc29uX2NvdXJhbnRlLCRub3csICRsaWNlbmNlLCRkYXRlX2V2ZW50LCAkZXByZXV2ZSwgJG5vbSwgJG51bWpvdXJuLCAkY2xhc3NlbWVudCwgJHZpY3RvaXJlLCAkZWNhcnQsICR0eXBlX2VjYXJ0LCAkY29lZmYsICRwb2ludHJlcywgJGZvcmZhaXQpKTsKCQkJCQkkZGVzaWduYXRpb24uPSJFbnJlZ2lzdHJlbWVudCBkdXBsaXF1w6kiOwoJCQkJCQoJCQkJfQoJCQl9Cgl9CgllbHNlCgl7CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ2VwcmV1dmUnXSkpIAoJCXsKCQkJJGVwcmV1dmUgPSAkcGFyYW1zWydlcHJldXZlJ107CgkJCSRjb2VmZmljaWVudCA9IGNvZWZmKCRlcHJldXZlKTsKCQl9CgoKCQlpZiAoaXNzZXQoJHBhcmFtc1snbnVtam91cm4nXSkpCgkJewoJCQkkbnVtam91cm4gPSAkcGFyYW1zWydudW1qb3VybiddOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snbm9tJ10pKQoJCXsKCQkJCSRub20gPSAkcGFyYW1zWydub20nXTsKCQl9CgoJCWlmIChpc3NldCgkcGFyYW1zWydjbGFzc2VtZW50J10pKQoJCXsKCQkJCSRjbGFzc2VtZW50ID0gJHBhcmFtc1snY2xhc3NlbWVudCddOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snZWNhcnQnXSkpCgkJewoJCQkJJGVjYXJ0ID0gJHBhcmFtc1snZWNhcnQnXTsKCQl9CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ2NvZWZmJ10pKQoJCXsKCQkJCSRjb2VmZiA9ICRwYXJhbXNbJ2NvZWZmJ107CgkJfQoJCWlmIChpc3NldCgkcGFyYW1zWyd2aWN0b2lyZSddKSkKCQl7CgkJCQkkdmljdG9pcmUgPSAkcGFyYW1zWyd2aWN0b2lyZSddOwoJCX0KCQkvL29uIHbDqXJpZmllIGxlIGNvZWZmIGRlIGwnw6lwcmV1dmUgOiAKCgkJCWlmICgkY29lZmZpY2llbnQgIT0kY29lZmYpCgkJCXsKCQkJCQkkZGVzaWduYXRpb24uPSJMZSBjb2VmZmljaWVudCBldCBsJ8OpcHJldXZlIG5lIGNvcnJlc3BvbmRlbnQgcGFzICEiOwoJCQl9CgkJLy9vbiBmYWl0IGxlcyBjYWxjdWxzIG7DqWNlc3NhaXJlcwoKCQkvL3RvdXQgZCdhYm9yZCwgeSBhIHQtaWwgZXUgZm9yZmFpdCA/CgkJLy9TaSBvdWksIGludXRpbGUgZGUgY2FsY3VsZXIgbGVzIHBvaW50cwoKCQkJaWYoJGZvcmZhaXQgPT0xKQoJCQl7CgkJCQkJJHBvaW50cmVzID0gMDsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8vb24gZMOpdGVybWluZSBsZSB0eXBlIGQnw6ljYXJ0IGVudHJlIGxlcyBkZXV4IGpvdWV1cnMKCQkJCSR0eXBlX2VjYXJ0ID0gQ2FsY3VsRWNhcnQoJGVjYXJ0KTsKCQkJCSRwb2ludHMxID0gQ2FsY3VsUG9pbnRzSW5kaXZzKCR0eXBlX2VjYXJ0LCAkdmljdG9pcmUpOwoJCQkJJHBvaW50cmVzID0gJHBvaW50czEqJGNvZWZmOyAKCgkJCX0KCQkJCgkJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCBTRVQgbm9tID0gPywgbnVtam91cm4gPSA/LCBjbGFzc2VtZW50ID0gPywgdmljdG9pcmUgPSA/LCBlY2FydCA9ID8sIGNvZWZmID0gPywgcG9pbnRyZXMgPSA/IFdIRVJFIGlkID0gPyI7CgkJCQkKCQkJCgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRub20sICRudW1qb3VybiwgJGNsYXNzZW1lbnQsICR2aWN0b2lyZSwgJGVjYXJ0LCAkY29lZmYsJHBvaW50cmVzLCAkcmVjb3JkX2lkKSk7CgkKCQkJCWlmICghJGRicmVzdWx0KSAKCQkJCXsKCQkJCQkkZGVzaWduYXRpb24uPSRkYi0+RXJyb3JNc2coKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkZGVzaWduYXRpb24uPSJFbnJlZ2lzdHJlbWVudCBtb2RpZmnDqS4iOwoJCQkJfQoJfQoJCgkJCgkJCQoJCQkKCQkkdGhpcy0+U2V0TWVzc2FnZSgkZGVzaWduYXRpb24pOwoJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3Jlc3VsdHMnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.do_edit_team.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwppZiAoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKSB7ICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOyB9Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5jYWxjdWxzLnBocCcpOwovL2VjaG8gJHBhcmFtc1sncmVjb3JkX2lkJ107CiRkZXNpZ25hdGlvbiA9ICcnOwokZXJyb3IgPTA7Ci8qCgkJaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgQ29tbWVudHMnKSkKCQl7CgkJCWVjaG8gJzxwIGNsYXNzPSJlcnJvciI+Jy4kdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTWFuYWdlIENvbW1lbnRzJykpLic8L3A+JzsKCQkJcmV0dXJuOwoJCX0KKi8KCQkvKk9uIHLDqWN1cMOocmUgbGVzIHZhcmlhYmxlIGV0IG9uIGxlcyB0cmFpdGUgKi8KCQkkcmVjb3JkX2lkID0gJyc7IAoJCWlmKCBpc3NldCggJHBhcmFtc1sncmVjb3JkX2lkJ10gKSAmJiAkcGFyYW1zWydyZWNvcmRfaWQnXSAhPSAnJykgICAgCgkJewoJCQkkaWQgPSAkcGFyYW1zWydyZWNvcmRfaWQnXTsKCQkJCgkJfQoJCQoJCWlmIChpc3NldCgkcGFyYW1zWydzYWlzb24nXSkpCgkJewoJCQkkc2Fpc29uID0gJHBhcmFtc1snc2Fpc29uJ107CgkJfQoJCWlmIChpc3NldCgkcGFyYW1zWydwaGFzZSddKSkKCQl7CgkJCSRwaGFzZSA9ICRwYXJhbXNbJ3BoYXNlJ107CgkJfQoJCWlmIChpc3NldCgkcGFyYW1zWydsaWJlcXVpcGUnXSkpCgkJewoJCQkkbGliZXF1aXBlID0gJHBhcmFtc1snbGliZXF1aXBlJ107CgkJfQoJCQoJCWlmIChpc3NldCgkcGFyYW1zWydsaWJkaXZpc2lvbiddKSkKCQl7CgkJCSRsaWJkaXZpc2lvbiA9ICRwYXJhbXNbJ2xpYmRpdmlzaW9uJ107CgkJfQoJCWlmIChpc3NldCgkcGFyYW1zWydmcmllbmRseW5hbWUnXSkpCgkJewoJCQkkZnJpZW5kbHluYW1lID0gJHBhcmFtc1snZnJpZW5kbHluYW1lJ107CgkJfQoJCWlmIChpc3NldCgkcGFyYW1zWydpZGVwcmV1dmUnXSkgJiYgJHBhcmFtc1snaWRlcHJldXZlJ10gIT0nJykKCQl7CgkJCSRpZGVwcmV1dmUgPSAkcGFyYW1zWydpZGVwcmV1dmUnXTsKCQl9CgkJZWxzZQoJCXsKCQkJJGVycm9yKys7CgkJCQoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snaWRkaXYnXSkpCgkJewoJCQkkaWRkaXYgPSAkcGFyYW1zWydpZGRpdiddOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snaWRwb3VsZSddKSkKCQl7CgkJCSRpZHBvdWxlID0gJHBhcmFtc1snaWRwb3VsZSddOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snb3JnYW5pc21lJ10pKQoJCXsKCQkJJG9yZ2FuaXNtZSA9ICRwYXJhbXNbJ29yZ2FuaXNtZSddOwoJCX0KCQkkbGllbmRpdmlzaW9uID0gImN4X3BvdWxlPSIuJGlkcG91bGUuIiZEMT0iLiRpZGRpdi4iJm9yZ2FuaXNtZV9wZXJlPSIuJG9yZ2FuaXNtZTsKCQkvL2VjaG8gImxlIGxpZW4gZXN0IDogIi4kbGllbjsKCQlpZigkZXJyb3I+MCkKCQl7CgkJCSR0aGlzLT5TZXRNZXNzYWdlKCdNYW5xdWUgbGUgdHlwZSBkZSBjb21ww6l0aXRpb24gIScpOwoJCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdlcXVpcGVzJyk7CgkJfQoJCWlmKGlzc2V0KCRwYXJhbXNbJ0Fqb3V0ZXInXSkpCgkJewoJCQkKCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19lcXVpcGVzIChpZCwgc2Fpc29uLCBwaGFzZSwgbGliZXF1aXBlLCBsaWJkaXZpc2lvbixmcmllbmRseW5hbWUsIGxpZW5kaXZpc2lvbiwgaWRwb3VsZSwgaWRkaXYsIGlkZXByZXV2ZSkgVkFMVUVTICgnJywgPywgPywgPywgPywgPywgPywgPywgPywgPykiOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRzYWlzb24sICRwaGFzZSwgJGxpYmVxdWlwZSwgJGxpYmRpdmlzaW9uLCRmcmllbmRseW5hbWUsICRsaWVuZGl2aXNpb24sICRpZHBvdWxlLCAkaWRkaXYsICRpZGVwcmV1dmUpKTsKCQkJJGRlc2lnbmF0aW9uLj0iRXF1aXBlIGFqb3V0w6llIGF2ZWMgc3VjY8OocyI7CgkJfQoJCWVsc2UKCQl7CgkJCS8vb24gYSBwYXMgZGUgbW9kaWZpY2F0aW9uIGR1IGNvZWZmLCBvbiBjaGFuZ2Ugc2ltcGxlbWVudCBsZXMgZG9ubsOpZXMgc2FucyByZWNhbGN1bGVyCgkJCS8vb24gcmVmYWl0IGxlIHRhZwoJCQkkdGFnID0gcGluZ19hZG1pbl9vcHM6OnRhZ19lcXVpcGUoJGlkKTsKCQkJJHF1ZXJ5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZXF1aXBlcyBTRVQgIHNhaXNvbiA9ID8sIHBoYXNlID0gPywgbGliZXF1aXBlID0gPywgbGliZGl2aXNpb24gPSA/ICwgZnJpZW5kbHluYW1lID0gPyAsIGxpZW5kaXZpc2lvbiA9ID8sIGlkZXByZXV2ZSA9ID8sIHRhZyA9ID8gV0hFUkUgaWQgPSA/IjsKCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHNhaXNvbiwkcGhhc2UsJGxpYmVxdWlwZSwgJGxpYmRpdmlzaW9uLCRmcmllbmRseW5hbWUsJGxpZW5kaXZpc2lvbiwgJGlkZXByZXV2ZSwkdGFnLCRpZCkpOwoJCQkvL2VjaG8gJHF1ZXJ5OwoJCQkkZGVzaWduYXRpb24uPSJFcXVpcGUgbWlzZSDDoCBqb3VyIGF2ZWMgc3VjY8OocyI7CgkJfQoJCQkKCQoJCWlmICghJGRicmVzdWx0KSB7CgkJCSRkZXNpZ25hdGlvbi49ICAkZGItPkVycm9yTXNnKCk7CgkJLy8JZWNobyAkZGItPnNxbC4iPGJyLz4iOwoJCS8vCSAgICBlY2hvICRkYi0+RXJyb3JNc2coKTsKCQkJCQoJCX0KCQllbHNlIHsKCQkJJGRlc2lnbmF0aW9uLj0gJ0VxdWlwZSBtaXNlIMOgIGpvdXInOwoJCX0KCQkKCQkKCQkkdGhpcy0+U2V0TWVzc2FnZSgiJGRlc2lnbmF0aW9uIik7CgoJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2VxdWlwZXMnKTsKCQkKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.do_participe.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2luY2x1ZGUvcHJlZnMucGhwJyk7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwovKiovCgoJaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIE1hbmFnZScpKQoJewoJCSRkZXNpZ25hdGlvbi49JHRoaXMtPkxhbmcoJ25lZWRwZXJtaXNzaW9uJyk7CgkJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3NpdHVhdGlvbicpOwoJfQoJJGFubmVlID0gZGF0ZSgnWScpOwovL29uIHLDqWN1cMOocmUgbGVzIHZhbGV1cnMKLy9wb3VyIGwnaW5zdGFudCBwYXMgZCdlcnJldXIKJGVycm9yID0gMDsKCQkKCQkkdHlwZV9jb21wZXQgPSAnJzsKCQlpZiAoaXNzZXQoJHBhcmFtc1sndHlwZV9jb21wZXQnXSkgJiYgJHBhcmFtc1sndHlwZV9jb21wZXQnXSAhPSAnJykKCQl7CgkJCSR0eXBlX2NvbXBldCA9ICRwYXJhbXNbJ3R5cGVfY29tcGV0J107CgkJfQoJCWVsc2UKCQl7CgkJCSRlcnJvcisrOwoJCX0KCQkkZGF0ZV9kZWJ1dCA9ICcnOwoJCWlmIChpc3NldCgkcGFyYW1zWydkYXRlX2RlYnV0J10pICYmICRwYXJhbXNbJ2RhdGVfZGVidXQnXSAhPSAnJykKCQl7CgkJCSRkYXRlX2RlYnV0ID0gJHBhcmFtc1snZGF0ZV9kZWJ1dCddOwoJCX0KCQllbHNlCgkJewoJCQkkZXJyb3IrKzsKCQl9CgkJJGRhdGVfZGVidXQgPSAnJzsKCQlpZiAoaXNzZXQoJHBhcmFtc1snZGF0ZV9maW4nXSkgJiYgJHBhcmFtc1snZGF0ZV9maW4nXSAhPSAnJykKCQl7CgkJCSRkYXRlX2ZpbiA9ICRwYXJhbXNbJ2RhdGVfZmluJ107CgkJfQoJCWVsc2UKCQl7CgkJCSRlcnJvcisrOwoJCX0KCQlpZigkZXJyb3IgPT0wKQoJCXsKCQkJLy9vbiB2aXJlIHRvdXRlcyBsZXMgZG9ubsOpZXMgZGUgY2V0dGUgY29tcGV0IGF2YW50IAoJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpY2lwZSBXSEVSRSB0eXBlX2NvbXBldCA9ID8gQU5EIGRhdGVfZGVidXQgPSA/IjsKCQkJJGRicXVlcnkgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkdHlwZV9jb21wZXQsICRkYXRlX2RlYnV0KSk7CQoJCQkkbGljZW5jZSA9ICcnOwoJCQlpZiAoaXNzZXQoJHBhcmFtc1snbGljZW5jZSddKSAmJiAkcGFyYW1zWydsaWNlbmNlJ10gIT0gJycpCgkJCXsKCQkJCSRsaWNlbmNlID0gJHBhcmFtc1snbGljZW5jZSddOwoJCQkJJGVycm9yKys7CgkJCX0KCQkJZm9yZWFjaCgkbGljZW5jZSBhcyAka2V5PT4kdmFsdWUpCgkJCXsKCQkJCSRxdWVyeTIgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpY2lwZSAobGljZW5jZSwgdHlwZV9jb21wZXQsZGF0ZV9kZWJ1dCkgVkFMVUVTICg/LCA/LCA/KSI7CgkJCQllY2hvICRxdWVyeTI7CgkJCQkkZGJyZXN1bHRhdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkyLCBhcnJheSgka2V5LCAkdHlwZV9jb21wZXQsICRkYXRlX2RlYnV0KSk7CgkJCX0KCQkJCgkJfQoJCQoKJHRoaXMtPlNldE1lc3NhZ2UoJ3BhcnRpY2lwYW50cyBham91dMOpcyAhJyk7CiR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbXBldHMnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.edit_contact.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgTWFuYWdlJykpCiAgewogICAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSk7CglyZXR1cm47CiAgIAogIH0KCiRpZF9yZWNvcmQgPSAnJzsKaWYoICFpc3NldCggJHBhcmFtc1snaWRfcmVjb3JkJ10gKSB8fCAkcGFyYW1zWydpZF9yZWNvcmQnXSA9PSAnJyApICAKewoJJHRoaXMtPlNldE1lc3NhZ2UoJ0lsIG1hbnF1ZSBsXGlkZW50aWZpYW50IGRlIGxhIGxpZ25lJyk7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdqb3VldXJzJyk7Ci8qCQokcXVlcnkgPSAiU0VMRUNUIENPTkNBVF9XUygnICcsIG5vbSwgcHJlbm9tKSBBUyBqb3VldXIsIGxpY2VuY2UgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBPUkRFUiBCWSBqb3VldXIgQVNDIjsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CndoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKICB7CiAgICAkcGxheWVybGlzdFskcm93Wydqb3VldXInXV0gPSAkcm93WydsaWNlbmNlJ107Cn0vL2ZpbiBkdSB3aGlsZQoqLwp9CgokcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY29tbSBXSEVSRSBpZCA9ID8iOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcGFyYW1zWydpZF9yZWNvcmQnXSkpOwp3aGlsZSgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKewoJJGxpY2VuY2UgPSAkcm93WydsaWNlbmNlJ107CgkkdHlwZV9jb250YWN0ID0gJHJvd1sndHlwZV9jb250YWN0J107CgkkY29udGFjdCA9ICRyb3dbJ2NvbnRhY3QnXTsKCSRkZXNjcmlwdGlvbiA9ICRyb3dbJ2Rlc2NyaXB0aW9uJ107CgkKfQogIAokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsCgkJICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoICRpZCwgJ2RvX2NyZWF0ZV9jb250YWN0JywgJHJldHVybmlkICkgKTsKJHNtYXJ0eS0+YXNzaWduKCdpZCcsCgkJJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCAkaWQsICdpZF9yZWNvcmQnLCAkcGFyYW1zWydpZF9yZWNvcmQnXSApKTsKJHNtYXJ0eS0+YXNzaWduKCdsaWNlbmNlJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ2xpY2VuY2UnLCAkbGljZW5jZSApKTsKJGFydGljbGVzID0gYXJyYXkoIlTDqWzDqXBob25lIGZpeGUiPT4iVMOpbMOpcGhvbmUgZml4ZSIsICJlbWFpbCI9PiJlbWFpbCIpOwokc21hcnR5LT5hc3NpZ24oJ3R5cGVfY29udGFjdCcsCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAndHlwZV9jb250YWN0JywkYXJ0aWNsZXMsLTEsJHR5cGVfY29udGFjdCkpOwokc21hcnR5LT5hc3NpZ24oJ2NvbnRhY3QnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnY29udGFjdCcsJGNvbnRhY3QsNTAsMTUwKSk7CiRzbWFydHktPmFzc2lnbignZGVzY3JpcHRpb24nLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnZGVzY3JpcHRpb24nLCRkZXNjcmlwdGlvbiwzMCwxNTApKTsJCQkJCiRzbWFydHktPmFzc2lnbignc3VibWl0ZWRpdCcsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdGVkaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JyksICdjbGFzcz0iYnV0dG9uIicpKTsKJHNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2NhbmNlbCcsJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CiRzbWFydHktPmFzc2lnbignYmFjaycsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnYmFjaycsJHRoaXMtPkxhbmcoJ2JhY2snKSkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLAoJCSR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdF9jb250YWN0LnRwbCcpOwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.edit_player_results.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgTWFuYWdlJykpCiAgewogICAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSk7CglyZXR1cm47CiAgIAogIH0KCiR0aGlzLT5TZXRDdXJyZW50VGFiKCdyZXN1bHRzJyk7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKLy8kcmVjb3JkX2lkID0gJHBhcmFtc1sncmVjb3JkX2lkJ107CmlmKCBpc3NldCggJHBhcmFtc1snbWVzc2FnZSddICkgKQogIHsKICAgICRzbWFydHktPmFzc2lnbignbWVzc2FnZScsaHRtbF9lbnRpdHlfZGVjb2RlKCRwYXJhbXNbJ21lc3NhZ2UnXSkpOwogIH0KaWYoIGlzc2V0KCAkcGFyYW1zWydlcnJvciddICkgKQogIHsKICAgICRzbWFydHktPmFzc2lnbignZXJyb3InLGh0bWxfZW50aXR5X2RlY29kZSgkcGFyYW1zWydlcnJvciddKSk7CiAgfQoKCgokcmVjb3JkX2lkID0gJyc7CmlmKCAhaXNzZXQoICRwYXJhbXNbJ3JlY29yZF9pZCddICkgfHwgJHBhcmFtc1sncmVjb3JkX2lkJ10gPT0gJycpICAgIAp7CgkKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKCSAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAkdGhpcy0+UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJICAgIHJldHVybjsKfQplbHNlCnsKCSRyZWNvcmRfaWQgPSAkcGFyYW1zWydyZWNvcmRfaWQnXTsKfQoKICAgIC8vIGZpbmQgdGhlIHVzZXIKICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQgQVMgcywgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIEFTIHRjIFdIRVJFIHMuZXByZXV2ZSA9IHRjLm5hbWUgQU5EIHMuaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoICRwYXJhbXNbJ3JlY29yZF9pZCddICkpOwogICAgaWYoICEkZGJyZXN1bHQpCiAgICAgIHsKCSR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCdlcnJvcl9yZXN1bHRub3Rmb3VuZCcpKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3Jlc3VsdHMnKTsKCXJldHVybjsKICAgICAgfQoJZWxzZQoJewoJCSRlcHJldXZlID0gJGRicmVzdWx0WydlcHJldXZlJ107CgkJJG51bWpvdXJuID0gJGRicmVzdWx0WydudW1qb3VybiddOwoJCS8vJGVxdWlwZSA9ICRkYnJlc3VsdFsnZXF1aXBlJ107CgkJJG5vbSA9ICRkYnJlc3VsdFsnbm9tJ107CgkJJGNsYXNzZW1lbnQgPSAkZGJyZXN1bHRbJ2NsYXNzZW1lbnQnXTsKCQkkZWNhcnQgPSAkZGJyZXN1bHRbJ2VjYXJ0J107CgkJJGNvZWZmID0gJGRicmVzdWx0Wydjb2VmZiddOwoJCSR2aWN0b2lyZSA9ICRkYnJlc3VsdFsndmljdG9pcmUnXTsKCQkkcG9pbnRzID0gJGRicmVzdWx0Wydwb2ludHMnXTsKCQkkZm9yZmFpdCA9ICRkYnJlc3VsdFsnZm9yZmFpdCddOwoJCQoJCQlpZigkdmljdG9pcmUgPT0xKQoJCQl7CgkJCQkKCQkJCSRzZWxlY3RlZGluZGV4MSA9IDA7CgkJCQkvLyRzZWxlY3RlZHZhbHVlID0gMTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRzZWxlY3RlZGluZGV4MSA9IDE7CgkJCQkvLyRzZWxlY3RlZHZhbHVlID0gMDsKCQkJfQoJCQoJCQoKfQogICAKJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLAoJCSAgICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCAkaWQsICdkb19lZGl0X3Jlc3VsdCcsICRyZXR1cm5pZCApICk7CiRzbWFydHktPmFzc2lnbigncmVjb3JkX2lkJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ3JlY29yZF9pZCcsICRwYXJhbXNbJ3JlY29yZF9pZCddICkpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsICR0aGlzLT5MYW5nKCdzdWJtaXQnKSwgJ2NsYXNzPSJidXR0b24iJykpOyAgIAokc21hcnR5LT5hc3NpZ24oJ2VwcmV1dmUnLAoJCQkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2VwcmV1dmUnLCRlcHJldXZlLDgwLDE1MCkpOwokc21hcnR5LT5hc3NpZ24oJ3Byb21wdF90b3VyJywKCQkkdGhpcy0+TGFuZygndG91cicpKTsKJHNtYXJ0eS0+YXNzaWduKCdudW1qb3VybicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ251bWpvdXJuJywkbnVtam91cm4sNSwxMCkpOwokc21hcnR5LT5hc3NpZ24oJ3Byb21wdF9lcXVpcGUnLAoJCSR0aGlzLT5MYW5nKCdlcXVpcGUnKSk7CiRzbWFydHktPmFzc2lnbignbm9tJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ25vbScsJG5vbSw5MCwxNTApKTsKLyoqLwoKJHNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfam91ZXVyJywKCQkkdGhpcy0+TGFuZygnam91ZXVyJykpOwokc21hcnR5LT5hc3NpZ24oJ2NsYXNzZW1lbnQnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnY2xhc3NlbWVudCcsJGNsYXNzZW1lbnQsMzAsODApKTsKCiRzbWFydHktPmFzc2lnbignZWNhcnQnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnZWNhcnQnLCRlY2FydCwxMCw4MCkpOwoJCQkJCQokc21hcnR5LT5hc3NpZ24oJ3Byb21wdF9hZHZlcnNhaXJlJywKCQkkdGhpcy0+TGFuZygnYWR2ZXJzYWlyZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdhZHZlcnNhaXJlJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2FkdmVyc2FpcmUnLCRhZHZlcnNhaXJlLDgwLDE1MCkpOwoJCSRzbWFydHktPmFzc2lnbigncHRzX2FkdmVyc2FpcmUnLAoJCQkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdwdHNfYWR2ZXJzYWlyZScsJHB0c19hZHZlcnNhaXJlLDEwLDE1MCkpOwoJCQkJCQokc21hcnR5LT5hc3NpZ24oJ3Byb21wdF92aWN0b2lyZV9kZWZhaXRlJywKCQkkdGhpcy0+TGFuZygndmljX2RlZicpKTsKCQkKCQkkc21hcnR5LT5hc3NpZ24oJ3ZpY3RvaXJlJywKCQkJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ3ZpY3RvaXJlJywkaXRlbXMgPSBhcnJheSgiViI9PiIxIiwiRCI9PiIwIiksJHNlbGVjdGVkaW5kZXggPSAkc2VsZWN0ZWRpbmRleDEsICRzZWxlY3RlZHZhbHVlPSR2aWN0b2lyZSw1KSk7Ci8qCQkKJHNtYXJ0eS0+YXNzaWduKCd2aWNfZGVmJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3ZpY19kZWYnLCR2aWNfZGVmLDUsMTApKTsKKi8KJHNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfcG9pbnRzJywKCQkkdGhpcy0+TGFuZygncG9pbnRzJykpOwoJCSRpdGVtc2NvZWZmID0gCiRzbWFydHktPmFzc2lnbignY29lZmYnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2NvZWZmJywkaXRlbXNjb2VmZiA9IGFycmF5KCIwIj0+IjAuMDAiLCAiMCw1Ij0+IjAuNTAiLCIwLDc1Ij0+IjAuNzUiLCAiMSI9PiIxLjAwIiwgIjEsMjUiPT4iMS4yNSIsICIxLDUiPT4iMS41MCIpLCRzZWxlY3RlZGluZGV4PSRjb2VmZix2aWN0b2lyZSwgJHNlbGVjdGVkdmFsdWU9JGNvZWZmLDUpKTsJCQkJCQoJCQkJCQkJCQkJCQkJCQkKCiRzbWFydHktPmFzc2lnbignY2FuY2VsJywKCQkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY2FuY2VsJywKCQkJCQkJJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CiRzbWFydHktPmFzc2lnbignYmFjaycsCgkJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2JhY2snLAoJCQkJCQkkdGhpcy0+TGFuZygnYmFjaycpKSk7Cgokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLAoJCSR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdHJlc3VsdC50cGwnKTsKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.edit_team.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9yZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXyknJykKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIFVzZScpKQogIHsKICAgIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ25lZWRwZXJtaXNzaW9uJykpOwoJcmV0dXJuOwogICAKICB9CgokZGIgPSYgJHRoaXMtPkdldERiKCk7CiRzYWlzb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7CiRwaGFzZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdQaGFzZV9lbl9jb3VycycpOwokZWRpdCA9IDA7Ly9zZXJ0IMOgIGRpc3Rpbmd1ZXIgbCdham91dCBwYXIgZMOpZmF1dCAwIGQndW5lIMOpZGl0aW9uICg9IDEpCiRyZWNvcmRfaWQgPSAnJzsKaWYoIGlzc2V0KCAkcGFyYW1zWydyZWNvcmRfaWQnXSApICYmICRwYXJhbXNbJ3JlY29yZF9pZCddICE9ICcnKSAgICAKewoJCgkkcmVjb3JkX2lkID0gJHBhcmFtc1sncmVjb3JkX2lkJ107CgkkZWRpdD0xOwoJICAgIAoKCiAgICAvLyBmaW5kIHRoZSB1c2VyCiAgICAkcXVlcnkgPSAiU0VMRUNUIGVxLnNhaXNvbiwgZXEucGhhc2UsZXEubGliZXF1aXBlLCBlcS5saWJkaXZpc2lvbixlcS5saWVuZGl2aXNpb24sZXEuZnJpZW5kbHluYW1lLGVxLnR5cGVfY29tcGV0LCBlcS5pZGRpdixlcS5pZHBvdWxlLHRjLmlkIEFTIGluZGV4MSx0Yy5uYW1lIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgQVMgZXEsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyBBUyB0YyBXSEVSRSBlcS50eXBlX2NvbXBldCA9IHRjLmNvZGVfY29tcGV0IEFORCAgZXEuaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoICRyZWNvcmRfaWQgKSk7CiAgICBpZigkZGJyZXN1bHQpCiAgICAgIAoJewoJCS8vbGlzdGUgZGVzIGRvbm7DqWVzIGEgYWZmaWNoZXIgZGFucyBsZSBmb3JtdWxhaXJlCgkJLy9zYWlzb24sIHBoYXNlLCBsaWJlcXVpcGUsbGliZGl2aXNpb24gZnJpZW5kbHluYW1lCgkJJHNhaXNvbiA9ICRkYnJlc3VsdFsnc2Fpc29uJ107CgkJJHBoYXNlID0gJGRicmVzdWx0WydwaGFzZSddOwoJCSRsaWJlcXVpcGUgPSAkZGJyZXN1bHRbJ2xpYmVxdWlwZSddOwoJCSRsaWJkaXZpc2lvbiA9ICRkYnJlc3VsdFsnbGliZGl2aXNpb24nXTsKCQkkbGllbmRpdmlzaW9uID0gJGRicmVzdWx0WydsaWVuZGl2aXNpb24nXTsKCQkkZnJpZW5kbHluYW1lID0gJGRicmVzdWx0WydmcmllbmRseW5hbWUnXTsKCQkkdHlwZV9jb21wZXQgPSAkZGJyZXN1bHRbJ3R5cGVfY29tcGV0J107CgkJJGlkZGl2ID0gJGRicmVzdWx0WydpZGRpdiddOwoJCSRpZHBvdWxlID0gJGRicmVzdWx0WydpZHBvdWxlJ107CgkJLy9vbiB2YSBjaGVyY2hlciBsJ29yZ2FuaXNtZSBxdWkgb3JnYW5pc2UgbGEgY29tcGV0CgkJJGV4cGxvZGUxID0gZXhwbG9kZSgiJiIsJGxpZW5kaXZpc2lvbik7CgkJJGV4cGxvZGUyID0gZXhwbG9kZSgiPSIsICRleHBsb2RlMVsyXSk7CgkJJG9yZ2FuaXNtZSA9ICRleHBsb2RlMlsxXTsKCQkkaW5kZXggPSAkZGJyZXN1bHRbJ2luZGV4MSddIC0gMTsKCQkkbmFtZSA9ICRkYnJlc3VsdFsnbmFtZSddOwoJCSR0eXBlX2NvbXBldF9zZWxlY3RlZCA9ICRkYnJlc3VsdFsndHlwZV9jb21wZXQnXTsKCQkKCQkKCQkvLyRvcmdhbmlzbWUgPSBnZXRfb3JnYW5pc21lKCRsaWJkaXZpc2lvbik7CgkJCgkJCgl9Cn0KCiAgCiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywKCQkgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCggJGlkLCAnZG9fZWRpdF90ZWFtJywgJHJldHVybmlkICkgKTsKaWYoJGVkaXQ9PScxJykKewoJJHNtYXJ0eS0+YXNzaWduKCdyZWNvcmRfaWQnLAoJCQkgICAgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCAkaWQsICdyZWNvcmRfaWQnLCAKCQkJKGlzc2V0KCRwYXJhbXNbJ3JlY29yZF9pZCddKT8kcGFyYW1zWydyZWNvcmRfaWQnXToiIikpKTsKfQokbGlzdHNhaXNvbnMgPSBhcnJheSggJzIwMTQtMjAxNSc9PicyMDE0LTIwMTUnKTsKJGxpc3RwaGFzZSA9IGFycmF5KCcxJz0+JzEnLCAnMic9PicyJyk7CiAgIAokc21hcnR5LT5hc3NpZ24oJ3NhaXNvbicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdzYWlzb24nLAoJCShpc3NldCgkc2Fpc29uKT8kc2Fpc29uOiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKSkpKTsKJHNtYXJ0eS0+YXNzaWduKCdwaGFzZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdwaGFzZScsCgkJKGlzc2V0KCRwaGFzZSk/JHBoYXNlOiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdQaGFzZV9lbl9jb3VycycpKSkpOwokc21hcnR5LT5hc3NpZ24oJ2xpYmVxdWlwZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdsaWJlcXVpcGUnLAoJCShpc3NldCgkbGliZXF1aXBlKT8kbGliZXF1aXBlOiIiKSwzMCwxNTApKTsKJHNtYXJ0eS0+YXNzaWduKCdsaWJkaXZpc2lvbicsCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdsaWJkaXZpc2lvbicsCgkJKGlzc2V0KCRsaWJkaXZpc2lvbik/JGxpYmRpdmlzaW9uOiIiKSwzMCwxNTApKTsKJHNtYXJ0eS0+YXNzaWduKCdmcmllbmRseW5hbWUnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnZnJpZW5kbHluYW1lJywKCQkoaXNzZXQoJGZyaWVuZGx5bmFtZSk/JGxpYmRpdmlzaW9uOiIiKSwxMCw4MCkpOwokc21hcnR5LT5hc3NpZ24oJ2lkZGl2JywgCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdpZGRpdicsIAoJCShpc3NldCgkaWRkaXYpPyRpZGRpdjoiIiksIDEwLDIwKSk7CiRzbWFydHktPmFzc2lnbignaWRwb3VsZScsIAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnaWRwb3VsZScsIAoJCShpc3NldCgkaWRwb3VsZSk/JGlkcG91bGU6IiIpLCAxMCwyMCkpOwoJCQoKJG51bWVyb19jbHViID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NsdWJfbnVtYmVyJyk7CiRsaWd1ZSA9IHN1YnN0cigkbnVtZXJvX2NsdWIsIDAsMik7CmlmKCRlZGl0ID09JzEnKQp7Cgkkc21hcnR5LT5hc3NpZ24oJ29yZ2FuaXNtZScsIAoJCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnb3JnYW5pc21lJywgJG9yZ2FuaXNtZSwxMCwyMCkpOwp9CmVsc2UKewoJJG9yZ2FuaXNtZVsnbGlndWUnXSA9ICcxMCcuJGxpZ3VlOwoJJG9yZ2FuaXNtZVsnZGVwYXJ0ZW1lbnQnXSA9IHN1YnN0cigkbnVtZXJvX2NsdWIsMiwyKTsKCSRvcmdhbmlzbWVbJ2ZlZGVyYXRpb24nXSA9ICcxMDAwMDEnOwoJJHNtYXJ0eS0+YXNzaWduKCdvcmdhbmlzbWUnLAoJCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ29yZ2FuaXNtZScsJG9yZ2FuaXNtZSkpOwp9CgoKCQkvL29uIGZhaXQgbGUgdG91ciBkZXMgY29tcMOpdGl0aW9ucyBwb3NzaWJsZXMgZXhjZXB0w6kgVSBwb3VyIHVuZGVmaW5lZAokcXVlcnkyID0gIlNFTEVDVCBuYW1lLCBjb2RlX2NvbXBldCwgaWRlcHJldXZlIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIjsvLyIgV0hFUkUgaW5kaXZzID0gJzAnIjsKJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5Mik7CmlmKCRkYnJlc3VsdGF0ICYmICRkYnJlc3VsdGF0LT5SZWNvcmRDb3VudCgpPjApCnsKCXdoaWxlICgkZGJyZXN1bHRhdCAmJiAkcm93ID0gJGRicmVzdWx0YXQtPkZldGNoUm93KCkpCgkgIHsKCSAgIAkkaWRlcHJldXZlWyRyb3dbJ25hbWUnXV0gPSAkcm93WydpZGVwcmV1dmUnXTsKCSAgfQp9CgovKgokc21hcnR5LT5hc3NpZ24oJ3R5cGVfY29tcGV0JywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ3R5cGVfY29tcGV0JywkdHlwZV9jb21wZXQsJHNlbGVjdGVkaW5kZXggPSAkaW5kZXgsICRzZWxlY3RlZHZhbHVlPSRuYW1lKSk7CiovCiRzbWFydHktPmFzc2lnbignaWRlcHJldXZlJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdpZGVwcmV1dmUnLCRpZGVwcmV1dmUsCgkJKGlzc2V0KCRpZGVwcmV1dmUpPyRpZGVwcmV1dmU6Ii0xIiksKGlzc2V0KCRpZGVwcmV1dmUpPyRpZGVwcmV1dmU6IiIpKSk7CgkKJHNtYXJ0eS0+YXNzaWduKCdBam91dGVyJywKCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdBam91dGVyJywgJHRoaXMtPkxhbmcoJ3N1Ym1pdGFzbmV3JyksICdjbGFzcz0iYnV0dG9uIicpKTsJCQkJCiRzbWFydHktPmFzc2lnbignc3VibWl0JywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpLCAnY2xhc3M9ImJ1dHRvbiInKSk7CiRzbWFydHktPmFzc2lnbignY2FuY2VsJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdjYW5jZWwnLCAkdGhpcy0+TGFuZygnY2FuY2VsJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdiYWNrJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdiYWNrJywgJHRoaXMtPkxhbmcoJ2JhY2snKSkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLAoJCSR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdHRlYW0udHBsJyk7CgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.edit_type_compet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBNYW5hZ2UnKSkKICB7CiAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicpKTsKCXJldHVybjsKICAgCiAgfQppZiggaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pICkKICB7CiAgICAkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdyZW5jb250cmVzJyk7CiAgICByZXR1cm47CiAgfQoKJHRoaXMtPlNldEN1cnJlbnRUYWIoJ3VzZXJzJyk7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCiRyZWNvcmRfaWQgPSAnJzsKaWYoICFpc3NldCggJHBhcmFtc1sncmVjb3JkX2lkJ10gKSB8fCAkcGFyYW1zWydyZWNvcmRfaWQnXSA9PSAnJykgICAgCnsKCQoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwoJICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAgICR0aGlzLT5SZWRpcmVjdCggJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zICk7CgkgICAgcmV0dXJuOwp9CgovL2xlcyBvcmdhbmlzbWVzCiRmZWRlID0gJzEwMDAwMSc7CiR6b25lID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3pvbmUnKTsKJGxpZ3VlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2xpZ3VlJyk7CiRkZXAgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVwJyk7CiR0YWJsZWF1ID0gYXJyYXkoIkbDqWTDqXJhdGlvbiI9PiRmZWRlLCAiWm9uZSI9PiR6b25lLCJMaWd1ZSI9PiRsaWd1ZSwgIkNvbWl0w6kiPT4kZGVwKTsKICAgIC8vIAogICAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIFdIRVJFIGlkID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkdldFJvdygkcXVlcnksIGFycmF5KCAkcGFyYW1zWydyZWNvcmRfaWQnXSApKTsKCglpZiggISRkYnJlc3VsdCkKICAgIAl7CgkJJHRoaXMtPlNldEVycm9yKCR0aGlzLT5MYW5nKCdlcnJvcl9yZXN1bHRub3Rmb3VuZCcpKTsKCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKHJlc3VsdHMsICRwYXJhbXMpOwoJCXJldHVybjsKICAgICAJfQoJZWxzZQoJewoJCSRpZCA9ICRkYnJlc3VsdFsnaWQnXTsKCQkkbmFtZSA9ICRkYnJlc3VsdFsnbmFtZSddOwoJCSRjb2RlX2NvbXBldCA9ICRkYnJlc3VsdFsnY29kZV9jb21wZXQnXTsKCQkkY29lZmZpY2llbnQgPSAkZGJyZXN1bHRbJ2NvZWZmaWNpZW50J107CgkJJGluZGl2cyA9ICRkYnJlc3VsdFsnaW5kaXZzJ107CgkJJGlkb3JnYSA9ICRkYnJlc3VsdFsnaWRvcmdhJ107CQoJCSRpZGVwcmV1dmUgPSAkZGJyZXN1bHRbJ2lkZXByZXV2ZSddOwkKCX0KCiAgIAokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsCgkJICAgICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoICRpZCwgJ2RvX2FkZF90eXBlX2NvbXBldCcsICRyZXR1cm5pZCApICk7CiRzbWFydHktPmFzc2lnbigncmVjb3JkX2lkJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsICdyZWNvcmRfaWQnLCAkcGFyYW1zWydyZWNvcmRfaWQnXSApKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JyksICdjbGFzcz0iYnV0dG9uIicpKTsKJHNtYXJ0eS0+YXNzaWduKCduYW1lJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnbmFtZScsJG5hbWUsMTE1LDIwMCkpOwoJCQokc21hcnR5LT5hc3NpZ24oJ2lkZXByZXV2ZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnaWRlcHJldXZlJywkaWRlcHJldXZlLDUsMTApKTsKCiRzbWFydHktPmFzc2lnbignY29lZmZpY2llbnQnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnY29lZmZpY2llbnQnLCRjb2VmZmljaWVudCw1LDEwKSk7CgkJJGl0ZW1zaW5kaXZzID0gYXJyYXkoIk5vbiI9PiIwIiwiT3VpIj0+IjEiKTsKJHNtYXJ0eS0+YXNzaWduKCdpbmRpdnMnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2luZGl2cycsJGl0ZW1zaW5kaXZzLC0xLCRpbmRpdnMpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ29yZ2EnLAoJCQkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnaWRvcmdhJywkdGFibGVhdSwtMSwkaWRvcmdhKSk7CiRzbWFydHktPmFzc2lnbignZWRpdCcsCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2VkaXQnLCdPdWknKSk7CQkJCQkJCQokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsCgkJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JyksICdjbGFzcz0iYnV0dG9uIicpKTsKJHNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLAoJCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdjYW5jZWwnLAoJCQkJCQkkdGhpcy0+TGFuZygnY2FuY2VsJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdiYWNrJywKCQkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnYmFjaycsCgkJCQkJCSR0aGlzLT5MYW5nKCdiYWNrJykpKTsKCiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsCgkJJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlZGl0X3R5cGVfY29tcGV0LnRwbCcpOwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.equipe.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWlzc2V0KCRnQ21zKSkgZXhpdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKJHNhaXNvbiA9IChpc3NldCgkcGFyYW1zWydzYWlzb24nXSkpPyRwYXJhbXNbJ3NhaXNvbiddOiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKJHJlY29yZF9pZCA9ICcnOwppZighaXNzZXQoJHBhcmFtc1sncmVjb3JkX2lkJ10pIHx8ICRwYXJhbXNbJ3JlY29yZF9pZCddID09JycpCnsKCSRtZXNzYWdlID0gJ1VuIHBiIGVzdCBzdXJ2ZW51JzsKfQoKCiRyZWNvcmRfaWQgPSAkcGFyYW1zWydyZWNvcmRfaWQnXTsKLy9sZSBudW3DqXJvIGRlIGwnw6lxdWlwZSBlc3Qgb2ssIG9uIGNvbnRpbnVlCi8vb24gdmEgZCdhYm9yZCByw6ljdXDDqXJlciBsZSBjbGFzc2VtZW50IGRlIGNldHRlIMOpcXVpcGUKJHF1ZXJ5ID0gIlNFTEVDVCBjbC5jbHQsIGNsLmpvdWUsY2wuZXF1aXBlLGNsLnB0cyxlcS5saWJlcXVpcGUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2xhc3NlbWVudCBBUyBjbCwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgQVMgZXEgIFdIRVJFIGVxLmlkID0gY2wuaWRlcXVpcGUgICBBTkQgY2wuaWRlcXVpcGUgPSA/IEFORCBjbC5zYWlzb24gPSA/IE9SREVSIEJZIGNsLmlkIEFTQyI7CiRkYnJlc3VsdD0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHJlY29yZF9pZCwkc2Fpc29uKSk7Cgokcm93YXJyYXkgPSBhcnJheSgpOwppZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApCnsKCXdoaWxlKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgl7CgkJJGNsYXNzZW1lbnQgPSAkcm93WydjbHQnXTsKCQkkam91ZSA9ICRyb3dbJ2pvdWUnXTsKCQkkZnJpZW5kbHluYW1lID0gJHJvd1snZnJpZW5kbHluYW1lJ107CgkJaWYoJGNsYXNzZW1lbnQ9PScwJyB8fCAkam91ZSA9PScwJyApCgkJewoJCQkkY2xhc3NlbWVudCA9ICctJzsKCQl9CgkJJG9uZXJvdz0gbmV3IFN0ZENsYXNzKCk7CgkJJG9uZXJvdy0+cm93Y2xhc3M9ICRyb3djbGFzczsKCQkkcG91bGUgPSAkcm93Wydwb3VsZSddOwoJCSRvbmVyb3ctPmlkPSAkcm93WydpZCddOwoJCSRvbmVyb3ctPmlkcG91bGUgPSAkcm93WydpZHBvdWxlJ107CgkJJG9uZXJvdy0+aWRkaXYgPSAkcm93WydpZGRpdiddOwoJCSRvbmVyb3ctPmZyaWVuZGx5bmFtZT0gJHJvd1snZnJpZW5kbHluYW1lJ107CgkJJG9uZXJvdy0+Y2x0PSAgJGNsYXNzZW1lbnQ7CgkJJG9uZXJvdy0+ZXF1aXBlPSAkcm93WydlcXVpcGUnXTsKCQkkb25lcm93LT5qb3VlPSAkcm93Wydqb3VlJ107CgkJJG9uZXJvdy0+cHRzPSAkcm93WydwdHMnXTsKCQkvLyRvbmVyb3ctPnR5cGVfY29tcGV0ID0gJHJvd1snY29kZV9jb21wZXQnXTsKCQkoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcz0gInJvdzIiIDogJHJvd2NsYXNzPSAicm93MSIpOwoJCSRyb3dhcnJheVtdPSAkb25lcm93OwoJfQp9CmVsc2UKewoJLy9wYXMgZGUgcsOpc3VsdGF0cyA/Cn0KJHNtYXJ0eS0+YXNzaWduKCdsaWJlcXVpcGUnLCAkZnJpZW5kbHluYW1lKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtc2ZvdW5kJywgJHRoaXMtPkxhbmcoJ3Jlc3VsdHNmb3VuZHRleHQnKSk7CiRzbWFydHktPmFzc2lnbignaXRlbWNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiRzbWFydHktPmFzc2lnbignaXRlbXMnLCAkcm93YXJyYXkpOwoKCgokcXVlcnkyID0gIlNFTEVDVCByZW4uZGF0ZV9ldmVudCwgcmVuLmlkcG91bGUsIHJlbi5pZGRpdixlcS5pZCBhcyBpZF9hbGlhcyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wb3VsZXNfcmVuY29udHJlcyBBUyByZW4sICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19lcXVpcGVzIEFTIGVxIFdIRVJFIHJlbi5pZHBvdWxlID0gZXEuaWRwb3VsZSBBTkQgcmVuLmlkZGl2ID0gZXEuaWRkaXYgQU5EIHJlbi5zYWlzb24gPSA/IEFORCBlcS5pZCA9ID8gR1JPVVAgQlkgcmVuLmRhdGVfZXZlbnQgT1JERVIgQlkgcmVuLmRhdGVfZXZlbnQgQVNDICI7CiRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uOwokcGFybXNbJ2lkX2FsaWFzJ10gPSAkcmVjb3JkX2lkOwoKJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MiwkcGFybXMpOwokcm93YXJyYXkyID0gYXJyYXkoKTsKJGkgPSAwOwppZigkZGJyZXN1bHRhdCAmJiAkZGJyZXN1bHRhdC0+UmVjb3JkQ291bnQoKT4wKQp7CgkKCXdoaWxlKCRyb3cyID0gJGRicmVzdWx0YXQtPkZldGNoUm93KCkpCgl7CgkJJGkrKzsKCQkkZGF0ZV9ldmVudCA9ICRyb3cyWydkYXRlX2V2ZW50J107CgkJJGlkcG91bGUgPSAkcm93MlsnaWRwb3VsZSddOwoJCSRpZGRpdiA9ICRyb3cyWydpZGRpdiddOwoJCSRvbmVyb3cyID0gbmV3IFN0ZENsYXNzKCk7CgkJJG9uZXJvdzItPnJvd2NsYXNzID0kcm93Y2xhc3M7CgkJJG9uZXJvdzItPmRhdGVfZXZlbnQgPSAkcm93MlsnZGF0ZV9ldmVudCddOwoJCSRvbmVyb3cyLT52YWxldXIgPSAkaTsKCQkKCQkKCQkJLy9vbiBmYWl0IGxhIGRldXhpw6htZSByZXF1ZXRlIGTDqXJpdmFudCBkZSBsYSBwcmVtacOocmUKCQkJJHF1ZXJ5MyA9ICJTRUxFQ1QgcmVuLmVxdWEsIHJlbi5zY29yZWEsIHJlbi5lcXViLCByZW4uc2NvcmViIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIEFTIHJlbiBXSEVSRSByZW4uZGF0ZV9ldmVudCA9ID8gQU5EIGlkcG91bGUgPSA/IEFORCBpZGRpdiA9ID8gIjsKCQkJJGRicmVzdWx0MyA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkzLCBhcnJheSgkZGF0ZV9ldmVudCwgJGlkcG91bGUsICRpZGRpdikpOwoJCQkkcm93YXJyYXkzID0gYXJyYXkoKTsKCQkJCgkJCQlpZigkZGJyZXN1bHQzICYmICRkYnJlc3VsdDMtPlJlY29yZENvdW50KCk+MCkKCQkJCXsKCQkJCQl3aGlsZSgkcm93MyA9ICRkYnJlc3VsdDMtPkZldGNoUm93KCkpCgkJCQkJewoJCQkJCQkkb25lcm93MyAgPSBuZXcgU3RkQ2xhc3MoKTsKCQkJCQkJJG9uZXJvdzMtPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoJCQkJCQkkb25lcm93My0+ZXF1YSA9ICRyb3czWydlcXVhJ107CgkJCQkJCSRvbmVyb3czLT5zY29yZWEgPSAkcm93M1snc2NvcmVhJ107CgkJCQkJCSRvbmVyb3czLT5lcXViID0gJHJvdzNbJ2VxdWInXTsKCQkJCQkJJG9uZXJvdzMtPnNjb3JlYiA9ICRyb3czWydzY29yZWInXTsKCQkJCQkJJHJvd2FycmF5M1tdID0gJG9uZXJvdzM7CgkJCQkJfQoJCQkJCSRzbWFydHktPmFzc2lnbigncHJvZHNfJy4kaSwkcm93YXJyYXkzKTsKCQkJCQkkc21hcnR5LT5hc3NpZ24oJ2l0ZW1zY291bnRfJy4kaSwgY291bnQoJHJvd2FycmF5MykpOwoJCQkJCXVuc2V0KCRyb3dhcnJheTMpOwoJCQkJCQoJCQkJfQoJCSRyb3dhcnJheTJbXSAgPSAkb25lcm93MjsKCX0KCQoJJHNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQyJywgY291bnQoJHJvd2FycmF5MikpOwoJJHNtYXJ0eS0+YXNzaWduKCdpdGVtczInLCAkcm93YXJyYXkyKTsKfQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2VxdWlwZS50cGwnKTsKLy9lY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2RldGFpbHNfcmVuY29udHJlLnRwbCcpOwojCiNFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.erase_spid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCQlpZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CgkJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCWlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBNYW5hZ2UnKSkKCQl7CgkJJHBhcmFtcyA9IGFycmF5KCdtZXNzYWdlJz0+TGFuZygnbmVlZHBlcm1pc3Npb24nKSwgJ2FjdGl2ZV90YWInID0+ICd1c2VycycpOwoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCcnLCAkcGFyYW1zKTsKCQkvKmVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ25lZWRwZXJtaXNzaW9uJykpOwoJCXJldHVybjsqLwoJCX0KCgkJJHJlY29yZF9pZCA9ICcnOwoJCWlmIChpc3NldCgkcGFyYW1zWydyZWNvcmRfaWQnXSkpCgkJewoJCQkkcmVjb3JkX2lkID0gJHBhcmFtc1sncmVjb3JkX2lkJ107CgkJfQoJCSRjb2VmY2hhbXAgPSAnJzsKCQlpZihpc3NldCgkcGFyYW1zWydjb2VmY2hhbXAnXSkpCgkJewoJCQkkY29lZmNoYW1wID0gJHBhcmFtc1snY29lZmNoYW1wJ107CgkJfQoJCSRudW1qb3VybiA9ICcnOwoJCWlmKGlzc2V0KCRwYXJhbXNbJ251bWpvdXJuJ10pKQoJCXsKCQkJJG51bWpvdXJuID0gJHBhcmFtc1snbnVtam91cm4nXTsKCQl9CgkJJHZkID0gJyc7CgkJaWYoaXNzZXQoJHBhcmFtc1sndmQnXSkpCgkJewoJCQkkdmQgPSAkcGFyYW1zWyd2ZCddOwoJCX0KCQkkcG9pbnRyZXMgPSAnJzsKCQlpZihpc3NldCgkcGFyYW1zWydwb2ludHJlcyddKSkKCQl7CgkJCSRwb2ludHJlcyA9ICRwYXJhbXNbJ3BvaW50cmVzJ107CgkJfQoJCQoJCQoJCS8vTm93IHJlbW92ZSB0aGUgYXJ0aWNsZQoJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCBTRVQgbnVtam91cm4gPSA/LCBjb2VmZiA9ID8sIHBvaW50cmVzID0gPywgdmljdG9pcmUgPSA/IFdIRVJFIGlkID0gPyI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG51bWpvdXJuLCAkY29lZmNoYW1wLCRwb2ludHJlcywkdmQsICRyZWNvcmRfaWQpKTsKCQkKCQkJaWYoISRkYnJlc3VsdCkKCQkJewoJCQkJZWNobyAkZGItPkVycm9yTXNnKCk7CgkJCQkKCQkJfQoJCQoJCQoKJHRoaXMtPlNldE1lc3NhZ2UoJ1LDqXN1bHRhdCBtb2RpZmnDqScpOwokdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdyZXN1bHRzJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.getPouleClassement.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCAoICRnQ21zICkgKSBleGl0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKJGRiID0mICR0aGlzLT5HZXREYigpOwovL29uIHbDqXJpZmllIGxlcyBwZXJtaXNzaW9ucyBkJ2Fib3JkCmlmKCEgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBVc2UnKSkgZXhpdDsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKJGVycm9yID0gMDsKJGRlc2lnbmF0aW9uID0gJyc7CgokaWRwb3VsZSA9ICcnOwoJaWYoaXNzZXQoJHBhcmFtc1snaWRwb3VsZSddKSAmJiAkcGFyYW1zWydpZHBvdWxlJ10gIT0nJyApCgl7CgkJJGlkcG91bGUgPSAkcGFyYW1zWydpZHBvdWxlJ107Cgl9CgllbHNlCgl7CgkJJGVycm9yKys7Cgl9CgkKJGlkZGl2ID0gJyc7CglpZihpc3NldCgkcGFyYW1zWydpZGRpdiddKSAmJiAkcGFyYW1zWydpZGRpdiddICE9JycpCgl7CgkJJGlkZGl2ID0gJHBhcmFtc1snaWRkaXYnXTsKCX0KCWVsc2UKCXsKCQkkZXJyb3IrKzsKCX0KJHJlY29yZF9pZCA9ICcnOwoJaWYoaXNzZXQoJHBhcmFtc1sncmVjb3JkX2lkJ10pICYmICRwYXJhbXNbJ3JlY29yZF9pZCddICE9JycpCgl7CgkJJHJlY29yZF9pZCA9ICRwYXJhbXNbJ3JlY29yZF9pZCddOwoJfQoJZWxzZQoJewoJCSRlcnJvcisrOwoJfQovKgokY29kZV9jb21wZXQgPSAnJzsKCWlmKGlzc2V0KCRwYXJhbXNbJ3R5cGVfY29tcGV0J10pICYmICRwYXJhbXNbJ3R5cGVfY29tcGV0J10gIT0nJykKCXsKCQkkY29kZV9jb21wZXQgPSAkcGFyYW1zWyd0eXBlX2NvbXBldCddOwoJfQoJZWxzZQoJewoJCSRlcnJvcisrOwoJfQoqLwppZigkZXJyb3I+MCkKewoJJHRoaXMtPlNldE1lc3NhZ2UoJ1BhcmFtw6h0cmVzIG1hbnF1YW50cycpOwoJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignZXF1aXBlcycpOwoJCn0KLy9ib24gdHQgdmEgYmllbiwgdHQgZXN0IE9rCiRzZXJ2aWNlID0gbmV3IFNlcnZpY2UoKTsKJHJlc3VsdCA9ICRzZXJ2aWNlLT5nZXRQb3VsZUNsYXNzZW1lbnQoJGlkZGl2LCAkaWRwb3VsZSk7Ci8vdmFyX2R1bXAoJHJlc3VsdCk7CgovL29uIHbDqXJpZmllIHF1ZSBsZSByZXN1bHRhdCBlc3QgYmllbiB1biBhcnJheQoKaWYoIWlzX2FycmF5KCRyZXN1bHQpIHx8IGNvdW50KCRyZXN1bHQpPT0wKSAKewoJLy9vbiByZXZpZW50IMOgIGxhIGNhc2UgZMOpcGFydAoJJHRoaXMtPlNldE1lc3NhZ2UoJ0xlIHNlcnZpY2UgZXN0IGNvdXDDqScpOwoJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignZXF1aXBlcycpOwoJCn0KLy90dCB2YSBiaWVuLCBvbiBjb250aW51ZQovL29uIHN1cHByaW1lIHR0IGNlIHF1aSDDqXRhaXQgZHMgbGEgYmRkIHBvdXIgY2V0dGUgcG91bGUKJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jbGFzc2VtZW50IFdIRVJFIGlkZGl2ID0gPyBBTkQgaWRwb3VsZT0gPyBBTkQgaWRlcXVpcGUgPSA/IEFORCBzYWlzb24gPSA/IjsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGlkZGl2LCAkaWRwb3VsZSwgJHJlY29yZF9pZCwkc2Fpc29uX2NvdXJhbnRlKSk7CiRpPTA7Ly9vbiBpbml0aWFsaXNlIHVuIGNvbXB0ZXVyIAovL29uIHLDqWN1cMOocmUgbGUgcsOpc3VsdGF0IGV0IG9uIGZhaXQgbGUgZm9yZWFjaApmb3JlYWNoKCRyZXN1bHQgYXMgJGNsZSA9PiR0YWIpCnsKCSRwb3VsZSA9ICR0YWJbJ3BvdWxlJ107CgkkY2x0ID0gJHRhYlsnY2x0J107CgkkZXF1aXBlID0gJHRhYlsnZXF1aXBlJ107Cgkkam91ZSA9ICR0YWJbJ2pvdWUnXTsKCSRwdHMgPSAkdGFiWydwdHMnXTsKCQoJJHF1ZXJ5MiA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2xhc3NlbWVudCAoaWQsaWRlcXVpcGUsIHNhaXNvbiwgaWRkaXYsIGlkcG91bGUsIHBvdWxlLCBjbHQsIGVxdWlwZSwgam91ZSwgcHRzKSBWQUxVRVMgKCcnLCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSI7CgkvL2VjaG8gJHF1ZXJ5MjsKCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsIGFycmF5KCRyZWNvcmRfaWQsJHNhaXNvbl9jb3VyYW50ZSwgJGlkZGl2LCAkaWRwb3VsZSwkcG91bGUsICRjbHQsICRlcXVpcGUsICRqb3VlLCRwdHMpKTsKCQoJaWYoISRkYnJlc3VsdGF0KQoJewoJCSRkZXNpZ25hdGlvbi49ICRkYi0+RXJyb3JNc2coKTsKCQkkc3RhdHVzID0gJ0tvJzsKCQkKCX0KCWVsc2UKCXsKCQkkZGVzaWduYXRpb24uPSJSw6ljdXDDqXJhdGlvbiBkdSBjbGFzc2VtZW50IGRlIGxhIHBvdWxlIDogIi4kcG91bGU7CgkJJHN0YXR1cyA9ICJPayI7Cgl9CgkKfQokYWN0aW9uID0gJ2dldFBvdWxlY2xhc3NlbWVudCc7CiR0aGlzLT5TZXRNZXNzYWdlKCIkZGVzaWduYXRpb24iKTsKcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCRkZXNpZ25hdGlvbiwkYWN0aW9uKTsKJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwokdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdlcXVpcGVzJyk7CgoKCiMKI0VPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.individuelles.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBhdXRldXIgOiBDbGF1ZGUgU0lPSEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjCiMgQ2V0dGUgcGFnZSByw6ljdXDDqHJlIGxlcyBjb21ww6l0aXRpb25zIGluZGl2aWR1ZWxsZXMgICAgICAgICAgICAgICAgICAgICAgIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKCgokZGIgPSYgJHRoaXMtPkdldERiKCk7Cmdsb2JhbCAkdGhlbWVPYmplY3Q7CiRwYXJtcyA9IGFycmF5KCk7CiRyZXN1bHQ9IGFycmF5ICgpOwokbW9pc19lbl9jb3VycyA9IGRhdGUoJ20nKTsKJG1vaXNfZW5fY291cnMyID0gJG1vaXNfZW5fY291cnMgLSAxOwokc2Fpc29uX2NvdXJhbnRlID0gKGlzc2V0KCRwYXJhbXNbJ3NhaXNvbiddKT8kcGFyYW1zWydzYWlzb24nXTokdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJykpOwovL29uIMOpdGFibGl0IGxhIGxpc3RlIGRlcyBjb21ww6l0aXRpb25zIGluZGl2aWR1ZWxsZXMgZHUgY2FsZW5kcmllcgokcXVlcnkxID0gIlNFTEVDVCAqLE1PTlRIKGNhbC5kYXRlX2RlYnV0KSBBUyBtb2lzX3JlZiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jYWxlbmRyaWVyIEFTIGNhbCwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIEFTIHRjIFdIRVJFIGNhbC50eXBlX2NvbXBldCA9IHRjLmNvZGVfY29tcGV0IEFORCBjYWwuc2Fpc29uID0gPyI7Ci8vaWwgcydhZ2l0IGRlIGNvbXDDqXRpdGlvbnMgaW5kaXZpZHVlbGxlcyA/CiRxdWVyeTEuPSIgQU5EIHRjLmluZGl2cyA9IDEgIjsKJHBhcmFtZXRyZXMgPSAwOwovKgokam91ciA9IGRhdGUoJ2onKTsKaWYoJGpvdXIgPCAxMCkKewoJJHF1ZXJ5MS49ICIgQU5EIE1PTlRIKGNhbC5kYXRlX2RlYnV0KSA8ICIgLiRtb2lzX2VuX2NvdXJzMi4gIiI7Cn0KZWxzZQp7CgkkcXVlcnkxLj0gIiBBTkQgTU9OVEgoY2FsLmRhdGVfZGVidXQpIDwgIiAuJG1vaXNfZW5fY291cnMuICIiOwp9CiovCiRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uX2NvdXJhbnRlOwppZihpc3NldCgkcGFyYW1zWyd0eXBlX2NvbXBldCddKSAmJiAkcGFyYW1zWyd0eXBlX2NvbXBldCddICE9JycpCnsKCSRwYXJhbWV0cmVzKys7CgkkdHlwZV9jb21wZXQgPSAkcGFyYW1zWyd0eXBlX2NvbXBldCddOwoJLy9vbiByZWdhcmRlIHNpIHVuIE7CsCBkZSBqb3VybsOpZSBlc3QgZW4gcGFyYW3DqHRyZSDDqWdhbGVtZW50CgkkcXVlcnkxLj0iIEFORCB0Yy5jb2RlX2NvbXBldCA9ID8iOwoJJHBhcm1zWyd0eXBlX2NvbXBldCddID0gJHR5cGVfY29tcGV0OwoJCgkJCgkJCQp9CmlmKGlzc2V0KCRwYXJhbXNbJ2RhdGVfZGVidXQnXSkgJiYgJHBhcmFtc1snZGF0ZV9kZWJ1dCddICE9JycpCnsKCSRwYXJhbWV0cmVzKys7CgkkZGF0ZV9kZWJ1dCA9ICRwYXJhbXNbJ2RhdGVfZGVidXQnXTsKCQoJJHF1ZXJ5MS49IiBBTkQgY2FsLmRhdGVfZGVidXQgPSA/IjsKCSRwYXJtc1snZGF0ZV9kZWJ1dCddID0gJGRhdGVfZGVidXQ7Cn0KaWYoaXNzZXQoJHBhcmFtc1snZGF0ZV9maW4nXSkgJiYgJHBhcmFtc1snZGF0ZV9maW4nXSAhPScnKQp7CgkkcGFyYW1ldHJlcysrOwoJJGRhdGVfZmluID0gJHBhcmFtc1snZGF0ZV9maW4nXTsKCQoJJHF1ZXJ5MS49IiBBTkQgY2FsLmRhdGVfZmluID0gPyI7CgkkcGFybXNbJ2RhdGVfZmluJ10gPSAkZGF0ZV9maW47Cn0KCgokcXVlcnkxLj0iIE9SREVSIEJZIGNhbC5kYXRlX2RlYnV0IERFU0MiOwoKCSRyZXN1bHQxID0gJGRiLT5FeGVjdXRlKCRxdWVyeTEsJHBhcm1zKTsKCi8vaWwgZmF1ZHJhIGFqb3V0ZXIgcXFjaCBwb3VyIGRpZmbDqXJlbmNpZXIgbGVzIHNhaXNvbnMKLy9pbCBmYXVkcmEgYXVzc2kgY29uc3RydWlyZSBkeW5hbWlxdWVtZW50IGxlcyB0YWJsZWF1IGRlIGxpY2VuY2VzIHNvdXMgZm9ybWUgZCdhcnJheQovKgokYXJyYXlfSSA9IHBpbmdfYWRtaW5fb3BzOjphcnJheV9jb2RlX2NvbXBldCgkdHlwZV9jb21wZXQ9J0knKTsKJGFycmF5X0ogPSBwaW5nX2FkbWluX29wczo6YXJyYXlfY29kZV9jb21wZXQoJHR5cGVfY29tcGV0PSdKJyk7CiRhcnJheV9WID0gcGluZ19hZG1pbl9vcHM6OmFycmF5X2NvZGVfY29tcGV0KCR0eXBlX2NvbXBldD0nVicpOwplY2hvICRhcnJheV9WOwp2YXJfZHVtcCgkYXJyYXlfVik7CiovCgoJaWYoJHJlc3VsdDEgJiYgJHJlc3VsdDEtPlJlY29yZENvdW50KCk+MCkKCXsKCQkkcm93Y2xhc3M9ICdyb3cxJzsKCQkkcm93YXJyYXk9IGFycmF5ICgpOwoJCQoJCXdoaWxlKCRyb3cxID0gJHJlc3VsdDEtPkZldGNoUm93KCkpCgkJewoJCQkvL29uIHLDqWN1cMOocmUgbGVzIHLDqXN1bHRhdHMKCQkJJGRhdGVfZGVidXQgPSAkcm93MVsnZGF0ZV9kZWJ1dCddOwoJCQkkZGF0ZV9maW4gPSAkcm93MVsnZGF0ZV9maW4nXTsKCQkJJG51bWpvdXJuID0gJHJvdzFbJ251bWpvdXJuJ107CgkJCSRuYW1lID0gJHJvdzFbJ25hbWUnXTsKCQkJJGNvZGUgPSAkcm93MVsnY29kZV9jb21wZXQnXTsKCQkJJG1vaXNfcmVmID0gJHJvdzFbJ21vaXNfcmVmJ107CQkKCQkJCgkJCS8vb24gaW5zdGFuY2llIGNlIHF1aSB2YSBmYWlyZSBsZXMgZW50w6p0ZXMKCQkJJG9uZXJvdz0gbmV3IFN0ZENsYXNzKCk7CgkJCSRvbmVyb3ctPnJvd2NsYXNzPSAkcm93Y2xhc3M7CgkJCSRvbmVyb3ctPm5hbWUgPSAkbmFtZTsKCQkJJG9uZXJvdy0+ZGF0ZV9ldmVudCA9ICRkYXRlX2RlYnV0OwoJCQkkb25lcm93LT52YWxldXIgPSAkaTsvL3Ryw6hzIGltcG9ydGFudCBwb3VyIGxlcyBib3VjbGVzCgkJCQoJCQkkYXJyYXkgPSBwaW5nX2FkbWluX29wczo6YXJyYXlfY29kZV9jb21wZXQoJGNvZGUsJGRhdGVfZGVidXQsJGRhdGVfZmluKTsKCQkJLy92YXJfZHVtcCgkYXJyYXkpOwoJCQkvL2VjaG8gImxlIG1vaXMgZGUgcsOpZsOpcmVuY2UgZXN0IDogIi4kbW9pc19yZWY7CgkJCQoJCQlpZihjb3VudCgkYXJyYXkpPjApCgkJCXsKCQkJCQoJCQkJLy9vbiBlc3QgZGFucyBsYSBGRlRUCgkJCQkkcXVlcnkyID0gIlNFTEVDVCBDT05DQVRfV1MoJyAnLCBqLm5vbSwgai5wcmVub20pIEFTIGpvdWV1ciwgai5saWNlbmNlLCBTVU0odmQpIEFTIHZpYywgY291bnQodmQpIEFTIHN1ciwgU1VNKHBvaW50cmVzKSBBUyBwdHMgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyBBUyBzcCwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgQVMgaiAgV0hFUkUgc3AubGljZW5jZSA9IGoubGljZW5jZSBBTkQgc3AuZGF0ZV9ldmVudCBCRVRXRUVOID8gQU5EID8iOwoJCQkvLwkkdGFiID0gJ2FycmF5Jy4nXycuJGNvZGU7CgkJCS8vCXZhcl9kdW1wKCQkdGFiKTsKCQkJCSRxdWVyeTIuPSIgQU5EIGoubGljZW5jZSBJTiAoICciIC4gaW1wbG9kZSgkYXJyYXksICInLCAnIikgLiAiJyApIjsKCQkJCSRxdWVyeTIuPSIgR1JPVVAgQlkgam91ZXVyLGoubGljZW5jZSI7CgkJCQkvL2VjaG8gJHF1ZXJ5MjsKCQkJCSRyZXN1bHQyID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsIGFycmF5KCRkYXRlX2RlYnV0LCAkZGF0ZV9maW4pKTsKCQkJCSRsaWduZXMgPSAkcmVzdWx0Mi0+UmVjb3JkQ291bnQoKTsKCQkJCSRzcGlkID0wOwoJCQkJCgkJCQlpZigkbGlnbmVzID09MCkKCQkJCXsKCQkJCQkvL29uIGVzdCBkYW5zIGxlIHNwaWQKCQkJCQkkc3BpZCA9MTsKCQkJCQkvLyRvbmVyb3ctPgoJCQkJCSRxdWVyeTIgPSAiU0VMRUNUIENPTkNBVF9XUygnICcsIGoubm9tLCBqLnByZW5vbSkgQVMgam91ZXVyLCBqLmxpY2VuY2UsIFNVTSh2aWN0b2lyZSkgQVMgdmljLCBjb3VudCh2aWN0b2lyZSkgQVMgc3VyLCBTVU0ocG9pbnRyZXMpIEFTIHB0cyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQgQVMgc3AsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIEFTIGogIFdIRVJFIHNwLmxpY2VuY2UgPSBqLmxpY2VuY2UgQU5EIHNwLmRhdGVfZXZlbnQgQkVUV0VFTiA/IEFORCA/IjsKCQkJCS8vCSR0YWIgPSAnYXJyYXknLidfJy4kY29kZTsKCQkJCS8vCXZhcl9kdW1wKCQkdGFiKTsKCQkJCQkkcXVlcnkyLj0iIEFORCBqLmxpY2VuY2UgSU4gKCAnIiAuIGltcGxvZGUoJGFycmF5LCAiJywgJyIpIC4gIicgKSI7CgkJCQkJJHF1ZXJ5Mi49IiBHUk9VUCBCWSBqb3VldXIsai5saWNlbmNlIjsKCQkJCQkvL2VjaG8gJHF1ZXJ5MjsKCQkJCQkkcmVzdWx0MiA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkyLCBhcnJheSgkZGF0ZV9kZWJ1dCwgJGRhdGVfZmluKSk7CgkJCQl9CgkJCQkkb25lcm93LT5zcGlkID0gJHNwaWQ7CgkJCQkJaWYoJHJlc3VsdDIgJiYgJHJlc3VsdDItPlJlY29yZENvdW50KCk+MCkKCQkJCQl7CgkJCQkJCS8vJGk9MDsKCQkJCQkJJHJvd2FycmF5MiA9IGFycmF5KCk7CgkJCQkJCSRjb21wdGV1ciA9IDA7CgkJCQkJCgkJCQkJCXdoaWxlKCRyb3cyID0gJHJlc3VsdDItPkZldGNoUm93KCkpCgkJCQkJCXsKCQkJCQkJCSRsaWNlbmNlID0gJHJvdzJbJ2xpY2VuY2UnXTsKCQkJCQkJCSRvbmVyb3cyID0gbmV3IFN0ZENsYXNzKCk7CgkJCQkJCQkkb25lcm93Mi0+am91ZXVyID0gJHJvdzJbJ2pvdWV1ciddOwoJCQkJCQkJJG9uZXJvdzItPnZpYyA9ICRyb3cyWyd2aWMnXTsKCQkJCQkJCSRvbmVyb3cyLT5zdXIgPSAkcm93Mlsnc3VyJ107CgkJCQkJCQkkb25lcm93Mi0+cHRzID0gJHJvdzJbJ3B0cyddOwoJCQkJCQkKCQkJCQkJCWlmKCRzcGlkID09IDEpCgkJCQkJCQl7CgkJCQkJCQkJJG9uZXJvdzItPmRldGFpbHMgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICd1c2VyX3Jlc3VsdHNfcHJvdicsICRyZXR1cm5pZCwgIkTDqXRhaWxzIixhcnJheSgnbGljZW5jZSc9PiRsaWNlbmNlLCdkYXRlX2RlYnV0Jz0+JGRhdGVfZGVidXQsICdkYXRlX2Zpbic9PiRkYXRlX2ZpbikpIDsKCQkJCQkJCX0KCQkJCQkJCWVsc2UKCQkJCQkJCXsKCQkJCQkJCQkkb25lcm93Mi0+ZGV0YWlscyA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3VzZXJfcmVzdWx0cycsICRyZXR1cm5pZCwgIkTDqXRhaWxzIixhcnJheSgnbGljZW5jZSc9PiRsaWNlbmNlLCdkYXRlX2RlYnV0Jz0+JGRhdGVfZGVidXQsICdkYXRlX2Zpbic9PiRkYXRlX2ZpbiwgJ3NhaXNvbic9PiRzYWlzb25fY291cmFudGUpKSA7CgkJCQkJCQl9CgkJCQkJCQoJCQkJCQkJJG9uZXJvdzItPmNvbXB0ZXVyID0gJGNvbXB0ZXVyOwoJCQkJCQkJCgkJCQkJCQoJCQkJCQkkcm93YXJyYXkyW10gPSAkb25lcm93MjsJCgkJCQkJCX0vL2ZpbiBkdSBkZXV4acOobWUgd2hpbGUKCQkJCQkKCQkJCQkJJHNtYXJ0eS0+YXNzaWduKCdwcm9kc18nLiRpLCRyb3dhcnJheTIpOwoJCQkJCQkkc21hcnR5LT5hc3NpZ24oJ2l0ZW1zY291bnRfJy4kaSwgY291bnQoJHJvd2FycmF5MikpOwoJCQkJCQl1bnNldCgkcm93YXJyYXkyKTsKCQkJCQkJLy91bnNldCgkJHRhYik7CgkJCQkJCSRpKys7CQoJCQkJCQoJCQkJCX0vL2ZpbiBkdSAkcmVzdWx0MgoJCQkJfQoJCQkJCgkJCXVuc2V0KCRhcnJheSk7CQoJCQkkcm93YXJyYXlbXSAgPSAkb25lcm93OwoJCQkkc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKCQkJCQoJCX0vL2ZpbiBkdSBwcmVtaWVyIHdoaWxlCgkJCQkKCQkKCX0vL2ZpbiBkdSBpZiAkcmVzdWx0MQokc21hcnR5LT5hc3NpZ24oJ3ZhbGlkYXRpb24nLCAnT3VpJyk7CQokc21hcnR5LT5hc3NpZ24oJ2luZGl2c19jb3VyYW50JywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2luZGl2aWR1ZWxsZXNfcHJvdicsJHJldHVybmlkLCc+PiBjb21ww6l0aXRpb25zIGVuIGNvdXJzIGRlIHZhbGlkYXRpb24nKSk7CiRzbWFydHktPmFzc2lnbignaXRlbXNmb3VuZCcsICR0aGlzLT5MYW5nKCdyZXN1bHRzZm91bmR0ZXh0JykpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRyb3dhcnJheSkpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsJCQkJCi8vZmFpcmUgYXBwYXJhaXRyZSBsZXMgcG9pbnRzIHRvdGF1eCBldCBzb21tZSB2aWN0b2lyZSBlbiBiYXMgPyBDZSBzZXJhaXQgcGFzIG1hbAovKiovCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnaW5kaXZpZHVlbGxlczMudHBsJyk7CgoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.mass_action.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy9jZSBmaWNoaWVyIGZhaXQgZGVzIGFjdGlvbnMgZGUgbWFzc2UsIGlsIGVzdCBhcHBlbMOpIGRlcHVpcyBsJ29uZ2xldCBkZSByw6ljdXDDqXJhdGlvbiBkZXMgaW5mb3Mgc3VyIGxlcyBqb3VldXJzCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwovL3Zhcl9kdW1wKCRwYXJhbXNbJ3NlbCddKTsKJGRiID0mICR0aGlzLT5HZXREYigpOwppZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0X21hc3NhY3Rpb24nXSkgJiYgaXNzZXQoJHBhcmFtc1snYWN0aW9uZGVtYXNzZSddKSApCiAgewogICAgIGlmKCBpc3NldCgkcGFyYW1zWydzZWwnXSkgJiYgaXNfYXJyYXkoJHBhcmFtc1snc2VsJ10pICYmCgljb3VudCgkcGFyYW1zWydzZWwnXSkgPiAwICkKICAgICAgCXsKICAgICAgICAJc3dpdGNoKCRwYXJhbXNbJ2FjdGlvbmRlbWFzc2UnXSkKCQl7CgkJCWNhc2UgInVuYWJsZSIgOgoJCQlmb3JlYWNoKCAkcGFyYW1zWydzZWwnXSBhcyAkbGljZW5jZSApCgkgIAkJewoJICAgIAkJCXBpbmdfYWRtaW5fb3BzOjp1bmFibGVfcGxheWVyKCAkbGljZW5jZSApOwoJICAJCX0KCQkJJHRoaXMtPlNldE1lc3NhZ2UoJ0pvdWV1cnMgZMOpc2FjdGl2w6lzJyk7CgkJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2pvdWV1cnMnKTsKCQkJYnJlYWs7CgkKCQkJY2FzZSAic2l0dWF0aW9uIiA6CgkJCS8vbGVzIGxpY2VuY2VzIGNvbGxlY3TDqWVzIHNvbnQgc3VwcG9zw6llcyDDqnRyZSBhY3RpdmVzCgkJCS8vcXVlIGZhaXQtb24gc2kgZWxsZXMgbmUgbGUgc29udCBwYXMgZW4gcsOpYWxpdMOpID8KCQkJLy9ib25uZSBxdWVzdGlvbgoJCQkvL29uIHByZW5kIGxlcyB2YXJpYWJsZXMgbsOpY2Vzc2FpcmVzCgkKCQkJJG1lc3NhZ2U9J1JldHJvdXZleiB0b3V0ZXMgbGVzIGluZm9zIGRhbnMgbGUgam91cm5hbCc7CgkJCWZvcmVhY2goICRwYXJhbXNbJ3NlbCddIGFzICRsaWNlbmNlICkKCSAgCQl7CgkKCSAgICAJCQlwaW5nX2FkbWluX29wczo6cmV0cmlldmVfc2l0X21lbnMoICRsaWNlbmNlICk7CgkgIAkJfQoJCQkvLyRtZXNzYWdlLj0nPC91bD4nOwoJCQkkdGhpcy0+U2V0TWVzc2FnZSgiJG1lc3NhZ2UiKTsKCQkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYigic2l0dWF0aW9uIik7CgkJCWJyZWFrOwoJCgkJCWNhc2UgImRlbGV0ZV90ZWFtX3Jlc3VsdCIgOgoJCQkvL2xlcyBsaWNlbmNlcyBjb2xsZWN0w6llcyBzb250IHN1cHBvc8OpZXMgw6p0cmUgYWN0aXZlcwoJCQkvL3F1ZSBmYWl0LW9uIHNpIGVsbGVzIG5lIGxlIHNvbnQgcGFzIGVuIHLDqWFsaXTDqSA/CgkJCS8vYm9ubmUgcXVlc3Rpb24KCQkJLy9vbiBwcmVuZCBsZXMgdmFyaWFibGVzIG7DqWNlc3NhaXJlcwoJCgoJCQlmb3JlYWNoKCAkcGFyYW1zWydzZWwnXSBhcyAkcmVjb3JkX2lkICkKCSAgCQl7CgkKCSAgICAJCQlwaW5nX2FkbWluX29wczo6ZGVsZXRlX3RlYW1fcmVzdWx0KCAkcmVjb3JkX2lkICk7CgkgIAkJfQoJCQkvLyRtZXNzYWdlLj0nPC91bD4nOwoJCgkJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoInBvdWxlcyIpOwoJCQlicmVhazsKCQoJCQljYXNlICJkaXNwbGF5X29uX2Zyb250ZW5kIiA6CgkKCQkJZm9yZWFjaCggJHBhcmFtc1snc2VsJ10gYXMgJGlkICkKCSAgCQl7CgkKCSAgICAJCQlwaW5nX2FkbWluX29wczo6ZGlzcGxheV9vbl9mcm9udGVuZCggJGlkICk7CgkgIAkJfQoJCgkJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoInBvdWxlcyIpOwoJCQlicmVhazsKCQoJCQljYXNlICJkb19ub3RfZGlzcGxheSIgOgoJCgkJCWZvcmVhY2goICRwYXJhbXNbJ3NlbCddIGFzICRyZWNvcmRfaWQgKQoJICAJCXsKCQoJICAgIAkJCXBpbmdfYWRtaW5fb3BzOjpkb19ub3RfZGlzcGxheSggJHJlY29yZF9pZCApOwoJICAJCX0KCQoJCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCJwb3VsZXMiKTsKCQkJYnJlYWs7CgkKCQkJY2FzZSAiZmZ0dCIgOgoJCQlmb3JlYWNoKCAkcGFyYW1zWydzZWwnXSBhcyAkam91cm5hbGlkICkKCSAgCQl7CgkgICAgCQkJcGluZ19hZG1pbl9vcHM6OmRlbGV0ZV9qb3VybmFsKCAkam91cm5hbGlkICk7CgkgIAkJfQoJCQlicmVhazsKCQoJCQljYXNlICJzcGlkIiA6CgkJCS8vJHNhaXNvbl9jb3VyYW50ZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKCQkJJG1lc3NhZ2U9J1JldHJvdXZleiB0b3V0ZXMgbGVzIGluZm9zIGRhbnMgbGUgam91cm5hbCc7CgkJCWZvcmVhY2goICRwYXJhbXNbJ3NlbCddIGFzICRsaWNlbmNlICkKCSAgCQl7CgkgICAgCQkJcmV0cmlldmVfb3BzOjpyZXRyaWV2ZV9wYXJ0aWVzX3NwaWQoICRsaWNlbmNlICk7CgkgIAkJfQoJCQkkdGhpcy0+U2V0TWVzc2FnZSgiJG1lc3NhZ2UiKTsKCQkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYigicmVjdXAiKTsKCQkJYnJlYWs7CgkKCQkJY2FzZSAiZmZ0dF9wYXJ0aWVzIiA6CgkJCS8vJHNhaXNvbl9jb3VyYW50ZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKCQkJJG1lc3NhZ2U9J1JldHJvdXZleiB0b3V0ZXMgbGVzIGluZm9zIGRhbnMgbGUgam91cm5hbCc7CgkJCWZvcmVhY2goICRwYXJhbXNbJ3NlbCddIGFzICRsaWNlbmNlICkKCSAgCQl7CgkgICAgCQkJcGluZ19hZG1pbl9vcHM6OnJldHJpZXZlX3BhcnRpZXNfZmZ0dCggJGxpY2VuY2UgKTsKCSAgCQl9CgkJCSR0aGlzLT5TZXRNZXNzYWdlKCIkbWVzc2FnZSIpOwoJCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCJyZWN1cGVyYXRpb24iKTsKCQkJYnJlYWs7CgkKCQkJY2FzZSAiY29lZmYwNSIgOgoJCQlmb3JlYWNoKCAkcGFyYW1zWydzZWwnXSBhcyAkcmVjb3JkX2lkKQoJCQl7CgkJCQlwaW5nX2FkbWluX29wczo6Y29lZmZfb3BzKCAkcmVjb3JkX2lkLCAkY29lZmY9ICcwLjUwJyApOwoJCQl9CgkJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3NwaWQnKTsKCQkJYnJlYWs7CgkKCQkJY2FzZSAiY29lZmYwNzUiIDoKCQkJZm9yZWFjaCggJHBhcmFtc1snc2VsJ10gYXMgJHJlY29yZF9pZCkKCQkJewoJCQkJcGluZ19hZG1pbl9vcHM6OmNvZWZmX29wcyggJHJlY29yZF9pZCwgJGNvZWZmPSAnMC43NScgKTsKCQkJfQoJCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdzcGlkJyk7CgkJCWJyZWFrOwoJCgkJCWNhc2UgImNvZWZmMSIgOgoJCQlmb3JlYWNoKCAkcGFyYW1zWydzZWwnXSBhcyAkcmVjb3JkX2lkKQoJCQl7CgkJCQlwaW5nX2FkbWluX29wczo6Y29lZmZfb3BzKCAkcmVjb3JkX2lkLCAkY29lZmY9JzEuMDAnICk7CgkJCX0KCQkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignc3BpZCcpOwoJCQlicmVhazsKCQoJCQljYXNlICJjb2VmZjEyNSIgOgoJCQlmb3JlYWNoKCAkcGFyYW1zWydzZWwnXSBhcyAkcmVjb3JkX2lkKQoJCQl7CgkJCQlwaW5nX2FkbWluX29wczo6Y29lZmZfb3BzKCAkcmVjb3JkX2lkLCAkY29lZmY9JzEuMjUnKTsKCQkJfQoJCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdzcGlkJyk7CgkJCWJyZWFrOwoJCgkJCWNhc2UgImNvZWZmMTUiIDoKCQkJJG1lc3NhZ2U9J1JldHJvdXZleiB0b3V0ZXMgbGVzIGluZm9zIGRhbnMgbGUgam91cm5hbCc7CgkJCWZvcmVhY2goICRwYXJhbXNbJ3NlbCddIGFzICRyZWNvcmRfaWQpCgkJCXsKCQkJCXBpbmdfYWRtaW5fb3BzOjpjb2VmZl9vcHMoICRyZWNvcmRfaWQsICRjb2VmZj0gJzEuNTAnICk7CgkJCX0KCQkJJHRoaXMtPlNldE1lc3NhZ2UoIiRtZXNzYWdlIik7CgkJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3NwaWQnKTsKCQkJYnJlYWs7CgkKCQkJY2FzZSAic3VwcF9zcGlkIiA6CgkJCWZvcmVhY2goICRwYXJhbXNbJ3NlbCddIGFzICRyZWNvcmRfaWQpCgkJCXsKCQkJCXBpbmdfYWRtaW5fb3BzOjpzdXBwX3NwaWQoICRyZWNvcmRfaWQgKTsKCQkJfQoJCQkkbWVzc2FnZSA9ICdQYXJ0aWVzKHMpIFNQSUQgc3VwcHJpbcOpZShzKSc7CgkJCSR0aGlzLT5TZXRNZXNzYWdlKCIkbWVzc2FnZSIpOwoJCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdzcGlkJyk7CgkJCWJyZWFrOwoKCQoJCQkKCQkJY2FzZSAic3VwcF9kaXYiIDoKCQkJZm9yZWFjaCggJHBhcmFtc1snc2VsJ10gYXMgJHJlY29yZF9pZCApCgkgIAkJewoJICAgIAkJCSRxdWVyeSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZGl2X3BvdWxlcyBXSEVSRSBpZCA9ID8iOwoJCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHJlY29yZF9pZCkpOwoJICAJCX0KCQkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignam91ZXVycycpOwoJCQlicmVhazsKCQkJCgkJCWNhc2UgImRhdGVyIiA6CgkJCQkkaWRfc2VsID0gaW1wbG9kZSgiLSIsJHBhcmFtc1snc2VsJ10pOwoJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGF0ZXInLCRyZXR1cm5pZCwgYXJyYXkoInNlbCI9PiRpZF9zZWwpKTsKCQkJCgkJCWJyZWFrOwoJCQljYXNlICJzdXBwX2ZmdHQiIDogCgkJCSRpID0gMDsKCQkJZm9yZWFjaCgkcGFyYW1zWydzZWwnXSBhcyAkcmVjb3JkX2lkKQoJCQl7CgkJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXMgV0hFUkUgaWQgPSA/IjsKCQkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRyZWNvcmRfaWQpKTsKCQkJCSRpKys7CgkJCX0KCQkJJG1lc3NhZ2UgPSAkaS4iIG1hdGNoZXMgc3VwcHJpbcOpcyI7CgkJCSR0aGlzLT5TZXRNZXNzYWdlKCRtZXNzYWdlKTsKCQkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignZmZ0dCcpOwoJCiAgICAgIAkJfS8vZmluIGR1IHN3aXRjaAogIAl9CgllbHNlCgl7CgkJJHRoaXMtPlNldE1lc3NhZ2UoJ1BCIGRlIHPDqWxlY3Rpb24gZGUgbWFzc2UgISEnKTsKCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdyZWN1cGVyYXRpb24nKTsKCX0KfQovKiovCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.missing_sit_mens.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKZ2xvYmFsICR0aGVtZU9iamVjdDsKCiRzbWFydHktPmFzc2lnbignaWQnLCAkdGhpcy0+TGFuZygnaWQnKSk7CiRzbWFydHktPmFzc2lnbigndXNlcm5hbWUnLCAnSm91ZXVyJyk7CiRzbWFydHktPmFzc2lnbigncG9pbnRzJywgJ1BvaW50cycpOwoKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uY2FsY3Vscy5waHAnKTsKJG1vaXNfY291cmFudCA9IGRhdGUoJ24nKTsKJGxhc3RfbW9udGggPSAkbW9pc19jb3VyYW50IC0xOwovLyRtb2lzX2NvdXJhbnQgPSA1OwokYW5uZWVfY291cmFudGUgPSBkYXRlKCdZJyk7CiRyZXN1bHQ9IGFycmF5ICgpOwovL29uIGZhaXQgdW5lIHByZW1pw6hyZSByZXF1ZXRlIHBvdXIgY29ubmFpdHJlIGNldXggZG9udCBsYSBzaXR1YXRpb24gbWVuc3VlbGxlIGVzdCBkw7ttZW50IGNvbXBsZXTDqWUKJHF1ZXJ5MSA9ICJTRUxFQ1Qgai5saWNlbmNlLCBDT05DQVRfV1MoJyAnLGoubm9tLCBqLnByZW5vbSkgQVMgam91ZXVyIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgQVMgaiBMRUZUIEpPSU4gICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19zaXRfbWVucyBBUyBzdCAgT04gc3QubGljZW5jZSA9IGoubGljZW5jZSBBTkQgc3QubW9pcyA9ID8gIEFORCBzdC5hbm5lZSA9ID8gQU5EIGFjdGlmID0gJzEnIjsKJGRicmVzdWx0MSA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkxLGFycmF5KCRtb2lzX2NvdXJhbnQsJGFubmVlX2NvdXJhbnRlKSk7CmVjaG8gJHF1ZXJ5MTsKCi8vb24gcGV1dCBwcsOpcGFyZXIgbGEgZGV1eGnDqG1lIHJlcXVldGUgYXZlYyBsZSBOT1QgSU4KJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG1vaXNfY291cmFudCwkYW5uZWVfY291cmFudGUpKTsKJHJvd2NsYXNzPSAncm93MSc7CiRyb3dhcnJheT0gYXJyYXkgKCk7CmlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkKICB7CiAgICB3aGlsZSAoJHJvdz0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQogICAgICB7CgkKCSRsaWNlbmNlID0gJHJvd1snbGljZW5jZSddOwoJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3NpdF9tZW5zICI7Cgkkb25lcm93PSBuZXcgU3RkQ2xhc3MoKTsKCSRvbmVyb3ctPnJvd2NsYXNzPSAkcm93Y2xhc3M7Cgkkb25lcm93LT5pZD0gJHJvd1snaWQnXTsKCS8vJG9uZXJvdy0+bW9pcz0gJHJvd1snbW9pcyddOwoJLy8kb25lcm93LT5hbm5lZT0gJHJvd1snYW5uZWUnXTsKCS8vJG9uZXJvdy0+cG9pbnRzPSAkcm93Wydwb2ludHMnXTsKCS8vJG9uZXJvdy0+cHJvZ21vaXM9ICRyb3dbJ3Byb2dtb2lzJ107CgkvLyRvbmVyb3ctPmVxdWlwZT0gJHRoaXMtPmNyZWF0ZUxpbmsoJGlkLCAndmlld3N0ZWFtcmVzdWx0JywgJHJldHVybmlkLCAkcm93WydlcXVpcGUnXSxhcnJheSgnZXF1aXBlJz0+JHJvd1snZXF1aXBlJ10pLCRyb3cpIDsKCSRvbmVyb3ctPmpvdWV1cj0gJHJvd1snam91ZXVyJ107CgkKCQoJLyoJCgkkb25lcm93LT5jb21tdW5lPSAkcm93Wydjb21tdW5lJ107Cgkkb25lcm93LT5lbWFpbD0gJHJvd1snZW1haWwnXTsKCSRvbmVyb3ctPnRyYW5jaGU9ICRyb3dbJ3RyYW5jaGUnXTsKCSRvbmVyb3ctPmFjdGl2ZT0gKCRyb3dbJ2FjdGl2ZSddID09IDEpID8gJHRoaXMtPkxhbmcoJ3llcycpIDogJyc7CgkqLwoJJG9uZXJvdy0+aWQ9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRfam91ZXVycycsICRyZXR1cm5pZCwgJHJvd1snaWQnXSxhcnJheSgncmVjb3JkX2lkJz0+JHJvd1snaWQnXSksICRyb3cpOwoJJG9uZXJvdy0+ZWRpdGxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRfam91ZXVyJywgJHJldHVybmlkLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLGFycmF5KCdyZWNvcmRfaWQnPT4kcm93WydpZCddKSk7Cgkkb25lcm93LT5zaXRtZW5zbGluaz0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmV0cmlldmVfc2l0X21lbnMnLCAkcmV0dXJuaWQsICdTaXR1YXRpb24gbWVuc3VlbGxlJywgYXJyYXkoJ2xpY2VuY2UnPT4kcm93WydsaWNlbmNlJ10pKTsKCSRvbmVyb3ctPmdldHBhcnRpZXNsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9wYXJ0aWVzJywgJHJldHVybmlkLCAnUGFydGllcyBkaXNwdXTDqWVzJywgYXJyYXkoJ2xpY2VuY2UnPT4kcm93WydsaWNlbmNlJ10pKTsKCSRvbmVyb3ctPmRlbGV0ZWxpbms9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZV9qb3VldXInLCAkcmV0dXJuaWQsICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgncmVjb3JkX2lkJz0+JHJvd1snaWQnXSksICR0aGlzLT5MYW5nKCdkZWxldGVfcmVzdWx0X2NvbmZpcm0nKSk7CgkoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcz0gInJvdzIiIDogJHJvd2NsYXNzPSAicm93MSIpOwoJJHJvd2FycmF5W109ICRvbmVyb3c7CiAgICAgIH0KICB9CiRzbWFydHktPmFzc2lnbignaXRlbXNmb3VuZCcsICR0aGlzLT5MYW5nKCdyZXN1bHRzZm91bmR0ZXh0JykpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRyb3dhcnJheSkpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKJHNtYXJ0eS0+YXNzaWduKCdyZXRyaWV2ZWFsbHNpdG1lbnMnLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwncmV0cmlldmVfYWxsX3NpdF9tZW5zJywgJHJldHVybmlkLCAnUsOpY3Vww6lyZXIgdG91dGVzIGxlcyBzaXR1YXRpb25zIG1lbnN1ZWxsZXMnKSk7CiRzbWFydHktPmFzc2lnbignY3JlYXRlbGluaycsIAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2NyZWF0ZV9uZXdfdXNlcjMnLCAkcmV0dXJuaWQsCgkJCQkgICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdhZGRuZXdzaGVldCcpLCAnJywgJycsICdzeXN0ZW1pY29uJykpLgoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2NyZWF0ZV9uZXdfdXNlcjMnLCAkcmV0dXJuaWQsIAoJCQkJICAkdGhpcy0+TGFuZygnYWRkbmV3c2hlZXQnKSwgCgkJCQkgIGFycmF5KCkpKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWxsc2l0bWVucy50cGwnKTsKCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.par-equipes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAgaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIENldHRlIHBhZ2UgbGlzdGUgbGVzIGNvbXDDqXRpdGlvbnMgcGFyIMOpcXVpcGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2luY2x1ZGUvcHJlZnMucGhwJyk7CiRub21fZXF1aXBlcyA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdub21fZXF1aXBlcycpOwokc2Fpc29uX2NvdXJhbnRlID0gKGlzc2V0KCRwYXJhbXNbJ3NhaXNvbiddKT8kcGFyYW1zWydzYWlzb24nXTokdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJykpOwovL2VjaG8gJ2xhIHNhaXNvbiBjb3VyYW50ZXN0IDogJy4kc2Fpc29uX2NvdXJhbnRlOwokZGIgPSYgJHRoaXMtPkdldERiKCk7Cmdsb2JhbCAkdGhlbWVPYmplY3Q7CiRyZXN1bHQ9IGFycmF5KCk7CiRwYXJtcyA9IGFycmF5KCk7CiRyb3dhcnJheSA9IGFycmF5KCk7CiRwYXJhbWV0ZXJzID0gMDsvL3BvdXIgaW1wbMOpbWVudGVyIGxlcyBwYXJhbWV0cmVzIC8vIDAgPSBwYXMgZGUgcGFyYW1ldHJlcwovLyRyb3dhcnJheTEgPSBhcnJheSgpOwokaT0wOwoKCWlmKGlzc2V0KCRwYXJhbXNbJ2RhdGVfZGVidXQnXSkgJiYgJHBhcmFtc1snZGF0ZV9kZWJ1dCddICE9JycpCgl7CgkJCgkJJHBhcmFtZXRlcnMgPSAxOwoJCSRkYXRlX2RlYnV0ID0gJHBhcmFtc1snZGF0ZV9kZWJ1dCddOwkJCQoJCQkKCQkvL2xhIHJlcXVldGUgbWFpbnRlbmFudCA6IAoJCSRxdWVyeTEgPSAiU0VMRUNUIGVxLmlkIEFTIGluZDEscmVuLmVxdWEscmVuLmVxdWIscmVuLnNjb3JlYSxyZW4uc2NvcmViLHJlbi5kYXRlX2V2ZW50LCBlcS5mcmllbmRseW5hbWUsIHJlbi5pZCwgZXEubGliZXF1aXBlIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIEFTIHJlbiwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgQVMgZXEgV0hFUkUgZXEuaWRwb3VsZSA9IHJlbi5pZHBvdWxlICBBTkQgcmVuLnNhaXNvbiA9IGVxLnNhaXNvbiBBTkQgKHJlbi5zY29yZWEgIT0wIEFORCBzY29yZWIgIT0wKSBBTkQgcmVuLmRhdGVfZXZlbnQgPSA/IjsvLyIgIEFORCByZW4uZGF0ZV9ldmVudCA9ID8iOwoJCSRwYXJtc1snZGF0ZV9kZWJ1dCddID0gJHBhcmFtc1snZGF0ZV9kZWJ1dCddOwoJCQkKCQkJaWYoaXNzZXQoJHBhcmFtc1sndHlwZV9jb21wZXQnXSkgJiYgJHBhcmFtc1sndHlwZV9jb21wZXQnXSkKCQkJewoJCQkJJHR5cGVfY29tcGV0ID0gJHBhcmFtc1sndHlwZV9jb21wZXQnXTsKCQkJCSRxdWVyeTEuPSIgQU5EIGVxLnR5cGVfY29tcGV0ID0gPyI7CgkJCQkkcGFybXNbJ3R5cGVfY29tcGV0J10gPSAkdHlwZV9jb21wZXQ7Ly8iIEFORCBjYWwuZGF0ZV9kZWJ1dCA9ICcyMDE0LTEyLTA2JyI7CgkJCQkkc21hcnR5LT5hc3NpZ24oJ2RhdGVfZXZlbnQnLCAkZGF0ZV9kZWJ1dCk7CQkJCQoJCQl9CgkJCWVsc2VpZihpc3NldCgkcGFyYW1zWydpZGVwcmV1dmUnXSkgJiYgJHBhcmFtc1snaWRlcHJldXZlJ10pCgkJCXsKCQkJCSRpZGVwcmV1dmUgPSAkcGFyYW1zWydpZGVwcmV1dmUnXTsKCQkJCSRxdWVyeTEuPSIgQU5EIGVxLmlkZXByZXV2ZSA9ID8iOwoJCQkJJHBhcm1zWydpZGVwcmV1dmUnXSA9ICRpZGVwcmV1dmU7CgkJCX0KCQkJLy9lY2hvICRxdWVyeTsJCgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkxLCRwYXJtcyk7CgkJCQoJCQlpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApCgkJCXsKCQkJCXdoaWxlKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJCQl7CgkJCQkJJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwoJCQkJCSRvbmVyb3ctPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoJCQkJCSRlcXVhID0gJHJvd1snZXF1YSddOwoJCQkJCSRlcXViID0gJHJvd1snZXF1YiddOwoJCQkJCSRzY29yZWEgPSAkcm93WydzY29yZWEnXTsKCQkJCQkkc2NvcmViID0gJHJvd1snc2NvcmViJ107CgkJCQkJJGxpYmVxdWlwZSA9ICRyb3dbJ2xpYmVxdWlwZSddOwoJCQkJCSRmcmllbmRseW5hbWUgPSAkcm93WydmcmllbmRseW5hbWUnXTsKCQkJCQkkb25lcm93ID0gbmV3IFN0ZENsYXNzKCk7CgkJCQkJJG9uZXJvdy0+cm93Y2xhc3MgPSRyb3djbGFzczsKCQkJCQkvLyRvbmVyb3cyLT5pZD0gJHJvdzJbJ2lkJ107CgkJCQkJJG9uZXJvdy0+aW5kPSAkcm93WydpbmQxJ107CgkJCQkJJG9uZXJvdy0+ZGF0ZV9ldmVudD0gJHJvd1snZGF0ZV9ldmVudCddOwoJCQkJCSRvbmVyb3ctPmVxdWIgPSAkcm93WydlcXViJ107CgkJCQkJJG9uZXJvdy0+ZXF1YSA9ICRyb3dbJ2VxdWEnXTsKCQkJCQkkb25lcm93LT5mcmllbmRseW5hbWUgPSAkcm93WydmcmllbmRseW5hbWUnXTsKCQkJCQkkb25lcm93LT5saWJlcXVpcGUgPSAkcm93WydsaWJlcXVpcGUnXTsKCQkJCQkvL2VjaG8gImVxdWlwZSBCIGVzdCA6ICIuJGVxdWI7CgoJCQkJCS8vJG9uZXJvdy0+ZXF1aXBlPSAkcm93WydlcXVpcGUnXTsKCQkJCQkvLyRvbmVyb3cyLT5saWJlbGxlPSAgJHJvdzJbJ2xpYmVsbGUnXSA7CgkJCQkJCgkJCQkJaWYoaXNzZXQoJGZyaWVuZGx5bmFtZSkgJiYgJGZyaWVuZGx5bmFtZSAhPScnKQoJCQkJCXsKCQkJCQkJaWYgKCRsaWJlcXVpcGUgPT0gJGVxdWEpCgkJCQkJCXsKCQkJCQkJCSRvbmVyb3ctPmVxdWE9ICRyb3dbJ2ZyaWVuZGx5bmFtZSddOwoJCQkJCQl9CgoJCQkJCQllbHNlewoJCQkJCQkJJG9uZXJvdy0+ZXF1YT0gJHJvd1snZXF1YSddOwoJCQkJCQl9CgoJCQkJCX0KCQkJCQllbHNlewoJCQkJCQkkb25lcm93LT5lcXVhPSAkcm93WydlcXVhJ107CgkJCQkJfQoJCQkJCSRvbmVyb3ctPnNjb3JlYT0gJHJvd1snc2NvcmVhJ107CgkJCQkJJG9uZXJvdy0+c2NvcmViPSAkcm93WydzY29yZWInXTsKCQkJCQkKCQkJCQlpZihpc3NldCgkZnJpZW5kbHluYW1lKSAmJiAkZnJpZW5kbHluYW1lICE9JycpCgkJCQkJewoJCQkJCQlpZiAoJGxpYmVxdWlwZSA9PSAkZXF1YikKCQkJCQkJewoJCQkJCQkJJG9uZXJvdy0+ZXF1Yj0gJHJvd1snZnJpZW5kbHluYW1lJ107CgkJCQkJCX0KCgkJCQkJCWVsc2V7CgkJCQkJCQkkb25lcm93LT5lcXViPSAkcm93WydlcXViJ107CgkJCQkJCX0KCgkJCQkJfQoJCQkJCWVsc2V7IAoJCQkJCQkkb25lcm93LT5lcXViPSAkcm93WydlcXViJ107CgkJCQkJfQoJCQkJCSRvbmVyb3ctPmRldGFpbHM9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2RldGFpbHNfcmVuY29udHJlcycsICRyZXR1cm5pZCwgJ0TDqXRhaWxzJywgYXJyYXkoJ3JlY29yZF9pZCc9PiRyb3dbJ2lkJ10sICd0ZW1wbGF0ZSc9PicxJykpOwoJCQkJCSRvbmVyb3ctPmNsYXNzPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlcXVpcGUnLCAkcmV0dXJuaWQsICdDbGFzc2VtZW50JywgYXJyYXkoJ3JlY29yZF9pZCc9PiRyb3dbJ2luZCddKSk7CgkJCQkJJHJvd2FycmF5W10gPSAkb25lcm93OwoJCQkJCQoJCQkJfQoJCQkJCgkJCQkKCQkJfQoJCQkkc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKCQkJJHNtYXJ0eS0+YXNzaWduKCdwYXJhbWV0ZXJzJywgJHBhcmFtZXRlcnMpOwoJfQoJZWxzZWlmKGlzc2V0KCRwYXJhbXNbJ2lkZXByZXV2ZSddKSAmJiAkcGFyYW1zWydpZGVwcmV1dmUnXSAhPSAnJykKCXsKCQkvLwoJCSRxdWVyeTIgPSAiU0VMRUNUIGVxLmlkIEFTIGluZDIscmVuLmVxdWEscmVuLmVxdWIscmVuLnNjb3JlYSxyZW4uc2NvcmViLHJlbi5kYXRlX2V2ZW50LCBlcS5mcmllbmRseW5hbWUsIHJlbi5pZCwgVFJJTShlcS5saWJlcXVpcGUpIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIEFTIHJlbiwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgQVMgZXEgIFdIRVJFIHJlbi5pZGRpdiA9IGVxLmlkZGl2IEFORCByZW4uaWRwb3VsZSA9IGVxLmlkcG91bGUgQU5EIHJlbi5zYWlzb24iOwoJCSRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uX2NvdXJhbnRlOwoJCSRxdWVyeTIuPSIgQU5EIGVxLmlkZXByZXV2ZSA9ID8iOwoJCSRwYXJtc1snaWRlcHJldXZlJ10gPSAkcGFyYW1zWydpZGVwcmV1dmUnXTsKCQkkdHlwZV9yZXEgPSAwOwoJCSRxdWVyeTIuPSIgR1JPVVAgQlkgcmVuLmRhdGVfZXZlbnQgT1JERVIgQlkgcmVuLmRhdGVfZXZlbnQgREVTQyI7CgkJCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsJHBhcm1zKTsKCQkKCQlpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApCgkJewoJCQl3aGlsZSgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJCQl7CgkJCQkKCQkJCSRpKys7CgkJCQkkZGF0ZV9ldmVudDIgPSAkcm93WydkYXRlX2V2ZW50J107CgkJCQkvL2VjaG8gJ2xhIGRhdGVfZXZlbnQgZXN0IDogJy4kZGF0ZV9ldmVudDI7CgkJCQkkcXVlcnkzID0iU0VMRUNUICoscmVuLmVxdWEscmVuLmRhdGVfZXZlbnQsIHJlbi5lcXViLCByZW4uaWQgQVMgaW5kLCBUUklNKGVxLmxpYmVxdWlwZSksZXEuZnJpZW5kbHluYW1lIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIEFTIHJlbiwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgQVMgZXEgV0hFUkUgZXEuaWRwb3VsZSA9IHJlbi5pZHBvdWxlIEFORCByZW4uaWRkaXYgPSBlcS5pZGRpdiAgQU5EIHJlbi5zYWlzb24gPSBlcS5zYWlzb24gQU5EIChyZW4uc2NvcmVhICE9MCBBTkQgc2NvcmViICE9MCkgQU5EIHJlbi5zYWlzb24gPSA/IjsKCQkJCSRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uX2NvdXJhbnRlOwoJCQkJaWYoJHR5cGVfcmVxID09MSkKCQkJCXsKCQkJCQkkcXVlcnkzLj0iIEFORCBlcS50eXBlX2NvbXBldCA9ID8iOwoJCQkJCSRwYXJtc1sndHlwZV9jb21wZXQnXSA9ICRwYXJhbXNbJ3R5cGVfY29tcGV0J107CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHF1ZXJ5My49IiBBTkQgZXEuaWRlcHJldXZlID0gPyI7CgkJCQkJJHBhcm1zWydpZGVwcmV1dmUnXSA9ICRwYXJhbXNbJ2lkZXByZXV2ZSddOwoJCQkJfQoJCQkJJHF1ZXJ5My49IiBBTkQgcmVuLmRhdGVfZXZlbnQgPSA/IjsKCQkJCSRwYXJtc1snZGF0ZV9ldmVudCddID0gJGRhdGVfZXZlbnQyOwoJCQkJJHF1ZXJ5My49IiBBTkQgcmVuLmNsdWIgPSAnMSciOwoJCQkJCgkJCQkkb25lcm93ID0gbmV3IFN0ZENsYXNzKCk7CgkJCQkkb25lcm93LT5yb3djbGFzcyA9JHJvd2NsYXNzOwoJCQkJJG9uZXJvdy0+ZGF0ZV9ldmVudCA9ICRyb3dbJ2RhdGVfZXZlbnQnXTsKCQkJCSRvbmVyb3ctPnZhbGV1ciA9ICRpOwoJCQkJCgkJCQkvLyRzbWFydHktPmFzc2lnbignZGF0ZV9ldmVudCcsICRkYXRlX2V2ZW50Mik7CgkJCQkkZGJyZXN1bHQzID0gJGRiLT5FeGVjdXRlKCRxdWVyeTMsJHBhcm1zKTsKCQkJCSRyb3dhcnJheTIgPSBhcnJheSgpOwoJCQkJaWYoJGRicmVzdWx0MyAmJiAkZGJyZXN1bHQzLT5SZWNvcmRDb3VudCgpPjApCgkJCQl7CgkJCQkJd2hpbGUoJHJvdzMgPSAkZGJyZXN1bHQzLT5GZXRjaFJvdygpKQoJCQkJCXsKCQkJCQkJJG9uZXJvdzIgPSBuZXcgU3RkQ2xhc3MoKTsKCQkJCQkJJG9uZXJvdzItPnJvd2NsYXNzID0kcm93Y2xhc3M7CgkJCQkJCSRvbmVyb3cyLT5pbmQ9ICRyb3czWydpbmQnXTsKCQkJCQkJJG9uZXJvdzItPmRhdGVfZXZlbnQ9ICRyb3czWydkYXRlX2V2ZW50J107CgkJCQkJCSRvbmVyb3cyLT5lcXViID0gJHJvdzNbJ2VxdWInXTsKCQkJCQkJJG9uZXJvdzItPmVxdWEgPSAkcm93M1snZXF1YSddOwoJCQkJCQkkb25lcm93Mi0+ZnJpZW5kbHluYW1lID0gJHJvdzNbJ2ZyaWVuZGx5bmFtZSddOwoJCQkJCQkkb25lcm93Mi0+bGliZXF1aXBlID0gJHJvdzNbJ2xpYmVxdWlwZSddOwoJCQkJCQkvL2VjaG8gImVxdWlwZSBCIGVzdCA6ICIuJGVxdWI7CgoJCQkJCQkvLyRvbmVyb3ctPmVxdWlwZT0gJHJvd1snZXF1aXBlJ107CgkJCQkJCS8vJG9uZXJvdzItPmxpYmVsbGU9ICAkcm93MlsnbGliZWxsZSddIDsKCgkJCQkJCWlmKGlzc2V0KCRmcmllbmRseW5hbWUpICYmICRmcmllbmRseW5hbWUgIT0nJykKCQkJCQkJewoJCQkJCQkJaWYgKCRsaWJlcXVpcGUgPT0gJGVxdWEpCgkJCQkJCQl7CgkJCQkJCQkJJG9uZXJvdzItPmVxdWE9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZXF1aXBlJywkcmV0dXJuaWQsJHJvdzNbJ2ZyaWVuZGx5bmFtZSddLGFycmF5KCJyZWNvcmRfaWQiPT4kcm93WydpbmQnXSkpOwoJCQkJCQkJCS8vJG9uZXJvdzItPmVxdWE9ICRyb3cyWydmcmllbmRseW5hbWUnXTsKCQkJCQkJCX0KCgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJLy8kb25lcm93Mi0+ZXF1YT0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdlcXVpcGUnLCRyZXR1cm5pZCwkcm93MlsnZXF1YiddLGFycmF5KCJyZWNvcmRfaWQiPT4kcm93WydpbmQnXSkpOwoJCQkJCQkJCSRvbmVyb3cyLT5lcXVhPSAkcm93M1snZXF1YSddOwoJCQkJCQkJfQoKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCS8vJG9uZXJvdzItPmVxdWE9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZXF1aXBlJywkcmV0dXJuaWQsJHJvdzJbJ2VxdWInXSxhcnJheSgicmVjb3JkX2lkIj0+JHJvd1snaW5kJ10pKTsKCQkJCQkJCSRvbmVyb3cyLT5lcXVhPSAkcm93M1snZXF1YSddOwoJCQkJCQl9CgkJCQkJCQoJCQkJCQkkb25lcm93Mi0+c2NvcmVhPSAkcm93M1snc2NvcmVhJ107CgkJCQkJCSRvbmVyb3cyLT5zY29yZWI9ICRyb3czWydzY29yZWInXTsKCgkJCQkJCWlmKGlzc2V0KCRmcmllbmRseW5hbWUpICYmICRmcmllbmRseW5hbWUgIT0nJykKCQkJCQkJewoJCQkJCQkJaWYgKCRsaWJlcXVpcGUgPT0gJGVxdWIpCgkJCQkJCQl7CgkJCQkJCQkJJG9uZXJvdzItPmVxdWI9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZXF1aXBlJywkcmV0dXJuaWQsJHJvdzNbJ2ZyaWVuZGx5bmFtZSddLGFycmF5KCJyZWNvcmRfaWQiPT4kcm93WydpbmQnXSkpOwoJCQkJCQkJCS8vJG9uZXJvdzItPmVxdWI9ICRyb3cyWydmcmllbmRseW5hbWUnXTsKCQkJCQkJCX0KCgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJLy8kb25lcm93Mi0+ZXF1Yj0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdlcXVpcGUnLCRyZXR1cm5pZCwkcm93MlsnZnJpZW5kbHluYW1lJ10sYXJyYXkoInJlY29yZF9pZCI9PiRyb3dbJ2luZCddKSk7CgkJCQkJCQkJJG9uZXJvdzItPmVxdWI9ICRyb3czWydlcXViJ107CgkJCQkJCQl9CgoJCQkJCQl9CgkJCQkJCWVsc2V7IAoJCQkJCQkJLy8kb25lcm93Mi0+ZXF1Yj0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdlcXVpcGUnLCRyZXR1cm5pZCwkcm93MlsnZXF1YiddLGFycmF5KCJyZWNvcmRfaWQiPT4kcm93WydpbmQnXSkpOwoJCQkJCQkJJG9uZXJvdzItPmVxdWI9ICRyb3czWydlcXViJ107CgkJCQkJCX0KCQkJCQkJJG9uZXJvdzItPmRldGFpbHM9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2RldGFpbHNfcmVuY29udHJlcycsICRyZXR1cm5pZCwgJ0TDqXRhaWxzJywgYXJyYXkoJ3JlY29yZF9pZCc9PiRyb3czWydpbmQnXSwgJ3RlbXBsYXRlJz0+JzEnKSk7CgkJCQkJCSRvbmVyb3cyLT5jbGFzcz0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnY2xhc3NlbWVudF9lcXVpcGVzJywgJHJldHVybmlkLCAnQ2xhc3NlbWVudCcsIGFycmF5KCdyZWNvcmRfaWQnPT4kcm93M1snaW5kJ10pKTsKCQkJCQkJJHJvd2FycmF5MltdID0gJG9uZXJvdzI7CgkJCQkJfS8vZmluIGR1IHdoaWxlCgkJCQkJJHNtYXJ0eS0+YXNzaWduKCdwcm9kc18nLiRpLCRyb3dhcnJheTIpOwoJCQkJCXVuc2V0KCRyb3dhcnJheTIpOwoKCQkJCQkkcm93YXJyYXlbXSAgPSAkb25lcm93OwoJCQkJCSRzbWFydHktPmFzc2lnbignaXRlbXMnLCAkcm93YXJyYXkpOwoJCQkJCSRzbWFydHktPmFzc2lnbigncGFyYW1ldGVycycsICRwYXJhbWV0ZXJzKTsKCQkJCQkKCQkJCX0vL2ZpbiBkdSBpZiBkYnJlc3VsdDIKCQkJCQoJCQkJCgkJCQkKCgkJCX0vL2ZpbiBkdSBwcmVtaWVyIHdoaWxlCgoKCQl9CgkJJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRyb3dhcnJheSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdwYXJhbWV0ZXJzJywgJHBhcmFtZXRlcnMpOwoJfQoJZWxzZQoJewoJCQoJCSRwYXJhbWV0ZXJzID0gMjsvL2RldXhpw6htZSBjYXMgbGUgdHlwZSBkZSBjb21ww6l0aXRpb24gZXN0IHNldWwgZMOpZmluaQoJCSRxdWVyeTIgPSAiU0VMRUNUIGVxLmlkIEFTIGluZDIscmVuLmVxdWEscmVuLmVxdWIscmVuLnNjb3JlYSxyZW4uc2NvcmViLHJlbi5kYXRlX2V2ZW50LCBlcS5mcmllbmRseW5hbWUsIHJlbi5pZCwgVFJJTShlcS5saWJlcXVpcGUpIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIEFTIHJlbiwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgQVMgZXEgIFdIRVJFIHJlbi5pZGRpdiA9IGVxLmlkZGl2IEFORCByZW4uaWRwb3VsZSA9IGVxLmlkcG91bGUgQU5EIHJlbi5zYWlzb24iOwoJCSRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uX2NvdXJhbnRlOwoJCS8vJHF1ZXJ5Mi49IiBHUk9VUCBCWSByZW4uZGF0ZV9ldmVudCBPUkRFUiBCWSByZW4uZGF0ZV9ldmVudCBERVNDIjsJCgkJCWlmKChpc3NldCgkcGFyYW1zWyd0eXBlX2NvbXBldCddKSAmJiAkcGFyYW1zWyd0eXBlX2NvbXBldCddKSB8fCAoaXNzZXQoJHBhcmFtc1snaWRlcHJldXZlJ10pICYmICRwYXJhbXNbJ2lkZXByZXV2ZSddICE9ICIiKSkKCQkJewoJCQkJJHBhcmFtX3R5cGUgPSAxOy8vIGNlIHNlcmFpdCBiaWVuIGRlIGRpcmUgZGUgcXVvaSBpbCBzJ2FnaXQuLi4uCgkJCQkkcGFyYW1ldGVycyA9IDI7CgkJCQlpZihpc3NldCgkcGFyYW1zWyd0eXBlX2NvbXBldCddKSAmJiAkcGFyYW1zWyd0eXBlX2NvbXBldCddICE9ICIiKQoJCQkJewoJCQkJCSRxdWVyeTIuPSIgQU5EIGVxLnR5cGVfY29tcGV0ID0gPyI7CgkJCQkJJHBhcm1zWyd0eXBlX2NvbXBldCddID0gJHBhcmFtc1sndHlwZV9jb21wZXQnXTsKCQkJCQkkdHlwZV9yZXEgPSAxOyAvL29uIGRpZmbDqXJlbmNpZSBsZXMgZGV1eCByZXF1ZXRlcwoJCQkJfQoJCQkJZWxzZWlmKGlzc2V0KCRwYXJhbXNbJ2lkZXByZXV2ZSddKSAmJiAkcGFyYW1zWydpZGVwcmV1dmUnXSAhPSIiKQoJCQkJewoJCQkJCSRxdWVyeTIuPSIgQU5EIGVxLmlkZXByZXV2ZSA9ID8iOwoJCQkJCSRwYXJtc1snaWRlcHJldXZlJ10gPSAkcGFyYW1zWydpZGVwcmV1dmUnXTsKCQkJCQkkdHlwZV9yZXEgPSAwOwoJCQkJfQoJCQkJCgkJCQkkcXVlcnkyLj0iIEdST1VQIEJZIHJlbi5kYXRlX2V2ZW50IE9SREVSIEJZIHJlbi5kYXRlX2V2ZW50IERFU0MiOwoJCQkJCgkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MiwkcGFybXMpOwoJCQkJCgkJCQlpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApCgkJCQl7CgkJCQkJd2hpbGUoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQkJCQl7CgkJCQkJCQoJCQkJCQkkaSsrOwoJCQkJCQkkZGF0ZV9ldmVudDIgPSAkcm93WydkYXRlX2V2ZW50J107CgkJCQkJCS8vZWNobyAnbGEgZGF0ZV9ldmVudCBlc3QgOiAnLiRkYXRlX2V2ZW50MjsKCQkJCQkJJHF1ZXJ5MiA9IlNFTEVDVCAqLHJlbi5lcXVhLHJlbi5kYXRlX2V2ZW50LCByZW4uZXF1YiwgcmVuLmlkIEFTIGluZCwgVFJJTShlcS5saWJlcXVpcGUpLGVxLmZyaWVuZGx5bmFtZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wb3VsZXNfcmVuY29udHJlcyBBUyByZW4sICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19lcXVpcGVzIEFTIGVxIFdIRVJFIGVxLmlkcG91bGUgPSByZW4uaWRwb3VsZSBBTkQgcmVuLmlkZGl2ID0gZXEuaWRkaXYgIEFORCByZW4uc2Fpc29uID0gZXEuc2Fpc29uIEFORCAocmVuLnNjb3JlYSAhPTAgQU5EIHNjb3JlYiAhPTApIEFORCByZW4uc2Fpc29uID0gPyI7CgkJCQkJCSRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uX2NvdXJhbnRlOwoJCQkJCQlpZigkdHlwZV9yZXEgPT0xKQoJCQkJCQl7CgkJCQkJCQkkcXVlcnkyLj0iIEFORCBlcS50eXBlX2NvbXBldCA9ID8iOwoJCQkJCQkJJHBhcm1zWyd0eXBlX2NvbXBldCddID0gJHBhcmFtc1sndHlwZV9jb21wZXQnXTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSRxdWVyeTIuPSIgQU5EIGVxLmlkZXByZXV2ZSA9ID8iOwoJCQkJCQkJJHBhcm1zWydpZGVwcmV1dmUnXSA9ICRwYXJhbXNbJ2lkZXByZXV2ZSddOwoJCQkJCQl9CgkJCQkJCSRxdWVyeTIuPSIgQU5EIHJlbi5kYXRlX2V2ZW50ID0gPyI7CgkJCQkJCSRwYXJtc1snZGF0ZV9ldmVudCddID0gJGRhdGVfZXZlbnQyOwoJCQkJCQkkcXVlcnkyLj0iIEFORCByZW4uY2x1YiA9ICcxJyI7CgkJCQkJCQoJCQkJCQkkb25lcm93ID0gbmV3IFN0ZENsYXNzKCk7CgkJCQkJCSRvbmVyb3ctPnJvd2NsYXNzID0kcm93Y2xhc3M7CgkJCQkJCSRvbmVyb3ctPmRhdGVfZXZlbnQgPSAkcm93WydkYXRlX2V2ZW50J107CgkJCQkJCSRvbmVyb3ctPnZhbGV1ciA9ICRpOwoJCQkJCQkKCQkJCQkJLy8kc21hcnR5LT5hc3NpZ24oJ2RhdGVfZXZlbnQnLCAkZGF0ZV9ldmVudDIpOwoJCQkJCQkkZGJyZXN1bHQyID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsJHBhcm1zKTsKCQkJCQkJJHJvd2FycmF5MiA9IGFycmF5KCk7CgkJCQkJCWlmKCRkYnJlc3VsdDIgJiYgJGRicmVzdWx0Mi0+UmVjb3JkQ291bnQoKT4wKQoJCQkJCQl7CgkJCQkJCQl3aGlsZSgkcm93MiA9ICRkYnJlc3VsdDItPkZldGNoUm93KCkpCgkJCQkJCQl7CgkJCQkJCQkJLyoKCQkJCQkJCQkkZXF1YSA9ICRyb3cyWydlcXVhJ107CgkJCQkJCQkJJGVxdWIgPSAkcm93MlsnZXF1YiddOwoJCQkJCQkJCSRzY29yZWEgPSAkcm93Mlsnc2NvcmVhJ107CgkJCQkJCQkJJHNjb3JlYiA9ICRyb3cyWydzY29yZWInXTsKCQkJCQkJCQkkZGF0ZV9ldmVudCA9ICRyb3cyWydkYXRlX2V2ZW50J107CgkJCQkJCQkJJGxpYmVxdWlwZSA9ICRyb3cyWydsaWJlcXVpcGUnXTsKCQkJCQkJCQkkZnJpZW5kbHluYW1lID0gJHJvdzJbJ2ZyaWVuZGx5bmFtZSddOwoJCQkJCQkJCSovCgkJCQkJCQkJJG9uZXJvdzIgPSBuZXcgU3RkQ2xhc3MoKTsKCQkJCQkJCQkkb25lcm93Mi0+cm93Y2xhc3MgPSRyb3djbGFzczsKCQkJCQkJCQkvLyRvbmVyb3cyLT5pZD0gJHJvdzJbJ2lkJ107CgkJCQkJCQkJJG9uZXJvdzItPmluZD0gJHJvdzJbJ2luZCddOwoJCQkJCQkJCSRvbmVyb3cyLT5kYXRlX2V2ZW50PSAkcm93MlsnZGF0ZV9ldmVudCddOwoJCQkJCQkJCSRvbmVyb3cyLT5lcXViID0gJHJvdzJbJ2VxdWInXTsKCQkJCQkJCQkkb25lcm93Mi0+ZXF1YSA9ICRyb3cyWydlcXVhJ107CgkJCQkJCQkJJG9uZXJvdzItPmZyaWVuZGx5bmFtZSA9ICRyb3cyWydmcmllbmRseW5hbWUnXTsKCQkJCQkJCQkkb25lcm93Mi0+bGliZXF1aXBlID0gJHJvdzJbJ2xpYmVxdWlwZSddOwoJCQkJCQkJCS8vZWNobyAiZXF1aXBlIEIgZXN0IDogIi4kZXF1YjsKCgkJCQkJCQkJLy8kb25lcm93LT5lcXVpcGU9ICRyb3dbJ2VxdWlwZSddOwoJCQkJCQkJCS8vJG9uZXJvdzItPmxpYmVsbGU9ICAkcm93MlsnbGliZWxsZSddIDsKCgkJCQkJCQkJaWYoaXNzZXQoJGZyaWVuZGx5bmFtZSkgJiYgJGZyaWVuZGx5bmFtZSAhPScnKQoJCQkJCQkJCXsKCQkJCQkJCQkJaWYgKCRsaWJlcXVpcGUgPT0gJGVxdWEpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRvbmVyb3cyLT5lcXVhPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2VxdWlwZScsJHJldHVybmlkLCRyb3cyWydmcmllbmRseW5hbWUnXSxhcnJheSgicmVjb3JkX2lkIj0+JHJvd1snaW5kJ10pKTsKCQkJCQkJCQkJCS8vJG9uZXJvdzItPmVxdWE9ICRyb3cyWydmcmllbmRseW5hbWUnXTsKCQkJCQkJCQkJfQoKCQkJCQkJCQkJZWxzZQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkvLyRvbmVyb3cyLT5lcXVhPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2VxdWlwZScsJHJldHVybmlkLCRyb3cyWydlcXViJ10sYXJyYXkoInJlY29yZF9pZCI9PiRyb3dbJ2luZCddKSk7CgkJCQkJCQkJCQkkb25lcm93Mi0+ZXF1YT0gJHJvdzJbJ2VxdWEnXTsKCQkJCQkJCQkJfQoKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJLy8kb25lcm93Mi0+ZXF1YT0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdlcXVpcGUnLCRyZXR1cm5pZCwkcm93MlsnZXF1YiddLGFycmF5KCJyZWNvcmRfaWQiPT4kcm93WydpbmQnXSkpOwoJCQkJCQkJCQkkb25lcm93Mi0+ZXF1YT0gJHJvdzJbJ2VxdWEnXTsKCQkJCQkJCQl9CgkJCQkJCQkJCgkJCQkJCQkJJG9uZXJvdzItPnNjb3JlYT0gJHJvdzJbJ3Njb3JlYSddOwoJCQkJCQkJCSRvbmVyb3cyLT5zY29yZWI9ICRyb3cyWydzY29yZWInXTsKCgkJCQkJCQkJaWYoaXNzZXQoJGZyaWVuZGx5bmFtZSkgJiYgJGZyaWVuZGx5bmFtZSAhPScnKQoJCQkJCQkJCXsKCQkJCQkJCQkJaWYgKCRsaWJlcXVpcGUgPT0gJGVxdWIpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRvbmVyb3cyLT5lcXViPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2VxdWlwZScsJHJldHVybmlkLCRyb3cyWydmcmllbmRseW5hbWUnXSxhcnJheSgicmVjb3JkX2lkIj0+JHJvd1snaW5kJ10pKTsKCQkJCQkJCQkJCS8vJG9uZXJvdzItPmVxdWI9ICRyb3cyWydmcmllbmRseW5hbWUnXTsKCQkJCQkJCQkJfQoKCQkJCQkJCQkJZWxzZQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkvLyRvbmVyb3cyLT5lcXViPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2VxdWlwZScsJHJldHVybmlkLCRyb3cyWydmcmllbmRseW5hbWUnXSxhcnJheSgicmVjb3JkX2lkIj0+JHJvd1snaW5kJ10pKTsKCQkJCQkJCQkJCSRvbmVyb3cyLT5lcXViPSAkcm93MlsnZXF1YiddOwoJCQkJCQkJCQl9CgoJCQkJCQkJCX0KCQkJCQkJCQllbHNleyAKCQkJCQkJCQkJLy8kb25lcm93Mi0+ZXF1Yj0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdlcXVpcGUnLCRyZXR1cm5pZCwkcm93MlsnZXF1YiddLGFycmF5KCJyZWNvcmRfaWQiPT4kcm93WydpbmQnXSkpOwoJCQkJCQkJCQkkb25lcm93Mi0+ZXF1Yj0gJHJvdzJbJ2VxdWInXTsKCQkJCQkJCQl9CgkJCQkJCQkJJG9uZXJvdzItPmRldGFpbHM9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JldHJpZXZlX2RldGFpbHNfcmVuY29udHJlcycsICRyZXR1cm5pZCwgJ0TDqXRhaWxzJywgYXJyYXkoJ3JlY29yZF9pZCc9PiRyb3cyWydpbmQnXSwgJ3RlbXBsYXRlJz0+JzEnKSk7CgkJCQkJCQkJJG9uZXJvdzItPmNsYXNzPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdjbGFzc2VtZW50X2VxdWlwZXMnLCAkcmV0dXJuaWQsICdDbGFzc2VtZW50JywgYXJyYXkoJ3JlY29yZF9pZCc9PiRyb3cyWydpbmQnXSkpOwoJCQkJCQkJCSRyb3dhcnJheTJbXSA9ICRvbmVyb3cyOwoJCQkJCQkJfS8vZmluIGR1IHdoaWxlCgkJCQkJCQkkc21hcnR5LT5hc3NpZ24oJ3Byb2RzXycuJGksJHJvd2FycmF5Mik7CgkJCQkJCQl1bnNldCgkcm93YXJyYXkyKTsKCgkJCQkJCQkkcm93YXJyYXlbXSAgPSAkb25lcm93OwoJCQkJCQkJJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRyb3dhcnJheSk7CgkJCQkJCQkkc21hcnR5LT5hc3NpZ24oJ3BhcmFtZXRlcnMnLCAkcGFyYW1ldGVycyk7CgkJCQkJCQkKCQkJCQkJfS8vZmluIGR1IGlmIGRicmVzdWx0MgoJCQkJCQkKCQkJCQkJCgkJCQkJCQoKCQkJCQl9Ly9maW4gZHUgcHJlbWllciB3aGlsZQoKCgkJCQl9CgkJCQkkc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKCQkJCSRzbWFydHktPmFzc2lnbigncGFyYW1ldGVycycsICRwYXJhbWV0ZXJzKTsKCQkJCQkJCQkKCQkJCQkKCQkJCQkJCQkJCQkKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRxdWVyeTIgPSAiU0VMRUNUICosIHJlbi5pZCwgcmVuLnNhaXNvbiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wb3VsZXNfcmVuY29udHJlcyBBUyByZW4sICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jYWxlbmRyaWVyIEFTIGNhbCAgV0hFUkUgcmVuLmRhdGVfZXZlbnQgPSBjYWwuZGF0ZV9kZWJ1dCBBTkQgY2FsLmRhdGVfZGVidXQ8PU5PVygpIEFORCByZW4uc2Fpc29uID0gPyI7Ly9HUk9VUCBCWSBkYXRlX2RlYnV0IE9SREVSIEJZIGRhdGVfZGVidXQgREVTQyI7CgkJCQkkcGFybXNbJ3NhaXNvbiddID0gJHNhaXNvbl9jb3VyYW50ZTsvLyRxdWVyeTIgPSAiU0VMRUNUIHJlbi5kYXRlX2V2ZW50IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIEFTIHJlbiwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgQVMgZXEgIFdIRVJFIHJlbi5pZGRpdiA9IGVxLmlkZGl2IEFORCByZW4uaWRwb3VsZSA9IGVxLmlkcG91bGUiOwoJCQkJJHF1ZXJ5Mi49IiBHUk9VUCBCWSByZW4uZGF0ZV9ldmVudCBPUkRFUiBCWSByZW4uZGF0ZV9ldmVudCBERVNDIjsKCQkJCS8vZWNobyAkcXVlcnkyOwoJCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsJHBhcm1zKTsKCQkJCQoJCQkJCgkJCQlpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApCgkJCQl7CgkJCQkJd2hpbGUoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQkJCQl7CgkJCQkJCSRpKys7CgkJCQkJCSRkYXRlX2RlYnV0ID0gJHJvd1snZGF0ZV9ldmVudCddOwoJCQkJCQkvL2VjaG8gImxhIGRhdGUgZMOpYnV0IGVzdCA6Ii4kZGF0ZV9kZWJ1dDsKCQkJCQkJJGRhdGVhcnIgPSBleHBsb2RlKCctJywgJGRhdGVfZGVidXQpOwoJCQkJCQkkZGF0ZWZyID0gJGRhdGVhcnJbMl0gLiAnLScgLiAkZGF0ZWFyclsxXSAuICctJyAuICRkYXRlYXJyWzBdOwoJCQkJCQkvLyRpZF9pbXAgPSAkcm93WydpZF9pbXAnXTsKCQkJCQkJLy9lY2hvICJsZSBpZF9pbXAgZXN0IDoiLiRpZF9pbXAuJzxiciAvPic7CgkJCQkJCSRvbmVyb3cgPSBuZXcgU3RkQ2xhc3MoKTsKCQkJCQkJJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgkJCQkJCSRvbmVyb3ctPmRhdGVfZXZlbnQgPSAkZGF0ZWZyOwoJCQkJCQkkb25lcm93LT52YWxldXIgPSAkaTsKCQkJCQkJCgkJCQkJCSRxdWVyeTMgPSJTRUxFQ1QgZXEuaWQgYXMgZXFfaWQscmVuLmVxdWEscmVuLnNjb3JlYSxyZW4uZGF0ZV9ldmVudCwgcmVuLmVxdWIscmVuLnNjb3JlYiwgcmVuLmlkIEFTIGluZCwgVFJJTShlcS5saWJlcXVpcGUpIEFTIGVxdWlwZSxlcS5mcmllbmRseW5hbWUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcG91bGVzX3JlbmNvbnRyZXMgQVMgcmVuLCAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZXF1aXBlcyBBUyBlcSBXSEVSRSBlcS5pZHBvdWxlID0gcmVuLmlkcG91bGUgIEFORCByZW4uc2Fpc29uID0gZXEuc2Fpc29uIEFORCAocmVuLnNjb3JlYSAhPTAgQU5EIHNjb3JlYiAhPTApIEFORCByZW4uc2Fpc29uID0gPyAiOwoJCQkJCQkkcGFybXNbJ3NhaXNvbiddID0gJHNhaXNvbl9jb3VyYW50ZTsKCQkJCQkJJHF1ZXJ5My49ICIgQU5EIHJlbi5kYXRlX2V2ZW50ID0gPyI7CgkJCQkJCS8vJHF1ZXJ5MyA9IlNFTEVDVCAqLHJlbi5lcXVhLCByZW4uZXF1YiwgcmVuLmlkLCBlcS5saWJlcXVpcGUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcG91bGVzX3JlbmNvbnRyZXMgQVMgcmVuLCAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZXF1aXBlcyBBUyBlcSBXSEVSRSBlcS5pZHBvdWxlID0gcmVuLmlkcG91bGUgIEFORCByZW4uc2Fpc29uID0gZXEuc2Fpc29uIEFORCAocmVuLnNjb3JlYSAhPTAgQU5EIHNjb3JlYiAhPTApICI7CgkJCQkJCSRwYXJtc1snZGF0ZV9ldmVudCddID0gJGRhdGVfZGVidXQ7Ly8kcXVlcnkyID0gIlNFTEVDVCBlcS5pZCBBUyBpbmQscmVuLmVxdWEscmVuLmVxdWIscmVuLnNjb3JlYSxyZW4uc2NvcmViLHJlbi5kYXRlX2V2ZW50LCBlcS5mcmllbmRseW5hbWUsIHJlbi5pZCwgZXEubGliZXF1aXBlIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIEFTIHJlbiwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgQVMgZXEgV0hFUkUgZXEuaWRwb3VsZSA9IHJlbi5pZHBvdWxlICBBTkQgcmVuLnNhaXNvbiA9IGVxLnNhaXNvbiBBTkQgKHJlbi5zY29yZWEgIT0wIEFORCBzY29yZWIgIT0wKSBBTkQgZXEuaWQgPSA/IjsvLyIgIEFORCByZW4uZGF0ZV9ldmVudCA9ID8iOwoKCgoJCQkJCQkkcXVlcnkzLj0iIEFORCByZW4uY2x1YiA9ICcxJyI7CgkJCQkJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTMsJHBhcm1zKTsKCQkJCQkJLy9lY2hvICRxdWVyeTMuJzxiciAvPic7CgoKCQkJCQkJJHJvd2FycmF5MiA9IGFycmF5KCk7CgoJCQkJCQlpZigkZGJyZXN1bHRhdCAmJiAkZGJyZXN1bHRhdC0+UmVjb3JkQ291bnQoKT4wKQoJCQkJCQl7CgoJCQkJCQkJJHJvd2NsYXNzPSAncm93MSc7CgoJCQkJCQkJd2hpbGUoJHJvdzIgPSAkZGJyZXN1bHRhdC0+RmV0Y2hSb3coKSkKCQkJCQkJCXsKCgoJCQkJCQkJCSRlcXVhID0gJHJvdzJbJ2VxdWEnXTsKCQkJCQkJCQkkZXF1YiA9ICRyb3cyWydlcXViJ107CgkJCQkJCQkJJHNjb3JlYSA9ICRyb3cyWydzY29yZWEnXTsKCQkJCQkJCQkkc2NvcmViID0gJHJvdzJbJ3Njb3JlYiddOwoJCQkJCQkJCSRlcV9pZCA9ICRyb3cyWydlcV9pZCddOwoJCQkJCQkJCSRsaWJlcXVpcGUgPSAkcm93WydlcXVpcGUnXTsvLyRsaWJlcXVpcGUgPSBydHJpbSgkcm93MlsnbGliZXF1aXBlJ10sIiAiKTsKCQkJCQkJCQkkZnJpZW5kbHluYW1lID0gJHJvdzJbJ2ZyaWVuZGx5bmFtZSddOwoJCQkJCQkJCSRvbmVyb3cyID0gbmV3IFN0ZENsYXNzKCk7CgkJCQkJCQkJJG9uZXJvdzItPnJvd2NsYXNzID0kcm93Y2xhc3M7CgkJCQkJCQkJLy8kb25lcm93Mi0+aWQ9ICRyb3cyWydpZCddOwoJCQkJCQkJCSRvbmVyb3cyLT5pbmQ9ICRyb3cyWydpbmQnXTsKCQkJCQkJCQkvLyRvbmVyb3cyLT5kYXRlX2V2ZW50PSAkcm93MlsnZGF0ZV9ldmVudCddOwoJCQkJCQkJCSRvbmVyb3cyLT5lcXViID0gJHJvdzJbJ2VxdWInXTsKCQkJCQkJCQkkb25lcm93Mi0+ZXF1YSA9ICRyb3cyWydlcXVhJ107CgkJCQkJCQkJJG9uZXJvdzItPmZyaWVuZGx5bmFtZSA9ICRyb3cyWydmcmllbmRseW5hbWUnXTsKCQkJCQkJCQkkb25lcm93Mi0+bGliZXF1aXBlID0gJHJvdzJbJ2VxdWlwZSddOwoJCQkJCQkJCS8vZWNobyAiZXF1aXBlIEIgZXN0IDogIi4kZXF1YjsKCgkJCQkJCQkJLy8kb25lcm93LT5lcXVpcGU9ICRyb3dbJ2VxdWlwZSddOwoJCQkJCQkJCS8vJG9uZXJvdzItPmxpYmVsbGU9ICAkcm93MlsnbGliZWxsZSddIDsKCgkJCQkJCQkJaWYoaXNzZXQoJGZyaWVuZGx5bmFtZSkgJiYgJGZyaWVuZGx5bmFtZSAhPScnKQoJCQkJCQkJCXsKCQkJCQkJCQkJaWYgKCRsaWJlcXVpcGUgPT0gJGVxdWEpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRvbmVyb3cyLT5lcXVhPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2VxdWlwZScsJHJldHVybmlkLCRmcmllbmRseW5hbWUsIGFycmF5KCJyZWNvcmRfaWQiPT4iJGVxX2lkIikpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCQoJCQkJCQkJCQllbHNlewoJCQkJCQkJCQkJJG9uZXJvdzItPmVxdWE9ICRyb3cyWydlcXVhJ107CgkJCQkJCQkJCX0KCQkJCQkJCQkJCgkJCQkJCQkJfQoJCQkJCQkJCWVsc2V7CgkJCQkJCQkJCSRvbmVyb3cyLT5lcXVhPSAkcm93MlsnZXF1YSddOwoJCQkJCQkJCX0KCQkJCQkJCQkkb25lcm93Mi0+c2NvcmVhPSAkcm93Mlsnc2NvcmVhJ107CgkJCQkJCQkJJG9uZXJvdzItPnNjb3JlYj0gJHJvdzJbJ3Njb3JlYiddOwoKCQkJCQkJCQlpZihpc3NldCgkZnJpZW5kbHluYW1lKSAmJiAkZnJpZW5kbHluYW1lICE9JycpCgkJCQkJCQkJewoJCQkJCQkJCQlpZiAoJGxpYmVxdWlwZSA9PSAkZXF1YikKCQkJCQkJCQkJewoJCQkJCQkJCQkJJG9uZXJvdzItPmVxdWI9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZXF1aXBlJywkcmV0dXJuaWQsJGZyaWVuZGx5bmFtZSwgYXJyYXkoInJlY29yZF9pZCI9PiRlcV9pZCkpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCQoJCQkJCQkJCQllbHNlewoJCQkJCQkJCQkJJG9uZXJvdzItPmVxdWI9ICRyb3cyWydlcXViJ107CgkJCQkJCQkJCX0KCQkJCQkJCQkJCgoJCQkJCQkJCX0KCQkJCQkJCQllbHNleyAKCQkJCQkJCQkJJG9uZXJvdzItPmVxdWI9ICRyb3cyWydlcXViJ107CgkJCQkJCQkJfQoJCQkJCQkJCSRvbmVyb3cyLT5kZXRhaWxzPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZXRyaWV2ZV9kZXRhaWxzX3JlbmNvbnRyZXMnLCAkcmV0dXJuaWQsICdEw6l0YWlscycsIGFycmF5KCdyZWNvcmRfaWQnPT4kcm93MlsnaWQnXSwgJ3RlbXBsYXRlJz0+JzEnKSk7CgkJCQkJCQkJJG9uZXJvdzItPmNsYXNzPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdjbGFzc2VtZW50X2VxdWlwZXMnLCAkcmV0dXJuaWQsICdDbGFzc2VtZW50JywgYXJyYXkoJ3JlY29yZF9pZCc9PiRyb3cyWydpbmQnXSkpOwoJCQkJCQkJCSRyb3dhcnJheTJbXSA9ICRvbmVyb3cyOwoKCgkJCQkJCQl9Ly9maW4gZHUgZGV1eGnDqG1lIHdoaWxlCgkJCQkJCQkkc21hcnR5LT5hc3NpZ24oJ3Byb2RzXycuJGksJHJvd2FycmF5Mik7CgkJCQkJCQl1bnNldCgkcm93YXJyYXkyKTsKCgkJCQkJCQkkcm93YXJyYXlbXSAgPSAkb25lcm93OwoJCQkJCQkJJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRyb3dhcnJheSk7CgkJCQkJCQkkc21hcnR5LT5hc3NpZ24oJ3BhcmFtZXRlcnMnLCAkcGFyYW1ldGVycyk7CgkJCQkJCX0vLyBmaW4gZHUgaWYgJGRicmVzdWx0YXQJCQkKCQkJCQoJCQkJCX0KCQkJCgkJCQoJCQoJCQkKCQkJCQoJCQkKCgkKCQoKCgkJLy9lY2hvICRxdWVyeS4nPGJyIC8+JzsKCgoJCQoJCQkKCQkJCgkJCX0KCQkKCQl9Cgl9CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2RldGFpbHNfcmVuY29udHJlLnRwbCcpOwoKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.participe.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKJHR5cGVfY29tcGV0ID0gJyc7CiRkZXNpZ25hdGlvbiA9ICcnOwokcm93YXJyYXkgPSBhcnJheSgpOwoKCWlmKCFpc3NldCgkcGFyYW1zWyd0eXBlX2NvbXBldCddKSB8fCAkcGFyYW1zWyd0eXBlX2NvbXBldCddID09ICcnKQoJewoJCSR0aGlzLT5TZXRNZXNzYWdlKCJwYXJhbWV0cmVzIG1hbnF1YW50cyIpOwoJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbXBldHMnKTsKCX0KCWVsc2UKCXsKCQkkdHlwZV9jb21wZXQgPSAkcGFyYW1zWyd0eXBlX2NvbXBldCddOwoJfQoJaWYoIWlzc2V0KCRwYXJhbXNbJ2RhdGVfZGVidXQnXSkgfHwgJHBhcmFtc1snZGF0ZV9kZWJ1dCddID09ICcnKQoJewoJCSR0aGlzLT5TZXRNZXNzYWdlKCJwYXJhbWV0cmVzIG1hbnF1YW50cyIpOwoJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbXBldHMnKTsKCX0KCWVsc2UKCXsKCQkkZGF0ZV9kZWJ1dCA9ICRwYXJhbXNbJ2RhdGVfZGVidXQnXTsKCX0KCWlmKCFpc3NldCgkcGFyYW1zWydkYXRlX2ZpbiddKSB8fCAkcGFyYW1zWydkYXRlX2ZpbiddID09ICcnKQoJewoJCSR0aGlzLT5TZXRNZXNzYWdlKCJwYXJhbWV0cmVzIG1hbnF1YW50cyIpOwoJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbXBldHMnKTsKCX0KCWVsc2UKCXsKCQkkZGF0ZV9maW4gPSAkcGFyYW1zWydkYXRlX2ZpbiddOwoJfQoJCiRkYiA9ICR0aGlzLT5HZXREYigpOwokcXVlcnkgPSAiU0VMRUNUIGoubGljZW5jZSwgQ09OQ0FUX1dTKCcgJyxqLm5vbSwgai5wcmVub20gKSBBUyBqb3VldXIgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBBUyBqIFdIRVJFIGouYWN0aWYgPSAnMScgIjsKLy9lY2hvICRxdWVyeTsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgoJaWYoISRkYnJlc3VsdCkKCXsKCQkkZGVzaWduYXRpb24uPSAkZGItPkVycm9yTXNnKCk7CgkJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbXBldHMnKTsKCX0KCgkkc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsCgkJCSR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoICRpZCwgJ2RvX3BhcnRpY2lwZScsICRyZXR1cm5pZCApICk7Cgkkc21hcnR5LT5hc3NpZ24oJ3R5cGVfY29tcGV0JywKCQkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3R5cGVfY29tcGV0JywkdHlwZV9jb21wZXQsMTAsMTUpKTsKCSRzbWFydHktPmFzc2lnbignZGF0ZV9kZWJ1dCcsCgkJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdkYXRlX2RlYnV0JywkZGF0ZV9kZWJ1dCwxMCwxNSkpOwoJJHNtYXJ0eS0+YXNzaWduKCdkYXRlX2ZpbicsCgkJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdkYXRlX2ZpbicsJGRhdGVfZmluLDEwLDE1KSk7CQoJaWYoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKT4wKQoJewoJCXdoaWxlKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJewoJCQkvL3Zhcl9kdW1wKCRyb3cpOwoJCQkKCQkJJGxpY2VuY2UgPSAkcm93WydsaWNlbmNlJ107CgkJCSRqb3VldXIgPSAkcm93Wydqb3VldXInXTsKCQkJJHJvd2FycmF5WyRsaWNlbmNlXVsnbmFtZSddID0gJGpvdWV1cjsKCQkJJHJvd2FycmF5WyRsaWNlbmNlXVsncGFydGljaXBlJ10gPSBmYWxzZTsKCQkJCgkJCS8vb24gdmEgY2hlcmNoZXIgc2kgbGUgam91ZXVyIGVzdCBkw6lqw6AgZGFucyBsYSB0YWJsZSBwYXJ0aWNpcGUKCQkJJHF1ZXJ5MiA9ICJTRUxFQ1QgbGljZW5jZSwgdHlwZV9jb21wZXQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGljaXBlIFdIRVJFIGxpY2VuY2UgPSA/IEFORCB0eXBlX2NvbXBldCA9ID8gQU5EIGRhdGVfZGVidXQgQkVUV0VFTiA/IEFORCA/IjsKCQkJLy9lY2hvICRxdWVyeTI7CgkJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsIGFycmF5KCRsaWNlbmNlLCAkdHlwZV9jb21wZXQsICRkYXRlX2RlYnV0LCRkYXRlX2ZpbikpOwoJCQkKCQkJaWYoJGRicmVzdWx0YXQtPlJlY29yZENvdW50KCk+MCkKCQkJewoJCQkJd2hpbGUoJHJvdzIgPSAkZGJyZXN1bHRhdC0+RmV0Y2hSb3coKSkKCQkJCXsKCQkJCgkJCQkKCQkJCQkkcm93YXJyYXlbJGxpY2VuY2VdWydwYXJ0aWNpcGUnXSA9IHRydWU7CgkJCQl9CgkJCX0vL3ByaW50X3IoJHJvd2FycmF5KTsKCQkJCgkJCQoJCQkJCQkKCQkJCgkJCQoJCX0KCQkkc21hcnR5LT5hc3NpZ24oJ3Jvd2FycmF5Jywkcm93YXJyYXkpOwkKCQkJCgl9Cgkkc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsCgkJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JyksICdjbGFzcz0iYnV0dG9uIicpKTsKCSRzbWFydHktPmFzc2lnbignY2FuY2VsJywKCQkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY2FuY2VsJywKCQkJCQkJJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2JhY2snLAoJCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdiYWNrJywKCQkJCQkJJHRoaXMtPkxhbmcoJ2JhY2snKSkpOwoKCSRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsCgkJCSR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3BhcnRpY2lwZS50cGwnKTsKIwojRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.push_player.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykpIGV4aXQ7Ci8vbWV0dHJlIGxlcyBwZXJtcwojCiMgQ2V0dGUgcGFnZSB2YSBwb3Vzc2VyIHVuIGpvdWV1ciB2ZXJzIGxhIHRhYmxlIHJlY3VwCi8vbWV0dHJlIGxlcyBib25uZXMgcGVybWlzc2lvbnMKaWYoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgVXNlJykpCnsKCSR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicpKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2pvdWV1cnMnKTsKfQokbGljZW5jZSA9ICcnOwppZighaXNzZXQoJHBhcmFtc1snbGljZW5jZSddKSB8fCAkcGFyYW1zWydsaWNlbmNlJ10gPT0nJykKewoJJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21pc3NpbmdfcGFyYW1ldGVycycpKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2pvdWV1cnMnKTsKfQplbHNlCnsKCSRsaWNlbmNlID0gJHBhcmFtc1snbGljZW5jZSddOwp9CnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2luY2x1ZGUvcHJlZnMucGhwJyk7CiRzYWlzb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7Ci8vb24gdsOpcmlmaWUgbGEgcHLDqXNlbmNlIG91IG5vbiBkdSBqb3VldXIKJHF1ZXJ5ID0gIlNFTEVDVCBsaWNlbmNlIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgV0hFUkUgbGljZW5jZSA9ID8gQU5EIHNhaXNvbiA9ID8iOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGljZW5jZSwgJHNhaXNvbikpOwokY291bnQgPSAkZGJyZXN1bHQtPlJlY29yZENvdW50KCk7CmlmKCRjb3VudD09MCkvL29uIGVzdCBvawp7CgkvL29uIGZhaXQgbGEgdG90YWxlIGVuIHLDqWN1cMOpcmFudCB0b3V0ZXMgbGVzIGRvbm7DqWVzID8KCS8vb8O5IG9uIGxhaXNzZSBsJ2FkbWluIGxlIGZhaXJlID8KCS8vcG91ciBsJ2hldXJlIG9uIGZhaXQgbGUgbWluaQoJJHF1ZXJ5MiA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXBfcGFydGllcyAoaWQsIHNhaXNvbiwgZGF0ZW1haiwgbGljZW5jZSwgc2l0X21lbnMsZmZ0dCxtYWpfZmZ0dCxzcGlkLG1hal9zcGlkLG1hal90b3RhbCxzcGlkX3RvdGFsKSBWQUxVRVMoJycsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIjsKCSRkYnJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MiwgYXJyYXkoJHNhaXNvbiwkbm93LCRsaWNlbmNlLCdKYW52aWVyIDIwMDAnLDAsMCwwLDAsMCwwKSk7CgkKCS8vb24gdGVzdGUgbGEgcmVxdWV0ZQoJaWYoISRkYnJlc3VsdDIpCgl7CgkJLy91bmUgZXJyZXVyID8gbGFxdWVsbGUgPwoJCSRtZXNzYWdlID0gJGRiLT5FcnJvck1zZygpOwoJCSRzdGF0dXMgPSAnUGIgSm91ZXVyIHBvdXNzw6knOwoJCSRhY3Rpb24gPSAncHVzaF9wbGF5ZXInOwoJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywkbWVzc2FnZSwkYWN0aW9uKTsKCQkkdGhpcy0+U2V0TWVzc2FnZSgiJG1lc3NhZ2UiKTsKCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdyZWN1cCcpOwoJCQoJfQoJZWxzZSAvL3RvdXQgcydlc3QgYmllbiBwYXNzw6kKCXsKCQkvL29uIMOpY3JpdCBkYW5zIGxlIGpvdXJuYWwKCQkkc3RhdHVzID0gJ0pvdWV1ciBwb3Vzc8OpJzsKCQkkZGVzaWduYXRpb24gPSAnam91ZXVyIHBvdXNzw6kgOiAnLiRsaWNlbmNlOwoJCSRhY3Rpb24gPSAncHVzaF9wbGF5ZXInOwoJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywkZGVzaWduYXRpb24sJGFjdGlvbik7CgkJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3JlY3VwJyk7Cgl9CgkKfQplbHNlCnsKCSR0aGlzLT5TZXRNZXNzYWdlKCdKb3VldXIgZMOpasOgIHByw6lzZW50ICEnKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3JlY3VwJyk7Cn0KCiMKI0VPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_all_parties.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uY2FsY3Vscy5waHAnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKCiRub3cgPSB0cmltKCRkYi0+REJUaW1lU3RhbXAodGltZSgpKSwgIiciKTsKJHF1ZXJ5ID0gIlNFTEVDVCBsaWNlbmNlLCBDT05DQVRfV1MoJyAnLCBub20sIHByZW5vbSkgQVMgam91ZXVyIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgV0hFUkUgYWN0aWYgPSAnMSciOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKJHJvd2NsYXNzPSAncm93MSc7CiRyb3dhcnJheT0gYXJyYXkgKCk7CgppZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApCiAgewogIC8vIG9uIGluc3RhbmNpZSBsYSBjbGFzc2UgCgoJd2hpbGUgKCRyb3c9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKICAgICAgCXsKCQkkc2VydmljZSA9IG5ldyByZXRyaWV2ZV9vcHMoKTsKCQkkbGljZW5jZSA9ICRyb3dbJ2xpY2VuY2UnXTsKCQkkam91ZXVyID0gJHJvd1snam91ZXVyJ107CgkJcmV0cmlldmVfb3BzOjpyZXRyaWV2ZV9wYXJ0aWVzX2ZmdHQoIiRsaWNlbmNlIik7CiAgICAgCX0KCQkKCQkKfS8vZmluIGR1IGlmICRkYnJlc3VsdAplbHNlIHtlY2hvICI8cD5QYXMgZGUgam91ZXVycyBhY3RpZnMuPC9wPiI7fQovKiovCgkKCSR0aGlzLT5TZXRNZXNzYWdlKCdWb2lyIEpvdXJuYWwnKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2ZmdHQnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_all_parties_spid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMgICAgICAgICBSRUNVUEVSQVRJT04gREUgVE9VVEVTIExFUyBQQVJUSUVTIFNQSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwovL29uIHbDqXJpZmllIGxhIHBlcm1pc3Npb24gZCd1dGlsaXNlciBsZSBzY3JpcHQKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIFVzZScpKQp7CgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicpKTsKCXJldHVybjsKfQovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uY2FsY3Vscy5waHAnKTsKJGRiID0gJHRoaXMtPkdldERiKCk7CiRkZXNpZ25hdGlvbiA9ICcnOwokbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CiRxdWVyeSA9ICJTRUxFQ1QgQ09OQ0FUX1dTKCcgJyxub20scHJlbm9tKSBhcyBwbGF5ZXIsIGxpY2VuY2UgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBXSEVSRSBhY3RpZj0nMScgTElNSVQgMiI7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwppZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkKewoJIAoJLy9vbiBpbnN0YW5jaWUgbGEgY2xhc3NlIGV0IG9uIHZhIGNvbW1lbmNlciDDoCBib3VjbGVyCgkkc2VydmljZSA9IG5ldyBTZXJ2aWNlbigpOwoJCgl3aGlsZSAoJHJvdz0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJewoJCSRsaWNlbmNlID0gJHJvd1snbGljZW5jZSddOwkJCgkJJHBsYXllciA9ICRyb3dbJ3BsYXllciddOwoJCQoJCQoJCSRyZXRyaWV2ZV9zcGlkID0gJHNlcnZpY2UtPnJldHJpZXZlX3BhcnRpZXNfc3BpZCgkbGljZW5jZSk7CgkJCgkJCQoJfS8vZmluIGR1IHdoaWxlCgkKfQoKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_all_poule_rencontres.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3RyYXZhdXgucGhwJyk7CgovLyBsZXMgcHLDqWbDqXJlbmNlcyBuw6ljZXNzYWlyZXMKJHNhaXNvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKJHBoYXNlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJyk7CiRub3cgPSB0cmltKCRkYi0+REJUaW1lU3RhbXAodGltZSgpKSwgIiciKTsKJG5vbV9lcXVpcGVzID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ25vbV9lcXVpcGVzJyk7CiRkZXNpZ25hdGlvbiA9ICcnOwovL29uIGZhaXQgdW5lIHJlcXVldGUgcG91ciBleHRyYWlyZSB0b3V0ZXMgbGVzIGluZm9zIGFmaW4gZGUgcHLDqXBhcmVyIHVuZSBib3VjbGUKJHF1ZXJ5MSA9ICJTRUxFQ1QgRElTVElOQ1QgaWRkaXYsIGlkcG91bGUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZXF1aXBlcyBXSEVSRSBzYWlzb24gPSA/IEFORCBwaGFzZSA9ID8iOwokZGJyZXN1bHQxID0gJGRiLT5FeGVjdXRlKCRxdWVyeTEsIGFycmF5KCRzYWlzb24sJHBoYXNlKSk7CgoJaWYgKCRkYnJlc3VsdDEgJiYgJGRicmVzdWx0MS0+UmVjb3JkQ291bnQoKSA+IDApCiAgCXsKCQkKCQoJCQogICAgCQl3aGlsZSAoJGRicmVzdWx0MSAmJiAkcm93ID0gJGRicmVzdWx0MS0+RmV0Y2hSb3coKSkKICAgICAgCQl7CgkJCQoJCQkvLyRzZXJ2aWNlID0gbmV3IFNlcnZpY2UoKTsKCSAJCS8vb24gaW5zdGFuY2llIHVuIGNvbXB0ZXVyCgkJCSRpZGRpdiA9ICRyb3dbJ2lkZGl2J107CgkJCSRpZHBvdWxlID0gJHJvd1snaWRwb3VsZSddOwoJCQkkc2VydmljZSA9IG5ldyBTZXJ2aWNlbigpOwoJCQkkcGFnZSA9ICJ4bWxfcmVzdWx0X2VxdSI7CgkJCSR2YXIgPSAiYXV0bz0xJkQxPSIuJGlkZGl2LiImY3hfcG91bGU9Ii4kaWRwb3VsZTsKCQkJJGxpZW4gPSAkc2VydmljZS0+R2V0TGluaygkcGFnZSwgJHZhcik7CgkJCSR4bWwgPSBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGxpZW4sICdTaW1wbGVYTUxFbGVtZW50JywgTElCWE1MX05PQ0RBVEEpOwoJCQkKCQkJaWYoJHhtbCA9PT0gRkFMU0UpCgkJCXsKCQkJCS8vTGUgbGllbiBuZSByZXRvdXJuZSByaWVuIGxlIHNlcnZpY2UgZXN0IGNvdXDDqQoJCQkJLy9sZSB0YWJsZWF1IGVzdCB2aWRlLCBpbCBmYXV0IGVudm95ZXIgdW4gbWVzc2FnZSBwb3VyIGxlIHNpZ25hbGVyCgkJCQkkZGVzaWduYXRpb24uPSAibGUgc2VydmljZSBlc3QgY291cMOpIjsKCQkJCSRyZXN1bHQgPSAwOwoJCQkJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJCQkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYigncG91bGVzJyk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkYXJyYXkgPSBqc29uX2RlY29kZShqc29uX2VuY29kZSgoYXJyYXkpJHhtbCksVFJVRSk7CgkJCQkkbGlnbmVzID0gY291bnQoJGFycmF5Wyd0b3VyJ10pOwoJCQl9CgoJCQkvL2lsIGZhdXQgdGVzdGVyIHNpIGxlIHRhYmxlYXUgZXN0IHZpZGUgb3Ugbm9uCgkJCWlmKCFpc19hcnJheSgkYXJyYXkpIHx8ICRsaWduZXMgPT0wKQoJCQl7CgkJCQkKCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8vdHQgdmEgYmllbiBvbiBjb250aW51ZQoJCQkKCQkJCS8vdmFyX2R1bXAoJHJlc3VsdCk7CQoJCQkJJGk9MDsKCQkJCWZvcmVhY2goJHhtbCBhcyAkY2xlID0+JHRhYikKCQkJCXsKCgoJCQkJCSRsaWJlbGxlID0gKGlzc2V0KCR0YWItPmxpYmVsbGUpPyIkdGFiLT5saWJlbGxlIjoiIik7CgkJCQkJJGVxdWEgPSAoaXNzZXQoJHRhYi0+ZXF1YSk/IiR0YWItPmVxdWEiOiIiKTsKCQkJCQkkZXF1YiA9IChpc3NldCgkdGFiLT5lcXViKT8iJHRhYi0+ZXF1YiI6IiIpOwoKCQkJCQkvL29uIGZhaXQgcXVlbHF1ZSB0cmFuc2Zvcm1hdGlvbnMgZGVzIGluZm9zIHJlY3VlaWxsaWVzCgkJCQkJcHJlZ19tYXRjaF9hbGwoJyNbMC05XSsjJywkbGliZWxsZSwkZXh0cmFjdCk7CgkJCQkJJHRvdXIgPSAkZXh0cmFjdFswXVswXTsKCgkJCQkJJGV4dHJhY3Rpb24gPSBzdWJzdHIoJGxpYmVsbGUsLTgpOwoJCQkJCSRkYXRlX2V4dHJhY3QgPSBleHBsb2RlKCcvJywgJGV4dHJhY3Rpb24pOwoJCQkJCSRhbm5lZV9kYXRlID0gJGRhdGVfZXh0cmFjdFsyXSArIDIwMDA7CgkJCQkJJGRhdGVfZXZlbnQgPSAkYW5uZWVfZGF0ZS4iLSIuJGRhdGVfZXh0cmFjdFsxXS4iLSIuJGRhdGVfZXh0cmFjdFswXTsKCQkJCQkkdXBsb2FkZWQgPSAwOwoKCQkJCQkkY2x1YmEgPSBzdHJwb3MoJGVxdWEsJG5vbV9lcXVpcGVzKTsKCQkJCQkkY2x1YmIgPSBzdHJwb3MoJGVxdWIsJG5vbV9lcXVpcGVzKTsKCQkJCQoJCQkJCQlpZiAoJGNsdWJhICE9PSBmYWxzZSB8fCAkY2x1YmIgIT09IGZhbHNlKQoJCQkJCQl7CgkJCQkJCQkkY2x1YiA9IDE7CgkJCQkJCQkkYWZmaWNoYWdlID0gMTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSRjbHViID0gMDsKCQkJCQkJfQoJCQkJCQoJCQkJCSRzY29yZWEgPSAoaXNzZXQoJHRhYi0+c2NvcmVhKT8iJHRhYi0+c2NvcmVhIjoiIik7CgkJCQkJJHNjb3JlYiA9IChpc3NldCgkdGFiLT5zY29yZWIpPyIkdGFiLT5zY29yZWIiOiIiKTsKCQkJCQkkbGllbiA9IChpc3NldCgkdGFiLT5saWVuKT8iJHRhYi0+bGllbiI6IiIpOwkKCQkJCQkvLwoJCQkJCS8vb24gdsOpcmlmaWUgcXVlIGxlIHNjb3JlIGEgYmllbiDDqXTDqSBzYWlzaQoJCQkJCS8vc2kgbGUgc2NvcmUgZXN0IHNhaXNpIG9uIG9idGllbnQgdW4gc3RyaW5nIHBvdXIgbGVzIHZhcmlhYmxlcyBzY29yZWEgZXQgc2NvcmViCgkJCQkJLy9zaW5vbiBpbCBzJ2FnaXQgZCd1biBhcnJheQkKCgkJCQkJCWlmKGlzX2FycmF5KCRzY29yZWEpICYmIGlzX2FycmF5KCRzY29yZWIpKQoJCQkJCQl7CgkJCQkJCQkvL2xlIHNjb3JlIG4nZXN0IHBhcyBwYXJ2ZW51IG91IGxlIG1hdGNoIG4nYSBwYXMgw6l0w6kgam91w6kKCQkJCQkJCS8vT24gbCdlbnJlZ2lzdHJlIHFkIG3Dqm1lCgkJCQkJCQkkc2NvcmVhID0gMDsKCQkJCQkJCSRzY29yZWIgPSAwOwoJCQkJCQkJJHVwZGF0ZSA9IDA7CQkKCQkJCQkJfQoJCQkJCS8vb24gdsOpcmlmaWUgc2kgbCdlbnJlZ2lzdHJlbWVudCBlc3QgZMOpasOgIGzDoAoJCQkJCSRxdWVyeTIgPSAiU0VMRUNUIGlkLGxpZW4sc2NvcmVhLCBzY29yZWIgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcG91bGVzX3JlbmNvbnRyZXMgV0hFUkUgaWRkaXYgPT8gQU5EIGlkcG91bGUgPSA/IEFORCBkYXRlX2V2ZW50ID0gPyBBTkQgZXF1YSA9ID8gQU5EIGVxdWIgPSA/IjsKCQkJCQkkZGJyZXN1bHQyID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsIGFycmF5KCRpZGRpdiwkaWRwb3VsZSwkZGF0ZV9ldmVudCwkZXF1YSwkZXF1YikpOwoJCQkJCgkJCQkJCWlmKCRkYnJlc3VsdDIgICYmICRkYnJlc3VsdDItPlJlY29yZENvdW50KCkgPT0gMCkgCgkJCQkJCXsKCQkJCQkJCSRxdWVyeTMgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIChpZCxzYWlzb24saWRwb3VsZSwgaWRkaXYsIGNsdWIsIHRvdXIsIGRhdGVfZXZlbnQsIHVwbG9hZGVkLCBsaWJlbGxlLCBlcXVhLCBlcXViLCBzY29yZWEsIHNjb3JlYiwgbGllbikgVkFMVUVTICgnJywgPyAsPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykiOwoJCQkJCQkJLy8JZWNobyAkcXVlcnk7CgkJCQkJCQkkaSsrOwoJCQkJCQkJJHVwbG9hZGVkID0gMDsKCQkJCQkJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTMsYXJyYXkoJHNhaXNvbiwkaWRwb3VsZSwgJGlkZGl2LCAkY2x1YiwgJHRvdXIsICRkYXRlX2V2ZW50LCAkdXBsb2FkZWQsICRsaWJlbGxlLCAkZXF1YSwgJGVxdWIsICRzY29yZWEsICRzY29yZWIsICRsaWVuKSk7CgoJCQkJCQkJaWYoISRkYnJlc3VsdGF0KQoJCQkJCQkJewoJCQkJCQkJCSRkZXNpZ25hdGlvbiAuPSAkZGItPkVycm9yTXNnKCk7IAoJCQkJCQkJfQoJCQkJCQkKCQkJCQkJCQoJCQkJCQkKCQkJCQkJfQoJCQkJCQllbHNlaWYoJGRicmVzdWx0MiAmJiAkZGJyZXN1bHQyLT5SZWNvcmRDb3VudCgpID4wKQoJCQkJCQl7CgkJCQkJCQkvL2lsIHkgYSBkw6lqw6AgdW4gZW5yZWdpc3RyZW1lbnQsIGxlIHNjb3JlIGVzdC1pbCDDoCBqb3VyID8KCQkJCQkJCSR1cGRhdGUgPSAxOwoJCQkJCQkJJHJvdyA9ICRkYnJlc3VsdDItPkZldGNoUm93KCk7CgkJCQkJCQkkaWQgPSAkcm93WydpZCddOwoJCQkJCQkJJHNjb3JlQSA9ICRyb3dbJ3Njb3JlYSddOwoJCQkJCQkJJHNjb3JlQiA9ICRyb3dbJ3Njb3JlYiddOwoKCQkJCQkJCQlpZigkc2NvcmVBID09MCAmJiAkc2NvcmVCID09MCkKCQkJCQkJCQl7CgkJCQkJCQkJCSRxdWVyeTMgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wb3VsZXNfcmVuY29udHJlcyBTRVQgc2NvcmVhID0gPywgc2NvcmViID0gPyBXSEVSRSBpZCA9ID8iOwoJCQkJCQkJCQkkZGJyZXN1bHRBID0gJGRiLT5FeGVjdXRlKCRxdWVyeTMsIGFycmF5KCRzY29yZWEsICRzY29yZWIsICRpZCkpOwoJCQkJCQkJCQkkaSsrOwoJCQkJCQkJCQlpZighJGRicmVzdWx0QSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGRlc2lnbmF0aW9uLj0gJGRiLT5FcnJvck1zZygpOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCgkJCQkJCgkJCQkKCQkJCQl9Ly9maW4gZHUgZm9yZWFjaAoJCQkJLyoKCQkJCWZvcmVhY2goJHJlc3VsdCBhcyAkY2xlID0+JHRhYikKCQkJCXsKCgoJCQkJCSRsaWJlbGxlID0gJHRhYltsaWJlbGxlXTsKCQkJCQkkZXF1YSA9ICR0YWJbZXF1YV07CgkJCQkJJGVxdWIgPSAkdGFiW2VxdWJdOwoKCQkJCQkvL29uIGZhaXQgcXVlbHF1ZSB0cmFuc2Zvcm1hdGlvbnMgZGVzIGluZm9zIHJlY3VlaWxsaWVzCgkJCQkJcHJlZ19tYXRjaF9hbGwoJyNbMC05XSsjJywkbGliZWxsZSwkZXh0cmFjdCk7CgkJCQkJJHRvdXIgPSAkZXh0cmFjdFswXVswXTsKCgkJCQkJJGV4dHJhY3Rpb24gPSBzdWJzdHIoJGxpYmVsbGUsLTgpOwoJCQkJCSRkYXRlX2V4dHJhY3QgPSBleHBsb2RlKCcvJywgJGV4dHJhY3Rpb24pOwoJCQkJCSRhbm5lZV9kYXRlID0gJGRhdGVfZXh0cmFjdFsyXSArIDIwMDA7CgkJCQkJJGRhdGVfZXZlbnQgPSAkYW5uZWVfZGF0ZS4iLSIuJGRhdGVfZXh0cmFjdFsxXS4iLSIuJGRhdGVfZXh0cmFjdFswXTsKCQkJCQkkdXBsb2FkZWQgPSAwOwoKCQkJCQkkY2x1YmEgPSBzdHJwb3MoJGVxdWEsJG5vbV9lcXVpcGVzKTsKCQkJCQkkY2x1YmIgPSBzdHJwb3MoJGVxdWIsJG5vbV9lcXVpcGVzKTsKCQkJCQoJCQkJCQlpZiAoJGNsdWJhICE9PSBmYWxzZSB8fCAkY2x1YmIgIT09IGZhbHNlKQoJCQkJCQl7CgkJCQkJCQkkY2x1YiA9IDE7CgkJCQkJCQkkYWZmaWNoYWdlID0gMTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSRjbHViID0gMDsKCQkJCQkJfQoJCQkJCQoJCQkJCSRzY29yZWEgPSAkdGFiW3Njb3JlYV07CgkJCQkJJHNjb3JlYiA9ICR0YWJbc2NvcmViXTsKCQkJCQkkbGllbiA9ICR0YWJbbGllbl07CQoJCQkJCS8vCgkJCQkJLy9vbiB2w6lyaWZpZSBxdWUgbGUgc2NvcmUgYSBiaWVuIMOpdMOpIHNhaXNpCgkJCQkJLy9zaSBsZSBzY29yZSBlc3Qgc2Fpc2kgb24gb2J0aWVudCB1biBzdHJpbmcgcG91ciBsZXMgdmFyaWFibGVzIHNjb3JlYSBldCBzY29yZWIKCQkJCQkvL3Npbm9uIGlsIHMnYWdpdCBkJ3VuIGFycmF5CQoKCQkJCQkJaWYoaXNfYXJyYXkoJHNjb3JlYSkgJiYgaXNfYXJyYXkoJHNjb3JlYikpCgkJCQkJCXsKCQkJCQkJCS8vbGUgc2NvcmUgbidlc3QgcGFzIHBhcnZlbnUgb3UgbGUgbWF0Y2ggbidhIHBhcyDDqXTDqSBqb3XDqQoJCQkJCQkJLy9PbiBsJ2VucmVnaXN0cmUgcWQgbcOqbWUKCQkJCQkJCSRzY29yZWEgPSAwOwoJCQkJCQkJJHNjb3JlYiA9IDA7CgkJCQkJCQkkdXBkYXRlID0gMDsJCQoJCQkJCQl9CgkJCQkJLy9vbiB2w6lyaWZpZSBzaSBsJ2VucmVnaXN0cmVtZW50IGVzdCBkw6lqw6AgbMOgCgkJCQkJJHF1ZXJ5MiA9ICJTRUxFQ1QgaWQsbGllbixzY29yZWEsIHNjb3JlYiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wb3VsZXNfcmVuY29udHJlcyBXSEVSRSBpZGRpdiA9PyBBTkQgaWRwb3VsZSA9ID8gQU5EIGRhdGVfZXZlbnQgPSA/IEFORCBlcXVhID0gPyBBTkQgZXF1YiA9ID8iOwoJCQkJCSRkYnJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MiwgYXJyYXkoJGlkZGl2LCRpZHBvdWxlLCRkYXRlX2V2ZW50LCRlcXVhLCRlcXViKSk7CgkJCQkKCQkJCQkJaWYoJGRicmVzdWx0MiAgJiYgJGRicmVzdWx0Mi0+UmVjb3JkQ291bnQoKSA9PSAwKSAKCQkJCQkJewoJCQkJCQkJJHF1ZXJ5MyA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcG91bGVzX3JlbmNvbnRyZXMgKGlkLHNhaXNvbixpZHBvdWxlLCBpZGRpdiwgY2x1YiwgdG91ciwgZGF0ZV9ldmVudCwgdXBsb2FkZWQsIGxpYmVsbGUsIGVxdWEsIGVxdWIsIHNjb3JlYSwgc2NvcmViLCBsaWVuKSBWQUxVRVMgKCcnLCA/ICw/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSI7CgkJCQkJCQkvLwllY2hvICRxdWVyeTsKCQkJCQkJCSRpKys7CgkJCQkJCQkkdXBsb2FkZWQgPSAwOwoJCQkJCQkJJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MyxhcnJheSgkc2Fpc29uLCRpZHBvdWxlLCAkaWRkaXYsICRjbHViLCAkdG91ciwgJGRhdGVfZXZlbnQsICR1cGxvYWRlZCwgJGxpYmVsbGUsICRlcXVhLCAkZXF1YiwgJHNjb3JlYSwgJHNjb3JlYiwgJGxpZW4pKTsKCgkJCQkJCQlpZighJGRicmVzdWx0YXQpCgkJCQkJCQl7CgkJCQkJCQkJJGRlc2lnbmF0aW9uIC49ICRkYi0+RXJyb3JNc2coKTsgCgkJCQkJCQl9CgkJCQkJCQoJCQkJCQkJCgkJCQkJCQoJCQkJCQl9CgkJCQkJCWVsc2VpZigkZGJyZXN1bHQyICYmICRkYnJlc3VsdDItPlJlY29yZENvdW50KCkgPjApCgkJCQkJCXsKCQkJCQkJCS8vaWwgeSBhIGTDqWrDoCB1biBlbnJlZ2lzdHJlbWVudCwgbGUgc2NvcmUgZXN0LWlsIMOgIGpvdXIgPwoJCQkJCQkJJHVwZGF0ZSA9IDE7CgkJCQkJCQkkcm93ID0gJGRicmVzdWx0Mi0+RmV0Y2hSb3coKTsKCQkJCQkJCSRpZCA9ICRyb3dbJ2lkJ107CgkJCQkJCQkkc2NvcmVBID0gJHJvd1snc2NvcmVhJ107CgkJCQkJCQkkc2NvcmVCID0gJHJvd1snc2NvcmViJ107CgoJCQkJCQkJCWlmKCRzY29yZUEgPT0wICYmICRzY29yZUIgPT0wKQoJCQkJCQkJCXsKCQkJCQkJCQkJJHF1ZXJ5MyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIFNFVCBzY29yZWEgPSA/LCBzY29yZWIgPSA/IFdIRVJFIGlkID0gPyI7CgkJCQkJCQkJCSRkYnJlc3VsdEEgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MywgYXJyYXkoJHNjb3JlYSwgJHNjb3JlYiwgJGlkKSk7CgkJCQkJCQkJCSRpKys7CgkJCQkJCQkJCWlmKCEkZGJyZXN1bHRBKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkZGVzaWduYXRpb24uPSAkZGItPkVycm9yTXNnKCk7CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJCX0KCQkJCQkKCQkJCQkKCQkJCQoJCQkJCX0vL2ZpbiBkdSBmb3JlYWNoCgkJCQkJKi8KCQkJCX0vL2ZpbiBkdSBpZiAhaXNfYXJyYXkgdsOpcmlmaWNhdGlvbiBkdSB0YWJsZWF1CgkJCSRjb21wdGFnZSA9ICRpOwoJCQkkc3RhdHVzID0gJ1BvdWxlcyc7CgkJCSRkZXNpZ25hdGlvbiA9ICJNaXNlIMOgIGpvdXIgZGUgIi4kY29tcHRhZ2UuIiByZW5jb250cmVzIGRlIGxhIHBvdWxlICIuJGlkcG91bGU7CgkJCSRxdWVyeTQgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwIChpZCwgZGF0ZWNyZWF0ZWQsIHN0YXR1cywgZGVzaWduYXRpb24sIGFjdGlvbikgVkFMVUVTICgnJywgPywgPywgPywgPykiOwoJCQkkYWN0aW9uID0gInJldHJpZXZlX3BvdWxlc19yZW5jb250cmVzIjsKCQkJJGRicmVzdWx0NCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnk0LCBhcnJheSgkbm93LCRzdGF0dXMsICRkZXNpZ25hdGlvbiwkYWN0aW9uKSk7CgkJCQoJCQkJaWYoISRkYnJlc3VsdDQpCgkJCQl7CgkJCQkJJGRlc2lnbmF0aW9uLj0gJGRiLT5FcnJvck1zZygpOyAKCQkJCX0KCQkJCgkJfS8vZmluIGR1IHdoaWxlCgl9CgllbHNlIAoJewoJCSR0aGlzLT5TZXRNZXNzYWdlKCdQYXMgZFwnw6lxdWlwZXMgdHJvdXbDqWVzJyk7CgkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignZXF1aXBlcycpOwoJfS8vZmluIGR1IGlmIGRicmVzdWx0CgoKCgoJCgkkdGhpcy0+U2V0TWVzc2FnZSgiUmV0cm91dmV6IGxlcyBpbmZvcyBkYW5zIGxlIGpvdXJuYWwiKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3Jlc3VsdGF0cycpOwoJCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_all_sit_mens.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjICAgICAgICAgIFLDiUNVUEVSQVRJT04gREUgVE9VVEVTIExFUyBTSVRVQVRJT05TIE1FTlNVRUxMRVMgICAgICAgICAgICAgIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9vbiB2w6lyaWZpZSBsZXMgcGVybWlzc2lvbnMKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIFVzZScpKQp7CgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicpKTsKCXJldHVybjsKfQovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKLy9yZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5jYWxjdWxzLnBocCcpOwokZGI9JGdDbXMtPkdldERiKCk7Ci8vJGRiID0mICR0aGlzLT5HZXREYigpOwokbW9pc19jb3VyYW50ID0gZGF0ZSgnbicpOwovL3BvdXIgdGVzdCwgamUgY2hhbmdlIG1hbnVlbGxlbWVudCBsZSBtb2lzIGNvdXJhbnQKLy8kbW9pc19jb3VyYW50ID0gMjsKJGFubmVlX2NvdXJhbnRlID0gZGF0ZSgnWScpOwokc2Fpc29uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwokbW9pc19mcmFuY2FpcyA9IGFycmF5KCdKYW52aWVyJywgJ0bDqXZyaWVyJywnTWFycycsICdBdnJpbCcsICdNYWknLCAnSnVpbicsICdKdWlsbGV0JywnQW/Du3QnLCAnU2VwdGVtYnJlJywgJ09jdG9icmUnLCdOb3ZlbWJyZScsJ0TDqWNlbWJyZScpOwokbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CiRtb2lzX3JlZWwgPSAkbW9pc19jb3VyYW50IC0gMTsKJG1vaXNfc20gPSAkbW9pc19mcmFuY2Fpc1siJG1vaXNfcmVlbCJdOwokbW9pc19zaXRfbWVucyA9ICRtb2lzX3NtLiIgIi4kYW5uZWVfY291cmFudGU7CgokbWVzc2FnZSA9ICcnOwovL2plIHPDqWxlY3Rpb25uZSB0b3V0ZXMgbGVzIGxpY2VuY2VzIGR1IG1vaXMgZW4gcXVlc3Rpb24gZG9uYyBkw6lqw6AgcmVuc2VpZ27DqWVzCi8vIGFmaW4gZGUgbmUgcsOpY3Vww6lyZXIgcXVlIGNlbGxlcyBtYW5xdWFudGVzCiRxdWVyeSA9ICJTRUxFQ1QgbGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19zaXRfbWVucyBXSEVSRSBtb2lzID0gPyBBTkQgYW5uZWUgPSA/IjsKLy9qZSBsZXMgbWV0cyBlbnN1aXRlIGRhbnMgdW4gdGFibGVhdSBwb3VyIGZhaXJlIGxlIE5PVCBJTgkKCiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRtb2lzX2NvdXJhbnQsICRhbm5lZV9jb3VyYW50ZSkpOwokcm93ID0gJGRicmVzdWx0LT5HZXRSb3dzKCk7CiRsaWMgPSBhcnJheSgpOwovLyRsaWMgPSAkcm93WzBdWydsaWNlbmNlJ107Ci8vZWNobyAiTGEgdmFsZXVyIGVzdCA6ICIuJGxpYzsKJGxpZ25lcyA9ICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKTsKZm9yKCRpPTA7JGk8PSRsaWduZXM7JGkrKykKewoJYXJyYXlfcHVzaCgkbGljLCRyb3dbJGldWydsaWNlbmNlJ10pOwoJJGxpY2VuID0gc3Vic3RyKGltcGxvZGUoIiwgIiwgJGxpYyksIDAsIC0zKTsKfQppZigkbGlnbmVzID09MCkKewoJJHF1ZXJ5MiA9ICJTRUxFQ1QgbGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIGFjdGlmPTEiOwp9CmVsc2UKewoJJHF1ZXJ5MiA9ICJTRUxFQ1QgbGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIGFjdGlmPTEgQU5EIGxpY2VuY2UgTk9UIElOICgkbGljZW4pIjsKfQovL2VjaG8gJHF1ZXJ5MjsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIpOwoKaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwKQogIHsKCSRzZXJ2aWNlID0gbmV3IHJldHJpZXZlX29wcygpOwogCS8vb24gaW5zdGFuY2llIHVuIGNvbXB0ZXVyIAoJCgogICAgCXdoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKICAgICAgCXsKCQkkbGljZW5jZTIgPSAkcm93WydsaWNlbmNlJ107CgkJCQoJCSRyZXN1bHQgPSAkc2VydmljZS0+cmV0cmlldmVfc2l0X21lbnMoIiRsaWNlbmNlMiIpOwoJCQogICAgICAgIH0vL2ZpbiBkdSB3aGlsZQoKCSR0aGlzLT5TZXRNZXNzYWdlKCdDb25zdWx0ZXogbGUgam91cm5hbCcpOwoJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignc2l0dWF0aW9uJyk7CgogIH0KICAKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_club.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwpkZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7Ci8qCiRtYUNsYXNzZSA9ICdjbGFzcy5TZXJ2aWNlLnBocCc7CiRzZXJ2aWNlID0gbmV3ICRtYUNsYXNzZSgpOwoqLwokc2VydmljZSA9IG5ldyBTZXJ2aWNlKCk7Ci8vJHJlc3VsdCA9ICRzZXJ2aWNlLT5nZXRKb3VldXJQYXJ0aWVzKCIwNzI5MDIyOSIpOwovLyRyZXN1bHQgPSAkc2VydmljZS0+Z2V0Sm91ZXVyUGFydGllcygiMjkyMjcxIik7CiRyZXN1bHQgPSAkc2VydmljZS0+Z2V0UmVuY29udHJlKCJpc19yZXRvdXI9MCZwaGFzZT0xJnJlc18xPTcmcmVzXzI9NyZyZW5jX2lkPTI1NzA0MTUmZXF1aXBfMT1CT1VMT0dORStCSUxMQU5DT1VSVCtBQysyJmVxdWlwXzI9Rk9VRVNOQU5UK1JQKzEmZXF1aXBfaWQxPTI5NjkzNiZlcXVpcF9pZDI9Mjk2OTQxIik7CnZhcl9kdW1wKCRyZXN1bHQpOwoKLyogICAgIAoKZm9yZWFjaCgkcmVzdWx0IGFzICRjbGUgPT4kdGFiKQp7CgkKCSRjbGVfYXBwZWwgPSByYW5kb20oMjApOwoJJGxpY2VuY2UgPSAkdGFiW2xpY2VuY2VdOwoJJGFkdmxpYyA9ICR0YWJbJ2FkdmxpYyddOwoJJHZkID0gJHRhYlsndmQnXTsKCWlmICgkdmQgPT0nVicpewoJCSR2ZCA9IDE7CgkJfQoJZWxzZSAKCQl7JHZkID0gMDt9CgkkbnVtam91cm4gPSAkdGFiWydudW1qb3VybiddOwoJJGNvZGVjaGFtcCA9ICR0YWJbJ2NvZGVjaGFtcCddOwoJJGRhdGUgPSAkdGFiWydkYXRlJ107CgkkYWR2c2V4ZSA9ICR0YWJbJ2FkdnNleGUnXTsKCSRhZHZub21wcmUgPSAkdGFiWydhZHZub21wcmUnXTsKCSRwb2ludHJlcyA9ICR0YWJbJ3BvaW50cmVzJ107CgkkY29lZmNoYW1wID0gJHRhYlsnY29lZmNoYW1wJ107CgkkYWR2Y2xhb2YgPSAkdGFiWydhZHZjbGFvZiddOwoJCgkkcXVlcnkgPSAiU0VMRUNUIGxpY2VuY2UgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBXSEVSRSBsaWNlbmNlID0gPyI7CgkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGljZW5jZSkpOwoJaWYoJGRicmVzdWx0ICAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPT0gMCkgewoJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyAoaWQsY2xlX2FwcGVsLCBsaWNlbmNlLCBhZHZsaWMsIHZkLCBudW1qb3VybiwgY29kZWNoYW1wLCBkYXRlLCBhZHZzZXhlLCBhZHZub21wcmUsIHBvaW50cmVzLCBjb2VmY2hhbXAsIGFkdmNsYW9mKSBWQUxVRVMgKCcnLCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSI7CgkJJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCcnLCAkY2xlX2FwcGVsLCAkbGljZW5jZSwgJGFkdmxpYywgJHZkLCAkbnVtam91cm4sICRjb2RlY2hhbXAsICRkYXRlLCAkYWR2c2V4ZSwgJGFkdm5vbXByZSwgJHBvaW50cmVzLCAkY29lZmNoYW1wLCAkYWR2Y2xhb2YpKTsKCQkKCQlpZighJGRicmVzdWx0YXQpCgkJewoJCQlkaWUoJ0ZBVEFMIFNRTCBFUlJPUiAxOiAnLiRkYi0+RXJyb3JNc2coKS4nPGJyLz5RVUVSWTogJy4kZGItPnNxbCk7CgkJfQovLwl9Cn0KCQoJJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ3NhdmVkX3JlY29yZCcpKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3JlbmNvbnRyZXMnKTsKKi8KIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_compets.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICBQcmVtacOocmUgw6l0YXBlIGRlIHLDqWN1cMOpcmF0aW9uIGRlcyBjb21ww6l0aXRpb25zICAgICAgICAgICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7Ci8vcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uY2FsY3Vscy5waHAnKTsKCiRjbHViX251bWJlciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjbHViX251bWJlcicpOwokc2Fpc29uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwokZGVzaWduYXRpb24gPSAnJzsKaWYoIWlzc2V0KCRjbHViX251bWJlcikgJiYgJGNsdWJfbnVtYmVyID09JycpCnsKCSRtZXNzYWdlID0gIlZvdHJlIG51bcOpcm8gZGUgY2x1YiBuJ2VzdCBwYXMgY29uZmlndXLDqSAhISI7CgkkdGhpcy0+U2V0TWVzc2FnZSgiJG1lc3NhZ2UiKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbmZpZ3VyYXRpb24nKTsKfQokbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CgovL29uIHbDqXJpZmllIHF1ZSB0b3VzIGxlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgc29udCByZW5zZWlnbsOpcyAoaWRvcmdhIGV0IHR5cGUpCmlmKGlzc2V0KCRwYXJhbXNbJ2lkb3JnYSddKSAmJiAkcGFyYW1zWydpZG9yZ2EnXSAhPScnKQp7CgkkaWRvcmdhID0gJHBhcmFtc1snaWRvcmdhJ107Cn0KaWYoaXNzZXQoJHBhcmFtc1sndHlwZSddKSAmJiAkcGFyYW1zWyd0eXBlJ10gIT0nJykKewoJJHR5cGUgPSAkcGFyYW1zWyd0eXBlJ107CglpZigkdHlwZSA9PSAnRScpCgl7CgkJJGluZGl2cyA9IDA7Cgl9CgllbHNlCgl7CgkJJGluZGl2cyA9IDE7Cgl9Cn0KZWxzZQp7CgkkdHlwZSA9ICdFJzsKfQovL29uIGluc3RhbmNpZSBsYSBjbGFzc2Ugc2VydmljZQokc2VydmljZSA9IG5ldyBTZXJ2aWNlbigpOwoKJHJlc3VsdCA9ICcnOwokcGFnZSA9ICJ4bWxfZXByZXV2ZSI7CiR2YXIgPSAib3JnYW5pc21lPSIuJGlkb3JnYS4iJnR5cGU9Ii4kdHlwZTsKJGxpZW4gPSAkc2VydmljZS0+R2V0TGluaygkcGFnZSwgJHZhcik7CiR4bWwgPSBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGxpZW4sICdTaW1wbGVYTUxFbGVtZW50JywgTElCWE1MX05PQ0RBVEEpOwoKaWYoJHhtbCA9PT0gRkFMU0UpCnsKCS8vIExlIHNlcnZpY2UgZXN0IGNvdXDDqQoJJGFycmF5ID0gMDsKfQplbHNlCnsKCSRhcnJheSA9IGpzb25fZGVjb2RlKGpzb25fZW5jb2RlKChhcnJheSkkeG1sKSwgVFJVRSk7CgkkbGlnbmVzID0gY291bnQoJGFycmF5WydlcHJldXZlJ10pOwp9CgovL3Zhcl9kdW1wKCRyZXN1bHQpOwovKiovCi8vb24gdmEgdGVzdGVyIHNpIGxhIHZhcmlhYmxlIGVzdCBiaWVuIHVuIHRhYmxlYXUgICAKCWlmKCFpc19hcnJheSgkYXJyYXkpIHx8ICRsaWduZXMgPT0gMCkgIHsKCQkKCQkkdGhpcy0+U2V0TWVzc2FnZSgiTGUgc2VydmljZSBlc3QgY291cMOpIG91IGlsIG4neSBhIHBhcyBlbmNvcmUgZGUgcsOpc3VsdGF0cyIpOwoJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2VwcmV1dmVzJyk7Cgl9CgovLy9vbiBpbml0aWFsaXNlIHVuIGNvbXB0ZXVyIGfDqW7DqXJhbCAkaQokaT0wOwovL29uIGluaXRpYWxpc2UgdW4gZGV1eGnDqG1lIGNvbXB0ZXVyCiRjb21wdGV1cj0wOwpmb3JlYWNoKCR4bWwgYXMgJGNsZSA9PiR0YWIpCnsKCQoJJGkrKzsKCSRpZGVwcmV1dmUgPSAoaXNzZXQoJHRhYi0+aWRlcHJldXZlKT8iJHRhYi0+aWRlcHJldXZlIjoiIik7CgkkaWRvcmdhICA9IChpc3NldCgkdGFiLT5pZG9yZ2EpPyIkdGFiLT5pZG9yZ2EiOiIiKTsKCSRsaWJlbGxlID0gKGlzc2V0KCR0YWItPmxpYmVsbGUpPyIkdGFiLT5saWJlbGxlIjoiIik7CgkvLyAxLSBvbiB2w6lyaWZpZSBzaSBjZXR0ZSDDqXByZXV2ZSBlc3QgZMOpasOgIGRhbnMgbGEgYmFzZQoJJHF1ZXJ5ID0gIlNFTEVDVCBuYW1lIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIFdIRVJFIG5hbWUgPSA/IjsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRsaWJlbGxlKSk7CgkKCQlpZigkZGJyZXN1bHQgICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA9PSAwKSAKCQl7CgkJCSRxdWVyeTEgPSAiU0hPVyBUQUJMRSBTVEFUVVMgTElLRSAnIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMnICI7CgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkxKTsKCQkJJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKCQkJJHJlY29yZF9pZCA9ICRyb3dbJ0F1dG9faW5jcmVtZW50J107CgkJCSR0YWcgPSBwaW5nX2FkbWluX29wczo6dGFnKCRyZWNvcmRfaWQsICRpZGVwcmV1dmUsICRpbmRpdnMpOwoJCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIChpZCwgbmFtZSwgaW5kaXZzLCBpZGVwcmV1dmUsdGFnLCBpZG9yZ2EpIFZBTFVFUyAoJycsID8sID8sID8sID8sID8pIjsKCQkJLy9lY2hvICRxdWVyeTsKCQkJJGNvbXB0ZXVyKys7CgkJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkbGliZWxsZSwkaW5kaXZzLCRpZGVwcmV1dmUsJHRhZywkaWRvcmdhKSk7CgkJCgkJCWlmKCEkZGJyZXN1bHRhdCkKCQkJewoJCQkJJGRlc2lnbmF0aW9uIC49ICRkYi0+RXJyb3JNc2coKTsJCQkKCQkJfQoKCQl9CgkJZWxzZQoJCXsKCQkJLy9sJ8OpcHJldXZlIGVzdCBkw6lqw6AgcmVuc2VpZ27DqWUsIG9uIGZhaXQgdW4gdXBkYXRlCgkJCWlmKCRpZG9yZ2EgPT0gJHRoaXMtPkdldFByZWZlcmVuY2UoJycpKQoJCQkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyBTRVQgaWRlcHJldXZlID0gPyBXSEVSRSBuYW1lID0gPyAiOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkaWRlcHJldXZlLCRsaWJlbGxlKSk7CgkJfS8vZmluIGR1IGlmICRkYnJlc3VsdAoJCgkKfS8vIGZpbiBkdSBmb3JlYWNoCgokZGVzaWduYXRpb24gLj0gIlLDqWN1cMOpcmF0aW9uIGRlICIuJGNvbXB0ZXVyLiIgw6lwcmV1dmVzIjsKCgkKCQokc3RhdHVzID0gJ09rJzsKJGFjdGlvbiA9ICdyZXRyaWV2ZV90ZWFtcyc7Ci8vcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCRkZXNpZ25hdGlvbiwkYWN0aW9uKTsKCQoJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignY29tcGV0cycpOwoKIwojIEVPRgojCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_details_rencontres.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwokZGIgPSYgJHRoaXMtPkdldERiKCk7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwovL2EgZmFpcmUgCi8vbWV0dHJlIGxlcyBhdXRvcmlzYXRpb25zCi8vc2kgcGFzIGRlIHJlY29yZF9pZCByZWRpcmVjdGlvbgokcmVjb3JkX2lkID0gJHBhcmFtc1sncmVjb3JkX2lkJ107Ci8vb24gdmEgdXRpbGlzZXIgY2V0dGUgdmFyaWFibGUgKHJlY29yZF9pZCkgY29tbWUgY2zDqSBzZWNvbmRhaXJlIGRhbnMgbGEgbm91dmVsbGUgdGFibGUKCgokcXVlcnkgPSAiU0VMRUNUIGxpZW4gRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcG91bGVzX3JlbmNvbnRyZXMgV0hFUkUgaWQgPSA/IjsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHJlY29yZF9pZCkpOwppZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApCnsKCXdoaWxlKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgl7CgkJJGxpZW4gPSAkcm93WydsaWVuJ107CgkJJHNlcnZpY2UgPSBuZXcgU2VydmljZSgpOwoJCSRyZXN1bHQgPSAkc2VydmljZS0+Z2V0UmVuY29udHJlKCIkbGllbiIpOwoKCQkvL3ByaW50X3IoJHJlc3VsdCk7CgkJCgkJCWlmKCFpc19hcnJheSgkcmVzdWx0KSkKCQkJeyAKCgkJCQkvL2xlIHRhYmxlYXUgZXN0IHZpZGUsIGlsIGZhdXQgZW52b3llciB1biBtZXNzYWdlIHBvdXIgbGUgc2lnbmFsZXIKCQkJCSRkZXNpZ25hdGlvbi49ICJsZSBzZXJ2aWNlIGVzdCBjb3Vww6kiOwoJCQkJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJCQkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYigncG91bGVzJyk7CgkJCX0gICAKCQkJZWxzZQoJCQl7CgkJCS8vb24gZXNzYWllIGRlIGZhaXJlIHFxcyBjYWxjdWxzCgkJCSR0YWJsZWF1MSA9IGFycmF5KCk7CgkJCSR0YWIyID0gYXJyYXkoKTsKCQkJJGNvbXB0ZXVyID0gY291bnQoJHJlc3VsdFtqb3VldXJdKTsKCQkJJGNvbXB0YWdlID0gY291bnQoJHJlc3VsdFtwYXJ0aWVdKTsKCQkJLy9vbiBzY2luZGUgbGUgdGFibGVhdSBwcmluY2lwYWwgZW4gcGx1c2lldXJzIHRhYmxlYXV4ID8KCQkJJHRhYjEgPSBhcnJheV9zbGljZSgkcmVzdWx0LDAsMSk7CgkJCSR0YWIyID0gYXJyYXlfc2xpY2UoJHJlc3VsdCwxLDEpOwoJCQkkdGFiMyA9IGFycmF5X3NsaWNlKCRyZXN1bHQsMiwxKTsKCQkJLy9wcmludF9yKCR0YWIxKTsKCQkJLy9wcmludF9yKCR0YWIyKTsKCQkJLy9wcmludF9yKCR0YWIzKTsKCQkJLy9lY2hvICJsZSBjb21wdGV1ciBlc3QgOiAiLiRjb21wdGV1cjsKCQkJLy9lY2hvICJsZSBuYiBkZSBwYXJ0aWVzIGRpc3B1dMOpZXMgZXN0IDogIi4kY29tcHRhZ2U7CgkJCQkkaT0wOwoJCQkJJGE9MDsKCQkJJGVxdWEgPSAkdGFiMVtyZXN1bHRhdF1bZXF1YV07CgkJCSRyZXNhID0gJHRhYjFbcmVzdWx0YXRdW3Jlc2FdOwoJCQkkZXF1YiA9ICR0YWIxW3Jlc3VsdGF0XVtlcXViXTsKCQkJJHJlc2IgPSAkdGFiMVtyZXN1bHRhdF1bcmVzYl07CgkJCQoJCQkJCgkJCQkJZm9yKCRpPTA7JGk8JGNvbXB0ZXVyOyRpKyspCgkJCQkJewoJCQkJCQkkeGphID0gJ3hqYScuJGk7Ly9leCA6ICR4amEgPSAneGphMCc7CgkJCQkJCSR4Y2EgPSAneGNhJy4kaTsKCQkJCQkJJHhqYiA9ICd4amInLiRpOy8vZXggOiAkeGphID0gJ3hqYTAnOwoJCQkJCQkkeGNiID0gJ3hjYicuJGk7CgkJCQkJCSQkeGphID0gJHRhYjJbam91ZXVyXVskaV1beGphXTsvL2V4IDogJHhqYTAgPSAnJzsKCQkJCQkJJCR4Y2EgPSAkdGFiMltqb3VldXJdWyRpXVt4Y2FdOwoJCQkJCQkkJHhqYiA9ICR0YWIyW2pvdWV1cl1bJGldW3hqYl07Ly9leCA6ICR4amEwID0gJyc7CgkJCQkJCSQkeGNiID0gJHRhYjJbam91ZXVyXVskaV1beGNiXTsKCQkJCQkJLy9lY2hvICQkeGphOwoJCQkJCX0KCQkJCQkJCgkJCQkJZm9yKCRhPTA7JGE8JGNvbXB0YWdlOyRhKyspCgkJCQkJewoJCQkJCQkkamEgPSAnamEnLiRhOy8vZXggJGphID0gJ2phMCc7CgkJCQkJCSQkamEgPSAkdGFiM1twYXJ0aWVdWyRhXVtqYV07CgkJCQkJCSRqYiA9ICdqYicuJGE7Ly9leCAkamEgPSAnamEwJzsKCQkJCQkJJCRqYiA9ICR0YWIzW3BhcnRpZV1bJGFdW2piXTsKCQkJCQkJJHNjb3JlYSA9ICdzY29yZWEnLiRhOwoJCQkJCQkkJHNjb3JlYSA9ICR0YWIzW3BhcnRpZV1bJGFdW3Njb3JlYV07CgkJCQkJCSRzY29yZWIgPSAnc2NvcmViJy4kYTsKCQkJCQkJJCRzY29yZWIgPSAkdGFiM1twYXJ0aWVdWyRhXVtzY29yZWJdOwoJCQkJCQkKCQkJCQl9CgkJCQkKCQkJCQkKCQkJCQoJCQkJCgkJCgkJCQkkY29udGVudSA9ICcnOwoJCQkJJHJldG91cj0gJHRoaXMtPkNyZWF0ZVJldHVybkxpbmsoJGlkLCAkcmV0dXJuaWQsJ1JldG91cicpOwoJCQkJJGNvbnRlbnUuPSI8cD4kcmV0b3VyPC9wPiI7CgkJCQkkY29udGVudS49ICI8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZFwiPiI7CgkJCQkkY29udGVudS49Ijx0cj48dGQ+JGVxdWE8L3RkPjx0ZD4kcmVzYTwvdGQ+PHRkPiRyZXNiPC90ZD48dGQ+JGVxdWI8L3RkPjwvdHI+IjsKCQkJCS8vJGNvbnRlbnUuPSI8L3RhYmxlPiI7CgkJCQkvLyRjb250ZW51Lj0iPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWRcIj4iOwoJCQkJZm9yKCRpPTA7JGk8JGNvbXB0ZXVyOyRpKyspCgkJCQl7CgkJCQkJJGNvbnRlbnUuPSI8dHI+PHRkPiAkeyd4amEnLiRpfTwvdGQ+PHRkPiR7J3hjYScuJGl9PC90ZD48dGQ+JHsneGpiJy4kaX08L3RkPjx0ZD4keyd4Y2InLiRpfTwvdGQ+PC90cj4iOwoJCQkJfQoJCQkJCgkJCQkvLyRjb250ZW51Lj0iPC90YWJsZT4iOwoJCQkvLwkkY29udGVudS49Ijx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkXCI+IjsKCQkJCWZvcigkYT0wOyRhPCRjb21wdGFnZTskYSsrKQoJCQkJewoJCQkJCSRjb250ZW51Lj0iPHRyPjx0ZD4keydqYScuJGF9PC90ZD48dGQ+JHsnc2NvcmVhJy4kYX08L3RkPjx0ZD4keydzY29yZWInLiRhfTwvdGQ+PHRkPiR7J2piJy4kYX08L3RkPjwvdHI+IjsKCQkJCX0KCQkJCQoJCQkJLy8kY29udGVudS49Ijx0cj48dGQ+JHhqYTA8L3RkPjx0ZD4keGNhMDwvdGQ+PHRkPiR4amIwPC90ZD48dGQ+JHhjYjA8L3RkPjwvdHI+IjsKCQkJCSRjb250ZW51Lj0iPC90YWJsZT4iOwkKCQkJCWVjaG8gJGNvbnRlbnU7CQoJCQkJCgkJCX0vL2ZpbiBkdSBlbHNlCgl9Ly9maW4gZHUgd2hpbGUKfQplbHNlCnsKCWVjaG8gJ1BhcyBkZSByw6lzdWx0YXRzJzsKfS8vZmluIGR1IGlmIHByaW1haXJlCiMKIyBFT0YKIwovL2VjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZGV0YWlsc19yZW5jb250cmUudHBsJyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_details_rencontres2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyBDZXR0ZSBwYWdlIHLDqWN1cMOocmUgbGVzIHLDqXN1bHRhdHMgZGUgY2hhcXVlIGpvdWV1ciBkcyB1bmUgY29tcMOpdGl0aW9uIHBhciDDqXF1aXBlcyAjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKLy9hIGZhaXJlIAovL21ldHRyZSBsZXMgYXV0b3Jpc2F0aW9ucwovL3NpIHBhcyBkZSByZWNvcmRfaWQgcmVkaXJlY3Rpb24KJHJlY29yZF9pZCA9ICcnOwppZihpc3NldCgkcGFyYW1zWydyZWNvcmRfaWQnXSkgJiYgJHBhcmFtc1sncmVjb3JkX2lkJ10gIT0gJycpCnsKCSRyZWNvcmRfaWQgPSAkcGFyYW1zWydyZWNvcmRfaWQnXTsKfQplbHNlCnsKCSRkZXNpZ25hdGlvbiA9ICJQYXJhbcOodHJlcyBtYW5xdWFudHMiOwoJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJJCR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3BvdWxlcycpOwp9Ci8vb24gdmEgdXRpbGlzZXIgY2V0dGUgdmFyaWFibGUgKHJlY29yZF9pZCkgY29tbWUgY2zDqSBzZWNvbmRhaXJlIGRhbnMgbGEgbm91dmVsbGUgdGFibGUKCgokcXVlcnkgPSAiU0VMRUNUIHNhaXNvbiwgbGllbixpZHBvdWxlLCBpZGRpdiwgZGF0ZV9ldmVudCwgdG91ciBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wb3VsZXNfcmVuY29udHJlcyBXSEVSRSBpZCA9ID8iOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcmVjb3JkX2lkKSk7CmlmKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCk+MCkKewoJd2hpbGUoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCXsKCQkkbGllbiA9ICRyb3dbJ2xpZW4nXTsKCQkkc2VydmljZSA9IG5ldyBTZXJ2aWNlbigpOwoJCSRwYWdlID0gInhtbF9jaHBfcmVuYyI7CgkJJHZhciA9ICRsaWVuOwoJCSRsaWVuID0gJHNlcnZpY2UtPkdldExpbmsoJHBhZ2UsICR2YXIpOwoJCSR4bWwgPSBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGxpZW4sICdTaW1wbGVYTUxFbGVtZW50JywgTElCWE1MX05PQ0RBVEEpOwoJCWlmKCR4bWwgPT09IEZBTFNFKQoJCXsKCQkJLy9sZSBzZXJ2aWNlIGVzdCBjb3Vww6kKCQkJJGFycmF5ID0gMDsKCQkJJGxpZ25lcyA9IDA7CgkJfQoJCWVsc2UKCQl7CgkJCSRhcnJheSA9IGpzb25fZGVjb2RlKGpzb25fZW5jb2RlKChhcnJheSkkeG1sKSwgVFJVRSk7CgkJCSRsaWduZXMgPSBjb3VudCgkYXJyYXlbJ3Jlc3VsdGF0J10pOwoJCQkkbGlnbmVzX2pvdWV1cnMgPSBjb3VudCgkYXJyYXlbJ2pvdWV1ciddKTsKCQl9CgkJLy9lY2hvICJsZSBuYiBkZSBqb3VldXJzIGVzdCA6ICIuJGxpZ25lc19qb3VldXJzOwoJCS8vJHJlc3VsdCA9ICRzZXJ2aWNlLT5nZXRSZW5jb250cmUoIiRsaWVuIik7CgoJCS8vdmFyX2R1bXAoJHhtbCk7Ly9wcmludF9yKCRyZXN1bHQpOwoJCQoJCQlpZighaXNfYXJyYXkoJGFycmF5KSkKCQkJeyAKCgkJCQkvL2xlIHRhYmxlYXUgZXN0IHZpZGUsIGlsIGZhdXQgZW52b3llciB1biBtZXNzYWdlIHBvdXIgbGUgc2lnbmFsZXIKCQkJCSRkZXNpZ25hdGlvbi49ICJsZSBzZXJ2aWNlIGVzdCBjb3Vww6kiOwoJCQkJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJCQkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYigncG91bGVzJyk7CgkJCX0gICAKCQkJZWxzZQoJCQl7CgkJCS8vb24gZXNzYWllIGRlIGZhaXJlIHFxcyBjYWxjdWxzCgkJCSR0YWJsZWF1MSA9IGFycmF5KCk7CgkJCSR0YWIyID0gYXJyYXkoKTsKCQkJJGNvbXB0ZXVyID0gY291bnQoJGFycmF5Wydqb3VldXInXSk7CgkJCSRjb21wdGV1cl9wYXJ0aWVzID0gY291bnQoJGFycmF5WydwYXJ0aWVzJ10pOwoJCQkKCQkJLy9vbiBzY2luZGUgbGUgdGFibGVhdSBwcmluY2lwYWwgZW4gcGx1c2lldXJzIHRhYmxlYXV4ID8KCQkJJHRhYjEgPSBhcnJheV9zbGljZSgkYXJyYXksMCwxKTsKCQkJJHRhYjIgPSBhcnJheV9zbGljZSgkYXJyYXksMSwxKTsKCQkJJHRhYjMgPSBhcnJheV9zbGljZSgkYXJyYXksMiwxKTsKCQkJLy9wcmludF9yKCR0YWIxKTsKCQkJLy9wcmludF9yKCR0YWIyKTsKCQkJLy9wcmludF9yKCR0YWIzKTsKCQkJLy9lY2hvICJsZSBjb21wdGV1ciBlc3QgOiAiLiRjb21wdGV1cjsKCQkJLy9lY2hvICJsZSBuYiBkZSBwYXJ0aWVzIGRpc3B1dMOpZXMgZXN0IDogIi4kY29tcHRhZ2U7CgkJCQkkaT0wOwoJCQkJJGE9MDsKCQkJCQoJCQkJCWZvcigkaT0wOyRpPCRjb21wdGV1cjskaSsrKQoJCQkJCXsKCQkJCQkJLy9sYSBmZXVpbGxlIGRlIHJlbmNvbnRyZS4uLgoJCQkJCQkkeGphID0gJ3hqYScuJGk7Ly9leCA6ICR4amEgPSAneGphMCc7CgkJCQkJCSR4Y2EgPSAneGNhJy4kaTsgLy9vbiBtZXQgYXVzc2kgbGUgY2xhc3NlbWVudCBkdSBqb3VldXJleCA6IHhjYTAsIHhjYTEseGNhMiwgZXRjLi4uCgkJCQkJCSR4amIgPSAneGpiJy4kaTsvL2V4IDogJHhqYSA9ICd4amEwJzsKCQkJCQkJJHhjYSA9ICd4Y2InLiRpOwoJCQkJCQkkJHhqYSA9ICR0YWIyW2pvdWV1cl1bJGldW3hqYV07Ly9leCA6ICR4amEwID0gJyc7CgkJCQkJCSQkeGNhID0gJHRhYjJbam91ZXVyXVskaV1beGNhXTsKCQkJCQkJJCR4amIgPSAkdGFiMltqb3VldXJdWyRpXVt4amJdOy8vZXggOiAkeGphMCA9ICcnOwoJCQkJCQkkJHhjYiA9ICR0YWIyW2pvdWV1cl1bJGldW3hjYl07CgkJCQkJCS8vb24gaW5zw6hyZSBsZSB0b3V0IGRhbnMgbGEgYmRkCgkJCQkJCSRxdWVyeTMgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2ZldWlsbGVzX3JlbmNvbnRyZXMgKGlkLCBma19pZCwgam91ZXVyQSwgY2x0QSwgam91ZXVyQiwgY2x0QikgVkFMVUVTICgnJywgPywgPywgPywgPywgPykiOwoJCQkJCQkkZGJyZXN1bHQzID0gJGRiLT5FeGVjdXRlKCRxdWVyeTMsIGFycmF5KCRyZWNvcmRfaWQsICQkeGphLCQkeGNhLCQkeGpiLCQkeGNiKSk7CgkJCQkJfQoJCQkJCWZvcigkaT0wOyRpPCRjb21wdGV1cl9wYXJ0aWVzOyRpKyspCgkJCQkJewoJCQkJCQkKCQkJCQkJCgkJCQkJCS8vb24gcydvY2N1cGUgbWFpbnRlbmFudCBkZXMgcGFydGllcwoJCQkJCQkkamEgPSAnamEnLiRpOwoJCQkJCQkkc2NvcmVhID0gJ3Njb3JlQScuJGk7CgkJCQkJCSRqYiA9ICdqYicuJGk7CgkJCQkJCSRzY29yZWIgPSAnc2NvcmVCJy4kaTsKCQkJCQkJJCRqYSA9ICR0YWIzW3BhcnRpZV1bJGldW2phXTsKCQkJCQkJJCRzY29yZWEgPSAkdGFiM1twYXJ0aWVdWyRpXVtzY29yZWFdOwoJCQkJCQkkJGpiID0gJHRhYjNbcGFydGllXVskaV1bamJdOwoJCQkJCQkkJHNjb3JlYiA9ICR0YWIzW3BhcnRpZV1bJGldW3Njb3JlYl07CgkJCQkJCS8vb24gaW5zw6hyZSBhdXNzaSBkYW5zIGxhIGJkZAoJCQkJCQkkcXVlcnk0ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZW5jb250cmVzX3BhcnRpZXMgKGlkLCBma19pZCwgam91ZXVyQSwgc2NvcmVBLCBqb3VldXJCLCBzY29yZUIpIFZBTFVFUyAoJycsID8sID8sID8sID8sID8pIjsKCQkJCQkJJGRicmVzdWx0NCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnk0LCBhcnJheSgkcmVjb3JkX2lkLCAkJGphLCQkc2NvcmVhLCAkJGpiLCAkJHNjb3JlYikpOwoJCQkJCQkKCQkJCQkJJHF1ZXJ5MiA9ICJTRUxFQ1QgbGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIChDT05DQVRfV1MoJyAnLG5vbSwgcHJlbm9tKSA9ID8pIE9SIChDT05DQVRfV1MoJyAnLG5vbSwgcHJlbm9tKSA9ID8pIjsKCQkJCQkJLy9lY2hvICRxdWVyeTI7CgkJCQkJCSRkYnJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MiwgYXJyYXkoJCR4amIsJCR4amEpKTsKCQkJCQkJCgkJCQkJCQlpZigkZGJyZXN1bHQyICYmICRkYnJlc3VsdDItPlJlY29yZENvdW50KCk+MCkKCQkJCQkJCXsKCQkJCQkJCQl3aGlsZSgkcm93Mj0gJGRicmVzdWx0Mi0+RmV0Y2hSb3coKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRzZXJ2ID0gbmV3IHJldHJpZXZlX29wcygpOwoJCQkJCQkJCQkkbGljZW5jZSA9ICRyb3cyWydsaWNlbmNlJ107CgkJCQkJCQkJCSRyZXRyaWV2ZSA9ICRzZXJ2LT5yZXRyaWV2ZV9wYXJ0aWVzX3NwaWQoJGxpY2VuY2UsICRyZWNvcmRfaWQpOwoJCQkJCQkJCQoJCQkJCQkJCQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWVsc2UKCQkJCQkJCXsKCQkJCQkJCQoJCQkJCQkJfQoJCQkJCQkKCQkJCQkJCS8vb24gcG91cnJhaXQgYXVzc2kgcsOpY3Vww6lyZXIgY2VzIGluZm9zIHBvdXIgbGVzIG1ldHRyZSBlbiBiZGQJCgkJCQkJCQkvL2VjaG8gJCR4amE7CgkJCQkJfQoJCQkJCQkKLy9vbiBtZXQgbGEgdmFsZXVyIHVwbG9hZGVkIMOgIDEKJHF1ZXJ5MyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIFNFVCBgdXBsb2FkZWRgID0gMSBXSEVSRSBpZCA9ID8iOwokZGJyZXN1bHRhdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkzLCBhcnJheSgkcmVjb3JkX2lkKSk7CQkJCQoJCQkJCgkJCQkJCgkJCQkKCQkJCQoJCQoJCQkJCgkJCQkKCQkJCQoJCQkJCgkJCX0vL2ZpbiBkdSBlbHNlCgl9Ly9maW4gZHUgd2hpbGUKfS8vZmluIGR1IGlmIHByaW1haXJlCiR0aGlzLT5TZXRNZXNzYWdlKCdSZXRyb3V2ZXogbGVzIGluZm9zIGRhbnMgbGUgam91cm5hbCcpOwokdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdwb3VsZXMnKTsKIwojIEVPRgojCi8vZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdkZXRhaWxzX3JlbmNvbnRyZS50cGwnKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_divisions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICBQcmVtacOocmUgw6l0YXBlIGRlIHLDqWN1cMOpcmF0aW9uIGRlcyBkaXZpc2lvbnMgICAgICAgICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2luY2x1ZGUvcHJlZnMucGhwJyk7CgokY2x1Yl9udW1iZXIgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY2x1Yl9udW1iZXInKTsKJHNhaXNvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKJGZlZGUgPSAnMTAwMDAxJzsKJHpvbmUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnem9uZScpOwokbGlndWUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbGlndWUnKTsKJGRlcCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXAnKTsKJGRlc2lnbmF0aW9uID0gJyc7CmlmKCFpc3NldCgkY2x1Yl9udW1iZXIpICYmICRjbHViX251bWJlciA9PScnKQp7CgkkbWVzc2FnZSA9ICJWb3RyZSBudW3DqXJvIGRlIGNsdWIgbidlc3QgcGFzIGNvbmZpZ3Vyw6kgISEiOwoJJHRoaXMtPlNldE1lc3NhZ2UoIiRtZXNzYWdlIik7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdjb25maWd1cmF0aW9uJyk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdyZXR1cm5saW5rJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2JhY2suZ2lmJywgJHRoaXMtPkxhbmcoJ2JhY2snKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLGFycmF5KCJhY3RpdmVfdGFiIj0+ImRpdmlzaW9ucyIpKSk7CiRub3cgPSB0cmltKCRkYi0+REJUaW1lU3RhbXAodGltZSgpKSwgIiciKTsKJGVycm9yID0gMDsvL29uIGluc3RhbmNpZSB1bmUgdmFyaWFibGUgZCdlcnJldXIKLy9vbiB2w6lyaWZpZSBxdWUgdG91cyBsZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIHNvbnQgcmVuc2VpZ27DqXMgKGlkb3JnYSBldCB0eXBlIGV0IGlkZXByZXV2ZSkKLyoqLwppZihpc3NldCgkcGFyYW1zWydpZG9yZ2EnXSkgJiYgJHBhcmFtc1snaWRvcmdhJ10gIT0nJykKewoJJGlkb3JnYSA9ICRwYXJhbXNbJ2lkb3JnYSddOwoJCn0KZWxzZQp7CgkkZXJyb3IrKzsKfQovKiovCmlmKGlzc2V0KCRwYXJhbXNbJ3R5cGUnXSkgJiYgJHBhcmFtc1sndHlwZSddICE9JycpCnsKCSR0eXBlID0gJHBhcmFtc1sndHlwZSddOwoJaWYoJHR5cGUgPT0gJ0UnKQoJewoJCSRpbmRpdnMgPSAwOwoJfQoJZWxzZQoJewoJCSRpbmRpdnMgPSAxOwoJfQp9CmVsc2UKewoJJHR5cGUgPT0gJ0UnOwp9CmlmKGlzc2V0KCRwYXJhbXNbJ2lkZXByZXV2ZSddKSAmJiAkcGFyYW1zWydpZGVwcmV1dmUnXSAhPScnKQp7CgkkaWRlcHJldXZlID0gJHBhcmFtc1snaWRlcHJldXZlJ107Cn0KZWxzZQp7CgkkZXJyb3IrKzsKfQokcGFnZT0ieG1sX2RpdmlzaW9uIjsKLy9vbiBpbnN0YW5jaWUgbGEgY2xhc3NlIHNlcnZpY2UKJHNlcnZpY2UgPSBuZXcgU2VydmljZW4oKTsKCgoJJHZhciA9ICJvcmdhbmlzbWU9Ii4kaWRvcmdhLiImZXByZXV2ZT0iLiRpZGVwcmV1dmUuIiZ0eXBlPSIuJHR5cGU7CgkJLy9lY2hvICR2YWxldXI7CgkJaWYoJGlkb3JnYSA9PSAkZmVkZSkgeyRzY29wZSA9ICdGJzt9CgkJaWYoJGlkb3JnYSA9PSAkem9uZSkgeyRzY29wZSA9ICdaJzt9CgkJaWYoJGlkb3JnYSA9PSAkbGlndWUpIHskc2NvcGUgPSAnTCc7fQoJCWlmKCRpZG9yZ2EgPT0gJGRlcCkgeyRzY29wZSA9ICdEJzt9CgkJLy8KCQkkbGllbiA9ICRzZXJ2aWNlLT5HZXRMaW5rKCRwYWdlLCR2YXIpOwoJCS8vdmFyX2R1bXAoJGxpZW4pOwoJCSR4bWwgPSBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGxpZW4sICdTaW1wbGVYTUxFbGVtZW50JywgTElCWE1MX05PQ0RBVEEpOwoJCWlmKCR4bWwgPT09IEZBTFNFKQoJCXsKCQkJLy9sZSBzZXJ2aWNlIGVzdCBjb3Vww6kKCQkJJGFycmF5ID0gMDsKCQkJJGxpZ25lcyA9IDA7CgkJfQoJCWVsc2UKCQl7CgkJCSRhcnJheSA9IGpzb25fZGVjb2RlKGpzb25fZW5jb2RlKChhcnJheSkkeG1sKSwgVFJVRSk7CgkJCSRsaWduZXMgPSBjb3VudCgkYXJyYXlbJ2RpdmlzaW9uJ10pOwoJCX0KCQkvL2VjaG8gImxlIG5iIGRlIGxpZ25lcyBlc3QgOiAiLiRsaWduZXM7CgkJJGk9MDsKCQkvL29uIGluaXRpYWxpc2UgdW4gZGV1eGnDqG1lIGNvbXB0ZXVyCgkJJGNvbXB0ZXVyPTA7CgkJZm9yZWFjaCgkeG1sIGFzICR2YWx1ZSkKCQl7CgoJCQkkaSsrOwoJCQkkaWRkaXZpc2lvbiA9IGh0bWxlbnRpdGllcygkdmFsdWUtPmlkZGl2aXNpb24pOwoJCQkkbGliZWxsZSA9IGh0bWxlbnRpdGllcygkdmFsdWUtPmxpYmVsbGUpOwoKCQkJLy8gMS0gb24gdsOpcmlmaWUgc2kgY2V0dGUgw6lwcmV1dmUgZXN0IGTDqWrDoCBkYW5zIGxhIGJhc2UKCQkJJHF1ZXJ5ID0gIlNFTEVDVCBpZGRpdmlzaW9uIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2RpdmlzaW9ucyBXSEVSRSBpZGRpdmlzaW9uID0gPyBBTkQgaWRvcmdhID0gPyBBTkQgc2Fpc29uID0gPyBBTkQgaWRlcHJldXZlID0gPyI7CgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpZGRpdmlzaW9uLCAkaWRvcmdhLCRzYWlzb24sJGlkZXByZXV2ZSkpOwoKCQkJCWlmKCRkYnJlc3VsdCAgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID09IDApIAoJCQkJewoJCQkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZGl2aXNpb25zIChpZCwgaWRvcmdhLCBpZGVwcmV1dmUsaWRkaXZpc2lvbixsaWJlbGxlLHNhaXNvbixpbmRpdnMsc2NvcGUpIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8sID8pIjsKCQkJCQkvL2VjaG8gJHF1ZXJ5OwoJCQkJCSRjb21wdGV1cisrOwoJCQkJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkaWRvcmdhLCRpZGVwcmV1dmUsJGlkZGl2aXNpb24sJGxpYmVsbGUsJHNhaXNvbiwkaW5kaXZzLCRzY29wZSkpOwoKCQkJCQlpZighJGRicmVzdWx0YXQpCgkJCQkJewoJCQkJCQkkZGVzaWduYXRpb24gLj0gJGRiLT5FcnJvck1zZygpOwkJCQoJCQkJCX0KCgkJCQl9CgkJCQkvKgoJCQkJZWxzZQoJCQkJewoJCQkJCS8vbCfDqXByZXV2ZSBlc3QgZMOpasOgIHJlbnNlaWduw6llLCBvbiBmYWl0IHVuIHVwZGF0ZQoJCQkJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIFNFVCBpZGVwcmV1dmUgPSA/LCBpZG9yZ2EgPSA/IFdIRVJFIG5hbWUgPSA/ICI7CgkJCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGlkZXByZXV2ZSwkaWRvcmdhLCRsaWJlbGxlKSk7CgkJCQl9Ly9maW4gZHUgaWYgJGRicmVzdWx0CgkJCQkqLwoKCQl9Ly8gZmluIGR1IGZvcmVhY2gKCQl1bnNldCgkc2NvcGUpOwoJLy99Ly9maW4gZHUgcHJlbWllciBmb3JlYWNoCgkkZGVzaWduYXRpb24gLj0gIlLDqWN1cMOpcmF0aW9uIGRlICIuJGNvbXB0ZXVyLiIgZGl2aXNpb25zIjsKCgoKCSRzdGF0dXMgPSAnT2snOwoJJGFjdGlvbiA9ICdyZXRyaWV2ZV90ZWFtcyc7CgkvL3BpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywkZGVzaWduYXRpb24sJGFjdGlvbik7CgoJCSR0aGlzLT5TZXRNZXNzYWdlKCIkZGVzaWduYXRpb24iKTsKCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdjb21wZXRzJyk7CgoKIwojIEVPRgojCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_div_results.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwokZGIgPSYgJHRoaXMtPkdldERiKCk7Ci8vYSBmYWlyZSAKaWYoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgVXNlJykpCnsKCSR0aGlzLVNldE1lc3NhZ2UoJ21pc3NpbmdwZXJtaXNzaW9uJyk7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdqb3VldXJzJyk7Cn0KLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7Ci8vbWV0dHJlIGxlcyBhdXRvcmlzYXRpb25zCi8vc2kgcGFzIGRlIHJlY29yZF9pZCByZWRpcmVjdGlvbgokc2Fpc29uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwokZGVzaWduYXRpb24gPSAnJzsKJGlkZXByZXV2ZSA9ICcnOwokaWRkaXZpc2lvbiA9ICcnOwokZGlyZWN0aW9uID0gJyc7CiRpbmRpdnMgPSBpc3NldCgkcGFyYW1zWydpbmRpdnMnXSk/JHBhcmFtc1snaW5kaXZzJ106MTsKLy9lY2hvICJsZSB0b3VyIGVzdCBpbmRpdmlkdWVsID8gOiAiLiRpbmRpdnM7CiRlcnJvciA9IDA7IC8vb24gaW5zdGFuY2llIHVuIGNvbXB0ZXVyIGQnZXJyZXVycwoKLy9vbiB2w6lyaWZpZSBxdWUgY2VzIHBhcmFtw6h0cmVzIHNvbnQgY29ycmVjdGVtZW50IHJlbnNlaWduw6lzCgppZihpc3NldCgkcGFyYW1zWydpZGVwcmV1dmUnXSkgJiYgJHBhcmFtc1snaWRlcHJldXZlJ10gIT0gJycpCnsKCSRpZGVwcmV1dmUgPSAkcGFyYW1zWydpZGVwcmV1dmUnXTsKfQplbHNlCnsKCSRlcnJvcisrOwp9CmlmKGlzc2V0KCRwYXJhbXNbJ2lkZGl2aXNpb24nXSkgJiYgJHBhcmFtc1snaWRkaXZpc2lvbiddICE9ICcnKQp7CgkkaWRkaXZpc2lvbiA9ICRwYXJhbXNbJ2lkZGl2aXNpb24nXTsKfQplbHNlCnsKCSRlcnJvcisrOwp9CmlmKGlzc2V0KCRwYXJhbXNbJ2RpcmVjdGlvbiddKSAmJiAkcGFyYW1zWydkaXJlY3Rpb24nXSAhPSAnJykKewoJJGRpcmVjdGlvbiA9ICRwYXJhbXNbJ2RpcmVjdGlvbiddOwp9CmVsc2UKewoJJGVycm9yKys7Cn0KLyoKaWYoaXNzZXQoJHBhcmFtc1snaW5kaXZzJ10pICYmICRwYXJhbXNbJ2luZGl2cyddICE9ICcnKQp7CgkkaW5kaXZzID0gJHBhcmFtc1snaW5kaXZzJ107Cn0KZWxzZQp7CgkkZXJyb3IrKzsKfQoqLwppZigkZXJyb3IgPjApCnsKCSRkZXNpZ25hdGlvbi49ICJQYXJhbcOodHJlcyBtYW5xdWFudHMiOwoJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignZGl2aXNpb25zJyk7Cn0KLy9vbiBpbnN0YW5jaWUgbGEgY2xhc3NlIHNlcnZpY2VuCiRzZXJ2aWNlID0gbmV3IFNlcnZpY2VuKCk7CmlmKCRpbmRpdnMgPT0gJzAnKS8vb24gZXN0IGRhbnMgdW5lIMOpcHJldXZlIHBhciDDqXF1aXBlcwp7CgkkcGFnZSA9ICJ4bWxfcmVzdWx0X2VxdSI7CgkkdmFyID0gImF1dG89MSZEMT0iLiRpZGRpdmlzaW9uOwoJCgkKCWlmKCRkaXJlY3Rpb24gPT0gJ3RvdXInKQoJewoJCSR2YXIuPSImYWN0aW9uPXBvdWxlIjsKCgkJJGxpZW4gPSAkc2VydmljZS0+R2V0TGluaygkcGFnZSwgJHZhcik7CgkJJHhtbCA9IHNpbXBsZXhtbF9sb2FkX3N0cmluZygkbGllbik7CgkJCgkJaWYoJHhtbCA9PT0gRkFMU0UpCgkJewoJCQkvL0xlIHNlcnZpY2UgZXN0IGNvdXDDqQoJCQkkYXJyYXkgPSAwOwoJCQkkbGlnbmVzID0gMDsKCQl9CgkJZWxzZQoJCXsKCQkJJGFycmF5ID0ganNvbl9kZWNvZGUoanNvbl9lbmNvZGUoKGFycmF5KSR4bWwpLCBUUlVFKTsKCQkJJGxpZ25lcyA9IGNvdW50KCRhcnJheVsndG91ciddKTsKCQl9CgkJLy92YXJfZHVtcCgkeG1sKTsKCQkKCQlmb3JlYWNoKCR4bWwgYXMgJHZhbHVlKQoJCXsKCQkJLy8kbGliZWxsZSA9ICR0YWJbJ2xpYmVsbGUnXTsKCQkJLy8kbGllbiA9ICR0YWJbJ2xpZW4nXTsKCQkJJGxpYmVsbGUgPSBodG1sZW50aXRpZXMoJHZhbHVlLT5saWJlbGxlKTsKCQkJLy9vbiB2YSBleHRyYWlyZSBsZSB0b3VyCgoJCQkkbGllbiA9IGh0bWxlbnRpdGllcygkdmFsdWUtPmxpZW4pOwoJCQkkdGFiMSA9IGV4cGxvZGUoIiYiLCR2YWx1ZS0+bGllbik7CgoJCQkkdGFibGVhdSA9IHRyaW0oJHRhYjFbMF0sICdjeF9wb3VsZT0nKTsKCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19kaXZfdG91cnMgKGlkLCBpZGVwcmV1dmUsaWRkaXZpc2lvbixsaWJlbGxlLCAgdGFibGVhdSwgbGllbixzYWlzb24pIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8pIjsKCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGlkZXByZXV2ZSwkaWRkaXZpc2lvbiwkbGliZWxsZSwgJHRhYmxlYXUsJGxpZW4sJHNhaXNvbikpOwoJCX0KCX0JCn0KZWxzZSAvL2VwcmV1dmUgaW5kaXZpZHVlbGxlCnsKCSRwYWdlID0gInhtbF9yZXN1bHRfaW5kaXYiOwoJJHZhciA9ImVwcj0iLiRpZGVwcmV1dmUuIiZyZXNfZGl2aXNpb249Ii4kaWRkaXZpc2lvbjsKCQoJaWYoJGRpcmVjdGlvbiA9PSd0b3VyJykKCXsKCQkvL29uIGRvaXQgcsOpY3Vww6lyZXIgbGUgbGllbiBkdSBncm91cGUgZGVwdWlzIGxhIEZGVFQKCgoJCSR2YXIuPSImYWN0aW9uPXBvdWxlIjsKCgkJJGxpZW4gPSAkc2VydmljZS0+R2V0TGluaygkcGFnZSwgJHZhcik7CgkJJHhtbCA9IHNpbXBsZXhtbF9sb2FkX3N0cmluZygkbGllbiwgJ1NpbXBsZVhNTEVsZW1lbnQnLCBMSUJYTUxfTk9DREFUQSk7CgkJLy92YXJfZHVtcCgkeG1sKTsKCQlpZigkeG1sID09PSBGQUxTRSkKCQl7CgkJCS8vbGUgc2VydmljZSBlc3QgY291cMOpCgkJCSRhcnJheSA9IDA7CgkJCSRsaWduZXMgPSAwOwoJCX0KCQllbHNlCgkJewoJCQkkYXJyYXkgPSBqc29uX2RlY29kZShqc29uX2VuY29kZSgoYXJyYXkpJHhtbCksIFRSVUUpOwoJCQkkbGlnbmVzID0gY291bnQoJGFycmF5Wyd0b3VyJ10pOwoJCX0KCQkvL2VjaG8gImxlIG5iIGRlIGxpZ25lcyBlc3QgOiAiLiRsaWduZXM7CgkJZm9yZWFjaCgkeG1sIGFzICR2YWx1ZSkKCQl7CgkJCS8vJGxpYmVsbGUgPSAkdGFiWydsaWJlbGxlJ107CgkJCS8vJGxpZW4gPSAkdGFiWydsaWVuJ107CgkJCSRsaWJlbGxlID0gaHRtbGVudGl0aWVzKCR2YWx1ZS0+bGliZWxsZSk7CgkJCS8vb24gdmEgZXh0cmFpcmUgbGUgdG91cgoJCQkkdG91cjEgPSBleHBsb2RlKCIgIiwkbGliZWxsZSk7CgkJCSR0b3VyMiA9IHRyaW0oJHRvdXIxWzBdLCdUJyk7CgoJCQkkbGllbiA9IGh0bWxlbnRpdGllcygkdmFsdWUtPmxpZW4pOwoJCQkkdGFiMSA9IGV4cGxvZGUoIiYiLCR2YWx1ZS0+bGllbik7CgoJCQkkdGFibGVhdSA9IHRyaW0oJHRhYjFbMl0sICdjeF90YWJsZWF1PScpOwoKCQkJaWYoJHRhYmxlYXUgIT0gJycpCgkJCXsKCQkJCQoJCQkJLy9PbiBhIHLDqWN1cMOpcsOpIGxlcyDDqWzDqW1lbnRzLCBvbiBwZXV0IGZhaXJlIGwnaW5zZXJ0aW9uIGRhbnMgbm90cmUgYmRkCgkJCQkvL29uIHZhIGQnYWJvcmQgdsOpcmlmaWVyIHNpIGNlcyDDqWzDqW1lbnRzIHNvbnQgcHLDqXNlbnRzIG91IG9uIGNyw6nDqSB1biBpbmRleCBzdXIgbGEgdGFibGUKCQkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZGl2X3RvdXJzIChpZCwgaWRlcHJldXZlLGlkZGl2aXNpb24sbGliZWxsZSwgdG91ciwgdGFibGVhdSwgbGllbixzYWlzb24pIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8sID8pIjsKCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpZGVwcmV1dmUsJGlkZGl2aXNpb24sJGxpYmVsbGUsJHRvdXIyLCAkdGFibGVhdSwkbGllbiwkc2Fpc29uKSk7CgoJCQkJLy9ldCBzaSBvbiBjb250aW51YWl0ID8KCQkJCS8vcmVwcmVuZHJlIGxlcyBpbmZvcyBjaSBkZXNzdXMgcG91ciBsZXMgdHJhaXRlciAhCgkJCQkvL29uIHBvdXJyYWl0IHByw6lwYXJlciBsZXMgZGlmZsOpcmVudHMgdGFncyA6IHBvdWxlLCBjbGFzc2VtZW50LCBwYXJ0aWUuCgkJCQkvL29uIG1ldCDDoCBqb3VyIGxhIHRhYmxlIGRpdmlzaW9ucyBwb3VyIGRpcmUgcXUnb24gYSBiaWVuIHVwbG9hZMOpCgkJCQkkdXBsb2FkZWQgPSAxOwoJCQkJJHF1ZXJ5MiA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2RpdmlzaW9ucyBTRVQgdXBsb2FkZWQgPSA/IFdIRVJFIGlkZGl2aXNpb24gPSA/IEFORCBzYWlzb24gPSA/IjsKCQkJCSRkYnJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MiwgYXJyYXkoJHVwbG9hZGVkLCAkaWRkaXZpc2lvbiwgJHNhaXNvbikpOwoJCQl9CgoKCgoJCX0KCQkkZGVzaWduYXRpb24uPSJUb3VyKHMpIGluc8OpcsOpKHMpIjsKCQkkdGhpcy0+U2V0TWVzc2FnZSgiJGRlc2lnbmF0aW9uIik7CgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluMicsICRyZXR1cm5pZCk7CgoKCgoJfQoJZWxzZWlmKCRkaXJlY3Rpb24gPT0gJ2NsYXNzZW1lbnQnKQoJewoJCS8vb24gcsOpY3Vww6hyZSBsZSBjbGFzc2VtZW50CgkJJHZhci49IiZhY3Rpb249Y2xhc3NlbWVudCI7CgkJJHRhYmxlYXUgPSAnJzsKCQkvL2VjaG8gJHZhcjsKCQlpZihpc3NldCgkcGFyYW1zWyd0YWJsZWF1J10pICYmICRwYXJhbXNbJ3RhYmxlYXUnXSAhPSAnJykKCQl7CgkJCSR0YWJsZWF1ID0gJHBhcmFtc1sndGFibGVhdSddOwoJCX0KCQllbHNlCgkJewoJCQkkZXJyb3IrKzsKCQl9CgkJZWNobyAibGUgdGFibGVhdSBlc3QgOiAiLiR0YWJsZWF1OwoJCSR0b3VyID0gJyc7CgkJaWYoaXNzZXQoJHBhcmFtc1sndG91ciddKSAmJiAkcGFyYW1zWyd0b3VyJ10gIT0gJycpCgkJewoJCQkkdG91ciA9ICRwYXJhbXNbJ3RvdXInXTsKCQl9CgkJZWxzZQoJCXsKCQkJJGVycm9yKys7CgkJfQoKCQkkbGllbiA9ICRzZXJ2aWNlLT5HZXRMaW5rKCRwYWdlLCR2YXIpOwoJCSR4bWwgPSBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGxpZW4sICdTaW1wbGVYTUxFbGVtZW50JywgTElCWE1MX05PQ0RBVEEpOwoJCS8vZWNobyAiPHByZT4iLnZhcl9kdW1wKCRkYXRhKS4iPC9wcmU+IjsKCQkvL3Zhcl9kdW1wKCR4bWwpOwoJCWlmKCR4bWwgPT09IEZBTFNFKQoJCXsKCQkJJGRlc2lnbmF0aW9uLj0iUGFzIGVuY29yZSBkZSByw6lzdWx0YXRzIGRpc3BvbmlibGVzIjsKCQkJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJCQkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdkaXZpc2lvbnMnKTsKCQl9CgkJCgkJCSRhcnJheSA9IGpzb25fZGVjb2RlKGpzb25fZW5jb2RlKChhcnJheSkkeG1sKSwgVFJVRSk7CgkJCSRsaWduZXMgPSBjb3VudCgkYXJyYXlbJ2NsYXNzZW1lbnQnXSk7CgkJCgkJaWYoJGxpZ25lcyA9PSAwKQoJCXsKCQkJJGRlc2lnbmF0aW9uLj0iUGFzIGVuY29yZSBkZSByw6lzdWx0YXRzIGRpc3BvbmlibGVzIjsKCQkJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4yJywkcmV0dXJuaWQpOwoJCX0KCQkKCQkKCQkKCgkJZm9yZWFjaCgkeG1sIGFzICR2YWx1ZSkKCQl7CgkJCS8vJGxpYmVsbGUgPSAkdGFiWydsaWJlbGxlJ107CgkJCS8vJGxpZW4gPSAkdGFiWydsaWVuJ107CgkJCSRyYW5nID0gaHRtbGVudGl0aWVzKCR2YWx1ZS0+cmFuZyk7CgkJCSRub20gPSBodG1sZW50aXRpZXMoJHZhbHVlLT5ub20pOwoJCQkkY2x0ID0gaHRtbGVudGl0aWVzKCR2YWx1ZS0+Y2x0KTsKCQkJJGNsdWIgPSBodG1sZW50aXRpZXMoJHZhbHVlLT5jbHViKTsKCQkJCgkJCS8vb24gZmFpdCB1bmUgY29uZGl0aW9ubmVsbGUgcG91ciByw6ljdXDDqXJlciBsYSBsaWNlbmNlIGR1IGpvdWV1ciBkdSBjbHViCgkJCWlmKCRjbHViID09ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdub21fZXF1aXBlcycpKQoJCQl7CgkJCQkvL8OnYSBtYXRjaCAhIQoJCQl9CgkJCSRwb2ludHMgPSBodG1sZW50aXRpZXMoJHZhbHVlLT5wb2ludHMpOwoKCQkJLy9PbiBhIHLDqWN1cMOpcsOpIGxlcyDDqWzDqW1lbnRzLCBvbiBwZXV0IGZhaXJlIGwnaW5zZXJ0aW9uIGRhbnMgbm90cmUgYmRkCQkJCgkJCS8vT24gZmFpdCB1bmUgY29uZGl0aW9ubmVsbGUgcG91ciBpbmNsdXJlIHVuaXF1ZW1lbnQgbGVzIGdlbnMgZHUgY2x1YiA/CgkJCS8vaWwgZmFpdCBmYWlyZSB1bmUgbm91dmVsbGUgcHLDqWbDqXJlbmNlCgkJCQoJCQkKCQkJCgkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZGl2X2NsYXNzZW1lbnQgKGlkLCBpZGVwcmV1dmUsaWRkaXZpc2lvbix0YWJsZWF1LHRvdXIscmFuZywgbm9tLGNsdCxjbHViLHBvaW50cywgc2Fpc29uKSBWQUxVRVMgKCcnLCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSI7CgkJCS8vZWNobyAkcXVlcnk7CgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpZGVwcmV1dmUsJGlkZGl2aXNpb24sJHRhYmxlYXUsJHRvdXIsJHJhbmcsICRub20sICRjbHQsICRjbHViLCAkcG9pbnRzLCRzYWlzb24pKTsKCgkJCWlmKCEkZGJyZXN1bHQpCgkJCXsKCQkJCSRkZXNpZ25hdGlvbiAuPSAkZGItPkVycm9yTXNnKCk7CgkJCX0KCgoJCX0KCQkkZGVzaWduYXRpb24uPSJDbGFzc2VtZW50KHMpIGluc8OpcsOpKHMpIjsKCQkkdGhpcy0+U2V0TWVzc2FnZSgiJGRlc2lnbmF0aW9uIik7CgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluMicsJHJldHVybmlkKTsKCgl9CgllbHNlaWYoJGRpcmVjdGlvbiA9PSAncGFydGllJykKCXsKCQkkdmFyLj0iJmFjdGlvbj1wYXJ0aWUiOwoJCSR0YWJsZWF1ID0gJyc7CgkJCgkJCgkJaWYoaXNzZXQoJHBhcmFtc1sndGFibGVhdSddKSAmJiAkcGFyYW1zWyd0YWJsZWF1J10gIT0gJycpCgkJewoJCQkkdGFibGVhdSA9ICRwYXJhbXNbJ3RhYmxlYXUnXTsKCQl9CgkJZWxzZQoJCXsKCQkJJGVycm9yKys7CgkJfQoJCQoJCSRsaWVuID0gJHNlcnZpY2UtPkdldExpbmsoJHBhZ2UsJHZhcik7CgkJJHhtbCA9IHNpbXBsZXhtbF9sb2FkX3N0cmluZygkbGllbiwgJ1NpbXBsZVhNTEVsZW1lbnQnLCBMSUJYTUxfTk9DREFUQSk7CgkJLy9lY2hvICI8cHJlPiIudmFyX2R1bXAoJGRhdGEpLiI8L3ByZT4iOwoJCS8vdmFyX2R1bXAoJHhtbCk7CgkJaWYoJHhtbCA9PT0gRkFMU0UpCgkJewoJCQkkZGVzaWduYXRpb24uPSJQYXMgZW5jb3JlIGRlIHBhcnRpZXMgZGlzcG9uaWJsZXMiOwoJCQkkdGhpcy0+U2V0TWVzc2FnZSgiJGRlc2lnbmF0aW9uIik7CgkJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2RpdmlzaW9ucycpOwoJCX0KCQkKCQkJJGFycmF5ID0ganNvbl9kZWNvZGUoanNvbl9lbmNvZGUoKGFycmF5KSR4bWwpLCBUUlVFKTsKCQkJJGxpZ25lcyA9IGNvdW50KCRhcnJheVsncGFydGllJ10pOwoJCQoJCWlmKCRsaWduZXMgPT0gMCkKCQl7CgkJCSRkZXNpZ25hdGlvbi49IlBhcyBlbmNvcmUgZGUgcGFydGllcyBkaXNwb25pYmxlcyI7CgkJCSR0aGlzLT5TZXRNZXNzYWdlKCIkZGVzaWduYXRpb24iKTsKCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluMicsJHJldHVybmlkKTsKCQl9CgkJCgkJCgkJZm9yZWFjaCgkeG1sIGFzICR2YWx1ZSkKCQl7CgkJCS8vJGxpYmVsbGUgPSAkdGFiWydsaWJlbGxlJ107CgkJCS8vJGxpZW4gPSAkdGFiWydsaWVuJ107CgkJCSRsaWJlbGxlID0gaHRtbGVudGl0aWVzKCR2YWx1ZS0+bGliZWxsZSk7CgkJCSR2YWluID0gaHRtbGVudGl0aWVzKCR2YWx1ZS0+dmFpbik7CgkJCSRwZXJkID0gaHRtbGVudGl0aWVzKCR2YWx1ZS0+cGVyZCk7CgkJCSRmb3JmYWl0ID0gaHRtbGVudGl0aWVzKCR2YWx1ZS0+Zm9yZmFpdCk7CgkJCQoJCQkKCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19kaXZfcGFydGllcyAoaWQsIGlkZXByZXV2ZSxpZGRpdmlzaW9uLHRhYmxlYXUsdG91cixsaWJlbGxlLCB2YWluLHBlcmQsZm9yZmFpdCwgc2Fpc29uKSBWQUxVRVMgKCcnLCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSI7CgkJCS8vZWNobyAkcXVlcnk7CgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpZGVwcmV1dmUsJGlkZGl2aXNpb24sJHRhYmxlYXUsJHRvdXIsJGxpYmVsbGUsICR2YWluLCAkcGVyZCwgJGZvcmZhaXQsJHNhaXNvbikpOwoKCQkJaWYoISRkYnJlc3VsdCkKCQkJewoJCQkJJGRlc2lnbmF0aW9uIC49ICRkYi0+RXJyb3JNc2coKTsKCQkJfQoKCgkJfQoJCSRkZXNpZ25hdGlvbi49IlBhcnRpZShzKSBpbnPDqXLDqWUocykiOwoJCSR0aGlzLT5TZXRNZXNzYWdlKCIkZGVzaWduYXRpb24iKTsKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4yJywkcmV0dXJuaWQpOwoJfQoJLy9vbiB2YSB1dGlsaXNlciBjZXR0ZSB2YXJpYWJsZSAocmVjb3JkX2lkKSBjb21tZSBjbMOpIHNlY29uZGFpcmUgZGFucyBsYSBub3V2ZWxsZSB0YWJsZQp9CgoKLy9lbiBmb25jdGlvbiBkZSBsYSB2YWxldXIgZGUgbGEgdmFyaWFibGUgYWN0aW9uIG9uIGTDqWZpbml0IGRpZmbDqXJuZXRzIHNjw6luYXJpaS4KCgoKCgkJCQkJCQoKCiMKIyBFT0YKIwovL2VjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZGV0YWlsc19yZW5jb250cmUudHBsJyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_indivs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwokZGIgPSYgJHRoaXMtPkdldERiKCk7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwovL29uIHbDqXJpZmllIGxlcyBwZXJtaXNzaW9ucwppZighJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBVc2UnKSkKewoJJHRoaXMtPlNldE1lc3NhZ2UoJ1Blcm1pc3Npb24gbWFucXVhbnRlJyk7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdjb21wZXRzJyk7Cn0KJGVycm9yID0gMDsKLy9vbiB2w6lyaWZpZSBsZXMgdmFyaWFibGVzIHJlw6d1ZXMKJHR5cGVfY29tcGV0ID0gJyc7CgppZihpc3NldCgkcGFyYW1zWyd0eXBlX2NvbXBldCddKSAmJiAkcGFyYW1zWyd0eXBlX2NvbXBldCddICE9JycpCnsKCSR0eXBlX2NvbXBldCA9ICRwYXJhbXNbJ3R5cGVfY29tcGV0J107Cn0KZWxzZQp7CgkkZXJyb3IrKzsKfQokY29lZmZpY2llbnQgPSAnJzsKaWYoaXNzZXQoJHBhcmFtc1snY29lZmZpY2llbnQnXSkgJiYgJHBhcmFtc1snY29lZmZpY2llbnQnXSAhPScnKQp7CgkkY29lZmZpY2llbnQgPSAkcGFyYW1zWydjb2VmZmljaWVudCddOwp9CmVsc2UKewoJJGVycm9yKys7Cn0KaWYoJGVycm9yPjApCnsKCSR0aGlzLT5TZXRNZXNzYWdlKCdQYXJhbcOodHJlcyBtYW5xdWFudHMnKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NhbGVuZHJpZXInKTsKfQovL29uIGZhaXQgbGEgcmVxdWV0ZSBwb3VyIHJldGlyZXIgdG91dGVzIGxlcyBsaWNlbmNlcyBpbnNjcml0ZXMgw6AgY2V0dGUgY29tcGV0CiRxdWVyeSA9ICJTRUxFQ1QgbGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWNpcGUgV0hFUkUgdHlwZV9jb21wZXQgPSA/IjsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHR5cGVfY29tcGV0KSk7CgppZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApCnsKCXdoaWxlKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgl7CgkJJGxpY2VuY2UgPSAkcm93WydsaWNlbmNlJ107CgkJcGluZ19hZG1pbl9vcHM6OnJldHJpZXZlX3BhcnRpZXNfc3BpZCgkbGljZW5jZSk7Cgl9Cn0KCiR0aGlzLT5TZXRNZXNzYWdlKCdSZXRyb3V2ZXogbGVzIGluZm9zIGRhbnMgbGUgam91cm5hbCcpOwokdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdjYWxlbmRyaWVyJyk7CiMKI0VPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_organismes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICBQcmVtacOocmUgw6l0YXBlIGRlIHLDqWN1cMOpcmF0aW9uIGRlcyBvcmdhbmlzbWVzICAgICAgICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7Ci8vcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uY2FsY3Vscy5waHAnKTsKCiRjbHViX251bWJlciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjbHViX251bWJlcicpOwokc2Fpc29uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwokZGVzaWduYXRpb24gPSAnJzsKaWYoIWlzc2V0KCRjbHViX251bWJlcikgJiYgJGNsdWJfbnVtYmVyID09JycpCnsKCSRtZXNzYWdlID0gIlZvdHJlIG51bcOpcm8gZGUgY2x1YiBuJ2VzdCBwYXMgY29uZmlndXLDqSAhISI7CgkkdGhpcy0+U2V0TWVzc2FnZSgiJG1lc3NhZ2UiKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbmZpZ3VyYXRpb24nKTsKfQokbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CgovL29uIHbDqXJpZmllIHF1ZSB0b3VzIGxlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgc29udCByZW5zZWlnbsOpcyAodHlwZSkKJHRhYmxlYXUgPSBhcnJheSgnRicsJ1onLCdMJywnRCcpOwovL29uIGluc3RhbmNpZSBsYSBjbGFzc2Ugc2VydmljZQokc2VydmljZSA9IG5ldyBTZXJ2aWNlKCk7CmZvcmVhY2goJHRhYmxlYXUgYXMgJHZhbGV1cikKewoJJHJlc3VsdCA9ICcnOwoJJHJlc3VsdCA9ICRzZXJ2aWNlLT5nZXRPcmdhbmlzbWVzKCIkdmFsZXVyIik7Cgkkc2NvcGUgPSAkdmFsZXVyOwoJLy92YXJfZHVtcCgkcmVzdWx0KTsKCS8qKi8KCS8vb24gdmEgdGVzdGVyIHNpIGxhIHZhcmlhYmxlIGVzdCBiaWVuIHVuIHRhYmxlYXUgICAKCQlpZighaXNfYXJyYXkoJHJlc3VsdCkpICB7CgkJCgkJCSR0aGlzLT5TZXRNZXNzYWdlKCJMZSBzZXJ2aWNlIGVzdCBjb3Vww6kiKTsKCQkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignZXByZXV2ZXMnKTsKCQl9CgoJLy8vb24gaW5pdGlhbGlzZSB1biBjb21wdGV1ciBnw6luw6lyYWwgJGkKCSRpPTA7CgkvL29uIGluaXRpYWxpc2UgdW4gZGV1eGnDqG1lIGNvbXB0ZXVyCgkkY29tcHRldXI9MDsKCQoJCWZvcmVhY2goJHJlc3VsdCBhcyAkY2xlID0+JHRhYikKCQl7CgkKCQkJJGkrKzsKCQkJJGlkb3JnYSA9ICR0YWJbJ2lkJ107CgkJCSRjb2RlICA9ICR0YWJbJ2NvZGUnXTsKCQkJJGxpYmVsbGUgPSAkdGFiWydsaWJlbGxlJ107CgkJCS8vIDEtIG9uIHbDqXJpZmllIHNpIGNldHRlIMOpcHJldXZlIGVzdCBkw6lqw6AgZGFucyBsYSBiYXNlCgkJCSRxdWVyeSA9ICJTRUxFQ1QgaWRvcmdhIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX29yZ2FuaXNtZXMgV0hFUkUgaWRvcmdhID0gPyI7CgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpZG9yZ2EpKTsKCQoJCQkJaWYoJGRicmVzdWx0ICAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPT0gMCkgCgkJCQl7CgkJCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19vcmdhbmlzbWVzIChpZCwgbGliZWxsZSwgaWRvcmdhLCBjb2RlLCBzY29wZSkgVkFMVUVTICgnJywgPywgPywgPywgPykiOwoJCQkJCS8vZWNobyAkcXVlcnk7CgkJCQkJJGNvbXB0ZXVyKys7CgkJCQkJJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRsaWJlbGxlLCRpZG9yZ2EsJGNvZGUsJHNjb3BlKSk7CgkJCgkJCQkJaWYoISRkYnJlc3VsdGF0KQoJCQkJCXsKCQkJCQkJJGRlc2lnbmF0aW9uIC49ICRkYi0+RXJyb3JNc2coKTsJCQkKCQkJCQl9CgoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCS8vbCfDqXByZXV2ZSBlc3QgZMOpasOgIHJlbnNlaWduw6llLCBvbiBmYWl0IHVuIHVwZGF0ZQoJCQkJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX29yZ2FuaXNtZXMgU0VUIGxpYmVsbGUgPSA/LCBjb2RlID0gPywgc2NvcGUgPSA/IFdIRVJFIGlkb3JnYSA9ID8gIjsKCQkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGliZWxsZSwkY29kZSwkc2NvcGUsJGlkb3JnYSkpOwoJCQkJfS8vZmluIGR1IGlmICRkYnJlc3VsdAoJCgkKCQl9Ly8gZmluIGR1IGZvcmVhY2gKCQl1bnNldCgkc2NvcGUpOwp9Ly9maW4gZHUgcHJlbWllciBmb3JlYWNoCiRkZXNpZ25hdGlvbiAuPSAiUsOpY3Vww6lyYXRpb24gZGUgIi4kY29tcHRldXIuIiBvcmdhbmlzbWVzIjsKCgkKCQokc3RhdHVzID0gJ09rJzsKJGFjdGlvbiA9ICdyZXRyaWV2ZV90ZWFtcyc7Ci8vcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCRkZXNpZ25hdGlvbiwkYWN0aW9uKTsKCQoJJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwoJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignY29uZmlndXJhdGlvbicpOwoKIwojIEVPRgojCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_parties.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgVXNlJykpCnsKCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ25lZWRwZXJtaXNzaW9uJykpOwoJcmV0dXJuOwp9CgovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKLy9yZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5jYWxjdWxzLnBocCcpOwoKJG5vdyA9IHRyaW0oJGRiLT5EQlRpbWVTdGFtcCh0aW1lKCkpLCAiJyIpOwokbW9pc19jb3VyYW50ID0gZGF0ZSgnbicpOwokYW5uZWVfY291cmFudGUgPSBkYXRlKCdZJyk7CiRzYWlzb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7CiRsaWNlbmNlID0gJyc7CmlmKGlzc2V0KCRwYXJhbXNbJ2xpY2VuY2UnXSkgJiYgJHBhcmFtc1snbGljZW5jZSddICE9JycpCnsKCSRsaWNlbmNlID0gJHBhcmFtc1snbGljZW5jZSddOwp9CmVsc2UKewoJJHRoaXMtPlNldE1lc3NhZ2UoJ0lsIG1hbnF1ZSBsZSBudW3DqXJvIGRlIGxpY2VuY2UnKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2ZmdHQnKTsKfQoKJGRlc2lnbmF0aW9uID0gJyc7CiRxdWVyeSA9ICJTRUxFQ1QgQ09OQ0FUX1dTKCcgJywgbm9tLCBwcmVub20pIEFTIHBsYXllciBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIGxpY2VuY2UgPSA/IjsKJGRicmV0b3VyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGxpY2VuY2UpKTsKCglpZiAoJGRicmV0b3VyICYmICRkYnJldG91ci0+UmVjb3JkQ291bnQoKSA+IDApCiAgCXsKICAgIAkJd2hpbGUgKCRyb3c9ICRkYnJldG91ci0+RmV0Y2hSb3coKSkKICAgICAgCQl7CgkJCSRwbGF5ZXIgPSAkcm93WydwbGF5ZXInXTsKCQkJLy9yZXR1cm4gJHBsYXllcjsKCQl9CgkKCX0KCWVsc2UKCXsKCQkkdGhpcy0+U2V0TWVzc2FnZSgiSm91ZXVyIGludHJvdXZhYmxlIik7CgkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYigncmVjdXAnKTsKCX0KCi8vb24gcmVkaXJpZ2UgdmVycyBsYSBtw6l0aG9kZSAuLi4KJHNlcnZpY2UgPSBuZXcgcmV0cmlldmVfb3BzKCk7Ci8vJHNlcnZpY2UgPSBuZXcgU2VydmljZW4oKTsKJHJldHJpZXZlID0gJHNlcnZpY2UtPnJldHJpZXZlX3BhcnRpZXNfZmZ0dCgiJGxpY2VuY2UiKTsKCiR0aGlzLT5TZXRNZXNzYWdlKCIkZGVzaWduYXRpb24iKTsKJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYigncmVjdXAnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_parties_spid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyAgICAgICAgICAgUkVDVVBFUkFUSU9OIERFUyBQQVJUSUVTIFNQSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uY2FsY3Vscy5waHAnKTsKJG5vdyA9IHRyaW0oJGRiLT5EQlRpbWVTdGFtcCh0aW1lKCkpLCAiJyIpOwokZXJyb3IgPSAwOwoKJGxpY2VuY2UgPSAkcGFyYW1zWydsaWNlbmNlJ107CiRkZXNpZ25hdGlvbiA9ICcnOwoKCiRxdWVyeSA9ICJTRUxFQ1QgQ09OQ0FUX1dTKCcgJywgbm9tLCBwcmVub20pIEFTIHBsYXllciBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIGxpY2VuY2UgPSA/IEFORCBhY3RpZiA9ICcxJyI7CiRkYnJldG91ciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRsaWNlbmNlKSk7CmlmICgkZGJyZXRvdXIgJiYgJGRicmV0b3VyLT5SZWNvcmRDb3VudCgpID4gMCkKewogICAgd2hpbGUgKCRyb3c9ICRkYnJldG91ci0+RmV0Y2hSb3coKSkKICAgICAgCXsKCQkkcGxheWVyID0gJHJvd1sncGxheWVyJ107CgkJLy9yZXR1cm4gJHBsYXllcjsKCQkkc2VydmljZSA9IG5ldyByZXRyaWV2ZV9vcHMoKTsKCQkkcmVzdWx0YXRzID0gJHNlcnZpY2UtPnJldHJpZXZlX3BhcnRpZXNfc3BpZCgkbGljZW5jZSk7CgkJLy92YXJfZHVtcCgkcmVzdWx0YXRzKTsKCX0KCQp9CmVsc2UKewoJJGRlc2lnbmF0aW9uLj0iSm91ZXVyIGludHJvdXZhYmxlIjsKCSR0aGlzLT5TZXRNZXNzYWdlKCIkZGVzaWduYXRpb24iKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2pvdWV1cnMnKTsKfQoJCgkkdGhpcy0+U2V0TWVzc2FnZSgiJGRlc2lnbmF0aW9uIik7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdyZWN1cCcpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_poule.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwpkZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmNhbGN1bHMucGhwJyk7CiRzZXJ2aWNlID0gbmV3IFNlcnZpY2UoKTsKJHJlc3VsdCA9ICRzZXJ2aWNlLT5nZXRQb3VsZXMoIjIxMDciKTsKLy8kcmVzdWx0ID0gJHNlcnZpY2UtPmdldEVxdWlwZXNCeUNsdWIoIjA3MjkwMjI5IiwiTSIpOwovLyRyZXN1bHQgPSAkc2VydmljZS0+Z2V0Sm91ZXVyUGFydGllcygiMjkyMjcxIik7Cgp2YXJfZHVtcCgkcmVzdWx0KTsKICAgICAKLyoKZm9yZWFjaCgkcmVzdWx0IGFzICRjbGUgPT4kdGFiKQp7CgkKCSRjbGVfYXBwZWwgPSAnQVAnOwoJZWNobyAiJGNsZV9hcHBlbCA8YnIgLz4iOwoJJGxpYmVxdWlwZSA9ICR0YWJbbGliZXF1aXBlXTsKCSRsaWJkaXZpc2lvbiA9ICR0YWJbYWR2bGljXTsKCSRsaWVuZGl2aXNpb24gPSAkdGFiW2xpZW5kaXZpc2lvbl07CgkkaWRwb3VsZSA9ICR0YWJbaWRwb3VsZV07CgkkaWRkaXYgPSAkdGFiW2lkZGl2XTsKCQoJCgkkcXVlcnkgPSAiU0VMRUNUIGFkdmxpYywgY2xlX2FwcGVsIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgV0hFUkUgYWR2bGljID0gPyBBTkQgY2xlX2FwcGVsID0gPyI7CgkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkYWR2bGljLCAkY2xlX2FwcGVsKSk7CglpZigkZGJyZXN1bHQgICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA9PSAwKSB7CgkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzIChpZCxjbGVfYXBwZWwsIGxpY2VuY2UsIGFkdmxpYywgdmQsIG51bWpvdXJuLCBjb2RlY2hhbXAsIGRhdGVfZXZlbnQsIGFkdnNleGUsIGFkdm5vbXByZSwgcG9pbnRyZXMsIGNvZWZjaGFtcCwgYWR2Y2xhb2YpIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIjsKCQllY2hvICRxdWVyeTsKCQkkZGJyZXN1bHRhdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJGNsZV9hcHBlbCwgJGxpY2VuY2UsICRhZHZsaWMsICR2ZCwgJG51bWpvdXJuLCAkY29kZWNoYW1wLCAkZGF0ZV9ldmVudCwgJGFkdnNleGUsICRhZHZub21wcmUsICRwb2ludHJlcywgJGNvZWZjaGFtcCwgJGFkdmNsYW9mKSk7CgkJCgkJaWYoISRkYnJlc3VsdGF0KQoJCXsKCQkJJGVycm9yID0gJGRiLT5FcnJvck1zZygpLicgLS0gJy4kZGItPnNxbDsKCQkJYnJlYWs7CgkJfQovLwl9Cn0KLyoqLwovKgkKCSR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCdzYXZlZF9yZWNvcmQnKSk7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdyZW5jb250cmVzJyk7CiovCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_poule_rencontres.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKLy9yZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5jYWxjdWxzLnBocCcpOwokaWRkaXYgPSAiIjsKJGlkcG91bGUgPSAiIjsKJGlkZXByZXV2ZSA9ICIiOwokbWVzc2FnZSA9ICcnOy8vbGUgbWVzc2FnZSBkZSBzb3J0aWUKJGVycm9yID0gMDsgLy9vbiBpbnN0YW5jaWUgbGUgY29tcHRldXIgZCdlcnJldXJzCmlmKGlzc2V0KCRwYXJhbXNbJ2lkZXByZXV2ZSddKSAmJiAkcGFyYW1zWydpZGVwcmV1dmUnXSAhPSAiIikKewoJJGlkZXByZXV2ZSA9ICRwYXJhbXNbJ2lkZXByZXV2ZSddOwp9CmVsc2UKewoJJGVycm9yKys7Cn0KaWYoaXNzZXQoJHBhcmFtc1snaWRkaXYnXSkgJiYgJHBhcmFtc1snaWRkaXYnXSAhPSAiIikKewoJJGlkZGl2ID0gJHBhcmFtc1snaWRkaXYnXTsKfQplbHNlCnsKCSRlcnJvcisrOwp9CmlmKGlzc2V0KCRwYXJhbXNbJ2lkcG91bGUnXSkgJiYgJHBhcmFtc1snaWRwb3VsZSddICE9ICIiKQp7CgkkaWRwb3VsZSA9ICRwYXJhbXNbJ2lkcG91bGUnXTsKfQplbHNlCnsKCSRlcnJvcisrOwp9CmlmKCRlcnJvciA+MCkKewoJJG1lc3NhZ2UuPSJQYXJhbcOodHJlcyBtYW5xdWFudHMiOwoJJHRoaXMtPlNldG1lc3NhZ2UoIiRtZXNzYWdlIik7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdlcXVpcGVzJyk7Cn0KLy9MZXMgcHLDqWbDqXJlbmNlcwokbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CiRub21fZXF1aXBlcyA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdub21fZXF1aXBlcycpOwokc2Fpc29uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwokdXBkYXRlID0gJzAnOy8vdmFsZXVyIHBhciBkw6lmYXV0CiRzZXJ2aWNlID0gbmV3IFNlcnZpY2VuKCk7CiRwYWdlID0gInhtbF9yZXN1bHRfZXF1IjsKJHZhciA9ICJhdXRvPTEmRDE9Ii4kaWRkaXYuIiZjeF9wb3VsZT0iLiRpZHBvdWxlOwokbGllbiA9ICRzZXJ2aWNlLT5HZXRMaW5rKCRwYWdlLCAkdmFyKTsKJHhtbCA9IHNpbXBsZXhtbF9sb2FkX3N0cmluZygkbGllbiwgJ1NpbXBsZVhNTEVsZW1lbnQnLCBMSUJYTUxfTk9DREFUQSk7CmlmKCR4bWwgPT09IEZBTFNFKQp7CgkvL2xlIHNlcnZpY2UgZXN0IGNvdXDDqQoJJGFycmF5ID0gMDsKCSRsaWduZXMgPSAwOwp9CmVsc2UKewoJJGFycmF5ID0ganNvbl9kZWNvZGUoanNvbl9lbmNvZGUoKGFycmF5KSR4bWwpLCBUUlVFKTsKCSRsaWduZXMgPSBjb3VudCgkYXJyYXlbJ3RvdXInXSk7Cn0KLy9lY2hvICJsZSBuYiBkZSBsaWduZXMgZXN0IDogIi4kbGlnbmVzOwovLyRyZXN1bHQgPSAkc2VydmljZS0+Z2V0UG91bGVSZW5jb250cmVzKCRpZGRpdiwkaWRwb3VsZSk7CgokZGVzaWduYXRpb24gPSAnJzsKLy92YXJfZHVtcCgkcmVzdWx0KTsKLyoqLwovL29uIHZhIHRlc3RlciBsYSB2YWxldXIgZGUgbGEgdmFyaWFibGUgJHJlc3VsdAovL2NlbGEgcGVybWV0IGQnw6l2aXRlciBkZSBib3VjbGVyIHMnaWwgbid5IGEgcmllbiBkYW5zIGxlIHRhYmxlYXUKaWYoIWlzX2FycmF5KCRhcnJheSkpCnsgCgkKCQkvL2xlIHRhYmxlYXUgZXN0IHZpZGUsIGlsIGZhdXQgZW52b3llciB1biBtZXNzYWdlIHBvdXIgbGUgc2lnbmFsZXIKCQkkZGVzaWduYXRpb24uPSAibGUgc2VydmljZSBlc3QgY291cMOpIjsKCQkkdGhpcy0+U2V0TWVzc2FnZSgiJGRlc2lnbmF0aW9uIik7CgkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYigncG91bGVzJyk7Cn0gICAKZWxzZXsKJGk9MDsKZm9yZWFjaCgkeG1sIGFzICRjbGUgPT4kdGFiKQp7CgkKCQoJJGxpYmVsbGUgPSAoaXNzZXQoJHRhYi0+bGliZWxsZSk/IiR0YWItPmxpYmVsbGUiOiIiKTsKCSRlcXVhID0gKGlzc2V0KCR0YWItPmVxdWEpPyIkdGFiLT5lcXVhIjoiIik7CgkkZXF1YiA9IChpc3NldCgkdGFiLT5lcXViKT8iJHRhYi0+ZXF1YiI6IiIpOwoKCS8vb24gZmFpdCBxdWVscXVlIHRyYW5zZm9ybWF0aW9ucyBkZXMgaW5mb3MgcmVjdWVpbGxpZXMKCXByZWdfbWF0Y2hfYWxsKCcjWzAtOV0rIycsJGxpYmVsbGUsJGV4dHJhY3QpOwoJJHRvdXIgPSAkZXh0cmFjdFswXVswXTsKCgkkZXh0cmFjdGlvbiA9IHN1YnN0cigkbGliZWxsZSwtOCk7CgkkZGF0ZV9leHRyYWN0ID0gZXhwbG9kZSgnLycsICRleHRyYWN0aW9uKTsKCSRhbm5lZV9kYXRlID0gJGRhdGVfZXh0cmFjdFsyXSArIDIwMDA7CgkkZGF0ZV9ldmVudCA9ICRhbm5lZV9kYXRlLiItIi4kZGF0ZV9leHRyYWN0WzFdLiItIi4kZGF0ZV9leHRyYWN0WzBdOwoJJHVwbG9hZGVkID0gMDsKCgkkY2x1YmEgPSBzdHJwb3MoJGVxdWEsJG5vbV9lcXVpcGVzKTsKCSRjbHViYiA9IHN0cnBvcygkZXF1Yiwkbm9tX2VxdWlwZXMpOwoKCQlpZiAoJGNsdWJhICE9PSBmYWxzZSB8fCAkY2x1YmIgIT09IGZhbHNlKQoJCXsKCQkJJGNsdWIgPSAxOwoJCQkkYWZmaWNoYWdlID0gMTsKCQl9CgkJZWxzZQoJCXsKCQkJJGNsdWIgPSAwOwoJCX0KCQoJJHNjb3JlYSA9IChpc3NldCgkdGFiLT5zY29yZWEpPyIkdGFiLT5zY29yZWEiOiIiKTsKCSRzY29yZWIgPSAoaXNzZXQoJHRhYi0+c2NvcmViKT8iJHRhYi0+c2NvcmViIjoiIik7CgkkbGllbiA9IChpc3NldCgkdGFiLT5saWVuKT8iJHRhYi0+bGllbiI6IiIpOwoJCgkvLwoJLy9vbiB2w6lyaWZpZSBxdWUgbGUgc2NvcmUgYSBiaWVuIMOpdMOpIHNhaXNpCgkvL3NpIGxlIHNjb3JlIGVzdCBzYWlzaSBvbiBvYnRpZW50IHVuIHN0cmluZyBwb3VyIGxlcyB2YXJpYWJsZXMgc2NvcmVhIGV0IHNjb3JlYgoJLy9zaW5vbiBpbCBzJ2FnaXQgZCd1biBhcnJheQkKCQoJCWlmKGlzX2FycmF5KCRzY29yZWEpICYmIGlzX2FycmF5KCRzY29yZWIpKQoJCXsKCQkJLy9sZSBzY29yZSBuJ2VzdCBwYXMgcGFydmVudSBvdSBsZSBtYXRjaCBuJ2EgcGFzIMOpdMOpIGpvdcOpCgkJCS8vT24gbCdlbnJlZ2lzdHJlIHFkIG3Dqm1lCgkJCSRzY29yZWEgPSAwOwoJCQkkc2NvcmViID0gMDsKCQkJJHVwZGF0ZSA9IDA7CQkKCQl9CgkJCgkvL29uIHbDqXJpZmllIHNpIGwnZW5yZWdpc3RyZW1lbnQgZXN0IGTDqWrDoCBsw6AKCSRxdWVyeSA9ICJTRUxFQ1QgaWQsbGllbiwgc2NvcmVhLCBzY29yZWIgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcG91bGVzX3JlbmNvbnRyZXMgV0hFUkUgaWRkaXYgPT8gQU5EIGlkcG91bGUgPSA/IEFORCBkYXRlX2V2ZW50ID0gPyBBTkQgZXF1YSA9ID8gQU5EIGVxdWIgPSA/IjsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpZGRpdiwkaWRwb3VsZSwgJGRhdGVfZXZlbnQsJGVxdWEsJGVxdWIpKTsKCQoJLy9pbCBuJ3kgYSBwYXMgZCdlbnJlZ2lzdHJlbWVudCBhdXBhcmF2YW50LCBvbiBwZXV0IGNvbnRpbnVlcgoJCQkKCQlpZigkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPT0gMCkgCgkJewoJCQkkcXVlcnkxID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wb3VsZXNfcmVuY29udHJlcyAoaWQsc2Fpc29uLGlkcG91bGUsIGlkZGl2LCBjbHViLCB0b3VyLCBkYXRlX2V2ZW50LCB1cGxvYWRlZCwgbGliZWxsZSwgZXF1YSwgZXF1Yiwgc2NvcmVhLCBzY29yZWIsIGxpZW4pIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIjsKCQkJLy9lY2hvICRxdWVyeTsKCQkJJGkrKzsKCQkJJHVwbG9hZGVkID0gMDsKCQkJJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MSxhcnJheSgkc2Fpc29uLCRpZHBvdWxlLCAkaWRkaXYsICRjbHViLCAkdG91ciwgJGRhdGVfZXZlbnQsICR1cGxvYWRlZCwgJGxpYmVsbGUsICRlcXVhLCAkZXF1YiwgJHNjb3JlYSwgJHNjb3JlYiwgJGxpZW4pKTsKCQkKCQkJCWlmKCEkZGJyZXN1bHRhdCkKCQkJCXsKCQkJCQkkZGVzaWduYXRpb24uPSAkZGItPkVycm9yTXNnKCk7CgkJCQkJCQkJCgoJCQkJfQoJCX0KCQllbHNlaWYoJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4wKQoJCXsKCQkJLy9pbCB5IGEgZMOpasOgIHVuIGVucmVnaXN0cmVtZW50LCBsZSBzY29yZSBlc3QtaWwgw6Agam91ciA/CgkJCSR1cGRhdGUgPSAxOwoJCQkkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwoJCQkkaWQgPSAkcm93WydpZCddOwoJCQkkc2NvcmVBID0gJHJvd1snc2NvcmVhJ107CgkJCSRzY29yZUIgPSAkcm93WydzY29yZWInXTsKCQkJCQoJCQkJaWYoJHNjb3JlQSA9PTAgJiYgJHNjb3JlQiA9PTApCgkJCQl7CgkJCQkJJHF1ZXJ5MyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIFNFVCBzY29yZWEgPSA/LCBzY29yZWIgPSA/IFdIRVJFIGlkID0gPyI7CgkJCQkJJGRicmVzdWx0QSA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkzLCBhcnJheSgkc2NvcmVhLCAkc2NvcmViLCAkaWQpKTsKCQkJCQkkaSsrOwoJCQkJCWlmKCEkZGJyZXN1bHRBKQoJCQkJCXsKCQkJCQkJJGRlc2lnbmF0aW9uLj0gJGRiLT5FcnJvck1zZygpOwoJCQkJCX0KCQkJCX0KCQl9CgkJCgkKCQoJLy9vbiByZW1wbGl0IGxlIGNhbGVuZHJpZXIgPwoJaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BvcHVsYXRlX2NhbGVuZGFyJyk9PSdPdWknKQoJewoJCQoJCQkvL29uIHByw6lwYXJlIGxlIHRhZwoJCQkkaW5kaXZzID0gMDsvL3B1aXNxdSdvbiBlc3QgZGFucyB1biBjb250ZXh0ZSBkJ8OpcXVpcGVzCgkJCSR0YWcgPSAie1BpbmcgYWN0aW9uPSdwYXItZXF1aXBlcyciOwoJCQkkdGFnLj0iIGlkZXByZXV2ZT0nJGlkZXByZXV2ZSciOwoJCQkKCQkJCWlmKGlzc2V0KCRkYXRlX2V2ZW50KSAmJiAkZGF0ZV9ldmVudCAhPScnKQoJCQkJewoJCQkJCSR0YWcuPSAiIGRhdGVfZGVidXQ9JyRkYXRlX2V2ZW50JyI7CgkJCQl9CgkJCQlpZihpc3NldCgkZGF0ZV9ldmVudCkgJiYgJGRhdGVfZXZlbnQgIT0nJykKCQkJCXsKCQkJCQkkdGFnLj0gIiBkYXRlX2Zpbj0nJGRhdGVfZXZlbnQnIjsKCQkJCX0KCQkJJHRhZy49In0iOwoJCQkvL09uIGZhaXQgbCdpbmNsdXNpb24gZHMgbGEgYmRkCgkJCS8vIG9uIHbDqXJpZmllIGQnYWJvcmQgcXVlIGwnZW5yZWdpc3RyZW1lbnQgbidlc3QgcGFzIGTDqWrDoCBlbiBiZGQKCQkJJHF1ZXJ5ID0gIlNFTEVDVCBudW1qb3VybiwgZGF0ZV9kZWJ1dCwgZGF0ZV9maW4sIGlkZXByZXV2ZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jYWxlbmRyaWVyIFdIRVJFICBudW1qb3VybiA9ID8gQU5EIGRhdGVfZGVidXQgPSA/IEFORCBkYXRlX2ZpbiA9PyBBTkQgaWRlcHJldXZlID0gPyAiOy8vQU5EIHNjb3JlYSAhPTAgQU5EIHNjb3JlYiAhPTAiOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkdG91ciwgJGRhdGVfZXZlbnQsICRkYXRlX2V2ZW50LCRpZGVwcmV1dmUpKTsKCgkJCQlpZiAoJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPT0wKQoJCQkJewoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NhbGVuZHJpZXIgKGlkLGRhdGVfZGVidXQsZGF0ZV9maW4saWRlcHJldXZlLCBudW1qb3Vybix0YWcsc2Fpc29uKSBWQUxVRVMgKCAnJywgPywgPywgPywgPywgPywgPykiOwoJCQkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkZGF0ZV9ldmVudCwkZGF0ZV9ldmVudCwkaWRlcHJldXZlLCR0b3VyLCR0YWcsJHNhaXNvbikpOwoJCQkJCQkKCQkJCQkJaWYoJGRicmVzdWx0KQoJCQkJCQl7CgkJCQkJCQkkZGVzaWduYXRpb24uPSAkZGItPkVycm9yTXNnKCk7CgkJCQkJCX0KCQkJCX0KCQkJCQoKCQkKCX0KfS8vZmluIGR1IGZvcmVhY2gKfS8vZmluIGR1IGlmIGlzX2FycmF5KCRyZXN1bHQpCgokY29tcHRhZ2UgPSAkaTsKJHN0YXR1cyA9ICdQb3VsZXMnOwokZGVzaWduYXRpb24uPSAiTWlzZSDDoCBqb3VyIGRlICIuJGNvbXB0YWdlLiIgcmVuY29udHJlcyBkZSBsYSBwb3VsZSAiLiRpZHBvdWxlOwokcXVlcnkgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwIChpZCwgZGF0ZWNyZWF0ZWQsIHN0YXR1cywgZGVzaWduYXRpb24sIGFjdGlvbikgVkFMVUVTICgnJywgPywgPywgPywgPykiOwokYWN0aW9uID0gInJldHJpZXZlX3BvdWxlc19yZW5jb250cmVzIjsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG5vdywkc3RhdHVzLCAkZGVzaWduYXRpb24sJGFjdGlvbikpOwppZighJGRicmVzdWx0KQp7CgkkZGVzaWduYXRpb24uPSAkZGItPkVycm9yTXNnKCk7IAp9CgkKCSR0aGlzLT5TZXRNZXNzYWdlKCIkZGVzaWduYXRpb24iKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3BvdWxlcycpOwovKgkqLwojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_sit_mens.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyAgICAgICAgICAgICAgICAgICBSw6ljdXDDqXJhdGlvbiBkZSBsYSBzaXR1YXRpb24gbWVuc3VlbGxlICAgICAgICAgICAgICAgICAgIyMjCiMjIyAgICAgICAgICAgICAgICAgICBBdXRldXIgQ2xhdWRlIFNJT0hBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9vbiB2w6lyaWZpZSBsZXMgcGVybWlzc2lvbnMKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIFVzZScpKQp7CgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicpKTsKCXJldHVybjsKfQovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKLy9yZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJ2luY2x1ZGUvcHJlZnMucGhwJyk7CiRkYj0kZ0Ntcy0+R2V0RGIoKTsKCi8vbGVzIHByw6lmw6lyZW5jZXMKJG1vaXNfY291cmFudCA9IGRhdGUoJ24nKTsKJG1vaXNfZnJhbmNhaXMgPSBhcnJheSgnSmFudmllcicsICdGw6l2cmllcicsJ01hcnMnLCAnQXZyaWwnLCAnTWFpJywgJ0p1aW4nLCAnSnVpbGxldCcsJ0Fvw7t0JywgJ1NlcHRlbWJyZScsICdPY3RvYnJlJywnTm92ZW1icmUnLCdEw6ljZW1icmUnKTsKJGFubmVlX2NvdXJhbnRlID0gZGF0ZSgnWScpOwokbW9pc19yZWVsID0gJG1vaXNfY291cmFudCAtIDE7CiRtb2lzX3NtID0gJG1vaXNfZnJhbmNhaXNbIiRtb2lzX3JlZWwiXTsKJG1vaXNfc2l0X21lbnMgPSAkbW9pc19zbS4iICIuJGFubmVlX2NvdXJhbnRlOwokc2Fpc29uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwokZGVzaWduYXRpb24gPSAnJzsgLy9pbnN0YW5jaWF0aW9uIGR1IG1lc3NhZ2UgZGUgc29ydGllCgovL2VjaG8gImxlIG1vaXMgZGUgbGEgc2l0dWF0aW9uIG1lbnN1ZWxsZSBlc3QgOiAiLiRtb2lzX3NpdF9tZW5zOwokbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CgokbGljZW5jZSA9ICcnOwoKCWlmKCFpc3NldCgkcGFyYW1zWydsaWNlbmNlJ10pICYmICRwYXJhbXNbJ2xpY2VuY2UnXSA9PScnKQoJewoJCSRkZXNpZ25hdGlvbiAuPSAnUGFzIGRlIG7CsCBkZSBsaWNlbmNlJzsKCQkkdGhpcy0+U2V0TWVzc2FnZSgkZGVzaWduYXRpb24pOwoJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3JlY3VwJyk7Cgl9CgllbHNlCgl7CgkJJGxpY2VuY2UgPSAkcGFyYW1zWydsaWNlbmNlJ107Cgl9CgovL29uIHbDqXJpZmllIHF1ZSBsZSBqb3VldXIgZW4gcXVlc3Rpb24gZXN0IGJpZW4gYWN0aWYKJHF1ZXJ5ID0gIlNFTEVDVCBDT05DQVRfV1MoJyAnLG5vbSxwcmVub20pIGFzIHBsYXllciwgbGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIGxpY2VuY2UgPSA/IEFORCBhY3RpZiA9ICcxJyI7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRsaWNlbmNlKSk7Ci8vbGUgam91ZXVyIG5lIHJlbXBsaXQgcGFzIGxlcyBjb25kaXRpb25zIGRlIGxhIHJlcXVldGUsIG9uIHJlbnZvaXQgYXZlYyB1biBtZXNzYWdlCmlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID09IDApCnsKCSR0aGlzLT5TZXRNZXNzYWdlKCJKb3VldXIgZMOpc2FjdGl2w6kiKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3NpdHVhdGlvbicpOwp9CmVsc2UKewovL2xlIGpvdWV1ciBlc3QgYWN0aWYsIG9uIHZhIHbDqXJpZmllciBzaSBzYSBzaXR1YXRpb24gbWVuc3VlbGxlIGVzdCBkw6lqw6AgZW5yZWdpc3Ryw6llCiRxdWVyeSA9ICJTRUxFQ1QgbGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19zaXRfbWVucyBXSEVSRSBsaWNlbmNlID0gPyBBTkQgbW9pcyA9ID8gQU5EIGFubmVlID0gPyI7CiRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGxpY2VuY2UsJG1vaXNfY291cmFudCwkYW5uZWVfY291cmFudGUpKTsKCQoJaWYoJGRicmVzdWx0YXQgJiYgJGRicmVzdWx0YXQtPlJlY29yZENvdW50KCk+MCl7CgkJLy9sYSBzaXR1YXRpb24gbWVuc3VlbGxlIGVzdCBkw6lqw6Agw6Agam91ciwgb24gcGFzc2UKCQkkdGhpcy0+U2V0TWVzc2FnZSgnU2l0dWF0aW9uIG1lbnN1ZWxsZSBkw6lqw6Agw6Agam91ciAhJyk7CgkJJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignam91ZXVycycpOwoJCQoJfQoJZWxzZQoJewoJCQoJCSRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CgkJJHBsYXllciA9ICRyb3dbJ3BsYXllciddOwoJCSRzZXJ2aWNlID0gbmV3IHJldHJpZXZlX29wcygpOwoJCSRzaXRfbWVucyA9ICRzZXJ2aWNlLT5yZXRyaWV2ZV9zaXRfbWVucygiJGxpY2VuY2UiKTsKCQkvLyRzZXJ2aWNlLT5yZXRyaWV2ZV9zaXRfbWVucygiJGxpY2VuY2UiKTsKCQkvL29uIHJhbcOobmUgdmVycyBsYSBsaWIgcXVpIHZhIHRyYWl0ZXIgbGEgc2l0dWF0aW9uIG1lbnN1ZWxsZQoJCQoJCQkJCQkKCX0vL2ZpbiBkZSBsYSB2w6lyaWZpY2F0aW9uIGRlIGxhIHNpdF9tZW5zIGVuIGJkZAp9Ly9maW4gZHUgdGVzdCBzaSBsZSBqb3VldXIgZXN0IGFjdGlmIGVuIGJkZAoKJHRoaXMtPlNldE1lc3NhZ2UoJ0NvbnN1bHRleiBsZSBqb3VybmFsJyk7CiR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ3JlY3VwJyk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_teams.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICBQcmVtacOocmUgw6l0YXBlIGRlIHLDqWN1cMOpcmF0aW9uIGRlcyDDqXF1aXBlcyAgICAgICAgICAgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCgppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwovL3JlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmNhbGN1bHMucGhwJyk7CgokY2x1Yl9udW1iZXIgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY2x1Yl9udW1iZXInKTsKJHNhaXNvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKJGRlc2lnbmF0aW9uID0gJyc7CmlmKCFpc3NldCgkY2x1Yl9udW1iZXIpICYmICRjbHViX251bWJlciA9PScnKQp7CgkkbWVzc2FnZSA9ICJWb3RyZSBudW3DqXJvIGRlIGNsdWIgbidlc3QgcGFzIGNvbmZpZ3Vyw6kgISEiOwoJJHRoaXMtPlNldE1lc3NhZ2UoIiRtZXNzYWdlIik7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdjb25maWd1cmF0aW9uJyk7Cn0KJG5vdyA9IHRyaW0oJGRiLT5EQlRpbWVTdGFtcCh0aW1lKCkpLCAiJyIpOwovL29uIGluc3RhbmNpZSBsYSBjbGFzc2Ugc2VydmljZQokc2VydmljZSA9IG5ldyBTZXJ2aWNlbigpOwokdHlwZSA9ICcnOwokcmVzdWx0ID0gJyc7CmlmKGlzc2V0KCRwYXJhbXNbJ3R5cGUnXSkgJiYgJHBhcmFtc1sndHlwZSddICE9JycpCnsKCSR0eXBlID0gJHBhcmFtc1sndHlwZSddOwp9CgokcGFnZSA9ICJ4bWxfZXF1aXBlIjsKJHZhciA9ICJudW1jbHU9Ii4kY2x1Yl9udW1iZXI7CgoJaWYgKGlzc2V0KCR0eXBlKSAmJiAkdHlwZSA9PSAnJykKCXsKCQkvLyRyZXN1bHQgPSAkc2VydmljZS0+Z2V0RXF1aXBlc0J5Q2x1YigiJGNsdWJfbnVtYmVyIik7CgkJCgkJJGNocHQgPSAiQSI7IC8vcG91ciBhdXRyZXMgY2hhbXBpb25uYXQKCQkkdHlwZV9jb21wZXQgPSAnVSc7Ly9wb3VyIHVuZGVmaW5lZAoJCSR2YXIuPSIiOwoJfQoJZWxzZWlmKCR0eXBlID09J00nKQoJewoJCQoJCSR0eXBlX2NvbXBldCA9ICcxJzsKCQkkaWRlcHJldXZlID0gJzEwNzMnOwoJCSR2YXIuPSImdHlwZT1NIjsKCX0KCWVsc2VpZigkdHlwZSA9PSAnRicpCgl7CgkJJHZhci49IiZ0eXBlPUYiOwoJCSR0eXBlX2NvbXBldCA9ICcxJzsKCQkkaWRlcHJldXZlID0gJzIwMTInOwoJfQoJJGxpZW4gPSAkc2VydmljZS0+R2V0TGluaygkcGFnZSwkdmFyKTsKCSR4bWwgPSBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGxpZW4sICdTaW1wbGVYTUxFbGVtZW50JywgTElCWE1MX05PQ0RBVEEpOwoJaWYoJHhtbCA9PT0gRkFMU0UpCgl7CgkJJHRoaXMtPlNldE1lc3NhZ2UoIkxlIHNlcnZpY2UgZXN0IGNvdXDDqSIpOwoJCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2VxdWlwZXMnKTsKCX0KCWVsc2UKCXsKCQkkYXJyYXkgPSBqc29uX2RlY29kZShqc29uX2VuY29kZSgoYXJyYXkpJHhtbCksIFRSVUUpOwoJfQovL3Zhcl9kdW1wKCR4bWwpOwovKiovCi8vb24gdmEgdGVzdGVyIHNpIGxhIHZhcmlhYmxlIGVzdCBiaWVuIHVuIHRhYmxlYXUgICAKCQoKLy8vb24gaW5pdGlhbGlzZSB1biBjb21wdGV1ciBnw6luw6lyYWwgJGkKJGk9MDsKLy9vbiBpbml0aWFsaXNlIHVuIGRldXhpw6htZSBjb21wdGV1cgokY29tcHRldXI9MDsKZm9yZWFjaCgkeG1sIGFzICRjbGUgPT4kdGFiKQp7CgkKCSRpKys7CgkkbGliZXF1aXBlID0gKGlzc2V0KCR0YWItPmxpYmVxdWlwZSk/IiR0YWItPmxpYmVxdWlwZSI6IiIpOwoJJG5ld3BoYXNlID0gZXhwbG9kZSAoIi0iLCRsaWJlcXVpcGUpOwoJLy9lY2hvICJsYSBwaGFzZSBlc3QgIi4kbmV3cGhhc2VbMV07CgkkcGhhc2UgPSBzdWJzdHIoJG5ld3BoYXNlWzFdLCAtMSk7CgkkbmV3X2VxdWlwZSA9ICRuZXdwaGFzZVswXTsKCS8vZWNobyAibGEgcGhhc2UgZXN0ICIuJHBoYXNlOwoJCgkkbGliZGl2aXNpb24gPSAoaXNzZXQoJHRhYi0+bGliZGl2aXNpb24pPyIkdGFiLT5saWJkaXZpc2lvbiI6IiIpOwoJJGxpZW5kaXZpc2lvbiA9IChpc3NldCgkdGFiLT5saWVuZGl2aXNpb24pPyIkdGFiLT5saWVuZGl2aXNpb24iOiIiKTsKCSR0YWJsZWF1ID0gcGFyc2Vfc3RyKCRsaWVuZGl2aXNpb24sICRvdXRwdXQpOwoJLy9lY2hvICR0YWJsZWF1OwoJJGlkcG91bGUgPSAkb3V0cHV0WydjeF9wb3VsZSddOwoJJGlkZGl2ID0gJG91dHB1dFsnRDEnXTsKCQoJCgkKCS8vJHR5cGVfY29tcGV0ID0gJHR5cGU7CgkKCQoJJHF1ZXJ5ID0gIlNFTEVDVCBwaGFzZSwgc2Fpc29uLCBsaWVuZGl2aXNpb24gRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZXF1aXBlcyBXSEVSRSBsaWVuZGl2aXNpb24gPSA/IEFORCBzYWlzb24gPSA/IjsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRsaWVuZGl2aXNpb24sICRzYWlzb24pKTsKCQoJCWlmKCRkYnJlc3VsdCAgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID09IDApIAoJCXsKCQkJLy9PbiB2YSBlc3NheWVyIGRlIGNyw6llciB1biB0YWcgcG91ciBhaWRlciDDoCBhZmZpY2hlciBsZXMgw6lxdWlwZXMKCQkJLy9PbiByw6ljdXDDqHJlIGxlIG1hc3RfaW5zZXJ0X2lkIGQnYWJvcmQKCQkJJHF1ZXJ5MSA9ICJTSE9XIFRBQkxFIFNUQVRVUyBMSUtFICciLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZXF1aXBlcycgIjsKCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTEpOwoJCQkkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwoJCQkkcmVjb3JkX2lkID0gJHJvd1snQXV0b19pbmNyZW1lbnQnXTsKCQkJJHRhZyA9IHBpbmdfYWRtaW5fb3BzOjp0YWdfZXF1aXBlKCRyZWNvcmRfaWQpOwoJCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMgKGlkLCBzYWlzb24sIHBoYXNlLCBsaWJlcXVpcGUsIGxpYmRpdmlzaW9uLCBsaWVuZGl2aXNpb24sIGlkcG91bGUsIGlkZGl2LCB0eXBlX2NvbXBldCwgdGFnLCBpZGVwcmV1dmUpIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIjsKCQkJLy9lY2hvICRxdWVyeTsKCQkJJGNvbXB0ZXVyKys7CgkJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkc2Fpc29uLCAkcGhhc2UsICRuZXdfZXF1aXBlLCAkbGliZGl2aXNpb24sICRsaWVuZGl2aXNpb24sICRpZHBvdWxlLCAkaWRkaXYsICR0eXBlX2NvbXBldCwgJHRhZywgJGlkZXByZXV2ZSkpOwoJCQoJCQlpZighJGRicmVzdWx0YXQpCgkJCXsKCQkJCSRkZXNpZ25hdGlvbiAuPSAkZGItPkVycm9yTXNnKCk7CQkJCgkJCX0KCgkJfS8vZmluIGR1IGlmICRkYnJlc3VsdAoJCgkKfS8vIGZpbiBkdSBmb3JlYWNoCgokZGVzaWduYXRpb24gLj0gIlLDqWN1cMOpcmF0aW9uIGRlICIuJGNvbXB0ZXVyLiIgw6lxdWlwZXMiOwoKCWlmKCRjb21wdGV1ciA+MCkKCXsKCQkkZGVzaWduYXRpb24uPSI8YnIgLz5JbmRpcXVleiBsZSB0eXBlIGRlIGNvbXDDqXRpdGlvbiBkZXMgw6lxdWlwZXMgcsOpY3Vww6lyw6llcy4iOwoJfQoJCiRzdGF0dXMgPSAnT2snOwokYWN0aW9uID0gJ3JldHJpZXZlX3RlYW1zJzsKLy9waW5nX2FkbWluX29wczo6ZWNyaXJlam91cm5hbCgkbm93LCRzdGF0dXMsJGRlc2lnbmF0aW9uLCRhY3Rpb24pOwoJCgkkdGhpcy0+U2V0TWVzc2FnZSgiJGRlc2lnbmF0aW9uIik7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdlcXVpcGVzJyk7CgojCiMgRU9GCiMKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.retrieve_users.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKaWYoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgVXNlJykpCnsKCSR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicpKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2pvdWV1cnMnKTsKfQpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3ByZWZzLnBocCcpOwokbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CiRzYWlzb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7CiRjbHViX251bWJlciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjbHViX251bWJlcicpOwovLwokbW9pc19jb3VyYW50ID0gZGF0ZSgnbicpOy8vTW9pcyBhdSBmb3JtYXQgMSwgMiwgMyBldGMuLi4uCiRhbm5lZV9jb3VyYW50ZSA9IGRhdGUoJ1knKTsvL2wnYW5uw6llIGF1IGZvcm1hdCAwMDAwCiRtb2lzX2ZyYW5jYWlzID0gYXJyYXkoJ0phbnZpZXInLCAnRsOpdnJpZXInLCdNYXJzJywgJ0F2cmlsJywgJ01haScsICdKdWluJywgJ0p1aWxsZXQnLCdBb8O7dCcsICdTZXB0ZW1icmUnLCAnT2N0b2JyZScsJ05vdmVtYnJlJywnRMOpY2VtYnJlJyk7CiRub3cgPSB0cmltKCRkYi0+REJUaW1lU3RhbXAodGltZSgpKSwgIiciKTsKJG1vaXNfcmVlbCA9ICRtb2lzX2NvdXJhbnQgLSAxOy8vcG91ciBhZmZpY2hlciBsZSBtb2lzIGF1IGZvcm1hdCBmcmFuw6dhaXMKJG1vaXNfc20gPSAkbW9pc19mcmFuY2Fpc1siJG1vaXNfcmVlbCJdOwokbW9pc19zaXRfbWVucyA9ICRtb2lzX3NtLiIgIi4kYW5uZWVfY291cmFudGU7CiRqb3VyID0gZGF0ZSgnaicpOwovLwokZGVzaWduYXRpb24gPSAnJzsKCmlmKCFpc3NldCgkY2x1Yl9udW1iZXIpIHx8ICRjbHViX251bWJlciA9PScnKQp7CgkkdGhpcy0+U2V0TWVzc2FnZSgnTGUgbnVtw6lybyBkZSBjbHViIG5cJ2VzdCBwYXMgZMOpZmluaSAhJyk7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdjb25maWd1cmF0aW9uJyk7Cn0KCi8vJHNlcnZpY2UgPSBuZXcgU2VydmljZUIoKTsKLy8kcmVzdWx0ID0gJHNlcnZpY2UtPmdldExpY2VuY2VzQnlDbHViKCIkY2x1Yl9udW1iZXIiKTsKCi8vY2ktZGVzc291cywgb24gbWV0IMOgIGpvdXIgbGVzIGpvdWV1cnMgc2UgdHJvdXZhbnQgZGFucyBsYSBiYXNlIGNsYXNzZW1lbnQgZGUgbGEgRkZUVAppZihpc3NldCgkcGFyYW1zWydkaXJlY3Rpb24nXSkgJiYgJHBhcmFtc1snZGlyZWN0aW9uJ109PSAiZmZ0dCIpCnsKCSRwYWdlID0gInhtbF9saXN0ZV9qb3VldXIiOwoJJHNlcnZpY2UgPSBuZXcgU2VydmljZW4oKTsKCS8vcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIAoJJHZhciA9ICJjbHViPSIuJGNsdWJfbnVtYmVyOwoJJGxpZW4gPSAkc2VydmljZS0+R2V0TGluaygkcGFnZSwkdmFyKTsKCSR4bWwgPSBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGxpZW4pOwoJCgkkaSA9MDsvL2NvbXB0ZXVyIHBvdXIgbGVzIG5vdXZlbGxlcyBpbmNsdXNpb25zCgkkYSA9IDA7Ly9jb21wdGV1ciBwb3VyIGxlcyBtaXNlcyDDoCBqb3VyCglmb3JlYWNoKCR4bWwgYXMgJHRhYikKCXsKCQkkbGljZW5jZSA9IChpc3NldCgkdGFiLT5saWNlbmNlKT8iJHRhYi0+bGljZW5jZSI6IiIpOwoJCSRhY3RpZiA9IDE7CgkJCQoJCQkvL2xlIGpvdWV1ciBleGlzdGUgZMOpasOgICwgb24gZmFpdCB1biB1cGdyYWRlCgkJCS8vb24gdsOpcmlmaWUKCQkkYSsrOwoJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgU0VUIGFjdGlmID0gPyBXSEVSRSBsaWNlbmNlID0gPyI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGFjdGlmLCAkbGljZW5jZSkpOwoJCQkJCgl9Ly8gZmluIGR1IGZvcmVhY2gKCS8vb24gcmVkaXJpZ2Ugc3VyIGwnb25nbGV0IGpvdWV1cnMKCSRtZXNzYWdlID0gJGEuIiBtaXNlcyDDoCBqb3VyIjsKCSR0aGlzLT5TZXRNZXNzYWdlKCRtZXNzYWdlKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2pvdWV1cnMnKTsKfQplbHNlIAp7CgkkcGFnZSA9ICJ4bWxfbGljZW5jZV9iIjsKCSRzZXJ2aWNlID0gbmV3IFNlcnZpY2VuKCk7CgkvL3BhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyAKCSR2YXI9ImNsdWI9Ii4kY2x1Yl9udW1iZXI7CgkkbGllbiA9ICRzZXJ2aWNlLT5HZXRMaW5rKCRwYWdlLCR2YXIpOwoJZWNobyAkbGllbjsKCXZhcl9kdW1wKCRsaWVuKTsKCSR4bWwgPSBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGxpZW4sICdTaW1wbGVYTUxFbGVtZW50JywgTElCWE1MX05PQ0RBVEEpOwoJdmFyX2R1bXAoJHhtbCk7CglpZigkeG1sID09PSBGQUxTRSkKCXsKCQkkYXJyYXkgPSAwOwoJCSRsaWduZXMgPSAwOwoJfQoJZWxzZQoJewoJCSRhcnJheSA9IGpzb25fZGVjb2RlKGpzb25fZW5jb2RlKChhcnJheSkkeG1sKSwgVFJVRSk7CgkJJGxpZ25lcyA9IGNvdW50KCRhcnJheVsnbGljZW5jZSddKTsKCX0KCS8vZWNobyAibGUgbmIgZGUgbGlnbmVzIGVzdCA6ICIuJGxpZ25lczsKCWlmKCRsaWduZXMgPT0gMCkKCXsKCQkkbWVzc2FnZSA9ICJQYXMgZGUgbGlnbmVzIMOgIHLDqWN1cMOpcmVyICEiOwoJCSR0aGlzLT5TZXRNZXNzYWdlKCIkbWVzc2FnZSIpOwoJCS8vJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignam91ZXVycycpOwoJfQoJZWxzZQoJewoJCQoJCgkKCQkJJGkgPTA7Ly9jb21wdGV1ciBwb3VyIGxlcyBub3V2ZWxsZXMgaW5jbHVzaW9ucwoJCQkkYSA9IDA7Ly9jb21wdGV1ciBwb3VyIGxlcyBtaXNlcyDDoCBqb3VyCgkJCWZvcmVhY2goJHhtbCBhcyAkdGFiKQoJCQl7CgkJCQkvLyRsaWNlbmNlID0gKGlzc2V0KCR0YWItPmxpY2VuY2UpPyIkdGFiLT5saWNlbmNlIjoiIik7CgkJCQkkbGljZW5jZSA9IChpc3NldCgkdGFiLT5saWNlbmNlKT8iJHRhYi0+bGljZW5jZSI6IiIpOwoJCQkJJG5vbSA9IChpc3NldCggJHRhYi0+bm9tKT8iJHRhYi0+bm9tIjoiIik7CgkJCQkkcHJlbm9tID0gKGlzc2V0KCR0YWItPnByZW5vbSk/IiR0YWItPnByZW5vbSI6ICIiKTsKCQkJCSRuY2x1YiA9IChpc3NldCgkdGFiLT5udW1jbHViKT8iJHRhYi0+bnVtY2x1YiI6IiIpOwoJCQkJJGFjdGlmID0gMDsKCQkJCSRzZXhlID0gKCFlbXB0eSgkdGFiLT5zZXhlKT8iJHRhYi0+c2V4ZSI6IiIpOwoJCQkJJHR5cGUgPSAoIWVtcHR5KCR0YWItPnR5cGUpPyIkdGFiLT50eXBlIiA6IiIpOwoJCQkJJGNlcnRpZiA9ICghZW1wdHkoJHRhYi0+Y2VydGlmKT8iJHRhYi0+Y2VydGlmIjoiIik7CgkJCQkkdmFsaWRhdGlvbiA9ICghZW1wdHkoJHRhYi0+dmFsaWRhdGlvbik/IiR0YWItPnZhbGlkYXRpb24iOiIiKTsKCQkJCSRlY2hlbG9uID0gKCFlbXB0eSgkdGFiLT5lY2hlbG9uKT8iJHRhYi0+ZWNoZWxvbiI6IiIpOwoKCQkJCSRwbGFjZSA9ICghZW1wdHkoJHRhYi0+cGxhY2UpPyIkdGFiLT5wbGFjZSI6IiIpOwoJCQkJJHBvaW50ID0gKCFlbXB0eSgkdGFiLT5wb2ludCk/IiR0YWItPnBvaW50IjoiIik7CgkJCQkkY2F0ID0gKCFlbXB0eSgkdGFiLT5jYXQpPyIkdGFiLT5jYXQiOiIiKTsKCgoJCQkJLy8kZGVzaWduYXRpb24gPSAncsOpY3Vww6lyYXRpb24gZGVzIGpvdWV1cnMnOwoKCQkJCSRxdWVyeSA9ICJTRUxFQ1QgbGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIGxpY2VuY2UgPSA/IjsKCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRsaWNlbmNlKSk7CgoJCQkJaWYoJGRicmVzdWx0ICAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPT0gMCkgCgkJCQl7CgkJCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIChpZCwgbGljZW5jZSwgbm9tLCBwcmVub20sYWN0aWYsIHNleGUsIHR5cGUsIGNlcnRpZiwgdmFsaWRhdGlvbiwgZWNoZWxvbiwgcGxhY2UsIHBvaW50LCBjYXQpIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIjsKCQkJCQkkZGJyZXN1bHRhdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJGxpY2VuY2UsJG5vbSwgJHByZW5vbSwkYWN0aWYsICRzZXhlLCAkdHlwZSwgJGNlcnRpZiwgJHZhbGlkYXRpb24sICRlY2hlbG9uLCRwbGFjZSwkcG9pbnQsICRjYXQpKTsKCQkJCQkkaSsrOwoKCQkJCQlpZighJGRicmVzdWx0YXQpCgkJCQkJewoJCQkJCQkkZGVzaWduYXRpb24uPSAkZGItPkVycm9yTXNnKCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCS8vb24gw6ljcml0IGRhbnMgbGUgam91cm5hbAoJCQkJCQkkc3RhdHVzID0gJ09rJzsKCQkJCQkJJG1lc3NhZ2UgPSAiSW5jbHVzaW9uIGRlICIuJG5vbS4iICIuJHByZW5vbTsKCQkJCQkJJGFjdGlvbiA9ICJyZXRyaWV2ZV91c2VycyI7CgkJCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywkbWVzc2FnZSwkYWN0aW9uKTsKCQkJCQl9CgkJCQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCS8vbGUgam91ZXVyIGV4aXN0ZSBkw6lqw6AgLCBvbiBmYWl0IHVuIHVwZ3JhZGUKCQkJCQkvL29uIHbDqXJpZmllCgkJCQkJJGErKzsKCQkJCQkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFNFVCBhY3RpZiA9ID8sc2V4ZSA9ID8sIHR5cGUgPSA/LCBjZXJ0aWYgPSA/LCB2YWxpZGF0aW9uID0gPywgZWNoZWxvbiA9ID8sIHBsYWNlID0gPywgcG9pbnQgPSA/LCBjYXQgPSA/IFdIRVJFIGxpY2VuY2UgPSA/IjsKCQkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkYWN0aWYsJHNleGUsICR0eXBlLCAkY2VydGlmLCR2YWxpZGF0aW9uLCAkZWNoZWxvbiwgJHBsYWNlLCAkcG9pbnQsICRjYXQsICRsaWNlbmNlKSk7CgkJCQl9CQkKCgkJCgkJCX0vLyBmaW4gZHUgZm9yZWFjaAoJJHRoaXMtPlJlZGlyZWN0KCRpZCwncmV0cmlldmVfdXNlcnMnLCRyZXR1cm5pZCwkcGFyYW1zID0gYXJyYXkoImRpcmVjdGlvbiI9PiJmZnR0IikpOwoJCgl9Ly9maW4gZHUgZWxzZQp9CgoJCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.sit_mens.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKJGRiID0mICR0aGlzLT5HZXREYigpOwpnbG9iYWwgJHRoZW1lT2JqZWN0OwokbW9pc19jb3VyYW50ID0gZGF0ZSgnbicpOwokYW5uZWVfY2hvaXNpZSA9IGRhdGUoJ1knKTsKJG1vaXNfY2hvaXNpID0gJyc7CiRwaGFzZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwaGFzZV9lbl9jb3VycycpOwokc2Fpc29uX2NvdXJhbnRlID0gKGlzc2V0KCRwYXJhbXNbJ3NhaXNvbiddKT8kcGFyYW1zWydzYWlzb24nXTokdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJykpOwoJaWYoaXNzZXQoJHBhcmFtc1snbW9pcyddKSAmJiAkcGFyYW1zWydtb2lzJ10gIT0nJykKCXsKCQkkbW9pc19jaG9pc2kgPSAkcGFyYW1zWydtb2lzJ107Cgl9CgllbHNlCgl7CgkJJG1vaXNfY2hvaXNpID0gJG1vaXNfY291cmFudDsKCX0KCglpZigkbW9pc19jaG9pc2kgPT0xKQoJewoJCSRtb2lzX3ByZWNlZGVudCA9IDEyOwoJCSRhbm5lZV9jaG9pc2llID0gJGFubmVlX2Nob2lzaWU7Cgl9CgllbHNlCgl7CgkJJG1vaXNfcHJlY2VkZW50ID0gJG1vaXNfY2hvaXNpIC0xOwoJfQoJaWYoJG1vaXNfY2hvaXNpPT0xMikKCXsKCQkkbW9pc19zdWl2YW50ID0gMTsKCQkkYW5uZWVfY2hvaXNpZSA9ICRhbm5lZV9jaG9pc2llIC0gMTsKCX0KCWVsc2UKCXsKCQkkbW9pc19zdWl2YW50ID0gJG1vaXNfY2hvaXNpICsgMTsKCX0KCgkkc21hcnR5LT5hc3NpZ24oJ21vaXNfcHJlY2VkZW50JywKCQkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdzaXRfbWVucycsJHJldHVybmlkLCAnPDwgUHLDqWPDqWRlbnQnLGFycmF5KCJtb2lzIj0+IiRtb2lzX3ByZWNlZGVudCIsInNhaXNvbiI9PiRzYWlzb25fY291cmFudGUpKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ21vaXNfc3VpdmFudCcsCgkJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnc2l0X21lbnMnLCRyZXR1cm5pZCwgJ1N1aXZhbnQgPj4nLCBhcnJheSgibW9pcyI9PiIkbW9pc19zdWl2YW50Iiwic2Fpc29uIj0+JHNhaXNvbl9jb3VyYW50ZSkgKSk7CgoKJGpvdXIgPSBkYXRlKCdqJyk7Ci8vRmFpcmUgdW5lIHByw6lmw6lyZW5jZSBwb3VyIG5lIHBhcyBhZmZpY2hlciBsZSBtb2lzIHBhcyBlbmNvcmUgZW4gYWNjw6hzIGxpYnJlID8KCiRwaGFzZV9jb3VyYW50ZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwaGFzZScpOwoKJHF1ZXJ5ID0gIlNFTEVDVCBsaWNlbmNlLG1vaXMsIHBvaW50cywgY2xuYXQsIHJhbmdyZWcsIHJhbmdkZXAsIHByb2dtb2lzLCBDT05DQVRfV1MoJyAnLCBub20sIHByZW5vbSkgQVMgam91ZXVyIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3NpdF9tZW5zIjsvLyIgV0hFUkUgYW5uZWUgPSA/IEFORCBtb2lzID0gPyI7CgoJaWYoaXNzZXQoJHBhcmFtc1snbW9pcyddKSAmJiAkcGFyYW1zWydtb2lzJ10gIT0nJykKCXsKCQkkcXVlcnkuPSIgV0hFUkUgbW9pcyA9ID8iOwoJCSRwYXJtc1snbW9pcyddID0gJG1vaXNfY2hvaXNpOwoJCgl9CgllbHNlCgl7CgkJJHF1ZXJ5Lj0iIFdIRVJFIG1vaXMgPSA/IjsKCQkkcGFybXNbJ21vaXMnXSA9ICRtb2lzX2Nob2lzaTsKCX0KCQoJJHF1ZXJ5Lj0iIEFORCBzYWlzb24gPSA/IjsKCSRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uX2NvdXJhbnRlOwoJLy9lY2hvICRxdWVyeTsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksICRwYXJtcyk7Cgokcm93Y2xhc3M9ICdyb3cxJzsKJHJvd2FycmF5PSBhcnJheSAoKTsKCmlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkKewogICAgCXdoaWxlICgkcm93PSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgl7CgkKCQkkb25lcm93PSBuZXcgU3RkQ2xhc3MoKTsKCQkkb25lcm93LT5yb3djbGFzcz0gJHJvd2NsYXNzOwoJCSRvbmVyb3ctPmpvdWV1cj0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCd1c2VyX3Jlc3VsdHMnLCRyZXR1cm5pZCwgJHJvd1snam91ZXVyJ10sIGFycmF5KCJsaWNlbmNlIj0+JHJvd1snbGljZW5jZSddLCJtb250aCI9PiRtb2lzX2Nob2lzaS0xLCJzYWlzb24iPT4kc2Fpc29uX2NvdXJhbnRlKSk7CgkJJG9uZXJvdy0+cG9pbnRzID0gJHJvd1sncG9pbnRzJ107CgkJJG9uZXJvdy0+Y2xuYXQ9ICRyb3dbJ2NsbmF0J107CgkJJG9uZXJvdy0+cmFuZ3JlZz0gJHJvd1sncmFuZ3JlZyddOwoJCSRvbmVyb3ctPnJhbmdkZXA9ICRyb3dbJ3JhbmdkZXAnXTsKCQkkb25lcm93LT5wcm9nbW9pcz0gJHJvd1sncHJvZ21vaXMnXTsKCQkoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcz0gInJvdzIiIDogJHJvd2NsYXNzPSAicm93MSIpOwoJCSRyb3dhcnJheVtdPSAkb25lcm93OwoJfQp9CmVsc2UKewoJZWNobyAiPHA+UGFzIGRlIHLDqXN1bHRhdHMgZGlzcG9uaWJsZXMuPC9wPiI7Cn0KJG1vaXNfZGVmID0gJG1vaXNfY2hvaXNpIC0xOwokbW9pc19lbl9mciA9ICRsaXN0ZV9tb2lzX2ZyWyRtb2lzX2RlZl07CiRzbWFydHktPmFzc2lnbignbW9pc19jaG9pc2knLCAkbW9pc19lbl9mcik7CiRzbWFydHktPmFzc2lnbignaXRlbXNmb3VuZCcsICR0aGlzLT5MYW5nKCdyZXN1bHRzZm91bmR0ZXh0JykpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRyb3dhcnJheSkpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnc2l0bWVucy50cGwnKTsKCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.sit_mens_provisoire.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKZ2xvYmFsICR0aGVtZU9iamVjdDsKCiRzYWlzb25fY291cmFudGUgPSAoaXNzZXQoJHBhcmFtc1snc2Fpc29uJ10pPyRwYXJhbXNbJ3NhaXNvbiddOiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKSk7CiRwaGFzZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwaGFzZV9lbl9jb3VycycpOwoKJG1vaXNfY291cmFudCA9IDU7Ly8gZGF0ZSgnbicpOwokam91cl9jb3VyYW50ID0gZGF0ZSgnaicpOwoKaWYoJGpvdXJfY291cmFudCA8PTEwKQp7CgkkbW9pc19jb3VyYW50ID0gJG1vaXNfY291cmFudC0xOwp9CgovLyRtb2lzX2NvdXJhbnQgPSAzOwoKJHF1ZXJ5PSJTRUxFQ1QgQ09OQ0FUX1dTKCcgJywgai5ub20sIGoucHJlbm9tKSBBUyBqb3VldXIsIGoubGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIEFTIGogIFdIRVJFICBqLmFjdGlmPScxJyAiOwkKCi8vJHF1ZXJ5Lj0iIEdST1VQIEJZIGpvdWV1ciBPUkRFUiBCWSBUb3RhbCBERVNDIjsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7Ci8vZWNobyAkcXVlcnk7CiRyb3djbGFzcz0gJ3JvdzEnOwokcm93YXJyYXk9IGFycmF5ICgpOwoKaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCk+MCkJCgl7CgkJd2hpbGUoJHJvdz0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJCXsKCQkJJGxpY2VuY2UgPSAkcm93WydsaWNlbmNlJ107CgkJCSRqb3VldXIgPSAkcm93Wydqb3VldXInXTsKCQkJLy9vbiBwcmVuZCBsZXMgcG9pbnRzIGR1IGRlcm5pZXIgbW9pcyhsZSBtb2lzIGVuIGNvdXJzKQkKCQkJJHF1ZXJ5MiA9ICJTRUxFQ1QgcG9pbnRzIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3NpdF9tZW5zIFdIRVJFIGxpY2VuY2UgPSA/IEFORCBtb2lzID0gPyBBTkQgc2Fpc29uID0gPyI7CgkJCSRkYnJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MixhcnJheSgkbGljZW5jZSwkbW9pc19jb3VyYW50LCAkc2Fpc29uX2NvdXJhbnRlKSk7CgkJCSRyb3cyID0gJGRicmVzdWx0Mi0+RmV0Y2hSb3coKTsJCQkJCQkKCQkJJHBvaW50c19yZWYgPSAkcm93MlsncG9pbnRzJ107CgkJCQoJCQkvL29uIHZhIG1haW50ZW5hbnQgY2FsY3VsZXIgbGUgdG90YWwgZGVzIHBvaW50cyBzcGlkIGR1IG1vaXMgZW4gY291cnMgCgkJCS8vcG91ciBsZXMgYWpvdXRlciBlbnN1aXRlIGF1eCBwb2ludHMgZGUgbGEgZGVybmnDqHJlIHNpdHVhdGlvbiBtZW5zdWVsbGUKCQkJJHF1ZXJ5MyA9ICJTRUxFQ1QgU1VNKHBvaW50cmVzKSBBUyB0b3RhbCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQgV0hFUkUgbGljZW5jZSA9ID8gQU5EICBNT05USChkYXRlX2V2ZW50KSA9ID8gQU5EIHNhaXNvbiA9ID8iOwoJCQkkZGJyZXN1bHQzID0gJGRiLT5FeGVjdXRlKCRxdWVyeTMsIGFycmF5KCRsaWNlbmNlLCRtb2lzX2NvdXJhbnQsJHNhaXNvbl9jb3VyYW50ZSkpOwoJCQkKCQkJCWlmKCAkZGJyZXN1bHQzLT5SZWNvcmRDb3VudCgpPjApCgkJCQl7CgkJCQkJJHJvdzMgPSAkZGJyZXN1bHQzLT5GZXRjaFJvdygpOwoJCQkJCSR0b3RhbCA9ICRyb3czWyd0b3RhbCddOwoJCQkJfQoJCQkJaWYoaXNfbnVsbCgkdG90YWwpKQoJCQkJewoJCQkJCSR0b3RhbCA9IDA7CgkJCQl9CgkJCQoJCQkkc29tbWUgPSAkcG9pbnRzX3JlZiskdG90YWw7CgkJCQoJCQkkb25lcm93PSBuZXcgU3RkQ2xhc3MoKTsKCQkJJG9uZXJvdy0+cm93Y2xhc3M9ICRyb3djbGFzczsKCQkJJG9uZXJvdy0+am91ZXVyPSAkcm93Wydqb3VldXInXTsKCQkJJG9uZXJvdy0+Y2x0PSAkcG9pbnRzX3JlZjsKCQkJJG9uZXJvdy0+c29tbWU9ICRzb21tZTsKCQkJJG9uZXJvdy0+YmlsYW49ICR0b3RhbDsKCQkJJG9uZXJvdy0+ZGV0YWlscz0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAndXNlcl9yZXN1bHRzX3Byb3YnLCAkcmV0dXJuaWQsICdEw6l0YWlscycsYXJyYXkoJ2xpY2VuY2UnPT4kcm93WydsaWNlbmNlJ10sJ21vbnRoJz0+JG1vaXNfY291cmFudCkpOwoJCQkoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcz0gInJvdzIiIDogJHJvd2NsYXNzPSAicm93MSIpOwoJCQkkcm93YXJyYXlbXT0gJG9uZXJvdzsKCQl9Cgl9CgkKJHNtYXJ0eS0+YXNzaWduKCdyZXR1cm5saW5rJywgCgkJJHRoaXMtPkNyZWF0ZUZyb250ZW5kTGluaygkaWQsJHJldHVybmlkLCAnc2l0X21lbnNfcHJvdmlzb2lyZScsJGFkZHRleHQ9J1JldG91cicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtc2ZvdW5kJywgJHRoaXMtPkxhbmcoJ3Jlc3VsdHNmb3VuZHRleHQnKSk7CiRzbWFydHktPmFzc2lnbignaXRlbWNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiRzbWFydHktPmFzc2lnbignaXRlbXMnLCAkcm93YXJyYXkpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdzaXRtZW5zX3Byb3YudHBsJyk7CgoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.tag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9yZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXyknJykKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdQaW5nIFVzZScpKQogIHsKICAgIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ25lZWRwZXJtaXNzaW9uJykpOwoJcmV0dXJuOwogICAKICB9CmRlYnVnX2Rpc3BsYXkoJHBhcmFtcywnUGFyYW1ldGVycycpOwoKJGRiID0mICR0aGlzLT5HZXREYigpOwokc2Fpc29uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwokcGhhc2UgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnUGhhc2VfZW5fY291cnMnKTsKJGVkaXQgPSAwOy8vc2VydCDDoCBkaXN0aW5ndWVyIGwnYWpvdXQgcGFyIGTDqWZhdXQgMCBkJ3VuZSDDqWRpdGlvbiAoPSAxKQokcmVjb3JkX2lkID0gJyc7CiRxdWVyeSA9ICJTRUxFQ1QgaWQsIGNvZGVfY29tcGV0LCBpbmRpdnMgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMiOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCmlmKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCk+MCkKewoJd2hpbGUoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCXsKCQkkdGFnID0gIntQaW5nIGFjdGlvbj0nIjsKCQkkaWQgPSAkcm93WydpZCddOwoJCSRjb2RlID0gJHJvd1snY29kZV9jb21wZXQnXTsKCQkkaW5kaXZzID0gJHJvd1snaW5kaXZzJ107CgkJCgkJaWYoJGluZGl2cyA9PScxJykKCQl7CgkJCSR0YWcuPSJpbmRpdmlkdWVsbGVzJyI7CgkJfQoJCWVsc2UKCQl7CgkJCSR0YWcuPSJwYXItZXF1aXBlcyciOwoJCX0KCQkkdGFnLj0iIHR5cGVfY29tcGV0PSckY29kZSciOwoJCSR0YWcuPSJ9IjsKCQllY2hvICR0YWc7CgkJJHNxbGFycmF5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMgU0VUIHRhZyA9ID8gV0hFUkUgaWQgPSA/IjsKCQkkZGItPkV4ZWN1dGUoJHNxbGFycmF5LCBhcnJheSgkdGFnLCRpZCkpOwoJCS8vdW5zZXQoJHRhZyk7Cgl9CgoKfQoKLyogCiR0aGlzLT5TZXRNZXNzYWdlKCdVcGRhdGUgdGFnIHLDqWFsaXPDqScpOwokdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdjb21wZXRpdGlvbnMnKTsKKi8KIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.topFlop.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWlzc2V0KCAkZ0NtcykgKSBleGl0OwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMgICAgICAgICAgIFRvcCBvdSBmbG9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3ByZWZzLnBocCcpOwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywnUGFyYW1ldGVycycpOwokc2Fpc29uX2NvdXJhbnRlID0gKGlzc2V0KCRwYXJhbXNbJ3NhaXNvbiddKSk/JHBhcmFtc1snc2Fpc29uJ106JHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwovL29uIGNvbW1lbmNlIGRpcmVjdCBwYXIgbGEgcmVxdWV0ZQokZGIgPSYgJHRoaXMtPkdldERiKCk7CiRxdWVyeTEgPSAiU0VMRUNUIENPTkNBVF9XUygnICcsai5ub20sIGoucHJlbm9tKSBBUyBqb3VldXIsc3AuYWR2bm9tcHJlLHNwLmFkdmNsYW9mLHNwLnZkLCBzcC5wb2ludHJlcyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzIEFTIHNwLCAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBBUyBqIFdIRVJFIGoubGljZW5jZSA9IHNwLmxpY2VuY2UgQU5EIHNwLnNhaXNvbiA9ID8gIjsvLwoKLy9PbiByZWdhcmRlIHNpIG9uIGEgbWlzIGRlcyBwYXJhbWV0cmVzCi8vIGTDqWrDoCBsYSBzYWlzb24KJHBhcm1zWydzYWlzb24nXSA9ICRzYWlzb25fY291cmFudGU7CgovL3RvcCBvdSBmbG9wID8KLy9vbiBlc3NhaWUgbGUgdG9wIGQnYWJvcmQKJHF1ZXJ5MS49ICIgQU5EIHNwLnZkID0gPyI7CiRwYXJtc1sndmljdG9pcmUnXSA9IDE7CgoJaWYoaXNzZXQoJHBhcmFtc1snbGljZW5jZSddKSAmJiAkcGFyYW1zWydsaWNlbmNlJ10gIT0nJykKCXsKCQkkcXVlcnkxLj0iIEFORCBqLmxpY2VuY2UgPSA/IjsKCQkkcGFybXNbJ2xpY2VuY2UnXSA9ICRwYXJhbXNbJ2xpY2VuY2UnXTsKCX0KCS8vb24gdGVzdGUgYXVzc2kgbGUgbW9pcwoJaWYoaXNzZXQoJHBhcmFtc1snbW9pcyddKSAmJiAkcGFyYW1zWydtb2lzJ10gIT0gJycpCgl7CgkJJG1vaXNfY2hvaXNpID0gJHBhcmFtc1snbW9pcyddOwoJCSRxdWVyeTEuPSAiIEFORCBNT05USChzcC5kYXRlX2V2ZW50KSA9ID8iOwoJCSRwYXJtc1snbW9pcyddID0gJG1vaXNfY2hvaXNpOwoJfQokcXVlcnkxLj0gIiBPUkRFUiBCWSBzcC5wb2ludHJlcyBERVNDIjsJCglpZihpc3NldCgkcGFyYW1zWydsaW1pdCddKSAmJiAkcGFyYW1zWydsaW1pdCddPjApCgl7CgkJJHF1ZXJ5MS49ICIgTElNSVQgMCwgPyI7CgkJJHBhcm1zWydsaW1pdCddID0gJHBhcmFtc1snbGltaXQnXTsKCX0KCgkKCQoJCi8vZWNobyAkcXVlcnkxOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MSwkcGFybXMpOwokcm93YXJyYXkgPSBhcnJheSgpOwokcm93Y2xhc3M9ICdyb3cxJzsKaWYoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKT4wKQp7Cgl3aGlsZSgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJewoJCSRvbmVyb3cgPSBuZXcgU3RkQ2xhc3MoKTsKCQkkb25lcm93LT5yb3djbGFzcyA9ICRyb3djbGFzczsKCQkkb25lcm93LT5qb3VldXIgPSAkcm93Wydqb3VldXInXTsKCQkkb25lcm93LT5hZHYgPSAkcm93WydhZHZub21wcmUnXTsKCQkkb25lcm93LT5hZHZjbGFvZiA9ICRyb3dbJ2FkdmNsYW9mJ107CgkJJG9uZXJvdy0+cG9pbnRyZXMgPSAkcm93Wydwb2ludHJlcyddOwoJCSgkcm93Y2xhc3MgPT0gInJvdzEiID8gJHJvd2NsYXNzPSAicm93MiIgOiAkcm93Y2xhc3M9ICJyb3cxIik7CgkJJHJvd2FycmF5W109ICRvbmVyb3c7Cgl9Cn0KZWxzZQp7CgllY2hvICRkYi0+RXJyb3JNc2coKTsKfQokc21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRyb3dhcnJheSkpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCd0b3BmbG9wLnRwbCcpOwoKIwojRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.updatecompte.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWlzc2V0KCRnQ21zKSkgZXhpdDsKaWYoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1BpbmcgU2V0IFByZWZzJykpCnsKCSR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicpKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2pvdWV1cnMnKTsKfQpkZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CiRpZEFwcGxpID0gJyc7CiRtb3RkZXBhc3NlID0gJyc7CiR0bSA9ICcnOy8vbGUgdGltZXN0YW1wIG5vbiBjcnlwdMOpCiRlcnJvciA9IDA7Ly9vbiBpbml0aWFsaXNlIHVuIGNvbXB0ZXVyIGQnZXJyZXVycyAKJGRlc2lnbmF0aW9uID0gJyc7Ly9vbiBpbml0aWFsaXNlIGxlcyBtZXNzYWdlcyBkJ2VycmV1cnMKCmlmKGlzc2V0KCRwYXJhbXNbJ2lkQXBwbGknXSkgJiYgJHBhcmFtc1snaWRBcHBsaSddICE9JycpCnsKCSRpZEFwcGxpID0gJHBhcmFtc1snaWRBcHBsaSddOwoJCn0KZWxzZQp7CgkkZXJyb3IrKzsKCSRkZXNpZ25hdGlvbi49IklsIG1hbnF1ZSBsJ0lkIGRlIGwnYXBwbGljYXRpb24uIjsKfQppZihpc3NldCgkcGFyYW1zWydtb3RkZXBhc3NlJ10pICYmICRwYXJhbXNbJ21vdGRlcGFzc2UnXSAhPScnKQp7CgkkbW90ZGVwYXNzZSA9ICRwYXJhbXNbJ21vdGRlcGFzc2UnXTsKCS8vb24gY3J5cHRlIGxlIG1vdCBkZSBwYXNzZSAKCSRjZGUgPSBoYXNoKCdtZDUnLCAkbW90ZGVwYXNzZSwgRkFMU0UpOwoJCQp9CmVsc2UKewoJJGVycm9yKys7CgkkZGVzaWduYXRpb24uPSIgVm90cmUgbW90IGRlIHBhc3NlIGVzdCBtYW5xdWFudC4iOwoJCn0KJHNlcmllID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NlcmllJyk7CmlmKCFpc3NldCgkc2VyaWUpIHx8ICRzZXJpZSA9PScnKQp7CgkvL29uIGNyw6llIGxhIHByw6lmw6lyZW5jZSB1bmlxdWUKCSRzZXJpZSA9IHBpbmdfYWRtaW5fb3BzOjpyYW5kb21fc2VyaWUoMTUpOwoJLy9ldCBvbiBsJ2Vudm9pZQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3NlcmllJywgJHNlcmllKTsKCQp9Ci8qCmlmKGlzc2V0KCRwYXJhbXNbJ3RtJ10pICYmICRwYXJhbXNbJ3RtJ10gIT0nJyAmJiBzdHJsZW4oJHBhcmFtc1sndG0nXSkgPT0gMTcpCnsKCSR0aW1lc3RhbXAgPSAkcGFyYW1zWyd0bSddOwoJJHRtYyA9IGhhc2hfaG1hYygic2hhMSIsICR0aW1lc3RhbXAsJGNjbGUpOwp9CmVsc2UKewoJJGVycm9yKys7CgkkZGVzaWduYXRpb24uPSIgTGUgdGltZXN0YW1wIGVzdCBtYW5xdWFudCBvdSBuZSBmYWl0IHBhcyBsZXMgMTcgY2FyYWN0w6hyZXMuIjsKfQoqLwppZigkZXJyb3I+MCkKewoJJHRoaXMtPlNldE1lc3NhZ2UoJGRlc2lnbmF0aW9uKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbXB0ZScpOwp9CmVsc2UKewoJLy90dCBlc3Qgb2ssIG9uIHBldXQgY29tbWVuY2VyLi4uCgkvL29uIG1ldCBsJ2lkIGRlIGwnYXBwbGljYXRpb24gZXQgbGUgbW90IGRlIHBhc3NlIGVuIHByw6lmw6lyZW5jZQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2lkQXBwbGknLCRpZEFwcGxpKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtb3RkZXBhc3NlJywkY2RlKTsKCSR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2NvbmZpZ3VyYXRpb24nKTsKCQp9CiMKI0VPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.updateoptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdQaW5nIFNldCBQcmVmcycgKSApCnsKICByZXR1cm47Cn0KLy8kbm9tX2VxdWlwZXMgPSBzdHJ0b3VwcGVyKCRwYXJhbXNbJ25vbV9lcXVpcGVzJ10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnY2x1Yl9udW1iZXInLCAkcGFyYW1zWydjbHViX251bWJlciddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2xpZ3VlJywgJHBhcmFtc1snbGlndWUnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd6b25lJywgJHBhcmFtc1snem9uZSddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlcCcsICRwYXJhbXNbJ2RlcCddKTsKLy9wb3VyIGxhIHZlcnNpb24gMC4xIGJldGEyIG9uIHByb3Bvc2VyYSBkZSBkw6lkdWlyZSBsYSBsaWd1ZSBldCBsZSBkw6lwYXJ0ZW1lbnQgYXV4cXVlbHMgbGUgY2x1YiBhcHBhcnRpZW50Ci8vZXQgb24gbGVzIG1ldHRyYSBkYW5zIGxlcyBwcsOpZsOpcmVuY2VzIMOgIGNyw6llciDDqWdhbGVtZW50CgoKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJywgJHBhcmFtc1sncGhhc2VfZW5fY291cnMnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnLCAkcGFyYW1zWydzYWlzb25fZW5fY291cnMnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdub21fZXF1aXBlcycsIHN0cnRvdXBwZXIoJHBhcmFtc1snbm9tX2VxdWlwZXMnXSkpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgncG9wdWxhdGVfY2FsZW5kYXInLCAkcGFyYW1zWydwb3B1bGF0ZV9jYWxlbmRhciddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2FmZmljaGVfY2x1Yl91bmlxdWVtZW50JywgJHBhcmFtc1snYWZmaWNoZV9jbHViX3VuaXF1ZW1lbnQnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzcGlkX25vbWJyZXMnLCAkcGFyYW1zWydzcGlkX25vbWJyZXMnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmZnR0X25vbWJyZXMnLCAkcGFyYW1zWydmZnR0X25vbWJyZXMnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzcGlkX2ludGVydmFsJywgJHBhcmFtc1snc3BpZF9pbnRlcnZhbCddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2ZmdHRfaW50ZXJ2YWwnLCAkcGFyYW1zWydmZnR0X2ludGVydmFsJ10pOwokdGhpcy0+U2V0TWVzc2FnZSgnVm9zIG9wdGlvbnMgb250IMOpdMOpIG1pc2VzIMOgIGpvdXJzJyk7CiR0aGlzLT5BdWRpdCgnJywgJ1BpbmcnLCRwYXJhbXNbJ2NsdWJfbnVtYmVyJ10pOwovLyR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJ2pvdWV1cnMnKTsKJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignam91ZXVycycsIGFycmF5KCdtZXNzYWdlJz0+J0Z1bGwnKSk7Ly8kdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWxldGVfYWxsJywnJyxhcnJheSgkbWVzc2FnZT0+J09wdGlvbnMgT2snKSk7Ci8qCiRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnPT4gJ29wdGlvbnN1cGRhdGVkJywgJ2FjdGl2ZV90YWInID0+ICdvcHRpb25zJyk7CiR0aGlzLT5SZWRpcmVjdCgkaWQsICdvcHRpb25zJywgJycsICRwYXJhbXMpOwoqLwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.uploadfile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBnQ21zDQogKi8NCiANCmlmICghaXNzZXQoJGdDbXMpKSANCglleGl0ICgpOw0KDQovKioNCiogVGhpcyBtb2R1bGUNCiovDQoNCiRzTW9kID0gJHRoaXMtPkdldE5hbWUoKTsNCg0KLyoqDQogKiBQZXJtaXNzaW9ucw0KICovDQoNCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkc01vZCAuJyBBZGQnKSB8fCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkc01vZCAuJyBFZGl0JykpIA0KCWV4aXQgKCk7DQoNCg0KLyoqDQoqIERlY2xhcmUNCiovDQoNCiRhQ29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7DQoNCiRzU2VsZWN0RmlsZSA9IChpc3NldCgkcGFyYW1zWydmaWxlJ10pKSA/ICRwYXJhbXNbJ2ZpbGUnXSA6IC0xOwkNCg0KJGJFcnJvciA9IDA7DQokc1Jlc3BvbnNlID0gJyc7DQokc1dpZHRoID0gJyc7DQokc0hlaWdodCA9ICcnOw0KJHNGaWxlID0gJyc7DQoNCi8qKioNCiogQWN0aW9ucw0KKi8NCg0KaWYgKCFpc3NldCgkX0ZJTEVTWyRzU2VsZWN0RmlsZV0pKQ0Kew0KCSRiRXJyb3IgPSAxOw0KCSRzUmVzcG9uc2UgPSAkdGhpcy0+TGFuZygnRXJyb3IgdXBsb2FkLiBObyBGaWxlIHNlbGVjdGVkIScpOw0KfQ0KDQppZiAoJGJFcnJvciA9PSAwKQ0Kew0KCS8vIGRhdCBmaWxlDQoJJHNGaWxlTmFtZSAJPSAkX0ZJTEVTWyRzU2VsZWN0RmlsZV1bJ25hbWUnXTsNCgkkc0ZpbGVUeXBlIAk9ICRfRklMRVNbJHNTZWxlY3RGaWxlXVsndHlwZSddOyANCgkkc0ZpbGVUbXAgCT0gJF9GSUxFU1skc1NlbGVjdEZpbGVdWyd0bXBfbmFtZSddOw0KCSRzRmlsZUVycm9yCT0gJF9GSUxFU1skc1NlbGVjdEZpbGVdWydlcnJvciddOw0KCSRzRmlsZVNpemUgCT0gJF9GSUxFU1skc1NlbGVjdEZpbGVdWydzaXplJ107DQoNCgkvLyBmaWxlIGV4dGVuc2lvbg0KCSRzRXh0ID0gc3RycmNocigkc0ZpbGVOYW1lLCIuIik7CQ0KCSRzRmlsZU5hbWUgPSBzdWJzdHIoJHNGaWxlTmFtZSwgMCwgc3RybGVuKCRzRmlsZU5hbWUpLXN0cmxlbigkc0V4dCkpOw0KDQoJLy8gdGVzdCBmaWxlIGV4dGVuc2lvbg0KCSRhRXh0ID0gZXhwbG9kZSgnLCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2V4dGVuc2lvbnNfaW1hZ2VzJywnJykpOw0KICAgIGlmICghaW5fYXJyYXkoJHNFeHQsICRhRXh0KSkgDQogICAgew0KICAgIAkkYkVycm9yID0gMTsNCgkJJHNSZXNwb25zZSA9ICR0aGlzLT5MYW5nKCdCYWQgRmlsZSBmb3JtYXQhJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2V4dGVuc2lvbnNfaW1hZ2VzJywnJykpOw0KICAgIH0NCn0NCg0KaWYgKCRiRXJyb3IgPT0gMCkNCnsNCglsaXN0KCR3aWR0aCwgJGhlaWdodCkgPSBnZXRpbWFnZXNpemUoJHNGaWxlVG1wKTsNCg0KCSRzTWF4V2lkdGggPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWF4X2ltYWdlc193aWR0aCcsJycpOw0KCSRzTWF4SGVpZ2h0ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ21heF9pbWFnZXNfaGVpZ2h0JywnJyk7DQoJaWYgKCR3aWR0aCA+ICRzTWF4V2lkdGggfHwgJGhlaWdodCA+ICRzTWF4SGVpZ2h0KQ0KCXsNCgkJJGJFcnJvciA9IDE7DQoJCSRzUmVzcG9uc2UgPSAkdGhpcy0+TGFuZygnRXJyb3IgRmlsZSBkaW1lbnNpb25zIScsICRzTWF4V2lkdGguJ3gnLiRzTWF4SGVpZ2h0KTsNCgl9DQp9DQoNCmlmICgkYkVycm9yID09IDApDQp7DQoJaWYgKCRzRmlsZVNpemUgPiAkYUNvbmZpZ1snbWF4X3VwbG9hZF9zaXplJ10pDQoJew0KCQkkYkVycm9yID0gMTsNCgkJJHNSZXNwb25zZSA9ICR0aGlzLT5MYW5nKCdFcnJvciBGaWxlc2l6ZSEnLCBjZWlsKCRhQ29uZmlnWydtYXhfdXBsb2FkX3NpemUnXSoxMDI0LzEwMDAwMDApLidrbycpOw0KCX0NCn0NCg0KaWYgKCRiRXJyb3IgPT0gMCkNCnsJDQoJaWYgKCRwYXJhbXNbJ2ZpbGVfbmFtZSddID09ICcnKQ0KCXsNCgkJJHNGaWxlTmFtZSA9IG11bmdlX3N0cmluZ190b191cmwoc3RydG9sb3dlcigkc0ZpbGVOYW1lKSkuJHNFeHQ7DQoJDQoJfSBlbHNlIHsNCgkJLy8gaWYgcmVuYW1lIGZpbGUsIHJlbW92ZSBleHQgaWYgdGhpcyBpcyBpbiB0aGUgbmV3IG5hbWUgYW5kIHB1dCBvcmlnaW5lIGV4dA0KCQkkc0ZpbGVOYW1lID0gJHBhcmFtc1snZmlsZV9uYW1lJ107DQoJCSRzRXh0MiA9IHN0cnJjaHIoJHNGaWxlTmFtZSwiLiIpOwkNCgkJJHNGaWxlTmFtZSA9IHN1YnN0cigkc0ZpbGVOYW1lLCAwLCBzdHJsZW4oJHNGaWxlTmFtZSktc3RybGVuKCRzRXh0MikpOw0KCQkkc0ZpbGVOYW1lID0gbXVuZ2Vfc3RyaW5nX3RvX3VybChzdHJ0b2xvd2VyKCRzRmlsZU5hbWUpKS4kc0V4dDsNCgl9DQoNCgkvLyB1cGxvYWQNCgkkc0Rlc3QgPSBjbXNfam9pbl9wYXRoKCRhQ29uZmlnWyd1cGxvYWRzX3BhdGgnXSwgJHBhcmFtc1sncGF0aCddLCAkc0ZpbGVOYW1lKTsNCgkNCgkvL0Btb3ZlX3VwbG9hZGVkX2ZpbGUoJHNGaWxlVG1wLCAkc0Rlc3QpOw0KCWlmIChAY21zX21vdmVfdXBsb2FkZWRfZmlsZSgkc0ZpbGVUbXAsICRzRGVzdCkgPT09IEZBTFNFICkNCiAgICB7DQogICAgCSRhVHJhbnMgPSBhcnJheSgiXFwiID0+ICIgIiwgIi8iID0+ICIgIik7DQoJCSRzRGVzdCA9IHN0cnRyKCRzRGVzdCwgJGFUcmFucyk7DQogICAgCSRiRXJyb3IgPSAxOw0KCQkkc1Jlc3BvbnNlID0gJHRoaXMtPkxhbmcoJ0Vycm9yIE1vdmVmaWxlIScgLCAkc0Rlc3QpOw0KICAgIH0NCn0NCg0KaWYgKCRiRXJyb3IgPT0gMCkNCnsNCglsaXN0KCR3aWR0aCwgJGhlaWdodCkgPSBnZXRpbWFnZXNpemUoJGFDb25maWdbJ3VwbG9hZHNfdXJsJ10gLicvJy4gJHBhcmFtc1snbGluayddIC4nLycuICRzRmlsZU5hbWUpOw0KDQoJLy8gb3V0cHV0DQoJJHNSZXNwb25zZSA9ICR0aGlzLT5MYW5nKCdGaWxlIHVwbG9hZGVkJyk7DQoJJHNXaWR0aCA9ICR3aWR0aDsNCgkkc0hlaWdodCA9ICRoZWlnaHQ7DQoJJHNGaWxlID0gJHBhcmFtc1snbGluayddIC4nLycuICRzRmlsZU5hbWU7DQp9DQoNCnNsZWVwKDEpOw0KDQovLyByZXR1cm4gc2NyaXB0IHRvIGhpZGRlbmZyYW1lDQplY2hvICcNCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJd2luZG93LnRvcC53aW5kb3cuc3RvcF91cGxvYWRmaWxlKCcuICRiRXJyb3IgLicsICInLiAkc0ZpbGUgLiciLCAiJy4gJHNSZXNwb25zZSAuJyIsICInLiAkc1dpZHRoIC4nIiwgIicuICRzSGVpZ2h0IC4nIiwgIicuICRzRmlsZVR5cGUgLiciLCAiJy4gJHNGaWxlU2l6ZSAuJyIpOw0KPC9zY3JpcHQ+JzsNCmV4aXQoKTsNCg==]]></data>
	</file>
	<file>
	  <filename>/action.user_results.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKJGRiID0mICR0aGlzLT5HZXREYigpOwovL2dsb2JhbCAkdGhlbWVPYmplY3Q7Ci8vcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS9wcmVmcy5waHAnKTsKJGxpY2VuY2UgPSAnJzsKJGRhdGVfZXZlbnQgPSAnJzsKJGFmZmljaGUgPSAxOy8vY2V0dGUgdmFyaWFibGUgZMOpdGVybWluZSBsJ2FmZmljaGFnZSBwYXIgbW9pcwokc2Fpc29uX2NvdXJhbnRlID0gKGlzc2V0KCRwYXJhbXNbJ3NhaXNvbiddKSk/JHBhcmFtc1snc2Fpc29uJ106JHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwoJaWYoIWlzc2V0KCRwYXJhbXNbJ2xpY2VuY2UnXSkgJiYgJHBhcmFtc1snbGljZW5jZSddID09JycgKQoJewoJCWVjaG8gImxhIGxpY2VuY2UgZXN0IGFic2VudGUgISI7CgkJCgl9CgllbHNlCgl7CgkJJGxpY2VuY2UgPSAkcGFyYW1zWydsaWNlbmNlJ107CgkJCgkJLy9zaSB1bmUgZGF0ZSBlc3QgcHLDqWNpc8OpZSBhbG9ycyBvbiBhZmZpY2hlIHF1ZSBsZXMgcsOpc3VsdGF0cyBkZSBjZXR0ZSBkYXRlCgkJaWYoaXNzZXQoJHBhcmFtc1snZGF0ZV9kZWJ1dCddKSAmJiAkcGFyYW1zWydkYXRlX2RlYnV0J10gIT0nJykKCQl7CgkJCS8vb24gdmEgYWxvcnMgY2FjaGVyIGNlcnRhaW5zIMOpbMOpbWVudHMgZGUgbGEgcGFnZQoJCQkkYWZmaWNoZSA9IDA7CgkJCSRkYXRlX2RlYnV0ID0gJHBhcmFtc1snZGF0ZV9kZWJ1dCddOwoJCQkkZGF0ZV9maW4gPSAkcGFyYW1zWydkYXRlX2ZpbiddOwoJCQkvL29uIGVuIGTDqWR1aXQgbGEgc2Fpc29uIHBvdXIgbGUgY2FzIG/DuSBvbiBuZSBzZXJhaXQgcGFzIGRhbnMgbGEgc2Fpc29uIGVuIGNvdXJzCgkJfQoJCQoJCWlmKGlzc2V0KCRwYXJhbXNbJ21vbnRoJ10pICYmICRwYXJhbXNbJ21vbnRoJ10gIT0nJykKCQl7CgkJCSRhZmZpY2hlID0gMDsKCQkJJG9rID0gMTsKCQkJJG1vbnRoID0gJHBhcmFtc1snbW9udGgnXTsKCQl9CgkJaWYoJGFmZmljaGUgPT0xKQoJCXsKCQkJJHNtYXJ0eS0+YXNzaWduKCdwaGFzZTInLAoJCQkJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwndXNlcl9yZXN1bHRzJywkcmV0dXJuaWQsICdQaGFzZSAyJywgYXJyYXkoInBoYXNlIj0+IjIiLCJsaWNlbmNlIj0+JGxpY2VuY2UsJ3NhaXNvbic9PiRzYWlzb25fY291cmFudGUpICkpOwoJCQkkc21hcnR5LT5hc3NpZ24oJ3BoYXNlMScsCgkJCQkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCd1c2VyX3Jlc3VsdHMnLCRyZXR1cm5pZCwgJ1BoYXNlIDEnLCBhcnJheSgicGhhc2UiPT4iMSIsImxpY2VuY2UiPT4kbGljZW5jZSwnc2Fpc29uJz0+JHNhaXNvbl9jb3VyYW50ZSkgKSk7CgkJfQoJCQoJCSRyb3dhcnJheTEgPSBhcnJheSgpOwoJCSRxdWVyeSA9ICJTRUxFQ1QgU1VNKHZkKSBBUyB2aWMsIGNvdW50KHZkKSBBUyB0b3RhbCwgU1VNKHBvaW50cmVzKSBBUyBwdHMgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyBXSEVSRSBsaWNlbmNlID0gPyI7Ly8iIFdIRVJFIHNhaXNvbiA9ID8gQU5EIGxpY2VuY2UgPSA/IjsKCQkvL3FxcyBwYXJhbcOodHJlcwoJCSRwYXJtc1snbGljZW5jZSddID0gJGxpY2VuY2U7CgkJaWYoJGFmZmljaGUgIT0nMCcpewoJCQkkcXVlcnkuPSIgQU5EIHNhaXNvbiA9ID8iOwoJCQkkcGFybXNbJ3NhaXNvbiddID0gJHNhaXNvbl9jb3VyYW50ZTsKCQl9CgkJLy8kcGFybXNbJ3NhaXNvbiddID0gJHNhaXNvbl9jb3VyYW50ZTsKCQkKCQkvL29uIHByZXNlbnRlIHBoYXNlIHBhciBwaGFzZSA/CgkJCgkJaWYoJGFmZmljaGUgPT0xKQoJCXsKCQkJaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJykgPT0nMScgKQoJCQl7CgkJCQlpZigkcGFyYW1zWydwaGFzZSddID09MikKCQkJCXsKCQkJCQkkcXVlcnkuPSAiIEFORCBNT05USChkYXRlX2V2ZW50KSA+PSAxIEFORCBNT05USChkYXRlX2V2ZW50KSA8PTciOyAKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkcXVlcnkuPSAiIEFORCBNT05USChkYXRlX2V2ZW50KSA+IDcgQU5EIE1PTlRIKGRhdGVfZXZlbnQpIDw9MTIiOyAgLy8vL0JFVFdFRU4gTk9XKCkgQU5EIChOT1coKSArIElOVEVSVkFMIDcgREFZKSI7CgkJCQl9CgkJCX0KCQkJZWxzZWlmKCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGhhc2VfZW5fY291cnMnKSA9PSAnMicpCgkJCXsKCQkJCWlmKCRwYXJhbXNbJ3BoYXNlJ10gPT0xKQoJCQkJewoJCQkJCSRxdWVyeS49ICIgQU5EIE1PTlRIKGRhdGVfZXZlbnQpID4gNyBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPD0xMiI7ICAvLy8vQkVUV0VFTiBOT1coKSBBTkQgKE5PVygpICsgSU5URVJWQUwgNyBEQVkpIjsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkcXVlcnkuPSAiIEFORCBNT05USChkYXRlX2V2ZW50KSA+PSAxIEFORCBNT05USChkYXRlX2V2ZW50KSA8PTciOyAgLy8vL0JFVFdFRU4gTk9XKCkgQU5EIChOT1coKSArIElOVEVSVkFMIDcgREFZKSI7CQoJCQkJfQoJCQl9CgkJfQoJCWVsc2VpZigkb2sgPT0nMScpCgkJewoJCQkkcXVlcnkuPSIgQU5EIE1PTlRIKGRhdGVfZXZlbnQpID0gPyI7CgkJCSRwYXJtc1snbW9udGgnXSA9ICRtb250aDsKCQl9CgkJCgoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksICRwYXJtcyk7CgoJCQlpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApCgkJCXsKCQkJCXdoaWxlKCRyb3cxID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJCQkJewoJCQkJCSRvbmVyb3cxPSBuZXcgU3RkQ2xhc3MoKTsKCQkJCQkkb25lcm93MS0+cm93Y2xhc3M9ICRyb3djbGFzczsKCQkJCQkkb25lcm93MS0+dmljPSAkcm93MVsndmljJ107CgkJCQkJJG9uZXJvdzEtPnRvdGFsPSAkcm93MVsndG90YWwnXTsKCQkJCQkkb25lcm93MS0+cHRzPSAkcm93MVsncHRzJ107CgkJCQkJKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3M9ICJyb3cyIiA6ICRyb3djbGFzcz0gInJvdzEiKTsKCQkJCQkkcm93YXJyYXkxW109ICRvbmVyb3cxOwoJCQkJfQoJCQl9CgkJCSRzbWFydHktPmFzc2lnbignaXRlbXMxJywgJHJvd2FycmF5MSk7CgoKCQkkcXVlcnkxID0gIlNFTEVDVCBDT05DQVRfV1MoJyAnLCBub20sIHByZW5vbSkgQVMgam91ZXVyIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgV0hFUkUgbGljZW5jZSA9ID8iOwoKCgkJJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MSwgYXJyYXkoJGxpY2VuY2UpKTsKCQkKCQkvL2ZhdWRyYWl0IHRlc3RlciBzaSDDp2EgbWFyY2hlIG91IG5vbgoJCWlmKCEkZGJyZXN1bHRhdCkKCQl7CgkJCSRkZXNpZ25hdGlvbiA9ICRkYi0+RXJyb3JNc2coKTsKCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJycsJ0tPJywkZGVzaWduYXRpb24sJycpOwoJCX0KCQkKCQkkcm93MSA9ICRkYnJlc3VsdGF0LT5GZXRjaFJvdygpOwoJCSRqb3VldXIgPSAkcm93MVsnam91ZXVyJ107CgkJJHNtYXJ0eS0+YXNzaWduKCdqb3VldXInLCAkam91ZXVyKTsKCQkkcmVzdWx0PSBhcnJheSAoKTsKCQkkcXVlcnkzPSAiU0VMRUNUIGFkdm5vbXByZSwgYWR2Y2xhb2YscG9pbnRyZXMsIHZkLGRhdGVfZXZlbnQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyBXSEVSRSBsaWNlbmNlID0gPyBBTkQgc2Fpc29uID0gPyI7Ly8iIEFORCBsaWNlbmNlID0gPyI7Ly8iIE9SREVSIEJZIGRhdGVfZXZlbnQgQVNDIjsKCQkKCQkkcGFybXNbJ2xpY2VuY2UnXSA9ICRsaWNlbmNlOwoJCSRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uX2NvdXJhbnRlOwoJCQoJCWlmKCRhZmZpY2hlID09JzEnKQoJCXsKCQkJaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJykgPT0nMScgKQoJCQl7CgkJCQlpZigkcGFyYW1zWydwaGFzZSddID09MikKCQkJCXsKCQkJCQkkcXVlcnkzLj0gIiBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPj0gMSBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPD03IjsgCgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHF1ZXJ5My49ICIgQU5EIE1PTlRIKGRhdGVfZXZlbnQpID4gNyBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPD0xMiI7ICAvLy8vQkVUV0VFTiBOT1coKSBBTkQgKE5PVygpICsgSU5URVJWQUwgNyBEQVkpIjsKCQkJCX0KCQkJfQoJCQllbHNlaWYoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwaGFzZV9lbl9jb3VycycpID09ICcyJykKCQkJewoJCQkJaWYoJHBhcmFtc1sncGhhc2UnXSA9PTEpCgkJCQl7CgkJCQkJJHF1ZXJ5My49ICIgQU5EIE1PTlRIKGRhdGVfZXZlbnQpID4gNyBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPD0xMiI7ICAvLy8vQkVUV0VFTiBOT1coKSBBTkQgKE5PVygpICsgSU5URVJWQUwgNyBEQVkpIjsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkcXVlcnkzLj0gIiBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPj0gMSBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPD03IjsgIC8vLy9CRVRXRUVOIE5PVygpIEFORCAoTk9XKCkgKyBJTlRFUlZBTCA3IERBWSkiOwkKCQkJCX0KCQkJfQoJCQkkcXVlcnkzLj0gIiBPUkRFUiBCWSBkYXRlX2V2ZW50IERFU0MiOwoJCX0KCQllbHNlaWYoJGFmZmljaGUgPT0nMCcpCgkJewoJCQlpZigkb2s9PScxJykKCQkJewoJCQkJJHF1ZXJ5My49IiBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPSA/IjsKCQkJCSRwYXJtc1snbW9udGgnXSA9ICRtb250aDsKCQkJCSRxdWVyeTMuPSIgT1JERVIgQlkgZGF0ZV9ldmVudCBERVNDIjsKCQkJCQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHF1ZXJ5My49IiBBTkQgZGF0ZV9ldmVudCBCRVRXRUVOID8gQU5EID8iOwoJCQkJJHBhcm1zWydkYXRlX2RlYnV0J10gPSAkZGF0ZV9kZWJ1dDsKCQkJCSRwYXJtc1snZGF0ZV9maW4nXSA9ICRkYXRlX2ZpbjsKCQkJCSRxdWVyeTMuPSIgT1JERVIgQlkgZGF0ZV9ldmVudCBERVNDIjsKCQkJCQoJCQl9CgkJfQoJCQoJCWVsc2UKCQl7CgkJCSRxdWVyeTMuPSIgT1JERVIgQlkgZGF0ZV9ldmVudCBERVNDIjsKCQkJCgkJfQoJCQoJCSRkYnJlc3VsdDMgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MywgJHBhcm1zKTsKCQkKCQkkcm93YXJyYXk9IGFycmF5ICgpOwoKCQlpZiAoJGRicmVzdWx0MyAmJiAkZGJyZXN1bHQzLT5SZWNvcmRDb3VudCgpID4gMCkKCQl7CgkJICAgIHdoaWxlICgkcm93PSAkZGJyZXN1bHQzLT5GZXRjaFJvdygpKQoJCQl7CgkKCQkJCSRvbmVyb3c9IG5ldyBTdGRDbGFzcygpOwoJCQkJJG9uZXJvdy0+cm93Y2xhc3M9ICRyb3djbGFzczsKCQkJCSRvbmVyb3ctPmRhdGVfZXZlbnQ9ICRyb3dbJ2RhdGVfZXZlbnQnXTsKCQkJCSRvbmVyb3ctPmFkdm5vbXByZT0gJHJvd1snYWR2bm9tcHJlJ107CgkJCQkvLyRvbmVyb3ctPm5vbT0gJHJvd1snbm9tJ107CgkJCQkkb25lcm93LT5hZHZjbGFvZj0gJHJvd1snYWR2Y2xhb2YnXTsKCQkJCSRvbmVyb3ctPnZkPSAkcm93Wyd2ZCddOwoJCQkJLy8kb25lcm93LT5jb2VmZj0gJHJvd1snY29lZmYnXTsKCQkJCSRvbmVyb3ctPnBvaW50cmVzPSAkcm93Wydwb2ludHJlcyddOwoJCQkJJHJvd2FycmF5W109ICRvbmVyb3c7CgkJICAgICAgCX0KCQl9CgkJZWxzZWlmKCRzYWlzb25fY291cmFudGUgIT0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpKSAvLyBpbCBuJ3kgYSBwYXMgZGUgcsOpc3VsdGF0cyBvbiByZWRpcmlnZSB2ZXJzIGxlcyByw6lzdWx0YXRzIGfDqW7DqXJpcXVlcyBkZSBjZXR0ZSBwZXJzb25uZQoJCXsKCQkJJHRoaXMtPlJlZGlyZWN0Rm9yRnJvbnRFbmQoJGlkLCAkcmV0dXJuaWQsICd1c2VyX3Jlc3VsdHMnLCBhcnJheSgnbGljZW5jZSc9PiRsaWNlbmNlLCdzYWlzb24nPT4kc2Fpc29uX2NvdXJhbnRlKSk7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5SZWRpcmVjdEZvckZyb250RW5kKCRpZCwgJHJldHVybmlkLCAndXNlcl9yZXN1bHRzJywgYXJyYXkoJ2xpY2VuY2UnPT4kbGljZW5jZSkpOwoJCX0KCQkKCQkkc21hcnR5LT5hc3NpZ24oJ3Jlc3VsdGF0cycsCgkJCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ3VzZXJfcmVzdWx0cycsJHJldHVybmlkLCRjb250ZW50cyA9ICdUb3VzIHNlcyByw6lzdWx0YXRzJywgYXJyYXkoJ2xpY2VuY2UnPT4kbGljZW5jZSwnc2Fpc29uJz0+JHNhaXNvbl9jb3VyYW50ZSkpKTsKCX0vL2ZpbiBkdSBlbHNlIChpZiAkbGljZW5jZSBpc3NldCkKCiRzbWFydHktPmFzc2lnbignaXRlbXNmb3VuZCcsICR0aGlzLT5MYW5nKCdyZXN1bHRmb3VuZHRleHQnKSk7CiRzbWFydHktPmFzc2lnbignb2snLCRvayk7CiRzbWFydHktPmFzc2lnbignaXRlbWNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiRzbWFydHktPmFzc2lnbigncmV0b3VyJywKIAkJJHRoaXMtPkNyZWF0ZVJldHVybkxpbmsoJGlkLCAkcmV0dXJuaWQsJ1JldG91cicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRyb3dhcnJheSk7CiRzbWFydHktPmFzc2lnbignYWZmaWNoZScsJGFmZmljaGUpOwovKgokc21hcnR5LT5hc3NpZ24oJ3Jlc3VsdGF0cycsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCd1c2VyX3Jlc3VsdHMnLCRyZXR1cm5pZCwgYXJyYXkoJ2xpY2VuY2UnPT4kbGljZW5jZSkpKTsKKi8KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCd1c2VyX3Jlc3VsdHMudHBsJyk7CgoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.user_results_prov.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwovL2RlYnVnX2Rpc3BsYXkoJHBhcmFtcywgJ1BhcmFtZXRlcnMnKTsKJGRiID0mICR0aGlzLT5HZXREYigpOwovL2dsb2JhbCAkdGhlbWVPYmplY3Q7CnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2luY2x1ZGUvcHJlZnMucGhwJyk7CiRsaWNlbmNlID0gJyc7CiRkYXRlX2V2ZW50ID0gJyc7CiRhZmZpY2hlID0gMTsKCglpZighaXNzZXQoJHBhcmFtc1snbGljZW5jZSddKSAmJiAkcGFyYW1zWydsaWNlbmNlJ10gPT0nJyApCgl7CgkJZWNobyAibGEgbGljZW5jZSBlc3QgYWJzZW50ZSAhIjsKCQkKCX0KCWVsc2UKCXsKCQkkbGljZW5jZSA9ICRwYXJhbXNbJ2xpY2VuY2UnXTsKCQkKCQkvL3NpIHVuZSBkYXRlIGVzdCBwcsOpY2lzw6llIGFsb3JzIG9uIGFmZmljaGUgcXVlIGxlcyByw6lzdWx0YXRzIGRlIGNldHRlIGRhdGUKCQlpZihpc3NldCgkcGFyYW1zWydkYXRlX2RlYnV0J10pICYmICRwYXJhbXNbJ2RhdGVfZGVidXQnXSAhPScnKQoJCXsKCQkJLy9vbiB2YSBhbG9ycyBjYWNoZXIgY2VydGFpbnMgw6lsw6ltZW50cyBkZSBsYSBwYWdlCgkJCSRhZmZpY2hlID0gMDsKCQkJJGRhdGVfZGVidXQgPSAkcGFyYW1zWydkYXRlX2RlYnV0J107CgkJCSRkYXRlX2ZpbiA9ICRwYXJhbXNbJ2RhdGVfZmluJ107CgkJfQoJCQoJCWlmKGlzc2V0KCRwYXJhbXNbJ21vbnRoJ10pICYmICRwYXJhbXNbJ21vbnRoJ10gIT0nJykKCQl7CgkJCSRhZmZpY2hlID0gMDsKCQkJJG9rID0gMTsKCQkJJG1vbnRoID0gJHBhcmFtc1snbW9udGgnXTsKCQl9CgkJaWYoJGFmZmljaGUgPT0xKQoJCXsKCQkJJHNtYXJ0eS0+YXNzaWduKCdwaGFzZTInLAoJCQkJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwndXNlcl9yZXN1bHRzJywkcmV0dXJuaWQsICdQaGFzZSAyJywgYXJyYXkoInBoYXNlIj0+IjIiLCJsaWNlbmNlIj0+JGxpY2VuY2UpICkpOwoJCQkkc21hcnR5LT5hc3NpZ24oJ3BoYXNlMScsCgkJCQkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCd1c2VyX3Jlc3VsdHMnLCRyZXR1cm5pZCwgJ1BoYXNlIDEnLCBhcnJheSgicGhhc2UiPT4iMSIsImxpY2VuY2UiPT4kbGljZW5jZSkgKSk7CgkJfQoJCQoJCSRyb3dhcnJheTEgPSBhcnJheSgpOwoJCSRxdWVyeSA9ICJTRUxFQ1QgU1VNKHZpY3RvaXJlKSBBUyB2aWMsIGNvdW50KHZpY3RvaXJlKSBBUyB0b3RhbCwgU1VNKHBvaW50cmVzKSBBUyBwdHMgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllc19zcGlkIFdIRVJFIHNhaXNvbiA9ID8gQU5EIGxpY2VuY2UgPSA/IjsKCQkvL3FxcyBwYXJhbcOodHJlcwoJCSRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uX2NvdXJhbnRlOwoJCSRwYXJtc1snbGljZW5jZSddID0gJGxpY2VuY2U7CgkJLy9vbiBwcmVzZW50ZSBwaGFzZSBwYXIgcGhhc2UgPwoJCWlmKCRhZmZpY2hlID09MSkKCQl7CgkJCWlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwaGFzZV9lbl9jb3VycycpID09JzEnICkKCQkJewoJCQkJaWYoJHBhcmFtc1sncGhhc2UnXSA9PTIpCgkJCQl7CgkJCQkJJHF1ZXJ5Lj0gIiBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPj0gMSBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPD03IjsgCgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHF1ZXJ5Lj0gIiBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPiA3IEFORCBNT05USChkYXRlX2V2ZW50KSA8PTEyIjsgIC8vLy9CRVRXRUVOIE5PVygpIEFORCAoTk9XKCkgKyBJTlRFUlZBTCA3IERBWSkiOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiggJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJykgPT0gJzInKQoJCQl7CgkJCQlpZigkcGFyYW1zWydwaGFzZSddID09MSkKCQkJCXsKCQkJCQkkcXVlcnkuPSAiIEFORCBNT05USChkYXRlX2V2ZW50KSA+IDcgQU5EIE1PTlRIKGRhdGVfZXZlbnQpIDw9MTIiOyAgLy8vL0JFVFdFRU4gTk9XKCkgQU5EIChOT1coKSArIElOVEVSVkFMIDcgREFZKSI7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHF1ZXJ5Lj0gIiBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPj0gMSBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPD03IjsgIC8vLy9CRVRXRUVOIE5PVygpIEFORCAoTk9XKCkgKyBJTlRFUlZBTCA3IERBWSkiOwkKCQkJCX0KCQkJfQoJCX0KCQllbHNlaWYoJG9rID09JzEnKQoJCXsKCQkJJHF1ZXJ5Lj0iIEFORCBNT05USChkYXRlX2V2ZW50KSA9ID8iOwoJCQkkcGFybXNbJ21vbnRoJ10gPSAkbW9udGg7CgkJfQoJCQoKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCAkcGFybXMpOwoKCQkJaWYoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKT4wKQoJCQl7CgkJCQl3aGlsZSgkcm93MSA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQkJCXsKCQkJCQkkb25lcm93MT0gbmV3IFN0ZENsYXNzKCk7CgkJCQkJJG9uZXJvdzEtPnJvd2NsYXNzPSAkcm93Y2xhc3M7CgkJCQkJJG9uZXJvdzEtPnZpYz0gJHJvdzFbJ3ZpYyddOwoJCQkJCSRvbmVyb3cxLT50b3RhbD0gJHJvdzFbJ3RvdGFsJ107CgkJCQkJJG9uZXJvdzEtPnB0cz0gJHJvdzFbJ3B0cyddOwoJCQkJCSgkcm93Y2xhc3MgPT0gInJvdzEiID8gJHJvd2NsYXNzPSAicm93MiIgOiAkcm93Y2xhc3M9ICJyb3cxIik7CgkJCQkJJHJvd2FycmF5MVtdPSAkb25lcm93MTsKCQkJCX0KCQkJfQoJCSRzbWFydHktPmFzc2lnbignaXRlbXMxJywgJHJvd2FycmF5MSk7CgoKCQkkcXVlcnkxID0gIlNFTEVDVCBDT05DQVRfV1MoJyAnLCBub20sIHByZW5vbSkgQVMgam91ZXVyIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgV0hFUkUgbGljZW5jZSA9ID8iOwoKCgkJJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MSwgYXJyYXkoJGxpY2VuY2UpKTsKCQkKCQkvL2ZhdWRyYWl0IHRlc3RlciBzaSDDp2EgbWFyY2hlIG91IG5vbgoJCWlmKCEkZGJyZXN1bHRhdCkKCQl7CgkJCSRkZXNpZ25hdGlvbiA9ICRkYi0+RXJyb3JNc2coKTsKCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJycsJ0tPJywkZGVzaWduYXRpb24sJycpOwoJCX0KCQkKCQkkcm93MSA9ICRkYnJlc3VsdGF0LT5GZXRjaFJvdygpOwoJCSRqb3VldXIgPSAkcm93MVsnam91ZXVyJ107CgkJJHNtYXJ0eS0+YXNzaWduKCdqb3VldXInLCAkam91ZXVyKTsKCQkkcmVzdWx0PSBhcnJheSAoKTsKCQkkcXVlcnkzPSAiU0VMRUNUIG5vbSwgY2xhc3NlbWVudCxwb2ludHJlcywgdmljdG9pcmUsZGF0ZV9ldmVudCxlcHJldXZlLG51bWpvdXJuIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCBXSEVSRSBzYWlzb24gPSA/IEFORCBsaWNlbmNlID0gPyI7Ly8iIE9SREVSIEJZIGRhdGVfZXZlbnQgQVNDIjsKCQkkcGFybXNbJ2xpY2VuY2UnXSA9ICRsaWNlbmNlOwoJCSRwYXJtc1snc2Fpc29uJ10gPSAkc2Fpc29uX2NvdXJhbnRlOwoJCWlmKCRhZmZpY2hlID09JzEnKQoJCXsKCQkJaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJykgPT0nMScgKQoJCQl7CgkJCQlpZigkcGFyYW1zWydwaGFzZSddID09MikKCQkJCXsKCQkJCQkkcXVlcnkzLj0gIiBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPj0gMSBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPD03IjsgCgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHF1ZXJ5My49ICIgQU5EIE1PTlRIKGRhdGVfZXZlbnQpID4gNyBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPD0xMiI7ICAvLy8vQkVUV0VFTiBOT1coKSBBTkQgKE5PVygpICsgSU5URVJWQUwgNyBEQVkpIjsKCQkJCX0KCQkJfQoJCQllbHNlaWYoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwaGFzZV9lbl9jb3VycycpID09ICcyJykKCQkJewoJCQkJaWYoJHBhcmFtc1sncGhhc2UnXSA9PTEpCgkJCQl7CgkJCQkJJHF1ZXJ5My49ICIgQU5EIE1PTlRIKGRhdGVfZXZlbnQpID4gNyBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPD0xMiI7ICAvLy8vQkVUV0VFTiBOT1coKSBBTkQgKE5PVygpICsgSU5URVJWQUwgNyBEQVkpIjsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkcXVlcnkzLj0gIiBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPj0gMSBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPD03IjsgIC8vLy9CRVRXRUVOIE5PVygpIEFORCAoTk9XKCkgKyBJTlRFUlZBTCA3IERBWSkiOwkKCQkJCX0KCQkJfQoJCX0KCQllbHNlaWYoJGFmZmljaGUgPT0nMCcpCgkJewoJCQlpZigkb2s9PScxJykKCQkJewoJCQkJJHF1ZXJ5My49IiBBTkQgTU9OVEgoZGF0ZV9ldmVudCkgPSA/IjsKCQkJCSRwYXJtc1snbW9udGgnXSA9ICRtb250aDsKCQkJCSRxdWVyeTMuPSIgT1JERVIgQlkgZGF0ZV9ldmVudCBERVNDIjsKCQkJCQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHF1ZXJ5My49IiBBTkQgZGF0ZV9ldmVudCBCRVRXRUVOID8gQU5EID8iOwoJCQkJJHBhcm1zWydkYXRlX2RlYnV0J10gPSAkZGF0ZV9kZWJ1dDsKCQkJCSRwYXJtc1snZGF0ZV9maW4nXSA9ICRkYXRlX2ZpbjsKCQkJCSRxdWVyeTMuPSIgT1JERVIgQlkgZGF0ZV9ldmVudCBERVNDIjsKCQkJCQoJCQl9CgkJfQoJCQoJCWVsc2UKCQl7CgkJCSRxdWVyeTMuPSIgT1JERVIgQlkgZGF0ZV9ldmVudCBERVNDIjsKCQkJCgkJfQoJCQoJCSRkYnJlc3VsdDMgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MywgJHBhcm1zKTsKCQkvKgoJCQlpZigkZGJyZXN1bHQzICYmICRkYnJlc3VsdDMtPlJlY29yZENvdW50KCk+MCkKCQkJewoJCQkJd2hpbGUoJHJvdzEgPSAkZGJyZXN1bHQzLT5GZXRjaFJvdygpKQoJCQkJewoJCQkJCSRvbmVyb3cxPSBuZXcgU3RkQ2xhc3MoKTsKCQkJCQkkb25lcm93MS0+cm93Y2xhc3M9ICRyb3djbGFzczsKCQkJCQkkb25lcm93MS0+dmljPSAkcm93MVsndmljJ107CgkJCQkJJG9uZXJvdzEtPnRvdGFsPSAkcm93MVsndG90YWwnXTsKCQkJCQkkb25lcm93MS0+cHRzPSAkcm93MVsncHRzJ107CgkJCQoJCQkJCSgkcm93Y2xhc3MgPT0gInJvdzEiID8gJHJvd2NsYXNzPSAicm93MiIgOiAkcm93Y2xhc3M9ICJyb3cxIik7CgkJCQkJJHJvd2FycmF5MVtdPSAkb25lcm93MTsKCQkJCX0KCQkJfS8vZWNobyAkcXVlcnk7CgkJKi8KCQkvKgoJCWlmKCRhZmZpY2hlID09MSkKCQl7CgkJCS8vT24gbWV0IHVuIG9yZHJlIHBhcnRpY3VsaWVyIG91IHBhcyA/CgkJCSRxdWVyeTMuPSIgT1JERVIgQlkgZGF0ZV9ldmVudCBERVNDIjsKCQkJJGRicmVzdWx0Mz0gJGRiLT5FeGVjdXRlKCRxdWVyeTMsIGFycmF5KCRsaWNlbmNlLCAkc2Fpc29uX2NvdXJhbnRlKSk7CgkJfQoJCWVsc2UKCQl7CgkJCSRkYnJlc3VsdDM9ICRkYi0+RXhlY3V0ZSgkcXVlcnkzLCBhcnJheSgkbGljZW5jZSwgJHNhaXNvbl9jb3VyYW50ZSwkZGF0ZV9kZWJ1dCwgJGRhdGVfZmluKSk7CgkJfQoJCSovCgkJJHJvd2FycmF5PSBhcnJheSAoKTsKCgkJaWYgKCRkYnJlc3VsdDMgJiYgJGRicmVzdWx0My0+UmVjb3JkQ291bnQoKSA+IDApCgkJICB7CgkJICAgIHdoaWxlICgkcm93PSAkZGJyZXN1bHQzLT5GZXRjaFJvdygpKQoJCSAgICAgIHsKCQoJCQkkb25lcm93PSBuZXcgU3RkQ2xhc3MoKTsKCQkJJG9uZXJvdy0+cm93Y2xhc3M9ICRyb3djbGFzczsKCQkJJG9uZXJvdy0+ZGF0ZV9ldmVudD0gJHJvd1snZGF0ZV9ldmVudCddOwoJCQkkb25lcm93LT5lcHJldXZlPSAkcm93WydlcHJldXZlJ107CgkJCSRvbmVyb3ctPm5vbT0gJHJvd1snbm9tJ107CgkJCSRvbmVyb3ctPmNsYXNzZW1lbnQ9ICRyb3dbJ2NsYXNzZW1lbnQnXTsKCQkJJG9uZXJvdy0+dmljdG9pcmU9ICRyb3dbJ3ZpY3RvaXJlJ107CgkJCS8vJG9uZXJvdy0+Y29lZmY9ICRyb3dbJ2NvZWZmJ107CgkJCSRvbmVyb3ctPnBvaW50cmVzPSAkcm93Wydwb2ludHJlcyddOwoJCQkkcm93YXJyYXlbXT0gJG9uZXJvdzsKCQkgICAgICB9CgkJICB9CgkJJHNtYXJ0eS0+YXNzaWduKCdyZXN1bHRhdHMnLAoJCQkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCd1c2VyX3Jlc3VsdHMnLCRyZXR1cm5pZCwkY29udGVudHMgPSAnVG91cyBzZXMgcsOpc3VsdGF0cycsIGFycmF5KCdsaWNlbmNlJz0+JGxpY2VuY2UpKSk7Cgl9Ly9maW4gZHUgZWxzZSAoaWYgJGxpY2VuY2UgaXNzZXQpCgokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zZm91bmQnLCAkdGhpcy0+TGFuZygncmVzdWx0c2ZvdW5kdGV4dCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdvaycsJG9rKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKJHNtYXJ0eS0+YXNzaWduKCdyZXRvdXInLAogCQkkdGhpcy0+Q3JlYXRlUmV0dXJuTGluaygkaWQsICRyZXR1cm5pZCwnUmV0b3VyJykpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKJHNtYXJ0eS0+YXNzaWduKCdhZmZpY2hlJywkYWZmaWNoZSk7Ci8qCiRzbWFydHktPmFzc2lnbigncmVzdWx0YXRzJywKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ3VzZXJfcmVzdWx0cycsJHJldHVybmlkLCBhcnJheSgnbGljZW5jZSc9PiRsaWNlbmNlKSkpOwoqLwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3VzZXJfcmVzdWx0c19wcm92LnRwbCcpOwoKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.var_dump.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICBQcmVtacOocmUgw6l0YXBlIGRlIHLDqWN1cMOpcmF0aW9uIGRlcyDDqXF1aXBlcyAgICAgICAgICAgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCgppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwovL3JlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmNhbGN1bHMucGhwJyk7CgokY2x1Yl9udW1iZXIgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY2x1Yl9udW1iZXInKTsKLy9lY2hvICdsZSBudW3DqXJvIGRlIGNsdWIgZXN0IDogJy4kY2x1Yl9udW1iZXI7Ci8vJHNhaXNvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKJHNhaXNvbiA9ICcyMDE0LTIwMTUnOwokcGhhc2UgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGhhc2VfZW5fY291cnMnKTsKJGxpY2VuY2UgPSAnMjkyOTM3OCc7CiRpZEFwcGxpID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2lkQXBwbGknKTsKZWNobyAkaWRBcHBsaTsKJHNlcnZpY2UgPSBuZXcgU2VydmljZW4oKTsKLy8kc2VydmljZXBpbmcgPSBuZXcgU2VydmljZXBpbmcoKTsKLy9wb3VyIHLDqWN1cMOpcmVyIGxlcyDDqXF1aXBlcyBkdSBjaGFtcGlvbm5hdCBzZW5pb3JzIEZGVFQKLy8kdHlwZSA9ICdEJzsKLy8kbGluayA9ICJodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS9weG1sL3htbF9vcmdhbmlzbWUucGhwIjsKLy8kbGluayA9ICJodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS9weG1sL3htbF9lcHJldXZlLnBocCI7Ci8vJGxpbmsgPSAiaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUvcHhtbC94bWxfZGl2aXNpb24ucGhwIjsKLy8kbGluayA9ICJodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS9weG1sL3htbF9yZXN1bHRfaW5kaXYucGhwIjsKJGxpbmsgPSAiaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUvcHhtbC94bWxfY2x1Yl9kZXRhaWwucGhwIjsKLy8kbGluayA9ICJodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS9weG1sL3htbF9oaXN0b19jbGFzc2VtZW50LnBocCI7CiR0aGlzLT5zZXJpZSA9IFNlcnZpY2VuOjpHZXRTZXJpZSgpOwovLyRjb2RlID0gIkdXSEJWVlVIUjk3TFg0RCI7CmVjaG8gImxlIG51bWVybyBkZSBzZXJpZSBlc3QgOiAiLiR0aGlzLT5zZXJpZS4iPGJyIC8+IjsKJGxpbmsuPSI/c2VyaWU9Ii4kdGhpcy0+c2VyaWU7CiR0aGlzLT5jb2RlID0gU2VydmljZW46OkdldFBhc3N3b3JkKCk7CmVjaG8gImxlIG1vdCBkZSBwYXNzZSBjcnlwdMOpIGVzdCA6ICIuJHRoaXMtPmNvZGUuIjxiciAvPiI7CiR0aGlzLT50bSA9IFNlcnZpY2VuOjpHZXRUaW1lc3RhbXAoKTsKJGxpbmsuPSImdG09Ii4kdGhpcy0+dG07CiR0aGlzLT50bWMgPSBTZXJ2aWNlbjo6R2V0RW5jcnlwdGVkVGltZXN0YW1wKCk7CiRsaW5rLj0iJnRtYz0iLiR0aGlzLT50bWM7CiR0aGlzLT5pZEFwcGxpID0gU2VydmljZW46OkdldElkQXBwbGkoKTsKJGxpbmsuPSImaWQ9Ii4kdGhpcy0+aWRBcHBsaTsKZWNobyAibGUgbnVtZXJvIGRlIGFwcGxpY2F0aW9uIGVzdCA6ICIuJHRoaXMtPmlkQXBwbGkuIjxiciAvPiI7Ci8vJGxpbmsuPSImbnVtbGljPTI5MjI3MSI7Ci8vJGxpbmsuPSImYWN0aW9uPXBvdWxlIjsKLy8kbGluay49IiZvcmdhbmlzbWU9MjkiOwovLyRsaW5rLj0iJmVwcmV1dmU9MTA3MiI7Ci8vJGxpbmsuPSImdHlwZT1JIjsKJGxpbmsuPSImY2x1Yj0iLiRjbHViX251bWJlcjsKIyRsaW5rLj0iJmVwcj0xMDcyJnJlc19kaXZpc2lvbj0zMDQ4JmN4X3RhYmxlYXU9MzYzMTAiOwoKZWNobyAiPGJyIC8+PGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj0iLiRsaW5rLiI+Ii4kbGluay4iPC9hPiI7CgokaW5pID0gZmlsZV9nZXRfY29udGVudHMoJGxpbmspOwokeG1sID0gc2ltcGxleG1sX2xvYWRfc3RyaW5nKCRpbmkpOwoKCnZhcl9kdW1wKCR4bWwpOwojJGluaSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRsaW5rKTsKIyR4bWwgPSBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGluaSk7Ci8vTEUgRkxPQydIIFBpZXJyZQovL0dVSUNIQU9VQSAtIExFIEdPRkYgQW50b2luZQovKgokbm9tID0gIkRFTEFOT8OLIEFkcmllbiI7CiRub21fZ2xvYmFsID0gcGluZ19hZG1pbl9vcHM6OmdldF9uYW1lKCRub20pOwoKJG5vbV9yZWVsID0gYWRkc2xhc2hlcygkbm9tX2dsb2JhbFswXSk7Ly9sZSBub20KJHByZW5vbV9yZWVsID0gJG5vbV9nbG9iYWxbMV07Ly9sZSBwcsOpbm9tCgoKZWNobyAibGUgbm9tIGVzdCA6Ii4kbm9tX3JlZWwuIiBsZSBwcsOpbm9tIGVzdCA6ICIuJHByZW5vbV9yZWVsLiI8YnIgLz4iOwoKJHJlc3VsdCA9ICRzZXJ2aWNlLT5nZXRKb3VldXJzQnlOYW1lKCRub21fcmVlbCwkcHJlbm9tID0gIiRwcmVub21fcmVlbCIpOwoqLwoKLy8kcmVzdWx0ID0gJHNlcnZpY2VwaW5nLT5nZXRFcXVpcGVzQnlDbHViKCIkY2x1Yl9udW1iZXIiKTsKLy8kcmVzdWx0ID0gJHNlcnZpY2VwaW5nLT5nZXRFcHJldXZlcygnMTAwMDAxJywkdHlwZT0nRScpOwovLyRyZXN1bHQgPSAkc2VydmljZS0+Z2V0RGl2aXNpb25zKCIyOSIsICIxMDcyIik7Ci8vUG91ciByw6ljdXDDqXJlciB0b3V0ZXMgbGVzIGF1dHJlcyDDqXF1aXBlcyBkZXMgYXV0cmVzIGNoYW1waW9ubmF0Ci8vJHJlc3VsdCA9ICRzZXJ2aWNlLT5nZXRFcXVpcGVzQnlDbHViKCIkY2x1Yl9udW1iZXIiKTsKLy8kcmVzdWx0ID0gJHNlcnZpY2UtPmdldFJlbmNvbnRyZSgiIik7Ci8vJHJlc3VsdCA9ICRzZXJ2aWNlcGluZy0+Z2V0Q2x1YigiJGNsdWJfbnVtYmVyIik7Ci8vcG91ciByw6ljdXDDqXJlciBsZXMgcGFydGllcyBGRlRUIGQndW4gam91ZXVyCi8vJHJlc3VsdCA9ICRzZXJ2aWNlLT5nZXRKb3VldXJQYXJ0aWVzKCIkbGljZW5jZSIpOwkKLy92YXJfZHVtcCgkcmVzdWx0KTsKLyoqLwovL29uIHZhIHRlc3RlciBzaSBsYSB2YXJpYWJsZSBlc3QgYmllbiB1biB0YWJsZWF1ICAgCgojIEVPRgojCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.view_contacts.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7CmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBNYW5hZ2UnKSkKICB7CiAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicpKTsKCXJldHVybjsKICAgCiAgfQoKJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2pvdWV1cnMnKTsKJGRiID0mICR0aGlzLT5HZXREYigpOwpnbG9iYWwgJHRoZW1lT2JqZWN0OwovLyRyZWNvcmRfaWQgPSAkcGFyYW1zWydyZWNvcmRfaWQnXTsKaWYoIGlzc2V0KCAkcGFyYW1zWydtZXNzYWdlJ10gKSApCiAgewogICAgJHNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJyxodG1sX2VudGl0eV9kZWNvZGUoJHBhcmFtc1snbWVzc2FnZSddKSk7CiAgfQppZiggaXNzZXQoICRwYXJhbXNbJ2Vycm9yJ10gKSApCiAgewogICAgJHNtYXJ0eS0+YXNzaWduKCdlcnJvcicsaHRtbF9lbnRpdHlfZGVjb2RlKCRwYXJhbXNbJ2Vycm9yJ10pKTsKICB9CgoKCiRsaWNlbmNlID0gJyc7CmlmKCAhaXNzZXQoICRwYXJhbXNbJ2xpY2VuY2UnXSApIHx8ICRwYXJhbXNbJ2xpY2VuY2UnXSA9PSAnJykgICAgCnsKCQoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwoJICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAgICR0aGlzLT5SZWRpcmVjdCggJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zICk7CgkgICAgcmV0dXJuOwp9CgogICAgLy8gZmluZCB0aGUgdXNlcgogICAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NvbW0gV0hFUkUgbGljZW5jZSA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoICRwYXJhbXNbJ2xpY2VuY2UnXSApKTsKICAgICRyb3djbGFzcz0gJ3JvdzEnOwokcm93YXJyYXk9IGFycmF5ICgpOwppZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApCiAgewogICAgd2hpbGUgKCRyb3c9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKICAgICAgewoJJGFjdGlmID0gJHJvd1snYWN0aWYnXTsKCSRvbmVyb3c9IG5ldyBTdGRDbGFzcygpOwoJJG9uZXJvdy0+cm93Y2xhc3M9ICRyb3djbGFzczsKCSRvbmVyb3ctPmlkPSAkcm93WydpZCddOwoJJG9uZXJvdy0+dHlwZV9jb250YWN0PSAkcm93Wyd0eXBlX2NvbnRhY3QnXTsKCSRvbmVyb3ctPmNvbnRhY3Q9ICRyb3dbJ2NvbnRhY3QnXTsKCSRvbmVyb3ctPmRlc2NyaXB0aW9uPSAkcm93WydkZXNjcmlwdGlvbiddOwoJJG9uZXJvdy0+Y3JlYXRlX2NvbnRhY3Q9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZWRpdF9jb250YWN0JywgJHJldHVybmlkLCR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCAkdGhpcy0+TGFuZygnY3JlYXRlX2NvbnRhY3QnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLGFycmF5KCdpZF9yZWNvcmQnPT4kcm93WydpZCddKSk7Cgkkb25lcm93LT5kb2VkaXQ9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRfam91ZXVyJywgJHJldHVybmlkLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLGFycmF5KCdsaWNlbmNlJz0+JHJvd1snbGljZW5jZSddKSk7Cgkkb25lcm93LT5kZWxldGVsaW5rPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGVfY29udGFjdCcsICRyZXR1cm5pZCwgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCdyZWNvcmRfaWQnPT4kcm93WydpZCddKSwgJHRoaXMtPkxhbmcoJ2RlbGV0ZV9yZXN1bHRfY29uZmlybScpKTsKCSgkcm93Y2xhc3MgPT0gInJvdzEiID8gJHJvd2NsYXNzPSAicm93MiIgOiAkcm93Y2xhc3M9ICJyb3cxIik7Cgkkcm93YXJyYXlbXT0gJG9uZXJvdzsKICAgICAgfQogIH0KJHNtYXJ0eS0+YXNzaWduKCdpdGVtc2ZvdW5kJywgJHRoaXMtPkxhbmcoJ3Jlc3VsdHNmb3VuZHRleHQnKSk7CiRzbWFydHktPmFzc2lnbignaXRlbWNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiRzbWFydHktPmFzc2lnbignaXRlbXMnLCAkcm93YXJyYXkpOwokc21hcnR5LT5hc3NpZ24oJ2NyZWF0ZV9uZXdfY29udGFjdCcsCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdjcmVhdGVfY29udGFjdCcsJHJldHVybmlkLCdDcsOpZXIgdW4gbm91dmVhdSBjb250YWN0JywgYXJyYXkoJ2xpY2VuY2UnPT4kcGFyYW1zWydsaWNlbmNlJ10pKSk7CiRzbWFydHktPmFzc2lnbignY3JlYXRlbGluaycsIAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2NyZWF0ZV9jb250YWN0JywgJHJldHVybmlkLAoJCQkJICAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAkdGhpcy0+TGFuZygnY3JlYXRlX2NvbnRhY3QnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpKS4KCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdjcmVhdGVfY29udGFjdCcsICRyZXR1cm5pZCwgCgkJCQkgICR0aGlzLT5MYW5nKCdjcmVhdGVfY29udGFjdCcpLCAKCQkJCSAgYXJyYXkoKSkpOwoKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnY29udGFjdHMudHBsJyk7CgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/cron/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/cron/action.cron_retrieve_all_parties.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy9pZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7Ci8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5jYWxjdWxzLnBocCcpOwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3ByZWZzLnBocCcpOwokc2Fpc29uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwokbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CiRxdWVyeSA9ICJTRUxFQ1QgbGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZWN1cF9wYXJ0aWVzIFdIRVJFIG1hal9mZnR0IDwgTk9XKCktSU5URVJWQUwgMyBEQVkgQU5EIHNhaXNvbiA9ID8gT1JERVIgQlkgbWFqX2ZmdHQgREVTQyBMSU1JVCAyNSAiOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkc2Fpc29uKSk7Ci8vb24gYSBkb25jIGxlcyBuIGxpY2VuY2VzIHBvdXIgZmFpcmUgbGEgZGV1eGnDqG1lIHJlcXVldGUKLy9vbiBjb21tZW5jZSDDoCBib3VjbGVyCgokcm93Y2xhc3M9ICdyb3cxJzsKJHJvd2FycmF5PSBhcnJheSAoKTsKCgppZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApCiAgewogIC8vIG9uIGluc3RhbmNpZSBsYSBjbGFzc2UgCgogICAgd2hpbGUgKCRyb3c9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKICAgICAgewoJJHNlcnZpY2UgPSBuZXcgU2VydmljZSgpOwoJJGxpY2VuY2UgPSAkcm93WydsaWNlbmNlJ107Cgkkam91ZXVyID0gJHJvd1snam91ZXVyJ107CiAgICAgCi8qKi8KCSRyZXN1bHQgPSAkc2VydmljZS0+Z2V0Sm91ZXVyUGFydGllcygiJGxpY2VuY2UiKTsKCSRpID0gMDsKCSRjb21wdGFnZSA9IDA7CgkJZm9yZWFjaCgkcmVzdWx0IGFzICRjbGUgPT4kdGFiKQoJCXsKCQkJJGNvbXB0YWdlKys7CgkJCQoJCQkvL29uIHbDqXJpZmllIHF1ZSBsZSBzZXJ2aWNlIGVzdCBvayBzaW5vbiBvbiBwYXNzZSBhdSBzdWl2YW50CgkJCWlmKCFpc19hcnJheSgkcmVzdWx0KSAmJiBjb3VudCgkcmVzdWx0KT09MCkKCQkJewoJCQkJLy9sZSBzZXJ2aWNlIGVzdCBkb3duCgkJCQkkZGVzaWduYXRpb24gPSAiU2VydmljZSBjb3Vww6kgb3UgbGljZW5jZSBpbmRpc3BvbmlibGUgcG91ciAiLiRqb3VldXI7CgkJCQkkc3RhdHVzID0gJ0VjaGVjJzsKCQkJCSRhY3Rpb24gPSdyZXRyaWV2ZV9hbGxfcGFydGllcyc7CgkJCQkKCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csICRzdGF0dXMsICRkZXNpZ25hdGlvbiwgJGFjdGlvbik7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvLyBsZSBzZXJ2aWNlIGVzdCBPaywgb24gY29udGludWUKCQkJCgkJCQkkbGljZW5jZTIgPSAkdGFiW2xpY2VuY2VdOwoJCQkJJGFkdmxpYyA9ICR0YWJbYWR2bGljXTsKCQkJCSR2ZCA9ICR0YWJbdmRdOwoJCgkJCQkJaWYgKCR2ZCA9PSdWJyl7CgkJCQkJCSR2ZCA9IDE7CgkJCQkJCX0KCQkJCQllbHNlIAoJCQkJCQl7JHZkID0gMDsKCQkJCQl9CgkJCgkJCQkkbnVtam91cm4gPSAkdGFiW251bWpvdXJuXTsKCQkJCgkJCQkJaWYoaXNfYXJyYXkoJG51bWpvdXJuKSkKCQkJCQl7CgkJCQkJCSRudW1qb3VybiA9ICcwJzsKCQkJCQl9CgkJCQkKCQkJCSRjb2RlY2hhbXAgPSAkdGFiW2NvZGVjaGFtcF07CgkJCQkkZGF0ZWV2ZW50ID0gJHRhYltkYXRlXTsKCQkJCSRjaGd0ID0gZXhwbG9kZSgiLyIsJGRhdGVldmVudCk7CgkJCQkkZGF0ZV9ldmVudCA9ICRjaGd0WzJdLiItIi4kY2hndFsxXS4iLSIuJGNoZ3RbMF07CgkJCQkvL2VjaG8gImxhIGRhdGUgZXN0Ii4kZGF0ZV9ldmVudDsKCQoJCQkJLy8JJGRhdGVfZXZlbnQgPSBjb252X2RhdGVfdmVyc19teXNxbCgkZGF0ZWV2ZW50KTsKCQkJCSRhZHZzZXhlID0gJHRhYlthZHZzZXhlXTsKCQkJCSRhZHZub21wcmUgPSAkdGFiW2Fkdm5vbXByZV07CgkJCQkkcG9pbnRyZXMgPSAkdGFiW3BvaW50cmVzXTsKCQkJCSRjb2VmY2hhbXAgPSAkdGFiW2NvZWZjaGFtcF07CgkJCQkkYWR2Y2xhb2YgPSAkdGFiW2FkdmNsYW9mXTsKCQoJLyoqLwkJCSRxdWVyeTIgPSAiU0VMRUNUIGxpY2VuY2UsYWR2bGljLCBudW1qb3VybiwgY29kZWNoYW1wLCBkYXRlX2V2ZW50LCBjb2VmY2hhbXAgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyBXSEVSRSBsaWNlbmNlID0gPyBBTkQgYWR2bGljID0gPyBBTkQgbnVtam91cm4gPSA/IEFORCBjb2RlY2hhbXAgPSA/IEFORCBkYXRlX2V2ZW50ID0gPyBBTkQgY29lZmNoYW1wID0gPyI7CgkJCQkkZGJyZXN1bHQyID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsIGFycmF5KCRsaWNlbmNlMiwgJGFkdmxpYywgJG51bWpvdXJuLCAkY29kZWNoYW1wLCAkZGF0ZV9ldmVudCwgJGNvZWZjaGFtcCkpOwoJCQkKCQkJCQlpZigkZGJyZXN1bHQyICAmJiAkZGJyZXN1bHQyLT5SZWNvcmRDb3VudCgpID09IDApIAoJCQkJCXsKCQkJCQkJJHF1ZXJ5MyA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyAoaWQsc2Fpc29uLCBsaWNlbmNlLCBhZHZsaWMsIHZkLCBudW1qb3VybiwgY29kZWNoYW1wLCBkYXRlX2V2ZW50LCBhZHZzZXhlLCBhZHZub21wcmUsIHBvaW50cmVzLCBjb2VmY2hhbXAsIGFkdmNsYW9mKSBWQUxVRVMgKCcnLD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIjsKCQkJCQkJJGkrKzsKCQkJCQkJLy9lY2hvICRxdWVyeTsKCQkJCQkJJGRicmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5MyxhcnJheSggJHNhaXNvbl9jb3VyYW50ZSwgJGxpY2VuY2UyLCAkYWR2bGljLCAkdmQsICRudW1qb3VybiwgJGNvZGVjaGFtcCwgJGRhdGVfZXZlbnQsICRhZHZzZXhlLCAkYWR2bm9tcHJlLCAkcG9pbnRyZXMsICRjb2VmY2hhbXAsICRhZHZjbGFvZikpOwoJCQoJCQkJCQkJaWYoISRkYnJlc3VsdGF0KQoJCQkJCQkJewoJCQkJCQkJCSRkZXNpZ25hdGlvbiA9ICRkYi0+RXJyb3JNc2coKTsgCgkJCQkJCQkJJHN0YXR1cyA9ICdFY2hlYyc7CgkJCQkJCQkJJGFjdGlvbiA9ICdyZXRyaWV2ZV9hbGxfcGFydGllcyc7CgkJCQkJCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywgJHN0YXR1cywgJGRlc2lnbmF0aW9uLCAkYWN0aW9uKTsKCQkJCQkJCX0KCQkJCQoJCQkJCX0KCQkJCgkJCX0vL2ZpbiBkdSBlbHNlICFpc19hcnJheQoJCX0vL2ZpbiBkdSBmb3JlYWNoCgkKCQkvL29uIHBldXQgZmFpcmUgbGEgbWFqX2ZmdHQgaWNpCgkJCgkJCgkJJGRlc2lnbmF0aW9uID0gIkluY2x1c2lvbiBkZSAiLiRpLiIgcsOpc3VsdGF0cyBwb3VyICIuJGpvdWV1cjsKCQlpZigkaT09MCkKCQl7CgkJCSRkZXNpZ25hdGlvbi49IiBTZXJ2aWNlIGNvdXDDqSA/IExpY2VuY2UgYWJzZW50ZSA/IjsKCQl9CgkJZWxzZQoJCXsKCQkJJGRhdGVfbWFqID0gZGF0ZSgnWS1tLWQnKTsKCQkJJHF1ZXJ5NCA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgU0VUIG1hal9mZnR0ID0gPywgZmZ0dCA9ID8gV0hFUkUgbGljZW5jZSA9ID8gQU5EIHNhaXNvbiA9ID8iOwoJCQkkcmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkZGF0ZV9tYWosICRjb21wdGFnZSwgJGxpY2VuY2UyLCAkc2Fpc29uX2NvdXJhbnRlKSk7CgkJfQoJCQoJCSRzdGF0dXMgPSAnT2snOwoJCSRhY3Rpb24gPSAncmV0cmlldmVfYWxsX3BhcnRpZXMnOwoJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywkZGVzaWduYXRpb24sJGFjdGlvbik7CgkJdW5zZXQoJGxpY2VuY2UyKTsKCQl1bnNldCgkaSk7CgkJCgkJCgl9Ly9maW4gZHUgd2hpbGUKfS8vZmluIGR1IGlmICRkYnJlc3VsdAoKLyoqLwovKgkKCSR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCdzYXZlZF9yZWNvcmQnKSk7CgkkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdyZW5jb250cmVzJyk7CiovCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/cron/action.cron_retrieve_users.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vcmVxdWlyZV9vbmNlICgnLi4vLi4vLi4vLi4vY29uZmlnLnBocCcpOwovLyRsaW5rID0gbXlzcWxpX2Nvbm5lY3QoJGNvbmZpZ1snZGJfaG9zdG5hbWUnXSwkY29uZmlnWydkYl91c2VybmFtZSddLCRjb25maWdbJ2RiX3Bhc3N3b3JkJ10sJGNvbmZpZ1snZGJfbmFtZSddKSBvciBkaWUoIkVycm9yICIgLiBteXNxbGlfZXJyb3IoJGxpbmspKTsKLy9lY2hvICRjb25maWdbJ2RiX2hvc3RuYW1lJ107CgokbGluayA9IG15c3FsaV9jb25uZWN0KCdhZ2l3ZWJjb2NlLXJhbi5teXNxbC5kYicsJ2FnaXdlYmNvY2UtcmFuJywnVHlwYXB5elQxJywnYWdpd2ViY29jZS1yYW4nKSBvciBkaWUoIkVycm9yICIgLiBteXNxbGlfZXJyb3IoJGxpbmspKTsKJHF1ZXJ5MSA9ICJJTlNFUlQgSU5UTyBkZW1vX2FkbWlubG9nICggdGltZXN0YW1wLHVzZXJfaWQsIHVzZXJuYW1lLCBpdGVtX25hbWUsIGFjdGlvbikgVkFMVUVTKENVUlJFTlRfVElNRVNUQU1QLCcxJywgJ1Npb2hhbiBjcm9uJywgJ1Rlbm5pcyBkZSB0YWJsZScsICdFeGVjdXRpb24gdGFjaGUgY3JvbicpIjsKJHJlc3VsdCA9IG15c3FsaV9xdWVyeSgkbGluaywkcXVlcnkxKTsKCiMKI0VPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/cron/action.cron_spid_fftt.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMgICAgICAgICAgVsOpcmlmaWNhdGlvbiBlbnRyZSBTcGlkIGV0IEZGVFQgICAgICAgICAgICAgICMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmlmKCFpc3NldCgkZ0NtcykpIGV4aXQ7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKZ2xvYmFsICR0aGVtZU9iamVjdDsKCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2luY2x1ZGUvcHJlZnMucGhwJyk7CiRkZXNpZ25hdGlvbiA9ICcnOwovLyRxdWVyeSA9ICJTRUwiOwovLyRxdWVyeSA9ICJTRUxFQ1Qgc3AuaWQscC5kYXRlX2V2ZW50LHNwLmxpY2VuY2UgYXMgbGljZW5jZV9zcGlkLCBwLmxpY2VuY2UgYXMgbGljZW5jZV9mZnR0LHNwLm5vbSBhcyBub21fc3BpZCwgcC5hZHZub21wcmUgQVMgbm9tX2ZmdHQsIHNwLm51bWpvdXJuIEFTIG51bWpvdXJuX3NwaWQsIHAubnVtam91cm4gQVMgbnVtam91cm5fZmZ0dCwgc3AudmljdG9pcmUgQVMgdmljdG9pcmVfc3BpZCwgcC52ZCBBUyB2aWN0b2lyZV9mZnR0LCBzcC5jb2VmZiBBUyBjb2VmZl9zcGlkLCBwLmNvZWZjaGFtcCBBUyBjb2VmZl9mZnR0LCBzcC5wb2ludHJlcyBBUyBwb2ludHNfc3BpZCwgcC5wb2ludHJlcyBBUyBwb2ludHNfZmZ0dCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQgQVMgc3AsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzIEFTIHAgV0hFUkUgc3AubGljZW5jZSA9IHAubGljZW5jZSBBTkQgc3Aubm9tID0gcC5hZHZub21wcmUgQU5EIHNwLmRhdGVfZXZlbnQgPSBwLmRhdGVfZXZlbnQgQU5EIHNwLnNhaXNvbiA9ID8gQU5EIChzcC5wb2ludHJlcyAhPXAucG9pbnRyZXMpIE9SREVSIEJZIHNwLmlkIERFU0MiOwokcXVlcnkgPSAiU0VMRUNUIHNwLmlkIEFTIHJlY29yZF9pZCxwLmRhdGVfZXZlbnQsc3AubGljZW5jZSBhcyBsaWNlbmNlX3NwaWQsIHAubGljZW5jZSBhcyBsaWNlbmNlX2ZmdHQsc3Aubm9tIGFzIG5vbV9zcGlkLCBwLmFkdm5vbXByZSBBUyBub21fZmZ0dCwgc3AubnVtam91cm4gQVMgbnVtam91cm5fc3BpZCwgcC5udW1qb3VybiBBUyBudW1qb3Vybl9mZnR0LCBzcC52aWN0b2lyZSBBUyB2aWN0b2lyZV9zcGlkLCBwLnZkIEFTIHZpY3RvaXJlX2ZmdHQsIHNwLmNvZWZmIEFTIGNvZWZmX3NwaWQsIHAuY29lZmNoYW1wIEFTIGNvZWZmX2ZmdHQsIHNwLnBvaW50cmVzIEFTIHBvaW50c19zcGlkLCBwLnBvaW50cmVzIEFTIHBvaW50c19mZnR0IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCBBUyBzcCwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXMgQVMgcCBXSEVSRSBzcC5saWNlbmNlID0gcC5saWNlbmNlIEFORCBzcC5ub20gPSBwLmFkdm5vbXByZSBBTkQgc3AuZGF0ZV9ldmVudCA9IHAuZGF0ZV9ldmVudCBBTkQgc3Auc2Fpc29uID0gPyBBTkQgKChzcC5wb2ludHJlcyAhPXAucG9pbnRyZXMpIE9SIChzcC5udW1qb3VybiAhPXAubnVtam91cm4pIE9SIChzcC5jb2VmZiAhPSBwLmNvZWZjaGFtcCkpIE9SREVSIEJZIHNwLmlkIEFTQyI7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRzYWlzb25fY291cmFudGUpKTsKLy8kcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwokbGljID0gYXJyYXkoKTsKLy8kbGljID0gJHJvd1swXVsnbGljZW5jZSddOwovL2VjaG8gIkxhIHZhbGV1ciBlc3QgOiAiLiRsaWM7CiRsaWduZXMgPSAkZGJyZXN1bHQtPlJlY29yZENvdW50KCk7CmZvcigkaT0wOyRpPD0kbGlnbmVzOyRpKyspCnsKCS8vYXJyYXlfcHVzaCgkbGljLCRyb3dbJGldWydpZCddLCAkcm93WyRpXVsnbnVtam91cm5fZmZ0dCddKTsKCS8vYXJyYXlfcHVzaCgkbGljWyRpXSxhcnJheSgkcm93WydpZCddLCAkcm93WydudW1qb3Vybl9mZnR0J10pKTsKCS8vJGxpY2VuID0gc3Vic3RyKGltcGxvZGUoIiwgIiwgJGxpYyksIDAsIC0zKTsKfQoKLy92YXJfZHVtcCgkZGJyZXN1bHQpOwoKLyoqLwoKJHJvd2FycmF5ID0gYXJyYXkoKTsKJGkgPSAwOwoJaWYoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKT4wKQoJewoJCXdoaWxlKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJewoJCQkvL3BiIHNpIGRvdWJsb25zIG91IHRyaXBsb25zICAhISEKCQkJLy9mYXV0IGRvbmMgdsOpcmlmaWVyIGQnYWJvcmQgZGFucyBsYSB0YWJsZSBmZnR0LCBiZW4gb3VpICEKCQkJLy9vbiBwcmVuZCBkb25jIGxlcyDDqWzDqW1lbnRzIHBvdXIgdsOpcmlmaWVyCgkJCS8vb24gaW5zdGFuY2llIHVuZSB2YXJpYWJsZSBwb3VyIGRpcmUgc2kgYydlc3Qgb2sgb3Uga28gCgkJCSRkb3VibG9ucyA9IDA7CgkJCSRsaWNlbmNlX2pvdWV1ciA9ICRyb3dbJ2xpY2VuY2Vfc3BpZCddOwoJCQkkZGF0ZV9ldmVudCAgPSAkcm93WydkYXRlX2V2ZW50J107CgkJCQoJCQkKCQkJJHF1ZXJ5MyA9ICJTRUxFQ1QgY291bnQoKSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzIFdIRVJFIGxpY2VuY2UgPSA/IEFORCBkYXRlX2V2ZW50ID0gPyBBTkQgYSA9ID8iOwoJCQkKCQkJCgkJCSRyZWNvcmRfaWQgPSAkcm93WydyZWNvcmRfaWQnXTsKCQkJJG51bWpvdXJuX2ZmdHQgPSAkcm93WydudW1qb3Vybl9mZnR0J107CgkJCS8vZWNobyAibGUgbsKwIEZGVFQgZXN0IDogIi4kbnVtam91cm5fZmZ0dC4iIHBvdXIgbGUgTsKwICIuJHJlY29yZF9pZC4iPGJyIC8+IjsKCQkJJGNvZWZjaGFtcCA9ICRyb3dbJ2NvZWZmX2ZmdHQnXTsKCQkJJHBvaW50cmVzID0gJHJvd1sncG9pbnRzX2ZmdHQnXTsKCQkJJHZkID0gJHJvd1sndmljdG9pcmVfZmZ0dCddOwoJCQlpZigkcG9pbnRyZXMgIT0nJykKCQkJewoJCQkJCgkJCQoJCQkJJHF1ZXJ5MiA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCBTRVQgbnVtam91cm4gPSA/LCBjb2VmZiA9ID8sIHBvaW50cmVzID0gPywgdmljdG9pcmUgPSA/IFdIRVJFIGlkID0gPyI7CgkJCQkvL2VjaG8gJHF1ZXJ5MjsKCQkJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsIGFycmF5KCRudW1qb3Vybl9mZnR0LCAkY29lZmNoYW1wLCRwb2ludHJlcywkdmQsICRyZWNvcmRfaWQpKTsKCQkJCSRpKys7CgkJCQkJaWYoISRkYnJlc3VsdGF0KQoJCQkJCXsKCQkJCQkJJGRlc2lnbmF0aW9uLj0gJGRiLT5FcnJvck1zZygpOwoKCQkJCQl9CgkJCX0KCQl9CgkJCgkJJGRlc2lnbmF0aW9uLj0iUmVjdGlmaWNhdGlvbiBkZSAiLiRpLiIgcGFydGllKHMpIjsKCQkKCQkKCX0KCWVsc2UKCXsKCQkkZGVzaWduYXRpb24uPSJQYXMgZGUgcsOpc3VsdGF0cyDDoCBtb2RpZmllciI7Cgl9CgkvL2VjaG8gJGRlc2lnbmF0aW9uOwoKJHRoaXMtPlNldE1lc3NhZ2UoIiRkZXNpZ25hdGlvbiIpOwokdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdzcGlkJyk7CgkKCiNFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/cron/cron_retrieve_users.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEdlbmVyYXRlcyBhIGJhY2t1cCBvZiB0aGUgZGF0YWJhc2UgYW5kIHNlbmRzIGl0IGluIGFuIGVtYWlsCiAqCiAqIEBhdXRob3IgRWxpamFoIExvZmdyZW4gPCBlbGlqYWhsb2ZncmVuIFthdF0gZWxpamFobG9mZ3Jlbi5jb20+CiAqIEB2ZXJzaW9uICRJZDogYmFja3VwLWRhdGFiYXNlLWNyb24ucGhwIDIxMzUgMjAwNS0wOC0wNyAxMzo0MzoyOVogZWxpamFobG9mZ3JlbiAkCiAqLwpyZXF1aXJlX29uY2UoJy4uLy4uLy4uL2NvbmZpZy5waHAnKTsKJGxpbmsgPSBteXNxbGlfY29ubmVjdCgkY29uZmlnWydkYl9ob3N0bmFtZSddLCRjb25maWdbJ2RiX3VzZXJuYW1lJ10sJGNvbmZpZ1snZGJfcGFzc3dvcmQnXSwkY29uZmlnWydkYl9uYW1lJ10pIG9yIGRpZSgiRXJyb3IgIiAuIG15c3FsaV9lcnJvcigkbGluaykpOwoKCiRxdWVyeSA9ICJUUlVOQ0FURSBkZW1vX21vZHVsZV9waW5nX2pvdWV1cnMiOwokcmVzdWx0ID0gJGxpbmstPnF1ZXJ5KCRxdWVyeSk7IAppZigkcmVzdWx0KQp7CgllY2hvICI8cD50YWJsZSB2aWTDqWUuPC9wPiI7Cn0KZWxzZQp7CgllY2hvICI8cD5FcnJldXI8L3A+IjsKCS8vZWNobyAkZGItPkVycm9yTXNnKCk7Cn0KClNFVCBmb3JlaWduX2tleV9jaGVja3MgPSAwOwpUUlVOQ0FURSBUQUJMRSBgZGVtb19tb2R1bGVfcGluZ19hZHZlcnNhaXJlc2A7ClRSVU5DQVRFIFRBQkxFIGBkZW1vX21vZHVsZV9waW5nX2NhbGVuZHJpZXJgOwpUUlVOQ0FURSBUQUJMRSBgZGVtb19tb2R1bGVfcGluZ19jbGFzc2VtZW50YDsKVFJVTkNBVEUgVEFCTEUgYGRlbW9fbW9kdWxlX3BpbmdfY29tbWA7ClRSVU5DQVRFIFRBQkxFIGBkZW1vX21vZHVsZV9waW5nX2VxdWlwZXNgOwpUUlVOQ0FURSBUQUJMRSBgZGVtb19tb2R1bGVfcGluZ19qb3VldXJzYDsKVFJVTkNBVEUgVEFCTEUgYGRlbW9fbW9kdWxlX3BpbmdfcGFydGljaXBlYDsKVFJVTkNBVEUgVEFCTEUgYGRlbW9fbW9kdWxlX3BpbmdfcGFydGllc2A7ClRSVU5DQVRFIFRBQkxFIGBkZW1vX21vZHVsZV9waW5nX3BhcnRpZXNfc3BpZGA7ClRSVU5DQVRFIFRBQkxFIGBkZW1vX21vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzYDsKVFJVTkNBVEUgVEFCTEUgYGRlbW9fbW9kdWxlX3BpbmdfcmVjdXBgOwpUUlVOQ0FURSBUQUJMRSBgZGVtb19tb2R1bGVfcGluZ19yZWN1cF9wYXJ0aWVzYDsKVFJVTkNBVEUgVEFCTEUgYGRlbW9fbW9kdWxlX3Bpbmdfc2VxYDsKVFJVTkNBVEUgVEFCTEUgYGRlbW9fbW9kdWxlX3Bpbmdfc2l0X21lbnNgOwoKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/cron/cron_truncate_demo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvdXNyL2xvY2FsL2Jpbi9waHAKPD9waHAKLyoqCiAqIEdlbmVyYXRlcyBhIGJhY2t1cCBvZiB0aGUgZGF0YWJhc2UgYW5kIHNlbmRzIGl0IGluIGFuIGVtYWlsCiAqCiAqIEBhdXRob3IgRWxpamFoIExvZmdyZW4gPCBlbGlqYWhsb2ZncmVuIFthdF0gZWxpamFobG9mZ3Jlbi5jb20+CiAqIEB2ZXJzaW9uICRJZDogYmFja3VwLWRhdGFiYXNlLWNyb24ucGhwIDIxMzUgMjAwNS0wOC0wNyAxMzo0MzoyOVogZWxpamFobG9mZ3JlbiAkCiAqLwpyZXF1aXJlX29uY2UoJy4uLy4uLy4uL2NvbmZpZy5waHAnKTsKJGxpbmsgPSBteXNxbGlfY29ubmVjdCgkY29uZmlnWydkYl9ob3N0bmFtZSddLCRjb25maWdbJ2RiX3VzZXJuYW1lJ10sJGNvbmZpZ1snZGJfcGFzc3dvcmQnXSwkY29uZmlnWydkYl9uYW1lJ10pIG9yIGRpZSgiRXJyb3IgIiAuIG15c3FsaV9lcnJvcigkbGluaykpOwoKCiRxdWVyeTEgPSAiVFJVTkNBVEUgYGRlbW9fbW9kdWxlX3Bpbmdfam91ZXVyc2AiOwokcmVzdWx0MSA9ICRsaW5rLT5xdWVyeSgkcXVlcnkxKTsgCmlmKCRyZXN1bHQxKQp7CgllY2hvICI8cD50YWJsZSBqb3VldXJzIHZpZMOpZS48L3A+IjsKfQplbHNlCnsKCWVjaG8gIjxwPkVycmV1ciB0YWJsZSBqb3VldXJzPC9wPiI7CgkvL2VjaG8gJGRiLT5FcnJvck1zZygpOwp9CgokcXVlcnkyID0gIkRFTEVURSBGUk9NIGBkZW1vX21vZHVsZV9waW5nX2FkdmVyc2FpcmVzYCI7CiRyZXN1bHQyID0gJGxpbmstPnF1ZXJ5KCRxdWVyeTIpOyAKaWYoJHJlc3VsdDIpCnsKCWVjaG8gIjxwPnRhYmxlIGpvdWV1cnMgdmlkw6llLjwvcD4iOwp9CmVsc2UKewoJZWNobyAiPHA+RXJyZXVyIHRhYmxlIGpvdWV1cnM8L3A+IjsKCS8vZWNobyAkZGItPkVycm9yTXNnKCk7Cn0KJHF1ZXJ5MyA9ICJERUxFVEUgRlJPTSBgZGVtb19tb2R1bGVfcGluZ19jYWxlbmRyaWVyYCI7CiRyZXN1bHQzID0gJGxpbmstPnF1ZXJ5KCRxdWVyeTMpOyAKaWYoJHJlc3VsdDMpCnsKCWVjaG8gIjxwPnRhYmxlIGpvdWV1cnMgdmlkw6llLjwvcD4iOwp9CmVsc2UKewoJZWNobyAiPHA+RXJyZXVyIHRhYmxlIGpvdWV1cnM8L3A+IjsKCS8vZWNobyAkZGItPkVycm9yTXNnKCk7Cn0KJHF1ZXJ5NCA9ICJERUxFVEUgRlJPTSBgZGVtb19tb2R1bGVfcGluZ19jbGFzc2VtZW50YCI7CiRyZXN1bHQ0ID0gJGxpbmstPnF1ZXJ5KCRxdWVyeTQpOyAKaWYoJHJlc3VsdDQpCnsKCWVjaG8gIjxwPnRhYmxlIGpvdWV1cnMgdmlkw6llLjwvcD4iOwp9CmVsc2UKewoJZWNobyAiPHA+RXJyZXVyIHRhYmxlIGpvdWV1cnM8L3A+IjsKCS8vZWNobyAkZGItPkVycm9yTXNnKCk7Cn0KJHF1ZXJ5NSA9ICJERUxFVEUgRlJPTSBgZGVtb19tb2R1bGVfcGluZ19jb21tYCI7CiRyZXN1bHQ1ID0gJGxpbmstPnF1ZXJ5KCRxdWVyeTUpOyAKaWYoJHJlc3VsdDUpCnsKCWVjaG8gIjxwPnRhYmxlIGpvdWV1cnMgdmlkw6llLjwvcD4iOwp9CmVsc2UKewoJZWNobyAiPHA+RXJyZXVyIHRhYmxlIGpvdWV1cnM8L3A+IjsKCS8vZWNobyAkZGItPkVycm9yTXNnKCk7Cn0KJHF1ZXJ5NiA9ICJERUxFVEUgRlJPTSBgZGVtb19tb2R1bGVfcGluZ19lcXVpcGVzYCI7CiRyZXN1bHQ2ID0gJGxpbmstPnF1ZXJ5KCRxdWVyeTYpOyAKaWYoJHJlc3VsdDYpCnsKCWVjaG8gIjxwPnRhYmxlIGpvdWV1cnMgdmlkw6llLjwvcD4iOwp9CmVsc2UKewoJZWNobyAiPHA+RXJyZXVyIHRhYmxlIGpvdWV1cnM8L3A+IjsKCS8vZWNobyAkZGItPkVycm9yTXNnKCk7Cn0KJHF1ZXJ5NyA9ICJERUxFVEUgRlJPTSBgZGVtb19tb2R1bGVfcGluZ19wYXJ0aWNpcGVgIjsKJHJlc3VsdDcgPSAkbGluay0+cXVlcnkoJHF1ZXJ5Nyk7IAppZigkcmVzdWx0NykKewoJZWNobyAiPHA+dGFibGUgam91ZXVycyB2aWTDqWUuPC9wPiI7Cn0KZWxzZQp7CgllY2hvICI8cD5FcnJldXIgdGFibGUgam91ZXVyczwvcD4iOwoJLy9lY2hvICRkYi0+RXJyb3JNc2coKTsKfQokcXVlcnk4ID0gIkRFTEVURSBGUk9NIGBkZW1vX21vZHVsZV9waW5nX3BhcnRpZXNgIjsKJHJlc3VsdDggPSAkbGluay0+cXVlcnkoJHF1ZXJ5OCk7IAppZigkcmVzdWx0OCkKewoJZWNobyAiPHA+dGFibGUgam91ZXVycyB2aWTDqWUuPC9wPiI7Cn0KZWxzZQp7CgllY2hvICI8cD5FcnJldXIgdGFibGUgam91ZXVyczwvcD4iOwoJLy9lY2hvICRkYi0+RXJyb3JNc2coKTsKfQokcXVlcnk5ID0gIkRFTEVURSBGUk9NIGBkZW1vX21vZHVsZV9waW5nX3BhcnRpZXNfc3BpZGAiOwokcmVzdWx0OSA9ICRsaW5rLT5xdWVyeSgkcXVlcnk5KTsgCmlmKCRyZXN1bHQ5KQp7CgllY2hvICI8cD50YWJsZSBqb3VldXJzIHZpZMOpZS48L3A+IjsKfQplbHNlCnsKCWVjaG8gIjxwPkVycmV1ciB0YWJsZSBqb3VldXJzPC9wPiI7CgkvL2VjaG8gJGRiLT5FcnJvck1zZygpOwp9CiRxdWVyeTEwID0gIkRFTEVURSBGUk9NIGBkZW1vX21vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzYCI7CiRyZXN1bHQxMCA9ICRsaW5rLT5xdWVyeSgkcXVlcnkxMCk7IAppZigkcmVzdWx0MTApCnsKCWVjaG8gIjxwPnRhYmxlIGpvdWV1cnMgdmlkw6llLjwvcD4iOwp9CmVsc2UKewoJZWNobyAiPHA+RXJyZXVyIHRhYmxlIGpvdWV1cnM8L3A+IjsKCS8vZWNobyAkZGItPkVycm9yTXNnKCk7Cn0KJHF1ZXJ5MTEgPSAiREVMRVRFIEZST00gYGRlbW9fbW9kdWxlX3BpbmdfcmVjdXBgIjsKJHJlc3VsdDExID0gJGxpbmstPnF1ZXJ5KCRxdWVyeTExKTsgCmlmKCRyZXN1bHQxMSkKewoJZWNobyAiPHA+dGFibGUgam91ZXVycyB2aWTDqWUuPC9wPiI7Cn0KZWxzZQp7CgllY2hvICI8cD5FcnJldXIgdGFibGUgam91ZXVyczwvcD4iOwoJLy9lY2hvICRkYi0+RXJyb3JNc2coKTsKfQokcXVlcnkxMiA9ICJERUxFVEUgRlJPTSBgZGVtb19tb2R1bGVfcGluZ19yZWN1cF9wYXJ0aWVzYCI7CiRyZXN1bHQxMiA9ICRsaW5rLT5xdWVyeSgkcXVlcnkxMik7IAppZigkcmVzdWx0MTIpCnsKCWVjaG8gIjxwPnRhYmxlIGpvdWV1cnMgdmlkw6llLjwvcD4iOwp9CmVsc2UKewoJZWNobyAiPHA+RXJyZXVyIHRhYmxlIGpvdWV1cnM8L3A+IjsKCS8vZWNobyAkZGItPkVycm9yTXNnKCk7Cn0KCiRxdWVyeTEzID0gIkRFTEVURSBGUk9NIGBkZW1vX21vZHVsZV9waW5nX3NpdF9tZW5zYCI7CiRyZXN1bHQxMyA9ICRsaW5rLT5xdWVyeSgkcXVlcnkxMyk7IAppZigkcmVzdWx0MTMpCnsKCWVjaG8gIjxwPnRhYmxlIGpvdWV1cnMgdmlkw6llLjwvcD4iOwp9CmVsc2UKewoJZWNobyAiPHA+RXJyZXVyIHRhYmxlIGpvdWV1cnM8L3A+IjsKCS8vZWNobyAkZGItPkVycm9yTXNnKCk7Cn0KCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/cron/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/bootstrap-table.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dGFibGUgewogIGJvcmRlci1zcGFjaW5nOiAwOwogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Cn0KdGQsCnRoIHsKICBwYWRkaW5nOiAwOwp9CnRoZWFkIHsKICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwOwogfQogdHIsCiBpbWcgewogICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7CiB9Ci50YWJsZSB7CiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQ7CiAgfQogIC50YWJsZSB0ZCwKICAudGFibGUgdGggewogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZiAhaW1wb3J0YW50OwogIH0KICAudGFibGUtYm9yZGVyZWQgdGgsCiAgLnRhYmxlLWJvcmRlcmVkIHRkIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQgIWltcG9ydGFudDsKICB9CnRhYmxlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQpjYXB0aW9uIHsKICBwYWRkaW5nLXRvcDogOHB4OwogIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgY29sb3I6ICM3Nzc7CiAgdGV4dC1hbGlnbjogbGVmdDsKfQp0aCB7CiAgdGV4dC1hbGlnbjogbGVmdDsKfQoudGFibGUgewogIHdpZHRoOiAxMDAlOwogIG1heC13aWR0aDogMTAwJTsKICBtYXJnaW4tYm90dG9tOiAyMHB4Owp9Ci50YWJsZSA+IHRoZWFkID4gdHIgPiB0aCwKLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLAoudGFibGUgPiB0Zm9vdCA+IHRyID4gdGgsCi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZCwKLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLAoudGFibGUgPiB0Zm9vdCA+IHRyID4gdGQgewogIHBhZGRpbmc6IDhweDsKICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MzsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOwp9Ci50YWJsZSA+IHRoZWFkID4gdHIgPiB0aCB7CiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2RkZDsKfQoudGFibGUgPiBjYXB0aW9uICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLAoudGFibGUgPiBjb2xncm91cCArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCwKLnRhYmxlID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLAoudGFibGUgPiBjYXB0aW9uICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLAoudGFibGUgPiBjb2xncm91cCArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCwKLnRhYmxlID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkIHsKICBib3JkZXItdG9wOiAwOwp9Ci50YWJsZSA+IHRib2R5ICsgdGJvZHkgewogIGJvcmRlci10b3A6IDJweCBzb2xpZCAjZGRkOwp9Ci50YWJsZSAudGFibGUgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7Cn0KLnRhYmxlLWNvbmRlbnNlZCA+IHRoZWFkID4gdHIgPiB0aCwKLnRhYmxlLWNvbmRlbnNlZCA+IHRib2R5ID4gdHIgPiB0aCwKLnRhYmxlLWNvbmRlbnNlZCA+IHRmb290ID4gdHIgPiB0aCwKLnRhYmxlLWNvbmRlbnNlZCA+IHRoZWFkID4gdHIgPiB0ZCwKLnRhYmxlLWNvbmRlbnNlZCA+IHRib2R5ID4gdHIgPiB0ZCwKLnRhYmxlLWNvbmRlbnNlZCA+IHRmb290ID4gdHIgPiB0ZCB7CiAgcGFkZGluZzogNXB4Owp9Ci50YWJsZS1ib3JkZXJlZCB7CiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKfQoudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGgsCi50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aCwKLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoLAoudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQsCi50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZCwKLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkIHsKICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwp9Ci50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aCwKLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkIHsKICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7Cn0KLnRhYmxlLXN0cmlwZWQgPiB0Ym9keSA+IHRyOm50aC1jaGlsZChvZGQpIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5Owp9Ci50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7Cn0KdGFibGUgY29sW2NsYXNzKj0iY29sLSJdIHsKICBwb3NpdGlvbjogc3RhdGljOwogIGRpc3BsYXk6IHRhYmxlLWNvbHVtbjsKICBmbG9hdDogbm9uZTsKfQp0YWJsZSB0ZFtjbGFzcyo9ImNvbC0iXSwKdGFibGUgdGhbY2xhc3MqPSJjb2wtIl0gewogIHBvc2l0aW9uOiBzdGF0aWM7CiAgZGlzcGxheTogdGFibGUtY2VsbDsKICBmbG9hdDogbm9uZTsKfQoudGFibGUgPiB0aGVhZCA+IHRyID4gdGQuYWN0aXZlLAoudGFibGUgPiB0Ym9keSA+IHRyID4gdGQuYWN0aXZlLAoudGFibGUgPiB0Zm9vdCA+IHRyID4gdGQuYWN0aXZlLAoudGFibGUgPiB0aGVhZCA+IHRyID4gdGguYWN0aXZlLAoudGFibGUgPiB0Ym9keSA+IHRyID4gdGguYWN0aXZlLAoudGFibGUgPiB0Zm9vdCA+IHRyID4gdGguYWN0aXZlLAoudGFibGUgPiB0aGVhZCA+IHRyLmFjdGl2ZSA+IHRkLAoudGFibGUgPiB0Ym9keSA+IHRyLmFjdGl2ZSA+IHRkLAoudGFibGUgPiB0Zm9vdCA+IHRyLmFjdGl2ZSA+IHRkLAoudGFibGUgPiB0aGVhZCA+IHRyLmFjdGl2ZSA+IHRoLAoudGFibGUgPiB0Ym9keSA+IHRyLmFjdGl2ZSA+IHRoLAoudGFibGUgPiB0Zm9vdCA+IHRyLmFjdGl2ZSA+IHRoIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1Owp9Ci50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5hY3RpdmU6aG92ZXIsCi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0aC5hY3RpdmU6aG92ZXIsCi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuYWN0aXZlOmhvdmVyID4gdGQsCi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuYWN0aXZlLAoudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmFjdGl2ZTpob3ZlciA+IHRoIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZThlOGU4Owp9Ci50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5zdWNjZXNzLAoudGFibGUgPiB0Ym9keSA+IHRyID4gdGQuc3VjY2VzcywKLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLnN1Y2Nlc3MsCi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC5zdWNjZXNzLAoudGFibGUgPiB0Ym9keSA+IHRyID4gdGguc3VjY2VzcywKLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLnN1Y2Nlc3MsCi50YWJsZSA+IHRoZWFkID4gdHIuc3VjY2VzcyA+IHRkLAoudGFibGUgPiB0Ym9keSA+IHRyLnN1Y2Nlc3MgPiB0ZCwKLnRhYmxlID4gdGZvb3QgPiB0ci5zdWNjZXNzID4gdGQsCi50YWJsZSA+IHRoZWFkID4gdHIuc3VjY2VzcyA+IHRoLAoudGFibGUgPiB0Ym9keSA+IHRyLnN1Y2Nlc3MgPiB0aCwKLnRhYmxlID4gdGZvb3QgPiB0ci5zdWNjZXNzID4gdGggewogIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7Cn0KLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLnN1Y2Nlc3M6aG92ZXIsCi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0aC5zdWNjZXNzOmhvdmVyLAoudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLnN1Y2Nlc3M6aG92ZXIgPiB0ZCwKLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5zdWNjZXNzLAoudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLnN1Y2Nlc3M6aG92ZXIgPiB0aCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2QwZTljNjsKfQoudGFibGUgPiB0aGVhZCA+IHRyID4gdGQuaW5mbywKLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLmluZm8sCi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZC5pbmZvLAoudGFibGUgPiB0aGVhZCA+IHRyID4gdGguaW5mbywKLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmluZm8sCi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5pbmZvLAoudGFibGUgPiB0aGVhZCA+IHRyLmluZm8gPiB0ZCwKLnRhYmxlID4gdGJvZHkgPiB0ci5pbmZvID4gdGQsCi50YWJsZSA+IHRmb290ID4gdHIuaW5mbyA+IHRkLAoudGFibGUgPiB0aGVhZCA+IHRyLmluZm8gPiB0aCwKLnRhYmxlID4gdGJvZHkgPiB0ci5pbmZvID4gdGgsCi50YWJsZSA+IHRmb290ID4gdHIuaW5mbyA+IHRoIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3Owp9Ci50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5pbmZvOmhvdmVyLAoudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguaW5mbzpob3ZlciwKLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5pbmZvOmhvdmVyID4gdGQsCi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuaW5mbywKLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5pbmZvOmhvdmVyID4gdGggewogIGJhY2tncm91bmQtY29sb3I6ICNjNGUzZjM7Cn0KLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLndhcm5pbmcsCi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC53YXJuaW5nLAoudGFibGUgPiB0Zm9vdCA+IHRyID4gdGQud2FybmluZywKLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLndhcm5pbmcsCi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aC53YXJuaW5nLAoudGFibGUgPiB0Zm9vdCA+IHRyID4gdGgud2FybmluZywKLnRhYmxlID4gdGhlYWQgPiB0ci53YXJuaW5nID4gdGQsCi50YWJsZSA+IHRib2R5ID4gdHIud2FybmluZyA+IHRkLAoudGFibGUgPiB0Zm9vdCA+IHRyLndhcm5pbmcgPiB0ZCwKLnRhYmxlID4gdGhlYWQgPiB0ci53YXJuaW5nID4gdGgsCi50YWJsZSA+IHRib2R5ID4gdHIud2FybmluZyA+IHRoLAoudGFibGUgPiB0Zm9vdCA+IHRyLndhcm5pbmcgPiB0aCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMzsKfQoudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQud2FybmluZzpob3ZlciwKLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLndhcm5pbmc6aG92ZXIsCi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIud2FybmluZzpob3ZlciA+IHRkLAoudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyID4gLndhcm5pbmcsCi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIud2FybmluZzpob3ZlciA+IHRoIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmMmNjOwp9Ci50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5kYW5nZXIsCi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC5kYW5nZXIsCi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZC5kYW5nZXIsCi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC5kYW5nZXIsCi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aC5kYW5nZXIsCi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5kYW5nZXIsCi50YWJsZSA+IHRoZWFkID4gdHIuZGFuZ2VyID4gdGQsCi50YWJsZSA+IHRib2R5ID4gdHIuZGFuZ2VyID4gdGQsCi50YWJsZSA+IHRmb290ID4gdHIuZGFuZ2VyID4gdGQsCi50YWJsZSA+IHRoZWFkID4gdHIuZGFuZ2VyID4gdGgsCi50YWJsZSA+IHRib2R5ID4gdHIuZGFuZ2VyID4gdGgsCi50YWJsZSA+IHRmb290ID4gdHIuZGFuZ2VyID4gdGggewogIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7Cn0KLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLmRhbmdlcjpob3ZlciwKLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLmRhbmdlcjpob3ZlciwKLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5kYW5nZXI6aG92ZXIgPiB0ZCwKLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5kYW5nZXIsCi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuZGFuZ2VyOmhvdmVyID4gdGggewogIGJhY2tncm91bmQtY29sb3I6ICNlYmNjY2M7Cn0KLnRhYmxlLXJlc3BvbnNpdmUgewogIG1pbi1oZWlnaHQ6IC4wMSU7CiAgb3ZlcmZsb3cteDogYXV0bzsKfQovKiB0YWJsZXMgKi8KdGFibGUudGFibGVzb3J0ZXIgewoJZm9udC1mYW1pbHk6YXJpYWw7CgkvL2JhY2tncm91bmQtY29sb3I6ICNDRENEQ0Q7CgltYXJnaW46MTBweCAwcHQgMTVweDsKCWZvbnQtc2l6ZTogOHB0OwoJd2lkdGg6IDEwMCU7Cgl0ZXh0LWFsaWduOiBsZWZ0Owp9CnRhYmxlLnRhYmxlc29ydGVyIHRoZWFkIHRyIHRoLCB0YWJsZS50YWJsZXNvcnRlciB0Zm9vdCB0ciB0aCB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZTZFRUVFOwoJYm9yZGVyOiAxcHggc29saWQgI0ZGRjsKCWZvbnQtc2l6ZTogOHB0OwoJcGFkZGluZzogNHB4Owp9CnRhYmxlLnRhYmxlc29ydGVyIHRoZWFkIHRyIC5oZWFkZXIgewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKGJnLmdpZik7CgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwoJYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0OwoJY3Vyc29yOiBwb2ludGVyOwp9CnRhYmxlLnRhYmxlc29ydGVyIHRib2R5IHRkIHsKCWNvbG9yOiAjM0QzRDNEOwoJcGFkZGluZzogNHB4OwoJYmFja2dyb3VuZC1jb2xvcjogI0ZGRjsKCXZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KdGFibGUudGFibGVzb3J0ZXIgdGJvZHkgdHIub2RkIHRkIHsKCWJhY2tncm91bmQtY29sb3I6I0YwRjBGNjsKfQp0YWJsZS50YWJsZXNvcnRlciB0aGVhZCB0ciAuaGVhZGVyU29ydFVwIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybChhc2MuZ2lmKTsKfQp0YWJsZS50YWJsZXNvcnRlciB0aGVhZCB0ciAuaGVhZGVyU29ydERvd24gewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKGRlc2MuZ2lmKTsKfQp0YWJsZS50YWJsZXNvcnRlciB0aGVhZCB0ciAuaGVhZGVyU29ydERvd24sIHRhYmxlLnRhYmxlc29ydGVyIHRoZWFkIHRyIC5oZWFkZXJTb3J0VXAgewpiYWNrZ3JvdW5kLWNvbG9yOiAjOGRiZGQ4Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/function.calculs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNrZWxldG9uIChjKSAyMDA4IAojICAgICAgYnkgUm9iZXJ0IEFsbGVuIChha3JhYmF0KSBhbmQKIyAgICAgICAgIFJvYmVydCBDYW1wYmVsbCAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgZGlzcGxheWluZyBjYWxlbmRhcnMsCiMgIGFuZCBtYW5hZ2VtZW50IGFuZCBkaXNwbGF5IG9mIHRpbWUgYmFzZWQgZXZlbnRzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgpmdW5jdGlvbiBDYWxjdWxFY2FydCgkZWNhcnQpCnsKCWlmKCRlY2FydCA+PTAgJiYgJGVjYXJ0IDwgMjUpIHsgJGVjYXJ0ID0gMTsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA+PTI1ICYmICRlY2FydCA8IDUwKXsgJGVjYXJ0ID0gMjsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA+PTUwICYmICRlY2FydCA8IDEwMCl7ICRlY2FydCA9IDM7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPj0xMDAgJiYgJGVjYXJ0IDwgMTUwKXsgJGVjYXJ0ID0gNDsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA+PTE1MCAmJiAkZWNhcnQgPCAyMDApeyAkZWNhcnQgPSA1OyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0ID49MjAwICYmICRlY2FydCA8IDMwMCl7ICRlY2FydCA9IDY7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPj0zMDAgJiYgJGVjYXJ0IDwgNDAwKXsgJGVjYXJ0ID0gNzsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA+PTQwMCAmJiAkZWNhcnQgPCA1MDApeyAkZWNhcnQgPSA4OyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0ID49NTAwKXsgJGVjYXJ0ID0gOTsgcmV0dXJuICRlY2FydDsgfQoJCQoJZWxzZWlmKCRlY2FydCA+IC0yNSAmJiAkZWNhcnQgPCAwKXskZWNhcnQgPSAtMTsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA8PSAtMjUgJiYgJGVjYXJ0ID4gLTUwKXskZWNhcnQgPSAtMjsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA8PSAtNTAgJiYgJGVjYXJ0ID4gLTEwMCl7JGVjYXJ0ID0gLTM7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPD0gLTEwMCAmJiAkZWNhcnQgPiAtMTUwKXskZWNhcnQgPSAtNDsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA8PSAtMTUwICYmICRlY2FydCA+IC0yMDApeyRlY2FydCA9IC01OyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0IDw9IC0yMDAgJiYgJGVjYXJ0ID4gLTMwMCl7JGVjYXJ0ID0gLTY7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPD0gLTMwMCAmJiAkZWNhcnQgPiAtNDAwKXskZWNhcnQgPSAtNzsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA8PSAtNDAwICYmICRlY2FydCA+IC01MDApeyRlY2FydCA9IC04OyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0IDw9IC01MDApeyRlY2FydCA9IC05OyByZXR1cm4gJGVjYXJ0OyB9Cn0KCmZ1bmN0aW9uIENhbGN1bFBvaW50cygkZWNhcnQsJHZpY3RvaXJlLCRsb2NhdXgpIHsKJGdDbXMgPSBjbXNtcygpOwkKaWYoJGxvY2F1eD09J0EnKSB7CgkKCWlmKCRlY2FydCA9PTEpCgl7CgkJaWYoJHZpY3RvaXJlID09ICdBQkNEJykKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkkcmVzdWx0WzBdID0gNjsKCQkgICAgICAgIC8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ3ZpY05vcm0wXzI0Jyk7CgkJCSRyZXN1bHRbMV0gPSAxOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJCSAKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCS8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ2RlZkFub3JtMF8yNCcpOwoJCQkkcmVzdWx0WzBdID0gLTU7CgkJCSRyZXN1bHRbMV0gPSAwOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PTIpCgl7CgkJaWYoJHZpY3RvaXJlID09ICdBQkNEJykKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkvLyRyZXN1bHRbMF0gPSBHZXRQcmVmZXJlbmNlKCd2aWNOb3JtMjVfNDknKTsKCQkJJHJlc3VsdFswXSA9IDUuNTsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQkJCgkJfQoJCWVsc2UKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkvLyRyZXN1bHRbMF0gPSBHZXRQcmVmZXJlbmNlKCdkZWZBbm9ybTI1XzQ5Jyk7CgkJCSRyZXN1bHRbMF0gPSAtNjsKCQkJJHJlc3VsdFsxXSA9IDA7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09MykKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCS8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ3ZpY05vcm01MF85OScpOwoJCQkkcmVzdWx0WzBdID0gNTsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCS8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ2RlZkFub3JtNTBfOTknKTsKCQkJJHJlc3VsdFswXSA9IC03OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT00KQoJewoJCWlmKCR2aWN0b2lyZSA9PSAnQUJDRCcpCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkvLwkkcmVzdWx0WzBdID0gR2V0UHJlZmVyZW5jZSgndmljTm9ybTEwMF8xNDknKTsKCQkJJHJlc3VsdFswXSA9IDQ7CgkJCSRyZXN1bHRbMV0gPSAxOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkvLyRyZXN1bHRbMF0gPSBHZXRQcmVmZXJlbmNlKCdkZWZBbm9ybTEwMF8xNDknKTsKCQkJJHJlc3VsdFswXSA9IC04OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT01KQoJewoJCWlmKCR2aWN0b2lyZSA9PSAnQUJDRCcpCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJLy8kcmVzdWx0WzBdID0gR2V0UHJlZmVyZW5jZSgndmljTm9ybTE1MF8xOTknKTsKCQkJJHJlc3VsdFswXSA9IDM7CgkJCSRyZXN1bHRbMV0gPSAxOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkvLyRyZXN1bHRbMF0gPSBHZXRQcmVmZXJlbmNlKCdkZWZBbm9ybTE1MF8xOTknKTsKCQkJJHJlc3VsdFswXSA9IC0xMDsKCQkJJHJlc3VsdFsxXSA9IDA7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09NikKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCS8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ3ZpY05vcm0yMDBfMjk5Jyk7CgkJCSRyZXN1bHRbMF0gPSAyOwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJLy8kcmVzdWx0WzBdID0gR2V0UHJlZmVyZW5jZSgnZGVmQW5vcm0yMDBfMjk5Jyk7CgkJCSRyZXN1bHRbMF0gPSAtMTIuNTsKCQkJJHJlc3VsdFsxXSA9IDA7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09NykKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCS8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ3ZpY05vcm0zMDBfMzk5Jyk7CgkJCSRyZXN1bHRbMF0gPSAxOwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJLy8kcmVzdWx0WzBdID0gR2V0UHJlZmVyZW5jZSgnZGVmQW5vcm0zMDBfMzk5Jyk7CgkJCSRyZXN1bHRbMF0gPSAtMTY7CgkJCSRyZXN1bHRbMV0gPSAwOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PTgpCgl7CgkJaWYoJHZpY3RvaXJlID09ICdBQkNEJykKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkvLyRyZXN1bHRbMF0gPSBHZXRQcmVmZXJlbmNlKCd2aWNOb3JtNDAwXzQ5OScpOwoJCQkkcmVzdWx0WzBdID0gMC41OwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJLy8kcmVzdWx0WzBdID0gR2V0UHJlZmVyZW5jZSgnZGVmQW5vcm00MDBfNDk5Jyk7CgkJCSRyZXN1bHRbMF0gPSAtMjA7CgkJCSRyZXN1bHRbMV0gPSAwOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PTkpCgl7CgkJaWYoJHZpY3RvaXJlID09ICdBQkNEJykKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkvLyRyZXN1bHRbMF0gPSBHZXRQcmVmZXJlbmNlKCd2aWNOb3JtUGx1czUwMCcpOwoJCQkkcmVzdWx0WzBdID0gMDsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCS8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ2RlZkFub3JtUGx1czUwMCcpOwoJCQkkcmVzdWx0WzBdID0gLTI5OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tMSkKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSA2OwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJJHJlc3VsdFswXSA9IC01OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tMikKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSA3OwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCQkKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAtNC41OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tMykKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSA4OwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJJHJlc3VsdFswXSA9IC00OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tNCkKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAxMDsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAtMzsKCQkJJHJlc3VsdFsxXSA9IDA7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09LTUpCgl7CgkJaWYoJHZpY3RvaXJlID09ICdBQkNEJykKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkkcmVzdWx0WzBdID0gMTM7CgkJCSRyZXN1bHRbMV0gPSAxOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkkcmVzdWx0WzBdID0gLTI7CgkJCSRyZXN1bHRbMV0gPSAwOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS02KQoJewoJCWlmKCR2aWN0b2lyZSA9PSAnQUJDRCcpCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJJHJlc3VsdFswXSA9IDE3OwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJJHJlc3VsdFswXSA9IC0xOwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tNykKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAyMjsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAtMC41OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tOCkKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAyODsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAwOwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tOSkKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSA0MDsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAwOwoJCQkkcmVzdWx0WzFdID0gMDsKCQl9Cgl9Cn0KZWxzZWlmKCRsb2NhdXg9PSdCJyl7CglpZigkZWNhcnQgPT0xKQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSA2OwoJCSRyZXN1bHRbMV0gPSAxOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJCSAKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTU7CgkJJHJlc3VsdFsxXSA9IDE7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PTIpCnsKCWlmKCR2aWN0b2lyZSA9PSAnV1hZWicpCgl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHJlc3VsdFswXSA9IDUuNTsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCQkKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTY7CgkJJHJlc3VsdFsxXSA9IDA7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PTMpCnsKCWlmKCR2aWN0b2lyZSA9PSAnV1hZWicpCgl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHJlc3VsdFswXSA9IDU7CgkJJHJlc3VsdFsxXSA9IDE7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgllbHNlCgl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHJlc3VsdFswXSA9IC03OwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CmVsc2VpZigkZWNhcnQgPT00KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSA0OwoJCSRyZXN1bHRbMV0gPSAxOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQoJZWxzZQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAtODsKCQkkcmVzdWx0WzFdID0gMDsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQplbHNlaWYoJGVjYXJ0ID09NSkKewoJaWYoJHZpY3RvaXJlID09ICdXWFlaJykKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gMzsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTEwOwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CmVsc2VpZigkZWNhcnQgPT02KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAyOwoJCSRyZXN1bHRbMV0gPSAxOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQoJZWxzZQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAtMTIuNTsKCQkkcmVzdWx0WzFdID0gMDsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQplbHNlaWYoJGVjYXJ0ID09NykKewoJaWYoJHZpY3RvaXJlID09ICdXWFlaJykKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gMTsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTE2OwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CmVsc2VpZigkZWNhcnQgPT04KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAwLjU7CgkJJHJlc3VsdFsxXSA9IDE7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgllbHNlCgl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHJlc3VsdFswXSA9IC0yMDsKCQkkcmVzdWx0WzFdID0gMDsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQplbHNlaWYoJGVjYXJ0ID09OSkKewoJaWYoJHZpY3RvaXJlID09ICdXWFlaJykKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gMDsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCQkKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTI5OwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CmVsc2VpZigkZWNhcnQgPT0tMSkKewoJaWYoJHZpY3RvaXJlID09ICdXWFlaJykKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gNjsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTU7CgkJJHJlc3VsdFsxXSA9IDA7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PS0yKQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSA3OwoJCSRyZXN1bHRbMV0gPSAxOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJCQoJfQoJZWxzZQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAtNC41OwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CmVsc2VpZigkZWNhcnQgPT0tMykKewoJaWYoJHZpY3RvaXJlID09ICdXWFlaJykKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gODsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTQ7CgkJJHJlc3VsdFsxXSA9IDA7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PS00KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAxMDsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTM7CgkJJHJlc3VsdFsxXSA9IDA7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PS01KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAxMzsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTI7CgkJJHJlc3VsdFsxXSA9IDA7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PS02KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAxNzsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTE7CgkJJHJlc3VsdFsxXSA9IDA7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PS03KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAyMjsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTAuNTsKCQkkcmVzdWx0WzFdID0gMDsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQplbHNlaWYoJGVjYXJ0ID09LTgpCnsKCWlmKCR2aWN0b2lyZSA9PSAnV1hZWicpCgl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHJlc3VsdFswXSA9IDI4OwoJCSRyZXN1bHRbMV0gPSAxOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQoJZWxzZQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAwOwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CmVsc2VpZigkZWNhcnQgPT0tOSkKewoJaWYoJHZpY3RvaXJlID09ICdXWFladycpCgl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHJlc3VsdFswXSA9IDQwOwoJCSRyZXN1bHRbMV0gPSAxOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQoJZWxzZQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAwOwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CgkKfQp9CQoKCgpmdW5jdGlvbiBDYWxjdWxQb2ludHNJbmRpdnMoJGVjYXJ0LCR2aWN0b2lyZSkgewoKCQoJCWlmKCRlY2FydCA9PTEpCgl7CgkJaWYoICR2aWN0b2lyZSA9PSAxKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSA2OwkJCgkJCXJldHVybiAkcmVzdWx0OwoJCQkgCgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTU7CgkJCQoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PTIpCgl7CgkJaWYoICR2aWN0b2lyZSA9PTEpCgkJewoJCQkKCQkJJHJlc3VsdCA9IDUuNTsKCQkJCgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQkJCgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTY7CgkJCQoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PTMpCgl7CgkJaWYoJHZpY3RvaXJlID09MSkKCQl7CgkJCQoJCQkkcmVzdWx0ID0gNTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTc7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT00KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSA0OwoJCQkKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkKCQkJJHJlc3VsdCA9IC04OwoJCQkKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT01KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAzOwoJCQkKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkKCQkJJHJlc3VsdCA9IC0xMDsKCQkJCgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09NikKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgkJCQoJCQkkcmVzdWx0ID0gMjsKCQkJCgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAtMTIuNTsKCQkJCgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09NykKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgkJCQoJCQkkcmVzdWx0ID0gMTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTE2OwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09OCkKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgkJCQoJCQkkcmVzdWx0ID0gMC41OwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAtMjA7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT05KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAwOwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAtMjk7CQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS0xKQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSA2OwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAtNTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydD09LTIpCgl7CgkJaWYoICR2aWN0b2lyZSA9PTEpCgkJewoJCQkKCQkJJHJlc3VsdCA9IDc7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCQkKCQl9CgkJZWxzZQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAtNC41OwkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tMykKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgkJCQoJCQkkcmVzdWx0ID0gODsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTQ7CgkJCQoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS00KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAxMDsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTM7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tNSkKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgkJCQoJCQkkcmVzdWx0ID0gMTM7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkKCQkJJHJlc3VsdCA9IC0yOwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09LTYpCgl7CgkJaWYoICR2aWN0b2lyZSA9PTEpCgkJewoJCQkKCQkJJHJlc3VsdCA9IDE3OwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAtMTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS03KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAyMjsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTAuNTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS04KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAyODsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gMDsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS05KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSA0MDsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gMDsKCQkJCgkJfQoJfQoKfQpmdW5jdGlvbiBwbGF5ZXJFeGlzdHMgKCR1c2VybmFtZSwkcHRzKXsKCSAkZGIgID0gY21zbXMoKS0+R2V0RGIoKTsKCSRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLgoJJ21vZHVsZV9waW5nX2pvdWV1cnMgV0hFUkUgdXNlcm5hbWUgPSA/JzsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoICR1c2VybmFtZSApKTsKCQoJLy8xZXJlIGNvbmRpdGlvbiA6IHBhcyBkZSBjb3JyZXNwb25kYW5jZSA6IGxlIGpvdWV1ciBuJ2V4aXN0ZSBwYXMgOiBvbiBsJ2luc8OocmUgCglpZigkZGJyZXN1bHQgICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA9PSAwKSB7CgkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIChpZCwgdXNlcm5hbWUsIHB0cykgVkFMVUVTICgnJywgPywgPykiOwoJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdXNlcm5hbWUsJHB0cykpOwoJfQoJLyogTGUgam91ZXVyIGV4aXN0ZSBkw6lqw6AgKi8KCS8qIG9uIHZhIHbDqXJpZmllciBzaSBsZSBub21icmUgZGUgcG9pbnRzIGNvcnJlc3BvbmQgb3UgcGFzICovCglpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkgewoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIHVzZXJuYW1lID0gPyBBTkQgcHRzID0/IjsKCQkkZGJyZXRvdXIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkdXNlcm5hbWUsJHB0cykpOwoJLyogTGUgam91ZXVyIGV4aXN0ZSBldCBsZXMgcG9pbnRzIGNvcnJlc3BvbmRlbnQgb24gbmUgZmFpdCByaWVuKi8JCgkJaWYoJGRicmV0b3VyICYmICRkYnJldG91ci0+UmVjb3JkQ291bnQoKSA+IDApewoJCQl9CgkJCWVsc2V7CgkJCQkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFNFVCBwdHMgPSA/IFdIRVJFIHVzZXJuYW1lID0gPyI7CgkJCQkkcmVzdWx0MiA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwdHMsICR1c2VybmFtZSkpOwoJCQl9CgkJCS8vIGluc2NyaXB0aW9uIGRzIGxhIHRhYmxlIGRlcyBjbGFzc2VtZW50cyAKCQkJJG1vaXNfY291cmFudCA9IGRhdGUoIm4iKTsKCQkJJHNhaXNvbiA9ICcyMDEzLTIwMTQnOwoJCS8vCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2x0cyAoaWQsIHVzZXJuYW1lLCBwdHMsIG1vaXMsc2Fpc29uKSBWQUxVRVMgKCcnLD8sPyw/LD8pIjsKCQkvLwkkcmVzdWx0MyA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR1c2VybmFtZSwkcHRzLCRtb2lzX2NvdXJhbnQsICRzYWlzb24pKTsKCQl9Cgl9CgoKZnVuY3Rpb24gY29tcGV0ICgkY29tcGV0aXRpb24pewoJJGRiICA9IGNtc21zKCktPkdldERiKCk7CiRxdWVyeSA9IlNFTEVDVCBjb2VmZmljaWVudCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jb21wZXRpdGlvbnMgV0hFUkUgY29kZV9jb21wZXQgPSA/IjsKJGRicmV0b3VyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGNvbXBldGl0aW9uKSk7CmlmICgkZGJyZXRvdXIgJiYgJGRicmV0b3VyLT5SZWNvcmRDb3VudCgpID4gMCkKICB7CiAgICB3aGlsZSAoJHJvdz0gJGRicmV0b3VyLT5GZXRjaFJvdygpKQogICAgICB7CgkkY29lZmYgPSAkcm93Wydjb2VmZmljaWVudCddOwoJcmV0dXJuICRjb2VmZjsKCX0KCQp9Cn0KCmZ1bmN0aW9uIENoZXJjaGVQdHMgKCRqb3VldXIpewoJJGRiICA9IGNtc21zKCktPkdldERiKCk7CgkkcXVlcnkgPSAiU0VMRUNUIHB0cyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIHVzZXJuYW1lID0gPyI7CQoJJGRicmV0b3VyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGpvdWV1cikpOwoJaWYgKCRkYnJldG91ciAmJiAkZGJyZXRvdXItPlJlY29yZENvdW50KCkgPiAwKQogIAkJewogICAgCQkJd2hpbGUgKCRyb3c9ICRkYnJldG91ci0+RmV0Y2hSb3coKSkKICAgICAgCQkJewoJCQkJJHB0cyA9ICRyb3dbJ3B0cyddOwoJCQkJcmV0dXJuICRwdHM7CgkJCX0KCQoJCX0KfQoKZnVuY3Rpb24gbmJqb3VldXJzICgkY29tcGV0aXRpb24pewoJJGRiICA9IGNtc21zKCktPkdldERiKCk7CiRxdWVyeSA9IlNFTEVDVCBqb3VldXJzLCBwYXJ0aWVzIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NvbXBldGl0aW9ucyBXSEVSRSBjb2RlX2NvbXBldCA9ID8iOwokZGJyZXRvdXIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkY29tcGV0aXRpb24pKTsKaWYgKCRkYnJldG91ciAmJiAkZGJyZXRvdXItPlJlY29yZENvdW50KCkgPiAwKQogIHsKICAgIHdoaWxlICgkcm93PSAkZGJyZXRvdXItPkZldGNoUm93KCkpCiAgICAgIHsKCSRyZXN1bHRbXSA9ICRyb3dbJ2pvdWV1cnMnXTsKCSRyZXN1bHRbXSA9ICRyb3dbJ3BhcnRpZXMnXTsKCXJldHVybiAkcmVzdWx0OwoJCgl9CgkKfQp9CgpmdW5jdGlvbiBkcm9wZG93biAoJGNvbXBldGl0aW9uKXsKCSRkYiAgPSBjbXNtcygpLT5HZXREYigpOwokcXVlcnkgPSJTRUxFQ1Qgam91ZXVycyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jb21wZXRpdGlvbnMgV0hFUkUgY29kZV9jb21wZXQgPSA/IjsKJGRicmV0b3VyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGNvbXBldGl0aW9uKSk7CmlmICgkZGJyZXRvdXIgJiYgJGRicmV0b3VyLT5SZWNvcmRDb3VudCgpID4gMCkKICB7CiAgICB3aGlsZSAoJHJvdz0gJGRicmV0b3VyLT5GZXRjaFJvdygpKQogICAgICB7Cgkkam91ZXVycyA9ICRyb3dbJ2pvdWV1cnMnXTsKCXJldHVybiAkam91ZXVyczsKCX0KCQp9Cn0KCmZ1bmN0aW9uIHJhbmRvbSgkY2FyKSB7CiRzdHJpbmcgPSAiIjsKJGNoYWluZSA9ICJhYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHkiOwpzcmFuZCgoZG91YmxlKW1pY3JvdGltZSgpKjEwMDAwMDApOwpmb3IoJGk9MDsgJGk8JGNhcjsgJGkrKykgewokc3RyaW5nIC49ICRjaGFpbmVbcmFuZCgpJXN0cmxlbigkY2hhaW5lKV07Cn0KcmV0dXJuICRzdHJpbmc7Cn0KCmZ1bmN0aW9uIGNvZWZmICgkdHlwZUNvbXBldGl0aW9uKQp7CgkkZGIgID0gY21zbXMoKS0+R2V0RGIoKTsKCS8qCglpZihzdWJzdHJfY291bnQoJHR5cGVDb21wZXRpdGlvbiwnLScpPjApCgl7CgkJJHR5cGVfaW50ZXIgPSBleHBsb2RlKCctJywkdHlwZUNvbXBldGl0aW9uLDIpOwoJCSR0eXBlID0gJHR5cGVfaW50ZXJbMF07Cgl9CgkqLwoJCS8vCSR0eXBlID0gJHR5cGVDb21wZXRpdGlvbjsKCQoKJHF1ZXJ5ID0iU0VMRUNUIGNvZWZmaWNpZW50IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIFdIRVJFIG5hbWUgPSA/IjsKJGRicmV0b3VyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHR5cGVDb21wZXRpdGlvbikpOwoKCWlmICgkZGJyZXRvdXIgJiYgJGRicmV0b3VyLT5SZWNvcmRDb3VudCgpID4gMCkKICAJewogICAgCQl3aGlsZSAoJHJvdz0gJGRicmV0b3VyLT5GZXRjaFJvdygpKQogICAgICAJCXsKCQkJJGNvZWZmID0gJHJvd1snY29lZmZpY2llbnQnXTsKCQkJcmV0dXJuICRjb2VmZjsKCQl9CgkKCX0KCWVsc2UKCXsKCQkkY29lZmYgPSAwOwoJCXJldHVybiAkY29lZmY7CgkJLy9lY2hvICJjb2VmZmljaWVudCBpbnRyb3V2YWJsZSAhIjsKCX0KfQoKZnVuY3Rpb24gY29lZmZfb2xkICgkY2xlKXsKCSRkYiAgPSBjbXNtcygpLT5HZXREYigpOwokcXVlcnkgPSJTRUxFQ1QgY29lZmZpY2llbnQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY29tcGV0aXRpb25zIEFTIGNvbXAsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZW5jb250cmVzIEFTIHJlbiBXSEVSRSBjb21wLmNvZGVfY29tcGV0ID0gcmVuLnR5cGVfY29tcGV0IEFORCByZW4uY2xlID0gID8iOwokZGJyZXRvdXIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkY2xlKSk7CmlmICgkZGJyZXRvdXIgJiYgJGRicmV0b3VyLT5SZWNvcmRDb3VudCgpID4gMCkKICB7CiAgICB3aGlsZSAoJHJvdz0gJGRicmV0b3VyLT5GZXRjaFJvdygpKQogICAgICB7CgkkY29lZmYgPSAkcm93Wydjb2VmZmljaWVudCddOwoJcmV0dXJuICRjb2VmZjsKCX0KCQp9CmVsc2V7CgllY2hvICJjb2VmZmljaWVudCBpbnRyb3V2YWJsZSAhIjsKfQkJCmZ1bmN0aW9uIGRhdGV2ZXJzZnIgKCRkYXRlLCRkZWxpbWl0ZXIpewkgICAKCQoJJGRhdGVhcnIgPSBleHBsb2RlKCRkZWxpbWl0ZXIsICRkYXRlKTsKCSRkYXRlZnIgPSAkZGF0ZWFyclsyXSAuICctJyAuICRkYXRlYXJyWzFdIC4gJy0nIC4gJGRhdGVhcnJbMF07CglyZXR1cm4gJGRhdGVmcjsKCX0KfQpmdW5jdGlvbiBtb2lzX2ZyYW5jYWlzKCRtb2lzLCRsb25ndWV1cil7CglpZighaXNzZXQoJGxvbmd1ZXVyKSB8fCAkbG9uZ3VldXIgPT0nJyl7CgkJJG1vbnRocyA9IGFycmF5KCJKYW52aWVyIiwgIkbDqXZyaWVyIiwgIk1hcnMiLCAiQXZyaWwiLCAiTWFpIiwgIkp1aW4iLCAianVpbGxldCIsICJBb3V0IiwgIlNlcHRlbWJyZSIsICJPY3RvYnJlIiwgIk5vdmVtYnJlIiwgImTDqWNlbWJyZSIpOwoJfQoJZWxzZQoJewoJCSRtb250aHMgPSBhcnJheSgiSmFuIiwgIkbDqXYiLCAiTWFyIiwgIkF2ciIsICJNYWkiLCAiSnVpbiIsICJqdWlsIiwgIkFvdSIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJkw6ljIik7Cgl9CgkkbW9udGhfdG9fZGlzcGxheSA9ICRtb2lzLTE7CgkkbW9udGhfZnJhbmNhaXMgPSAkbW9udGhzWyIkbW9udGhfdG9fZGlzcGxheSJdOwoJcmV0dXJuICRtb250aF9mcmFuY2FpczsKfQpmdW5jdGlvbiBnZXRfbmFtZSgkbm9tKXsKCSRleHBsb3Npb24gPSBleHBsb2RlKCcgJywkbm9tKTsKCSRjb21wdGV1ciA9IGNvdW50KCRleHBsb3Npb24pOwoJJG5hbWUgPSBhcnJheSgpOwoJJHByZW5vbSA9IGFycmF5KCk7CgkKCSRpID0wOwoJZm9yZWFjaCAoJGV4cGxvc2lvbiBhcyAkdGVzdGNhc2UpIHsKCSRpKys7CQoJICBpZiAoY3R5cGVfdXBwZXIoJHRlc3RjYXNlKSkgewoJICAgICRuYW1lWyRpXSA9ICR0ZXN0Y2FzZTsKCQkvL2VjaG8gIkxhIGNoYcOubmUiLiRpLiIgJHRlc3RjYXNlIG5lIGNvbnRpZW50IHF1ZSBkZXMgbWFqdXNjdWxlcy5cbiI7CgkgIH0gZWxzZSB7CgkgICAvLyBlY2hvICJMYSBjaGHDrm5lIi4kaS4iICR0ZXN0Y2FzZSBuZSBjb250aWVudCBwYXMgcXVlIGRlcyBtYWp1c2N1bGVzLlxuIjsKCQkkcHJlbm9tWyRpXSA9ICR0ZXN0Y2FzZTsKCSAgfQoJfQoJCgkkbm9tX2ZpbmFsID0gaW1wbG9kZSgnICcsJG5hbWUpOwoJJHByZW5vbV9maW5hbCA9IGltcGxvZGUoJyAnLCRwcmVub20pOwoJJHJlc3VsdFswXSA9ICRub21fZmluYWw7CgkkcmVzdWx0WzFdID0gJHByZW5vbV9maW5hbDsKCXJldHVybiAkcmVzdWx0OwoJCn0KCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/images/calendrier.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[/9j/4AAQSkZJRgABAQEASABIAAD/4QCARXhpZgAATU0AKgAAAAgABAESAAMAAAABAAEAAAEaAAUAAAABAAAAPgEbAAUAAAABAAAARodpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABCgAwAEAAAAAQAAABAAAAAA/+0AOFBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAAOEJJTQQlAAAAAAAQ1B2M2Y8AsgTpgAmY7PhCfv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23////AABEIABAAEAMBEgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/3QAEAAL/2gAMAwEAAhEDEQA/APoT4x/Fv4/2Hjzxlf8Ag/wfPqGi+F7qaz0WVL3T7bSb8y21vk6j59yk2YZTIUMYUNuAPTdXonimXW7TWfElhDpGumCW9vpCYLW68icyLaGBgY7aVHHySjdkFCMbW3ZUA8s+EXxs/aC1Txz4dn8ZeE4rJ769t9K1+K1v9Pl0rT7dbm4jFxBFFey3AnkkaGB9wKqYm+g9T0KbVLzXFjl0PW4/tOq27xM9jdeWqLqjXG52e1iWMCHaTljg5QbsB2AP/9k=]]></data>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxIHEhQTBxQWFhQXGBkbGRgYGBkcGhsdGhsaHiAaFxkaHCggIxslIBwdIjEiJikrLi4uHB81ODQsNyouMCsBCgoKDg0OGxAQGzUkICQtNCwuLDc0LCw0NDcsLCwsLDQtOCw0LzQ3NCwsLCwsNC80Lyw0LCwsNiw0LCw2LCwvLP/AABEIANcA6wMBEQACEQEDEQH/xAAcAAEAAwADAQEAAAAAAAAAAAAABQYHAQMEAgj/xABHEAABAwIEAwUDCQQIBQUAAAABAAIDBBEFBiExEkFRBxMiYXEyQoEUFSNSYnKRobEWM0OCJDRTorLB0eEXY5Kz8AglNZOj/8QAGwEBAAMBAQEBAAAAAAAAAAAAAAQFBgMCBwH/xAA1EQEAAQMBAwkJAAICAwAAAAAAAQIDBBEFITESEyJBUWGhsdEGFDJxgZHB4fAz8UJSI0Ny/9oADAMBAAIRAxEAPwDcUBAQEBAQEBAQEBBXsyZ2oMtaYvUMa/8Asx4pP+htyPU2CDMsb7fWgluAUpPR8zrf/my/+JH7Ea7oVKu7Ssdxa/dSd008o42MHwc8F35rjVkW6eMrGzsfNvfDbn67vPRDTzYpXf1usmPk6eQ/kDZcZzrcdqxo9l82rjNMfWfxEvC/AppTeWW56kuP5lePf6exIj2Tv9dyPF30+H1dH/UqlzPuve39F+xn0dkvyr2TyNOjXT4+kpihzpjmA2MdS+Vo3D7Sg+R4xx29CF2oyrde7XRXZWwc3HjlTTyo7Y3+HHwXnK/bwyUhmaIODl3sNy31dGfEB6F3opCmbBhmJQ4tG2XDJGyRu2cwgj09RzG4QepAQEBAQEBAQEBAQEBAQEBAQEBBCZqzXSZUi7zGZA29+Fg1e+3Jjdz67DmQgwfNna5X5mcYsABp4T9Q/SuHV0nu+jbW6lea66aI1ql3x8a7kV8i1TrKp0uXuM8Ve4knUgf5uKr7md1UQ1uF7KxuqyavpH5n0+6ZpqOOl/cNA8+f47qFXdrr+KWnxsHHxo0tURHf1/fi714SxAQEBB4MQwqOu1cLO+sN/j1XezkV2/l2KjaOxsfMiZmOTV/2j89v9vfeQs2T5AqwJyTTvIErLnhLTp3jB9dv52sre1dpuU6w+eZ2Ddw7s27kfKeqY7n6oikEzQ6IgtIBBGxB2I8l0Q32gICAgICAgICAgICAgICAgIMz7TO1eLK/FT4PwzVWodr4Ivv23f8AYG3MjYhhjoanMspqMcke5zt3O9o+TRs1vQAW6BQ7+XFG6nfLR7K9n7mVpcvdGjxn5d3em6amZSjhgAA/83VXXXVXOtUt3jYtnGo5FqnSP7i7V5SBAQEBAQEBBGZgpRURE82aj/P8v0UnEuTTciO1R+0GHTfw6qv+VG+Pz4eT9AdkGIHEsIpHSbtYY/hE5zG/3WhXL5quSAgICAgICAgICAgICAgICDFe1ztWNMX0WVn+PVss7T7PVkRHv8i7ly11B+xGu6GWYPgvD9JX6u3DTy83efkqzJy9ejR9232N7PxRpfyY39VPZ8+/u6vnwnlAa4QEBAQEBAQEBB5sSNoZL/Ud+hXSz/kp+cIO05iMO7r/ANKvKWydgoIwiLi/tJbenF/rdXz5O0RAQEBAQEBAQEBAQEBAQEGN9tHaUcP4qDLz/pTpNK06xg/w2Ee+eZ90abnwiI13QyrA8H+TWfUjx8h9X/dVWTk8vo08G+2HsOMeIv346fVHZ+/JNKE1AgICAgICAgICAgjMee57GxU4JfK4Na0bnUaD42HxUvCo5VzXsZ32lyotYnNxxrnT6Rvn8R9W50eYsO7NaeloMXnDZGxAuDWPdqblzncANgXFxHNW752umF4nBi8YlwuVksZ95jg4ehtsfJB60BAQEBAQEBAQEBAQEGfdr+e/2Rp+7oCPlcwIZz4G7GQj8m33PWxCDAcBw4yHv6y5cTcX3JPvG+5P+6rcvI/9dP1bT2d2PGkZd6P/AJj8+n37FgVe2QgICAgICAgICAgIJDs6p46iqnxLFB/RcPYXDo6XXhDb6E7ka7931V1i2ubo38ZfMtuZ/veVM0z0ad0fmfrPho8op/n3vajG2h0tQ8yOv7oPstadwGtsB+C2eBs637tpdp1mrf6MBm59fvGtudIp3eqOpaatyjL8oyvK8fWaOYHJ7dnjflfp1VfmbGrt9K10o7Ov9p+LtWivo3d09vV+mx9nXatBmjhgxQCCr24dmSH/AJZJuHfYOvQnW1JwW7R0BAQEBAQEBAQEBB0V1WzD43y1Z4WRtc5x6NaLk/gEH5NxXEpM7V8tTW34Sbht9GsGjIx8N+p4jzUfJvc3Ru4yuNibO98yNKvhp3z+I+vlqmQLbKlfTYiIjSHKP0QEBAQEBAQEBAQR+Kzu8MNEC6aUhjGje7jbTzJNh6qViWeXVrPCFBt/aXutjm6J6de6O6OufxH6WfMULcMjp8Ew4gthtNXPGz5TYiO/MDQa8gzm0rTbOxfeL0RPCN8/3e+V5+TzFmZjjO6P7ufS2zIiCFxzL7MR8cHgl5OGx+9b9d1V52zKMjpU7qu3t+fqscPaFdjo1b6fL5ei59mfam+ke2hzq4hws2Odx/BszuY6Sfj1WTu2q7VU0VxpMNPbuU3KYqonWG2rm9iAgICAgICAgIM27fsVOH4WY4jYzyMjNvqi7z8PCB8UGL5fpvk8LTzd4j8dvyVNl3OVcnu3Ppfs/iRYwqZ66ulP14eCSUZdiAgICAgICAgICDpqqhtK0vl2H/lgvVFE11RTCPlZNvGtVXbnCP7T6pDKo/ZyB2M4w28z7x0EJ14nkEGXh+o0aDrrzLSr2za5ERRS+V52bXlXqr1z/Udn0/bjB6J1K1zqs8U0ri+Vx3LnEk3PxPxutxs/DjGtaT8U75/u5h87K94uaxwjh/d6QU9CEBBG43hDMWZZ2jx7LunkfJQs3CoyaNJ3THCUvDy6sevWOHXC1dj/AGgvontwzM7rEENgkcdukTj0Pun4dFjLtqq1XNFcaTDWWrlNymK6Z3S25c3QQEBAQEBAQEGOf+pRpNNSEbCVwPqWafoUGfwCzW8O1h+iz1XxS+wWIiLVMRw0jydi/HYQEBAQEBAQEBBw5waLu0ASI13PNVUUxNUzpEO/KmXBmx76rGXGLDKa7pHm47wt14W87nnbUA2GpVzjWObp1njL5ttra05t3k0fBTw7++fx2R85c41jjcam+XV7e6pomiOkg0HAwaAho04j5foAVpdn2KLFHvV/dH/GP7w+7F516u9X7tZ39v8Aef2ejC8uY3mXxYbAKeI+y+azbj0cC436htlzv7av1z/4+jH3nxdLOybNMdPpT9nONZOx7LzDLM1lQwC7u6s+3q0Na+3mAbLlRtfKpnfOvziPxo6V7Lxqo3Rp9fXVHYFmBmK+F44JByvofun/ACV9g7SoyejMaVdnopczZ9eP0o309vqmlZq8QQmZsH+cWccA+lYNPMfV/wBP91V7TwYyKOVT8UePd6LHZ2ZNivk1fDPh3ta7Gc9HNFOYMSdeqgADr7yM2EnqNnedj7yx7VNHQEBAQEBAQEFD7bMFOM4VMYhd8BEw9GXDv7jnH4IITs+ytTZswmmmxBnBNwuZ3kfhJEb3MBcNWl1mi5Iueqj3MW3Xv00lcYe3czGiKYq5VPZO/wDfihK7INVHM+KjY93DctLm8LXtBGrJASy+vsuc129mlQq8GuPh3tNi+1GPc3XqZont4x6+CuYhh02GO4cQjfGftAi/pfceiiVUVUzpMNDZybN6nlW6omO6XlXl3EBAQEBAQEE1gGTXZgBnxp3yfDo/E+Rx4TLb3Y77M6v57C/KzxMfk9Orj1MJ7QbZ52ZxrM9GPintns+UeM+Pzj+PDNnBT4QzucKgNo4wOHvi33nDfgG9uup19nT7M2dz885X8MeP6/0wG0c7mY5uj4p8P21nKGToMOjilrYmOqLcQc5oJjuPZZf2SBuRv6WXDaWXz93SPhp3R6/V2wMXmLe/4p3ytyrk4QYd21ZCGH/+6ZfbwFrgZ2NGlyf3rR66OHO9/rX927lVuqK6eMPNdEV0zTVwlB0VQKuNj27OaD+PJbyxdi7bprjrjVir1ubdc0T1S711cxBXjWvybXw11APDxeNo2IOj2n7zbkeYvyWU2xic3c52nhV5/vi0uysrnLfN1cafL9P1DR1LK2NklK4OY9oc1w2LXC4I9QVTLZ3ICAgICAgIPl7BICJACCLEHYg8igofZ9GcsVFRhM9+BpdPSu18UL3eJl/rMebHmbk7IL8g8eL4XDjUL4MUYJInizmn9QRqCDqCNQUGbV3YhTDiODVVRCd2hxa9g8uGwJHqSvFVuir4oSrGbkWP8dcx9d324M6zFl7EspOPzxD3sA/jxAlturrez6OA52uodzBpnfRuaHC9qL1MxTkRyo7Y3T6T4PDTV0dV+4cD5c/wOqgV2a6PihrsbaONk/4q4nu6/tO96VzTRAQSWC4BU4262GxOcObtmD1cdPhuulu1XX8MIeXn4+LTrdqiO7r+y2VOGYbkBglzdI2eci7Kdg4r/wAh3G/ifZvldWNnDpp31b5YvaXtJdvxNFjo09vXPp9PupuNY3V5+e1+LfQ0jf3dOwkA9C7a58yBp7IFytNs/ZVV3S5d3U9nb+mDztpU2taLe+rt7P29tPLFQFjqmzYmFpdYaBoIvYDy5BaS9NNqzVMboiPwoLMTcvU675mW/wBBWR4jGyWicHRyNDmuF9WuFwddVgm1d6Agg89OY3Dq35T7Pyaa/wD9btvO6D8/ZTJNLHxfa/xFbPZWvulGvf5yyW09PeatO7yhLqxQRB4cZovnCF7OZF2+o1H+nxUXNx+fs1UdfV8+pIxL/M3qa/v8mo9hOLHE8KjbIbuge+LXoLOb8A14HwWFbNoaAgICAgICAg8VRJTieJtQWd+Q/ugbcfDYcfDz4dBfloPJB7UBAQEFZxrs/wAMxsl1fSR8Z1L2AxuJ6l0ZBJ9boIFnZBRxOvBPUhv1C9jgPQuZxfmo9zFt19Wi3w9uZmNO6rlR2Tv/AH4ulvZNEwkzVTuDpwAEDzcXEfko8YEa/EuKva25yd1qNfn+vy8dQcvZWNqmQVMw2Y0984noWR+AfzWUi1hUa6RGs/dVZXtHmXInWuKI7t3jO/xQ+N9oeIYmO6y3E2ih2D38LpbfZYPCz01PQhXmPse/Xxjkx3+n+mUyNr2YmZ1mqf7rn9qjS4ExjzLXOdPMTcvkJJJ66319bq8xtk2LPSnpT3+n+1NkbTvXd0dGO71/0llaK51VUAqWOZJs4EH4rndtxcomieExo9265t1xXHGN6W7Ke0EZbPzbml3DG0nuZney0E+y88mHcO5XsbDbC5FiqxcmirqbOxepvURXT1t0a4OF26g7FcXVygyTt3zC58bMMwvWWaz5be7GDoCeXE4X9G+YXWzZrvVxRRG9zvXqLVE11zuU2hphRxsjZs0Aevmt1YtRat00R1Qxl65N25Nc9cu9dXMQEFr7AX2GIsb7LagEfEOB/wAIWDy4iL9cR2z5tpizM2aJnsjya2o7uICAgICAgh815hiyzAZqoFxJDY426vlkd7MbBuST+Vygi8mZdlpHPrcxEPrpx4zu2Fm7YIujW87bnmdyFsQEBBWszZ8w/LB4cWqGiT+zaC9/xa0G381kGeY72+wsaRgFM9zuTpiGtHnwMJJHldqCiU+bsUzdK/5VXSxNbrwwkxjU7AMI0HU3KsNn4UZVcxM6RCDnZnu1MTEa6vU/CPlX/wAnPPOOksriPwur21sXHp31az/dymubXv1bqdI/u97aalZSi1M1rR5ABWduzbtxpREQrrl2u5Otc6u5dHgQEBBHYzhDMWbaXRw9lw3H+o8lDzMK3k06Vbp6pSsTLrx6taeHXD4y3j2NZStHhjxLCNo5CHRj04iHNHk0gLN17HyqZ0iNe/WPy0FG1ceqNZnT6T+Gjv7S6qaMcMMcTyPF4i+x+zsP1Vjj7Do0ibszr2QgX9sVazFuN3aps7jUSyTT+KWQ3e87usLC/kBoBsOSuLGNasRpbp0VV7IuXp1rnVwu7iICDqqZxTMc+XZoJPwXi7ci3RNdXCN73bom5VFMcZXT/wBO1O75FUzyjWWoOvXha3X0u4j4FYCuqaqpqnr3ttTTFNMUx1NXXl6EBAQEBB01lUyhjfLWODGMaXOcdgALklBScq0j821AxXF2lsTQRQwu91h3qHj677adBbfQoL4gICDOu1jPT8Aayky+C+un0aGjiMbTpxBvN5OjR6nlYhE5A7H46W1TnL6eoceIxOPExpOp7w/xH9b+G9/a3QaPiuX6bFad1NVxM7lzbcIaBw9Cyw0cORGyD8r1tBLkbEHwV/uO4SbaPjds8DoRZ1uospmBk+73or6uE/L+3oubj8/Zmnr4x8/7cuoN9luInVjuDlAQEBAQEBAQEBAQeesrY6EcVU4NHnufQblcb1+3ZjlXJ0dbVm5dnSiNUK2hrs8OEWAU8hhJ1kIIZod3vPhAG/DqdNidFl9o7TnI6FG6nzaPB2fFjp176vJ+kMoYAzLFHDS05uI26u+s4kuc63K7iTbkLDkqlZphAQEBAQEGdVcv/EarNPT64ZSyDv3DapmbqIWnnG02Ljz0+yUGiNaGizdAEHKAg8mLVT6KF76WN0rwPBG3dzjoBc6AXIuToBcnZBV8k5K+aJJK3HHCbEJiXSSe7Hf+HFfZoHhv0FtBoguaAgzLtwyScxUwqcObeopwdANZI9y0dS32gPvAalBj+TsX79vcTnxNHg829PUfp6LT7HzeXTzNfGOHy/Xl8md2ricirnqeE8fn+/NZ1eqYQEBAQEBAQfEsrYReYho6kgD8SvNddNEa1TpD1TRVVOlMay8tHWuxR3BgMMtS/Y9208I+886Aeaq7+2Me3up6U9396rGzsq/Xvq6MLbhPZpiOJ2djE0dIw28EY7yXzBcfAD5i6qL+2b9zdR0Y8VpZ2TYo31dKV1wLszw3ByHdz38un0lQe8dcc7O8IPmAFVVV1VzrVOsrKmmmmNKY0hboXNcPoSLC402HDoRp0It8F5en2gICAgICDO88Y7NjtR80ZUdaVw/pU42gi5gEfxCDbyuBubtC64Fg8OAwR0+Gt4Y4xYdT1c483E6k9Sg96AgICAgICAgwntb7MZKOR2IZUabX45YmbsO5kjA3bzLeW409n1RXVRVFVM6TDzVTFUTTVG6VRwDMbcQsyps2T8nenn5LWYG1KL/Qr3Vefy9GZzdnVWenRvp8v7tTytlYICAgIPuCF1QQ2Bpc47BoJJ9AF5qqppjWqdIeqaaqp0pjVNUuRazFH922WGmIaHO4vHMGuJDXCEEWBsdXEbHRUWdteKejYnXv9P6Vzh7K16V6Pp/fpasH7I8Po3B+J95VyDW87rtHpG2zbeRus9cu13Z1rnVeW7VFuNKI0XVsTMMitRxBrGDRkbQLAfVY0chyHw6Lm6O6CZtQ1r4CHNcAQ4G4IOxB6IITFat+Iz/I8OJbZodUStNjGx1+GOMjaV9jr7rQToS1BN08LaZrWU4DWtADQNAANgAg7EBAQEBBRs+5rmp3tw/KYElfMN/dgYd5ZDsD0B9TfQOCVyLlCLKMBZETJNIeKeZ3tSP11JOvCLmw8ydSSSFkQEBAQEBAQEBAQZV2kdkEWPcVRl3hhqDcuZtHIeunsvPUaE77koMhbi1VlyQ0+Y4nhzeThZ4HUHZzehvr1KusPbFdvo3elHb1/tUZeyqLnStbp7Or9LJRV0de3ipHBw/Meo3C0ljIt3qeVbnVQXrFyzOlcaPSuzk8800l+Cggmnk+rFG52/VwFgFXZW07OPM08auyPyn42zr16OVwjtTmDdnuLYyQcRMdFFzGkkpHoPCPiQR0VHe2zfr+Dox9/NcWdk2KPi6Xh5LjjOQvm3DZossyTfKgWytldITI98ZuGgggC4u0AWFyLqsuXrl2da6pn5rC3aotxpREQpVTi1RmikixjATw4lQju6lgHtxi5uW827u4fN43aFzdGqZEzbFnGlbPS+Fw8Mkd7ljxuPMHcHmDyNwAsSCtYlx5Zc6oo2ufSuJdPC0XdGTqZ4W9Du+Mb6vHi4g8Ocg1LcTpnVcWvymaaS/MtDzHGD5iONg+BQWRAQEBAQVnNuYJaMtpcvsEtdKLsafYiZexnnPKMcubjoLoOzJ2VI8tMcXOMtTKeKed3tyOP6MHJvL11QWJAQEBAQEBAQEBAQEEVmDLtLmOPu8ahbI3kSPE2/Njh4mn0KDKMc7CTC4yZUqiw8mTX09JWC9vItPqvVFdVE8qmdJea6Ka40qjWHRgtBi+T3E4vhbK5o2fG4OePutF/wDtg+amXNpZNynkzX+PJFt4GPRVyop/PmucXa1QwWGNxVVG7a00DwPhw3P5BQUxM0faHhVZ+5roB99/d/8AcsgnqSvhrRejljkHVj2u/QoKpDlB2DYp8twKwiqA5tVFsLm5EzOV+IC4+04jcoKZmDCZOyuvGI4I0nD5nBtRE3aPiO4G1r6tPI3boHC4bFSVLKxjJKVwcx7Q5rhsWuFwR5EIO1BW8uRNwaoqKNg4WEmogGw4JD9Ixo+xLckDQCWMILIgICAgIIfLcdM9r5sKe2UyvJklBDnOcNLOPLhHhDNOEaWQTCAgICAgICAgICAgICAgICD5ewPFngEHkUEDiWSMNxS/y2jgJO7gwNd/1Ms780FMxnsOoKnxYLJNTP5WdxsB9HHi/vIKhi1HmPs5vJBUPqKZupdcysA+2x93MHUjQdUGkdn2d6ftEp5I62NrZQ3hmhOrXNdpxNvuw7Ebg6HkSHGU5jlGp+asQJML+J9DI434mbup3E+/He46tI20CC9oILNdO9rI6rDwXS0zi8NG8kZFpYh5ubq0fXZH0QS9HVMro2S0jg5j2hzXDYtcLgj4IO5AQEBBl2dssVeW534pkL23a1NNa7JeZeGDc7kga6kjUm4T+Qe0Wkzk0NhPdVAHihcdfMxn3m+mo5gILM7FIWTimkfaZzONrSCOJoJB4CRZxHMAkgEE6EIPYgICAgICAgICAgICAgICAgIOCOLRyDA+0HAZOzOvixPLDeGne7xRjRjXH2oiOUbxcjoQbWs1BpmK00PaNhscuFP4Xnhmp5PeimZte17EOBa7425FBIZHzAcwUwdWN4KiNxiqI9iyVmjtOh9oeRQWFBV8LP7N1RpJP6vUOfJTHkx/tSU9+V7mRg6d4PdCC0ICAgICDMu0Dsnjxx/yrLbhTVYPEbXax7t+K7dWSX14hvzFzdBD4RnDE8ulkXaHQSzMjN2VLIw9zCLjiLm+A6G1wQ6173JQadl/M1JmNvFg07JLbtBs9v3mGzh8Qgl0BAQEBAQEBAQEBAQEBAQEBB4MewiLHqeSnxFvFHI2x6jo4faBsQeoCDFey7FpchYlNhOOm0cj7RuOjeM+w9v2ZG2HrwjTVBomYGDKtazEYvDTz8ENZsADe0NQfuk8BPRwQXVBH47hLMahdFOS3UOY9vtRvaQ5kjDyc1wBH4bIPFlfGH14fDioDKuA8MrRs4G/DNH/AMuQC46HiadWoJ1AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBlvbrk/54phW0A+nphd1t3RA3PxZq4eXF1QTPZxmGPP2G8OJ2fIGmGoafe0txfzt1058QGyCVyVUviZJRYg4umpHBnEd5IiLwynqSzwuP12PQWRBAZmwmSVzKvBgPlcAIaCbCWM2LoJD0dYEH3XAHa9w9+BYvHjkLZqS4BuHMcLPY4aOjkbye03BHkgkEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQcOaHCztQeSDAo79kuOW2oKr8Axx/C8Tz5ng+8g2GuwVzq2CtoHAODDDM07SRElzSPtsfqOoLggnUBBV8apn4BMa7DWl0bv63C0XLmgaVEbR/FYNHD32ebWoLHTVDKtjZKZwcx4Dmuabggi4II3BCDtQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBSO13Kn7U0DxTtvPDeSLqbDxMH3hy6hqDw9i+Z/2nw/uatx76nAifrZxYR4H33vYFt97tJ5oLJkvFn10ckOJG9TSvMMx24rexLbpIyz/AFJHJBYUBBV4ojlOW0Y/oMz725U0jz+UEjj/ACOP1XeALQgICAgICAgICAgICAgICAgICAgICAgICAgwjF2/8MMfZPH4aOrvxdAHkcY/kfwv+6QEF6zQ85YxKmxCM2p6nhpqroCbmGU+hu0uOwsOaC+oCD5ljbM0tlAc0gggi4IOhBB3BQeKCikpWhlLIOBujeNpc4DkC7jF7bAnWwFyTckPegICAgICAgICAgICAgICAgICAgICAgICCn9quVf2roJI4ReaP6SHqXNB8H8wu3pcg8kFV7McWiz/AIVLhuMm8sbO7df2iz+HIL+8wgD1a0ndBoWUvlDaWNmNC08YMbzuH8B4RIDzD2gO8uIjcIIzNHaBRZdd3T3OmqSbNp4BxyE9CBo0+RN+gKDvyxPiOJHvseZHTRkHgpmnjk196aXbzDWgb69EFkQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEH577UsBqckYiMRyy7u2TOvdpb4ZHe0wtOhY72tQRqdrBBZcNwjMOc2N+fqttJTO3EPD3jx5GM6Ai41d/KUF8yjkiiyk22ExeMizpX+KR3q7kPJoA8kFjQEH/2Q==]]></data>
	</file>
	<file>
	  <filename>/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/images/podium.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[/9j/4AAQSkZJRgABAQEASABIAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABCgAwAEAAAAAQAAAA0AAAAA/+0AOFBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAAOEJJTQQlAAAAAAAQ1B2M2Y8AsgTpgAmY7PhCfv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23////AABEIAA0AEAMBEgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/3QAEAAL/2gAMAwEAAhEDEQA/AP0Kk1O/8TeJ/FWhi5vY7FLRoY1khMKvKQMGGVRnaMkMSSSScABcnOj+L/lKF/sgFl+Ut9owTj/gFeI4UZVKkqlRuMlbl1svlt+B9AlWjTpxp0kpRd73V3+v4/odF/wks/hi68KaHItrK88cdtcDzj5qMEI3KuOV3LjPv261yVx8RbK+1CC7k0CM30ZxFcmfLxZ4O07ePw61bklOmqVW0Y7q26ta23+WxKozlCo6tK8pap3WnXuf/9k=]]></data>
	</file>
	<file>
	  <filename>/images/warning.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAN0AAP///+Xl5d3MVdnUON7WMvDosgAAAPPicNTRPOPZLfvqgffmeauZM869SuzcJNbFT+jbKNDPQubeq//2p/Png/DfacGwQerbYce2Rf//zNLJRf/+xdTMSNTU1P76u7iyjGZmZrSjOXV1dfTtetDKptXUUPz2rOjgSOrdMejjYvnwmhgYGN7YY9fURunhaPbsj/TpiNrUTeXZVu7dZjMzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEHAAAALAEAAQAOAA8AAAaMQICwICgaC8IkMTNpTjYC5FCQUVivniiAuFl4RSLvwhR9eA7oAwiUPqgej1dlfqGtOBoNhwWHzS4xEQYGEYURJQ8NFDIIjYONjS0NDS4DlgMUFJeWkykEnwSDoJ8NEhgnCamDqakYEgASFigQECMjtBAWr0IkIQ6/wCEkSQEdHwzIyR8dAcQBz9DQQkEAOw==]]></data>
	</file>
	<file>
	  <filename>/include/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/include/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/include/prefs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKJGRiID0mICR0aGlzLT5HZXREYigpOwpnbG9iYWwgJHRoZW1lT2JqZWN0Owokbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CiRtb2lzX2NvdXJhbnQgPSBkYXRlKCduJyk7CiRhbm5lZV9jb3VyYW50ZSA9IGRhdGUoJ1knKTsKJHNhaXNvbl9jb3VyYW50ZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKJG1vZHVsZV9kaXIgPSAkdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpOwokdGFibGVhdSA9IGFycmF5KCIxIj0+IkphbnZpZXIiLCIyIj0+IkbDqXZyaWVyIiwiMyI9PiJNYXJzIiwiNCI9PiJBdnJpbCIsIjUiPT4iTWFpIiwiNiI9PiJKdWluIiwiNyI9PiJKdWlsbGV0IiwiOSI9PiJTZXB0ZW1icmUiLCIxMCI9PiJPY3RvYnJlIiwiMTEiPT4iTm92ZW1icmUiLCIxMiI9PiJEw6ljZW1icmUiKTsKJGxpc3RlX21vaXMgPSBhcnJheSgiSmFudmllciI9PiIxIiwgIkbDqXZyaWVyIj0+IjIiLCJNYXJzIj0+IjMiLCJBdnJpbCI9PiI0IiwiTWFpIj0+IjUiLCJKdWluIj0+IjYiLCJKdWlsbGV0Ij0+IjciLCJTZXB0ZW1icmUiPT4iOSIsIk9jdG9icmUiPT4iMTAiLCJOb3ZlbWJyZSI9PiIxMSIsICJEw6ljZW1icmUiPT4iMTIiKTsKJGxpc3RlX21vaXNfZnIgPSBhcnJheSgiSmFudmllciIsICJGw6l2cmllciIsIk1hcnMiLCJBdnJpbCIsIk1haSIsIkp1aW4iLCJKdWlsbGV0IiwiU2VwdGVtYnJlIiwiT2N0b2JyZSIsIk5vdmVtYnJlIiwgIkTDqWNlbWJyZSIpOwokbW9pc19jb3VydHMgPSBhcnJheSgnSmFuJywnRsOpdicsJ01hcicsJ0F2cicsJ01haScsJ2p1aW4nLCdqdWlsJywnYW91dCcsICdTZXB0JywnT2N0JywgJ05vdicsICdEw6ljJyk7CiRhbm5lZSA9IGRhdGUoJ1knKTsKJG1vaXMgPSBkYXRlKCduJyk7CiRtb2lzX2xpc3RlX3RhYmxlYXUgPSAkbW9pcyAtIDE7CiRtb2lzX3RhYmxlYXUgPSAkbW9pc19jb3VydHNbJG1vaXNfbGlzdGVfdGFibGVhdV07Ci8vJGFubmVlID0nMjAxNCc7Ci8vJG1vaXMgPSc0JzsKaWYoJG1vaXM+PTcgJiYgJG1vaXMgPD0xMikKewoJJGFubmVlMSA9ICRhbm5lZTsKCSRhbm5lZTIgPSAkYW5uZWUrMTsKCSRwaGFzZSA9MTsKCS8vJGFubmVlX3ByZWNlZGVudGUgPSA7Cn0KZWxzZWlmKCRtb2lzID49MSAmJiAkbW9pczw9NykKewoJJHBoYXNlID0gMjsKCSRhbm5lZTEgPSAkYW5uZWUtMTsKCSRhbm5lZTIgPSAkYW5uZWU7CgkKfQokc2Fpc29uX2VuX2NvdXJzID0gJGFubmVlMS4nLScuJGFubmVlMjsKIwojRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/include/travaux.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKJGRiID0mICR0aGlzLT5HZXREYigpOwpnbG9iYWwgJHRoZW1lT2JqZWN0OwokdHJhdmF1eCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0cmF2YXV4Jyk7CmlmKCR0cmF2YXV4ID09J3RydWUnKQp7CglkZWJ1Z19kaXNwbGF5KCRwYXJhbXMsICdQYXJhbWV0ZXJzJyk7Cn0KIwojRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/jqplot/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/jqplot/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAABAAAQAABpAG4Ac2RzY2xibwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAHAAbAB1AGcAaQBuAHNkc2NsYm9vbAAAAAARAHMAeQBuAHQAYQB4AGgAaQBnAGgAbABpAGcAaAB0AGUAcmRzY2xib29sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAGAAAAAAAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/jqplot/example.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtpZighJC5qcXBsb3QuX25vQ29kZUJsb2NrKXskKCJzY3JpcHQuY29kZSIpLmVhY2goZnVuY3Rpb24oYyl7aWYoJCgicHJlLmNvZGUiKS5lcShjKS5sZW5ndGgpeyQoInByZS5jb2RlIikuZXEoYykudGV4dCgkKHRoaXMpLmh0bWwoKSl9ZWxzZXt2YXIgZD0kKCc8cHJlIGNsYXNzPSJjb2RlIHByZXR0eXByaW50IGJydXNoOiBqcyI+PC9wcmU+Jyk7JCgiZGl2LmpxcGxvdC10YXJnZXQiKS5lcShjKS5hZnRlcihkKTtkLnRleHQoJCh0aGlzKS5odG1sKCkpO2Q9bnVsbH19KTskKCJzY3JpcHQuY29tbW9uIikuZWFjaChmdW5jdGlvbihjKXskKCJwcmUuY29tbW9uIikuZXEoYykudGV4dCgkKHRoaXMpLmh0bWwoKSl9KTt2YXIgYj0iIjtpZigkKCJzY3JpcHQuaW5jbHVkZSwgbGluay5pbmNsdWRlIikubGVuZ3RoPjApe2lmKCQoInByZS5pbmNsdWRlIikubGVuZ3RoPT0wKXt2YXIgYT1bJzxkaXYgY2xhc3M9ImNvZGUgcHJldHR5cHJpbnQgaW5jbHVkZSI+JywnPHAgY2xhc3M9InRleHQiPlRoZSBjaGFydHMgb24gdGhpcyBwYWdlIGRlcGVuZCBvbiB0aGUgZm9sbG93aW5nIGZpbGVzOjwvcD4nLCc8cHJlIGNsYXNzPSJpbmNsdWRlIHByZXR0eXByaW50IGJydXNoOiBodG1sIGd1dHRlcjogZmFsc2UiPjwvcHJlPicsIjwvZGl2PiJdO2E9JChhLmpvaW4oIlxuIikpOyQoImRpdiNleGFtcGxlLWNvbnRlbnQiKS5hcHBlbmQoYSk7YT1udWxsfSQoInNjcmlwdC5pbmNsdWRlIikuZWFjaChmdW5jdGlvbihjKXtpZihiIT09IiIpe2IrPSJcbiJ9Yis9JzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicrJCh0aGlzKS5hdHRyKCJzcmMiKSsnIj48XC9zY3JpcHQ+J30pOyQoImxpbmsuaW5jbHVkZSIpLmVhY2goZnVuY3Rpb24oYyl7aWYoYiE9PSIiKXtiKz0iXG4ifWIrPSc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmY9IicrJCh0aGlzKS5hdHRyKCJocmVmIikrJyIgLz4nfSk7JCgicHJlLmluY2x1ZGUiKS50ZXh0KGIpfWVsc2V7JCgicHJlLmluY2x1ZGUiKS5yZW1vdmUoKTskKCJkaXYuaW5jbHVkZSIpLnJlbW92ZSgpfX1pZighJC5qcXBsb3QudXNlX2V4Y2FudmFzKXskKCJkaXYuanFwbG90LXRhcmdldCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZD0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTt2YXIgZz0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTt2YXIgZj0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtkLmFwcGVuZChnKTtkLmFwcGVuZChmKTtkLmFkZENsYXNzKCJqcXBsb3QtaW1hZ2UtY29udGFpbmVyIik7Zy5hZGRDbGFzcygianFwbG90LWltYWdlLWNvbnRhaW5lci1oZWFkZXIiKTtmLmFkZENsYXNzKCJqcXBsb3QtaW1hZ2UtY29udGFpbmVyLWNvbnRlbnQiKTtnLmh0bWwoIlJpZ2h0IENsaWNrIHRvIFNhdmUgSW1hZ2UgQXMuLi4iKTt2YXIgZT0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSk7ZS5hZGRDbGFzcygianFwbG90LWltYWdlLWNvbnRhaW5lci1jbG9zZSIpO2UuaHRtbCgiQ2xvc2UiKTtlLmF0dHIoImhyZWYiLCIjIik7ZS5jbGljayhmdW5jdGlvbigpeyQodGhpcykucGFyZW50cygiZGl2LmpxcGxvdC1pbWFnZS1jb250YWluZXIiKS5oaWRlKDUwMCl9KTtnLmFwcGVuZChlKTskKHRoaXMpLmFmdGVyKGQpO2QuaGlkZSgpO2Q9Zz1mPWU9bnVsbDtpZighJC5qcXBsb3QuX25vVG9JbWFnZUJ1dHRvbil7dmFyIGM9JChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKSk7Yy50ZXh0KCJWaWV3IFBsb3QgSW1hZ2UiKTtjLmFkZENsYXNzKCJqcXBsb3QtaW1hZ2UtYnV0dG9uIik7Yy5iaW5kKCJjbGljayIse2NoYXJ0OiQodGhpcyl9LGZ1bmN0aW9uKGgpe3ZhciBqPWguZGF0YS5jaGFydC5qcXBsb3RUb0ltYWdlRWxlbSgpO3ZhciBpPSQodGhpcykubmV4dEFsbCgiZGl2LmpxcGxvdC1pbWFnZS1jb250YWluZXIiKS5maXJzdCgpO2kuY2hpbGRyZW4oImRpdi5qcXBsb3QtaW1hZ2UtY29udGFpbmVyLWNvbnRlbnQiKS5lbXB0eSgpO2kuY2hpbGRyZW4oImRpdi5qcXBsb3QtaW1hZ2UtY29udGFpbmVyLWNvbnRlbnQiKS5hcHBlbmQoaik7aS5zaG93KDUwMCk7aT1udWxsfSk7JCh0aGlzKS5hZnRlcihjKTtjLmFmdGVyKCI8YnIgLz4iKTtjPW51bGx9fSl9U3ludGF4SGlnaGxpZ2h0ZXIuZGVmYXVsdHMudG9vbGJhcj10cnVlO1N5bnRheEhpZ2hsaWdodGVyLmFsbCgpOyQoZG9jdW1lbnQpLnVubG9hZChmdW5jdGlvbigpeyQoIioiKS51bmJpbmQoKX0pfSk7]]></data>
	</file>
	<file>
	  <filename>/jqplot/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/jqplot/jquery.jqplot.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFRpdGxlOiBqcVBsb3QgQ2hhcnRzCiAqIAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIGZvciBqUXVlcnkuCiAqIAogKiBBYm91dDogVmVyc2lvbgogKiAKICogdmVyc2lvbjogMS4wLjggCiAqIHJldmlzaW9uOiAxMjUwCiAqIAogKiBBYm91dDogQ29weXJpZ2h0ICYgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTMgQ2hyaXMgTGVvbmVsbG8KICoganFQbG90IGlzIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHVzZSBpbiBhbGwgcGVyc29uYWwgb3IgY29tbWVyY2lhbCBwcm9qZWN0cyAKICogdW5kZXIgYm90aCB0aGUgTUlUIGFuZCBHUEwgdmVyc2lvbiAyLjAgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LgogKiAKICogU2VlIDxHUEwgVmVyc2lvbiAyPiBhbmQgPE1JVCBMaWNlbnNlPiBjb250YWluZWQgd2l0aGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLiAKICoKICogVGhlIGF1dGhvciB3b3VsZCBhcHByZWNpYXRlIGFuIGVtYWlsIGxldHRpbmcgaGltIGtub3cgb2YgYW55IHN1YnN0YW50aWFsCiAqIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IGNocmlzIGF0IGpxcGxvdCBkb3QgY29tIAogKiBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwLiAgVGhpcyBpcywgb2YgY291cnNlLCBub3QgcmVxdWlyZWQuCiAqCiAqIElmIHlvdSBhcmUgZmVlbGluZyBraW5kIGFuZCBnZW5lcm91cywgY29uc2lkZXIgc3VwcG9ydGluZyB0aGUgcHJvamVjdCBieQogKiBtYWtpbmcgYSBkb25hdGlvbiBhdDogaHR0cDovL3d3dy5qcXBsb3QuY29tL2RvbmF0ZS5waHAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKiAKICogICAgIHZlcnNpb24gMjAwNy4wNC4yNwogKiAgICAgYXV0aG9yIEFzaCBTZWFybGUKICogICAgIGh0dHA6Ly9oZXhtZW4uY29tL2Jsb2cvMjAwNy8wMy9wcmludGYtc3ByaW50Zi8KICogICAgIGh0dHA6Ly9oZXhtZW4uY29tL2pzL3NwcmludGYuanMKICogICAgIFRoZSBhdXRob3IgKEFzaCBTZWFybGUpIGhhcyBwbGFjZWQgdGhpcyBjb2RlIGluIHRoZSBwdWJsaWMgZG9tYWluOgogKiAgICAgIlRoaXMgY29kZSBpcyB1bnJlc3RyaWN0ZWQ6IHlvdSBhcmUgZnJlZSB0byB1c2UgaXQgaG93ZXZlciB5b3UgbGlrZS4iCiAqIAogKiAKICogQWJvdXQ6IEludHJvZHVjdGlvbgogKiAKICoganFQbG90IHJlcXVpcmVzIGpRdWVyeSAoMS40KyByZXF1aXJlZCBmb3IgY2VydGFpbiBmZWF0dXJlcykuIGpRdWVyeSAxLjQuMiBpcyBpbmNsdWRlZCBpbiB0aGUgZGlzdHJpYnV0aW9uLiAgCiAqIFRvIHVzZSBqcVBsb3QgaW5jbHVkZSBqUXVlcnksIHRoZSBqcVBsb3QgalF1ZXJ5IHBsdWdpbiwgdGhlIGpxUGxvdCBjc3MgZmlsZSBhbmQgb3B0aW9uYWxseSAKICogdGhlIGV4Y2FudmFzIHNjcmlwdCBmb3IgSUUgc3VwcG9ydCBpbiB5b3VyIHdlYiBwYWdlOgogKiAKICogPiA8IS0tW2lmIGx0IElFIDldPjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJleGNhbnZhcy5qcyI+PC9zY3JpcHQ+PCFbZW5kaWZdLS0+CiAqID4gPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpxdWVyeS0xLjQuNC5taW4uanMiPjwvc2NyaXB0PgogKiA+IDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcXVlcnkuanFwbG90Lm1pbi5qcyI+PC9zY3JpcHQ+CiAqID4gPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ianF1ZXJ5LmpxcGxvdC5jc3MiIC8+CiAqIAogKiBqcVBsb3QgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdHMgb2YgYW55IG9mIHRoZSBvYmplY3RzIHdoaWNoIG1ha2UKICogdXAgdGhlIHBsb3QuIFRoZSBnZW5lcmFsIHVzYWdlIG9mIGpxcGxvdCBpczoKICogCiAqID4gY2hhcnQgPSAkLmpxcGxvdCgndGFyZ2V0RWxlbUlkJywgW2RhdGFBcnJheSwuLi5dLCB7b3B0aW9uc09iamVjdH0pOwogKiAKICogVGhlIG9wdGlvbnMgYXZhaWxhYmxlIHRvIGpxcGxvdCBhcmUgZGV0YWlsZWQgaW4gPGpxUGxvdCBPcHRpb25zPiBpbiB0aGUganFQbG90T3B0aW9ucy50eHQgZmlsZS4KICogCiAqIEFuIGFjdHVhbCBjYWxsIHRvICQuanFwbG90KCkgbWF5IGxvb2sgbGlrZSB0aGUgCiAqIGV4YW1wbGVzIGJlbG93OgogKiAKICogPiBjaGFydCA9ICQuanFwbG90KCdjaGFydGRpdicsICBbW1sxLCAyXSxbMyw1LjEyXSxbNSwxMy4xXSxbNywzMy42XSxbOSw4NS45XSxbMTEsMjE5LjldXV0pOwogKiAKICogb3IKICogCiAqID4gZGF0YUFycmF5ID0gWzM0LDEyLDQzLDU1LDc3XTsKICogPiBjaGFydCA9ICQuanFwbG90KCd0YXJnZXRFbGVtSWQnLCBbZGF0YUFycmF5LCAuLi5dLCB7dGl0bGU6J015IFBsb3QnLCBheGVzOnt5YXhpczp7bWluOjIwLCBtYXg6MTAwfX19KTsKICogCiAqIEZvciBtb3JlIGluZm9ycm1hdGlvbiwgc2VlIDxqcVBsb3QgVXNhZ2U+LgogKiAKICogQWJvdXQ6IFVzYWdlCiAqIAogKiBTZWUgPGpxUGxvdCBVc2FnZT4KICogCiAqIEFib3V0OiBBdmFpbGFibGUgT3B0aW9ucyAKICogCiAqIFNlZSA8anFQbG90IE9wdGlvbnM+IGZvciBhIGxpc3Qgb2Ygb3B0aW9ucyBhdmFpbGFibGUgdGhvcnVnaCB0aGUgb3B0aW9ucyBvYmplY3QgKG5vdCBjb21wbGV0ZSB5ZXQhKQogKiAKICogQWJvdXQ6IE9wdGlvbnMgVXNhZ2UKICogCiAqIFNlZSA8T3B0aW9ucyBUdXRvcmlhbD4KICogCiAqIEFib3V0OiBDaGFuZ2VzCiAqIAogKiBTZWUgPENoYW5nZSBMb2c+CiAqIAogKi8KCihmdW5jdGlvbigkKSB7CiAgICAvLyBtYWtlIHN1cmUgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAogICAgdmFyIHVuZGVmaW5lZDsKICAgIAogICAgJC5mbi5lbXB0eUZvcmNlID0gZnVuY3Rpb24oKSB7CiAgICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSAkKHRoaXMpW2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCiAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgJC5jbGVhbkRhdGEoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwogICAgICAgIH0KICAKICAgICAgICAvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2RlcwogICAgICAgIGlmICgkLmpxcGxvdC51c2VfZXhjYW52YXMpIHsKICAgICAgICAgIGVsZW0ub3V0ZXJIVE1MID0gIiI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgd2hpbGUgKCBlbGVtLmZpcnN0Q2hpbGQgKSB7CiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2hpbGQoIGVsZW0uZmlyc3RDaGlsZCApOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxlbSA9IG51bGw7CiAgICAgIH0KICAKICAgICAgcmV0dXJuICQodGhpcyk7CiAgICB9OwogIAogICAgJC5mbi5yZW1vdmVDaGlsZEZvcmNlID0gZnVuY3Rpb24ocGFyZW50KSB7CiAgICAgIHdoaWxlICggcGFyZW50LmZpcnN0Q2hpbGQgKSB7CiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZEZvcmNlKCBwYXJlbnQuZmlyc3RDaGlsZCApOwogICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZCggcGFyZW50LmZpcnN0Q2hpbGQgKTsKICAgICAgfQogICAgfTsKCiAgICAkLmZuLmpxcGxvdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkYXRhcyA9IFtdOwogICAgICAgIHZhciBvcHRpb25zID0gW107CiAgICAgICAgLy8gc2VlIGhvdyBtYW55IGRhdGEgYXJyYXlzIHdlIGhhdmUKICAgICAgICBmb3IgKHZhciBpPTAsIGw9YXJndW1lbnRzLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgaWYgKCQuaXNBcnJheShhcmd1bWVudHNbaV0pKSB7CiAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKGFyZ3VtZW50c1tpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoJC5pc1BsYWluT2JqZWN0KGFyZ3VtZW50c1tpXSkpIHsKICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChhcmd1bWVudHNbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGluZGV4KSB7CiAgICAgICAgICAgIHZhciB0aWQsIAogICAgICAgICAgICAgICAgcGxvdCwgCiAgICAgICAgICAgICAgICAkdGhpcyA9ICQodGhpcyksCiAgICAgICAgICAgICAgICBkbCA9IGRhdGFzLmxlbmd0aCwKICAgICAgICAgICAgICAgIG9sID0gb3B0aW9ucy5sZW5ndGgsCiAgICAgICAgICAgICAgICBkYXRhLCAKICAgICAgICAgICAgICAgIG9wdHM7CgogICAgICAgICAgICBpZiAoaW5kZXggPCBkbCkgewogICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFzW2luZGV4XTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGRhdGEgPSBkbCA/IGRhdGFzW2RsLTFdIDogbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGluZGV4IDwgb2wpIHsKICAgICAgICAgICAgICAgIG9wdHMgPSBvcHRpb25zW2luZGV4XTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG9wdHMgPSBvbCA/IG9wdGlvbnNbb2wtMV0gOiBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBkb2VzIGVsIGhhdmUgYW4gaWQ/CiAgICAgICAgICAgIC8vIGlmIG5vdCBhc3NpZ24gaXQgb25lLgogICAgICAgICAgICB0aWQgPSAkdGhpcy5hdHRyKCdpZCcpOwogICAgICAgICAgICBpZiAodGlkID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHRpZCA9ICdqcXBsb3RfdGFyZ2V0XycgKyAkLmpxcGxvdC50YXJnZXRDb3VudGVyKys7CiAgICAgICAgICAgICAgICAkdGhpcy5hdHRyKCdpZCcsIHRpZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHBsb3QgPSAkLmpxcGxvdCh0aWQsIGRhdGEsIG9wdHMpOwoKICAgICAgICAgICAgJHRoaXMuZGF0YSgnanFwbG90JywgcGxvdCk7CiAgICAgICAgfSk7CiAgICB9OwoKCiAgICAvKioKICAgICAqIE5hbWVzcGFjZTogJC5qcXBsb3QKICAgICAqIGpRdWVyeSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIHVzZXIgdG8gY3JlYXRlIGEgcGxvdC4KICAgICAqICAKICAgICAqIFBhcmFtZXRlcnM6CiAgICAgKiB0YXJnZXQgLSBJRCBvZiB0YXJnZXQgZWxlbWVudCB0byByZW5kZXIgdGhlIHBsb3QgaW50by4KICAgICAqIGRhdGEgLSBhbiBhcnJheSBvZiBkYXRhIHNlcmllcy4KICAgICAqIG9wdGlvbnMgLSB1c2VyIGRlZmluZWQgb3B0aW9ucyBvYmplY3QuICBTZWUgdGhlIGluZGl2aWR1YWwgY2xhc3NlcyBmb3IgYXZhaWxhYmxlIG9wdGlvbnMuCiAgICAgKiAKICAgICAqIFByb3BlcnRpZXM6CiAgICAgKiBjb25maWcgLSBvYmplY3QgdG8gaG9sZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBqcVBsb3QgcGxvdCBvYmplY3QuCiAgICAgKiAKICAgICAqIGF0dHJpYnV0ZXM6CiAgICAgKiBlbmFibGVQbHVnaW5zIC0gRmFsc2UgdG8gZGlzYWJsZSBwbHVnaW5zIGJ5IGRlZmF1bHQuICBQbHVnaW5zIG11c3QgdGhlbiBiZSBleHBsaWNpdGx5IAogICAgICogICBlbmFibGVkIGluIHRoZSBpbmRpdmlkdWFsIHBsb3Qgb3B0aW9ucy4gIERlZmF1bHQ6IGZhbHNlLgogICAgICogICBUaGlzIHByb3BlcnR5IHNldHMgdGhlICJzaG93IiBwcm9wZXJ0eSBvZiBjZXJ0YWluIHBsdWdpbnMgdG8gdHJ1ZSBvciBmYWxzZS4KICAgICAqICAgT25seSBwbHVnaW5zIHRoYXQgY2FuIGJlIGltbWVkaWF0ZWx5IGFjdGl2ZSB1cG9uIGxvYWRpbmcgYXJlIGFmZmVjdGVkLiAgVGhpcyBpbmNsdWRlcwogICAgICogICBub24tcmVuZGVyZXIgcGx1Z2lucyBsaWtlIGN1cnNvciwgZHJhZ2FibGUsIGhpZ2hsaWdodGVyLCBhbmQgdHJlbmRsaW5lLgogICAgICogZGVmYXVsdEhlaWdodCAtIERlZmF1bHQgaGVpZ2h0IGZvciBwbG90cyB3aGVyZSBubyBjc3MgaGVpZ2h0IHNwZWNpZmljYXRpb24gZXhpc3RzLiAgVGhpcwogICAgICogICBpcyBhIGpxcGxvdCB3aWRlIGRlZmF1bHQuCiAgICAgKiBkZWZhdWx0V2lkdGggLSBEZWZhdWx0IGhlaWdodCBmb3IgcGxvdHMgd2hlcmUgbm8gY3NzIGhlaWdodCBzcGVjaWZpY2F0aW9uIGV4aXN0cy4gIFRoaXMKICAgICAqICAgaXMgYSBqcXBsb3Qgd2lkZSBkZWZhdWx0LgogICAgICovCgogICAgJC5qcXBsb3QgPSBmdW5jdGlvbih0YXJnZXQsIGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgX2RhdGEgPSBudWxsLCBfb3B0aW9ucyA9IG51bGw7CgogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7CiAgICAgICAgICAgIF9kYXRhID0gZGF0YTsKICAgICAgICAgICAgX29wdGlvbnMgPSBvcHRpb25zOwogICAgICAgIH0KCiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgICBpZiAoJC5pc0FycmF5KGRhdGEpKSB7CiAgICAgICAgICAgICAgICBfZGF0YSA9IGRhdGE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgaWYgKCQuaXNQbGFpbk9iamVjdChkYXRhKSkgewogICAgICAgICAgICAgICAgX29wdGlvbnMgPSBkYXRhOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoX2RhdGEgPT09IG51bGwgJiYgX29wdGlvbnMgIT09IG51bGwgJiYgX29wdGlvbnMuZGF0YSkgewogICAgICAgICAgICBfZGF0YSA9IF9vcHRpb25zLmRhdGE7CiAgICAgICAgfQoKICAgICAgICB2YXIgcGxvdCA9IG5ldyBqcVBsb3QoKTsKICAgICAgICAvLyByZW1vdmUgYW55IGVycm9yIGNsYXNzIHRoYXQgbWF5IGJlIHN0dWNrIG9uIHRhcmdldC4KICAgICAgICAkKCcjJyt0YXJnZXQpLnJlbW92ZUNsYXNzKCdqcXBsb3QtZXJyb3InKTsKICAgICAgICAKICAgICAgICBpZiAoJC5qcXBsb3QuY29uZmlnLmNhdGNoRXJyb3JzKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBwbG90LmluaXQodGFyZ2V0LCBfZGF0YSwgX29wdGlvbnMpOwogICAgICAgICAgICAgICAgcGxvdC5kcmF3KCk7CiAgICAgICAgICAgICAgICBwbG90LnRoZW1lRW5naW5lLmluaXQuY2FsbChwbG90KTsKICAgICAgICAgICAgICAgIHJldHVybiBwbG90OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoKGUpIHsKICAgICAgICAgICAgICAgIHZhciBtc2cgPSAkLmpxcGxvdC5jb25maWcuZXJyb3JNZXNzYWdlIHx8IGUubWVzc2FnZTsKICAgICAgICAgICAgICAgICQoJyMnK3RhcmdldCkuYXBwZW5kKCc8ZGl2IGNsYXNzPSJqcXBsb3QtZXJyb3ItbWVzc2FnZSI+Jyttc2crJzwvZGl2PicpOwogICAgICAgICAgICAgICAgJCgnIycrdGFyZ2V0KS5hZGRDbGFzcygnanFwbG90LWVycm9yJyk7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpLnN0eWxlLmJhY2tncm91bmQgPSAkLmpxcGxvdC5jb25maWcuZXJyb3JCYWNrZ3JvdW5kOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0KS5zdHlsZS5ib3JkZXIgPSAkLmpxcGxvdC5jb25maWcuZXJyb3JCb3JkZXI7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpLnN0eWxlLmZvbnRGYW1pbHkgPSAkLmpxcGxvdC5jb25maWcuZXJyb3JGb250RmFtaWx5OwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0KS5zdHlsZS5mb250U2l6ZSA9ICQuanFwbG90LmNvbmZpZy5lcnJvckZvbnRTaXplOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0KS5zdHlsZS5mb250U3R5bGUgPSAkLmpxcGxvdC5jb25maWcuZXJyb3JGb250U3R5bGU7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpLnN0eWxlLmZvbnRXZWlnaHQgPSAkLmpxcGxvdC5jb25maWcuZXJyb3JGb250V2VpZ2h0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgeyAgICAgICAgCiAgICAgICAgICAgIHBsb3QuaW5pdCh0YXJnZXQsIF9kYXRhLCBfb3B0aW9ucyk7CiAgICAgICAgICAgIHBsb3QuZHJhdygpOwogICAgICAgICAgICBwbG90LnRoZW1lRW5naW5lLmluaXQuY2FsbChwbG90KTsKICAgICAgICAgICAgcmV0dXJuIHBsb3Q7CiAgICAgICAgfQogICAgfTsKCiAgICAkLmpxcGxvdC52ZXJzaW9uID0gIjEuMC44IjsKICAgICQuanFwbG90LnJldmlzaW9uID0gIjEyNTAiOwoKICAgICQuanFwbG90LnRhcmdldENvdW50ZXIgPSAxOwoKICAgIC8vIGNhbnZhcyBtYW5hZ2VyIHRvIHJldXNlIGNhbnZhc2VzIG9uIHRoZSBwbG90LgogICAgLy8gU2hvdWxkIGhlbHAgc29sdmUgcHJvYmxlbSBvZiBjYW52YXNlcyBub3QgYmVpbmcgZnJlZWQgYW5kCiAgICAvLyBwcm9ibGVtIG9mIHdhaXRpbmcgZm9yZXZlciBmb3IgZmlyZWZveCB0byBkZWNpZGUgdG8gZnJlZSBtZW1vcnkuCiAgICAkLmpxcGxvdC5DYW52YXNNYW5hZ2VyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gY2FudmFzZXMgYXJlIG1hbmFnZWQgZ2xvYmFsbHkgc28gdGhhdCB0aGV5IGNhbiBiZSByZXVzZWQKICAgICAgICAvLyBhY3Jvc3MgcGxvdHMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZnJlZWQKICAgICAgICBpZiAodHlwZW9mICQuanFwbG90LkNhbnZhc01hbmFnZXIuY2FudmFzZXMgPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgJC5qcXBsb3QuQ2FudmFzTWFuYWdlci5jYW52YXNlcyA9IFtdOwogICAgICAgICAgICAkLmpxcGxvdC5DYW52YXNNYW5hZ2VyLmZyZWUgPSBbXTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmFyIG15Q2FudmFzZXMgPSBbXTsKICAgICAgICAKICAgICAgICB0aGlzLmdldENhbnZhcyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgY2FudmFzOwogICAgICAgICAgICB2YXIgbWFrZU5ldyA9IHRydWU7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoISQuanFwbG90LnVzZV9leGNhbnZhcykgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSAkLmpxcGxvdC5DYW52YXNNYW5hZ2VyLmNhbnZhc2VzLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGlmICgkLmpxcGxvdC5DYW52YXNNYW5hZ2VyLmZyZWVbaV0gPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWFrZU5ldyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMgPSAkLmpxcGxvdC5DYW52YXNNYW5hZ2VyLmNhbnZhc2VzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAvLyAkKGNhbnZhcykucmVtb3ZlQ2xhc3MoJ2pxcGxvdC1jYW52YXNNYW5hZ2VyLWZyZWUnKS5hZGRDbGFzcygnanFwbG90LWNhbnZhc01hbmFnZXItaW51c2UnKTsKICAgICAgICAgICAgICAgICAgICAgICAgJC5qcXBsb3QuQ2FudmFzTWFuYWdlci5mcmVlW2ldID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIG15Q2FudmFzZXMucHVzaChpKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobWFrZU5ldykgewogICAgICAgICAgICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CiAgICAgICAgICAgICAgICBteUNhbnZhc2VzLnB1c2goJC5qcXBsb3QuQ2FudmFzTWFuYWdlci5jYW52YXNlcy5sZW5ndGgpOwogICAgICAgICAgICAgICAgJC5qcXBsb3QuQ2FudmFzTWFuYWdlci5jYW52YXNlcy5wdXNoKGNhbnZhcyk7CiAgICAgICAgICAgICAgICAkLmpxcGxvdC5DYW52YXNNYW5hZ2VyLmZyZWUucHVzaChmYWxzZSk7CiAgICAgICAgICAgIH0gICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBjYW52YXM7CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICAvLyB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgdXNlZCBhZnRlciBzZXR0aW5ncyB0aGUgZGltZXNpb25zCiAgICAgICAgLy8gb24gdGhlIGVsZW1lbnQgcmV0dXJuZWQgYnkgZ2V0Q2FudmFzKCkKICAgICAgICB0aGlzLmluaXRDYW52YXMgPSBmdW5jdGlvbihjYW52YXMpIHsKICAgICAgICAgICAgaWYgKCQuanFwbG90LnVzZV9leGNhbnZhcykgewogICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIuaW5pdEVsZW1lbnQoY2FudmFzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gY2FudmFzOwogICAgICAgIH07CgogICAgICAgIHRoaXMuZnJlZUFsbENhbnZhc2VzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsPW15Q2FudmFzZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgICAgICB0aGlzLmZyZWVDYW52YXMobXlDYW52YXNlc1tpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbXlDYW52YXNlcyA9IFtdOwogICAgICAgIH07CgogICAgICAgIHRoaXMuZnJlZUNhbnZhcyA9IGZ1bmN0aW9uKGlkeCkgewogICAgICAgICAgICBpZiAoJC5qcXBsb3QudXNlX2V4Y2FudmFzICYmIHdpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIudW5pbml0RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAvLyBleGNhbnZhcyBjYW4ndCBiZSByZXVzZWQsIGJ1dCBwcm9wZXJseSB1bnNldAogICAgICAgICAgICAgICAgd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50KCQuanFwbG90LkNhbnZhc01hbmFnZXIuY2FudmFzZXNbaWR4XSk7CiAgICAgICAgICAgICAgICAkLmpxcGxvdC5DYW52YXNNYW5hZ2VyLmNhbnZhc2VzW2lkeF0gPSBudWxsOwogICAgICAgICAgICB9IAogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBjYW52YXMgPSAkLmpxcGxvdC5DYW52YXNNYW5hZ2VyLmNhbnZhc2VzW2lkeF07CiAgICAgICAgICAgICAgICBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKS5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKICAgICAgICAgICAgICAgICQoY2FudmFzKS51bmJpbmQoKS5yZW1vdmVBdHRyKCdjbGFzcycpLnJlbW92ZUF0dHIoJ3N0eWxlJyk7CiAgICAgICAgICAgICAgICAvLyBTdHlsZSBhdHRyaWJ1dGVzIHNlZW1lZCB0byBiZSBzdGlsbCBoYW5naW5nIGFyb3VuZC4gIHdpZXJkLiAgU29tZSB0aWNrcwogICAgICAgICAgICAgICAgLy8gc3RpbGwgcmV0YWluZWQgYSBsZWZ0OiAwcHggYXR0cmlidXRlIGFmdGVyIHJldXNpbmcgYSBjYW52YXMuCiAgICAgICAgICAgICAgICAkKGNhbnZhcykuY3NzKHtsZWZ0OiAnJywgdG9wOiAnJywgcG9zaXRpb246ICcnfSk7CiAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIHNpemUgdG8gMCBtYXkgc2F2ZSBtZW1vcnkgb2YgdW51c2VkIGNhbnZhc2VzPwogICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gMDsKICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSAwOwogICAgICAgICAgICAgICAgJC5qcXBsb3QuQ2FudmFzTWFuYWdlci5mcmVlW2lkeF0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAKICAgIH07CgogICAgICAgICAgICAKICAgIC8vIENvbnZpZW5lbmNlIGZ1bmN0aW9uIHRoYXQgd29uJ3QgaGFuZyBJRSBvciBGRiB3aXRob3V0IEZpcmVCdWcuCiAgICAkLmpxcGxvdC5sb2cgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAod2luZG93LmNvbnNvbGUpIHsKICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KHdpbmRvdy5jb25zb2xlLCBhcmd1bWVudHMpOwogICAgICAgIH0KICAgIH07CiAgICAgICAgCiAgICAkLmpxcGxvdC5jb25maWcgPSB7CiAgICAgICAgYWRkRG9tUmVmZXJlbmNlOiBmYWxzZSwKICAgICAgICBlbmFibGVQbHVnaW5zOmZhbHNlLAogICAgICAgIGRlZmF1bHRIZWlnaHQ6MzAwLAogICAgICAgIGRlZmF1bHRXaWR0aDo0MDAsCiAgICAgICAgVVRDQWRqdXN0OmZhbHNlLAogICAgICAgIHRpbWV6b25lT2Zmc2V0OiBuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCksCiAgICAgICAgZXJyb3JNZXNzYWdlOiAnJywKICAgICAgICBlcnJvckJhY2tncm91bmQ6ICcnLAogICAgICAgIGVycm9yQm9yZGVyOiAnJywKICAgICAgICBlcnJvckZvbnRGYW1pbHk6ICcnLAogICAgICAgIGVycm9yRm9udFNpemU6ICcnLAogICAgICAgIGVycm9yRm9udFN0eWxlOiAnJywKICAgICAgICBlcnJvckZvbnRXZWlnaHQ6ICcnLAogICAgICAgIGNhdGNoRXJyb3JzOiBmYWxzZSwKICAgICAgICBkZWZhdWx0VGlja0Zvcm1hdFN0cmluZzogIiUuMWYiLAogICAgICAgIGRlZmF1bHRDb2xvcnM6IFsgIiM0YmIyYzUiLCAiI0VBQTIyOCIsICIjYzViNDdmIiwgIiM1Nzk1NzUiLCAiIzgzOTU1NyIsICIjOTU4YzEyIiwgIiM5NTM1NzkiLCAiIzRiNWRlNCIsICIjZDhiODNmIiwgIiNmZjU4MDAiLCAiIzAwODVjYyIsICIjYzc0N2EzIiwgIiNjZGRmNTQiLCAiI0ZCRDE3OCIsICIjMjZCNEUzIiwgIiNiZDcwYzciXSwKICAgICAgICBkZWZhdWx0TmVnYXRpdmVDb2xvcnM6IFsgIiM0OTg5OTEiLCAiI0MwODg0MCIsICIjOUY5Mjc0IiwgIiM1NDZENjEiLCAiIzY0NkM0QSIsICIjNkY2NjIxIiwgIiM2RTNGNUYiLCAiIzRGNjRCMCIsICIjQTg5MDUwIiwgIiNDNDU5MjMiLCAiIzE4NzM5OSIsICIjOTQ1MzgxIiwgIiM5NTlFNUMiLCAiI0M3QUY3QiIsICIjNDc4Mzk2IiwgIiM5MDcyOTQiXSwKICAgICAgICBkYXNoTGVuZ3RoOiA0LAogICAgICAgIGdhcExlbmd0aDogNCwKICAgICAgICBkb3RHYXBMZW5ndGg6IDIuNSwKICAgICAgICBzcmNMb2NhdGlvbjogJ2pxcGxvdC9zcmMvJywKICAgICAgICBwbHVnaW5Mb2NhdGlvbjogJ2pxcGxvdC9zcmMvcGx1Z2lucy8nCiAgICB9OwogICAgCiAgICAKICAgICQuanFwbG90LmFycmF5TWF4ID0gZnVuY3Rpb24oIGFycmF5ICl7CiAgICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KCBNYXRoLCBhcnJheSApOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuYXJyYXlNaW4gPSBmdW5jdGlvbiggYXJyYXkgKXsKICAgICAgICByZXR1cm4gTWF0aC5taW4uYXBwbHkoIE1hdGgsIGFycmF5ICk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5lbmFibGVQbHVnaW5zID0gJC5qcXBsb3QuY29uZmlnLmVuYWJsZVBsdWdpbnM7CiAgICAKICAgIC8vIGNhbnZhcyByZWxhdGVkIHRlc3RzIHRha2VuIGZyb20gbW9kZXJuaXplcjoKICAgIC8vIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTAgRmFydWsgQXRlcy4KICAgIC8vIGh0dHA6Ly93d3cubW9kZXJuaXpyLmNvbQogICAgCiAgICAkLmpxcGxvdC5zdXBwb3J0X2NhbnZhcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0eXBlb2YgJC5qcXBsb3Quc3VwcG9ydF9jYW52YXMucmVzdWx0ID09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICQuanFwbG90LnN1cHBvcnRfY2FudmFzLnJlc3VsdCA9ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dDsgCiAgICAgICAgfQogICAgICAgIHJldHVybiAkLmpxcGxvdC5zdXBwb3J0X2NhbnZhcy5yZXN1bHQ7CiAgICB9OwogICAgICAgICAgICAKICAgICQuanFwbG90LnN1cHBvcnRfY2FudmFzX3RleHQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodHlwZW9mICQuanFwbG90LnN1cHBvcnRfY2FudmFzX3RleHQucmVzdWx0ID09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIGlmICh3aW5kb3cuR192bWxDYW52YXNNYW5hZ2VyICE9PSB1bmRlZmluZWQgJiYgd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci5fdmVyc2lvbiA+IDg4NykgewogICAgICAgICAgICAgICAgJC5qcXBsb3Quc3VwcG9ydF9jYW52YXNfdGV4dC5yZXN1bHQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJC5qcXBsb3Quc3VwcG9ydF9jYW52YXNfdGV4dC5yZXN1bHQgPSAhIShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0ICYmIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpLmZpbGxUZXh0ID09ICdmdW5jdGlvbicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgcmV0dXJuICQuanFwbG90LnN1cHBvcnRfY2FudmFzX3RleHQucmVzdWx0OwogICAgfTsKICAgIAogICAgJC5qcXBsb3QudXNlX2V4Y2FudmFzID0gKCghJC5zdXBwb3J0LmJveE1vZGVsIHx8ICEkLnN1cHBvcnQub2JqZWN0QWxsIHx8ICEkc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSkgJiYgISQuanFwbG90LnN1cHBvcnRfY2FudmFzKCkpID8gdHJ1ZSA6IGZhbHNlOwogICAgCiAgICAvKioKICAgICAqIAogICAgICogSG9va3M6IGpxUGxvdCBQdWdpbiBIb29rcwogICAgICogCiAgICAgKiAkLmpxcGxvdC5wcmVJbml0SG9va3MgLSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLgogICAgICogJC5qcXBsb3QucG9zdEluaXRIb29rcyAtIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbi4KICAgICAqICQuanFwbG90LnByZVBhcnNlT3B0aW9uc0hvb2tzIC0gY2FsbGVkIGJlZm9yZSB1c2VyIG9wdGlvbnMgYXJlIHBhcnNlZC4KICAgICAqICQuanFwbG90LnBvc3RQYXJzZU9wdGlvbnNIb29rcyAtIGNhbGxlZCBhZnRlciB1c2VyIG9wdGlvbnMgYXJlIHBhcnNlZC4KICAgICAqICQuanFwbG90LnByZURyYXdIb29rcyAtIGNhbGxlZCBiZWZvcmUgcGxvdCBkcmF3LgogICAgICogJC5qcXBsb3QucG9zdERyYXdIb29rcyAtIGNhbGxlZCBhZnRlciBwbG90IGRyYXcuCiAgICAgKiAkLmpxcGxvdC5wcmVEcmF3U2VyaWVzSG9va3MgLSBjYWxsZWQgYmVmb3JlIGVhY2ggc2VyaWVzIGlzIGRyYXduLgogICAgICogJC5qcXBsb3QucG9zdERyYXdTZXJpZXNIb29rcyAtIGNhbGxlZCBhZnRlciBlYWNoIHNlcmllcyBpcyBkcmF3bi4KICAgICAqICQuanFwbG90LnByZURyYXdMZWdlbmRIb29rcyAtIGNhbGxlZCBiZWZvcmUgdGhlIGxlZ2VuZCBpcyBkcmF3bi4KICAgICAqICQuanFwbG90LmFkZExlZ2VuZFJvd0hvb2tzIC0gY2FsbGVkIGF0IHRoZSBlbmQgb2YgbGVnZW5kIGRyYXcsIHNvIHBsdWdpbnMKICAgICAqICAgICBjYW4gYWRkIHJvd3MgdG8gdGhlIGxlZ2VuZCB0YWJsZS4KICAgICAqICQuanFwbG90LnByZVNlcmllc0luaXRIb29rcyAtIGNhbGxlZCBiZWZvcmUgc2VyaWVzIGlzIGluaXRpYWxpemVkLgogICAgICogJC5qcXBsb3QucG9zdFNlcmllc0luaXRIb29rcyAtIGNhbGxlZCBhZnRlciBzZXJpZXMgaXMgaW5pdGlhbGl6ZWQuCiAgICAgKiAkLmpxcGxvdC5wcmVQYXJzZVNlcmllc09wdGlvbnNIb29rcyAtIGNhbGxlZCBiZWZvcmUgc2VyaWVzIHJlbGF0ZWQgb3B0aW9ucwogICAgICogICAgIGFyZSBwYXJzZWQuCiAgICAgKiAkLmpxcGxvdC5wb3N0UGFyc2VTZXJpZXNPcHRpb25zSG9va3MgLSBjYWxsZWQgYWZ0ZXIgc2VyaWVzIHJlbGF0ZWQgb3B0aW9ucwogICAgICogICAgIGFyZSBwYXJzZWQuCiAgICAgKiAkLmpxcGxvdC5ldmVudExpc3RlbmVySG9va3MgLSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBwbG90IGRyYXdpbmcsIGJpbmRzCiAgICAgKiAgICAgbGlzdGVuZXJzIHRvIHRoZSBldmVudCBjYW52YXMgd2hpY2ggbGF5cyBvbiB0b3Agb2YgdGhlIGdyaWQgYXJlYS4KICAgICAqICQuanFwbG90LnByZURyYXdTZXJpZXNTaGFkb3dIb29rcyAtIGNhbGxlZCBiZWZvcmUgc2VyaWVzIHNoYWRvd3MgYXJlIGRyYXduLgogICAgICogJC5qcXBsb3QucG9zdERyYXdTZXJpZXNTaGFkb3dIb29rcyAtIGNhbGxlZCBhZnRlciBzZXJpZXMgc2hhZG93cyBhcmUgZHJhd24uCiAgICAgKiAKICAgICAqLwogICAgCiAgICAkLmpxcGxvdC5wcmVJbml0SG9va3MgPSBbXTsKICAgICQuanFwbG90LnBvc3RJbml0SG9va3MgPSBbXTsKICAgICQuanFwbG90LnByZVBhcnNlT3B0aW9uc0hvb2tzID0gW107CiAgICAkLmpxcGxvdC5wb3N0UGFyc2VPcHRpb25zSG9va3MgPSBbXTsKICAgICQuanFwbG90LnByZURyYXdIb29rcyA9IFtdOwogICAgJC5qcXBsb3QucG9zdERyYXdIb29rcyA9IFtdOwogICAgJC5qcXBsb3QucHJlRHJhd1Nlcmllc0hvb2tzID0gW107CiAgICAkLmpxcGxvdC5wb3N0RHJhd1Nlcmllc0hvb2tzID0gW107CiAgICAkLmpxcGxvdC5wcmVEcmF3TGVnZW5kSG9va3MgPSBbXTsKICAgICQuanFwbG90LmFkZExlZ2VuZFJvd0hvb2tzID0gW107CiAgICAkLmpxcGxvdC5wcmVTZXJpZXNJbml0SG9va3MgPSBbXTsKICAgICQuanFwbG90LnBvc3RTZXJpZXNJbml0SG9va3MgPSBbXTsKICAgICQuanFwbG90LnByZVBhcnNlU2VyaWVzT3B0aW9uc0hvb2tzID0gW107CiAgICAkLmpxcGxvdC5wb3N0UGFyc2VTZXJpZXNPcHRpb25zSG9va3MgPSBbXTsKICAgICQuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcyA9IFtdOwogICAgJC5qcXBsb3QucHJlRHJhd1Nlcmllc1NoYWRvd0hvb2tzID0gW107CiAgICAkLmpxcGxvdC5wb3N0RHJhd1Nlcmllc1NoYWRvd0hvb2tzID0gW107CgogICAgLy8gQSBzdXBlcmNsYXNzIGhvbGRpbmcgc29tZSBjb21tb24gcHJvcGVydGllcyBhbmQgbWV0aG9kcy4KICAgICQuanFwbG90LkVsZW1Db250YWluZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLl9lbGVtOwogICAgICAgIHRoaXMuX3Bsb3RXaWR0aDsKICAgICAgICB0aGlzLl9wbG90SGVpZ2h0OwogICAgICAgIHRoaXMuX3Bsb3REaW1lbnNpb25zID0ge2hlaWdodDpudWxsLCB3aWR0aDpudWxsfTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkVsZW1Db250YWluZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihlbCwgb2Zmc2V0cywgY2xzcywgY3Nzb3B0cywgYXR0cmliKSB7CiAgICAgICAgdGhpcy5fb2Zmc2V0cyA9IG9mZnNldHM7CiAgICAgICAgdmFyIGtsYXNzID0gY2xzcyB8fCAnanFwbG90JzsKICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWwpOwogICAgICAgIHRoaXMuX2VsZW0gPSAkKGVsZW0pOwogICAgICAgIHRoaXMuX2VsZW0uYWRkQ2xhc3Moa2xhc3MpOwogICAgICAgIHRoaXMuX2VsZW0uY3NzKGNzc29wdHMpOwogICAgICAgIHRoaXMuX2VsZW0uYXR0cihhdHRyaWIpOwogICAgICAgIC8vIGF2b2lkIG1lbW9yeSBsZWFrOwogICAgICAgIGVsZW0gPSBudWxsOwogICAgICAgIHJldHVybiB0aGlzLl9lbGVtOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRWxlbUNvbnRhaW5lci5wcm90b3R5cGUuZ2V0V2lkdGggPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5fZWxlbSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5fZWxlbS5vdXRlcldpZHRoKHRydWUpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRWxlbUNvbnRhaW5lci5wcm90b3R5cGUuZ2V0SGVpZ2h0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuX2VsZW0pIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW0ub3V0ZXJIZWlnaHQodHJ1ZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5FbGVtQ29udGFpbmVyLnByb3RvdHlwZS5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLl9lbGVtKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbGVtLnBvc2l0aW9uKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4ge3RvcDpudWxsLCBsZWZ0Om51bGwsIGJvdHRvbTpudWxsLCByaWdodDpudWxsfTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5FbGVtQ29udGFpbmVyLnByb3RvdHlwZS5nZXRUb3AgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnRvcDsKICAgIH07CiAgICAKICAgICQuanFwbG90LkVsZW1Db250YWluZXIucHJvdG90eXBlLmdldExlZnQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLmxlZnQ7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5FbGVtQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3R0b20gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fZWxlbS5jc3MoJ2JvdHRvbScpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRWxlbUNvbnRhaW5lci5wcm90b3R5cGUuZ2V0UmlnaHQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fZWxlbS5jc3MoJ3JpZ2h0Jyk7CiAgICB9OwogICAgCgogICAgLyoqCiAgICAgKiBDbGFzczogQXhpcwogICAgICogQW4gaW5kaXZpZHVhbCBheGlzIG9iamVjdC4gIENhbm5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHksIGJ1dCBjcmVhdGVkCiAgICAgKiBieSB0aGUgUGxvdCBvYmplY3QuICBBeGlzIHByb3BlcnRpZXMgY2FuIGJlIHNldCBvciBvdmVycmlkZGVuIGJ5IHRoZSAKICAgICAqIG9wdGlvbnMgcGFzc2VkIGluIGZyb20gdGhlIHVzZXIuCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gQXhpcyhuYW1lKSB7CiAgICAgICAgJC5qcXBsb3QuRWxlbUNvbnRhaW5lci5jYWxsKHRoaXMpOwogICAgICAgIC8vIEdyb3VwOiBQcm9wZXJ0aWVzCiAgICAgICAgLy8KICAgICAgICAvLyBBeGVzIG9wdGlvbnMgYXJlIHNwZWNpZmllZCB3aXRoaW4gYW4gYXhlcyBvYmplY3QgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgCiAgICAgICAgLy8gcGxvdCBvcHRpb25zIGxpa2Ugc286CiAgICAgICAgLy8gPiB7CiAgICAgICAgLy8gPiAgICBheGVzOiB7CiAgICAgICAgLy8gPiAgICAgICAgeGF4aXM6IHttaW46IDV9LAogICAgICAgIC8vID4gICAgICAgIHlheGlzOiB7bWluOiAyLCBtYXg6IDgsIG51bWJlclRpY2tzOjR9LAogICAgICAgIC8vID4gICAgICAgIHgyYXhpczoge3BhZDogMS41fSwKICAgICAgICAvLyA+ICAgICAgICB5MmF4aXM6IHt0aWNrczpbMjIsIDQ0LCA2NiwgODhdfQogICAgICAgIC8vID4gICAgICAgIH0KICAgICAgICAvLyA+IH0KICAgICAgICAvLyBUaGVyZSBhcmUgMiB4IGF4ZXMsICd4YXhpcycgYW5kICd4MmF4aXMnLCBhbmQgCiAgICAgICAgLy8gOSB5YXhlcywgJ3lheGlzJywgJ3kyYXhpcycuICd5M2F4aXMnLCAuLi4gIEFueSBvciBhbGwgb2Ygd2hpY2ggbWF5IGJlIHNwZWNpZmllZC4KICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgIHRoaXMuX3NlcmllcyA9IFtdOwogICAgICAgIC8vIHByb3A6IHNob3cKICAgICAgICAvLyBXZXRoZXIgdG8gZGlzcGxheSB0aGUgYXhpcyBvbiB0aGUgZ3JhcGguCiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogdGlja1JlbmRlcmVyCiAgICAgICAgLy8gQSBjbGFzcyBvZiBhIHJlbmRlcmluZyBlbmdpbmUgZm9yIGNyZWF0aW5nIHRoZSB0aWNrcyBsYWJlbHMgZGlzcGxheWVkIG9uIHRoZSBwbG90LCAKICAgICAgICAvLyBTZWUgPCQuanFwbG90LkF4aXNUaWNrUmVuZGVyZXI+LgogICAgICAgIHRoaXMudGlja1JlbmRlcmVyID0gJC5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlcjsKICAgICAgICAvLyBwcm9wOiB0aWNrT3B0aW9ucwogICAgICAgIC8vIE9wdGlvbnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdGlja1JlbmRlcmVyLCBzZWUgPCQuanFwbG90LkF4aXNUaWNrUmVuZGVyZXI+IG9wdGlvbnMuCiAgICAgICAgdGhpcy50aWNrT3B0aW9ucyA9IHt9OwogICAgICAgIC8vIHByb3A6IGxhYmVsUmVuZGVyZXIKICAgICAgICAvLyBBIGNsYXNzIG9mIGEgcmVuZGVyaW5nIGVuZ2luZSBmb3IgY3JlYXRpbmcgYW4gYXhpcyBsYWJlbC4KICAgICAgICB0aGlzLmxhYmVsUmVuZGVyZXIgPSAkLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlcjsKICAgICAgICAvLyBwcm9wOiBsYWJlbE9wdGlvbnMKICAgICAgICAvLyBPcHRpb25zIHBhc3NlZCB0byB0aGUgbGFiZWwgcmVuZGVyZXIuCiAgICAgICAgdGhpcy5sYWJlbE9wdGlvbnMgPSB7fTsKICAgICAgICAvLyBwcm9wOiBsYWJlbAogICAgICAgIC8vIExhYmVsIGZvciB0aGUgYXhpcwogICAgICAgIHRoaXMubGFiZWwgPSBudWxsOwogICAgICAgIC8vIHByb3A6IHNob3dMYWJlbAogICAgICAgIC8vIHRydWUgdG8gc2hvdyB0aGUgYXhpcyBsYWJlbC4KICAgICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogbWluCiAgICAgICAgLy8gbWluaW11bSB2YWx1ZSBvZiB0aGUgYXhpcyAoaW4gZGF0YSB1bml0cywgbm90IHBpeGVscykuCiAgICAgICAgdGhpcy5taW4gPSBudWxsOwogICAgICAgIC8vIHByb3A6IG1heAogICAgICAgIC8vIG1heGltdW0gdmFsdWUgb2YgdGhlIGF4aXMgKGluIGRhdGEgdW5pdHMsIG5vdCBwaXhlbHMpLgogICAgICAgIHRoaXMubWF4ID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBhdXRvc2NhbGUKICAgICAgICAvLyBERVBSRUNBVEVECiAgICAgICAgLy8gdGhlIGRlZmF1bHQgc2NhbGluZyBhbGdvcml0aG0gcHJvZHVjZXMgc3VwZXJpb3IgcmVzdWx0cy4KICAgICAgICB0aGlzLmF1dG9zY2FsZSA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IHBhZAogICAgICAgIC8vIFBhZGRpbmcgdG8gZXh0ZW5kIHRoZSByYW5nZSBhYm92ZSBhbmQgYmVsb3cgdGhlIGRhdGEgYm91bmRzLgogICAgICAgIC8vIFRoZSBkYXRhIHJhbmdlIGlzIG11bHRpcGxpZWQgYnkgdGhpcyBmYWN0b3IgdG8gZGV0ZXJtaW5lIG1pbmltdW0gYW5kIG1heGltdW0gYXhpcyBib3VuZHMuCiAgICAgICAgLy8gQSB2YWx1ZSBvZiAwIHdpbGwgYmUgaW50ZXJwcmV0ZWQgdG8gbWVhbiBubyBwYWRkaW5nLCBhbmQgcGFkIHdpbGwgYmUgc2V0IHRvIDEuMC4KICAgICAgICB0aGlzLnBhZCA9IDEuMjsKICAgICAgICAvLyBwcm9wOiBwYWRNYXgKICAgICAgICAvLyBQYWRkaW5nIHRvIGV4dGVuZCB0aGUgcmFuZ2UgYWJvdmUgZGF0YSBib3VuZHMuCiAgICAgICAgLy8gVGhlIHRvcCBvZiB0aGUgZGF0YSByYW5nZSBpcyBtdWx0aXBsaWVkIGJ5IHRoaXMgZmFjdG9yIHRvIGRldGVybWluZSBtYXhpbXVtIGF4aXMgYm91bmRzLgogICAgICAgIC8vIEEgdmFsdWUgb2YgMCB3aWxsIGJlIGludGVycHJldGVkIHRvIG1lYW4gbm8gcGFkZGluZywgYW5kIHBhZE1heCB3aWxsIGJlIHNldCB0byAxLjAuCiAgICAgICAgdGhpcy5wYWRNYXggPSBudWxsOwogICAgICAgIC8vIHByb3A6IHBhZE1pbgogICAgICAgIC8vIFBhZGRpbmcgdG8gZXh0ZW5kIHRoZSByYW5nZSBiZWxvdyBkYXRhIGJvdW5kcy4KICAgICAgICAvLyBUaGUgYm90dG9tIG9mIHRoZSBkYXRhIHJhbmdlIGlzIG11bHRpcGxpZWQgYnkgdGhpcyBmYWN0b3IgdG8gZGV0ZXJtaW5lIG1pbmltdW0gYXhpcyBib3VuZHMuCiAgICAgICAgLy8gQSB2YWx1ZSBvZiAwIHdpbGwgYmUgaW50ZXJwcmV0ZWQgdG8gbWVhbiBubyBwYWRkaW5nLCBhbmQgcGFkTWluIHdpbGwgYmUgc2V0IHRvIDEuMC4KICAgICAgICB0aGlzLnBhZE1pbiA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogdGlja3MKICAgICAgICAvLyAxRCBbdmFsLCB2YWwsIC4uLl0gb3IgMkQgW1t2YWwsIGxhYmVsXSwgW3ZhbCwgbGFiZWxdLCAuLi5dIGFycmF5IG9mIHRpY2tzIGZvciB0aGUgYXhpcy4KICAgICAgICAvLyBJZiBubyBsYWJlbCBpcyBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBpcyBmb3JtYXR0ZWQgaW50byBhbiBhcHByb3ByaWF0ZSBsYWJlbC4KICAgICAgICB0aGlzLnRpY2tzID0gW107CiAgICAgICAgLy8gcHJvcDogbnVtYmVyVGlja3MKICAgICAgICAvLyBEZXNpcmVkIG51bWJlciBvZiB0aWNrcy4gIERlZmF1bHQgaXMgdG8gY29tcHV0ZSBhdXRvbWF0aWNhbGx5LgogICAgICAgIHRoaXMubnVtYmVyVGlja3M7CiAgICAgICAgLy8gcHJvcDogdGlja0ludGVydmFsCiAgICAgICAgLy8gbnVtYmVyIG9mIHVuaXRzIGJldHdlZW4gdGlja3MuICBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBudW1iZXJUaWNrcy4KICAgICAgICB0aGlzLnRpY2tJbnRlcnZhbDsKICAgICAgICAvLyBwcm9wOiByZW5kZXJlcgogICAgICAgIC8vIEEgY2xhc3Mgb2YgYSByZW5kZXJpbmcgZW5naW5lIHRoYXQgaGFuZGxlcyB0aWNrIGdlbmVyYXRpb24sIAogICAgICAgIC8vIHNjYWxpbmcgaW5wdXQgZGF0YSB0byBwaXhlbCBncmlkIHVuaXRzIGFuZCBkcmF3aW5nIHRoZSBheGlzIGVsZW1lbnQuCiAgICAgICAgdGhpcy5yZW5kZXJlciA9ICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlcjsKICAgICAgICAvLyBwcm9wOiByZW5kZXJlck9wdGlvbnMKICAgICAgICAvLyByZW5kZXJlciBzcGVjaWZpYyBvcHRpb25zLiAgU2VlIDwkLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXI+IGZvciBvcHRpb25zLgogICAgICAgIHRoaXMucmVuZGVyZXJPcHRpb25zID0ge307CiAgICAgICAgLy8gcHJvcDogc2hvd1RpY2tzCiAgICAgICAgLy8gV2V0aGVyIHRvIHNob3cgdGhlIHRpY2tzIChib3RoIG1hcmtzIGFuZCBsYWJlbHMpIG9yIG5vdC4KICAgICAgICAvLyBXaWxsIG5vdCBvdmVycmlkZSBzaG93TWFyayBhbmQgc2hvd0xhYmVsIG9wdGlvbnMgaWYgc3BlY2lmaWVkIG9uIHRoZSB0aWNrcyB0aGVtc2VsdmVzLgogICAgICAgIHRoaXMuc2hvd1RpY2tzID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBzaG93VGlja01hcmtzCiAgICAgICAgLy8gV2V0aGVyIHRvIHNob3cgdGhlIHRpY2sgbWFya3MgKGxpbmUgY3Jvc3NpbmcgZ3JpZCkgb3Igbm90LgogICAgICAgIC8vIE92ZXJyaWRkZW4gYnkgc2hvd1RpY2tzIGFuZCBzaG93TWFyayBvcHRpb24gb2YgdGljayBpdHNlbGYuCiAgICAgICAgdGhpcy5zaG93VGlja01hcmtzID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBzaG93TWlub3JUaWNrcwogICAgICAgIC8vIFdldGhlciBvciBub3QgdG8gc2hvdyBtaW5vciB0aWNrcy4gIFRoaXMgaXMgcmVuZGVyZXIgZGVwZW5kZW50LgogICAgICAgIHRoaXMuc2hvd01pbm9yVGlja3MgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IGRyYXdNYWpvckdyaWRsaW5lcwogICAgICAgIC8vIFRydWUgdG8gZHJhdyBncmlkbGluZXMgZm9yIG1ham9yIGF4aXMgdGlja3MuCiAgICAgICAgdGhpcy5kcmF3TWFqb3JHcmlkbGluZXMgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IGRyYXdNaW5vckdyaWRsaW5lcwogICAgICAgIC8vIFRydWUgdG8gZHJhdyBncmlkbGluZXMgZm9yIG1pbm9yIHRpY2tzLgogICAgICAgIHRoaXMuZHJhd01pbm9yR3JpZGxpbmVzID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogZHJhd01ham9yVGlja01hcmtzCiAgICAgICAgLy8gVHJ1ZSB0byBkcmF3IHRpY2sgbWFya3MgZm9yIG1ham9yIGF4aXMgdGlja3MuCiAgICAgICAgdGhpcy5kcmF3TWFqb3JUaWNrTWFya3MgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IGRyYXdNaW5vclRpY2tNYXJrcwogICAgICAgIC8vIFRydWUgdG8gZHJhdyB0aWNrIG1hcmtzIGZvciBtaW5vciB0aWNrcy4gIFRoaXMgaXMgcmVuZGVyZXIgZGVwZW5kZW50LgogICAgICAgIHRoaXMuZHJhd01pbm9yVGlja01hcmtzID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiB1c2VTZXJpZXNDb2xvcgogICAgICAgIC8vIFVzZSB0aGUgY29sb3Igb2YgdGhlIGZpcnN0IHNlcmllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBheGlzIGZvciB0aGUKICAgICAgICAvLyB0aWNrIG1hcmtzIGFuZCBsaW5lIGJvcmRlcmluZyB0aGlzIGF4aXMuCiAgICAgICAgdGhpcy51c2VTZXJpZXNDb2xvciA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGJvcmRlcldpZHRoCiAgICAgICAgLy8gd2lkdGggb2YgbGluZSBzdHJva2VkIGF0IHRoZSBib3JkZXIgb2YgdGhlIGF4aXMuICBEZWZhdWx0cwogICAgICAgIC8vIHRvIHRoZSB3aWR0aCBvZiB0aGUgZ3JpZCBib2FyZGVyLgogICAgICAgIHRoaXMuYm9yZGVyV2lkdGggPSBudWxsOwogICAgICAgIC8vIHByb3A6IGJvcmRlckNvbG9yCiAgICAgICAgLy8gY29sb3Igb2YgdGhlIGJvcmRlciBhZGphY2VudCB0byB0aGUgYXhpcy4gIERlZmF1bHRzIHRvIGdyaWQgYm9yZGVyIGNvbG9yLgogICAgICAgIHRoaXMuYm9yZGVyQ29sb3IgPSBudWxsOwogICAgICAgIC8vIHByb3A6IHNjYWxlVG9IaWRkZW5TZXJpZXMKICAgICAgICAvLyBUcnVlIHRvIGluY2x1ZGUgaGlkZGVuIHNlcmllcyB3aGVuIGNvbXB1dGluZyBheGVzIGJvdW5kcyBhbmQgc2NhbGluZy4KICAgICAgICB0aGlzLnNjYWxlVG9IaWRkZW5TZXJpZXMgPSBmYWxzZTsKICAgICAgICAvLyBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBvbiB0aGUgYXhpcy4KICAgICAgICB0aGlzLl9kYXRhQm91bmRzID0ge21pbjpudWxsLCBtYXg6bnVsbH07CiAgICAgICAgLy8gc3RhdGlzdGljcyAobWluLCBtYXgsIG1lYW4pIGFzIHdlbGwgYXMgYWN0dWFsIGRhdGEgaW50ZXJ2YWxzIGZvciBlYWNoIHNlcmllcyBhdHRhY2hlZCB0byBheGlzLgogICAgICAgIC8vIGhvbGRzIGNvbGxlY3Rpb24gb2Yge2ludGVydmFsczpbXSwgbWluOiwgbWF4OiwgbWVhbjogfSBvYmplY3RzIGZvciBlYWNoIHNlcmllcyBvbiBheGlzLgogICAgICAgIHRoaXMuX2ludGVydmFsU3RhdHMgPSBbXTsKICAgICAgICAvLyBwaXhlbCBwb3NpdGlvbiBmcm9tIHRoZSB0b3AgbGVmdCBvZiB0aGUgbWluIHZhbHVlIGFuZCBtYXggdmFsdWUgb24gdGhlIGF4aXMuCiAgICAgICAgdGhpcy5fb2Zmc2V0cyA9IHttaW46bnVsbCwgbWF4Om51bGx9OwogICAgICAgIHRoaXMuX3RpY2tzPVtdOwogICAgICAgIHRoaXMuX2xhYmVsID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBzeW5jVGlja3MKICAgICAgICAvLyB0cnVlIHRvIHRyeSBhbmQgc3luY2hyb25pemUgdGljayBzcGFjaW5nIGFjcm9zcyBtdWx0aXBsZSBheGVzIHNvIHRoYXQgdGlja3MgYW5kCiAgICAgICAgLy8gZ3JpZCBsaW5lcyBsaW5lIHVwLiAgVGhpcyBoYXMgYW4gaW1wYWN0IG9uIGF1dG9zY2FsaW5nIGFsZ29yaXRobSwgaG93ZXZlci4KICAgICAgICAvLyBJbiBnZW5lcmFsLCBhdXRvc2NhbGluZyBhbiBpbmRpdmlkdWFsIGF4aXMgd2lsbCB3b3JrIGJldHRlciBpZiBpdCBkb2VzIG5vdAogICAgICAgIC8vIGhhdmUgdG8gc3luYyB0aWNrcy4KICAgICAgICB0aGlzLnN5bmNUaWNrcyA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogdGlja1NwYWNpbmcKICAgICAgICAvLyBBcHByb3hpbWF0ZSBwaXhlbCBzcGFjaW5nIGJldHdlZW4gdGlja3Mgb24gZ3JhcGguICBVc2VkIGR1cmluZyBhdXRvc2NhbGluZy4KICAgICAgICAvLyBUaGlzIG51bWJlciB3aWxsIGJlIGFuIHVwcGVyIGJvdW5kLCBhY3R1YWwgc3BhY2luZyB3aWxsIGJlIGxlc3MuCiAgICAgICAgdGhpcy50aWNrU3BhY2luZyA9IDc1OwogICAgICAgIC8vIFByb3BlcnRpZXMgdG8gaG9sZCB0aGUgb3JpZ2luYWwgdmFsdWVzIGZvciBtaW4sIG1heCwgdGlja3MsIHRpY2tJbnRlcnZhbCBhbmQgbnVtYmVyVGlja3MKICAgICAgICAvLyBzbyB0aGV5IGNhbiBiZSByZXN0b3JlZCBpZiBhbHRlcmVkIGJ5IHBsdWdpbnMuCiAgICAgICAgdGhpcy5fbWluID0gbnVsbDsKICAgICAgICB0aGlzLl9tYXggPSBudWxsOwogICAgICAgIHRoaXMuX3RpY2tJbnRlcnZhbCA9IG51bGw7CiAgICAgICAgdGhpcy5fbnVtYmVyVGlja3MgPSBudWxsOwogICAgICAgIHRoaXMuX190aWNrcyA9IG51bGw7CiAgICAgICAgLy8gaG9sZCBvcmlnaW5hbCB1c2VyIG9wdGlvbnMuCiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHt9OwogICAgfQogICAgCiAgICBBeGlzLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5FbGVtQ29udGFpbmVyKCk7CiAgICBBeGlzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEF4aXM7CiAgICAKICAgIEF4aXMucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKHRoaXMucmVuZGVyZXIpKSB7CiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgdGhpcy5yZW5kZXJlcigpOyAgCiAgICAgICAgfQogICAgICAgIC8vIHNldCB0aGUgYXhpcyBuYW1lCiAgICAgICAgdGhpcy50aWNrT3B0aW9ucy5heGlzID0gdGhpcy5uYW1lOwogICAgICAgIC8vIGlmIHNob3dNYXJrIG9yIHNob3dMYWJlbCB0aWNrIG9wdGlvbnMgbm90IHNwZWNpZmllZCwgdXNlIHZhbHVlIG9mIGF4aXMgb3B0aW9uLgogICAgICAgIC8vIHNob3dUaWNrcyBvdmVycmlkZXMgc2hvd1RpY2tNYXJrcy4KICAgICAgICBpZiAodGhpcy50aWNrT3B0aW9ucy5zaG93TWFyayA9PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMudGlja09wdGlvbnMuc2hvd01hcmsgPSB0aGlzLnNob3dUaWNrczsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMudGlja09wdGlvbnMuc2hvd01hcmsgPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLnRpY2tPcHRpb25zLnNob3dNYXJrID0gdGhpcy5zaG93VGlja01hcmtzOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy50aWNrT3B0aW9ucy5zaG93TGFiZWwgPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLnRpY2tPcHRpb25zLnNob3dMYWJlbCA9IHRoaXMuc2hvd1RpY2tzOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAodGhpcy5sYWJlbCA9PSBudWxsIHx8IHRoaXMubGFiZWwgPT0gJycpIHsKICAgICAgICAgICAgdGhpcy5zaG93TGFiZWwgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMubGFiZWxPcHRpb25zLmxhYmVsID0gdGhpcy5sYWJlbDsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuc2hvd0xhYmVsID09IGZhbHNlKSB7CiAgICAgICAgICAgIHRoaXMubGFiZWxPcHRpb25zLnNob3cgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IHBhZE1heCwgcGFkTWluIGlmIG5vdCBzcGVjaWZpZWQKICAgICAgICAvLyBzcGVjaWFsIGNoZWNrLCBpZiBubyBwYWRkaW5nIGRlc2lyZWQsIHBhZGRpbmcKICAgICAgICAvLyBzaG91bGQgYmUgc2V0IHRvIDEuMAogICAgICAgIGlmICh0aGlzLnBhZCA9PSAwKSB7CiAgICAgICAgICAgIHRoaXMucGFkID0gMS4wOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5wYWRNYXggPT0gMCkgewogICAgICAgICAgICB0aGlzLnBhZE1heCA9IDEuMDsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMucGFkTWluID09IDApIHsKICAgICAgICAgICAgdGhpcy5wYWRNaW4gPSAxLjA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnBhZE1heCA9PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMucGFkTWF4ID0gKHRoaXMucGFkLTEpLzIgKyAxOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5wYWRNaW4gPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLnBhZE1pbiA9ICh0aGlzLnBhZC0xKS8yICsgMTsKICAgICAgICB9CiAgICAgICAgLy8gbm93IHRoYXQgcGFkTWluIGFuZCBwYWRNYXggYXJlIGNvcnJlY3RseSBzZXQsIHJlc2V0IHBhZCBpbiBjYXNlIHVzZXIgaGFzIHN1cHBsaWVkIAogICAgICAgIC8vIHBhZE1pbiBhbmQvb3IgcGFkTWF4CiAgICAgICAgdGhpcy5wYWQgPSB0aGlzLnBhZE1heCArIHRoaXMucGFkTWluIC0gMTsKICAgICAgICBpZiAodGhpcy5taW4gIT0gbnVsbCB8fCB0aGlzLm1heCAhPSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMuYXV0b3NjYWxlID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIC8vIGlmIG5vdCBzZXQsIHN5bmMgdGlja3MgZm9yIHkgYXhlcyBidXQgbm90IHggYnkgZGVmYXVsdC4KICAgICAgICBpZiAodGhpcy5zeW5jVGlja3MgPT0gbnVsbCAmJiB0aGlzLm5hbWUuaW5kZXhPZigneScpID4gLTEpIHsKICAgICAgICAgICAgdGhpcy5zeW5jVGlja3MgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0aGlzLnN5bmNUaWNrcyA9PSBudWxsKXsKICAgICAgICAgICAgdGhpcy5zeW5jVGlja3MgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy5yZW5kZXJlci5pbml0LmNhbGwodGhpcywgdGhpcy5yZW5kZXJlck9wdGlvbnMpOwogICAgICAgIAogICAgfTsKICAgIAogICAgQXhpcy5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKGN0eCwgcGxvdCkgewogICAgICAgIC8vIE1lbW9yeSBMZWFrcyBwYXRjaAogICAgICAgIGlmICh0aGlzLl9fdGlja3MpIHsKICAgICAgICAgIHRoaXMuX190aWNrcyA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5kcmF3LmNhbGwodGhpcywgY3R4LCBwbG90KTsKICAgICAgICAKICAgIH07CiAgICAKICAgIEF4aXMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMucmVuZGVyZXIuc2V0LmNhbGwodGhpcyk7CiAgICB9OwogICAgCiAgICBBeGlzLnByb3RvdHlwZS5wYWNrID0gZnVuY3Rpb24ocG9zLCBvZmZzZXRzKSB7CiAgICAgICAgaWYgKHRoaXMuc2hvdykgewogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnBhY2suY2FsbCh0aGlzLCBwb3MsIG9mZnNldHMpOwogICAgICAgIH0KICAgICAgICAvLyB0aGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBhbGwgYmUgYXZhaWxhYmxlIG5vdy4KICAgICAgICBpZiAodGhpcy5fbWluID09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5fbWluID0gdGhpcy5taW47CiAgICAgICAgICAgIHRoaXMuX21heCA9IHRoaXMubWF4OwogICAgICAgICAgICB0aGlzLl90aWNrSW50ZXJ2YWwgPSB0aGlzLnRpY2tJbnRlcnZhbDsKICAgICAgICAgICAgdGhpcy5fbnVtYmVyVGlja3MgPSB0aGlzLm51bWJlclRpY2tzOwogICAgICAgICAgICB0aGlzLl9fdGlja3MgPSB0aGlzLl90aWNrczsKICAgICAgICB9CiAgICB9OwogICAgCiAgICAvLyByZXNldCB0aGUgYXhpcyBiYWNrIHRvIG9yaWdpbmFsIHZhbHVlcyBpZiBpdCBoYXMgYmVlbiBzY2FsZWQsIHpvb21lZCwgZXRjLgogICAgQXhpcy5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnJlbmRlcmVyLnJlc2V0LmNhbGwodGhpcyk7CiAgICB9OwogICAgCiAgICBBeGlzLnByb3RvdHlwZS5yZXNldFNjYWxlID0gZnVuY3Rpb24ob3B0cykgewogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIHttaW46IG51bGwsIG1heDogbnVsbCwgbnVtYmVyVGlja3M6IG51bGwsIHRpY2tJbnRlcnZhbDogbnVsbCwgX3RpY2tzOiBbXSwgdGlja3M6IFtdfSwgb3B0cyk7CiAgICAgICAgdGhpcy5yZXNldERhdGFCb3VuZHMoKTsKICAgIH07CiAgICAKICAgIEF4aXMucHJvdG90eXBlLnJlc2V0RGF0YUJvdW5kcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIEdvIHRocm91Z2ggYWxsIHRoZSBzZXJpZXMgYXR0YWNoZWQgdG8gdGhpcyBheGlzIGFuZCBmaW5kCiAgICAgICAgLy8gdGhlIG1pbi9tYXggYm91bmRzIGZvciB0aGlzIGF4aXMuCiAgICAgICAgdmFyIGRiID0gdGhpcy5fZGF0YUJvdW5kczsKICAgICAgICBkYi5taW4gPSBudWxsOwogICAgICAgIGRiLm1heCA9IG51bGw7CiAgICAgICAgdmFyIGwsIHMsIGQ7CiAgICAgICAgLy8gY2hlY2sgZm9yIHdoZW4gdG8gZm9yY2UgbWluIDAgb24gYmFyIHNlcmllcyBwbG90cy4KICAgICAgICB2YXIgZG9mb3JjZSA9ICh0aGlzLnNob3cpID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLl9zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgcyA9IHRoaXMuX3Nlcmllc1tpXTsKICAgICAgICAgICAgaWYgKHMuc2hvdyB8fCB0aGlzLnNjYWxlVG9IaWRkZW5TZXJpZXMpIHsKICAgICAgICAgICAgICAgIGQgPSBzLl9wbG90RGF0YTsKICAgICAgICAgICAgICAgIGlmIChzLl90eXBlID09PSAnbGluZScgJiYgcy5yZW5kZXJlci5iYW5kcy5zaG93ICYmIHRoaXMubmFtZS5jaGFyQXQoMCkgIT09ICd4JykgewogICAgICAgICAgICAgICAgICAgIGQgPSBbWzAsIHMucmVuZGVyZXIuYmFuZHMuX21pbl0sIFsxLCBzLnJlbmRlcmVyLmJhbmRzLl9tYXhdXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgbWlueWlkeCA9IDEsIG1heHlpZHggPSAxOwoKICAgICAgICAgICAgICAgIGlmIChzLl90eXBlICE9IG51bGwgJiYgcy5fdHlwZSA9PSAnb2hsYycpIHsKICAgICAgICAgICAgICAgICAgICBtaW55aWR4ID0gMzsKICAgICAgICAgICAgICAgICAgICBtYXh5aWR4ID0gMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wLCBsPWQubGVuZ3RoOyBqPGw7IGorKykgeyAKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lID09ICd4YXhpcycgfHwgdGhpcy5uYW1lID09ICd4MmF4aXMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZFtqXVswXSAhPSBudWxsICYmIGRbal1bMF0gPCBkYi5taW4pIHx8IGRiLm1pbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYi5taW4gPSBkW2pdWzBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZFtqXVswXSAhPSBudWxsICYmIGRbal1bMF0gPiBkYi5tYXgpIHx8IGRiLm1heCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYi5tYXggPSBkW2pdWzBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZFtqXVttaW55aWR4XSAhPSBudWxsICYmIGRbal1bbWlueWlkeF0gPCBkYi5taW4pIHx8IGRiLm1pbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYi5taW4gPSBkW2pdW21pbnlpZHhdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZFtqXVttYXh5aWR4XSAhPSBudWxsICYmIGRbal1bbWF4eWlkeF0gPiBkYi5tYXgpIHx8IGRiLm1heCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYi5tYXggPSBkW2pdW21heHlpZHhdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSGFjayB0byBub3QgcGFkIG91dCBib3R0b20gb2YgYmFyIHBsb3RzIHVubGVzcyB1c2VyIGhhcyBzcGVjaWZpZWQgYSBwYWRkaW5nLgogICAgICAgICAgICAgICAgLy8gZXZlcnkgc2VyaWVzIHdpbGwgaGF2ZSBhIGNoYW5jZSB0byBzZXQgZG9mb3JjZSB0byBmYWxzZS4gIG9uY2UgaXQgaXMgc2V0IHRvIAogICAgICAgICAgICAgICAgLy8gZmFsc2UsIGl0IGNhbm5vdCBiZSByZXNldCB0byB0cnVlLgogICAgICAgICAgICAgICAgLy8gSWYgYW55IHNlcmllcyBhdHRhY2hlZCB0byBheGlzIGlzIG5vdCBhIGJhciwgd29udCBmb3JjZSAwLgogICAgICAgICAgICAgICAgaWYgKGRvZm9yY2UgJiYgcy5yZW5kZXJlci5jb25zdHJ1Y3RvciAhPT0gJC5qcXBsb3QuQmFyUmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICAgICBkb2ZvcmNlID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZWxzZSBpZiAoZG9mb3JjZSAmJiB0aGlzLl9vcHRpb25zLmhhc093blByb3BlcnR5KCdmb3JjZVRpY2tBdDAnKSAmJiB0aGlzLl9vcHRpb25zLmZvcmNlVGlja0F0MCA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIGRvZm9yY2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlbHNlIGlmIChkb2ZvcmNlICYmIHMucmVuZGVyZXIuY29uc3RydWN0b3IgPT09ICQuanFwbG90LkJhclJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHMuYmFyRGlyZWN0aW9uID09ICd2ZXJ0aWNhbCcgJiYgdGhpcy5uYW1lICE9ICd4YXhpcycgJiYgdGhpcy5uYW1lICE9ICd4MmF4aXMnKSB7IAogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5wYWQgIT0gbnVsbCB8fCB0aGlzLl9vcHRpb25zLnBhZE1pbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2ZvcmNlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMuYmFyRGlyZWN0aW9uID09ICdob3Jpem9udGFsJyAmJiAodGhpcy5uYW1lID09ICd4YXhpcycgfHwgdGhpcy5uYW1lID09ICd4MmF4aXMnKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5wYWQgIT0gbnVsbCB8fCB0aGlzLl9vcHRpb25zLnBhZE1pbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2ZvcmNlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoZG9mb3JjZSAmJiB0aGlzLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09PSAkLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIgJiYgZGIubWluID49IDApIHsKICAgICAgICAgICAgdGhpcy5wYWRNaW4gPSAxLjA7CiAgICAgICAgICAgIHRoaXMuZm9yY2VUaWNrQXQwID0gdHJ1ZTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogQ2xhc3M6IExlZ2VuZAogICAgICogTGVnZW5kIG9iamVjdC4gIENhbm5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHksIGJ1dCBjcmVhdGVkCiAgICAgKiBieSB0aGUgUGxvdCBvYmplY3QuICBMZWdlbmQgcHJvcGVydGllcyBjYW4gYmUgc2V0IG9yIG92ZXJyaWRkZW4gYnkgdGhlIAogICAgICogb3B0aW9ucyBwYXNzZWQgaW4gZnJvbSB0aGUgdXNlci4KICAgICAqLwogICAgZnVuY3Rpb24gTGVnZW5kKG9wdGlvbnMpIHsKICAgICAgICAkLmpxcGxvdC5FbGVtQ29udGFpbmVyLmNhbGwodGhpcyk7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAKICAgICAgICAvLyBwcm9wOiBzaG93CiAgICAgICAgLy8gV2V0aGVyIHRvIGRpc3BsYXkgdGhlIGxlZ2VuZCBvbiB0aGUgZ3JhcGguCiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogbG9jYXRpb24KICAgICAgICAvLyBQbGFjZW1lbnQgb2YgdGhlIGxlZ2VuZC4gIG9uZSBvZiB0aGUgY29tcGFzcyBkaXJlY3Rpb25zOiBudywgbiwgbmUsIGUsIHNlLCBzLCBzdywgdwogICAgICAgIHRoaXMubG9jYXRpb24gPSAnbmUnOwogICAgICAgIC8vIHByb3A6IGxhYmVscwogICAgICAgIC8vIEFycmF5IG9mIGxhYmVscyB0byB1c2UuICBCeSBkZWZhdWx0IHRoZSByZW5kZXJlciB3aWxsIGxvb2sgZm9yIGxhYmVscyBvbiB0aGUgc2VyaWVzLgogICAgICAgIC8vIExhYmVscyBzcGVjaWZpZWQgaW4gdGhpcyBhcnJheSB3aWxsIG92ZXJyaWRlIGxhYmVscyBzcGVjaWZpZWQgb24gdGhlIHNlcmllcy4KICAgICAgICB0aGlzLmxhYmVscyA9IFtdOwogICAgICAgIC8vIHByb3A6IHNob3dMYWJlbHMKICAgICAgICAvLyB0cnVlIHRvIHNob3cgdGhlIGxhYmVsIHRleHQgb24gdGhlICBsZWdlbmQuCiAgICAgICAgdGhpcy5zaG93TGFiZWxzID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBzaG93U3dhdGNoCiAgICAgICAgLy8gdHJ1ZSB0byBzaG93IHRoZSBjb2xvciBzd2F0Y2hlcyBvbiB0aGUgbGVnZW5kLgogICAgICAgIHRoaXMuc2hvd1N3YXRjaGVzID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBwbGFjZW1lbnQKICAgICAgICAvLyAiaW5zaWRlR3JpZCIgcGxhY2VzIGxlZ2VuZCBpbnNpZGUgdGhlIGdyaWQgYXJlYSBvZiB0aGUgcGxvdC4KICAgICAgICAvLyAib3V0c2lkZUdyaWQiIHBsYWNlcyB0aGUgbGVnZW5kIG91dHNpZGUgdGhlIGdyaWQgYnV0IGluc2lkZSB0aGUgcGxvdCBjb250YWluZXIsIAogICAgICAgIC8vIHNocmlua2luZyB0aGUgZ3JpZCB0byBhY2NvbW9kYXRlIHRoZSBsZWdlbmQuCiAgICAgICAgLy8gImluc2lkZSIgc3lub255bSBmb3IgImluc2lkZUdyaWQiLCAKICAgICAgICAvLyAib3V0c2lkZSIgcGxhY2VzIHRoZSBsZWdlbmQgb3VzaWRlIHRoZSBncmlkIGFyZWEsIGJ1dCBkb2VzIG5vdCBzaHJpbmsgdGhlIGdyaWQgd2hpY2gKICAgICAgICAvLyBjYW4gY2F1c2UgdGhlIGxlZ2VuZCB0byBvdmVyZmxvdyB0aGUgcGxvdCBjb250YWluZXIuCiAgICAgICAgdGhpcy5wbGFjZW1lbnQgPSAiaW5zaWRlR3JpZCI7CiAgICAgICAgLy8gcHJvcDogeG9mZnNldAogICAgICAgIC8vIERFUFJFQ0FURUQuICBTZXQgdGhlIG1hcmdpbnMgb24gdGhlIGxlZ2VuZCB1c2luZyB0aGUgbWFyZ2luVG9wLCBtYXJnaW5MZWZ0LCBldGMuIAogICAgICAgIC8vIHByb3BlcnRpZXMgb3IgdmlhIENTUyBtYXJnaW4gc3R5bGluZyBvZiB0aGUgLmpxcGxvdC10YWJsZS1sZWdlbmQgY2xhc3MuCiAgICAgICAgdGhpcy54b2Zmc2V0ID0gMDsKICAgICAgICAvLyBwcm9wOiB5b2Zmc2V0CiAgICAgICAgLy8gREVQUkVDQVRFRC4gIFNldCB0aGUgbWFyZ2lucyBvbiB0aGUgbGVnZW5kIHVzaW5nIHRoZSBtYXJnaW5Ub3AsIG1hcmdpbkxlZnQsIGV0Yy4gCiAgICAgICAgLy8gcHJvcGVydGllcyBvciB2aWEgQ1NTIG1hcmdpbiBzdHlsaW5nIG9mIHRoZSAuanFwbG90LXRhYmxlLWxlZ2VuZCBjbGFzcy4KICAgICAgICB0aGlzLnlvZmZzZXQgPSAwOwogICAgICAgIC8vIHByb3A6IGJvcmRlcgogICAgICAgIC8vIGNzcyBzcGVjIGZvciB0aGUgYm9yZGVyIGFyb3VuZCB0aGUgbGVnZW5kIGJveC4KICAgICAgICB0aGlzLmJvcmRlcjsKICAgICAgICAvLyBwcm9wOiBiYWNrZ3JvdW5kCiAgICAgICAgLy8gY3NzIHNwZWMgZm9yIHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBsZWdlbmQgYm94LgogICAgICAgIHRoaXMuYmFja2dyb3VuZDsKICAgICAgICAvLyBwcm9wOiB0ZXh0Q29sb3IKICAgICAgICAvLyBjc3MgY29sb3Igc3BlYyBmb3IgdGhlIGxlZ2VuZCB0ZXh0LgogICAgICAgIHRoaXMudGV4dENvbG9yOwogICAgICAgIC8vIHByb3A6IGZvbnRGYW1pbHkKICAgICAgICAvLyBjc3MgZm9udC1mYW1pbHkgc3BlYyBmb3IgdGhlIGxlZ2VuZCB0ZXh0LgogICAgICAgIHRoaXMuZm9udEZhbWlseTsgCiAgICAgICAgLy8gcHJvcDogZm9udFNpemUKICAgICAgICAvLyBjc3MgZm9udC1zaXplIHNwZWMgZm9yIHRoZSBsZWdlbmQgdGV4dC4KICAgICAgICB0aGlzLmZvbnRTaXplIDsKICAgICAgICAvLyBwcm9wOiByb3dTcGFjaW5nCiAgICAgICAgLy8gY3NzIHBhZGRpbmctdG9wIHNwZWMgZm9yIHRoZSByb3dzIGluIHRoZSBsZWdlbmQuCiAgICAgICAgdGhpcy5yb3dTcGFjaW5nID0gJzAuNWVtJzsKICAgICAgICAvLyByZW5kZXJlcgogICAgICAgIC8vIEEgY2xhc3MgdGhhdCB3aWxsIGNyZWF0ZSBhIERPTSBvYmplY3QgZm9yIHRoZSBsZWdlbmQsCiAgICAgICAgLy8gc2VlIDwkLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyPi4KICAgICAgICB0aGlzLnJlbmRlcmVyID0gJC5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlcjsKICAgICAgICAvLyBwcm9wOiByZW5kZXJlck9wdGlvbnMKICAgICAgICAvLyByZW5kZXJlciBzcGVjaWZpYyBvcHRpb25zIHBhc3NlZCB0byB0aGUgcmVuZGVyZXIuCiAgICAgICAgdGhpcy5yZW5kZXJlck9wdGlvbnMgPSB7fTsKICAgICAgICAvLyBwcm9wOiBwcmVkcmF3CiAgICAgICAgLy8gV2V0aGVyIHRvIGRyYXcgdGhlIGxlZ2VuZCBiZWZvcmUgdGhlIHNlcmllcyBvciBub3QuCiAgICAgICAgLy8gVXNlZCB3aXRoIHNlcmllcyBzcGVjaWZpYyBsZWdlbmQgcmVuZGVyZXJzIGZvciBwaWUsIGRvbnV0LCBtZWtrbyBjaGFydHMsIGV0Yy4KICAgICAgICB0aGlzLnByZURyYXcgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBtYXJnaW5Ub3AKICAgICAgICAvLyBDU1MgbWFyZ2luIGZvciB0aGUgbGVnZW5kIERPTSBlbGVtZW50LiBUaGlzIHdpbGwgc2V0IGFuIGVsZW1lbnQgCiAgICAgICAgLy8gQ1NTIHN0eWxlIGZvciB0aGUgbWFyZ2luIHdoaWNoIHdpbGwgb3ZlcnJpZGUgYW55IHN0eWxlIHNoZWV0IHNldHRpbmcuCiAgICAgICAgLy8gVGhlIGRlZmF1bHQgd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBzdHlsZXNoZWV0LgogICAgICAgIHRoaXMubWFyZ2luVG9wID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBtYXJnaW5SaWdodAogICAgICAgIC8vIENTUyBtYXJnaW4gZm9yIHRoZSBsZWdlbmQgRE9NIGVsZW1lbnQuIFRoaXMgd2lsbCBzZXQgYW4gZWxlbWVudCAKICAgICAgICAvLyBDU1Mgc3R5bGUgZm9yIHRoZSBtYXJnaW4gd2hpY2ggd2lsbCBvdmVycmlkZSBhbnkgc3R5bGUgc2hlZXQgc2V0dGluZy4KICAgICAgICAvLyBUaGUgZGVmYXVsdCB3aWxsIGJlIHRha2VuIGZyb20gdGhlIHN0eWxlc2hlZXQuCiAgICAgICAgdGhpcy5tYXJnaW5SaWdodCA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogbWFyZ2luQm90dG9tCiAgICAgICAgLy8gQ1NTIG1hcmdpbiBmb3IgdGhlIGxlZ2VuZCBET00gZWxlbWVudC4gVGhpcyB3aWxsIHNldCBhbiBlbGVtZW50IAogICAgICAgIC8vIENTUyBzdHlsZSBmb3IgdGhlIG1hcmdpbiB3aGljaCB3aWxsIG92ZXJyaWRlIGFueSBzdHlsZSBzaGVldCBzZXR0aW5nLgogICAgICAgIC8vIFRoZSBkZWZhdWx0IHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgc3R5bGVzaGVldC4KICAgICAgICB0aGlzLm1hcmdpbkJvdHRvbSA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogbWFyZ2luTGVmdAogICAgICAgIC8vIENTUyBtYXJnaW4gZm9yIHRoZSBsZWdlbmQgRE9NIGVsZW1lbnQuIFRoaXMgd2lsbCBzZXQgYW4gZWxlbWVudCAKICAgICAgICAvLyBDU1Mgc3R5bGUgZm9yIHRoZSBtYXJnaW4gd2hpY2ggd2lsbCBvdmVycmlkZSBhbnkgc3R5bGUgc2hlZXQgc2V0dGluZy4KICAgICAgICAvLyBUaGUgZGVmYXVsdCB3aWxsIGJlIHRha2VuIGZyb20gdGhlIHN0eWxlc2hlZXQuCiAgICAgICAgdGhpcy5tYXJnaW5MZWZ0ID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBlc2NhcGVIdG1sCiAgICAgICAgLy8gVHJ1ZSB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHdpdGggdGhlaXIgaHRtbCBlbnRpdHkgZXF1aXZhbGVudHMKICAgICAgICAvLyBpbiBsZWdlbmQgdGV4dC4gICI8IiBiZWNvbWVzICZsdDsgYW5kIHNvIG9uLCBzbyBodG1sIHRhZ3MgYXJlIG5vdCByZW5kZXJlZC4KICAgICAgICB0aGlzLmVzY2FwZUh0bWwgPSBmYWxzZTsKICAgICAgICB0aGlzLl9zZXJpZXMgPSBbXTsKICAgICAgICAKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgIH0KICAgIAogICAgTGVnZW5kLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5FbGVtQ29udGFpbmVyKCk7CiAgICBMZWdlbmQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGVnZW5kOwogICAgCiAgICBMZWdlbmQucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CiAgICAgICAgCiAgICAgICAgLy8gVHJ5IHRvIGVtdWxhdGUgZGVwcmVjYXRlZCBiZWhhdmlvdXIKICAgICAgICAvLyBpZiB1c2VyIGhhcyBzcGVjaWZpZWQgeG9mZnNldCBvciB5b2Zmc2V0LCBjb3B5IHRoZXNlIHRvCiAgICAgICAgLy8gdGhlIG1hcmdpbiBwcm9wZXJ0aWVzLgogICAgICAgIAogICAgICAgIGlmICh0aGlzLnBsYWNlbWVudCA9PSAgJ2luc2lkZScpIHsKICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQgPSAnaW5zaWRlR3JpZCc7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICh0aGlzLnhvZmZzZXQgPjApIHsKICAgICAgICAgICAgaWYgKHRoaXMucGxhY2VtZW50ID09ICdpbnNpZGVHcmlkJykgewogICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmxvY2F0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbncnOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3cnOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N3JzoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFyZ2luTGVmdCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmdpbkxlZnQgPSB0aGlzLnhvZmZzZXQgKyAncHgnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFyZ2luUmlnaHQgPSAnMHB4JzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmUnOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2UnOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NlJzoKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXJnaW5SaWdodCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmdpblJpZ2h0ID0gdGhpcy54b2Zmc2V0ICsgJ3B4JzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmdpbkxlZnQgPSAnMHB4JzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5wbGFjZW1lbnQgPT0gJ291dHNpZGUnKSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMubG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICdudyc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndyc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3cnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXJnaW5SaWdodCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmdpblJpZ2h0ID0gdGhpcy54b2Zmc2V0ICsgJ3B4JzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmdpbkxlZnQgPSAnMHB4JzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmUnOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2UnOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NlJzoKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXJnaW5MZWZ0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFyZ2luTGVmdCA9IHRoaXMueG9mZnNldCArICdweCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJnaW5SaWdodCA9ICcwcHgnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnhvZmZzZXQgPSAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAodGhpcy55b2Zmc2V0ID4wKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnBsYWNlbWVudCA9PSAnb3V0c2lkZScpIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvbikgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N3JzoKICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgICAgICBjYXNlICdzZSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcmdpblRvcCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmdpblRvcCA9IHRoaXMueW9mZnNldCArICdweCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJnaW5Cb3R0b20gPSAnMHB4JzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmUnOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ253JzoKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXJnaW5Cb3R0b20gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJnaW5Cb3R0b20gPSB0aGlzLnlvZmZzZXQgKyAncHgnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFyZ2luVG9wID0gJzBweCc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucGxhY2VtZW50ID09ICdpbnNpZGVHcmlkJykgewogICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmxvY2F0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3cnOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NlJzoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFyZ2luQm90dG9tID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFyZ2luQm90dG9tID0gdGhpcy55b2Zmc2V0ICsgJ3B4JzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmdpblRvcCA9ICcwcHgnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICduZSc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbncnOgogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcmdpblRvcCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmdpblRvcCA9IHRoaXMueW9mZnNldCArICdweCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJnaW5Cb3R0b20gPSAnMHB4JzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy55b2Zmc2V0ID0gMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gVE8tRE86CiAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlcmUgb2Zmc2V0cyBhcmUgPCAwLgogICAgICAgIC8vCiAgICB9OwogICAgCiAgICBMZWdlbmQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKHRoaXMucmVuZGVyZXIpKSB7CiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgdGhpcy5yZW5kZXJlcigpOyAgCiAgICAgICAgfQogICAgICAgIHRoaXMucmVuZGVyZXIuaW5pdC5jYWxsKHRoaXMsIHRoaXMucmVuZGVyZXJPcHRpb25zKTsKICAgIH07CiAgICAKICAgIExlZ2VuZC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKG9mZnNldHMsIHBsb3QpIHsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8JC5qcXBsb3QucHJlRHJhd0xlZ2VuZEhvb2tzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgJC5qcXBsb3QucHJlRHJhd0xlZ2VuZEhvb2tzW2ldLmNhbGwodGhpcywgb2Zmc2V0cyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmRyYXcuY2FsbCh0aGlzLCBvZmZzZXRzLCBwbG90KTsKICAgIH07CiAgICAKICAgIExlZ2VuZC5wcm90b3R5cGUucGFjayA9IGZ1bmN0aW9uKG9mZnNldHMpIHsKICAgICAgICB0aGlzLnJlbmRlcmVyLnBhY2suY2FsbCh0aGlzLCBvZmZzZXRzKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBDbGFzczogVGl0bGUKICAgICAqIFBsb3QgVGl0bGUgb2JqZWN0LiAgQ2Fubm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseSwgYnV0IGNyZWF0ZWQKICAgICAqIGJ5IHRoZSBQbG90IG9iamVjdC4gIFRpdGxlIHByb3BlcnRpZXMgY2FuIGJlIHNldCBvciBvdmVycmlkZGVuIGJ5IHRoZSAKICAgICAqIG9wdGlvbnMgcGFzc2VkIGluIGZyb20gdGhlIHVzZXIuCiAgICAgKiAKICAgICAqIFBhcmFtZXRlcnM6CiAgICAgKiB0ZXh0IC0gdGV4dCBvZiB0aGUgdGl0bGUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIFRpdGxlKHRleHQpIHsKICAgICAgICAkLmpxcGxvdC5FbGVtQ29udGFpbmVyLmNhbGwodGhpcyk7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAKICAgICAgICAvLyBwcm9wOiB0ZXh0CiAgICAgICAgLy8gdGV4dCBvZiB0aGUgdGl0bGU7CiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDsKICAgICAgICAvLyBwcm9wOiBzaG93CiAgICAgICAgLy8gd2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgdGl0bGUKICAgICAgICB0aGlzLnNob3cgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IGZvbnRGYW1pbHkKICAgICAgICAvLyBjc3MgZm9udC1mYW1pbHkgc3BlYyBmb3IgdGhlIHRleHQuCiAgICAgICAgdGhpcy5mb250RmFtaWx5OwogICAgICAgIC8vIHByb3A6IGZvbnRTaXplCiAgICAgICAgLy8gY3NzIGZvbnQtc2l6ZSBzcGVjIGZvciB0aGUgdGV4dC4KICAgICAgICB0aGlzLmZvbnRTaXplIDsKICAgICAgICAvLyBwcm9wOiB0ZXh0QWxpZ24KICAgICAgICAvLyBjc3MgdGV4dC1hbGlnbiBzcGVjIGZvciB0aGUgdGV4dC4KICAgICAgICB0aGlzLnRleHRBbGlnbjsKICAgICAgICAvLyBwcm9wOiB0ZXh0Q29sb3IKICAgICAgICAvLyBjc3MgY29sb3Igc3BlYyBmb3IgdGhlIHRleHQuCiAgICAgICAgdGhpcy50ZXh0Q29sb3I7CiAgICAgICAgLy8gcHJvcDogcmVuZGVyZXIKICAgICAgICAvLyBBIGNsYXNzIGZvciBjcmVhdGluZyBhIERPTSBlbGVtZW50IGZvciB0aGUgdGl0bGUsCiAgICAgICAgLy8gc2VlIDwkLmpxcGxvdC5EaXZUaXRsZVJlbmRlcmVyPi4KICAgICAgICB0aGlzLnJlbmRlcmVyID0gJC5qcXBsb3QuRGl2VGl0bGVSZW5kZXJlcjsKICAgICAgICAvLyBwcm9wOiByZW5kZXJlck9wdGlvbnMKICAgICAgICAvLyByZW5kZXJlciBzcGVjaWZpYyBvcHRpb25zIHBhc3NlZCB0byB0aGUgcmVuZGVyZXIuCiAgICAgICAgdGhpcy5yZW5kZXJlck9wdGlvbnMgPSB7fTsgICAKICAgICAgICAvLyBwcm9wOiBlc2NhcGVIdG1sCiAgICAgICAgLy8gVHJ1ZSB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHdpdGggdGhlaXIgaHRtbCBlbnRpdHkgZXF1aXZhbGVudHMKICAgICAgICAvLyBpbiB0aXRsZSB0ZXh0LiAgIjwiIGJlY29tZXMgJmx0OyBhbmQgc28gb24sIHNvIGh0bWwgdGFncyBhcmUgbm90IHJlbmRlcmVkLgogICAgICAgIHRoaXMuZXNjYXBlSHRtbCA9IGZhbHNlOwogICAgfQogICAgCiAgICBUaXRsZS5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuRWxlbUNvbnRhaW5lcigpOwogICAgVGl0bGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGl0bGU7CiAgICAKICAgIFRpdGxlLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCQuaXNGdW5jdGlvbih0aGlzLnJlbmRlcmVyKSkgewogICAgICAgICAgICB0aGlzLnJlbmRlcmVyID0gbmV3IHRoaXMucmVuZGVyZXIoKTsgIAogICAgICAgIH0KICAgICAgICB0aGlzLnJlbmRlcmVyLmluaXQuY2FsbCh0aGlzLCB0aGlzLnJlbmRlcmVyT3B0aW9ucyk7CiAgICB9OwogICAgCiAgICBUaXRsZS5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHdpZHRoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZHJhdy5jYWxsKHRoaXMsIHdpZHRoKTsKICAgIH07CiAgICAKICAgIFRpdGxlLnByb3RvdHlwZS5wYWNrID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5yZW5kZXJlci5wYWNrLmNhbGwodGhpcyk7CiAgICB9OwoKCiAgICAvKioKICAgICAqIENsYXNzOiBTZXJpZXMKICAgICAqIEFuIGluZGl2aWR1YWwgZGF0YSBzZXJpZXMgb2JqZWN0LiAgQ2Fubm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseSwgYnV0IGNyZWF0ZWQKICAgICAqIGJ5IHRoZSBQbG90IG9iamVjdC4gIFNlcmllcyBwcm9wZXJ0aWVzIGNhbiBiZSBzZXQgb3Igb3ZlcnJpZGRlbiBieSB0aGUgCiAgICAgKiBvcHRpb25zIHBhc3NlZCBpbiBmcm9tIHRoZSB1c2VyLgogICAgICovCiAgICBmdW5jdGlvbiBTZXJpZXMob3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgICQuanFwbG90LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTsKICAgICAgICAvLyBHcm91cDogUHJvcGVydGllcwogICAgICAgIC8vIFByb3BlcnRpZXMgd2lsbCBiZSBhc3NpZ25lZCBmcm9tIGEgc2VyaWVzIGFycmF5IGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlCiAgICAgICAgLy8gb3B0aW9ucy4gIElmIHlvdSBoYWQgdHdvIHNlcmllcyBhbmQgd2FudGVkIHRvIGNoYW5nZSB0aGUgY29sb3IgYW5kIGxpbmUKICAgICAgICAvLyB3aWR0aCBvZiB0aGUgZmlyc3QgYW5kIHNldCB0aGUgc2Vjb25kIHRvIHVzZSB0aGUgc2Vjb25kYXJ5IHkgYXhpcyB3aXRoCiAgICAgICAgLy8gbm8gc2hhZG93IGFuZCBzdXBwbHkgY3VzdG9tIGxhYmVscyBmb3IgZWFjaDoKICAgICAgICAvLyA+IHsKICAgICAgICAvLyA+ICAgIHNlcmllczpbCiAgICAgICAgLy8gPiAgICAgICAge2NvbG9yOiAnI2ZmNDQ2NicsIGxpbmVXaWR0aDogNSwgbGFiZWw6J2dvb2QgbGluZSd9LAogICAgICAgIC8vID4gICAgICAgIHt5YXhpczogJ3kyYXhpcycsIHNoYWRvdzogZmFsc2UsIGxhYmVsOidiYWQgbGluZSd9CiAgICAgICAgLy8gPiAgICBdCiAgICAgICAgLy8gPiB9CgogICAgICAgIC8vIHByb3A6IHNob3cKICAgICAgICAvLyB3aGV0aGVyIG9yIG5vdCB0byBkcmF3IHRoZSBzZXJpZXMuCiAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiB4YXhpcwogICAgICAgIC8vIHdoaWNoIHggYXhpcyB0byB1c2Ugd2l0aCB0aGlzIHNlcmllcywgZWl0aGVyICd4YXhpcycgb3IgJ3gyYXhpcycuCiAgICAgICAgdGhpcy54YXhpcyA9ICd4YXhpcyc7CiAgICAgICAgdGhpcy5feGF4aXM7CiAgICAgICAgLy8gcHJvcDogeWF4aXMKICAgICAgICAvLyB3aGljaCB5IGF4aXMgdG8gdXNlIHdpdGggdGhpcyBzZXJpZXMsIGVpdGhlciAneWF4aXMnIG9yICd5MmF4aXMnLgogICAgICAgIHRoaXMueWF4aXMgPSAneWF4aXMnOwogICAgICAgIHRoaXMuX3lheGlzOwogICAgICAgIHRoaXMuZ3JpZEJvcmRlcldpZHRoID0gMi4wOwogICAgICAgIC8vIHByb3A6IHJlbmRlcmVyCiAgICAgICAgLy8gQSBjbGFzcyBvZiBhIHJlbmRlcmVyIHdoaWNoIHdpbGwgZHJhdyB0aGUgc2VyaWVzLCAKICAgICAgICAvLyBzZWUgPCQuanFwbG90LkxpbmVSZW5kZXJlcj4uCiAgICAgICAgdGhpcy5yZW5kZXJlciA9ICQuanFwbG90LkxpbmVSZW5kZXJlcjsKICAgICAgICAvLyBwcm9wOiByZW5kZXJlck9wdGlvbnMKICAgICAgICAvLyBPcHRpb25zIHRvIHBhc3Mgb24gdG8gdGhlIHJlbmRlcmVyLgogICAgICAgIHRoaXMucmVuZGVyZXJPcHRpb25zID0ge307CiAgICAgICAgdGhpcy5kYXRhID0gW107CiAgICAgICAgdGhpcy5ncmlkRGF0YSA9IFtdOwogICAgICAgIC8vIHByb3A6IGxhYmVsCiAgICAgICAgLy8gTGluZSBsYWJlbCB0byB1c2UgaW4gdGhlIGxlZ2VuZC4KICAgICAgICB0aGlzLmxhYmVsID0gJyc7CiAgICAgICAgLy8gcHJvcDogc2hvd0xhYmVsCiAgICAgICAgLy8gdHJ1ZSB0byBzaG93IGxhYmVsIGZvciB0aGlzIHNlcmllcyBpbiB0aGUgbGVnZW5kLgogICAgICAgIHRoaXMuc2hvd0xhYmVsID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBjb2xvcgogICAgICAgIC8vIGNzcyBjb2xvciBzcGVjIGZvciB0aGUgc2VyaWVzCiAgICAgICAgdGhpcy5jb2xvcjsKICAgICAgICAvLyBwcm9wOiBuZWdhdGl2ZUNvbG9yCiAgICAgICAgLy8gY3NzIGNvbG9yIHNwZWMgdXNlZCBmb3IgZmlsbGVkIChhcmVhKSBwbG90cyB0aGF0IGFyZSBmaWxsZWQgdG8gemVybyBhbmQKICAgICAgICAvLyB0aGUgInVzZU5lZ2F0aXZlQ29sb3JzIiBvcHRpb24gaXMgdHJ1ZS4KICAgICAgICB0aGlzLm5lZ2F0aXZlQ29sb3I7CiAgICAgICAgLy8gcHJvcDogbGluZVdpZHRoCiAgICAgICAgLy8gd2lkdGggb2YgdGhlIGxpbmUgaW4gcGl4ZWxzLiAgTWF5IGhhdmUgZGlmZmVyZW50IG1lYW5pbmdzIGRlcGVuZGluZyBvbiByZW5kZXJlci4KICAgICAgICB0aGlzLmxpbmVXaWR0aCA9IDIuNTsKICAgICAgICAvLyBwcm9wOiBsaW5lSm9pbgogICAgICAgIC8vIENhbnZhcyBsaW5lSm9pbiBzdHlsZSBiZXR3ZWVuIHNlZ21lbnRzIG9mIHNlcmllcy4KICAgICAgICB0aGlzLmxpbmVKb2luID0gJ3JvdW5kJzsKICAgICAgICAvLyBwcm9wOiBsaW5lQ2FwCiAgICAgICAgLy8gQ2FudmFzIGxpbmVDYXAgc3R5bGUgYXQgZW5kcyBvZiBsaW5lLgogICAgICAgIHRoaXMubGluZUNhcCA9ICdyb3VuZCc7CiAgICAgICAgLy8gcHJvcDogbGluZVBhdHRlcm4KICAgICAgICAvLyBsaW5lIHBhdHRlcm4gJ2Rhc2hlZCcsICdkb3R0ZWQnLCAnc29saWQnLCBzb21lIGNvbWJpbmF0aW9uCiAgICAgICAgLy8gb2YgJy0nIGFuZCAnLicgY2hhcmFjdGVycyBzdWNoIGFzICcuLS4nIG9yIGEgbnVtZXJpY2FsIGFycmF5IGxpa2UgCiAgICAgICAgLy8gW2RyYXcsIHNraXAsIGRyYXcsIHNraXAsIC4uLl0gc3VjaCBhcyBbMSwgMTBdIHRvIGRyYXcgYSBkb3R0ZWQgbGluZSwgCiAgICAgICAgLy8gWzEsIDEwLCAyMCwgMTBdIHRvIGRyYXcgYSBkb3QtZGFzaCBsaW5lLCBhbmQgc28gb24uCiAgICAgICAgdGhpcy5saW5lUGF0dGVybiA9ICdzb2xpZCc7CiAgICAgICAgdGhpcy5zaGFkb3cgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IHNoYWRvd0FuZ2xlCiAgICAgICAgLy8gU2hhZG93IGFuZ2xlIGluIGRlZ3JlZXMKICAgICAgICB0aGlzLnNoYWRvd0FuZ2xlID0gNDU7CiAgICAgICAgLy8gcHJvcDogc2hhZG93T2Zmc2V0CiAgICAgICAgLy8gU2hhZG93IG9mZnNldCBmcm9tIGxpbmUgaW4gcGl4ZWxzCiAgICAgICAgdGhpcy5zaGFkb3dPZmZzZXQgPSAxLjI1OwogICAgICAgIC8vIHByb3A6IHNoYWRvd0RlcHRoCiAgICAgICAgLy8gTnVtYmVyIG9mIHRpbWVzIHNoYWRvdyBpcyBzdHJva2VkLCBlYWNoIHN0cm9rZSBvZmZzZXQgc2hhZG93T2Zmc2V0IGZyb20gdGhlIGxhc3QuCiAgICAgICAgdGhpcy5zaGFkb3dEZXB0aCA9IDM7CiAgICAgICAgLy8gcHJvcDogc2hhZG93QWxwaGEKICAgICAgICAvLyBBbHBoYSBjaGFubmVsIHRyYW5zcGFyZW5jeSBvZiBzaGFkb3cuICAwID0gdHJhbnNwYXJlbnQuCiAgICAgICAgdGhpcy5zaGFkb3dBbHBoYSA9ICcwLjEnOwogICAgICAgIC8vIHByb3A6IGJyZWFrT25OdWxsCiAgICAgICAgLy8gV2V0aGVyIGxpbmUgc2VnbWVudHMgc2hvdWxkIGJlIGJlIGJyb2tlbiBhdCBudWxsIHZhbHVlLgogICAgICAgIC8vIEZhbHNlIHdpbGwgam9pbiBwb2ludCBvbiBlaXRoZXIgc2lkZSBvZiBsaW5lLgogICAgICAgIHRoaXMuYnJlYWtPbk51bGwgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBtYXJrZXJSZW5kZXJlcgogICAgICAgIC8vIEEgY2xhc3Mgb2YgYSByZW5kZXJlciB3aGljaCB3aWxsIGRyYXcgbWFya2VyIChlLmcuIGNpcmNsZSwgc3F1YXJlLCAuLi4pIGF0IHRoZSBkYXRhIHBvaW50cywKICAgICAgICAvLyBzZWUgPCQuanFwbG90Lk1hcmtlclJlbmRlcmVyPi4KICAgICAgICB0aGlzLm1hcmtlclJlbmRlcmVyID0gJC5qcXBsb3QuTWFya2VyUmVuZGVyZXI7CiAgICAgICAgLy8gcHJvcDogbWFya2VyT3B0aW9ucwogICAgICAgIC8vIHJlbmRlcmVyIHNwZWNpZmljIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgbWFya2VyUmVuZGVyZXIsCiAgICAgICAgLy8gc2VlIDwkLmpxcGxvdC5NYXJrZXJSZW5kZXJlcj4uCiAgICAgICAgdGhpcy5tYXJrZXJPcHRpb25zID0ge307CiAgICAgICAgLy8gcHJvcDogc2hvd0xpbmUKICAgICAgICAvLyB3aGV0aGVyIHRvIGFjdHVhbGx5IGRyYXcgdGhlIGxpbmUgb3Igbm90LiAgU2VyaWVzIHdpbGwgc3RpbGwgYmUgcmVuZGVyZXJlZCwgZXZlbiBpZiBubyBsaW5lIGlzIGRyYXduLgogICAgICAgIHRoaXMuc2hvd0xpbmUgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IHNob3dNYXJrZXIKICAgICAgICAvLyB3aGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSBtYXJrZXJzIGF0IHRoZSBkYXRhIHBvaW50cy4KICAgICAgICB0aGlzLnNob3dNYXJrZXIgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IGluZGV4CiAgICAgICAgLy8gMCBiYXNlZCBpbmRleCBvZiB0aGlzIHNlcmllcyBpbiB0aGUgcGxvdCBzZXJpZXMgYXJyYXkuCiAgICAgICAgdGhpcy5pbmRleDsKICAgICAgICAvLyBwcm9wOiBmaWxsCiAgICAgICAgLy8gdHJ1ZSBvciBmYWxzZSwgd2hldGhlciB0byBmaWxsIHVuZGVyIGxpbmVzIG9yIGluIGJhcnMuCiAgICAgICAgLy8gTWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBpbiBhbGwgcmVuZGVyZXJzLgogICAgICAgIHRoaXMuZmlsbCA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGZpbGxDb2xvcgogICAgICAgIC8vIENTUyBjb2xvciBzcGVjIHRvIHVzZSBmb3IgZmlsbCB1bmRlciBsaW5lLiAgRGVmYXVsdHMgdG8gbGluZSBjb2xvci4KICAgICAgICB0aGlzLmZpbGxDb2xvcjsKICAgICAgICAvLyBwcm9wOiBmaWxsQWxwaGEKICAgICAgICAvLyBBbHBoYSB0cmFuc3BhcmVuY3kgdG8gYXBwbHkgdG8gdGhlIGZpbGwgdW5kZXIgdGhlIGxpbmUuCiAgICAgICAgLy8gVXNlIHRoaXMgdG8gYWRqdXN0IGFscGhhIHNlcGFyYXRlIGZyb20gZmlsbCBjb2xvci4KICAgICAgICB0aGlzLmZpbGxBbHBoYTsKICAgICAgICAvLyBwcm9wOiBmaWxsQW5kU3Ryb2tlCiAgICAgICAgLy8gSWYgdHJ1ZSB3aWxsIHN0cm9rZSB0aGUgbGluZSAod2l0aCBjb2xvciB0aGlzLmNvbG9yKSBhcyB3ZWxsIGFzIGZpbGwgdW5kZXIgaXQuCiAgICAgICAgLy8gQXBwbGllcyBvbmx5IHdoZW4gZmlsbCBpcyB0cnVlLgogICAgICAgIHRoaXMuZmlsbEFuZFN0cm9rZSA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGRpc2FibGVTdGFjawogICAgICAgIC8vIHRydWUgdG8gbm90IHN0YWNrIHRoaXMgc2VyaWVzIHdpdGggb3RoZXIgc2VyaWVzIGluIHRoZSBwbG90LgogICAgICAgIC8vIFRvIHJlbmRlciBwcm9wZXJseSwgbm9uLXN0YWNrZWQgc2VyaWVzIG11c3QgY29tZSBhZnRlciBhbnkgc3RhY2tlZCBzZXJpZXMKICAgICAgICAvLyBpbiB0aGUgcGxvdCdzIGRhdGEgc2VyaWVzIGFycmF5LiAgU28sIHRoZSBwbG90J3MgZGF0YSBzZXJpZXMgYXJyYXkgd291bGQgbG9vayBsaWtlOgogICAgICAgIC8vID4gW3N0YWNrZWRTZXJpZXMxLCBzdGFja2VkU2VyaWVzMiwgLi4uLCBub25TdGFja2VkU2VyaWVzMSwgbm9uU3RhY2tlZFNlcmllczIsIC4uLl0KICAgICAgICAvLyBkaXNhYmxlU3RhY2sgd2lsbCBwdXQgYSBnYXAgaW4gdGhlIHN0YWNraW5nIG9yZGVyIG9mIHNlcmllcywgYW5kIHN1YnNlcXVlbnQKICAgICAgICAvLyBzdGFja2VkIHNlcmllcyB3aWxsIG5vdCBmaWxsIGRvd24gdGhyb3VnaCB0aGUgbm9uLXN0YWNrZWQgc2VyaWVzIGFuZCB3aWxsCiAgICAgICAgLy8gbW9zdCBsaWtlbHkgbm90IHN0YWNrIHByb3Blcmx5IG9uIHRvcCBvZiB0aGUgbm9uLXN0YWNrZWQgc2VyaWVzLgogICAgICAgIHRoaXMuZGlzYWJsZVN0YWNrID0gZmFsc2U7CiAgICAgICAgLy8gX3N0YWNrIGlzIHNldCBieSB0aGUgUGxvdCBpZiB0aGUgcGxvdCBpcyBhIHN0YWNrZWQgY2hhcnQuCiAgICAgICAgLy8gd2lsbCBzdGFjayBsaW5lcyBvciBiYXJzIG9uIHRvcCBvZiBvbmUgYW5vdGhlciB0byBidWlsZCBhICJtb3VudGFpbiIgc3R5bGUgY2hhcnQuCiAgICAgICAgLy8gTWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBpbiBhbGwgcmVuZGVyZXJzLgogICAgICAgIHRoaXMuX3N0YWNrID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogbmVpZ2hib3JUaHJlc2hvbGQKICAgICAgICAvLyBob3cgY2xvc2Ugb3IgZmFyIChpbiBwaXhlbHMpIHRoZSBjdXJzb3IgbXVzdCBiZSBmcm9tIGEgcG9pbnQgbWFya2VyIHRvIGRldGVjdCB0aGUgcG9pbnQuCiAgICAgICAgdGhpcy5uZWlnaGJvclRocmVzaG9sZCA9IDQ7CiAgICAgICAgLy8gcHJvcDogZmlsbFRvWmVybwogICAgICAgIC8vIHRydWUgd2lsbCBmb3JjZSBiYXIgYW5kIGZpbGxlZCBzZXJpZXMgdG8gZmlsbCB0b3dhcmQgemVybyBvbiB0aGUgZmlsbCBBeGlzLgogICAgICAgIHRoaXMuZmlsbFRvWmVybyA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGZpbGxUb1ZhbHVlCiAgICAgICAgLy8gZmlsbCBhIGZpbGxlZCBzZXJpZXMgdG8gdGhpcyB2YWx1ZSBvbiB0aGUgZmlsbCBheGlzLgogICAgICAgIC8vIFdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggZmlsbFRvWmVybywgc28gdGhhdCBtdXN0IGJlIHRydWUuCiAgICAgICAgdGhpcy5maWxsVG9WYWx1ZSA9IDA7CiAgICAgICAgLy8gcHJvcDogZmlsbEF4aXMKICAgICAgICAvLyBFaXRoZXIgJ3gnIG9yICd5Jy4gIFdoaWNoIGF4aXMgdG8gZmlsbCB0aGUgbGluZSB0b3dhcmQgaWYgZmlsbFRvWmVybyBpcyB0cnVlLgogICAgICAgIC8vICd5JyBtZWFucyBmaWxsIHVwL2Rvd24gdG8gMCBvbiB0aGUgeSBheGlzIGZvciB0aGlzIHNlcmllcy4KICAgICAgICB0aGlzLmZpbGxBeGlzID0gJ3knOwogICAgICAgIC8vIHByb3A6IHVzZU5lZ2F0aXZlQ29sb3JzCiAgICAgICAgLy8gdHJ1ZSB0byBjb2xvciBuZWdhdGl2ZSB2YWx1ZXMgZGlmZmVyZW50bHkgaW4gZmlsbGVkIGFuZCBiYXIgY2hhcnRzLgogICAgICAgIHRoaXMudXNlTmVnYXRpdmVDb2xvcnMgPSB0cnVlOwogICAgICAgIHRoaXMuX3N0YWNrRGF0YSA9IFtdOwogICAgICAgIC8vIF9wbG90RGF0YSBhY2NvdW50cyBmb3Igc3RhY2tpbmcuICBJZiBwbG90cyBub3Qgc3RhY2tlZCwgX3Bsb3REYXRhIGFuZCBkYXRhIGFyZSBzYW1lLiAgSWYKICAgICAgICAvLyBzdGFja2VkLCBfcGxvdERhdGEgaXMgYWNjdW11bGF0aW9uIG9mIHN0YWNraW5nIGRhdGEuCiAgICAgICAgdGhpcy5fcGxvdERhdGEgPSBbXTsKICAgICAgICAvLyBfcGxvdFZhbHVlcyBob2xkIHRoZSBpbmRpdmlkdWFsIHggYW5kIHkgdmFsdWVzIHRoYXQgd2lsbCBiZSBwbG90dGVkIGZvciB0aGlzIHNlcmllcy4KICAgICAgICB0aGlzLl9wbG90VmFsdWVzID0ge3g6W10sIHk6W119OwogICAgICAgIC8vIHN0YXRpc3RpY3MgYWJvdXQgdGhlIGludGVydmFscyBiZXR3ZWVuIGRhdGEgcG9pbnRzLiAgVXNlZCBmb3IgYXV0byBzY2FsaW5nLgogICAgICAgIHRoaXMuX2ludGVydmFscyA9IHt4Ont9LCB5Ont9fTsKICAgICAgICAvLyBkYXRhIGZyb20gdGhlIHByZXZpb3VzIHNlcmllcywgZm9yIHN0YWNrZWQgY2hhcnRzLgogICAgICAgIHRoaXMuX3ByZXZQbG90RGF0YSA9IFtdOwogICAgICAgIHRoaXMuX3ByZXZHcmlkRGF0YSA9IFtdOwogICAgICAgIHRoaXMuX3N0YWNrQXhpcyA9ICd5JzsKICAgICAgICB0aGlzLl9wcmltYXJ5QXhpcyA9ICdfeGF4aXMnOwogICAgICAgIC8vIGdpdmUgZWFjaCBzZXJpZXMgYSBjYW52YXMgdG8gZHJhdyBvbi4gIFRoaXMgc2hvdWxkIGFsbG93IGZvciByZWRyYXdpbmcgc3BlZWR1cHMuCiAgICAgICAgdGhpcy5jYW52YXMgPSBuZXcgJC5qcXBsb3QuR2VuZXJpY0NhbnZhcygpOwogICAgICAgIHRoaXMuc2hhZG93Q2FudmFzID0gbmV3ICQuanFwbG90LkdlbmVyaWNDYW52YXMoKTsKICAgICAgICB0aGlzLnBsdWdpbnMgPSB7fTsKICAgICAgICAvLyBzdW0gb2YgeSB2YWx1ZXMgaW4gdGhpcyBzZXJpZXMuCiAgICAgICAgdGhpcy5fc3VteSA9IDA7CiAgICAgICAgdGhpcy5fc3VteCA9IDA7CiAgICAgICAgdGhpcy5fdHlwZSA9ICcnOwogICAgfQogICAgCiAgICBTZXJpZXMucHJvdG90eXBlID0gbmV3ICQuanFwbG90LkVsZW1Db250YWluZXIoKTsKICAgIFNlcmllcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXJpZXM7CiAgICAKICAgIFNlcmllcy5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKGluZGV4LCBncmlkYncsIHBsb3QpIHsKICAgICAgICAvLyB3ZWVkIG91dCBhbnkgbnVsbCB2YWx1ZXMgaW4gdGhlIGRhdGEuCiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4OwogICAgICAgIHRoaXMuZ3JpZEJvcmRlcldpZHRoID0gZ3JpZGJ3OwogICAgICAgIHZhciBkID0gdGhpcy5kYXRhOwogICAgICAgIHZhciB0ZW1wID0gW10sIGksIGw7CiAgICAgICAgZm9yIChpPTAsIGw9ZC5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgICAgIGlmICghIHRoaXMuYnJlYWtPbk51bGwpIHsKICAgICAgICAgICAgICAgIGlmIChkW2ldID09IG51bGwgfHwgZFtpXVswXSA9PSBudWxsIHx8IGRbaV1bMV0gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKGRbaV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgLy8gVE9ETzogZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggbnVsbCB2YWx1ZXMKICAgICAgICAgICAgICAgIC8vIHByb2JhYmx5IGludm9sdmUga2VlcGluZyBudWxscyBpbiBkYXRhIGFycmF5CiAgICAgICAgICAgICAgICAvLyBhbmQgdGhlbiB1cGRhdGluZyByZW5kZXJlcnMgdG8gYnJlYWsgbGluZQogICAgICAgICAgICAgICAgLy8gd2hlbiBpdCBoaXRzIG51bGwgdmFsdWUuCiAgICAgICAgICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGtlZXAgdmFsdWUuCiAgICAgICAgICAgICAgICB0ZW1wLnB1c2goZFtpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5kYXRhID0gdGVtcDsKCiAgICAgICAgLy8gcGFyc2UgdGhlIHJlbmRlcmVyIG9wdGlvbnMgYW5kIGFwcGx5IGRlZmF1bHQgY29sb3JzIGlmIG5vdCBwcm92aWRlZAogICAgICAgIC8vIFNldCBjb2xvciBldmVuIGlmIG5vdCBzaG93biwgc28gc2VyaWVzIGRvbid0IGNoYW5nZSBjb2xvcnMgd2hlbiBvdGhlcgogICAgICAgIC8vIHNlcmllcyBvbiBwbG90IHNob3duL2hpZGRlbi4KICAgICAgICBpZiAoIXRoaXMuY29sb3IpIHsKICAgICAgICAgICAgdGhpcy5jb2xvciA9IHBsb3QuY29sb3JHZW5lcmF0b3IuZ2V0KHRoaXMuaW5kZXgpOwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMubmVnYXRpdmVDb2xvcikgewogICAgICAgICAgICB0aGlzLm5lZ2F0aXZlQ29sb3IgPSBwbG90Lm5lZ2F0aXZlQ29sb3JHZW5lcmF0b3IuZ2V0KHRoaXMuaW5kZXgpOwogICAgICAgIH0KCgogICAgICAgIGlmICghdGhpcy5maWxsQ29sb3IpIHsKICAgICAgICAgICAgdGhpcy5maWxsQ29sb3IgPSB0aGlzLmNvbG9yOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5maWxsQWxwaGEpIHsKICAgICAgICAgICAgdmFyIGNvbXAgPSAkLmpxcGxvdC5ub3JtYWxpemUycmdiKHRoaXMuZmlsbENvbG9yKTsKICAgICAgICAgICAgdmFyIGNvbXAgPSAkLmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHMoY29tcCk7CiAgICAgICAgICAgIHRoaXMuZmlsbENvbG9yID0gJ3JnYmEoJytjb21wWzBdKycsJytjb21wWzFdKycsJytjb21wWzJdKycsJyt0aGlzLmZpbGxBbHBoYSsnKSc7CiAgICAgICAgfQogICAgICAgIGlmICgkLmlzRnVuY3Rpb24odGhpcy5yZW5kZXJlcikpIHsKICAgICAgICAgICAgdGhpcy5yZW5kZXJlciA9IG5ldyB0aGlzLnJlbmRlcmVyKCk7ICAKICAgICAgICB9CiAgICAgICAgdGhpcy5yZW5kZXJlci5pbml0LmNhbGwodGhpcywgdGhpcy5yZW5kZXJlck9wdGlvbnMsIHBsb3QpOwogICAgICAgIHRoaXMubWFya2VyUmVuZGVyZXIgPSBuZXcgdGhpcy5tYXJrZXJSZW5kZXJlcigpOwogICAgICAgIGlmICghdGhpcy5tYXJrZXJPcHRpb25zLmNvbG9yKSB7CiAgICAgICAgICAgIHRoaXMubWFya2VyT3B0aW9ucy5jb2xvciA9IHRoaXMuY29sb3I7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLm1hcmtlck9wdGlvbnMuc2hvdyA9PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMubWFya2VyT3B0aW9ucy5zaG93ID0gdGhpcy5zaG93TWFya2VyOwogICAgICAgIH0KICAgICAgICB0aGlzLnNob3dNYXJrZXIgPSB0aGlzLm1hcmtlck9wdGlvbnMuc2hvdzsKICAgICAgICAvLyB0aGUgbWFya2VyUmVuZGVyZXIgaXMgY2FsbGVkIHdpdGhpbiBpdHMgb3duIHNjb3BlLCBkb24ndCB3YW50IHRvIG92ZXJ3cml0ZSBzZXJpZXMgb3B0aW9ucyEhCiAgICAgICAgdGhpcy5tYXJrZXJSZW5kZXJlci5pbml0KHRoaXMubWFya2VyT3B0aW9ucyk7CiAgICB9OwogICAgCiAgICAvLyBkYXRhIC0gb3B0aW9uYWwgZGF0YSBwb2ludCBhcnJheSB0byBkcmF3IHVzaW5nIHRoaXMgc2VyaWVzIHJlbmRlcmVyCiAgICAvLyBncmlkRGF0YSAtIG9wdGlvbmFsIGdyaWQgZGF0YSBwb2ludCBhcnJheSB0byBkcmF3IHVzaW5nIHRoaXMgc2VyaWVzIHJlbmRlcmVyCiAgICAvLyBzdGFja0RhdGEgLSBhcnJheSBvZiBjdW11bGF0aXZlIGRhdGEgZm9yIHN0YWNrZWQgcGxvdHMuCiAgICBTZXJpZXMucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihzY3R4LCBvcHRzLCBwbG90KSB7CiAgICAgICAgdmFyIG9wdGlvbnMgPSAob3B0cyA9PSB1bmRlZmluZWQpID8ge30gOiBvcHRzOwogICAgICAgIHNjdHggPSAoc2N0eCA9PSB1bmRlZmluZWQpID8gdGhpcy5jYW52YXMuX2N0eCA6IHNjdHg7CiAgICAgICAgCiAgICAgICAgdmFyIGosIGRhdGEsIGdyaWREYXRhOwogICAgICAgIAogICAgICAgIC8vIGhvb2tzIGdldCBjYWxsZWQgZXZlbiBpZiBzZXJpZXMgbm90IHNob3duCiAgICAgICAgLy8gd2UgZG9uJ3QgY2xlYXIgY2FudmFzIGhlcmUsIGl0IHdvdWxkIHdpcGUgb3V0IGFsbCBvdGhlciBzZXJpZXMgYXMgd2VsbC4KICAgICAgICBmb3IgKGo9MDsgajwkLmpxcGxvdC5wcmVEcmF3U2VyaWVzSG9va3MubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgJC5qcXBsb3QucHJlRHJhd1Nlcmllc0hvb2tzW2pdLmNhbGwodGhpcywgc2N0eCwgb3B0aW9ucyk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNob3cpIHsKICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRHcmlkRGF0YS5jYWxsKHRoaXMsIHBsb3QpOwogICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJldmVudEpxUGxvdFNlcmllc0RyYXdUcmlnZ2VyKSB7CiAgICAgICAgICAgICAgICAkKHNjdHguY2FudmFzKS50cmlnZ2VyKCdqcXBsb3RTZXJpZXNEcmF3JywgW3RoaXMuZGF0YSwgdGhpcy5ncmlkRGF0YV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRhdGEgPSBbXTsKICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGF0YSkgewogICAgICAgICAgICAgICAgZGF0YSA9IG9wdGlvbnMuZGF0YTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICghdGhpcy5fc3RhY2spIHsKICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLmRhdGE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5fcGxvdERhdGE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZ3JpZERhdGEgPSBvcHRpb25zLmdyaWREYXRhIHx8IHRoaXMucmVuZGVyZXIubWFrZUdyaWREYXRhLmNhbGwodGhpcywgZGF0YSwgcGxvdCk7CgogICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gJ2xpbmUnICYmIHRoaXMucmVuZGVyZXIuc21vb3RoICYmIHRoaXMucmVuZGVyZXIuX3Ntb290aGVkRGF0YS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGdyaWREYXRhID0gdGhpcy5yZW5kZXJlci5fc21vb3RoZWREYXRhOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXcuY2FsbCh0aGlzLCBzY3R4LCBncmlkRGF0YSwgb3B0aW9ucywgcGxvdCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZvciAoaj0wOyBqPCQuanFwbG90LnBvc3REcmF3U2VyaWVzSG9va3MubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgJC5qcXBsb3QucG9zdERyYXdTZXJpZXNIb29rc1tqXS5jYWxsKHRoaXMsIHNjdHgsIG9wdGlvbnMsIHBsb3QpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBzY3R4ID0gb3B0cyA9IHBsb3QgPSBqID0gZGF0YSA9IGdyaWREYXRhID0gbnVsbDsKICAgIH07CiAgICAKICAgIFNlcmllcy5wcm90b3R5cGUuZHJhd1NoYWRvdyA9IGZ1bmN0aW9uKHNjdHgsIG9wdHMsIHBsb3QpIHsKICAgICAgICB2YXIgb3B0aW9ucyA9IChvcHRzID09IHVuZGVmaW5lZCkgPyB7fSA6IG9wdHM7CiAgICAgICAgc2N0eCA9IChzY3R4ID09IHVuZGVmaW5lZCkgPyB0aGlzLnNoYWRvd0NhbnZhcy5fY3R4IDogc2N0eDsKICAgICAgICAKICAgICAgICB2YXIgaiwgZGF0YSwgZ3JpZERhdGE7CiAgICAgICAgCiAgICAgICAgLy8gaG9va3MgZ2V0IGNhbGxlZCBldmVuIGlmIHNlcmllcyBub3Qgc2hvd24KICAgICAgICAvLyB3ZSBkb24ndCBjbGVhciBjYW52YXMgaGVyZSwgaXQgd291bGQgd2lwZSBvdXQgYWxsIG90aGVyIHNlcmllcyBhcyB3ZWxsLgogICAgICAgIGZvciAoaj0wOyBqPCQuanFwbG90LnByZURyYXdTZXJpZXNTaGFkb3dIb29rcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAkLmpxcGxvdC5wcmVEcmF3U2VyaWVzU2hhZG93SG9va3Nbal0uY2FsbCh0aGlzLCBzY3R4LCBvcHRpb25zKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7CiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0R3JpZERhdGEuY2FsbCh0aGlzLCBwbG90KTsKCiAgICAgICAgICAgIGRhdGEgPSBbXTsKICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGF0YSkgewogICAgICAgICAgICAgICAgZGF0YSA9IG9wdGlvbnMuZGF0YTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICghdGhpcy5fc3RhY2spIHsKICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLmRhdGE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5fcGxvdERhdGE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZ3JpZERhdGEgPSBvcHRpb25zLmdyaWREYXRhIHx8IHRoaXMucmVuZGVyZXIubWFrZUdyaWREYXRhLmNhbGwodGhpcywgZGF0YSwgcGxvdCk7CiAgICAgICAgCiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd1NoYWRvdy5jYWxsKHRoaXMsIHNjdHgsIGdyaWREYXRhLCBvcHRpb25zLCBwbG90KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZm9yIChqPTA7IGo8JC5qcXBsb3QucG9zdERyYXdTZXJpZXNTaGFkb3dIb29rcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAkLmpxcGxvdC5wb3N0RHJhd1Nlcmllc1NoYWRvd0hvb2tzW2pdLmNhbGwodGhpcywgc2N0eCwgb3B0aW9ucyk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHNjdHggPSBvcHRzID0gcGxvdCA9IGogPSBkYXRhID0gZ3JpZERhdGEgPSBudWxsOwogICAgICAgIAogICAgfTsKICAgIAogICAgLy8gdG9nZ2xlcyBzZXJpZXMgZGlzcGxheSBvbiBwbG90LCBlLmcuIHNob3cvaGlkZSBzZXJpZXMKICAgIFNlcmllcy5wcm90b3R5cGUudG9nZ2xlRGlzcGxheSA9IGZ1bmN0aW9uKGV2LCBjYWxsYmFjaykgewogICAgICAgIHZhciBzLCBzcGVlZDsKICAgICAgICBpZiAoZXYuZGF0YS5zZXJpZXMpIHsKICAgICAgICAgICAgcyA9IGV2LmRhdGEuc2VyaWVzOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcyA9IHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoZXYuZGF0YS5zcGVlZCkgewogICAgICAgICAgICBzcGVlZCA9IGV2LmRhdGEuc3BlZWQ7CiAgICAgICAgfQogICAgICAgIGlmIChzcGVlZCkgewogICAgICAgICAgICAvLyB0aGlzIGNhbiBiZSB0cmlja3kgYmVjYXVzZSBzZXJpZXMgbWF5IG5vdCBoYXZlIGEgY2FudmFzIGVsZW1lbnQgaWYgcmVwbG90dGluZy4KICAgICAgICAgICAgaWYgKHMuY2FudmFzLl9lbGVtLmlzKCc6aGlkZGVuJykgfHwgIXMuc2hvdykgewogICAgICAgICAgICAgICAgcy5zaG93ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBzLmNhbnZhcy5fZWxlbS5yZW1vdmVDbGFzcygnanFwbG90LXNlcmllcy1oaWRkZW4nKTsKICAgICAgICAgICAgICAgIGlmIChzLnNoYWRvd0NhbnZhcy5fZWxlbSkgewogICAgICAgICAgICAgICAgICAgIHMuc2hhZG93Q2FudmFzLl9lbGVtLmZhZGVJbihzcGVlZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzLmNhbnZhcy5fZWxlbS5mYWRlSW4oc3BlZWQsIGNhbGxiYWNrKTsKICAgICAgICAgICAgICAgIHMuY2FudmFzLl9lbGVtLm5leHRBbGwoJy5qcXBsb3QtcG9pbnQtbGFiZWwuanFwbG90LXNlcmllcy0nK3MuaW5kZXgpLmZhZGVJbihzcGVlZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzLnNob3cgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICBzLmNhbnZhcy5fZWxlbS5hZGRDbGFzcygnanFwbG90LXNlcmllcy1oaWRkZW4nKTsKICAgICAgICAgICAgICAgIGlmIChzLnNoYWRvd0NhbnZhcy5fZWxlbSkgewogICAgICAgICAgICAgICAgICAgIHMuc2hhZG93Q2FudmFzLl9lbGVtLmZhZGVPdXQoc3BlZWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcy5jYW52YXMuX2VsZW0uZmFkZU91dChzcGVlZCwgY2FsbGJhY2spOwogICAgICAgICAgICAgICAgcy5jYW52YXMuX2VsZW0ubmV4dEFsbCgnLmpxcGxvdC1wb2ludC1sYWJlbC5qcXBsb3Qtc2VyaWVzLScrcy5pbmRleCkuZmFkZU91dChzcGVlZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIHRoaXMgY2FuIGJlIHRyaWNreSBiZWNhdXNlIHNlcmllcyBtYXkgbm90IGhhdmUgYSBjYW52YXMgZWxlbWVudCBpZiByZXBsb3R0aW5nLgogICAgICAgICAgICBpZiAocy5jYW52YXMuX2VsZW0uaXMoJzpoaWRkZW4nKSB8fCAhcy5zaG93KSB7CiAgICAgICAgICAgICAgICBzLnNob3cgPSB0cnVlOwoKICAgICAgICAgICAgICAgIHMuY2FudmFzLl9lbGVtLnJlbW92ZUNsYXNzKCdqcXBsb3Qtc2VyaWVzLWhpZGRlbicpOwogICAgICAgICAgICAgICAgaWYgKHMuc2hhZG93Q2FudmFzLl9lbGVtKSB7CiAgICAgICAgICAgICAgICAgICAgcy5zaGFkb3dDYW52YXMuX2VsZW0uc2hvdygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcy5jYW52YXMuX2VsZW0uc2hvdygwLCBjYWxsYmFjayk7CiAgICAgICAgICAgICAgICBzLmNhbnZhcy5fZWxlbS5uZXh0QWxsKCcuanFwbG90LXBvaW50LWxhYmVsLmpxcGxvdC1zZXJpZXMtJytzLmluZGV4KS5zaG93KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzLnNob3cgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICBzLmNhbnZhcy5fZWxlbS5hZGRDbGFzcygnanFwbG90LXNlcmllcy1oaWRkZW4nKTsKICAgICAgICAgICAgICAgIGlmIChzLnNoYWRvd0NhbnZhcy5fZWxlbSkgewogICAgICAgICAgICAgICAgICAgIHMuc2hhZG93Q2FudmFzLl9lbGVtLmhpZGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHMuY2FudmFzLl9lbGVtLmhpZGUoMCwgY2FsbGJhY2spOwogICAgICAgICAgICAgICAgcy5jYW52YXMuX2VsZW0ubmV4dEFsbCgnLmpxcGxvdC1wb2ludC1sYWJlbC5qcXBsb3Qtc2VyaWVzLScrcy5pbmRleCkuaGlkZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAoKCiAgICAvKioKICAgICAqIENsYXNzOiBHcmlkCiAgICAgKiAKICAgICAqIE9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyaWQgb24gd2hpY2ggdGhlIHBsb3QgaXMgZHJhd24uICBUaGUgZ3JpZCBpbiB0aGlzCiAgICAgKiBjb250ZXh0IGlzIHRoZSBhcmVhIGJvdW5kZWQgYnkgdGhlIGF4ZXMsIHRoZSBhcmVhIHdoaWNoIHdpbGwgY29udGFpbiB0aGUgc2VyaWVzLgogICAgICogTm90ZSwgdGhlIHNlcmllcyBhcmUgZHJhd24gb24gdGhlaXIgb3duIGNhbnZhcy4KICAgICAqIFRoZSBHcmlkIG9iamVjdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5LCBidXQgaXMgY3JlYXRlZCBieSB0aGUgUGxvdCBvYmplY3QuICAKICAgICAqIEdyaWQgcHJvcGVydGllcyBjYW4gYmUgc2V0IG9yIG92ZXJyaWRkZW4gYnkgdGhlIG9wdGlvbnMgcGFzc2VkIGluIGZyb20gdGhlIHVzZXIuCiAgICAgKi8KICAgIGZ1bmN0aW9uIEdyaWQoKSB7CiAgICAgICAgJC5qcXBsb3QuRWxlbUNvbnRhaW5lci5jYWxsKHRoaXMpOwogICAgICAgIC8vIEdyb3VwOiBQcm9wZXJ0aWVzCiAgICAgICAgCiAgICAgICAgLy8gcHJvcDogZHJhd0dyaWRsaW5lcwogICAgICAgIC8vIHdoZXRoZXIgdG8gZHJhdyB0aGUgZ3JpZGxpbmVzIG9uIHRoZSBwbG90LgogICAgICAgIHRoaXMuZHJhd0dyaWRsaW5lcyA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogZ3JpZExpbmVDb2xvcgogICAgICAgIC8vIGNvbG9yIG9mIHRoZSBncmlkIGxpbmVzLgogICAgICAgIHRoaXMuZ3JpZExpbmVDb2xvciA9ICcjY2NjY2NjJzsKICAgICAgICAvLyBwcm9wOiBncmlkTGluZVdpZHRoCiAgICAgICAgLy8gd2lkdGggb2YgdGhlIGdyaWQgbGluZXMuCiAgICAgICAgdGhpcy5ncmlkTGluZVdpZHRoID0gMS4wOwogICAgICAgIC8vIHByb3A6IGJhY2tncm91bmQKICAgICAgICAvLyBjc3Mgc3BlYyBmb3IgdGhlIGJhY2tncm91bmQgY29sb3IuCiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gJyNmZmZkZjYnOwogICAgICAgIC8vIHByb3A6IGJvcmRlckNvbG9yCiAgICAgICAgLy8gY3NzIHNwZWMgZm9yIHRoZSBjb2xvciBvZiB0aGUgZ3JpZCBib3JkZXIuCiAgICAgICAgdGhpcy5ib3JkZXJDb2xvciA9ICcjOTk5OTk5JzsKICAgICAgICAvLyBwcm9wOiBib3JkZXJXaWR0aAogICAgICAgIC8vIHdpZHRoIG9mIHRoZSBib3JkZXIgaW4gcGl4ZWxzLgogICAgICAgIHRoaXMuYm9yZGVyV2lkdGggPSAyLjA7CiAgICAgICAgLy8gcHJvcDogZHJhd0JvcmRlcgogICAgICAgIC8vIFRydWUgdG8gZHJhdyBib3JkZXIgYXJvdW5kIGdyaWQuCiAgICAgICAgdGhpcy5kcmF3Qm9yZGVyID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBzaGFkb3cKICAgICAgICAvLyB3aGV0aGVyIHRvIHNob3cgYSBzaGFkb3cgYmVoaW5kIHRoZSBncmlkLgogICAgICAgIHRoaXMuc2hhZG93ID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBzaGFkb3dBbmdsZQogICAgICAgIC8vIHNoYWRvdyBhbmdsZSBpbiBkZWdyZWVzCiAgICAgICAgdGhpcy5zaGFkb3dBbmdsZSA9IDQ1OwogICAgICAgIC8vIHByb3A6IHNoYWRvd09mZnNldAogICAgICAgIC8vIE9mZnNldCBvZiBlYWNoIHNoYWRvdyBzdHJva2UgZnJvbSB0aGUgYm9yZGVyIGluIHBpeGVscwogICAgICAgIHRoaXMuc2hhZG93T2Zmc2V0ID0gMS41OwogICAgICAgIC8vIHByb3A6IHNoYWRvd1dpZHRoCiAgICAgICAgLy8gd2lkdGggb2YgdGhlIHN0b2tlIGZvciB0aGUgc2hhZG93CiAgICAgICAgdGhpcy5zaGFkb3dXaWR0aCA9IDM7CiAgICAgICAgLy8gcHJvcDogc2hhZG93RGVwdGgKICAgICAgICAvLyBOdW1iZXIgb2YgdGltZXMgc2hhZG93IGlzIHN0cm9rZWQsIGVhY2ggc3Ryb2tlIG9mZnNldCBzaGFkb3dPZmZzZXQgZnJvbSB0aGUgbGFzdC4KICAgICAgICB0aGlzLnNoYWRvd0RlcHRoID0gMzsKICAgICAgICAvLyBwcm9wOiBzaGFkb3dDb2xvcgogICAgICAgIC8vIGFuIG9wdGlvbmFsIGNzcyBjb2xvciBzcGVjIGZvciB0aGUgc2hhZG93IGluICdyZ2JhKG4sIG4sIG4sIG4pJyBmb3JtCiAgICAgICAgdGhpcy5zaGFkb3dDb2xvciA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogc2hhZG93QWxwaGEKICAgICAgICAvLyBBbHBoYSBjaGFubmVsIHRyYW5zcGFyZW5jeSBvZiBzaGFkb3cuICAwID0gdHJhbnNwYXJlbnQuCiAgICAgICAgdGhpcy5zaGFkb3dBbHBoYSA9ICcwLjA3JzsKICAgICAgICB0aGlzLl9sZWZ0OwogICAgICAgIHRoaXMuX3RvcDsKICAgICAgICB0aGlzLl9yaWdodDsKICAgICAgICB0aGlzLl9ib3R0b207CiAgICAgICAgdGhpcy5fd2lkdGg7CiAgICAgICAgdGhpcy5faGVpZ2h0OwogICAgICAgIHRoaXMuX2F4ZXMgPSBbXTsKICAgICAgICAvLyBwcm9wOiByZW5kZXJlcgogICAgICAgIC8vIEluc3RhbmNlIG9mIGEgcmVuZGVyZXIgd2hpY2ggd2lsbCBhY3R1YWxseSByZW5kZXIgdGhlIGdyaWQsCiAgICAgICAgLy8gc2VlIDwkLmpxcGxvdC5DYW52YXNHcmlkUmVuZGVyZXI+LgogICAgICAgIHRoaXMucmVuZGVyZXIgPSAkLmpxcGxvdC5DYW52YXNHcmlkUmVuZGVyZXI7CiAgICAgICAgLy8gcHJvcDogcmVuZGVyZXJPcHRpb25zCiAgICAgICAgLy8gT3B0aW9ucyB0byBwYXNzIG9uIHRvIHRoZSByZW5kZXJlciwKICAgICAgICAvLyBzZWUgPCQuanFwbG90LkNhbnZhc0dyaWRSZW5kZXJlcj4uCiAgICAgICAgdGhpcy5yZW5kZXJlck9wdGlvbnMgPSB7fTsKICAgICAgICB0aGlzLl9vZmZzZXRzID0ge3RvcDpudWxsLCBib3R0b206bnVsbCwgbGVmdDpudWxsLCByaWdodDpudWxsfTsKICAgIH0KICAgIAogICAgR3JpZC5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuRWxlbUNvbnRhaW5lcigpOwogICAgR3JpZC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmlkOwogICAgCiAgICBHcmlkLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCQuaXNGdW5jdGlvbih0aGlzLnJlbmRlcmVyKSkgewogICAgICAgICAgICB0aGlzLnJlbmRlcmVyID0gbmV3IHRoaXMucmVuZGVyZXIoKTsgIAogICAgICAgIH0KICAgICAgICB0aGlzLnJlbmRlcmVyLmluaXQuY2FsbCh0aGlzLCB0aGlzLnJlbmRlcmVyT3B0aW9ucyk7CiAgICB9OwogICAgCiAgICBHcmlkLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24ob2Zmc2V0cyxwbG90KSB7CiAgICAgICAgdGhpcy5fb2Zmc2V0cyA9IG9mZnNldHM7CiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudC5jYWxsKHRoaXMsIHBsb3QpOwogICAgfTsKICAgIAogICAgR3JpZC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMucmVuZGVyZXIuZHJhdy5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuR2VuZXJpY0NhbnZhcyA9IGZ1bmN0aW9uKCkgewogICAgICAgICQuanFwbG90LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTsKICAgICAgICB0aGlzLl9jdHg7ICAKICAgIH07CiAgICAKICAgICQuanFwbG90LkdlbmVyaWNDYW52YXMucHJvdG90eXBlID0gbmV3ICQuanFwbG90LkVsZW1Db250YWluZXIoKTsKICAgICQuanFwbG90LkdlbmVyaWNDYW52YXMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJC5qcXBsb3QuR2VuZXJpY0NhbnZhczsKICAgIAogICAgJC5qcXBsb3QuR2VuZXJpY0NhbnZhcy5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKG9mZnNldHMsIGNsc3MsIHBsb3REaW1lbnNpb25zLCBwbG90KSB7CiAgICAgICAgdGhpcy5fb2Zmc2V0cyA9IG9mZnNldHM7CiAgICAgICAgdmFyIGtsYXNzID0gJ2pxcGxvdCc7CiAgICAgICAgaWYgKGNsc3MgIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGtsYXNzID0gY2xzczsKICAgICAgICB9CiAgICAgICAgdmFyIGVsZW07CgogICAgICAgIGVsZW0gPSBwbG90LmNhbnZhc01hbmFnZXIuZ2V0Q2FudmFzKCk7CiAgICAgICAgCiAgICAgICAgLy8gaWYgbmV3IHBsb3REaW1lbnNpb25zIHN1cHBsaWVkLCB1c2UgdGhlbS4KICAgICAgICBpZiAocGxvdERpbWVuc2lvbnMgIT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLl9wbG90RGltZW5zaW9ucyA9IHBsb3REaW1lbnNpb25zOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBlbGVtLndpZHRoID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSB0aGlzLl9vZmZzZXRzLmxlZnQgLSB0aGlzLl9vZmZzZXRzLnJpZ2h0OwogICAgICAgIGVsZW0uaGVpZ2h0ID0gdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0IC0gdGhpcy5fb2Zmc2V0cy50b3AgLSB0aGlzLl9vZmZzZXRzLmJvdHRvbTsKICAgICAgICB0aGlzLl9lbGVtID0gJChlbGVtKTsKICAgICAgICB0aGlzLl9lbGVtLmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiB0aGlzLl9vZmZzZXRzLmxlZnQsIHRvcDogdGhpcy5fb2Zmc2V0cy50b3AgfSk7CiAgICAgICAgCiAgICAgICAgdGhpcy5fZWxlbS5hZGRDbGFzcyhrbGFzcyk7CiAgICAgICAgCiAgICAgICAgZWxlbSA9IHBsb3QuY2FudmFzTWFuYWdlci5pbml0Q2FudmFzKGVsZW0pOwogICAgICAgIAogICAgICAgIGVsZW0gPSBudWxsOwogICAgICAgIHJldHVybiB0aGlzLl9lbGVtOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuR2VuZXJpY0NhbnZhcy5wcm90b3R5cGUuc2V0Q29udGV4dCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuX2N0eCA9IHRoaXMuX2VsZW0uZ2V0KDApLmdldENvbnRleHQoIjJkIik7CiAgICAgICAgcmV0dXJuIHRoaXMuX2N0eDsKICAgIH07CiAgICAKICAgIC8vIE1lbW9yeSBMZWFrcyBwYXRjaAogICAgJC5qcXBsb3QuR2VuZXJpY0NhbnZhcy5wcm90b3R5cGUucmVzZXRDYW52YXMgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKHRoaXMuX2VsZW0pIHsKICAgICAgICBpZiAoJC5qcXBsb3QudXNlX2V4Y2FudmFzICYmIHdpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIudW5pbml0RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50KHRoaXMuX2VsZW0uZ2V0KDApKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy90aGlzLl9lbGVtLnJlbW92ZSgpOwogICAgICAgIHRoaXMuX2VsZW0uZW1wdHlGb3JjZSgpOwogICAgICB9CiAgICAgIAogICAgICB0aGlzLl9jdHggPSBudWxsOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuSG9va3NNYW5hZ2VyID0gZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMuaG9va3MgPVtdOwogICAgICAgIHRoaXMuYXJncyA9IFtdOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuSG9va3NNYW5hZ2VyLnByb3RvdHlwZS5hZGRPbmNlID0gZnVuY3Rpb24oZm4sIGFyZ3MpIHsKICAgICAgICBhcmdzID0gYXJncyB8fCBbXTsKICAgICAgICB2YXIgaGF2ZWhvb2sgPSBmYWxzZTsKICAgICAgICBmb3IgKHZhciBpPTAsIGw9dGhpcy5ob29rcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmhvb2tzW2ldID09IGZuKSB7CiAgICAgICAgICAgICAgICBoYXZlaG9vayA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFoYXZlaG9vaykgewogICAgICAgICAgICB0aGlzLmhvb2tzLnB1c2goZm4pOwogICAgICAgICAgICB0aGlzLmFyZ3MucHVzaChhcmdzKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5Ib29rc01hbmFnZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGZuLCBhcmdzKSB7CiAgICAgICAgYXJncyA9IGFyZ3MgfHwgW107CiAgICAgICAgdGhpcy5ob29rcy5wdXNoKGZuKTsKICAgICAgICB0aGlzLmFyZ3MucHVzaChhcmdzKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkV2ZW50TGlzdGVuZXJNYW5hZ2VyID0gZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMuaG9va3MgPVtdOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRXZlbnRMaXN0ZW5lck1hbmFnZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbihldiwgZm4pIHsKICAgICAgICB2YXIgaGF2ZWhvb2sgPSBmYWxzZSwgaCwgaTsKICAgICAgICBmb3IgKHZhciBpPTAsIGw9dGhpcy5ob29rcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgICAgIGggPSB0aGlzLmhvb2tzW2ldOwogICAgICAgICAgICBpZiAoaFswXSA9PSBldiAmJiBoWzFdID09IGZuKSB7CiAgICAgICAgICAgICAgICBoYXZlaG9vayA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFoYXZlaG9vaykgewogICAgICAgICAgICB0aGlzLmhvb2tzLnB1c2goW2V2LCBmbl0pOwogICAgICAgIH0KICAgIH07CiAgICAKICAgICQuanFwbG90LkV2ZW50TGlzdGVuZXJNYW5hZ2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihldiwgZm4pIHsKICAgICAgICB0aGlzLmhvb2tzLnB1c2goW2V2LCBmbl0pOwogICAgfTsKCgogICAgdmFyIF9heGlzTmFtZXMgPSBbJ3lNaWRBeGlzJywgJ3hheGlzJywgJ3lheGlzJywgJ3gyYXhpcycsICd5MmF4aXMnLCAneTNheGlzJywgJ3k0YXhpcycsICd5NWF4aXMnLCAneTZheGlzJywgJ3k3YXhpcycsICd5OGF4aXMnLCAneTlheGlzJ107CgogICAgLyoqCiAgICAgKiBDbGFzczoganFQbG90CiAgICAgKiBQbG90IG9iamVjdCByZXR1cm5lZCBieSBjYWxsIHRvICQuanFwbG90LiAgSGFuZGxlcyBwYXJzaW5nIHVzZXIgb3B0aW9ucywKICAgICAqIGNyZWF0aW5nIHN1YiBvYmplY3RzIChBeGVzLCBsZWdlbmQsIHRpdGxlLCBzZXJpZXMpIGFuZCByZW5kZXJpbmcgdGhlIHBsb3QuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGpxUGxvdCgpIHsKICAgICAgICAvLyBHcm91cDogUHJvcGVydGllcwogICAgICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIHNwZWNpZmllZCBhdCB0aGUgdG9wIG9mIHRoZSBvcHRpb25zIG9iamVjdAogICAgICAgIC8vIGxpa2Ugc286CiAgICAgICAgLy8gPiB7CiAgICAgICAgLy8gPiAgICAgYXhlc0RlZmF1bHRzOnttaW46MH0sCiAgICAgICAgLy8gPiAgICAgc2VyaWVzOlt7Y29sb3I6JyM2NjMzZGQnfV0sCiAgICAgICAgLy8gPiAgICAgdGl0bGU6ICdBIFBsb3QnCiAgICAgICAgLy8gPiB9CiAgICAgICAgLy8KCiAgICAgICAgLy8gcHJvcDogYW5pbWF0ZQogICAgICAgIC8vIFRydWUgdG8gYW5pbWF0ZSB0aGUgc2VyaWVzIG9uIGluaXRpYWwgcGxvdCBkcmF3IChyZW5kZXJlciBkZXBlbmRlbnQpLgogICAgICAgIC8vIEFjdHVhbCBhbmltYXRpb24gZnVuY3Rpb25hbGl0eSBtdXN0IGJlIHN1cHBvcnRlZCBpbiB0aGUgcmVuZGVyZXIuCiAgICAgICAgdGhpcy5hbmltYXRlID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogYW5pbWF0ZVJlcGxvdAogICAgICAgIC8vIFRydWUgdG8gYW5pbWF0ZSBzZXJpZXMgYWZ0ZXIgYSBjYWxsIHRvIHRoZSByZXBsb3QoKSBtZXRob2QuCiAgICAgICAgLy8gVXNlIHdpdGggY2F1dGlvbiEgIFJlcGxvdHMgY2FuIGhhcHBlbiB2ZXJ5IGZyZXF1ZW50bHkgdW5kZXIKICAgICAgICAvLyBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgKGUuZy4gcmVzaXppbmcsIGRyYWdnaW5nIHBvaW50cykgYW5kCiAgICAgICAgLy8gYW5pbWF0aW9uIGluIHRoZXNlIHNpdHVhdGlvbnMgY2FuIGNhdXNlIHByb2JsZW1zLgogICAgICAgIHRoaXMuYW5pbWF0ZVJlcGxvdCA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGF4ZXMKICAgICAgICAvLyB1cCB0byA0IGF4ZXMgYXJlIHN1cHBvcnRlZCwgZWFjaCB3aXRoIGl0cyBvd24gb3B0aW9ucywgCiAgICAgICAgLy8gU2VlIDxBeGlzPiBmb3IgYXhpcyBzcGVjaWZpYyBvcHRpb25zLgogICAgICAgIHRoaXMuYXhlcyA9IHt4YXhpczogbmV3IEF4aXMoJ3hheGlzJyksIHlheGlzOiBuZXcgQXhpcygneWF4aXMnKSwgeDJheGlzOiBuZXcgQXhpcygneDJheGlzJyksIHkyYXhpczogbmV3IEF4aXMoJ3kyYXhpcycpLCB5M2F4aXM6IG5ldyBBeGlzKCd5M2F4aXMnKSwgeTRheGlzOiBuZXcgQXhpcygneTRheGlzJyksIHk1YXhpczogbmV3IEF4aXMoJ3k1YXhpcycpLCB5NmF4aXM6IG5ldyBBeGlzKCd5NmF4aXMnKSwgeTdheGlzOiBuZXcgQXhpcygneTdheGlzJyksIHk4YXhpczogbmV3IEF4aXMoJ3k4YXhpcycpLCB5OWF4aXM6IG5ldyBBeGlzKCd5OWF4aXMnKSwgeU1pZEF4aXM6IG5ldyBBeGlzKCd5TWlkQXhpcycpfTsKICAgICAgICB0aGlzLmJhc2VDYW52YXMgPSBuZXcgJC5qcXBsb3QuR2VuZXJpY0NhbnZhcygpOwogICAgICAgIC8vIHRydWUgdG8gaW50ZXJjZXB0IHJpZ2h0IGNsaWNrIGV2ZW50cyBhbmQgZmlyZSBhICdqcXBsb3RSaWdodENsaWNrJyBldmVudC4KICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBibG9jayB0aGUgY29udGV4dCBtZW51LgogICAgICAgIHRoaXMuY2FwdHVyZVJpZ2h0Q2xpY2sgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBkYXRhCiAgICAgICAgLy8gdXNlcidzIGRhdGEuICBEYXRhIHNob3VsZCAqTk9UKiBiZSBzcGVjaWZpZWQgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LAogICAgICAgIC8vIGJ1dCBiZSBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUgJC5qcXBsb3QoKSBmdW5jdGlvbi4KICAgICAgICAvLyBUaGUgZGF0YSBwcm9wZXJ0eSBpcyBkZXNjcmliZWQgaGVyZSBzb2xleSBmb3IgcmVmZXJlbmNlLiAKICAgICAgICAvLyBUaGUgZGF0YSBzaG91bGQgYmUgaW4gdGhlIGZvcm0gb2YgYW4gYXJyYXkgb2YgMkQgb3IgMUQgYXJyYXlzIGxpa2UKICAgICAgICAvLyA+IFsgW1t4MSwgeTFdLCBbeDIsIHkyXSwuLi5dLCBbeTEsIHkyLCAuLi5dIF0uCiAgICAgICAgdGhpcy5kYXRhID0gW107CiAgICAgICAgLy8gcHJvcDogZGF0YVJlbmRlcmVyCiAgICAgICAgLy8gQSBjYWxsYWJsZSB3aGljaCBjYW4gYmUgdXNlZCB0byBwcmVwcm9jZXNzIGRhdGEgcGFzc2VkIGludG8gdGhlIHBsb3QuCiAgICAgICAgLy8gV2lsbCBiZSBjYWxsZWQgd2l0aCAzIGFyZ3VtZW50czogdGhlIHBsb3QgZGF0YSwgYSByZWZlcmVuY2UgdG8gdGhlIHBsb3QsCiAgICAgICAgLy8gYW5kIHRoZSB2YWx1ZSBvZiBkYXRhUmVuZGVyZXJPcHRpb25zLgogICAgICAgIHRoaXMuZGF0YVJlbmRlcmVyOwogICAgICAgIC8vIHByb3A6IGRhdGFSZW5kZXJlck9wdGlvbnMKICAgICAgICAvLyBPcHRpb25zIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGRhdGFSZW5kZXJlci4KICAgICAgICAvLyBDYW4gYmUgb2YgYW55IHR5cGUuCiAgICAgICAgdGhpcy5kYXRhUmVuZGVyZXJPcHRpb25zOwogICAgICAgIHRoaXMuZGVmYXVsdHMgPSB7CiAgICAgICAgICAgIC8vIHByb3A6IGF4ZXNEZWZhdWx0cwogICAgICAgICAgICAvLyBkZWZhdWx0IG9wdGlvbnMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGF4ZXMuCiAgICAgICAgICAgIC8vIHNlZSA8QXhpcz4gZm9yIGF4ZXMgb3B0aW9ucy4KICAgICAgICAgICAgYXhlc0RlZmF1bHRzOiB7fSwKICAgICAgICAgICAgYXhlczoge3hheGlzOnt9LCB5YXhpczp7fSwgeDJheGlzOnt9LCB5MmF4aXM6e30sIHkzYXhpczp7fSwgeTRheGlzOnt9LCB5NWF4aXM6e30sIHk2YXhpczp7fSwgeTdheGlzOnt9LCB5OGF4aXM6e30sIHk5YXhpczp7fSwgeU1pZEF4aXM6e319LAogICAgICAgICAgICAvLyBwcm9wOiBzZXJpZXNEZWZhdWx0cwogICAgICAgICAgICAvLyBkZWZhdWx0IG9wdGlvbnMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIHNlcmllcy4KICAgICAgICAgICAgLy8gc2VlIDxTZXJpZXM+IGZvciBzZXJpZXMgb3B0aW9ucy4KICAgICAgICAgICAgc2VyaWVzRGVmYXVsdHM6IHt9LAogICAgICAgICAgICBzZXJpZXM6W10KICAgICAgICB9OwogICAgICAgIC8vIHByb3A6IGRlZmF1bHRBeGlzU3RhcnQKICAgICAgICAvLyAxLUQgZGF0YSBzZXJpZXMgYXJlIGludGVybmFsbHkgY29udmVydGVkIGludG8gMi1EIFt4LHldIGRhdGEgcG9pbnQgYXJyYXlzCiAgICAgICAgLy8gYnkganFQbG90LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBzdGFydGluZyB2YWx1ZSBmb3IgdGhlIG1pc3NpbmcgeCBvciB5IHZhbHVlLgogICAgICAgIC8vIFRoZSBhZGRlZCBkYXRhIHdpbGwgYmUgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgc2VyaWVzIChlLmcuIFsxLCAyLCAzLCAuLi5dKQogICAgICAgIC8vIHN0YXJ0aW5nIGF0IHRoaXMgdmFsdWUuCiAgICAgICAgdGhpcy5kZWZhdWx0QXhpc1N0YXJ0ID0gMTsKICAgICAgICAvLyB0aGlzLmRvQ3VzdG9tRXZlbnRCaW5kaW5nID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBkcmF3SWZIaWRkZW4KICAgICAgICAvLyBUcnVlIHRvIGV4ZWN1dGUgdGhlIGRyYXcgbWV0aG9kIGV2ZW4gaWYgdGhlIHBsb3QgdGFyZ2V0IGlzIGhpZGRlbi4KICAgICAgICAvLyBHZW5lcmFsbHksIHRoaXMgc2hvdWxkIGJlIGZhbHNlLiAgTW9zdCBwbG90IGVsZW1lbnRzIHdpbGwgbm90IGJlIHNpemVkLwogICAgICAgIC8vIHBvc2l0aW9uZWQgY29ycmVjbHR5IGlmIHJlbmRlcmVyZWQgaW50byBhIGhpZGRlbiBjb250YWluZXIuICBUbyByZW5kZXIgaW50bwogICAgICAgIC8vIGEgaGlkZGVuIGNvbnRhaW5lciwgY2FsbCB0aGUgcmVwbG90IG1ldGhvZCB3aGVuIHRoZSBjb250YWluZXIgaXMgc2hvd24uCiAgICAgICAgdGhpcy5kcmF3SWZIaWRkZW4gPSBmYWxzZTsKICAgICAgICB0aGlzLmV2ZW50Q2FudmFzID0gbmV3ICQuanFwbG90LkdlbmVyaWNDYW52YXMoKTsKICAgICAgICAvLyBwcm9wOiBmaWxsQmV0d2VlbgogICAgICAgIC8vIEZpbGwgYmV0d2VlbiAyIGxpbmUgc2VyaWVzIGluIGEgcGxvdC4KICAgICAgICAvLyBPcHRpb25zIG9iamVjdDoKICAgICAgICAvLyB7CiAgICAgICAgLy8gICAgc2VyaWVzMTogZmlyc3QgaW5kZXggKDAgYmFzZWQpIG9mIHNlcmllcyBpbiBmaWxsCiAgICAgICAgLy8gICAgc2VyaWVzMjogc2Vjb25kIGluZGV4ICgwIGJhc2VkKSBvZiBzZXJpZXMgaW4gZmlsbAogICAgICAgIC8vICAgIGNvbG9yOiBjb2xvciBvZiBmaWxsIFtkZWZhdWx0IGZpbGxDb2xvciBvZiBzZXJpZXMxXQogICAgICAgIC8vICAgIGJhc2VTZXJpZXM6ICBmaWxsIHdpbGwgYmUgZHJhd24gYmVsb3cgdGhpcyBzZXJpZXMgKDAgYmFzZWQgaW5kZXgpCiAgICAgICAgLy8gICAgZmlsbDogZmFsc2UgdG8gdHVybiBvZmYgZmlsbCBbZGVmYXVsdCB0cnVlXS4KICAgICAgICAvLyAgfQogICAgICAgIHRoaXMuZmlsbEJldHdlZW4gPSB7CiAgICAgICAgICAgIHNlcmllczE6IG51bGwsCiAgICAgICAgICAgIHNlcmllczI6IG51bGwsCiAgICAgICAgICAgIGNvbG9yOiBudWxsLAogICAgICAgICAgICBiYXNlU2VyaWVzOiAwLAogICAgICAgICAgICBmaWxsOiB0cnVlCiAgICAgICAgfTsKICAgICAgICAvLyBwcm9wOyBmb250RmFtaWx5CiAgICAgICAgLy8gY3NzIHNwZWMgZm9yIHRoZSBmb250LWZhbWlseSBhdHRyaWJ1dGUuICBEZWZhdWx0IGZvciB0aGUgZW50aXJlIHBsb3QuCiAgICAgICAgdGhpcy5mb250RmFtaWx5OwogICAgICAgIC8vIHByb3A6IGZvbnRTaXplCiAgICAgICAgLy8gY3NzIHNwZWMgZm9yIHRoZSBmb250LXNpemUgYXR0cmlidXRlLiAgRGVmYXVsdCBmb3IgdGhlIGVudGlyZSBwbG90LgogICAgICAgIHRoaXMuZm9udFNpemU7CiAgICAgICAgLy8gcHJvcDogZ3JpZAogICAgICAgIC8vIFNlZSA8R3JpZD4gZm9yIGdyaWQgc3BlY2lmaWMgb3B0aW9ucy4KICAgICAgICB0aGlzLmdyaWQgPSBuZXcgR3JpZCgpOwogICAgICAgIC8vIHByb3A6IGxlZ2VuZAogICAgICAgIC8vIHNlZSA8JC5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlcj4KICAgICAgICB0aGlzLmxlZ2VuZCA9IG5ldyBMZWdlbmQoKTsKICAgICAgICAvLyBwcm9wOiBub0RhdGFJbmRpY2F0b3IKICAgICAgICAvLyBPcHRpb25zIHRvIHNldCB1cCBhIG1vY2sgcGxvdCB3aXRoIGEgZGF0YSBsb2FkaW5nIGluZGljYXRvciBpZiBubyBkYXRhIGlzIHNwZWNpZmllZC4KICAgICAgICB0aGlzLm5vRGF0YUluZGljYXRvciA9IHsgICAgCiAgICAgICAgICAgIHNob3c6IGZhbHNlLAogICAgICAgICAgICBpbmRpY2F0b3I6ICdMb2FkaW5nIERhdGEuLi4nLAogICAgICAgICAgICBheGVzOiB7CiAgICAgICAgICAgICAgICB4YXhpczogewogICAgICAgICAgICAgICAgICAgIG1pbjogMCwKICAgICAgICAgICAgICAgICAgICBtYXg6IDEwLAogICAgICAgICAgICAgICAgICAgIHRpY2tJbnRlcnZhbDogMiwKICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgICAgICAgICBtaW46IDAsCiAgICAgICAgICAgICAgICAgICAgbWF4OiAxMiwKICAgICAgICAgICAgICAgICAgICB0aWNrSW50ZXJ2YWw6IDMsCiAgICAgICAgICAgICAgICAgICAgc2hvdzogdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAvLyBwcm9wOiBuZWdhdGl2ZVNlcmllc0NvbG9ycyAKICAgICAgICAvLyBjb2xvcnMgdG8gdXNlIGZvciBwb3J0aW9ucyBvZiB0aGUgbGluZSBiZWxvdyB6ZXJvLgogICAgICAgIHRoaXMubmVnYXRpdmVTZXJpZXNDb2xvcnMgPSAkLmpxcGxvdC5jb25maWcuZGVmYXVsdE5lZ2F0aXZlQ29sb3JzOwogICAgICAgIC8vIGNvbnRhaW5lciB0byBob2xkIGFsbCBvZiB0aGUgbWVyZ2VkIG9wdGlvbnMuICBDb252aWVuZW5jZSBmb3IgcGx1Z2lucy4KICAgICAgICB0aGlzLm9wdGlvbnMgPSB7fTsKICAgICAgICB0aGlzLnByZXZpb3VzU2VyaWVzU3RhY2sgPSBbXTsKICAgICAgICAvLyBOYW1lc3BhY2UgdG8gaG9sZCBwbHVnaW5zLiAgR2VuZXJhbGx5IG5vbi1yZW5kZXJlciBwbHVnaW5zIGFkZCB0aGVtc2VsdmVzIHRvIGhlcmUuCiAgICAgICAgdGhpcy5wbHVnaW5zID0ge307CiAgICAgICAgLy8gcHJvcDogc2VyaWVzCiAgICAgICAgLy8gQXJyYXkgb2Ygc2VyaWVzIG9iamVjdCBvcHRpb25zLgogICAgICAgIC8vIHNlZSA8U2VyaWVzPiBmb3Igc2VyaWVzIHNwZWNpZmljIG9wdGlvbnMuCiAgICAgICAgdGhpcy5zZXJpZXMgPSBbXTsKICAgICAgICAvLyBhcnJheSBvZiBzZXJpZXMgaW5kaWNlcy4gS2VlcCB0cmFjayBvZiBvcmRlcgogICAgICAgIC8vIHdoaWNoIHNlcmllcyBjYW52YXNlcyBhcmUgZGlzcGxheWVkLCBsb3dlc3QKICAgICAgICAvLyB0byBoaWdoZXN0LCBiYWNrIHRvIGZyb250LgogICAgICAgIHRoaXMuc2VyaWVzU3RhY2sgPSBbXTsKICAgICAgICAvLyBwcm9wOiBzZXJpZXNDb2xvcnMKICAgICAgICAvLyBBbm4gYXJyYXkgb2YgQ1NTIGNvbG9yIHNwZWNpZmljYXRpb25zIHRoYXQgd2lsbCBiZSBhcHBsaWVkLCBpbiBvcmRlciwKICAgICAgICAvLyB0byB0aGUgc2VyaWVzIGluIHRoZSBwbG90LiAgQ29sb3JzIHdpbGwgd3JhcCBhcm91bmQgc28sIGlmIHRoZWlyCiAgICAgICAgLy8gYXJlIG1vcmUgc2VyaWVzIHRoYW4gY29sb3JzLCBjb2xvcnMgd2lsbCBiZSByZXVzZWQgc3RhcnRpbmcgYXQgdGhlCiAgICAgICAgLy8gYmVnaW5uaW5nLiAgRm9yIHBpZSBjaGFydHMsIHRoaXMgc3BlY2lmaWVzIHRoZSBjb2xvcnMgb2YgdGhlIHNsaWNlcy4KICAgICAgICB0aGlzLnNlcmllc0NvbG9ycyA9ICQuanFwbG90LmNvbmZpZy5kZWZhdWx0Q29sb3JzOwogICAgICAgIC8vIHByb3A6IHNvcnREYXRhCiAgICAgICAgLy8gZmFsc2UgdG8gbm90IHNvcnQgdGhlIGRhdGEgcGFzc2VkIGluIGJ5IHRoZSB1c2VyLgogICAgICAgIC8vIE1hbnkgYmFyLCBzdGFja2VkIGFuZCBvdGhlciBncmFwaHMgYXMgd2VsbCBhcyBtYW55IHBsdWdpbnMgZGVwZW5kIG9uCiAgICAgICAgLy8gaGF2aW5nIHNvcnRlZCBkYXRhLgogICAgICAgIHRoaXMuc29ydERhdGEgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IHN0YWNrU2VyaWVzCiAgICAgICAgLy8gdHJ1ZSBvciBmYWxzZSwgY3JlYXRlcyBhIHN0YWNrIG9yICJtb3VudGFpbiIgcGxvdC4KICAgICAgICAvLyBOb3QgYWxsIHNlcmllcyByZW5kZXJlcnMgbWF5IGltcGxlbWVudCB0aGlzIG9wdGlvbi4KICAgICAgICB0aGlzLnN0YWNrU2VyaWVzID0gZmFsc2U7CiAgICAgICAgLy8gYSBzaG9ydGN1dCBmb3IgYXhpcyBzeW5jVGlja3Mgb3B0aW9ucy4gIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCiAgICAgICAgdGhpcy5zeW5jWFRpY2tzID0gdHJ1ZTsKICAgICAgICAvLyBhIHNob3J0Y3V0IGZvciBheGlzIHN5bmNUaWNrcyBvcHRpb25zLiAgTm90IGltcGxlbWVudGVkIHlldC4KICAgICAgICB0aGlzLnN5bmNZVGlja3MgPSB0cnVlOwogICAgICAgIC8vIHRoZSBqcXVlcnkgb2JqZWN0IGZvciB0aGUgZG9tIHRhcmdldC4KICAgICAgICB0aGlzLnRhcmdldCA9IG51bGw7IAogICAgICAgIC8vIFRoZSBpZCBvZiB0aGUgZG9tIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSBwbG90IGludG8KICAgICAgICB0aGlzLnRhcmdldElkID0gbnVsbDsKICAgICAgICAvLyBwcm9wIHRleHRDb2xvcgogICAgICAgIC8vIGNzcyBzcGVjIGZvciB0aGUgY3NzIGNvbG9yIGF0dHJpYnV0ZS4gIERlZmF1bHQgZm9yIHRoZSBlbnRpcmUgcGxvdC4KICAgICAgICB0aGlzLnRleHRDb2xvcjsKICAgICAgICAvLyBwcm9wOiB0aXRsZQogICAgICAgIC8vIFRpdGxlIG9iamVjdC4gIFNlZSA8VGl0bGU+IGZvciBzcGVjaWZpYyBvcHRpb25zLiAgQXMgYSBzaG9ydGN1dCwgeW91CiAgICAgICAgLy8gY2FuIHNwZWNpZnkgdGhlIHRpdGxlIG9wdGlvbiBhcyBqdXN0IGEgc3RyaW5nIGxpa2U6IHRpdGxlOiAnTXkgUGxvdCcKICAgICAgICAvLyBhbmQgdGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyB0aXRsZSBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHRleHQuCiAgICAgICAgdGhpcy50aXRsZSA9IG5ldyBUaXRsZSgpOwogICAgICAgIC8vIENvdW50IGhvdyBtYW55IHRpbWVzIHRoZSBkcmF3IG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgd2hpbGUgdGhlIHBsb3QgaXMgdmlzaWJsZS4KICAgICAgICAvLyBNb3N0bHkgdXNlZCB0byB0ZXN0IGlmIHBsb3QgaGFzIG5ldmVyIGJlZW4gZHJhbiAoPTApLCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZHJhd24KICAgICAgICAvLyBpbnRvIGEgdmlzaWJsZSBjb250YWluZXIgb25jZSAoPTEpIG9yIGRyYXcgbW9yZSB0aGFuIG9uY2UgaW50byBhIHZpc2libGUgY29udGFpbmVyLgogICAgICAgIC8vIENhbiB1c2UgdGhpcyBpbiB0ZXN0cyB0byBzZWUgaWYgcGxvdCBoYXMgYmVlbiB2aXNpYmx5IGRyYXduIGF0IGxlYXN0IG9uZSB0aW1lLgogICAgICAgIC8vIEFmdGVyIHBsb3QgaGFzIGJlZW4gdmlzaWJseSBkcmF3biBvbmNlLCBpdCBnZW5lcmFsbHkgZG9lc24ndCBuZWVkIHJlZHJhd2luZyBpZiBpdHMKICAgICAgICAvLyBjb250YWluZXIgaXMgaGlkZGVuIGFuZCBzaG93bi4KICAgICAgICB0aGlzLl9kcmF3Q291bnQgPSAwOwogICAgICAgIC8vIHN1bSBvZiB5IHZhbHVlcyBmb3IgYWxsIHNlcmllcyBpbiBwbG90LgogICAgICAgIC8vIHVzZWQgaW4gbWVra28gY2hhcnQuCiAgICAgICAgdGhpcy5fc3VteSA9IDA7CiAgICAgICAgdGhpcy5fc3VteCA9IDA7CiAgICAgICAgLy8gYXJyYXkgdG8gaG9sZCB0aGUgY3VtdWxhdGl2ZSBzdGFja2VkIHNlcmllcyBkYXRhLgogICAgICAgIC8vIHVzZWQgdG8gYWp1c3QgdGhlIGluZGl2aWR1YWwgc2VyaWVzIGRhdGEsIHdoaWNoIHdvbid0IGhhdmUgYWNjZXNzIHRvIG90aGVyCiAgICAgICAgLy8gc2VyaWVzIGRhdGEuCiAgICAgICAgdGhpcy5fc3RhY2tEYXRhID0gW107CiAgICAgICAgLy8gYXJyYXkgdGhhdCBob2xkcyB0aGUgZGF0YSB0byBiZSBwbG90dGVkLiBUaGlzIHdpbGwgYmUgdGhlIHNlcmllcyBkYXRhCiAgICAgICAgLy8gbWVyZ2VkIHdpdGggdGhlIHRoZSBhcHByb3ByaWF0ZSBkYXRhIGZyb20gX3N0YWNrRGF0YSBhY2NvcmRpbmcgdG8gdGhlIHN0YWNrQXhpcy4KICAgICAgICB0aGlzLl9wbG90RGF0YSA9IFtdOwogICAgICAgIHRoaXMuX3dpZHRoID0gbnVsbDsKICAgICAgICB0aGlzLl9oZWlnaHQgPSBudWxsOyAKICAgICAgICB0aGlzLl9wbG90RGltZW5zaW9ucyA9IHtoZWlnaHQ6bnVsbCwgd2lkdGg6bnVsbH07CiAgICAgICAgdGhpcy5fZ3JpZFBhZGRpbmcgPSB7dG9wOm51bGwsIHJpZ2h0Om51bGwsIGJvdHRvbTpudWxsLCBsZWZ0Om51bGx9OwogICAgICAgIHRoaXMuX2RlZmF1bHRHcmlkUGFkZGluZyA9IHt0b3A6MTAsIHJpZ2h0OjEwLCBib3R0b206MjMsIGxlZnQ6MTB9OwoKICAgICAgICB0aGlzLl9hZGREb21SZWZlcmVuY2UgPSAkLmpxcGxvdC5jb25maWcuYWRkRG9tUmVmZXJlbmNlOwoKICAgICAgICB0aGlzLnByZUluaXRIb29rcyA9IG5ldyAkLmpxcGxvdC5Ib29rc01hbmFnZXIoKTsKICAgICAgICB0aGlzLnBvc3RJbml0SG9va3MgPSBuZXcgJC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7CiAgICAgICAgdGhpcy5wcmVQYXJzZU9wdGlvbnNIb29rcyA9IG5ldyAkLmpxcGxvdC5Ib29rc01hbmFnZXIoKTsKICAgICAgICB0aGlzLnBvc3RQYXJzZU9wdGlvbnNIb29rcyA9IG5ldyAkLmpxcGxvdC5Ib29rc01hbmFnZXIoKTsKICAgICAgICB0aGlzLnByZURyYXdIb29rcyA9IG5ldyAkLmpxcGxvdC5Ib29rc01hbmFnZXIoKTsKICAgICAgICB0aGlzLnBvc3REcmF3SG9va3MgPSBuZXcgJC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7CiAgICAgICAgdGhpcy5wcmVEcmF3U2VyaWVzSG9va3MgPSBuZXcgJC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7CiAgICAgICAgdGhpcy5wb3N0RHJhd1Nlcmllc0hvb2tzID0gbmV3ICQuanFwbG90Lkhvb2tzTWFuYWdlcigpOwogICAgICAgIHRoaXMucHJlRHJhd0xlZ2VuZEhvb2tzID0gbmV3ICQuanFwbG90Lkhvb2tzTWFuYWdlcigpOwogICAgICAgIHRoaXMuYWRkTGVnZW5kUm93SG9va3MgPSBuZXcgJC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7CiAgICAgICAgdGhpcy5wcmVTZXJpZXNJbml0SG9va3MgPSBuZXcgJC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7CiAgICAgICAgdGhpcy5wb3N0U2VyaWVzSW5pdEhvb2tzID0gbmV3ICQuanFwbG90Lkhvb2tzTWFuYWdlcigpOwogICAgICAgIHRoaXMucHJlUGFyc2VTZXJpZXNPcHRpb25zSG9va3MgPSBuZXcgJC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7CiAgICAgICAgdGhpcy5wb3N0UGFyc2VTZXJpZXNPcHRpb25zSG9va3MgPSBuZXcgJC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7CiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVySG9va3MgPSBuZXcgJC5qcXBsb3QuRXZlbnRMaXN0ZW5lck1hbmFnZXIoKTsKICAgICAgICB0aGlzLnByZURyYXdTZXJpZXNTaGFkb3dIb29rcyA9IG5ldyAkLmpxcGxvdC5Ib29rc01hbmFnZXIoKTsKICAgICAgICB0aGlzLnBvc3REcmF3U2VyaWVzU2hhZG93SG9va3MgPSBuZXcgJC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5jb2xvckdlbmVyYXRvciA9IG5ldyAkLmpxcGxvdC5Db2xvckdlbmVyYXRvcigpOwogICAgICAgIHRoaXMubmVnYXRpdmVDb2xvckdlbmVyYXRvciA9IG5ldyAkLmpxcGxvdC5Db2xvckdlbmVyYXRvcigpOwoKICAgICAgICB0aGlzLmNhbnZhc01hbmFnZXIgPSBuZXcgJC5qcXBsb3QuQ2FudmFzTWFuYWdlcigpOwoKICAgICAgICB0aGlzLnRoZW1lRW5naW5lID0gbmV3ICQuanFwbG90LlRoZW1lRW5naW5lKCk7CiAgICAgICAgCiAgICAgICAgdmFyIHNlcmllc0NvbG9yc0luZGV4ID0gMDsKCiAgICAgICAgLy8gR3JvdXA6IG1ldGhvZHMKICAgICAgICAvLwogICAgICAgIC8vIG1ldGhvZDogaW5pdAogICAgICAgIC8vIHNldHMgdGhlIHBsb3QgdGFyZ2V0LCBjaGVja3MgZGF0YSBhbmQgYXBwbGllcyB1c2VyCiAgICAgICAgLy8gb3B0aW9ucyB0byBwbG90LgogICAgICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKHRhcmdldCwgZGF0YSwgb3B0aW9ucykgewogICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPCQuanFwbG90LnByZUluaXRIb29rcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgJC5qcXBsb3QucHJlSW5pdEhvb2tzW2ldLmNhbGwodGhpcywgdGFyZ2V0LCBkYXRhLCBvcHRpb25zKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMucHJlSW5pdEhvb2tzLmhvb2tzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB0aGlzLnByZUluaXRIb29rcy5ob29rc1tpXS5jYWxsKHRoaXMsIHRhcmdldCwgZGF0YSwgb3B0aW9ucyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMudGFyZ2V0SWQgPSAnIycrdGFyZ2V0OwogICAgICAgICAgICB0aGlzLnRhcmdldCA9ICQoJyMnK3RhcmdldCk7CgogICAgICAgICAgICAvLy8vLy8KICAgICAgICAgICAgLy8gQWRkIGEgcmVmZXJlbmNlIHRvIHBsb3QKICAgICAgICAgICAgLy8vLy8vCiAgICAgICAgICAgIGlmICh0aGlzLl9hZGREb21SZWZlcmVuY2UpIHsKICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmRhdGEoJ2pxcGxvdCcsIHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIHJlbW92ZSBhbnkgZXJyb3IgY2xhc3MgdGhhdCBtYXkgYmUgc3R1Y2sgb24gdGFyZ2V0LgogICAgICAgICAgICB0aGlzLnRhcmdldC5yZW1vdmVDbGFzcygnanFwbG90LWVycm9yJyk7CiAgICAgICAgICAgIGlmICghdGhpcy50YXJnZXQuZ2V0KDApKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIHBsb3QgdGFyZ2V0IHNwZWNpZmllZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIHRhcmdldCBpcyBwb3NpdGlvbmVkIGJ5IHNvbWUgbWVhbnMgYW5kIHNldCBjc3MKICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0LmNzcygncG9zaXRpb24nKSA9PSAnc3RhdGljJykgewogICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuY3NzKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghdGhpcy50YXJnZXQuaGFzQ2xhc3MoJ2pxcGxvdC10YXJnZXQnKSkgewogICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuYWRkQ2xhc3MoJ2pxcGxvdC10YXJnZXQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gaWYgbm8gaGVpZ2h0IG9yIHdpZHRoIHNwZWNpZmllZCwgdXNlIGEgZGVmYXVsdC4KICAgICAgICAgICAgaWYgKCF0aGlzLnRhcmdldC5oZWlnaHQoKSkgewogICAgICAgICAgICAgICAgdmFyIGg7CiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmhlaWdodCkgewogICAgICAgICAgICAgICAgICAgIGggPSBwYXJzZUludChvcHRpb25zLmhlaWdodCwgMTApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50YXJnZXQuYXR0cignZGF0YS1oZWlnaHQnKSkgewogICAgICAgICAgICAgICAgICAgIGggPSBwYXJzZUludCh0aGlzLnRhcmdldC5hdHRyKCdkYXRhLWhlaWdodCcpLCAxMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBoID0gcGFyc2VJbnQoJC5qcXBsb3QuY29uZmlnLmRlZmF1bHRIZWlnaHQsIDEwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IGg7CiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5jc3MoJ2hlaWdodCcsIGgrJ3B4Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoID0gdGhpcy50YXJnZXQuaGVpZ2h0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCF0aGlzLnRhcmdldC53aWR0aCgpKSB7CiAgICAgICAgICAgICAgICB2YXIgdzsKICAgICAgICAgICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMud2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICB3ID0gcGFyc2VJbnQob3B0aW9ucy53aWR0aCwgMTApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50YXJnZXQuYXR0cignZGF0YS13aWR0aCcpKSB7CiAgICAgICAgICAgICAgICAgICAgdyA9IHBhcnNlSW50KHRoaXMudGFyZ2V0LmF0dHIoJ2RhdGEtd2lkdGgnKSwgMTApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdyA9IHBhcnNlSW50KCQuanFwbG90LmNvbmZpZy5kZWZhdWx0V2lkdGgsIDEwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdzsKICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmNzcygnd2lkdGgnLCB3KydweCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB3ID0gdGhpcy50YXJnZXQud2lkdGgoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh2YXIgaT0wLCBsPV9heGlzTmFtZXMubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgdGhpcy5heGVzW19heGlzTmFtZXNbaV1dID0gbmV3IEF4aXMoX2F4aXNOYW1lc1tpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCA9IHRoaXMuX2hlaWdodDsKICAgICAgICAgICAgdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggPSB0aGlzLl93aWR0aDsKICAgICAgICAgICAgdGhpcy5ncmlkLl9wbG90RGltZW5zaW9ucyA9IHRoaXMuX3Bsb3REaW1lbnNpb25zOwogICAgICAgICAgICB0aGlzLnRpdGxlLl9wbG90RGltZW5zaW9ucyA9IHRoaXMuX3Bsb3REaW1lbnNpb25zOwogICAgICAgICAgICB0aGlzLmJhc2VDYW52YXMuX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CiAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CiAgICAgICAgICAgIHRoaXMubGVnZW5kLl9wbG90RGltZW5zaW9ucyA9IHRoaXMuX3Bsb3REaW1lbnNpb25zOwogICAgICAgICAgICBpZiAodGhpcy5faGVpZ2h0IDw9MCB8fCB0aGlzLl93aWR0aCA8PTAgfHwgIXRoaXMuX2hlaWdodCB8fCAhdGhpcy5fd2lkdGgpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2FudmFzIGRpbWVuc2lvbiBub3Qgc2V0Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChvcHRpb25zLmRhdGFSZW5kZXJlciAmJiAkLmlzRnVuY3Rpb24ob3B0aW9ucy5kYXRhUmVuZGVyZXIpKSB7CiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kYXRhUmVuZGVyZXJPcHRpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUmVuZGVyZXJPcHRpb25zID0gb3B0aW9ucy5kYXRhUmVuZGVyZXJPcHRpb25zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5kYXRhUmVuZGVyZXIgPSBvcHRpb25zLmRhdGFSZW5kZXJlcjsKICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLmRhdGFSZW5kZXJlcihkYXRhLCB0aGlzLCB0aGlzLmRhdGFSZW5kZXJlck9wdGlvbnMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAob3B0aW9ucy5ub0RhdGFJbmRpY2F0b3IgJiYgJC5pc1BsYWluT2JqZWN0KG9wdGlvbnMubm9EYXRhSW5kaWNhdG9yKSkgewogICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcy5ub0RhdGFJbmRpY2F0b3IsIG9wdGlvbnMubm9EYXRhSW5kaWNhdG9yKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCAkLmlzQXJyYXkoZGF0YSkgPT0gZmFsc2UgfHwgZGF0YS5sZW5ndGggPT0gMCB8fCAkLmlzQXJyYXkoZGF0YVswXSkgPT0gZmFsc2UgfHwgZGF0YVswXS5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAodGhpcy5ub0RhdGFJbmRpY2F0b3Iuc2hvdyA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gZGF0YSBzcGVjaWZpZWQiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSB0byBiZSBkZXNjcnVjdGl2ZSBoZXJlIGluIG9yZGVyIGZvciBwbG90IHRvIG5vdCB0cnkgYW5kIHJlbmRlciBzZXJpZXMuCiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0ICQuanFwbG90KCkgd2lsbCBoYXZlIHRvIGJlIGNhbGxlZCBhZ2FpbiB3aGVuIHRoZXJlIGlzIGRhdGEuCiAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgb3B0aW9ucy5zZXJpZXM7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYXggaW4gdGhpcy5ub0RhdGFJbmRpY2F0b3IuYXhlcykgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHRoaXMubm9EYXRhSW5kaWNhdG9yLmF4ZXNbYXhdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF4ZXNbYXhdW3Byb3BdID0gdGhpcy5ub0RhdGFJbmRpY2F0b3IuYXhlc1theF1bcHJvcF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3N0RHJhd0hvb2tzLmFkZChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVoID0gdGhpcy5ldmVudENhbnZhcy5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV3ID0gdGhpcy5ldmVudENhbnZhcy5nZXRXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9ICQoJzxkaXYgY2xhc3M9ImpxcGxvdC1ub0RhdGEtY29udGFpbmVyIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij48L2Rpdj4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuYXBwZW5kKHRlbXApOwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLmhlaWdodChlaCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAud2lkdGgoZXcpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLmNzcygndG9wJywgdGhpcy5ldmVudENhbnZhcy5fb2Zmc2V0cy50b3ApOwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLmNzcygnbGVmdCcsIHRoaXMuZXZlbnRDYW52YXMuX29mZnNldHMubGVmdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcDIgPSAkKCc8ZGl2IGNsYXNzPSJqcXBsb3Qtbm9EYXRhLWNvbnRlbnRzIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7IHBvc2l0aW9uOnJlbGF0aXZlOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiPjwvZGl2PicpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLmFwcGVuZCh0ZW1wMik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAyLmh0bWwodGhpcy5ub0RhdGFJbmRpY2F0b3IuaW5kaWNhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRoID0gdGVtcDIuaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0dyA9IHRlbXAyLndpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAyLmhlaWdodCh0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAyLndpZHRoKHR3KTsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcDIuY3NzKCd0b3AnLCAoZWggLSB0aCkvMiArICdweCcpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gbWFrZSBhIGNvcHkgb2YgdGhlIGRhdGEKICAgICAgICAgICAgdGhpcy5kYXRhID0gJC5leHRlbmQodHJ1ZSwgW10sIGRhdGEpOwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5wYXJzZU9wdGlvbnMob3B0aW9ucyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAodGhpcy50ZXh0Q29sb3IpIHsKICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmNzcygnY29sb3InLCB0aGlzLnRleHRDb2xvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuZm9udEZhbWlseSkgewogICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuY3NzKCdmb250LWZhbWlseScsIHRoaXMuZm9udEZhbWlseSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuZm9udFNpemUpIHsKICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmNzcygnZm9udC1zaXplJywgdGhpcy5mb250U2l6ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMudGl0bGUuaW5pdCgpOwogICAgICAgICAgICB0aGlzLmxlZ2VuZC5pbml0KCk7CiAgICAgICAgICAgIHRoaXMuX3N1bXkgPSAwOwogICAgICAgICAgICB0aGlzLl9zdW14ID0gMDsKICAgICAgICAgICAgdGhpcy5jb21wdXRlUGxvdERhdGEoKTsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMuc2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAvLyBzZXQgZGVmYXVsdCBzdGFja2luZyBvcmRlciBmb3Igc2VyaWVzIGNhbnZhc2VzCiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc1N0YWNrLnB1c2goaSk7CiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzU2VyaWVzU3RhY2sucHVzaChpKTsKICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzW2ldLnNoYWRvd0NhbnZhcy5fcGxvdERpbWVuc2lvbnMgPSB0aGlzLl9wbG90RGltZW5zaW9uczsKICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzW2ldLmNhbnZhcy5fcGxvdERpbWVuc2lvbnMgPSB0aGlzLl9wbG90RGltZW5zaW9uczsKICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajwkLmpxcGxvdC5wcmVTZXJpZXNJbml0SG9va3MubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAkLmpxcGxvdC5wcmVTZXJpZXNJbml0SG9va3Nbal0uY2FsbCh0aGlzLnNlcmllc1tpXSwgdGFyZ2V0LCB0aGlzLmRhdGEsIHRoaXMub3B0aW9ucy5zZXJpZXNEZWZhdWx0cywgdGhpcy5vcHRpb25zLnNlcmllc1tpXSwgdGhpcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8dGhpcy5wcmVTZXJpZXNJbml0SG9va3MuaG9va3MubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnByZVNlcmllc0luaXRIb29rcy5ob29rc1tqXS5jYWxsKHRoaXMuc2VyaWVzW2ldLCB0YXJnZXQsIHRoaXMuZGF0YSwgdGhpcy5vcHRpb25zLnNlcmllc0RlZmF1bHRzLCB0aGlzLm9wdGlvbnMuc2VyaWVzW2ldLCB0aGlzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIHRoaXMucG9wdWxhdGVQbG90RGF0YSh0aGlzLnNlcmllc1tpXSwgaSk7CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc1tpXS5fcGxvdERpbWVuc2lvbnMgPSB0aGlzLl9wbG90RGltZW5zaW9uczsKICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzW2ldLmluaXQoaSwgdGhpcy5ncmlkLmJvcmRlcldpZHRoLCB0aGlzKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajwkLmpxcGxvdC5wb3N0U2VyaWVzSW5pdEhvb2tzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgJC5qcXBsb3QucG9zdFNlcmllc0luaXRIb29rc1tqXS5jYWxsKHRoaXMuc2VyaWVzW2ldLCB0YXJnZXQsIHRoaXMuZGF0YSwgdGhpcy5vcHRpb25zLnNlcmllc0RlZmF1bHRzLCB0aGlzLm9wdGlvbnMuc2VyaWVzW2ldLCB0aGlzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajx0aGlzLnBvc3RTZXJpZXNJbml0SG9va3MuaG9va3MubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc3RTZXJpZXNJbml0SG9va3MuaG9va3Nbal0uY2FsbCh0aGlzLnNlcmllc1tpXSwgdGFyZ2V0LCB0aGlzLmRhdGEsIHRoaXMub3B0aW9ucy5zZXJpZXNEZWZhdWx0cywgdGhpcy5vcHRpb25zLnNlcmllc1tpXSwgdGhpcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLl9zdW15ICs9IHRoaXMuc2VyaWVzW2ldLl9zdW15OwogICAgICAgICAgICAgICAgdGhpcy5fc3VteCArPSB0aGlzLnNlcmllc1tpXS5fc3VteDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIG5hbWUsCiAgICAgICAgICAgICAgICBheGlzOwogICAgICAgICAgICBmb3IgKHZhciBpPTAsIGw9X2F4aXNOYW1lcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgICAgICAgICBuYW1lID0gX2F4aXNOYW1lc1tpXTsKICAgICAgICAgICAgICAgIGF4aXMgPSB0aGlzLmF4ZXNbbmFtZV07CiAgICAgICAgICAgICAgICBheGlzLl9wbG90RGltZW5zaW9ucyA9IHRoaXMuX3Bsb3REaW1lbnNpb25zOwogICAgICAgICAgICAgICAgYXhpcy5pbml0KCk7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5heGVzW25hbWVdLmJvcmRlckNvbG9yID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgIT09ICd4JyAmJiBheGlzLnVzZVNlcmllc0NvbG9yID09PSB0cnVlICYmIGF4aXMuc2hvdykgewogICAgICAgICAgICAgICAgICAgICAgICBheGlzLmJvcmRlckNvbG9yID0gYXhpcy5fc2VyaWVzWzBdLmNvbG9yOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXhpcy5ib3JkZXJDb2xvciA9IHRoaXMuZ3JpZC5ib3JkZXJDb2xvcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLnNvcnREYXRhKSB7CiAgICAgICAgICAgICAgICBzb3J0RGF0YSh0aGlzLnNlcmllcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5ncmlkLmluaXQoKTsKICAgICAgICAgICAgdGhpcy5ncmlkLl9heGVzID0gdGhpcy5heGVzOwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5sZWdlbmQuX3NlcmllcyA9IHRoaXMuc2VyaWVzOwoKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPCQuanFwbG90LnBvc3RJbml0SG9va3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICQuanFwbG90LnBvc3RJbml0SG9va3NbaV0uY2FsbCh0aGlzLCB0YXJnZXQsIHRoaXMuZGF0YSwgb3B0aW9ucyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnBvc3RJbml0SG9va3MuaG9va3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHRoaXMucG9zdEluaXRIb29rcy5ob29rc1tpXS5jYWxsKHRoaXMsIHRhcmdldCwgdGhpcy5kYXRhLCBvcHRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgIH07ICAKICAgICAgICAKICAgICAgICAvLyBtZXRob2Q6IHJlc2V0QXhlc1NjYWxlCiAgICAgICAgLy8gUmVzZXQgdGhlIHNwZWNpZmllZCBheGVzIG1pbiwgbWF4LCBudW1iZXJUaWNrcyBhbmQgdGlja0ludGVydmFsIHByb3BlcnRpZXMgdG8gbnVsbAogICAgICAgIC8vIG9yIHJlc2V0IHRoZXNlIHByb3BlcnRpZXMgb24gYWxsIGF4ZXMgaWYgbm8gbGlzdCBvZiBheGVzIGlzIHByb3ZpZGVkLgogICAgICAgIC8vCiAgICAgICAgLy8gUGFyYW1ldGVyczoKICAgICAgICAvLyBheGVzIC0gQm9vbGVhbiB0byByZXNldCBvciBub3QgcmVzZXQgYWxsIGF4ZXMgb3IgYW4gYXJyYXkgb3Igb2JqZWN0IG9mIGF4aXMgbmFtZXMgdG8gcmVzZXQuCiAgICAgICAgdGhpcy5yZXNldEF4ZXNTY2FsZSA9IGZ1bmN0aW9uKGF4ZXMsIG9wdGlvbnMpIHsKICAgICAgICAgICAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgICAgICB2YXIgYXggPSBheGVzIHx8IHRoaXMuYXhlczsKICAgICAgICAgICAgaWYgKGF4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBheCA9IHRoaXMuYXhlczsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJC5pc0FycmF5KGF4KSkgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBheC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuYXhlc1theFtpXV0ucmVzZXRTY2FsZShvcHRzW2F4W2ldXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mKGF4KSA9PT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gYXgpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmF4ZXNbbmFtZV0ucmVzZXRTY2FsZShvcHRzW25hbWVdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgLy8gbWV0aG9kOiByZUluaXRpYWxpemUKICAgICAgICAvLyByZWluaXRpYWxpemUgcGxvdCBmb3IgcmVwbG90dGluZy4KICAgICAgICAvLyBub3QgY2FsbGVkIGRpcmVjdGx5LgogICAgICAgIHRoaXMucmVJbml0aWFsaXplID0gZnVuY3Rpb24gKGRhdGEsIG9wdHMpIHsKICAgICAgICAgICAgLy8gUGxvdCBzaG91bGQgYmUgdmlzaWJsZSBhbmQgaGF2ZSBhIGhlaWdodCBhbmQgd2lkdGguCiAgICAgICAgICAgIC8vIElmIHBsb3QgZG9lc24ndCBoYXZlIGhlaWdodCBhbmQgd2lkdGggZm9yIHNvbWUKICAgICAgICAgICAgLy8gcmVhc29uLCBzZXQgaXQgYnkgb3RoZXIgbWVhbnMuICBQbG90IG11c3Qgbm90IGhhdmUKICAgICAgICAgICAgLy8gYSBkaXNwbGF5Om5vbmUgYXR0cmlidXRlLCBob3dldmVyLgoKICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgdGhpcy5vcHRpb25zLCBvcHRzKTsKCiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldElkLnN1YnN0cigxKTsKICAgICAgICAgICAgdmFyIHRkYXRhID0gKGRhdGEgPT0gbnVsbCkgPyB0aGlzLmRhdGEgOiBkYXRhOwoKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPCQuanFwbG90LnByZUluaXRIb29rcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgJC5qcXBsb3QucHJlSW5pdEhvb2tzW2ldLmNhbGwodGhpcywgdGFyZ2V0LCB0ZGF0YSwgb3B0aW9ucyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnByZUluaXRIb29rcy5ob29rcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdGhpcy5wcmVJbml0SG9va3MuaG9va3NbaV0uY2FsbCh0aGlzLCB0YXJnZXQsIHRkYXRhLCBvcHRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdGhpcy50YXJnZXQuaGVpZ2h0KCk7CiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdGhpcy50YXJnZXQud2lkdGgoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLl9oZWlnaHQgPD0wIHx8IHRoaXMuX3dpZHRoIDw9MCB8fCAhdGhpcy5faGVpZ2h0IHx8ICF0aGlzLl93aWR0aCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXJnZXQgZGltZW5zaW9uIG5vdCBzZXQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0ID0gdGhpcy5faGVpZ2h0OwogICAgICAgICAgICB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCA9IHRoaXMuX3dpZHRoOwogICAgICAgICAgICB0aGlzLmdyaWQuX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CiAgICAgICAgICAgIHRoaXMudGl0bGUuX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CiAgICAgICAgICAgIHRoaXMuYmFzZUNhbnZhcy5fcGxvdERpbWVuc2lvbnMgPSB0aGlzLl9wbG90RGltZW5zaW9uczsKICAgICAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fcGxvdERpbWVuc2lvbnMgPSB0aGlzLl9wbG90RGltZW5zaW9uczsKICAgICAgICAgICAgdGhpcy5sZWdlbmQuX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CgogICAgICAgICAgICB2YXIgbmFtZSwKICAgICAgICAgICAgICAgIHQsIAogICAgICAgICAgICAgICAgaiwgCiAgICAgICAgICAgICAgICBheGlzOwoKICAgICAgICAgICAgZm9yICh2YXIgaT0wLCBsPV9heGlzTmFtZXMubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgbmFtZSA9IF9heGlzTmFtZXNbaV07CiAgICAgICAgICAgICAgICBheGlzID0gdGhpcy5heGVzW25hbWVdOwoKICAgICAgICAgICAgICAgIC8vIE1lbW9yeSBMZWFrcyBwYXRjaCA6IGNsZWFyIHRpY2tzIGVsZW1lbnRzCiAgICAgICAgICAgICAgICB0ID0gYXhpcy5fdGlja3M7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgdGxlbiA9IHQubGVuZ3RoOyBqIDwgdGxlbjsgaisrKSB7CiAgICAgICAgICAgICAgICAgIHZhciBlbCA9IHRbal0uX2VsZW07CiAgICAgICAgICAgICAgICAgIGlmIChlbCkgewogICAgICAgICAgICAgICAgICAgIC8vIGlmIGNhbnZhcyByZW5kZXJlcgogICAgICAgICAgICAgICAgICAgIGlmICgkLmpxcGxvdC51c2VfZXhjYW52YXMgJiYgd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50ICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIudW5pbml0RWxlbWVudChlbC5nZXQoMCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbC5lbXB0eUZvcmNlKCk7CiAgICAgICAgICAgICAgICAgICAgZWwgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIHQuX2VsZW0gPSBudWxsOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0ID0gbnVsbDsKCiAgICAgICAgICAgICAgICBkZWxldGUgYXhpcy50aWNrczsKICAgICAgICAgICAgICAgIGRlbGV0ZSBheGlzLl90aWNrczsKICAgICAgICAgICAgICAgIHRoaXMuYXhlc1tuYW1lXSA9IG5ldyBBeGlzKG5hbWUpOwogICAgICAgICAgICAgICAgdGhpcy5heGVzW25hbWVdLl9wbG90V2lkdGggPSB0aGlzLl93aWR0aDsKICAgICAgICAgICAgICAgIHRoaXMuYXhlc1tuYW1lXS5fcGxvdEhlaWdodCA9IHRoaXMuX2hlaWdodDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRhdGFSZW5kZXJlciAmJiAkLmlzRnVuY3Rpb24ob3B0aW9ucy5kYXRhUmVuZGVyZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGF0YVJlbmRlcmVyT3B0aW9ucykgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFSZW5kZXJlck9wdGlvbnMgPSBvcHRpb25zLmRhdGFSZW5kZXJlck9wdGlvbnM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVJlbmRlcmVyID0gb3B0aW9ucy5kYXRhUmVuZGVyZXI7CiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuZGF0YVJlbmRlcmVyKGRhdGEsIHRoaXMsIHRoaXMuZGF0YVJlbmRlcmVyT3B0aW9ucyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBkYXRhCiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSAkLmV4dGVuZCh0cnVlLCBbXSwgZGF0YSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChvcHRzKSB7CiAgICAgICAgICAgICAgICB0aGlzLnBhcnNlT3B0aW9ucyhvcHRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy50aXRsZS5fcGxvdFdpZHRoID0gdGhpcy5fd2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAodGhpcy50ZXh0Q29sb3IpIHsKICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmNzcygnY29sb3InLCB0aGlzLnRleHRDb2xvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuZm9udEZhbWlseSkgewogICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuY3NzKCdmb250LWZhbWlseScsIHRoaXMuZm9udEZhbWlseSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuZm9udFNpemUpIHsKICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmNzcygnZm9udC1zaXplJywgdGhpcy5mb250U2l6ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMudGl0bGUuaW5pdCgpOwogICAgICAgICAgICB0aGlzLmxlZ2VuZC5pbml0KCk7CiAgICAgICAgICAgIHRoaXMuX3N1bXkgPSAwOwogICAgICAgICAgICB0aGlzLl9zdW14ID0gMDsKCiAgICAgICAgICAgIHRoaXMuc2VyaWVzU3RhY2sgPSBbXTsKICAgICAgICAgICAgdGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrID0gW107CgogICAgICAgICAgICB0aGlzLmNvbXB1dGVQbG90RGF0YSgpOwogICAgICAgICAgICBmb3IgKHZhciBpPTAsIGw9dGhpcy5zZXJpZXMubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgLy8gc2V0IGRlZmF1bHQgc3RhY2tpbmcgb3JkZXIgZm9yIHNlcmllcyBjYW52YXNlcwogICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNTdGFjay5wdXNoKGkpOwogICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrLnB1c2goaSk7CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc1tpXS5zaGFkb3dDYW52YXMuX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc1tpXS5jYW52YXMuX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8JC5qcXBsb3QucHJlU2VyaWVzSW5pdEhvb2tzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgJC5qcXBsb3QucHJlU2VyaWVzSW5pdEhvb2tzW2pdLmNhbGwodGhpcy5zZXJpZXNbaV0sIHRhcmdldCwgdGhpcy5kYXRhLCB0aGlzLm9wdGlvbnMuc2VyaWVzRGVmYXVsdHMsIHRoaXMub3B0aW9ucy5zZXJpZXNbaV0sIHRoaXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPHRoaXMucHJlU2VyaWVzSW5pdEhvb2tzLmhvb2tzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVTZXJpZXNJbml0SG9va3MuaG9va3Nbal0uY2FsbCh0aGlzLnNlcmllc1tpXSwgdGFyZ2V0LCB0aGlzLmRhdGEsIHRoaXMub3B0aW9ucy5zZXJpZXNEZWZhdWx0cywgdGhpcy5vcHRpb25zLnNlcmllc1tpXSwgdGhpcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyB0aGlzLnBvcHVsYXRlUGxvdERhdGEodGhpcy5zZXJpZXNbaV0sIGkpOwogICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNbaV0uX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc1tpXS5pbml0KGksIHRoaXMuZ3JpZC5ib3JkZXJXaWR0aCwgdGhpcyk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8JC5qcXBsb3QucG9zdFNlcmllc0luaXRIb29rcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICAgICQuanFwbG90LnBvc3RTZXJpZXNJbml0SG9va3Nbal0uY2FsbCh0aGlzLnNlcmllc1tpXSwgdGFyZ2V0LCB0aGlzLmRhdGEsIHRoaXMub3B0aW9ucy5zZXJpZXNEZWZhdWx0cywgdGhpcy5vcHRpb25zLnNlcmllc1tpXSwgdGhpcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8dGhpcy5wb3N0U2VyaWVzSW5pdEhvb2tzLmhvb2tzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3N0U2VyaWVzSW5pdEhvb2tzLmhvb2tzW2pdLmNhbGwodGhpcy5zZXJpZXNbaV0sIHRhcmdldCwgdGhpcy5kYXRhLCB0aGlzLm9wdGlvbnMuc2VyaWVzRGVmYXVsdHMsIHRoaXMub3B0aW9ucy5zZXJpZXNbaV0sIHRoaXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5fc3VteSArPSB0aGlzLnNlcmllc1tpXS5fc3VteTsKICAgICAgICAgICAgICAgIHRoaXMuX3N1bXggKz0gdGhpcy5zZXJpZXNbaV0uX3N1bXg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbD1fYXhpc05hbWVzLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgIG5hbWUgPSBfYXhpc05hbWVzW2ldOwogICAgICAgICAgICAgICAgYXhpcyA9IHRoaXMuYXhlc1tuYW1lXTsKCiAgICAgICAgICAgICAgICBheGlzLl9wbG90RGltZW5zaW9ucyA9IHRoaXMuX3Bsb3REaW1lbnNpb25zOwogICAgICAgICAgICAgICAgYXhpcy5pbml0KCk7CiAgICAgICAgICAgICAgICBpZiAoYXhpcy5ib3JkZXJDb2xvciA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApICE9PSAneCcgJiYgYXhpcy51c2VTZXJpZXNDb2xvciA9PT0gdHJ1ZSAmJiBheGlzLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXhpcy5ib3JkZXJDb2xvciA9IGF4aXMuX3Nlcmllc1swXS5jb2xvcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMuYm9yZGVyQ29sb3IgPSB0aGlzLmdyaWQuYm9yZGVyQ29sb3I7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAodGhpcy5zb3J0RGF0YSkgewogICAgICAgICAgICAgICAgc29ydERhdGEodGhpcy5zZXJpZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuZ3JpZC5pbml0KCk7CiAgICAgICAgICAgIHRoaXMuZ3JpZC5fYXhlcyA9IHRoaXMuYXhlczsKICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMubGVnZW5kLl9zZXJpZXMgPSB0aGlzLnNlcmllczsKCiAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbD0kLmpxcGxvdC5wb3N0SW5pdEhvb2tzLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgICQuanFwbG90LnBvc3RJbml0SG9va3NbaV0uY2FsbCh0aGlzLCB0YXJnZXQsIHRoaXMuZGF0YSwgb3B0aW9ucyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbD10aGlzLnBvc3RJbml0SG9va3MuaG9va3MubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgdGhpcy5wb3N0SW5pdEhvb2tzLmhvb2tzW2ldLmNhbGwodGhpcywgdGFyZ2V0LCB0aGlzLmRhdGEsIG9wdGlvbnMpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCgoKICAgICAgICAvLyBtZXRob2Q6IHF1aWNrSW5pdAogICAgICAgIC8vIAogICAgICAgIC8vIFF1aWNrIHJlaW5pdGlhbGl6YXRpb24gcGxvdCBmb3IgcmVwbG90dGluZy4KICAgICAgICAvLyBEb2VzIG5vdCBwYXJzZSBvcHRpb25zIG9yZSByZWNyZWF0ZSBheGVzIGFuZCBzZXJpZXMuCiAgICAgICAgLy8gbm90IGNhbGxlZCBkaXJlY3RseS4KICAgICAgICB0aGlzLnF1aWNrSW5pdCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgLy8gUGxvdCBzaG91bGQgYmUgdmlzaWJsZSBhbmQgaGF2ZSBhIGhlaWdodCBhbmQgd2lkdGguCiAgICAgICAgICAgIC8vIElmIHBsb3QgZG9lc24ndCBoYXZlIGhlaWdodCBhbmQgd2lkdGggZm9yIHNvbWUKICAgICAgICAgICAgLy8gcmVhc29uLCBzZXQgaXQgYnkgb3RoZXIgbWVhbnMuICBQbG90IG11c3Qgbm90IGhhdmUKICAgICAgICAgICAgLy8gYSBkaXNwbGF5Om5vbmUgYXR0cmlidXRlLCBob3dldmVyLgogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdGhpcy50YXJnZXQuaGVpZ2h0KCk7CiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdGhpcy50YXJnZXQud2lkdGgoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLl9oZWlnaHQgPD0wIHx8IHRoaXMuX3dpZHRoIDw9MCB8fCAhdGhpcy5faGVpZ2h0IHx8ICF0aGlzLl93aWR0aCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXJnZXQgZGltZW5zaW9uIG5vdCBzZXQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0ID0gdGhpcy5faGVpZ2h0OwogICAgICAgICAgICB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCA9IHRoaXMuX3dpZHRoOwogICAgICAgICAgICB0aGlzLmdyaWQuX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CiAgICAgICAgICAgIHRoaXMudGl0bGUuX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CiAgICAgICAgICAgIHRoaXMuYmFzZUNhbnZhcy5fcGxvdERpbWVuc2lvbnMgPSB0aGlzLl9wbG90RGltZW5zaW9uczsKICAgICAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fcGxvdERpbWVuc2lvbnMgPSB0aGlzLl9wbG90RGltZW5zaW9uczsKICAgICAgICAgICAgdGhpcy5sZWdlbmQuX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CiAgICAgICAgICAgIAogICAgICAgICAgICBmb3IgKHZhciBuIGluIHRoaXMuYXhlcykgewogICAgICAgICAgICAgICAgdGhpcy5heGVzW25dLl9wbG90V2lkdGggPSB0aGlzLl93aWR0aDsKICAgICAgICAgICAgICAgIHRoaXMuYXhlc1tuXS5fcGxvdEhlaWdodCA9IHRoaXMuX2hlaWdodDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy50aXRsZS5fcGxvdFdpZHRoID0gdGhpcy5fd2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAodGhpcy50ZXh0Q29sb3IpIHsKICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmNzcygnY29sb3InLCB0aGlzLnRleHRDb2xvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuZm9udEZhbWlseSkgewogICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuY3NzKCdmb250LWZhbWlseScsIHRoaXMuZm9udEZhbWlseSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuZm9udFNpemUpIHsKICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmNzcygnZm9udC1zaXplJywgdGhpcy5mb250U2l6ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMuX3N1bXkgPSAwOwogICAgICAgICAgICB0aGlzLl9zdW14ID0gMDsKICAgICAgICAgICAgdGhpcy5jb21wdXRlUGxvdERhdGEoKTsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMuc2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAvLyB0aGlzLnBvcHVsYXRlUGxvdERhdGEodGhpcy5zZXJpZXNbaV0sIGkpOwogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VyaWVzW2ldLl90eXBlID09PSAnbGluZScgJiYgdGhpcy5zZXJpZXNbaV0ucmVuZGVyZXIuYmFuZHMuc2hvdykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzW2ldLnJlbmRlcmVyLmluaXRCYW5kcy5jYWxsKHRoaXMuc2VyaWVzW2ldLCB0aGlzLnNlcmllc1tpXS5yZW5kZXJlci5vcHRpb25zLCB0aGlzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzW2ldLl9wbG90RGltZW5zaW9ucyA9IHRoaXMuX3Bsb3REaW1lbnNpb25zOwogICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNbaV0uY2FudmFzLl9wbG90RGltZW5zaW9ucyA9IHRoaXMuX3Bsb3REaW1lbnNpb25zOwogICAgICAgICAgICAgICAgLy90aGlzLnNlcmllc1tpXS5pbml0KGksIHRoaXMuZ3JpZC5ib3JkZXJXaWR0aCk7CiAgICAgICAgICAgICAgICB0aGlzLl9zdW15ICs9IHRoaXMuc2VyaWVzW2ldLl9zdW15OwogICAgICAgICAgICAgICAgdGhpcy5fc3VteCArPSB0aGlzLnNlcmllc1tpXS5fc3VteDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgICAgIAogICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8MTI7IGorKykgewogICAgICAgICAgICAgICAgbmFtZSA9IF9heGlzTmFtZXNbal07CiAgICAgICAgICAgICAgICAvLyBNZW1vcnkgTGVha3MgcGF0Y2ggOiBjbGVhciB0aWNrcyBlbGVtZW50cwogICAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzLmF4ZXNbbmFtZV0uX3RpY2tzOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgIHZhciBlbCA9IHRbaV0uX2VsZW07CiAgICAgICAgICAgICAgICAgIGlmIChlbCkgewogICAgICAgICAgICAgICAgICAgIC8vIGlmIGNhbnZhcyByZW5kZXJlcgogICAgICAgICAgICAgICAgICAgIGlmICgkLmpxcGxvdC51c2VfZXhjYW52YXMgJiYgd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50ICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIudW5pbml0RWxlbWVudChlbC5nZXQoMCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbC5lbXB0eUZvcmNlKCk7CiAgICAgICAgICAgICAgICAgICAgZWwgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIHQuX2VsZW0gPSBudWxsOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0ID0gbnVsbDsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdGhpcy5heGVzW25hbWVdLl9wbG90RGltZW5zaW9ucyA9IHRoaXMuX3Bsb3REaW1lbnNpb25zOwogICAgICAgICAgICAgICAgdGhpcy5heGVzW25hbWVdLl90aWNrcyA9IFtdOwogICAgICAgICAgICAgICAgLy8gdGhpcy5heGVzW25hbWVdLnJlbmRlcmVyLmluaXQuY2FsbCh0aGlzLmF4ZXNbbmFtZV0sIHt9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHRoaXMuc29ydERhdGEpIHsKICAgICAgICAgICAgICAgIHNvcnREYXRhKHRoaXMuc2VyaWVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5ncmlkLl9heGVzID0gdGhpcy5heGVzOwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5sZWdlbmQuX3NlcmllcyA9IHRoaXMuc2VyaWVzOwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgLy8gc29ydCB0aGUgc2VyaWVzIGRhdGEgaW4gaW5jcmVhc2luZyBvcmRlci4KICAgICAgICBmdW5jdGlvbiBzb3J0RGF0YShzZXJpZXMpIHsKICAgICAgICAgICAgdmFyIGQsIHNkLCBwZCwgcHBkLCByZXQ7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxzZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBjaGVjazsKICAgICAgICAgICAgICAgIHZhciBiYXQgPSBbc2VyaWVzW2ldLmRhdGEsIHNlcmllc1tpXS5fc3RhY2tEYXRhLCBzZXJpZXNbaV0uX3Bsb3REYXRhLCBzZXJpZXNbaV0uX3ByZXZQbG90RGF0YV07CiAgICAgICAgICAgICAgICBmb3IgKHZhciBuPTA7IG48NDsgbisrKSB7CiAgICAgICAgICAgICAgICAgICAgY2hlY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGQgPSBiYXRbbl07CiAgICAgICAgICAgICAgICAgICAgaWYgKHNlcmllc1tpXS5fc3RhY2tBeGlzID09ICd4JykgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGQubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoZFtqXVsxXSkgIT0gIm51bWJlciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zb3J0KGZ1bmN0aW9uKGEsYikgeyByZXR1cm4gYVsxXSAtIGJbMV07IH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGQubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoZFtqXVswXSkgIT0gIm51bWJlciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zb3J0KGZ1bmN0aW9uKGEsYikgeyByZXR1cm4gYVswXSAtIGJbMF07IH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhpcy5jb21wdXRlUGxvdERhdGEgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5fcGxvdERhdGEgPSBbXTsKICAgICAgICAgICAgdGhpcy5fc3RhY2tEYXRhID0gW107CiAgICAgICAgICAgIHZhciBzZXJpZXMsCiAgICAgICAgICAgICAgICBpbmRleCwKICAgICAgICAgICAgICAgIGw7CgoKICAgICAgICAgICAgZm9yIChpbmRleD0wLCBsPXRoaXMuc2VyaWVzLmxlbmd0aDsgaW5kZXg8bDsgaW5kZXgrKykgewogICAgICAgICAgICAgICAgc2VyaWVzID0gdGhpcy5zZXJpZXNbaW5kZXhdOwogICAgICAgICAgICAgICAgdGhpcy5fcGxvdERhdGEucHVzaChbXSk7CiAgICAgICAgICAgICAgICB0aGlzLl9zdGFja0RhdGEucHVzaChbXSk7CiAgICAgICAgICAgICAgICB2YXIgY2QgPSBzZXJpZXMuZGF0YTsKICAgICAgICAgICAgICAgIHRoaXMuX3Bsb3REYXRhW2luZGV4XSA9ICQuZXh0ZW5kKHRydWUsIFtdLCBjZCk7CiAgICAgICAgICAgICAgICB0aGlzLl9zdGFja0RhdGFbaW5kZXhdID0gJC5leHRlbmQodHJ1ZSwgW10sIGNkKTsKICAgICAgICAgICAgICAgIHNlcmllcy5fcGxvdERhdGEgPSB0aGlzLl9wbG90RGF0YVtpbmRleF07CiAgICAgICAgICAgICAgICBzZXJpZXMuX3N0YWNrRGF0YSA9IHRoaXMuX3N0YWNrRGF0YVtpbmRleF07CiAgICAgICAgICAgICAgICB2YXIgcGxvdFZhbHVlcyA9IHt4OltdLCB5OltdfTsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFja1NlcmllcyAmJiAhc2VyaWVzLmRpc2FibGVTdGFjaykgewogICAgICAgICAgICAgICAgICAgIHNlcmllcy5fc3RhY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdG8gY2hlY2sgZm9yIG51bGxzCiAgICAgICAgICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAgICAgICAgICAgICAgICAgdmFyIHNpZHggPSAoc2VyaWVzLl9zdGFja0F4aXMgPT09ICd4JykgPyAwIDogMTsKCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaz0wLCBjZGw9Y2QubGVuZ3RoOyBrPGNkbDsgaysrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gY2Rba11bc2lkeF07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bsb3REYXRhW2luZGV4XVtrXVtzaWR4XSA9IHRlbXA7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YWNrRGF0YVtpbmRleF1ba11bc2lkeF0gPSB0ZW1wOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaj1pbmRleDsgai0tOykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2dmFsID0gdGhpcy5fcGxvdERhdGFbal1ba11bc2lkeF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBuZWVkIHRvIHN1bSB1cCB0aGUgc3RhY2sgYXhpcyBjb2x1bW4gb2YgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBvbmx5IHN1bSBpZiBpdCBpcyBvZiBzYW1lIHNpZ24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgcHJldmlvdXMgc2VyaWVzIGlzbid0IHNhbWUgc2lnbiwga2VlcCBsb29raW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgZWFybGllciBzZXJpZXMgdW50aWxsIHdlIGZpbmQgb25lIG9mIHNhbWUgc2lnbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcCAqIHByZXZ2YWwgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wbG90RGF0YVtpbmRleF1ba11bc2lkeF0gKz0gcHJldnZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhY2tEYXRhW2luZGV4XVtrXVtzaWR4XSArPSBwcmV2dmFsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxzZXJpZXMuZGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBwbG90VmFsdWVzLngucHVzaChzZXJpZXMuZGF0YVtpXVswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RWYWx1ZXMueS5wdXNoKHNlcmllcy5kYXRhW2ldWzFdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhY2tEYXRhLnB1c2goc2VyaWVzLmRhdGEpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzW2luZGV4XS5fc3RhY2tEYXRhID0gc2VyaWVzLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGxvdERhdGEucHVzaChzZXJpZXMuZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgc2VyaWVzLl9wbG90RGF0YSA9IHNlcmllcy5kYXRhOwogICAgICAgICAgICAgICAgICAgIHNlcmllcy5fcGxvdFZhbHVlcyA9IHBsb3RWYWx1ZXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaW5kZXg+MCkgewogICAgICAgICAgICAgICAgICAgIHNlcmllcy5fcHJldlBsb3REYXRhID0gdGhpcy5zZXJpZXNbaW5kZXgtMV0uX3Bsb3REYXRhOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2VyaWVzLl9zdW15ID0gMDsKICAgICAgICAgICAgICAgIHNlcmllcy5fc3VteCA9IDA7CiAgICAgICAgICAgICAgICBmb3IgKGk9c2VyaWVzLmRhdGEubGVuZ3RoLTE7IGk+LTE7IGktLSkgewogICAgICAgICAgICAgICAgICAgIHNlcmllcy5fc3VteSArPSBzZXJpZXMuZGF0YVtpXVsxXTsKICAgICAgICAgICAgICAgICAgICBzZXJpZXMuX3N1bXggKz0gc2VyaWVzLmRhdGFbaV1bMF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKICAgICAgICAKICAgICAgICAvLyBwb3B1bGF0ZSB0aGUgX3N0YWNrRGF0YSBhbmQgX3Bsb3REYXRhIGFycmF5cyBmb3IgdGhlIHBsb3QgYW5kIHRoZSBzZXJpZXMuCiAgICAgICAgdGhpcy5wb3B1bGF0ZVBsb3REYXRhID0gZnVuY3Rpb24oc2VyaWVzLCBpbmRleCkgewogICAgICAgICAgICAvLyBpZiBhIHN0YWNrZWQgY2hhcnQsIGNvbXB1dGUgdGhlIHN0YWNrZWQgZGF0YQogICAgICAgICAgICB0aGlzLl9wbG90RGF0YSA9IFtdOwogICAgICAgICAgICB0aGlzLl9zdGFja0RhdGEgPSBbXTsKICAgICAgICAgICAgc2VyaWVzLl9zdGFja0RhdGEgPSBbXTsKICAgICAgICAgICAgc2VyaWVzLl9wbG90RGF0YSA9IFtdOwogICAgICAgICAgICB2YXIgcGxvdFZhbHVlcyA9IHt4OltdLCB5OltdfTsKICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2tTZXJpZXMgJiYgIXNlcmllcy5kaXNhYmxlU3RhY2spIHsKICAgICAgICAgICAgICAgIHNlcmllcy5fc3RhY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgdmFyIHNpZHggPSAoc2VyaWVzLl9zdGFja0F4aXMgPT09ICd4JykgPyAwIDogMTsKICAgICAgICAgICAgICAgIC8vIHZhciBpZHggPSBzaWR4ID8gMCA6IDE7CiAgICAgICAgICAgICAgICAvLyBwdXNoIHRoZSBjdXJyZW50IGRhdGEgaW50byBzdGFja0RhdGEKICAgICAgICAgICAgICAgIC8vdGhpcy5fc3RhY2tEYXRhLnB1c2godGhpcy5zZXJpZXNbaV0uZGF0YSk7CiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9ICQuZXh0ZW5kKHRydWUsIFtdLCBzZXJpZXMuZGF0YSk7CiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIHBsb3R0ZWQgZm9yIHRoaXMgc2VyaWVzCiAgICAgICAgICAgICAgICB2YXIgcGxvdGRhdGEgPSAkLmV4dGVuZCh0cnVlLCBbXSwgc2VyaWVzLmRhdGEpOwogICAgICAgICAgICAgICAgdmFyIHRlbXB4LCB0ZW1weSwgZHZhbCwgc3RhY2t2YWwsIGNvbXBhcmF0b3I7CiAgICAgICAgICAgICAgICAvLyBmb3IgZmlyc3Qgc2VyaWVzLCBub3RoaW5nIHRvIGFkZCB0byBzdGFja0RhdGEuCiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8aW5kZXg7IGorKykgewogICAgICAgICAgICAgICAgICAgIHZhciBjZCA9IHRoaXMuc2VyaWVzW2pdLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaz0wOyBrPGNkLmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGR2YWwgPSBjZFtrXTsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHggPSAoZHZhbFswXSAhPSBudWxsKSA/IGR2YWxbMF0gOiAwOwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1weSA9IChkdmFsWzFdICE9IG51bGwpID8gZHZhbFsxXSA6IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBba11bMF0gKz0gdGVtcHg7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBba11bMV0gKz0gdGVtcHk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrdmFsID0gKHNpZHgpID8gdGVtcHkgOiB0ZW1weDsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBuZWVkIHRvIHN1bSB1cCB0aGUgc3RhY2sgYXhpcyBjb2x1bW4gb2YgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgb25seSBzdW0gaWYgaXQgaXMgb2Ygc2FtZSBzaWduLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VyaWVzLmRhdGFba11bc2lkeF0gKiBzdGFja3ZhbCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90ZGF0YVtrXVtzaWR4XSArPSBzdGFja3ZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxwbG90ZGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHBsb3RWYWx1ZXMueC5wdXNoKHBsb3RkYXRhW2ldWzBdKTsKICAgICAgICAgICAgICAgICAgICBwbG90VmFsdWVzLnkucHVzaChwbG90ZGF0YVtpXVsxXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLl9wbG90RGF0YS5wdXNoKHBsb3RkYXRhKTsKICAgICAgICAgICAgICAgIHRoaXMuX3N0YWNrRGF0YS5wdXNoKHRlbXApOwogICAgICAgICAgICAgICAgc2VyaWVzLl9zdGFja0RhdGEgPSB0ZW1wOwogICAgICAgICAgICAgICAgc2VyaWVzLl9wbG90RGF0YSA9IHBsb3RkYXRhOwogICAgICAgICAgICAgICAgc2VyaWVzLl9wbG90VmFsdWVzID0gcGxvdFZhbHVlczsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxzZXJpZXMuZGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHBsb3RWYWx1ZXMueC5wdXNoKHNlcmllcy5kYXRhW2ldWzBdKTsKICAgICAgICAgICAgICAgICAgICBwbG90VmFsdWVzLnkucHVzaChzZXJpZXMuZGF0YVtpXVsxXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLl9zdGFja0RhdGEucHVzaChzZXJpZXMuZGF0YSk7CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc1tpbmRleF0uX3N0YWNrRGF0YSA9IHNlcmllcy5kYXRhOwogICAgICAgICAgICAgICAgdGhpcy5fcGxvdERhdGEucHVzaChzZXJpZXMuZGF0YSk7CiAgICAgICAgICAgICAgICBzZXJpZXMuX3Bsb3REYXRhID0gc2VyaWVzLmRhdGE7CiAgICAgICAgICAgICAgICBzZXJpZXMuX3Bsb3RWYWx1ZXMgPSBwbG90VmFsdWVzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpbmRleD4wKSB7CiAgICAgICAgICAgICAgICBzZXJpZXMuX3ByZXZQbG90RGF0YSA9IHRoaXMuc2VyaWVzW2luZGV4LTFdLl9wbG90RGF0YTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzZXJpZXMuX3N1bXkgPSAwOwogICAgICAgICAgICBzZXJpZXMuX3N1bXggPSAwOwogICAgICAgICAgICBmb3IgKGk9c2VyaWVzLmRhdGEubGVuZ3RoLTE7IGk+LTE7IGktLSkgewogICAgICAgICAgICAgICAgc2VyaWVzLl9zdW15ICs9IHNlcmllcy5kYXRhW2ldWzFdOwogICAgICAgICAgICAgICAgc2VyaWVzLl9zdW14ICs9IHNlcmllcy5kYXRhW2ldWzBdOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICAvLyBmdW5jdGlvbiB0byBzYWZlbHkgcmV0dXJuIGNvbG9ycyBmcm9tIHRoZSBjb2xvciBhcnJheSBhbmQgd3JhcCBhcm91bmQgYXQgdGhlIGVuZC4KICAgICAgICB0aGlzLmdldE5leHRTZXJpZXNDb2xvciA9IChmdW5jdGlvbih0KSB7CiAgICAgICAgICAgIHZhciBpZHggPSAwOwogICAgICAgICAgICB2YXIgc2MgPSB0LnNlcmllc0NvbG9yczsKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IAogICAgICAgICAgICAgICAgaWYgKGlkeCA8IHNjLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBzY1tpZHgrK107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZHggPSAwOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBzY1tpZHgrK107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgfSkodGhpcyk7CiAgICAKICAgICAgICB0aGlzLnBhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpewogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5wcmVQYXJzZU9wdGlvbnNIb29rcy5ob29rcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdGhpcy5wcmVQYXJzZU9wdGlvbnNIb29rcy5ob29rc1tpXS5jYWxsKHRoaXMsIG9wdGlvbnMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTwkLmpxcGxvdC5wcmVQYXJzZU9wdGlvbnNIb29rcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgJC5qcXBsb3QucHJlUGFyc2VPcHRpb25zSG9va3NbaV0uY2FsbCh0aGlzLCBvcHRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgdGhpcy5kZWZhdWx0cywgb3B0aW9ucyk7CiAgICAgICAgICAgIHZhciBvcHRzID0gdGhpcy5vcHRpb25zOwogICAgICAgICAgICB0aGlzLmFuaW1hdGUgPSBvcHRzLmFuaW1hdGU7CiAgICAgICAgICAgIHRoaXMuYW5pbWF0ZVJlcGxvdCA9IG9wdHMuYW5pbWF0ZVJlcGxvdDsKICAgICAgICAgICAgdGhpcy5zdGFja1NlcmllcyA9IG9wdHMuc3RhY2tTZXJpZXM7CiAgICAgICAgICAgIGlmICgkLmlzUGxhaW5PYmplY3Qob3B0cy5maWxsQmV0d2VlbikpIHsKCiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IFsnc2VyaWVzMScsICdzZXJpZXMyJywgJ2NvbG9yJywgJ2Jhc2VTZXJpZXMnLCAnZmlsbCddLCAKICAgICAgICAgICAgICAgICAgICB0ZW1waTsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTAsIGw9dGVtcC5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGVtcGkgPSB0ZW1wW2ldOwogICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmZpbGxCZXR3ZWVuW3RlbXBpXSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbEJldHdlZW5bdGVtcGldID0gb3B0cy5maWxsQmV0d2Vlblt0ZW1waV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAob3B0cy5zZXJpZXNDb2xvcnMpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzQ29sb3JzID0gb3B0cy5zZXJpZXNDb2xvcnM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG9wdHMubmVnYXRpdmVTZXJpZXNDb2xvcnMpIHsKICAgICAgICAgICAgICAgIHRoaXMubmVnYXRpdmVTZXJpZXNDb2xvcnMgPSBvcHRzLm5lZ2F0aXZlU2VyaWVzQ29sb3JzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChvcHRzLmNhcHR1cmVSaWdodENsaWNrKSB7CiAgICAgICAgICAgICAgICB0aGlzLmNhcHR1cmVSaWdodENsaWNrID0gb3B0cy5jYXB0dXJlUmlnaHRDbGljazsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmRlZmF1bHRBeGlzU3RhcnQgPSAob3B0aW9ucyAmJiBvcHRpb25zLmRlZmF1bHRBeGlzU3RhcnQgIT0gbnVsbCkgPyBvcHRpb25zLmRlZmF1bHRBeGlzU3RhcnQgOiB0aGlzLmRlZmF1bHRBeGlzU3RhcnQ7CiAgICAgICAgICAgIHRoaXMuY29sb3JHZW5lcmF0b3Iuc2V0Q29sb3JzKHRoaXMuc2VyaWVzQ29sb3JzKTsKICAgICAgICAgICAgdGhpcy5uZWdhdGl2ZUNvbG9yR2VuZXJhdG9yLnNldENvbG9ycyh0aGlzLm5lZ2F0aXZlU2VyaWVzQ29sb3JzKTsKICAgICAgICAgICAgLy8gdmFyIGNnID0gbmV3IHRoaXMuY29sb3JHZW5lcmF0b3IodGhpcy5zZXJpZXNDb2xvcnMpOwogICAgICAgICAgICAvLyB2YXIgbmNnID0gbmV3IHRoaXMuY29sb3JHZW5lcmF0b3IodGhpcy5uZWdhdGl2ZVNlcmllc0NvbG9ycyk7CiAgICAgICAgICAgIC8vIHRoaXMuX2dyaWRQYWRkaW5nID0gdGhpcy5vcHRpb25zLmdyaWRQYWRkaW5nOwogICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLl9ncmlkUGFkZGluZywgb3B0cy5ncmlkUGFkZGluZyk7CiAgICAgICAgICAgIHRoaXMuc29ydERhdGEgPSAob3B0cy5zb3J0RGF0YSAhPSBudWxsKSA/IG9wdHMuc29ydERhdGEgOiB0aGlzLnNvcnREYXRhOwogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8MTI7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIG4gPSBfYXhpc05hbWVzW2ldOwogICAgICAgICAgICAgICAgdmFyIGF4aXMgPSB0aGlzLmF4ZXNbbl07CiAgICAgICAgICAgICAgICBheGlzLl9vcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sIG9wdHMuYXhlc0RlZmF1bHRzLCBvcHRzLmF4ZXNbbl0pOwogICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwgYXhpcywgb3B0cy5heGVzRGVmYXVsdHMsIG9wdHMuYXhlc1tuXSk7CiAgICAgICAgICAgICAgICBheGlzLl9wbG90V2lkdGggPSB0aGlzLl93aWR0aDsKICAgICAgICAgICAgICAgIGF4aXMuX3Bsb3RIZWlnaHQgPSB0aGlzLl9oZWlnaHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gaWYgKHRoaXMuZGF0YS5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAvLyAgICAgdGhpcy5kYXRhID0gW107CiAgICAgICAgICAgIC8vICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5vcHRpb25zLnNlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuZGF0YS5wdXNoKHRoaXMub3B0aW9ucy5zZXJpZXMuZGF0YSk7CiAgICAgICAgICAgIC8vICAgICB9ICAgIAogICAgICAgICAgICAvLyB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZURhdGEgPSBmdW5jdGlvbihkYXRhLCBkaXIsIHN0YXJ0KSB7CiAgICAgICAgICAgICAgICAvLyByZXR1cm4gZGF0YSBhcyBhbiBhcnJheSBvZiBwb2ludCBhcnJheXMsCiAgICAgICAgICAgICAgICAvLyBpbiBmb3JtIFtbeDEseTEuLi5dLCBbeDIseTIuLi5dLCAuLi5dCiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IFtdOwogICAgICAgICAgICAgICAgdmFyIGksIGw7CiAgICAgICAgICAgICAgICBkaXIgPSBkaXIgfHwgJ3ZlcnRpY2FsJzsKICAgICAgICAgICAgICAgIGlmICghJC5pc0FycmF5KGRhdGFbMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhIHNlcmllcyBvZiBzY2FsYXJzLiAgT25lIGxpbmUgd2l0aCBqdXN0IHkgdmFsdWVzLgogICAgICAgICAgICAgICAgICAgIC8vIHR1cm4gdGhlIHNjYWxhciBsaXN0IG9mIGRhdGEgaW50byBhIGRhdGEgYXJyYXkgb2YgZm9ybToKICAgICAgICAgICAgICAgICAgICAvLyBbWzEsIGRhdGFbMF1dLCBbMiwgZGF0YVsxXV0sIC4uLl0KICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MCwgbD1kYXRhLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpciA9PSAndmVydGljYWwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2goW3N0YXJ0ICsgaSwgZGF0YVtpXV0pOyAgIAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKFtkYXRhW2ldLCBzdGFydCtpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgcHJvcGVybHkgZm9ybWF0dGVkIGRhdGEgc2VyaWVzLCBjb3B5IGl0LgogICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsIHRlbXAsIGRhdGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRlbXA7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICB2YXIgY29sb3JJbmRleCA9IDA7CiAgICAgICAgICAgIHRoaXMuc2VyaWVzID0gW107CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBzb3B0cyA9ICQuZXh0ZW5kKHRydWUsIHtpbmRleDogaX0sIHtzZXJpZXNDb2xvcnM6dGhpcy5zZXJpZXNDb2xvcnMsIG5lZ2F0aXZlU2VyaWVzQ29sb3JzOnRoaXMubmVnYXRpdmVTZXJpZXNDb2xvcnN9LCB0aGlzLm9wdGlvbnMuc2VyaWVzRGVmYXVsdHMsIHRoaXMub3B0aW9ucy5zZXJpZXNbaV0sIHtyZW5kZXJlck9wdGlvbnM6e2FuaW1hdGlvbjp7c2hvdzogdGhpcy5hbmltYXRlfX19KTsKICAgICAgICAgICAgICAgIC8vIHBhc3MgaW4gb3B0aW9ucyBpbiBjYXNlIHNvbWV0aGluZyBuZWVkcyBzZXQgcHJpb3IgdG8gaW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IG5ldyBTZXJpZXMoc29wdHMpOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPCQuanFwbG90LnByZVBhcnNlU2VyaWVzT3B0aW9uc0hvb2tzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgJC5qcXBsb3QucHJlUGFyc2VTZXJpZXNPcHRpb25zSG9va3Nbal0uY2FsbCh0ZW1wLCB0aGlzLm9wdGlvbnMuc2VyaWVzRGVmYXVsdHMsIHRoaXMub3B0aW9ucy5zZXJpZXNbaV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPHRoaXMucHJlUGFyc2VTZXJpZXNPcHRpb25zSG9va3MuaG9va3MubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnByZVBhcnNlU2VyaWVzT3B0aW9uc0hvb2tzLmhvb2tzW2pdLmNhbGwodGVtcCwgdGhpcy5vcHRpb25zLnNlcmllc0RlZmF1bHRzLCB0aGlzLm9wdGlvbnMuc2VyaWVzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIE5vdyBnbyBiYWNrIGFuZCBhcHBseSB0aGUgb3B0aW9ucyB0byB0aGUgc2VyaWVzLiAgUmVhbGx5IHNob3VsZCBqdXN0IGRvIHRoaXMgZHVyaW5nIGluaXRpYWxpemFpdG9uLCBidXQgZG9uJ3Qgd2FudCB0bwogICAgICAgICAgICAgICAgLy8gbWVzcyB1cCBwcmVQYXJzZVNlcmllc09wdGlvbnNIb29rcyBhdCB0aGlzIHBvaW50LgogICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGVtcCwgc29wdHMpOwogICAgICAgICAgICAgICAgdmFyIGRpciA9ICd2ZXJ0aWNhbCc7CiAgICAgICAgICAgICAgICBpZiAodGVtcC5yZW5kZXJlciA9PT0gJC5qcXBsb3QuQmFyUmVuZGVyZXIgJiYgdGVtcC5yZW5kZXJlck9wdGlvbnMgJiYgdGVtcC5yZW5kZXJlck9wdGlvbnMuYmFyRGlyZWN0aW9uID09ICdob3Jpem9udGFsJykgewogICAgICAgICAgICAgICAgICAgIGRpciA9ICdob3Jpem9udGFsJzsKICAgICAgICAgICAgICAgICAgICB0ZW1wLl9zdGFja0F4aXMgPSAneCc7CiAgICAgICAgICAgICAgICAgICAgdGVtcC5fcHJpbWFyeUF4aXMgPSAnX3lheGlzJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRlbXAuZGF0YSA9IG5vcm1hbGl6ZURhdGEodGhpcy5kYXRhW2ldLCBkaXIsIHRoaXMuZGVmYXVsdEF4aXNTdGFydCk7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRlbXAueGF4aXMpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICd4YXhpcyc6CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuX3hheGlzID0gdGhpcy5heGVzLnhheGlzOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICd4MmF4aXMnOgogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLl94YXhpcyA9IHRoaXMuYXhlcy54MmF4aXM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGVtcC5feWF4aXMgPSB0aGlzLmF4ZXNbdGVtcC55YXhpc107CiAgICAgICAgICAgICAgICB0ZW1wLl94YXhpcy5fc2VyaWVzLnB1c2godGVtcCk7CiAgICAgICAgICAgICAgICB0ZW1wLl95YXhpcy5fc2VyaWVzLnB1c2godGVtcCk7CiAgICAgICAgICAgICAgICBpZiAodGVtcC5zaG93KSB7CiAgICAgICAgICAgICAgICAgICAgdGVtcC5feGF4aXMuc2hvdyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgdGVtcC5feWF4aXMuc2hvdyA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGVtcC5feGF4aXMuc2NhbGVUb0hpZGRlblNlcmllcykgewogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLl94YXhpcy5zaG93ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAuX3lheGlzLnNjYWxlVG9IaWRkZW5TZXJpZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5feWF4aXMuc2hvdyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIC8vIHBhcnNlIHRoZSByZW5kZXJlciBvcHRpb25zIGFuZCBhcHBseSBkZWZhdWx0IGNvbG9ycyBpZiBub3QgcHJvdmlkZWQKICAgICAgICAgICAgICAgIC8vIGlmICghdGVtcC5jb2xvciAmJiB0ZW1wLnNob3cgIT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIC8vICAgICB0ZW1wLmNvbG9yID0gY2cubmV4dCgpOwogICAgICAgICAgICAgICAgLy8gICAgIGNvbG9ySW5kZXggPSBjZy5nZXRJbmRleCgpIC0gMTs7CiAgICAgICAgICAgICAgICAvLyB9CiAgICAgICAgICAgICAgICAvLyBpZiAoIXRlbXAubmVnYXRpdmVDb2xvciAmJiB0ZW1wLnNob3cgIT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIC8vICAgICB0ZW1wLm5lZ2F0aXZlQ29sb3IgPSBuY2cuZ2V0KGNvbG9ySW5kZXgpOwogICAgICAgICAgICAgICAgLy8gICAgIG5jZy5zZXRJbmRleChjb2xvckluZGV4KTsKICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAgICAgIGlmICghdGVtcC5sYWJlbCkgewogICAgICAgICAgICAgICAgICAgIHRlbXAubGFiZWwgPSAnU2VyaWVzICcrIChpKzEpLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyB0ZW1wLnJlbmRlcmVyT3B0aW9ucy5zaG93ID0gdGVtcC5zaG93OwogICAgICAgICAgICAgICAgLy8gJC5leHRlbmQodHJ1ZSwgdGVtcC5yZW5kZXJlciwge2NvbG9yOnRoaXMuc2VyaWVzQ29sb3JzW2ldfSwgdGhpcy5yZW5kZXJlck9wdGlvbnMpOwogICAgICAgICAgICAgICAgdGhpcy5zZXJpZXMucHVzaCh0ZW1wKTsgIAogICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPCQuanFwbG90LnBvc3RQYXJzZVNlcmllc09wdGlvbnNIb29rcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICAgICQuanFwbG90LnBvc3RQYXJzZVNlcmllc09wdGlvbnNIb29rc1tqXS5jYWxsKHRoaXMuc2VyaWVzW2ldLCB0aGlzLm9wdGlvbnMuc2VyaWVzRGVmYXVsdHMsIHRoaXMub3B0aW9ucy5zZXJpZXNbaV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPHRoaXMucG9zdFBhcnNlU2VyaWVzT3B0aW9uc0hvb2tzLmhvb2tzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3N0UGFyc2VTZXJpZXNPcHRpb25zSG9va3MuaG9va3Nbal0uY2FsbCh0aGlzLnNlcmllc1tpXSwgdGhpcy5vcHRpb25zLnNlcmllc0RlZmF1bHRzLCB0aGlzLm9wdGlvbnMuc2VyaWVzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gY29weSB0aGUgZ3JpZCBhbmQgdGl0bGUgb3B0aW9ucyBpbnRvIHRoaXMgb2JqZWN0LgogICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLmdyaWQsIHRoaXMub3B0aW9ucy5ncmlkKTsKICAgICAgICAgICAgLy8gaWYgYXhpcyBib3JkZXIgcHJvcGVydGllcyBhcmVuJ3Qgc2V0LCBzZXQgZGVmYXVsdC4KICAgICAgICAgICAgZm9yICh2YXIgaT0wLCBsPV9heGlzTmFtZXMubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIG4gPSBfYXhpc05hbWVzW2ldOwogICAgICAgICAgICAgICAgdmFyIGF4aXMgPSB0aGlzLmF4ZXNbbl07CiAgICAgICAgICAgICAgICBpZiAoYXhpcy5ib3JkZXJXaWR0aCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgYXhpcy5ib3JkZXJXaWR0aCA9dGhpcy5ncmlkLmJvcmRlcldpZHRoOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy50aXRsZSA9PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgdGhpcy50aXRsZS50ZXh0ID0gdGhpcy5vcHRpb25zLnRpdGxlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMudGl0bGUgPT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMudGl0bGUsIHRoaXMub3B0aW9ucy50aXRsZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy50aXRsZS5fcGxvdFdpZHRoID0gdGhpcy5fd2lkdGg7CiAgICAgICAgICAgIHRoaXMubGVnZW5kLnNldE9wdGlvbnModGhpcy5vcHRpb25zLmxlZ2VuZCk7CiAgICAgICAgICAgIAogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8JC5qcXBsb3QucG9zdFBhcnNlT3B0aW9uc0hvb2tzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAkLmpxcGxvdC5wb3N0UGFyc2VPcHRpb25zSG9va3NbaV0uY2FsbCh0aGlzLCBvcHRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5wb3N0UGFyc2VPcHRpb25zSG9va3MuaG9va3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHRoaXMucG9zdFBhcnNlT3B0aW9uc0hvb2tzLmhvb2tzW2ldLmNhbGwodGhpcywgb3B0aW9ucyk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIG1ldGhvZDogZGVzdHJveQogICAgICAgIC8vIFJlbGVhc2VzIGFsbCByZXNvdXJjZXMgb2NjdXBpZWQgYnkgdGhlIHBsb3QKICAgICAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5jYW52YXNNYW5hZ2VyLmZyZWVBbGxDYW52YXNlcygpOwogICAgICAgICAgICBpZiAodGhpcy5ldmVudENhbnZhcyAmJiB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtKSB7CiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLnVuYmluZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIENvdXBsZSBvZiBwb3N0cyBvbiBTdGFjayBPdmVyZmxvdyBpbmRpY2F0ZSB0aGF0IGVtcHR5KCkgZG9lc24ndAogICAgICAgICAgICAvLyBhbHdheXMgY2VhciB1cCB0aGUgZG9tIGFuZCByZWxlYXNlIG1lbW9yeS4gIFNvbWV0aW1lcyBzZXR0aW5nCiAgICAgICAgICAgIC8vIGlubmVySFRNTCBwcm9wZXJ0eSB0byBudWxsIGlzIG5lZWRlZC4gIFBhcnRpY3VsYXJseSBvbiBJRSwgbWF5IAogICAgICAgICAgICAvLyBoYXZlIHRvIGRpcmVjdGx5IHNldCBpdCB0byBudWxsLCBieXBhc3NpbmcgJC4KICAgICAgICAgICAgdGhpcy50YXJnZXQuZW1wdHkoKTsKCiAgICAgICAgICAgIHRoaXMudGFyZ2V0WzBdLmlubmVySFRNTCA9ICcnOwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgLy8gbWV0aG9kOiByZXBsb3QKICAgICAgICAvLyBEb2VzIGEgcmVpbml0aWFsaXphdGlvbiBvZiB0aGUgcGxvdCBmb2xsb3dlZCBieQogICAgICAgIC8vIGEgcmVkcmF3LiAgTWV0aG9kIGNvdWxkIGJlIHVzZWQgdG8gaW50ZXJhY3RpdmVseQogICAgICAgIC8vIGNoYW5nZSBwbG90IGNoYXJhY3RlcmlzdGljcyBhbmQgdGhlbiByZXBsb3QuCiAgICAgICAgLy8KICAgICAgICAvLyBQYXJhbWV0ZXJzOgogICAgICAgIC8vIG9wdGlvbnMgLSBPcHRpb25zIHVzZWQgZm9yIHJlcGxvdHRpbmcuCiAgICAgICAgLy8KICAgICAgICAvLyBQcm9wZXJ0aWVzOgogICAgICAgIC8vIGNsZWFyIC0gZmFsc2UgdG8gbm90IGNsZWFyIChlbXB0eSkgdGhlIHBsb3QgY29udGFpbmVyIGJlZm9yZSByZXBsb3R0aW5nIChkZWZhdWx0OiB0cnVlKS4KICAgICAgICAvLyByZXNldEF4ZXMgLSB0cnVlIHRvIHJlc2V0IGFsbCBheGVzIG1pbiwgbWF4LCBudW1iZXJUaWNrcyBhbmQgdGlja0ludGVydmFsIHNldHRpbmcgc28gYXhlcyB3aWxsIHJlc2NhbGUgdGhlbXNlbHZlcy4KICAgICAgICAvLyAgICAgICAgICAgICBvcHRpb25hbGx5IHBhc3MgaW4gbGlzdCBvZiBheGVzIHRvIHJlc2V0IChlLmcuIFsneGF4aXMnLCAneTJheGlzJ10pIChkZWZhdWx0OiBmYWxzZSkuCiAgICAgICAgdGhpcy5yZXBsb3QgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgICAgIHZhciBvcHRzID0gIG9wdGlvbnMgfHwge307CiAgICAgICAgICAgIHZhciBkYXRhID0gb3B0cy5kYXRhIHx8IG51bGw7CiAgICAgICAgICAgIHZhciBjbGVhciA9IChvcHRzLmNsZWFyID09PSBmYWxzZSkgPyBmYWxzZSA6IHRydWU7CiAgICAgICAgICAgIHZhciByZXNldEF4ZXMgPSBvcHRzLnJlc2V0QXhlcyB8fCBmYWxzZTsKICAgICAgICAgICAgZGVsZXRlIG9wdHMuZGF0YTsKICAgICAgICAgICAgZGVsZXRlIG9wdHMuY2xlYXI7CiAgICAgICAgICAgIGRlbGV0ZSBvcHRzLnJlc2V0QXhlczsKCiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnRyaWdnZXIoJ2pxcGxvdFByZVJlcGxvdCcpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGNsZWFyKSB7CiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBpZiBoYXZlIGRhdGEgb3Igb3RoZXIgb3B0aW9ucywgZnVsbCByZWluaXQuCiAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgcXVpY2tpbml0LgogICAgICAgICAgICBpZiAoZGF0YSB8fCAhJC5pc0VtcHR5T2JqZWN0KG9wdHMpKSB7CiAgICAgICAgICAgICAgICB0aGlzLnJlSW5pdGlhbGl6ZShkYXRhLCBvcHRzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMucXVpY2tJbml0KCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChyZXNldEF4ZXMpIHsKICAgICAgICAgICAgICAgIHRoaXMucmVzZXRBeGVzU2NhbGUocmVzZXRBeGVzLCBvcHRzLmF4ZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuZHJhdygpOwogICAgICAgICAgICB0aGlzLnRhcmdldC50cmlnZ2VyKCdqcXBsb3RQb3N0UmVwbG90Jyk7CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICAvLyBtZXRob2Q6IHJlZHJhdwogICAgICAgIC8vIEVtcHRpZXMgdGhlIHBsb3QgdGFyZ2V0IGRpdiBhbmQgcmVkcmF3cyB0aGUgcGxvdC4KICAgICAgICAvLyBUaGlzIGVuYWJsZXMgcGxvdCBkYXRhIGFuZCBwcm9wZXJ0aWVzIHRvIGJlIGNoYW5nZWQKICAgICAgICAvLyBhbmQgdGhlbiB0byBjb21sZXRlbHkgY2xlYXIgdGhlIHBsb3QgYW5kIHJlZHJhdy4KICAgICAgICAvLyByZWRyYXcgKndpbGwgbm90KiByZWluaXRpYWxpemUgYW55IHBsb3QgZWxlbWVudHMuCiAgICAgICAgLy8gVGhhdCBpcywgYXhlcyB3aWxsIG5vdCBiZSBhdXRvc2NhbGVkIGFuZCBkZWZhdWx0cwogICAgICAgIC8vIHdpbGwgbm90IGJlIHJlYXBwbGllZCB0byBhbnkgcGxvdCBlbGVtZW50cy4gIHJlZHJhdwogICAgICAgIC8vIGlzIHVzZWQgcHJpbWFyaWx5IHdpdGggem9vbWluZy4gCiAgICAgICAgLy8KICAgICAgICAvLyBQYXJhbWV0ZXJzOgogICAgICAgIC8vIGNsZWFyIC0gZmFsc2UgdG8gbm90IGNsZWFyIChlbXB0eSkgdGhlIHBsb3QgY29udGFpbmVyIGJlZm9yZSByZWRyYXdpbmcgKGRlZmF1bHQ6IHRydWUpLgogICAgICAgIHRoaXMucmVkcmF3ID0gZnVuY3Rpb24oY2xlYXIpIHsKICAgICAgICAgICAgY2xlYXIgPSAoY2xlYXIgIT0gbnVsbCkgPyBjbGVhciA6IHRydWU7CiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnRyaWdnZXIoJ2pxcGxvdFByZVJlZHJhdycpOwogICAgICAgICAgICBpZiAoY2xlYXIpIHsKICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzTWFuYWdlci5mcmVlQWxsQ2FudmFzZXMoKTsKICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0udW5iaW5kKCk7CiAgICAgICAgICAgICAgICAvLyBEb250IHRoaW5rIEkgYmluZCBhbnkgZXZlbnRzIHRvIHRoZSB0YXJnZXQsIHRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgIC8vIEl0IHdpbGwgcmVtb3ZlIHVzZXIncyBldmVudHMuCiAgICAgICAgICAgICAgICAvLyB0aGlzLnRhcmdldC51bmJpbmQoKTsKICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmVtcHR5KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAodmFyIGF4IGluIHRoaXMuYXhlcykgewogICAgICAgICAgICAgICAgdGhpcy5heGVzW2F4XS5fdGlja3MgPSBbXTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmNvbXB1dGVQbG90RGF0YSgpOwogICAgICAgICAgICAvLyBmb3IgKHZhciBpPTA7IGk8dGhpcy5zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgLy8gICAgIHRoaXMucG9wdWxhdGVQbG90RGF0YSh0aGlzLnNlcmllc1tpXSwgaSk7CiAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAgdGhpcy5fc3VteSA9IDA7CiAgICAgICAgICAgIHRoaXMuX3N1bXggPSAwOwogICAgICAgICAgICBmb3IgKHZhciBpPTAsIHRzbCA9IHRoaXMuc2VyaWVzLmxlbmd0aDsgaTx0c2w7IGkrKykgewogICAgICAgICAgICAgICAgdGhpcy5fc3VteSArPSB0aGlzLnNlcmllc1tpXS5fc3VteTsKICAgICAgICAgICAgICAgIHRoaXMuX3N1bXggKz0gdGhpcy5zZXJpZXNbaV0uX3N1bXg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5kcmF3KCk7CiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnRyaWdnZXIoJ2pxcGxvdFBvc3RSZWRyYXcnKTsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIG1ldGhvZDogZHJhdwogICAgICAgIC8vIERyYXdzIGFsbCBlbGVtZW50cyBvZiB0aGUgcGxvdCBpbnRvIHRoZSBjb250YWluZXIuCiAgICAgICAgLy8gRG9lcyBub3QgY2xlYXIgdGhlIGNvbnRhaW5lciBiZWZvcmUgZHJhd2luZy4KICAgICAgICB0aGlzLmRyYXcgPSBmdW5jdGlvbigpewogICAgICAgICAgICBpZiAodGhpcy5kcmF3SWZIaWRkZW4gfHwgdGhpcy50YXJnZXQuaXMoJzp2aXNpYmxlJykpIHsKICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LnRyaWdnZXIoJ2pxcGxvdFByZURyYXcnKTsKICAgICAgICAgICAgICAgIHZhciBpLAogICAgICAgICAgICAgICAgICAgIGosCiAgICAgICAgICAgICAgICAgICAgbCwKICAgICAgICAgICAgICAgICAgICB0ZW1wc2VyaWVzOwogICAgICAgICAgICAgICAgZm9yIChpPTAsIGw9JC5qcXBsb3QucHJlRHJhd0hvb2tzLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAkLmpxcGxvdC5wcmVEcmF3SG9va3NbaV0uY2FsbCh0aGlzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAoaT0wLCBsPXRoaXMucHJlRHJhd0hvb2tzLmhvb2tzLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnByZURyYXdIb29rcy5ob29rc1tpXS5hcHBseSh0aGlzLCB0aGlzLnByZURyYXdTZXJpZXNIb29rcy5hcmdzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiB1bmRlcmx5aW5nIGNhbnZhcyB0byBiZSB1c2VkIGZvciBzcGVjaWFsIGZlYXR1cmVzLgogICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuYXBwZW5kKHRoaXMuYmFzZUNhbnZhcy5jcmVhdGVFbGVtZW50KHtsZWZ0OjAsIHJpZ2h0OjAsIHRvcDowLCBib3R0b206MH0sICdqcXBsb3QtYmFzZS1jYW52YXMnLCBudWxsLCB0aGlzKSk7CiAgICAgICAgICAgICAgICB0aGlzLmJhc2VDYW52YXMuc2V0Q29udGV4dCgpOwogICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuYXBwZW5kKHRoaXMudGl0bGUuZHJhdygpKTsKICAgICAgICAgICAgICAgIHRoaXMudGl0bGUucGFjayh7dG9wOjAsIGxlZnQ6MH0pOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBtYWtlIHJvb20gIGZvciB0aGUgbGVnZW5kIGJldHdlZW4gdGhlIGdyaWQgYW5kIHRoZSBlZGdlLgogICAgICAgICAgICAgICAgLy8gcGFzcyBhIGR1bW15IG9mZnNldHMgb2JqZWN0IGFuZCBhIHJlZmVyZW5jZSB0byB0aGUgcGxvdC4KICAgICAgICAgICAgICAgIHZhciBsZWdlbmRFbGVtID0gdGhpcy5sZWdlbmQuZHJhdyh7fSwgdGhpcyk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBncmlkUGFkZGluZyA9IHt0b3A6MCwgbGVmdDowLCBib3R0b206MCwgcmlnaHQ6MH07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0aGlzLmxlZ2VuZC5wbGFjZW1lbnQgPT0gIm91dHNpZGVHcmlkIikgewogICAgICAgICAgICAgICAgICAgIC8vIHRlbXBvcmFyaWx5IGFwcGVuZCB0aGUgbGVnZW5kIHRvIGdldCBkaW1lbnNpb25zCiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuYXBwZW5kKGxlZ2VuZEVsZW0pOwogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sZWdlbmQubG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkUGFkZGluZy50b3AgKz0gdGhpcy5sZWdlbmQuZ2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkUGFkZGluZy5ib3R0b20gKz0gdGhpcy5sZWdlbmQuZ2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmUnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlJzoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2UnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZFBhZGRpbmcucmlnaHQgKz0gdGhpcy5sZWdlbmQuZ2V0V2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdudyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3cnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkUGFkZGluZy5sZWZ0ICs9IHRoaXMubGVnZW5kLmdldFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogIC8vIHNhbWUgYXMgJ25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZFBhZGRpbmcucmlnaHQgKz0gdGhpcy5sZWdlbmQuZ2V0V2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBsZWdlbmRFbGVtID0gbGVnZW5kRWxlbS5kZXRhY2goKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGF4ID0gdGhpcy5heGVzOwogICAgICAgICAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSB5TWlkQXhpcyBmaXJzdCwgc28geGF4aXMgb2YgcHlyYW1pZCBjaGFydCBjYW4gYWRqdXN0IGl0c2VsZiBpZiBuZWVkZWQuCiAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTwxMjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IF9heGlzTmFtZXNbaV07CiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuYXBwZW5kKGF4W25hbWVdLmRyYXcodGhpcy5iYXNlQ2FudmFzLl9jdHgsIHRoaXMpKTsKICAgICAgICAgICAgICAgICAgICBheFtuYW1lXS5zZXQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChheC55YXhpcy5zaG93KSB7CiAgICAgICAgICAgICAgICAgICAgZ3JpZFBhZGRpbmcubGVmdCArPSBheC55YXhpcy5nZXRXaWR0aCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIHJhID0gWyd5MmF4aXMnLCAneTNheGlzJywgJ3k0YXhpcycsICd5NWF4aXMnLCAneTZheGlzJywgJ3k3YXhpcycsICd5OGF4aXMnLCAneTlheGlzJ107CiAgICAgICAgICAgICAgICB2YXIgcmFwYWQgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07CiAgICAgICAgICAgICAgICB2YXIgZ3ByID0gMDsKICAgICAgICAgICAgICAgIHZhciBuOwogICAgICAgICAgICAgICAgZm9yIChuPTA7IG48ODsgbisrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGF4W3JhW25dXS5zaG93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdwciArPSBheFtyYVtuXV0uZ2V0V2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmFwYWRbbl0gPSBncHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZ3JpZFBhZGRpbmcucmlnaHQgKz0gZ3ByOwogICAgICAgICAgICAgICAgaWYgKGF4LngyYXhpcy5zaG93KSB7CiAgICAgICAgICAgICAgICAgICAgZ3JpZFBhZGRpbmcudG9wICs9IGF4LngyYXhpcy5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpdGxlLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICBncmlkUGFkZGluZy50b3AgKz0gdGhpcy50aXRsZS5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChheC54YXhpcy5zaG93KSB7CiAgICAgICAgICAgICAgICAgICAgZ3JpZFBhZGRpbmcuYm90dG9tICs9IGF4LnhheGlzLmdldEhlaWdodCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBlbmQgb2YgZ3JpZFBhZGRpbmcgYWRqdXN0bWVudHMuCgogICAgICAgICAgICAgICAgLy8gaWYgdXNlciBwYXNzZWQgaW4gZ3JpZERpbWVuc2lvbnMgb3B0aW9uLCBjaGVjayBhZ2FpbnN0IGNhbGN1bGF0ZWQgZ3JpZFBhZGRpbmcKICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZ3JpZERpbWVuc2lvbnMgJiYgJC5pc1BsYWluT2JqZWN0KHRoaXMub3B0aW9ucy5ncmlkRGltZW5zaW9ucykpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZ2R3ID0gcGFyc2VJbnQodGhpcy5vcHRpb25zLmdyaWREaW1lbnNpb25zLndpZHRoLCAxMCkgfHwgMDsKICAgICAgICAgICAgICAgICAgICB2YXIgZ2RoID0gcGFyc2VJbnQodGhpcy5vcHRpb25zLmdyaWREaW1lbnNpb25zLmhlaWdodCwgMTApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoQWRqID0gKHRoaXMuX3dpZHRoIC0gZ3JpZFBhZGRpbmcubGVmdCAtIGdyaWRQYWRkaW5nLnJpZ2h0IC0gZ2R3KS8yOwogICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHRBZGogPSAodGhpcy5faGVpZ2h0IC0gZ3JpZFBhZGRpbmcudG9wIC0gZ3JpZFBhZGRpbmcuYm90dG9tIC0gZ2RoKS8yOwoKICAgICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0QWRqID49IDAgJiYgd2lkdGhBZGogPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBncmlkUGFkZGluZy50b3AgKz0gaGVpZ2h0QWRqOwogICAgICAgICAgICAgICAgICAgICAgICBncmlkUGFkZGluZy5ib3R0b20gKz0gaGVpZ2h0QWRqOwogICAgICAgICAgICAgICAgICAgICAgICBncmlkUGFkZGluZy5sZWZ0ICs9IHdpZHRoQWRqOwogICAgICAgICAgICAgICAgICAgICAgICBncmlkUGFkZGluZy5yaWdodCArPSB3aWR0aEFkajsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgYXJyID0gWyd0b3AnLCAnYm90dG9tJywgJ2xlZnQnLCAncmlnaHQnXTsKICAgICAgICAgICAgICAgIGZvciAodmFyIG4gaW4gYXJyKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2dyaWRQYWRkaW5nW2FycltuXV0gPT0gbnVsbCAmJiBncmlkUGFkZGluZ1thcnJbbl1dID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ncmlkUGFkZGluZ1thcnJbbl1dID0gZ3JpZFBhZGRpbmdbYXJyW25dXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fZ3JpZFBhZGRpbmdbYXJyW25dXSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dyaWRQYWRkaW5nW2FycltuXV0gPSB0aGlzLl9kZWZhdWx0R3JpZFBhZGRpbmdbYXJyW25dXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBsZWdlbmRQYWRkaW5nID0gdGhpcy5fZ3JpZFBhZGRpbmc7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0aGlzLmxlZ2VuZC5wbGFjZW1lbnQgPT09ICdvdXRzaWRlR3JpZCcpIHsKICAgICAgICAgICAgICAgICAgICBsZWdlbmRQYWRkaW5nID0ge3RvcDp0aGlzLnRpdGxlLmdldEhlaWdodCgpLCBsZWZ0OiAwLCByaWdodDogMCwgYm90dG9tOiAwfTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sZWdlbmQubG9jYXRpb24gPT09ICdzJykgewogICAgICAgICAgICAgICAgICAgICAgICBsZWdlbmRQYWRkaW5nLmxlZnQgPSB0aGlzLl9ncmlkUGFkZGluZy5sZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICBsZWdlbmRQYWRkaW5nLnJpZ2h0ID0gdGhpcy5fZ3JpZFBhZGRpbmcucmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBheC54YXhpcy5wYWNrKHtwb3NpdGlvbjonYWJzb2x1dGUnLCBib3R0b206dGhpcy5fZ3JpZFBhZGRpbmcuYm90dG9tIC0gYXgueGF4aXMuZ2V0SGVpZ2h0KCksIGxlZnQ6MCwgd2lkdGg6dGhpcy5fd2lkdGh9LCB7bWluOnRoaXMuX2dyaWRQYWRkaW5nLmxlZnQsIG1heDp0aGlzLl93aWR0aCAtIHRoaXMuX2dyaWRQYWRkaW5nLnJpZ2h0fSk7CiAgICAgICAgICAgICAgICBheC55YXhpcy5wYWNrKHtwb3NpdGlvbjonYWJzb2x1dGUnLCB0b3A6MCwgbGVmdDp0aGlzLl9ncmlkUGFkZGluZy5sZWZ0IC0gYXgueWF4aXMuZ2V0V2lkdGgoKSwgaGVpZ2h0OnRoaXMuX2hlaWdodH0sIHttaW46dGhpcy5faGVpZ2h0IC0gdGhpcy5fZ3JpZFBhZGRpbmcuYm90dG9tLCBtYXg6IHRoaXMuX2dyaWRQYWRkaW5nLnRvcH0pOwogICAgICAgICAgICAgICAgYXgueDJheGlzLnBhY2soe3Bvc2l0aW9uOidhYnNvbHV0ZScsIHRvcDp0aGlzLl9ncmlkUGFkZGluZy50b3AgLSBheC54MmF4aXMuZ2V0SGVpZ2h0KCksIGxlZnQ6MCwgd2lkdGg6dGhpcy5fd2lkdGh9LCB7bWluOnRoaXMuX2dyaWRQYWRkaW5nLmxlZnQsIG1heDp0aGlzLl93aWR0aCAtIHRoaXMuX2dyaWRQYWRkaW5nLnJpZ2h0fSk7CiAgICAgICAgICAgICAgICBmb3IgKGk9ODsgaT4wOyBpLS0pIHsKICAgICAgICAgICAgICAgICAgICBheFtyYVtpLTFdXS5wYWNrKHtwb3NpdGlvbjonYWJzb2x1dGUnLCB0b3A6MCwgcmlnaHQ6dGhpcy5fZ3JpZFBhZGRpbmcucmlnaHQgLSByYXBhZFtpLTFdfSwge21pbjp0aGlzLl9oZWlnaHQgLSB0aGlzLl9ncmlkUGFkZGluZy5ib3R0b20sIG1heDogdGhpcy5fZ3JpZFBhZGRpbmcudG9wfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgbHRlbXAgPSAodGhpcy5fd2lkdGggLSB0aGlzLl9ncmlkUGFkZGluZy5sZWZ0IC0gdGhpcy5fZ3JpZFBhZGRpbmcucmlnaHQpLzIuMCArIHRoaXMuX2dyaWRQYWRkaW5nLmxlZnQgLSBheC55TWlkQXhpcy5nZXRXaWR0aCgpLzIuMDsKICAgICAgICAgICAgICAgIGF4LnlNaWRBeGlzLnBhY2soe3Bvc2l0aW9uOidhYnNvbHV0ZScsIHRvcDowLCBsZWZ0Omx0ZW1wLCB6SW5kZXg6OSwgdGV4dEFsaWduOiAnY2VudGVyJ30sIHttaW46dGhpcy5faGVpZ2h0IC0gdGhpcy5fZ3JpZFBhZGRpbmcuYm90dG9tLCBtYXg6IHRoaXMuX2dyaWRQYWRkaW5nLnRvcH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmFwcGVuZCh0aGlzLmdyaWQuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywgdGhpcykpOwogICAgICAgICAgICAgICAgdGhpcy5ncmlkLmRyYXcoKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIHNlcmllcyA9IHRoaXMuc2VyaWVzOwogICAgICAgICAgICAgICAgdmFyIHNlcmllc0xlbmd0aCA9IHNlcmllcy5sZW5ndGg7CiAgICAgICAgICAgICAgICAvLyBwdXQgdGhlIHNoYWRvdyBjYW52YXNlcyBiZWhpbmQgdGhlIHNlcmllcyBjYW52YXNlcyBzbyBzaGFkb3dzIGRvbid0IG92ZXJsYXAgb24gc3RhY2tlZCBiYXJzLgogICAgICAgICAgICAgICAgZm9yIChpPTAsIGw9c2VyaWVzTGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgc2VyaWVzIGluIG9yZGVyIG9mIHN0YWNraW5nLiAgVGhpcyBhZmZlY3RzIG9ubHkKICAgICAgICAgICAgICAgICAgICAvLyBvcmRlciBpbiB3aGljaCBjYW52YXNlcyBhcmUgYWRkZWQgdG8gZG9tLgogICAgICAgICAgICAgICAgICAgIGogPSB0aGlzLnNlcmllc1N0YWNrW2ldOwogICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmFwcGVuZChzZXJpZXNbal0uc2hhZG93Q2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsICdqcXBsb3Qtc2VyaWVzLXNoYWRvd0NhbnZhcycsIG51bGwsIHRoaXMpKTsKICAgICAgICAgICAgICAgICAgICBzZXJpZXNbal0uc2hhZG93Q2FudmFzLnNldENvbnRleHQoKTsKICAgICAgICAgICAgICAgICAgICBzZXJpZXNbal0uc2hhZG93Q2FudmFzLl9lbGVtLmRhdGEoJ3Nlcmllc0luZGV4Jywgaik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZvciAoaT0wLCBsPXNlcmllc0xlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHNlcmllcyBpbiBvcmRlciBvZiBzdGFja2luZy4gIFRoaXMgYWZmZWN0cyBvbmx5CiAgICAgICAgICAgICAgICAgICAgLy8gb3JkZXIgaW4gd2hpY2ggY2FudmFzZXMgYXJlIGFkZGVkIHRvIGRvbS4KICAgICAgICAgICAgICAgICAgICBqID0gdGhpcy5zZXJpZXNTdGFja1tpXTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5hcHBlbmQoc2VyaWVzW2pdLmNhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCAnanFwbG90LXNlcmllcy1jYW52YXMnLCBudWxsLCB0aGlzKSk7CiAgICAgICAgICAgICAgICAgICAgc2VyaWVzW2pdLmNhbnZhcy5zZXRDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgc2VyaWVzW2pdLmNhbnZhcy5fZWxlbS5kYXRhKCdzZXJpZXNJbmRleCcsIGopOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gTmVlZCB0byB1c2UgZmlsbGVkIGNhbnZhcyB0byBjYXB0dXJlIGV2ZW50cyBpbiBJRS4KICAgICAgICAgICAgICAgIC8vIEFsc28sIGNhbnZhcyBzZWVtcyB0byBibG9jayBzZWxlY3Rpb24gb2Ygb3RoZXIgZWxlbWVudHMgaW4gZG9jdW1lbnQgb24gRkYuCiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5hcHBlbmQodGhpcy5ldmVudENhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCAnanFwbG90LWV2ZW50LWNhbnZhcycsIG51bGwsIHRoaXMpKTsKICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuc2V0Q29udGV4dCgpOwogICAgICAgICAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKDAsMCwwLDApJzsKICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2N0eC5maWxsUmVjdCgwLDAsdGhpcy5ldmVudENhbnZhcy5fY3R4LmNhbnZhcy53aWR0aCwgdGhpcy5ldmVudENhbnZhcy5fY3R4LmNhbnZhcy5oZWlnaHQpOwogICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIGJpbmQgY3VzdG9tIGV2ZW50IGhhbmRsZXJzIHRvIHJlZ3VsYXIgZXZlbnRzLgogICAgICAgICAgICAgICAgdGhpcy5iaW5kQ3VzdG9tRXZlbnRzKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gZHJhdyBsZWdlbmQgYmVmb3JlIHNlcmllcyBpZiB0aGUgc2VyaWVzIG5lZWRzIHRvIGtub3cgdGhlIGxlZ2VuZCBkaW1lbnNpb25zLgogICAgICAgICAgICAgICAgaWYgKHRoaXMubGVnZW5kLnByZURyYXcpIHsgIAogICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKGxlZ2VuZEVsZW0pOwogICAgICAgICAgICAgICAgICAgIHRoaXMubGVnZW5kLnBhY2sobGVnZW5kUGFkZGluZyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGVnZW5kLl9lbGVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd1Nlcmllcyh7bGVnZW5kSW5mbzp7bG9jYXRpb246dGhpcy5sZWdlbmQubG9jYXRpb24sIHBsYWNlbWVudDp0aGlzLmxlZ2VuZC5wbGFjZW1lbnQsIHdpZHRoOnRoaXMubGVnZW5kLmdldFdpZHRoKCksIGhlaWdodDp0aGlzLmxlZ2VuZC5nZXRIZWlnaHQoKSwgeG9mZnNldDp0aGlzLmxlZ2VuZC54b2Zmc2V0LCB5b2Zmc2V0OnRoaXMubGVnZW5kLnlvZmZzZXR9fSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdTZXJpZXMoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsgIC8vIGRyYXcgc2VyaWVzIGJlZm9yZSBsZWdlbmQKICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdTZXJpZXMoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc2VyaWVzTGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoc2VyaWVzW3Nlcmllc0xlbmd0aC0xXS5jYW52YXMuX2VsZW0pLmFmdGVyKGxlZ2VuZEVsZW0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0aGlzLmxlZ2VuZC5wYWNrKGxlZ2VuZFBhZGRpbmcpOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBldmVudCBsaXN0ZW5lcnMgb24gdGhlIG92ZXJsYXkgY2FudmFzCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTAsIGw9JC5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgaGFuZGxlciwgdGhpcyB3aWxsIHJlZmVyIHRvIHRoZSBldmVudENhbnZhcyBkb20gZWxlbWVudC4KICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlcmUgYXJlIHJlZmVyZW5jZXMgYmFjayBpbnRvIHBsb3Qgb2JqZWN0cy4KICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoJC5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzW2ldWzBdLCB7cGxvdDp0aGlzfSwgJC5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzW2ldWzFdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBldmVudCBsaXN0ZW5lcnMgb24gdGhlIG92ZXJsYXkgY2FudmFzCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTAsIGw9dGhpcy5ldmVudExpc3RlbmVySG9va3MuaG9va3MubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBoYW5kbGVyLCB0aGlzIHdpbGwgcmVmZXIgdG8gdGhlIGV2ZW50Q2FudmFzIGRvbSBlbGVtZW50LgogICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBhcmUgcmVmZXJlbmNlcyBiYWNrIGludG8gcGxvdCBvYmplY3RzLgogICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCh0aGlzLmV2ZW50TGlzdGVuZXJIb29rcy5ob29rc1tpXVswXSwge3Bsb3Q6dGhpc30sIHRoaXMuZXZlbnRMaXN0ZW5lckhvb2tzLmhvb2tzW2ldWzFdKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgZmIgPSB0aGlzLmZpbGxCZXR3ZWVuOwogICAgICAgICAgICAgICAgaWYgKGZiLmZpbGwgJiYgZmIuc2VyaWVzMSAhPT0gZmIuc2VyaWVzMiAmJiBmYi5zZXJpZXMxIDwgc2VyaWVzTGVuZ3RoICYmIGZiLnNlcmllczIgPCBzZXJpZXNMZW5ndGggJiYgc2VyaWVzW2ZiLnNlcmllczFdLl90eXBlID09PSAnbGluZScgJiYgc2VyaWVzW2ZiLnNlcmllczJdLl90eXBlID09PSAnbGluZScpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRvRmlsbEJldHdlZW5MaW5lcygpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbD0kLmpxcGxvdC5wb3N0RHJhd0hvb2tzLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAkLmpxcGxvdC5wb3N0RHJhd0hvb2tzW2ldLmNhbGwodGhpcyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wLCBsPXRoaXMucG9zdERyYXdIb29rcy5ob29rcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3N0RHJhd0hvb2tzLmhvb2tzW2ldLmFwcGx5KHRoaXMsIHRoaXMucG9zdERyYXdIb29rcy5hcmdzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAodGhpcy50YXJnZXQuaXMoJzp2aXNpYmxlJykpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9kcmF3Q291bnQgKz0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgdGVtcHMsIAogICAgICAgICAgICAgICAgICAgIHRlbXByLAogICAgICAgICAgICAgICAgICAgIHNlbCwKICAgICAgICAgICAgICAgICAgICBfZWxzOwogICAgICAgICAgICAgICAgLy8gdWdoaC4gIGlkZWFsbHkgd291bGQgaGlkZSBhbGwgc2VyaWVzIHRoZW4gc2hvdyB0aGVtLgogICAgICAgICAgICAgICAgZm9yIChpPTAsIGw9c2VyaWVzTGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRlbXBzID0gc2VyaWVzW2ldOwogICAgICAgICAgICAgICAgICAgIHRlbXByID0gdGVtcHMucmVuZGVyZXI7CiAgICAgICAgICAgICAgICAgICAgc2VsID0gJy5qcXBsb3QtcG9pbnQtbGFiZWwuanFwbG90LXNlcmllcy0nK2k7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXByLmFuaW1hdGlvbiAmJiB0ZW1wci5hbmltYXRpb24uX3N1cHBvcnRlZCAmJiB0ZW1wci5hbmltYXRpb24uc2hvdyAmJiAodGhpcy5fZHJhd0NvdW50IDwgMiB8fCB0aGlzLmFuaW1hdGVSZXBsb3QpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9lbHMgPSB0aGlzLnRhcmdldC5maW5kKHNlbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIF9lbHMuc3RvcCh0cnVlLCB0cnVlKS5oaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBzLmNhbnZhcy5fZWxlbS5zdG9wKHRydWUsIHRydWUpLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHMuc2hhZG93Q2FudmFzLl9lbGVtLnN0b3AodHJ1ZSwgdHJ1ZSkuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wcy5jYW52YXMuX2VsZW0uanFwbG90RWZmZWN0KCdibGluZCcsIHttb2RlOiAnc2hvdycsIGRpcmVjdGlvbjogdGVtcHIuYW5pbWF0aW9uLmRpcmVjdGlvbn0sIHRlbXByLmFuaW1hdGlvbi5zcGVlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBzLnNoYWRvd0NhbnZhcy5fZWxlbS5qcXBsb3RFZmZlY3QoJ2JsaW5kJywge21vZGU6ICdzaG93JywgZGlyZWN0aW9uOiB0ZW1wci5hbmltYXRpb24uZGlyZWN0aW9ufSwgdGVtcHIuYW5pbWF0aW9uLnNwZWVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgX2Vscy5mYWRlSW4odGVtcHIuYW5pbWF0aW9uLnNwZWVkKjAuOCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX2VscyA9IG51bGw7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdGhpcy50YXJnZXQudHJpZ2dlcignanFwbG90UG9zdERyYXcnLCBbdGhpc10pOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAganFQbG90LnByb3RvdHlwZS5kb0ZpbGxCZXR3ZWVuTGluZXMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBmYiA9IHRoaXMuZmlsbEJldHdlZW47CiAgICAgICAgICAgIHZhciBzaWQxID0gZmIuc2VyaWVzMTsKICAgICAgICAgICAgdmFyIHNpZDIgPSBmYi5zZXJpZXMyOwogICAgICAgICAgICAvLyBmaXJzdCBzZXJpZXMgc2hvdWxkIGFsd2F5cyBiZSBsb3dlc3QgaW5kZXgKICAgICAgICAgICAgdmFyIGlkMSA9IChzaWQxIDwgc2lkMikgPyBzaWQxIDogc2lkMjsKICAgICAgICAgICAgdmFyIGlkMiA9IChzaWQyID4gIHNpZDEpID8gc2lkMiA6IHNpZDE7CgogICAgICAgICAgICB2YXIgc2VyaWVzMSA9IHRoaXMuc2VyaWVzW2lkMV07CiAgICAgICAgICAgIHZhciBzZXJpZXMyID0gdGhpcy5zZXJpZXNbaWQyXTsKCiAgICAgICAgICAgIGlmIChzZXJpZXMyLnJlbmRlcmVyLnNtb290aCkgewogICAgICAgICAgICAgICAgdmFyIHRlbXBnZCA9IHNlcmllczIucmVuZGVyZXIuX3Ntb290aGVkRGF0YS5zbGljZSgwKS5yZXZlcnNlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgdGVtcGdkID0gc2VyaWVzMi5ncmlkRGF0YS5zbGljZSgwKS5yZXZlcnNlKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChzZXJpZXMxLnJlbmRlcmVyLnNtb290aCkgewogICAgICAgICAgICAgICAgdmFyIGdkID0gc2VyaWVzMS5yZW5kZXJlci5fc21vb3RoZWREYXRhLmNvbmNhdCh0ZW1wZ2QpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGdkID0gc2VyaWVzMS5ncmlkRGF0YS5jb25jYXQodGVtcGdkKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGNvbG9yID0gKGZiLmNvbG9yICE9PSBudWxsKSA/IGZiLmNvbG9yIDogdGhpcy5zZXJpZXNbc2lkMV0uZmlsbENvbG9yOwogICAgICAgICAgICB2YXIgYmFzZVNlcmllcyA9IChmYi5iYXNlU2VyaWVzICE9PSBudWxsKSA/IGZiLmJhc2VTZXJpZXMgOiBpZDE7CgogICAgICAgICAgICAvLyBub3cgYXBwbHkgYSBmaWxsIHRvIHRoZSBzaGFwZSBvbiB0aGUgbG93ZXIgc2VyaWVzIHNoYWRvdyBjYW52YXMsCiAgICAgICAgICAgIC8vIHNvIGl0IGlzIGJlaGluZCBib3RoIHNlcmllcy4KICAgICAgICAgICAgdmFyIHNyID0gdGhpcy5zZXJpZXNbYmFzZVNlcmllc10ucmVuZGVyZXIuc2hhcGVSZW5kZXJlcjsKICAgICAgICAgICAgdmFyIG9wdHMgPSB7ZmlsbFN0eWxlOiBjb2xvciwgZmlsbDogdHJ1ZSwgY2xvc2VQYXRoOiB0cnVlfTsKICAgICAgICAgICAgc3IuZHJhdyhzZXJpZXMxLnNoYWRvd0NhbnZhcy5fY3R4LCBnZCwgb3B0cyk7CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICB0aGlzLmJpbmRDdXN0b21FdmVudHMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCdjbGljaycsIHtwbG90OnRoaXN9LCB0aGlzLm9uQ2xpY2spOwogICAgICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoJ2RibGNsaWNrJywge3Bsb3Q6dGhpc30sIHRoaXMub25EYmxDbGljayk7CiAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgnbW91c2Vkb3duJywge3Bsb3Q6dGhpc30sIHRoaXMub25Nb3VzZURvd24pOwogICAgICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoJ21vdXNlbW92ZScsIHtwbG90OnRoaXN9LCB0aGlzLm9uTW91c2VNb3ZlKTsKICAgICAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCdtb3VzZWVudGVyJywge3Bsb3Q6dGhpc30sIHRoaXMub25Nb3VzZUVudGVyKTsKICAgICAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCdtb3VzZWxlYXZlJywge3Bsb3Q6dGhpc30sIHRoaXMub25Nb3VzZUxlYXZlKTsKICAgICAgICAgICAgaWYgKHRoaXMuY2FwdHVyZVJpZ2h0Q2xpY2spIHsKICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgnbW91c2V1cCcsIHtwbG90OnRoaXN9LCB0aGlzLm9uUmlnaHRDbGljayk7CiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmdldCgwKS5vbmNvbnRleHRtZW51ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgnbW91c2V1cCcsIHtwbG90OnRoaXN9LCB0aGlzLm9uTW91c2VVcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIAogICAgICAgIGZ1bmN0aW9uIGdldEV2ZW50UG9zaXRpb24oZXYpIHsKICAgICAgICAgICAgdmFyIHBsb3QgPSBldi5kYXRhLnBsb3Q7CiAgICAgICAgICAgIHZhciBnbyA9IHBsb3QuZXZlbnRDYW52YXMuX2VsZW0ub2Zmc2V0KCk7CiAgICAgICAgICAgIHZhciBncmlkUG9zID0ge3g6ZXYucGFnZVggLSBnby5sZWZ0LCB5OmV2LnBhZ2VZIC0gZ28udG9wfTsKICAgICAgICAgICAgdmFyIGRhdGFQb3MgPSB7eGF4aXM6bnVsbCwgeWF4aXM6bnVsbCwgeDJheGlzOm51bGwsIHkyYXhpczpudWxsLCB5M2F4aXM6bnVsbCwgeTRheGlzOm51bGwsIHk1YXhpczpudWxsLCB5NmF4aXM6bnVsbCwgeTdheGlzOm51bGwsIHk4YXhpczpudWxsLCB5OWF4aXM6bnVsbCwgeU1pZEF4aXM6bnVsbH07CiAgICAgICAgICAgIHZhciBhbiA9IFsneGF4aXMnLCAneWF4aXMnLCAneDJheGlzJywgJ3kyYXhpcycsICd5M2F4aXMnLCAneTRheGlzJywgJ3k1YXhpcycsICd5NmF4aXMnLCAneTdheGlzJywgJ3k4YXhpcycsICd5OWF4aXMnLCAneU1pZEF4aXMnXTsKICAgICAgICAgICAgdmFyIGF4ID0gcGxvdC5heGVzOwogICAgICAgICAgICB2YXIgbiwgYXhpczsKICAgICAgICAgICAgZm9yIChuPTExOyBuPjA7IG4tLSkgewogICAgICAgICAgICAgICAgYXhpcyA9IGFuW24tMV07CiAgICAgICAgICAgICAgICBpZiAoYXhbYXhpc10uc2hvdykgewogICAgICAgICAgICAgICAgICAgIGRhdGFQb3NbYXhpc10gPSBheFtheGlzXS5zZXJpZXNfcDJ1KGdyaWRQb3NbYXhpcy5jaGFyQXQoMCldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHtvZmZzZXRzOmdvLCBncmlkUG9zOmdyaWRQb3MsIGRhdGFQb3M6ZGF0YVBvc307CiAgICAgICAgfQogICAgICAgIAogICAgICAgIAogICAgICAgIC8vIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGV2ZW50IGxvY2F0aW9uIGlzIG92ZXIgYSBhcmVhIGFyZWEKICAgICAgICBmdW5jdGlvbiBjaGVja0ludGVyc2VjdGlvbihncmlkcG9zLCBwbG90KSB7CiAgICAgICAgICAgIHZhciBzZXJpZXMgPSBwbG90LnNlcmllczsKICAgICAgICAgICAgdmFyIGksIGosIGssIHMsIHIsIHgsIHksIHRoZXRhLCBzbSwgc2EsIG1pbmFuZywgbWF4YW5nOwogICAgICAgICAgICB2YXIgZDAsIGQsIHAsIHBwLCBwb2ludHMsIGJ3LCBocDsKICAgICAgICAgICAgdmFyIHRocmVzaG9sZCwgdDsKICAgICAgICAgICAgZm9yIChrPXBsb3Quc2VyaWVzU3RhY2subGVuZ3RoLTE7IGs+PTA7IGstLSkgewogICAgICAgICAgICAgICAgaSA9IHBsb3Quc2VyaWVzU3RhY2tba107CiAgICAgICAgICAgICAgICBzID0gc2VyaWVzW2ldOwogICAgICAgICAgICAgICAgaHAgPSBzLl9oaWdobGlnaHRUaHJlc2hvbGQ7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHMucmVuZGVyZXIuY29uc3RydWN0b3IpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICQuanFwbG90LkJhclJlbmRlcmVyOgogICAgICAgICAgICAgICAgICAgICAgICB4ID0gZ3JpZHBvcy54OwogICAgICAgICAgICAgICAgICAgICAgICB5ID0gZ3JpZHBvcy55OwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGo9MDsgajxzLl9iYXJQb2ludHMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHMuX2JhclBvaW50c1tqXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBzLmdyaWREYXRhW2pdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHg+cG9pbnRzWzBdWzBdICYmIHg8cG9pbnRzWzJdWzBdICYmIHk+cG9pbnRzWzJdWzFdICYmIHk8cG9pbnRzWzBdWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtzZXJpZXNJbmRleDpzLmluZGV4LCBwb2ludEluZGV4OmosIGdyaWREYXRhOnAsIGRhdGE6cy5kYXRhW2pdLCBwb2ludHM6cy5fYmFyUG9pbnRzW2pdfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICQuanFwbG90LlB5cmFtaWRSZW5kZXJlcjoKICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGdyaWRwb3MueDsKICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGdyaWRwb3MueTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7IGo8cy5fYmFyUG9pbnRzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBzLl9iYXJQb2ludHNbal07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcy5ncmlkRGF0YVtqXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID4gcG9pbnRzWzBdWzBdICsgaHBbMF1bMF0gJiYgeCA8IHBvaW50c1syXVswXSArIGhwWzJdWzBdICYmIHkgPiBwb2ludHNbMl1bMV0gJiYgeSA8IHBvaW50c1swXVsxXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7c2VyaWVzSW5kZXg6cy5pbmRleCwgcG9pbnRJbmRleDpqLCBncmlkRGF0YTpwLCBkYXRhOnMuZGF0YVtqXSwgcG9pbnRzOnMuX2JhclBvaW50c1tqXX07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2FzZSAkLmpxcGxvdC5Eb251dFJlbmRlcmVyOgogICAgICAgICAgICAgICAgICAgICAgICBzYSA9IHMuc3RhcnRBbmdsZS8xODAqTWF0aC5QSTsKICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGdyaWRwb3MueCAtIHMuX2NlbnRlclswXTsKICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGdyaWRwb3MueSAtIHMuX2NlbnRlclsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgciA9IE1hdGguc3FydChNYXRoLnBvdyh4LCAyKSArIE1hdGgucG93KHksIDIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPiAwICYmIC15ID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXRhID0gMipNYXRoLlBJIC0gTWF0aC5hdGFuKC15L3gpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHggPiAwICYmIC15IDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhldGEgPSAtTWF0aC5hdGFuKC15L3gpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHggPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV0YSA9IE1hdGguUEkgLSBNYXRoLmF0YW4oLXkveCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeCA9PSAwICYmIC15ID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhldGEgPSAzKk1hdGguUEkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4ID09IDAgJiYgLXkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV0YSA9IE1hdGguUEkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4ID09IDAgJiYgeSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV0YSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV0YSAtPSBzYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGV0YSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV0YSArPSAyKk1hdGguUEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGV0YSA+IDIqTWF0aC5QSSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXRhIC09IDIqTWF0aC5QSTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgc20gPSBzLnNsaWNlTWFyZ2luLzE4MCpNYXRoLlBJOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IHMuX3JhZGl1cyAmJiByID4gcy5faW5uZXJSYWRpdXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqPHMuZ3JpZERhdGEubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5hbmcgPSAoaj4wKSA/IHMuZ3JpZERhdGFbai0xXVsxXStzbSA6IHNtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGFuZyA9IHMuZ3JpZERhdGFbal1bMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoZXRhID4gbWluYW5nICYmIHRoZXRhIDwgbWF4YW5nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7c2VyaWVzSW5kZXg6cy5pbmRleCwgcG9pbnRJbmRleDpqLCBncmlkRGF0YTpbZ3JpZHBvcy54LGdyaWRwb3MueV0sIGRhdGE6cy5kYXRhW2pdfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNhc2UgJC5qcXBsb3QuUGllUmVuZGVyZXI6CiAgICAgICAgICAgICAgICAgICAgICAgIHNhID0gcy5zdGFydEFuZ2xlLzE4MCpNYXRoLlBJOwogICAgICAgICAgICAgICAgICAgICAgICB4ID0gZ3JpZHBvcy54IC0gcy5fY2VudGVyWzBdOwogICAgICAgICAgICAgICAgICAgICAgICB5ID0gZ3JpZHBvcy55IC0gcy5fY2VudGVyWzFdOwogICAgICAgICAgICAgICAgICAgICAgICByID0gTWF0aC5zcXJ0KE1hdGgucG93KHgsIDIpICsgTWF0aC5wb3coeSwgMikpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA+IDAgJiYgLXkgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhldGEgPSAyKk1hdGguUEkgLSBNYXRoLmF0YW4oLXkveCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeCA+IDAgJiYgLXkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV0YSA9IC1NYXRoLmF0YW4oLXkveCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeCA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXRhID0gTWF0aC5QSSAtIE1hdGguYXRhbigteS94KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4ID09IDAgJiYgLXkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV0YSA9IDMqTWF0aC5QSS8yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHggPT0gMCAmJiAteSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXRhID0gTWF0aC5QSS8yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHggPT0gMCAmJiB5ID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXRhID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2EpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXRhIC09IHNhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoZXRhIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXRhICs9IDIqTWF0aC5QSTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoZXRhID4gMipNYXRoLlBJKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhldGEgLT0gMipNYXRoLlBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBzbSA9IHMuc2xpY2VNYXJnaW4vMTgwKk1hdGguUEk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgcy5fcmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGo9MDsgajxzLmdyaWREYXRhLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluYW5nID0gKGo+MCkgPyBzLmdyaWREYXRhW2otMV1bMV0rc20gOiBzbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhhbmcgPSBzLmdyaWREYXRhW2pdWzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGV0YSA+IG1pbmFuZyAmJiB0aGV0YSA8IG1heGFuZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3Nlcmllc0luZGV4OnMuaW5kZXgsIHBvaW50SW5kZXg6aiwgZ3JpZERhdGE6W2dyaWRwb3MueCxncmlkcG9zLnldLCBkYXRhOnMuZGF0YVtqXX07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjYXNlICQuanFwbG90LkJ1YmJsZVJlbmRlcmVyOgogICAgICAgICAgICAgICAgICAgICAgICB4ID0gZ3JpZHBvcy54OwogICAgICAgICAgICAgICAgICAgICAgICB5ID0gZ3JpZHBvcy55OwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajxzLmdyaWREYXRhLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHMuZ3JpZERhdGFbal07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IE1hdGguc3FydCggKHgtcFswXSkgKiAoeC1wWzBdKSArICh5LXBbMV0pICogKHktcFsxXSkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCA8PSBwWzJdICYmIChkIDw9IGQwIHx8IGQwID09IG51bGwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDAgPSBkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHtzZXJpZXNJbmRleDogaSwgcG9pbnRJbmRleDpqLCBncmlkRGF0YTpwLCBkYXRhOnMuZGF0YVtqXX07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2FzZSAkLmpxcGxvdC5GdW5uZWxSZW5kZXJlcjoKICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGdyaWRwb3MueDsKICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGdyaWRwb3MueTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBzLl92ZXJ0aWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZmaXJzdCA9IHZbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bGFzdCA9IHZbdi5sZW5ndGgtMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdjsKICAgIAogICAgICAgICAgICAgICAgICAgICAgICAvLyBlcXVhdGlvbnMgb2YgcmlnaHQgYW5kIGxlZnQgc2lkZXMsIHJldHVybnMgeCwgeSB2YWx1ZXMgZ2l2ZW4gaGVpZ2h0IG9mIHNlY3Rpb24gKHkgdmFsdWUgYW5kIDIgcG9pbnRzKQogICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmRlZGdlIChsLCBwMSAsIHAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IChwMVsxXSAtIHAyWzFdKS8ocDFbMF0gLSBwMlswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IHAxWzFdIC0gbSpwMVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5ID0gbCArIHAxWzFdOwogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsoeSAtIGIpL20sIHldOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZWFjaCBzZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIGxleCA9IGZpbmRlZGdlKHksIHZmaXJzdFswXSwgdmxhc3RbM10pOwogICAgICAgICAgICAgICAgICAgICAgICByZXggPSBmaW5kZWRnZSh5LCB2Zmlyc3RbMV0sIHZsYXN0WzJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7IGo8di5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3YgPSB2W2pdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPj0gY3ZbMF1bMV0gJiYgeSA8PSBjdlszXVsxXSAmJiB4ID49IGxleFswXSAmJiB4IDw9IHJleFswXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7c2VyaWVzSW5kZXg6cy5pbmRleCwgcG9pbnRJbmRleDpqLCBncmlkRGF0YTpudWxsLCBkYXRhOnMuZGF0YVtqXX07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjYXNlICQuanFwbG90LkxpbmVSZW5kZXJlcjoKICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGdyaWRwb3MueDsKICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGdyaWRwb3MueTsKICAgICAgICAgICAgICAgICAgICAgICAgciA9IHMucmVuZGVyZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocy5maWxsIHx8IChzLnJlbmRlcmVyLmJhbmRzLnNob3cgJiYgcy5yZW5kZXJlci5iYW5kcy5maWxsKSkgJiYgKCFwbG90LnBsdWdpbnMuaGlnaGxpZ2h0ZXIgfHwgIXBsb3QucGx1Z2lucy5oaWdobGlnaHRlci5zaG93KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNoZWNrIGlmIGl0IGlzIGluIGJvdW5kaW5nIGJveAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnNpZGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeD5zLl9ib3VuZGluZ0JveFswXVswXSAmJiB4PHMuX2JvdW5kaW5nQm94WzFdWzBdICYmIHk+cy5fYm91bmRpbmdCb3hbMV1bMV0gJiYgeTxzLl9ib3VuZGluZ0JveFswXVsxXSkgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm93IGNoZWNrIHRoZSBjcm9zc2luZyBudW1iZXIgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Qb2ludHMgPSBzLl9hcmVhUG9pbnRzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IG51bVBvaW50cy0xOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBpaT0wOyBpaSA8IG51bVBvaW50czsgaWkrKykgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXgxID0gW3MuX2FyZWFQb2ludHNbaWldWzBdLCBzLl9hcmVhUG9pbnRzW2lpXVsxXV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGV4MiA9IFtzLl9hcmVhUG9pbnRzW2pdWzBdLCBzLl9hcmVhUG9pbnRzW2pdWzFdXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVydGV4MVsxXSA8IHkgJiYgdmVydGV4MlsxXSA+PSB5IHx8IHZlcnRleDJbMV0gPCB5ICYmIHZlcnRleDFbMV0gPj0geSkgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVydGV4MVswXSArICh5IC0gdmVydGV4MVsxXSkgLyAodmVydGV4MlsxXSAtIHZlcnRleDFbMV0pICogKHZlcnRleDJbMF0gLSB2ZXJ0ZXgxWzBdKSA8IHgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGlpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2lkZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3Nlcmllc0luZGV4OmksIHBvaW50SW5kZXg6bnVsbCwgZ3JpZERhdGE6cy5ncmlkRGF0YSwgZGF0YTpzLmRhdGEsIHBvaW50czpzLl9hcmVhUG9pbnRzfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHMubWFya2VyUmVuZGVyZXIuc2l6ZS8yK3MubmVpZ2hib3JUaHJlc2hvbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkID0gKHQgPiAwKSA/IHQgOiAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajxzLmdyaWREYXRhLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBzLmdyaWREYXRhW2pdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZWlnaGJvciBsb29rcyBkaWZmZXJlbnQgdG8gT0hMQyBjaGFydC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuT0hMQ1JlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5jYW5kbGVTdGljaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5cCA9IHMuX3lheGlzLnNlcmllc191MnA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPj0gcFswXS1yLl9ib2R5V2lkdGgvMiAmJiB4IDw9IHBbMF0rci5fYm9keVdpZHRoLzIgJiYgeSA+PSB5cChzLmRhdGFbal1bMl0pICYmIHkgPD0geXAocy5kYXRhW2pdWzNdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3Nlcmllc0luZGV4OiBpLCBwb2ludEluZGV4OmosIGdyaWREYXRhOnAsIGRhdGE6cy5kYXRhW2pdfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBhbiBvcGVuIGhpIGxvdyBjbG9zZSBjaGFydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXIuaGxjKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeXAgPSBzLl95YXhpcy5zZXJpZXNfdTJwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID49IHBbMF0tci5fdGlja0xlbmd0aCAmJiB4IDw9IHBbMF0rci5fdGlja0xlbmd0aCAmJiB5ID49IHlwKHMuZGF0YVtqXVsyXSkgJiYgeSA8PSB5cChzLmRhdGFbal1bM10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7c2VyaWVzSW5kZXg6IGksIHBvaW50SW5kZXg6aiwgZ3JpZERhdGE6cCwgZGF0YTpzLmRhdGFbal19OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgaGkgbG93IGNsb3NlIGNoYXJ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeXAgPSBzLl95YXhpcy5zZXJpZXNfdTJwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID49IHBbMF0tci5fdGlja0xlbmd0aCAmJiB4IDw9IHBbMF0rci5fdGlja0xlbmd0aCAmJiB5ID49IHlwKHMuZGF0YVtqXVsxXSkgJiYgeSA8PSB5cChzLmRhdGFbal1bMl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7c2VyaWVzSW5kZXg6IGksIHBvaW50SW5kZXg6aiwgZ3JpZERhdGE6cCwgZGF0YTpzLmRhdGFbal19OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBbMF0gIT0gbnVsbCAmJiBwWzFdICE9IG51bGwpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IE1hdGguc3FydCggKHgtcFswXSkgKiAoeC1wWzBdKSArICh5LXBbMV0pICogKHktcFsxXSkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkIDw9IHRocmVzaG9sZCAmJiAoZCA8PSBkMCB8fCBkMCA9PSBudWxsKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDAgPSBkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtzZXJpZXNJbmRleDogaSwgcG9pbnRJbmRleDpqLCBncmlkRGF0YTpwLCBkYXRhOnMuZGF0YVtqXX07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICB4ID0gZ3JpZHBvcy54OwogICAgICAgICAgICAgICAgICAgICAgICB5ID0gZ3JpZHBvcy55OwogICAgICAgICAgICAgICAgICAgICAgICByID0gcy5yZW5kZXJlcjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuc2hvdykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHMubWFya2VyUmVuZGVyZXIuc2l6ZS8yK3MubmVpZ2hib3JUaHJlc2hvbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSAodCA+IDApID8gdCA6IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8cy5ncmlkRGF0YS5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBzLmdyaWREYXRhW2pdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5laWdoYm9yIGxvb2tzIGRpZmZlcmVudCB0byBPSExDIGNoYXJ0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLmNvbnN0cnVjdG9yID09ICQuanFwbG90Lk9ITENSZW5kZXJlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5jYW5kbGVTdGljaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHlwID0gcy5feWF4aXMuc2VyaWVzX3UycDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID49IHBbMF0tci5fYm9keVdpZHRoLzIgJiYgeCA8PSBwWzBdK3IuX2JvZHlXaWR0aC8yICYmIHkgPj0geXAocy5kYXRhW2pdWzJdKSAmJiB5IDw9IHlwKHMuZGF0YVtqXVszXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3Nlcmllc0luZGV4OiBpLCBwb2ludEluZGV4OmosIGdyaWREYXRhOnAsIGRhdGE6cy5kYXRhW2pdfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBhbiBvcGVuIGhpIGxvdyBjbG9zZSBjaGFydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghci5obGMpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHlwID0gcy5feWF4aXMuc2VyaWVzX3UycDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID49IHBbMF0tci5fdGlja0xlbmd0aCAmJiB4IDw9IHBbMF0rci5fdGlja0xlbmd0aCAmJiB5ID49IHlwKHMuZGF0YVtqXVsyXSkgJiYgeSA8PSB5cChzLmRhdGFbal1bM10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtzZXJpZXNJbmRleDogaSwgcG9pbnRJbmRleDpqLCBncmlkRGF0YTpwLCBkYXRhOnMuZGF0YVtqXX07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBoaSBsb3cgY2xvc2UgY2hhcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeXAgPSBzLl95YXhpcy5zZXJpZXNfdTJwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPj0gcFswXS1yLl90aWNrTGVuZ3RoICYmIHggPD0gcFswXStyLl90aWNrTGVuZ3RoICYmIHkgPj0geXAocy5kYXRhW2pdWzFdKSAmJiB5IDw9IHlwKHMuZGF0YVtqXVsyXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3Nlcmllc0luZGV4OiBpLCBwb2ludEluZGV4OmosIGdyaWREYXRhOnAsIGRhdGE6cy5kYXRhW2pdfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gTWF0aC5zcXJ0KCAoeC1wWzBdKSAqICh4LXBbMF0pICsgKHktcFsxXSkgKiAoeS1wWzFdKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCA8PSB0aHJlc2hvbGQgJiYgKGQgPD0gZDAgfHwgZDAgPT0gbnVsbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDAgPSBkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3Nlcmllc0luZGV4OiBpLCBwb2ludEluZGV4OmosIGdyaWREYXRhOnAsIGRhdGE6cy5kYXRhW2pdfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICB0aGlzLm9uQ2xpY2sgPSBmdW5jdGlvbihldikgewogICAgICAgICAgICAvLyBFdmVudCBwYXNzZWQgaW4gaXMgbm9ybWFsaXplZCBhbmQgd2lsbCBoYXZlIGRhdGEgYXR0cmlidXRlLgogICAgICAgICAgICAvLyBFdmVudCBwYXNzZWQgb3V0IGlzIHVubm9ybWFsaXplZC4KICAgICAgICAgICAgdmFyIHBvc2l0aW9ucyA9IGdldEV2ZW50UG9zaXRpb24oZXYpOwogICAgICAgICAgICB2YXIgcCA9IGV2LmRhdGEucGxvdDsKICAgICAgICAgICAgdmFyIG5laWdoYm9yID0gY2hlY2tJbnRlcnNlY3Rpb24ocG9zaXRpb25zLmdyaWRQb3MsIHApOwogICAgICAgICAgICB2YXIgZXZ0ID0gJC5FdmVudCgnanFwbG90Q2xpY2snKTsKICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICAkKHRoaXMpLnRyaWdnZXIoZXZ0LCBbcG9zaXRpb25zLmdyaWRQb3MsIHBvc2l0aW9ucy5kYXRhUG9zLCBuZWlnaGJvciwgcF0pOwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5vbkRibENsaWNrID0gZnVuY3Rpb24oZXYpIHsKICAgICAgICAgICAgLy8gRXZlbnQgcGFzc2VkIGluIGlzIG5vcm1hbGl6ZWQgYW5kIHdpbGwgaGF2ZSBkYXRhIGF0dHJpYnV0ZS4KICAgICAgICAgICAgLy8gRXZlbnQgcGFzc2VkIG91dCBpcyB1bm5vcm1hbGl6ZWQuCiAgICAgICAgICAgIHZhciBwb3NpdGlvbnMgPSBnZXRFdmVudFBvc2l0aW9uKGV2KTsKICAgICAgICAgICAgdmFyIHAgPSBldi5kYXRhLnBsb3Q7CiAgICAgICAgICAgIHZhciBuZWlnaGJvciA9IGNoZWNrSW50ZXJzZWN0aW9uKHBvc2l0aW9ucy5ncmlkUG9zLCBwKTsKICAgICAgICAgICAgdmFyIGV2dCA9ICQuRXZlbnQoJ2pxcGxvdERibENsaWNrJyk7CiAgICAgICAgICAgIGV2dC5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKGV2dCwgW3Bvc2l0aW9ucy5ncmlkUG9zLCBwb3NpdGlvbnMuZGF0YVBvcywgbmVpZ2hib3IsIHBdKTsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIHRoaXMub25Nb3VzZURvd24gPSBmdW5jdGlvbihldikgewogICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gZ2V0RXZlbnRQb3NpdGlvbihldik7CiAgICAgICAgICAgIHZhciBwID0gZXYuZGF0YS5wbG90OwogICAgICAgICAgICB2YXIgbmVpZ2hib3IgPSBjaGVja0ludGVyc2VjdGlvbihwb3NpdGlvbnMuZ3JpZFBvcywgcCk7CiAgICAgICAgICAgIHZhciBldnQgPSAkLkV2ZW50KCdqcXBsb3RNb3VzZURvd24nKTsKICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICAkKHRoaXMpLnRyaWdnZXIoZXZ0LCBbcG9zaXRpb25zLmdyaWRQb3MsIHBvc2l0aW9ucy5kYXRhUG9zLCBuZWlnaGJvciwgcF0pOwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5vbk1vdXNlVXAgPSBmdW5jdGlvbihldikgewogICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gZ2V0RXZlbnRQb3NpdGlvbihldik7CiAgICAgICAgICAgIHZhciBldnQgPSAkLkV2ZW50KCdqcXBsb3RNb3VzZVVwJyk7CiAgICAgICAgICAgIGV2dC5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKGV2dCwgW3Bvc2l0aW9ucy5ncmlkUG9zLCBwb3NpdGlvbnMuZGF0YVBvcywgbnVsbCwgZXYuZGF0YS5wbG90XSk7CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICB0aGlzLm9uUmlnaHRDbGljayA9IGZ1bmN0aW9uKGV2KSB7CiAgICAgICAgICAgIHZhciBwb3NpdGlvbnMgPSBnZXRFdmVudFBvc2l0aW9uKGV2KTsKICAgICAgICAgICAgdmFyIHAgPSBldi5kYXRhLnBsb3Q7CiAgICAgICAgICAgIHZhciBuZWlnaGJvciA9IGNoZWNrSW50ZXJzZWN0aW9uKHBvc2l0aW9ucy5ncmlkUG9zLCBwKTsKICAgICAgICAgICAgaWYgKHAuY2FwdHVyZVJpZ2h0Q2xpY2spIHsKICAgICAgICAgICAgICAgIGlmIChldi53aGljaCA9PSAzKSB7CiAgICAgICAgICAgICAgICB2YXIgZXZ0ID0gJC5FdmVudCgnanFwbG90UmlnaHRDbGljaycpOwogICAgICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnRyaWdnZXIoZXZ0LCBbcG9zaXRpb25zLmdyaWRQb3MsIHBvc2l0aW9ucy5kYXRhUG9zLCBuZWlnaGJvciwgcF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgZXZ0ID0gJC5FdmVudCgnanFwbG90TW91c2VVcCcpOwogICAgICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnRyaWdnZXIoZXZ0LCBbcG9zaXRpb25zLmdyaWRQb3MsIHBvc2l0aW9ucy5kYXRhUG9zLCBuZWlnaGJvciwgcF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICB0aGlzLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24oZXYpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9ucyA9IGdldEV2ZW50UG9zaXRpb24oZXYpOwogICAgICAgICAgICB2YXIgcCA9IGV2LmRhdGEucGxvdDsKICAgICAgICAgICAgdmFyIG5laWdoYm9yID0gY2hlY2tJbnRlcnNlY3Rpb24ocG9zaXRpb25zLmdyaWRQb3MsIHApOwogICAgICAgICAgICB2YXIgZXZ0ID0gJC5FdmVudCgnanFwbG90TW91c2VNb3ZlJyk7CiAgICAgICAgICAgIGV2dC5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKGV2dCwgW3Bvc2l0aW9ucy5ncmlkUG9zLCBwb3NpdGlvbnMuZGF0YVBvcywgbmVpZ2hib3IsIHBdKTsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIHRoaXMub25Nb3VzZUVudGVyID0gZnVuY3Rpb24oZXYpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9ucyA9IGdldEV2ZW50UG9zaXRpb24oZXYpOwogICAgICAgICAgICB2YXIgcCA9IGV2LmRhdGEucGxvdDsKICAgICAgICAgICAgdmFyIGV2dCA9ICQuRXZlbnQoJ2pxcGxvdE1vdXNlRW50ZXInKTsKICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICBldnQucmVsYXRlZFRhcmdldCA9IGV2LnJlbGF0ZWRUYXJnZXQ7CiAgICAgICAgICAgICQodGhpcykudHJpZ2dlcihldnQsIFtwb3NpdGlvbnMuZ3JpZFBvcywgcG9zaXRpb25zLmRhdGFQb3MsIG51bGwsIHBdKTsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIHRoaXMub25Nb3VzZUxlYXZlID0gZnVuY3Rpb24oZXYpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9ucyA9IGdldEV2ZW50UG9zaXRpb24oZXYpOwogICAgICAgICAgICB2YXIgcCA9IGV2LmRhdGEucGxvdDsKICAgICAgICAgICAgdmFyIGV2dCA9ICQuRXZlbnQoJ2pxcGxvdE1vdXNlTGVhdmUnKTsKICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICBldnQucmVsYXRlZFRhcmdldCA9IGV2LnJlbGF0ZWRUYXJnZXQ7CiAgICAgICAgICAgICQodGhpcykudHJpZ2dlcihldnQsIFtwb3NpdGlvbnMuZ3JpZFBvcywgcG9zaXRpb25zLmRhdGFQb3MsIG51bGwsIHBdKTsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIG1ldGhvZDogZHJhd1NlcmllcwogICAgICAgIC8vIFJlZHJhd3MgYWxsIG9yIGp1c3Qgb25lIHNlcmllcyBvbiB0aGUgcGxvdC4gIE5vIGF4aXMgc2NhbGluZwogICAgICAgIC8vIGlzIHBlcmZvcm1lZCBhbmQgbm8gb3RoZXIgZWxlbWVudHMgb24gdGhlIHBsb3QgYXJlIHJlZHJhd24uCiAgICAgICAgLy8gb3B0aW9ucyBpcyBhbiBvcHRpb25zIG9iamVjdCB0byBwYXNzIG9uIHRvIHRoZSBzZXJpZXMgcmVuZGVyZXJzLgogICAgICAgIC8vIEl0IGNhbiBiZSBhbiBlbXB0eSBvYmplY3Qge30uICBpZHggaXMgdGhlIHNlcmllcyBpbmRleAogICAgICAgIC8vIHRvIHJlZHJhdyBpZiBvbmx5IG9uZSBzZXJpZXMgaXMgdG8gYmUgcmVkcmF3bi4KICAgICAgICB0aGlzLmRyYXdTZXJpZXMgPSBmdW5jdGlvbihvcHRpb25zLCBpZHgpewogICAgICAgICAgICB2YXIgaSwgc2VyaWVzLCBjdHg7CiAgICAgICAgICAgIC8vIGlmIG9ubHkgb25lIGFyZ3VtZW50IHBhc3NlZCBpbiBhbmQgaXQgaXMgYSBudW1iZXIsIHVzZSBpdCBhZCBpZHguCiAgICAgICAgICAgIGlkeCA9ICh0eXBlb2Yob3B0aW9ucykgPT09ICJudW1iZXIiICYmIGlkeCA9PSBudWxsKSA/IG9wdGlvbnMgOiBpZHg7CiAgICAgICAgICAgIG9wdGlvbnMgPSAodHlwZW9mKG9wdGlvbnMpID09PSAib2JqZWN0IikgPyBvcHRpb25zIDoge307CiAgICAgICAgICAgIC8vIGRyYXcgc3BlY2lmaWVkIHNlcmllcwogICAgICAgICAgICBpZiAoaWR4ICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgc2VyaWVzID0gdGhpcy5zZXJpZXNbaWR4XTsKICAgICAgICAgICAgICAgIGN0eCA9IHNlcmllcy5zaGFkb3dDYW52YXMuX2N0eDsKICAgICAgICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgY3R4LmNhbnZhcy53aWR0aCwgY3R4LmNhbnZhcy5oZWlnaHQpOwogICAgICAgICAgICAgICAgc2VyaWVzLmRyYXdTaGFkb3coY3R4LCBvcHRpb25zLCB0aGlzKTsKICAgICAgICAgICAgICAgIGN0eCA9IHNlcmllcy5jYW52YXMuX2N0eDsKICAgICAgICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgY3R4LmNhbnZhcy53aWR0aCwgY3R4LmNhbnZhcy5oZWlnaHQpOwogICAgICAgICAgICAgICAgc2VyaWVzLmRyYXcoY3R4LCBvcHRpb25zLCB0aGlzKTsKICAgICAgICAgICAgICAgIGlmIChzZXJpZXMucmVuZGVyZXIuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlcikgewogICAgICAgICAgICAgICAgICAgIGlmIChpZHggPCB0aGlzLnNlcmllcy5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd1NlcmllcyhpZHgrMSk7IAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBpZiBjYWxsIHNlcmllcyBkcmF3U2hhZG93IG1ldGhvZCBmaXJzdCwgaW4gY2FzZSBhbGwgc2VyaWVzIHNoYWRvd3MKICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBkcmF3biBiZWZvcmUgYW55IHNlcmllcy4gIFRoaXMgd2lsbCBlbnN1cmUsIGxpa2UgZm9yIAogICAgICAgICAgICAgICAgLy8gc3RhY2tlZCBiYXIgcGxvdHMsIHRoYXQgc2hhZG93cyBkb24ndCBvdmVybGFwIHNlcmllcy4KICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHRoaXMuc2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgY2xlYXIgdGhlIGNhbnZhcwogICAgICAgICAgICAgICAgICAgIHNlcmllcyA9IHRoaXMuc2VyaWVzW2ldOwogICAgICAgICAgICAgICAgICAgIGN0eCA9IHNlcmllcy5zaGFkb3dDYW52YXMuX2N0eDsKICAgICAgICAgICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGN0eC5jYW52YXMud2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICBzZXJpZXMuZHJhd1NoYWRvdyhjdHgsIG9wdGlvbnMsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIGN0eCA9IHNlcmllcy5jYW52YXMuX2N0eDsKICAgICAgICAgICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGN0eC5jYW52YXMud2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICBzZXJpZXMuZHJhdyhjdHgsIG9wdGlvbnMsIHRoaXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIG9wdGlvbnMgPSBpZHggPSBpID0gc2VyaWVzID0gY3R4ID0gbnVsbDsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIG1ldGhvZDogbW92ZVNlcmllc1RvRnJvbnQKICAgICAgICAvLyBUaGlzIG1ldGhvZCByZXF1aXJlcyBqUXVlcnkgMS40KwogICAgICAgIC8vIE1vdmVzIHRoZSBzcGVjaWZpZWQgc2VyaWVzIGNhbnZhcyBpbiBmcm9udCBvZiBhbGwgb3RoZXIgc2VyaWVzIGNhbnZhc2VzLgogICAgICAgIC8vIFRoaXMgZWZmZWN0aXZlbHkgImRyYXdzIiB0aGUgc3BlY2lmaWVkIHNlcmllcyBvbiB0b3Agb2YgYWxsIG90aGVyIHNlcmllcywKICAgICAgICAvLyBhbHRob3VnaCBpdCBpcyBwZXJmb3JtZWQgdGhyb3VnaCBET00gbWFuaXB1bGF0aW9uLCBubyByZWRyYXdpbmcgaXMgcGVyZm9ybWVkLgogICAgICAgIC8vCiAgICAgICAgLy8gUGFyYW1ldGVyczoKICAgICAgICAvLyBpZHggLSAwIGJhc2VkIGluZGV4IG9mIHRoZSBzZXJpZXMgdG8gbW92ZS4gIFRoaXMgd2lsbCBiZSB0aGUgaW5kZXggb2YgdGhlIHNlcmllcwogICAgICAgIC8vIGFzIGl0IHdhcyBmaXJzdCBwYXNzZWQgaW50byB0aGUganFwbG90IGZ1bmN0aW9uLgogICAgICAgIHRoaXMubW92ZVNlcmllc1RvRnJvbnQgPSBmdW5jdGlvbiAoaWR4KSB7IAogICAgICAgICAgICBpZHggPSBwYXJzZUludChpZHgsIDEwKTsKICAgICAgICAgICAgdmFyIHN0YWNrSW5kZXggPSAkLmluQXJyYXkoaWR4LCB0aGlzLnNlcmllc1N0YWNrKTsKICAgICAgICAgICAgLy8gaWYgYWxyZWFkeSBpbiBmcm9udCwgcmV0dXJuCiAgICAgICAgICAgIGlmIChzdGFja0luZGV4ID09IC0xKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0YWNrSW5kZXggPT0gdGhpcy5zZXJpZXNTdGFjay5sZW5ndGggLTEpIHsKICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNTZXJpZXNTdGFjayA9IHRoaXMuc2VyaWVzU3RhY2suc2xpY2UoMCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG9waWR4ID0gdGhpcy5zZXJpZXNTdGFja1t0aGlzLnNlcmllc1N0YWNrLmxlbmd0aCAtMV07CiAgICAgICAgICAgIHZhciBzZXJlbGVtID0gdGhpcy5zZXJpZXNbaWR4XS5jYW52YXMuX2VsZW0uZGV0YWNoKCk7CiAgICAgICAgICAgIHZhciBzaGFkZWxlbSA9IHRoaXMuc2VyaWVzW2lkeF0uc2hhZG93Q2FudmFzLl9lbGVtLmRldGFjaCgpOwogICAgICAgICAgICB0aGlzLnNlcmllc1tvcGlkeF0uc2hhZG93Q2FudmFzLl9lbGVtLmFmdGVyKHNoYWRlbGVtKTsKICAgICAgICAgICAgdGhpcy5zZXJpZXNbb3BpZHhdLmNhbnZhcy5fZWxlbS5hZnRlcihzZXJlbGVtKTsKICAgICAgICAgICAgdGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrID0gdGhpcy5zZXJpZXNTdGFjay5zbGljZSgwKTsKICAgICAgICAgICAgdGhpcy5zZXJpZXNTdGFjay5zcGxpY2Uoc3RhY2tJbmRleCwgMSk7CiAgICAgICAgICAgIHRoaXMuc2VyaWVzU3RhY2sucHVzaChpZHgpOwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgLy8gbWV0aG9kOiBtb3ZlU2VyaWVzVG9CYWNrCiAgICAgICAgLy8gVGhpcyBtZXRob2QgcmVxdWlyZXMgalF1ZXJ5IDEuNCsKICAgICAgICAvLyBNb3ZlcyB0aGUgc3BlY2lmaWVkIHNlcmllcyBjYW52YXMgYmVoaW5kIGFsbCBvdGhlciBzZXJpZXMgY2FudmFzZXMuCiAgICAgICAgLy8KICAgICAgICAvLyBQYXJhbWV0ZXJzOgogICAgICAgIC8vIGlkeCAtIDAgYmFzZWQgaW5kZXggb2YgdGhlIHNlcmllcyB0byBtb3ZlLiAgVGhpcyB3aWxsIGJlIHRoZSBpbmRleCBvZiB0aGUgc2VyaWVzCiAgICAgICAgLy8gYXMgaXQgd2FzIGZpcnN0IHBhc3NlZCBpbnRvIHRoZSBqcXBsb3QgZnVuY3Rpb24uCiAgICAgICAgdGhpcy5tb3ZlU2VyaWVzVG9CYWNrID0gZnVuY3Rpb24gKGlkeCkgewogICAgICAgICAgICBpZHggPSBwYXJzZUludChpZHgsIDEwKTsKICAgICAgICAgICAgdmFyIHN0YWNrSW5kZXggPSAkLmluQXJyYXkoaWR4LCB0aGlzLnNlcmllc1N0YWNrKTsKICAgICAgICAgICAgLy8gaWYgYWxyZWFkeSBpbiBiYWNrLCByZXR1cm4KICAgICAgICAgICAgaWYgKHN0YWNrSW5kZXggPT0gMCB8fCBzdGFja0luZGV4ID09IC0xKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG9waWR4ID0gdGhpcy5zZXJpZXNTdGFja1swXTsKICAgICAgICAgICAgdmFyIHNlcmVsZW0gPSB0aGlzLnNlcmllc1tpZHhdLmNhbnZhcy5fZWxlbS5kZXRhY2goKTsKICAgICAgICAgICAgdmFyIHNoYWRlbGVtID0gdGhpcy5zZXJpZXNbaWR4XS5zaGFkb3dDYW52YXMuX2VsZW0uZGV0YWNoKCk7CiAgICAgICAgICAgIHRoaXMuc2VyaWVzW29waWR4XS5zaGFkb3dDYW52YXMuX2VsZW0uYmVmb3JlKHNoYWRlbGVtKTsKICAgICAgICAgICAgdGhpcy5zZXJpZXNbb3BpZHhdLmNhbnZhcy5fZWxlbS5iZWZvcmUoc2VyZWxlbSk7CiAgICAgICAgICAgIHRoaXMucHJldmlvdXNTZXJpZXNTdGFjayA9IHRoaXMuc2VyaWVzU3RhY2suc2xpY2UoMCk7CiAgICAgICAgICAgIHRoaXMuc2VyaWVzU3RhY2suc3BsaWNlKHN0YWNrSW5kZXgsIDEpOwogICAgICAgICAgICB0aGlzLnNlcmllc1N0YWNrLnVuc2hpZnQoaWR4KTsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIG1ldGhvZDogcmVzdG9yZVByZXZpb3VzU2VyaWVzT3JkZXIKICAgICAgICAvLyBUaGlzIG1ldGhvZCByZXF1aXJlcyBqUXVlcnkgMS40KwogICAgICAgIC8vIFJlc3RvcmUgdGhlIHNlcmllcyBjYW52YXMgb3JkZXIgdG8gaXRzIHByZXZpb3VzIHN0YXRlLgogICAgICAgIC8vIFVzZWZ1bCB0byBwdXQgYSBzZXJpZXMgYmFjayB3aGVyZSBpdCBiZWxvbmdzIGFmdGVyIG1vdmluZwogICAgICAgIC8vIGl0IHRvIHRoZSBmcm9udC4KICAgICAgICB0aGlzLnJlc3RvcmVQcmV2aW91c1Nlcmllc09yZGVyID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgaSwgaiwgc2VyZWxlbSwgc2hhZGVsZW0sIHRlbXAsIG1vdmUsIGtlZXA7CiAgICAgICAgICAgIC8vIGlmIG5vIGNoYW5nZSwgcmV0dXJuLgogICAgICAgICAgICBpZiAodGhpcy5zZXJpZXNTdGFjayA9PSB0aGlzLnByZXZpb3VzU2VyaWVzU3RhY2spIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKGk9MTsgaTx0aGlzLnByZXZpb3VzU2VyaWVzU3RhY2subGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIG1vdmUgPSB0aGlzLnByZXZpb3VzU2VyaWVzU3RhY2tbaV07CiAgICAgICAgICAgICAgICBrZWVwID0gdGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrW2ktMV07CiAgICAgICAgICAgICAgICBzZXJlbGVtID0gdGhpcy5zZXJpZXNbbW92ZV0uY2FudmFzLl9lbGVtLmRldGFjaCgpOwogICAgICAgICAgICAgICAgc2hhZGVsZW0gPSB0aGlzLnNlcmllc1ttb3ZlXS5zaGFkb3dDYW52YXMuX2VsZW0uZGV0YWNoKCk7CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc1trZWVwXS5zaGFkb3dDYW52YXMuX2VsZW0uYWZ0ZXIoc2hhZGVsZW0pOwogICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNba2VlcF0uY2FudmFzLl9lbGVtLmFmdGVyKHNlcmVsZW0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRlbXAgPSB0aGlzLnNlcmllc1N0YWNrLnNsaWNlKDApOwogICAgICAgICAgICB0aGlzLnNlcmllc1N0YWNrID0gdGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrLnNsaWNlKDApOwogICAgICAgICAgICB0aGlzLnByZXZpb3VzU2VyaWVzU3RhY2sgPSB0ZW1wOwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgLy8gbWV0aG9kOiByZXN0b3JlT3JpZ2luYWxTZXJpZXNPcmRlcgogICAgICAgIC8vIFRoaXMgbWV0aG9kIHJlcXVpcmVzIGpRdWVyeSAxLjQrCiAgICAgICAgLy8gUmVzdG9yZSB0aGUgc2VyaWVzIGNhbnZhcyBvcmRlciB0byBpdHMgb3JpZ2luYWwgb3JkZXIKICAgICAgICAvLyB3aGVuIHRoZSBwbG90IHdhcyBjcmVhdGVkLgogICAgICAgIHRoaXMucmVzdG9yZU9yaWdpbmFsU2VyaWVzT3JkZXIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBpLCBqLCBhcnI9W10sIHNlcmVsZW0sIHNoYWRlbGVtOwogICAgICAgICAgICBmb3IgKGk9MDsgaTx0aGlzLnNlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgYXJyLnB1c2goaSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuc2VyaWVzU3RhY2sgPT0gYXJyKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrID0gdGhpcy5zZXJpZXNTdGFjay5zbGljZSgwKTsKICAgICAgICAgICAgdGhpcy5zZXJpZXNTdGFjayA9IGFycjsKICAgICAgICAgICAgZm9yIChpPTE7IGk8dGhpcy5zZXJpZXNTdGFjay5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgc2VyZWxlbSA9IHRoaXMuc2VyaWVzW2ldLmNhbnZhcy5fZWxlbS5kZXRhY2goKTsKICAgICAgICAgICAgICAgIHNoYWRlbGVtID0gdGhpcy5zZXJpZXNbaV0uc2hhZG93Q2FudmFzLl9lbGVtLmRldGFjaCgpOwogICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNbaS0xXS5zaGFkb3dDYW52YXMuX2VsZW0uYWZ0ZXIoc2hhZGVsZW0pOwogICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNbaS0xXS5jYW52YXMuX2VsZW0uYWZ0ZXIoc2VyZWxlbSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIAogICAgICAgIHRoaXMuYWN0aXZhdGVUaGVtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgICAgIHRoaXMudGhlbWVFbmdpbmUuYWN0aXZhdGUodGhpcywgbmFtZSk7CiAgICAgICAgfTsKICAgIH0KICAgIAogICAgCiAgICAvLyBjb25wdXRlIGEgaGlnaGxpZ2h0IGNvbG9yIG9yIGFycmF5IG9mIGhpZ2hsaWdodCBjb2xvcnMgZnJvbSBnaXZlbiBjb2xvcnMuCiAgICAkLmpxcGxvdC5jb21wdXRlSGlnaGxpZ2h0Q29sb3JzICA9IGZ1bmN0aW9uKGNvbG9ycykgewogICAgICAgIHZhciByZXQ7CiAgICAgICAgaWYgKCQuaXNBcnJheShjb2xvcnMpKSB7CiAgICAgICAgICAgIHJldCA9IFtdOwogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8Y29sb3JzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgIHZhciByZ2JhID0gJC5qcXBsb3QuZ2V0Q29sb3JDb21wb25lbnRzKGNvbG9yc1tpXSk7CiAgICAgICAgICAgICAgICB2YXIgbmV3cmdiID0gW3JnYmFbMF0sIHJnYmFbMV0sIHJnYmFbMl1dOwogICAgICAgICAgICAgICAgdmFyIHN1bSA9IG5ld3JnYlswXSArIG5ld3JnYlsxXSArIG5ld3JnYlsyXTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajwzOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGRhcmtlbmluZywgbG93ZXN0IGNvbG9yIGNvbXBvbmVudCBjYW4gYmUgaXMgNjAuCiAgICAgICAgICAgICAgICAgICAgbmV3cmdiW2pdID0gKHN1bSA+IDY2MCkgPyAgbmV3cmdiW2pdICogMC44NSA6IDAuNzMgKiBuZXdyZ2Jbal0gKyA5MDsKICAgICAgICAgICAgICAgICAgICBuZXdyZ2Jbal0gPSBwYXJzZUludChuZXdyZ2Jbal0sIDEwKTsKICAgICAgICAgICAgICAgICAgICAobmV3cmdiW2pdID4gMjU1KSA/IDI1NSA6IG5ld3JnYltqXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIG5ld3JnYlszXSA9IChyZ2JhWzNdID4gMC40KSA/IHJnYmFbM10gKiAwLjQgOiByZ2JhWzNdICogMS41OwogICAgICAgICAgICAgICAgLy8gbmV3cmdiWzNdID0gKHJnYmFbM10gPiAwLjUpID8gMC44ICogcmdiYVszXSAtIC4xIDogcmdiYVszXSArIDAuMjsKICAgICAgICAgICAgICAgIG5ld3JnYlszXSA9IDAuMyArIDAuMzUgKiByZ2JhWzNdOwogICAgICAgICAgICAgICAgcmV0LnB1c2goJ3JnYmEoJytuZXdyZ2JbMF0rJywnK25ld3JnYlsxXSsnLCcrbmV3cmdiWzJdKycsJytuZXdyZ2JbM10rJyknKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIHJnYmEgPSAkLmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHMoY29sb3JzKTsKICAgICAgICAgICAgdmFyIG5ld3JnYiA9IFtyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdXTsKICAgICAgICAgICAgdmFyIHN1bSA9IG5ld3JnYlswXSArIG5ld3JnYlsxXSArIG5ld3JnYlsyXTsKICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPDM7IGorKykgewogICAgICAgICAgICAgICAgLy8gd2hlbiBkYXJrZW5pbmcsIGxvd2VzdCBjb2xvciBjb21wb25lbnQgY2FuIGJlIGlzIDYwLgogICAgICAgICAgICAgICAgLy8gbmV3cmdiW2pdID0gKHN1bSA+IDU3MCkgPyAgbmV3cmdiW2pdICogMC44IDogbmV3cmdiW2pdICsgMC4zICogKDI1NSAtIG5ld3JnYltqXSk7CiAgICAgICAgICAgICAgICAvLyBuZXdyZ2Jbal0gPSBwYXJzZUludChuZXdyZ2Jbal0sIDEwKTsKICAgICAgICAgICAgICAgIG5ld3JnYltqXSA9IChzdW0gPiA2NjApID8gIG5ld3JnYltqXSAqIDAuODUgOiAwLjczICogbmV3cmdiW2pdICsgOTA7CiAgICAgICAgICAgICAgICBuZXdyZ2Jbal0gPSBwYXJzZUludChuZXdyZ2Jbal0sIDEwKTsKICAgICAgICAgICAgICAgIChuZXdyZ2Jbal0gPiAyNTUpID8gMjU1IDogbmV3cmdiW2pdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIG5ld3JnYlszXSA9IChyZ2JhWzNdID4gMC40KSA/IHJnYmFbM10gKiAwLjQgOiByZ2JhWzNdICogMS41OwogICAgICAgICAgICAvLyBuZXdyZ2JbM10gPSAocmdiYVszXSA+IDAuNSkgPyAwLjggKiByZ2JhWzNdIC0gLjEgOiByZ2JhWzNdICsgMC4yOwogICAgICAgICAgICBuZXdyZ2JbM10gPSAwLjMgKyAwLjM1ICogcmdiYVszXTsKICAgICAgICAgICAgcmV0ID0gJ3JnYmEoJytuZXdyZ2JbMF0rJywnK25ld3JnYlsxXSsnLCcrbmV3cmdiWzJdKycsJytuZXdyZ2JbM10rJyknOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgfTsKICAgICAgICAKICAgJC5qcXBsb3QuQ29sb3JHZW5lcmF0b3IgPSBmdW5jdGlvbihjb2xvcnMpIHsKICAgICAgICBjb2xvcnMgPSBjb2xvcnMgfHwgJC5qcXBsb3QuY29uZmlnLmRlZmF1bHRDb2xvcnM7CiAgICAgICAgdmFyIGlkeCA9IDA7CiAgICAgICAgCiAgICAgICAgdGhpcy5uZXh0ID0gZnVuY3Rpb24gKCkgeyAKICAgICAgICAgICAgaWYgKGlkeCA8IGNvbG9ycy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb2xvcnNbaWR4KytdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWR4ID0gMDsKICAgICAgICAgICAgICAgIHJldHVybiBjb2xvcnNbaWR4KytdOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICB0aGlzLnByZXZpb3VzID0gZnVuY3Rpb24gKCkgeyAKICAgICAgICAgICAgaWYgKGlkeCA+IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb2xvcnNbaWR4LS1dOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWR4ID0gY29sb3JzLmxlbmd0aC0xOwogICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yc1tpZHhdOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICAvLyBnZXQgYSBjb2xvciBieSBpbmRleCB3aXRob3V0IGFkdmFuY2luZyBwb2ludGVyLgogICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oaSkgewogICAgICAgICAgICB2YXIgaWR4ID0gaSAtIGNvbG9ycy5sZW5ndGggKiBNYXRoLmZsb29yKGkvY29sb3JzLmxlbmd0aCk7CiAgICAgICAgICAgIHJldHVybiBjb2xvcnNbaWR4XTsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIHRoaXMuc2V0Q29sb3JzID0gZnVuY3Rpb24oYykgewogICAgICAgICAgICBjb2xvcnMgPSBjOwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5yZXNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZHggPSAwOwogICAgICAgIH07CgogICAgICAgIHRoaXMuZ2V0SW5kZXggPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIGlkeDsKICAgICAgICB9OwoKICAgICAgICB0aGlzLnNldEluZGV4ID0gZnVuY3Rpb24oaW5kZXgpIHsKICAgICAgICAgICAgaWR4ID0gaW5kZXg7CiAgICAgICAgfTsKICAgIH07CgogICAgLy8gY29udmVydCBhIGhleCBjb2xvciBzdHJpbmcgdG8gcmdiIHN0cmluZy4KICAgIC8vIGggLSAzIG9yIDYgY2hhcmFjdGVyIGhleCBzdHJpbmcsIHdpdGggb3Igd2l0aG91dCBsZWFkaW5nICMKICAgIC8vIGEgLSBvcHRpb25hbCBhbHBoYQogICAgJC5qcXBsb3QuaGV4MnJnYiA9IGZ1bmN0aW9uKGgsIGEpIHsKICAgICAgICBoID0gaC5yZXBsYWNlKCcjJywgJycpOwogICAgICAgIGlmIChoLmxlbmd0aCA9PSAzKSB7CiAgICAgICAgICAgIGggPSBoLmNoYXJBdCgwKStoLmNoYXJBdCgwKStoLmNoYXJBdCgxKStoLmNoYXJBdCgxKStoLmNoYXJBdCgyKStoLmNoYXJBdCgyKTsKICAgICAgICB9CiAgICAgICAgdmFyIHJnYjsKICAgICAgICByZ2IgPSAncmdiYSgnK3BhcnNlSW50KGguc2xpY2UoMCwyKSwgMTYpKycsICcrcGFyc2VJbnQoaC5zbGljZSgyLDQpLCAxNikrJywgJytwYXJzZUludChoLnNsaWNlKDQsNiksIDE2KTsKICAgICAgICBpZiAoYSkgewogICAgICAgICAgICByZ2IgKz0gJywgJythOwogICAgICAgIH0KICAgICAgICByZ2IgKz0gJyknOwogICAgICAgIHJldHVybiByZ2I7CiAgICB9OwogICAgCiAgICAvLyBjb252ZXJ0IGFuIHJnYiBjb2xvciBzcGVjIHRvIGEgaGV4IHNwZWMuICBpZ25vcmUgYW55IGFscGhhIHNwZWNpZmljYXRpb24uCiAgICAkLmpxcGxvdC5yZ2IyaGV4ID0gZnVuY3Rpb24ocykgewogICAgICAgIHZhciBwYXQgPSAvcmdiYT9cKCAqKFswLTldezEsM31cLj9bMC05XSolPykgKiwgKihbMC05XXsxLDN9XC4/WzAtOV0qJT8pICosICooWzAtOV17MSwzfVwuP1swLTldKiU/KSAqKD86LCAqWzAtOS5dKik/XCkvOwogICAgICAgIHZhciBtID0gcy5tYXRjaChwYXQpOwogICAgICAgIHZhciBoID0gJyMnOwogICAgICAgIGZvciAodmFyIGk9MTsgaTw0OyBpKyspIHsKICAgICAgICAgICAgdmFyIHRlbXA7CiAgICAgICAgICAgIGlmIChtW2ldLnNlYXJjaCgvJS8pICE9IC0xKSB7CiAgICAgICAgICAgICAgICB0ZW1wID0gcGFyc2VJbnQoMjU1Km1baV0vMTAwLCAxMCkudG9TdHJpbmcoMTYpOwogICAgICAgICAgICAgICAgaWYgKHRlbXAubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgICAgICAgICB0ZW1wID0gJzAnK3RlbXA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0ZW1wID0gcGFyc2VJbnQobVtpXSwgMTApLnRvU3RyaW5nKDE2KTsKICAgICAgICAgICAgICAgIGlmICh0ZW1wLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgdGVtcCA9ICcwJyt0ZW1wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGggKz0gdGVtcDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGg7CiAgICB9OwogICAgCiAgICAvLyBnaXZlbiBhIGNzcyBjb2xvciBzcGVjLCByZXR1cm4gYW4gcmdiIGNzcyBjb2xvciBzcGVjCiAgICAkLmpxcGxvdC5ub3JtYWxpemUycmdiID0gZnVuY3Rpb24ocywgYSkgewogICAgICAgIGlmIChzLnNlYXJjaCgvXiAqcmdiYT9cKC8pICE9IC0xKSB7CiAgICAgICAgICAgIHJldHVybiBzOyAKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocy5zZWFyY2goL14gKiM/WzAtOWEtZkEtRl0/WzAtOWEtZkEtRl0vKSAhPSAtMSkgewogICAgICAgICAgICByZXR1cm4gJC5qcXBsb3QuaGV4MnJnYihzLCBhKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2xvciBzcGVjJyk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgLy8gZXh0cmFjdCB0aGUgciwgZywgYiwgYSBjb2xvciBjb21wb25lbnRzIG91dCBvZiBhIGNzcyBjb2xvciBzcGVjLgogICAgJC5qcXBsb3QuZ2V0Q29sb3JDb21wb25lbnRzID0gZnVuY3Rpb24ocykgewogICAgICAgIC8vIGNoZWNrIHRvIHNlZSBpZiBhIGNvbG9yIGtleXdvcmQuCiAgICAgICAgcyA9ICQuanFwbG90LmNvbG9yS2V5d29yZE1hcFtzXSB8fCBzOwogICAgICAgIHZhciByZ2IgPSAkLmpxcGxvdC5ub3JtYWxpemUycmdiKHMpOwogICAgICAgIHZhciBwYXQgPSAvcmdiYT9cKCAqKFswLTldezEsM31cLj9bMC05XSolPykgKiwgKihbMC05XXsxLDN9XC4/WzAtOV0qJT8pICosICooWzAtOV17MSwzfVwuP1swLTldKiU/KSAqLD8gKihbMC05Ll0qICopP1wpLzsKICAgICAgICB2YXIgbSA9IHJnYi5tYXRjaChwYXQpOwogICAgICAgIHZhciByZXQgPSBbXTsKICAgICAgICBmb3IgKHZhciBpPTE7IGk8NDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChtW2ldLnNlYXJjaCgvJS8pICE9IC0xKSB7CiAgICAgICAgICAgICAgICByZXRbaS0xXSA9IHBhcnNlSW50KDI1NSptW2ldLzEwMCwgMTApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0W2ktMV0gPSBwYXJzZUludChtW2ldLCAxMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0WzNdID0gcGFyc2VGbG9hdChtWzRdKSA/IHBhcnNlRmxvYXQobVs0XSkgOiAxLjA7CiAgICAgICAgcmV0dXJuIHJldDsKICAgIH07CiAgICAKICAgICQuanFwbG90LmNvbG9yS2V5d29yZE1hcCA9IHsKICAgICAgICBhbGljZWJsdWU6ICdyZ2IoMjQwLCAyNDgsIDI1NSknLAogICAgICAgIGFudGlxdWV3aGl0ZTogJ3JnYigyNTAsIDIzNSwgMjE1KScsCiAgICAgICAgYXF1YTogJ3JnYiggMCwgMjU1LCAyNTUpJywKICAgICAgICBhcXVhbWFyaW5lOiAncmdiKDEyNywgMjU1LCAyMTIpJywKICAgICAgICBhenVyZTogJ3JnYigyNDAsIDI1NSwgMjU1KScsCiAgICAgICAgYmVpZ2U6ICdyZ2IoMjQ1LCAyNDUsIDIyMCknLAogICAgICAgIGJpc3F1ZTogJ3JnYigyNTUsIDIyOCwgMTk2KScsCiAgICAgICAgYmxhY2s6ICdyZ2IoIDAsIDAsIDApJywKICAgICAgICBibGFuY2hlZGFsbW9uZDogJ3JnYigyNTUsIDIzNSwgMjA1KScsCiAgICAgICAgYmx1ZTogJ3JnYiggMCwgMCwgMjU1KScsCiAgICAgICAgYmx1ZXZpb2xldDogJ3JnYigxMzgsIDQzLCAyMjYpJywKICAgICAgICBicm93bjogJ3JnYigxNjUsIDQyLCA0MiknLAogICAgICAgIGJ1cmx5d29vZDogJ3JnYigyMjIsIDE4NCwgMTM1KScsCiAgICAgICAgY2FkZXRibHVlOiAncmdiKCA5NSwgMTU4LCAxNjApJywKICAgICAgICBjaGFydHJldXNlOiAncmdiKDEyNywgMjU1LCAwKScsCiAgICAgICAgY2hvY29sYXRlOiAncmdiKDIxMCwgMTA1LCAzMCknLAogICAgICAgIGNvcmFsOiAncmdiKDI1NSwgMTI3LCA4MCknLAogICAgICAgIGNvcm5mbG93ZXJibHVlOiAncmdiKDEwMCwgMTQ5LCAyMzcpJywKICAgICAgICBjb3Juc2lsazogJ3JnYigyNTUsIDI0OCwgMjIwKScsCiAgICAgICAgY3JpbXNvbjogJ3JnYigyMjAsIDIwLCA2MCknLAogICAgICAgIGN5YW46ICdyZ2IoIDAsIDI1NSwgMjU1KScsCiAgICAgICAgZGFya2JsdWU6ICdyZ2IoIDAsIDAsIDEzOSknLAogICAgICAgIGRhcmtjeWFuOiAncmdiKCAwLCAxMzksIDEzOSknLAogICAgICAgIGRhcmtnb2xkZW5yb2Q6ICdyZ2IoMTg0LCAxMzQsIDExKScsCiAgICAgICAgZGFya2dyYXk6ICdyZ2IoMTY5LCAxNjksIDE2OSknLAogICAgICAgIGRhcmtncmVlbjogJ3JnYiggMCwgMTAwLCAwKScsCiAgICAgICAgZGFya2dyZXk6ICdyZ2IoMTY5LCAxNjksIDE2OSknLAogICAgICAgIGRhcmtraGFraTogJ3JnYigxODksIDE4MywgMTA3KScsCiAgICAgICAgZGFya21hZ2VudGE6ICdyZ2IoMTM5LCAwLCAxMzkpJywKICAgICAgICBkYXJrb2xpdmVncmVlbjogJ3JnYiggODUsIDEwNywgNDcpJywKICAgICAgICBkYXJrb3JhbmdlOiAncmdiKDI1NSwgMTQwLCAwKScsCiAgICAgICAgZGFya29yY2hpZDogJ3JnYigxNTMsIDUwLCAyMDQpJywKICAgICAgICBkYXJrcmVkOiAncmdiKDEzOSwgMCwgMCknLAogICAgICAgIGRhcmtzYWxtb246ICdyZ2IoMjMzLCAxNTAsIDEyMiknLAogICAgICAgIGRhcmtzZWFncmVlbjogJ3JnYigxNDMsIDE4OCwgMTQzKScsCiAgICAgICAgZGFya3NsYXRlYmx1ZTogJ3JnYiggNzIsIDYxLCAxMzkpJywKICAgICAgICBkYXJrc2xhdGVncmF5OiAncmdiKCA0NywgNzksIDc5KScsCiAgICAgICAgZGFya3NsYXRlZ3JleTogJ3JnYiggNDcsIDc5LCA3OSknLAogICAgICAgIGRhcmt0dXJxdW9pc2U6ICdyZ2IoIDAsIDIwNiwgMjA5KScsCiAgICAgICAgZGFya3Zpb2xldDogJ3JnYigxNDgsIDAsIDIxMSknLAogICAgICAgIGRlZXBwaW5rOiAncmdiKDI1NSwgMjAsIDE0NyknLAogICAgICAgIGRlZXBza3libHVlOiAncmdiKCAwLCAxOTEsIDI1NSknLAogICAgICAgIGRpbWdyYXk6ICdyZ2IoMTA1LCAxMDUsIDEwNSknLAogICAgICAgIGRpbWdyZXk6ICdyZ2IoMTA1LCAxMDUsIDEwNSknLAogICAgICAgIGRvZGdlcmJsdWU6ICdyZ2IoIDMwLCAxNDQsIDI1NSknLAogICAgICAgIGZpcmVicmljazogJ3JnYigxNzgsIDM0LCAzNCknLAogICAgICAgIGZsb3JhbHdoaXRlOiAncmdiKDI1NSwgMjUwLCAyNDApJywKICAgICAgICBmb3Jlc3RncmVlbjogJ3JnYiggMzQsIDEzOSwgMzQpJywKICAgICAgICBmdWNoc2lhOiAncmdiKDI1NSwgMCwgMjU1KScsCiAgICAgICAgZ2FpbnNib3JvOiAncmdiKDIyMCwgMjIwLCAyMjApJywKICAgICAgICBnaG9zdHdoaXRlOiAncmdiKDI0OCwgMjQ4LCAyNTUpJywKICAgICAgICBnb2xkOiAncmdiKDI1NSwgMjE1LCAwKScsCiAgICAgICAgZ29sZGVucm9kOiAncmdiKDIxOCwgMTY1LCAzMiknLAogICAgICAgIGdyYXk6ICdyZ2IoMTI4LCAxMjgsIDEyOCknLAogICAgICAgIGdyZXk6ICdyZ2IoMTI4LCAxMjgsIDEyOCknLAogICAgICAgIGdyZWVuOiAncmdiKCAwLCAxMjgsIDApJywKICAgICAgICBncmVlbnllbGxvdzogJ3JnYigxNzMsIDI1NSwgNDcpJywKICAgICAgICBob25leWRldzogJ3JnYigyNDAsIDI1NSwgMjQwKScsCiAgICAgICAgaG90cGluazogJ3JnYigyNTUsIDEwNSwgMTgwKScsCiAgICAgICAgaW5kaWFucmVkOiAncmdiKDIwNSwgOTIsIDkyKScsCiAgICAgICAgaW5kaWdvOiAncmdiKCA3NSwgMCwgMTMwKScsCiAgICAgICAgaXZvcnk6ICdyZ2IoMjU1LCAyNTUsIDI0MCknLAogICAgICAgIGtoYWtpOiAncmdiKDI0MCwgMjMwLCAxNDApJywKICAgICAgICBsYXZlbmRlcjogJ3JnYigyMzAsIDIzMCwgMjUwKScsCiAgICAgICAgbGF2ZW5kZXJibHVzaDogJ3JnYigyNTUsIDI0MCwgMjQ1KScsCiAgICAgICAgbGF3bmdyZWVuOiAncmdiKDEyNCwgMjUyLCAwKScsCiAgICAgICAgbGVtb25jaGlmZm9uOiAncmdiKDI1NSwgMjUwLCAyMDUpJywKICAgICAgICBsaWdodGJsdWU6ICdyZ2IoMTczLCAyMTYsIDIzMCknLAogICAgICAgIGxpZ2h0Y29yYWw6ICdyZ2IoMjQwLCAxMjgsIDEyOCknLAogICAgICAgIGxpZ2h0Y3lhbjogJ3JnYigyMjQsIDI1NSwgMjU1KScsCiAgICAgICAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ICdyZ2IoMjUwLCAyNTAsIDIxMCknLAogICAgICAgIGxpZ2h0Z3JheTogJ3JnYigyMTEsIDIxMSwgMjExKScsCiAgICAgICAgbGlnaHRncmVlbjogJ3JnYigxNDQsIDIzOCwgMTQ0KScsCiAgICAgICAgbGlnaHRncmV5OiAncmdiKDIxMSwgMjExLCAyMTEpJywKICAgICAgICBsaWdodHBpbms6ICdyZ2IoMjU1LCAxODIsIDE5MyknLAogICAgICAgIGxpZ2h0c2FsbW9uOiAncmdiKDI1NSwgMTYwLCAxMjIpJywKICAgICAgICBsaWdodHNlYWdyZWVuOiAncmdiKCAzMiwgMTc4LCAxNzApJywKICAgICAgICBsaWdodHNreWJsdWU6ICdyZ2IoMTM1LCAyMDYsIDI1MCknLAogICAgICAgIGxpZ2h0c2xhdGVncmF5OiAncmdiKDExOSwgMTM2LCAxNTMpJywKICAgICAgICBsaWdodHNsYXRlZ3JleTogJ3JnYigxMTksIDEzNiwgMTUzKScsCiAgICAgICAgbGlnaHRzdGVlbGJsdWU6ICdyZ2IoMTc2LCAxOTYsIDIyMiknLAogICAgICAgIGxpZ2h0eWVsbG93OiAncmdiKDI1NSwgMjU1LCAyMjQpJywKICAgICAgICBsaW1lOiAncmdiKCAwLCAyNTUsIDApJywKICAgICAgICBsaW1lZ3JlZW46ICdyZ2IoIDUwLCAyMDUsIDUwKScsCiAgICAgICAgbGluZW46ICdyZ2IoMjUwLCAyNDAsIDIzMCknLAogICAgICAgIG1hZ2VudGE6ICdyZ2IoMjU1LCAwLCAyNTUpJywKICAgICAgICBtYXJvb246ICdyZ2IoMTI4LCAwLCAwKScsCiAgICAgICAgbWVkaXVtYXF1YW1hcmluZTogJ3JnYigxMDIsIDIwNSwgMTcwKScsCiAgICAgICAgbWVkaXVtYmx1ZTogJ3JnYiggMCwgMCwgMjA1KScsCiAgICAgICAgbWVkaXVtb3JjaGlkOiAncmdiKDE4NiwgODUsIDIxMSknLAogICAgICAgIG1lZGl1bXB1cnBsZTogJ3JnYigxNDcsIDExMiwgMjE5KScsCiAgICAgICAgbWVkaXVtc2VhZ3JlZW46ICdyZ2IoIDYwLCAxNzksIDExMyknLAogICAgICAgIG1lZGl1bXNsYXRlYmx1ZTogJ3JnYigxMjMsIDEwNCwgMjM4KScsCiAgICAgICAgbWVkaXVtc3ByaW5nZ3JlZW46ICdyZ2IoIDAsIDI1MCwgMTU0KScsCiAgICAgICAgbWVkaXVtdHVycXVvaXNlOiAncmdiKCA3MiwgMjA5LCAyMDQpJywKICAgICAgICBtZWRpdW12aW9sZXRyZWQ6ICdyZ2IoMTk5LCAyMSwgMTMzKScsCiAgICAgICAgbWlkbmlnaHRibHVlOiAncmdiKCAyNSwgMjUsIDExMiknLAogICAgICAgIG1pbnRjcmVhbTogJ3JnYigyNDUsIDI1NSwgMjUwKScsCiAgICAgICAgbWlzdHlyb3NlOiAncmdiKDI1NSwgMjI4LCAyMjUpJywKICAgICAgICBtb2NjYXNpbjogJ3JnYigyNTUsIDIyOCwgMTgxKScsCiAgICAgICAgbmF2YWpvd2hpdGU6ICdyZ2IoMjU1LCAyMjIsIDE3MyknLAogICAgICAgIG5hdnk6ICdyZ2IoIDAsIDAsIDEyOCknLAogICAgICAgIG9sZGxhY2U6ICdyZ2IoMjUzLCAyNDUsIDIzMCknLAogICAgICAgIG9saXZlOiAncmdiKDEyOCwgMTI4LCAwKScsCiAgICAgICAgb2xpdmVkcmFiOiAncmdiKDEwNywgMTQyLCAzNSknLAogICAgICAgIG9yYW5nZTogJ3JnYigyNTUsIDE2NSwgMCknLAogICAgICAgIG9yYW5nZXJlZDogJ3JnYigyNTUsIDY5LCAwKScsCiAgICAgICAgb3JjaGlkOiAncmdiKDIxOCwgMTEyLCAyMTQpJywKICAgICAgICBwYWxlZ29sZGVucm9kOiAncmdiKDIzOCwgMjMyLCAxNzApJywKICAgICAgICBwYWxlZ3JlZW46ICdyZ2IoMTUyLCAyNTEsIDE1MiknLAogICAgICAgIHBhbGV0dXJxdW9pc2U6ICdyZ2IoMTc1LCAyMzgsIDIzOCknLAogICAgICAgIHBhbGV2aW9sZXRyZWQ6ICdyZ2IoMjE5LCAxMTIsIDE0NyknLAogICAgICAgIHBhcGF5YXdoaXA6ICdyZ2IoMjU1LCAyMzksIDIxMyknLAogICAgICAgIHBlYWNocHVmZjogJ3JnYigyNTUsIDIxOCwgMTg1KScsCiAgICAgICAgcGVydTogJ3JnYigyMDUsIDEzMywgNjMpJywKICAgICAgICBwaW5rOiAncmdiKDI1NSwgMTkyLCAyMDMpJywKICAgICAgICBwbHVtOiAncmdiKDIyMSwgMTYwLCAyMjEpJywKICAgICAgICBwb3dkZXJibHVlOiAncmdiKDE3NiwgMjI0LCAyMzApJywKICAgICAgICBwdXJwbGU6ICdyZ2IoMTI4LCAwLCAxMjgpJywKICAgICAgICByZWQ6ICdyZ2IoMjU1LCAwLCAwKScsCiAgICAgICAgcm9zeWJyb3duOiAncmdiKDE4OCwgMTQzLCAxNDMpJywKICAgICAgICByb3lhbGJsdWU6ICdyZ2IoIDY1LCAxMDUsIDIyNSknLAogICAgICAgIHNhZGRsZWJyb3duOiAncmdiKDEzOSwgNjksIDE5KScsCiAgICAgICAgc2FsbW9uOiAncmdiKDI1MCwgMTI4LCAxMTQpJywKICAgICAgICBzYW5keWJyb3duOiAncmdiKDI0NCwgMTY0LCA5NiknLAogICAgICAgIHNlYWdyZWVuOiAncmdiKCA0NiwgMTM5LCA4NyknLAogICAgICAgIHNlYXNoZWxsOiAncmdiKDI1NSwgMjQ1LCAyMzgpJywKICAgICAgICBzaWVubmE6ICdyZ2IoMTYwLCA4MiwgNDUpJywKICAgICAgICBzaWx2ZXI6ICdyZ2IoMTkyLCAxOTIsIDE5MiknLAogICAgICAgIHNreWJsdWU6ICdyZ2IoMTM1LCAyMDYsIDIzNSknLAogICAgICAgIHNsYXRlYmx1ZTogJ3JnYigxMDYsIDkwLCAyMDUpJywKICAgICAgICBzbGF0ZWdyYXk6ICdyZ2IoMTEyLCAxMjgsIDE0NCknLAogICAgICAgIHNsYXRlZ3JleTogJ3JnYigxMTIsIDEyOCwgMTQ0KScsCiAgICAgICAgc25vdzogJ3JnYigyNTUsIDI1MCwgMjUwKScsCiAgICAgICAgc3ByaW5nZ3JlZW46ICdyZ2IoIDAsIDI1NSwgMTI3KScsCiAgICAgICAgc3RlZWxibHVlOiAncmdiKCA3MCwgMTMwLCAxODApJywKICAgICAgICB0YW46ICdyZ2IoMjEwLCAxODAsIDE0MCknLAogICAgICAgIHRlYWw6ICdyZ2IoIDAsIDEyOCwgMTI4KScsCiAgICAgICAgdGhpc3RsZTogJ3JnYigyMTYsIDE5MSwgMjE2KScsCiAgICAgICAgdG9tYXRvOiAncmdiKDI1NSwgOTksIDcxKScsCiAgICAgICAgdHVycXVvaXNlOiAncmdiKCA2NCwgMjI0LCAyMDgpJywKICAgICAgICB2aW9sZXQ6ICdyZ2IoMjM4LCAxMzAsIDIzOCknLAogICAgICAgIHdoZWF0OiAncmdiKDI0NSwgMjIyLCAxNzkpJywKICAgICAgICB3aGl0ZTogJ3JnYigyNTUsIDI1NSwgMjU1KScsCiAgICAgICAgd2hpdGVzbW9rZTogJ3JnYigyNDUsIDI0NSwgMjQ1KScsCiAgICAgICAgeWVsbG93OiAncmdiKDI1NSwgMjU1LCAwKScsCiAgICAgICAgeWVsbG93Z3JlZW46ICdyZ2IoMTU0LCAyMDUsIDUwKScKICAgIH07CgogICAgCgoKICAgIC8vIGNsYXNzOiAkLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlcgogICAgLy8gUmVuZGVyZXIgdG8gcGxhY2UgbGFiZWxzIG9uIHRoZSBheGVzLgogICAgJC5qcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAkLmpxcGxvdC5FbGVtQ29udGFpbmVyLmNhbGwodGhpcyk7CiAgICAgICAgLy8gbmFtZSBvZiB0aGUgYXhpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0aWNrCiAgICAgICAgdGhpcy5heGlzOwogICAgICAgIC8vIHByb3A6IHNob3cKICAgICAgICAvLyB3aGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSB0aWNrIChtYXJrIGFuZCBsYWJlbCkuCiAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBsYWJlbAogICAgICAgIC8vIFRoZSB0ZXh0IG9yIGh0bWwgZm9yIHRoZSBsYWJlbC4KICAgICAgICB0aGlzLmxhYmVsID0gJyc7CiAgICAgICAgdGhpcy5mb250RmFtaWx5ID0gbnVsbDsKICAgICAgICB0aGlzLmZvbnRTaXplID0gbnVsbDsKICAgICAgICB0aGlzLnRleHRDb2xvciA9IG51bGw7CiAgICAgICAgdGhpcy5fZWxlbTsKICAgICAgICAvLyBwcm9wOiBlc2NhcGVIVE1MCiAgICAgICAgLy8gdHJ1ZSB0byBlc2NhcGUgSFRNTCBlbnRpdGllcyBpbiB0aGUgbGFiZWwuCiAgICAgICAgdGhpcy5lc2NhcGVIVE1MID0gZmFsc2U7CiAgICAgICAgCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlci5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuRWxlbUNvbnRhaW5lcigpOwogICAgJC5qcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJC5qcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXI7CiAgICAKICAgICQuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihjdHgsIHBsb3QpIHsKICAgICAgICAvLyBNZW1vcnkgTGVha3MgcGF0Y2gKICAgICAgICBpZiAodGhpcy5fZWxlbSkgewogICAgICAgICAgICB0aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKTsKICAgICAgICAgICAgdGhpcy5fZWxlbSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICB0aGlzLl9lbGVtID0gJCgnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IiBjbGFzcz0ianFwbG90LScrdGhpcy5heGlzKyctbGFiZWwiPjwvZGl2PicpOwogICAgICAgIAogICAgICAgIGlmIChOdW1iZXIodGhpcy5sYWJlbCkpIHsKICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoJ3doaXRlLXNwYWNlJywgJ25vd3JhcCcpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoIXRoaXMuZXNjYXBlSFRNTCkgewogICAgICAgICAgICB0aGlzLl9lbGVtLmh0bWwodGhpcy5sYWJlbCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0aGlzLl9lbGVtLnRleHQodGhpcy5sYWJlbCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmZvbnRGYW1pbHkpIHsKICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoJ2ZvbnQtZmFtaWx5JywgdGhpcy5mb250RmFtaWx5KTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuZm9udFNpemUpIHsKICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoJ2ZvbnQtc2l6ZScsIHRoaXMuZm9udFNpemUpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy50ZXh0Q29sb3IpIHsKICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoJ2NvbG9yJywgdGhpcy50ZXh0Q29sb3IpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5fZWxlbTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5wYWNrID0gZnVuY3Rpb24oKSB7CiAgICB9OwoKICAgIC8vIGNsYXNzOiAkLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyCiAgICAvLyBBICJ0aWNrIiBvYmplY3Qgc2hvd2luZyB0aGUgdmFsdWUgb2YgYSB0aWNrL2dyaWRsaW5lIG9uIHRoZSBwbG90LgogICAgJC5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAvLyBHcm91cDogUHJvcGVydGllcwogICAgICAgICQuanFwbG90LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTsKICAgICAgICAvLyBwcm9wOiBtYXJrCiAgICAgICAgLy8gdGljayBtYXJrIG9uIHRoZSBheGlzLiAgT25lIG9mICdpbnNpZGUnLCAnb3V0c2lkZScsICdjcm9zcycsICcnIG9yIG51bGwuCiAgICAgICAgdGhpcy5tYXJrID0gJ291dHNpZGUnOwogICAgICAgIC8vIG5hbWUgb2YgdGhlIGF4aXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGljawogICAgICAgIHRoaXMuYXhpczsKICAgICAgICAvLyBwcm9wOiBzaG93TWFyawogICAgICAgIC8vIHdoZXRoZXIgb3Igbm90IHRvIHNob3cgdGhlIG1hcmsgb24gdGhlIGF4aXMuCiAgICAgICAgdGhpcy5zaG93TWFyayA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogc2hvd0dyaWRsaW5lCiAgICAgICAgLy8gd2hldGhlciBvciBub3QgdG8gZHJhdyB0aGUgZ3JpZGxpbmUgb24gdGhlIGdyaWQgYXQgdGhpcyB0aWNrLgogICAgICAgIHRoaXMuc2hvd0dyaWRsaW5lID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBpc01pbm9yVGljawogICAgICAgIC8vIGlmIHRoaXMgaXMgYSBtaW5vciB0aWNrLgogICAgICAgIHRoaXMuaXNNaW5vclRpY2sgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBzaXplCiAgICAgICAgLy8gTGVuZ3RoIG9mIHRoZSB0aWNrIGJleW9uZCB0aGUgZ3JpZCBpbiBwaXhlbHMuCiAgICAgICAgLy8gREVQUkVDQVRFRDogVGhpcyBoYXMgYmVlbiBzdXBlcmNlZWRlZCBieSBtYXJrU2l6ZQogICAgICAgIHRoaXMuc2l6ZSA9IDQ7CiAgICAgICAgLy8gcHJvcDogIG1hcmtTaXplCiAgICAgICAgLy8gTGVuZ3RoIG9mIHRoZSB0aWNrIG1hcmtzIGluIHBpeGVscy4gIEZvciAnY3Jvc3MnIHN0eWxlLCBsZW5ndGgKICAgICAgICAvLyB3aWxsIGJlIHN0b2tlZCBhYm92ZSBhbmQgYmVsb3cgYXhpcywgc28gdG90YWwgbGVuZ3RoIHdpbGwgYmUgdHdpY2UgdGhpcy4KICAgICAgICB0aGlzLm1hcmtTaXplID0gNjsKICAgICAgICAvLyBwcm9wOiBzaG93CiAgICAgICAgLy8gd2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgdGljayAobWFyayBhbmQgbGFiZWwpLgogICAgICAgIC8vIFNldHRpbmcgdGhpcyB0byBmYWxzZSByZXF1aXJlcyBtb3JlIHRlc3RpbmcuICBJdCBpcyByZWNvbW1lbmRlZAogICAgICAgIC8vIHRvIHNldCBzaG93TGFiZWwgYW5kIHNob3dNYXJrIHRvIGZhbHNlIGluc3RlYWQuCiAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBzaG93TGFiZWwKICAgICAgICAvLyB3aGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSBsYWJlbC4KICAgICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7CiAgICAgICAgdGhpcy5sYWJlbCA9IG51bGw7CiAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7CiAgICAgICAgdGhpcy5fc3R5bGVzID0ge307CiAgICAgICAgLy8gcHJvcDogZm9ybWF0dGVyCiAgICAgICAgLy8gQSBjbGFzcyBvZiBhIGZvcm1hdHRlciBmb3IgdGhlIHRpY2sgdGV4dC4gIHNwcmludGYgYnkgZGVmYXVsdC4KICAgICAgICB0aGlzLmZvcm1hdHRlciA9ICQuanFwbG90LkRlZmF1bHRUaWNrRm9ybWF0dGVyOwogICAgICAgIC8vIHByb3A6IHByZWZpeAogICAgICAgIC8vIFN0cmluZyB0byBwcmVwZW5kIHRvIHRoZSB0aWNrIGxhYmVsLgogICAgICAgIC8vIFByZWZpeCBpcyBwcmVwZW5kZWQgdG8gdGhlIGZvcm1hdHRlZCB0aWNrIGxhYmVsLgogICAgICAgIHRoaXMucHJlZml4ID0gJyc7CiAgICAgICAgLy8gcHJvcDogc3VmZml4CiAgICAgICAgLy8gU3RyaW5nIHRvIGFwcGVuZCB0byB0aGUgdGljayBsYWJlbC4KICAgICAgICAvLyBTdWZmaXggaXMgYXBwZW5kZWQgdG8gdGhlIGZvcm1hdHRlZCB0aWNrIGxhYmVsLgogICAgICAgIHRoaXMuc3VmZml4ID0gJyc7CiAgICAgICAgLy8gcHJvcDogZm9ybWF0U3RyaW5nCiAgICAgICAgLy8gc3RyaW5nIHBhc3NlZCB0byB0aGUgZm9ybWF0dGVyLgogICAgICAgIHRoaXMuZm9ybWF0U3RyaW5nID0gJyc7CiAgICAgICAgLy8gcHJvcDogZm9udEZhbWlseQogICAgICAgIC8vIGNzcyBzcGVjIGZvciB0aGUgZm9udC1mYW1pbHkgY3NzIGF0dHJpYnV0ZS4KICAgICAgICB0aGlzLmZvbnRGYW1pbHk7CiAgICAgICAgLy8gcHJvcDogZm9udFNpemUKICAgICAgICAvLyBjc3Mgc3BlYyBmb3IgdGhlIGZvbnQtc2l6ZSBjc3MgYXR0cmlidXRlLgogICAgICAgIHRoaXMuZm9udFNpemU7CiAgICAgICAgLy8gcHJvcDogdGV4dENvbG9yCiAgICAgICAgLy8gY3NzIHNwZWMgZm9yIHRoZSBjb2xvciBhdHRyaWJ1dGUuCiAgICAgICAgdGhpcy50ZXh0Q29sb3I7CiAgICAgICAgLy8gcHJvcDogZXNjYXBlSFRNTAogICAgICAgIC8vIHRydWUgdG8gZXNjYXBlIEhUTUwgZW50aXRpZXMgaW4gdGhlIGxhYmVsLgogICAgICAgIHRoaXMuZXNjYXBlSFRNTCA9IGZhbHNlOwogICAgICAgIHRoaXMuX2VsZW07CiAgICAgICAgdGhpcy5fYnJlYWtUaWNrID0gZmFsc2U7CiAgICAgICAgCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuRWxlbUNvbnRhaW5lcigpOwogICAgJC5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyOwogICAgCiAgICAkLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyLnByb3RvdHlwZS5zZXRUaWNrID0gZnVuY3Rpb24odmFsdWUsIGF4aXNOYW1lLCBpc01pbm9yKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogICAgICAgIHRoaXMuYXhpcyA9IGF4aXNOYW1lOwogICAgICAgIGlmIChpc01pbm9yKSB7CiAgICAgICAgICAgIHRoaXMuaXNNaW5vclRpY2sgPSB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgIH07CiAgICAKICAgICQuanFwbG90LkF4aXNUaWNrUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5sYWJlbCA9PT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLmxhYmVsID0gdGhpcy5wcmVmaXggKyB0aGlzLmZvcm1hdHRlcih0aGlzLmZvcm1hdFN0cmluZywgdGhpcy52YWx1ZSkgKyB0aGlzLnN1ZmZpeDsKICAgICAgICB9CiAgICAgICAgdmFyIHN0eWxlID0ge3Bvc2l0aW9uOiAnYWJzb2x1dGUnfTsKICAgICAgICBpZiAoTnVtYmVyKHRoaXMubGFiZWwpKSB7CiAgICAgICAgICAgIHN0eWxlWyd3aGl0U3BhY2UnXSA9ICdub3dyYXAnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBNZW1vcnkgTGVha3MgcGF0Y2gKICAgICAgICBpZiAodGhpcy5fZWxlbSkgewogICAgICAgICAgICB0aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKTsKICAgICAgICAgICAgdGhpcy5fZWxlbSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICB0aGlzLl9lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CiAgICAgICAgdGhpcy5fZWxlbS5hZGRDbGFzcygianFwbG90LSIrdGhpcy5heGlzKyItdGljayIpOwogICAgICAgIAogICAgICAgIGlmICghdGhpcy5lc2NhcGVIVE1MKSB7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uaHRtbCh0aGlzLmxhYmVsKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMuX2VsZW0udGV4dCh0aGlzLmxhYmVsKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdGhpcy5fZWxlbS5jc3Moc3R5bGUpOwoKICAgICAgICBmb3IgKHZhciBzIGluIHRoaXMuX3N0eWxlcykgewogICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyhzLCB0aGlzLl9zdHlsZXNbc10pOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5mb250RmFtaWx5KSB7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCdmb250LWZhbWlseScsIHRoaXMuZm9udEZhbWlseSk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmZvbnRTaXplKSB7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCdmb250LXNpemUnLCB0aGlzLmZvbnRTaXplKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMudGV4dENvbG9yKSB7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCdjb2xvcicsIHRoaXMudGV4dENvbG9yKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX2JyZWFrVGljaykgewogICAgICAgICAgdGhpcy5fZWxlbS5hZGRDbGFzcygnanFwbG90LWJyZWFrVGljaycpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5fZWxlbTsKICAgIH07CiAgICAgICAgCiAgICAkLmpxcGxvdC5EZWZhdWx0VGlja0Zvcm1hdHRlciA9IGZ1bmN0aW9uIChmb3JtYXQsIHZhbCkgewogICAgICAgIGlmICh0eXBlb2YgdmFsID09ICdudW1iZXInKSB7CiAgICAgICAgICAgIGlmICghZm9ybWF0KSB7CiAgICAgICAgICAgICAgICBmb3JtYXQgPSAkLmpxcGxvdC5jb25maWcuZGVmYXVsdFRpY2tGb3JtYXRTdHJpbmc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICQuanFwbG90LnNwcmludGYoZm9ybWF0LCB2YWwpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWwpOwogICAgICAgIH0KICAgIH07CiAgICAgICAgCiAgICAkLmpxcGxvdC5QZXJjZW50VGlja0Zvcm1hdHRlciA9IGZ1bmN0aW9uIChmb3JtYXQsIHZhbCkgewogICAgICAgIGlmICh0eXBlb2YgdmFsID09ICdudW1iZXInKSB7CiAgICAgICAgICAgIHZhbCA9IDEwMCAqIHZhbDsKICAgICAgICAgICAgaWYgKCFmb3JtYXQpIHsKICAgICAgICAgICAgICAgIGZvcm1hdCA9ICQuanFwbG90LmNvbmZpZy5kZWZhdWx0VGlja0Zvcm1hdFN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJC5qcXBsb3Quc3ByaW50Zihmb3JtYXQsIHZhbCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbCk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUucGFjayA9IGZ1bmN0aW9uKCkgewogICAgfTsKICAgICAKICAgIC8vIENsYXNzOiAkLmpxcGxvdC5DYW52YXNHcmlkUmVuZGVyZXIKICAgIC8vIFRoZSBkZWZhdWx0IGpxUGxvdCBncmlkIHJlbmRlcmVyLCBjcmVhdGluZyBhIGdyaWQgb24gYSBjYW52YXMgZWxlbWVudC4KICAgIC8vIFRoZSByZW5kZXJlciBoYXMgbm8gYWRkaXRpb25hbCBvcHRpb25zIGJleW9uZCB0aGUgPEdyaWQ+IGNsYXNzLgogICAgJC5qcXBsb3QuQ2FudmFzR3JpZFJlbmRlcmVyID0gZnVuY3Rpb24oKXsKICAgICAgICB0aGlzLnNoYWRvd1JlbmRlcmVyID0gbmV3ICQuanFwbG90LlNoYWRvd1JlbmRlcmVyKCk7CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBjb250ZXh0IG9mIEdyaWQgb2JqZWN0CiAgICAkLmpxcGxvdC5DYW52YXNHcmlkUmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgdGhpcy5fY3R4OwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIC8vIHNldCB0aGUgc2hhZG93IHJlbmRlcmVyIG9wdGlvbnMKICAgICAgICB2YXIgc29wdHMgPSB7bGluZUpvaW46J21pdGVyJywgbGluZUNhcDoncm91bmQnLCBmaWxsOmZhbHNlLCBpc2FyYzpmYWxzZSwgYW5nbGU6dGhpcy5zaGFkb3dBbmdsZSwgb2Zmc2V0OnRoaXMuc2hhZG93T2Zmc2V0LCBhbHBoYTp0aGlzLnNoYWRvd0FscGhhLCBkZXB0aDp0aGlzLnNoYWRvd0RlcHRoLCBsaW5lV2lkdGg6dGhpcy5zaGFkb3dXaWR0aCwgY2xvc2VQYXRoOmZhbHNlLCBzdHJva2VTdHlsZTp0aGlzLnNoYWRvd0NvbG9yfTsKICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmluaXQoc29wdHMpOwogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggY29udGV4dCBvZiBHcmlkLgogICAgJC5qcXBsb3QuQ2FudmFzR3JpZFJlbmRlcmVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24ocGxvdCkgewogICAgICAgIHZhciBlbGVtOwogICAgICAgIC8vIE1lbW9yeSBMZWFrcyBwYXRjaAogICAgICAgIGlmICh0aGlzLl9lbGVtKSB7CiAgICAgICAgICBpZiAoJC5qcXBsb3QudXNlX2V4Y2FudmFzICYmIHdpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIudW5pbml0RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGVsZW0gPSB0aGlzLl9lbGVtLmdldCgwKTsKICAgICAgICAgICAgd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50KGVsZW0pOwogICAgICAgICAgICBlbGVtID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgdGhpcy5fZWxlbS5lbXB0eUZvcmNlKCk7CiAgICAgICAgICB0aGlzLl9lbGVtID0gbnVsbDsKICAgICAgICB9CiAgICAgIAogICAgICAgIGVsZW0gPSBwbG90LmNhbnZhc01hbmFnZXIuZ2V0Q2FudmFzKCk7CgogICAgICAgIHZhciB3ID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGg7CiAgICAgICAgdmFyIGggPSB0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQ7CiAgICAgICAgZWxlbS53aWR0aCA9IHc7CiAgICAgICAgZWxlbS5oZWlnaHQgPSBoOwogICAgICAgIHRoaXMuX2VsZW0gPSAkKGVsZW0pOwogICAgICAgIHRoaXMuX2VsZW0uYWRkQ2xhc3MoJ2pxcGxvdC1ncmlkLWNhbnZhcycpOwogICAgICAgIHRoaXMuX2VsZW0uY3NzKHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIGxlZnQ6IDAsIHRvcDogMCB9KTsKICAgICAgICAKICAgICAgICBlbGVtID0gcGxvdC5jYW52YXNNYW5hZ2VyLmluaXRDYW52YXMoZWxlbSk7CgogICAgICAgIHRoaXMuX3RvcCA9IHRoaXMuX29mZnNldHMudG9wOwogICAgICAgIHRoaXMuX2JvdHRvbSA9IGggLSB0aGlzLl9vZmZzZXRzLmJvdHRvbTsKICAgICAgICB0aGlzLl9sZWZ0ID0gdGhpcy5fb2Zmc2V0cy5sZWZ0OwogICAgICAgIHRoaXMuX3JpZ2h0ID0gdyAtIHRoaXMuX29mZnNldHMucmlnaHQ7CiAgICAgICAgdGhpcy5fd2lkdGggPSB0aGlzLl9yaWdodCAtIHRoaXMuX2xlZnQ7CiAgICAgICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5fYm90dG9tIC0gdGhpcy5fdG9wOwogICAgICAgIC8vIGF2b2lkIG1lbW9yeSBsZWFrCiAgICAgICAgZWxlbSA9IG51bGw7CiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW07CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5DYW52YXNHcmlkUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLl9jdHggPSB0aGlzLl9lbGVtLmdldCgwKS5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgIHZhciBjdHggPSB0aGlzLl9jdHg7CiAgICAgICAgdmFyIGF4ZXMgPSB0aGlzLl9heGVzOwogICAgICAgIC8vIEFkZCB0aGUgZ3JpZCBvbnRvIHRoZSBncmlkIGNhbnZhcy4gIFRoaXMgaXMgdGhlIGJvdHRvbSBtb3N0IGxheWVyLgogICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCwgdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0KTsKICAgICAgICBjdHguZmlsbFN0eWxlID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5iYWNrZ3JvdW5kOwogICAgICAgIGN0eC5maWxsUmVjdCh0aGlzLl9sZWZ0LCB0aGlzLl90b3AsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpOwogICAgICAgIAogICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgY3R4LmxpbmVKb2luID0gJ21pdGVyJzsKICAgICAgICBjdHgubGluZUNhcCA9ICdidXR0JzsKICAgICAgICBjdHgubGluZVdpZHRoID0gdGhpcy5ncmlkTGluZVdpZHRoOwogICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHRoaXMuZ3JpZExpbmVDb2xvcjsKICAgICAgICB2YXIgYiwgZSwgcywgbTsKICAgICAgICB2YXIgYXggPSBbJ3hheGlzJywgJ3lheGlzJywgJ3gyYXhpcycsICd5MmF4aXMnXTsKICAgICAgICBmb3IgKHZhciBpPTQ7IGk+MDsgaS0tKSB7CiAgICAgICAgICAgIHZhciBuYW1lID0gYXhbaS0xXTsKICAgICAgICAgICAgdmFyIGF4aXMgPSBheGVzW25hbWVdOwogICAgICAgICAgICB2YXIgdGlja3MgPSBheGlzLl90aWNrczsKICAgICAgICAgICAgdmFyIG51bXRpY2tzID0gdGlja3MubGVuZ3RoOwogICAgICAgICAgICBpZiAoYXhpcy5zaG93KSB7CiAgICAgICAgICAgICAgICBpZiAoYXhpcy5kcmF3QmFzZWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYm9wdHMgPSB7fTsKICAgICAgICAgICAgICAgICAgICBpZiAoYXhpcy5iYXNlbGluZVdpZHRoICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJvcHRzLmxpbmVXaWR0aCA9IGF4aXMuYmFzZWxpbmVXaWR0aDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXMuYmFzZWxpbmVDb2xvciAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBib3B0cy5zdHJva2VTdHlsZSA9IGF4aXMuYmFzZWxpbmVDb2xvcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3hheGlzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lICh0aGlzLl9sZWZ0LCB0aGlzLl9ib3R0b20sIHRoaXMuX3JpZ2h0LCB0aGlzLl9ib3R0b20sIGJvcHRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd5YXhpcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TGluZSAodGhpcy5fbGVmdCwgdGhpcy5fYm90dG9tLCB0aGlzLl9sZWZ0LCB0aGlzLl90b3AsIGJvcHRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4MmF4aXMnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUgKHRoaXMuX2xlZnQsIHRoaXMuX2JvdHRvbSwgdGhpcy5fcmlnaHQsIHRoaXMuX2JvdHRvbSwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3kyYXhpcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TGluZSAodGhpcy5fcmlnaHQsIHRoaXMuX2JvdHRvbSwgdGhpcy5fcmlnaHQsIHRoaXMuX3RvcCwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yICh2YXIgaj1udW10aWNrczsgaj4wOyBqLS0pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHRpY2tzW2otMV07CiAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvdykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gTWF0aC5yb3VuZChheGlzLnUycCh0LnZhbHVlKSkgKyAwLjU7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneGF4aXMnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIGdyaWQgbGluZSBpZiB3ZSBzaG91bGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5zaG93R3JpZGxpbmUgJiYgdGhpcy5kcmF3R3JpZGxpbmVzICYmICgoIXQuaXNNaW5vclRpY2sgJiYgYXhpcy5kcmF3TWFqb3JHcmlkbGluZXMpIHx8ICh0LmlzTWlub3JUaWNrICYmIGF4aXMuZHJhd01pbm9yR3JpZGxpbmVzKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lKHBvcywgdGhpcy5fdG9wLCBwb3MsIHRoaXMuX2JvdHRvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIG1hcmsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5zaG93TWFyayAmJiB0Lm1hcmsgJiYgKCghdC5pc01pbm9yVGljayAmJiBheGlzLmRyYXdNYWpvclRpY2tNYXJrcykgfHwgKHQuaXNNaW5vclRpY2sgJiYgYXhpcy5kcmF3TWlub3JUaWNrTWFya3MpKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHQubWFya1NpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSB0Lm1hcms7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSBNYXRoLnJvdW5kKGF4aXMudTJwKHQudmFsdWUpKSArIDAuNTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvdXRzaWRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdGhpcy5fYm90dG9tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl9ib3R0b20rczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2lkZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX2JvdHRvbS1zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl9ib3R0b207CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjcm9zcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX2JvdHRvbS1zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl9ib3R0b20rczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX2JvdHRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gdGhpcy5fYm90dG9tK3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgc2hhZG93CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYWRvdykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGN0eCwgW1twb3MsYl0sW3BvcyxlXV0sIHtsaW5lQ2FwOididXR0JywgbGluZVdpZHRoOnRoaXMuZ3JpZExpbmVXaWR0aCwgb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LCBkZXB0aDoyLCBmaWxsOmZhbHNlLCBjbG9zZVBhdGg6ZmFsc2V9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lKHBvcywgYiwgcG9zLCBlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd5YXhpcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgZ3JpZCBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvd0dyaWRsaW5lICYmIHRoaXMuZHJhd0dyaWRsaW5lcyAmJiAoKCF0LmlzTWlub3JUaWNrICYmIGF4aXMuZHJhd01ham9yR3JpZGxpbmVzKSB8fCAodC5pc01pbm9yVGljayAmJiBheGlzLmRyYXdNaW5vckdyaWRsaW5lcykpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TGluZSh0aGlzLl9yaWdodCwgcG9zLCB0aGlzLl9sZWZ0LCBwb3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBtYXJrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvd01hcmsgJiYgdC5tYXJrICYmICgoIXQuaXNNaW5vclRpY2sgJiYgYXhpcy5kcmF3TWFqb3JUaWNrTWFya3MpIHx8ICh0LmlzTWlub3JUaWNrICYmIGF4aXMuZHJhd01pbm9yVGlja01hcmtzKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSB0Lm1hcmtTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gdC5tYXJrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gTWF0aC5yb3VuZChheGlzLnUycCh0LnZhbHVlKSkgKyAwLjU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb3V0c2lkZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX2xlZnQtczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gdGhpcy5fbGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2lkZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX2xlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuX2xlZnQrczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nyb3NzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdGhpcy5fbGVmdC1zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl9sZWZ0K3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSB0aGlzLl9sZWZ0LXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuX2xlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBzaGFkb3cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCBbW2IsIHBvc10sIFtlLCBwb3NdXSwge2xpbmVDYXA6J2J1dHQnLCBsaW5lV2lkdGg6dGhpcy5ncmlkTGluZVdpZHRoKjEuNSwgb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LCBmaWxsOmZhbHNlLCBjbG9zZVBhdGg6ZmFsc2V9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TGluZShiLCBwb3MsIGUsIHBvcywge3N0cm9rZVN0eWxlOmF4aXMuYm9yZGVyQ29sb3J9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4MmF4aXMnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIGdyaWQgbGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LnNob3dHcmlkbGluZSAmJiB0aGlzLmRyYXdHcmlkbGluZXMgJiYgKCghdC5pc01pbm9yVGljayAmJiBheGlzLmRyYXdNYWpvckdyaWRsaW5lcykgfHwgKHQuaXNNaW5vclRpY2sgJiYgYXhpcy5kcmF3TWlub3JHcmlkbGluZXMpKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUocG9zLCB0aGlzLl9ib3R0b20sIHBvcywgdGhpcy5fdG9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgbWFyawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LnNob3dNYXJrICYmIHQubWFyayAmJiAoKCF0LmlzTWlub3JUaWNrICYmIGF4aXMuZHJhd01ham9yVGlja01hcmtzKSB8fCAodC5pc01pbm9yVGljayAmJiBheGlzLmRyYXdNaW5vclRpY2tNYXJrcykpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gdC5tYXJrU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHQubWFyazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IE1hdGgucm91bmQoYXhpcy51MnAodC52YWx1ZSkpICsgMC41OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ291dHNpZGUnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSB0aGlzLl90b3AtczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gdGhpcy5fdG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zaWRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdGhpcy5fdG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl90b3ArczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nyb3NzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdGhpcy5fdG9wLXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuX3RvcCtzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdGhpcy5fdG9wLXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuX3RvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIHNoYWRvdwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFkb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIFtbcG9zLGJdLFtwb3MsZV1dLCB7bGluZUNhcDonYnV0dCcsIGxpbmVXaWR0aDp0aGlzLmdyaWRMaW5lV2lkdGgsIG9mZnNldDp0aGlzLmdyaWRMaW5lV2lkdGgqMC43NSwgZGVwdGg6MiwgZmlsbDpmYWxzZSwgY2xvc2VQYXRoOmZhbHNlfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUocG9zLCBiLCBwb3MsIGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3kyYXhpcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgZ3JpZCBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvd0dyaWRsaW5lICYmIHRoaXMuZHJhd0dyaWRsaW5lcyAmJiAoKCF0LmlzTWlub3JUaWNrICYmIGF4aXMuZHJhd01ham9yR3JpZGxpbmVzKSB8fCAodC5pc01pbm9yVGljayAmJiBheGlzLmRyYXdNaW5vckdyaWRsaW5lcykpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TGluZSh0aGlzLl9sZWZ0LCBwb3MsIHRoaXMuX3JpZ2h0LCBwb3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBtYXJrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvd01hcmsgJiYgdC5tYXJrICYmICgoIXQuaXNNaW5vclRpY2sgJiYgYXhpcy5kcmF3TWFqb3JUaWNrTWFya3MpIHx8ICh0LmlzTWlub3JUaWNrICYmIGF4aXMuZHJhd01pbm9yVGlja01hcmtzKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSB0Lm1hcmtTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gdC5tYXJrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gTWF0aC5yb3VuZChheGlzLnUycCh0LnZhbHVlKSkgKyAwLjU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb3V0c2lkZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX3JpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl9yaWdodCtzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zaWRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdGhpcy5fcmlnaHQtczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gdGhpcy5fcmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjcm9zcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX3JpZ2h0LXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuX3JpZ2h0K3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSB0aGlzLl9yaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gdGhpcy5fcmlnaHQrczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIHNoYWRvdwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFkb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIFtbYiwgcG9zXSwgW2UsIHBvc11dLCB7bGluZUNhcDonYnV0dCcsIGxpbmVXaWR0aDp0aGlzLmdyaWRMaW5lV2lkdGgqMS41LCBvZmZzZXQ6dGhpcy5ncmlkTGluZVdpZHRoKjAuNzUsIGZpbGw6ZmFsc2UsIGNsb3NlUGF0aDpmYWxzZX0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lKGIsIHBvcywgZSwgcG9zLCB7c3Ryb2tlU3R5bGU6YXhpcy5ib3JkZXJDb2xvcn0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0ID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBheGlzID0gbnVsbDsKICAgICAgICAgICAgdGlja3MgPSBudWxsOwogICAgICAgIH0KICAgICAgICAvLyBOb3cgZHJhdyBncmlkIGxpbmVzIGZvciBhZGRpdGlvbmFsIHkgYXhlcwogICAgICAgIC8vLy8vLwogICAgICAgIC8vIFRPIERPOiBoYW5kbGUgeU1pZEF4aXMKICAgICAgICAvLy8vLy8KICAgICAgICBheCA9IFsneTNheGlzJywgJ3k0YXhpcycsICd5NWF4aXMnLCAneTZheGlzJywgJ3k3YXhpcycsICd5OGF4aXMnLCAneTlheGlzJywgJ3lNaWRBeGlzJ107CiAgICAgICAgZm9yICh2YXIgaT03OyBpPjA7IGktLSkgewogICAgICAgICAgICB2YXIgYXhpcyA9IGF4ZXNbYXhbaS0xXV07CiAgICAgICAgICAgIHZhciB0aWNrcyA9IGF4aXMuX3RpY2tzOwogICAgICAgICAgICBpZiAoYXhpcy5zaG93KSB7CiAgICAgICAgICAgICAgICB2YXIgdG4gPSB0aWNrc1theGlzLm51bWJlclRpY2tzLTFdOwogICAgICAgICAgICAgICAgdmFyIHQwID0gdGlja3NbMF07CiAgICAgICAgICAgICAgICB2YXIgbGVmdCA9IGF4aXMuZ2V0TGVmdCgpOwogICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IFtbbGVmdCwgdG4uZ2V0VG9wKCkgKyB0bi5nZXRIZWlnaHQoKS8yXSwgW2xlZnQsIHQwLmdldFRvcCgpICsgdDAuZ2V0SGVpZ2h0KCkvMiArIDEuMF1dOwogICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgc2hhZG93CiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFkb3cpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCBwb2ludHMsIHtsaW5lQ2FwOididXR0JywgZmlsbDpmYWxzZSwgY2xvc2VQYXRoOmZhbHNlfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBsaW5lCiAgICAgICAgICAgICAgICBkcmF3TGluZShwb2ludHNbMF1bMF0sIHBvaW50c1swXVsxXSwgcG9pbnRzWzFdWzBdLCBwb2ludHNbMV1bMV0sIHtsaW5lQ2FwOididXR0Jywgc3Ryb2tlU3R5bGU6YXhpcy5ib3JkZXJDb2xvciwgbGluZVdpZHRoOmF4aXMuYm9yZGVyV2lkdGh9KTsKICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRpY2sgbWFya3MKICAgICAgICAgICAgICAgIGZvciAodmFyIGo9dGlja3MubGVuZ3RoOyBqPjA7IGotLSkgewogICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGlja3Nbai0xXTsKICAgICAgICAgICAgICAgICAgICBzID0gdC5tYXJrU2l6ZTsKICAgICAgICAgICAgICAgICAgICBtID0gdC5tYXJrOwogICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSBNYXRoLnJvdW5kKGF4aXMudTJwKHQudmFsdWUpKSArIDAuNTsKICAgICAgICAgICAgICAgICAgICBpZiAodC5zaG93TWFyayAmJiB0Lm1hcmspIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvdXRzaWRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gbGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gbGVmdCtzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zaWRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gbGVmdC1zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBsZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY3Jvc3MnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBsZWZ0LXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGxlZnQrczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGxlZnQrczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBbW2IscG9zXSwgW2UscG9zXV07CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIHNoYWRvdwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFkb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50cywge2xpbmVDYXA6J2J1dHQnLCBsaW5lV2lkdGg6dGhpcy5ncmlkTGluZVdpZHRoKjEuNSwgb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LCBmaWxsOmZhbHNlLCBjbG9zZVBhdGg6ZmFsc2V9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lKGIsIHBvcywgZSwgcG9zLCB7c3Ryb2tlU3R5bGU6YXhpcy5ib3JkZXJDb2xvcn0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0ID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHQwID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBheGlzID0gbnVsbDsKICAgICAgICAgICAgdGlja3MgPSAgbnVsbDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgICAgICAKICAgICAgICBmdW5jdGlvbiBkcmF3TGluZShieCwgYnksIGV4LCBleSwgb3B0cykgewogICAgICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTsKICAgICAgICAgICAgaWYgKG9wdHMubGluZVdpZHRoID09IG51bGwgfHwgb3B0cy5saW5lV2lkdGggIT0gMCl7CiAgICAgICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCBjdHgsIG9wdHMpOwogICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyhieCwgYnkpOwogICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhleCwgZXkpOwogICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAodGhpcy5zaGFkb3cpIHsKICAgICAgICAgICAgdmFyIHBvaW50cyA9IFtbdGhpcy5fbGVmdCwgdGhpcy5fYm90dG9tXSwgW3RoaXMuX3JpZ2h0LCB0aGlzLl9ib3R0b21dLCBbdGhpcy5fcmlnaHQsIHRoaXMuX3RvcF1dOwogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCBwb2ludHMpOwogICAgICAgIH0KICAgICAgICAvLyBOb3cgZHJhdyBib3JkZXIgYXJvdW5kIGdyaWQuICBVc2UgYXhpcyBib3JkZXIgZGVmaW5pdGlvbnMuIHN0YXJ0IGF0CiAgICAgICAgLy8gdXBwZXIgbGVmdCBhbmQgZ28gY2xvY2t3aXNlLgogICAgICAgIGlmICh0aGlzLmJvcmRlcldpZHRoICE9IDAgJiYgdGhpcy5kcmF3Qm9yZGVyKSB7CiAgICAgICAgICAgIGRyYXdMaW5lICh0aGlzLl9sZWZ0LCB0aGlzLl90b3AsIHRoaXMuX3JpZ2h0LCB0aGlzLl90b3AsIHtsaW5lQ2FwOidyb3VuZCcsIHN0cm9rZVN0eWxlOmF4ZXMueDJheGlzLmJvcmRlckNvbG9yLCBsaW5lV2lkdGg6YXhlcy54MmF4aXMuYm9yZGVyV2lkdGh9KTsKICAgICAgICAgICAgZHJhd0xpbmUgKHRoaXMuX3JpZ2h0LCB0aGlzLl90b3AsIHRoaXMuX3JpZ2h0LCB0aGlzLl9ib3R0b20sIHtsaW5lQ2FwOidyb3VuZCcsIHN0cm9rZVN0eWxlOmF4ZXMueTJheGlzLmJvcmRlckNvbG9yLCBsaW5lV2lkdGg6YXhlcy55MmF4aXMuYm9yZGVyV2lkdGh9KTsKICAgICAgICAgICAgZHJhd0xpbmUgKHRoaXMuX3JpZ2h0LCB0aGlzLl9ib3R0b20sIHRoaXMuX2xlZnQsIHRoaXMuX2JvdHRvbSwge2xpbmVDYXA6J3JvdW5kJywgc3Ryb2tlU3R5bGU6YXhlcy54YXhpcy5ib3JkZXJDb2xvciwgbGluZVdpZHRoOmF4ZXMueGF4aXMuYm9yZGVyV2lkdGh9KTsKICAgICAgICAgICAgZHJhd0xpbmUgKHRoaXMuX2xlZnQsIHRoaXMuX2JvdHRvbSwgdGhpcy5fbGVmdCwgdGhpcy5fdG9wLCB7bGluZUNhcDoncm91bmQnLCBzdHJva2VTdHlsZTpheGVzLnlheGlzLmJvcmRlckNvbG9yLCBsaW5lV2lkdGg6YXhlcy55YXhpcy5ib3JkZXJXaWR0aH0pOwogICAgICAgIH0KICAgICAgICAvLyBjdHgubGluZVdpZHRoID0gdGhpcy5ib3JkZXJXaWR0aDsKICAgICAgICAvLyBjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmJvcmRlckNvbG9yOwogICAgICAgIC8vIGN0eC5zdHJva2VSZWN0KHRoaXMuX2xlZnQsIHRoaXMuX3RvcCwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7CiAgICAgICAgCiAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgICAgICBjdHggPSAgbnVsbDsKICAgICAgICBheGVzID0gbnVsbDsKICAgIH07CiAKICAgIC8vIENsYXNzOiAkLmpxcGxvdC5EaXZUaXRsZVJlbmRlcmVyCiAgICAvLyBUaGUgZGVmYXVsdCB0aXRsZSByZW5kZXJlciBmb3IganFQbG90LiAgVGhpcyBjbGFzcyBoYXMgbm8gb3B0aW9ucyBiZXlvbmQgdGhlIDxUaXRsZT4gY2xhc3MuIAogICAgJC5qcXBsb3QuRGl2VGl0bGVSZW5kZXJlciA9IGZ1bmN0aW9uKCkgewogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRGl2VGl0bGVSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkRpdlRpdGxlUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbigpIHsKICAgICAgICAvLyBNZW1vcnkgTGVha3MgcGF0Y2gKICAgICAgICBpZiAodGhpcy5fZWxlbSkgewogICAgICAgICAgICB0aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKTsKICAgICAgICAgICAgdGhpcy5fZWxlbSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICB2YXIgciA9IHRoaXMucmVuZGVyZXI7CiAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICB0aGlzLl9lbGVtID0gJChlbGVtKTsKICAgICAgICB0aGlzLl9lbGVtLmFkZENsYXNzKCdqcXBsb3QtdGl0bGUnKTsKCiAgICAgICAgaWYgKCF0aGlzLnRleHQpIHsKICAgICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uaGVpZ2h0KDApOwogICAgICAgICAgICB0aGlzLl9lbGVtLndpZHRoKDApOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0aGlzLnRleHQpIHsKICAgICAgICAgICAgdmFyIGNvbG9yOwogICAgICAgICAgICBpZiAodGhpcy5jb2xvcikgewogICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLmNvbG9yOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudGV4dENvbG9yKSB7CiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMudGV4dENvbG9yOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBkb24ndCB0cnVzdCB0aGF0IGEgc3R5bGVzaGVldCBpcyBwcmVzZW50LCBzZXQgdGhlIHBvc2l0aW9uLgogICAgICAgICAgICB2YXIgc3R5bGVzID0ge3Bvc2l0aW9uOidhYnNvbHV0ZScsIHRvcDonMHB4JywgbGVmdDonMHB4J307CgogICAgICAgICAgICBpZiAodGhpcy5fcGxvdFdpZHRoKSB7CiAgICAgICAgICAgICAgICBzdHlsZXNbJ3dpZHRoJ10gPSB0aGlzLl9wbG90V2lkdGgrJ3B4JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5mb250U2l6ZSkgewogICAgICAgICAgICAgICAgc3R5bGVzWydmb250U2l6ZSddID0gdGhpcy5mb250U2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMudGV4dEFsaWduID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgc3R5bGVzWyd0ZXh0QWxpZ24nXSA9IHRoaXMudGV4dEFsaWduOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgc3R5bGVzWyd0ZXh0QWxpZ24nXSA9ICdjZW50ZXInOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjb2xvcikgewogICAgICAgICAgICAgICAgc3R5bGVzWydjb2xvciddID0gY29sb3I7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMucGFkZGluZ0JvdHRvbSkgewogICAgICAgICAgICAgICAgc3R5bGVzWydwYWRkaW5nQm90dG9tJ10gPSB0aGlzLnBhZGRpbmdCb3R0b207CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuZm9udEZhbWlseSkgewogICAgICAgICAgICAgICAgc3R5bGVzWydmb250RmFtaWx5J10gPSB0aGlzLmZvbnRGYW1pbHk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHN0eWxlcyk7CiAgICAgICAgICAgIGlmICh0aGlzLmVzY2FwZUh0bWwpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0udGV4dCh0aGlzLnRleHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5odG1sKHRoaXMudGV4dCk7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgICAvLyBzdHlsZXRleHQgKz0gKHRoaXMuX3Bsb3RXaWR0aCkgPyAnd2lkdGg6Jyt0aGlzLl9wbG90V2lkdGgrJ3B4OycgOiAnJzsKICAgICAgICAgICAgLy8gc3R5bGV0ZXh0ICs9ICh0aGlzLmZvbnRTaXplKSA/ICdmb250LXNpemU6Jyt0aGlzLmZvbnRTaXplKyc7JyA6ICcnOwogICAgICAgICAgICAvLyBzdHlsZXRleHQgKz0gKHRoaXMudGV4dEFsaWduKSA/ICd0ZXh0LWFsaWduOicrdGhpcy50ZXh0QWxpZ24rJzsnIDogJ3RleHQtYWxpZ246Y2VudGVyOyc7CiAgICAgICAgICAgIC8vIHN0eWxldGV4dCArPSAoY29sb3IpID8gJ2NvbG9yOicrY29sb3IrJzsnIDogJyc7CiAgICAgICAgICAgIC8vIHN0eWxldGV4dCArPSAodGhpcy5wYWRkaW5nQm90dG9tKSA/ICdwYWRkaW5nLWJvdHRvbTonK3RoaXMucGFkZGluZ0JvdHRvbSsnOycgOiAnJzsKICAgICAgICAgICAgLy8gdGhpcy5fZWxlbSA9ICQoJzxkaXYgY2xhc3M9ImpxcGxvdC10aXRsZSIgc3R5bGU9Iicrc3R5bGV0ZXh0KyciPicrdGhpcy50ZXh0Kyc8L2Rpdj4nKTsKICAgICAgICAgICAgLy8gaWYgKHRoaXMuZm9udEZhbWlseSkgewogICAgICAgICAgICAvLyAgICAgdGhpcy5fZWxlbS5jc3MoJ2ZvbnQtZmFtaWx5JywgdGhpcy5mb250RmFtaWx5KTsKICAgICAgICAgICAgLy8gfQogICAgICAgIH0KCiAgICAgICAgZWxlbSA9IG51bGw7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW07CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5EaXZUaXRsZVJlbmRlcmVyLnByb3RvdHlwZS5wYWNrID0gZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gbm90aGluZyB0byBkbyBoZXJlCiAgICB9OwogIAoKICAgIHZhciBkb3RsZW4gPSAwLjE7CgogICAgJC5qcXBsb3QuTGluZVBhdHRlcm4gPSBmdW5jdGlvbiAoY3R4LCBwYXR0ZXJuKSB7CgogICAgICAgIHZhciBkZWZhdWx0TGluZVBhdHRlcm5zID0gewogICAgICAgICAgICBkb3R0ZWQ6IFsgZG90bGVuLCAkLmpxcGxvdC5jb25maWcuZG90R2FwTGVuZ3RoIF0sCiAgICAgICAgICAgIGRhc2hlZDogWyAkLmpxcGxvdC5jb25maWcuZGFzaExlbmd0aCwgJC5qcXBsb3QuY29uZmlnLmdhcExlbmd0aCBdLAogICAgICAgICAgICBzb2xpZDogbnVsbAogICAgICAgIH07CgogICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgaWYgKHBhdHRlcm5bMF0gPT09ICcuJyB8fCBwYXR0ZXJuWzBdID09PSAnLScpIHsKICAgICAgICAgICAgICAgIHZhciBzID0gcGF0dGVybjsKICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBbXTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MCwgaW1heD1zLmxlbmd0aDsgaTxpbWF4OyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc1tpXSA9PT0gJy4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4ucHVzaCggZG90bGVuICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNbaV0gPT09ICctJykgewogICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuLnB1c2goICQuanFwbG90LmNvbmZpZy5kYXNoTGVuZ3RoICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5wdXNoKCAkLmpxcGxvdC5jb25maWcuZ2FwTGVuZ3RoICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBwYXR0ZXJuID0gZGVmYXVsdExpbmVQYXR0ZXJuc1twYXR0ZXJuXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCEocGF0dGVybiAmJiBwYXR0ZXJuLmxlbmd0aCkpIHsKICAgICAgICAgICAgcmV0dXJuIGN0eDsKICAgICAgICB9CgogICAgICAgIHZhciBwYXR0ZXJuSW5kZXggPSAwOwogICAgICAgIHZhciBwYXR0ZXJuRGlzdGFuY2UgPSBwYXR0ZXJuWzBdOwogICAgICAgIHZhciBweCA9IDA7CiAgICAgICAgdmFyIHB5ID0gMDsKICAgICAgICB2YXIgcGF0aHgwID0gMDsKICAgICAgICB2YXIgcGF0aHkwID0gMDsKCiAgICAgICAgdmFyIG1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KSB7CiAgICAgICAgICAgIGN0eC5tb3ZlVG8oIHgsIHkgKTsKICAgICAgICAgICAgcHggPSB4OwogICAgICAgICAgICBweSA9IHk7CiAgICAgICAgICAgIHBhdGh4MCA9IHg7CiAgICAgICAgICAgIHBhdGh5MCA9IHk7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIGxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KSB7CiAgICAgICAgICAgIHZhciBzY2FsZSA9IGN0eC5saW5lV2lkdGg7CiAgICAgICAgICAgIHZhciBkeCA9IHggLSBweDsKICAgICAgICAgICAgdmFyIGR5ID0geSAtIHB5OwogICAgICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChkeCpkeCtkeSpkeSk7CiAgICAgICAgICAgIGlmICgoZGlzdCA+IDApICYmIChzY2FsZSA+IDApKSB7CiAgICAgICAgICAgICAgICBkeCAvPSBkaXN0OwogICAgICAgICAgICAgICAgZHkgLz0gZGlzdDsKICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRwID0gc2NhbGUgKiBwYXR0ZXJuRGlzdGFuY2U7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRwIDwgZGlzdCkgewogICAgICAgICAgICAgICAgICAgICAgICBweCArPSBkcCAqIGR4OwogICAgICAgICAgICAgICAgICAgICAgICBweSArPSBkcCAqIGR5OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHBhdHRlcm5JbmRleCAmIDEpID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oIHB4LCBweSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyggcHgsIHB5ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCAtPSBkcDsKICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybkluZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXR0ZXJuSW5kZXggPj0gcGF0dGVybi5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5JbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybkRpc3RhbmNlID0gcGF0dGVybltwYXR0ZXJuSW5kZXhdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHggPSB4OwogICAgICAgICAgICAgICAgICAgICAgICBweSA9IHk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocGF0dGVybkluZGV4ICYgMSkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyggcHgsIHB5ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKCBweCwgcHkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuRGlzdGFuY2UgLT0gZGlzdCAvIHNjYWxlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2YXIgYmVnaW5QYXRoID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIGNsb3NlUGF0aCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgbGluZVRvKCBwYXRoeDAsIHBhdGh5MCApOwogICAgICAgIH07CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIG1vdmVUbzogbW92ZVRvLAogICAgICAgICAgICBsaW5lVG86IGxpbmVUbywKICAgICAgICAgICAgYmVnaW5QYXRoOiBiZWdpblBhdGgsCiAgICAgICAgICAgIGNsb3NlUGF0aDogY2xvc2VQYXRoCiAgICAgICAgfTsKICAgIH07CgogICAgLy8gQ2xhc3M6ICQuanFwbG90LkxpbmVSZW5kZXJlcgogICAgLy8gVGhlIGRlZmF1bHQgbGluZSByZW5kZXJlciBmb3IganFQbG90LCB0aGlzIGNsYXNzIGhhcyBubyBvcHRpb25zIGJleW9uZCB0aGUgPFNlcmllcz4gY2xhc3MuCiAgICAvLyBEcmF3cyBzZXJpZXMgYXMgYSBsaW5lLgogICAgJC5qcXBsb3QuTGluZVJlbmRlcmVyID0gZnVuY3Rpb24oKXsKICAgICAgICB0aGlzLnNoYXBlUmVuZGVyZXIgPSBuZXcgJC5qcXBsb3QuU2hhcGVSZW5kZXJlcigpOwogICAgICAgIHRoaXMuc2hhZG93UmVuZGVyZXIgPSBuZXcgJC5qcXBsb3QuU2hhZG93UmVuZGVyZXIoKTsKICAgIH07CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIHNlcmllcy4KICAgICQuanFwbG90LkxpbmVSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMsIHBsb3QpIHsKICAgICAgICAvLyBHcm91cDogUHJvcGVydGllcwogICAgICAgIC8vCiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgdGhpcy5fdHlwZT0nbGluZSc7CiAgICAgICAgdGhpcy5yZW5kZXJlci5hbmltYXRpb24gPSB7CiAgICAgICAgICAgIHNob3c6IGZhbHNlLAogICAgICAgICAgICBkaXJlY3Rpb246ICdsZWZ0JywKICAgICAgICAgICAgc3BlZWQ6IDI1MDAsCiAgICAgICAgICAgIF9zdXBwb3J0ZWQ6IHRydWUKICAgICAgICB9OwogICAgICAgIC8vIHByb3A6IHNtb290aAogICAgICAgIC8vIFRydWUgdG8gZHJhdyBhIHNtb290aGVkIChpbnRlcnBvbGF0ZWQpIGxpbmUgdGhyb3VnaCB0aGUgZGF0YSBwb2ludHMKICAgICAgICAvLyB3aXRoIGF1dG9tYXRpY2FsbHkgY29tcHV0ZWQgbnVtYmVyIG9mIHNtb290aGluZyBwb2ludHMuCiAgICAgICAgLy8gU2V0IHRvIGFuIGludGVnZXIgbnVtYmVyID4gMiB0byBzcGVjaWZ5IG51bWJlciBvZiBzbW9vdGhpbmcgcG9pbnRzCiAgICAgICAgLy8gdG8gdXNlIGJldHdlZW4gZWFjaCBkYXRhIHBvaW50LgogICAgICAgIHRoaXMucmVuZGVyZXIuc21vb3RoID0gZmFsc2U7ICAvLyB0cnVlIG9yIGEgbnVtYmVyID4gMiBmb3Igc21vb3RoaW5nLgogICAgICAgIHRoaXMucmVuZGVyZXIudGVuc2lvbiA9IG51bGw7IC8vIG51bGwgdG8gYXV0byBjb21wdXRlIG9yIGEgbnVtYmVyIHR5cGljYWxseSA+IDYuICBGZXdlciBwb2ludHMgcmVxdWlyZXMgaGlnaGVyIHRlbnNpb24uCiAgICAgICAgLy8gcHJvcDogY29uc3RyYWluU21vb3RoaW5nCiAgICAgICAgLy8gVHJ1ZSB0byB1c2UgYSBtb3JlIGFjY3VyYXRlIHNtb290aGluZyBhbGdvcml0aG0gdGhhdCB3aWxsCiAgICAgICAgLy8gbm90IG92ZXJzaG9vdCBhbnkgZGF0YSBwb2ludHMuICBGYWxzZSB0byBhbGxvdyBvdmVyc2hvb3QgYnV0CiAgICAgICAgLy8gcHJvZHVjZSBhIHNtb290aGVyIGxvb2tpbmcgbGluZS4KICAgICAgICB0aGlzLnJlbmRlcmVyLmNvbnN0cmFpblNtb290aGluZyA9IHRydWU7CiAgICAgICAgLy8gdGhpcyBpcyBzbW9vdGhlZCBkYXRhIGluIGdyaWQgY29vcmRpbmF0ZXMsIGxpa2UgZ3JpZERhdGEKICAgICAgICB0aGlzLnJlbmRlcmVyLl9zbW9vdGhlZERhdGEgPSBbXTsKICAgICAgICAvLyB0aGlzIGlzIHNtb290aGVkIGRhdGEgaW4gcGxvdCB1bml0cyAocGxvdCBjb29yZGluYXRlcyksIGxpa2UgcGxvdERhdGEuCiAgICAgICAgdGhpcy5yZW5kZXJlci5fc21vb3RoZWRQbG90RGF0YSA9IFtdOwogICAgICAgIHRoaXMucmVuZGVyZXIuX2hpQmFuZEdyaWREYXRhID0gW107CiAgICAgICAgdGhpcy5yZW5kZXJlci5fbG93QmFuZEdyaWREYXRhID0gW107CiAgICAgICAgdGhpcy5yZW5kZXJlci5faGlCYW5kU21vb3RoZWREYXRhID0gW107CiAgICAgICAgdGhpcy5yZW5kZXJlci5fbG93QmFuZFNtb290aGVkRGF0YSA9IFtdOwoKICAgICAgICAvLyBwcm9wOiBiYW5kRGF0YQogICAgICAgIC8vIERhdGEgdXNlZCB0byBkcmF3IGVycm9yIGJhbmRzIG9yIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGFib3ZlL2JlbG93IGEgbGluZS4KICAgICAgICAvLwogICAgICAgIC8vIGJhbmREYXRhIGNhbiBiZSBpbnB1dCBpbiAzIGZvcm1zLiAganFQbG90IHdpbGwgZmlndXJlIG91dCB3aGljaCBpcyB0aGUKICAgICAgICAvLyBsb3cgYmFuZCBsaW5lIGFuZCB3aGljaCBpcyB0aGUgaGlnaCBiYW5kIGxpbmUgZm9yIGFsbCBmb3JtczoKICAgICAgICAvLyAKICAgICAgICAvLyBBIDIgZGltZW5zaW9uYWwgYXJyYXkgbGlrZSBbW3lsMSwgeWwyLCAuLi5dLCBbeXUxLCB5dTIsIC4uLl1dIHdoZXJlCiAgICAgICAgLy8gW3lsMSwgeWwyLCAuLi5dIGFyZSB5IHZhbHVlcyBvZiB0aGUgbG93ZXIgbGluZSBhbmQKICAgICAgICAvLyBbeXUxLCB5dTIsIC4uLl0gYXJlIHkgdmFsdWVzIG9mIHRoZSB1cHBlciBsaW5lLgogICAgICAgIC8vIEluIHRoaXMgY2FzZSB0aGVyZSBtdXN0IGJlIHRoZSBzYW1lIG51bWJlciBvZiB5IGRhdGEgcG9pbnRzIGFzIGRhdGEgcG9pbnRzCiAgICAgICAgLy8gaW4gdGhlIHNlcmllcyBhbmQgdGhlIGJhbmRzIHdpbGwgaW5oZXJpdCB0aGUgeCB2YWx1ZXMgb2YgdGhlIHNlcmllcy4KICAgICAgICAvLwogICAgICAgIC8vIEEgMiBkaW1lbnNpb25hbCBhcnJheSBsaWtlIFtbW3hsMSwgeWwxXSwgW3hsMiwgeWwyXSwgLi4uXSwgW1t4aDEsIHloMV0sIFt4aDIsIHloMl0sIC4uLl1dCiAgICAgICAgLy8gd2hlcmUgW3hsMSwgeWwxXSBhcmUgeCx5IGRhdGEgcG9pbnRzIGZvciB0aGUgbG93ZXIgbGluZSBhbmQKICAgICAgICAvLyBbeGgxLCB5aDFdIGFyZSB4LHkgZGF0YSBwb2ludHMgZm9yIHRoZSBoaWdoIGxpbmUuCiAgICAgICAgLy8geCB2YWx1ZXMgZG8gbm90IGhhdmUgdG8gY29ycmVzcG9uZCB0byB0aGUgeCB2YWx1ZXMgb2YgdGhlIHNlcmllcyBhbmQgY2FuCiAgICAgICAgLy8gYmUgb2YgYW55IGFyYml0cmFyeSBsZW5ndGguCiAgICAgICAgLy8KICAgICAgICAvLyBDYW4gYmUgb2YgZm9ybSBbW3lsMSwgeXUxXSwgW3lsMiwgeXUyXSwgW3lsMywgeXUzXSwgLi4uXSB3aGVyZQogICAgICAgIC8vIHRoZXJlIG11c3QgYmUgMyBvciBtb3JlIGFycmF5cyBhbmQgdGhlcmUgbXVzdCBiZSB0aGUgc2FtZSBudW1iZXIgb2YgYXJyYXlzCiAgICAgICAgLy8gYXMgdGhlcmUgYXJlIGRhdGEgcG9pbnRzIGluIHRoZSBzZXJpZXMuICBJbiB0aGlzIGNhc2UsIAogICAgICAgIC8vIFt5bDEsIHl1MV0gc3BlY2lmaWVzIHRoZSBsb3dlciBhbmQgdXBwZXIgeSB2YWx1ZXMgZm9yIHRoZSAxc3QKICAgICAgICAvLyBkYXRhIHBvaW50IGFuZCBzbyBvbi4gIFRoZSBiYW5kcyB3aWxsIGluaGVyaXQgdGhlIHgKICAgICAgICAvLyB2YWx1ZXMgZnJvbSB0aGUgc2VyaWVzLgogICAgICAgIHRoaXMucmVuZGVyZXIuYmFuZERhdGEgPSBbXTsKCiAgICAgICAgLy8gR3JvdXA6IGJhbmRzCiAgICAgICAgLy8gQmFuZGluZyBhcm91bmQgbGluZSwgZS5nIGVycm9yIGJhbmRzIG9yIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLgogICAgICAgIHRoaXMucmVuZGVyZXIuYmFuZHMgPSB7CiAgICAgICAgICAgIC8vIHByb3A6IHNob3cKICAgICAgICAgICAgLy8gdHJ1ZSB0byBzaG93IHRoZSBiYW5kcy4gIElmIGJhbmREYXRhIG9yIGludGVydmFsIGlzCiAgICAgICAgICAgIC8vIHN1cHBsaWVkLCBzaG93IHdpbGwgYmUgc2V0IHRvIHRydWUgYnkgZGVmYXVsdC4KICAgICAgICAgICAgc2hvdzogZmFsc2UsCiAgICAgICAgICAgIGhpRGF0YTogW10sCiAgICAgICAgICAgIGxvd0RhdGE6IFtdLAogICAgICAgICAgICAvLyBwcm9wOiBjb2xvcgogICAgICAgICAgICAvLyBjb2xvciBvZiBsaW5lcyBhdCB0b3AgYW5kIGJvdHRvbSBvZiBiYW5kcyBbZGVmYXVsdDogc2VyaWVzIGNvbG9yXS4KICAgICAgICAgICAgY29sb3I6IHRoaXMuY29sb3IsCiAgICAgICAgICAgIC8vIHByb3A6IHNob3dMaW5lcwogICAgICAgICAgICAvLyBUcnVlIHRvIHNob3cgbGluZXMgYXQgdG9wIGFuZCBib3R0b20gb2YgYmFuZHMgW2RlZmF1bHQ6IGZhbHNlXS4KICAgICAgICAgICAgc2hvd0xpbmVzOiBmYWxzZSwKICAgICAgICAgICAgLy8gcHJvcDogZmlsbAogICAgICAgICAgICAvLyBUcnVlIHRvIGZpbGwgYXJlYSBiZXR3ZWVuIGJhbmRzIFtkZWZhdWx0OiB0cnVlXS4KICAgICAgICAgICAgZmlsbDogdHJ1ZSwKICAgICAgICAgICAgLy8gcHJvcDogZmlsbENvbG9yCiAgICAgICAgICAgIC8vIGNzcyBjb2xvciBzcGVjIGZvciBmaWxsZWQgYXJlYS4gIFtkZWZhdWx0OiBzZXJpZXMgY29sb3JdLgogICAgICAgICAgICBmaWxsQ29sb3I6IG51bGwsCiAgICAgICAgICAgIF9taW46IG51bGwsCiAgICAgICAgICAgIF9tYXg6IG51bGwsCiAgICAgICAgICAgIC8vIHByb3A6IGludGVydmFsCiAgICAgICAgICAgIC8vIFVzZXIgc3BlY2lmaWVkIGludGVydmFsIGFib3ZlIGFuZCBiZWxvdyBsaW5lIGZvciBiYW5kcyBbZGVmYXVsdDogJzMlJyddLgogICAgICAgICAgICAvLyBDYW4gYmUgYSB2YWx1ZSBsaWtlIDMgb3IgYSBzdHJpbmcgbGlrZSAnMyUnIAogICAgICAgICAgICAvLyBvciBhbiB1cHBlci9sb3dlciBhcnJheSBsaWtlIFsxLCAtMl0gb3IgWycyJScsICctMS41JSddCiAgICAgICAgICAgIGludGVydmFsOiAnMyUnCiAgICAgICAgfTsKCgogICAgICAgIHZhciBsb3B0cyA9IHtoaWdobGlnaHRNb3VzZU92ZXI6IG9wdGlvbnMuaGlnaGxpZ2h0TW91c2VPdmVyLCBoaWdobGlnaHRNb3VzZURvd246IG9wdGlvbnMuaGlnaGxpZ2h0TW91c2VEb3duLCBoaWdobGlnaHRDb2xvcjogb3B0aW9ucy5oaWdobGlnaHRDb2xvcn07CiAgICAgICAgCiAgICAgICAgZGVsZXRlIChvcHRpb25zLmhpZ2hsaWdodE1vdXNlT3Zlcik7CiAgICAgICAgZGVsZXRlIChvcHRpb25zLmhpZ2hsaWdodE1vdXNlRG93bik7CiAgICAgICAgZGVsZXRlIChvcHRpb25zLmhpZ2hsaWdodENvbG9yKTsKICAgICAgICAKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLnJlbmRlcmVyLCBvcHRpb25zKTsKCiAgICAgICAgdGhpcy5yZW5kZXJlci5vcHRpb25zID0gb3B0aW9uczsKCiAgICAgICAgLy8gaWYgd2UgYXJlIGdpdmVuIHNvbWUgYmFuZCBkYXRhLCBhbmQgYmFuZHMgYXJlbid0IGV4cGxpY2l0eSBzZXQgdG8gZmFsc2UgaW4gb3B0aW9ucywgdHVybiB0aGVtIG9uLgogICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLmJhbmREYXRhLmxlbmd0aCA+IDEgJiYgKCFvcHRpb25zLmJhbmRzIHx8IG9wdGlvbnMuYmFuZHMuc2hvdyA9PSBudWxsKSkgewogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmJhbmRzLnNob3cgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gaWYgd2UgYXJlIGdpdmVuIGFuIGludGVydmFsLCBhbmQgYmFuZHMgYXJlbid0IGV4cGxpY2l0eSBzZXQgdG8gZmFsc2UgaW4gb3B0aW9ucywgdHVybiB0aGVtIG9uLgogICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuYmFuZHMgJiYgb3B0aW9ucy5iYW5kcy5zaG93ID09IG51bGwgJiYgb3B0aW9ucy5iYW5kcy5pbnRlcnZhbCAhPSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmFuZHMuc2hvdyA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBpZiBwbG90IGlzIGZpbGxlZCwgdHVybiBvZmYgYmFuZHMuCiAgICAgICAgaWYgKHRoaXMuZmlsbCkgewogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmJhbmRzLnNob3cgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLmJhbmRzLnNob3cpIHsKICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5pbml0QmFuZHMuY2FsbCh0aGlzLCB0aGlzLnJlbmRlcmVyLm9wdGlvbnMsIHBsb3QpOwogICAgICAgIH0KCgogICAgICAgIC8vIHNtb290aGluZyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHN0YWNrZWQgbGluZXMsIGRpc2FibGUKICAgICAgICBpZiAodGhpcy5fc3RhY2spIHsKICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zbW9vdGggPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIHNldCB0aGUgc2hhcGUgcmVuZGVyZXIgb3B0aW9ucwogICAgICAgIHZhciBvcHRzID0ge2xpbmVKb2luOnRoaXMubGluZUpvaW4sIGxpbmVDYXA6dGhpcy5saW5lQ2FwLCBmaWxsOnRoaXMuZmlsbCwgaXNhcmM6ZmFsc2UsIHN0cm9rZVN0eWxlOnRoaXMuY29sb3IsIGZpbGxTdHlsZTp0aGlzLmZpbGxDb2xvciwgbGluZVdpZHRoOnRoaXMubGluZVdpZHRoLCBsaW5lUGF0dGVybjp0aGlzLmxpbmVQYXR0ZXJuLCBjbG9zZVBhdGg6dGhpcy5maWxsfTsKICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuaW5pdChvcHRzKTsKCiAgICAgICAgdmFyIHNoYWRvd19vZmZzZXQgPSBvcHRpb25zLnNoYWRvd09mZnNldDsKICAgICAgICAvLyBzZXQgdGhlIHNoYWRvdyByZW5kZXJlciBvcHRpb25zCiAgICAgICAgaWYgKHNoYWRvd19vZmZzZXQgPT0gbnVsbCkgewogICAgICAgICAgICAvLyBzY2FsZSB0aGUgc2hhZG93T2Zmc2V0IHRvIHRoZSB3aWR0aCBvZiB0aGUgbGluZS4KICAgICAgICAgICAgaWYgKHRoaXMubGluZVdpZHRoID4gMi41KSB7CiAgICAgICAgICAgICAgICBzaGFkb3dfb2Zmc2V0ID0gMS4yNSAqICgxICsgKE1hdGguYXRhbigodGhpcy5saW5lV2lkdGgvMi41KSkvMC43ODUzOTgxNjMgLSAxKSowLjYpOwogICAgICAgICAgICAgICAgLy8gdmFyIHNoYWRvd19vZmZzZXQgPSB0aGlzLnNoYWRvd09mZnNldDsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBmb3Igc2tpbm55IGxpbmVzLCBkb24ndCBtYWtlIHN1Y2ggYSBiaWcgc2hhZG93LgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHNoYWRvd19vZmZzZXQgPSAxLjI1ICogTWF0aC5hdGFuKCh0aGlzLmxpbmVXaWR0aC8yLjUpKS8wLjc4NTM5ODE2MzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgc29wdHMgPSB7bGluZUpvaW46dGhpcy5saW5lSm9pbiwgbGluZUNhcDp0aGlzLmxpbmVDYXAsIGZpbGw6dGhpcy5maWxsLCBpc2FyYzpmYWxzZSwgYW5nbGU6dGhpcy5zaGFkb3dBbmdsZSwgb2Zmc2V0OnNoYWRvd19vZmZzZXQsIGFscGhhOnRoaXMuc2hhZG93QWxwaGEsIGRlcHRoOnRoaXMuc2hhZG93RGVwdGgsIGxpbmVXaWR0aDp0aGlzLmxpbmVXaWR0aCwgbGluZVBhdHRlcm46dGhpcy5saW5lUGF0dGVybiwgY2xvc2VQYXRoOnRoaXMuZmlsbH07CiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5pbml0KHNvcHRzKTsKICAgICAgICB0aGlzLl9hcmVhUG9pbnRzID0gW107CiAgICAgICAgdGhpcy5fYm91bmRpbmdCb3ggPSBbW10sW11dOwogICAgICAgIAogICAgICAgIGlmICghdGhpcy5pc1RyZW5kbGluZSAmJiB0aGlzLmZpbGwgfHwgdGhpcy5yZW5kZXJlci5iYW5kcy5zaG93KSB7CiAgICAgICAgICAgIC8vIEdyb3VwOiBQcm9wZXJ0aWVzCiAgICAgICAgICAgIC8vICAgICAgICAKICAgICAgICAgICAgLy8gcHJvcDogaGlnaGxpZ2h0TW91c2VPdmVyCiAgICAgICAgICAgIC8vIFRydWUgdG8gaGlnaGxpZ2h0IGFyZWEgb24gYSBmaWxsZWQgcGxvdCB3aGVuIG1vdXNlZCBvdmVyLgogICAgICAgICAgICAvLyBUaGlzIG11c3QgYmUgZmFsc2UgdG8gZW5hYmxlIGhpZ2hsaWdodE1vdXNlRG93biB0byBoaWdobGlnaHQgd2hlbiBjbGlja2luZyBvbiBhbiBhcmVhIG9uIGEgZmlsbGVkIHBsb3QuCiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0TW91c2VPdmVyID0gdHJ1ZTsKICAgICAgICAgICAgLy8gcHJvcDogaGlnaGxpZ2h0TW91c2VEb3duCiAgICAgICAgICAgIC8vIFRydWUgdG8gaGlnaGxpZ2h0IHdoZW4gYSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBvdmVyIGFuIGFyZWEgb24gYSBmaWxsZWQgcGxvdC4KICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGRpc2FibGVkIGlmIGhpZ2hsaWdodE1vdXNlT3ZlciBpcyB0cnVlLgogICAgICAgICAgICB0aGlzLmhpZ2hsaWdodE1vdXNlRG93biA9IGZhbHNlOwogICAgICAgICAgICAvLyBwcm9wOiBoaWdobGlnaHRDb2xvcgogICAgICAgICAgICAvLyBjb2xvciB0byB1c2Ugd2hlbiBoaWdobGlnaHRpbmcgYW4gYXJlYSBvbiBhIGZpbGxlZCBwbG90LgogICAgICAgICAgICB0aGlzLmhpZ2hsaWdodENvbG9yID0gbnVsbDsKICAgICAgICAgICAgLy8gaWYgdXNlciBoYXMgcGFzc2VkIGluIGhpZ2hsaWdodE1vdXNlRG93biBvcHRpb24gYW5kIG5vdCBzZXQgaGlnaGxpZ2h0TW91c2VPdmVyLCBkaXNhYmxlIGhpZ2hsaWdodE1vdXNlT3ZlcgogICAgICAgICAgICBpZiAobG9wdHMuaGlnaGxpZ2h0TW91c2VEb3duICYmIGxvcHRzLmhpZ2hsaWdodE1vdXNlT3ZlciA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBsb3B0cy5oaWdobGlnaHRNb3VzZU92ZXIgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCB7aGlnaGxpZ2h0TW91c2VPdmVyOiBsb3B0cy5oaWdobGlnaHRNb3VzZU92ZXIsIGhpZ2hsaWdodE1vdXNlRG93bjogbG9wdHMuaGlnaGxpZ2h0TW91c2VEb3duLCBoaWdobGlnaHRDb2xvcjogbG9wdHMuaGlnaGxpZ2h0Q29sb3J9KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICghdGhpcy5oaWdobGlnaHRDb2xvcikgewogICAgICAgICAgICAgICAgdmFyIGZjID0gKHRoaXMucmVuZGVyZXIuYmFuZHMuc2hvdykgPyB0aGlzLnJlbmRlcmVyLmJhbmRzLmZpbGxDb2xvciA6IHRoaXMuZmlsbENvbG9yOwogICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRDb2xvciA9ICQuanFwbG90LmNvbXB1dGVIaWdobGlnaHRDb2xvcnMoZmMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIHR1cm4gb2ZmIChkaXNhYmxlKSB0aGUgaGlnaGxpZ2h0ZXIgcGx1Z2luCiAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodGVyKSB7CiAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodGVyLnNob3cgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoIXRoaXMuaXNUcmVuZGxpbmUgJiYgcGxvdCkgewogICAgICAgICAgICBwbG90LnBsdWdpbnMubGluZVJlbmRlcmVyID0ge307CiAgICAgICAgICAgIHBsb3QucG9zdEluaXRIb29rcy5hZGRPbmNlKHBvc3RJbml0KTsKICAgICAgICAgICAgcGxvdC5wb3N0RHJhd0hvb2tzLmFkZE9uY2UocG9zdFBsb3REcmF3KTsKICAgICAgICAgICAgcGxvdC5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgnanFwbG90TW91c2VNb3ZlJywgaGFuZGxlTW92ZSk7CiAgICAgICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdE1vdXNlRG93bicsIGhhbmRsZU1vdXNlRG93bik7CiAgICAgICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdE1vdXNlVXAnLCBoYW5kbGVNb3VzZVVwKTsKICAgICAgICAgICAgcGxvdC5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgnanFwbG90Q2xpY2snLCBoYW5kbGVDbGljayk7CiAgICAgICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdFJpZ2h0Q2xpY2snLCBoYW5kbGVSaWdodENsaWNrKTsKICAgICAgICB9CgogICAgfTsKCiAgICAkLmpxcGxvdC5MaW5lUmVuZGVyZXIucHJvdG90eXBlLmluaXRCYW5kcyA9IGZ1bmN0aW9uKG9wdGlvbnMsIHBsb3QpIHsKICAgICAgICAvLyB1c2UgYmFuZERhdGEgaWYgbm8gZGF0YSBzcGVjaWZpZWQgaW4gYmFuZHMgb3B0aW9uCiAgICAgICAgLy92YXIgYmQgPSB0aGlzLnJlbmRlcmVyLmJhbmREYXRhOwogICAgICAgIHZhciBiZCA9IG9wdGlvbnMuYmFuZERhdGEgfHwgW107CiAgICAgICAgdmFyIGJhbmRzID0gdGhpcy5yZW5kZXJlci5iYW5kczsKICAgICAgICBiYW5kcy5oaURhdGEgPSBbXTsKICAgICAgICBiYW5kcy5sb3dEYXRhID0gW107CiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7CiAgICAgICAgYmFuZHMuX21heCA9IG51bGw7CiAgICAgICAgYmFuZHMuX21pbiA9IG51bGw7CiAgICAgICAgLy8gSWYgMiBhcnJheXMsIGFuZCBlYWNoIGFycmF5IGdyZWF0ZXIgdGhhbiAyIGVsZW1lbnRzLCBhc3N1bWUgaXQgaXMgaGkgYW5kIGxvdyBkYXRhIGJhbmRzIG9mIHkgdmFsdWVzLgogICAgICAgIGlmIChiZC5sZW5ndGggPT0gMikgewogICAgICAgICAgICAvLyBEbyB3ZSBoYXZlIGFuIGFycmF5IG9mIHgseSB2YWx1ZXM/CiAgICAgICAgICAgIC8vIGxpa2UgW1tbMSwxXSwgWzIsNF0sIFszLDNdXSwgW1sxLDNdLCBbMiw2XSwgWzMsNV1dXQogICAgICAgICAgICBpZiAoJC5pc0FycmF5KGJkWzBdWzBdKSkgewogICAgICAgICAgICAgICAgLy8gc2luY2UgYW4gYXJiaXRyYXJ5IGFycmF5IG9mIHBvaW50cywgc3BpbiB0aHJvdWdoIGFsbCBvZiB0aGVtIHRvIGRldGVybWluZSBtYXggYW5kIG1pbiBsaW5lcy4KCiAgICAgICAgICAgICAgICB2YXIgcDsKICAgICAgICAgICAgICAgIHZhciBiZG1pbmlkeCA9IDAsIGJkbWF4aWR4ID0gMDsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYmRbMF0ubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHAgPSBiZFswXVtpXTsKICAgICAgICAgICAgICAgICAgICBpZiAoKHBbMV0gIT0gbnVsbCAmJiBwWzFdID4gYmFuZHMuX21heCkgfHwgYmFuZHMuX21heCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJhbmRzLl9tYXggPSBwWzFdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoKHBbMV0gIT0gbnVsbCAmJiBwWzFdIDwgYmFuZHMuX21pbikgfHwgYmFuZHMuX21pbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJhbmRzLl9taW4gPSBwWzFdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYmRbMV0ubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHAgPSBiZFsxXVtpXTsKICAgICAgICAgICAgICAgICAgICBpZiAoKHBbMV0gIT0gbnVsbCAmJiBwWzFdID4gYmFuZHMuX21heCkgfHwgYmFuZHMuX21heCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJhbmRzLl9tYXggPSBwWzFdOwogICAgICAgICAgICAgICAgICAgICAgICBiZG1heGlkeCA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgocFsxXSAhPSBudWxsICYmIHBbMV0gPCBiYW5kcy5fbWluKSB8fCBiYW5kcy5fbWluID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYmFuZHMuX21pbiA9IHBbMV07CiAgICAgICAgICAgICAgICAgICAgICAgIGJkbWluaWR4ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGJkbWF4aWR4ID09PSBiZG1pbmlkeCkgewogICAgICAgICAgICAgICAgICAgIGJhbmRzLnNob3cgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBiYW5kcy5oaURhdGEgPSBiZFtiZG1heGlkeF07CiAgICAgICAgICAgICAgICBiYW5kcy5sb3dEYXRhID0gYmRbYmRtaW5pZHhdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIGVsc2UgZGF0YSBpcyBhcnJheXMgb2YgeSB2YWx1ZXMKICAgICAgICAgICAgLy8gbGlrZSBbWzEsNCwzXSwgWzMsNiw1XV0KICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHNhbWUgbnVtYmVyIG9mIGJhbmQgZGF0YSBwb2ludHMgYXMgcG9pbnRzIGluIHNlcmllcwogICAgICAgICAgICBlbHNlIGlmIChiZFswXS5sZW5ndGggPT09IGRhdGEubGVuZ3RoICYmIGJkWzFdLmxlbmd0aCA9PT0gZGF0YS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHZhciBoaSA9IChiZFswXVswXSA+IGJkWzFdWzBdKSA/IDAgOiAxOwogICAgICAgICAgICAgICAgdmFyIGxvdyA9IChoaSkgPyAwIDogMTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbD1kYXRhLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGJhbmRzLmhpRGF0YS5wdXNoKFtkYXRhW2ldWzBdLCBiZFtoaV1baV1dKTsKICAgICAgICAgICAgICAgICAgICBiYW5kcy5sb3dEYXRhLnB1c2goW2RhdGFbaV1bMF0sIGJkW2xvd11baV1dKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSBwcm9wZXIgZGF0YSBhcnJheSwgZG9uJ3Qgc2hvdyBiYW5kcy4KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBiYW5kcy5zaG93ID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIGlmIG1vcmUgdGhhbiAyIGFycmF5cywgaGF2ZSBhcnJheXMgb2YgW3lsb3csIHloaV0gdmFsdWVzLgogICAgICAgIC8vIG5vdGUsIGNhbid0IGRpc3Rpbmd1aXNoIGNhc2Ugb2YgW1t5bG93LCB5aGldLCBbeWxvdywgeWhpXV0gZnJvbSBbW3lsb3csIHlsb3ddLCBbeWhpLCB5aGldXQogICAgICAgIC8vIHRoaXMgaXMgYXNzdW1lZCB0byBiZSBvZiB0aGUgbGF0dGVyIGZvcm0uCiAgICAgICAgZWxzZSBpZiAoYmQubGVuZ3RoID4gMiAmJiAhJC5pc0FycmF5KGJkWzBdWzBdKSkgewogICAgICAgICAgICB2YXIgaGkgPSAoYmRbMF1bMF0gPiBiZFswXVsxXSkgPyAwIDogMTsKICAgICAgICAgICAgdmFyIGxvdyA9IChoaSkgPyAwIDogMTsKICAgICAgICAgICAgZm9yICh2YXIgaT0wLCBsPWJkLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgIGJhbmRzLmhpRGF0YS5wdXNoKFtkYXRhW2ldWzBdLCBiZFtpXVtoaV1dKTsKICAgICAgICAgICAgICAgIGJhbmRzLmxvd0RhdGEucHVzaChbZGF0YVtpXVswXSwgYmRbaV1bbG93XV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBkb24ndCBoYXZlIHByb3BlciBkYXRhLCBhdXRvIGNhbGN1bGF0ZQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaW50cnYgPSBiYW5kcy5pbnRlcnZhbDsKICAgICAgICAgICAgdmFyIGEgPSBudWxsOwogICAgICAgICAgICB2YXIgYiA9IG51bGw7CiAgICAgICAgICAgIHZhciBhZnVuYyA9IG51bGw7CiAgICAgICAgICAgIHZhciBiZnVuYyA9IG51bGw7CgogICAgICAgICAgICBpZiAoJC5pc0FycmF5KGludHJ2KSkgewogICAgICAgICAgICAgICAgYSA9IGludHJ2WzBdOwogICAgICAgICAgICAgICAgYiA9IGludHJ2WzFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgYSA9IGludHJ2OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNOYU4oYSkpIHsKICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBzdHJpbmcKICAgICAgICAgICAgICAgIGlmIChhLmNoYXJBdChhLmxlbmd0aCAtIDEpID09PSAnJScpIHsKICAgICAgICAgICAgICAgICAgICBhZnVuYyA9ICdtdWx0aXBseSc7CiAgICAgICAgICAgICAgICAgICAgYSA9IHBhcnNlRmxvYXQoYSkvMTAwICsgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBhID0gcGFyc2VGbG9hdChhKTsKICAgICAgICAgICAgICAgIGFmdW5jID0gJ2FkZCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChiICE9PSBudWxsICYmIGlzTmFOKGIpKSB7CiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc3RyaW5nCiAgICAgICAgICAgICAgICBpZiAoYi5jaGFyQXQoYi5sZW5ndGggLSAxKSA9PT0gJyUnKSB7CiAgICAgICAgICAgICAgICAgICAgYmZ1bmMgPSAnbXVsdGlwbHknOwogICAgICAgICAgICAgICAgICAgIGIgPSBwYXJzZUZsb2F0KGIpLzEwMCArIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgaWYgKGIgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIGIgPSBwYXJzZUZsb2F0KGIpOwogICAgICAgICAgICAgICAgYmZ1bmMgPSAnYWRkJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGEgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIGlmIChiID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgYiA9IC1hOwogICAgICAgICAgICAgICAgICAgIGJmdW5jID0gYWZ1bmM7CiAgICAgICAgICAgICAgICAgICAgaWYgKGJmdW5jID09PSAnbXVsdGlwbHknKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGIgKz0gMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGEgYWx3YXlzIGFwcGxpZXMgdG8gaGkgYmFuZC4KICAgICAgICAgICAgICAgIGlmIChhIDwgYikgewogICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gYTsKICAgICAgICAgICAgICAgICAgICBhID0gYjsKICAgICAgICAgICAgICAgICAgICBiID0gdGVtcDsKICAgICAgICAgICAgICAgICAgICB0ZW1wID0gYWZ1bmM7CiAgICAgICAgICAgICAgICAgICAgYWZ1bmMgPSBiZnVuYzsKICAgICAgICAgICAgICAgICAgICBiZnVuYyA9IHRlbXA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wLCBsID0gZGF0YS5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFmdW5jKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FkZCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYW5kcy5oaURhdGEucHVzaChbZGF0YVtpXVswXSwgZGF0YVtpXVsxXSArIGFdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtdWx0aXBseSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYW5kcy5oaURhdGEucHVzaChbZGF0YVtpXVswXSwgZGF0YVtpXVsxXSAqIGFdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJmdW5jKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FkZCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYW5kcy5sb3dEYXRhLnB1c2goW2RhdGFbaV1bMF0sIGRhdGFbaV1bMV0gKyBiXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbXVsdGlwbHknOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFuZHMubG93RGF0YS5wdXNoKFtkYXRhW2ldWzBdLCBkYXRhW2ldWzFdICogYl0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGJhbmRzLnNob3cgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGhkID0gYmFuZHMuaGlEYXRhOwogICAgICAgIHZhciBsZCA9IGJhbmRzLmxvd0RhdGE7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBoZC5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgICAgIGlmICgoaGRbaV1bMV0gIT0gbnVsbCAmJiBoZFtpXVsxXSA+IGJhbmRzLl9tYXgpIHx8IGJhbmRzLl9tYXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgYmFuZHMuX21heCA9IGhkW2ldWzFdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGQubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICBpZiAoKGxkW2ldWzFdICE9IG51bGwgJiYgbGRbaV1bMV0gPCBiYW5kcy5fbWluKSB8fCBiYW5kcy5fbWluID09IG51bGwpIHsKICAgICAgICAgICAgICAgIGJhbmRzLl9taW4gPSBsZFtpXVsxXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gb25lIGxhc3QgY2hlY2sgZm9yIHByb3BlciBkYXRhCiAgICAgICAgLy8gdGhlc2UgZG9uJ3QgYXBwbHkgYW55IG1vcmUgc2luY2UgYWxsb3dpbmcgYXJiaXRyYXJ5IHgseSB2YWx1ZXMKICAgICAgICAvLyBpZiAoYmFuZHMuaGlEYXRhLmxlbmd0aCAhPSBiYW5kcy5sb3dEYXRhLmxlbmd0aCkgewogICAgICAgIC8vICAgICBiYW5kcy5zaG93ID0gZmFsc2U7CiAgICAgICAgLy8gfQoKICAgICAgICAvLyBpZiAoYmFuZHMuaGlEYXRhLmxlbmd0aCAhPSB0aGlzLmRhdGEubGVuZ3RoKSB7CiAgICAgICAgLy8gICAgIGJhbmRzLnNob3cgPSBmYWxzZTsKICAgICAgICAvLyB9CgogICAgICAgIGlmIChiYW5kcy5maWxsQ29sb3IgPT09IG51bGwpIHsKICAgICAgICAgICAgdmFyIGMgPSAkLmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHMoYmFuZHMuY29sb3IpOwogICAgICAgICAgICAvLyBub3cgYWRqdXN0IGFscGhhIHRvIGRpZmZlcmVudGlhdGUgZmlsbAogICAgICAgICAgICBjWzNdID0gY1szXSAqIDAuNTsKICAgICAgICAgICAgYmFuZHMuZmlsbENvbG9yID0gJ3JnYmEoJyArIGNbMF0gKycsICcrIGNbMV0gKycsICcrIGNbMl0gKycsICcrIGNbM10gKyAnKSc7CiAgICAgICAgfQogICAgfTsKCiAgICBmdW5jdGlvbiBnZXRTdGVwcyAoZCwgZikgewogICAgICAgIHJldHVybiAoMy40MTgyMDU0K2YpICogTWF0aC5wb3coZCwgLTAuMzUzNDk5Mik7CiAgICB9CgogICAgZnVuY3Rpb24gY29tcHV0ZVN0ZXBzIChkMSwgZDIpIHsKICAgICAgICB2YXIgcyA9IE1hdGguc3FydChNYXRoLnBvdygoZDJbMF0tIGQxWzBdKSwgMikgKyBNYXRoLnBvdyAoKGQyWzFdIC0gZDFbMV0pLCAyKSk7CiAgICAgICAgcmV0dXJuIDUuNzY0OCAqIE1hdGgubG9nKHMpICsgNy40NDU2OwogICAgfQoKICAgIGZ1bmN0aW9uIHRhbmggKHgpIHsKICAgICAgICB2YXIgYSA9IChNYXRoLmV4cCgyKngpIC0gMSkgLyAoTWF0aC5leHAoMip4KSArIDEpOwogICAgICAgIHJldHVybiBhOwogICAgfQoKICAgIC8vLy8vLy8vLy8KICAgIC8vIGNvbXB1dGVDb25zdHJhaW5lZFNtb290aGVkRGF0YQogICAgLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvbnN0cmFpbmVkIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uCiAgICAvLyBtZXRob2QgYXMgcHJlc2VudGVkIGluOgogICAgLy8KICAgIC8vIEtydWdlciwgQ0pDLCBDb25zdHJhaW5lZCBDdWJpYyBTcGluZSBJbnRlcnBvbGF0aW9uIGZvciBDaGVtaWNhbCBFbmdpbmVlcmluZyBBcHBsaWNhdGlvbnMKICAgIC8vIGh0dHA6Ly93d3cua29yZi5jby51ay9zcGxpbmUucGRmCiAgICAvLwogICAgLy8gVGhlIGltcGxlbWVudGF0aW9uIGJlbG93IGJvcnJvd3MgaGVhdmlseSBmcm9tIHRoZSBzYW1wbGUgVmlzdWFsIEJhc2ljCiAgICAvLyBpbXBsZW1lbnRhdGlvbiBieSBDSkMgS3J1Z2VyIGZvdW5kIGluIGh0dHA6Ly93d3cua29yZi5jby51ay9zcGxpbmUueGxzCiAgICAvLwogICAgLy8vLy8vLy8vCgogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2Ygc2VyaWVzCiAgICBmdW5jdGlvbiBjb21wdXRlQ29uc3RyYWluZWRTbW9vdGhlZERhdGEgKGdkKSB7CiAgICAgICAgdmFyIHNtb290aCA9IHRoaXMucmVuZGVyZXIuc21vb3RoOwogICAgICAgIHZhciBkaW0gPSB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpOwogICAgICAgIHZhciB4cCA9IHRoaXMuX3hheGlzLnNlcmllc19wMnU7CiAgICAgICAgdmFyIHlwID0gdGhpcy5feWF4aXMuc2VyaWVzX3AydTsgCiAgICAgICAgdmFyIHN0ZXBzID1udWxsOwogICAgICAgIHZhciBfc3RlcHMgPSBudWxsOwogICAgICAgIHZhciBkaXN0ID0gZ2QubGVuZ3RoL2RpbTsKICAgICAgICB2YXIgX3Ntb290aGVkRGF0YSA9IFtdOwogICAgICAgIHZhciBfc21vb3RoZWRQbG90RGF0YSA9IFtdOwoKICAgICAgICBpZiAoIWlzTmFOKHBhcnNlRmxvYXQoc21vb3RoKSkpIHsKICAgICAgICAgICAgc3RlcHMgPSBwYXJzZUZsb2F0KHNtb290aCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBzdGVwcyA9IGdldFN0ZXBzKGRpc3QsIDAuNSk7CiAgICAgICAgfQoKICAgICAgICB2YXIgeXkgPSBbXTsKICAgICAgICB2YXIgeHggPSBbXTsKCiAgICAgICAgZm9yICh2YXIgaT0wLCBsID0gZ2QubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICB5eS5wdXNoKGdkW2ldWzFdKTsKICAgICAgICAgICAgeHgucHVzaChnZFtpXVswXSk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBkeHgoeDEsIHgwKSB7CiAgICAgICAgICAgIGlmICh4MSAtIHgwID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnBvdygxMCwxMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4geDEgLSB4MDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIEEsIEIsIEMsIEQ7CiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGVhY2ggbGluZSBzZWdtZW50LiAgSGF2ZSAjIHBvaW50cyAtIDEgbGluZSBzZWdtZW50cy4gIE5tYmVyIHNlZ21lbnRzIHN0YXJ0aW5nIGF0IDEuCiAgICAgICAgdmFyIG5tYXggPSBnZC5sZW5ndGggLSAxOwogICAgICAgIGZvciAodmFyIG51bSA9IDEsIGdkbCA9IGdkLmxlbmd0aDsgbnVtPGdkbDsgbnVtKyspIHsKICAgICAgICAgICAgdmFyIGd4eCA9IFtdOwogICAgICAgICAgICB2YXIgZ2d4eCA9IFtdOwogICAgICAgICAgICAvLyBwb2ludCBhdCBlYWNoIGVuZCBvZiBzZWdtZW50LgogICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDI7IGorKykgewogICAgICAgICAgICAgICAgdmFyIGkgPSBudW0gLSAxICsgajsgLy8gcG9pbnQgbnVtYmVyLCAwIHRvICMgcG9pbnRzLgoKICAgICAgICAgICAgICAgIGlmIChpID09IDAgfHwgaSA9PSBubWF4KSB7CiAgICAgICAgICAgICAgICAgICAgZ3h4W2pdID0gTWF0aC5wb3coMTAsIDEwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHl5W2krMV0gLSB5eVtpXSA9PSAwIHx8IHl5W2ldIC0geXlbaS0xXSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgZ3h4W2pdID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoeHhbaSsxXSAtIHh4W2ldKSAvICh5eVtpKzFdIC0geXlbaV0pICsgKHh4W2ldIC0geHhbaS0xXSkgLyAoeXlbaV0gLSB5eVtpLTFdKSkgPT0gMCApIHsKICAgICAgICAgICAgICAgICAgICBneHhbal0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoICh5eVtpKzFdIC0geXlbaV0pICogKHl5W2ldIC0geXlbaS0xXSkgPCAwICkgewogICAgICAgICAgICAgICAgICAgIGd4eFtqXSA9IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZ3h4W2pdID0gMiAvIChkeHgoeHhbaSArIDFdLCB4eFtpXSkgLyAoeXlbaSArIDFdIC0geXlbaV0pICsgZHh4KHh4W2ldLCB4eFtpIC0gMV0pIC8gKHl5W2ldIC0geXlbaSAtIDFdKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFJlc2V0IGZpcnN0IGRlcml2YXRpdmUgKHNsb3BlKSBhdCBmaXJzdCBhbmQgbGFzdCBwb2ludAogICAgICAgICAgICBpZiAobnVtID09IDEpIHsKICAgICAgICAgICAgICAgIC8vIEZpcnN0IHBvaW50IGhhcyAwIDJuZCBkZXJpdmF0aXZlCiAgICAgICAgICAgICAgICBneHhbMF0gPSAzIC8gMiAqICh5eVsxXSAtIHl5WzBdKSAvIGR4eCh4eFsxXSwgeHhbMF0pIC0gZ3h4WzFdIC8gMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChudW0gPT0gbm1heCkgewogICAgICAgICAgICAgICAgLy8gTGFzdCBwb2ludCBoYXMgMCAybmQgZGVyaXZhdGl2ZQogICAgICAgICAgICAgICAgZ3h4WzFdID0gMyAvIDIgKiAoeXlbbm1heF0gLSB5eVtubWF4IC0gMV0pIC8gZHh4KHh4W25tYXhdLCB4eFtubWF4IC0gMV0pIC0gZ3h4WzBdIC8gMjsKICAgICAgICAgICAgfSAgIAoKICAgICAgICAgICAgLy8gQ2FsYyBzZWNvbmQgZGVyaXZhdGl2ZSBhdCBwb2ludHMKICAgICAgICAgICAgZ2d4eFswXSA9IC0yICogKGd4eFsxXSArIDIgKiBneHhbMF0pIC8gZHh4KHh4W251bV0sIHh4W251bSAtIDFdKSArIDYgKiAoeXlbbnVtXSAtIHl5W251bSAtIDFdKSAvIE1hdGgucG93KGR4eCh4eFtudW1dLCB4eFtudW0gLSAxXSksIDIpOwogICAgICAgICAgICBnZ3h4WzFdID0gMiAqICgyICogZ3h4WzFdICsgZ3h4WzBdKSAvIGR4eCh4eFtudW1dLCB4eFtudW0gLSAxXSkgLSA2ICogKHl5W251bV0gLSB5eVtudW0gLSAxXSkgLyBNYXRoLnBvdyhkeHgoeHhbbnVtXSwgeHhbbnVtIC0gMV0pLCAyKTsKCiAgICAgICAgICAgIC8vIENhbGMgY29uc3RhbnRzIGZvciBjdWJpYyBpbnRlcnBvbGF0aW9uCiAgICAgICAgICAgIEQgPSAxIC8gNiAqIChnZ3h4WzFdIC0gZ2d4eFswXSkgLyBkeHgoeHhbbnVtXSwgeHhbbnVtIC0gMV0pOwogICAgICAgICAgICBDID0gMSAvIDIgKiAoeHhbbnVtXSAqIGdneHhbMF0gLSB4eFtudW0gLSAxXSAqIGdneHhbMV0pIC8gZHh4KHh4W251bV0sIHh4W251bSAtIDFdKTsKICAgICAgICAgICAgQiA9ICh5eVtudW1dIC0geXlbbnVtIC0gMV0gLSBDICogKE1hdGgucG93KHh4W251bV0sIDIpIC0gTWF0aC5wb3coeHhbbnVtIC0gMV0sIDIpKSAtIEQgKiAoTWF0aC5wb3coeHhbbnVtXSwgMykgLSBNYXRoLnBvdyh4eFtudW0gLSAxXSwgMykpKSAvIGR4eCh4eFtudW1dLCB4eFtudW0gLSAxXSk7CiAgICAgICAgICAgIEEgPSB5eVtudW0gLSAxXSAtIEIgKiB4eFtudW0gLSAxXSAtIEMgKiBNYXRoLnBvdyh4eFtudW0gLSAxXSwgMikgLSBEICogTWF0aC5wb3coeHhbbnVtIC0gMV0sIDMpOwoKICAgICAgICAgICAgdmFyIGluY3JlbWVudCA9ICh4eFtudW1dIC0geHhbbnVtIC0gMV0pIC8gc3RlcHM7CiAgICAgICAgICAgIHZhciB0ZW1wLCB0ZW1weDsKCiAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBsID0gc3RlcHM7IGogPCBsOyBqKyspIHsKICAgICAgICAgICAgICAgIHRlbXAgPSBbXTsKICAgICAgICAgICAgICAgIHRlbXB4ID0geHhbbnVtIC0gMV0gKyBqICogaW5jcmVtZW50OwogICAgICAgICAgICAgICAgdGVtcC5wdXNoKHRlbXB4KTsKICAgICAgICAgICAgICAgIHRlbXAucHVzaChBICsgQiAqIHRlbXB4ICsgQyAqIE1hdGgucG93KHRlbXB4LCAyKSArIEQgKiBNYXRoLnBvdyh0ZW1weCwgMykpOwogICAgICAgICAgICAgICAgX3Ntb290aGVkRGF0YS5wdXNoKHRlbXApOwogICAgICAgICAgICAgICAgX3Ntb290aGVkUGxvdERhdGEucHVzaChbeHAodGVtcFswXSksIHlwKHRlbXBbMV0pXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIF9zbW9vdGhlZERhdGEucHVzaChnZFtpXSk7CiAgICAgICAgX3Ntb290aGVkUGxvdERhdGEucHVzaChbeHAoZ2RbaV1bMF0pLCB5cChnZFtpXVsxXSldKTsKCiAgICAgICAgcmV0dXJuIFtfc21vb3RoZWREYXRhLCBfc21vb3RoZWRQbG90RGF0YV07CiAgICB9CgogICAgLy8vLy8vLwogICAgLy8gY29tcHV0ZUhlcm1pdGVTbW9vdGhlZERhdGEKICAgIC8vIEEgaGVybWl0ZSBzcGxpbmUgc21vb3RoaW5nIG9mIHRoZSBwbG90IGRhdGEuCiAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGRlcml2ZWQgZnJvbSB0aGUgb25lIHBvc3RlZAogICAgLy8gYnkga3J5cGluIG9uIHRoZSBqcXBsb3QtdXNlcnMgbWFpbGluZyBsaXN0OgogICAgLy8KICAgIC8vIGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9qcXBsb3QtdXNlcnMvYnJvd3NlX3RocmVhZC90aHJlYWQvNzQ4YmU2YTQ0NTcyM2NlYT9wbGk9MQogICAgLy8KICAgIC8vIHdpdGggYSBibG9nIHBvc3Q6CiAgICAvLwogICAgLy8gaHR0cDovL2Jsb2cuc3RhdHNjb2xsZWN0b3IuY29tL2EtcGx1Z2luLXJlbmRlcmVyLWZvci1qcXBsb3QtdG8tZHJhdy1hLWhlcm1pdGUtc3BsaW5lLwogICAgLy8KICAgIC8vIGFuZCBkb3dubG9hZCBvZiB0aGUgb3JpZ2luYWwgcGx1Z2luOgogICAgLy8KICAgIC8vIGh0dHA6Ly9ibG9nLnN0YXRzY29sbGVjdG9yLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAxMC8wMi9qcXBsb3QuaGVybWl0ZVNwbGluZVJlbmRlcmVyLmpzCiAgICAvLy8vLy8vLy8vCgogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2Ygc2VyaWVzCiAgICBmdW5jdGlvbiBjb21wdXRlSGVybWl0ZVNtb290aGVkRGF0YSAoZ2QpIHsKICAgICAgICB2YXIgc21vb3RoID0gdGhpcy5yZW5kZXJlci5zbW9vdGg7CiAgICAgICAgdmFyIHRlbnNpb24gPSB0aGlzLnJlbmRlcmVyLnRlbnNpb247CiAgICAgICAgdmFyIGRpbSA9IHRoaXMuY2FudmFzLmdldFdpZHRoKCk7CiAgICAgICAgdmFyIHhwID0gdGhpcy5feGF4aXMuc2VyaWVzX3AydTsKICAgICAgICB2YXIgeXAgPSB0aGlzLl95YXhpcy5zZXJpZXNfcDJ1OyAKICAgICAgICB2YXIgc3RlcHMgPW51bGw7CiAgICAgICAgdmFyIF9zdGVwcyA9IG51bGw7CiAgICAgICAgdmFyIGEgPSBudWxsOwogICAgICAgIHZhciBhMSA9IG51bGw7CiAgICAgICAgdmFyIGEyID0gbnVsbDsKICAgICAgICB2YXIgc2xvcGUgPSBudWxsOwogICAgICAgIHZhciBzbG9wZTIgPSBudWxsOwogICAgICAgIHZhciB0ZW1wID0gbnVsbDsKICAgICAgICB2YXIgdCwgcywgaDEsIGgyLCBoMywgaDQ7CiAgICAgICAgdmFyIFRpWCwgVGlZLCBUaTFYLCBUaTFZOwogICAgICAgIHZhciBwWCwgcFksIHA7CiAgICAgICAgdmFyIHNkID0gW107CiAgICAgICAgdmFyIHNwZCA9IFtdOwogICAgICAgIHZhciBkaXN0ID0gZ2QubGVuZ3RoL2RpbTsKICAgICAgICB2YXIgbWluLCBtYXgsIHN0cmV0Y2gsIHNjYWxlLCBzaGlmdDsKICAgICAgICB2YXIgX3Ntb290aGVkRGF0YSA9IFtdOwogICAgICAgIHZhciBfc21vb3RoZWRQbG90RGF0YSA9IFtdOwogICAgICAgIGlmICghaXNOYU4ocGFyc2VGbG9hdChzbW9vdGgpKSkgewogICAgICAgICAgICBzdGVwcyA9IHBhcnNlRmxvYXQoc21vb3RoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHN0ZXBzID0gZ2V0U3RlcHMoZGlzdCwgMC41KTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc05hTihwYXJzZUZsb2F0KHRlbnNpb24pKSkgewogICAgICAgICAgICB0ZW5zaW9uID0gcGFyc2VGbG9hdCh0ZW5zaW9uKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGk9MCwgbCA9IGdkLmxlbmd0aC0xOyBpIDwgbDsgaSsrKSB7CgogICAgICAgICAgICBpZiAodGVuc2lvbiA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgc2xvcGUgPSBNYXRoLmFicygoZ2RbaSsxXVsxXSAtIGdkW2ldWzFdKSAvIChnZFtpKzFdWzBdIC0gZ2RbaV1bMF0pKTsKCiAgICAgICAgICAgICAgICBtaW4gPSAwLjM7CiAgICAgICAgICAgICAgICBtYXggPSAwLjY7CiAgICAgICAgICAgICAgICBzdHJldGNoID0gKG1heCAtIG1pbikvMi4wOwogICAgICAgICAgICAgICAgc2NhbGUgPSAyLjU7CiAgICAgICAgICAgICAgICBzaGlmdCA9IC0xLjQ7CgogICAgICAgICAgICAgICAgdGVtcCA9IHNsb3BlL3NjYWxlICsgc2hpZnQ7CgogICAgICAgICAgICAgICAgYTEgPSBzdHJldGNoICogdGFuaCh0ZW1wKSAtIHN0cmV0Y2ggKiB0YW5oKHNoaWZ0KSArIG1pbjsKCiAgICAgICAgICAgICAgICAvLyBpZiBoYXZlIGJvdGggbGVmdCBhbmQgcmlnaHQgbGluZSBzZWdtZW50cywgd2lsbCB1c2UgIG1pbmltdW0gdGVuc2lvbi4gCiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHsKICAgICAgICAgICAgICAgICAgICBzbG9wZTIgPSBNYXRoLmFicygoZ2RbaV1bMV0gLSBnZFtpLTFdWzFdKSAvIChnZFtpXVswXSAtIGdkW2ktMV1bMF0pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRlbXAgPSBzbG9wZTIvc2NhbGUgKyBzaGlmdDsKCiAgICAgICAgICAgICAgICBhMiA9IHN0cmV0Y2ggKiB0YW5oKHRlbXApIC0gc3RyZXRjaCAqIHRhbmgoc2hpZnQpICsgbWluOwoKICAgICAgICAgICAgICAgIGEgPSAoYTEgKyBhMikvMi4wOwoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGEgPSB0ZW5zaW9uOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAodD0wOyB0IDwgc3RlcHM7IHQrKykgewogICAgICAgICAgICAgICAgcyA9IHQgLyBzdGVwczsKICAgICAgICAgICAgICAgIGgxID0gKDEgKyAyKnMpKk1hdGgucG93KCgxLXMpLDIpOwogICAgICAgICAgICAgICAgaDIgPSBzKk1hdGgucG93KCgxLXMpLDIpOwogICAgICAgICAgICAgICAgaDMgPSBNYXRoLnBvdyhzLDIpKigzLTIqcyk7CiAgICAgICAgICAgICAgICBoNCA9IE1hdGgucG93KHMsMikqKHMtMSk7ICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKGdkW2ktMV0pIHsgIAogICAgICAgICAgICAgICAgICAgIFRpWCA9IGEgKiAoZ2RbaSsxXVswXSAtIGdkW2ktMV1bMF0pOyAKICAgICAgICAgICAgICAgICAgICBUaVkgPSBhICogKGdkW2krMV1bMV0gLSBnZFtpLTFdWzFdKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgVGlYID0gYSAqIChnZFtpKzFdWzBdIC0gZ2RbaV1bMF0pOyAKICAgICAgICAgICAgICAgICAgICBUaVkgPSBhICogKGdkW2krMV1bMV0gLSBnZFtpXVsxXSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGdkW2krMl0pIHsgIAogICAgICAgICAgICAgICAgICAgIFRpMVggPSBhICogKGdkW2krMl1bMF0gLSBnZFtpXVswXSk7IAogICAgICAgICAgICAgICAgICAgIFRpMVkgPSBhICogKGdkW2krMl1bMV0gLSBnZFtpXVsxXSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIFRpMVggPSBhICogKGdkW2krMV1bMF0gLSBnZFtpXVswXSk7IAogICAgICAgICAgICAgICAgICAgIFRpMVkgPSBhICogKGdkW2krMV1bMV0gLSBnZFtpXVsxXSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHBYID0gaDEqZ2RbaV1bMF0gKyBoMypnZFtpKzFdWzBdICsgaDIqVGlYICsgaDQqVGkxWDsKICAgICAgICAgICAgICAgIHBZID0gaDEqZ2RbaV1bMV0gKyBoMypnZFtpKzFdWzFdICsgaDIqVGlZICsgaDQqVGkxWTsKICAgICAgICAgICAgICAgIHAgPSBbcFgsIHBZXTsKCiAgICAgICAgICAgICAgICBfc21vb3RoZWREYXRhLnB1c2gocCk7CiAgICAgICAgICAgICAgICBfc21vb3RoZWRQbG90RGF0YS5wdXNoKFt4cChwWCksIHlwKHBZKV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9zbW9vdGhlZERhdGEucHVzaChnZFtsXSk7CiAgICAgICAgX3Ntb290aGVkUGxvdERhdGEucHVzaChbeHAoZ2RbbF1bMF0pLCB5cChnZFtsXVsxXSldKTsKCiAgICAgICAgcmV0dXJuIFtfc21vb3RoZWREYXRhLCBfc21vb3RoZWRQbG90RGF0YV07CiAgICB9CiAgICAKICAgIC8vIHNldEdyaWREYXRhCiAgICAvLyBjb252ZXJ0cyB0aGUgdXNlciBkYXRhIHZhbHVlcyB0byBncmlkIGNvb3JkaW5hdGVzIGFuZCBzdG9yZXMgdGhlbQogICAgLy8gaW4gdGhlIGdyaWREYXRhIGFycmF5LgogICAgLy8gQ2FsbGVkIHdpdGggc2NvcGUgb2YgYSBzZXJpZXMuCiAgICAkLmpxcGxvdC5MaW5lUmVuZGVyZXIucHJvdG90eXBlLnNldEdyaWREYXRhID0gZnVuY3Rpb24ocGxvdCkgewogICAgICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBncmlkIGRhdGEKICAgICAgICB2YXIgeHAgPSB0aGlzLl94YXhpcy5zZXJpZXNfdTJwOwogICAgICAgIHZhciB5cCA9IHRoaXMuX3lheGlzLnNlcmllc191MnA7CiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9wbG90RGF0YTsKICAgICAgICB2YXIgcGRhdGEgPSB0aGlzLl9wcmV2UGxvdERhdGE7CiAgICAgICAgdGhpcy5ncmlkRGF0YSA9IFtdOwogICAgICAgIHRoaXMuX3ByZXZHcmlkRGF0YSA9IFtdOwogICAgICAgIHRoaXMucmVuZGVyZXIuX3Ntb290aGVkRGF0YSA9IFtdOwogICAgICAgIHRoaXMucmVuZGVyZXIuX3Ntb290aGVkUGxvdERhdGEgPSBbXTsKICAgICAgICB0aGlzLnJlbmRlcmVyLl9oaUJhbmRHcmlkRGF0YSA9IFtdOwogICAgICAgIHRoaXMucmVuZGVyZXIuX2xvd0JhbmRHcmlkRGF0YSA9IFtdOwogICAgICAgIHRoaXMucmVuZGVyZXIuX2hpQmFuZFNtb290aGVkRGF0YSA9IFtdOwogICAgICAgIHRoaXMucmVuZGVyZXIuX2xvd0JhbmRTbW9vdGhlZERhdGEgPSBbXTsKICAgICAgICB2YXIgYmFuZHMgPSB0aGlzLnJlbmRlcmVyLmJhbmRzOwogICAgICAgIHZhciBoYXNOdWxsID0gZmFsc2U7CiAgICAgICAgZm9yICh2YXIgaT0wLCBsPWRhdGEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIC8vIGlmIG5vdCBhIGxpbmUgc2VyaWVzIG9yIGlmIG5vIG51bGxzIGluIGRhdGEsIHB1c2ggdGhlIGNvbnZlcnRlZCBwb2ludCBvbnRvIHRoZSBhcnJheS4KICAgICAgICAgICAgaWYgKGRhdGFbaV1bMF0gIT0gbnVsbCAmJiBkYXRhW2ldWzFdICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGEucHVzaChbeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVtpXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIGRhdGFbaV1bMV0pXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gZWxzZSBpZiB0aGVyZSBpcyBhIG51bGwsIHByZXNlcnZlIGl0LgogICAgICAgICAgICBlbHNlIGlmIChkYXRhW2ldWzBdID09IG51bGwpIHsKICAgICAgICAgICAgICAgIGhhc051bGwgPSB0cnVlOwogICAgICAgICAgICAgICAgdGhpcy5ncmlkRGF0YS5wdXNoKFtudWxsLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhW2ldWzFdKV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFbaV1bMV0gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgaGFzTnVsbCA9IHRydWU7CiAgICAgICAgICAgICAgICB0aGlzLmdyaWREYXRhLnB1c2goW3hwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbaV1bMF0pLCBudWxsXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gaWYgbm90IGEgbGluZSBzZXJpZXMgb3IgaWYgbm8gbnVsbHMgaW4gZGF0YSwgcHVzaCB0aGUgY29udmVydGVkIHBvaW50IG9udG8gdGhlIGFycmF5LgogICAgICAgICAgICBpZiAocGRhdGFbaV0gIT0gbnVsbCAmJiBwZGF0YVtpXVswXSAhPSBudWxsICYmIHBkYXRhW2ldWzFdICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZHcmlkRGF0YS5wdXNoKFt4cC5jYWxsKHRoaXMuX3hheGlzLCBwZGF0YVtpXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIHBkYXRhW2ldWzFdKV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIGVsc2UgaWYgdGhlcmUgaXMgYSBudWxsLCBwcmVzZXJ2ZSBpdC4KICAgICAgICAgICAgZWxzZSBpZiAocGRhdGFbaV0gIT0gbnVsbCAmJiBwZGF0YVtpXVswXSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9wcmV2R3JpZERhdGEucHVzaChbbnVsbCwgeXAuY2FsbCh0aGlzLl95YXhpcywgcGRhdGFbaV1bMV0pXSk7CiAgICAgICAgICAgIH0gIAogICAgICAgICAgICBlbHNlIGlmIChwZGF0YVtpXSAhPSBudWxsICYmIHBkYXRhW2ldWzBdICE9IG51bGwgJiYgcGRhdGFbaV1bMV0gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhpcy5fcHJldkdyaWREYXRhLnB1c2goW3hwLmNhbGwodGhpcy5feGF4aXMsIHBkYXRhW2ldWzBdKSwgbnVsbF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBkb24ndCBkbyBzbW9vdGhpbmcgb3IgYmFuZHMgb24gYnJva2VuIGxpbmVzLgogICAgICAgIGlmIChoYXNOdWxsKSB7CiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc21vb3RoID0gZmFsc2U7CiAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSAnbGluZScpIHsKICAgICAgICAgICAgICAgIGJhbmRzLnNob3cgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09ICdsaW5lJyAmJiBiYW5kcy5zaG93KSB7CiAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbD1iYW5kcy5oaURhdGEubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5faGlCYW5kR3JpZERhdGEucHVzaChbeHAuY2FsbCh0aGlzLl94YXhpcywgYmFuZHMuaGlEYXRhW2ldWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgYmFuZHMuaGlEYXRhW2ldWzFdKV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbD1iYW5kcy5sb3dEYXRhLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuX2xvd0JhbmRHcmlkRGF0YS5wdXNoKFt4cC5jYWxsKHRoaXMuX3hheGlzLCBiYW5kcy5sb3dEYXRhW2ldWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgYmFuZHMubG93RGF0YVtpXVsxXSldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gY2FsY3VsYXRlIHNtb290aGVkIGRhdGEgaWYgZW5vdWdoIHBvaW50cyBhbmQgbm8gbnVsbHMKICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gJ2xpbmUnICYmIHRoaXMucmVuZGVyZXIuc21vb3RoICYmIHRoaXMuZ3JpZERhdGEubGVuZ3RoID4gMikgewogICAgICAgICAgICB2YXIgcmV0OwogICAgICAgICAgICBpZiAodGhpcy5yZW5kZXJlci5jb25zdHJhaW5TbW9vdGhpbmcpIHsKICAgICAgICAgICAgICAgIHJldCA9IGNvbXB1dGVDb25zdHJhaW5lZFNtb290aGVkRGF0YS5jYWxsKHRoaXMsIHRoaXMuZ3JpZERhdGEpOwogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5fc21vb3RoZWREYXRhID0gcmV0WzBdOwogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5fc21vb3RoZWRQbG90RGF0YSA9IHJldFsxXTsKCiAgICAgICAgICAgICAgICBpZiAoYmFuZHMuc2hvdykgewogICAgICAgICAgICAgICAgICAgIHJldCA9IGNvbXB1dGVDb25zdHJhaW5lZFNtb290aGVkRGF0YS5jYWxsKHRoaXMsIHRoaXMucmVuZGVyZXIuX2hpQmFuZEdyaWREYXRhKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLl9oaUJhbmRTbW9vdGhlZERhdGEgPSByZXRbMF07CiAgICAgICAgICAgICAgICAgICAgcmV0ID0gY29tcHV0ZUNvbnN0cmFpbmVkU21vb3RoZWREYXRhLmNhbGwodGhpcywgdGhpcy5yZW5kZXJlci5fbG93QmFuZEdyaWREYXRhKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLl9sb3dCYW5kU21vb3RoZWREYXRhID0gcmV0WzBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldCA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXQgPSBjb21wdXRlSGVybWl0ZVNtb290aGVkRGF0YS5jYWxsKHRoaXMsIHRoaXMuZ3JpZERhdGEpOwogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5fc21vb3RoZWREYXRhID0gcmV0WzBdOwogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5fc21vb3RoZWRQbG90RGF0YSA9IHJldFsxXTsKCiAgICAgICAgICAgICAgICBpZiAoYmFuZHMuc2hvdykgewogICAgICAgICAgICAgICAgICAgIHJldCA9IGNvbXB1dGVIZXJtaXRlU21vb3RoZWREYXRhLmNhbGwodGhpcywgdGhpcy5yZW5kZXJlci5faGlCYW5kR3JpZERhdGEpOwogICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuX2hpQmFuZFNtb290aGVkRGF0YSA9IHJldFswXTsKICAgICAgICAgICAgICAgICAgICByZXQgPSBjb21wdXRlSGVybWl0ZVNtb290aGVkRGF0YS5jYWxsKHRoaXMsIHRoaXMucmVuZGVyZXIuX2xvd0JhbmRHcmlkRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5fbG93QmFuZFNtb290aGVkRGF0YSA9IHJldFswXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXQgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgLy8gbWFrZUdyaWREYXRhCiAgICAvLyBjb252ZXJ0cyBhbnkgYXJiaXRyYXJ5IGRhdGEgdmFsdWVzIHRvIGdyaWQgY29vcmRpbmF0ZXMgYW5kCiAgICAvLyByZXR1cm5zIHRoZW0uICBUaGlzIG1ldGhvZCBleGlzdHMgc28gdGhhdCBwbHVnaW5zIGNhbiB1c2UgYSBzZXJpZXMnCiAgICAvLyBsaW5lcmVuZGVyZXIgdG8gZ2VuZXJhdGUgZ3JpZCBkYXRhIHBvaW50cyB3aXRob3V0IG92ZXJ3cml0aW5nIHRoZQogICAgLy8gZ3JpZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcmllcy4KICAgIC8vIENhbGxlZCB3aXRoIHNjb3BlIG9mIGEgc2VyaWVzLgogICAgJC5qcXBsb3QuTGluZVJlbmRlcmVyLnByb3RvdHlwZS5tYWtlR3JpZERhdGEgPSBmdW5jdGlvbihkYXRhLCBwbG90KSB7CiAgICAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGdyaWQgZGF0YQogICAgICAgIHZhciB4cCA9IHRoaXMuX3hheGlzLnNlcmllc191MnA7CiAgICAgICAgdmFyIHlwID0gdGhpcy5feWF4aXMuc2VyaWVzX3UycDsKICAgICAgICB2YXIgZ2QgPSBbXTsKICAgICAgICB2YXIgcGdkID0gW107CiAgICAgICAgdGhpcy5yZW5kZXJlci5fc21vb3RoZWREYXRhID0gW107CiAgICAgICAgdGhpcy5yZW5kZXJlci5fc21vb3RoZWRQbG90RGF0YSA9IFtdOwogICAgICAgIHRoaXMucmVuZGVyZXIuX2hpQmFuZEdyaWREYXRhID0gW107CiAgICAgICAgdGhpcy5yZW5kZXJlci5fbG93QmFuZEdyaWREYXRhID0gW107CiAgICAgICAgdGhpcy5yZW5kZXJlci5faGlCYW5kU21vb3RoZWREYXRhID0gW107CiAgICAgICAgdGhpcy5yZW5kZXJlci5fbG93QmFuZFNtb290aGVkRGF0YSA9IFtdOwogICAgICAgIHZhciBiYW5kcyA9IHRoaXMucmVuZGVyZXIuYmFuZHM7CiAgICAgICAgdmFyIGhhc051bGwgPSBmYWxzZTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8ZGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAvLyBpZiBub3QgYSBsaW5lIHNlcmllcyBvciBpZiBubyBudWxscyBpbiBkYXRhLCBwdXNoIHRoZSBjb252ZXJ0ZWQgcG9pbnQgb250byB0aGUgYXJyYXkuCiAgICAgICAgICAgIGlmIChkYXRhW2ldWzBdICE9IG51bGwgJiYgZGF0YVtpXVsxXSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBnZC5wdXNoKFt4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhW2ldWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVtpXVsxXSldKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBlbHNlIGlmIHRoZXJlIGlzIGEgbnVsbCwgcHJlc2VydmUgaXQuCiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFbaV1bMF0gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgaGFzTnVsbCA9IHRydWU7CiAgICAgICAgICAgICAgICBnZC5wdXNoKFtudWxsLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhW2ldWzFdKV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFbaV1bMV0gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgaGFzTnVsbCA9IHRydWU7CiAgICAgICAgICAgICAgICBnZC5wdXNoKFt4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhW2ldWzBdKSwgbnVsbF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBkb24ndCBkbyBzbW9vdGhpbmcgb3IgYmFuZHMgb24gYnJva2VuIGxpbmVzLgogICAgICAgIGlmIChoYXNOdWxsKSB7CiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc21vb3RoID0gZmFsc2U7CiAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSAnbGluZScpIHsKICAgICAgICAgICAgICAgIGJhbmRzLnNob3cgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09ICdsaW5lJyAmJiBiYW5kcy5zaG93KSB7CiAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbD1iYW5kcy5oaURhdGEubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5faGlCYW5kR3JpZERhdGEucHVzaChbeHAuY2FsbCh0aGlzLl94YXhpcywgYmFuZHMuaGlEYXRhW2ldWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgYmFuZHMuaGlEYXRhW2ldWzFdKV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbD1iYW5kcy5sb3dEYXRhLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuX2xvd0JhbmRHcmlkRGF0YS5wdXNoKFt4cC5jYWxsKHRoaXMuX3hheGlzLCBiYW5kcy5sb3dEYXRhW2ldWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgYmFuZHMubG93RGF0YVtpXVsxXSldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09ICdsaW5lJyAmJiB0aGlzLnJlbmRlcmVyLnNtb290aCAmJiBnZC5sZW5ndGggPiAyKSB7CiAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLmNvbnN0cmFpblNtb290aGluZykgewogICAgICAgICAgICAgICAgcmV0ID0gY29tcHV0ZUNvbnN0cmFpbmVkU21vb3RoZWREYXRhLmNhbGwodGhpcywgZ2QpOwogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5fc21vb3RoZWREYXRhID0gcmV0WzBdOwogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5fc21vb3RoZWRQbG90RGF0YSA9IHJldFsxXTsKCiAgICAgICAgICAgICAgICBpZiAoYmFuZHMuc2hvdykgewogICAgICAgICAgICAgICAgICAgIHJldCA9IGNvbXB1dGVDb25zdHJhaW5lZFNtb290aGVkRGF0YS5jYWxsKHRoaXMsIHRoaXMucmVuZGVyZXIuX2hpQmFuZEdyaWREYXRhKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLl9oaUJhbmRTbW9vdGhlZERhdGEgPSByZXRbMF07CiAgICAgICAgICAgICAgICAgICAgcmV0ID0gY29tcHV0ZUNvbnN0cmFpbmVkU21vb3RoZWREYXRhLmNhbGwodGhpcywgdGhpcy5yZW5kZXJlci5fbG93QmFuZEdyaWREYXRhKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLl9sb3dCYW5kU21vb3RoZWREYXRhID0gcmV0WzBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldCA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXQgPSBjb21wdXRlSGVybWl0ZVNtb290aGVkRGF0YS5jYWxsKHRoaXMsIGdkKTsKICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuX3Ntb290aGVkRGF0YSA9IHJldFswXTsKICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuX3Ntb290aGVkUGxvdERhdGEgPSByZXRbMV07CgogICAgICAgICAgICAgICAgaWYgKGJhbmRzLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICByZXQgPSBjb21wdXRlSGVybWl0ZVNtb290aGVkRGF0YS5jYWxsKHRoaXMsIHRoaXMucmVuZGVyZXIuX2hpQmFuZEdyaWREYXRhKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLl9oaUJhbmRTbW9vdGhlZERhdGEgPSByZXRbMF07CiAgICAgICAgICAgICAgICAgICAgcmV0ID0gY29tcHV0ZUhlcm1pdGVTbW9vdGhlZERhdGEuY2FsbCh0aGlzLCB0aGlzLnJlbmRlcmVyLl9sb3dCYW5kR3JpZERhdGEpOwogICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuX2xvd0JhbmRTbW9vdGhlZERhdGEgPSByZXRbMF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0ID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZ2Q7CiAgICB9OwogICAgCgogICAgLy8gY2FsbGVkIHdpdGhpbiBzY29wZSBvZiBzZXJpZXMuCiAgICAkLmpxcGxvdC5MaW5lUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihjdHgsIGdkLCBvcHRpb25zLCBwbG90KSB7CiAgICAgICAgdmFyIGk7CiAgICAgICAgLy8gZ2V0IGEgY29weSBvZiB0aGUgb3B0aW9ucywgc28gd2UgZG9uJ3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBvYmplY3QuCiAgICAgICAgdmFyIG9wdHMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgb3B0aW9ucyk7CiAgICAgICAgdmFyIHNoYWRvdyA9IChvcHRzLnNoYWRvdyAhPSB1bmRlZmluZWQpID8gb3B0cy5zaGFkb3cgOiB0aGlzLnNoYWRvdzsKICAgICAgICB2YXIgc2hvd0xpbmUgPSAob3B0cy5zaG93TGluZSAhPSB1bmRlZmluZWQpID8gb3B0cy5zaG93TGluZSA6IHRoaXMuc2hvd0xpbmU7CiAgICAgICAgdmFyIGZpbGwgPSAob3B0cy5maWxsICE9IHVuZGVmaW5lZCkgPyBvcHRzLmZpbGwgOiB0aGlzLmZpbGw7CiAgICAgICAgdmFyIGZpbGxBbmRTdHJva2UgPSAob3B0cy5maWxsQW5kU3Ryb2tlICE9IHVuZGVmaW5lZCkgPyBvcHRzLmZpbGxBbmRTdHJva2UgOiB0aGlzLmZpbGxBbmRTdHJva2U7CiAgICAgICAgdmFyIHhtaW4sIHltaW4sIHhtYXgsIHltYXg7CiAgICAgICAgY3R4LnNhdmUoKTsKICAgICAgICBpZiAoZ2QubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChzaG93TGluZSkgewogICAgICAgICAgICAgICAgLy8gaWYgd2UgZmlsbCwgd2UnbGwgaGF2ZSB0byBhZGQgcG9pbnRzIHRvIGNsb3NlIHRoZSBjdXJ2ZS4KICAgICAgICAgICAgICAgIGlmIChmaWxsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsbFRvWmVybykgeyAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSB0byBicmVhayBsaW5lIHVwIGludG8gc2hhcGVzIGF0IGF4aXMgY3Jvc3NpbmdzCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZWdhdGl2ZUNvbG9yID0gdGhpcy5uZWdhdGl2ZUNvbG9yOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISB0aGlzLnVzZU5lZ2F0aXZlQ29sb3JzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZUNvbG9yID0gb3B0cy5maWxsU3R5bGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzbmVnYXRpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2ZzID0gb3B0cy5maWxsU3R5bGU7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHN0b2tpbmcgbGluZSBhcyB3ZWxsIGFzIGZpbGxpbmcsIGdldCBhIGNvcHkgb2YgbGluZSBkYXRhLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsbEFuZFN0cm9rZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZhc2dkID0gZ2Quc2xpY2UoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IHN0YWNrZWQsIGZpbGwgZG93biB0byBheGlzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID09IDAgfHwgIXRoaXMuX3N0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBnZCA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBkID0gKHRoaXMucmVuZGVyZXIuc21vb3RoKSA/IHRoaXMucmVuZGVyZXIuX3Ntb290aGVkUGxvdERhdGEgOiB0aGlzLl9wbG90RGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FyZWFQb2ludHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBweXplcm8gPSB0aGlzLl95YXhpcy5zZXJpZXNfdTJwKHRoaXMuZmlsbFRvVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB4emVybyA9IHRoaXMuX3hheGlzLnNlcmllc191MnAodGhpcy5maWxsVG9WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5jbG9zZVBhdGggPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maWxsQXhpcyA9PSAneScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wZ2QucHVzaChbZ2RbMF1bMF0sIHB5emVyb10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FyZWFQb2ludHMucHVzaChbZ2RbMF1bMF0sIHB5emVyb10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxnZC5sZW5ndGgtMTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBnZC5wdXNoKGdkW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXJlYVBvaW50cy5wdXNoKGdkW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG8gd2UgaGF2ZSBhbiBheGlzIGNyb3NzaW5nPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRbaV1bMV0gKiBwZFtpKzFdWzFdIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZFtpXVsxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc25lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpbGxTdHlsZSA9IG5lZ2F0aXZlQ29sb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc25lZ2F0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5maWxsU3R5bGUgPSBwb3NmczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhpbnRlcmNlcHQgPSBnZFtpXVswXSArIChnZFtpKzFdWzBdIC0gZ2RbaV1bMF0pICogKHB5emVyby1nZFtpXVsxXSkvKGdkW2krMV1bMV0gLSBnZFtpXVsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wZ2QucHVzaChbeGludGVyY2VwdCwgcHl6ZXJvXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcmVhUG9pbnRzLnB1c2goW3hpbnRlcmNlcHQsIHB5emVyb10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm93IGRyYXcgdGhpcyBzaGFwZSBhbmQgc2hhZG93LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoYWRvdykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIHRlbXBnZCwgb3B0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhjdHgsIHRlbXBnZCwgb3B0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3cgZW1wdHkgdGVtcCBhcnJheSBhbmQgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBnZCA9IFtbeGludGVyY2VwdCwgcHl6ZXJvXV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLl9hcmVhUG9pbnRzID0gW1t4aW50ZXJjZXB0LCBweXplcm9dXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRbZ2QubGVuZ3RoLTFdWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc25lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5maWxsU3R5bGUgPSBuZWdhdGl2ZUNvbG9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNuZWdhdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpbGxTdHlsZSA9IHBvc2ZzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wZ2QucHVzaChnZFtnZC5sZW5ndGgtMV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FyZWFQb2ludHMucHVzaChnZFtnZC5sZW5ndGgtMV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBnZC5wdXNoKFtnZFtnZC5sZW5ndGgtMV1bMF0sIHB5emVyb10pOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcmVhUG9pbnRzLnB1c2goW2dkW2dkLmxlbmd0aC0xXVswXSwgcHl6ZXJvXSk7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm93IGRyYXcgdGhlIGxhc3QgYXJlYS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCB0ZW1wZ2QsIG9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmRyYXcoY3R4LCB0ZW1wZ2QsIG9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhciBncmlkeW1pbiA9IHRoaXMuX3lheGlzLnNlcmllc191MnAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAvLyBJRSBkb2Vzbid0IHJldHVybiBuZXcgbGVuZ3RoIG9uIHVuc2hpZnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdkLnVuc2hpZnQoW2dkWzBdWzBdLCBncmlkeW1pbl0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVuID0gZ2QubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2QucHVzaChbZ2RbbGVuIC0gMV1bMF0sIGdyaWR5bWluXSk7ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHN0YWNrZWQsIGZpbGwgdG8gbGluZSBiZWxvdyAKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldiA9IHRoaXMuX3ByZXZHcmlkRGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGk9cHJldi5sZW5ndGg7IGk+MDsgaS0tKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2QucHVzaChwcmV2W2ktMV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX2FyZWFQb2ludHMucHVzaChwcmV2W2ktMV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoYWRvdykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIGdkLCBvcHRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FyZWFQb2ludHMgPSBnZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgZ2QsIG9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAgICAgICAgICAgICAgICAvLyBOb3QgZmlsbGVkIHRvIHplcm8KICAgICAgICAgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzdG9raW5nIGxpbmUgYXMgd2VsbCBhcyBmaWxsaW5nLCBnZXQgYSBjb3B5IG9mIGxpbmUgZGF0YS4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGxBbmRTdHJva2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYXNnZCA9IGdkLnNsaWNlKDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vdCBzdGFja2VkLCBmaWxsIGRvd24gdG8gYXhpcwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA9PSAwIHx8ICF0aGlzLl9zdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyIGdyaWR5bWluID0gdGhpcy5feWF4aXMuc2VyaWVzX3UycCh0aGlzLl95YXhpcy5taW4pIC0gdGhpcy5ncmlkQm9yZGVyV2lkdGggLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyaWR5bWluID0gY3R4LmNhbnZhcy5oZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBkb2Vzbid0IHJldHVybiBuZXcgbGVuZ3RoIG9uIHVuc2hpZnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkLnVuc2hpZnQoW2dkWzBdWzBdLCBncmlkeW1pbl0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IGdkLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkLnB1c2goW2dkW2xlbiAtIDFdWzBdLCBncmlkeW1pbl0pOyAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzdGFja2VkLCBmaWxsIHRvIGxpbmUgYmVsb3cgCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXYgPSB0aGlzLl9wcmV2R3JpZERhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpPXByZXYubGVuZ3RoOyBpPjA7IGktLSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkLnB1c2gocHJldltpLTFdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcmVhUG9pbnRzID0gZ2Q7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZG93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCBnZCwgb3B0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgZ2QsIG9wdHMpOyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZmlsbEFuZFN0cm9rZSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmFzb3B0cyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRzLCB7ZmlsbDpmYWxzZSwgY2xvc2VQYXRoOmZhbHNlfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgZmFzZ2QsIGZhc29wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAvLy8vLy8vLy8vCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgc29tZSB3YXkgdG8gZG8gc2hhZG93cyBuaWNlbHkKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHNoYWRvdykgewogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGN0eCwgZmFzZ2QsIGZhc29wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdyBkcmF3IHRoZSBtYXJrZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcmtlclJlbmRlcmVyLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLnNtb290aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhc2dkID0gdGhpcy5ncmlkRGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPGZhc2dkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrZXJSZW5kZXJlci5kcmF3KGZhc2dkW2ldWzBdLCBmYXNnZFtpXVsxXSwgY3R4LCBvcHRzLm1hcmtlck9wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLmJhbmRzLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJkYXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3B0cyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVuZGVyZXIuYmFuZHMuc2hvd0xpbmVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZGF0ID0gKHRoaXMucmVuZGVyZXIuc21vb3RoKSA/IHRoaXMucmVuZGVyZXIuX2hpQmFuZFNtb290aGVkRGF0YSA6IHRoaXMucmVuZGVyZXIuX2hpQmFuZEdyaWREYXRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmRyYXcoY3R4LCBiZGF0LCBvcHRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJkYXQgPSAodGhpcy5yZW5kZXJlci5zbW9vdGgpID8gdGhpcy5yZW5kZXJlci5fbG93QmFuZFNtb290aGVkRGF0YSA6IHRoaXMucmVuZGVyZXIuX2xvd0JhbmRHcmlkRGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgYmRhdCwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZW5kZXJlci5iYW5kcy5maWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZW5kZXJlci5zbW9vdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZGF0ID0gdGhpcy5yZW5kZXJlci5faGlCYW5kU21vb3RoZWREYXRhLmNvbmNhdCh0aGlzLnJlbmRlcmVyLl9sb3dCYW5kU21vb3RoZWREYXRhLnJldmVyc2UoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZGF0ID0gdGhpcy5yZW5kZXJlci5faGlCYW5kR3JpZERhdGEuY29uY2F0KHRoaXMucmVuZGVyZXIuX2xvd0JhbmRHcmlkRGF0YS5yZXZlcnNlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXJlYVBvaW50cyA9IGJkYXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3B0cy5jbG9zZVBhdGggPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9wdHMuZmlsbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3B0cy5maWxsU3R5bGUgPSB0aGlzLnJlbmRlcmVyLmJhbmRzLmZpbGxDb2xvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgYmRhdCwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZG93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIGdkLCBvcHRzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhjdHgsIGdkLCBvcHRzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIGJvdW5kaW5nIGJveAogICAgICAgICAgICB2YXIgeG1pbiA9IHhtYXggPSB5bWluID0geW1heCA9IG51bGw7CiAgICAgICAgICAgIGZvciAoaT0wOyBpPHRoaXMuX2FyZWFQb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBwID0gdGhpcy5fYXJlYVBvaW50c1tpXTsKICAgICAgICAgICAgICAgIGlmICh4bWluID4gcFswXSB8fCB4bWluID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB4bWluID0gcFswXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh5bWF4IDwgcFsxXSB8fCB5bWF4ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gcFsxXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh4bWF4IDwgcFswXSB8fCB4bWF4ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB4bWF4ID0gcFswXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh5bWluID4gcFsxXSB8fCB5bWluID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB5bWluID0gcFsxXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2xpbmUnICYmIHRoaXMucmVuZGVyZXIuYmFuZHMuc2hvdykgewogICAgICAgICAgICAgICAgeW1heCA9IHRoaXMuX3lheGlzLnNlcmllc191MnAodGhpcy5yZW5kZXJlci5iYW5kcy5fbWluKTsKICAgICAgICAgICAgICAgIHltaW4gPSB0aGlzLl95YXhpcy5zZXJpZXNfdTJwKHRoaXMucmVuZGVyZXIuYmFuZHMuX21heCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMuX2JvdW5kaW5nQm94ID0gW1t4bWluLCB5bWF4XSwgW3htYXgsIHltaW5dXTsKICAgICAgICAKICAgICAgICAgICAgLy8gbm93IGRyYXcgdGhlIG1hcmtlcnMKICAgICAgICAgICAgaWYgKHRoaXMubWFya2VyUmVuZGVyZXIuc2hvdyAmJiAhZmlsbCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMucmVuZGVyZXIuc21vb3RoKSB7CiAgICAgICAgICAgICAgICAgICAgZ2QgPSB0aGlzLmdyaWREYXRhOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8Z2QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZ2RbaV1bMF0gIT0gbnVsbCAmJiBnZFtpXVsxXSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFya2VyUmVuZGVyZXIuZHJhdyhnZFtpXVswXSwgZ2RbaV1bMV0sIGN0eCwgb3B0cy5tYXJrZXJPcHRpb25zKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgIH07ICAKICAgIAogICAgJC5qcXBsb3QuTGluZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3U2hhZG93ID0gZnVuY3Rpb24oY3R4LCBnZCwgb3B0aW9ucykgewogICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcCwgc2hhZG93cyBkcmF3biB3aXRoIGxpbmVzLgogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgcGxvdC4KICAgIC8vIG1ha2Ugc3VyZSB0byBub3QgbGVhdmUgYW55dGhpbmcgaGlnaGxpZ2h0ZWQuCiAgICBmdW5jdGlvbiBwb3N0SW5pdCh0YXJnZXQsIGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKHRoaXMuc2VyaWVzW2ldLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkxpbmVSZW5kZXJlcikgewogICAgICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbW91c2VvdmVyIGFuZCBtb3VzZWRvd24gYXQgc2FtZSB0aW1lLgogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VyaWVzW2ldLmhpZ2hsaWdodE1vdXNlT3ZlcikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzW2ldLmhpZ2hsaWdodE1vdXNlRG93biA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSAgCiAgICAKICAgIC8vIGNhbGxlZCB3aXRoaW4gY29udGV4dCBvZiBwbG90CiAgICAvLyBjcmVhdGUgYSBjYW52YXMgd2hpY2ggd2UgY2FuIGRyYXcgb24uCiAgICAvLyBpbnNlcnQgaXQgYmVmb3JlIHRoZSBldmVudENhbnZhcywgc28gZXZlbnRDYW52YXMgd2lsbCBzdGlsbCBjYXB0dXJlIGV2ZW50cy4KICAgIGZ1bmN0aW9uIHBvc3RQbG90RHJhdygpIHsKICAgICAgICAvLyBNZW1vcnkgTGVha3MgcGF0Y2ggICAgCiAgICAgICAgaWYgKHRoaXMucGx1Z2lucy5saW5lUmVuZGVyZXIgJiYgdGhpcy5wbHVnaW5zLmxpbmVSZW5kZXJlci5oaWdobGlnaHRDYW52YXMpIHsKICAgICAgICAgIHRoaXMucGx1Z2lucy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLnJlc2V0Q2FudmFzKCk7CiAgICAgICAgICB0aGlzLnBsdWdpbnMubGluZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcyA9IG51bGw7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMucGx1Z2lucy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCA9IG51bGw7CiAgICAgICAgdGhpcy5wbHVnaW5zLmxpbmVSZW5kZXJlci5oaWdobGlnaHRDYW52YXMgPSBuZXcgJC5qcXBsb3QuR2VuZXJpY0NhbnZhcygpOwogICAgICAgIAogICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKHRoaXMucGx1Z2lucy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsICdqcXBsb3QtbGluZVJlbmRlcmVyLWhpZ2hsaWdodC1jYW52YXMnLCB0aGlzLl9wbG90RGltZW5zaW9ucywgdGhpcykpOwogICAgICAgIHRoaXMucGx1Z2lucy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLnNldENvbnRleHQoKTsKICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoJ21vdXNlbGVhdmUnLCB7cGxvdDp0aGlzfSwgZnVuY3Rpb24gKGV2KSB7IHVuaGlnaGxpZ2h0KGV2LmRhdGEucGxvdCk7IH0pOwogICAgfSAKICAgIAogICAgZnVuY3Rpb24gaGlnaGxpZ2h0IChwbG90LCBzaWR4LCBwaWR4LCBwb2ludHMpIHsKICAgICAgICB2YXIgcyA9IHBsb3Quc2VyaWVzW3NpZHhdOwogICAgICAgIHZhciBjYW52YXMgPSBwbG90LnBsdWdpbnMubGluZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhczsKICAgICAgICBjYW52YXMuX2N0eC5jbGVhclJlY3QoMCwwLGNhbnZhcy5fY3R4LmNhbnZhcy53aWR0aCwgY2FudmFzLl9jdHguY2FudmFzLmhlaWdodCk7CiAgICAgICAgcy5faGlnaGxpZ2h0ZWRQb2ludCA9IHBpZHg7CiAgICAgICAgcGxvdC5wbHVnaW5zLmxpbmVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4ID0gc2lkeDsKICAgICAgICB2YXIgb3B0cyA9IHtmaWxsU3R5bGU6IHMuaGlnaGxpZ2h0Q29sb3J9OwogICAgICAgIGlmIChzLnR5cGUgPT09ICdsaW5lJyAmJiBzLnJlbmRlcmVyLmJhbmRzLnNob3cpIHsKICAgICAgICAgICAgb3B0cy5maWxsID0gdHJ1ZTsKICAgICAgICAgICAgb3B0cy5jbG9zZVBhdGggPSB0cnVlOwogICAgICAgIH0KICAgICAgICBzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhjYW52YXMuX2N0eCwgcG9pbnRzLCBvcHRzKTsKICAgICAgICBjYW52YXMgPSBudWxsOwogICAgfQogICAgCiAgICBmdW5jdGlvbiB1bmhpZ2hsaWdodCAocGxvdCkgewogICAgICAgIHZhciBjYW52YXMgPSBwbG90LnBsdWdpbnMubGluZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhczsKICAgICAgICBjYW52YXMuX2N0eC5jbGVhclJlY3QoMCwwLCBjYW52YXMuX2N0eC5jYW52YXMud2lkdGgsIGNhbnZhcy5fY3R4LmNhbnZhcy5oZWlnaHQpOwogICAgICAgIGZvciAodmFyIGk9MDsgaTxwbG90LnNlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBwbG90LnNlcmllc1tpXS5faGlnaGxpZ2h0ZWRQb2ludCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHBsb3QucGx1Z2lucy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCA9IG51bGw7CiAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcignanFwbG90RGF0YVVuaGlnaGxpZ2h0Jyk7CiAgICAgICAgY2FudmFzID0gbnVsbDsKICAgIH0KICAgIAogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVNb3ZlKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIGlmIChuZWlnaGJvcikgewogICAgICAgICAgICB2YXIgaW5zID0gW25laWdoYm9yLnNlcmllc0luZGV4LCBuZWlnaGJvci5wb2ludEluZGV4LCBuZWlnaGJvci5kYXRhXTsKICAgICAgICAgICAgdmFyIGV2dDEgPSBqUXVlcnkuRXZlbnQoJ2pxcGxvdERhdGFNb3VzZU92ZXInKTsKICAgICAgICAgICAgZXZ0MS5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICBldnQxLnBhZ2VZID0gZXYucGFnZVk7CiAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoZXZ0MSwgaW5zKTsKICAgICAgICAgICAgaWYgKHBsb3Quc2VyaWVzW2luc1swXV0uaGlnaGxpZ2h0TW91c2VPdmVyICYmICEoaW5zWzBdID09IHBsb3QucGx1Z2lucy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCkpIHsKICAgICAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ2pxcGxvdERhdGFIaWdobGlnaHQnKTsKICAgICAgICAgICAgICAgIGV2dC53aGljaCA9IGV2LndoaWNoOwogICAgICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoZXZ0LCBpbnMpOwogICAgICAgICAgICAgICAgaGlnaGxpZ2h0IChwbG90LCBuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IucG9pbnRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChuZWlnaGJvciA9PSBudWxsKSB7CiAgICAgICAgICAgIHVuaGlnaGxpZ2h0IChwbG90KTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICBpZiAobmVpZ2hib3IpIHsKICAgICAgICAgICAgdmFyIGlucyA9IFtuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IuZGF0YV07CiAgICAgICAgICAgIGlmIChwbG90LnNlcmllc1tpbnNbMF1dLmhpZ2hsaWdodE1vdXNlRG93biAmJiAhKGluc1swXSA9PSBwbG90LnBsdWdpbnMubGluZVJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXgpKSB7CiAgICAgICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdqcXBsb3REYXRhSGlnaGxpZ2h0Jyk7CiAgICAgICAgICAgICAgICBldnQud2hpY2ggPSBldi53aGljaDsKICAgICAgICAgICAgICAgIGV2dC5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICAgICAgZXZ0LnBhZ2VZID0gZXYucGFnZVk7CiAgICAgICAgICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKGV2dCwgaW5zKTsKICAgICAgICAgICAgICAgIGhpZ2hsaWdodCAocGxvdCwgbmVpZ2hib3Iuc2VyaWVzSW5kZXgsIG5laWdoYm9yLnBvaW50SW5kZXgsIG5laWdoYm9yLnBvaW50cyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAobmVpZ2hib3IgPT0gbnVsbCkgewogICAgICAgICAgICB1bmhpZ2hsaWdodCAocGxvdCk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZVVwKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIHZhciBpZHggPSBwbG90LnBsdWdpbnMubGluZVJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg7CiAgICAgICAgaWYgKGlkeCAhPSBudWxsICYmIHBsb3Quc2VyaWVzW2lkeF0uaGlnaGxpZ2h0TW91c2VEb3duKSB7CiAgICAgICAgICAgIHVuaGlnaGxpZ2h0KHBsb3QpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXYsIGdyaWRwb3MsIGRhdGFwb3MsIG5laWdoYm9yLCBwbG90KSB7CiAgICAgICAgaWYgKG5laWdoYm9yKSB7CiAgICAgICAgICAgIHZhciBpbnMgPSBbbmVpZ2hib3Iuc2VyaWVzSW5kZXgsIG5laWdoYm9yLnBvaW50SW5kZXgsIG5laWdoYm9yLmRhdGFdOwogICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdqcXBsb3REYXRhQ2xpY2snKTsKICAgICAgICAgICAgZXZ0LndoaWNoID0gZXYud2hpY2g7CiAgICAgICAgICAgIGV2dC5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQsIGlucyk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVSaWdodENsaWNrKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIGlmIChuZWlnaGJvcikgewogICAgICAgICAgICB2YXIgaW5zID0gW25laWdoYm9yLnNlcmllc0luZGV4LCBuZWlnaGJvci5wb2ludEluZGV4LCBuZWlnaGJvci5kYXRhXTsKICAgICAgICAgICAgdmFyIGlkeCA9IHBsb3QucGx1Z2lucy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDsKICAgICAgICAgICAgaWYgKGlkeCAhPSBudWxsICYmIHBsb3Quc2VyaWVzW2lkeF0uaGlnaGxpZ2h0TW91c2VEb3duKSB7CiAgICAgICAgICAgICAgICB1bmhpZ2hsaWdodChwbG90KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdqcXBsb3REYXRhUmlnaHRDbGljaycpOwogICAgICAgICAgICBldnQud2hpY2ggPSBldi53aGljaDsKICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKGV2dCwgaW5zKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIAogICAgLy8gY2xhc3M6ICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlcgogICAgLy8gVGhlIGRlZmF1bHQganFQbG90IGF4aXMgcmVuZGVyZXIsIGNyZWF0aW5nIGEgbnVtZXJpYyBheGlzLgogICAgJC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyID0gZnVuY3Rpb24oKSB7CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBheGlzIG9iamVjdC4KICAgICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpewogICAgICAgIC8vIHByb3A6IGJyZWFrUG9pbnRzCiAgICAgICAgLy8gRVhQRVJJTUVOVEFMISEgVXNlIGF0IHlvdXIgb3duIHJpc2shCiAgICAgICAgLy8gV29ya3Mgb25seSB3aXRoIGxpbmVhciBheGVzIGFuZCB0aGUgZGVmYXVsdCB0aWNrIHJlbmRlcmVyLgogICAgICAgIC8vIEFycmF5IG9mIFtzdGFydCwgc3RvcF0gcG9pbnRzIHRvIGNyZWF0ZSBhIGJyb2tlbiBheGlzLgogICAgICAgIC8vIEJyb2tlbiBheGVzIGhhdmUgYSAianVtcCIgaW4gdGhlbSwgd2hpY2ggaXMgYW4gaW1tZWRpYXRlIAogICAgICAgIC8vIHRyYW5zaXRpb24gZnJvbSBhIHNtYWxsZXIgdmFsdWUgdG8gYSBsYXJnZXIgdmFsdWUuCiAgICAgICAgLy8gQ3VycmVudGx5LCBheGlzIHRpY2tzIE1VU1QgYmUgbWFudWFsbHkgYXNzaWduZWQgaWYgdXNpbmcgYnJlYWtQb2ludHMKICAgICAgICAvLyBieSB1c2luZyB0aGUgYXhpcyB0aWNrcyBhcnJheSBvcHRpb24uCiAgICAgICAgdGhpcy5icmVha1BvaW50cyA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogYnJlYWtUaWNrTGFiZWwKICAgICAgICAvLyBMYWJlbCB0byB1c2UgYXQgdGhlIGF4aXMgYnJlYWsgaWYgYnJlYWtQb2ludHMgYXJlIHNwZWNpZmllZC4KICAgICAgICB0aGlzLmJyZWFrVGlja0xhYmVsID0gIiZhc3ltcDsiOwogICAgICAgIC8vIHByb3A6IGRyYXdCYXNlbGluZQogICAgICAgIC8vIFRydWUgdG8gZHJhdyB0aGUgYXhpcyBiYXNlbGluZS4KICAgICAgICB0aGlzLmRyYXdCYXNlbGluZSA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogYmFzZWxpbmVXaWR0aAogICAgICAgIC8vIHdpZHRoIG9mIHRoZSBiYXNlbGluZSBpbiBwaXhlbHMuCiAgICAgICAgdGhpcy5iYXNlbGluZVdpZHRoID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBiYXNlbGluZUNvbG9yCiAgICAgICAgLy8gQ1NTIGNvbG9yIHNwZWMgZm9yIHRoZSBiYXNlbGluZS4KICAgICAgICB0aGlzLmJhc2VsaW5lQ29sb3IgPSBudWxsOwogICAgICAgIC8vIHByb3A6IGZvcmNlVGlja0F0MAogICAgICAgIC8vIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGVyZSBpcyBhbHdheXMgYSB0aWNrIG1hcmsgYXQgMC4KICAgICAgICAvLyBJZiBkYXRhIHJhbmdlIGlzIHN0cmljdGx5IHBvc2l0aXZlIG9yIG5lZ2F0aXZlLAogICAgICAgIC8vIHRoaXMgd2lsbCBmb3JjZSAwIHRvIGJlIGluc2lkZSB0aGUgYXhpcyBib3VuZHMgdW5sZXNzCiAgICAgICAgLy8gdGhlIGFwcHJvcHJpYXRlIGF4aXMgcGFkIChwYWQsIHBhZE1pbiBvciBwYWRNYXgpIGlzIHNldAogICAgICAgIC8vIHRvIDAsIHRoZW4gdGhpcyB3aWxsIGZvcmNlIGFuIGF4aXMgbWluIG9yIG1heCB2YWx1ZSBhdCAwLgogICAgICAgIC8vIFRoaXMgaGFzIGtub3cgZWZmZWN0IHdoZW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9ucwogICAgICAgIC8vIGFyZSBzZXQ6ICBhdXRvc2NhbGUsIG1pbiwgbWF4LCBudW1iZXJUaWNrcyBvciB0aWNrSW50ZXJ2YWwuCiAgICAgICAgdGhpcy5mb3JjZVRpY2tBdDAgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBmb3JjZVRpY2tBdDEwMAogICAgICAgIC8vIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGVyZSBpcyBhbHdheXMgYSB0aWNrIG1hcmsgYXQgMTAwLgogICAgICAgIC8vIElmIGRhdGEgcmFuZ2UgaXMgc3RyaWN0bHkgYWJvdmUgb3IgYmVsb3cgMTAwLAogICAgICAgIC8vIHRoaXMgd2lsbCBmb3JjZSAxMDAgdG8gYmUgaW5zaWRlIHRoZSBheGlzIGJvdW5kcyB1bmxlc3MKICAgICAgICAvLyB0aGUgYXBwcm9wcmlhdGUgYXhpcyBwYWQgKHBhZCwgcGFkTWluIG9yIHBhZE1heCkgaXMgc2V0CiAgICAgICAgLy8gdG8gMCwgdGhlbiB0aGlzIHdpbGwgZm9yY2UgYW4gYXhpcyBtaW4gb3IgbWF4IHZhbHVlIGF0IDEwMC4KICAgICAgICAvLyBUaGlzIGhhcyBrbm93IGVmZmVjdCB3aGVuIGFueSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnMKICAgICAgICAvLyBhcmUgc2V0OiAgYXV0b3NjYWxlLCBtaW4sIG1heCwgbnVtYmVyVGlja3Mgb3IgdGlja0ludGVydmFsLgogICAgICAgIHRoaXMuZm9yY2VUaWNrQXQxMDAgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiB0aWNrSW5zZXQKICAgICAgICAvLyBDb250cm9scyB0aGUgYW1vdW50IHRvIGluc2V0IHRoZSBmaXJzdCBhbmQgbGFzdCB0aWNrcyBmcm9tIAogICAgICAgIC8vIHRoZSBlZGdlcyBvZiB0aGUgZ3JpZCwgaW4gbXVsdGlwbGVzIG9mIHRoZSB0aWNrIGludGVydmFsLgogICAgICAgIC8vIDAgaXMgbm8gaW5zZXQsIDAuNSBpcyBvbmUgaGFsZiBhIHRpY2sgaW50ZXJ2YWwsIDEgaXMgYSBmdWxsCiAgICAgICAgLy8gdGljayBpbnRlcnZhbCwgZXRjLgogICAgICAgIHRoaXMudGlja0luc2V0ID0gMDsKICAgICAgICAvLyBwcm9wOiBtaW5vclRpY2tzCiAgICAgICAgLy8gTnVtYmVyIG9mIHRpY2tzIHRvIGFkZCBiZXR3ZWVuICJtYWpvciIgdGlja3MuCiAgICAgICAgLy8gTWFqb3IgdGlja3MgYXJlIHRpY2tzIHN1cHBsaWVkIGJ5IHVzZXIgb3IgYXV0byBjb21wdXRlZC4KICAgICAgICAvLyBNaW5vciB0aWNrcyBjYW5ub3QgYmUgY3JlYXRlZCBieSB1c2VyLgogICAgICAgIHRoaXMubWlub3JUaWNrcyA9IDA7CiAgICAgICAgLy8gcHJvcDogYWxpZ25UaWNrcwogICAgICAgIC8vIHRydWUgdG8gYWxpZ24gdGljayBtYXJrcyBhY3Jvc3Mgb3Bwb3NlZCBheGVzCiAgICAgICAgLy8gc3VjaCBhcyBmcm9tIHRoZSB5MmF4aXMgdG8geWF4aXMuCiAgICAgICAgdGhpcy5hbGlnblRpY2tzID0gZmFsc2U7CiAgICAgICAgdGhpcy5fYXV0b0Zvcm1hdFN0cmluZyA9ICcnOwogICAgICAgIHRoaXMuX292ZXJyaWRlRm9ybWF0U3RyaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5fc2NhbGVmYWN0ID0gMS4wOwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIGlmICh0aGlzLmJyZWFrUG9pbnRzKSB7CiAgICAgICAgICAgIGlmICghJC5pc0FycmF5KHRoaXMuYnJlYWtQb2ludHMpKSB7CiAgICAgICAgICAgICAgICB0aGlzLmJyZWFrUG9pbnRzID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICh0aGlzLmJyZWFrUG9pbnRzLmxlbmd0aCA8IDIgfHwgdGhpcy5icmVha1BvaW50c1sxXSA8PSB0aGlzLmJyZWFrUG9pbnRzWzBdKSB7CiAgICAgICAgICAgICAgICB0aGlzLmJyZWFrUG9pbnRzID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5udW1iZXJUaWNrcyAhPSBudWxsICYmIHRoaXMubnVtYmVyVGlja3MgPCAyKSB7CiAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSAyOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlc2V0RGF0YUJvdW5kcygpOwogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgYXhpcwogICAgJC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24oY3R4LCBwbG90KSB7CiAgICAgICAgaWYgKHRoaXMuc2hvdykgewogICAgICAgICAgICAvLyBwb3B1bGF0ZSB0aGUgYXhpcyBsYWJlbCBhbmQgdmFsdWUgcHJvcGVydGllcy4KICAgICAgICAgICAgLy8gY3JlYXRlVGlja3MgaXMgYSBtZXRob2Qgb24gdGhlIHJlbmRlcmVyLCBidXQKICAgICAgICAgICAgLy8gY2FsbCBpdCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBheGlzLgogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRpY2tzLmNhbGwodGhpcywgcGxvdCk7CiAgICAgICAgICAgIC8vIGZpbGwgYSBkaXYgd2l0aCBheGVzIGxhYmVscyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgogICAgICAgICAgICAvLyBOZWVkIHRvIHByZWdlbmVyYXRlIGVhY2ggYXhpcyB0byBnZXQgaXRzIGJvdW5kcyBhbmQKICAgICAgICAgICAgLy8gcG9zaXRpb24gaXQgYW5kIHRoZSBsYWJlbHMgY29ycmVjdGx5IG9uIHRoZSBwbG90LgogICAgICAgICAgICB2YXIgZGltPTA7CiAgICAgICAgICAgIHZhciB0ZW1wOwogICAgICAgICAgICAvLyBBZGRlZCBmb3IgdGhlbWluZy4KICAgICAgICAgICAgaWYgKHRoaXMuX2VsZW0pIHsKICAgICAgICAgICAgICAgIC8vIE1lbW9yeSBMZWFrcyBwYXRjaAogICAgICAgICAgICAgICAgLy90aGlzLl9lbGVtLmVtcHR5KCk7CiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKTsKICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0gPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLl9lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uYWRkQ2xhc3MoJ2pxcGxvdC1heGlzIGpxcGxvdC0nK3RoaXMubmFtZSk7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpOwoKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0ud2lkdGgodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5oZWlnaHQodGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gY3JlYXRlIGEgX2xhYmVsIG9iamVjdC4KICAgICAgICAgICAgdGhpcy5sYWJlbE9wdGlvbnMuYXhpcyA9IHRoaXMubmFtZTsKICAgICAgICAgICAgdGhpcy5fbGFiZWwgPSBuZXcgdGhpcy5sYWJlbFJlbmRlcmVyKHRoaXMubGFiZWxPcHRpb25zKTsKICAgICAgICAgICAgaWYgKHRoaXMuX2xhYmVsLnNob3cpIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpcy5fbGFiZWwuZHJhdyhjdHgsIHBsb3QpOwogICAgICAgICAgICAgICAgZWxlbS5hcHBlbmRUbyh0aGlzLl9lbGVtKTsKICAgICAgICAgICAgICAgIGVsZW0gPSBudWxsOwogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgdmFyIHQgPSB0aGlzLl90aWNrczsKICAgICAgICAgICAgdmFyIHRpY2s7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB0aWNrID0gdFtpXTsKICAgICAgICAgICAgICAgIGlmICh0aWNrLnNob3cgJiYgdGljay5zaG93TGFiZWwgJiYgKCF0aWNrLmlzTWlub3JUaWNrIHx8IHRoaXMuc2hvd01pbm9yVGlja3MpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5hcHBlbmQodGljay5kcmF3KGN0eCwgcGxvdCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRpY2sgPSBudWxsOwogICAgICAgICAgICB0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW07CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBhbiBheGlzCiAgICAkLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5taW4gPSB0aGlzLl9vcHRpb25zLm1pbjsKICAgICAgICB0aGlzLm1heCA9IHRoaXMuX29wdGlvbnMubWF4OwogICAgICAgIHRoaXMudGlja0ludGVydmFsID0gdGhpcy5fb3B0aW9ucy50aWNrSW50ZXJ2YWw7CiAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IHRoaXMuX29wdGlvbnMubnVtYmVyVGlja3M7CiAgICAgICAgdGhpcy5fYXV0b0Zvcm1hdFN0cmluZyA9ICcnOwogICAgICAgIGlmICh0aGlzLl9vdmVycmlkZUZvcm1hdFN0cmluZyAmJiB0aGlzLnRpY2tPcHRpb25zICYmIHRoaXMudGlja09wdGlvbnMuZm9ybWF0U3RyaW5nKSB7CiAgICAgICAgICAgIHRoaXMudGlja09wdGlvbnMuZm9ybWF0U3RyaW5nID0gJyc7CiAgICAgICAgfQoKICAgICAgICAvLyB0aGlzLl90aWNrcyA9IHRoaXMuX190aWNrczsKICAgIH07CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIGF4aXMKICAgICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oKSB7IAogICAgICAgIHZhciBkaW0gPSAwOwogICAgICAgIHZhciB0ZW1wOwogICAgICAgIHZhciB3ID0gMDsKICAgICAgICB2YXIgaCA9IDA7CiAgICAgICAgdmFyIGxzaG93ID0gKHRoaXMuX2xhYmVsID09IG51bGwpID8gZmFsc2UgOiB0aGlzLl9sYWJlbC5zaG93OwogICAgICAgIGlmICh0aGlzLnNob3cpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzLl90aWNrczsKICAgICAgICAgICAgdmFyIHRpY2s7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB0aWNrID0gdFtpXTsKICAgICAgICAgICAgICAgIGlmICghdGljay5fYnJlYWtUaWNrICYmIHRpY2suc2hvdyAmJiB0aWNrLnNob3dMYWJlbCAmJiAoIXRpY2suaXNNaW5vclRpY2sgfHwgdGhpcy5zaG93TWlub3JUaWNrcykpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lID09ICd4YXhpcycgfHwgdGhpcy5uYW1lID09ICd4MmF4aXMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0aWNrLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRpY2suX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgPiBkaW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGltID0gdGVtcDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGljayA9IG51bGw7CiAgICAgICAgICAgIHQgPSBudWxsOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGxzaG93KSB7CiAgICAgICAgICAgICAgICB3ID0gdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTsKICAgICAgICAgICAgICAgIGggPSB0aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKTsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneGF4aXMnKSB7CiAgICAgICAgICAgICAgICBkaW0gPSBkaW0gKyBoOwogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoeydoZWlnaHQnOmRpbSsncHgnLCBsZWZ0OicwcHgnLCBib3R0b206JzBweCd9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICh0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgIGRpbSA9IGRpbSArIGg7CiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7J2hlaWdodCc6ZGltKydweCcsIGxlZnQ6JzBweCcsIHRvcDonMHB4J30pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubmFtZSA9PSAneWF4aXMnKSB7CiAgICAgICAgICAgICAgICBkaW0gPSBkaW0gKyB3OwogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moeyd3aWR0aCc6ZGltKydweCcsIGxlZnQ6JzBweCcsIHRvcDonMHB4J30pOwogICAgICAgICAgICAgICAgaWYgKGxzaG93ICYmIHRoaXMuX2xhYmVsLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCd3aWR0aCcsIHcrJ3B4Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBkaW0gPSBkaW0gKyB3OwogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moeyd3aWR0aCc6ZGltKydweCcsIHJpZ2h0OicwcHgnLCB0b3A6JzBweCd9KTsKICAgICAgICAgICAgICAgIGlmIChsc2hvdyAmJiB0aGlzLl9sYWJlbC5jb25zdHJ1Y3RvciA9PSAkLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlcikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcygnd2lkdGgnLCB3KydweCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSAgCiAgICB9OyAgICAKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgYXhpcwogICAgJC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jcmVhdGVUaWNrcyA9IGZ1bmN0aW9uKHBsb3QpIHsKICAgICAgICAvLyB3ZSdyZSBhcmUgb3BlcmF0aW5nIG9uIGFuIGF4aXMgaGVyZQogICAgICAgIHZhciB0aWNrcyA9IHRoaXMuX3RpY2tzOwogICAgICAgIHZhciB1c2VyVGlja3MgPSB0aGlzLnRpY2tzOwogICAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lOwogICAgICAgIC8vIGRhdGFib3VuZHMgd2VyZSBzZXQgb24gYXhpcyBpbml0aWFsaXphdGlvbi4KICAgICAgICB2YXIgZGIgPSB0aGlzLl9kYXRhQm91bmRzOwogICAgICAgIHZhciBkaW0gPSAodGhpcy5uYW1lLmNoYXJBdCgwKSA9PT0gJ3gnKSA/IHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIDogdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0OwogICAgICAgIHZhciBpbnRlcnZhbDsKICAgICAgICB2YXIgbWluLCBtYXg7CiAgICAgICAgdmFyIHBvczEsIHBvczI7CiAgICAgICAgdmFyIHR0LCBpOwogICAgICAgIC8vIGdldCBhIGNvcHkgb2YgdXNlcidzIHNldHRpbmdzIGZvciBtaW4vbWF4LgogICAgICAgIHZhciB1c2VyTWluID0gdGhpcy5taW47CiAgICAgICAgdmFyIHVzZXJNYXggPSB0aGlzLm1heDsKICAgICAgICB2YXIgdXNlck5UID0gdGhpcy5udW1iZXJUaWNrczsKICAgICAgICB2YXIgdXNlclRJID0gdGhpcy50aWNrSW50ZXJ2YWw7CgogICAgICAgIHZhciB0aHJlc2hvbGQgPSAzMDsKICAgICAgICB0aGlzLl9zY2FsZWZhY3QgPSAgKE1hdGgubWF4KGRpbSwgdGhyZXNob2xkKzEpIC0gdGhyZXNob2xkKS8zMDAuMDsKICAgICAgICAKICAgICAgICAvLyBpZiB3ZSBhbHJlYWR5IGhhdmUgdGlja3MsIHVzZSB0aGVtLgogICAgICAgIC8vIHRpY2tzIG11c3QgYmUgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyB2YWx1ZS4KICAgICAgICAKICAgICAgICBpZiAodXNlclRpY2tzLmxlbmd0aCkgewogICAgICAgICAgICAvLyB0aWNrcyBjb3VsZCBiZSAxRCBvciAyRCBhcnJheSBvZiBbdmFsLCB2YWwsICwsLF0gb3IgW1t2YWwsIGxhYmVsXSwgW3ZhbCwgbGFiZWxdLCAuLi5dIG9yIG1peGVkCiAgICAgICAgICAgIGZvciAoaT0wOyBpPHVzZXJUaWNrcy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICB2YXIgdXQgPSB1c2VyVGlja3NbaV07CiAgICAgICAgICAgICAgICB2YXIgdCA9IG5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTsKICAgICAgICAgICAgICAgIGlmICgkLmlzQXJyYXkodXQpKSB7CiAgICAgICAgICAgICAgICAgICAgdC52YWx1ZSA9IHV0WzBdOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJyZWFrUG9pbnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dFswXSA9PSB0aGlzLmJyZWFrUG9pbnRzWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmxhYmVsID0gdGhpcy5icmVha1RpY2tMYWJlbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuX2JyZWFrVGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dHcmlkbGluZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHV0WzBdID4gdGhpcy5icmVha1BvaW50c1swXSAmJiB1dFswXSA8PSB0aGlzLmJyZWFrUG9pbnRzWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnNob3cgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd0dyaWRsaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmxhYmVsID0gdXRbMV07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmxhYmVsID0gdXRbMV07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQubGFiZWwgPSB1dFsxXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdC5zZXRUaWNrKHV0WzBdLCB0aGlzLm5hbWUpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnB1c2godCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZWxzZSBpZiAoJC5pc1BsYWluT2JqZWN0KHV0KSkgewogICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsIHQsIHV0KTsKICAgICAgICAgICAgICAgICAgICB0LmF4aXMgPSB0aGlzLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdC52YWx1ZSA9IHV0OwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJyZWFrUG9pbnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dCA9PSB0aGlzLmJyZWFrUG9pbnRzWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmxhYmVsID0gdGhpcy5icmVha1RpY2tMYWJlbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuX2JyZWFrVGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dHcmlkbGluZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHV0ID4gdGhpcy5icmVha1BvaW50c1swXSAmJiB1dCA8PSB0aGlzLmJyZWFrUG9pbnRzWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnNob3cgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd0dyaWRsaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdC5zZXRUaWNrKHV0LCB0aGlzLm5hbWUpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnB1c2godCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IHVzZXJUaWNrcy5sZW5ndGg7CiAgICAgICAgICAgIHRoaXMubWluID0gdGhpcy5fdGlja3NbMF0udmFsdWU7CiAgICAgICAgICAgIHRoaXMubWF4ID0gdGhpcy5fdGlja3NbdGhpcy5udW1iZXJUaWNrcy0xXS52YWx1ZTsKICAgICAgICAgICAgdGhpcy50aWNrSW50ZXJ2YWwgPSAodGhpcy5tYXggLSB0aGlzLm1pbikgLyAodGhpcy5udW1iZXJUaWNrcyAtIDEpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIGFueSB0aWNrcyB5ZXQsIGxldCdzIG1ha2Ugc29tZSEKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ3hheGlzJyB8fCBuYW1lID09ICd4MmF4aXMnKSB7CiAgICAgICAgICAgICAgICBkaW0gPSB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGRpbSA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIF9udW1iZXJUaWNrcyA9IHRoaXMubnVtYmVyVGlja3M7CgogICAgICAgICAgICAvLyBpZiBhbGlnbmluZyB0aGlzIGF4aXMsIHVzZSBudW1iZXIgb2YgdGlja3MgZnJvbSBwcmV2aW91cyBheGlzLgogICAgICAgICAgICAvLyBEbyBJIG5lZWQgdG8gcmVzZXQgc29tZWhvdyBpZiBhbGlnblRpY2tzIGlzIGNoYW5nZWQgYW5kIHRoZW4gZ3JhcGggaXMgcmVwbG90dGVkPz8KICAgICAgICAgICAgaWYgKHRoaXMuYWxpZ25UaWNrcykgewogICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PT0gJ3gyYXhpcycgJiYgcGxvdC5heGVzLnhheGlzLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICBfbnVtYmVyVGlja3MgPSBwbG90LmF4ZXMueGF4aXMubnVtYmVyVGlja3M7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm5hbWUuY2hhckF0KDApID09PSAneScgJiYgdGhpcy5uYW1lICE9PSAneWF4aXMnICYmIHRoaXMubmFtZSAhPT0gJ3lNaWRBeGlzJyAmJiBwbG90LmF4ZXMueWF4aXMuc2hvdykgewogICAgICAgICAgICAgICAgICAgIF9udW1iZXJUaWNrcyA9IHBsb3QuYXhlcy55YXhpcy5udW1iZXJUaWNrczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICBtaW4gPSAoKHRoaXMubWluICE9IG51bGwpID8gdGhpcy5taW4gOiBkYi5taW4pOwogICAgICAgICAgICBtYXggPSAoKHRoaXMubWF4ICE9IG51bGwpID8gdGhpcy5tYXggOiBkYi5tYXgpOwoKICAgICAgICAgICAgdmFyIHJhbmdlID0gbWF4IC0gbWluOwogICAgICAgICAgICB2YXIgcm1pbiwgcm1heDsKICAgICAgICAgICAgdmFyIHRlbXA7CgogICAgICAgICAgICBpZiAodGhpcy50aWNrT3B0aW9ucyA9PSBudWxsIHx8ICF0aGlzLnRpY2tPcHRpb25zLmZvcm1hdFN0cmluZykgewogICAgICAgICAgICAgICAgdGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcgPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBEb2luZyBjb21wbGV0ZSBhdXRvc2NhbGluZwogICAgICAgICAgICBpZiAodGhpcy5taW4gPT0gbnVsbCB8fCB0aGlzLm1heCA9PSBudWxsICYmIHRoaXMudGlja0ludGVydmFsID09IG51bGwgJiYgIXRoaXMuYXV0b3NjYWxlKSB7CiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB1c2VyIG11c3QgaGF2ZSB0aWNrIGF0IDAgb3IgMTAwIGFuZCBlbnN1cmUgdGhleSBhcmUgaW4gcmFuZ2UuCiAgICAgICAgICAgICAgICAvLyBUaGUgYXV0b3NjYWxpbmcgYWxnb3JpdGhtIHdpbGwgYWx3YXlzIHBsYWNlIHRpY2tzIGF0IDAgYW5kIDEwMCBpZiB0aGV5IGFyZSBpbiByYW5nZS4KICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcmNlVGlja0F0MCkgewogICAgICAgICAgICAgICAgICAgIGlmIChtaW4gPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChtYXggPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcmNlVGlja0F0MTAwKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiA+IDEwMCkgewogICAgICAgICAgICAgICAgICAgICAgICBtaW4gPSAxMDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChtYXggPCAxMDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gMTAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIga2VlcE1pbiA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgIGtlZXBNYXggPSBmYWxzZTsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5taW4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGtlZXBNaW4gPSB0cnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF4ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBrZWVwTWF4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyB2YXIgdGhyZXNob2xkID0gMzA7CiAgICAgICAgICAgICAgICAvLyB2YXIgdGRpbSA9IE1hdGgubWF4KGRpbSwgdGhyZXNob2xkKzEpOwogICAgICAgICAgICAgICAgLy8gdGhpcy5fc2NhbGVmYWN0ID0gICh0ZGltLXRocmVzaG9sZCkvMzAwLjA7CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gJC5qcXBsb3QuTGluZWFyVGlja0dlbmVyYXRvcihtaW4sIG1heCwgdGhpcy5fc2NhbGVmYWN0LCBfbnVtYmVyVGlja3MsIGtlZXBNaW4sIGtlZXBNYXgpOyAKICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBhIHBhZGRlZCBtYXggYW5kIG1pbiwgcG9pbnRzIHNob3VsZCBiZSBsZXNzIHRoYW4gdGhlc2UKICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhleSBhcmVuJ3QgdG9vIGNsb3NlIHRvIHRoZSBlZGdlcyBvZiB0aGUgcGxvdC4KICAgICAgICAgICAgICAgIC8vIFVzZXIgY2FuIGFkanVzdCBob3cgbXVjaCBwYWRkaW5nIGlzIGFsbG93ZWQgd2l0aCBwYWQsIHBhZE1pbiBhbmQgUGFkTWF4IG9wdGlvbnMuIAogICAgICAgICAgICAgICAgLy8gSWYgbWluIG9yIG1heCBpcyBzZXQsIGRvbid0IHBhZCB0aGF0IGVuZCBvZiBheGlzLgogICAgICAgICAgICAgICAgdmFyIHR1bWluID0gKHRoaXMubWluICE9IG51bGwpID8gbWluIDogbWluICsgcmFuZ2UqKHRoaXMucGFkTWluIC0gMSk7CiAgICAgICAgICAgICAgICB2YXIgdHVtYXggPSAodGhpcy5tYXggIT0gbnVsbCkgPyBtYXggOiBtYXggLSByYW5nZSoodGhpcy5wYWRNYXggLSAxKTsKCiAgICAgICAgICAgICAgICAvLyBpZiB0aGV5J3JlIGVxdWFsLCB3ZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyBhbnl0aGluZywgcmlnaHQ/CiAgICAgICAgICAgICAgICAvLyBpZiAobWluIDw9dHVtaW4gfHwgbWF4ID49IHR1bWF4KSB7CiAgICAgICAgICAgICAgICBpZiAobWluIDx0dW1pbiB8fCBtYXggPiB0dW1heCkgewogICAgICAgICAgICAgICAgICAgIHR1bWluID0gKHRoaXMubWluICE9IG51bGwpID8gbWluIDogbWluIC0gcmFuZ2UqKHRoaXMucGFkTWluIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgdHVtYXggPSAodGhpcy5tYXggIT0gbnVsbCkgPyBtYXggOiBtYXggKyByYW5nZSoodGhpcy5wYWRNYXggLSAxKTsKICAgICAgICAgICAgICAgICAgICByZXQgPSAkLmpxcGxvdC5MaW5lYXJUaWNrR2VuZXJhdG9yKHR1bWluLCB0dW1heCwgdGhpcy5fc2NhbGVmYWN0LCBfbnVtYmVyVGlja3MsIGtlZXBNaW4sIGtlZXBNYXgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMubWluID0gcmV0WzBdOwogICAgICAgICAgICAgICAgdGhpcy5tYXggPSByZXRbMV07CiAgICAgICAgICAgICAgICAvLyBpZiBudW1iZXJUaWNrcyBzcGVjaWZpZWQsIGl0IHNob3VsZCByZXR1cm4gdGhlIHNhbWUuCiAgICAgICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0gcmV0WzJdOwogICAgICAgICAgICAgICAgdGhpcy5fYXV0b0Zvcm1hdFN0cmluZyA9IHJldFszXTsKICAgICAgICAgICAgICAgIHRoaXMudGlja0ludGVydmFsID0gcmV0WzRdOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBVc2VyIGhhcyBzcGVjaWZpZWQgc29tZSBheGlzIHNjYWxlIHJlbGF0ZWQgb3B0aW9uLCBjYW4gdXNlIGF1dG8gYWxnb3JpdGhtCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBpZiBtaW4gYW5kIG1heCBhcmUgc2FtZSwgc3BhY2UgdGhlbSBvdXQgYSBiaXQKICAgICAgICAgICAgICAgIGlmIChtaW4gPT0gbWF4KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGFkaiA9IDAuMDU7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRqID0gTWF0aC5tYXgoTWF0aC5sb2cobWluKS9NYXRoLkxOMTAsIDAuMDUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBtaW4gLT0gYWRqOwogICAgICAgICAgICAgICAgICAgIG1heCArPSBhZGo7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIGF1dG9zY2FsZS4gIENhbid0IGF1dG9zY2FsZSBpZiBtaW4gb3IgbWF4IGlzIHN1cHBsaWVkLgogICAgICAgICAgICAgICAgLy8gV2lsbCB1c2UgbnVtYmVyVGlja3MgYW5kIHRpY2tJbnRlcnZhbCBpZiBzdXBwbGllZC4gIFRpY2tzCiAgICAgICAgICAgICAgICAvLyBhY3Jvc3MgbXVsdGlwbGUgYXhlcyBtYXkgbm90IGxpbmUgdXAgZGVwZW5kaW5nIG9uIGhvdwogICAgICAgICAgICAgICAgLy8gYmFycyBhcmUgdG8gYmUgcGxvdHRlZC4KICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dG9zY2FsZSAmJiB0aGlzLm1pbiA9PSBudWxsICYmIHRoaXMubWF4ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcnJhbmdlLCB0aSwgbWFyZ2luOwogICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZU1pblplcm8gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB2YXIgZm9yY2VaZXJvTGluZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcnZhbHMgPSB7bWluOm51bGwsIG1heDpudWxsLCBhdmVyYWdlOm51bGwsIHN0ZGRldjpudWxsfTsKICAgICAgICAgICAgICAgICAgICAvLyBpZiBhbnkgc2VyaWVzIGFyZSBiYXJzLCBvciBpZiBhbnkgYXJlIGZpbGwgdG8gemVybywgYW5kIGlmIHRoaXMKICAgICAgICAgICAgICAgICAgICAvLyBpcyB0aGUgYXhpcyB0byBmaWxsIHRvd2FyZCwgY2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBzdGFydCBheGlzIGF0IHplcm8uCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMuX3Nlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IHRoaXMuX3Nlcmllc1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZhbmFtZSA9IChzLmZpbGxBeGlzID09ICd4JykgPyBzLl94YXhpcy5uYW1lIDogcy5feWF4aXMubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIGZpbGwgYXhpcwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lID09IGZhbmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHMgPSBzLl9wbG90VmFsdWVzW3MuZmlsbEF4aXNdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZtaW4gPSB2YWxzWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZtYXggPSB2YWxzWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqPHZhbHMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsc1tqXSA8IHZtaW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm1pbiA9IHZhbHNbal07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHNbal0gPiB2bWF4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtYXggPSB2YWxzW2pdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcCA9ICh2bWF4IC0gdm1pbikgLyB2bWF4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgdGhpcyBzcmllcyBhIGJhcj8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkJhclJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm8gbmVnYXRpdmUgdmFsdWVzIGFuZCBjb3VsZCBhbHNvIGNoZWNrIHJhbmdlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2bWluID49IDAgJiYgKHMuZmlsbFRvWmVybyB8fCBkcCA+IDAuMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VNaW5aZXJvID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlTWluWmVybyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5maWxsICYmIHMuZmlsbFRvWmVybyAmJiB2bWluIDwgMCAmJiB2bWF4ID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VaZXJvTGluZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVplcm9MaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vdCBhIGJhciBhbmQgZmlsbGluZywgdXNlIGFwcHJvcHJpYXRlIG1ldGhvZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMuZmlsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2bWluID49IDAgJiYgKHMuZmlsbFRvWmVybyB8fCBkcCA+IDAuMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VNaW5aZXJvID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodm1pbiA8IDAgJiYgdm1heCA+IDAgJiYgcy5maWxsVG9aZXJvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlTWluWmVybyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVplcm9MaW5lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlTWluWmVybyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVplcm9MaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBub3QgYSBiYXIgYW5kIG5vdCBmaWxsaW5nLCBvbmx5IGNoYW5nZSBleGlzdGluZyBzdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgaXQgZG9lc24ndCBtYWtlIHNlbnNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2bWluIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlTWluWmVybyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgbWFrZSBheGlzIG1pbiBhdCAwLgogICAgICAgICAgICAgICAgICAgIGlmIChmb3JjZU1pblplcm8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBudW1iZXIgb2YgdGlja3MKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IDIgKyBNYXRoLmNlaWwoKGRpbS0odGhpcy50aWNrU3BhY2luZy0xKSkvdGhpcy50aWNrU3BhY2luZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgdXNlck1pbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoYXQgb3JkZXIgaXMgdGhpcyByYW5nZT8KICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hhdCB0aWNrIGludGVydmFsIGRvZXMgdGhhdCBnaXZlIHVzPwogICAgICAgICAgICAgICAgICAgICAgICB0aSA9IG1heC8odGhpcy5udW1iZXJUaWNrcy0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IE1hdGgucG93KDEwLCBNYXRoLmFicyhNYXRoLmZsb29yKE1hdGgubG9nKHRpKS9NYXRoLkxOMTApKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aS90ZW1wID09IHBhcnNlSW50KHRpL3RlbXAsIDEwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGkgKz0gdGVtcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpY2tJbnRlcnZhbCA9IE1hdGguY2VpbCh0aS90ZW1wKSAqIHRlbXA7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF4ID0gdGhpcy50aWNrSW50ZXJ2YWwgKiAodGhpcy5udW1iZXJUaWNrcyAtIDEpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBhIHRpY2sgYXQgMC4KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JjZVplcm9MaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgbnVtYmVyIG9mIHRpY2tzCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSAyICsgTWF0aC5jZWlsKChkaW0tKHRoaXMudGlja1NwYWNpbmctMSkpL3RoaXMudGlja1NwYWNpbmcpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnRtaW4gPSBNYXRoLmNlaWwoTWF0aC5hYnMobWluKS9yYW5nZSoodGhpcy5udW1iZXJUaWNrcy0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudG1heCA9IHRoaXMubnVtYmVyVGlja3MgLSAxICAtIG50bWluOwogICAgICAgICAgICAgICAgICAgICAgICB0aSA9IE1hdGgubWF4KE1hdGguYWJzKG1pbi9udG1pbiksIE1hdGguYWJzKG1heC9udG1heCkpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gTWF0aC5wb3coMTAsIE1hdGguYWJzKE1hdGguZmxvb3IoTWF0aC5sb2codGkpL01hdGguTE4xMCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aWNrSW50ZXJ2YWwgPSBNYXRoLmNlaWwodGkvdGVtcCkgKiB0ZW1wOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1heCA9IHRoaXMudGlja0ludGVydmFsICogbnRtYXg7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluID0gLXRoaXMudGlja0ludGVydmFsICogbnRtaW47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vdGhpbmcgZWxzZSwgZG8gYXV0b3NjYWxpbmcgd2hpY2ggd2lsbCB0cnkgdG8gbGluZSB1cCB0aWNrcyBhY3Jvc3MgYXhlcy4KICAgICAgICAgICAgICAgICAgICBlbHNlIHsgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1iZXJUaWNrcyA9PSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpY2tJbnRlcnZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSAzICsgTWF0aC5jZWlsKHJhbmdlIC8gdGhpcy50aWNrSW50ZXJ2YWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IDIgKyBNYXRoLmNlaWwoKGRpbS0odGhpcy50aWNrU3BhY2luZy0xKSkvdGhpcy50aWNrU3BhY2luZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aWNrSW50ZXJ2YWwgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGEgdGljayBpbnRlcnZhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGkgPSByYW5nZS8odGhpcy5udW1iZXJUaWNrcyAtIDEpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aSA8IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gTWF0aC5wb3coMTAsIE1hdGguYWJzKE1hdGguZmxvb3IoTWF0aC5sb2codGkpL01hdGguTE4xMCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aWNrSW50ZXJ2YWwgPSBNYXRoLmNlaWwodGkqdGVtcCp0aGlzLnBhZCkvdGVtcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSAxIC8gdGhpcy50aWNrSW50ZXJ2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBjb21wdXRlIGEgbmljZXIsIG1vcmUgZXZlbiB0aWNrIGludGVydmFsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlbXAgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZyh0aSkvTWF0aC5MTjEwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMudGlja0ludGVydmFsID0gTWF0aC5jZWlsKHRpL3RlbXApICogdGVtcDsKICAgICAgICAgICAgICAgICAgICAgICAgcnJhbmdlID0gdGhpcy50aWNrSW50ZXJ2YWwgKiAodGhpcy5udW1iZXJUaWNrcyAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4gPSAocnJhbmdlIC0gcmFuZ2UpLzI7CiAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbiA9IE1hdGguZmxvb3IodGVtcCoobWluLW1hcmdpbikpL3RlbXA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF4ID0gdGhpcy5taW4gKyBycmFuZ2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgYSBzb21ld2hhdCBkZWNlbnQgZm9ybWF0IHN0cmluZyBpZiBpdCBpcyBuZWVkZWQuCiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHByZWNpc2lvbiBvZiBpbnRlcnZhbCBhbmQgZGV0ZXJtaW5lIGEgZm9ybWF0IHN0cmluZy4KICAgICAgICAgICAgICAgICAgICB2YXIgc2YgPSAkLmpxcGxvdC5nZXRTaWduaWZpY2FudEZpZ3VyZXModGhpcy50aWNrSW50ZXJ2YWwpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgZnN0cjsKCiAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBvbmx5IGEgd2hvbGUgbnVtYmVyLCB1c2UgaW50ZWdlciBmb3JtYXR0aW5nCiAgICAgICAgICAgICAgICAgICAgaWYgKHNmLmRpZ2l0c0xlZnQgPj0gc2Yuc2lnbmlmaWNhbnREaWdpdHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZnN0ciA9ICclZCc7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBNYXRoLm1heCgwLCA1IC0gc2YuZGlnaXRzTGVmdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBNYXRoLm1pbih0ZW1wLCBzZi5kaWdpdHNSaWdodCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZzdHIgPSAnJS4nKyB0ZW1wICsgJ2YnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXV0b0Zvcm1hdFN0cmluZyA9IGZzdHI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgZGVmYXVsdCBhbGdvcml0aG0gd2hpY2ggcGFkcyBlYWNoIGF4aXMgdG8gbWFrZSB0aGUgY2hhcnQKICAgICAgICAgICAgICAgIC8vIGNlbnRlcmVkIG5pY2VseSBvbiB0aGUgZ3JpZC4KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICBybWluID0gKHRoaXMubWluICE9IG51bGwpID8gdGhpcy5taW4gOiBtaW4gLSByYW5nZSoodGhpcy5wYWRNaW4gLSAxKTsKICAgICAgICAgICAgICAgICAgICBybWF4ID0gKHRoaXMubWF4ICE9IG51bGwpID8gdGhpcy5tYXggOiBtYXggKyByYW5nZSoodGhpcy5wYWRNYXggLSAxKTsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHJtYXggLSBybWluOwogICAgICAgIAogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bWJlclRpY2tzID09IG51bGwpewogICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aWNrSW50ZXJ2YWwgaXMgc3BlY2lmaWVkIGJ5IHVzZXIsIHdlIHdpbGwgaWdub3JlIGNvbXB1dGVkIG1heGltdW0uCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heCB3aWxsIGJlIGVxdWFsIG9yIGdyZWF0ZXIgdG8gZml0IGV2ZW4gIyBvZiB0aWNrcy4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGlja0ludGVydmFsICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSBNYXRoLmNlaWwoKHJtYXggLSBybWluKS90aGlzLnRpY2tJbnRlcnZhbCkrMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkaW0gPiAxMDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSBwYXJzZUludCgzKyhkaW0tMTAwKS83NSwgMTApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aWNrSW50ZXJ2YWwgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpY2tJbnRlcnZhbCA9IHJhbmdlIC8gKHRoaXMubnVtYmVyVGlja3MtMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJtYXggPSBybWluICsgdGhpcy50aWNrSW50ZXJ2YWwqKHRoaXMubnVtYmVyVGlja3MgLSAxKTsKICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5taW4gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBybWluID0gcm1heCAtIHRoaXMudGlja0ludGVydmFsKih0aGlzLm51bWJlclRpY2tzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBnZXQgcHJlY2lzaW9uIG9mIGludGVydmFsIGFuZCBkZXRlcm1pbmUgYSBmb3JtYXQgc3RyaW5nLgogICAgICAgICAgICAgICAgICAgIHZhciBzZiA9ICQuanFwbG90LmdldFNpZ25pZmljYW50RmlndXJlcyh0aGlzLnRpY2tJbnRlcnZhbCk7CgogICAgICAgICAgICAgICAgICAgIHZhciBmc3RyOwoKICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIG9ubHkgYSB3aG9sZSBudW1iZXIsIHVzZSBpbnRlZ2VyIGZvcm1hdHRpbmcKICAgICAgICAgICAgICAgICAgICBpZiAoc2YuZGlnaXRzTGVmdCA+PSBzZi5zaWduaWZpY2FudERpZ2l0cykgewogICAgICAgICAgICAgICAgICAgICAgICBmc3RyID0gJyVkJzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IE1hdGgubWF4KDAsIDUgLSBzZi5kaWdpdHNMZWZ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IE1hdGgubWluKHRlbXAsIHNmLmRpZ2l0c1JpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgICAgZnN0ciA9ICclLicrIHRlbXAgKyAnZic7CiAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXV0b0Zvcm1hdFN0cmluZyA9IGZzdHI7CgogICAgICAgICAgICAgICAgICAgIHRoaXMubWluID0gcm1pbjsKICAgICAgICAgICAgICAgICAgICB0aGlzLm1heCA9IHJtYXg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlciAmJiB0aGlzLl9hdXRvRm9ybWF0U3RyaW5nID09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gZml4IGZvciBtaXNsZWFkaW5nIHRpY2sgZGlzcGxheSB3aXRoIHNtYWxsIHJhbmdlIGFuZCBsb3cgcHJlY2lzaW9uLgogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5tYXggLSB0aGlzLm1pbjsKICAgICAgICAgICAgICAgICAgICAvLyBmaWd1cmUgb3V0IHByZWNpc2lvbgogICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wdGljayA9IG5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTsKICAgICAgICAgICAgICAgICAgICAvLyB1c2UgdGhlIHRpY2sgZm9ybWF0U3RyaW5nIG9yLCB0aGUgZGVmYXVsdC4KICAgICAgICAgICAgICAgICAgICB2YXIgZnMgPSB0ZW1wdGljay5mb3JtYXRTdHJpbmcgfHwgJC5qcXBsb3QuY29uZmlnLmRlZmF1bHRUaWNrRm9ybWF0U3RyaW5nOyAKICAgICAgICAgICAgICAgICAgICB2YXIgZnMgPSBmcy5tYXRjaCgkLmpxcGxvdC5zcHJpbnRmLnJlZ2V4KVswXTsKICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2lzaW9uID0gMDsKICAgICAgICAgICAgICAgICAgICBpZiAoZnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZzLnNlYXJjaCgvW2ZGZUVnR3BQXS8pID4gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gZnMubWF0Y2goL1wlXC4oXGR7MCx9KT9bZUVmRmdHcFBdLyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHBhcnNlSW50KG1bMV0sIDEwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IDY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZnMuc2VhcmNoKC9bZGldLykgPiAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyBmYWN0IHdpbGwgYmUgPD0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZhY3QgPSBNYXRoLnBvdygxMCwgLXByZWNpc2lvbik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpY2tJbnRlcnZhbCA8IGZhY3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gY29ycmVjdCB1bmRlcnJhbmdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlck5UID09IG51bGwgJiYgdXNlclRJID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpY2tJbnRlcnZhbCA9IGZhY3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJNYXggPT0gbnVsbCAmJiB1c2VyTWluID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5taW4gPSBNYXRoLmZsb29yKCh0aGlzLl9kYXRhQm91bmRzLm1pbiAtIHRoaXMudGlja0ludGVydmFsKS9mYWN0KSAqIGZhY3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluID0gTWF0aC5mbG9vcih0aGlzLl9kYXRhQm91bmRzLm1pbi9mYWN0KSAqIGZhY3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbiA9PSB0aGlzLl9kYXRhQm91bmRzLm1pbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW4gPSB0aGlzLl9kYXRhQm91bmRzLm1pbiAtIHRoaXMudGlja0ludGVydmFsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubWF4ID0gTWF0aC5jZWlsKCh0aGlzLl9kYXRhQm91bmRzLm1heCArIHRoaXMudGlja0ludGVydmFsKS9mYWN0KSAqIGZhY3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF4ID0gTWF0aC5jZWlsKHRoaXMuX2RhdGFCb3VuZHMubWF4L2ZhY3QpICogZmFjdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4ID09IHRoaXMuX2RhdGFCb3VuZHMubWF4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1heCA9IHRoaXMuX2RhdGFCb3VuZHMubWF4ICsgdGhpcy50aWNrSW50ZXJ2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSAodGhpcy5tYXggLSB0aGlzLm1pbikvdGhpcy50aWNrSW50ZXJ2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLnRvRml4ZWQoMTEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gTWF0aC5jZWlsKG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0gbiArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVzZXJNYXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgb25lIHRpY2sgZm9yIHRvcCBvZiByYW5nZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSAodGhpcy5fZGF0YUJvdW5kcy5tYXggLSB0aGlzLm1pbikgLyB0aGlzLnRpY2tJbnRlcnZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4udG9GaXhlZCgxMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSBNYXRoLmNlaWwobikgKyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1heCA9IHRoaXMubWluICsgdGhpcy50aWNrSW50ZXJ2YWwgKiAodGhpcy5udW1iZXJUaWNrcy0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodXNlck1pbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBvbmUgdGljayBmb3IgYm90dG9tIG9mIHJhbmdlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9ICh0aGlzLm1heCAtIHRoaXMuX2RhdGFCb3VuZHMubWluKSAvIHRoaXMudGlja0ludGVydmFsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi50b0ZpeGVkKDExKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IE1hdGguY2VpbChuKSArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluID0gdGhpcy5tYXggLSB0aGlzLnRpY2tJbnRlcnZhbCAqICh0aGlzLm51bWJlclRpY2tzLTEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGEgbnVtYmVyIG9mIHRpY2tzIHNvIG1heCBpcyB3aXRoaW4gYXhpcyBzY2FsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0gTWF0aC5jZWlsKCh1c2VyTWF4IC0gdXNlck1pbikvdGhpcy50aWNrSW50ZXJ2YWwpICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdXNlcidzIG1pbiBhbmQgbWF4IGRvbid0IGZpdCBldmVubHkgaW4gdGlja3MsIGFkanVzdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB0YWtlcyBjYXJlIG9mIGNhc2VzIHN1Y2ggYXMgdXNlciBtaW4gc2V0IHRvIDAsIG1heCBzZXQgdG8gMy41IGJ1dCB0aWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvcm1hdCBzdHJpbmcgc2V0IHRvICVkIChpbnRlZ2VyIHRpY2tzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbiA9ICBNYXRoLmZsb29yKHVzZXJNaW4qTWF0aC5wb3coMTAsIHByZWNpc2lvbikpL01hdGgucG93KDEwLCBwcmVjaXNpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1heCA9ICBNYXRoLmNlaWwodXNlck1heCpNYXRoLnBvdygxMCwgcHJlY2lzaW9uKSkvTWF0aC5wb3coMTAsIHByZWNpc2lvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubWF4ID0gdGhpcy5taW4gKyB0aGlzLnRpY2tJbnRlcnZhbCoodGhpcy5udW1iZXJUaWNrcy0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IE1hdGguY2VpbCgodGhpcy5tYXggLSB0aGlzLm1pbikvdGhpcy50aWNrSW50ZXJ2YWwpICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHRoaXMuX292ZXJyaWRlRm9ybWF0U3RyaW5nICYmIHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmcgIT0gJycpIHsKICAgICAgICAgICAgICAgIHRoaXMudGlja09wdGlvbnMgPSB0aGlzLnRpY2tPcHRpb25zIHx8IHt9OwogICAgICAgICAgICAgICAgdGhpcy50aWNrT3B0aW9ucy5mb3JtYXRTdHJpbmcgPSB0aGlzLl9hdXRvRm9ybWF0U3RyaW5nOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdCwgdG87CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLm51bWJlclRpY2tzOyBpKyspewogICAgICAgICAgICAgICAgdHQgPSB0aGlzLm1pbiArIGkgKiB0aGlzLnRpY2tJbnRlcnZhbDsKICAgICAgICAgICAgICAgIHQgPSBuZXcgdGhpcy50aWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7CiAgICAgICAgICAgICAgICAvLyB2YXIgdCA9IG5ldyAkLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpOwoKICAgICAgICAgICAgICAgIHQuc2V0VGljayh0dCwgdGhpcy5uYW1lKTsKICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnB1c2godCk7CgogICAgICAgICAgICAgICAgaWYgKGkgPCB0aGlzLm51bWJlclRpY2tzIC0gMSkgewogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajx0aGlzLm1pbm9yVGlja3M7IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICB0dCArPSB0aGlzLnRpY2tJbnRlcnZhbC8odGhpcy5taW5vclRpY2tzKzEpOwogICAgICAgICAgICAgICAgICAgICAgICB0byA9ICQuZXh0ZW5kKHRydWUsIHt9LCB0aGlzLnRpY2tPcHRpb25zLCB7bmFtZTp0aGlzLm5hbWUsIHZhbHVlOnR0LCBsYWJlbDonJywgaXNNaW5vclRpY2s6dHJ1ZX0pOwogICAgICAgICAgICAgICAgICAgICAgICB0ID0gbmV3IHRoaXMudGlja1JlbmRlcmVyKHRvKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0ID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMudGlja0luc2V0KSB7CiAgICAgICAgICAgIHRoaXMubWluID0gdGhpcy5taW4gLSB0aGlzLnRpY2tJbnNldCAqIHRoaXMudGlja0ludGVydmFsOwogICAgICAgICAgICB0aGlzLm1heCA9IHRoaXMubWF4ICsgdGhpcy50aWNrSW5zZXQgKiB0aGlzLnRpY2tJbnRlcnZhbDsKICAgICAgICB9CgogICAgICAgIHRpY2tzID0gbnVsbDsKICAgIH07CiAgICAKICAgIC8vIFVzZWQgdG8gcmVzZXQganVzdCB0aGUgdmFsdWVzIG9mIHRoZSB0aWNrcyBhbmQgdGhlbiByZXBhY2ssIHdoaWNoIHdpbGwKICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBwb3NpdGlvbmluZyBmdW5jdGlvbnMuICBJdCBpcyBhc3N1ZW1kIHRoYXQgdGhlIAogICAgLy8gbnVtYmVyIG9mIHRpY2tzIGlzIHRoZSBzYW1lIGFuZCB0aGUgdmFsdWVzIG9mIHRoZSBuZXcgYXJyYXkgYXJlIGF0IHRoZQogICAgLy8gcHJvcGVyIGludGVydmFsLgogICAgLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggdGhlIHNjb3BlIG9mIGFuIGF4aXMgb2JqZWN0LCBsaWtlOgogICAgLy8KICAgIC8vID4gcGxvdC5heGVzLnlheGlzLnJlbmRlcmVyLnJlc2V0VGlja1ZhbHVlcy5jYWxsKHBsb3QuYXhlcy55YXhpcywgeWFycik7CiAgICAvLwogICAgJC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNldFRpY2tWYWx1ZXMgPSBmdW5jdGlvbihvcHRzKSB7CiAgICAgICAgaWYgKCQuaXNBcnJheShvcHRzKSAmJiBvcHRzLmxlbmd0aCA9PSB0aGlzLl90aWNrcy5sZW5ndGgpIHsKICAgICAgICAgICAgdmFyIHQ7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxvcHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB0ID0gdGhpcy5fdGlja3NbaV07CiAgICAgICAgICAgICAgICB0LnZhbHVlID0gb3B0c1tpXTsKICAgICAgICAgICAgICAgIHQubGFiZWwgPSB0LmZvcm1hdHRlcih0LmZvcm1hdFN0cmluZywgb3B0c1tpXSk7CiAgICAgICAgICAgICAgICB0LmxhYmVsID0gdC5wcmVmaXggKyB0LmxhYmVsOwogICAgICAgICAgICAgICAgdC5fZWxlbS5odG1sKHQubGFiZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHQgPSBudWxsOwogICAgICAgICAgICB0aGlzLm1pbiA9ICQuanFwbG90LmFycmF5TWluKG9wdHMpOwogICAgICAgICAgICB0aGlzLm1heCA9ICQuanFwbG90LmFycmF5TWF4KG9wdHMpOwogICAgICAgICAgICB0aGlzLnBhY2soKTsKICAgICAgICB9CiAgICAgICAgLy8gTm90IGltcGxlbWVudGVkIHlldC4KICAgICAgICAvLyBlbHNlIGlmICgkLmlzUGxhaW5PYmplY3Qob3B0cykpIHsKICAgICAgICAvLyAKICAgICAgICAvLyB9CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBheGlzCiAgICAkLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIucHJvdG90eXBlLnBhY2sgPSBmdW5jdGlvbihwb3MsIG9mZnNldHMpIHsKICAgICAgICAvLyBBZGQgZGVmYXVsdHMgZm9yIHJlcGFja2luZyBmcm9tIHJlc2V0VGlja1ZhbHVlcyBmdW5jdGlvbi4KICAgICAgICBwb3MgPSBwb3MgfHwge307CiAgICAgICAgb2Zmc2V0cyA9IG9mZnNldHMgfHwgdGhpcy5fb2Zmc2V0czsKICAgICAgICAKICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl90aWNrczsKICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7CiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluOwogICAgICAgIHZhciBvZmZtYXggPSBvZmZzZXRzLm1heDsKICAgICAgICB2YXIgb2ZmbWluID0gb2Zmc2V0cy5taW47CiAgICAgICAgdmFyIGxzaG93ID0gKHRoaXMuX2xhYmVsID09IG51bGwpID8gZmFsc2UgOiB0aGlzLl9sYWJlbC5zaG93OwogICAgICAgIAogICAgICAgIGZvciAodmFyIHAgaW4gcG9zKSB7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHAsIHBvc1twXSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMuX29mZnNldHMgPSBvZmZzZXRzOwogICAgICAgIC8vIHBpeGVsbGVuZ3RoIHdpbGwgYmUgKyBmb3IgeCBheGVzIGFuZCAtIGZvciB5IGF4ZXMgYmVjYXN1ZSBwaXhlbHMgYWx3YXlzIG1lYXN1cmVkIGZyb20gdG9wIGxlZnQuCiAgICAgICAgdmFyIHBpeGVsbGVuZ3RoID0gb2ZmbWF4IC0gb2ZmbWluOwogICAgICAgIHZhciB1bml0bGVuZ3RoID0gbWF4IC0gbWluOwogICAgICAgIAogICAgICAgIC8vIHBvaW50IHRvIHVuaXQgYW5kIHVuaXQgdG8gcG9pbnQgY29udmVyc2lvbnMgcmVmZXJlbmNlcyB0byBQbG90IERPTSBlbGVtZW50IHRvcCBsZWZ0IGNvcm5lci4KICAgICAgICBpZiAodGhpcy5icmVha1BvaW50cykgewogICAgICAgICAgICB1bml0bGVuZ3RoID0gdW5pdGxlbmd0aCAtIHRoaXMuYnJlYWtQb2ludHNbMV0gKyB0aGlzLmJyZWFrUG9pbnRzWzBdOwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5wMnUgPSBmdW5jdGlvbihwKXsKICAgICAgICAgICAgICAgIHJldHVybiAocCAtIG9mZm1pbikgKiB1bml0bGVuZ3RoIC8gcGl4ZWxsZW5ndGggKyBtaW47CiAgICAgICAgICAgIH07CiAgICAgICAgCiAgICAgICAgICAgIHRoaXMudTJwID0gZnVuY3Rpb24odSl7CiAgICAgICAgICAgICAgICBpZiAodSA+IHRoaXMuYnJlYWtQb2ludHNbMF0gJiYgdSA8IHRoaXMuYnJlYWtQb2ludHNbMV0pewogICAgICAgICAgICAgICAgICAgIHUgPSB0aGlzLmJyZWFrUG9pbnRzWzBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHUgPD0gdGhpcy5icmVha1BvaW50c1swXSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAodSAtIG1pbikgKiBwaXhlbGxlbmd0aCAvIHVuaXRsZW5ndGggKyBvZmZtaW47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHUgLSB0aGlzLmJyZWFrUG9pbnRzWzFdICsgdGhpcy5icmVha1BvaW50c1swXSAtIG1pbikgKiBwaXhlbGxlbmd0aCAvIHVuaXRsZW5ndGggKyBvZmZtaW47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHRoaXMubmFtZS5jaGFyQXQoMCkgPT0gJ3gnKXsKICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzX3UycCA9IGZ1bmN0aW9uKHUpewogICAgICAgICAgICAgICAgICAgIGlmICh1ID4gdGhpcy5icmVha1BvaW50c1swXSAmJiB1IDwgdGhpcy5icmVha1BvaW50c1sxXSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB0aGlzLmJyZWFrUG9pbnRzWzBdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodSA8PSB0aGlzLmJyZWFrUG9pbnRzWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodSAtIG1pbikgKiBwaXhlbGxlbmd0aCAvIHVuaXRsZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHUgLSB0aGlzLmJyZWFrUG9pbnRzWzFdICsgdGhpcy5icmVha1BvaW50c1swXSAtIG1pbikgKiBwaXhlbGxlbmd0aCAvIHVuaXRsZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzX3AydSA9IGZ1bmN0aW9uKHApewogICAgICAgICAgICAgICAgICAgIHJldHVybiBwICogdW5pdGxlbmd0aCAvIHBpeGVsbGVuZ3RoICsgbWluOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzX3UycCA9IGZ1bmN0aW9uKHUpewogICAgICAgICAgICAgICAgICAgIGlmICh1ID4gdGhpcy5icmVha1BvaW50c1swXSAmJiB1IDwgdGhpcy5icmVha1BvaW50c1sxXSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB0aGlzLmJyZWFrUG9pbnRzWzBdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodSA+PSB0aGlzLmJyZWFrUG9pbnRzWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodSAtIG1heCkgKiBwaXhlbGxlbmd0aCAvIHVuaXRsZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHUgKyB0aGlzLmJyZWFrUG9pbnRzWzFdIC0gdGhpcy5icmVha1BvaW50c1swXSAtIG1heCkgKiBwaXhlbGxlbmd0aCAvIHVuaXRsZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzX3AydSA9IGZ1bmN0aW9uKHApewogICAgICAgICAgICAgICAgICAgIHJldHVybiBwICogdW5pdGxlbmd0aCAvIHBpeGVsbGVuZ3RoICsgbWF4OwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy5wMnUgPSBmdW5jdGlvbihwKXsKICAgICAgICAgICAgICAgIHJldHVybiAocCAtIG9mZm1pbikgKiB1bml0bGVuZ3RoIC8gcGl4ZWxsZW5ndGggKyBtaW47CiAgICAgICAgICAgIH07CiAgICAgICAgCiAgICAgICAgICAgIHRoaXMudTJwID0gZnVuY3Rpb24odSl7CiAgICAgICAgICAgICAgICByZXR1cm4gKHUgLSBtaW4pICogcGl4ZWxsZW5ndGggLyB1bml0bGVuZ3RoICsgb2ZmbWluOwogICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpewogICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNfdTJwID0gZnVuY3Rpb24odSl7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1IC0gbWluKSAqIHBpeGVsbGVuZ3RoIC8gdW5pdGxlbmd0aDsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc19wMnUgPSBmdW5jdGlvbihwKXsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcCAqIHVuaXRsZW5ndGggLyBwaXhlbGxlbmd0aCArIG1pbjsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc191MnAgPSBmdW5jdGlvbih1KXsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHUgLSBtYXgpICogcGl4ZWxsZW5ndGggLyB1bml0bGVuZ3RoOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzX3AydSA9IGZ1bmN0aW9uKHApewogICAgICAgICAgICAgICAgICAgIHJldHVybiBwICogdW5pdGxlbmd0aCAvIHBpeGVsbGVuZ3RoICsgbWF4OwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAodGhpcy5zaG93KSB7CiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aWNrcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGlja3NbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvdyAmJiB0LnNob3dMYWJlbCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpbTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LmNvbnN0cnVjdG9yID09ICQuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIgJiYgdC5hbmdsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBuZWVkIHRvIGFkanVzdCBhdXRvIHBvc2l0aW9uaW5nIGJhc2VkIG9uIHdoaWNoIGF4aXMgdGhpcyBpcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gKHRoaXMubmFtZSA9PSAneGF4aXMnKSA/IDEgOiAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodC5sYWJlbFBvc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYXV0byc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIGF0IGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcCAqIHQuYW5nbGUgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0V2lkdGgoKSArIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbigtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24gYXQgc3RhcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbih0Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0V2lkdGgoKSArIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbigtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5zaW4odC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21pZGRsZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5nZXRXaWR0aCgpLzIgKyB0Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5zaW4oLXQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0V2lkdGgoKS8yICsgdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguc2luKC10Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0V2lkdGgoKS8yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnUycCh0LnZhbHVlKSArIHNoaW0gKyAncHgnOwogICAgICAgICAgICAgICAgICAgICAgICB0Ll9lbGVtLmNzcygnbGVmdCcsIHZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHQucGFjaygpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChsc2hvdykgewogICAgICAgICAgICAgICAgICAgIHZhciB3ID0gdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5fZWxlbS5jc3MoJ2xlZnQnLCBvZmZtaW4gKyBwaXhlbGxlbmd0aC8yIC0gdy8yICsgJ3B4Jyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneGF4aXMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcygnYm90dG9tJywgJzBweCcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCd0b3AnLCAnMHB4Jyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLnBhY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aWNrcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGlja3NbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvdyAmJiB0LnNob3dMYWJlbCkgeyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpbTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlciAmJiB0LmFuZ2xlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5lZWQgdG8gYWRqdXN0IGF1dG8gcG9zaXRpb25pbmcgYmFzZWQgb24gd2hpY2ggYXhpcyB0aGlzIGlzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSAodGhpcy5uYW1lID09ICd5YXhpcycpID8gMSA6IC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0LmxhYmVsUG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24gYXQgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgKiB0LmFuZ2xlIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5jb3MoLXQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldEhlaWdodCgpICsgdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguY29zKHQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuYW5nbGUgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLmNvcygtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkgKyB0Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5jb3ModC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWlkZGxlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHQuYW5nbGUgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkvMiArIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbigtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkvMiAtIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbih0Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldEhlaWdodCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldEhlaWdodCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnUycCh0LnZhbHVlKSArIHNoaW0gKyAncHgnOwogICAgICAgICAgICAgICAgICAgICAgICB0Ll9lbGVtLmNzcygndG9wJywgdmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgdC5wYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGxzaG93KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGggPSB0aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5fZWxlbS5jc3MoJ3RvcCcsIG9mZm1heCAtIHBpeGVsbGVuZ3RoLzIgLSBoLzIgKyAncHgnKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lID09ICd5YXhpcycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCdsZWZ0JywgJzBweCcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCdyaWdodCcsICcwcHgnKTsKICAgICAgICAgICAgICAgICAgICB9ICAgCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwucGFjaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aWNrcyA9IG51bGw7CiAgICB9OwoKCiAgICAvKioKICAgICogVGhlIGZvbGxvd2luZyBjb2RlIHdhcyBnZW5lcmFvdXNseSBnaXZlbiB0byBtZSBhIHdoaWxlIGJhY2sgYnkgU2NvdHQgUHJhaGwuCiAgICAqIEhlIGRpZCBhIGdvb2Qgam9iIGF0IGNvbXB1dGluZyBheGVzIG1pbiwgbWF4IGFuZCBudW1iZXIgb2YgdGlja3MgZm9yIHRoZSAKICAgICogY2FzZSB3aGVyZSB0aGUgdXNlciBoYXMgbm90IHNldCBhbnkgc2NhbGUgcmVsYXRlZCBwYXJhbWV0ZXJzICh0aWNrSW50ZXJ2YWwsCiAgICAqIG51bWJlclRpY2tzLCBtaW4gb3IgbWF4KS4gIEkgaGFkIGlnbm9yZWQgdGhpcyB1c2UgY2FzZSBmb3IgYSBsb25nIHRpbWUsCiAgICAqIGZvY3VzaW5nIG9uIHRoZSBtb3JlIGRpZmZpY3VsdCBjYXNlIHdoZXJlIHVzZXIgaGFzIHNldCBzb21lIG9wdGlvbiBjb250cm9sbGluZwogICAgKiB0aWNrIGdlbmVyYXRpb24uICBBbnl3YXksIGFib3V0IHRpbWUgSSBnb3QgdGhpcyBpbnRvIGpxUGxvdC4KICAgICogVGhhbmtzIFNjb3R0ISEKICAgICovCiAgICAKICAgIC8qKgogICAgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2NvdHQgUHJhaGwKICAgICogVGhlIG5leHQgdGhyZWUgcm91dGluZXMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHVzZSBpbiBhbGwgcGVyc29uYWwgCiAgICAqIG9yIGNvbW1lcmNpYWwgcHJvamVjdHMgdW5kZXIgYm90aCB0aGUgTUlUIGFuZCBHUEwgdmVyc2lvbiAyLjAgbGljZW5zZXMuIAogICAgKiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCAKICAgICogYW5kIHVzZSBpdCBhY2NvcmRpbmdseS4gCiAgICAqLwoKICAgIC8vIEEgZ29vZCBmb3JtYXQgc3RyaW5nIGRlcGVuZHMgb24gdGhlIGludGVydmFsLiBJZiB0aGUgaW50ZXJ2YWwgaXMgZ3JlYXRlciAKICAgIC8vIHRoYW4gMSB0aGVuIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2hvdyBhbnkgZGVjaW1hbCBkaWdpdHMuIElmIGl0IGlzIDwgMS4wLCB0aGVuCiAgICAvLyB1c2UgdGhlIG1hZ25pdHVkZSBvZiB0aGUgaW50ZXJ2YWwgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZGlnaXRzIHRvIHNob3cuCiAgICBmdW5jdGlvbiBiZXN0Rm9ybWF0U3RyaW5nIChpbnRlcnZhbCkKICAgIHsKICAgICAgICB2YXIgZnN0cjsKICAgICAgICBpbnRlcnZhbCA9IE1hdGguYWJzKGludGVydmFsKTsKICAgICAgICBpZiAoaW50ZXJ2YWwgPj0gMTApIHsKICAgICAgICAgICAgZnN0ciA9ICclZCc7CiAgICAgICAgfQoKICAgICAgICBlbHNlIGlmIChpbnRlcnZhbCA+IDEpIHsKICAgICAgICAgICAgaWYgKGludGVydmFsID09PSBwYXJzZUludChpbnRlcnZhbCwgMTApKSB7CiAgICAgICAgICAgICAgICBmc3RyID0gJyVkJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGZzdHIgPSAnJS4xZic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgZXhwdiA9IC1NYXRoLmZsb29yKE1hdGgubG9nKGludGVydmFsKS9NYXRoLkxOMTApOwogICAgICAgICAgICBmc3RyID0gJyUuJyArIGV4cHYgKyAnZic7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBmc3RyOyAKICAgIH0KCiAgICB2YXIgX2ZhY3RvcnMgPSBbMC4xLCAwLjIsIDAuMywgMC40LCAwLjUsIDAuOCwgMSwgMiwgMywgNCwgNV07CgogICAgdmFyIF9nZXRMb3dlckZhY3RvciA9IGZ1bmN0aW9uKGYpIHsKICAgICAgICB2YXIgaSA9IF9mYWN0b3JzLmluZGV4T2YoZik7CiAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgIHJldHVybiBfZmFjdG9yc1tpLTFdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIF9mYWN0b3JzW19mYWN0b3JzLmxlbmd0aCAtIDFdIC8gMTAwOwogICAgICAgIH0KICAgIH07CgogICAgdmFyIF9nZXRIaWdoZXJGYWN0b3IgPSBmdW5jdGlvbihmKSB7CiAgICAgICAgdmFyIGkgPSBfZmFjdG9ycy5pbmRleE9mKGYpOwogICAgICAgIGlmIChpIDwgX2ZhY3RvcnMubGVuZ3RoLTEpIHsKICAgICAgICAgICAgcmV0dXJuIF9mYWN0b3JzW2krMV07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gX2ZhY3RvcnNbMF0gKiAxMDA7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBHaXZlbiBhIGZpeGVkIG1pbmltdW0gYW5kIG1heGltdW0gYW5kIGEgdGFyZ2V0IG51bWJlciBvdCB0aWNrcwogICAgLy8gZmlndXJlIG91dCB0aGUgYmVzdCBpbnRlcnZhbCBhbmQgCiAgICAvLyByZXR1cm4gbWluLCBtYXgsIG51bWJlciB0aWNrcywgZm9ybWF0IHN0cmluZyBhbmQgdGljayBpbnRlcnZhbAogICAgZnVuY3Rpb24gYmVzdENvbnN0cmFpbmVkSW50ZXJ2YWwobWluLCBtYXgsIG50dGFyZ2V0KSB7CiAgICAgICAgLy8gcnVuIHRocm91Z2ggcG9zc2libGUgbnVtYmVyIHRvIHRpY2tzIGFuZCBzZWUgd2hpY2ggaW50ZXJ2YWwgaXMgYmVzdAogICAgICAgIHZhciBsb3cgPSBNYXRoLmZsb29yKG50dGFyZ2V0LzIpOwogICAgICAgIHZhciBoaSA9IE1hdGguY2VpbChudHRhcmdldCoxLjUpOwogICAgICAgIHZhciBiYWRuZXNzID0gTnVtYmVyLk1BWF9WQUxVRTsKICAgICAgICB2YXIgciA9IChtYXggLSBtaW4pOwogICAgICAgIHZhciB0ZW1wOwogICAgICAgIHZhciBzZDsKICAgICAgICB2YXIgYmVzdE5UOwogICAgICAgIHZhciBnc2YgPSAkLmpxcGxvdC5nZXRTaWduaWZpY2FudEZpZ3VyZXM7CiAgICAgICAgdmFyIGZzZDsKICAgICAgICB2YXIgZnM7CiAgICAgICAgdmFyIGN1cnJlbnROVDsKICAgICAgICB2YXIgYmVzdFByZWM7CgogICAgICAgIGZvciAodmFyIGk9MCwgbD1oaS1sb3crMTsgaTxsOyBpKyspIHsKICAgICAgICAgICAgY3VycmVudE5UID0gbG93ICsgaTsKICAgICAgICAgICAgdGVtcCA9IHIvKGN1cnJlbnROVC0xKTsKICAgICAgICAgICAgc2QgPSBnc2YodGVtcCk7CgogICAgICAgICAgICB0ZW1wID0gTWF0aC5hYnMobnR0YXJnZXQgLSBjdXJyZW50TlQpICsgc2QuZGlnaXRzUmlnaHQ7CiAgICAgICAgICAgIGlmICh0ZW1wIDwgYmFkbmVzcykgewogICAgICAgICAgICAgICAgYmFkbmVzcyA9IHRlbXA7CiAgICAgICAgICAgICAgICBiZXN0TlQgPSBjdXJyZW50TlQ7CiAgICAgICAgICAgICAgICBiZXN0UHJlYyA9IHNkLmRpZ2l0c1JpZ2h0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRlbXAgPT09IGJhZG5lc3MpIHsKICAgICAgICAgICAgICAgIC8vIGxldCBuaWNlciB0aWNrcyB0cnVtcCBudW1iZXIgb3QgdGlja3MKICAgICAgICAgICAgICAgIGlmIChzZC5kaWdpdHNSaWdodCA8IGJlc3RQcmVjKSB7CiAgICAgICAgICAgICAgICAgICAgYmVzdE5UID0gY3VycmVudE5UOwogICAgICAgICAgICAgICAgICAgIGJlc3RQcmVjID0gc2QuZGlnaXRzUmlnaHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBmc2QgPSBNYXRoLm1heChiZXN0UHJlYywgTWF0aC5tYXgoZ3NmKG1pbikuZGlnaXRzUmlnaHQsIGdzZihtYXgpLmRpZ2l0c1JpZ2h0KSk7CiAgICAgICAgaWYgKGZzZCA9PT0gMCkgewogICAgICAgICAgICBmcyA9ICclZCc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBmcyA9ICclLicgKyBmc2QgKyAnZic7CiAgICAgICAgfQogICAgICAgIHRlbXAgPSByIC8gKGJlc3ROVCAtIDEpOwogICAgICAgIC8vIG1pbiwgbWF4LCBudW1iZXIgdGlja3MsIGZvcm1hdCBzdHJpbmcsIHRpY2sgaW50ZXJ2YWwKICAgICAgICByZXR1cm4gW21pbiwgbWF4LCBiZXN0TlQsIGZzLCB0ZW1wXTsKICAgIH0KCiAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIGFuIGludGVydmFsIG9mIGZvcm0gMiAqIDEwXm4sIDUgKiAxMF5uIG9yIDEwICogMTBebgogICAgLy8gaXQgaXMgYmFzZWQgc29sZXkgb24gdGhlIHJhbmdlIGFuZCBudW1iZXIgb2YgdGlja3MuICBTbyBpZiB1c2VyIHNwZWNpZmllcwogICAgLy8gbnVtYmVyIG9mIHRpY2tzLCB1c2UgdGhpcy4KICAgIGZ1bmN0aW9uIGJlc3RJbnRlcnZhbChyYW5nZSwgbnVtYmVyVGlja3MpIHsKICAgICAgICBudW1iZXJUaWNrcyA9IG51bWJlclRpY2tzIHx8IDc7CiAgICAgICAgdmFyIG1pbmltdW0gPSByYW5nZSAvIChudW1iZXJUaWNrcyAtIDEpOwogICAgICAgIHZhciBtYWduaXR1ZGUgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZyhtaW5pbXVtKSAvIE1hdGguTE4xMCkpOwogICAgICAgIHZhciByZXNpZHVhbCA9IG1pbmltdW0gLyBtYWduaXR1ZGU7CiAgICAgICAgdmFyIGludGVydmFsOwogICAgICAgIC8vICJuaWNlc3QiIHJhbmdlcyBhcmUgMSwgMiwgNSBvciBwb3dlcnMgb2YgdGhlc2UuCiAgICAgICAgLy8gZm9yIG1hZ25pdHVkZXMgYmVsb3cgMSwgb25seSBhbGxvdyB0aGVzZS4gCiAgICAgICAgaWYgKG1hZ25pdHVkZSA8IDEpIHsKICAgICAgICAgICAgaWYgKHJlc2lkdWFsID4gNSkgewogICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSAxMCAqIG1hZ25pdHVkZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChyZXNpZHVhbCA+IDIpIHsKICAgICAgICAgICAgICAgIGludGVydmFsID0gNSAqIG1hZ25pdHVkZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChyZXNpZHVhbCA+IDEpIHsKICAgICAgICAgICAgICAgIGludGVydmFsID0gMiAqIG1hZ25pdHVkZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGludGVydmFsID0gbWFnbml0dWRlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIGZvciBsYXJnZSByYW5nZXMgKHdob2xlIGludGVnZXJzKSwgYWxsb3cgaW50ZXJ2YWxzIGxpa2UgMywgNCBvciBwb3dlcnMgb2YgdGhlc2UuCiAgICAgICAgLy8gdGhpcyBoZWxwcyBhIGxvdCB3aXRoIHBvb3IgY2hvaWNlcyBmb3IgbnVtYmVyIG9mIHRpY2tzLiAKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKHJlc2lkdWFsID4gNSkgewogICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSAxMCAqIG1hZ25pdHVkZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChyZXNpZHVhbCA+IDQpIHsKICAgICAgICAgICAgICAgIGludGVydmFsID0gNSAqIG1hZ25pdHVkZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChyZXNpZHVhbCA+IDMpIHsKICAgICAgICAgICAgICAgIGludGVydmFsID0gNCAqIG1hZ25pdHVkZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChyZXNpZHVhbCA+IDIpIHsKICAgICAgICAgICAgICAgIGludGVydmFsID0gMyAqIG1hZ25pdHVkZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChyZXNpZHVhbCA+IDEpIHsKICAgICAgICAgICAgICAgIGludGVydmFsID0gMiAqIG1hZ25pdHVkZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGludGVydmFsID0gbWFnbml0dWRlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW50ZXJ2YWw7CiAgICB9CgogICAgLy8gVGhpcyB3aWxsIHJldHVybiBhbiBpbnRlcnZhbCBvZiBmb3JtIDIgKiAxMF5uLCA1ICogMTBebiBvciAxMCAqIDEwXm4KICAgIC8vIGl0IGlzIGJhc2VkIHNvbGV5IG9uIHRoZSByYW5nZSBvZiBkYXRhLCBudW1iZXIgb2YgdGlja3MgbXVzdCBiZSBjb21wdXRlZCBsYXRlci4KICAgIGZ1bmN0aW9uIGJlc3RMaW5lYXJJbnRlcnZhbChyYW5nZSwgc2NhbGVmYWN0KSB7CiAgICAgICAgc2NhbGVmYWN0ID0gc2NhbGVmYWN0IHx8IDE7CiAgICAgICAgdmFyIGV4cHYgPSBNYXRoLmZsb29yKE1hdGgubG9nKHJhbmdlKS9NYXRoLkxOMTApOwogICAgICAgIHZhciBtYWduaXR1ZGUgPSBNYXRoLnBvdygxMCwgZXhwdik7CiAgICAgICAgLy8gMCA8IGYgPCAxMAogICAgICAgIHZhciBmID0gcmFuZ2UgLyBtYWduaXR1ZGU7CiAgICAgICAgdmFyIGZhY3Q7CiAgICAgICAgLy8gZm9yIGxhcmdlIHBsb3RzLCBzY2FsZWZhY3Qgd2lsbCBkZWNyZWFzZSBmIGFuZCBpbmNyZWFzZSBudW1iZXIgb2YgdGlja3MuCiAgICAgICAgLy8gZm9yIHNtYWxsIHBsb3RzLCBzY2FsZWZhY3Qgd2lsbCBpbmNyZWFzZSBmIGFuZCBkZWNyZWFzZSBudW1iZXIgb2YgdGlja3MuCiAgICAgICAgZiA9IGYvc2NhbGVmYWN0OwoKICAgICAgICAvLyBmb3IgbGFyZ2UgcGxvdHMsIHNtYWxsZXIgaW50ZXJ2YWwsIG1vcmUgdGlja3MuCiAgICAgICAgaWYgKGY8PTAuMzgpIHsKICAgICAgICAgICAgZmFjdCA9IDAuMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZjw9MS42KSB7CiAgICAgICAgICAgIGZhY3QgPSAwLjI7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGY8PTQuMCkgewogICAgICAgICAgICBmYWN0ID0gMC41OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChmPD04LjApIHsKICAgICAgICAgICAgZmFjdCA9IDEuMDsKICAgICAgICB9CiAgICAgICAgLy8gZm9yIHZlcnkgc21hbGwgcGxvdHMsIGxhcmdlciBpbnRlcnZhbCwgbGVzcyB0aWNrcyBpbiBudW1iZXIgdGlja3MKICAgICAgICBlbHNlIGlmIChmPD0xNi4wKSB7CiAgICAgICAgICAgIGZhY3QgPSAyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZmFjdCA9IDU7CiAgICAgICAgfSAKCiAgICAgICAgcmV0dXJuIGZhY3QqbWFnbml0dWRlOyAKICAgIH0KCiAgICBmdW5jdGlvbiBiZXN0TGluZWFyQ29tcG9uZW50cyhyYW5nZSwgc2NhbGVmYWN0KSB7CiAgICAgICAgdmFyIGV4cHYgPSBNYXRoLmZsb29yKE1hdGgubG9nKHJhbmdlKS9NYXRoLkxOMTApOwogICAgICAgIHZhciBtYWduaXR1ZGUgPSBNYXRoLnBvdygxMCwgZXhwdik7CiAgICAgICAgLy8gMCA8IGYgPCAxMAogICAgICAgIHZhciBmID0gcmFuZ2UgLyBtYWduaXR1ZGU7CiAgICAgICAgdmFyIGludGVydmFsOwogICAgICAgIHZhciBmYWN0OwogICAgICAgIC8vIGZvciBsYXJnZSBwbG90cywgc2NhbGVmYWN0IHdpbGwgZGVjcmVhc2UgZiBhbmQgaW5jcmVhc2UgbnVtYmVyIG9mIHRpY2tzLgogICAgICAgIC8vIGZvciBzbWFsbCBwbG90cywgc2NhbGVmYWN0IHdpbGwgaW5jcmVhc2UgZiBhbmQgZGVjcmVhc2UgbnVtYmVyIG9mIHRpY2tzLgogICAgICAgIGYgPSBmL3NjYWxlZmFjdDsKCiAgICAgICAgLy8gZm9yIGxhcmdlIHBsb3RzLCBzbWFsbGVyIGludGVydmFsLCBtb3JlIHRpY2tzLgogICAgICAgIGlmIChmPD0wLjM4KSB7CiAgICAgICAgICAgIGZhY3QgPSAwLjE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGY8PTEuNikgewogICAgICAgICAgICBmYWN0ID0gMC4yOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChmPD00LjApIHsKICAgICAgICAgICAgZmFjdCA9IDAuNTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZjw9OC4wKSB7CiAgICAgICAgICAgIGZhY3QgPSAxLjA7CiAgICAgICAgfQogICAgICAgIC8vIGZvciB2ZXJ5IHNtYWxsIHBsb3RzLCBsYXJnZXIgaW50ZXJ2YWwsIGxlc3MgdGlja3MgaW4gbnVtYmVyIHRpY2tzCiAgICAgICAgZWxzZSBpZiAoZjw9MTYuMCkgewogICAgICAgICAgICBmYWN0ID0gMjsKICAgICAgICB9CiAgICAgICAgLy8gZWxzZSBpZiAoZjw9MjAuMCkgewogICAgICAgIC8vICAgICBmYWN0ID0gMzsKICAgICAgICAvLyB9CiAgICAgICAgLy8gZWxzZSBpZiAoZjw9MjQuMCkgewogICAgICAgIC8vICAgICBmYWN0ID0gNDsKICAgICAgICAvLyB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZhY3QgPSA1OwogICAgICAgIH0gCgogICAgICAgIGludGVydmFsID0gZmFjdCAqIG1hZ25pdHVkZTsKCiAgICAgICAgcmV0dXJuIFtpbnRlcnZhbCwgZmFjdCwgbWFnbml0dWRlXTsKICAgIH0KCiAgICAvLyBHaXZlbiB0aGUgbWluIGFuZCBtYXggZm9yIGEgZGF0YXNldCwgcmV0dXJuIHN1aXRhYmxlIGVuZHBvaW50cwogICAgLy8gZm9yIHRoZSBncmFwaGluZywgYSBnb29kIG51bWJlciBmb3IgdGhlIG51bWJlciBvZiB0aWNrcywgYW5kIGEKICAgIC8vIGZvcm1hdCBzdHJpbmcgc28gdGhhdCBleHRyYW5lb3VzIGRpZ2l0cyBhcmUgbm90IGRpc3BsYXllZC4KICAgIC8vIHJldHVybmVkIGlzIGFuIGFycmF5IGNvbnRhaW5pbmcgW21pbiwgbWF4LCBuVGlja3MsIGZvcm1hdF0KICAgICQuanFwbG90LkxpbmVhclRpY2tHZW5lcmF0b3IgPSBmdW5jdGlvbihheGlzX21pbiwgYXhpc19tYXgsIHNjYWxlZmFjdCwgbnVtYmVyVGlja3MsIGtlZXBNaW4sIGtlZXBNYXgpIHsKICAgICAgICAvLyBTZXQgdG8gcHJlc2VydmUgRUlUSEVSIG1pbiBPUiBtYXguCiAgICAgICAgLy8gSWYgbWluIGlzIHByZXNlcnZlZCwgbWF4IG11c3QgYmUgZnJlZS4KICAgICAgICBrZWVwTWluID0gKGtlZXBNaW4gPT09IG51bGwpID8gZmFsc2UgOiBrZWVwTWluOwogICAgICAgIGtlZXBNYXggPSAoa2VlcE1heCA9PT0gbnVsbCB8fCBrZWVwTWluKSA/IGZhbHNlIDoga2VlcE1heDsKICAgICAgICAvLyBpZiBlbmRwb2ludHMgYXJlIGVxdWFsIHRyeSB0byBpbmNsdWRlIHplcm8gb3RoZXJ3aXNlIGluY2x1ZGUgb25lCiAgICAgICAgaWYgKGF4aXNfbWluID09PSBheGlzX21heCkgewogICAgICAgICAgICBheGlzX21heCA9IChheGlzX21heCkgPyAwIDogMTsKICAgICAgICB9CgogICAgICAgIHNjYWxlZmFjdCA9IHNjYWxlZmFjdCB8fCAxLjA7CgogICAgICAgIC8vIG1ha2Ugc3VyZSByYW5nZSBpcyBwb3NpdGl2ZQogICAgICAgIGlmIChheGlzX21heCA8IGF4aXNfbWluKSB7CiAgICAgICAgICAgIHZhciBhID0gYXhpc19tYXg7CiAgICAgICAgICAgIGF4aXNfbWF4ID0gYXhpc19taW47CiAgICAgICAgICAgIGF4aXNfbWluID0gYTsKICAgICAgICB9CgogICAgICAgIHZhciByID0gW107CiAgICAgICAgdmFyIHNzID0gYmVzdExpbmVhckludGVydmFsKGF4aXNfbWF4IC0gYXhpc19taW4sIHNjYWxlZmFjdCk7CgogICAgICAgIHZhciBnc2YgPSAkLmpxcGxvdC5nZXRTaWduaWZpY2FudEZpZ3VyZXM7CiAgICAgICAgCiAgICAgICAgaWYgKG51bWJlclRpY2tzID09IG51bGwpIHsKCiAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgdGhlIGF4aXMgbWluLCBtYXggYW5kIG51bWJlciBvZiB0aWNrcwogICAgICAgICAgICAvLyB0aGUgbWluIGFuZCBtYXggd2lsbCBiZSBzb21lIG11bHRpcGxlIG9mIHRoZSB0aWNrIGludGVydmFsLAogICAgICAgICAgICAvLyAxKjEwXm4sIDIqMTBebiBvciA1KjEwXm4uICBUaGlzIGdhdXJhbnRlZXMgdGhhdCwgaWYgdGhlCiAgICAgICAgICAgIC8vIGF4aXMgbWluIGlzIG5lZ2F0aXZlLCAwIHdpbGwgYmUgYSB0aWNrLgogICAgICAgICAgICBpZiAoIWtlZXBNaW4gJiYgIWtlZXBNYXgpIHsKICAgICAgICAgICAgICAgIHJbMF0gPSBNYXRoLmZsb29yKGF4aXNfbWluIC8gc3MpICogc3M7ICAvLyBtaW4KICAgICAgICAgICAgICAgIHJbMV0gPSBNYXRoLmNlaWwoYXhpc19tYXggLyBzcykgKiBzczsgICAvLyBtYXgKICAgICAgICAgICAgICAgIHJbMl0gPSBNYXRoLnJvdW5kKChyWzFdLXJbMF0pL3NzKzEuMCk7ICAvLyBudW1iZXIgb2YgdGlja3MKICAgICAgICAgICAgICAgIHJbM10gPSBiZXN0Rm9ybWF0U3RyaW5nKHNzKTsgICAgICAgICAgICAvLyBmb3JtYXQgc3RyaW5nCiAgICAgICAgICAgICAgICByWzRdID0gc3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGljayBJbnRlcnZhbAogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIGlmIChrZWVwTWluKSB7CiAgICAgICAgICAgICAgICByWzBdID0gYXhpc19taW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pbgogICAgICAgICAgICAgICAgclsyXSA9IE1hdGguY2VpbCgoYXhpc19tYXggLSBheGlzX21pbikgLyBzcyArIDEuMCk7ICAgICAvLyBudW1iZXIgb2YgdGlja3MKICAgICAgICAgICAgICAgIHJbMV0gPSBheGlzX21pbiArIChyWzJdIC0gMSkgKiBzczsgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4CiAgICAgICAgICAgICAgICB2YXIgZGlnaXRzTWluID0gZ3NmKGF4aXNfbWluKS5kaWdpdHNSaWdodDsKICAgICAgICAgICAgICAgIHZhciBkaWdpdHNTUyA9IGdzZihzcykuZGlnaXRzUmlnaHQ7CiAgICAgICAgICAgICAgICBpZiAoZGlnaXRzTWluIDwgZGlnaXRzU1MpIHsKICAgICAgICAgICAgICAgICAgICByWzNdID0gYmVzdEZvcm1hdFN0cmluZyhzcyk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9ybWF0IHN0cmluZwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgclszXSA9ICclLicgKyBkaWdpdHNNaW4gKyAnZic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByWzRdID0gc3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRpY2sgSW50ZXJ2YWwKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxzZSBpZiAoa2VlcE1heCkgewogICAgICAgICAgICAgICAgclsxXSA9IGF4aXNfbWF4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXgKICAgICAgICAgICAgICAgIHJbMl0gPSBNYXRoLmNlaWwoKGF4aXNfbWF4IC0gYXhpc19taW4pIC8gc3MgKyAxLjApOyAgICAgLy8gbnVtYmVyIG9mIHRpY2tzCiAgICAgICAgICAgICAgICByWzBdID0gYXhpc19tYXggLSAoclsyXSAtIDEpICogc3M7ICAgICAgICAgICAgICAgICAgICAgIC8vIG1pbgogICAgICAgICAgICAgICAgdmFyIGRpZ2l0c01heCA9IGdzZihheGlzX21heCkuZGlnaXRzUmlnaHQ7CiAgICAgICAgICAgICAgICB2YXIgZGlnaXRzU1MgPSBnc2Yoc3MpLmRpZ2l0c1JpZ2h0OwogICAgICAgICAgICAgICAgaWYgKGRpZ2l0c01heCA8IGRpZ2l0c1NTKSB7CiAgICAgICAgICAgICAgICAgICAgclszXSA9IGJlc3RGb3JtYXRTdHJpbmcoc3MpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvcm1hdCBzdHJpbmcKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJbM10gPSAnJS4nICsgZGlnaXRzTWF4ICsgJ2YnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcls0XSA9IHNzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aWNrIEludGVydmFsCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgdGVtcHIgPSBbXTsKCiAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgdGhlIGF4aXMgbWluLCBtYXggYW5kIG51bWJlciBvZiB0aWNrcwogICAgICAgICAgICAvLyB0aGUgbWluIGFuZCBtYXggd2lsbCBiZSBzb21lIG11bHRpcGxlIG9mIHRoZSB0aWNrIGludGVydmFsLAogICAgICAgICAgICAvLyAxKjEwXm4sIDIqMTBebiBvciA1KjEwXm4uICBUaGlzIGdhdXJhbnRlZXMgdGhhdCwgaWYgdGhlCiAgICAgICAgICAgIC8vIGF4aXMgbWluIGlzIG5lZ2F0aXZlLCAwIHdpbGwgYmUgYSB0aWNrLgogICAgICAgICAgICB0ZW1wclswXSA9IE1hdGguZmxvb3IoYXhpc19taW4gLyBzcykgKiBzczsgIC8vIG1pbgogICAgICAgICAgICB0ZW1wclsxXSA9IE1hdGguY2VpbChheGlzX21heCAvIHNzKSAqIHNzOyAgIC8vIG1heAogICAgICAgICAgICB0ZW1wclsyXSA9IE1hdGgucm91bmQoKHRlbXByWzFdLXRlbXByWzBdKS9zcysxLjApOyAgICAvLyBudW1iZXIgb2YgdGlja3MKICAgICAgICAgICAgdGVtcHJbM10gPSBiZXN0Rm9ybWF0U3RyaW5nKHNzKTsgICAgICAgICAgICAvLyBmb3JtYXQgc3RyaW5nCiAgICAgICAgICAgIHRlbXByWzRdID0gc3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGljayBJbnRlcnZhbAoKICAgICAgICAgICAgLy8gZmlyc3QsIHNlZSBpZiB3ZSBoYXBwZW4gdG8gZ2V0IHRoZSByaWdodCBudW1iZXIgb2YgdGlja3MKICAgICAgICAgICAgaWYgKHRlbXByWzJdID09PSBudW1iZXJUaWNrcykgewogICAgICAgICAgICAgICAgciA9IHRlbXByOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICB2YXIgbmV3dGkgPSBiZXN0SW50ZXJ2YWwodGVtcHJbMV0gLSB0ZW1wclswXSwgbnVtYmVyVGlja3MpOwoKICAgICAgICAgICAgICAgIHJbMF0gPSB0ZW1wclswXTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBtaW4KICAgICAgICAgICAgICAgIHJbMl0gPSBudW1iZXJUaWNrczsgICAgICAgICAgICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3MKICAgICAgICAgICAgICAgIHJbNF0gPSBuZXd0aTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aWNrIGludGVydmFsCiAgICAgICAgICAgICAgICByWzNdID0gYmVzdEZvcm1hdFN0cmluZyhuZXd0aSk7ICAgICAgICAgLy8gZm9ybWF0IHN0cmluZwogICAgICAgICAgICAgICAgclsxXSA9IHJbMF0gKyAoclsyXSAtIDEpICogcls0XTsgICAgICAgIC8vIG1heAogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcjsKICAgIH07CgogICAgJC5qcXBsb3QuTGluZWFyVGlja0dlbmVyYXRvci5iZXN0TGluZWFySW50ZXJ2YWwgPSBiZXN0TGluZWFySW50ZXJ2YWw7CiAgICAkLmpxcGxvdC5MaW5lYXJUaWNrR2VuZXJhdG9yLmJlc3RJbnRlcnZhbCA9IGJlc3RJbnRlcnZhbDsKICAgICQuanFwbG90LkxpbmVhclRpY2tHZW5lcmF0b3IuYmVzdExpbmVhckNvbXBvbmVudHMgPSBiZXN0TGluZWFyQ29tcG9uZW50czsKICAgICQuanFwbG90LkxpbmVhclRpY2tHZW5lcmF0b3IuYmVzdENvbnN0cmFpbmVkSW50ZXJ2YWwgPSBiZXN0Q29uc3RyYWluZWRJbnRlcnZhbDsKCgogICAgLy8gY2xhc3M6ICQuanFwbG90Lk1hcmtlclJlbmRlcmVyCiAgICAvLyBUaGUgZGVmYXVsdCBqcVBsb3QgbWFya2VyIHJlbmRlcmVyLCByZW5kZXJpbmcgdGhlIHBvaW50cyBvbiB0aGUgbGluZS4KICAgICQuanFwbG90Lk1hcmtlclJlbmRlcmVyID0gZnVuY3Rpb24ob3B0aW9ucyl7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAKICAgICAgICAvLyBwcm9wOiBzaG93CiAgICAgICAgLy8gd2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgbWFya2VyLgogICAgICAgIHRoaXMuc2hvdyA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogc3R5bGUKICAgICAgICAvLyBPbmUgb2YgZGlhbW9uZCwgY2lyY2xlLCBzcXVhcmUsIHgsIHBsdXMsIGRhc2gsIGZpbGxlZERpYW1vbmQsIGZpbGxlZENpcmNsZSwgZmlsbGVkU3F1YXJlCiAgICAgICAgdGhpcy5zdHlsZSA9ICdmaWxsZWRDaXJjbGUnOwogICAgICAgIC8vIHByb3A6IGxpbmVXaWR0aAogICAgICAgIC8vIHNpemUgb2YgdGhlIGxpbmUgZm9yIG5vbi1maWxsZWQgbWFya2Vycy4KICAgICAgICB0aGlzLmxpbmVXaWR0aCA9IDI7CiAgICAgICAgLy8gcHJvcDogc2l6ZQogICAgICAgIC8vIFNpemUgb2YgdGhlIG1hcmtlciAoZGlhbWV0ZXIgb3IgY2lyY2xlLCBsZW5ndGggb2YgZWRnZSBvZiBzcXVhcmUsIGV0Yy4pCiAgICAgICAgdGhpcy5zaXplID0gOS4wOwogICAgICAgIC8vIHByb3A6IGNvbG9yCiAgICAgICAgLy8gY29sb3Igb2YgbWFya2VyLiAgV2lsbCBiZSBzZXQgdG8gY29sb3Igb2Ygc2VyaWVzIGJ5IGRlZmF1bHQgb24gaW5pdC4KICAgICAgICB0aGlzLmNvbG9yID0gJyM2NjY2NjYnOwogICAgICAgIC8vIHByb3A6IHNoYWRvdwogICAgICAgIC8vIHdoZXRoZXIgb3Igbm90IHRvIGRyYXcgYSBzaGFkb3cgb24gdGhlIGxpbmUKICAgICAgICB0aGlzLnNoYWRvdyA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogc2hhZG93QW5nbGUKICAgICAgICAvLyBTaGFkb3cgYW5nbGUgaW4gZGVncmVlcwogICAgICAgIHRoaXMuc2hhZG93QW5nbGUgPSA0NTsKICAgICAgICAvLyBwcm9wOiBzaGFkb3dPZmZzZXQKICAgICAgICAvLyBTaGFkb3cgb2Zmc2V0IGZyb20gbGluZSBpbiBwaXhlbHMKICAgICAgICB0aGlzLnNoYWRvd09mZnNldCA9IDE7CiAgICAgICAgLy8gcHJvcDogc2hhZG93RGVwdGgKICAgICAgICAvLyBOdW1iZXIgb2YgdGltZXMgc2hhZG93IGlzIHN0cm9rZWQsIGVhY2ggc3Ryb2tlIG9mZnNldCBzaGFkb3dPZmZzZXQgZnJvbSB0aGUgbGFzdC4KICAgICAgICB0aGlzLnNoYWRvd0RlcHRoID0gMzsKICAgICAgICAvLyBwcm9wOiBzaGFkb3dBbHBoYQogICAgICAgIC8vIEFscGhhIGNoYW5uZWwgdHJhbnNwYXJlbmN5IG9mIHNoYWRvdy4gIDAgPSB0cmFuc3BhcmVudC4KICAgICAgICB0aGlzLnNoYWRvd0FscGhhID0gJzAuMDcnOwogICAgICAgIC8vIHByb3A6IHNoYWRvd1JlbmRlcmVyCiAgICAgICAgLy8gUmVuZGVyZXIgdGhhdCB3aWxsIGRyYXdzIHRoZSBzaGFkb3dzIG9uIHRoZSBtYXJrZXIuCiAgICAgICAgdGhpcy5zaGFkb3dSZW5kZXJlciA9IG5ldyAkLmpxcGxvdC5TaGFkb3dSZW5kZXJlcigpOwogICAgICAgIC8vIHByb3A6IHNoYXBlUmVuZGVyZXIKICAgICAgICAvLyBSZW5kZXJlciB0aGF0IHdpbGwgZHJhdyB0aGUgbWFya2VyLgogICAgICAgIHRoaXMuc2hhcGVSZW5kZXJlciA9IG5ldyAkLmpxcGxvdC5TaGFwZVJlbmRlcmVyKCk7CiAgICAgICAgCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5NYXJrZXJSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgICAgICB2YXIgc2RvcHQgPSB7YW5nbGU6dGhpcy5zaGFkb3dBbmdsZSwgb2Zmc2V0OnRoaXMuc2hhZG93T2Zmc2V0LCBhbHBoYTp0aGlzLnNoYWRvd0FscGhhLCBsaW5lV2lkdGg6dGhpcy5saW5lV2lkdGgsIGRlcHRoOnRoaXMuc2hhZG93RGVwdGgsIGNsb3NlUGF0aDp0cnVlfTsKICAgICAgICBpZiAodGhpcy5zdHlsZS5pbmRleE9mKCdmaWxsZWQnKSAhPSAtMSkgewogICAgICAgICAgICBzZG9wdC5maWxsID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuc3R5bGUuaW5kZXhPZignaXJjbGUnKSAhPSAtMSkgewogICAgICAgICAgICBzZG9wdC5pc2FyYyA9IHRydWU7CiAgICAgICAgICAgIHNkb3B0LmNsb3NlUGF0aCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICB0aGlzLnNoYWRvd1JlbmRlcmVyLmluaXQoc2RvcHQpOwogICAgICAgIAogICAgICAgIHZhciBzaG9wdCA9IHtmaWxsOmZhbHNlLCBpc2FyYzpmYWxzZSwgc3Ryb2tlU3R5bGU6dGhpcy5jb2xvciwgZmlsbFN0eWxlOnRoaXMuY29sb3IsIGxpbmVXaWR0aDp0aGlzLmxpbmVXaWR0aCwgY2xvc2VQYXRoOnRydWV9OwogICAgICAgIGlmICh0aGlzLnN0eWxlLmluZGV4T2YoJ2ZpbGxlZCcpICE9IC0xKSB7CiAgICAgICAgICAgIHNob3B0LmZpbGwgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5zdHlsZS5pbmRleE9mKCdpcmNsZScpICE9IC0xKSB7CiAgICAgICAgICAgIHNob3B0LmlzYXJjID0gdHJ1ZTsKICAgICAgICAgICAgc2hvcHQuY2xvc2VQYXRoID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2hhcGVSZW5kZXJlci5pbml0KHNob3B0KTsKICAgIH07CiAgICAKICAgICQuanFwbG90Lk1hcmtlclJlbmRlcmVyLnByb3RvdHlwZS5kcmF3RGlhbW9uZCA9IGZ1bmN0aW9uKHgsIHksIGN0eCwgZmlsbCwgb3B0aW9ucykgewogICAgICAgIHZhciBzdHJldGNoID0gMS4yOwogICAgICAgIHZhciBkeCA9IHRoaXMuc2l6ZS8yL3N0cmV0Y2g7CiAgICAgICAgdmFyIGR5ID0gdGhpcy5zaXplLzIqc3RyZXRjaDsKICAgICAgICB2YXIgcG9pbnRzID0gW1t4LWR4LCB5XSwgW3gsIHkrZHldLCBbeCtkeCwgeV0sIFt4LCB5LWR5XV07CiAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7CiAgICAgICAgICAgIHRoaXMuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50cyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgcG9pbnRzLCBvcHRpb25zKTsKICAgIH07CiAgICAKICAgICQuanFwbG90Lk1hcmtlclJlbmRlcmVyLnByb3RvdHlwZS5kcmF3UGx1cyA9IGZ1bmN0aW9uKHgsIHksIGN0eCwgZmlsbCwgb3B0aW9ucykgewogICAgICAgIHZhciBzdHJldGNoID0gMS4wOwogICAgICAgIHZhciBkeCA9IHRoaXMuc2l6ZS8yKnN0cmV0Y2g7CiAgICAgICAgdmFyIGR5ID0gdGhpcy5zaXplLzIqc3RyZXRjaDsKICAgICAgICB2YXIgcG9pbnRzMSA9IFtbeCwgeS1keV0sIFt4LCB5K2R5XV07CiAgICAgICAgdmFyIHBvaW50czIgPSBbW3grZHgsIHldLCBbeC1keCwgeV1dOwogICAgICAgIHZhciBvcHRzID0gJC5leHRlbmQodHJ1ZSwge30sIHRoaXMub3B0aW9ucywge2Nsb3NlUGF0aDpmYWxzZX0pOwogICAgICAgIGlmICh0aGlzLnNoYWRvdykgewogICAgICAgICAgICB0aGlzLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCBwb2ludHMxLCB7Y2xvc2VQYXRoOmZhbHNlfSk7CiAgICAgICAgICAgIHRoaXMuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50czIsIHtjbG9zZVBhdGg6ZmFsc2V9KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zaGFwZVJlbmRlcmVyLmRyYXcoY3R4LCBwb2ludHMxLCBvcHRzKTsKICAgICAgICB0aGlzLnNoYXBlUmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50czIsIG9wdHMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuTWFya2VyUmVuZGVyZXIucHJvdG90eXBlLmRyYXdYID0gZnVuY3Rpb24oeCwgeSwgY3R4LCBmaWxsLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIHN0cmV0Y2ggPSAxLjA7CiAgICAgICAgdmFyIGR4ID0gdGhpcy5zaXplLzIqc3RyZXRjaDsKICAgICAgICB2YXIgZHkgPSB0aGlzLnNpemUvMipzdHJldGNoOwogICAgICAgIHZhciBvcHRzID0gJC5leHRlbmQodHJ1ZSwge30sIHRoaXMub3B0aW9ucywge2Nsb3NlUGF0aDpmYWxzZX0pOwogICAgICAgIHZhciBwb2ludHMxID0gW1t4LWR4LCB5LWR5XSwgW3grZHgsIHkrZHldXTsKICAgICAgICB2YXIgcG9pbnRzMiA9IFtbeC1keCwgeStkeV0sIFt4K2R4LCB5LWR5XV07CiAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7CiAgICAgICAgICAgIHRoaXMuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50czEsIHtjbG9zZVBhdGg6ZmFsc2V9KTsKICAgICAgICAgICAgdGhpcy5zaGFkb3dSZW5kZXJlci5kcmF3KGN0eCwgcG9pbnRzMiwge2Nsb3NlUGF0aDpmYWxzZX0pOwogICAgICAgIH0KICAgICAgICB0aGlzLnNoYXBlUmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50czEsIG9wdHMpOwogICAgICAgIHRoaXMuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgcG9pbnRzMiwgb3B0cyk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5NYXJrZXJSZW5kZXJlci5wcm90b3R5cGUuZHJhd0Rhc2ggPSBmdW5jdGlvbih4LCB5LCBjdHgsIGZpbGwsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgc3RyZXRjaCA9IDEuMDsKICAgICAgICB2YXIgZHggPSB0aGlzLnNpemUvMipzdHJldGNoOwogICAgICAgIHZhciBkeSA9IHRoaXMuc2l6ZS8yKnN0cmV0Y2g7CiAgICAgICAgdmFyIHBvaW50cyA9IFtbeC1keCwgeV0sIFt4K2R4LCB5XV07CiAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7CiAgICAgICAgICAgIHRoaXMuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50cyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgcG9pbnRzLCBvcHRpb25zKTsKICAgIH07CiAgICAKICAgICQuanFwbG90Lk1hcmtlclJlbmRlcmVyLnByb3RvdHlwZS5kcmF3TGluZSA9IGZ1bmN0aW9uKHAxLCBwMiwgY3R4LCBmaWxsLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIHBvaW50cyA9IFtwMSwgcDJdOwogICAgICAgIGlmICh0aGlzLnNoYWRvdykgewogICAgICAgICAgICB0aGlzLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCBwb2ludHMpOwogICAgICAgIH0KICAgICAgICB0aGlzLnNoYXBlUmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50cywgb3B0aW9ucyk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5NYXJrZXJSZW5kZXJlci5wcm90b3R5cGUuZHJhd1NxdWFyZSA9IGZ1bmN0aW9uKHgsIHksIGN0eCwgZmlsbCwgb3B0aW9ucykgewogICAgICAgIHZhciBzdHJldGNoID0gMS4wOwogICAgICAgIHZhciBkeCA9IHRoaXMuc2l6ZS8yL3N0cmV0Y2g7CiAgICAgICAgdmFyIGR5ID0gdGhpcy5zaXplLzIqc3RyZXRjaDsKICAgICAgICB2YXIgcG9pbnRzID0gW1t4LWR4LCB5LWR5XSwgW3gtZHgsIHkrZHldLCBbeCtkeCwgeStkeV0sIFt4K2R4LCB5LWR5XV07CiAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7CiAgICAgICAgICAgIHRoaXMuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50cyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgcG9pbnRzLCBvcHRpb25zKTsKICAgIH07CiAgICAKICAgICQuanFwbG90Lk1hcmtlclJlbmRlcmVyLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24oeCwgeSwgY3R4LCBmaWxsLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIHJhZGl1cyA9IHRoaXMuc2l6ZS8yOwogICAgICAgIHZhciBlbmQgPSAyKk1hdGguUEk7CiAgICAgICAgdmFyIHBvaW50cyA9IFt4LCB5LCByYWRpdXMsIDAsIGVuZCwgdHJ1ZV07CiAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7CiAgICAgICAgICAgIHRoaXMuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50cyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgcG9pbnRzLCBvcHRpb25zKTsKICAgIH07CiAgICAKICAgICQuanFwbG90Lk1hcmtlclJlbmRlcmVyLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24oeCwgeSwgY3R4LCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgLy8gaGFjayBoZXJlIGIvYyBzaGFwZSByZW5kZXJlciB1c2VzIGNhbnZhcyBiYXNlZCBjb2xvciBzdHlsZSBvcHRpb25zCiAgICAgICAgLy8gYW5kIG1hcmtlciB1c2VzIGNzcyBzdHlsZSBuYW1lcy4KICAgICAgICBpZiAob3B0aW9ucy5zaG93ID09IG51bGwgfHwgb3B0aW9ucy5zaG93ICE9IGZhbHNlKSB7CiAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbG9yICYmICFvcHRpb25zLmZpbGxTdHlsZSkgewogICAgICAgICAgICAgICAgb3B0aW9ucy5maWxsU3R5bGUgPSBvcHRpb25zLmNvbG9yOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbG9yICYmICFvcHRpb25zLnN0cm9rZVN0eWxlKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zLnN0cm9rZVN0eWxlID0gb3B0aW9ucy5jb2xvcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBzd2l0Y2ggKHRoaXMuc3R5bGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgJ2RpYW1vbmQnOgogICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd0RpYW1vbmQoeCx5LGN0eCwgZmFsc2UsIG9wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnZmlsbGVkRGlhbW9uZCc6CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3RGlhbW9uZCh4LHksY3R4LCB0cnVlLCBvcHRpb25zKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2NpcmNsZSc6CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3Q2lyY2xlKHgseSxjdHgsIGZhbHNlLCBvcHRpb25zKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbGxlZENpcmNsZSc6CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3Q2lyY2xlKHgseSxjdHgsIHRydWUsIG9wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnc3F1YXJlJzoKICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdTcXVhcmUoeCx5LGN0eCwgZmFsc2UsIG9wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnZmlsbGVkU3F1YXJlJzoKICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdTcXVhcmUoeCx5LGN0eCwgdHJ1ZSwgb3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd4JzoKICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdYKHgseSxjdHgsIHRydWUsIG9wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAncGx1cyc6CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3UGx1cyh4LHksY3R4LCB0cnVlLCBvcHRpb25zKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2Rhc2gnOgogICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd0Rhc2goeCx5LGN0eCwgdHJ1ZSwgb3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdsaW5lJzoKICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdMaW5lKHgsIHksIGN0eCwgZmFsc2UsIG9wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdEaWFtb25kKHgseSxjdHgsIGZhbHNlLCBvcHRpb25zKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8vIGNsYXNzOiAkLmpxcGxvdC5zaGFkb3dSZW5kZXJlcgogICAgLy8gVGhlIGRlZmF1bHQganFQbG90IHNoYWRvdyByZW5kZXJlciwgcmVuZGVyaW5nIHNoYWRvd3MgYmVoaW5kIHNoYXBlcy4KICAgICQuanFwbG90LlNoYWRvd1JlbmRlcmVyID0gZnVuY3Rpb24ob3B0aW9ucyl7IAogICAgICAgIC8vIEdyb3VwOiBQcm9wZXJ0aWVzCiAgICAgICAgCiAgICAgICAgLy8gcHJvcDogYW5nbGUKICAgICAgICAvLyBBbmdsZSBvZiB0aGUgc2hhZG93IGluIGRlZ3JlZXMuICBNZWFzdXJlZCBjb3VudGVyLWNsb2Nrd2lzZSBmcm9tIHRoZSB4IGF4aXMuCiAgICAgICAgdGhpcy5hbmdsZSA9IDQ1OwogICAgICAgIC8vIHByb3A6IG9mZnNldAogICAgICAgIC8vIFBpeGVsIG9mZnNldCBhdCB0aGUgZ2l2ZW4gc2hhZG93IGFuZ2xlIG9mIGVhY2ggc2hhZG93IHN0cm9rZSBmcm9tIHRoZSBsYXN0IHN0cm9rZS4KICAgICAgICB0aGlzLm9mZnNldCA9IDE7CiAgICAgICAgLy8gcHJvcDogYWxwaGEKICAgICAgICAvLyBhbHBoYSB0cmFuc3BhcmVuY3kgb2Ygc2hhZG93IHN0cm9rZS4KICAgICAgICB0aGlzLmFscGhhID0gMC4wNzsKICAgICAgICAvLyBwcm9wOiBsaW5lV2lkdGgKICAgICAgICAvLyB3aWR0aCBvZiB0aGUgc2hhZG93IGxpbmUgc3Ryb2tlLgogICAgICAgIHRoaXMubGluZVdpZHRoID0gMS41OwogICAgICAgIC8vIHByb3A6IGxpbmVKb2luCiAgICAgICAgLy8gSG93IGxpbmUgc2VnbWVudHMgb2YgdGhlIHNoYWRvdyBhcmUgam9pbmVkLgogICAgICAgIHRoaXMubGluZUpvaW4gPSAnbWl0ZXInOwogICAgICAgIC8vIHByb3A6IGxpbmVDYXAKICAgICAgICAvLyBob3cgZW5kcyBvZiB0aGUgc2hhZG93IGxpbmUgYXJlIHJlbmRlcmVkLgogICAgICAgIHRoaXMubGluZUNhcCA9ICdyb3VuZCc7CiAgICAgICAgLy8gcHJvcDsgY2xvc2VQYXRoCiAgICAgICAgLy8gd2hldGhlciBsaW5lIHBhdGggc2VnbWVudCBpcyBjbG9zZWQgdXBvbiBpdHNlbGYuCiAgICAgICAgdGhpcy5jbG9zZVBhdGggPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBmaWxsCiAgICAgICAgLy8gd2hldGhlciB0byBmaWxsIHRoZSBzaGFwZS4KICAgICAgICB0aGlzLmZpbGwgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBkZXB0aAogICAgICAgIC8vIGhvdyBtYW55IHRpbWVzIHRoZSBzaGFkb3cgaXMgc3Ryb2tlZC4gIEVhY2ggc3Ryb2tlIHdpbGwgYmUgb2Zmc2V0IGJ5IG9mZnNldCBhdCBhbmdsZSBkZWdyZWVzLgogICAgICAgIHRoaXMuZGVwdGggPSAzOwogICAgICAgIHRoaXMuc3Ryb2tlU3R5bGUgPSAncmdiYSgwLDAsMCwwLjEpJzsKICAgICAgICAvLyBwcm9wOiBpc2FyYwogICAgICAgIC8vIHdoZXRoZXIgdGhlIHNoYWRvdyBpcyBhbiBhcmMgb3Igbm90LgogICAgICAgIHRoaXMuaXNhcmMgPSBmYWxzZTsKICAgICAgICAKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LlNoYWRvd1JlbmRlcmVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgfTsKICAgIAogICAgLy8gZnVuY3Rpb246IGRyYXcKICAgIC8vIGRyYXdzIGFuIHRyYW5zcGFyZW50IGJsYWNrIChpLmUuIGdyYXkpIHNoYWRvdy4KICAgIC8vCiAgICAvLyBjdHggLSBjYW52YXMgZHJhd2luZyBjb250ZXh0CiAgICAvLyBwb2ludHMgLSBhcnJheSBvZiBwb2ludHMgb3IgW3gsIHksIHJhZGl1cywgc3RhcnQgYW5nbGUgKHJhZCksIGVuZCBhbmdsZSAocmFkKV0KICAgICQuanFwbG90LlNoYWRvd1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24oY3R4LCBwb2ludHMsIG9wdGlvbnMpIHsKICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgIHZhciBvcHRzID0gKG9wdGlvbnMgIT0gbnVsbCkgPyBvcHRpb25zIDoge307CiAgICAgICAgdmFyIGZpbGwgPSAob3B0cy5maWxsICE9IG51bGwpID8gb3B0cy5maWxsIDogdGhpcy5maWxsOwogICAgICAgIHZhciBmaWxsUmVjdCA9IChvcHRzLmZpbGxSZWN0ICE9IG51bGwpID8gb3B0cy5maWxsUmVjdCA6IHRoaXMuZmlsbFJlY3Q7CiAgICAgICAgdmFyIGNsb3NlUGF0aCA9IChvcHRzLmNsb3NlUGF0aCAhPSBudWxsKSA/IG9wdHMuY2xvc2VQYXRoIDogdGhpcy5jbG9zZVBhdGg7CiAgICAgICAgdmFyIG9mZnNldCA9IChvcHRzLm9mZnNldCAhPSBudWxsKSA/IG9wdHMub2Zmc2V0IDogdGhpcy5vZmZzZXQ7CiAgICAgICAgdmFyIGFscGhhID0gKG9wdHMuYWxwaGEgIT0gbnVsbCkgPyBvcHRzLmFscGhhIDogdGhpcy5hbHBoYTsKICAgICAgICB2YXIgZGVwdGggPSAob3B0cy5kZXB0aCAhPSBudWxsKSA/IG9wdHMuZGVwdGggOiB0aGlzLmRlcHRoOwogICAgICAgIHZhciBpc2FyYyA9IChvcHRzLmlzYXJjICE9IG51bGwpID8gb3B0cy5pc2FyYyA6IHRoaXMuaXNhcmM7CiAgICAgICAgdmFyIGxpbmVQYXR0ZXJuID0gKG9wdHMubGluZVBhdHRlcm4gIT0gbnVsbCkgPyBvcHRzLmxpbmVQYXR0ZXJuIDogdGhpcy5saW5lUGF0dGVybjsKICAgICAgICBjdHgubGluZVdpZHRoID0gKG9wdHMubGluZVdpZHRoICE9IG51bGwpID8gb3B0cy5saW5lV2lkdGggOiB0aGlzLmxpbmVXaWR0aDsKICAgICAgICBjdHgubGluZUpvaW4gPSAob3B0cy5saW5lSm9pbiAhPSBudWxsKSA/IG9wdHMubGluZUpvaW4gOiB0aGlzLmxpbmVKb2luOwogICAgICAgIGN0eC5saW5lQ2FwID0gKG9wdHMubGluZUNhcCAhPSBudWxsKSA/IG9wdHMubGluZUNhcCA6IHRoaXMubGluZUNhcDsKICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBvcHRzLnN0cm9rZVN0eWxlIHx8IHRoaXMuc3Ryb2tlU3R5bGUgfHwgJ3JnYmEoMCwwLDAsJythbHBoYSsnKSc7CiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdHMuZmlsbFN0eWxlIHx8IHRoaXMuZmlsbFN0eWxlIHx8ICdyZ2JhKDAsMCwwLCcrYWxwaGErJyknOwogICAgICAgIGZvciAodmFyIGo9MDsgajxkZXB0aDsgaisrKSB7CiAgICAgICAgICAgIHZhciBjdHhQYXR0ZXJuID0gJC5qcXBsb3QuTGluZVBhdHRlcm4oY3R4LCBsaW5lUGF0dGVybik7CiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoTWF0aC5jb3ModGhpcy5hbmdsZSpNYXRoLlBJLzE4MCkqb2Zmc2V0LCBNYXRoLnNpbih0aGlzLmFuZ2xlKk1hdGguUEkvMTgwKSpvZmZzZXQpOwogICAgICAgICAgICBjdHhQYXR0ZXJuLmJlZ2luUGF0aCgpOwogICAgICAgICAgICBpZiAoaXNhcmMpIHsKICAgICAgICAgICAgICAgIGN0eC5hcmMocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCBwb2ludHNbNF0sIHRydWUpOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChmaWxsUmVjdCkgewogICAgICAgICAgICAgICAgaWYgKGZpbGxSZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAocG9pbnRzICYmIHBvaW50cy5sZW5ndGgpewogICAgICAgICAgICAgICAgdmFyIG1vdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHBvaW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIC8vIHNraXAgdG8gdGhlIGZpcnN0IG5vbi1udWxsIHBvaW50IGFuZCBtb3ZlIHRvIGl0LgogICAgICAgICAgICAgICAgICAgIGlmIChwb2ludHNbaV1bMF0gIT0gbnVsbCAmJiBwb2ludHNbaV1bMV0gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobW92ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4UGF0dGVybi5tb3ZlVG8ocG9pbnRzW2ldWzBdLCBwb2ludHNbaV1bMV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4UGF0dGVybi5saW5lVG8ocG9pbnRzW2ldWzBdLCBwb2ludHNbaV1bMV0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBtb3ZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2xvc2VQYXRoKSB7CiAgICAgICAgICAgICAgICBjdHhQYXR0ZXJuLmNsb3NlUGF0aCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmaWxsKSB7CiAgICAgICAgICAgICAgICBjdHguZmlsbCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICB9OwogICAgCiAgICAvLyBjbGFzczogJC5qcXBsb3Quc2hhcGVSZW5kZXJlcgogICAgLy8gVGhlIGRlZmF1bHQganFQbG90IHNoYXBlIHJlbmRlcmVyLiAgR2l2ZW4gYSBzZXQgb2YgcG9pbnRzIHdpbGwKICAgIC8vIHBsb3QgdGhlbSBhbmQgZWl0aGVyIHN0cm9rZSBhIGxpbmUgKGZpbGwgPSBmYWxzZSkgb3IgZmlsbCB0aGVtIChmaWxsID0gdHJ1ZSkuCiAgICAvLyBJZiBhIGZpbGxlZCBzaGFwZSBpcyBkZXNpcmVkLCBjbG9zZVBhdGggPSB0cnVlIG11c3QgYWxzbyBiZSBzZXQgdG8gY2xvc2UKICAgIC8vIHRoZSBzaGFwZS4KICAgICQuanFwbG90LlNoYXBlUmVuZGVyZXIgPSBmdW5jdGlvbihvcHRpb25zKXsKICAgICAgICAKICAgICAgICB0aGlzLmxpbmVXaWR0aCA9IDEuNTsKICAgICAgICAvLyBwcm9wOiBsaW5lUGF0dGVybgogICAgICAgIC8vIGxpbmUgcGF0dGVybiAnZGFzaGVkJywgJ2RvdHRlZCcsICdzb2xpZCcsIHNvbWUgY29tYmluYXRpb24KICAgICAgICAvLyBvZiAnLScgYW5kICcuJyBjaGFyYWN0ZXJzIHN1Y2ggYXMgJy4tLicgb3IgYSBudW1lcmljYWwgYXJyYXkgbGlrZSAKICAgICAgICAvLyBbZHJhdywgc2tpcCwgZHJhdywgc2tpcCwgLi4uXSBzdWNoIGFzIFsxLCAxMF0gdG8gZHJhdyBhIGRvdHRlZCBsaW5lLCAKICAgICAgICAvLyBbMSwgMTAsIDIwLCAxMF0gdG8gZHJhdyBhIGRvdC1kYXNoIGxpbmUsIGFuZCBzbyBvbi4KICAgICAgICB0aGlzLmxpbmVQYXR0ZXJuID0gJ3NvbGlkJzsKICAgICAgICAvLyBwcm9wOiBsaW5lSm9pbgogICAgICAgIC8vIEhvdyBsaW5lIHNlZ21lbnRzIG9mIHRoZSBzaGFkb3cgYXJlIGpvaW5lZC4KICAgICAgICB0aGlzLmxpbmVKb2luID0gJ21pdGVyJzsKICAgICAgICAvLyBwcm9wOiBsaW5lQ2FwCiAgICAgICAgLy8gaG93IGVuZHMgb2YgdGhlIHNoYWRvdyBsaW5lIGFyZSByZW5kZXJlZC4KICAgICAgICB0aGlzLmxpbmVDYXAgPSAncm91bmQnOwogICAgICAgIC8vIHByb3A7IGNsb3NlUGF0aAogICAgICAgIC8vIHdoZXRoZXIgbGluZSBwYXRoIHNlZ21lbnQgaXMgY2xvc2VkIHVwb24gaXRzZWxmLgogICAgICAgIHRoaXMuY2xvc2VQYXRoID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogZmlsbAogICAgICAgIC8vIHdoZXRoZXIgdG8gZmlsbCB0aGUgc2hhcGUuCiAgICAgICAgdGhpcy5maWxsID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogaXNhcmMKICAgICAgICAvLyB3aGV0aGVyIHRoZSBzaGFkb3cgaXMgYW4gYXJjIG9yIG5vdC4KICAgICAgICB0aGlzLmlzYXJjID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogZmlsbFJlY3QKICAgICAgICAvLyB0cnVlIHRvIGRyYXcgc2hhcGUgYXMgYSBmaWxsZWQgcmVjdGFuZ2xlLgogICAgICAgIHRoaXMuZmlsbFJlY3QgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBzdHJva2VSZWN0CiAgICAgICAgLy8gdHJ1ZSB0byBkcmF3IHNoYXBlIGFzIGEgc3Ryb2tlZCByZWN0YW5nbGUuCiAgICAgICAgdGhpcy5zdHJva2VSZWN0ID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogY2xlYXJSZWN0CiAgICAgICAgLy8gdHJ1ZSB0byBjZWFyIGEgcmVjdGFuZ2xlLgogICAgICAgIHRoaXMuY2xlYXJSZWN0ID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogc3Ryb2tlU3R5bGUKICAgICAgICAvLyBjc3MgY29sb3Igc3BlYyBmb3IgdGhlIHN0b2tlIHN0eWxlCiAgICAgICAgdGhpcy5zdHJva2VTdHlsZSA9ICcjOTk5OTk5JzsKICAgICAgICAvLyBwcm9wOiBmaWxsU3R5bGUKICAgICAgICAvLyBjc3MgY29sb3Igc3BlYyBmb3IgdGhlIGZpbGwgc3R5bGUuCiAgICAgICAgdGhpcy5maWxsU3R5bGUgPSAnIzk5OTk5OSc7IAogICAgICAgIAogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuU2hhcGVSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgIH07CiAgICAKICAgIC8vIGZ1bmN0aW9uOiBkcmF3CiAgICAvLyBkcmF3cyB0aGUgc2hhcGUuCiAgICAvLwogICAgLy8gY3R4IC0gY2FudmFzIGRyYXdpbmcgY29udGV4dAogICAgLy8gcG9pbnRzIC0gYXJyYXkgb2YgcG9pbnRzIGZvciBzaGFwZXMgb3IgCiAgICAvLyBbeCwgeSwgd2lkdGgsIGhlaWdodF0gZm9yIHJlY3RhbmdsZXMgb3IKICAgIC8vIFt4LCB5LCByYWRpdXMsIHN0YXJ0IGFuZ2xlIChyYWQpLCBlbmQgYW5nbGUgKHJhZCldIGZvciBjaXJjbGVzIGFuZCBhcmNzLgogICAgJC5qcXBsb3QuU2hhcGVSZW5kZXJlci5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKGN0eCwgcG9pbnRzLCBvcHRpb25zKSB7CiAgICAgICAgY3R4LnNhdmUoKTsKICAgICAgICB2YXIgb3B0cyA9IChvcHRpb25zICE9IG51bGwpID8gb3B0aW9ucyA6IHt9OwogICAgICAgIHZhciBmaWxsID0gKG9wdHMuZmlsbCAhPSBudWxsKSA/IG9wdHMuZmlsbCA6IHRoaXMuZmlsbDsKICAgICAgICB2YXIgY2xvc2VQYXRoID0gKG9wdHMuY2xvc2VQYXRoICE9IG51bGwpID8gb3B0cy5jbG9zZVBhdGggOiB0aGlzLmNsb3NlUGF0aDsKICAgICAgICB2YXIgZmlsbFJlY3QgPSAob3B0cy5maWxsUmVjdCAhPSBudWxsKSA/IG9wdHMuZmlsbFJlY3QgOiB0aGlzLmZpbGxSZWN0OwogICAgICAgIHZhciBzdHJva2VSZWN0ID0gKG9wdHMuc3Ryb2tlUmVjdCAhPSBudWxsKSA/IG9wdHMuc3Ryb2tlUmVjdCA6IHRoaXMuc3Ryb2tlUmVjdDsKICAgICAgICB2YXIgY2xlYXJSZWN0ID0gKG9wdHMuY2xlYXJSZWN0ICE9IG51bGwpID8gb3B0cy5jbGVhclJlY3QgOiB0aGlzLmNsZWFyUmVjdDsKICAgICAgICB2YXIgaXNhcmMgPSAob3B0cy5pc2FyYyAhPSBudWxsKSA/IG9wdHMuaXNhcmMgOiB0aGlzLmlzYXJjOwogICAgICAgIHZhciBsaW5lUGF0dGVybiA9IChvcHRzLmxpbmVQYXR0ZXJuICE9IG51bGwpID8gb3B0cy5saW5lUGF0dGVybiA6IHRoaXMubGluZVBhdHRlcm47CiAgICAgICAgdmFyIGN0eFBhdHRlcm4gPSAkLmpxcGxvdC5MaW5lUGF0dGVybihjdHgsIGxpbmVQYXR0ZXJuKTsKICAgICAgICBjdHgubGluZVdpZHRoID0gb3B0cy5saW5lV2lkdGggfHwgdGhpcy5saW5lV2lkdGg7CiAgICAgICAgY3R4LmxpbmVKb2luID0gb3B0cy5saW5lSm9pbiB8fCB0aGlzLmxpbmVKb2luOwogICAgICAgIGN0eC5saW5lQ2FwID0gb3B0cy5saW5lQ2FwIHx8IHRoaXMubGluZUNhcDsKICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAob3B0cy5zdHJva2VTdHlsZSB8fCBvcHRzLmNvbG9yKSB8fCB0aGlzLnN0cm9rZVN0eWxlOwogICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRzLmZpbGxTdHlsZSB8fCB0aGlzLmZpbGxTdHlsZTsKICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgaWYgKGlzYXJjKSB7CiAgICAgICAgICAgIGN0eC5hcmMocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCBwb2ludHNbNF0sIHRydWUpOyAgIAogICAgICAgICAgICBpZiAoY2xvc2VQYXRoKSB7CiAgICAgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGZpbGwpIHsKICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjbGVhclJlY3QpIHsKICAgICAgICAgICAgY3R4LmNsZWFyUmVjdChwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10pOwogICAgICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGZpbGxSZWN0IHx8IHN0cm9rZVJlY3QpIHsKICAgICAgICAgICAgaWYgKGZpbGxSZWN0KSB7CiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc3Ryb2tlUmVjdCkgewogICAgICAgICAgICAgICAgY3R4LnN0cm9rZVJlY3QocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdKTsKICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocG9pbnRzICYmIHBvaW50cy5sZW5ndGgpewogICAgICAgICAgICB2YXIgbW92ZSA9IHRydWU7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIC8vIHNraXAgdG8gdGhlIGZpcnN0IG5vbi1udWxsIHBvaW50IGFuZCBtb3ZlIHRvIGl0LgogICAgICAgICAgICAgICAgaWYgKHBvaW50c1tpXVswXSAhPSBudWxsICYmIHBvaW50c1tpXVsxXSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3R4UGF0dGVybi5tb3ZlVG8ocG9pbnRzW2ldWzBdLCBwb2ludHNbaV1bMV0pOwogICAgICAgICAgICAgICAgICAgICAgICBtb3ZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjdHhQYXR0ZXJuLmxpbmVUbyhwb2ludHNbaV1bMF0sIHBvaW50c1tpXVsxXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbW92ZSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNsb3NlUGF0aCkgewogICAgICAgICAgICAgICAgY3R4UGF0dGVybi5jbG9zZVBhdGgoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZmlsbCkgewogICAgICAgICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgfTsKICAgIAogICAgLy8gY2xhc3MgJC5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlcgogICAgLy8gVGhlIGRlZmF1bHQgbGVnZW5kIHJlbmRlcmVyIGZvciBqcVBsb3QuCiAgICAkLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyID0gZnVuY3Rpb24oKXsKICAgICAgICAvLwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgIH07CiAgICAgICAgCiAgICAkLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5hZGRyb3cgPSBmdW5jdGlvbiAobGFiZWwsIGNvbG9yLCBwYWQsIHJldmVyc2UpIHsKICAgICAgICB2YXIgcnMgPSAocGFkKSA/IHRoaXMucm93U3BhY2luZysncHgnIDogJzBweCc7CiAgICAgICAgdmFyIHRyOwogICAgICAgIHZhciB0ZDsKICAgICAgICB2YXIgZWxlbTsKICAgICAgICB2YXIgZGl2MDsKICAgICAgICB2YXIgZGl2MTsKICAgICAgICBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKICAgICAgICB0ciA9ICQoZWxlbSk7CiAgICAgICAgdHIuYWRkQ2xhc3MoJ2pxcGxvdC10YWJsZS1sZWdlbmQnKTsKICAgICAgICBlbGVtID0gbnVsbDsKCiAgICAgICAgaWYgKHJldmVyc2UpewogICAgICAgICAgICB0ci5wcmVwZW5kVG8odGhpcy5fZWxlbSk7CiAgICAgICAgfQoKICAgICAgICBlbHNlewogICAgICAgICAgICB0ci5hcHBlbmRUbyh0aGlzLl9lbGVtKTsKICAgICAgICB9CgogICAgICAgIGlmICh0aGlzLnNob3dTd2F0Y2hlcykgewogICAgICAgICAgICB0ZCA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSk7CiAgICAgICAgICAgIHRkLmFkZENsYXNzKCdqcXBsb3QtdGFibGUtbGVnZW5kIGpxcGxvdC10YWJsZS1sZWdlbmQtc3dhdGNoJyk7CiAgICAgICAgICAgIHRkLmNzcyh7dGV4dEFsaWduOiAnY2VudGVyJywgcGFkZGluZ1RvcDogcnN9KTsKCiAgICAgICAgICAgIGRpdjAgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKICAgICAgICAgICAgZGl2MC5hZGRDbGFzcygnanFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2gtb3V0bGluZScpOwogICAgICAgICAgICBkaXYxID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CiAgICAgICAgICAgIGRpdjEuYWRkQ2xhc3MoJ2pxcGxvdC10YWJsZS1sZWdlbmQtc3dhdGNoJyk7CiAgICAgICAgICAgIGRpdjEuY3NzKHtiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLCBib3JkZXJDb2xvcjogY29sb3J9KTsKCiAgICAgICAgICAgIHRyLmFwcGVuZCh0ZC5hcHBlbmQoZGl2MC5hcHBlbmQoZGl2MSkpKTsKCiAgICAgICAgICAgIC8vICQoJzx0ZCBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmctdG9wOicrcnMrJzsiPicrCiAgICAgICAgICAgIC8vICc8ZGl2PjxkaXYgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQtc3dhdGNoIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjonK2NvbG9yKyc7Ym9yZGVyLWNvbG9yOicrY29sb3IrJzsiPjwvZGl2PicrCiAgICAgICAgICAgIC8vICc8L2Rpdj48L3RkPicpLmFwcGVuZFRvKHRyKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuc2hvd0xhYmVscykgewogICAgICAgICAgICB0ZCA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSk7CiAgICAgICAgICAgIHRkLmFkZENsYXNzKCdqcXBsb3QtdGFibGUtbGVnZW5kIGpxcGxvdC10YWJsZS1sZWdlbmQtbGFiZWwnKTsKICAgICAgICAgICAgdGQuY3NzKCdwYWRkaW5nVG9wJywgcnMpOwogICAgICAgICAgICB0ci5hcHBlbmQodGQpOwoKICAgICAgICAgICAgLy8gZWxlbSA9ICQoJzx0ZCBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCIgc3R5bGU9InBhZGRpbmctdG9wOicrcnMrJzsiPjwvdGQ+Jyk7CiAgICAgICAgICAgIC8vIGVsZW0uYXBwZW5kVG8odHIpOwogICAgICAgICAgICBpZiAodGhpcy5lc2NhcGVIdG1sKSB7CiAgICAgICAgICAgICAgICB0ZC50ZXh0KGxhYmVsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRkLmh0bWwobGFiZWwpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRkID0gbnVsbDsKICAgICAgICBkaXYwID0gbnVsbDsKICAgICAgICBkaXYxID0gbnVsbDsKICAgICAgICB0ciA9IG51bGw7CiAgICAgICAgZWxlbSA9IG51bGw7CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBsZWdlbmQKICAgICQuanFwbG90LlRhYmxlTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5fZWxlbSkgewogICAgICAgICAgICB0aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKTsKICAgICAgICAgICAgdGhpcy5fZWxlbSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5zaG93KSB7CiAgICAgICAgICAgIHZhciBzZXJpZXMgPSB0aGlzLl9zZXJpZXM7CiAgICAgICAgICAgIC8vIG1ha2UgYSB0YWJsZS4gIG9uZSBsaW5lIGxhYmVsIHBlciByb3cuCiAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTsKICAgICAgICAgICAgdGhpcy5fZWxlbSA9ICQoZWxlbSk7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uYWRkQ2xhc3MoJ2pxcGxvdC10YWJsZS1sZWdlbmQnKTsKCiAgICAgICAgICAgIHZhciBzcyA9IHtwb3NpdGlvbjonYWJzb2x1dGUnfTsKICAgICAgICAgICAgaWYgKHRoaXMuYmFja2dyb3VuZCkgewogICAgICAgICAgICAgICAgc3NbJ2JhY2tncm91bmQnXSA9IHRoaXMuYmFja2dyb3VuZDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5ib3JkZXIpIHsKICAgICAgICAgICAgICAgIHNzWydib3JkZXInXSA9IHRoaXMuYm9yZGVyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLmZvbnRTaXplKSB7CiAgICAgICAgICAgICAgICBzc1snZm9udFNpemUnXSA9IHRoaXMuZm9udFNpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuZm9udEZhbWlseSkgewogICAgICAgICAgICAgICAgc3NbJ2ZvbnRGYW1pbHknXSA9IHRoaXMuZm9udEZhbWlseTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy50ZXh0Q29sb3IpIHsKICAgICAgICAgICAgICAgIHNzWyd0ZXh0Q29sb3InXSA9IHRoaXMudGV4dENvbG9yOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLm1hcmdpblRvcCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBzc1snbWFyZ2luVG9wJ10gPSB0aGlzLm1hcmdpblRvcDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5tYXJnaW5Cb3R0b20gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgc3NbJ21hcmdpbkJvdHRvbSddID0gdGhpcy5tYXJnaW5Cb3R0b207CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMubWFyZ2luTGVmdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBzc1snbWFyZ2luTGVmdCddID0gdGhpcy5tYXJnaW5MZWZ0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLm1hcmdpblJpZ2h0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHNzWydtYXJnaW5SaWdodCddID0gdGhpcy5tYXJnaW5SaWdodDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgdmFyIHBhZCA9IGZhbHNlLCAKICAgICAgICAgICAgICAgIHJldmVyc2UgPSBmYWxzZSwKICAgICAgICAgICAgICAgIHM7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpPCBzZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHMgPSBzZXJpZXNbaV07CiAgICAgICAgICAgICAgICBpZiAocy5fc3RhY2sgfHwgcy5yZW5kZXJlci5jb25zdHJ1Y3RvciA9PSAkLmpxcGxvdC5CZXppZXJDdXJ2ZVJlbmRlcmVyKXsKICAgICAgICAgICAgICAgICAgICByZXZlcnNlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzLnNob3cgJiYgcy5zaG93TGFiZWwpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbHQgPSB0aGlzLmxhYmVsc1tpXSB8fCBzLmxhYmVsLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHMuY29sb3I7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXZlcnNlICYmIGkgPCBzZXJpZXMubGVuZ3RoIC0gMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJldmVyc2UgJiYgaSA9PSBzZXJpZXMubGVuZ3RoIC0gMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZHJvdy5jYWxsKHRoaXMsIGx0LCBjb2xvciwgcGFkLCByZXZlcnNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcGFkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHBsdWdpbnMgYWRkIG1vcmUgcm93cyB0byBsZWdlbmQuICBVc2VkIGJ5IHRyZW5kIGxpbmUgcGx1Z2luLgogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajwkLmpxcGxvdC5hZGRMZWdlbmRSb3dIb29rcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9ICQuanFwbG90LmFkZExlZ2VuZFJvd0hvb2tzW2pdLmNhbGwodGhpcywgcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZHJvdy5jYWxsKHRoaXMsIGl0ZW0ubGFiZWwsIGl0ZW0uY29sb3IsIHBhZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBsdCA9IG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW07CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5wYWNrID0gZnVuY3Rpb24ob2Zmc2V0cykgewogICAgICAgIGlmICh0aGlzLnNob3cpIHsgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLnBsYWNlbWVudCA9PSAnaW5zaWRlR3JpZCcpIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvbikgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ253JzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBvZmZzZXRzLmxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gb2Zmc2V0cy50b3A7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCdsZWZ0JywgYSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCd0b3AnLCBiKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gKG9mZnNldHMubGVmdCArICh0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCAtIG9mZnNldHMucmlnaHQpKS8yIC0gdGhpcy5nZXRXaWR0aCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gb2Zmc2V0cy50b3A7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCdsZWZ0JywgYSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCd0b3AnLCBiKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmUnOgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IG9mZnNldHMucmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gb2Zmc2V0cy50b3A7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtyaWdodDphLCB0b3A6Yn0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdlJzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBvZmZzZXRzLnJpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IChvZmZzZXRzLnRvcCArICh0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQgLSBvZmZzZXRzLmJvdHRvbSkpLzIgLSB0aGlzLmdldEhlaWdodCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtyaWdodDphLCB0b3A6Yn0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdzZSc6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gb2Zmc2V0cy5yaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBvZmZzZXRzLmJvdHRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe3JpZ2h0OmEsIGJvdHRvbTpifSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IChvZmZzZXRzLmxlZnQgKyAodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBvZmZzZXRzLnJpZ2h0KSkvMiAtIHRoaXMuZ2V0V2lkdGgoKS8yOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IG9mZnNldHMuYm90dG9tOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7bGVmdDphLCBib3R0b206Yn0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdzdyc6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gb2Zmc2V0cy5sZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IG9mZnNldHMuYm90dG9tOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7bGVmdDphLCBib3R0b206Yn0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICd3JzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBvZmZzZXRzLmxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gKG9mZnNldHMudG9wICsgKHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIG9mZnNldHMuYm90dG9tKSkvMiAtIHRoaXMuZ2V0SGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe2xlZnQ6YSwgdG9wOmJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogIC8vIHNhbWUgYXMgJ3NlJwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IG9mZnNldHMucmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gb2Zmc2V0cy5ib3R0b207CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtyaWdodDphLCBib3R0b206Yn0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucGxhY2VtZW50ID09ICdvdXRzaWRlJyl7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMubG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICdudyc6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBvZmZzZXRzLmxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gb2Zmc2V0cy50b3A7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCdyaWdodCcsIGEpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcygndG9wJywgYik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IChvZmZzZXRzLmxlZnQgKyAodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBvZmZzZXRzLnJpZ2h0KSkvMiAtIHRoaXMuZ2V0V2lkdGgoKS8yOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIG9mZnNldHMudG9wOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcygnbGVmdCcsIGEpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcygnYm90dG9tJywgYik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ25lJzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCAtIG9mZnNldHMucmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gb2Zmc2V0cy50b3A7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtsZWZ0OmEsIHRvcDpifSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2UnOgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIC0gb2Zmc2V0cy5yaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSAob2Zmc2V0cy50b3AgKyAodGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0IC0gb2Zmc2V0cy5ib3R0b20pKS8yIC0gdGhpcy5nZXRIZWlnaHQoKS8yOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7bGVmdDphLCB0b3A6Yn0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdzZSc6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBvZmZzZXRzLnJpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IG9mZnNldHMuYm90dG9tOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7bGVmdDphLCBib3R0b206Yn0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSAob2Zmc2V0cy5sZWZ0ICsgKHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIC0gb2Zmc2V0cy5yaWdodCkpLzIgLSB0aGlzLmdldFdpZHRoKCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQgLSBvZmZzZXRzLmJvdHRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe2xlZnQ6YSwgdG9wOmJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3cnOgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIC0gb2Zmc2V0cy5sZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IG9mZnNldHMuYm90dG9tOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6YSwgYm90dG9tOmJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndyc6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBvZmZzZXRzLmxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gKG9mZnNldHMudG9wICsgKHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIG9mZnNldHMuYm90dG9tKSkvMiAtIHRoaXMuZ2V0SGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe3JpZ2h0OmEsIHRvcDpifSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAvLyBzYW1lIGFzICdzZScKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBvZmZzZXRzLnJpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IG9mZnNldHMuYm90dG9tOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6YSwgYm90dG9tOmJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMubG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICdudyc6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtsZWZ0OjAsIHRvcDpvZmZzZXRzLnRvcH0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSAob2Zmc2V0cy5sZWZ0ICsgKHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIC0gb2Zmc2V0cy5yaWdodCkpLzIgLSB0aGlzLmdldFdpZHRoKCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe2xlZnQ6IGEsIHRvcDpvZmZzZXRzLnRvcH0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICduZSc6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtyaWdodDowLCB0b3A6b2Zmc2V0cy50b3B9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gKG9mZnNldHMudG9wICsgKHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIG9mZnNldHMuYm90dG9tKSkvMiAtIHRoaXMuZ2V0SGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe3JpZ2h0Om9mZnNldHMucmlnaHQsIHRvcDpifSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NlJzoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe3JpZ2h0Om9mZnNldHMucmlnaHQsIGJvdHRvbTpvZmZzZXRzLmJvdHRvbX0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSAob2Zmc2V0cy5sZWZ0ICsgKHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIC0gb2Zmc2V0cy5yaWdodCkpLzIgLSB0aGlzLmdldFdpZHRoKCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe2xlZnQ6IGEsIGJvdHRvbTpvZmZzZXRzLmJvdHRvbX0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdzdyc6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtsZWZ0Om9mZnNldHMubGVmdCwgYm90dG9tOm9mZnNldHMuYm90dG9tfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3cnOgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IChvZmZzZXRzLnRvcCArICh0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQgLSBvZmZzZXRzLmJvdHRvbSkpLzIgLSB0aGlzLmdldEhlaWdodCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtsZWZ0Om9mZnNldHMubGVmdCwgdG9wOmJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogIC8vIHNhbWUgYXMgJ3NlJwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6b2Zmc2V0cy5yaWdodCwgYm90dG9tOm9mZnNldHMuYm90dG9tfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSAKICAgIH07CgogICAgLyoqCiAgICAgKiBDbGFzczogJC5qcXBsb3QuVGhlbWVFbmdpbmUKICAgICAqIFRoZW1lIEVuZ2luZSBwcm92aWRlcyBhIHByb2dyYW1hdGljIHdheSB0byBjaGFuZ2Ugc29tZSBvZiB0aGUgIG1vcmUKICAgICAqIGNvbW1vbiBqcXBsb3Qgc3R5bGluZyBvcHRpb25zIHN1Y2ggYXMgZm9udHMsIGNvbG9ycyBhbmQgZ3JpZCBvcHRpb25zLgogICAgICogQSB0aGVtZSBlbmdpbmUgaW5zdGFuY2UgaXMgY3JlYXRlZCB3aXRoIGVhY2ggcGxvdC4gIFRoZSB0aGVtZSBlbmdpbmUKICAgICAqIG1hbmFnZXMgYSBjb2xsZWN0aW9uIG9mIHRoZW1lcyB3aGljaCBjYW4gYmUgbW9kaWZpZWQsIGFkZGVkIHRvLCBvciAKICAgICAqIGFwcGxpZWQgdG8gdGhlIHBsb3QuCiAgICAgKiAKICAgICAqIFRoZSB0aGVtZUVuZ2luZSBjbGFzcyBpcyBub3QgaW5zdGFudGlhdGVkIGRpcmVjdGx5LgogICAgICogV2hlbiBhIHBsb3QgaXMgaW5pdGlhbGl6ZWQsIHRoZSBjdXJyZW50IHBsb3Qgb3B0aW9ucyBhcmUgc2Nhbm5lZAogICAgICogYW4gYSBkZWZhdWx0IHRoZW1lIG5hbWVkICJEZWZhdWx0IiBpcyBjcmVhdGVkLiAgVGhpcyB0aGVtZSBpcwogICAgICogdXNlZCBhcyB0aGUgYmFzaXMgZm9yIG90aGVyIHRoZW1lcyBhZGRlZCB0byB0aGUgdGhlbWUgZW5naW5lIGFuZAogICAgICogaXMgYWx3YXlzIGF2YWlsYWJsZS4KICAgICAqIAogICAgICogQSB0aGVtZSBpcyBhIHNpbXBsZSBqYXZhc2NyaXB0IG9iamVjdCB3aXRoIHN0eWxpbmcgcGFyYW1ldGVycyBmb3IKICAgICAqIHZhcmlvdXMgZW50aXRpZXMgb2YgdGhlIHBsb3QuICBBIHRoZW1lIGhhcyB0aGUgZm9ybToKICAgICAqIAogICAgICogCiAgICAgKiA+IHsKICAgICAqID4gICAgIF9uYW1lOmYgIkRlZmF1bHQiLAogICAgICogPiAgICAgdGFyZ2V0OiB7CiAgICAgKiA+ICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAidHJhbnNwYXJlbnQiCiAgICAgKiA+ICAgICB9LAogICAgICogPiAgICAgbGVnZW5kOiB7CiAgICAgKiA+ICAgICAgICAgdGV4dENvbG9yOiBudWxsLAogICAgICogPiAgICAgICAgIGZvbnRGYW1pbHk6IG51bGwsCiAgICAgKiA+ICAgICAgICAgZm9udFNpemU6IG51bGwsCiAgICAgKiA+ICAgICAgICAgYm9yZGVyOiBudWxsLAogICAgICogPiAgICAgICAgIGJhY2tncm91bmQ6IG51bGwKICAgICAqID4gICAgIH0sCiAgICAgKiA+ICAgICB0aXRsZTogewogICAgICogPiAgICAgICAgIHRleHRDb2xvcjogInJnYigxMDIsIDEwMiwgMTAyKSIsCiAgICAgKiA+ICAgICAgICAgZm9udEZhbWlseTogIidUcmVidWNoZXQgTVMnLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmIiwKICAgICAqID4gICAgICAgICBmb250U2l6ZTogIjE5LjJweCIsCiAgICAgKiA+ICAgICAgICAgdGV4dEFsaWduOiAiY2VudGVyIgogICAgICogPiAgICAgfSwKICAgICAqID4gICAgIHNlcmllc1N0eWxlczoge30sCiAgICAgKiA+ICAgICBzZXJpZXM6IFt7CiAgICAgKiA+ICAgICAgICAgY29sb3I6ICIjNGJiMmM1IiwKICAgICAqID4gICAgICAgICBsaW5lV2lkdGg6IDIuNSwKICAgICAqID4gICAgICAgICBsaW5lUGF0dGVybjogInNvbGlkIiwKICAgICAqID4gICAgICAgICBzaGFkb3c6IHRydWUsCiAgICAgKiA+ICAgICAgICAgZmlsbENvbG9yOiAiIzRiYjJjNSIsCiAgICAgKiA+ICAgICAgICAgc2hvd01hcmtlcjogdHJ1ZSwKICAgICAqID4gICAgICAgICBtYXJrZXJPcHRpb25zOiB7CiAgICAgKiA+ICAgICAgICAgICAgIGNvbG9yOiAiIzRiYjJjNSIsCiAgICAgKiA+ICAgICAgICAgICAgIHNob3c6IHRydWUsCiAgICAgKiA+ICAgICAgICAgICAgIHN0eWxlOiAnZmlsbGVkQ2lyY2xlJywKICAgICAqID4gICAgICAgICAgICAgbGluZVdpZHRoOiAxLjUsCiAgICAgKiA+ICAgICAgICAgICAgIHNpemU6IDQsCiAgICAgKiA+ICAgICAgICAgICAgIHNoYWRvdzogdHJ1ZQogICAgICogPiAgICAgICAgIH0KICAgICAqID4gICAgIH1dLAogICAgICogPiAgICAgZ3JpZDogewogICAgICogPiAgICAgICAgIGRyYXdHcmlkbGluZXM6IHRydWUsCiAgICAgKiA+ICAgICAgICAgZ3JpZExpbmVDb2xvcjogIiNjY2NjY2MiLAogICAgICogPiAgICAgICAgIGdyaWRMaW5lV2lkdGg6IDEsCiAgICAgKiA+ICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAiI2ZmZmRmNiIsCiAgICAgKiA+ICAgICAgICAgYm9yZGVyQ29sb3I6ICIjOTk5OTk5IiwKICAgICAqID4gICAgICAgICBib3JkZXJXaWR0aDogMiwKICAgICAqID4gICAgICAgICBzaGFkb3c6IHRydWUKICAgICAqID4gICAgIH0sCiAgICAgKiA+ICAgICBheGVzU3R5bGVzOiB7CiAgICAgKiA+ICAgICAgICAgbGFiZWw6IHt9LAogICAgICogPiAgICAgICAgIHRpY2tzOiB7fQogICAgICogPiAgICAgfSwKICAgICAqID4gICAgIGF4ZXM6IHsKICAgICAqID4gICAgICAgICB4YXhpczogewogICAgICogPiAgICAgICAgICAgICBib3JkZXJDb2xvcjogIiM5OTk5OTkiLAogICAgICogPiAgICAgICAgICAgICBib3JkZXJXaWR0aDogMiwKICAgICAqID4gICAgICAgICAgICAgdGlja3M6IHsKICAgICAqID4gICAgICAgICAgICAgICAgIHNob3c6IHRydWUsCiAgICAgKiA+ICAgICAgICAgICAgICAgICBzaG93R3JpZGxpbmU6IHRydWUsCiAgICAgKiA+ICAgICAgICAgICAgICAgICBzaG93TGFiZWw6IHRydWUsCiAgICAgKiA+ICAgICAgICAgICAgICAgICBzaG93TWFyazogdHJ1ZSwKICAgICAqID4gICAgICAgICAgICAgICAgIHNpemU6IDQsCiAgICAgKiA+ICAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICIiLAogICAgICogPiAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogIm5vd3JhcCIsCiAgICAgKiA+ICAgICAgICAgICAgICAgICBmb250U2l6ZTogIjEycHgiLAogICAgICogPiAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogIidUcmVidWNoZXQgTVMnLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmIgogICAgICogPiAgICAgICAgICAgICB9LAogICAgICogPiAgICAgICAgICAgICBsYWJlbDogewogICAgICogPiAgICAgICAgICAgICAgICAgdGV4dENvbG9yOiAicmdiKDEwMiwgMTAyLCAxMDIpIiwKICAgICAqID4gICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICJub3JtYWwiLAogICAgICogPiAgICAgICAgICAgICAgICAgZm9udFNpemU6ICIxNC42NjY3cHgiLAogICAgICogPiAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogIidUcmVidWNoZXQgTVMnLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmIiwKICAgICAqID4gICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICI0MDAiCiAgICAgKiA+ICAgICAgICAgICAgIH0KICAgICAqID4gICAgICAgICB9LAogICAgICogPiAgICAgICAgIHlheGlzOiB7CiAgICAgKiA+ICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAiIzk5OTk5OSIsCiAgICAgKiA+ICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAyLAogICAgICogPiAgICAgICAgICAgICB0aWNrczogewogICAgICogPiAgICAgICAgICAgICAgICAgc2hvdzogdHJ1ZSwKICAgICAqID4gICAgICAgICAgICAgICAgIHNob3dHcmlkbGluZTogdHJ1ZSwKICAgICAqID4gICAgICAgICAgICAgICAgIHNob3dMYWJlbDogdHJ1ZSwKICAgICAqID4gICAgICAgICAgICAgICAgIHNob3dNYXJrOiB0cnVlLAogICAgICogPiAgICAgICAgICAgICAgICAgc2l6ZTogNCwKICAgICAqID4gICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIiIsCiAgICAgKiA+ICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiAibm93cmFwIiwKICAgICAqID4gICAgICAgICAgICAgICAgIGZvbnRTaXplOiAiMTJweCIsCiAgICAgKiA+ICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAiJ1RyZWJ1Y2hldCBNUycsQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWYiCiAgICAgKiA+ICAgICAgICAgICAgIH0sCiAgICAgKiA+ICAgICAgICAgICAgIGxhYmVsOiB7CiAgICAgKiA+ICAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6IG51bGwsCiAgICAgKiA+ICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiBudWxsLAogICAgICogPiAgICAgICAgICAgICAgICAgZm9udFNpemU6IG51bGwsCiAgICAgKiA+ICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBudWxsLAogICAgICogPiAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogbnVsbAogICAgICogPiAgICAgICAgICAgICB9CiAgICAgKiA+ICAgICAgICAgfSwKICAgICAqID4gICAgICAgICB4MmF4aXM6IHsuLi4KICAgICAqID4gICAgICAgICB9LAogICAgICogPiAgICAgICAgIC4uLgogICAgICogPiAgICAgICAgIHk5YXhpczogey4uLgogICAgICogPiAgICAgICAgIH0KICAgICAqID4gICAgIH0KICAgICAqID4gfQogICAgICogCiAgICAgKiAic2VyaWVzU3R5bGVzIiBpcyBhIHN0eWxlIG9iamVjdCB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byBhbGwgc2VyaWVzIGluIHRoZSBwbG90LgogICAgICogSXQgd2lsbCBmb3JjaWJseSBvdmVycmlkZSBhbnkgc3R5bGVzIGFwcGxpZWQgb24gdGhlIGluZGl2aWR1YWwgc2VyaWVzLiAgImF4ZXNTdHlsZXMiIGlzCiAgICAgKiBhIHN0eWxlIG9iamVjdCB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byBhbGwgYXhlcyBpbiB0aGUgcGxvdC4gIEl0IHdpbGwgYWxzbyBmb3JjaWJseQogICAgICogb3ZlcnJpZGUgYW55IHN0eWxlcyBvbiB0aGUgaW5kaXZpZHVhbCBheGVzLgogICAgICogCiAgICAgKiBUaGUgZXhhbXBsZSBzaG93biBhYm92ZSBoYXMgc2VyaWVzIG9wdGlvbnMgZm9yIGEgbGluZSBzZXJpZXMuICBPcHRpb25zIGZvciBvdGhlcgogICAgICogc2VyaWVzIHR5cGVzIGFyZSBzaG93biBiZWxvdzoKICAgICAqIAogICAgICogQmFyIFNlcmllczoKICAgICAqIAogICAgICogPiB7CiAgICAgKiA+ICAgICBjb2xvcjogIiM0YmIyYzUiLAogICAgICogPiAgICAgc2VyaWVzQ29sb3JzOiBbIiM0YmIyYzUiLCAiI0VBQTIyOCIsICIjYzViNDdmIiwgIiM1Nzk1NzUiLCAiIzgzOTU1NyIsICIjOTU4YzEyIiwgIiM5NTM1NzkiLCAiIzRiNWRlNCIsICIjZDhiODNmIiwgIiNmZjU4MDAiLCAiIzAwODVjYyIsICIjYzc0N2EzIiwgIiNjZGRmNTQiLCAiI0ZCRDE3OCIsICIjMjZCNEUzIiwgIiNiZDcwYzciXSwKICAgICAqID4gICAgIGxpbmVXaWR0aDogMi41LAogICAgICogPiAgICAgc2hhZG93OiB0cnVlLAogICAgICogPiAgICAgYmFyUGFkZGluZzogMiwKICAgICAqID4gICAgIGJhck1hcmdpbjogMTAsCiAgICAgKiA+ICAgICBiYXJXaWR0aDogMTUuMDkzNzUsCiAgICAgKiA+ICAgICBoaWdobGlnaHRDb2xvcnM6IFsicmdiKDEyOSwyMDEsMjE0KSIsICJyZ2IoMTI5LDIwMSwyMTQpIiwgInJnYigxMjksMjAxLDIxNCkiLCAicmdiKDEyOSwyMDEsMjE0KSIsICJyZ2IoMTI5LDIwMSwyMTQpIiwgInJnYigxMjksMjAxLDIxNCkiLCAicmdiKDEyOSwyMDEsMjE0KSIsICJyZ2IoMTI5LDIwMSwyMTQpIl0KICAgICAqID4gfQogICAgICogCiAgICAgKiBQaWUgU2VyaWVzOgogICAgICogCiAgICAgKiA+IHsKICAgICAqID4gICAgIHNlcmllc0NvbG9yczogWyIjNGJiMmM1IiwgIiNFQUEyMjgiLCAiI2M1YjQ3ZiIsICIjNTc5NTc1IiwgIiM4Mzk1NTciLCAiIzk1OGMxMiIsICIjOTUzNTc5IiwgIiM0YjVkZTQiLCAiI2Q4YjgzZiIsICIjZmY1ODAwIiwgIiMwMDg1Y2MiLCAiI2M3NDdhMyIsICIjY2RkZjU0IiwgIiNGQkQxNzgiLCAiIzI2QjRFMyIsICIjYmQ3MGM3Il0sCiAgICAgKiA+ICAgICBwYWRkaW5nOiAyMCwKICAgICAqID4gICAgIHNsaWNlTWFyZ2luOiAwLAogICAgICogPiAgICAgZmlsbDogdHJ1ZSwKICAgICAqID4gICAgIHNoYWRvdzogdHJ1ZSwKICAgICAqID4gICAgIHN0YXJ0QW5nbGU6IDAsCiAgICAgKiA+ICAgICBsaW5lV2lkdGg6IDIuNSwKICAgICAqID4gICAgIGhpZ2hsaWdodENvbG9yczogWyJyZ2IoMTI5LDIwMSwyMTQpIiwgInJnYigyNDAsMTg5LDEwNCkiLCAicmdiKDIxNCwyMDIsMTY1KSIsICJyZ2IoMTM3LDE4MCwxNTgpIiwgInJnYigxNjgsMTgwLDEzNykiLCAicmdiKDE4MCwxNzQsODkpIiwgInJnYigxODAsMTEzLDE2MSkiLCAicmdiKDEyOSwxNDEsMjM2KSIsICJyZ2IoMjI3LDIwNSwxMjApIiwgInJnYigyNTUsMTM4LDc2KSIsICJyZ2IoNzYsMTY5LDIxOSkiLCAicmdiKDIxNSwxMjYsMTkwKSIsICJyZ2IoMjIwLDIzMiwxMzUpIiwgInJnYigyMDAsMTY3LDk2KSIsICJyZ2IoMTAzLDIwMiwyMzUpIiwgInJnYigyMDgsMTU0LDIxNSkiXQogICAgICogPiB9CiAgICAgKiAKICAgICAqIEZ1bm5lbCBTZXJpZXM6CiAgICAgKiAKICAgICAqID4gewogICAgICogPiAgICAgY29sb3I6ICIjNGJiMmM1IiwKICAgICAqID4gICAgIGxpbmVXaWR0aDogMiwKICAgICAqID4gICAgIHNoYWRvdzogdHJ1ZSwKICAgICAqID4gICAgIHBhZGRpbmc6IHsKICAgICAqID4gICAgICAgICB0b3A6IDIwLAogICAgICogPiAgICAgICAgIHJpZ2h0OiAyMCwKICAgICAqID4gICAgICAgICBib3R0b206IDIwLAogICAgICogPiAgICAgICAgIGxlZnQ6IDIwCiAgICAgKiA+ICAgICB9LAogICAgICogPiAgICAgc2VjdGlvbk1hcmdpbjogNiwKICAgICAqID4gICAgIHNlcmllc0NvbG9yczogWyIjNGJiMmM1IiwgIiNFQUEyMjgiLCAiI2M1YjQ3ZiIsICIjNTc5NTc1IiwgIiM4Mzk1NTciLCAiIzk1OGMxMiIsICIjOTUzNTc5IiwgIiM0YjVkZTQiLCAiI2Q4YjgzZiIsICIjZmY1ODAwIiwgIiMwMDg1Y2MiLCAiI2M3NDdhMyIsICIjY2RkZjU0IiwgIiNGQkQxNzgiLCAiIzI2QjRFMyIsICIjYmQ3MGM3Il0sCiAgICAgKiA+ICAgICBoaWdobGlnaHRDb2xvcnM6IFsicmdiKDE0NywyMDgsMjIwKSIsICJyZ2IoMjQyLDE5OSwxMjYpIiwgInJnYigyMjAsMjEwLDE3OCkiLCAicmdiKDE1NCwxOTEsMTcyKSIsICJyZ2IoMTgwLDE5MSwxNTQpIiwgInJnYigxOTEsMTg2LDExMikiLCAicmdiKDE5MSwxMzMsMTc0KSIsICJyZ2IoMTQ3LDE1NywyMzgpIiwgInJnYigyMzEsMjEyLDEzOSkiLCAicmdiKDI1NSwxNTQsMTAyKSIsICJyZ2IoMTAyLDE4MSwyMjQpIiwgInJnYigyMjEsMTQ0LDE5OSkiLCAicmdiKDIyNSwyMzUsMTUyKSIsICJyZ2IoMjAwLDE2Nyw5NikiLCAicmdiKDEyNCwyMTAsMjM4KSIsICJyZ2IoMjE1LDE2OSwyMjEpIl0KICAgICAqID4gfQogICAgICogCiAgICAgKi8KICAgICQuanFwbG90LlRoZW1lRW5naW5lID0gZnVuY3Rpb24oKXsKICAgICAgICAvLyBHcm91cDogUHJvcGVydGllcwogICAgICAgIC8vCiAgICAgICAgLy8gcHJvcDogdGhlbWVzCiAgICAgICAgLy8gaGFzaCBvZiB0aGVtZXMgbWFuYWdlZCBieSB0aGUgdGhlbWUgZW5naW5lLiAgCiAgICAgICAgLy8gSW5kZXhlZCBieSB0aGVtZSBuYW1lLgogICAgICAgIHRoaXMudGhlbWVzID0ge307CiAgICAgICAgLy8gcHJvcDogYWN0aXZlVGhlbWUKICAgICAgICAvLyBQb2ludGVyIHRvIGN1cnJlbnRseSBhY3RpdmUgdGhlbWUKICAgICAgICB0aGlzLmFjdGl2ZVRoZW1lPW51bGw7CiAgICAgICAgCiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBwbG90CiAgICAkLmpxcGxvdC5UaGVtZUVuZ2luZS5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIGdldCB0aGUgRGVmYXVsdCB0aGVtZSBmcm9tIHRoZSBjdXJyZW50IHBsb3Qgc2V0dGluZ3MuCiAgICAgICAgdmFyIHRoID0gbmV3ICQuanFwbG90LlRoZW1lKHtfbmFtZTonRGVmYXVsdCd9KTsKICAgICAgICB2YXIgbiwgaSwgbm47CiAgICAgICAgCiAgICAgICAgZm9yIChuIGluIHRoLnRhcmdldCkgewogICAgICAgICAgICBpZiAobiA9PSAidGV4dENvbG9yIikgewogICAgICAgICAgICAgICAgdGgudGFyZ2V0W25dID0gdGhpcy50YXJnZXQuY3NzKCdjb2xvcicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGgudGFyZ2V0W25dID0gdGhpcy50YXJnZXQuY3NzKG4pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICh0aGlzLnRpdGxlLnNob3cgJiYgdGhpcy50aXRsZS5fZWxlbSkgewogICAgICAgICAgICBmb3IgKG4gaW4gdGgudGl0bGUpIHsKICAgICAgICAgICAgICAgIGlmIChuID09ICJ0ZXh0Q29sb3IiKSB7CiAgICAgICAgICAgICAgICAgICAgdGgudGl0bGVbbl0gPSB0aGlzLnRpdGxlLl9lbGVtLmNzcygnY29sb3InKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoLnRpdGxlW25dID0gdGhpcy50aXRsZS5fZWxlbS5jc3Mobik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZm9yIChuIGluIHRoLmdyaWQpIHsKICAgICAgICAgICAgdGguZ3JpZFtuXSA9IHRoaXMuZ3JpZFtuXTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoLmdyaWQuYmFja2dyb3VuZENvbG9yID09IG51bGwgJiYgdGhpcy5ncmlkLmJhY2tncm91bmQgIT0gbnVsbCkgewogICAgICAgICAgICB0aC5ncmlkLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZ3JpZC5iYWNrZ3JvdW5kOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5sZWdlbmQuc2hvdyAmJiB0aGlzLmxlZ2VuZC5fZWxlbSkgewogICAgICAgICAgICBmb3IgKG4gaW4gdGgubGVnZW5kKSB7CiAgICAgICAgICAgICAgICBpZiAobiA9PSAndGV4dENvbG9yJykgewogICAgICAgICAgICAgICAgICAgIHRoLmxlZ2VuZFtuXSA9IHRoaXMubGVnZW5kLl9lbGVtLmNzcygnY29sb3InKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoLmxlZ2VuZFtuXSA9IHRoaXMubGVnZW5kLl9lbGVtLmNzcyhuKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgczsKICAgICAgICAKICAgICAgICBmb3IgKGk9MDsgaTx0aGlzLnNlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBzID0gdGhpcy5zZXJpZXNbaV07CiAgICAgICAgICAgIGlmIChzLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkxpbmVSZW5kZXJlcikgewogICAgICAgICAgICAgICAgdGguc2VyaWVzLnB1c2gobmV3IExpbmVTZXJpZXNQcm9wZXJ0aWVzKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHMucmVuZGVyZXIuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuQmFyUmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgIHRoLnNlcmllcy5wdXNoKG5ldyBCYXJTZXJpZXNQcm9wZXJ0aWVzKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHMucmVuZGVyZXIuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuUGllUmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgIHRoLnNlcmllcy5wdXNoKG5ldyBQaWVTZXJpZXNQcm9wZXJ0aWVzKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHMucmVuZGVyZXIuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuRG9udXRSZW5kZXJlcikgewogICAgICAgICAgICAgICAgdGguc2VyaWVzLnB1c2gobmV3IERvbnV0U2VyaWVzUHJvcGVydGllcygpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkZ1bm5lbFJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICB0aC5zZXJpZXMucHVzaChuZXcgRnVubmVsU2VyaWVzUHJvcGVydGllcygpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09ICQuanFwbG90Lk1ldGVyR2F1Z2VSZW5kZXJlcikgewogICAgICAgICAgICAgICAgdGguc2VyaWVzLnB1c2gobmV3IE1ldGVyU2VyaWVzUHJvcGVydGllcygpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRoLnNlcmllcy5wdXNoKHt9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKG4gaW4gdGguc2VyaWVzW2ldKSB7CiAgICAgICAgICAgICAgICB0aC5zZXJpZXNbaV1bbl0gPSBzW25dOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBhLCBheDsKICAgICAgICBmb3IgKG4gaW4gdGhpcy5heGVzKSB7CiAgICAgICAgICAgIGF4ID0gdGhpcy5heGVzW25dOwogICAgICAgICAgICBhID0gdGguYXhlc1tuXSA9IG5ldyBBeGlzUHJvcGVydGllcygpOwogICAgICAgICAgICBhLmJvcmRlckNvbG9yID0gYXguYm9yZGVyQ29sb3I7CiAgICAgICAgICAgIGEuYm9yZGVyV2lkdGggPSBheC5ib3JkZXJXaWR0aDsKICAgICAgICAgICAgaWYgKGF4Ll90aWNrcyAmJiBheC5fdGlja3NbMF0pIHsKICAgICAgICAgICAgICAgIGZvciAobm4gaW4gYS50aWNrcykgewogICAgICAgICAgICAgICAgICAgIGlmIChheC5fdGlja3NbMF0uaGFzT3duUHJvcGVydHkobm4pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGEudGlja3Nbbm5dID0gYXguX3RpY2tzWzBdW25uXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXguX3RpY2tzWzBdLl9lbGVtKXsKICAgICAgICAgICAgICAgICAgICAgICAgYS50aWNrc1tubl0gPSBheC5fdGlja3NbMF0uX2VsZW0uY3NzKG5uKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGF4Ll9sYWJlbCAmJiBheC5fbGFiZWwuc2hvdykgewogICAgICAgICAgICAgICAgZm9yIChubiBpbiBhLmxhYmVsKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gYS5sYWJlbFtubl0gPSBheC5fbGFiZWwuX2VsZW0uY3NzKG5uKTsKICAgICAgICAgICAgICAgICAgICBpZiAoYXguX2xhYmVsW25uXSkgewogICAgICAgICAgICAgICAgICAgICAgICBhLmxhYmVsW25uXSA9IGF4Ll9sYWJlbFtubl07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF4Ll9sYWJlbC5fZWxlbSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChubiA9PSAndGV4dENvbG9yJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5sYWJlbFtubl0gPSBheC5fbGFiZWwuX2VsZW0uY3NzKCdjb2xvcicpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5sYWJlbFtubl0gPSBheC5fbGFiZWwuX2VsZW0uY3NzKG5uKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLnRoZW1lRW5naW5lLl9hZGQodGgpOwogICAgICAgIHRoaXMudGhlbWVFbmdpbmUuYWN0aXZlVGhlbWUgID0gdGhpcy50aGVtZUVuZ2luZS50aGVtZXNbdGguX25hbWVdOwogICAgfTsKICAgIC8qKgogICAgICogR3JvdXA6IG1ldGhvZHMKICAgICAqIAogICAgICogbWV0aG9kOiBnZXQKICAgICAqIAogICAgICogR2V0IGFuZCByZXR1cm4gdGhlIG5hbWVkIHRoZW1lIG9yIHRoZSBhY3RpdmUgdGhlbWUgaWYgbm8gbmFtZSBnaXZlbi4KICAgICAqIAogICAgICogcGFyYW1ldGVyOgogICAgICogCiAgICAgKiBuYW1lIC0gbmFtZSBvZiB0aGVtZSB0byBnZXQuCiAgICAgKiAKICAgICAqIHJldHVybnM6CiAgICAgKiAKICAgICAqIFRoZW1lIGluc3RhbmNlIG9mIGdpdmVuIG5hbWUuCiAgICAgKi8gICAKICAgICQuanFwbG90LlRoZW1lRW5naW5lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgICAgIC8vIHJldHVybiB0aGUgYWN0aXZlIHRoZW1lCiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVRoZW1lOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhlbWVzW25hbWVdOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIGZ1bmN0aW9uIG51bWVyaWNhbE9yZGVyKGEsYikgeyByZXR1cm4gYS1iOyB9CiAgICAKICAgIC8qKgogICAgICogbWV0aG9kOiBnZXRUaGVtZU5hbWVzCiAgICAgKiAKICAgICAqIFJldHVybiB0aGUgbGlzdCBvZiB0aGVtZSBuYW1lcyBpbiB0aGlzIG1hbmFnZXIgaW4gYWxwaGEtbnVtZXJpY2FsIG9yZGVyLgogICAgICogCiAgICAgKiBwYXJhbWV0ZXI6CiAgICAgKiAKICAgICAqIE5vbmUKICAgICAqIAogICAgICogcmV0dXJuczoKICAgICAqIAogICAgICogQSB0aGUgbGlzdCBvZiB0aGVtZSBuYW1lcyBpbiB0aGlzIG1hbmFnZXIgaW4gYWxwaGEtbnVtZXJpY2FsIG9yZGVyLgogICAgICovICAgICAgIAogICAgJC5qcXBsb3QuVGhlbWVFbmdpbmUucHJvdG90eXBlLmdldFRoZW1lTmFtZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdG4gPSBbXTsKICAgICAgICBmb3IgKHZhciBuIGluIHRoaXMudGhlbWVzKSB7CiAgICAgICAgICAgIHRuLnB1c2gobik7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0bi5zb3J0KG51bWVyaWNhbE9yZGVyKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBtZXRob2Q6IGdldFRoZW1lcwogICAgICogCiAgICAgKiBSZXR1cm4gYSBsaXN0IG9mIHRoZW1lcyBpbiBhbHBoYS1udW1lcmljYWwgb3JkZXIgYnkgbmFtZS4KICAgICAqIAogICAgICogcGFyYW1ldGVyOgogICAgICogCiAgICAgKiBOb25lCiAgICAgKiAKICAgICAqIHJldHVybnM6CiAgICAgKiAKICAgICAqIEEgbGlzdCBvZiB0aGVtZXMgaW4gYWxwaGEtbnVtZXJpY2FsIG9yZGVyIGJ5IG5hbWUuCiAgICAgKi8gCiAgICAkLmpxcGxvdC5UaGVtZUVuZ2luZS5wcm90b3R5cGUuZ2V0VGhlbWVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHRuID0gW107CiAgICAgICAgdmFyIHRoZW1lcyA9IFtdOwogICAgICAgIGZvciAodmFyIG4gaW4gdGhpcy50aGVtZXMpIHsKICAgICAgICAgICAgdG4ucHVzaChuKTsKICAgICAgICB9CiAgICAgICAgdG4uc29ydChudW1lcmljYWxPcmRlcik7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRoZW1lcy5wdXNoKHRoaXMudGhlbWVzW3RuW2ldXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGVtZXM7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5UaGVtZUVuZ2luZS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbihwbG90LCBuYW1lKSB7CiAgICAgICAgLy8gc29tZXRpbWVzIG5lZWQgdG8gcmVkcmF3IHdob2xlIHBsb3QuCiAgICAgICAgdmFyIHJlZHJhd1Bsb3QgPSBmYWxzZTsKICAgICAgICBpZiAoIW5hbWUgJiYgdGhpcy5hY3RpdmVUaGVtZSAmJiB0aGlzLmFjdGl2ZVRoZW1lLl9uYW1lKSB7CiAgICAgICAgICAgIG5hbWUgPSB0aGlzLmFjdGl2ZVRoZW1lLl9uYW1lOwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMudGhlbWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gdGhlbWUgb2YgdGhhdCBuYW1lIik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgdGggPSB0aGlzLnRoZW1lc1tuYW1lXTsKICAgICAgICAgICAgdGhpcy5hY3RpdmVUaGVtZSA9IHRoOwogICAgICAgICAgICB2YXIgdmFsLCBjaGVja0JvcmRlckNvbG9yID0gZmFsc2UsIGNoZWNrQm9yZGVyV2lkdGggPSBmYWxzZTsKICAgICAgICAgICAgdmFyIGFyciA9IFsneGF4aXMnLCAneDJheGlzJywgJ3lheGlzJywgJ3kyYXhpcyddOwogICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgYXggPSBhcnJbaV07CiAgICAgICAgICAgICAgICBpZiAodGguYXhlc1N0eWxlcy5ib3JkZXJDb2xvciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgcGxvdC5heGVzW2F4XS5ib3JkZXJDb2xvciA9IHRoLmF4ZXNTdHlsZXMuYm9yZGVyQ29sb3I7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodGguYXhlc1N0eWxlcy5ib3JkZXJXaWR0aCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgcGxvdC5heGVzW2F4XS5ib3JkZXJXaWR0aCA9IHRoLmF4ZXNTdHlsZXMuYm9yZGVyV2lkdGg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAodmFyIGF4bmFtZSBpbiBwbG90LmF4ZXMpIHsKICAgICAgICAgICAgICAgIHZhciBheGlzID0gcGxvdC5heGVzW2F4bmFtZV07CiAgICAgICAgICAgICAgICBpZiAoYXhpcy5zaG93KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRoYXhpcyA9IHRoLmF4ZXNbYXhuYW1lXSB8fCB7fTsKICAgICAgICAgICAgICAgICAgICB2YXIgdGhheHN0eWxlID0gdGguYXhlc1N0eWxlczsKICAgICAgICAgICAgICAgICAgICB2YXIgdGhheCA9ICQuanFwbG90LmV4dGVuZCh0cnVlLCB7fSwgdGhheGlzLCB0aGF4c3R5bGUpOwogICAgICAgICAgICAgICAgICAgIHZhbCA9ICh0aC5heGVzU3R5bGVzLmJvcmRlckNvbG9yICE9IG51bGwpID8gdGguYXhlc1N0eWxlcy5ib3JkZXJDb2xvciA6IHRoYXguYm9yZGVyQ29sb3I7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXguYm9yZGVyQ29sb3IgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBheGlzLmJvcmRlckNvbG9yID0gdGhheC5ib3JkZXJDb2xvcjsKICAgICAgICAgICAgICAgICAgICAgICAgcmVkcmF3UGxvdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHZhbCA9ICh0aC5heGVzU3R5bGVzLmJvcmRlcldpZHRoICE9IG51bGwpID8gdGguYXhlc1N0eWxlcy5ib3JkZXJXaWR0aCA6IHRoYXguYm9yZGVyV2lkdGg7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXguYm9yZGVyV2lkdGggIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBheGlzLmJvcmRlcldpZHRoID0gdGhheC5ib3JkZXJXaWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgcmVkcmF3UGxvdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChheGlzLl90aWNrcyAmJiBheGlzLl90aWNrc1swXSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBubiBpbiB0aGF4LnRpY2tzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWwgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHRoLmF4ZXNTdHlsZXMudGlja3MgJiYgdGguYXhlc1N0eWxlcy50aWNrc1tubl0gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHZhbCA9IHRoLmF4ZXNTdHlsZXMudGlja3Nbbm5dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBpZiAodGhheC50aWNrc1tubl0gIT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdmFsID0gdGhheC50aWNrc1tubl0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoYXgudGlja3Nbbm5dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpcy50aWNrT3B0aW9uc1tubl0gPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpcy5fdGlja3MgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRyYXdQbG90ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoYXhpcy5fbGFiZWwgJiYgYXhpcy5fbGFiZWwuc2hvdykgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBubiBpbiB0aGF4LmxhYmVsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWwgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHRoLmF4ZXNTdHlsZXMubGFiZWwgJiYgdGguYXhlc1N0eWxlcy5sYWJlbFtubl0gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHZhbCA9IHRoLmF4ZXNTdHlsZXMubGFiZWxbbm5dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBpZiAodGhheC5sYWJlbCAmJiB0aGF4LmxhYmVsW25uXSAhPSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB2YWwgPSB0aGF4LmxhYmVsW25uXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhheC5sYWJlbFtubl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlzLmxhYmVsT3B0aW9uc1tubl0gPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkcmF3UGxvdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAodmFyIG4gaW4gdGguZ3JpZCkgewogICAgICAgICAgICAgICAgaWYgKHRoLmdyaWRbbl0gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHBsb3QuZ3JpZFtuXSA9IHRoLmdyaWRbbl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFyZWRyYXdQbG90KSB7CiAgICAgICAgICAgICAgICBwbG90LmdyaWQuZHJhdygpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocGxvdC5sZWdlbmQuc2hvdykgeyAKICAgICAgICAgICAgICAgIGZvciAobiBpbiB0aC5sZWdlbmQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGgubGVnZW5kW25dICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGxvdC5sZWdlbmRbbl0gPSB0aC5sZWdlbmRbbl07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChwbG90LnRpdGxlLnNob3cpIHsKICAgICAgICAgICAgICAgIGZvciAobiBpbiB0aC50aXRsZSkgewogICAgICAgICAgICAgICAgICAgIGlmICh0aC50aXRsZVtuXSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBsb3QudGl0bGVbbl0gPSB0aC50aXRsZVtuXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBpOwogICAgICAgICAgICBmb3IgKGk9MDsgaTx0aC5zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBvcHRzID0ge307CiAgICAgICAgICAgICAgICB2YXIgcmVkcmF3U2VyaWVzID0gZmFsc2U7CiAgICAgICAgICAgICAgICBmb3IgKG4gaW4gdGguc2VyaWVzW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgdmFsID0gKHRoLnNlcmllc1N0eWxlc1tuXSAhPSBudWxsKSA/IHRoLnNlcmllc1N0eWxlc1tuXSA6IHRoLnNlcmllc1tpXVtuXTsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3B0c1tuXSA9IHZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPT0gJ2NvbG9yJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdC5zZXJpZXNbaV0ucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5maWxsU3R5bGUgPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90LnNlcmllc1tpXS5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLnN0cm9rZVN0eWxlID0gdmFsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdC5zZXJpZXNbaV1bbl0gPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKG4gPT0gJ2xpbmVXaWR0aCcpIHx8IChuID09ICdsaW5lUGF0dGVybicpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90LnNlcmllc1tpXS5yZW5kZXJlci5zaGFwZVJlbmRlcmVyW25dID0gdmFsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdC5zZXJpZXNbaV1bbl0gPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobiA9PSAnbWFya2VyT3B0aW9ucycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlIChwbG90LnNlcmllc1tpXS5tYXJrZXJPcHRpb25zLCB2YWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UgKHBsb3Quc2VyaWVzW2ldLm1hcmtlclJlbmRlcmVyLCB2YWwpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdC5zZXJpZXNbaV1bbl0gPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmVkcmF3UGxvdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmVkcmF3UGxvdCkgewogICAgICAgICAgICAgICAgcGxvdC50YXJnZXQuZW1wdHkoKTsKICAgICAgICAgICAgICAgIHBsb3QuZHJhdygpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBmb3IgKG4gaW4gdGgudGFyZ2V0KSB7CiAgICAgICAgICAgICAgICBpZiAodGgudGFyZ2V0W25dICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBwbG90LnRhcmdldC5jc3MobiwgdGgudGFyZ2V0W25dKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07CiAgICAKICAgICQuanFwbG90LlRoZW1lRW5naW5lLnByb3RvdHlwZS5fYWRkID0gZnVuY3Rpb24odGhlbWUsIG5hbWUpIHsKICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICB0aGVtZS5fbmFtZSA9IG5hbWU7CiAgICAgICAgfQogICAgICAgIGlmICghdGhlbWUuX25hbWUpIHsKICAgICAgICAgICAgdGhlbWUuX25hbWUgPSBEYXRlLnBhcnNlKG5ldyBEYXRlKCkpOwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMudGhlbWVzLmhhc093blByb3BlcnR5KHRoZW1lLl9uYW1lKSkgewogICAgICAgICAgICB0aGlzLnRoZW1lc1t0aGVtZS5fbmFtZV0gPSB0aGVtZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigianFwbG90LlRoZW1lRW5naW5lIEVycm9yOiBUaGVtZSBhbHJlYWR5IGluIHVzZSIpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8vIG1ldGhvZCByZW1vdmUKICAgIC8vIERlbGV0ZSB0aGUgbmFtZWQgdGhlbWUsIHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAKCiAgICAvKioKICAgICAqIG1ldGhvZDogcmVtb3ZlCiAgICAgKiAKICAgICAqIFJlbW92ZSB0aGUgZ2l2ZW4gdGhlbWUgZnJvbSB0aGUgdGhlbWVFbmdpbmUuCiAgICAgKiAKICAgICAqIHBhcmFtZXRlcnM6CiAgICAgKiAKICAgICAqIG5hbWUgLSBuYW1lIG9mIHRoZSB0aGVtZSB0byByZW1vdmUuCiAgICAgKiAKICAgICAqIHJldHVybnM6CiAgICAgKiAKICAgICAqIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgJC5qcXBsb3QuVGhlbWVFbmdpbmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICBpZiAobmFtZSA9PSAnRGVmYXVsdCcpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGVsZXRlIHRoaXMudGhlbWVzW25hbWVdOwogICAgfTsKCiAgICAvKioKICAgICAqIG1ldGhvZDogbmV3VGhlbWUKICAgICAqIAogICAgICogQ3JlYXRlIGEgbmV3IHRoZW1lIGJhc2VkIG9uIHRoZSBkZWZhdWx0IHRoZW1lLCBhZGRpbmcgaXQgdGhlIHRoZW1lRW5naW5lLgogICAgICogCiAgICAgKiBwYXJhbWV0ZXJzOgogICAgICogCiAgICAgKiBuYW1lIC0gbmFtZSBvZiB0aGUgbmV3IHRoZW1lLgogICAgICogb2JqIC0gb3B0aW9uYWwgb2JqZWN0IG9mIHN0eWxlcyB0byBiZSBhcHBsaWVkIHRvIHRoaXMgbmV3IHRoZW1lLgogICAgICogCiAgICAgKiByZXR1cm5zOgogICAgICogCiAgICAgKiBuZXcgVGhlbWUgb2JqZWN0LgogICAgICovCiAgICAkLmpxcGxvdC5UaGVtZUVuZ2luZS5wcm90b3R5cGUubmV3VGhlbWUgPSBmdW5jdGlvbihuYW1lLCBvYmopIHsKICAgICAgICBpZiAodHlwZW9mKG5hbWUpID09ICdvYmplY3QnKSB7CiAgICAgICAgICAgIG9iaiA9IG9iaiB8fCBuYW1lOwogICAgICAgICAgICBuYW1lID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKG9iaiAmJiBvYmouX25hbWUpIHsKICAgICAgICAgICAgbmFtZSA9IG9iai5fbmFtZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG5hbWUgPSBuYW1lIHx8IERhdGUucGFyc2UobmV3IERhdGUoKSk7CiAgICAgICAgfQogICAgICAgIC8vIHZhciB0aCA9IG5ldyAkLmpxcGxvdC5UaGVtZShuYW1lKTsKICAgICAgICB2YXIgdGggPSB0aGlzLmNvcHkodGhpcy50aGVtZXNbJ0RlZmF1bHQnXS5fbmFtZSwgbmFtZSk7CiAgICAgICAgJC5qcXBsb3QuZXh0ZW5kKHRoLCBvYmopOwogICAgICAgIHJldHVybiB0aDsKICAgIH07CiAgICAKICAgIC8vIGZ1bmN0aW9uIGNsb25lKG9iaikgewogICAgLy8gICAgIHJldHVybiBldmFsKG9iai50b1NvdXJjZSgpKTsKICAgIC8vIH0KICAgIAogICAgZnVuY3Rpb24gY2xvbmUob2JqKXsKICAgICAgICBpZihvYmogPT0gbnVsbCB8fCB0eXBlb2Yob2JqKSAhPSAnb2JqZWN0Jyl7CiAgICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIHRlbXAgPSBuZXcgb2JqLmNvbnN0cnVjdG9yKCk7CiAgICAgICAgZm9yKHZhciBrZXkgaW4gb2JqKXsKICAgICAgICAgICAgdGVtcFtrZXldID0gY2xvbmUob2JqW2tleV0pOwogICAgICAgIH0gICAKICAgICAgICByZXR1cm4gdGVtcDsKICAgIH0KICAgIAogICAgJC5qcXBsb3QuY2xvbmUgPSBjbG9uZTsKICAgIAogICAgZnVuY3Rpb24gbWVyZ2Uob2JqMSwgb2JqMikgewogICAgICAgIGlmIChvYmoyID09ICBudWxsIHx8IHR5cGVvZihvYmoyKSAhPSAnb2JqZWN0JykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGtleSBpbiBvYmoyKSB7CiAgICAgICAgICAgIGlmIChrZXkgPT0gJ2hpZ2hsaWdodENvbG9ycycpIHsKICAgICAgICAgICAgICAgIG9iajFba2V5XSA9IGNsb25lKG9iajJba2V5XSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG9iajJba2V5XSAhPSBudWxsICYmIHR5cGVvZihvYmoyW2tleV0pID09ICdvYmplY3QnKSB7CiAgICAgICAgICAgICAgICBpZiAoIW9iajEuaGFzT3duUHJvcGVydHkoa2V5KSkgewogICAgICAgICAgICAgICAgICAgIG9iajFba2V5XSA9IHt9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbWVyZ2Uob2JqMVtrZXldLCBvYmoyW2tleV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgb2JqMVtrZXldID0gb2JqMltrZXldOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICAkLmpxcGxvdC5tZXJnZSA9IG1lcmdlOwogICAgCiAgICAgICAgLy8gVXNlIHRoZSBqUXVlcnkgMS4zLjIgZXh0ZW5kIGZ1bmN0aW9uIHNpbmNlIGJlaGF2aW91ciBpbiBqUXVlcnkgMS40IHNlZW1zIHByb2JsZW1hdGljCiAgICAkLmpxcGxvdC5leHRlbmQgPSBmdW5jdGlvbigpIHsKICAgICAgICAvLyBjb3B5IHJlZmVyZW5jZSB0byB0YXJnZXQgb2JqZWN0CiAgICAgICAgdmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSwgaSA9IDEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGRlZXAgPSBmYWxzZSwgb3B0aW9uczsKCiAgICAgICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvbgogICAgICAgIGlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgewogICAgICAgICAgICBkZWVwID0gdGFyZ2V0OwogICAgICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307CiAgICAgICAgICAgIC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKICAgICAgICAgICAgaSA9IDI7CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkKICAgICAgICBpZiAoIHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3QiICYmICF0b1N0cmluZy5jYWxsKHRhcmdldCkgPT09ICJbb2JqZWN0IEZ1bmN0aW9uXSIgKSB7CiAgICAgICAgICAgIHRhcmdldCA9IHt9OwogICAgICAgIH0KCiAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKXsKICAgICAgICAgICAgLy8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlcwogICAgICAgICAgICBpZiAoIChvcHRpb25zID0gYXJndW1lbnRzWyBpIF0pICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0CiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBvcHRpb25zICkgewogICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSB0YXJnZXRbIG5hbWUgXSwgY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKCiAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcAogICAgICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSBjb3B5ICkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBvYmplY3QgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWVwICYmIGNvcHkgJiYgdHlwZW9mIGNvcHkgPT09ICJvYmplY3QiICYmICFjb3B5Lm5vZGVUeXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbIG5hbWUgXSA9ICQuanFwbG90LmV4dGVuZCggZGVlcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyB8fCAoIGNvcHkubGVuZ3RoICE9IG51bGwgPyBbIF0gOiB7IH0gKQogICAgICAgICAgICAgICAgICAgICAgICAsIGNvcHkgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0gY29weTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3QKICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgfTsKCiAgICAvKioKICAgICAqIG1ldGhvZDogcmVuYW1lCiAgICAgKiAKICAgICAqIFJlbmFtZSBhIHRoZW1lLgogICAgICogCiAgICAgKiBwYXJhbWV0ZXJzOgogICAgICogCiAgICAgKiBvbGROYW1lIC0gY3VycmVudCBuYW1lIG9mIHRoZSB0aGVtZS4KICAgICAqIG5ld05hbWUgLSBkZXNpcmVkIG5hbWUgb2YgdGhlIHRoZW1lLgogICAgICogCiAgICAgKiByZXR1cm5zOgogICAgICogCiAgICAgKiBuZXcgVGhlbWUgb2JqZWN0LgogICAgICovCiAgICAkLmpxcGxvdC5UaGVtZUVuZ2luZS5wcm90b3R5cGUucmVuYW1lID0gZnVuY3Rpb24gKG9sZE5hbWUsIG5ld05hbWUpIHsKICAgICAgICBpZiAob2xkTmFtZSA9PSAnRGVmYXVsdCcgfHwgbmV3TmFtZSA9PSAnRGVmYXVsdCcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yICgianFwbG90LlRoZW1lRW5naW5lIEVycm9yOiBDYW5ub3QgcmVuYW1lIGZyb20vdG8gRGVmYXVsdCIpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy50aGVtZXMuaGFzT3duUHJvcGVydHkobmV3TmFtZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yICgianFwbG90LlRoZW1lRW5naW5lIEVycm9yOiBOZXcgbmFtZSBhbHJlYWR5IGluIHVzZS4iKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodGhpcy50aGVtZXMuaGFzT3duUHJvcGVydHkob2xkTmFtZSkpIHsKICAgICAgICAgICAgdmFyIHRoID0gdGhpcy5jb3B5IChvbGROYW1lLCBuZXdOYW1lKTsKICAgICAgICAgICAgdGhpcy5yZW1vdmUob2xkTmFtZSk7CiAgICAgICAgICAgIHJldHVybiB0aDsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJqcXBsb3QuVGhlbWVFbmdpbmUgRXJyb3I6IE9sZCBuYW1lIG9yIG5ldyBuYW1lIGludmFsaWQiKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBtZXRob2Q6IGNvcHkKICAgICAqIAogICAgICogQ3JlYXRlIGEgY29weSBvZiBhbiBleGlzdGluZyB0aGVtZSBpbiB0aGUgdGhlbWVFbmdpbmUsIGFkZGluZyBpdCB0aGUgdGhlbWVFbmdpbmUuCiAgICAgKiAKICAgICAqIHBhcmFtZXRlcnM6CiAgICAgKiAKICAgICAqIHNvdXJjZU5hbWUgLSBuYW1lIG9mIHRoZSBleGlzdGluZyB0aGVtZS4KICAgICAqIHRhcmdldE5hbWUgLSBuYW1lIG9mIHRoZSBjb3B5LgogICAgICogb2JqIC0gb3B0aW9uYWwgb2JqZWN0IG9mIHN0eWxlIHBhcmFtZXRlciB0byBhcHBseSB0byB0aGUgbmV3IHRoZW1lLgogICAgICogCiAgICAgKiByZXR1cm5zOgogICAgICogCiAgICAgKiBuZXcgVGhlbWUgb2JqZWN0LgogICAgICovCiAgICAkLmpxcGxvdC5UaGVtZUVuZ2luZS5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChzb3VyY2VOYW1lLCB0YXJnZXROYW1lLCBvYmopIHsKICAgICAgICBpZiAodGFyZ2V0TmFtZSA9PSAnRGVmYXVsdCcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yICgianFwbG90LlRoZW1lRW5naW5lIEVycm9yOiBDYW5ub3QgY29weSBvdmVyIERlZmF1bHQgdGhlbWUiKTsKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLnRoZW1lcy5oYXNPd25Qcm9wZXJ0eShzb3VyY2VOYW1lKSkgewogICAgICAgICAgICB2YXIgcyA9ICJqcXBsb3QuVGhlbWVFbmdpbmUgRXJyb3I6IFNvdXJjZSBuYW1lIGludmFsaWQiOwogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iocyk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnRoZW1lcy5oYXNPd25Qcm9wZXJ0eSh0YXJnZXROYW1lKSkgewogICAgICAgICAgICB2YXIgcyA9ICJqcXBsb3QuVGhlbWVFbmdpbmUgRXJyb3I6IFRhcmdldCBuYW1lIGludmFsaWQiOwogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iocyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgdGggPSBjbG9uZSh0aGlzLnRoZW1lc1tzb3VyY2VOYW1lXSk7CiAgICAgICAgICAgIHRoLl9uYW1lID0gdGFyZ2V0TmFtZTsKICAgICAgICAgICAgJC5qcXBsb3QuZXh0ZW5kKHRydWUsIHRoLCBvYmopOwogICAgICAgICAgICB0aGlzLl9hZGQodGgpOwogICAgICAgICAgICByZXR1cm4gdGg7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgCiAgICAkLmpxcGxvdC5UaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIG9iaikgewogICAgICAgIGlmICh0eXBlb2YobmFtZSkgPT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgb2JqID0gb2JqIHx8IG5hbWU7CiAgICAgICAgICAgIG5hbWUgPSBudWxsOwogICAgICAgIH0KICAgICAgICBuYW1lID0gbmFtZSB8fCBEYXRlLnBhcnNlKG5ldyBEYXRlKCkpOwogICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwogICAgICAgIHRoaXMudGFyZ2V0ID0gewogICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bGwKICAgICAgICB9OwogICAgICAgIHRoaXMubGVnZW5kID0gewogICAgICAgICAgICB0ZXh0Q29sb3I6IG51bGwsCiAgICAgICAgICAgIGZvbnRGYW1pbHk6IG51bGwsCiAgICAgICAgICAgIGZvbnRTaXplOiBudWxsLAogICAgICAgICAgICBib3JkZXI6IG51bGwsCiAgICAgICAgICAgIGJhY2tncm91bmQ6IG51bGwKICAgICAgICB9OwogICAgICAgIHRoaXMudGl0bGUgPSB7CiAgICAgICAgICAgIHRleHRDb2xvcjogbnVsbCwKICAgICAgICAgICAgZm9udEZhbWlseTogbnVsbCwKICAgICAgICAgICAgZm9udFNpemU6IG51bGwsCiAgICAgICAgICAgIHRleHRBbGlnbjogbnVsbAogICAgICAgIH07CiAgICAgICAgdGhpcy5zZXJpZXNTdHlsZXMgPSB7fTsKICAgICAgICB0aGlzLnNlcmllcyA9IFtdOwogICAgICAgIHRoaXMuZ3JpZCA9IHsKICAgICAgICAgICAgZHJhd0dyaWRsaW5lczogbnVsbCwKICAgICAgICAgICAgZ3JpZExpbmVDb2xvcjogbnVsbCwKICAgICAgICAgICAgZ3JpZExpbmVXaWR0aDogbnVsbCwKICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBudWxsLAogICAgICAgICAgICBib3JkZXJDb2xvcjogbnVsbCwKICAgICAgICAgICAgYm9yZGVyV2lkdGg6IG51bGwsCiAgICAgICAgICAgIHNoYWRvdzogbnVsbAogICAgICAgIH07CiAgICAgICAgdGhpcy5heGVzU3R5bGVzID0ge2xhYmVsOnt9LCB0aWNrczp7fX07CiAgICAgICAgdGhpcy5heGVzID0ge307CiAgICAgICAgaWYgKHR5cGVvZihvYmopID09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIHRoaXMuX25hbWUgPSBvYmo7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYodHlwZW9mKG9iaikgPT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgJC5qcXBsb3QuZXh0ZW5kKHRydWUsIHRoaXMsIG9iaik7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdmFyIEF4aXNQcm9wZXJ0aWVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5ib3JkZXJDb2xvciA9IG51bGw7CiAgICAgICAgdGhpcy5ib3JkZXJXaWR0aCA9IG51bGw7CiAgICAgICAgdGhpcy50aWNrcyA9IG5ldyBBeGlzVGlja3MoKTsKICAgICAgICB0aGlzLmxhYmVsID0gbmV3IEF4aXNMYWJlbCgpOwogICAgfTsKICAgIAogICAgdmFyIEF4aXNUaWNrcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuc2hvdyA9IG51bGw7CiAgICAgICAgdGhpcy5zaG93R3JpZGxpbmUgPSBudWxsOwogICAgICAgIHRoaXMuc2hvd0xhYmVsID0gbnVsbDsKICAgICAgICB0aGlzLnNob3dNYXJrID0gbnVsbDsKICAgICAgICB0aGlzLnNpemUgPSBudWxsOwogICAgICAgIHRoaXMudGV4dENvbG9yID0gbnVsbDsKICAgICAgICB0aGlzLndoaXRlU3BhY2UgPSBudWxsOwogICAgICAgIHRoaXMuZm9udFNpemUgPSBudWxsOwogICAgICAgIHRoaXMuZm9udEZhbWlseSA9IG51bGw7CiAgICB9OwogICAgCiAgICB2YXIgQXhpc0xhYmVsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy50ZXh0Q29sb3IgPSBudWxsOwogICAgICAgIHRoaXMud2hpdGVTcGFjZSA9IG51bGw7CiAgICAgICAgdGhpcy5mb250U2l6ZSA9IG51bGw7CiAgICAgICAgdGhpcy5mb250RmFtaWx5ID0gbnVsbDsKICAgICAgICB0aGlzLmZvbnRXZWlnaHQgPSBudWxsOwogICAgfTsKICAgIAogICAgdmFyIExpbmVTZXJpZXNQcm9wZXJ0aWVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5jb2xvcj1udWxsOwogICAgICAgIHRoaXMubGluZVdpZHRoPW51bGw7CiAgICAgICAgdGhpcy5saW5lUGF0dGVybj1udWxsOwogICAgICAgIHRoaXMuc2hhZG93PW51bGw7CiAgICAgICAgdGhpcy5maWxsQ29sb3I9bnVsbDsKICAgICAgICB0aGlzLnNob3dNYXJrZXI9bnVsbDsKICAgICAgICB0aGlzLm1hcmtlck9wdGlvbnMgPSBuZXcgTWFya2VyT3B0aW9ucygpOwogICAgfTsKICAgIAogICAgdmFyIE1hcmtlck9wdGlvbnMgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNob3cgPSBudWxsOwogICAgICAgIHRoaXMuc3R5bGUgPSBudWxsOwogICAgICAgIHRoaXMubGluZVdpZHRoID0gbnVsbDsKICAgICAgICB0aGlzLnNpemUgPSBudWxsOwogICAgICAgIHRoaXMuY29sb3IgPSBudWxsOwogICAgICAgIHRoaXMuc2hhZG93ID0gbnVsbDsKICAgIH07CiAgICAKICAgIHZhciBCYXJTZXJpZXNQcm9wZXJ0aWVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5jb2xvcj1udWxsOwogICAgICAgIHRoaXMuc2VyaWVzQ29sb3JzPW51bGw7CiAgICAgICAgdGhpcy5saW5lV2lkdGg9bnVsbDsKICAgICAgICB0aGlzLnNoYWRvdz1udWxsOwogICAgICAgIHRoaXMuYmFyUGFkZGluZz1udWxsOwogICAgICAgIHRoaXMuYmFyTWFyZ2luPW51bGw7CiAgICAgICAgdGhpcy5iYXJXaWR0aD1udWxsOwogICAgICAgIHRoaXMuaGlnaGxpZ2h0Q29sb3JzPW51bGw7CiAgICB9OwogICAgCiAgICB2YXIgUGllU2VyaWVzUHJvcGVydGllcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuc2VyaWVzQ29sb3JzPW51bGw7CiAgICAgICAgdGhpcy5wYWRkaW5nPW51bGw7CiAgICAgICAgdGhpcy5zbGljZU1hcmdpbj1udWxsOwogICAgICAgIHRoaXMuZmlsbD1udWxsOwogICAgICAgIHRoaXMuc2hhZG93PW51bGw7CiAgICAgICAgdGhpcy5zdGFydEFuZ2xlPW51bGw7CiAgICAgICAgdGhpcy5saW5lV2lkdGg9bnVsbDsKICAgICAgICB0aGlzLmhpZ2hsaWdodENvbG9ycz1udWxsOwogICAgfTsKICAgIAogICAgdmFyIERvbnV0U2VyaWVzUHJvcGVydGllcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuc2VyaWVzQ29sb3JzPW51bGw7CiAgICAgICAgdGhpcy5wYWRkaW5nPW51bGw7CiAgICAgICAgdGhpcy5zbGljZU1hcmdpbj1udWxsOwogICAgICAgIHRoaXMuZmlsbD1udWxsOwogICAgICAgIHRoaXMuc2hhZG93PW51bGw7CiAgICAgICAgdGhpcy5zdGFydEFuZ2xlPW51bGw7CiAgICAgICAgdGhpcy5saW5lV2lkdGg9bnVsbDsKICAgICAgICB0aGlzLmlubmVyRGlhbWV0ZXI9bnVsbDsKICAgICAgICB0aGlzLnRoaWNrbmVzcz1udWxsOwogICAgICAgIHRoaXMucmluZ01hcmdpbj1udWxsOwogICAgICAgIHRoaXMuaGlnaGxpZ2h0Q29sb3JzPW51bGw7CiAgICB9OwogICAgCiAgICB2YXIgRnVubmVsU2VyaWVzUHJvcGVydGllcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY29sb3I9bnVsbDsKICAgICAgICB0aGlzLmxpbmVXaWR0aD1udWxsOwogICAgICAgIHRoaXMuc2hhZG93PW51bGw7CiAgICAgICAgdGhpcy5wYWRkaW5nPW51bGw7CiAgICAgICAgdGhpcy5zZWN0aW9uTWFyZ2luPW51bGw7CiAgICAgICAgdGhpcy5zZXJpZXNDb2xvcnM9bnVsbDsKICAgICAgICB0aGlzLmhpZ2hsaWdodENvbG9ycz1udWxsOwogICAgfTsKICAgIAogICAgdmFyIE1ldGVyU2VyaWVzUHJvcGVydGllcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMucGFkZGluZz1udWxsOwogICAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yPW51bGw7CiAgICAgICAgdGhpcy5yaW5nQ29sb3I9bnVsbDsKICAgICAgICB0aGlzLnRpY2tDb2xvcj1udWxsOwogICAgICAgIHRoaXMucmluZ1dpZHRoPW51bGw7CiAgICAgICAgdGhpcy5pbnRlcnZhbENvbG9ycz1udWxsOwogICAgICAgIHRoaXMuaW50ZXJ2YWxJbm5lclJhZGl1cz1udWxsOwogICAgICAgIHRoaXMuaW50ZXJ2YWxPdXRlclJhZGl1cz1udWxsOwogICAgICAgIHRoaXMuaHViUmFkaXVzPW51bGw7CiAgICAgICAgdGhpcy5uZWVkbGVUaGlja25lc3M9bnVsbDsKICAgICAgICB0aGlzLm5lZWRsZVBhZD1udWxsOwogICAgfTsKICAgICAgICAKCgoKICAgICQuZm4uanFwbG90Q2hpbGRUZXh0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICQodGhpcykuY29udGVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVUeXBlID09IDM7ICAvLyBOb2RlLlRFWFRfTk9ERSBub3QgZGVmaW5lZCBpbiBJNwogICAgICAgIH0pLnRleHQoKTsKICAgIH07CgogICAgLy8gUmV0dXJucyBmb250IHN0eWxlIGFzIGFiYnJldmlhdGlvbiBmb3IgImZvbnQiIHByb3BlcnR5LgogICAgJC5mbi5qcXBsb3RHZXRDb21wdXRlZEZvbnRTdHlsZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBjc3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSA/ICB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzWzBdLCAiIikgOiB0aGlzWzBdLmN1cnJlbnRTdHlsZTsKICAgICAgICB2YXIgYXR0cnMgPSBjc3NbJ2ZvbnQtc3R5bGUnXSA/IFsnZm9udC1zdHlsZScsICdmb250LXdlaWdodCcsICdmb250LXNpemUnLCAnZm9udC1mYW1pbHknXSA6IFsnZm9udFN0eWxlJywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNpemUnLCAnZm9udEZhbWlseSddOwogICAgICAgIHZhciBzdHlsZSA9IFtdOwoKICAgICAgICBmb3IgKHZhciBpPTAgOyBpIDwgYXR0cnMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgdmFyIGF0dHIgPSBTdHJpbmcoY3NzW2F0dHJzW2ldXSk7CgogICAgICAgICAgICBpZiAoYXR0ciAmJiBhdHRyICE9ICdub3JtYWwnKSB7CiAgICAgICAgICAgICAgICBzdHlsZS5wdXNoKGF0dHIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHlsZS5qb2luKCcgJyk7CiAgICB9OwoKICAgIC8qKgogICAgICogTmFtZXNwYWNlOiAkLmZuCiAgICAgKiBqUXVlcnkgbmFtZXNwYWNlIHRvIGF0dGFjaCBmdW5jdGlvbnMgdG8galF1ZXJ5IGVsZW1lbnRzLgogICAgICogIAogICAgICovCgogICAgJC5mbi5qcXBsb3RUb0ltYWdlQ2FudmFzID0gZnVuY3Rpb24ob3B0aW9ucykgewoKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICB2YXIgeF9vZmZzZXQgPSAob3B0aW9ucy54X29mZnNldCA9PSBudWxsKSA/IDAgOiBvcHRpb25zLnhfb2Zmc2V0OwogICAgICAgIHZhciB5X29mZnNldCA9IChvcHRpb25zLnlfb2Zmc2V0ID09IG51bGwpID8gMCA6IG9wdGlvbnMueV9vZmZzZXQ7CiAgICAgICAgdmFyIGJhY2tncm91bmRDb2xvciA9IChvcHRpb25zLmJhY2tncm91bmRDb2xvciA9PSBudWxsKSA/ICdyZ2IoMjU1LDI1NSwyNTUpJyA6IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yOwoKICAgICAgICBpZiAoJCh0aGlzKS53aWR0aCgpID09IDAgfHwgJCh0aGlzKS5oZWlnaHQoKSA9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy8gZXhjYW52YXMgYW5kIGhlbmNlIElFIDwgOSBkbyBub3Qgc3VwcG9ydCB0b0RhdGFVUkwgYW5kIGNhbm5vdCBleHBvcnQgaW1hZ2VzLgogICAgICAgIGlmICgkLmpxcGxvdC51c2VfZXhjYW52YXMpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBuZXdDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgICAgICB2YXIgaCA9ICQodGhpcykub3V0ZXJIZWlnaHQodHJ1ZSk7CiAgICAgICAgdmFyIHcgPSAkKHRoaXMpLm91dGVyV2lkdGgodHJ1ZSk7CiAgICAgICAgdmFyIG9mZnMgPSAkKHRoaXMpLm9mZnNldCgpOwogICAgICAgIHZhciBwbG90bGVmdCA9IG9mZnMubGVmdDsKICAgICAgICB2YXIgcGxvdHRvcCA9IG9mZnMudG9wOwogICAgICAgIHZhciB0cmFuc3ggPSAwLCB0cmFuc3kgPSAwOwoKICAgICAgICAvLyBoYXZlIHRvIGNoZWNrIGlmIGFueSBlbGVtZW50cyBhcmUgaGFuZ2luZyBvdXRzaWRlIG9mIHBsb3QgYXJlYSBiZWZvcmUgcmVuZGVyaW5nLAogICAgICAgIC8vIHNpbmNlIGNoYW5naW5nIHdpZHRoIG9mIGNhbnZhcyB3aWxsIGVyYXNlIGNhbnZhcy4KCiAgICAgICAgdmFyIGNsc2VzID0gWydqcXBsb3QtdGFibGUtbGVnZW5kJywgJ2pxcGxvdC14YXhpcy10aWNrJywgJ2pxcGxvdC14MmF4aXMtdGljaycsICdqcXBsb3QteWF4aXMtdGljaycsICdqcXBsb3QteTJheGlzLXRpY2snLCAnanFwbG90LXkzYXhpcy10aWNrJywgCiAgICAgICAgJ2pxcGxvdC15NGF4aXMtdGljaycsICdqcXBsb3QteTVheGlzLXRpY2snLCAnanFwbG90LXk2YXhpcy10aWNrJywgJ2pxcGxvdC15N2F4aXMtdGljaycsICdqcXBsb3QteThheGlzLXRpY2snLCAnanFwbG90LXk5YXhpcy10aWNrJywKICAgICAgICAnanFwbG90LXhheGlzLWxhYmVsJywgJ2pxcGxvdC14MmF4aXMtbGFiZWwnLCAnanFwbG90LXlheGlzLWxhYmVsJywgJ2pxcGxvdC15MmF4aXMtbGFiZWwnLCAnanFwbG90LXkzYXhpcy1sYWJlbCcsICdqcXBsb3QteTRheGlzLWxhYmVsJywgCiAgICAgICAgJ2pxcGxvdC15NWF4aXMtbGFiZWwnLCAnanFwbG90LXk2YXhpcy1sYWJlbCcsICdqcXBsb3QteTdheGlzLWxhYmVsJywgJ2pxcGxvdC15OGF4aXMtbGFiZWwnLCAnanFwbG90LXk5YXhpcy1sYWJlbCcgXTsKCiAgICAgICAgdmFyIHRlbXB0b3AsIHRlbXBsZWZ0LCB0ZW1wYm90dG9tLCB0ZW1wcmlnaHQ7CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xzZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuJytjbHNlc1tpXSkuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHRlbXB0b3AgPSAkKHRoaXMpLm9mZnNldCgpLnRvcCAtIHBsb3R0b3A7CiAgICAgICAgICAgICAgICB0ZW1wbGVmdCA9ICQodGhpcykub2Zmc2V0KCkubGVmdCAtIHBsb3RsZWZ0OwogICAgICAgICAgICAgICAgdGVtcHJpZ2h0ID0gdGVtcGxlZnQgKyAkKHRoaXMpLm91dGVyV2lkdGgodHJ1ZSkgKyB0cmFuc3g7CiAgICAgICAgICAgICAgICB0ZW1wYm90dG9tID0gdGVtcHRvcCArICQodGhpcykub3V0ZXJIZWlnaHQodHJ1ZSkgKyB0cmFuc3k7CiAgICAgICAgICAgICAgICBpZiAodGVtcGxlZnQgPCAtdHJhbnN4KSB7CiAgICAgICAgICAgICAgICAgICAgdyA9IHcgLSB0cmFuc3ggLSB0ZW1wbGVmdDsKICAgICAgICAgICAgICAgICAgICB0cmFuc3ggPSAtdGVtcGxlZnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodGVtcHRvcCA8IC10cmFuc3kpIHsKICAgICAgICAgICAgICAgICAgICBoID0gaCAtIHRyYW5zeSAtIHRlbXB0b3A7CiAgICAgICAgICAgICAgICAgICAgdHJhbnN5ID0gLSB0ZW1wdG9wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHRlbXByaWdodCA+IHcpIHsKICAgICAgICAgICAgICAgICAgICB3ID0gdGVtcHJpZ2h0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHRlbXBib3R0b20gPiBoKSB7CiAgICAgICAgICAgICAgICAgICAgaCA9ICB0ZW1wYm90dG9tOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIG5ld0NhbnZhcy53aWR0aCA9IHcgKyBOdW1iZXIoeF9vZmZzZXQpOwogICAgICAgIG5ld0NhbnZhcy5oZWlnaHQgPSBoICsgTnVtYmVyKHlfb2Zmc2V0KTsKCiAgICAgICAgdmFyIG5ld0NvbnRleHQgPSBuZXdDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsgCgogICAgICAgIG5ld0NvbnRleHQuc2F2ZSgpOwogICAgICAgIG5ld0NvbnRleHQuZmlsbFN0eWxlID0gYmFja2dyb3VuZENvbG9yOwogICAgICAgIG5ld0NvbnRleHQuZmlsbFJlY3QoMCwwLCBuZXdDYW52YXMud2lkdGgsIG5ld0NhbnZhcy5oZWlnaHQpOwogICAgICAgIG5ld0NvbnRleHQucmVzdG9yZSgpOwoKICAgICAgICBuZXdDb250ZXh0LnRyYW5zbGF0ZSh0cmFuc3gsIHRyYW5zeSk7CiAgICAgICAgbmV3Q29udGV4dC50ZXh0QWxpZ24gPSAnbGVmdCc7CiAgICAgICAgbmV3Q29udGV4dC50ZXh0QmFzZWxpbmUgPSAndG9wJzsKCiAgICAgICAgZnVuY3Rpb24gZ2V0TGluZWhlaWdodChlbCkgewogICAgICAgICAgICB2YXIgbGluZWhlaWdodCA9IHBhcnNlSW50KCQoZWwpLmNzcygnbGluZS1oZWlnaHQnKSwgMTApOwoKICAgICAgICAgICAgaWYgKGlzTmFOKGxpbmVoZWlnaHQpKSB7CiAgICAgICAgICAgICAgICBsaW5laGVpZ2h0ID0gcGFyc2VJbnQoJChlbCkuY3NzKCdmb250LXNpemUnKSwgMTApICogMS4yOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBsaW5laGVpZ2h0OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gd3JpdGVXcmFwcGVkVGV4dCAoZWwsIGNvbnRleHQsIHRleHQsIGxlZnQsIHRvcCwgY2FudmFzV2lkdGgpIHsKICAgICAgICAgICAgdmFyIGxpbmVoZWlnaHQgPSBnZXRMaW5laGVpZ2h0KGVsKTsKICAgICAgICAgICAgdmFyIHRhZ3dpZHRoID0gJChlbCkuaW5uZXJXaWR0aCgpOwogICAgICAgICAgICB2YXIgdGFnaGVpZ2h0ID0gJChlbCkuaW5uZXJIZWlnaHQoKTsKICAgICAgICAgICAgdmFyIHdvcmRzID0gdGV4dC5zcGxpdCgvXHMrLyk7CiAgICAgICAgICAgIHZhciB3bCA9IHdvcmRzLmxlbmd0aDsKICAgICAgICAgICAgdmFyIHcgPSAnJzsKICAgICAgICAgICAgdmFyIGJyZWFrcyA9IFtdOwogICAgICAgICAgICB2YXIgdGVtcHRvcCA9IHRvcDsKICAgICAgICAgICAgdmFyIHRlbXBsZWZ0ID0gbGVmdDsKCiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx3bDsgaSsrKSB7CiAgICAgICAgICAgICAgICB3ICs9IHdvcmRzW2ldOwogICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWVhc3VyZVRleHQodykud2lkdGggPiB0YWd3aWR0aCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrcy5wdXNoKGkpOwogICAgICAgICAgICAgICAgICAgIHcgPSAnJzsKICAgICAgICAgICAgICAgICAgICBpLS07CiAgICAgICAgICAgICAgICB9ICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGJyZWFrcy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgIC8vIGNlbnRlciB0ZXh0IGlmIG5lY2Vzc2FyeQogICAgICAgICAgICAgICAgaWYgKCQoZWwpLmNzcygndGV4dEFsaWduJykgPT09ICdjZW50ZXInKSB7CiAgICAgICAgICAgICAgICAgICAgdGVtcGxlZnQgPSBsZWZ0ICsgKGNhbnZhc1dpZHRoIC0gY29udGV4dC5tZWFzdXJlVGV4dCh3KS53aWR0aCkvMiAgLSB0cmFuc3g7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxUZXh0KHRleHQsIHRlbXBsZWZ0LCB0b3ApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdyA9IHdvcmRzLnNsaWNlKDAsIGJyZWFrc1swXSkuam9pbignICcpOwogICAgICAgICAgICAgICAgLy8gY2VudGVyIHRleHQgaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgICAgICBpZiAoJChlbCkuY3NzKCd0ZXh0QWxpZ24nKSA9PT0gJ2NlbnRlcicpIHsKICAgICAgICAgICAgICAgICAgICB0ZW1wbGVmdCA9IGxlZnQgKyAoY2FudmFzV2lkdGggLSBjb250ZXh0Lm1lYXN1cmVUZXh0KHcpLndpZHRoKS8yICAtIHRyYW5zeDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFRleHQodywgdGVtcGxlZnQsIHRlbXB0b3ApOwogICAgICAgICAgICAgICAgdGVtcHRvcCArPSBsaW5laGVpZ2h0OwogICAgICAgICAgICAgICAgZm9yICh2YXIgaT0xLCBsPWJyZWFrcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdyA9IHdvcmRzLnNsaWNlKGJyZWFrc1tpLTFdLCBicmVha3NbaV0pLmpvaW4oJyAnKTsKICAgICAgICAgICAgICAgICAgICAvLyBjZW50ZXIgdGV4dCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgICAgICAgICBpZiAoJChlbCkuY3NzKCd0ZXh0QWxpZ24nKSA9PT0gJ2NlbnRlcicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxlZnQgPSBsZWZ0ICsgKGNhbnZhc1dpZHRoIC0gY29udGV4dC5tZWFzdXJlVGV4dCh3KS53aWR0aCkvMiAgLSB0cmFuc3g7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFRleHQodywgdGVtcGxlZnQsIHRlbXB0b3ApOwogICAgICAgICAgICAgICAgICAgIHRlbXB0b3AgKz0gbGluZWhlaWdodDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHcgPSB3b3Jkcy5zbGljZShicmVha3NbaS0xXSwgd29yZHMubGVuZ3RoKS5qb2luKCcgJyk7CiAgICAgICAgICAgICAgICAvLyBjZW50ZXIgdGV4dCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgICAgIGlmICgkKGVsKS5jc3MoJ3RleHRBbGlnbicpID09PSAnY2VudGVyJykgewogICAgICAgICAgICAgICAgICAgIHRlbXBsZWZ0ID0gbGVmdCArIChjYW52YXNXaWR0aCAtIGNvbnRleHQubWVhc3VyZVRleHQodykud2lkdGgpLzIgIC0gdHJhbnN4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGV4dC5maWxsVGV4dCh3LCB0ZW1wbGVmdCwgdGVtcHRvcCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBfanFwVG9JbWFnZShlbCwgeF9vZmZzZXQsIHlfb2Zmc2V0KSB7CiAgICAgICAgICAgIHZhciB0YWduYW1lID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICB2YXIgcCA9ICQoZWwpLnBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBjc3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSA/ICB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgIiIpIDogZWwuY3VycmVudFN0eWxlOyAvLyBmb3IgSUUgPCA5CiAgICAgICAgICAgIHZhciBsZWZ0ID0geF9vZmZzZXQgKyBwLmxlZnQgKyBwYXJzZUludChjc3MubWFyZ2luTGVmdCwgMTApICsgcGFyc2VJbnQoY3NzLmJvcmRlckxlZnRXaWR0aCwgMTApICsgcGFyc2VJbnQoY3NzLnBhZGRpbmdMZWZ0LCAxMCk7CiAgICAgICAgICAgIHZhciB0b3AgPSB5X29mZnNldCArIHAudG9wICsgcGFyc2VJbnQoY3NzLm1hcmdpblRvcCwgMTApICsgcGFyc2VJbnQoY3NzLmJvcmRlclRvcFdpZHRoLCAxMCkrIHBhcnNlSW50KGNzcy5wYWRkaW5nVG9wLCAxMCk7CiAgICAgICAgICAgIHZhciB3ID0gbmV3Q2FudmFzLndpZHRoOwogICAgICAgICAgICAvLyB2YXIgbGVmdCA9IHhfb2Zmc2V0ICsgcC5sZWZ0ICsgJChlbCkuY3NzKCdtYXJnaW5MZWZ0JykgKyAkKGVsKS5jc3MoJ2JvcmRlckxlZnRXaWR0aCcpIAoKICAgICAgICAgICAgLy8gc29tZWhvdyBpbiBoZXJlLCBmb3IgZGl2cyB3aXRoaW4gZGl2cywgdGhlIHdpZHRoIG9mIHRoZSBpbm5lciBkaXYgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgY2FudmFzLgoKICAgICAgICAgICAgaWYgKCh0YWduYW1lID09ICdkaXYnIHx8IHRhZ25hbWUgPT0gJ3NwYW4nKSAmJiAhJChlbCkuaGFzQ2xhc3MoJ2pxcGxvdC1oaWdobGlnaHRlci10b29sdGlwJykpIHsKICAgICAgICAgICAgICAgICQoZWwpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBfanFwVG9JbWFnZSh0aGlzLCBsZWZ0LCB0b3ApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9ICQoZWwpLmpxcGxvdENoaWxkVGV4dCgpOwoKICAgICAgICAgICAgICAgIGlmICh0ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dC5mb250ID0gJChlbCkuanFwbG90R2V0Q29tcHV0ZWRGb250U3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICBuZXdDb250ZXh0LmZpbGxTdHlsZSA9ICQoZWwpLmNzcygnY29sb3InKTsKCiAgICAgICAgICAgICAgICAgICAgd3JpdGVXcmFwcGVkVGV4dChlbCwgbmV3Q29udGV4dCwgdGV4dCwgbGVmdCwgdG9wLCB3KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gaGFuZGxlIHRoZSBzdGFuZGFyZCB0YWJsZSBsZWdlbmQKCiAgICAgICAgICAgIGVsc2UgaWYgKHRhZ25hbWUgPT09ICd0YWJsZScgJiYgJChlbCkuaGFzQ2xhc3MoJ2pxcGxvdC10YWJsZS1sZWdlbmQnKSkgewogICAgICAgICAgICAgICAgbmV3Q29udGV4dC5zdHJva2VTdHlsZSA9ICQoZWwpLmNzcygnYm9yZGVyLXRvcC1jb2xvcicpOwogICAgICAgICAgICAgICAgbmV3Q29udGV4dC5maWxsU3R5bGUgPSAkKGVsKS5jc3MoJ2JhY2tncm91bmQtY29sb3InKTsKICAgICAgICAgICAgICAgIG5ld0NvbnRleHQuZmlsbFJlY3QobGVmdCwgdG9wLCAkKGVsKS5pbm5lcldpZHRoKCksICQoZWwpLmlubmVySGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KCQoZWwpLmNzcygnYm9yZGVyLXRvcC13aWR0aCcpLCAxMCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dC5zdHJva2VSZWN0KGxlZnQsIHRvcCwgJChlbCkuaW5uZXJXaWR0aCgpLCAkKGVsKS5pbm5lckhlaWdodCgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBmaW5kIGFsbCB0aGUgc3dhdGNoZXMKICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoJ2Rpdi5qcXBsb3QtdGFibGUtbGVnZW5kLXN3YXRjaC1vdXRsaW5lJykuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGZpcnN0IGRpdiBhbmQgc3Ryb2tlIGl0CiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSAkKHRoaXMpOwogICAgICAgICAgICAgICAgICAgIG5ld0NvbnRleHQuc3Ryb2tlU3R5bGUgPSBlbGVtLmNzcygnYm9yZGVyLXRvcC1jb2xvcicpOwogICAgICAgICAgICAgICAgICAgIHZhciBsID0gbGVmdCArIGVsZW0ucG9zaXRpb24oKS5sZWZ0OwogICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdG9wICsgZWxlbS5wb3NpdGlvbigpLnRvcDsKICAgICAgICAgICAgICAgICAgICBuZXdDb250ZXh0LnN0cm9rZVJlY3QobCwgdCwgZWxlbS5pbm5lcldpZHRoKCksIGVsZW0uaW5uZXJIZWlnaHQoKSk7CgogICAgICAgICAgICAgICAgICAgIC8vIG5vdyBmaWxsIHRoZSBzd2F0Y2gKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBsICs9IHBhcnNlSW50KGVsZW0uY3NzKCdwYWRkaW5nLWxlZnQnKSwgMTApOwogICAgICAgICAgICAgICAgICAgIHQgKz0gcGFyc2VJbnQoZWxlbS5jc3MoJ3BhZGRpbmctdG9wJyksIDEwKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IGVsZW0uaW5uZXJIZWlnaHQoKSAtIDIgKiBwYXJzZUludChlbGVtLmNzcygncGFkZGluZy10b3AnKSwgMTApOwogICAgICAgICAgICAgICAgICAgIHZhciB3ID0gZWxlbS5pbm5lcldpZHRoKCkgLSAyICogcGFyc2VJbnQoZWxlbS5jc3MoJ3BhZGRpbmctbGVmdCcpLCAxMCk7CgogICAgICAgICAgICAgICAgICAgIHZhciBzd2F0Y2ggPSBlbGVtLmNoaWxkcmVuKCdkaXYuanFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2gnKTsKICAgICAgICAgICAgICAgICAgICBuZXdDb250ZXh0LmZpbGxTdHlsZSA9IHN3YXRjaC5jc3MoJ2JhY2tncm91bmQtY29sb3InKTsKICAgICAgICAgICAgICAgICAgICBuZXdDb250ZXh0LmZpbGxSZWN0KGwsIHQsIHcsIGgpOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy8gbm93IGFkZCB0ZXh0CgogICAgICAgICAgICAgICAgJChlbCkuZmluZCgndGQuanFwbG90LXRhYmxlLWxlZ2VuZC1sYWJlbCcpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9ICQodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSBsZWZ0ICsgZWxlbS5wb3NpdGlvbigpLmxlZnQ7CiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0b3AgKyBlbGVtLnBvc2l0aW9uKCkudG9wICsgcGFyc2VJbnQoZWxlbS5jc3MoJ3BhZGRpbmctdG9wJyksIDEwKTsKICAgICAgICAgICAgICAgICAgICBuZXdDb250ZXh0LmZvbnQgPSBlbGVtLmpxcGxvdEdldENvbXB1dGVkRm9udFN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dC5maWxsU3R5bGUgPSBlbGVtLmNzcygnY29sb3InKTsKICAgICAgICAgICAgICAgICAgICB3cml0ZVdyYXBwZWRUZXh0KGVsZW0sIG5ld0NvbnRleHQsIGVsZW0udGV4dCgpLCBsLCB0LCB3KTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIHZhciBlbGVtID0gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxzZSBpZiAodGFnbmFtZSA9PSAnY2FudmFzJykgewogICAgICAgICAgICAgICAgbmV3Q29udGV4dC5kcmF3SW1hZ2UoZWwsIGxlZnQsIHRvcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJCh0aGlzKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIF9qcXBUb0ltYWdlKHRoaXMsIHhfb2Zmc2V0LCB5X29mZnNldCk7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIG5ld0NhbnZhczsKICAgIH07CgogICAgLy8gcmV0dXJuIHRoZSByYXcgaW1hZ2UgZGF0YSBzdHJpbmcuCiAgICAvLyBTaG91bGQgd29yayBvbiBjYW52YXMgc3VwcG9ydGluZyBicm93c2Vycy4KICAgICQuZm4uanFwbG90VG9JbWFnZVN0ciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICB2YXIgaW1nQ2FudmFzID0gJCh0aGlzKS5qcXBsb3RUb0ltYWdlQ2FudmFzKG9wdGlvbnMpOwogICAgICAgIGlmIChpbWdDYW52YXMpIHsKICAgICAgICAgICAgcmV0dXJuIGltZ0NhbnZhcy50b0RhdGFVUkwoImltYWdlL3BuZyIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyByZXR1cm4gYSBET00gPGltZz4gZWxlbWVudCBhbmQgcmV0dXJuIGl0LgogICAgLy8gU2hvdWxkIHdvcmsgb24gY2FudmFzIHN1cHBvcnRpbmcgYnJvd3NlcnMuCiAgICAkLmZuLmpxcGxvdFRvSW1hZ2VFbGVtID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CiAgICAgICAgdmFyIHN0ciA9ICQodGhpcykuanFwbG90VG9JbWFnZVN0cihvcHRpb25zKTsKICAgICAgICBlbGVtLnNyYyA9IHN0cjsKICAgICAgICByZXR1cm4gZWxlbTsKICAgIH07CgogICAgLy8gcmV0dXJuIGEgc3RyaW5nIGZvciBhbiA8aW1nPiBlbGVtZW50IGFuZCByZXR1cm4gaXQuCiAgICAvLyBTaG91bGQgd29yayBvbiBjYW52YXMgc3VwcG9ydGluZyBicm93c2Vycy4KICAgICQuZm4uanFwbG90VG9JbWFnZUVsZW1TdHIgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgdmFyIHN0ciA9ICc8aW1nIHNyYz0nKyQodGhpcykuanFwbG90VG9JbWFnZVN0cihvcHRpb25zKSsnIC8+JzsKICAgICAgICByZXR1cm4gc3RyOwogICAgfTsKCiAgICAvLyBOb3QgZ3VhcmFudGVlZCB0byB3b3JrLCBldmVuIG9uIGNhbnZhcyBzdXBwb3J0aW5nIGJyb3dzZXJzIGR1ZSB0byAKICAgIC8vIGxpbWl0YXRpb25zIHdpdGggbG9jYXRpb24uaHJlZiBhbmQgYnJvd3NlciBzdXBwb3J0LgogICAgJC5mbi5qcXBsb3RTYXZlSW1hZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgaW1nRGF0YSA9ICQodGhpcykuanFwbG90VG9JbWFnZVN0cih7fSk7CiAgICAgICAgaWYgKGltZ0RhdGEpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBpbWdEYXRhLnJlcGxhY2UoImltYWdlL3BuZyIsICJpbWFnZS9vY3RldC1zdHJlYW0iKTsKICAgICAgICB9CgogICAgfTsKCiAgICAvLyBOb3QgZ3VhcmFudGVlZCB0byB3b3JrLCBldmVuIG9uIGNhbnZhcyBzdXBwb3J0aW5nIGJyb3dzZXJzIGR1ZSB0bwogICAgLy8gbGltaXRhdGlvbnMgd2l0aCB3aW5kb3cub3BlbiBhbmQgYXJiaXRyYXJ5IGRhdGEuCiAgICAkLmZuLmpxcGxvdFZpZXdJbWFnZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBpbWdTdHIgPSAkKHRoaXMpLmpxcGxvdFRvSW1hZ2VFbGVtU3RyKHt9KTsKICAgICAgICB2YXIgaW1nRGF0YSA9ICQodGhpcykuanFwbG90VG9JbWFnZVN0cih7fSk7CiAgICAgICAgaWYgKGltZ1N0cikgewogICAgICAgICAgICB2YXIgdyA9IHdpbmRvdy5vcGVuKCcnKTsKICAgICAgICAgICAgdy5kb2N1bWVudC5vcGVuKCJpbWFnZS9wbmciKTsKICAgICAgICAgICAgdy5kb2N1bWVudC53cml0ZShpbWdTdHIpOwogICAgICAgICAgICB3LmRvY3VtZW50LmNsb3NlKCk7CiAgICAgICAgICAgIHcgPSBudWxsOwogICAgICAgIH0KICAgIH07CiAgICAKCgoKICAgIC8qKiAKICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogPHA+T2JqZWN0IHdpdGggZXh0ZW5kZWQgZGF0ZSBwYXJzaW5nIGFuZCBmb3JtYXR0aW5nIGNhcGFiaWxpdGllcy4KICAgICAqIFRoaXMgbGlicmFyeSBib3Jyb3dzIG1hbnkgY29uY2VwdHMgYW5kIGlkZWFzIGZyb20gdGhlIERhdGUgSW5zdGFuY2UgCiAgICAgKiBNZXRob2RzIGJ5IEtlbiBTbnlkZXIgYWxvbmcgd2l0aCBzb21lIHBhcnRzIG9mIEtlbidzIGFjdHVhbCBjb2RlLjwvcD4KICAgICAqCiAgICAgKiA8cD5qc0RhdGUgdGFrZXMgYSBkaWZmZXJlbnQgYXBwcm9hY2ggYnkgbm90IGV4dGVuZGluZyB0aGUgYnVpbHQtaW4gCiAgICAgKiBEYXRlIE9iamVjdCwgaW1wcm92aW5nIGRhdGUgcGFyc2luZywgYWxsb3dpbmcgZm9yIG11bHRpcGxlIGZvcm1hdHRpbmcgCiAgICAgKiBzeW50YXhlcyBhbmQgbXVsdGlwbGUgYW5kIG1vcmUgZWFzaWx5IGV4cGFuZGFibGUgbG9jYWxpemF0aW9uLjwvcD4KICAgICAqIAogICAgICogQGF1dGhvciBDaHJpcyBMZW9uZWxsbwogICAgICogQGRhdGUgI2RhdGUjCiAgICAgKiBAdmVyc2lvbiAjVkVSU0lPTiMKICAgICAqIEBjb3B5cmlnaHQgKGMpIDIwMTAtMjAxMyBDaHJpcyBMZW9uZWxsbwogICAgICoganNEYXRlIGlzIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHVzZSBpbiBhbGwgcGVyc29uYWwgb3IgY29tbWVyY2lhbCBwcm9qZWN0cyAKICAgICAqIHVuZGVyIGJvdGggdGhlIE1JVCBhbmQgR1BMIHZlcnNpb24gMi4wIGxpY2Vuc2VzLiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiAKICAgICAqIGNob29zZSB0aGUgbGljZW5zZSB0aGF0IGJlc3Qgc3VpdHMgeW91ciBwcm9qZWN0IGFuZCB1c2UgaXQgYWNjb3JkaW5nbHkuCiAgICAgKiAKICAgICAqIDxwPktlbidzIG9yaWdpbmFsIERhdGUgSW5zdGFuY2UgTWV0aG9kcyBhbmQgY29weXJpZ2h0IG5vdGljZTo8L3A+CiAgICAgKiA8cHJlPgogICAgICogS2VuIFNueWRlciAoa2VuIGQgc255ZGVyIGF0IGdtYWlsIGRvdCBjb20pCiAgICAgKiAyMDA4LTA5LTEwCiAgICAgKiB2ZXJzaW9uIDIuMC4yIChodHRwOi8va2VuZHNueWRlci5jb20vc2FuZGJveC9kYXRlLykgICAgIAogICAgICogQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiBMaWNlbnNlIDMuMCAoaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLykKICAgICAqIDwvcHJlPgogICAgICogCiAgICAgKiBAY2xhc3MKICAgICAqIEBuYW1lIGpzRGF0ZQogICAgICogQHBhcmFtICB7U3RyaW5nIHwgTnVtYmVyIHwgQXJyYXkgfCBEYXRlJm5ic3A7T2JqZWN0IHwgT3B0aW9ucyZuYnNwO09iamVjdH0gYXJndW1lbnRzIE9wdGlvbmFsIGFyZ3VtZW50cywgZWl0aGVyIGEgcGFyc2FibGUgZGF0ZS90aW1lIHN0cmluZywKICAgICAqIGEgSmF2YVNjcmlwdCB0aW1lc3RhbXAsIGFuIGFycmF5IG9mIG51bWJlcnMgb2YgZm9ybSBbeWVhciwgbW9udGgsIGRheSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kc10sCiAgICAgKiBhIERhdGUgb2JqZWN0LCBvciBhbiBvcHRpb25zIG9iamVjdCBvZiBmb3JtIHtzeW50YXg6ICJwZXJsIiwgZGF0ZTpzb21lIERhdGV9IHdoZXJlIGFsbCBvcHRpb25zIGFyZSBvcHRpb25hbC4KICAgICAqLwogICAgIAogICAgdmFyIGpzRGF0ZSA9IGZ1bmN0aW9uICgpIHsKICAgIAogICAgICAgIHRoaXMuc3ludGF4ID0ganNEYXRlLmNvbmZpZy5zeW50YXg7CiAgICAgICAgdGhpcy5fdHlwZSA9ICJqc0RhdGUiOwogICAgICAgIHRoaXMucHJveHkgPSBuZXcgRGF0ZSgpOwogICAgICAgIHRoaXMub3B0aW9ucyA9IHt9OwogICAgICAgIHRoaXMubG9jYWxlID0ganNEYXRlLnJlZ2lvbmFsLmdldExvY2FsZSgpOwogICAgICAgIHRoaXMuZm9ybWF0U3RyaW5nID0gJyc7CiAgICAgICAgdGhpcy5kZWZhdWx0Q2VudHVyeSA9IGpzRGF0ZS5jb25maWcuZGVmYXVsdENlbnR1cnk7CgogICAgICAgIHN3aXRjaCAoIGFyZ3VtZW50cy5sZW5ndGggKSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAvLyBvdGhlciBvYmplY3RzIGVpdGhlciB3b24ndCBoYXZlIGEgX3R5cGUgcHJvcGVydHkgb3IsCiAgICAgICAgICAgICAgICAvLyBpZiB0aGV5IGRvLCBpdCBzaG91bGRuJ3QgYmUgc2V0IHRvICJqc0RhdGUiLCBzbwogICAgICAgICAgICAgICAgLy8gYXNzdW1lIGl0IGlzIGFuIG9wdGlvbnMgYXJndW1lbnQuCiAgICAgICAgICAgICAgICBpZiAoZ2V0X3R5cGUoYXJndW1lbnRzWzBdKSA9PSAiW29iamVjdCBPYmplY3RdIiAmJiBhcmd1bWVudHNbMF0uX3R5cGUgIT0gImpzRGF0ZSIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgb3B0cyA9IHRoaXMub3B0aW9ucyA9IGFyZ3VtZW50c1swXTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bnRheCA9IG9wdHMuc3ludGF4IHx8IHRoaXMuc3ludGF4OwogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENlbnR1cnkgPSBvcHRzLmRlZmF1bHRDZW50dXJ5IHx8IHRoaXMuZGVmYXVsdENlbnR1cnk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm94eSA9IGpzRGF0ZS5jcmVhdGVEYXRlKG9wdHMuZGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3h5ID0ganNEYXRlLmNyZWF0ZURhdGUoYXJndW1lbnRzWzBdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdmFyIGEgPSBbXTsKICAgICAgICAgICAgICAgIGZvciAoIHZhciBpPTA7IGk8YXJndW1lbnRzLmxlbmd0aDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgIGEucHVzaChhcmd1bWVudHNbaV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgdGhlIGN1cnJlbnQgZGF0ZS90aW1lPwogICAgICAgICAgICAgICAgdGhpcy5wcm94eSA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgICAgICB0aGlzLnByb3h5LnNldEZ1bGxZZWFyLmFwcGx5KCB0aGlzLnByb3h5LCBhLnNsaWNlKDAsMykgKTsKICAgICAgICAgICAgICAgIGlmICggYS5zbGljZSgzKS5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm94eS5zZXRIb3Vycy5hcHBseSggdGhpcy5wcm94eSwgYS5zbGljZSgzKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBAbmFtZXNwYWNlIENvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0cyBmb3IgYWxsIGluc3RhbmNlcyBvbiB0aGUgcGFnZS4KICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkZWZhdWx0TG9jYWxlIFRoZSBkZWZhdWx0IGxvY2FsZSB0byB1c2UgW2VuXS4KICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzeW50YXggVGhlIGRlZmF1bHQgc3ludGF4IHRvIHVzZSBbcGVybF0uCiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gZGVmYXVsdENlbnR1cnkgVGhlIGRlZmF1bHQgY2VudHJ5IGZvciAyIGRpZ2l0IGRhdGVzLgogICAgICovCiAgICBqc0RhdGUuY29uZmlnID0gewogICAgICAgIGRlZmF1bHRMb2NhbGU6ICdlbicsCiAgICAgICAgc3ludGF4OiAncGVybCcsCiAgICAgICAgZGVmYXVsdENlbnR1cnk6IDE5MDAKICAgIH07CiAgICAgICAgCiAgICAvKioKICAgICAqIEFkZCBhbiBhcmJpdHJhcnkgYW1vdW50IHRvIHRoZSBjdXJyZW50bHkgc3RvcmVkIGRhdGUKICAgICAqIAogICAgICogQHBhcmFtIHtOdW1iZXJ9IG51bWJlciAgICAgIAogICAgICogQHBhcmFtIHtTdHJpbmd9IHVuaXQKICAgICAqIEByZXR1cm5zIHtqc0RhdGV9ICAgICAgIAogICAgICovCiAgICAgCiAgICBqc0RhdGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKG51bWJlciwgdW5pdCkgewogICAgICAgIHZhciBmYWN0b3IgPSBtdWx0aXBsaWVyc1t1bml0XSB8fCBtdWx0aXBsaWVycy5kYXk7CiAgICAgICAgaWYgKHR5cGVvZiBmYWN0b3IgPT0gJ251bWJlcicpIHsKICAgICAgICAgICAgdGhpcy5wcm94eS5zZXRUaW1lKHRoaXMucHJveHkuZ2V0VGltZSgpICsgKGZhY3RvciAqIG51bWJlcikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZhY3Rvci5hZGQodGhpcywgbnVtYmVyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9OwogICAgICAgIAogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcganFwbG90LmRhdGUgb2JqZWN0IHdpdGggdGhlIHNhbWUgZGF0ZQogICAgICogCiAgICAgKiBAcmV0dXJucyB7anNEYXRlfQogICAgICovICAKICAgICAKICAgIGpzRGF0ZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBqc0RhdGUodGhpcy5wcm94eS5nZXRUaW1lKCkpOwogICAgfTsKCiAgICAvKioKICAgICAqIEdldCB0aGUgVVRDIFRpbWVab25lIE9mZnNldCBvZiB0aGlzIGRhdGUgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9CiAgICAgKi8KCiAgICBqc0RhdGUucHJvdG90eXBlLmdldFV0Y09mZnNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnByb3h5LmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDsKICAgIH07CgogICAgLyoqCiAgICAgKiBGaW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBqc0RhdGUgYW5kIGFub3RoZXIgZGF0ZS4KICAgICAqIAogICAgICogQHBhcmFtIHtTdHJpbmd8IE51bWJlcnwgQXJyYXl8IGpzRGF0ZSZuYnNwO09iamVjdHwgRGF0ZSZuYnNwO09iamVjdH0gZGF0ZU9iagogICAgICogQHBhcmFtIHtTdHJpbmd9IHVuaXQKICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gYWxsb3dEZWNpbWFsCiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBOdW1iZXIgb2YgdW5pdHMgZGlmZmVyZW5jZSBiZXR3ZWVuIGRhdGVzLgogICAgICovCiAgICAgCiAgICBqc0RhdGUucHJvdG90eXBlLmRpZmYgPSBmdW5jdGlvbihkYXRlT2JqLCB1bml0LCBhbGxvd0RlY2ltYWwpIHsKICAgICAgICAvLyBlbnN1cmUgd2UgaGF2ZSBhIERhdGUgb2JqZWN0CiAgICAgICAgZGF0ZU9iaiA9IG5ldyBqc0RhdGUoZGF0ZU9iaik7CiAgICAgICAgaWYgKGRhdGVPYmogPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIC8vIGdldCB0aGUgbXVsdGlwbHlpbmcgZmFjdG9yIGludGVnZXIgb3IgZmFjdG9yIGZ1bmN0aW9uCiAgICAgICAgdmFyIGZhY3RvciA9IG11bHRpcGxpZXJzW3VuaXRdIHx8IG11bHRpcGxpZXJzLmRheTsKICAgICAgICBpZiAodHlwZW9mIGZhY3RvciA9PSAnbnVtYmVyJykgewogICAgICAgICAgICAvLyBtdWx0aXBseQogICAgICAgICAgICB2YXIgdW5pdERpZmYgPSAodGhpcy5wcm94eS5nZXRUaW1lKCkgLSBkYXRlT2JqLnByb3h5LmdldFRpbWUoKSkgLyBmYWN0b3I7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gcnVuIGZ1bmN0aW9uCiAgICAgICAgICAgIHZhciB1bml0RGlmZiA9IGZhY3Rvci5kaWZmKHRoaXMucHJveHksIGRhdGVPYmoucHJveHkpOwogICAgICAgIH0KICAgICAgICAvLyBpZiBkZWNpbWFscyBhcmUgbm90IGFsbG93ZWQsIHJvdW5kIHRvd2FyZCB6ZXJvCiAgICAgICAgcmV0dXJuIChhbGxvd0RlY2ltYWwgPyB1bml0RGlmZiA6IE1hdGhbdW5pdERpZmYgPiAwID8gJ2Zsb29yJyA6ICdjZWlsJ10odW5pdERpZmYpKTsgICAgICAgICAgCiAgICB9OwogICAgCiAgICAvKioKICAgICAqIEdldCB0aGUgYWJicmV2aWF0ZWQgbmFtZSBvZiB0aGUgY3VycmVudCB3ZWVrIGRheQogICAgICogCiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfQogICAgICovICAgCiAgICAgCiAgICBqc0RhdGUucHJvdG90eXBlLmdldEFiYnJEYXlOYW1lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGpzRGF0ZS5yZWdpb25hbFt0aGlzLmxvY2FsZV1bImRheU5hbWVzU2hvcnQiXVt0aGlzLnByb3h5LmdldERheSgpXTsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogR2V0IHRoZSBhYmJyZXZpYXRlZCBuYW1lIG9mIHRoZSBjdXJyZW50IG1vbnRoCiAgICAgKiAKICAgICAqIEByZXR1cm5zIHtTdHJpbmd9CiAgICAgKi8KICAgICAKICAgIGpzRGF0ZS5wcm90b3R5cGUuZ2V0QWJick1vbnRoTmFtZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBqc0RhdGUucmVnaW9uYWxbdGhpcy5sb2NhbGVdWyJtb250aE5hbWVzU2hvcnQiXVt0aGlzLnByb3h5LmdldE1vbnRoKCldOwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBHZXQgVVBQRVIgQ0FTRSBBTSBvciBQTSBmb3IgdGhlIGN1cnJlbnQgdGltZQogICAgICogCiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfQogICAgICovCiAgICAgCiAgICBqc0RhdGUucHJvdG90eXBlLmdldEFNUE0gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5wcm94eS5nZXRIb3VycygpID49IDEyID8gJ1BNJyA6ICdBTSc7CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIEdldCBsb3dlciBjYXNlIGFtIG9yIHBtIGZvciB0aGUgY3VycmVudCB0aW1lCiAgICAgKiAKICAgICAqIEByZXR1cm5zIHtTdHJpbmd9CiAgICAgKi8KICAgICAKICAgIGpzRGF0ZS5wcm90b3R5cGUuZ2V0QW1QbSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnByb3h5LmdldEhvdXJzKCkgPj0gMTIgPyAncG0nIDogJ2FtJzsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogR2V0IHRoZSBjZW50dXJ5ICgxOSBmb3IgMjB0aCBDZW50dXJ5KQogICAgICoKICAgICAqIEByZXR1cm5zIHtJbnRlZ2VyfSBDZW50dXJ5ICgxOSBmb3IgMjB0aCBjZW50dXJ5KS4KICAgICAqLwogICAganNEYXRlLnByb3RvdHlwZS5nZXRDZW50dXJ5ID0gZnVuY3Rpb24oKSB7IAogICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3h5LmdldEZ1bGxZZWFyKCkvMTAwLCAxMCk7CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIEltcGxlbWVudHMgRGF0ZSBmdW5jdGlvbmFsaXR5CiAgICAgKi8KICAgIGpzRGF0ZS5wcm90b3R5cGUuZ2V0RGF0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnByb3h5LmdldERhdGUoKTsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogSW1wbGVtZW50cyBEYXRlIGZ1bmN0aW9uYWxpdHkKICAgICAqLwogICAganNEYXRlLnByb3RvdHlwZS5nZXREYXkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5wcm94eS5nZXREYXkoKTsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogR2V0IHRoZSBEYXkgb2Ygd2VlayAxIChNb25kYXkpIHRocnUgNyAoU3VuZGF5KQogICAgICogCiAgICAgKiBAcmV0dXJucyB7SW50ZWdlcn0gRGF5IG9mIHdlZWsgMSAoTW9uZGF5KSB0aHJ1IDcgKFN1bmRheSkKICAgICAqLwogICAganNEYXRlLnByb3RvdHlwZS5nZXREYXlPZldlZWsgPSBmdW5jdGlvbigpIHsgCiAgICAgICAgdmFyIGRvdyA9IHRoaXMucHJveHkuZ2V0RGF5KCk7IAogICAgICAgIHJldHVybiBkb3c9PT0wPzc6ZG93OyAKICAgIH07CiAgICAKICAgIC8qKgogICAgICogR2V0IHRoZSBkYXkgb2YgdGhlIHllYXIKICAgICAqIAogICAgICogQHJldHVybnMge0ludGVnZXJ9IDEgLSAzNjYsIGRheSBvZiB0aGUgeWVhcgogICAgICovCiAgICBqc0RhdGUucHJvdG90eXBlLmdldERheU9mWWVhciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkID0gdGhpcy5wcm94eTsKICAgICAgICB2YXIgbXMgPSBkIC0gbmV3IERhdGUoJycgKyBkLmdldEZ1bGxZZWFyKCkgKyAnLzEvMSBHTVQnKTsKICAgICAgICBtcyArPSBkLmdldFRpbWV6b25lT2Zmc2V0KCkqNjAwMDA7CiAgICAgICAgZCA9IG51bGw7CiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1zLzYwMDAwLzYwLzI0LCAxMCkrMTsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHdlZWsgZGF5CiAgICAgKiAKICAgICAqIEByZXR1cm5zIHtTdHJpbmd9CiAgICAgKi8gIAogICAgIAogICAganNEYXRlLnByb3RvdHlwZS5nZXREYXlOYW1lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGpzRGF0ZS5yZWdpb25hbFt0aGlzLmxvY2FsZV1bImRheU5hbWVzIl1bdGhpcy5wcm94eS5nZXREYXkoKV07CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIEdldCB0aGUgd2VlayBudW1iZXIgb2YgdGhlIGdpdmVuIHllYXIsIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0IFN1bmRheSBhcyB0aGUgZmlyc3Qgd2VlawogICAgICogQHJldHVybnMge0ludGVnZXJ9IFdlZWsgbnVtYmVyICgxMyBmb3IgdGhlIDEzdGggZnVsbCB3ZWVrIG9mIHRoZSB5ZWFyKS4KICAgICAqLwogICAganNEYXRlLnByb3RvdHlwZS5nZXRGdWxsV2Vla09mWWVhciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkID0gdGhpcy5wcm94eTsKICAgICAgICB2YXIgZG95ID0gdGhpcy5nZXREYXlPZlllYXIoKTsKICAgICAgICB2YXIgcmRvdyA9IDYtZC5nZXREYXkoKTsKICAgICAgICB2YXIgd295ID0gcGFyc2VJbnQoKGRveStyZG93KS83LCAxMCk7CiAgICAgICAgcmV0dXJuIHdveTsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogSW1wbGVtZW50cyBEYXRlIGZ1bmN0aW9uYWxpdHkKICAgICAqLwogICAganNEYXRlLnByb3RvdHlwZS5nZXRGdWxsWWVhciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnByb3h5LmdldEZ1bGxZZWFyKCk7CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIEdldCB0aGUgR01UIG9mZnNldCBpbiBob3VycyBhbmQgbWludXRlcyAoZS5nLiArMDY6MzApCiAgICAgKiAKICAgICAqIEByZXR1cm5zIHtTdHJpbmd9CiAgICAgKi8KICAgICAKICAgIGpzRGF0ZS5wcm90b3R5cGUuZ2V0R210T2Zmc2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gZGl2aWRlIHRoZSBtaW51dGVzIG9mZnNldCBieSA2MAogICAgICAgIHZhciBob3VycyA9IHRoaXMucHJveHkuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwOwogICAgICAgIC8vIGRlY2lkZSBpZiB3ZSBhcmUgYWhlYWQgb2Ygb3IgYmVoaW5kIEdNVAogICAgICAgIHZhciBwcmVmaXggPSBob3VycyA8IDAgPyAnKycgOiAnLSc7CiAgICAgICAgLy8gcmVtb3ZlIHRoZSBuZWdhdGl2ZSBzaWduIGlmIGFueQogICAgICAgIGhvdXJzID0gTWF0aC5hYnMoaG91cnMpOwogICAgICAgIC8vIGFkZCB0aGUgKy8tIHRvIHRoZSBwYWRkZWQgbnVtYmVyIG9mIGhvdXJzIHRvIDogdG8gdGhlIHBhZGRlZCBtaW51dGVzCiAgICAgICAgcmV0dXJuIHByZWZpeCArIGFkZFplcm9zKE1hdGguZmxvb3IoaG91cnMpLCAyKSArICc6JyArIGFkZFplcm9zKChob3VycyAlIDEpICogNjAsIDIpOwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBJbXBsZW1lbnRzIERhdGUgZnVuY3Rpb25hbGl0eQogICAgICovCiAgICBqc0RhdGUucHJvdG90eXBlLmdldEhvdXJzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucHJveHkuZ2V0SG91cnMoKTsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogR2V0IHRoZSBjdXJyZW50IGhvdXIgb24gYSAxMi1ob3VyIHNjaGVtZQogICAgICogCiAgICAgKiBAcmV0dXJucyB7SW50ZWdlcn0KICAgICAqLwogICAgIAogICAganNEYXRlLnByb3RvdHlwZS5nZXRIb3VyczEyICA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBob3VycyA9IHRoaXMucHJveHkuZ2V0SG91cnMoKTsKICAgICAgICByZXR1cm4gaG91cnMgPiAxMiA/IGhvdXJzIC0gMTIgOiAoaG91cnMgPT0gMCA/IDEyIDogaG91cnMpOwogICAgfTsKICAgIAogICAgCiAgICBqc0RhdGUucHJvdG90eXBlLmdldElzb1dlZWsgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZCA9IHRoaXMucHJveHk7CiAgICAgICAgdmFyIHdveSA9IHRoaXMuZ2V0V2Vla09mWWVhcigpOwogICAgICAgIHZhciBkb3cxXzEgPSAobmV3IERhdGUoJycgKyBkLmdldEZ1bGxZZWFyKCkgKyAnLzEvMScpKS5nZXREYXkoKTsKICAgICAgICAvLyBGaXJzdCB3ZWVrIGlzIDAxIGFuZCBub3QgMDAgYXMgaW4gdGhlIGNhc2Ugb2YgJVUgYW5kICVXLAogICAgICAgIC8vIHNvIHdlIGFkZCAxIHRvIHRoZSBmaW5hbCByZXN1bHQgZXhjZXB0IGlmIGRheSAxIG9mIHRoZSB5ZWFyCiAgICAgICAgLy8gaXMgYSBNb25kYXkgKHRoZW4gJVcgcmV0dXJucyAwMSkuCiAgICAgICAgLy8gV2UgYWxzbyBuZWVkIHRvIHN1YnRyYWN0IDEgaWYgdGhlIGRheSAxIG9mIHRoZSB5ZWFyIGlzIAogICAgICAgIC8vIEZyaWRheS1TdW5kYXksIHNvIHRoZSByZXN1bHRpbmcgZXF1YXRpb24gYmVjb21lczoKICAgICAgICB2YXIgaWRvdyA9IHdveSArIChkb3cxXzEgPiA0IHx8IGRvdzFfMSA8PSAxID8gMCA6IDEpOwogICAgICAgIGlmKGlkb3cgPT0gNTMgJiYgKG5ldyBEYXRlKCcnICsgZC5nZXRGdWxsWWVhcigpICsgJy8xMi8zMScpKS5nZXREYXkoKSA8IDQpCiAgICAgICAgewogICAgICAgICAgICBpZG93ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihpZG93ID09PSAwKQogICAgICAgIHsKICAgICAgICAgICAgZCA9IG5ldyBqc0RhdGUobmV3IERhdGUoJycgKyAoZC5nZXRGdWxsWWVhcigpLTEpICsgJy8xMi8zMScpKTsKICAgICAgICAgICAgaWRvdyA9IGQuZ2V0SXNvV2VlaygpOwogICAgICAgIH0KICAgICAgICBkID0gbnVsbDsKICAgICAgICByZXR1cm4gaWRvdzsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogSW1wbGVtZW50cyBEYXRlIGZ1bmN0aW9uYWxpdHkKICAgICAqLwogICAganNEYXRlLnByb3RvdHlwZS5nZXRNaWxsaXNlY29uZHMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5wcm94eS5nZXRNaWxsaXNlY29uZHMoKTsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogSW1wbGVtZW50cyBEYXRlIGZ1bmN0aW9uYWxpdHkKICAgICAqLwogICAganNEYXRlLnByb3RvdHlwZS5nZXRNaW51dGVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucHJveHkuZ2V0TWludXRlcygpOwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBJbXBsZW1lbnRzIERhdGUgZnVuY3Rpb25hbGl0eQogICAgICovCiAgICBqc0RhdGUucHJvdG90eXBlLmdldE1vbnRoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucHJveHkuZ2V0TW9udGgoKTsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IG1vbnRoCiAgICAgKiAKICAgICAqIEByZXR1cm5zIHtTdHJpbmd9CiAgICAgKi8KICAgICAKICAgIGpzRGF0ZS5wcm90b3R5cGUuZ2V0TW9udGhOYW1lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGpzRGF0ZS5yZWdpb25hbFt0aGlzLmxvY2FsZV1bIm1vbnRoTmFtZXMiXVt0aGlzLnByb3h5LmdldE1vbnRoKCldOwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBHZXQgdGhlIG51bWJlciBvZiB0aGUgY3VycmVudCBtb250aCwgMS0xMgogICAgICogCiAgICAgKiBAcmV0dXJucyB7SW50ZWdlcn0KICAgICAqLwogICAgIAogICAganNEYXRlLnByb3RvdHlwZS5nZXRNb250aE51bWJlciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnByb3h5LmdldE1vbnRoKCkgKyAxOwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBJbXBsZW1lbnRzIERhdGUgZnVuY3Rpb25hbGl0eQogICAgICovCiAgICBqc0RhdGUucHJvdG90eXBlLmdldFNlY29uZHMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5wcm94eS5nZXRTZWNvbmRzKCk7CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIFJldHVybiBhIHByb3BlciB0d28tZGlnaXQgeWVhciBpbnRlZ2VyCiAgICAgKiAKICAgICAqIEByZXR1cm5zIHtJbnRlZ2VyfQogICAgICovCiAgICAgCiAgICBqc0RhdGUucHJvdG90eXBlLmdldFNob3J0WWVhciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnByb3h5LmdldFllYXIoKSAlIDEwMDsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogSW1wbGVtZW50cyBEYXRlIGZ1bmN0aW9uYWxpdHkKICAgICAqLwogICAganNEYXRlLnByb3RvdHlwZS5nZXRUaW1lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucHJveHkuZ2V0VGltZSgpOwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBHZXQgdGhlIHRpbWV6b25lIGFiYnJldmlhdGlvbgogICAgICoKICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IEFiYnJldmlhdGlvbiBmb3IgdGhlIHRpbWV6b25lCiAgICAgKi8KICAgIGpzRGF0ZS5wcm90b3R5cGUuZ2V0VGltZXpvbmVBYmJyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucHJveHkudG9TdHJpbmcoKS5yZXBsYWNlKC9eLipcKChbXildKylcKSQvLCAnJDEnKTsgCiAgICB9OwogICAgCiAgICAvKioKICAgICAqIEdldCB0aGUgYnJvd3Nlci1yZXBvcnRlZCBuYW1lIGZvciB0aGUgY3VycmVudCB0aW1lem9uZSAoZS5nLiBNRFQsIE1vdW50YWluIERheWxpZ2h0IFRpbWUpCiAgICAgKiAKICAgICAqIEByZXR1cm5zIHtTdHJpbmd9CiAgICAgKi8KICAgIGpzRGF0ZS5wcm90b3R5cGUuZ2V0VGltZXpvbmVOYW1lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1hdGNoID0gLyg/OlwoKC4rKVwpJHwgKFtBLVpdezN9KSApLy5leGVjKHRoaXMudG9TdHJpbmcoKSk7CiAgICAgICAgcmV0dXJuIG1hdGNoWzFdIHx8IG1hdGNoWzJdIHx8ICdHTVQnICsgdGhpcy5nZXRHbXRPZmZzZXQoKTsKICAgIH07IAogICAgCiAgICAvKioKICAgICAqIEltcGxlbWVudHMgRGF0ZSBmdW5jdGlvbmFsaXR5CiAgICAgKi8KICAgIGpzRGF0ZS5wcm90b3R5cGUuZ2V0VGltZXpvbmVPZmZzZXQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5wcm94eS5nZXRUaW1lem9uZU9mZnNldCgpOwogICAgfTsKICAgIAogICAgCiAgICAvKioKICAgICAqIEdldCB0aGUgd2VlayBudW1iZXIgb2YgdGhlIGdpdmVuIHllYXIsIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0IE1vbmRheSBhcyB0aGUgZmlyc3Qgd2VlawogICAgICogQHJldHVybnMge0ludGVnZXJ9IFdlZWsgbnVtYmVyICgxMyBmb3IgdGhlIDEzdGggd2VlayBvZiB0aGUgeWVhcikuCiAgICAgKi8KICAgIGpzRGF0ZS5wcm90b3R5cGUuZ2V0V2Vla09mWWVhciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkb3kgPSB0aGlzLmdldERheU9mWWVhcigpOwogICAgICAgIHZhciByZG93ID0gNyAtIHRoaXMuZ2V0RGF5T2ZXZWVrKCk7CiAgICAgICAgdmFyIHdveSA9IHBhcnNlSW50KChkb3krcmRvdykvNywgMTApOwogICAgICAgIHJldHVybiB3b3k7CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudCBkYXRlIGFzIGEgVW5peCB0aW1lc3RhbXAKICAgICAqIAogICAgICogQHJldHVybnMge0ludGVnZXJ9CiAgICAgKi8KICAgICAKICAgIGpzRGF0ZS5wcm90b3R5cGUuZ2V0VW5peCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMucHJveHkuZ2V0VGltZSgpIC8gMTAwMCwgMCk7CiAgICB9OyAKICAgIAogICAgLyoqCiAgICAgKiBJbXBsZW1lbnRzIERhdGUgZnVuY3Rpb25hbGl0eQogICAgICovCiAgICBqc0RhdGUucHJvdG90eXBlLmdldFllYXIgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5wcm94eS5nZXRZZWFyKCk7CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIFJldHVybiBhIGRhdGUgb25lIGRheSBhaGVhZCAob3IgYW55IG90aGVyIHVuaXQpCiAgICAgKiAKICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1bml0IE9wdGlvbmFsLCB5ZWFyIHwgbW9udGggfCBkYXkgfCB3ZWVrIHwgaG91ciB8IG1pbnV0ZSB8IHNlY29uZCB8IG1pbGxpc2Vjb25kCiAgICAgKiBAcmV0dXJucyB7anNEYXRlfQogICAgICovCiAgICAgCiAgICBqc0RhdGUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih1bml0KSB7CiAgICAgICAgdW5pdCA9IHVuaXQgfHwgJ2RheSc7CiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5hZGQoMSwgdW5pdCk7CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIFNldCB0aGUganNEYXRlIGluc3RhbmNlIHRvIGEgbmV3IGRhdGUuCiAgICAgKgogICAgICogQHBhcmFtICB7U3RyaW5nIHwgTnVtYmVyIHwgQXJyYXkgfCBEYXRlIE9iamVjdCB8IGpzRGF0ZSBPYmplY3QgfCBPcHRpb25zIE9iamVjdH0gYXJndW1lbnRzIE9wdGlvbmFsIGFyZ3VtZW50cywgCiAgICAgKiBlaXRoZXIgYSBwYXJzYWJsZSBkYXRlL3RpbWUgc3RyaW5nLAogICAgICogYSBKYXZhU2NyaXB0IHRpbWVzdGFtcCwgYW4gYXJyYXkgb2YgbnVtYmVycyBvZiBmb3JtIFt5ZWFyLCBtb250aCwgZGF5LCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzXSwKICAgICAqIGEgRGF0ZSBvYmplY3QsIGpzRGF0ZSBPYmplY3Qgb3IgYW4gb3B0aW9ucyBvYmplY3Qgb2YgZm9ybSB7c3ludGF4OiAicGVybCIsIGRhdGU6c29tZSBEYXRlfSB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgb3B0aW9uYWwuCiAgICAgKi8KICAgIGpzRGF0ZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgc3dpdGNoICggYXJndW1lbnRzLmxlbmd0aCApIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgdGhpcy5wcm94eSA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgLy8gb3RoZXIgb2JqZWN0cyBlaXRoZXIgd29uJ3QgaGF2ZSBhIF90eXBlIHByb3BlcnR5IG9yLAogICAgICAgICAgICAgICAgLy8gaWYgdGhleSBkbywgaXQgc2hvdWxkbid0IGJlIHNldCB0byAianNEYXRlIiwgc28KICAgICAgICAgICAgICAgIC8vIGFzc3VtZSBpdCBpcyBhbiBvcHRpb25zIGFyZ3VtZW50LgogICAgICAgICAgICAgICAgaWYgKGdldF90eXBlKGFyZ3VtZW50c1swXSkgPT0gIltvYmplY3QgT2JqZWN0XSIgJiYgYXJndW1lbnRzWzBdLl90eXBlICE9ICJqc0RhdGUiKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG9wdHMgPSB0aGlzLm9wdGlvbnMgPSBhcmd1bWVudHNbMF07CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW50YXggPSBvcHRzLnN5bnRheCB8fCB0aGlzLnN5bnRheDsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDZW50dXJ5ID0gb3B0cy5kZWZhdWx0Q2VudHVyeSB8fCB0aGlzLmRlZmF1bHRDZW50dXJ5OwogICAgICAgICAgICAgICAgICAgIHRoaXMucHJveHkgPSBqc0RhdGUuY3JlYXRlRGF0ZShvcHRzLmRhdGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm94eSA9IGpzRGF0ZS5jcmVhdGVEYXRlKGFyZ3VtZW50c1swXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHZhciBhID0gW107CiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaT0wOyBpPGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICBhLnB1c2goYXJndW1lbnRzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIHRoZSBjdXJyZW50IGRhdGUvdGltZQogICAgICAgICAgICAgICAgdGhpcy5wcm94eSA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgICAgICB0aGlzLnByb3h5LnNldEZ1bGxZZWFyLmFwcGx5KCB0aGlzLnByb3h5LCBhLnNsaWNlKDAsMykgKTsKICAgICAgICAgICAgICAgIGlmICggYS5zbGljZSgzKS5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm94eS5zZXRIb3Vycy5hcHBseSggdGhpcy5wcm94eSwgYS5zbGljZSgzKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBkYXkgb2YgdGhlIG1vbnRoIGZvciBhIHNwZWNpZmllZCBkYXRlIGFjY29yZGluZyB0byBsb2NhbCB0aW1lLgogICAgICogQHBhcmFtIHtJbnRlZ2VyfSBkYXlWYWx1ZSBBbiBpbnRlZ2VyIGZyb20gMSB0byAzMSwgcmVwcmVzZW50aW5nIHRoZSBkYXkgb2YgdGhlIG1vbnRoLiAKICAgICAqLwogICAganNEYXRlLnByb3RvdHlwZS5zZXREYXRlID0gZnVuY3Rpb24obikgewogICAgICAgIHRoaXMucHJveHkuc2V0RGF0ZShuKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogU2V0cyB0aGUgZnVsbCB5ZWFyIGZvciBhIHNwZWNpZmllZCBkYXRlIGFjY29yZGluZyB0byBsb2NhbCB0aW1lLgogICAgICogQHBhcmFtIHtJbnRlZ2VyfSB5ZWFyVmFsdWUgVGhlIG51bWVyaWMgdmFsdWUgb2YgdGhlIHllYXIsIGZvciBleGFtcGxlLCAxOTk1LiAgCiAgICAgKiBAcGFyYW0ge0ludGVnZXJ9IG1vbnRoVmFsdWUgT3B0aW9uYWwsIGJldHdlZW4gMCBhbmQgMTEgcmVwcmVzZW50aW5nIHRoZSBtb250aHMgSmFudWFyeSB0aHJvdWdoIERlY2VtYmVyLiAgCiAgICAgKiBAcGFyYW0ge0ludGVnZXJ9IGRheVZhbHVlIE9wdGlvbmFsLCBiZXR3ZWVuIDEgYW5kIDMxIHJlcHJlc2VudGluZyB0aGUgZGF5IG9mIHRoZSBtb250aC4gSWYgeW91IHNwZWNpZnkgdGhlIGRheVZhbHVlIHBhcmFtZXRlciwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBtb250aFZhbHVlLiAKICAgICAqLwogICAganNEYXRlLnByb3RvdHlwZS5zZXRGdWxsWWVhciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMucHJveHkuc2V0RnVsbFllYXIuYXBwbHkodGhpcy5wcm94eSwgYXJndW1lbnRzKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogU2V0cyB0aGUgaG91cnMgZm9yIGEgc3BlY2lmaWVkIGRhdGUgYWNjb3JkaW5nIHRvIGxvY2FsIHRpbWUuCiAgICAgKiAKICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gaG91cnNWYWx1ZSBBbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMjMsIHJlcHJlc2VudGluZyB0aGUgaG91ci4gIAogICAgICogQHBhcmFtIHtJbnRlZ2VyfSBtaW51dGVzVmFsdWUgT3B0aW9uYWwsIEFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA1OSwgcmVwcmVzZW50aW5nIHRoZSBtaW51dGVzLiAgCiAgICAgKiBAcGFyYW0ge0ludGVnZXJ9IHNlY29uZHNWYWx1ZSBPcHRpb25hbCwgQW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDU5LCByZXByZXNlbnRpbmcgdGhlIHNlY29uZHMuIAogICAgICogSWYgeW91IHNwZWNpZnkgdGhlIHNlY29uZHNWYWx1ZSBwYXJhbWV0ZXIsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgbWludXRlc1ZhbHVlLiAgCiAgICAgKiBAcGFyYW0ge0ludGVnZXJ9IG1zVmFsdWUgT3B0aW9uYWwsIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgOTk5LCByZXByZXNlbnRpbmcgdGhlIG1pbGxpc2Vjb25kcy4gCiAgICAgKiBJZiB5b3Ugc3BlY2lmeSB0aGUgbXNWYWx1ZSBwYXJhbWV0ZXIsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgbWludXRlc1ZhbHVlIGFuZCBzZWNvbmRzVmFsdWUuIAogICAgICovCiAgICBqc0RhdGUucHJvdG90eXBlLnNldEhvdXJzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5wcm94eS5zZXRIb3Vycy5hcHBseSh0aGlzLnByb3h5LCBhcmd1bWVudHMpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBJbXBsZW1lbnRzIERhdGUgZnVuY3Rpb25hbGl0eQogICAgICovIAogICAganNEYXRlLnByb3RvdHlwZS5zZXRNaWxsaXNlY29uZHMgPSBmdW5jdGlvbihuKSB7CiAgICAgICAgdGhpcy5wcm94eS5zZXRNaWxsaXNlY29uZHMobik7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIEltcGxlbWVudHMgRGF0ZSBmdW5jdGlvbmFsaXR5CiAgICAgKi8gCiAgICBqc0RhdGUucHJvdG90eXBlLnNldE1pbnV0ZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnByb3h5LnNldE1pbnV0ZXMuYXBwbHkodGhpcy5wcm94eSwgYXJndW1lbnRzKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogSW1wbGVtZW50cyBEYXRlIGZ1bmN0aW9uYWxpdHkKICAgICAqLyAKICAgIGpzRGF0ZS5wcm90b3R5cGUuc2V0TW9udGggPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnByb3h5LnNldE1vbnRoLmFwcGx5KHRoaXMucHJveHksIGFyZ3VtZW50cyk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIEltcGxlbWVudHMgRGF0ZSBmdW5jdGlvbmFsaXR5CiAgICAgKi8gCiAgICBqc0RhdGUucHJvdG90eXBlLnNldFNlY29uZHMgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnByb3h5LnNldFNlY29uZHMuYXBwbHkodGhpcy5wcm94eSwgYXJndW1lbnRzKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogSW1wbGVtZW50cyBEYXRlIGZ1bmN0aW9uYWxpdHkKICAgICAqLyAKICAgIGpzRGF0ZS5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICB0aGlzLnByb3h5LnNldFRpbWUobik7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIEltcGxlbWVudHMgRGF0ZSBmdW5jdGlvbmFsaXR5CiAgICAgKi8gCiAgICBqc0RhdGUucHJvdG90eXBlLnNldFllYXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnByb3h5LnNldFllYXIuYXBwbHkodGhpcy5wcm94eSwgYXJndW1lbnRzKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogUHJvdmlkZSBhIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBkYXRlLgogICAgICogCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0U3RyaW5nIEEgZm9ybWF0IHN0cmluZy4gIAogICAgICogU2VlOiB7QGxpbmsganNEYXRlLmZvcm1hdHN9LgogICAgICogQHJldHVybnMge1N0cmluZ30gRGF0ZSBTdHJpbmcuCiAgICAgKi8KICAgICAgICAgICAgCiAgICBqc0RhdGUucHJvdG90eXBlLnN0cmZ0aW1lID0gZnVuY3Rpb24oZm9ybWF0U3RyaW5nKSB7CiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nIHx8IHRoaXMuZm9ybWF0U3RyaW5nIHx8IGpzRGF0ZS5yZWdpb25hbFt0aGlzLmxvY2FsZV1bJ2Zvcm1hdFN0cmluZyddOwogICAgICAgIHJldHVybiBqc0RhdGUuc3RyZnRpbWUodGhpcywgZm9ybWF0U3RyaW5nLCB0aGlzLnN5bnRheCk7CiAgICB9OwogICAgICAgIAogICAgLyoqCiAgICAgKiBSZXR1cm4gYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBqc0RhdGUgb2JqZWN0LgogICAgICogQHJldHVybnMge1N0cmluZ30gRGF0ZSBzdHJpbmcuCiAgICAgKi8KICAgIAogICAganNEYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnByb3h5LnRvU3RyaW5nKCk7CiAgICB9OwogICAgICAgIAogICAgLyoqCiAgICAgKiBDb252ZXJ0IHRoZSBjdXJyZW50IGRhdGUgdG8gYW4gOC1kaWdpdCBpbnRlZ2VyICglWSVtJWQpCiAgICAgKiAKICAgICAqIEByZXR1cm5zIHtJbnRlZ2VyfQogICAgICovCiAgICAgCiAgICBqc0RhdGUucHJvdG90eXBlLnRvWW1kSW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICh0aGlzLnByb3h5LmdldEZ1bGxZZWFyKCkgKiAxMDAwMCkgKyAodGhpcy5nZXRNb250aE51bWJlcigpICogMTAwKSArIHRoaXMucHJveHkuZ2V0RGF0ZSgpOwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBAbmFtZXNwYWNlIEhvbGRzIGxvY2FsaXphdGlvbnMgZm9yIG1vbnRoL2RheSBuYW1lcy4KICAgICAqIDxwPmpzRGF0ZSBhdHRlbXB0cyB0byBkZXRlY3QgbG9jYWxlIHdoZW4gbG9hZGVkIGFuZCBkZWZhdWx0cyB0byAnZW4nLgogICAgICogSWYgYSBsb2NhbGl6YXRpb24gaXMgZGV0ZWN0ZWQgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSwganNEYXRlIGRlZmF1bHRzIHRvICdlbicuCiAgICAgKiBBZGRpdGlvbmFsIGxvY2FsaXphdGlvbnMgY2FuIGJlIGFkZGVkIGFmdGVyIGpzRGF0ZSBsb2Fkcy4gIEFmdGVyIGFkZGluZyBhIGxvY2FsaXphdGlvbiwKICAgICAqIGNhbGwgdGhlIGpzRGF0ZS5yZWdpb25hbC5nZXRMb2NhbGUoKSBtZXRob2QuICBDdXJyZW50bHksIGVuLCBmciBhbmQgZGUgYXJlIGRlZmluZWQuPC9wPgogICAgICogCiAgICAgKiA8cD5Mb2NhbGl6YXRpb25zIG11c3QgYmUgYW4gb2JqZWN0IGFuZCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBkZWZpbmVkOiAgbW9udGhOYW1lcywgbW9udGhOYW1lc1Nob3J0LCBkYXlOYW1lcywgZGF5TmFtZXNTaG9ydCBhbmQgTG9jYWxpemF0aW9ucyBhcmUgYWRkZWQgbGlrZTo8L3A+CiAgICAgKiA8cHJlIGNsYXNzPSJjb2RlIj4KICAgICAqIGpzRGF0ZS5yZWdpb25hbFsnZW4nXSA9IHsKICAgICAqIG1vbnRoTmFtZXMgICAgICA6ICdKYW51YXJ5IEZlYnJ1YXJ5IE1hcmNoIEFwcmlsIE1heSBKdW5lIEp1bHkgQXVndXN0IFNlcHRlbWJlciBPY3RvYmVyIE5vdmVtYmVyIERlY2VtYmVyJy5zcGxpdCgnICcpLAogICAgICogbW9udGhOYW1lc1Nob3J0IDogJ0phbiBGZWIgTWFyIEFwciBNYXkgSnVuIEp1bCBBdWcgU2VwIE9jdCBOb3YgRGVjJy5zcGxpdCgnICcpLAogICAgICogZGF5TmFtZXMgICAgICAgIDogJ1N1bmRheSBNb25kYXkgVHVlc2RheSBXZWRuZXNkYXkgVGh1cnNkYXkgRnJpZGF5IFNhdHVyZGF5Jy5zcGxpdCgnICcpLAogICAgICogZGF5TmFtZXNTaG9ydCAgIDogJ1N1biBNb24gVHVlIFdlZCBUaHUgRnJpIFNhdCcuc3BsaXQoJyAnKQogICAgICogfTsKICAgICAqIDwvcHJlPgogICAgICogPHA+QWZ0ZXIgYWRkaW5nIGxvY2FsaXphdGlvbnMsIGNhbGwgPGNvZGU+anNEYXRlLnJlZ2lvbmFsLmdldExvY2FsZSgpOzwvY29kZT4gdG8gdXBkYXRlIHRoZSBsb2NhbGUgc2V0dGluZyB3aXRoIHRoZQogICAgICogbmV3IGxvY2FsaXphdGlvbnMuPC9wPgogICAgICovCiAgICAgCiAgICBqc0RhdGUucmVnaW9uYWwgPSB7CiAgICAgICAgJ2VuJzogewogICAgICAgICAgICBtb250aE5hbWVzOiBbJ0phbnVhcnknLCdGZWJydWFyeScsJ01hcmNoJywnQXByaWwnLCdNYXknLCdKdW5lJywnSnVseScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09jdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sCiAgICAgICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sCiAgICAgICAgICAgIGRheU5hbWVzOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J10sCiAgICAgICAgICAgIGRheU5hbWVzU2hvcnQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sCiAgICAgICAgICAgIGZvcm1hdFN0cmluZzogJyVZLSVtLSVkICVIOiVNOiVTJwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgJ2ZyJzogewogICAgICAgICAgICBtb250aE5hbWVzOiBbJ0phbnZpZXInLCdGw6l2cmllcicsJ01hcnMnLCdBdnJpbCcsJ01haScsJ0p1aW4nLCdKdWlsbGV0JywnQW/Du3QnLCdTZXB0ZW1icmUnLCdPY3RvYnJlJywnTm92ZW1icmUnLCdEw6ljZW1icmUnXSwKICAgICAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0bDqXYnLCdNYXInLCdBdnInLCdNYWknLCdKdW4nLCdKdWwnLCdBb8O7JywnU2VwJywnT2N0JywnTm92JywnRMOpYyddLAogICAgICAgICAgICBkYXlOYW1lczogWydEaW1hbmNoZScsJ0x1bmRpJywnTWFyZGknLCdNZXJjcmVkaScsJ0pldWRpJywnVmVuZHJlZGknLCdTYW1lZGknXSwKICAgICAgICAgICAgZGF5TmFtZXNTaG9ydDogWydEaW0nLCdMdW4nLCdNYXInLCdNZXInLCdKZXUnLCdWZW4nLCdTYW0nXSwKICAgICAgICAgICAgZm9ybWF0U3RyaW5nOiAnJVktJW0tJWQgJUg6JU06JVMnCiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAnZGUnOiB7CiAgICAgICAgICAgIG1vbnRoTmFtZXM6IFsnSmFudWFyJywnRmVicnVhcicsJ03DpHJ6JywnQXByaWwnLCdNYWknLCdKdW5pJywnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0RlemVtYmVyJ10sCiAgICAgICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNw6RyJywnQXByJywnTWFpJywnSnVuJywnSnVsJywnQXVnJywnU2VwJywnT2t0JywnTm92JywnRGV6J10sCiAgICAgICAgICAgIGRheU5hbWVzOiBbJ1Nvbm50YWcnLCdNb250YWcnLCdEaWVuc3RhZycsJ01pdHR3b2NoJywnRG9ubmVyc3RhZycsJ0ZyZWl0YWcnLCdTYW1zdGFnJ10sCiAgICAgICAgICAgIGRheU5hbWVzU2hvcnQ6IFsnU28nLCdNbycsJ0RpJywnTWknLCdEbycsJ0ZyJywnU2EnXSwKICAgICAgICAgICAgZm9ybWF0U3RyaW5nOiAnJVktJW0tJWQgJUg6JU06JVMnCiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAnZXMnOiB7CiAgICAgICAgICAgIG1vbnRoTmFtZXM6IFsnRW5lcm8nLCdGZWJyZXJvJywnTWFyem8nLCdBYnJpbCcsJ01heW8nLCdKdW5pbycsICdKdWxpbycsJ0Fnb3N0bycsJ1NlcHRpZW1icmUnLCdPY3R1YnJlJywnTm92aWVtYnJlJywnRGljaWVtYnJlJ10sCiAgICAgICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWydFbmUnLCdGZWInLCdNYXInLCdBYnInLCdNYXknLCdKdW4nLCAnSnVsJywnQWdvJywnU2VwJywnT2N0JywnTm92JywnRGljJ10sCiAgICAgICAgICAgIGRheU5hbWVzOiBbJ0RvbWluZ28nLCdMdW5lcycsJ01hcnRlcycsJ01pJmVhY3V0ZTtyY29sZXMnLCdKdWV2ZXMnLCdWaWVybmVzJywnUyZhYWN1dGU7YmFkbyddLAogICAgICAgICAgICBkYXlOYW1lc1Nob3J0OiBbJ0RvbScsJ0x1bicsJ01hcicsJ01pJmVhY3V0ZTsnLCdKdXYnLCdWaWUnLCdTJmFhY3V0ZTtiJ10sCiAgICAgICAgICAgIGZvcm1hdFN0cmluZzogJyVZLSVtLSVkICVIOiVNOiVTJwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgJ3J1JzogewogICAgICAgICAgICBtb250aE5hbWVzOiBbJ9Cv0L3QstCw0YDRjCcsJ9Ck0LXQstGA0LDQu9GMJywn0JzQsNGA0YInLCfQkNC/0YDQtdC70YwnLCfQnNCw0LknLCfQmNGO0L3RjCcsJ9CY0Y7Qu9GMJywn0JDQstCz0YPRgdGCJywn0KHQtdC90YLRj9Cx0YDRjCcsJ9Ce0LrRgtGP0LHRgNGMJywn0J3QvtGP0LHRgNGMJywn0JTQtdC60LDQsdGA0YwnXSwKICAgICAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ9Cv0L3QsicsJ9Ck0LXQsicsJ9Cc0LDRgCcsJ9CQ0L/RgCcsJ9Cc0LDQuScsJ9CY0Y7QvScsJ9CY0Y7QuycsJ9CQ0LLQsycsJ9Ch0LXQvScsJ9Ce0LrRgicsJ9Cd0L7RjycsJ9CU0LXQuiddLAogICAgICAgICAgICBkYXlOYW1lczogWyfQstC+0YHQutGA0LXRgdC10L3RjNC1Jywn0L/QvtC90LXQtNC10LvRjNC90LjQuicsJ9Cy0YLQvtGA0L3QuNC6Jywn0YHRgNC10LTQsCcsJ9GH0LXRgtCy0LXRgNCzJywn0L/Rj9GC0L3QuNGG0LAnLCfRgdGD0LHQsdC+0YLQsCddLAogICAgICAgICAgICBkYXlOYW1lc1Nob3J0OiBbJ9Cy0YHQuicsJ9C/0L3QtCcsJ9Cy0YLRgCcsJ9GB0YDQtCcsJ9GH0YLQsicsJ9C/0YLQvScsJ9GB0LHRgiddLAogICAgICAgICAgICBmb3JtYXRTdHJpbmc6ICclWS0lbS0lZCAlSDolTTolUycKICAgICAgICB9LAogICAgICAgIAogICAgICAgICdhcic6IHsKICAgICAgICAgICAgbW9udGhOYW1lczogWyfZg9in2YbZiNmGINin2YTYq9in2YbZiicsICfYtNio2KfYtycsICfYotiw2KfYsScsICfZhtmK2LPYp9mGJywgJ9ii2LDYp9ixJywgJ9it2LLZitix2KfZhicsJ9iq2YXZiNiyJywgJ9ii2KgnLCAn2KPZitmE2YjZhCcsICAgJ9iq2LTYsdmK2YYg2KfZhNij2YjZhCcsICfYqti02LHZitmGINin2YTYq9in2YbZiicsICfZg9in2YbZiNmGINin2YTYo9mI2YQnXSwKICAgICAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnLCc4JywnOScsJzEwJywnMTEnLCcxMiddLAogICAgICAgICAgICBkYXlOYW1lczogWyfYp9mE2LPYqNiqJywgJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknXSwKICAgICAgICAgICAgZGF5TmFtZXNTaG9ydDogWyfYs9io2KonLCAn2KPYrdivJywgJ9in2KvZhtmK2YYnLCAn2KvZhNin2KvYp9ihJywgJ9ij2LHYqNi52KfYoScsICfYrtmF2YrYsycsICfYrNmF2LnYqSddLAogICAgICAgICAgICBmb3JtYXRTdHJpbmc6ICclWS0lbS0lZCAlSDolTTolUycKICAgICAgICB9LAogICAgICAgIAogICAgICAgICdwdCc6IHsKICAgICAgICAgICAgbW9udGhOYW1lczogWydKYW5laXJvJywnRmV2ZXJlaXJvJywnTWFyJmNjZWRpbDtvJywnQWJyaWwnLCdNYWlvJywnSnVuaG8nLCdKdWxobycsJ0Fnb3N0bycsJ1NldGVtYnJvJywnT3V0dWJybycsJ05vdmVtYnJvJywnRGV6ZW1icm8nXSwKICAgICAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZldicsJ01hcicsJ0FicicsJ01haScsJ0p1bicsJ0p1bCcsJ0FnbycsJ1NldCcsJ091dCcsJ05vdicsJ0RleiddLAogICAgICAgICAgICBkYXlOYW1lczogWydEb21pbmdvJywnU2VndW5kYS1mZWlyYScsJ1RlciZjY2VkaWw7YS1mZWlyYScsJ1F1YXJ0YS1mZWlyYScsJ1F1aW50YS1mZWlyYScsJ1NleHRhLWZlaXJhJywnUyZhYWN1dGU7YmFkbyddLAogICAgICAgICAgICBkYXlOYW1lc1Nob3J0OiBbJ0RvbScsJ1NlZycsJ1RlcicsJ1F1YScsJ1F1aScsJ1NleCcsJ1MmYWFjdXRlO2InXSwKICAgICAgICAgICAgZm9ybWF0U3RyaW5nOiAnJVktJW0tJWQgJUg6JU06JVMnICAgCiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAncHQtQlInOiB7CiAgICAgICAgICAgIG1vbnRoTmFtZXM6IFsnSmFuZWlybycsJ0ZldmVyZWlybycsJ01hciZjY2VkaWw7bycsJ0FicmlsJywnTWFpbycsJ0p1bmhvJywgJ0p1bGhvJywnQWdvc3RvJywnU2V0ZW1icm8nLCdPdXR1YnJvJywnTm92ZW1icm8nLCdEZXplbWJybyddLAogICAgICAgICAgICBtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmV2JywnTWFyJywnQWJyJywnTWFpJywnSnVuJywnSnVsJywnQWdvJywnU2V0JywnT3V0JywnTm92JywnRGV6J10sCiAgICAgICAgICAgIGRheU5hbWVzOiBbJ0RvbWluZ28nLCdTZWd1bmRhLWZlaXJhJywnVGVyJmNjZWRpbDthLWZlaXJhJywnUXVhcnRhLWZlaXJhJywnUXVpbnRhLWZlaXJhJywnU2V4dGEtZmVpcmEnLCdTJmFhY3V0ZTtiYWRvJ10sCiAgICAgICAgICAgIGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnU2VnJywnVGVyJywnUXVhJywnUXVpJywnU2V4JywnUyZhYWN1dGU7YiddLAogICAgICAgICAgICBmb3JtYXRTdHJpbmc6ICclWS0lbS0lZCAlSDolTTolUycKICAgICAgICB9LAogICAgICAgIAogICAgICAgICdwbCc6IHsKICAgICAgICAgICAgbW9udGhOYW1lczogWydTdHljemXFhCcsJ0x1dHknLCdNYXJ6ZWMnLCdLd2llY2llxYQnLCdNYWonLCdDemVyd2llYycsJ0xpcGllYycsJ1NpZXJwaWXFhCcsJ1dyemVzaWXFhCcsJ1Bhxbpkemllcm5paycsJ0xpc3RvcGFkJywnR3J1ZHppZcWEJ10sCiAgICAgICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWydTdHknLCAnTHV0JywgJ01hcicsICdLd2knLCAnTWFqJywgJ0N6ZScsJ0xpcCcsICdTaWUnLCAnV3J6JywgJ1BhxbonLCAnTGlzJywgJ0dydSddLAogICAgICAgICAgICBkYXlOYW1lczogWydOaWVkemllbGEnLCAnUG9uaWVkemlhxYJlaycsICdXdG9yZWsnLCAnxZpyb2RhJywgJ0N6d2FydGVrJywgJ1BpxIV0ZWsnLCAnU29ib3RhJ10sCiAgICAgICAgICAgIGRheU5hbWVzU2hvcnQ6IFsnTmknLCAnUG4nLCAnV3QnLCAnxZpyJywgJ0N6JywgJ1B0JywgJ1NiJ10sCiAgICAgICAgICAgIGZvcm1hdFN0cmluZzogJyVZLSVtLSVkICVIOiVNOiVTJwogICAgICAgIH0sCgogICAgICAgICdubCc6IHsKICAgICAgICAgICAgbW9udGhOYW1lczogWydKYW51YXJpJywnRmVicnVhcmknLCdNYWFydCcsJ0FwcmlsJywnTWVpJywnSnVuaScsJ0p1bHknLCdBdWd1c3R1cycsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sCiAgICAgICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNZWknLCdKdW4nLCdKdWwnLCdBdWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZWMnXSwKICAgICAgICAgICAgZGF5TmFtZXM6JywnWydab25kYWcnLCdNYWFuZGFnJywnRGluc2RhZycsJ1dvZW5zZGFnJywnRG9uZGVyZGFnJywnVnJpamRhZycsJ1phdGVyZGFnJ10sCiAgICAgICAgICAgIGRheU5hbWVzU2hvcnQ6IFsnWm8nLCdNYScsJ0RpJywnV28nLCdEbycsJ1ZyJywnWmEnXSwKICAgICAgICAgICAgZm9ybWF0U3RyaW5nOiAnJVktJW0tJWQgJUg6JU06JVMnCiAgICAgICAgfSwKCiAgICAgICAgJ3N2JzogewogICAgICAgICAgICBtb250aE5hbWVzOiBbJ2phbnVhcmknLCdmZWJydWFyaScsJ21hcnMnLCdhcHJpbCcsJ21haicsJ2p1bmknLCdqdWxpJywnYXVndXN0aScsJ3NlcHRlbWJlcicsJ29rdG9iZXInLCdub3ZlbWJlcicsJ2RlY2VtYmVyJ10sCiAgICAgICAgICBtb250aE5hbWVzU2hvcnQ6IFsnamFuJywnZmViJywnbWFyJywnYXByJywnbWFqJywnanVuJywnanVsJywnYXVnJywnc2VwJywnb2t0Jywnbm92JywnZGVjJ10sCiAgICAgICAgICAgIGRheU5hbWVzOiBbJ3PDtm5kYWcnLCdtw6VuZGFnJywndGlzZGFnJywnb25zZGFnJywndG9yc2RhZycsJ2ZyZWRhZycsJ2zDtnJkYWcnXSwKICAgICAgICAgICAgZGF5TmFtZXNTaG9ydDogWydzw7ZuJywnbcOlbicsJ3RpcycsJ29ucycsJ3RvcicsJ2ZyZScsJ2zDtnInXSwKICAgICAgICAgICAgZm9ybWF0U3RyaW5nOiAnJVktJW0tJWQgJUg6JU06JVMnCiAgICAgICAgfQogICAgCiAgICB9OwogICAgCiAgICAvLyBTZXQgZW5nbGlzaCB2YXJpYW50cyB0byAnZW4nCiAgICBqc0RhdGUucmVnaW9uYWxbJ2VuLVVTJ10gPSBqc0RhdGUucmVnaW9uYWxbJ2VuLUdCJ10gPSBqc0RhdGUucmVnaW9uYWxbJ2VuJ107CiAgICAKICAgIC8qKgogICAgICogVHJ5IHRvIGRldGVybWluZSB0aGUgdXNlcnMgbG9jYWxlIGJhc2VkIG9uIHRoZSBsYW5nIGF0dHJpYnV0ZSBvZiB0aGUgaHRtbCBwYWdlLiAgRGVmYXVsdHMgdG8gJ2VuJwogICAgICogaWYgaXQgY2Fubm90IGZpZ3VyZSBvdXQgYSBsb2NhbGUgb2YgaWYgdGhlIGxvY2FsZSBkb2VzIG5vdCBoYXZlIGEgbG9jYWxpemF0aW9uIGRlZmluZWQuCiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBsb2NhbGUKICAgICAqLwogICAgIAogICAganNEYXRlLnJlZ2lvbmFsLmdldExvY2FsZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgbCA9IGpzRGF0ZS5jb25maWcuZGVmYXVsdExvY2FsZTsKICAgICAgICAKICAgICAgICBpZiAoIGRvY3VtZW50ICYmIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJykgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXS5sYW5nICkgewogICAgICAgICAgICBsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXS5sYW5nOwogICAgICAgICAgICBpZiAoIWpzRGF0ZS5yZWdpb25hbC5oYXNPd25Qcm9wZXJ0eShsKSkgewogICAgICAgICAgICAgICAgbCA9IGpzRGF0ZS5jb25maWcuZGVmYXVsdExvY2FsZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbDsKICAgIH07CiAgICAKICAgIC8vIG1zIGluIGRheQogICAgdmFyIGRheSA9IDI0ICogNjAgKiA2MCAqIDEwMDA7CiAgICAKICAgIC8vIHBhZGQgYSBudW1iZXIgd2l0aCB6ZXJvcwogICAgdmFyIGFkZFplcm9zID0gZnVuY3Rpb24obnVtLCBkaWdpdHMpIHsKICAgICAgICBudW0gPSBTdHJpbmcobnVtKTsKICAgICAgICB2YXIgaSA9IGRpZ2l0cyAtIG51bS5sZW5ndGg7CiAgICAgICAgdmFyIHMgPSBTdHJpbmcoTWF0aC5wb3coMTAsIGkpKS5zbGljZSgxKTsKICAgICAgICByZXR1cm4gcy5jb25jYXQobnVtKTsKICAgIH07CgogICAgLy8gcmVwcmVzZW50YXRpb25zIHVzZWQgZm9yIGNhbGN1bGF0aW5nIGRpZmZlcmVuY2VzIGJldHdlZW4gZGF0ZXMuCiAgICAvLyBUaGlzIGJvcnJvd3MgaGVhdmlseSBmcm9tIEtlbiBTbnlkZXIncyB3b3JrLgogICAgdmFyIG11bHRpcGxpZXJzID0gewogICAgICAgIG1pbGxpc2Vjb25kOiAxLAogICAgICAgIHNlY29uZDogMTAwMCwKICAgICAgICBtaW51dGU6IDYwICogMTAwMCwKICAgICAgICBob3VyOiA2MCAqIDYwICogMTAwMCwKICAgICAgICBkYXk6IGRheSwKICAgICAgICB3ZWVrOiA3ICogZGF5LAogICAgICAgIG1vbnRoOiB7CiAgICAgICAgICAgIC8vIGFkZCBhIG51bWJlciBvZiBtb250aHMKICAgICAgICAgICAgYWRkOiBmdW5jdGlvbihkLCBudW1iZXIpIHsKICAgICAgICAgICAgICAgIC8vIGFkZCBhbnkgeWVhcnMgbmVlZGVkIChpbmNyZW1lbnRzIG9mIDEyKQogICAgICAgICAgICAgICAgbXVsdGlwbGllcnMueWVhci5hZGQoZCwgTWF0aFtudW1iZXIgPiAwID8gJ2Zsb29yJyA6ICdjZWlsJ10obnVtYmVyIC8gMTIpKTsKICAgICAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IHdlIHByb3Blcmx5IHdyYXAgYmV0d2VuIERlY2VtYmVyIGFuZCBKYW51YXJ5CiAgICAgICAgICAgICAgICAvLyAxMSAlIDEyID0gMTEKICAgICAgICAgICAgICAgIC8vIDEyICUgMTIgPSAwCiAgICAgICAgICAgICAgICB2YXIgcHJldk1vbnRoID0gZC5nZXRNb250aCgpICsgKG51bWJlciAlIDEyKTsKICAgICAgICAgICAgICAgIGlmIChwcmV2TW9udGggPT0gMTIpIHsKICAgICAgICAgICAgICAgICAgICBwcmV2TW9udGggPSAwOwogICAgICAgICAgICAgICAgICAgIGQuc2V0WWVhcihkLmdldEZ1bGxZZWFyKCkgKyAxKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldk1vbnRoID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgcHJldk1vbnRoID0gMTE7CiAgICAgICAgICAgICAgICAgICAgZC5zZXRZZWFyKGQuZ2V0RnVsbFllYXIoKSAtIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZC5zZXRNb250aChwcmV2TW9udGgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICAvLyBnZXQgdGhlIG51bWJlciBvZiBtb250aHMgYmV0d2VlbiB0d28gRGF0ZSBvYmplY3RzIChkZWNpbWFsIHRvIHRoZSBuZWFyZXN0IGRheSkKICAgICAgICAgICAgZGlmZjogZnVuY3Rpb24oZDEsIGQyKSB7CiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG51bWJlciBvZiB5ZWFycwogICAgICAgICAgICAgICAgdmFyIGRpZmZZZWFycyA9IGQxLmdldEZ1bGxZZWFyKCkgLSBkMi5nZXRGdWxsWWVhcigpOwogICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIG1vbnRocwogICAgICAgICAgICAgICAgdmFyIGRpZmZNb250aHMgPSBkMS5nZXRNb250aCgpIC0gZDIuZ2V0TW9udGgoKSArIChkaWZmWWVhcnMgKiAxMik7CiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG51bWJlciBvZiByZW1haW5pbmcgZGF5cwogICAgICAgICAgICAgICAgdmFyIGRpZmZEYXlzID0gZDEuZ2V0RGF0ZSgpIC0gZDIuZ2V0RGF0ZSgpOwogICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBtb250aCBkaWZmZXJlbmNlIHdpdGggdGhlIGRheXMgZGlmZmVyZW5jZSBhcyBhIGRlY2ltYWwKICAgICAgICAgICAgICAgIHJldHVybiBkaWZmTW9udGhzICsgKGRpZmZEYXlzIC8gMzApOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB5ZWFyOiB7CiAgICAgICAgICAgIC8vIGFkZCBhIG51bWJlciBvZiB5ZWFycwogICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uKGQsIG51bWJlcikgewogICAgICAgICAgICAgICAgZC5zZXRZZWFyKGQuZ2V0RnVsbFllYXIoKSArIE1hdGhbbnVtYmVyID4gMCA/ICdmbG9vcicgOiAnY2VpbCddKG51bWJlcikpOwogICAgICAgICAgICB9LAogICAgICAgICAgICAvLyBnZXQgdGhlIG51bWJlciBvZiB5ZWFycyBiZXR3ZWVuIHR3byBEYXRlIG9iamVjdHMgKGRlY2ltYWwgdG8gdGhlIG5lYXJlc3QgZGF5KQogICAgICAgICAgICBkaWZmOiBmdW5jdGlvbihkMSwgZDIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBtdWx0aXBsaWVycy5tb250aC5kaWZmKGQxLCBkMikgLyAxMjsKICAgICAgICAgICAgfQogICAgICAgIH0gICAgICAgIAogICAgfTsKICAgIC8vCiAgICAvLyBBbGlhcyBlYWNoIG11bHRpcGxpZXIgd2l0aCBhbiAncycgdG8gYWxsb3cgJ3llYXInIGFuZCAneWVhcnMnIGZvciBleGFtcGxlLgogICAgLy8gVGhpcyBjb21lcyBmcm9tIEtlbiBTbnlkZXJzIHdvcmsuCiAgICAvLwogICAgZm9yICh2YXIgdW5pdCBpbiBtdWx0aXBsaWVycykgewogICAgICAgIGlmICh1bml0LnN1YnN0cmluZyh1bml0Lmxlbmd0aCAtIDEpICE9ICdzJykgeyAvLyBJRSB3aWxsIGl0ZXJhdGUgbmV3bHkgYWRkZWQgcHJvcGVydGllcyA6fAogICAgICAgICAgICBtdWx0aXBsaWVyc1t1bml0ICsgJ3MnXSA9IG11bHRpcGxpZXJzW3VuaXRdOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8KICAgIC8vIHRha2UgYSBqc0RhdGUgaW5zdGFuY2UgYW5kIGEgZm9ybWF0IGNvZGUgYW5kIHJldHVybiB0aGUgZm9ybWF0dGVkIHZhbHVlLgogICAgLy8gVGhpcyBpcyBhIHNvbWV3aGF0IG1vZGlmaWVkIHZlcnNpb24gb2YgS2VuIFNueWRlcidzIG1ldGhvZC4KICAgIC8vCiAgICB2YXIgZm9ybWF0ID0gZnVuY3Rpb24oZCwgY29kZSwgc3ludGF4KSB7CiAgICAgICAgLy8gaWYgc2hvcmN1dCBjb2RlcyBhcmUgdXNlZCwgcmVjdXJzaXZlbHkgZXhwYW5kIHRob3NlLgogICAgICAgIGlmIChqc0RhdGUuZm9ybWF0c1tzeW50YXhdWyJzaG9ydGN1dHMiXVtjb2RlXSkgewogICAgICAgICAgICByZXR1cm4ganNEYXRlLnN0cmZ0aW1lKGQsIGpzRGF0ZS5mb3JtYXRzW3N5bnRheF1bInNob3J0Y3V0cyJdW2NvZGVdLCBzeW50YXgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIGdldCB0aGUgZm9ybWF0IGNvZGUgZnVuY3Rpb24gYW5kIGFkZFplcm9zKCkgYXJndW1lbnQKICAgICAgICAgICAgdmFyIGdldHRlciA9IChqc0RhdGUuZm9ybWF0c1tzeW50YXhdWyJjb2RlcyJdW2NvZGVdIHx8ICcnKS5zcGxpdCgnLicpOwogICAgICAgICAgICB2YXIgbmJyID0gZFsnZ2V0JyArIGdldHRlclswXV0gPyBkWydnZXQnICsgZ2V0dGVyWzBdXSgpIDogJyc7CiAgICAgICAgICAgIGlmIChnZXR0ZXJbMV0pIHsKICAgICAgICAgICAgICAgIG5iciA9IGFkZFplcm9zKG5iciwgZ2V0dGVyWzFdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmJyOwogICAgICAgIH0gICAgICAgCiAgICB9OwogICAgCiAgICAvKioKICAgICAqIEBzdGF0aWMKICAgICAqIFN0YXRpYyBmdW5jdGlvbiBmb3IgY29udmVydCBhIGRhdGUgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgZ2l2ZW4gZm9ybWF0LiAgQWxzbyBhY3RzIGFzIG5hbWVzcGFjZSBmb3Igc3RyZnRpbWUgZm9ybWF0IGNvZGVzLgogICAgICogPHA+c3RyZnRpbWUgZm9ybWF0dGluZyBjYW4gYmUgYWNjb21wbGlzaGVkIHdpdGhvdXQgY3JlYXRpbmcgYSBqc0RhdGUgb2JqZWN0IGJ5IGNhbGxpbmcganNEYXRlLnN0cmZ0aW1lKCk6PC9wPgogICAgICogPHByZSBjbGFzcz0iY29kZSI+CiAgICAgKiB2YXIgZm9ybWF0dGVkRGF0ZSA9IGpzRGF0ZS5zdHJmdGltZSgnRmViIDgsIDIwMDYgODo0ODozMicsICclWS0lbS0lZCAlSDolTTolUycpOwogICAgICogPC9wcmU+CiAgICAgKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlciB8IEFycmF5IHwganNEYXRlJm5ic3A7T2JqZWN0IHwgRGF0ZSZuYnNwO09iamVjdH0gZGF0ZSBBIHBhcnNhYmxlIGRhdGUgc3RyaW5nLCBKYXZhU2NyaXB0IHRpbWUgc3RhbXAsIEFycmF5IG9mIGZvcm0gW3llYXIsIG1vbnRoLCBkYXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHNdLCBqc0RhdGUgT2JqZWN0IG9yIERhdGUgb2JqZWN0LgogICAgICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdFN0cmluZyBTdHJpbmcgd2l0aCBlbWJlZGRlZCBkYXRlIGZvcm1hdHRpbmcgY29kZXMuICAKICAgICAqIFNlZToge0BsaW5rIGpzRGF0ZS5mb3JtYXRzfS4gCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3ludGF4IE9wdGlvbmFsIHN5bnRheCB0byB1c2UgW2RlZmF1bHQgcGVybF0uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxlIE9wdGlvbmFsIGxvY2FsZSB0byB1c2UuCiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBGb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUuCiAgICAqLwogICAgLy8KICAgIC8vIExvZ2ljIGFzIGltcGxlbWVudGVkIGhlcmUgaXMgdmVyeSBzaW1pbGFyIHRvIEtlbiBTbnlkZXIncyBEYXRlIEluc3RhbmNlIE1ldGhvZHMuCiAgICAvLwogICAganNEYXRlLnN0cmZ0aW1lID0gZnVuY3Rpb24oZCwgZm9ybWF0U3RyaW5nLCBzeW50YXgsIGxvY2FsZSkgewogICAgICAgIHZhciBzeW4gPSAncGVybCc7CiAgICAgICAgdmFyIGxvYyA9IGpzRGF0ZS5yZWdpb25hbC5nZXRMb2NhbGUoKTsKICAgICAgICAKICAgICAgICAvLyBjaGVjayBpZiBzeW50YXggYW5kIGxvY2FsZSBhcmUgYXZhaWxhYmxlIG9yIHJldmVyc2VkCiAgICAgICAgaWYgKHN5bnRheCAmJiBqc0RhdGUuZm9ybWF0cy5oYXNPd25Qcm9wZXJ0eShzeW50YXgpKSB7CiAgICAgICAgICAgIHN5biA9IHN5bnRheDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYmIGpzRGF0ZS5yZWdpb25hbC5oYXNPd25Qcm9wZXJ0eShzeW50YXgpKSB7CiAgICAgICAgICAgIGxvYyA9IHN5bnRheDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGxvY2FsZSAmJiBqc0RhdGUuZm9ybWF0cy5oYXNPd25Qcm9wZXJ0eShsb2NhbGUpKSB7CiAgICAgICAgICAgIHN5biA9IGxvY2FsZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAobG9jYWxlICYmIGpzRGF0ZS5yZWdpb25hbC5oYXNPd25Qcm9wZXJ0eShsb2NhbGUpKSB7CiAgICAgICAgICAgIGxvYyA9IGxvY2FsZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGdldF90eXBlKGQpICE9ICJbb2JqZWN0IE9iamVjdF0iIHx8IGQuX3R5cGUgIT0gImpzRGF0ZSIpIHsKICAgICAgICAgICAgZCA9IG5ldyBqc0RhdGUoZCk7CiAgICAgICAgICAgIGQubG9jYWxlID0gbG9jOwogICAgICAgIH0KICAgICAgICBpZiAoIWZvcm1hdFN0cmluZykgewogICAgICAgICAgICBmb3JtYXRTdHJpbmcgPSBkLmZvcm1hdFN0cmluZyB8fCBqc0RhdGUucmVnaW9uYWxbbG9jXVsnZm9ybWF0U3RyaW5nJ107CiAgICAgICAgfQogICAgICAgIC8vIGRlZmF1bHQgdGhlIGZvcm1hdCBzdHJpbmcgdG8geWVhci1tb250aC1kYXkKICAgICAgICB2YXIgc291cmNlID0gZm9ybWF0U3RyaW5nIHx8ICclWS0lbS0lZCcsIAogICAgICAgICAgICByZXN1bHQgPSAnJywgCiAgICAgICAgICAgIG1hdGNoOwogICAgICAgIC8vIHJlcGxhY2UgZWFjaCBmb3JtYXQgY29kZQogICAgICAgIHdoaWxlIChzb3VyY2UubGVuZ3RoID4gMCkgewogICAgICAgICAgICBpZiAobWF0Y2ggPSBzb3VyY2UubWF0Y2goanNEYXRlLmZvcm1hdHNbc3luXS5jb2Rlcy5tYXRjaGVyKSkgewogICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNvdXJjZS5zbGljZSgwLCBtYXRjaC5pbmRleCk7CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gKG1hdGNoWzFdIHx8ICcnKSArIGZvcm1hdChkLCBtYXRjaFsyXSwgc3luKTsKICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc291cmNlOwogICAgICAgICAgICAgICAgc291cmNlID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogQG5hbWVzcGFjZQogICAgICogTmFtZXNwYWNlIHRvIGhvbGQgZm9ybWF0IGNvZGVzIGFuZCBmb3JtYXQgc2hvcnRjdXRzLiAgInBlcmwiIGFuZCAicGhwIiBmb3JtYXQgY29kZXMgCiAgICAgKiBhbmQgc2hvcnRjdXRzIGFyZSBkZWZpbmVkIGJ5IGRlZmF1bHQuICBBZGRpdGlvbmFsIGNvZGVzIGFuZCBzaG9ydGN1dHMgY2FuIGJlCiAgICAgKiBhZGRlZCBsaWtlOgogICAgICogCiAgICAgKiA8cHJlIGNsYXNzPSJjb2RlIj4KICAgICAqIGpzRGF0ZS5mb3JtYXRzWyJwZXJsIl0gPSB7CiAgICAgKiAgICAgImNvZGVzIjogewogICAgICogICAgICAgICBtYXRjaGVyOiAvc29tZXJlZ2V4LywKICAgICAqICAgICAgICAgWTogImZ1bGxZZWFyIiwgIC8vIG5hbWUgb2YgImdldCIgbWV0aG9kIHdpdGhvdXQgdGhlICJnZXQiLAogICAgICogICAgICAgICAuLi4sICAgICAgICAgICAgLy8gbW9yZSBjb2RlcwogICAgICogICAgIH0sCiAgICAgKiAgICAgInNob3J0Y3V0cyI6IHsKICAgICAqICAgICAgICAgRjogJyVZLSVtLSVkJywKICAgICAqICAgICAgICAgLi4uLCAgICAgICAgICAgIC8vIG1vcmUgc2hvcnRjdXRzCiAgICAgKiAgICAgfQogICAgICogfTsKICAgICAqIDwvcHJlPgogICAgICogCiAgICAgKiA8cD5BZGRpdGlvbmFsbHksIElTTyBhbmQgU1FMIHNob3J0Y3V0cyBhcmUgZGVmaW5lZCBhbmQgY2FuIGJlIGFjY2Vzc2VzIHZpYToKICAgICAqIDxjb2RlPmpzRGF0ZS5mb3JtYXRzLklTTzwvY29kZT4gYW5kIDxjb2RlPmpzRGF0ZS5mb3JtYXRzLlNRTDwvY29kZT4KICAgICAqLwogICAgCiAgICBqc0RhdGUuZm9ybWF0cyA9IHsKICAgICAgICBJU086JyVZLSVtLSVkVCVIOiVNOiVTLiVOJUcnLAogICAgICAgIFNRTDonJVktJW0tJWQgJUg6JU06JVMnCiAgICB9OwogICAgCiAgICAvKioKICAgICAqIFBlcmwgZm9ybWF0IGNvZGVzIGFuZCBzaG9ydGN1dHMgZm9yIHN0cmZ0aW1lLgogICAgICogCiAgICAgKiBBIGhhc2ggKG9iamVjdCkgb2YgY29kZXMgd2hlcmUgZWFjaCBjb2RlIG11c3QgYmUgYW4gYXJyYXkgd2hlcmUgdGhlIGZpcnN0IG1lbWJlciBpcyAKICAgICAqIHRoZSBuYW1lIG9mIGEgRGF0ZS5wcm90b3R5cGUgb3IganNEYXRlLnByb3RvdHlwZSBmdW5jdGlvbiB0byBjYWxsCiAgICAgKiBhbmQgb3B0aW9uYWxseSBhIHNlY29uZCBtZW1iZXIgaW5kaWNhdGluZyB0aGUgbnVtYmVyIHRvIHBhc3MgdG8gYWRkWmVyb3MoKQogICAgICogCiAgICAgKiA8cD5UaGUgZm9sbG93aW5nIGZvcm1hdCBjb2RlcyBhcmUgZGVmaW5lZDo8L3A+CiAgICAgKiAKICAgICAqIDxwcmUgY2xhc3M9ImNvZGUiPgogICAgICogQ29kZSAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uCiAgICAgKiA9PSBZZWFycyA9PSAgICAgICAgICAgCiAgICAgKiAlWSAgICAgIDIwMDggICAgICAgICAgICAgICAgICAgICAgRm91ci1kaWdpdCB5ZWFyCiAgICAgKiAleSAgICAgIDA4ICAgICAgICAgICAgICAgICAgICAgICAgVHdvLWRpZ2l0IHllYXIKICAgICAqIAogICAgICogPT0gTW9udGhzID09ICAgICAgICAgIAogICAgICogJW0gICAgICAwOSAgICAgICAgICAgICAgICAgICAgICAgIFR3by1kaWdpdCBtb250aAogICAgICogJSNtICAgICA5ICAgICAgICAgICAgICAgICAgICAgICAgIE9uZSBvciB0d28tZGlnaXQgbW9udGgKICAgICAqICVCICAgICAgU2VwdGVtYmVyICAgICAgICAgICAgICAgICBGdWxsIG1vbnRoIG5hbWUKICAgICAqICViICAgICAgU2VwICAgICAgICAgICAgICAgICAgICAgICBBYmJyZXZpYXRlZCBtb250aCBuYW1lCiAgICAgKiAKICAgICAqID09IERheXMgPT0gICAgICAgICAgICAKICAgICAqICVkICAgICAgMDUgICAgICAgICAgICAgICAgICAgICAgICBUd28tZGlnaXQgZGF5IG9mIG1vbnRoCiAgICAgKiAlI2QgICAgIDUgICAgICAgICAgICAgICAgICAgICAgICAgT25lIG9yIHR3by1kaWdpdCBkYXkgb2YgbW9udGgKICAgICAqICVlICAgICAgNSAgICAgICAgICAgICAgICAgICAgICAgICBPbmUgb3IgdHdvLWRpZ2l0IGRheSBvZiBtb250aAogICAgICogJUEgICAgICBTdW5kYXkgICAgICAgICAgICAgICAgICAgIEZ1bGwgbmFtZSBvZiB0aGUgZGF5IG9mIHRoZSB3ZWVrCiAgICAgKiAlYSAgICAgIFN1biAgICAgICAgICAgICAgICAgICAgICAgQWJicmV2aWF0ZWQgbmFtZSBvZiB0aGUgZGF5IG9mIHRoZSB3ZWVrCiAgICAgKiAldyAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWsgKDAgPSBTdW5kYXksIDYgPSBTYXR1cmRheSkKICAgICAqIAogICAgICogPT0gSG91cnMgPT0gICAgICAgICAgIAogICAgICogJUggICAgICAyMyAgICAgICAgICAgICAgICAgICAgICAgIEhvdXJzIGluIDI0LWhvdXIgZm9ybWF0ICh0d28gZGlnaXRzKQogICAgICogJSNIICAgICAzICAgICAgICAgICAgICAgICAgICAgICAgIEhvdXJzIGluIDI0LWhvdXIgaW50ZWdlciBmb3JtYXQgKG9uZSBvciB0d28gZGlnaXRzKQogICAgICogJUkgICAgICAxMSAgICAgICAgICAgICAgICAgICAgICAgIEhvdXJzIGluIDEyLWhvdXIgZm9ybWF0ICh0d28gZGlnaXRzKQogICAgICogJSNJICAgICAzICAgICAgICAgICAgICAgICAgICAgICAgIEhvdXJzIGluIDEyLWhvdXIgaW50ZWdlciBmb3JtYXQgKG9uZSBvciB0d28gZGlnaXRzKQogICAgICogJXAgICAgICBQTSAgICAgICAgICAgICAgICAgICAgICAgIEFNIG9yIFBNCiAgICAgKiAKICAgICAqID09IE1pbnV0ZXMgPT0gICAgICAgICAKICAgICAqICVNICAgICAgMDkgICAgICAgICAgICAgICAgICAgICAgICBNaW51dGVzICh0d28gZGlnaXRzKQogICAgICogJSNNICAgICA5ICAgICAgICAgICAgICAgICAgICAgICAgIE1pbnV0ZXMgKG9uZSBvciB0d28gZGlnaXRzKQogICAgICogCiAgICAgKiA9PSBTZWNvbmRzID09ICAgICAgICAgCiAgICAgKiAlUyAgICAgIDAyICAgICAgICAgICAgICAgICAgICAgICAgU2Vjb25kcyAodHdvIGRpZ2l0cykKICAgICAqICUjUyAgICAgMiAgICAgICAgICAgICAgICAgICAgICAgICBTZWNvbmRzIChvbmUgb3IgdHdvIGRpZ2l0cykKICAgICAqICVzICAgICAgMTIwNjU2NzYyNTcyMyAgICAgICAgICAgICBVbml4IHRpbWVzdGFtcCAoU2Vjb25kcyBwYXN0IDE5NzAtMDEtMDEgMDA6MDA6MDApCiAgICAgKiAKICAgICAqID09IE1pbGxpc2Vjb25kcyA9PSAgICAKICAgICAqICVOICAgICAgMDA4ICAgICAgICAgICAgICAgICAgICAgICBNaWxsaXNlY29uZHMgKHRocmVlIGRpZ2l0cykKICAgICAqICUjTiAgICAgOCAgICAgICAgICAgICAgICAgICAgICAgICBNaWxsaXNlY29uZHMgKG9uZSB0byB0aHJlZSBkaWdpdHMpCiAgICAgKiAKICAgICAqID09IFRpbWV6b25lID09ICAgICAgICAKICAgICAqICVPICAgICAgMzYwICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlIGluIG1pbnV0ZXMgYmV0d2VlbiBsb2NhbCB0aW1lIGFuZCBHTVQKICAgICAqICVaICAgICAgTW91bnRhaW4gU3RhbmRhcmQgVGltZSAgICBOYW1lIG9mIHRpbWV6b25lIGFzIHJlcG9ydGVkIGJ5IGJyb3dzZXIKICAgICAqICVHICAgICAgMDY6MDAgICAgICAgICAgICAgICAgICAgICBIb3VycyBhbmQgbWludXRlcyBiZXR3ZWVuIEdNVAogICAgICogCiAgICAgKiA9PSBTaG9ydGN1dHMgPT0gICAgICAgCiAgICAgKiAlRiAgICAgIDIwMDgtMDMtMjYgICAgICAgICAgICAgICAgJVktJW0tJWQKICAgICAqICVUICAgICAgMDU6MDY6MzAgICAgICAgICAgICAgICAgICAlSDolTTolUwogICAgICogJVggICAgICAwNTowNjozMCAgICAgICAgICAgICAgICAgICVIOiVNOiVTCiAgICAgKiAleCAgICAgIDAzLzI2LzA4ICAgICAgICAgICAgICAgICAgJW0vJWQvJXkKICAgICAqICVEICAgICAgMDMvMjYvMDggICAgICAgICAgICAgICAgICAlbS8lZC8leQogICAgICogJSNjICAgICBXZWQgTWFyIDI2IDE1OjMxOjAwIDIwMDggICVhICViICVlICVIOiVNOiVTICVZCiAgICAgKiAldiAgICAgIDMtU2VwLTIwMDggICAgICAgICAgICAgICAgJWUtJWItJVkKICAgICAqICVSICAgICAgMTU6MzEgICAgICAgICAgICAgICAgICAgICAlSDolTQogICAgICogJXIgICAgICAwMzozMTowMCBQTSAgICAgICAgICAgICAgICVJOiVNOiVTICVwCiAgICAgKiAKICAgICAqID09IENoYXJhY3RlcnMgPT0gICAgICAKICAgICAqICVuICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBOZXdsaW5lCiAgICAgKiAldCAgICAgIFx0ICAgICAgICAgICAgICAgICAgICAgICAgVGFiCiAgICAgKiAlJSAgICAgICUgICAgICAgICAgICAgICAgICAgICAgICAgUGVyY2VudCBTeW1ib2wKICAgICAqIDwvcHJlPgogICAgICogCiAgICAgKiA8cD5Gb3JtYXR0aW5nIHNob3J0Y3V0cyB0aGF0IHdpbGwgYmUgdHJhbnNsYXRlZCBpbnRvIHRoZWlyIGxvbmdlciB2ZXJzaW9uLgogICAgICogQmUgc3VyZSB0aGF0IGZvcm1hdCBzaG9ydGN1dHMgZG8gbm90IHJlZmVyIHRvIHRoZW1zZWx2ZXM6IHRoaXMgd2lsbCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wLjwvcD4KICAgICAqIAogICAgICogPHA+Rm9ybWF0IGNvZGVzIGFuZCBmb3JtYXQgc2hvcnRjdXRzIGNhbiBiZSByZWRlZmluZWQgYWZ0ZXIgdGhlIGpzRGF0ZQogICAgICogbW9kdWxlIGlzIGltcG9ydGVkLjwvcD4KICAgICAqIAogICAgICogPHA+Tm90ZSB0aGF0IGlmIHlvdSByZWRlZmluZSB0aGUgd2hvbGUgaGFzaCAob2JqZWN0KSwgeW91IG11c3Qgc3VwcGx5IGEgIm1hdGNoZXIiCiAgICAgKiByZWdleCBmb3IgdGhlIHBhcnNlci4gIFRoZSBkZWZhdWx0IG1hdGNoZXIgaXM6PC9wPgogICAgICogCiAgICAgKiA8Y29kZT4vKCklKCM/KCV8W2Etel0pKS9pPC9jb2RlPgogICAgICogCiAgICAgKiA8cD53aGljaCBjb3JyZXNwb25kcyB0byB0aGUgUGVybCBzeW50YXggdXNlZCBieSBkZWZhdWx0LjwvcD4KICAgICAqIAogICAgICogPHA+QnkgY3VzdG9taXppbmcgdGhlIG1hdGNoZXIgYW5kIGZvcm1hdCBjb2RlcywgbmVhcmx5IGFueSBzdHJmdGltZSBmdW5jdGlvbmFsaXR5IGlzIHBvc3NpYmxlLjwvcD4KICAgICAqLwogICAgIAogICAganNEYXRlLmZvcm1hdHMucGVybCA9IHsKICAgICAgICBjb2RlczogewogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyAyLXBhcnQgcmVnZXggbWF0Y2hlciBmb3IgZm9ybWF0IGNvZGVzCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vIGZpcnN0IG1hdGNoIG11c3QgYmUgdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGNvZGUgKHRvIGFjY291bnQgZm9yIGVzY2FwaW5nKQogICAgICAgICAgICAvLyBzZWNvbmQgbWF0Y2ggbXVzdCBiZSB0aGUgZm9ybWF0IGNvZGUgY2hhcmFjdGVyKHMpCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIG1hdGNoZXI6IC8oKSUoIz8oJXxbYS16XSkpL2ksCiAgICAgICAgICAgIC8vIHllYXIKICAgICAgICAgICAgWTogJ0Z1bGxZZWFyJywKICAgICAgICAgICAgeTogJ1Nob3J0WWVhci4yJywKICAgICAgICAgICAgLy8gbW9udGgKICAgICAgICAgICAgbTogJ01vbnRoTnVtYmVyLjInLAogICAgICAgICAgICAnI20nOiAnTW9udGhOdW1iZXInLAogICAgICAgICAgICBCOiAnTW9udGhOYW1lJywKICAgICAgICAgICAgYjogJ0FiYnJNb250aE5hbWUnLAogICAgICAgICAgICAvLyBkYXkKICAgICAgICAgICAgZDogJ0RhdGUuMicsCiAgICAgICAgICAgICcjZCc6ICdEYXRlJywKICAgICAgICAgICAgZTogJ0RhdGUnLAogICAgICAgICAgICBBOiAnRGF5TmFtZScsCiAgICAgICAgICAgIGE6ICdBYmJyRGF5TmFtZScsCiAgICAgICAgICAgIHc6ICdEYXknLAogICAgICAgICAgICAvLyBob3VycwogICAgICAgICAgICBIOiAnSG91cnMuMicsCiAgICAgICAgICAgICcjSCc6ICdIb3VycycsCiAgICAgICAgICAgIEk6ICdIb3VyczEyLjInLAogICAgICAgICAgICAnI0knOiAnSG91cnMxMicsCiAgICAgICAgICAgIHA6ICdBTVBNJywKICAgICAgICAgICAgLy8gbWludXRlcwogICAgICAgICAgICBNOiAnTWludXRlcy4yJywKICAgICAgICAgICAgJyNNJzogJ01pbnV0ZXMnLAogICAgICAgICAgICAvLyBzZWNvbmRzCiAgICAgICAgICAgIFM6ICdTZWNvbmRzLjInLAogICAgICAgICAgICAnI1MnOiAnU2Vjb25kcycsCiAgICAgICAgICAgIHM6ICdVbml4JywKICAgICAgICAgICAgLy8gbWlsbGlzZWNvbmRzCiAgICAgICAgICAgIE46ICdNaWxsaXNlY29uZHMuMycsCiAgICAgICAgICAgICcjTic6ICdNaWxsaXNlY29uZHMnLAogICAgICAgICAgICAvLyB0aW1lem9uZQogICAgICAgICAgICBPOiAnVGltZXpvbmVPZmZzZXQnLAogICAgICAgICAgICBaOiAnVGltZXpvbmVOYW1lJywKICAgICAgICAgICAgRzogJ0dtdE9mZnNldCcgIAogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgc2hvcnRjdXRzOiB7CiAgICAgICAgICAgIC8vIGRhdGUKICAgICAgICAgICAgRjogJyVZLSVtLSVkJywKICAgICAgICAgICAgLy8gdGltZQogICAgICAgICAgICBUOiAnJUg6JU06JVMnLAogICAgICAgICAgICBYOiAnJUg6JU06JVMnLAogICAgICAgICAgICAvLyBsb2NhbCBmb3JtYXQgZGF0ZQogICAgICAgICAgICB4OiAnJW0vJWQvJXknLAogICAgICAgICAgICBEOiAnJW0vJWQvJXknLAogICAgICAgICAgICAvLyBsb2NhbCBmb3JtYXQgZXh0ZW5kZWQKICAgICAgICAgICAgJyNjJzogJyVhICViICVlICVIOiVNOiVTICVZJywKICAgICAgICAgICAgLy8gbG9jYWwgZm9ybWF0IHNob3J0CiAgICAgICAgICAgIHY6ICclZS0lYi0lWScsCiAgICAgICAgICAgIFI6ICclSDolTScsCiAgICAgICAgICAgIHI6ICclSTolTTolUyAlcCcsCiAgICAgICAgICAgIC8vIHRhYiBhbmQgbmV3bGluZQogICAgICAgICAgICB0OiAnXHQnLAogICAgICAgICAgICBuOiAnXG4nLAogICAgICAgICAgICAnJSc6ICclJwogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8qKgogICAgICogUEhQIGZvcm1hdCBjb2RlcyBhbmQgc2hvcnRjdXRzIGZvciBzdHJmdGltZS4KICAgICAqIAogICAgICogQSBoYXNoIChvYmplY3QpIG9mIGNvZGVzIHdoZXJlIGVhY2ggY29kZSBtdXN0IGJlIGFuIGFycmF5IHdoZXJlIHRoZSBmaXJzdCBtZW1iZXIgaXMgCiAgICAgKiB0aGUgbmFtZSBvZiBhIERhdGUucHJvdG90eXBlIG9yIGpzRGF0ZS5wcm90b3R5cGUgZnVuY3Rpb24gdG8gY2FsbAogICAgICogYW5kIG9wdGlvbmFsbHkgYSBzZWNvbmQgbWVtYmVyIGluZGljYXRpbmcgdGhlIG51bWJlciB0byBwYXNzIHRvIGFkZFplcm9zKCkKICAgICAqIAogICAgICogPHA+VGhlIGZvbGxvd2luZyBmb3JtYXQgY29kZXMgYXJlIGRlZmluZWQ6PC9wPgogICAgICogCiAgICAgKiA8cHJlIGNsYXNzPSJjb2RlIj4KICAgICAqIENvZGUgICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgogICAgICogPT09IERheXMgPT09ICAgICAgICAKICAgICAqICVhICAgICAgU3VuIHRocm91Z2ggU2F0ICAgICAgICAgICBBbiBhYmJyZXZpYXRlZCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkKICAgICAqICVBICAgICAgU3VuZGF5IC0gU2F0dXJkYXkgICAgICAgICBBIGZ1bGwgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5CiAgICAgKiAlZCAgICAgIDAxIHRvIDMxICAgICAgICAgICAgICAgICAgVHdvLWRpZ2l0IGRheSBvZiB0aGUgbW9udGggKHdpdGggbGVhZGluZyB6ZXJvcykKICAgICAqICVlICAgICAgMSB0byAzMSAgICAgICAgICAgICAgICAgICBEYXkgb2YgdGhlIG1vbnRoLCB3aXRoIGEgc3BhY2UgcHJlY2VkaW5nIHNpbmdsZSBkaWdpdHMuCiAgICAgKiAlaiAgICAgIDAwMSB0byAzNjYgICAgICAgICAgICAgICAgRGF5IG9mIHRoZSB5ZWFyLCAzIGRpZ2l0cyB3aXRoIGxlYWRpbmcgemVyb3MKICAgICAqICV1ICAgICAgMSAtIDcgKE1vbiAtIFN1bikgICAgICAgICBJU08tODYwMSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWsKICAgICAqICV3ICAgICAgMCAtIDYgKFN1biAtIFNhdCkgICAgICAgICBOdW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWsKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICogPT09IFdlZWsgPT09ICAgICAgICAgICAgICAgICAgICAgCiAgICAgKiAlVSAgICAgIDEzICAgICAgICAgICAgICAgICAgICAgICAgRnVsbCBXZWVrIG51bWJlciwgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgU3VuZGF5IGFzIHRoZSBmaXJzdCB3ZWVrCiAgICAgKiAlViAgICAgIDAxIHRocm91Z2ggNTMgICAgICAgICAgICAgSVNPLTg2MDE6MTk4OCB3ZWVrIG51bWJlciwgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhciAKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGF0IGxlYXN0IDQgd2Vla2RheXMsIHdpdGggTW9uZGF5IGJlaW5nIHRoZSBzdGFydCBvZiB0aGUgd2VlawogICAgICogJVcgICAgICA0NiAgICAgICAgICAgICAgICAgICAgICAgIEEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgd2VlayBvZiB0aGUgeWVhciwgCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgTW9uZGF5IGFzIHRoZSBmaXJzdCB3ZWVrCiAgICAgKiA9PT0gTW9udGggPT09ICAgICAgICAgICAgICAgICAgICAKICAgICAqICViICAgICAgSmFuIHRocm91Z2ggRGVjICAgICAgICAgICBBYmJyZXZpYXRlZCBtb250aCBuYW1lLCBiYXNlZCBvbiB0aGUgbG9jYWxlCiAgICAgKiAlQiAgICAgIEphbnVhcnkgLSBEZWNlbWJlciAgICAgICAgRnVsbCBtb250aCBuYW1lLCBiYXNlZCBvbiB0aGUgbG9jYWxlCiAgICAgKiAlaCAgICAgIEphbiB0aHJvdWdoIERlYyAgICAgICAgICAgQWJicmV2aWF0ZWQgbW9udGggbmFtZSwgYmFzZWQgb24gdGhlIGxvY2FsZSAoYW4gYWxpYXMgb2YgJWIpCiAgICAgKiAlbSAgICAgIDAxIC0gMTIgKEphbiAtIERlYykgICAgICAgVHdvIGRpZ2l0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aAogICAgICogCiAgICAgKiA9PT0gWWVhciA9PT0gICAgICAgICAgICAgICAgICAgICAKICAgICAqICVDICAgICAgMTkgICAgICAgICAgICAgICAgICAgICAgICBUd28gZGlnaXQgY2VudHVyeSAoeWVhci8xMDAsIHRydW5jYXRlZCB0byBhbiBpbnRlZ2VyKQogICAgICogJXkgICAgICAwOSBmb3IgMjAwOSAgICAgICAgICAgICAgIFR3byBkaWdpdCB5ZWFyCiAgICAgKiAlWSAgICAgIDIwMzggICAgICAgICAgICAgICAgICAgICAgRm91ciBkaWdpdCB5ZWFyCiAgICAgKiAKICAgICAqID09PSBUaW1lID09PSAgICAgICAgICAgICAgICAgICAgIAogICAgICogJUggICAgICAwMCB0aHJvdWdoIDIzICAgICAgICAgICAgIFR3byBkaWdpdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgaG91ciBpbiAyNC1ob3VyIGZvcm1hdAogICAgICogJUkgICAgICAwMSB0aHJvdWdoIDEyICAgICAgICAgICAgIFR3byBkaWdpdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgaG91ciBpbiAxMi1ob3VyIGZvcm1hdAogICAgICogJWwgICAgICAxIHRocm91Z2ggMTIgICAgICAgICAgICAgIEhvdXIgaW4gMTItaG91ciBmb3JtYXQsIHdpdGggYSBzcGFjZSBwcmVjZWVkaW5nIHNpbmdsZSBkaWdpdHMKICAgICAqICVNICAgICAgMDAgdGhyb3VnaCA1OSAgICAgICAgICAgICBUd28gZGlnaXQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1pbnV0ZQogICAgICogJXAgICAgICBBTS9QTSAgICAgICAgICAgICAgICAgICAgIFVQUEVSLUNBU0UgJ0FNJyBvciAnUE0nIGJhc2VkIG9uIHRoZSBnaXZlbiB0aW1lCiAgICAgKiAlUCAgICAgIGFtL3BtICAgICAgICAgICAgICAgICAgICAgbG93ZXItY2FzZSAnYW0nIG9yICdwbScgYmFzZWQgb24gdGhlIGdpdmVuIHRpbWUKICAgICAqICVyICAgICAgMDk6MzQ6MTcgUE0gICAgICAgICAgICAgICBTYW1lIGFzICVJOiVNOiVTICVwCiAgICAgKiAlUiAgICAgIDAwOjM1ICAgICAgICAgICAgICAgICAgICAgU2FtZSBhcyAlSDolTQogICAgICogJVMgICAgICAwMCB0aHJvdWdoIDU5ICAgICAgICAgICAgIFR3byBkaWdpdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2Vjb25kCiAgICAgKiAlVCAgICAgIDIxOjM0OjE3ICAgICAgICAgICAgICAgICAgU2FtZSBhcyAlSDolTTolUwogICAgICogJVggICAgICAwMzo1OToxNiAgICAgICAgICAgICAgICAgIFByZWZlcnJlZCB0aW1lIHJlcHJlc2VudGF0aW9uIGJhc2VkIG9uIGxvY2FsZSwgd2l0aG91dCB0aGUgZGF0ZQogICAgICogJXogICAgICAtMDUwMCBvciBFU1QgICAgICAgICAgICAgIEVpdGhlciB0aGUgdGltZSB6b25lIG9mZnNldCBmcm9tIFVUQyBvciB0aGUgYWJicmV2aWF0aW9uCiAgICAgKiAlWiAgICAgIC0wNTAwIG9yIEVTVCAgICAgICAgICAgICAgVGhlIHRpbWUgem9uZSBvZmZzZXQvYWJicmV2aWF0aW9uIG9wdGlvbiBOT1QgZ2l2ZW4gYnkgJXoKICAgICAqIAogICAgICogPT09IFRpbWUgYW5kIERhdGUgPT09ICAgICAgICAgICAgCiAgICAgKiAlRCAgICAgIDAyLzA1LzA5ICAgICAgICAgICAgICAgICAgU2FtZSBhcyAlbS8lZC8leQogICAgICogJUYgICAgICAyMDA5LTAyLTA1ICAgICAgICAgICAgICAgIFNhbWUgYXMgJVktJW0tJWQgKGNvbW1vbmx5IHVzZWQgaW4gZGF0YWJhc2UgZGF0ZXN0YW1wcykKICAgICAqICVzICAgICAgMzA1ODE1MjAwICAgICAgICAgICAgICAgICBVbml4IEVwb2NoIFRpbWUgdGltZXN0YW1wIChzYW1lIGFzIHRoZSB0aW1lKCkgZnVuY3Rpb24pCiAgICAgKiAleCAgICAgIDAyLzA1LzA5ICAgICAgICAgICAgICAgICAgUHJlZmVycmVkIGRhdGUgcmVwcmVzZW50YXRpb24sIHdpdGhvdXQgdGhlIHRpbWUKICAgICAqIAogICAgICogPT09IE1pc2NlbGxhbmVvdXMgPT09ICAgICAgICAgICAgCiAgICAgKiAlbiAgICAgICAgLS0tICAgICAgICAgICAgICAgICAgICAgQSBuZXdsaW5lIGNoYXJhY3RlciAoXG4pCiAgICAgKiAldCAgICAgICAgLS0tICAgICAgICAgICAgICAgICAgICAgQSBUYWIgY2hhcmFjdGVyIChcdCkKICAgICAqICUlICAgICAgICAtLS0gICAgICAgICAgICAgICAgICAgICBBIGxpdGVyYWwgcGVyY2VudGFnZSBjaGFyYWN0ZXIgKCUpCiAgICAgKiA8L3ByZT4KICAgICAqLwogCiAgICBqc0RhdGUuZm9ybWF0cy5waHAgPSB7CiAgICAgICAgY29kZXM6IHsKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gMi1wYXJ0IHJlZ2V4IG1hdGNoZXIgZm9yIGZvcm1hdCBjb2RlcwogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyBmaXJzdCBtYXRjaCBtdXN0IGJlIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjb2RlICh0byBhY2NvdW50IGZvciBlc2NhcGluZykKICAgICAgICAgICAgLy8gc2Vjb25kIG1hdGNoIG11c3QgYmUgdGhlIGZvcm1hdCBjb2RlIGNoYXJhY3RlcihzKQogICAgICAgICAgICAvLwogICAgICAgICAgICBtYXRjaGVyOiAvKCklKCglfFthLXpdKSkvaSwKICAgICAgICAgICAgLy8gZGF5CiAgICAgICAgICAgIGE6ICdBYmJyRGF5TmFtZScsCiAgICAgICAgICAgIEE6ICdEYXlOYW1lJywKICAgICAgICAgICAgZDogJ0RhdGUuMicsCiAgICAgICAgICAgIGU6ICdEYXRlJywKICAgICAgICAgICAgajogJ0RheU9mWWVhci4zJywKICAgICAgICAgICAgdTogJ0RheU9mV2VlaycsCiAgICAgICAgICAgIHc6ICdEYXknLAogICAgICAgICAgICAvLyB3ZWVrCiAgICAgICAgICAgIFU6ICdGdWxsV2Vla09mWWVhci4yJywKICAgICAgICAgICAgVjogJ0lzb1dlZWsuMicsCiAgICAgICAgICAgIFc6ICdXZWVrT2ZZZWFyLjInLAogICAgICAgICAgICAvLyBtb250aAogICAgICAgICAgICBiOiAnQWJick1vbnRoTmFtZScsCiAgICAgICAgICAgIEI6ICdNb250aE5hbWUnLAogICAgICAgICAgICBtOiAnTW9udGhOdW1iZXIuMicsCiAgICAgICAgICAgIGg6ICdBYmJyTW9udGhOYW1lJywKICAgICAgICAgICAgLy8geWVhcgogICAgICAgICAgICBDOiAnQ2VudHVyeS4yJywKICAgICAgICAgICAgeTogJ1Nob3J0WWVhci4yJywKICAgICAgICAgICAgWTogJ0Z1bGxZZWFyJywKICAgICAgICAgICAgLy8gdGltZQogICAgICAgICAgICBIOiAnSG91cnMuMicsCiAgICAgICAgICAgIEk6ICdIb3VyczEyLjInLAogICAgICAgICAgICBsOiAnSG91cnMxMicsCiAgICAgICAgICAgIHA6ICdBTVBNJywKICAgICAgICAgICAgUDogJ0FtUG0nLAogICAgICAgICAgICBNOiAnTWludXRlcy4yJywKICAgICAgICAgICAgUzogJ1NlY29uZHMuMicsCiAgICAgICAgICAgIHM6ICdVbml4JywKICAgICAgICAgICAgTzogJ1RpbWV6b25lT2Zmc2V0JywKICAgICAgICAgICAgejogJ0dtdE9mZnNldCcsCiAgICAgICAgICAgIFo6ICdUaW1lem9uZUFiYnInCiAgICAgICAgfSwKICAgICAgICAKICAgICAgICBzaG9ydGN1dHM6IHsKICAgICAgICAgICAgRDogJyVtLyVkLyV5JywKICAgICAgICAgICAgRjogJyVZLSVtLSVkJywKICAgICAgICAgICAgVDogJyVIOiVNOiVTJywKICAgICAgICAgICAgWDogJyVIOiVNOiVTJywKICAgICAgICAgICAgeDogJyVtLyVkLyV5JywKICAgICAgICAgICAgUjogJyVIOiVNJywKICAgICAgICAgICAgcjogJyVJOiVNOiVTICVwJywKICAgICAgICAgICAgdDogJ1x0JywKICAgICAgICAgICAgbjogJ1xuJywKICAgICAgICAgICAgJyUnOiAnJScKICAgICAgICB9CiAgICB9OyAgIAogICAgLy8KICAgIC8vIENvbmNlcHR1YWxseSwgdGhlIGxvZ2ljIGltcGxlbWVudGVkIGhlcmUgaXMgc2ltaWxhciB0byBLZW4gU255ZGVyJ3MgRGF0ZSBJbnN0YW5jZSBNZXRob2RzLgogICAgLy8gSSB1c2UgaGlzIGlkZWEgb2YgYSBzZXQgb2YgcGFyc2VycyB3aGljaCBjYW4gYmUgcmVndWxhciBleHByZXNzaW9ucyBvciBmdW5jdGlvbnMsCiAgICAvLyBpdGVyYXRpbmcgdGhyb3VnaCB0aG9zZSwgYW5kIHRoZW4gc2VlaW5nIGlmIERhdGUucGFyc2UoKSB3aWxsIGNyZWF0ZSBhIGRhdGUuCiAgICAvLyBUaGUgcGFyc2VyIGV4cHJlc3Npb25zIGFuZCBmdW5jdGlvbnMgYXJlIGEgbGl0dGxlIGRpZmZlcmVudCBhbmQgc29tZSBidWdzIGhhdmUgYmVlbgogICAgLy8gd29ya2VkIG91dC4gIEFsc28sIGEgbG90IG9mICJwcmUtcGFyc2luZyIgaXMgZG9uZSB0byBmaXggaW1wbGVtZW50YXRpb24KICAgIC8vIHZhcmlhdGlvbnMgb2YgRGF0ZS5wYXJzZSgpIGJldHdlZW4gYnJvd3NlcnMuCiAgICAvLwogICAganNEYXRlLmNyZWF0ZURhdGUgPSBmdW5jdGlvbihkYXRlKSB7CiAgICAgICAgLy8gaWYgcGFzc2luZyBpbiBtdWx0aXBsZSBhcmd1bWVudHMsIHRyeSBEYXRlIGNvbnN0cnVjdG9yCiAgICAgICAgaWYgKGRhdGUgPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoKTsKICAgICAgICB9CiAgICAgICAgLy8gSWYgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhbHJlYWR5IGEgZGF0ZSBvYmplY3QsIHJldHVybiBpdAogICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkgewogICAgICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgICB9CiAgICAgICAgLy8gaWYgKHR5cGVvZiBkYXRlID09ICdudW1iZXInKSByZXR1cm4gbmV3IERhdGUoZGF0ZSAqIDEwMDApOwogICAgICAgIC8vIElmIHRoZSBwYXNzZWQgdmFsdWUgaXMgYW4gaW50ZWdlciwgaW50ZXJwcmV0IGl0IGFzIGEgamF2YXNjcmlwdCB0aW1lc3RhbXAKICAgICAgICBpZiAodHlwZW9mIGRhdGUgPT0gJ251bWJlcicpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBCZWZvcmUgcGFzc2luZyBzdHJpbmdzIGludG8gRGF0ZS5wYXJzZSgpLCBoYXZlIHRvIG5vcm1hbGl6ZSB0aGVtIGZvciBjZXJ0YWluIGNvbmRpdGlvbnMuCiAgICAgICAgLy8gSWYgc3RyaW5ncyBhcmUgbm90IGZvcm1hdHRlZCBzdGFjY29yZGluZyB0byB0aGUgRWNtYVNjcmlwdCBzcGVjLCByZXN1bHRzIGZyb20gRGF0ZSBwYXJzZSB3aWxsIGJlIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gIAogICAgICAgIC8vIAogICAgICAgIC8vIEZvciBleGFtcGxlOiAKICAgICAgICAvLyAgKiBGRiBhbmQgT3BlcmEgYXNzdW1lIDIgZGlnaXQgZGF0ZXMgYXJlIHByZSB5MmssIENob21lIGFzc3VtZXMgPDUwIGlzIHByZSB5MmssIDUwKyBpcyAyMXN0IGNlbnR1cnkuICAKICAgICAgICAvLyAgKiBDaHJvbWUgd2lsbCBjb3JyZWN0bHkgcGFyc2UgJzE5ODQtMS0yNScgaW50byBsb2NhbHRpbWUsIEZGIGFuZCBPcGVyYSB3aWxsIG5vdCBwYXJzZS4KICAgICAgICAvLyAgKiBCb3RoIEZGLCBDaHJvbWUgYW5kIE9wZXJhIHdpbGwgcGFyc2UgJzE5ODQvMS8yNScgaW50byBsb2NhbHRpbWUuCiAgICAgICAgCiAgICAgICAgLy8gcmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcwogICAgICAgIHZhciBwYXJzYWJsZSA9IFN0cmluZyhkYXRlKS5yZXBsYWNlKC9eXHMqKC4rKVxzKiQvZywgJyQxJyk7CiAgICAgICAgCiAgICAgICAgLy8gcmVwbGFjZSBkYWhzZXMgKC0pIHdpdGggc2xhc2hlcyAoLykgaW4gZGF0ZXMgbGlrZSBuW25ubl0vbltuXS9uW25ubl0KICAgICAgICBwYXJzYWJsZSA9IHBhcnNhYmxlLnJlcGxhY2UoL14oWzAtOV17MSw0fSktKFswLTldezEsMn0pLShbMC05XXsxLDR9KS8sICIkMS8kMi8kMyIpOwogICAgICAgIAogICAgICAgIC8vLy8vLy8vLwogICAgICAgIC8vIE5lZWQgdG8gY2hlY2sgZm9yICcxNS1EZWMtMDknIGFsc28uCiAgICAgICAgLy8gRkYgd2lsbCBub3QgcGFyc2UsIGJ1dCBDaHJvbWUgd2lsbC4KICAgICAgICAvLyBDaHJvbWUgd2lsbCBzZXQgZGF0ZSB0byAyMDA5IGFzIHdlbGwuCiAgICAgICAgLy8vLy8vLy8vCiAgICAgICAgCiAgICAgICAgLy8gZmlyc3QgY2hlY2sgZm9yICdkZC1tbW0teXl5eScgb3IgJ2RkL21tbS95eXl5JyBsaWtlICcxNS1EZWMtMjAxMCcKICAgICAgICBwYXJzYWJsZSA9IHBhcnNhYmxlLnJlcGxhY2UoL14oM1swMV18WzAtMl0/XGQpWy1cL10oW2Etel17Myx9KVstXC9dKFxkezR9KS9pLCAiJDEgJDIgJDMiKTsKICAgICAgICAKICAgICAgICAvLyBOb3cgY2hlY2sgZm9yICdkZC1tbW0teXknIG9yICdkZC9tbW0veXknIGFuZCBub3JtYWxpemUgeWVhcnMgdG8gZGVmYXVsdCBjZW50dXJ5LgogICAgICAgIHZhciBtYXRjaCA9IHBhcnNhYmxlLm1hdGNoKC9eKDNbMDFdfFswLTJdP1xkKVstXC9dKFthLXpdezMsfSlbLVwvXShcZHsyfSlcRCovaSk7CiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDMpIHsKICAgICAgICAgICAgdmFyIG0zID0gcGFyc2VGbG9hdChtYXRjaFszXSk7CiAgICAgICAgICAgIHZhciBueSA9IGpzRGF0ZS5jb25maWcuZGVmYXVsdENlbnR1cnkgKyBtMzsKICAgICAgICAgICAgbnkgPSBTdHJpbmcobnkpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gbm93IHJlcGxhY2UgMiBkaWdpdCB5ZWFyIHdpdGggNCBkaWdpdCB5ZWFyCiAgICAgICAgICAgIHBhcnNhYmxlID0gcGFyc2FibGUucmVwbGFjZSgvXigzWzAxXXxbMC0yXT9cZClbLVwvXShbYS16XXszLH0pWy1cL10oXGR7Mn0pXEQqL2ksIG1hdGNoWzFdICsnICcrIG1hdGNoWzJdICsnICcrIG55KTsKICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIENoZWNrIGZvciAnMS8xOS83MCA4OjE0UE0nCiAgICAgICAgLy8gd2hlcmUgc3RhcnRzIHdpdGggbW0vZGQveXkgb3IgeXkvbW0vZGQgYW5kIGhhdmUgc29tZXRoaW5nIGFmdGVyCiAgICAgICAgLy8gQ2hlY2sgaWYgMXN0IHBvc3RpaW9uIGlzIGdyZWF0ZXIgdGhhbiAzMSwgYXNzdW1lIGl0IGlzIHllYXIuCiAgICAgICAgLy8gQXNzbWUgYWxsIDIgZGlnaXQgeWVhcnMgYXJlIDE5MDAncy4KICAgICAgICAvLyBGaW5hbGx5LCBjaGFuZ2UgdGhlbSBpbnRvIFVTIHN0eWxlIG1tL2RkL3l5eXkgcmVwcmVzZW50YXRpb25zLgogICAgICAgIG1hdGNoID0gcGFyc2FibGUubWF0Y2goL14oWzAtOV17MSwyfSlbLVwvXShbMC05XXsxLDJ9KVstXC9dKFswLTldezEsMn0pW14wLTldLyk7CiAgICAgICAgCiAgICAgICAgZnVuY3Rpb24gaDEocGFyc2FibGUsIG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBtMSA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pOwogICAgICAgICAgICB2YXIgbTIgPSBwYXJzZUZsb2F0KG1hdGNoWzJdKTsKICAgICAgICAgICAgdmFyIG0zID0gcGFyc2VGbG9hdChtYXRjaFszXSk7CiAgICAgICAgICAgIHZhciBjZW50ID0ganNEYXRlLmNvbmZpZy5kZWZhdWx0Q2VudHVyeTsKICAgICAgICAgICAgdmFyIG55LCBuZCwgbm0sIHN0cjsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChtMSA+IDMxKSB7IC8vIGZpcnN0IG51bWJlciBpcyBhIHllYXIKICAgICAgICAgICAgICAgIG5kID0gbTM7CiAgICAgICAgICAgICAgICBubSA9IG0yOwogICAgICAgICAgICAgICAgbnkgPSBjZW50ICsgbTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGVsc2UgeyAvLyBsYXN0IG51bWJlciBpcyB0aGUgeWVhcgogICAgICAgICAgICAgICAgbmQgPSBtMjsKICAgICAgICAgICAgICAgIG5tID0gbTE7CiAgICAgICAgICAgICAgICBueSA9IGNlbnQgKyBtMzsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgc3RyID0gbm0rJy8nK25kKycvJytueTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIG5vdyByZXBsYWNlIDIgZGlnaXQgeWVhciB3aXRoIDQgZGlnaXQgeWVhcgogICAgICAgICAgICByZXR1cm4gIHBhcnNhYmxlLnJlcGxhY2UoL14oWzAtOV17MSwyfSlbLVwvXShbMC05XXsxLDJ9KVstXC9dKFswLTldezEsMn0pLywgc3RyKTsKICAgICAgICAKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDMpIHsKICAgICAgICAgICAgcGFyc2FibGUgPSBoMShwYXJzYWJsZSwgbWF0Y2gpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBOb3cgY2hlY2sgZm9yICcxLzE5LzcwJyB3aXRoIG5vdGhpbmcgYWZ0ZXIgYW5kIGRvIGFzIGFib3ZlCiAgICAgICAgdmFyIG1hdGNoID0gcGFyc2FibGUubWF0Y2goL14oWzAtOV17MSwyfSlbLVwvXShbMC05XXsxLDJ9KVstXC9dKFswLTldezEsMn0pJC8pOwogICAgICAgIAogICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAzKSB7CiAgICAgICAgICAgIHBhcnNhYmxlID0gaDEocGFyc2FibGUsIG1hdGNoKTsKICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgdmFyIGxlbmd0aCA9IGpzRGF0ZS5tYXRjaGVycy5sZW5ndGg7CiAgICAgICAgdmFyIHBhdHRlcm4sCiAgICAgICAgICAgIG1zLAogICAgICAgICAgICBjdXJyZW50ID0gcGFyc2FibGUsCiAgICAgICAgICAgIG9iajsKICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCkgewogICAgICAgICAgICBtcyA9IERhdGUucGFyc2UoY3VycmVudCk7CiAgICAgICAgICAgIGlmICghaXNOYU4obXMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUobXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHBhdHRlcm4gPSBqc0RhdGUubWF0Y2hlcnNbaV07CiAgICAgICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICBvYmogPSBwYXR0ZXJuLmNhbGwoanNEYXRlLCBjdXJyZW50KTsKICAgICAgICAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBwYXJzYWJsZS5yZXBsYWNlKHBhdHRlcm5bMF0sIHBhdHRlcm5bMV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIE5hTjsKICAgIH07CiAgICAKCiAgICAvKioKICAgICAqIEBzdGF0aWMKICAgICAqIEhhbmR5IHN0YXRpYyB1dGlsaXR5IGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBnaXZlbiBtb250aC4KICAgICAqIEBwYXJhbSB7SW50ZWdlcn0geWVhciBZZWFyCiAgICAgKiBAcGFyYW0ge0ludGVnZXJ9IG1vbnRoIE1vbnRoICgxLTEyKQogICAgICogQHJldHVybnMge0ludGVnZXJ9IE51bWJlciBvZiBkYXlzIGluIHRoZSBtb250aC4KICAgICovCiAgICAvLwogICAgLy8gaGFuZHkgdXRpbGl0eSBtZXRob2QgQm9ycm93ZWQgcmlnaHQgZnJvbSBLZW4gU255ZGVyJ3MgRGF0ZSBJbnN0YW5jZSBNZWh0b2RzLgogICAgLy8gCiAgICBqc0RhdGUuZGF5c0luTW9udGggPSBmdW5jdGlvbih5ZWFyLCBtb250aCkgewogICAgICAgIGlmIChtb250aCA9PSAyKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCAxLCAyOSkuZ2V0RGF0ZSgpID09IDI5ID8gMjkgOiAyODsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWQsMzEsdW5kZWZpbmVkLDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXVttb250aF07CiAgICB9OwoKCiAgICAvLwogICAgLy8gQW4gQXJyYXkgb2YgcmVndWxhciBleHByZXNzaW9ucyBvciBmdW5jdGlvbnMgdGhhdCB3aWxsIGF0dGVtcHQgdG8gbWF0Y2ggdGhlIGRhdGUgc3RyaW5nLgogICAgLy8gRnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aCBzY29wZSBvZiBhIGpzRGF0ZSBpbnN0YW5jZS4KICAgIC8vCiAgICBqc0RhdGUubWF0Y2hlcnMgPSBbCiAgICAgICAgLy8gY29udmVydCBkZC5tbW0ueXl5eSB0byBtbS9kZC95eXl5ICh3b3JsZCBkYXRlIHRvIFVTIGRhdGUpLgogICAgICAgIFsvKDNbMDFdfFswLTJdXGQpXHMqXC5ccyooMVswLTJdfDBcZClccypcLlxzKihbMS05XVxkezN9KS8sICckMi8kMS8kMyddLAogICAgICAgIC8vIGNvbnZlcnQgeXl5eS1tbS1kZCB0byBtbS9kZC95eXl5IChJU08gZGF0ZSB0byBVUyBkYXRlKS4KICAgICAgICBbLyhbMS05XVxkezN9KVxzKi1ccyooMVswLTJdfDBcZClccyotXHMqKDNbMDFdfFswLTJdXGQpLywgJyQyLyQzLyQxJ10sCiAgICAgICAgLy8gSGFuZGxlIDEyIGhvdXIgb3IgMjQgaG91ciB0aW1lIHdpdGggbWlsbGlzZWNvbmRzIGFtL3BtIGFuZCBvcHRpb25hbCBkYXRlIHBhcnQuCiAgICAgICAgZnVuY3Rpb24oc3RyKSB7IAogICAgICAgICAgICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2goL14oPzooLispXHMrKT8oWzAxMl0/XGQpKD86XHMqXDpccyooXGRcZCkpPyg/OlxzKlw6XHMqKFxkXGQoXC5cZCopPykpP1xzKihhbXxwbSk/XHMqJC9pKTsKICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgb3B0LiBkYXRlICAgICAgaG91ciAgICAgICBvcHQuIG1pbnV0ZSAgICAgb3B0LiBzZWNvbmQgICAgICAgb3B0LiBtc2VjICAgb3B0LiBhbSBvciBwbQogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgICAgIHZhciBkID0gdGhpcy5jcmVhdGVEYXRlKG1hdGNoWzFdKTsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICAgICAgICAgIGQuc2V0TWlsbGlzZWNvbmRzKDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGhvdXIgPSBwYXJzZUZsb2F0KG1hdGNoWzJdKTsKICAgICAgICAgICAgICAgIGlmIChtYXRjaFs2XSkgewogICAgICAgICAgICAgICAgICAgIGhvdXIgPSBtYXRjaFs2XS50b0xvd2VyQ2FzZSgpID09ICdhbScgPyAoaG91ciA9PSAxMiA/IDAgOiBob3VyKSA6IChob3VyID09IDEyID8gMTIgOiBob3VyICsgMTIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZC5zZXRIb3Vycyhob3VyLCBwYXJzZUludChtYXRjaFszXSB8fCAwLCAxMCksIHBhcnNlSW50KG1hdGNoWzRdIHx8IDAsIDEwKSwgKChwYXJzZUZsb2F0KG1hdGNoWzVdIHx8IDApKSB8fCAwKSoxMDAwKTsKICAgICAgICAgICAgICAgIHJldHVybiBkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgLy8gSGFuZGxlIElTTyB0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmUuCiAgICAgICAgZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IHN0ci5tYXRjaCgvXig/OiguKykpW1R8XHMrXShbMDEyXVxkKSg/Olw6KFxkXGQpKSg/Olw6KFxkXGQpKSg/OlwuXGQrKShbXCtcLV1cZFxkXDpcZFxkKSQvaSk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSB0aGlzLmNyZWF0ZURhdGUobWF0Y2hbMV0pOwogICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihkKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgZC5zZXRNaWxsaXNlY29uZHMoMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgaG91ciA9IHBhcnNlRmxvYXQobWF0Y2hbMl0pOwogICAgICAgICAgICAgICAgZC5zZXRIb3Vycyhob3VyLCBwYXJzZUludChtYXRjaFszXSwgMTApLCBwYXJzZUludChtYXRjaFs0XSwgMTApLCBwYXJzZUZsb2F0KG1hdGNoWzVdKSoxMDAwKTsKICAgICAgICAgICAgICAgIHJldHVybiBkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIC8vIFRyeSB0byBtYXRjaCBhbWJpZ3VvdXMgc3RyaW5ncyBsaWtlIDEyLzgvMjIuCiAgICAgICAgLy8gVXNlIEZGIGRhdGUgYXNzdW1wdGlvbiB0aGF0IDIgZGlnaXQgeWVhcnMgYXJlIDIwdGggY2VudHVyeSAoaS5lLiAxOTAwJ3MpLgogICAgICAgIC8vIFRoaXMgbWF5IGJlIHJlZHVuZGFudCB3aXRoIHByZSBwcm9jZXNzaW5nIG9mIGRhdGUgYWxyZWFkeSBwZXJmb3JtZWQuCiAgICAgICAgZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IHN0ci5tYXRjaCgvXihbMC0zXT9cZClccypbLVwvLlxzXXsxfVxzKihbYS16QS1aXXszLDl9KVxzKlstXC8uXHNdezF9XHMqKFswLTNdP1xkKSQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgICAgICB2YXIgY2VudCA9IGpzRGF0ZS5jb25maWcuZGVmYXVsdENlbnR1cnk7CiAgICAgICAgICAgICAgICB2YXIgbTEgPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTsKICAgICAgICAgICAgICAgIHZhciBtMyA9IHBhcnNlRmxvYXQobWF0Y2hbM10pOwogICAgICAgICAgICAgICAgdmFyIG55LCBuZCwgbm07CiAgICAgICAgICAgICAgICBpZiAobTEgPiAzMSkgeyAvLyBmaXJzdCBudW1iZXIgaXMgYSB5ZWFyCiAgICAgICAgICAgICAgICAgICAgbmQgPSBtMzsKICAgICAgICAgICAgICAgICAgICBueSA9IGNlbnQgKyBtMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZWxzZSB7IC8vIGxhc3QgbnVtYmVyIGlzIHRoZSB5ZWFyCiAgICAgICAgICAgICAgICAgICAgbmQgPSBtMTsKICAgICAgICAgICAgICAgICAgICBueSA9IGNlbnQgKyBtMzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG5tID0gaW5BcnJheShtYXRjaFsyXSwganNEYXRlLnJlZ2lvbmFsW2pzRGF0ZS5yZWdpb25hbC5nZXRMb2NhbGUoKV1bIm1vbnRoTmFtZXNTaG9ydCJdKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKG5tID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgbm0gPSBpbkFycmF5KG1hdGNoWzJdLCBqc0RhdGUucmVnaW9uYWxbanNEYXRlLnJlZ2lvbmFsLmdldExvY2FsZSgpXVsibW9udGhOYW1lcyJdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBkLnNldEZ1bGxZZWFyKG55LCBubSwgbmQpOwogICAgICAgICAgICAgICAgZC5zZXRIb3VycygwLDAsMCwwKTsKICAgICAgICAgICAgICAgIHJldHVybiBkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgICAgIH0KICAgICAgICB9ICAgICAgCiAgICBdOwoKICAgIC8vCiAgICAvLyBJIHRoaW5rIEpvaG4gUmVpc2lnIHB1Ymxpc2hlZCB0aGlzIG1ldGhvZCBvbiBoaXMgYmxvZywgZWpvaG4uCiAgICAvLwogICAgZnVuY3Rpb24gaW5BcnJheSggZWxlbSwgYXJyYXkgKSB7CiAgICAgICAgaWYgKCBhcnJheS5pbmRleE9mICkgewogICAgICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZiggZWxlbSApOwogICAgICAgIH0KCiAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgaWYgKCBhcnJheVsgaSBdID09PSBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIAogICAgLy8KICAgIC8vIFRoYW5rcyB0byBLYW5nYXgsIENocmlzdGlhbiBTY2liZXJyYXMgYW5kIFN0YWNrIE92ZXJmbG93IGZvciB0aGlzIG1ldGhvZC4KICAgIC8vCiAgICBmdW5jdGlvbiBnZXRfdHlwZSh0aGluZyl7CiAgICAgICAgaWYodGhpbmc9PT1udWxsKSByZXR1cm4gIltvYmplY3QgTnVsbF0iOyAvLyBzcGVjaWFsIGNhc2UKICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaW5nKTsKICAgIH0KICAgIAogICAgJC5qc0RhdGUgPSBqc0RhdGU7CgogICAgICAKICAgIC8qKgogICAgICogSmF2YVNjcmlwdCBwcmludGYvc3ByaW50ZiBmdW5jdGlvbnMuCiAgICAgKiAKICAgICAqIFRoaXMgY29kZSBoYXMgYmVlbiBhZGFwdGVkIGZyb20gdGhlIHB1YmxpY2x5IGF2YWlsYWJsZSBzcHJpbnRmIG1ldGhvZHMKICAgICAqIGJ5IEFzaCBTZWFybGUuIEhpcyBvcmlnaW5hbCBoZWFkZXIgZm9sbG93czoKICAgICAqCiAgICAgKiAgICAgVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLgogICAgICogICAgIAogICAgICogICAgIFRoZSBmdW5jdGlvbnMgc2hvdWxkIHdvcmsgYXMgZXhwZWN0ZWQsIHBlcmZvcm1pbmcgbGVmdCBvciByaWdodCBhbGlnbm1lbnQsCiAgICAgKiAgICAgdHJ1bmNhdGluZyBzdHJpbmdzLCBvdXRwdXR0aW5nIG51bWJlcnMgd2l0aCBhIHJlcXVpcmVkIHByZWNpc2lvbiBldGMuCiAgICAgKgogICAgICogICAgIEZvciBjb21wbGV4IGNhc2VzLCB0aGVzZSBmdW5jdGlvbnMgZm9sbG93IHRoZSBQZXJsIGltcGxlbWVudGF0aW9ucyBvZgogICAgICogICAgIChzKXByaW50ZiwgYWxsb3dpbmcgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCBvdXQtb2Ytb3JkZXIsIGFuZCB0byBzZXQgdGhlCiAgICAgKiAgICAgcHJlY2lzaW9uIG9yIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGJhc2VkIG9uIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIGZpeGVkCiAgICAgKiAgICAgbnVtYmVycy4KICAgICAqCiAgICAgKiAgICAgU2VlIGh0dHA6Ly9wZXJsZG9jLnBlcmwub3JnL2Z1bmN0aW9ucy9zcHJpbnRmLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogICAgIEltcGxlbWVudGVkOgogICAgICogICAgIC0gemVybyBhbmQgc3BhY2UtcGFkZGluZwogICAgICogICAgIC0gcmlnaHQgYW5kIGxlZnQtYWxpZ25tZW50LAogICAgICogICAgIC0gYmFzZSBYIHByZWZpeCAoYmluYXJ5LCBvY3RhbCBhbmQgaGV4KQogICAgICogICAgIC0gcG9zaXRpdmUgbnVtYmVyIHByZWZpeAogICAgICogICAgIC0gKG1pbmltdW0pIHdpZHRoCiAgICAgKiAgICAgLSBwcmVjaXNpb24gLyB0cnVuY2F0aW9uIC8gbWF4aW11bSB3aWR0aAogICAgICogICAgIC0gb3V0IG9mIG9yZGVyIGFyZ3VtZW50cwogICAgICoKICAgICAqICAgICBOb3QgaW1wbGVtZW50ZWQgKHlldCk6CiAgICAgKiAgICAgLSB2ZWN0b3IgZmxhZwogICAgICogICAgIC0gc2l6ZSAoYnl0ZXMsIHdvcmRzLCBsb25nLXdvcmRzIGV0Yy4pCiAgICAgKiAgICAgCiAgICAgKiAgICAgV2lsbCBub3QgaW1wbGVtZW50OgogICAgICogICAgIC0gJW4gb3IgJXAgKG5vIHBhc3MtYnktcmVmZXJlbmNlIGluIEphdmFTY3JpcHQpCiAgICAgKgogICAgICogICAgIEB2ZXJzaW9uIDIwMDcuMDQuMjcKICAgICAqICAgICBAYXV0aG9yIEFzaCBTZWFybGUgCiAgICAgKiAKICAgICAqIFlvdSBjYW4gc2VlIHRoZSBvcmlnaW5hbCB3b3JrIGFuZCBjb21tZW50cyBvbiBoaXMgYmxvZzoKICAgICAqIGh0dHA6Ly9oZXhtZW4uY29tL2Jsb2cvMjAwNy8wMy9wcmludGYtc3ByaW50Zi8KICAgICAqIGh0dHA6Ly9oZXhtZW4uY29tL2pzL3NwcmludGYuanMKICAgICAqLwogICAgIAogICAgIC8qKgogICAgICAqIEBNb2RpZmljYXRpb25zIDIwMDkuMDUuMjYKICAgICAgKiBAYXV0aG9yIENocmlzIExlb25lbGxvCiAgICAgICogCiAgICAgICogQWRkZWQgJXAgJVAgc3BlY2lmaWVyCiAgICAgICogQWN0cyBsaWtlICVnIG9yICVHIGJ1dCB3aWxsIG5vdCBhZGQgbW9yZSBzaWduaWZpY2FudCBkaWdpdHMgdG8gdGhlIG91dHB1dCB0aGFuIHByZXNlbnQgaW4gdGhlIGlucHV0LgogICAgICAqIEV4YW1wbGU6CiAgICAgICogRm9ybWF0OiAnJS4zcCcsIElucHV0OiAwLjAxMiwgT3V0cHV0OiAwLjAxMgogICAgICAqIEZvcm1hdDogJyUuM2cnLCBJbnB1dDogMC4wMTIsIE91dHB1dDogMC4wMTIwCiAgICAgICogRm9ybWF0OiAnJS40cCcsIElucHV0OiAxMi4wLCBPdXRwdXQ6IDEyLjAKICAgICAgKiBGb3JtYXQ6ICclLjRnJywgSW5wdXQ6IDEyLjAsIE91dHB1dDogMTIuMDAKICAgICAgKiBGb3JtYXQ6ICclLjRwJywgSW5wdXQ6IDQuMzIxZS01LCBPdXRwdXQ6IDQuMzIxZS01CiAgICAgICogRm9ybWF0OiAnJS40ZycsIElucHV0OiA0LjMyMWUtNSwgT3V0cHV0OiA0LjMyMTBlLTUKICAgICAgKiAKICAgICAgKiBFeGFtcGxlOgogICAgICAqID4+PiAkLmpxcGxvdC5zcHJpbnRmKCclLjJmLCAlZCcsIDIzLjM0NTIsIDQzLjIzKQogICAgICAqICIyMy4zNSwgNDMiCiAgICAgICogPj4+ICQuanFwbG90LnNwcmludGYoIm5vIHZhbHVlOiAlbiwgZGVjaW1hbCB3aXRoIHRob3VzYW5kcyBzZXBhcmF0b3I6ICUnZCIsIDIzLjM0NTIsIDQzMzUyNCkKICAgICAgKiAibm8gdmFsdWU6ICwgZGVjaW1hbCB3aXRoIHRob3VzYW5kcyBzZXBhcmF0b3I6IDQzMyw1MjQiCiAgICAgICovCiAgICAkLmpxcGxvdC5zcHJpbnRmID0gZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gcGFkKHN0ciwgbGVuLCBjaHIsIGxlZnRKdXN0aWZ5KSB7CiAgICAgICAgICAgIHZhciBwYWRkaW5nID0gKHN0ci5sZW5ndGggPj0gbGVuKSA/ICcnIDogQXJyYXkoMSArIGxlbiAtIHN0ci5sZW5ndGggPj4+IDApLmpvaW4oY2hyKTsKICAgICAgICAgICAgcmV0dXJuIGxlZnRKdXN0aWZ5ID8gc3RyICsgcGFkZGluZyA6IHBhZGRpbmcgKyBzdHI7CgogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gdGhvdXNhbmRfc2VwYXJhdGUodmFsdWUpIHsKICAgICAgICAgICAgdmFyIHZhbHVlX3N0ciA9IG5ldyBTdHJpbmcodmFsdWUpOwogICAgICAgICAgICBmb3IgKHZhciBpPTEwOyBpPjA7IGktLSkgewogICAgICAgICAgICAgICAgaWYgKHZhbHVlX3N0ciA9PSAodmFsdWVfc3RyID0gdmFsdWVfc3RyLnJlcGxhY2UoL14oXGQrKShcZHszfSkvLCAiJDEiKyQuanFwbG90LnNwcmludGYudGhvdXNhbmRzU2VwYXJhdG9yKyIkMiIpKSkgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHZhbHVlX3N0cjsgCiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBqdXN0aWZ5KHZhbHVlLCBwcmVmaXgsIGxlZnRKdXN0aWZ5LCBtaW5XaWR0aCwgemVyb1BhZCwgaHRtbFNwYWNlKSB7CiAgICAgICAgICAgIHZhciBkaWZmID0gbWluV2lkdGggLSB2YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgIGlmIChkaWZmID4gMCkgewogICAgICAgICAgICAgICAgdmFyIHNwY2hhciA9ICcgJzsKICAgICAgICAgICAgICAgIGlmIChodG1sU3BhY2UpIHsgc3BjaGFyID0gJyZuYnNwOyc7IH0KICAgICAgICAgICAgICAgIGlmIChsZWZ0SnVzdGlmeSB8fCAhemVyb1BhZCkgewogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFkKHZhbHVlLCBtaW5XaWR0aCwgc3BjaGFyLCBsZWZ0SnVzdGlmeSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcHJlZml4Lmxlbmd0aCkgKyBwYWQoJycsIGRpZmYsICcwJywgdHJ1ZSkgKyB2YWx1ZS5zbGljZShwcmVmaXgubGVuZ3RoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBmb3JtYXRCYXNlWCh2YWx1ZSwgYmFzZSwgcHJlZml4LCBsZWZ0SnVzdGlmeSwgbWluV2lkdGgsIHByZWNpc2lvbiwgemVyb1BhZCwgaHRtbFNwYWNlKSB7CiAgICAgICAgICAgIC8vIE5vdGU6IGNhc3RzIG5lZ2F0aXZlIG51bWJlcnMgdG8gcG9zaXRpdmUgb25lcwogICAgICAgICAgICB2YXIgbnVtYmVyID0gdmFsdWUgPj4+IDA7CiAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeCAmJiBudW1iZXIgJiYgeycyJzogJzBiJywgJzgnOiAnMCcsICcxNic6ICcweCd9W2Jhc2VdIHx8ICcnOwogICAgICAgICAgICB2YWx1ZSA9IHByZWZpeCArIHBhZChudW1iZXIudG9TdHJpbmcoYmFzZSksIHByZWNpc2lvbiB8fCAwLCAnMCcsIGZhbHNlKTsKICAgICAgICAgICAgcmV0dXJuIGp1c3RpZnkodmFsdWUsIHByZWZpeCwgbGVmdEp1c3RpZnksIG1pbldpZHRoLCB6ZXJvUGFkLCBodG1sU3BhY2UpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZm9ybWF0U3RyaW5nKHZhbHVlLCBsZWZ0SnVzdGlmeSwgbWluV2lkdGgsIHByZWNpc2lvbiwgemVyb1BhZCwgaHRtbFNwYWNlKSB7CiAgICAgICAgICAgIGlmIChwcmVjaXNpb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBwcmVjaXNpb24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBqdXN0aWZ5KHZhbHVlLCAnJywgbGVmdEp1c3RpZnksIG1pbldpZHRoLCB6ZXJvUGFkLCBodG1sU3BhY2UpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGEgPSBhcmd1bWVudHMsIGkgPSAwLCBmb3JtYXQgPSBhW2krK107CgogICAgICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgkLmpxcGxvdC5zcHJpbnRmLnJlZ2V4LCBmdW5jdGlvbihzdWJzdHJpbmcsIHZhbHVlSW5kZXgsIGZsYWdzLCBtaW5XaWR0aCwgXywgcHJlY2lzaW9uLCB0eXBlKSB7CiAgICAgICAgICAgIGlmIChzdWJzdHJpbmcgPT0gJyUlJykgeyByZXR1cm4gJyUnOyB9CgogICAgICAgICAgICAvLyBwYXJzZSBmbGFncwogICAgICAgICAgICB2YXIgbGVmdEp1c3RpZnkgPSBmYWxzZSwgcG9zaXRpdmVQcmVmaXggPSAnJywgemVyb1BhZCA9IGZhbHNlLCBwcmVmaXhCYXNlWCA9IGZhbHNlLCBodG1sU3BhY2UgPSBmYWxzZSwgdGhvdXNhbmRTZXBhcmF0aW9uID0gZmFsc2U7CiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBmbGFncyAmJiBqIDwgZmxhZ3MubGVuZ3RoOyBqKyspIHN3aXRjaCAoZmxhZ3MuY2hhckF0KGopKSB7CiAgICAgICAgICAgICAgICBjYXNlICcgJzogcG9zaXRpdmVQcmVmaXggPSAnICc7IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnKyc6IHBvc2l0aXZlUHJlZml4ID0gJysnOyBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJy0nOiBsZWZ0SnVzdGlmeSA9IHRydWU7IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnMCc6IHplcm9QYWQgPSB0cnVlOyBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJyMnOiBwcmVmaXhCYXNlWCA9IHRydWU7IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnJic6IGh0bWxTcGFjZSA9IHRydWU7IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnXCcnOiB0aG91c2FuZFNlcGFyYXRpb24gPSB0cnVlOyBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gcGFyYW1ldGVycyBtYXkgYmUgbnVsbCwgdW5kZWZpbmVkLCBlbXB0eS1zdHJpbmcgb3IgcmVhbCB2YWx1ZWQKICAgICAgICAgICAgLy8gd2Ugd2FudCB0byBpZ25vcmUgbnVsbCwgdW5kZWZpbmVkIGFuZCBlbXB0eS1zdHJpbmcgdmFsdWVzCgogICAgICAgICAgICBpZiAoIW1pbldpZHRoKSB7CiAgICAgICAgICAgICAgICBtaW5XaWR0aCA9IDA7CiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIGVsc2UgaWYgKG1pbldpZHRoID09ICcqJykgewogICAgICAgICAgICAgICAgbWluV2lkdGggPSArYVtpKytdOwogICAgICAgICAgICB9IAogICAgICAgICAgICBlbHNlIGlmIChtaW5XaWR0aC5jaGFyQXQoMCkgPT0gJyonKSB7CiAgICAgICAgICAgICAgICBtaW5XaWR0aCA9ICthW21pbldpZHRoLnNsaWNlKDEsIC0xKV07CiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbWluV2lkdGggPSArbWluV2lkdGg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIE5vdGU6IHVuZG9jdW1lbnRlZCBwZXJsIGZlYXR1cmU6CiAgICAgICAgICAgIGlmIChtaW5XaWR0aCA8IDApIHsKICAgICAgICAgICAgICAgIG1pbldpZHRoID0gLW1pbldpZHRoOwogICAgICAgICAgICAgICAgbGVmdEp1c3RpZnkgPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWlzRmluaXRlKG1pbldpZHRoKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCckLmpxcGxvdC5zcHJpbnRmOiAobWluaW11bS0pd2lkdGggbXVzdCBiZSBmaW5pdGUnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFwcmVjaXNpb24pIHsKICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9ICdmRmVFJy5pbmRleE9mKHR5cGUpID4gLTEgPyA2IDogKHR5cGUgPT0gJ2QnKSA/IDAgOiB2b2lkKDApOwogICAgICAgICAgICB9IAogICAgICAgICAgICBlbHNlIGlmIChwcmVjaXNpb24gPT0gJyonKSB7CiAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSArYVtpKytdOwogICAgICAgICAgICB9IAogICAgICAgICAgICBlbHNlIGlmIChwcmVjaXNpb24uY2hhckF0KDApID09ICcqJykgewogICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gK2FbcHJlY2lzaW9uLnNsaWNlKDEsIC0xKV07CiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gK3ByZWNpc2lvbjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gZ3JhYiB2YWx1ZSB1c2luZyB2YWx1ZUluZGV4IGlmIHJlcXVpcmVkPwogICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZUluZGV4ID8gYVt2YWx1ZUluZGV4LnNsaWNlKDAsIC0xKV0gOiBhW2krK107CgogICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgY2FzZSAncyc6IHsKICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFN0cmluZyhTdHJpbmcodmFsdWUpLCBsZWZ0SnVzdGlmeSwgbWluV2lkdGgsIHByZWNpc2lvbiwgemVyb1BhZCwgaHRtbFNwYWNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlICdjJzogcmV0dXJuIGZvcm1hdFN0cmluZyhTdHJpbmcuZnJvbUNoYXJDb2RlKCt2YWx1ZSksIGxlZnRKdXN0aWZ5LCBtaW5XaWR0aCwgcHJlY2lzaW9uLCB6ZXJvUGFkLCBodG1sU3BhY2UpOwogICAgICAgICAgICBjYXNlICdiJzogcmV0dXJuIGZvcm1hdEJhc2VYKHZhbHVlLCAyLCBwcmVmaXhCYXNlWCwgbGVmdEp1c3RpZnksIG1pbldpZHRoLCBwcmVjaXNpb24sIHplcm9QYWQsaHRtbFNwYWNlKTsKICAgICAgICAgICAgY2FzZSAnbyc6IHJldHVybiBmb3JtYXRCYXNlWCh2YWx1ZSwgOCwgcHJlZml4QmFzZVgsIGxlZnRKdXN0aWZ5LCBtaW5XaWR0aCwgcHJlY2lzaW9uLCB6ZXJvUGFkLCBodG1sU3BhY2UpOwogICAgICAgICAgICBjYXNlICd4JzogcmV0dXJuIGZvcm1hdEJhc2VYKHZhbHVlLCAxNiwgcHJlZml4QmFzZVgsIGxlZnRKdXN0aWZ5LCBtaW5XaWR0aCwgcHJlY2lzaW9uLCB6ZXJvUGFkLCBodG1sU3BhY2UpOwogICAgICAgICAgICBjYXNlICdYJzogcmV0dXJuIGZvcm1hdEJhc2VYKHZhbHVlLCAxNiwgcHJlZml4QmFzZVgsIGxlZnRKdXN0aWZ5LCBtaW5XaWR0aCwgcHJlY2lzaW9uLCB6ZXJvUGFkLCBodG1sU3BhY2UpLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgIGNhc2UgJ3UnOiByZXR1cm4gZm9ybWF0QmFzZVgodmFsdWUsIDEwLCBwcmVmaXhCYXNlWCwgbGVmdEp1c3RpZnksIG1pbldpZHRoLCBwcmVjaXNpb24sIHplcm9QYWQsIGh0bWxTcGFjZSk7CiAgICAgICAgICAgIGNhc2UgJ2knOiB7CiAgICAgICAgICAgICAgdmFyIG51bWJlciA9IHBhcnNlSW50KCt2YWx1ZSwgMTApOwogICAgICAgICAgICAgIGlmIChpc05hTihudW1iZXIpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBwcmVmaXggPSBudW1iZXIgPCAwID8gJy0nIDogcG9zaXRpdmVQcmVmaXg7CiAgICAgICAgICAgICAgdmFyIG51bWJlcl9zdHIgPSB0aG91c2FuZFNlcGFyYXRpb24gPyB0aG91c2FuZF9zZXBhcmF0ZShTdHJpbmcoTWF0aC5hYnMobnVtYmVyKSkpOiBTdHJpbmcoTWF0aC5hYnMobnVtYmVyKSk7CiAgICAgICAgICAgICAgdmFsdWUgPSBwcmVmaXggKyBwYWQobnVtYmVyX3N0ciwgcHJlY2lzaW9uLCAnMCcsIGZhbHNlKTsKICAgICAgICAgICAgICAvL3ZhbHVlID0gcHJlZml4ICsgcGFkKFN0cmluZyhNYXRoLmFicyhudW1iZXIpKSwgcHJlY2lzaW9uLCAnMCcsIGZhbHNlKTsKICAgICAgICAgICAgICByZXR1cm4ganVzdGlmeSh2YWx1ZSwgcHJlZml4LCBsZWZ0SnVzdGlmeSwgbWluV2lkdGgsIHplcm9QYWQsIGh0bWxTcGFjZSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSAnZCc6IHsKICAgICAgICAgICAgICB2YXIgbnVtYmVyID0gTWF0aC5yb3VuZCgrdmFsdWUpOwogICAgICAgICAgICAgIGlmIChpc05hTihudW1iZXIpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBwcmVmaXggPSBudW1iZXIgPCAwID8gJy0nIDogcG9zaXRpdmVQcmVmaXg7CiAgICAgICAgICAgICAgdmFyIG51bWJlcl9zdHIgPSB0aG91c2FuZFNlcGFyYXRpb24gPyB0aG91c2FuZF9zZXBhcmF0ZShTdHJpbmcoTWF0aC5hYnMobnVtYmVyKSkpOiBTdHJpbmcoTWF0aC5hYnMobnVtYmVyKSk7CiAgICAgICAgICAgICAgdmFsdWUgPSBwcmVmaXggKyBwYWQobnVtYmVyX3N0ciwgcHJlY2lzaW9uLCAnMCcsIGZhbHNlKTsKICAgICAgICAgICAgICByZXR1cm4ganVzdGlmeSh2YWx1ZSwgcHJlZml4LCBsZWZ0SnVzdGlmeSwgbWluV2lkdGgsIHplcm9QYWQsIGh0bWxTcGFjZSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSAnZSc6CiAgICAgICAgICAgIGNhc2UgJ0UnOgogICAgICAgICAgICBjYXNlICdmJzoKICAgICAgICAgICAgY2FzZSAnRic6CiAgICAgICAgICAgIGNhc2UgJ2cnOgogICAgICAgICAgICBjYXNlICdHJzoKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXIgPSArdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVmaXggPSBudW1iZXIgPCAwID8gJy0nIDogcG9zaXRpdmVQcmVmaXg7CiAgICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kID0gWyd0b0V4cG9uZW50aWFsJywgJ3RvRml4ZWQnLCAndG9QcmVjaXNpb24nXVsnZWZnJy5pbmRleE9mKHR5cGUudG9Mb3dlckNhc2UoKSldOwogICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRUcmFuc2Zvcm0gPSBbJ3RvU3RyaW5nJywgJ3RvVXBwZXJDYXNlJ11bJ2VFZkZnRycuaW5kZXhPZih0eXBlKSAlIDJdOwogICAgICAgICAgICAgICAgICAgICAgdmFyIG51bWJlcl9zdHIgPSBNYXRoLmFicyhudW1iZXIpW21ldGhvZF0ocHJlY2lzaW9uKTsKICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgdGhlIGRlY2ltYWwgbWFyayBwcm9wZXJseSBieSBzcGxpdHRpbmcgdGhlIG51bWJlciBieSB0aGUKICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGVjaW1hbE1hcmssIGFwcGx5aW5nIHRob3VzYW5kcyBzZXBhcmF0b3IsIGFuZCB0aGVuIHBsYWNpbmcgaXQKICAgICAgICAgICAgICAgICAgICAgIC8vICAgYmFjayBpbi4KICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IG51bWJlcl9zdHIudG9TdHJpbmcoKS5zcGxpdCgnLicpOwogICAgICAgICAgICAgICAgICAgICAgcGFydHNbMF0gPSB0aG91c2FuZFNlcGFyYXRpb24gPyB0aG91c2FuZF9zZXBhcmF0ZShwYXJ0c1swXSkgOiBwYXJ0c1swXTsKICAgICAgICAgICAgICAgICAgICAgIG51bWJlcl9zdHIgPSBwYXJ0cy5qb2luKCQuanFwbG90LnNwcmludGYuZGVjaW1hbE1hcmspOwogICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHByZWZpeCArIG51bWJlcl9zdHI7CiAgICAgICAgICAgICAgICAgICAgICB2YXIganVzdGlmaWVkID0ganVzdGlmeSh2YWx1ZSwgcHJlZml4LCBsZWZ0SnVzdGlmeSwgbWluV2lkdGgsIHplcm9QYWQsIGh0bWxTcGFjZSlbdGV4dFRyYW5zZm9ybV0oKTsKICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1c3RpZmllZDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlICdwJzoKICAgICAgICAgICAgY2FzZSAnUCc6CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBudW1iZXIgaXMgYSBudW1iZXIKICAgICAgICAgICAgICAgIHZhciBudW1iZXIgPSArdmFsdWU7CiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBwcmVmaXggPSBudW1iZXIgPCAwID8gJy0nIDogcG9zaXRpdmVQcmVmaXg7CgogICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gU3RyaW5nKE51bWJlcihNYXRoLmFicyhudW1iZXIpKS50b0V4cG9uZW50aWFsKCkpLnNwbGl0KC9lfEUvKTsKICAgICAgICAgICAgICAgIHZhciBzZCA9IChwYXJ0c1swXS5pbmRleE9mKCcuJykgIT0gLTEpID8gcGFydHNbMF0ubGVuZ3RoIC0gMSA6IFN0cmluZyhudW1iZXIpLmxlbmd0aDsKICAgICAgICAgICAgICAgIHZhciB6ZXJvcyA9IChwYXJ0c1sxXSA8IDApID8gLXBhcnRzWzFdIC0gMSA6IDA7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhudW1iZXIpIDwgMSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzZCArIHplcm9zICA8PSBwcmVjaXNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcmVmaXggKyBNYXRoLmFicyhudW1iZXIpLnRvUHJlY2lzaW9uKHNkKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZCAgPD0gcHJlY2lzaW9uIC0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcmVmaXggKyBNYXRoLmFicyhudW1iZXIpLnRvRXhwb25lbnRpYWwoc2QtMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHByZWZpeCArIE1hdGguYWJzKG51bWJlcikudG9FeHBvbmVudGlhbChwcmVjaXNpb24tMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcHJlYyA9IChzZCA8PSBwcmVjaXNpb24pID8gc2QgOiBwcmVjaXNpb247CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcmVmaXggKyBNYXRoLmFicyhudW1iZXIpLnRvUHJlY2lzaW9uKHByZWMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIHRleHRUcmFuc2Zvcm0gPSBbJ3RvU3RyaW5nJywgJ3RvVXBwZXJDYXNlJ11bJ3BQJy5pbmRleE9mKHR5cGUpICUgMl07CiAgICAgICAgICAgICAgICByZXR1cm4ganVzdGlmeSh2YWx1ZSwgcHJlZml4LCBsZWZ0SnVzdGlmeSwgbWluV2lkdGgsIHplcm9QYWQsIGh0bWxTcGFjZSlbdGV4dFRyYW5zZm9ybV0oKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlICduJzogcmV0dXJuICcnOwogICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gc3Vic3RyaW5nOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9OwoKICAgICQuanFwbG90LnNwcmludGYudGhvdXNhbmRzU2VwYXJhdG9yID0gJywnOwogICAgLy8gU3BlY2lmaWVzIHRoZSBkZWNpbWFsIG1hcmsgZm9yIGZsb2F0aW5nIHBvaW50IHZhbHVlcy4gQnkgZGVmYXVsdCBhIHBlcmlvZCAnLicKICAgIC8vIGlzIHVzZWQuIElmIHlvdSBjaGFuZ2UgdGhpcyB2YWx1ZSB0byBmb3IgZXhhbXBsZSBhIGNvbW1hIGJlIHN1cmUgdG8gYWxzbwogICAgLy8gY2hhbmdlIHRoZSB0aG91c2FuZHMgc2VwYXJhdG9yIG9yIGVsc2UgdGhpcyB3b24ndCB3b3JrIHNpbmNlIGEgc2ltcGxlIFN0cmluZwogICAgLy8gcmVwbGFjZSBpcyB1c2VkIChyZXBsYWNpbmcgYWxsIHBlcmlvZHMgd2l0aCB0aGUgbWFyayBzcGVjaWZpZWQgaGVyZSkuCiAgICAkLmpxcGxvdC5zcHJpbnRmLmRlY2ltYWxNYXJrID0gJy4nOwogICAgCiAgICAkLmpxcGxvdC5zcHJpbnRmLnJlZ2V4ID0gLyUlfCUoXGQrXCQpPyhbLSsjMCZcJyBdKikoXCpcZCtcJHxcKnxcZCspPyhcLihcKlxkK1wkfFwqfFxkKykpPyhbbkFzY2JveFh1aWRmZWdwRUdQXSkvZzsKCiAgICAkLmpxcGxvdC5nZXRTaWduaWZpY2FudEZpZ3VyZXMgPSBmdW5jdGlvbihudW1iZXIpIHsKICAgICAgICB2YXIgcGFydHMgPSBTdHJpbmcoTnVtYmVyKE1hdGguYWJzKG51bWJlcikpLnRvRXhwb25lbnRpYWwoKSkuc3BsaXQoL2V8RS8pOwogICAgICAgIC8vIHRvdGFsIHNpZ25pZmljYW50IGRpZ2l0cwogICAgICAgIHZhciBzZCA9IChwYXJ0c1swXS5pbmRleE9mKCcuJykgIT0gLTEpID8gcGFydHNbMF0ubGVuZ3RoIC0gMSA6IHBhcnRzWzBdLmxlbmd0aDsKICAgICAgICB2YXIgemVyb3MgPSAocGFydHNbMV0gPCAwKSA/IC1wYXJ0c1sxXSAtIDEgOiAwOwogICAgICAgIC8vIGV4cG9uZW50CiAgICAgICAgdmFyIGV4cG4gPSBwYXJzZUludChwYXJ0c1sxXSwgMTApOwogICAgICAgIC8vIGRpZ2l0cyB0byB0aGUgbGVmdCBvZiB0aGUgZGVjaW1hbCBwbGFjZQogICAgICAgIHZhciBkbGVmdCA9IChleHBuICsgMSA+IDApID8gZXhwbiArIDEgOiAwOwogICAgICAgIC8vIGRpZ2l0cyB0byB0aGUgcmlnaHQgb2YgdGhlIGRlY2ltYWwgcGxhY2UKICAgICAgICB2YXIgZHJpZ2h0ID0gKHNkIDw9IGRsZWZ0KSA/IDAgOiBzZCAtIGV4cG4gLSAxOwogICAgICAgIHJldHVybiB7c2lnbmlmaWNhbnREaWdpdHM6IHNkLCBkaWdpdHNMZWZ0OiBkbGVmdCwgZGlnaXRzUmlnaHQ6IGRyaWdodCwgemVyb3M6IHplcm9zLCBleHBvbmVudDogZXhwbn0gOwogICAgfTsKCiAgICAkLmpxcGxvdC5nZXRQcmVjaXNpb24gPSBmdW5jdGlvbihudW1iZXIpIHsKICAgICAgICByZXR1cm4gJC5qcXBsb3QuZ2V0U2lnbmlmaWNhbnRGaWd1cmVzKG51bWJlcikuZGlnaXRzUmlnaHQ7CiAgICB9OwoKICAKCgogICAgdmFyIGJhY2tDb21wYXQgPSAkLnVpQmFja0NvbXBhdCAhPT0gZmFsc2U7CgogICAgJC5qcXBsb3QuZWZmZWN0cyA9IHsKICAgICAgICBlZmZlY3Q6IHt9CiAgICB9OwoKICAgIC8vIHByZWZpeCB1c2VkIGZvciBzdG9yaW5nIGRhdGEgb24gLmRhdGEoKQogICAgdmFyIGRhdGFTcGFjZSA9ICJqcXBsb3Quc3RvcmFnZS4iOwoKICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRUZGRUNUUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICAkLmV4dGVuZCggJC5qcXBsb3QuZWZmZWN0cywgewogICAgICAgIHZlcnNpb246ICIxLjlwcmUiLAoKICAgICAgICAvLyBTYXZlcyBhIHNldCBvZiBwcm9wZXJ0aWVzIGluIGEgZGF0YSBzdG9yYWdlCiAgICAgICAgc2F2ZTogZnVuY3Rpb24oIGVsZW1lbnQsIHNldCApIHsKICAgICAgICAgICAgZm9yKCB2YXIgaT0wOyBpIDwgc2V0Lmxlbmd0aDsgaSsrICkgewogICAgICAgICAgICAgICAgaWYgKCBzZXRbIGkgXSAhPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRhdGEoIGRhdGFTcGFjZSArIHNldFsgaSBdLCBlbGVtZW50WyAwIF0uc3R5bGVbIHNldFsgaSBdIF0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIFJlc3RvcmVzIGEgc2V0IG9mIHByZXZpb3VzbHkgc2F2ZWQgcHJvcGVydGllcyBmcm9tIGEgZGF0YSBzdG9yYWdlCiAgICAgICAgcmVzdG9yZTogZnVuY3Rpb24oIGVsZW1lbnQsIHNldCApIHsKICAgICAgICAgICAgZm9yKCB2YXIgaT0wOyBpIDwgc2V0Lmxlbmd0aDsgaSsrICkgewogICAgICAgICAgICAgICAgaWYgKCBzZXRbIGkgXSAhPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNzcyggc2V0WyBpIF0sIGVsZW1lbnQuZGF0YSggZGF0YVNwYWNlICsgc2V0WyBpIF0gKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgc2V0TW9kZTogZnVuY3Rpb24oIGVsLCBtb2RlICkgewogICAgICAgICAgICBpZiAobW9kZSA9PT0gInRvZ2dsZSIpIHsKICAgICAgICAgICAgICAgIG1vZGUgPSBlbC5pcyggIjpoaWRkZW4iICkgPyAic2hvdyIgOiAiaGlkZSI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG1vZGU7CiAgICAgICAgfSwKCiAgICAgICAgLy8gV3JhcHMgdGhlIGVsZW1lbnQgYXJvdW5kIGEgd3JhcHBlciB0aGF0IGNvcGllcyBwb3NpdGlvbiBwcm9wZXJ0aWVzCiAgICAgICAgY3JlYXRlV3JhcHBlcjogZnVuY3Rpb24oIGVsZW1lbnQgKSB7CgogICAgICAgICAgICAvLyBpZiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IHdyYXBwZWQsIHJldHVybiBpdAogICAgICAgICAgICBpZiAoIGVsZW1lbnQucGFyZW50KCkuaXMoICIudWktZWZmZWN0cy13cmFwcGVyIiApKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5wYXJlbnQoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gd3JhcCB0aGUgZWxlbWVudAogICAgICAgICAgICB2YXIgcHJvcHMgPSB7CiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGVsZW1lbnQub3V0ZXJXaWR0aCh0cnVlKSwKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGVsZW1lbnQub3V0ZXJIZWlnaHQodHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgImZsb2F0IjogZWxlbWVudC5jc3MoICJmbG9hdCIgKQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHdyYXBwZXIgPSAkKCAiPGRpdj48L2Rpdj4iICkKICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoICJ1aS1lZmZlY3RzLXdyYXBwZXIiICkKICAgICAgICAgICAgICAgICAgICAuY3NzKHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICIxMDAlIiwKICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogInRyYW5zcGFyZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCwKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMAogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHNpemUgaW4gY2FzZSB3aWR0aC9oZWlnaHQgYXJlIGRlZmluZWQgaW4gJSAtIEZpeGVzICM1MjQ1CiAgICAgICAgICAgICAgICBzaXplID0gewogICAgICAgICAgICAgICAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodCgpCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgYWN0aXZlID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKCiAgICAgICAgICAgIGVsZW1lbnQud3JhcCggd3JhcHBlciApOwoKICAgICAgICAgICAgLy8gRml4ZXMgIzc1OTUgLSBFbGVtZW50cyBsb3NlIGZvY3VzIHdoZW4gd3JhcHBlZC4KICAgICAgICAgICAgaWYgKCBlbGVtZW50WyAwIF0gPT09IGFjdGl2ZSB8fCAkLmNvbnRhaW5zKCBlbGVtZW50WyAwIF0sIGFjdGl2ZSApICkgewogICAgICAgICAgICAgICAgJCggYWN0aXZlICkuZm9jdXMoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgd3JhcHBlciA9IGVsZW1lbnQucGFyZW50KCk7IC8vSG90Zml4IGZvciBqUXVlcnkgMS40IHNpbmNlIHNvbWUgY2hhbmdlIGluIHdyYXAoKSBzZWVtcyB0byBhY3R1YWxseSBsb29zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSB3cmFwcGVkIGVsZW1lbnQKCiAgICAgICAgICAgIC8vIHRyYW5zZmVyIHBvc2l0aW9uaW5nIHByb3BlcnRpZXMgdG8gdGhlIHdyYXBwZXIKICAgICAgICAgICAgaWYgKCBlbGVtZW50LmNzcyggInBvc2l0aW9uIiApID09PSAic3RhdGljIiApIHsKICAgICAgICAgICAgICAgIHdyYXBwZXIuY3NzKHsgcG9zaXRpb246ICJyZWxhdGl2ZSIgfSk7CiAgICAgICAgICAgICAgICBlbGVtZW50LmNzcyh7IHBvc2l0aW9uOiAicmVsYXRpdmUiIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJC5leHRlbmQoIHByb3BzLCB7CiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGVsZW1lbnQuY3NzKCAicG9zaXRpb24iICksCiAgICAgICAgICAgICAgICAgICAgekluZGV4OiBlbGVtZW50LmNzcyggInotaW5kZXgiICkKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgJC5lYWNoKFsgInRvcCIsICJsZWZ0IiwgImJvdHRvbSIsICJyaWdodCIgXSwgZnVuY3Rpb24oaSwgcG9zKSB7CiAgICAgICAgICAgICAgICAgICAgcHJvcHNbIHBvcyBdID0gZWxlbWVudC5jc3MoIHBvcyApOwogICAgICAgICAgICAgICAgICAgIGlmICggaXNOYU4oIHBhcnNlSW50KCBwcm9wc1sgcG9zIF0sIDEwICkgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHNbIHBvcyBdID0gImF1dG8iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgZWxlbWVudC5jc3MoewogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAicmVsYXRpdmUiLAogICAgICAgICAgICAgICAgICAgIHRvcDogMCwKICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLAogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZW1lbnQuY3NzKHNpemUpOwoKICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIuY3NzKCBwcm9wcyApLnNob3coKTsKICAgICAgICB9LAoKICAgICAgICByZW1vdmVXcmFwcGVyOiBmdW5jdGlvbiggZWxlbWVudCApIHsKICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7CgogICAgICAgICAgICBpZiAoIGVsZW1lbnQucGFyZW50KCkuaXMoICIudWktZWZmZWN0cy13cmFwcGVyIiApICkgewogICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQoKS5yZXBsYWNlV2l0aCggZWxlbWVudCApOwoKICAgICAgICAgICAgICAgIC8vIEZpeGVzICM3NTk1IC0gRWxlbWVudHMgbG9zZSBmb2N1cyB3aGVuIHdyYXBwZWQuCiAgICAgICAgICAgICAgICBpZiAoIGVsZW1lbnRbIDAgXSA9PT0gYWN0aXZlIHx8ICQuY29udGFpbnMoIGVsZW1lbnRbIDAgXSwgYWN0aXZlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJCggYWN0aXZlICkuZm9jdXMoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgIH0KICAgIH0pOwoKICAgIC8vIHJldHVybiBhbiBlZmZlY3Qgb3B0aW9ucyBvYmplY3QgZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzOgogICAgZnVuY3Rpb24gX25vcm1hbGl6ZUFyZ3VtZW50cyggZWZmZWN0LCBvcHRpb25zLCBzcGVlZCwgY2FsbGJhY2sgKSB7CgogICAgICAgIC8vIHNob3J0IHBhdGggZm9yIHBhc3NpbmcgYW4gZWZmZWN0IG9wdGlvbnMgb2JqZWN0OgogICAgICAgIGlmICggJC5pc1BsYWluT2JqZWN0KCBlZmZlY3QgKSApIHsKICAgICAgICAgICAgcmV0dXJuIGVmZmVjdDsKICAgICAgICB9CgogICAgICAgIC8vIGNvbnZlcnQgdG8gYW4gb2JqZWN0CiAgICAgICAgZWZmZWN0ID0geyBlZmZlY3Q6IGVmZmVjdCB9OwoKICAgICAgICAvLyBjYXRjaCAoZWZmZWN0KQogICAgICAgIGlmICggb3B0aW9ucyA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICBvcHRpb25zID0ge307CiAgICAgICAgfQoKICAgICAgICAvLyBjYXRjaCAoZWZmZWN0LCBjYWxsYmFjaykKICAgICAgICBpZiAoICQuaXNGdW5jdGlvbiggb3B0aW9ucyApICkgewogICAgICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7CiAgICAgICAgICAgIHNwZWVkID0gbnVsbDsKICAgICAgICAgICAgb3B0aW9ucyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgLy8gY2F0Y2ggKGVmZmVjdCwgc3BlZWQsID8pCiAgICAgICAgaWYgKCAkLnR5cGUoIG9wdGlvbnMgKSA9PT0gIm51bWJlciIgfHwgJC5meC5zcGVlZHNbIG9wdGlvbnMgXSkgewogICAgICAgICAgICBjYWxsYmFjayA9IHNwZWVkOwogICAgICAgICAgICBzcGVlZCA9IG9wdGlvbnM7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTsKICAgICAgICB9CgogICAgICAgIC8vIGNhdGNoIChlZmZlY3QsIG9wdGlvbnMsIGNhbGxiYWNrKQogICAgICAgIGlmICggJC5pc0Z1bmN0aW9uKCBzcGVlZCApICkgewogICAgICAgICAgICBjYWxsYmFjayA9IHNwZWVkOwogICAgICAgICAgICBzcGVlZCA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvLyBhZGQgb3B0aW9ucyB0byBlZmZlY3QKICAgICAgICBpZiAoIG9wdGlvbnMgKSB7CiAgICAgICAgICAgICQuZXh0ZW5kKCBlZmZlY3QsIG9wdGlvbnMgKTsKICAgICAgICB9CgogICAgICAgIHNwZWVkID0gc3BlZWQgfHwgb3B0aW9ucy5kdXJhdGlvbjsKICAgICAgICBlZmZlY3QuZHVyYXRpb24gPSAkLmZ4Lm9mZiA/IDAgOiB0eXBlb2Ygc3BlZWQgPT09ICJudW1iZXIiCiAgICAgICAgICAgID8gc3BlZWQgOiBzcGVlZCBpbiAkLmZ4LnNwZWVkcyA/ICQuZnguc3BlZWRzWyBzcGVlZCBdIDogJC5meC5zcGVlZHMuX2RlZmF1bHQ7CgogICAgICAgIGVmZmVjdC5jb21wbGV0ZSA9IGNhbGxiYWNrIHx8IG9wdGlvbnMuY29tcGxldGU7CgogICAgICAgIHJldHVybiBlZmZlY3Q7CiAgICB9CgogICAgZnVuY3Rpb24gc3RhbmRhcmRTcGVlZCggc3BlZWQgKSB7CiAgICAgICAgLy8gdmFsaWQgc3RhbmRhcmQgc3BlZWRzCiAgICAgICAgaWYgKCAhc3BlZWQgfHwgdHlwZW9mIHNwZWVkID09PSAibnVtYmVyIiB8fCAkLmZ4LnNwZWVkc1sgc3BlZWQgXSApIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBpbnZhbGlkIHN0cmluZ3MgLSB0cmVhdCBhcyAibm9ybWFsIiBzcGVlZAogICAgICAgIGlmICggdHlwZW9mIHNwZWVkID09PSAic3RyaW5nIiAmJiAhJC5qcXBsb3QuZWZmZWN0cy5lZmZlY3RbIHNwZWVkIF0gKSB7CiAgICAgICAgICAgIC8vIFRPRE86IHJlbW92ZSBpbiAyLjAgKCM3MTE1KQogICAgICAgICAgICBpZiAoIGJhY2tDb21wYXQgJiYgJC5qcXBsb3QuZWZmZWN0c1sgc3BlZWQgXSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAkLmZuLmV4dGVuZCh7CiAgICAgICAganFwbG90RWZmZWN0OiBmdW5jdGlvbiggZWZmZWN0LCBvcHRpb25zLCBzcGVlZCwgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgIHZhciBhcmdzID0gX25vcm1hbGl6ZUFyZ3VtZW50cy5hcHBseSggdGhpcywgYXJndW1lbnRzICksCiAgICAgICAgICAgICAgICBtb2RlID0gYXJncy5tb2RlLAogICAgICAgICAgICAgICAgcXVldWUgPSBhcmdzLnF1ZXVlLAogICAgICAgICAgICAgICAgZWZmZWN0TWV0aG9kID0gJC5qcXBsb3QuZWZmZWN0cy5lZmZlY3RbIGFyZ3MuZWZmZWN0IF0sCgogICAgICAgICAgICAgICAgLy8gREVQUkVDQVRFRDogcmVtb3ZlIGluIDIuMCAoIzcxMTUpCiAgICAgICAgICAgICAgICBvbGRFZmZlY3RNZXRob2QgPSAhZWZmZWN0TWV0aG9kICYmIGJhY2tDb21wYXQgJiYgJC5qcXBsb3QuZWZmZWN0c1sgYXJncy5lZmZlY3QgXTsKCiAgICAgICAgICAgIGlmICggJC5meC5vZmYgfHwgISggZWZmZWN0TWV0aG9kIHx8IG9sZEVmZmVjdE1ldGhvZCApICkgewogICAgICAgICAgICAgICAgLy8gZGVsZWdhdGUgdG8gdGhlIG9yaWdpbmFsIG1ldGhvZCAoZS5nLiwgLnNob3coKSkgaWYgcG9zc2libGUKICAgICAgICAgICAgICAgIGlmICggbW9kZSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1sgbW9kZSBdKCBhcmdzLmR1cmF0aW9uLCBhcmdzLmNvbXBsZXRlICk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFyZ3MuY29tcGxldGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbXBsZXRlLmNhbGwoIHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiBydW4oIG5leHQgKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9ICQoIHRoaXMgKSwKICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSA9IGFyZ3MuY29tcGxldGUsCiAgICAgICAgICAgICAgICAgICAgbW9kZSA9IGFyZ3MubW9kZTsKCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb25lKCkgewogICAgICAgICAgICAgICAgICAgIGlmICggJC5pc0Z1bmN0aW9uKCBjb21wbGV0ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZS5jYWxsKCBlbGVtWzBdICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICggJC5pc0Z1bmN0aW9uKCBuZXh0ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgaGlkZGRlbiBhbmQgbW9kZSBpcyBoaWRlLAogICAgICAgICAgICAgICAgLy8gb3IgZWxlbWVudCBpcyB2aXNpYmxlIGFuZCBtb2RlIGlzIHNob3cKICAgICAgICAgICAgICAgIGlmICggZWxlbS5pcyggIjpoaWRkZW4iICkgPyBtb2RlID09PSAiaGlkZSIgOiBtb2RlID09PSAic2hvdyIgKSB7CiAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlZmZlY3RNZXRob2QuY2FsbCggZWxlbVswXSwgYXJncywgZG9uZSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBjaGVjayBpbiAyLjAsIGVmZmVjdE1ldGhvZCB3aWxsIGFsd2F5cyBiZSB0cnVlCiAgICAgICAgICAgIGlmICggZWZmZWN0TWV0aG9kICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlID09PSBmYWxzZSA/IHRoaXMuZWFjaCggcnVuICkgOiB0aGlzLnF1ZXVlKCBxdWV1ZSB8fCAiZngiLCBydW4gKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIERFUFJFQ0FURUQ6IHJlbW92ZSBpbiAyLjAgKCM3MTE1KQogICAgICAgICAgICAgICAgcmV0dXJuIG9sZEVmZmVjdE1ldGhvZC5jYWxsKHRoaXMsIHsKICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBhcmdzLAogICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBhcmdzLmR1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBhcmdzLmNvbXBsZXRlLAogICAgICAgICAgICAgICAgICAgIG1vZGU6IGFyZ3MubW9kZQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCgoKCiAgICB2YXIgcnZlcnRpY2FsID0gL3VwfGRvd258dmVydGljYWwvLAogICAgICAgIHJwb3NpdGl2ZW1vdGlvbiA9IC91cHxsZWZ0fHZlcnRpY2FsfGhvcml6b250YWwvOwoKICAgICQuanFwbG90LmVmZmVjdHMuZWZmZWN0LmJsaW5kID0gZnVuY3Rpb24oIG8sIGRvbmUgKSB7CiAgICAgICAgLy8gQ3JlYXRlIGVsZW1lbnQKICAgICAgICB2YXIgZWwgPSAkKCB0aGlzICksCiAgICAgICAgICAgIHByb3BzID0gWyAicG9zaXRpb24iLCAidG9wIiwgImJvdHRvbSIsICJsZWZ0IiwgInJpZ2h0IiwgImhlaWdodCIsICJ3aWR0aCIgXSwKICAgICAgICAgICAgbW9kZSA9ICQuanFwbG90LmVmZmVjdHMuc2V0TW9kZSggZWwsIG8ubW9kZSB8fCAiaGlkZSIgKSwKICAgICAgICAgICAgZGlyZWN0aW9uID0gby5kaXJlY3Rpb24gfHwgInVwIiwKICAgICAgICAgICAgdmVydGljYWwgPSBydmVydGljYWwudGVzdCggZGlyZWN0aW9uICksCiAgICAgICAgICAgIHJlZiA9IHZlcnRpY2FsID8gImhlaWdodCIgOiAid2lkdGgiLAogICAgICAgICAgICByZWYyID0gdmVydGljYWwgPyAidG9wIiA6ICJsZWZ0IiwKICAgICAgICAgICAgbW90aW9uID0gcnBvc2l0aXZlbW90aW9uLnRlc3QoIGRpcmVjdGlvbiApLAogICAgICAgICAgICBhbmltYXRpb24gPSB7fSwKICAgICAgICAgICAgc2hvdyA9IG1vZGUgPT09ICJzaG93IiwKICAgICAgICAgICAgd3JhcHBlciwgZGlzdGFuY2UsIHRvcDsKCiAgICAgICAgLy8gLy8gaWYgYWxyZWFkeSB3cmFwcGVkLCB0aGUgd3JhcHBlcidzIHByb3BlcnRpZXMgYXJlIG15IHByb3BlcnR5LiAjNjI0NQogICAgICAgIGlmICggZWwucGFyZW50KCkuaXMoICIudWktZWZmZWN0cy13cmFwcGVyIiApICkgewogICAgICAgICAgICAkLmpxcGxvdC5lZmZlY3RzLnNhdmUoIGVsLnBhcmVudCgpLCBwcm9wcyApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICQuanFwbG90LmVmZmVjdHMuc2F2ZSggZWwsIHByb3BzICk7CiAgICAgICAgfQogICAgICAgIGVsLnNob3coKTsKICAgICAgICB0b3AgPSBwYXJzZUludChlbC5jc3MoJ3RvcCcpLCAxMCk7CiAgICAgICAgd3JhcHBlciA9ICQuanFwbG90LmVmZmVjdHMuY3JlYXRlV3JhcHBlciggZWwgKS5jc3MoewogICAgICAgICAgICBvdmVyZmxvdzogImhpZGRlbiIKICAgICAgICB9KTsKCiAgICAgICAgZGlzdGFuY2UgPSB2ZXJ0aWNhbCA/IHdyYXBwZXJbIHJlZiBdKCkgKyB0b3AgOiB3cmFwcGVyWyByZWYgXSgpOwoKICAgICAgICBhbmltYXRpb25bIHJlZiBdID0gc2hvdyA/IFN0cmluZyhkaXN0YW5jZSkgOiAnMCc7CiAgICAgICAgaWYgKCAhbW90aW9uICkgewogICAgICAgICAgICBlbAogICAgICAgICAgICAgICAgLmNzcyggdmVydGljYWwgPyAiYm90dG9tIiA6ICJyaWdodCIsIDAgKQogICAgICAgICAgICAgICAgLmNzcyggdmVydGljYWwgPyAidG9wIiA6ICJsZWZ0IiwgIiIgKQogICAgICAgICAgICAgICAgLmNzcyh7IHBvc2l0aW9uOiAiYWJzb2x1dGUiIH0pOwogICAgICAgICAgICBhbmltYXRpb25bIHJlZjIgXSA9IHNob3cgPyAnMCcgOiBTdHJpbmcoZGlzdGFuY2UpOwogICAgICAgIH0KCiAgICAgICAgLy8gLy8gc3RhcnQgYXQgMCBpZiB3ZSBhcmUgc2hvd2luZwogICAgICAgIGlmICggc2hvdyApIHsKICAgICAgICAgICAgd3JhcHBlci5jc3MoIHJlZiwgMCApOwogICAgICAgICAgICBpZiAoICEgbW90aW9uICkgewogICAgICAgICAgICAgICAgd3JhcHBlci5jc3MoIHJlZjIsIGRpc3RhbmNlICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIC8vIEFuaW1hdGUKICAgICAgICB3cmFwcGVyLmFuaW1hdGUoIGFuaW1hdGlvbiwgewogICAgICAgICAgICBkdXJhdGlvbjogby5kdXJhdGlvbiwKICAgICAgICAgICAgZWFzaW5nOiBvLmVhc2luZywKICAgICAgICAgICAgcXVldWU6IGZhbHNlLAogICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoIG1vZGUgPT09ICJoaWRlIiApIHsKICAgICAgICAgICAgICAgICAgICBlbC5oaWRlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkLmpxcGxvdC5lZmZlY3RzLnJlc3RvcmUoIGVsLCBwcm9wcyApOwogICAgICAgICAgICAgICAgJC5qcXBsb3QuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKCBlbCApOwogICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgfTsKCn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/jqplot/jquery.jqplot.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmpxcGxvdC10YXJnZXR7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6IzY2Njtmb250LWZhbWlseToiVHJlYnVjaGV0IE1TIixBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250LXNpemU6MWVtfS5qcXBsb3QtYXhpc3tmb250LXNpemU6Ljc1ZW19LmpxcGxvdC14YXhpc3ttYXJnaW4tdG9wOjEwcHh9LmpxcGxvdC14MmF4aXN7bWFyZ2luLWJvdHRvbToxMHB4fS5qcXBsb3QteWF4aXN7bWFyZ2luLXJpZ2h0OjEwcHh9LmpxcGxvdC15MmF4aXMsLmpxcGxvdC15M2F4aXMsLmpxcGxvdC15NGF4aXMsLmpxcGxvdC15NWF4aXMsLmpxcGxvdC15NmF4aXMsLmpxcGxvdC15N2F4aXMsLmpxcGxvdC15OGF4aXMsLmpxcGxvdC15OWF4aXMsLmpxcGxvdC15TWlkQXhpc3ttYXJnaW4tbGVmdDoxMHB4O21hcmdpbi1yaWdodDoxMHB4fS5qcXBsb3QtYXhpcy10aWNrLC5qcXBsb3QteGF4aXMtdGljaywuanFwbG90LXlheGlzLXRpY2ssLmpxcGxvdC14MmF4aXMtdGljaywuanFwbG90LXkyYXhpcy10aWNrLC5qcXBsb3QteTNheGlzLXRpY2ssLmpxcGxvdC15NGF4aXMtdGljaywuanFwbG90LXk1YXhpcy10aWNrLC5qcXBsb3QteTZheGlzLXRpY2ssLmpxcGxvdC15N2F4aXMtdGljaywuanFwbG90LXk4YXhpcy10aWNrLC5qcXBsb3QteTlheGlzLXRpY2ssLmpxcGxvdC15TWlkQXhpcy10aWNre3Bvc2l0aW9uOmFic29sdXRlO3doaXRlLXNwYWNlOnByZX0uanFwbG90LXhheGlzLXRpY2t7dG9wOjA7bGVmdDoxNXB4O3ZlcnRpY2FsLWFsaWduOnRvcH0uanFwbG90LXgyYXhpcy10aWNre2JvdHRvbTowO2xlZnQ6MTVweDt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmpxcGxvdC15YXhpcy10aWNre3JpZ2h0OjA7dG9wOjE1cHg7dGV4dC1hbGlnbjpyaWdodH0uanFwbG90LXlheGlzLXRpY2suanFwbG90LWJyZWFrVGlja3tyaWdodDotMjBweDttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nOjFweCA1cHggMXB4IDVweDt6LWluZGV4OjI7Zm9udC1zaXplOjEuNWVtfS5qcXBsb3QteTJheGlzLXRpY2ssLmpxcGxvdC15M2F4aXMtdGljaywuanFwbG90LXk0YXhpcy10aWNrLC5qcXBsb3QteTVheGlzLXRpY2ssLmpxcGxvdC15NmF4aXMtdGljaywuanFwbG90LXk3YXhpcy10aWNrLC5qcXBsb3QteThheGlzLXRpY2ssLmpxcGxvdC15OWF4aXMtdGlja3tsZWZ0OjA7dG9wOjE1cHg7dGV4dC1hbGlnbjpsZWZ0fS5qcXBsb3QteU1pZEF4aXMtdGlja3t0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmpxcGxvdC14YXhpcy1sYWJlbHttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjExcHQ7cG9zaXRpb246YWJzb2x1dGV9LmpxcGxvdC14MmF4aXMtbGFiZWx7bWFyZ2luLWJvdHRvbToxMHB4O2ZvbnQtc2l6ZToxMXB0O3Bvc2l0aW9uOmFic29sdXRlfS5qcXBsb3QteWF4aXMtbGFiZWx7bWFyZ2luLXJpZ2h0OjEwcHg7Zm9udC1zaXplOjExcHQ7cG9zaXRpb246YWJzb2x1dGV9LmpxcGxvdC15TWlkQXhpcy1sYWJlbHtmb250LXNpemU6MTFwdDtwb3NpdGlvbjphYnNvbHV0ZX0uanFwbG90LXkyYXhpcy1sYWJlbCwuanFwbG90LXkzYXhpcy1sYWJlbCwuanFwbG90LXk0YXhpcy1sYWJlbCwuanFwbG90LXk1YXhpcy1sYWJlbCwuanFwbG90LXk2YXhpcy1sYWJlbCwuanFwbG90LXk3YXhpcy1sYWJlbCwuanFwbG90LXk4YXhpcy1sYWJlbCwuanFwbG90LXk5YXhpcy1sYWJlbHtmb250LXNpemU6MTFwdDttYXJnaW4tbGVmdDoxMHB4O3Bvc2l0aW9uOmFic29sdXRlfS5qcXBsb3QtbWV0ZXJHYXVnZS10aWNre2ZvbnQtc2l6ZTouNzVlbTtjb2xvcjojOTk5fS5qcXBsb3QtbWV0ZXJHYXVnZS1sYWJlbHtmb250LXNpemU6MWVtO2NvbG9yOiM5OTl9dGFibGUuanFwbG90LXRhYmxlLWxlZ2VuZHttYXJnaW4tdG9wOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4O21hcmdpbi1sZWZ0OjEycHg7bWFyZ2luLXJpZ2h0OjEycHh9dGFibGUuanFwbG90LXRhYmxlLWxlZ2VuZCx0YWJsZS5qcXBsb3QtY3Vyc29yLWxlZ2VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMC42KTtib3JkZXI6MXB4IHNvbGlkICNjY2M7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOi43NWVtfXRkLmpxcGxvdC10YWJsZS1sZWdlbmR7dmVydGljYWwtYWxpZ246bWlkZGxlfXRkLmpxcGxvdC1zZXJpZXNUb2dnbGU6aG92ZXIsdGQuanFwbG90LXNlcmllc1RvZ2dsZTphY3RpdmV7Y3Vyc29yOnBvaW50ZXJ9LmpxcGxvdC10YWJsZS1sZWdlbmQgLmpxcGxvdC1zZXJpZXMtaGlkZGVue3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9ZGl2LmpxcGxvdC10YWJsZS1sZWdlbmQtc3dhdGNoLW91dGxpbmV7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6MXB4fWRpdi5qcXBsb3QtdGFibGUtbGVnZW5kLXN3YXRjaHt3aWR0aDowO2hlaWdodDowO2JvcmRlci10b3Atd2lkdGg6NXB4O2JvcmRlci1ib3R0b20td2lkdGg6NXB4O2JvcmRlci1sZWZ0LXdpZHRoOjZweDtib3JkZXItcmlnaHQtd2lkdGg6NnB4O2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItbGVmdC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtc3R5bGU6c29saWR9LmpxcGxvdC10aXRsZXt0b3A6MDtsZWZ0OjA7cGFkZGluZy1ib3R0b206LjVlbTtmb250LXNpemU6MS4yZW19dGFibGUuanFwbG90LWN1cnNvci10b29sdGlwe2JvcmRlcjoxcHggc29saWQgI2NjYztmb250LXNpemU6Ljc1ZW19LmpxcGxvdC1jdXJzb3ItdG9vbHRpcHtib3JkZXI6MXB4IHNvbGlkICNjY2M7Zm9udC1zaXplOi43NWVtO3doaXRlLXNwYWNlOm5vd3JhcDtiYWNrZ3JvdW5kOnJnYmEoMjA4LDIwOCwyMDgsMC41KTtwYWRkaW5nOjFweH0uanFwbG90LWhpZ2hsaWdodGVyLXRvb2x0aXAsLmpxcGxvdC1jYW52YXNPdmVybGF5LXRvb2x0aXB7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2ZvbnQtc2l6ZTouNzVlbTt3aGl0ZS1zcGFjZTpub3dyYXA7YmFja2dyb3VuZDpyZ2JhKDIwOCwyMDgsMjA4LDAuNSk7cGFkZGluZzoxcHh9LmpxcGxvdC1wb2ludC1sYWJlbHtmb250LXNpemU6Ljc1ZW07ei1pbmRleDoyfXRkLmpxcGxvdC1jdXJzb3ItbGVnZW5kLXN3YXRjaHt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dGV4dC1hbGlnbjpjZW50ZXJ9ZGl2LmpxcGxvdC1jdXJzb3ItbGVnZW5kLXN3YXRjaHt3aWR0aDoxLjJlbTtoZWlnaHQ6LjdlbX0uanFwbG90LWVycm9ye3RleHQtYWxpZ246Y2VudGVyfS5qcXBsb3QtZXJyb3ItbWVzc2FnZXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6NDYlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfWRpdi5qcXBsb3QtYnViYmxlLWxhYmVse2ZvbnQtc2l6ZTouOGVtO3BhZGRpbmctbGVmdDoycHg7cGFkZGluZy1yaWdodDoycHg7Y29sb3I6cmdiKDIwJSwyMCUsMjAlKX1kaXYuanFwbG90LWJ1YmJsZS1sYWJlbC5qcXBsb3QtYnViYmxlLWxhYmVsLWhpZ2hsaWdodHtiYWNrZ3JvdW5kOnJnYmEoOTAlLDkwJSw5MCUsMC43KX1kaXYuanFwbG90LW5vRGF0YS1jb250YWluZXJ7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk2JSw5NiUsOTYlLDAuMyl9]]></data>
	</file>
	<file>
	  <filename>/jqplot/jquery.jqplot.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tDQogICBqc0RhdGUgfCAoYykgMjAxMC0yMDEzIENocmlzIExlb25lbGxvDQogKi8oZnVuY3Rpb24oTCl7dmFyIHU7TC5mbi5lbXB0eUZvcmNlPWZ1bmN0aW9uKCl7Zm9yKHZhciBhaD0wLGFpOyhhaT1MKHRoaXMpW2FoXSkhPW51bGw7YWgrKyl7aWYoYWkubm9kZVR5cGU9PT0xKXtMLmNsZWFuRGF0YShhaS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKX1pZihMLmpxcGxvdC51c2VfZXhjYW52YXMpe2FpLm91dGVySFRNTD0iIn1lbHNle3doaWxlKGFpLmZpcnN0Q2hpbGQpe2FpLnJlbW92ZUNoaWxkKGFpLmZpcnN0Q2hpbGQpfX1haT1udWxsfXJldHVybiBMKHRoaXMpfTtMLmZuLnJlbW92ZUNoaWxkRm9yY2U9ZnVuY3Rpb24oYWgpe3doaWxlKGFoLmZpcnN0Q2hpbGQpe3RoaXMucmVtb3ZlQ2hpbGRGb3JjZShhaC5maXJzdENoaWxkKTthaC5yZW1vdmVDaGlsZChhaC5maXJzdENoaWxkKX19O0wuZm4uanFwbG90PWZ1bmN0aW9uKCl7dmFyIGFoPVtdO3ZhciBhaj1bXTtmb3IodmFyIGFrPTAsYWk9YXJndW1lbnRzLmxlbmd0aDthazxhaTthaysrKXtpZihMLmlzQXJyYXkoYXJndW1lbnRzW2FrXSkpe2FoLnB1c2goYXJndW1lbnRzW2FrXSl9ZWxzZXtpZihMLmlzUGxhaW5PYmplY3QoYXJndW1lbnRzW2FrXSkpe2FqLnB1c2goYXJndW1lbnRzW2FrXSl9fX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGFuKXt2YXIgYXQsYXIsYXE9TCh0aGlzKSxhbT1haC5sZW5ndGgsYWw9YWoubGVuZ3RoLGFwLGFvO2lmKGFuPGFtKXthcD1haFthbl19ZWxzZXthcD1hbT9haFthbS0xXTpudWxsfWlmKGFuPGFsKXthbz1halthbl19ZWxzZXthbz1hbD9halthbC0xXTpudWxsfWF0PWFxLmF0dHIoImlkIik7aWYoYXQ9PT11KXthdD0ianFwbG90X3RhcmdldF8iK0wuanFwbG90LnRhcmdldENvdW50ZXIrKzthcS5hdHRyKCJpZCIsYXQpfWFyPUwuanFwbG90KGF0LGFwLGFvKTthcS5kYXRhKCJqcXBsb3QiLGFyKX0pfTtMLmpxcGxvdD1mdW5jdGlvbihhbixhayxhaSl7dmFyIGFqPW51bGwsYWg9bnVsbDtpZihhcmd1bWVudHMubGVuZ3RoPT09Myl7YWo9YWs7YWg9YWl9ZWxzZXtpZihhcmd1bWVudHMubGVuZ3RoPT09Mil7aWYoTC5pc0FycmF5KGFrKSl7YWo9YWt9ZWxzZXtpZihMLmlzUGxhaW5PYmplY3QoYWspKXthaD1ha319fX1pZihhaj09PW51bGwmJmFoIT09bnVsbCYmYWguZGF0YSl7YWo9YWguZGF0YX12YXIgYW09bmV3IFIoKTtMKCIjIithbikucmVtb3ZlQ2xhc3MoImpxcGxvdC1lcnJvciIpO2lmKEwuanFwbG90LmNvbmZpZy5jYXRjaEVycm9ycyl7dHJ5e2FtLmluaXQoYW4sYWosYWgpO2FtLmRyYXcoKTthbS50aGVtZUVuZ2luZS5pbml0LmNhbGwoYW0pO3JldHVybiBhbX1jYXRjaChhbCl7dmFyIGFvPUwuanFwbG90LmNvbmZpZy5lcnJvck1lc3NhZ2V8fGFsLm1lc3NhZ2U7TCgiIyIrYW4pLmFwcGVuZCgnPGRpdiBjbGFzcz0ianFwbG90LWVycm9yLW1lc3NhZ2UiPicrYW8rIjwvZGl2PiIpO0woIiMiK2FuKS5hZGRDbGFzcygianFwbG90LWVycm9yIik7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYW4pLnN0eWxlLmJhY2tncm91bmQ9TC5qcXBsb3QuY29uZmlnLmVycm9yQmFja2dyb3VuZDtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhbikuc3R5bGUuYm9yZGVyPUwuanFwbG90LmNvbmZpZy5lcnJvckJvcmRlcjtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhbikuc3R5bGUuZm9udEZhbWlseT1MLmpxcGxvdC5jb25maWcuZXJyb3JGb250RmFtaWx5O2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFuKS5zdHlsZS5mb250U2l6ZT1MLmpxcGxvdC5jb25maWcuZXJyb3JGb250U2l6ZTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhbikuc3R5bGUuZm9udFN0eWxlPUwuanFwbG90LmNvbmZpZy5lcnJvckZvbnRTdHlsZTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhbikuc3R5bGUuZm9udFdlaWdodD1MLmpxcGxvdC5jb25maWcuZXJyb3JGb250V2VpZ2h0fX1lbHNle2FtLmluaXQoYW4sYWosYWgpO2FtLmRyYXcoKTthbS50aGVtZUVuZ2luZS5pbml0LmNhbGwoYW0pO3JldHVybiBhbX19O0wuanFwbG90LnZlcnNpb249IjEuMC44IjtMLmpxcGxvdC5yZXZpc2lvbj0iMTI1MCI7TC5qcXBsb3QudGFyZ2V0Q291bnRlcj0xO0wuanFwbG90LkNhbnZhc01hbmFnZXI9ZnVuY3Rpb24oKXtpZih0eXBlb2YgTC5qcXBsb3QuQ2FudmFzTWFuYWdlci5jYW52YXNlcz09InVuZGVmaW5lZCIpe0wuanFwbG90LkNhbnZhc01hbmFnZXIuY2FudmFzZXM9W107TC5qcXBsb3QuQ2FudmFzTWFuYWdlci5mcmVlPVtdfXZhciBhaD1bXTt0aGlzLmdldENhbnZhcz1mdW5jdGlvbigpe3ZhciBhazt2YXIgYWo9dHJ1ZTtpZighTC5qcXBsb3QudXNlX2V4Y2FudmFzKXtmb3IodmFyIGFsPTAsYWk9TC5qcXBsb3QuQ2FudmFzTWFuYWdlci5jYW52YXNlcy5sZW5ndGg7YWw8YWk7YWwrKyl7aWYoTC5qcXBsb3QuQ2FudmFzTWFuYWdlci5mcmVlW2FsXT09PXRydWUpe2FqPWZhbHNlO2FrPUwuanFwbG90LkNhbnZhc01hbmFnZXIuY2FudmFzZXNbYWxdO0wuanFwbG90LkNhbnZhc01hbmFnZXIuZnJlZVthbF09ZmFsc2U7YWgucHVzaChhbCk7YnJlYWt9fX1pZihhail7YWs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7YWgucHVzaChMLmpxcGxvdC5DYW52YXNNYW5hZ2VyLmNhbnZhc2VzLmxlbmd0aCk7TC5qcXBsb3QuQ2FudmFzTWFuYWdlci5jYW52YXNlcy5wdXNoKGFrKTtMLmpxcGxvdC5DYW52YXNNYW5hZ2VyLmZyZWUucHVzaChmYWxzZSl9cmV0dXJuIGFrfTt0aGlzLmluaXRDYW52YXM9ZnVuY3Rpb24oYWkpe2lmKEwuanFwbG90LnVzZV9leGNhbnZhcyl7cmV0dXJuIHdpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIuaW5pdEVsZW1lbnQoYWkpfXJldHVybiBhaX07dGhpcy5mcmVlQWxsQ2FudmFzZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGFqPTAsYWk9YWgubGVuZ3RoO2FqPGFpO2FqKyspe3RoaXMuZnJlZUNhbnZhcyhhaFthal0pfWFoPVtdfTt0aGlzLmZyZWVDYW52YXM9ZnVuY3Rpb24oYWkpe2lmKEwuanFwbG90LnVzZV9leGNhbnZhcyYmd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50IT09dSl7d2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50KEwuanFwbG90LkNhbnZhc01hbmFnZXIuY2FudmFzZXNbYWldKTtMLmpxcGxvdC5DYW52YXNNYW5hZ2VyLmNhbnZhc2VzW2FpXT1udWxsfWVsc2V7dmFyIGFqPUwuanFwbG90LkNhbnZhc01hbmFnZXIuY2FudmFzZXNbYWldO2FqLmdldENvbnRleHQoIjJkIikuY2xlYXJSZWN0KDAsMCxhai53aWR0aCxhai5oZWlnaHQpO0woYWopLnVuYmluZCgpLnJlbW92ZUF0dHIoImNsYXNzIikucmVtb3ZlQXR0cigic3R5bGUiKTtMKGFqKS5jc3Moe2xlZnQ6IiIsdG9wOiIiLHBvc2l0aW9uOiIifSk7YWoud2lkdGg9MDthai5oZWlnaHQ9MDtMLmpxcGxvdC5DYW52YXNNYW5hZ2VyLmZyZWVbYWldPXRydWV9fX07TC5qcXBsb3QubG9nPWZ1bmN0aW9uKCl7aWYod2luZG93LmNvbnNvbGUpe3dpbmRvdy5jb25zb2xlLmxvZy5hcHBseSh3aW5kb3cuY29uc29sZSxhcmd1bWVudHMpfX07TC5qcXBsb3QuY29uZmlnPXthZGREb21SZWZlcmVuY2U6ZmFsc2UsZW5hYmxlUGx1Z2luczpmYWxzZSxkZWZhdWx0SGVpZ2h0OjMwMCxkZWZhdWx0V2lkdGg6NDAwLFVUQ0FkanVzdDpmYWxzZSx0aW1lem9uZU9mZnNldDpuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqNjAwMDApLGVycm9yTWVzc2FnZToiIixlcnJvckJhY2tncm91bmQ6IiIsZXJyb3JCb3JkZXI6IiIsZXJyb3JGb250RmFtaWx5OiIiLGVycm9yRm9udFNpemU6IiIsZXJyb3JGb250U3R5bGU6IiIsZXJyb3JGb250V2VpZ2h0OiIiLGNhdGNoRXJyb3JzOmZhbHNlLGRlZmF1bHRUaWNrRm9ybWF0U3RyaW5nOiIlLjFmIixkZWZhdWx0Q29sb3JzOlsiIzRiYjJjNSIsIiNFQUEyMjgiLCIjYzViNDdmIiwiIzU3OTU3NSIsIiM4Mzk1NTciLCIjOTU4YzEyIiwiIzk1MzU3OSIsIiM0YjVkZTQiLCIjZDhiODNmIiwiI2ZmNTgwMCIsIiMwMDg1Y2MiLCIjYzc0N2EzIiwiI2NkZGY1NCIsIiNGQkQxNzgiLCIjMjZCNEUzIiwiI2JkNzBjNyJdLGRlZmF1bHROZWdhdGl2ZUNvbG9yczpbIiM0OTg5OTEiLCIjQzA4ODQwIiwiIzlGOTI3NCIsIiM1NDZENjEiLCIjNjQ2QzRBIiwiIzZGNjYyMSIsIiM2RTNGNUYiLCIjNEY2NEIwIiwiI0E4OTA1MCIsIiNDNDU5MjMiLCIjMTg3Mzk5IiwiIzk0NTM4MSIsIiM5NTlFNUMiLCIjQzdBRjdCIiwiIzQ3ODM5NiIsIiM5MDcyOTQiXSxkYXNoTGVuZ3RoOjQsZ2FwTGVuZ3RoOjQsZG90R2FwTGVuZ3RoOjIuNSxzcmNMb2NhdGlvbjoianFwbG90L3NyYy8iLHBsdWdpbkxvY2F0aW9uOiJqcXBsb3Qvc3JjL3BsdWdpbnMvIn07TC5qcXBsb3QuYXJyYXlNYXg9ZnVuY3Rpb24oYWgpe3JldHVybiBNYXRoLm1heC5hcHBseShNYXRoLGFoKX07TC5qcXBsb3QuYXJyYXlNaW49ZnVuY3Rpb24oYWgpe3JldHVybiBNYXRoLm1pbi5hcHBseShNYXRoLGFoKX07TC5qcXBsb3QuZW5hYmxlUGx1Z2lucz1MLmpxcGxvdC5jb25maWcuZW5hYmxlUGx1Z2lucztMLmpxcGxvdC5zdXBwb3J0X2NhbnZhcz1mdW5jdGlvbigpe2lmKHR5cGVvZiBMLmpxcGxvdC5zdXBwb3J0X2NhbnZhcy5yZXN1bHQ9PSJ1bmRlZmluZWQiKXtMLmpxcGxvdC5zdXBwb3J0X2NhbnZhcy5yZXN1bHQ9ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0fXJldHVybiBMLmpxcGxvdC5zdXBwb3J0X2NhbnZhcy5yZXN1bHR9O0wuanFwbG90LnN1cHBvcnRfY2FudmFzX3RleHQ9ZnVuY3Rpb24oKXtpZih0eXBlb2YgTC5qcXBsb3Quc3VwcG9ydF9jYW52YXNfdGV4dC5yZXN1bHQ9PSJ1bmRlZmluZWQiKXtpZih3aW5kb3cuR192bWxDYW52YXNNYW5hZ2VyIT09dSYmd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci5fdmVyc2lvbj44ODcpe0wuanFwbG90LnN1cHBvcnRfY2FudmFzX3RleHQucmVzdWx0PXRydWV9ZWxzZXtMLmpxcGxvdC5zdXBwb3J0X2NhbnZhc190ZXh0LnJlc3VsdD0hIShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0JiZ0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKS5maWxsVGV4dD09ImZ1bmN0aW9uIil9fXJldHVybiBMLmpxcGxvdC5zdXBwb3J0X2NhbnZhc190ZXh0LnJlc3VsdH07TC5qcXBsb3QudXNlX2V4Y2FudmFzPSgoIUwuc3VwcG9ydC5ib3hNb2RlbHx8IUwuc3VwcG9ydC5vYmplY3RBbGx8fCEkc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSkmJiFMLmpxcGxvdC5zdXBwb3J0X2NhbnZhcygpKT90cnVlOmZhbHNlO0wuanFwbG90LnByZUluaXRIb29rcz1bXTtMLmpxcGxvdC5wb3N0SW5pdEhvb2tzPVtdO0wuanFwbG90LnByZVBhcnNlT3B0aW9uc0hvb2tzPVtdO0wuanFwbG90LnBvc3RQYXJzZU9wdGlvbnNIb29rcz1bXTtMLmpxcGxvdC5wcmVEcmF3SG9va3M9W107TC5qcXBsb3QucG9zdERyYXdIb29rcz1bXTtMLmpxcGxvdC5wcmVEcmF3U2VyaWVzSG9va3M9W107TC5qcXBsb3QucG9zdERyYXdTZXJpZXNIb29rcz1bXTtMLmpxcGxvdC5wcmVEcmF3TGVnZW5kSG9va3M9W107TC5qcXBsb3QuYWRkTGVnZW5kUm93SG9va3M9W107TC5qcXBsb3QucHJlU2VyaWVzSW5pdEhvb2tzPVtdO0wuanFwbG90LnBvc3RTZXJpZXNJbml0SG9va3M9W107TC5qcXBsb3QucHJlUGFyc2VTZXJpZXNPcHRpb25zSG9va3M9W107TC5qcXBsb3QucG9zdFBhcnNlU2VyaWVzT3B0aW9uc0hvb2tzPVtdO0wuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcz1bXTtMLmpxcGxvdC5wcmVEcmF3U2VyaWVzU2hhZG93SG9va3M9W107TC5qcXBsb3QucG9zdERyYXdTZXJpZXNTaGFkb3dIb29rcz1bXTtMLmpxcGxvdC5FbGVtQ29udGFpbmVyPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbTt0aGlzLl9wbG90V2lkdGg7dGhpcy5fcGxvdEhlaWdodDt0aGlzLl9wbG90RGltZW5zaW9ucz17aGVpZ2h0Om51bGwsd2lkdGg6bnVsbH19O0wuanFwbG90LkVsZW1Db250YWluZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oYWssYW0sYWksYWosYW4pe3RoaXMuX29mZnNldHM9YW07dmFyIGFoPWFpfHwianFwbG90Ijt2YXIgYWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChhayk7dGhpcy5fZWxlbT1MKGFsKTt0aGlzLl9lbGVtLmFkZENsYXNzKGFoKTt0aGlzLl9lbGVtLmNzcyhhaik7dGhpcy5fZWxlbS5hdHRyKGFuKTthbD1udWxsO3JldHVybiB0aGlzLl9lbGVtfTtMLmpxcGxvdC5FbGVtQ29udGFpbmVyLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe2lmKHRoaXMuX2VsZW0pe3JldHVybiB0aGlzLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSl9ZWxzZXtyZXR1cm4gbnVsbH19O0wuanFwbG90LkVsZW1Db250YWluZXIucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe2lmKHRoaXMuX2VsZW0pe3JldHVybiB0aGlzLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpfWVsc2V7cmV0dXJuIG51bGx9fTtMLmpxcGxvdC5FbGVtQ29udGFpbmVyLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuX2VsZW0pe3JldHVybiB0aGlzLl9lbGVtLnBvc2l0aW9uKCl9ZWxzZXtyZXR1cm57dG9wOm51bGwsbGVmdDpudWxsLGJvdHRvbTpudWxsLHJpZ2h0Om51bGx9fX07TC5qcXBsb3QuRWxlbUNvbnRhaW5lci5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS50b3B9O0wuanFwbG90LkVsZW1Db250YWluZXIucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLmxlZnR9O0wuanFwbG90LkVsZW1Db250YWluZXIucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtLmNzcygiYm90dG9tIil9O0wuanFwbG90LkVsZW1Db250YWluZXIucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW0uY3NzKCJyaWdodCIpfTtmdW5jdGlvbiB3KGFoKXtMLmpxcGxvdC5FbGVtQ29udGFpbmVyLmNhbGwodGhpcyk7dGhpcy5uYW1lPWFoO3RoaXMuX3Nlcmllcz1bXTt0aGlzLnNob3c9ZmFsc2U7dGhpcy50aWNrUmVuZGVyZXI9TC5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlcjt0aGlzLnRpY2tPcHRpb25zPXt9O3RoaXMubGFiZWxSZW5kZXJlcj1MLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlcjt0aGlzLmxhYmVsT3B0aW9ucz17fTt0aGlzLmxhYmVsPW51bGw7dGhpcy5zaG93TGFiZWw9dHJ1ZTt0aGlzLm1pbj1udWxsO3RoaXMubWF4PW51bGw7dGhpcy5hdXRvc2NhbGU9ZmFsc2U7dGhpcy5wYWQ9MS4yO3RoaXMucGFkTWF4PW51bGw7dGhpcy5wYWRNaW49bnVsbDt0aGlzLnRpY2tzPVtdO3RoaXMubnVtYmVyVGlja3M7dGhpcy50aWNrSW50ZXJ2YWw7dGhpcy5yZW5kZXJlcj1MLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXI7dGhpcy5yZW5kZXJlck9wdGlvbnM9e307dGhpcy5zaG93VGlja3M9dHJ1ZTt0aGlzLnNob3dUaWNrTWFya3M9dHJ1ZTt0aGlzLnNob3dNaW5vclRpY2tzPXRydWU7dGhpcy5kcmF3TWFqb3JHcmlkbGluZXM9dHJ1ZTt0aGlzLmRyYXdNaW5vckdyaWRsaW5lcz1mYWxzZTt0aGlzLmRyYXdNYWpvclRpY2tNYXJrcz10cnVlO3RoaXMuZHJhd01pbm9yVGlja01hcmtzPXRydWU7dGhpcy51c2VTZXJpZXNDb2xvcj1mYWxzZTt0aGlzLmJvcmRlcldpZHRoPW51bGw7dGhpcy5ib3JkZXJDb2xvcj1udWxsO3RoaXMuc2NhbGVUb0hpZGRlblNlcmllcz1mYWxzZTt0aGlzLl9kYXRhQm91bmRzPXttaW46bnVsbCxtYXg6bnVsbH07dGhpcy5faW50ZXJ2YWxTdGF0cz1bXTt0aGlzLl9vZmZzZXRzPXttaW46bnVsbCxtYXg6bnVsbH07dGhpcy5fdGlja3M9W107dGhpcy5fbGFiZWw9bnVsbDt0aGlzLnN5bmNUaWNrcz1udWxsO3RoaXMudGlja1NwYWNpbmc9NzU7dGhpcy5fbWluPW51bGw7dGhpcy5fbWF4PW51bGw7dGhpcy5fdGlja0ludGVydmFsPW51bGw7dGhpcy5fbnVtYmVyVGlja3M9bnVsbDt0aGlzLl9fdGlja3M9bnVsbDt0aGlzLl9vcHRpb25zPXt9fXcucHJvdG90eXBlPW5ldyBMLmpxcGxvdC5FbGVtQ29udGFpbmVyKCk7dy5wcm90b3R5cGUuY29uc3RydWN0b3I9dzt3LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7aWYoTC5pc0Z1bmN0aW9uKHRoaXMucmVuZGVyZXIpKXt0aGlzLnJlbmRlcmVyPW5ldyB0aGlzLnJlbmRlcmVyKCl9dGhpcy50aWNrT3B0aW9ucy5heGlzPXRoaXMubmFtZTtpZih0aGlzLnRpY2tPcHRpb25zLnNob3dNYXJrPT1udWxsKXt0aGlzLnRpY2tPcHRpb25zLnNob3dNYXJrPXRoaXMuc2hvd1RpY2tzfWlmKHRoaXMudGlja09wdGlvbnMuc2hvd01hcms9PW51bGwpe3RoaXMudGlja09wdGlvbnMuc2hvd01hcms9dGhpcy5zaG93VGlja01hcmtzfWlmKHRoaXMudGlja09wdGlvbnMuc2hvd0xhYmVsPT1udWxsKXt0aGlzLnRpY2tPcHRpb25zLnNob3dMYWJlbD10aGlzLnNob3dUaWNrc31pZih0aGlzLmxhYmVsPT1udWxsfHx0aGlzLmxhYmVsPT0iIil7dGhpcy5zaG93TGFiZWw9ZmFsc2V9ZWxzZXt0aGlzLmxhYmVsT3B0aW9ucy5sYWJlbD10aGlzLmxhYmVsfWlmKHRoaXMuc2hvd0xhYmVsPT1mYWxzZSl7dGhpcy5sYWJlbE9wdGlvbnMuc2hvdz1mYWxzZX1pZih0aGlzLnBhZD09MCl7dGhpcy5wYWQ9MX1pZih0aGlzLnBhZE1heD09MCl7dGhpcy5wYWRNYXg9MX1pZih0aGlzLnBhZE1pbj09MCl7dGhpcy5wYWRNaW49MX1pZih0aGlzLnBhZE1heD09bnVsbCl7dGhpcy5wYWRNYXg9KHRoaXMucGFkLTEpLzIrMX1pZih0aGlzLnBhZE1pbj09bnVsbCl7dGhpcy5wYWRNaW49KHRoaXMucGFkLTEpLzIrMX10aGlzLnBhZD10aGlzLnBhZE1heCt0aGlzLnBhZE1pbi0xO2lmKHRoaXMubWluIT1udWxsfHx0aGlzLm1heCE9bnVsbCl7dGhpcy5hdXRvc2NhbGU9ZmFsc2V9aWYodGhpcy5zeW5jVGlja3M9PW51bGwmJnRoaXMubmFtZS5pbmRleE9mKCJ5Iik+LTEpe3RoaXMuc3luY1RpY2tzPXRydWV9ZWxzZXtpZih0aGlzLnN5bmNUaWNrcz09bnVsbCl7dGhpcy5zeW5jVGlja3M9ZmFsc2V9fXRoaXMucmVuZGVyZXIuaW5pdC5jYWxsKHRoaXMsdGhpcy5yZW5kZXJlck9wdGlvbnMpfTt3LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGFoLGFpKXtpZih0aGlzLl9fdGlja3Mpe3RoaXMuX190aWNrcz1udWxsfXJldHVybiB0aGlzLnJlbmRlcmVyLmRyYXcuY2FsbCh0aGlzLGFoLGFpKX07dy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci5zZXQuY2FsbCh0aGlzKX07dy5wcm90b3R5cGUucGFjaz1mdW5jdGlvbihhaSxhaCl7aWYodGhpcy5zaG93KXt0aGlzLnJlbmRlcmVyLnBhY2suY2FsbCh0aGlzLGFpLGFoKX1pZih0aGlzLl9taW49PW51bGwpe3RoaXMuX21pbj10aGlzLm1pbjt0aGlzLl9tYXg9dGhpcy5tYXg7dGhpcy5fdGlja0ludGVydmFsPXRoaXMudGlja0ludGVydmFsO3RoaXMuX251bWJlclRpY2tzPXRoaXMubnVtYmVyVGlja3M7dGhpcy5fX3RpY2tzPXRoaXMuX3RpY2tzfX07dy5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnJlc2V0LmNhbGwodGhpcyl9O3cucHJvdG90eXBlLnJlc2V0U2NhbGU9ZnVuY3Rpb24oYWgpe0wuZXh0ZW5kKHRydWUsdGhpcyx7bWluOm51bGwsbWF4Om51bGwsbnVtYmVyVGlja3M6bnVsbCx0aWNrSW50ZXJ2YWw6bnVsbCxfdGlja3M6W10sdGlja3M6W119LGFoKTt0aGlzLnJlc2V0RGF0YUJvdW5kcygpfTt3LnByb3RvdHlwZS5yZXNldERhdGFCb3VuZHM9ZnVuY3Rpb24oKXt2YXIgYW89dGhpcy5fZGF0YUJvdW5kczthby5taW49bnVsbDthby5tYXg9bnVsbDt2YXIgYWksYXAsYW07dmFyIGFqPSh0aGlzLnNob3cpP3RydWU6ZmFsc2U7Zm9yKHZhciBhbD0wO2FsPHRoaXMuX3Nlcmllcy5sZW5ndGg7YWwrKyl7YXA9dGhpcy5fc2VyaWVzW2FsXTtpZihhcC5zaG93fHx0aGlzLnNjYWxlVG9IaWRkZW5TZXJpZXMpe2FtPWFwLl9wbG90RGF0YTtpZihhcC5fdHlwZT09PSJsaW5lIiYmYXAucmVuZGVyZXIuYmFuZHMuc2hvdyYmdGhpcy5uYW1lLmNoYXJBdCgwKSE9PSJ4Iil7YW09W1swLGFwLnJlbmRlcmVyLmJhbmRzLl9taW5dLFsxLGFwLnJlbmRlcmVyLmJhbmRzLl9tYXhdXX12YXIgYWg9MSxhbj0xO2lmKGFwLl90eXBlIT1udWxsJiZhcC5fdHlwZT09Im9obGMiKXthaD0zO2FuPTJ9Zm9yKHZhciBhaz0wLGFpPWFtLmxlbmd0aDthazxhaTthaysrKXtpZih0aGlzLm5hbWU9PSJ4YXhpcyJ8fHRoaXMubmFtZT09IngyYXhpcyIpe2lmKChhbVtha11bMF0hPW51bGwmJmFtW2FrXVswXTxhby5taW4pfHxhby5taW49PW51bGwpe2FvLm1pbj1hbVtha11bMF19aWYoKGFtW2FrXVswXSE9bnVsbCYmYW1bYWtdWzBdPmFvLm1heCl8fGFvLm1heD09bnVsbCl7YW8ubWF4PWFtW2FrXVswXX19ZWxzZXtpZigoYW1bYWtdW2FoXSE9bnVsbCYmYW1bYWtdW2FoXTxhby5taW4pfHxhby5taW49PW51bGwpe2FvLm1pbj1hbVtha11bYWhdfWlmKChhbVtha11bYW5dIT1udWxsJiZhbVtha11bYW5dPmFvLm1heCl8fGFvLm1heD09bnVsbCl7YW8ubWF4PWFtW2FrXVthbl19fX1pZihhaiYmYXAucmVuZGVyZXIuY29uc3RydWN0b3IhPT1MLmpxcGxvdC5CYXJSZW5kZXJlcil7YWo9ZmFsc2V9ZWxzZXtpZihhaiYmdGhpcy5fb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgiZm9yY2VUaWNrQXQwIikmJnRoaXMuX29wdGlvbnMuZm9yY2VUaWNrQXQwPT1mYWxzZSl7YWo9ZmFsc2V9ZWxzZXtpZihhaiYmYXAucmVuZGVyZXIuY29uc3RydWN0b3I9PT1MLmpxcGxvdC5CYXJSZW5kZXJlcil7aWYoYXAuYmFyRGlyZWN0aW9uPT0idmVydGljYWwiJiZ0aGlzLm5hbWUhPSJ4YXhpcyImJnRoaXMubmFtZSE9IngyYXhpcyIpe2lmKHRoaXMuX29wdGlvbnMucGFkIT1udWxsfHx0aGlzLl9vcHRpb25zLnBhZE1pbiE9bnVsbCl7YWo9ZmFsc2V9fWVsc2V7aWYoYXAuYmFyRGlyZWN0aW9uPT0iaG9yaXpvbnRhbCImJih0aGlzLm5hbWU9PSJ4YXhpcyJ8fHRoaXMubmFtZT09IngyYXhpcyIpKXtpZih0aGlzLl9vcHRpb25zLnBhZCE9bnVsbHx8dGhpcy5fb3B0aW9ucy5wYWRNaW4hPW51bGwpe2FqPWZhbHNlfX19fX19fX1pZihhaiYmdGhpcy5yZW5kZXJlci5jb25zdHJ1Y3Rvcj09PUwuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlciYmYW8ubWluPj0wKXt0aGlzLnBhZE1pbj0xO3RoaXMuZm9yY2VUaWNrQXQwPXRydWV9fTtmdW5jdGlvbiBxKGFoKXtMLmpxcGxvdC5FbGVtQ29udGFpbmVyLmNhbGwodGhpcyk7dGhpcy5zaG93PWZhbHNlO3RoaXMubG9jYXRpb249Im5lIjt0aGlzLmxhYmVscz1bXTt0aGlzLnNob3dMYWJlbHM9dHJ1ZTt0aGlzLnNob3dTd2F0Y2hlcz10cnVlO3RoaXMucGxhY2VtZW50PSJpbnNpZGVHcmlkIjt0aGlzLnhvZmZzZXQ9MDt0aGlzLnlvZmZzZXQ9MDt0aGlzLmJvcmRlcjt0aGlzLmJhY2tncm91bmQ7dGhpcy50ZXh0Q29sb3I7dGhpcy5mb250RmFtaWx5O3RoaXMuZm9udFNpemU7dGhpcy5yb3dTcGFjaW5nPSIwLjVlbSI7dGhpcy5yZW5kZXJlcj1MLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyO3RoaXMucmVuZGVyZXJPcHRpb25zPXt9O3RoaXMucHJlRHJhdz1mYWxzZTt0aGlzLm1hcmdpblRvcD1udWxsO3RoaXMubWFyZ2luUmlnaHQ9bnVsbDt0aGlzLm1hcmdpbkJvdHRvbT1udWxsO3RoaXMubWFyZ2luTGVmdD1udWxsO3RoaXMuZXNjYXBlSHRtbD1mYWxzZTt0aGlzLl9zZXJpZXM9W107TC5leHRlbmQodHJ1ZSx0aGlzLGFoKX1xLnByb3RvdHlwZT1uZXcgTC5qcXBsb3QuRWxlbUNvbnRhaW5lcigpO3EucHJvdG90eXBlLmNvbnN0cnVjdG9yPXE7cS5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbihhaCl7TC5leHRlbmQodHJ1ZSx0aGlzLGFoKTtpZih0aGlzLnBsYWNlbWVudD09Imluc2lkZSIpe3RoaXMucGxhY2VtZW50PSJpbnNpZGVHcmlkIn1pZih0aGlzLnhvZmZzZXQ+MCl7aWYodGhpcy5wbGFjZW1lbnQ9PSJpbnNpZGVHcmlkIil7c3dpdGNoKHRoaXMubG9jYXRpb24pe2Nhc2UibnciOmNhc2UidyI6Y2FzZSJzdyI6aWYodGhpcy5tYXJnaW5MZWZ0PT1udWxsKXt0aGlzLm1hcmdpbkxlZnQ9dGhpcy54b2Zmc2V0KyJweCJ9dGhpcy5tYXJnaW5SaWdodD0iMHB4IjticmVhaztjYXNlIm5lIjpjYXNlImUiOmNhc2Uic2UiOmRlZmF1bHQ6aWYodGhpcy5tYXJnaW5SaWdodD09bnVsbCl7dGhpcy5tYXJnaW5SaWdodD10aGlzLnhvZmZzZXQrInB4In10aGlzLm1hcmdpbkxlZnQ9IjBweCI7YnJlYWt9fWVsc2V7aWYodGhpcy5wbGFjZW1lbnQ9PSJvdXRzaWRlIil7c3dpdGNoKHRoaXMubG9jYXRpb24pe2Nhc2UibnciOmNhc2UidyI6Y2FzZSJzdyI6aWYodGhpcy5tYXJnaW5SaWdodD09bnVsbCl7dGhpcy5tYXJnaW5SaWdodD10aGlzLnhvZmZzZXQrInB4In10aGlzLm1hcmdpbkxlZnQ9IjBweCI7YnJlYWs7Y2FzZSJuZSI6Y2FzZSJlIjpjYXNlInNlIjpkZWZhdWx0OmlmKHRoaXMubWFyZ2luTGVmdD09bnVsbCl7dGhpcy5tYXJnaW5MZWZ0PXRoaXMueG9mZnNldCsicHgifXRoaXMubWFyZ2luUmlnaHQ9IjBweCI7YnJlYWt9fX10aGlzLnhvZmZzZXQ9MH1pZih0aGlzLnlvZmZzZXQ+MCl7aWYodGhpcy5wbGFjZW1lbnQ9PSJvdXRzaWRlIil7c3dpdGNoKHRoaXMubG9jYXRpb24pe2Nhc2Uic3ciOmNhc2UicyI6Y2FzZSJzZSI6aWYodGhpcy5tYXJnaW5Ub3A9PW51bGwpe3RoaXMubWFyZ2luVG9wPXRoaXMueW9mZnNldCsicHgifXRoaXMubWFyZ2luQm90dG9tPSIwcHgiO2JyZWFrO2Nhc2UibmUiOmNhc2UibiI6Y2FzZSJudyI6ZGVmYXVsdDppZih0aGlzLm1hcmdpbkJvdHRvbT09bnVsbCl7dGhpcy5tYXJnaW5Cb3R0b209dGhpcy55b2Zmc2V0KyJweCJ9dGhpcy5tYXJnaW5Ub3A9IjBweCI7YnJlYWt9fWVsc2V7aWYodGhpcy5wbGFjZW1lbnQ9PSJpbnNpZGVHcmlkIil7c3dpdGNoKHRoaXMubG9jYXRpb24pe2Nhc2Uic3ciOmNhc2UicyI6Y2FzZSJzZSI6aWYodGhpcy5tYXJnaW5Cb3R0b209PW51bGwpe3RoaXMubWFyZ2luQm90dG9tPXRoaXMueW9mZnNldCsicHgifXRoaXMubWFyZ2luVG9wPSIwcHgiO2JyZWFrO2Nhc2UibmUiOmNhc2UibiI6Y2FzZSJudyI6ZGVmYXVsdDppZih0aGlzLm1hcmdpblRvcD09bnVsbCl7dGhpcy5tYXJnaW5Ub3A9dGhpcy55b2Zmc2V0KyJweCJ9dGhpcy5tYXJnaW5Cb3R0b209IjBweCI7YnJlYWt9fX10aGlzLnlvZmZzZXQ9MH19O3EucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtpZihMLmlzRnVuY3Rpb24odGhpcy5yZW5kZXJlcikpe3RoaXMucmVuZGVyZXI9bmV3IHRoaXMucmVuZGVyZXIoKX10aGlzLnJlbmRlcmVyLmluaXQuY2FsbCh0aGlzLHRoaXMucmVuZGVyZXJPcHRpb25zKX07cS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhaSxhail7Zm9yKHZhciBhaD0wO2FoPEwuanFwbG90LnByZURyYXdMZWdlbmRIb29rcy5sZW5ndGg7YWgrKyl7TC5qcXBsb3QucHJlRHJhd0xlZ2VuZEhvb2tzW2FoXS5jYWxsKHRoaXMsYWkpfXJldHVybiB0aGlzLnJlbmRlcmVyLmRyYXcuY2FsbCh0aGlzLGFpLGFqKX07cS5wcm90b3R5cGUucGFjaz1mdW5jdGlvbihhaCl7dGhpcy5yZW5kZXJlci5wYWNrLmNhbGwodGhpcyxhaCl9O2Z1bmN0aW9uIHkoYWgpe0wuanFwbG90LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTt0aGlzLnRleHQ9YWg7dGhpcy5zaG93PXRydWU7dGhpcy5mb250RmFtaWx5O3RoaXMuZm9udFNpemU7dGhpcy50ZXh0QWxpZ247dGhpcy50ZXh0Q29sb3I7dGhpcy5yZW5kZXJlcj1MLmpxcGxvdC5EaXZUaXRsZVJlbmRlcmVyO3RoaXMucmVuZGVyZXJPcHRpb25zPXt9O3RoaXMuZXNjYXBlSHRtbD1mYWxzZX15LnByb3RvdHlwZT1uZXcgTC5qcXBsb3QuRWxlbUNvbnRhaW5lcigpO3kucHJvdG90eXBlLmNvbnN0cnVjdG9yPXk7eS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2lmKEwuaXNGdW5jdGlvbih0aGlzLnJlbmRlcmVyKSl7dGhpcy5yZW5kZXJlcj1uZXcgdGhpcy5yZW5kZXJlcigpfXRoaXMucmVuZGVyZXIuaW5pdC5jYWxsKHRoaXMsdGhpcy5yZW5kZXJlck9wdGlvbnMpfTt5LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGFoKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5kcmF3LmNhbGwodGhpcyxhaCl9O3kucHJvdG90eXBlLnBhY2s9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnBhY2suY2FsbCh0aGlzKX07ZnVuY3Rpb24gUyhhaCl7YWg9YWh8fHt9O0wuanFwbG90LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTt0aGlzLnNob3c9dHJ1ZTt0aGlzLnhheGlzPSJ4YXhpcyI7dGhpcy5feGF4aXM7dGhpcy55YXhpcz0ieWF4aXMiO3RoaXMuX3lheGlzO3RoaXMuZ3JpZEJvcmRlcldpZHRoPTI7dGhpcy5yZW5kZXJlcj1MLmpxcGxvdC5MaW5lUmVuZGVyZXI7dGhpcy5yZW5kZXJlck9wdGlvbnM9e307dGhpcy5kYXRhPVtdO3RoaXMuZ3JpZERhdGE9W107dGhpcy5sYWJlbD0iIjt0aGlzLnNob3dMYWJlbD10cnVlO3RoaXMuY29sb3I7dGhpcy5uZWdhdGl2ZUNvbG9yO3RoaXMubGluZVdpZHRoPTIuNTt0aGlzLmxpbmVKb2luPSJyb3VuZCI7dGhpcy5saW5lQ2FwPSJyb3VuZCI7dGhpcy5saW5lUGF0dGVybj0ic29saWQiO3RoaXMuc2hhZG93PXRydWU7dGhpcy5zaGFkb3dBbmdsZT00NTt0aGlzLnNoYWRvd09mZnNldD0xLjI1O3RoaXMuc2hhZG93RGVwdGg9Mzt0aGlzLnNoYWRvd0FscGhhPSIwLjEiO3RoaXMuYnJlYWtPbk51bGw9ZmFsc2U7dGhpcy5tYXJrZXJSZW5kZXJlcj1MLmpxcGxvdC5NYXJrZXJSZW5kZXJlcjt0aGlzLm1hcmtlck9wdGlvbnM9e307dGhpcy5zaG93TGluZT10cnVlO3RoaXMuc2hvd01hcmtlcj10cnVlO3RoaXMuaW5kZXg7dGhpcy5maWxsPWZhbHNlO3RoaXMuZmlsbENvbG9yO3RoaXMuZmlsbEFscGhhO3RoaXMuZmlsbEFuZFN0cm9rZT1mYWxzZTt0aGlzLmRpc2FibGVTdGFjaz1mYWxzZTt0aGlzLl9zdGFjaz1mYWxzZTt0aGlzLm5laWdoYm9yVGhyZXNob2xkPTQ7dGhpcy5maWxsVG9aZXJvPWZhbHNlO3RoaXMuZmlsbFRvVmFsdWU9MDt0aGlzLmZpbGxBeGlzPSJ5Ijt0aGlzLnVzZU5lZ2F0aXZlQ29sb3JzPXRydWU7dGhpcy5fc3RhY2tEYXRhPVtdO3RoaXMuX3Bsb3REYXRhPVtdO3RoaXMuX3Bsb3RWYWx1ZXM9e3g6W10seTpbXX07dGhpcy5faW50ZXJ2YWxzPXt4Ont9LHk6e319O3RoaXMuX3ByZXZQbG90RGF0YT1bXTt0aGlzLl9wcmV2R3JpZERhdGE9W107dGhpcy5fc3RhY2tBeGlzPSJ5Ijt0aGlzLl9wcmltYXJ5QXhpcz0iX3hheGlzIjt0aGlzLmNhbnZhcz1uZXcgTC5qcXBsb3QuR2VuZXJpY0NhbnZhcygpO3RoaXMuc2hhZG93Q2FudmFzPW5ldyBMLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7dGhpcy5wbHVnaW5zPXt9O3RoaXMuX3N1bXk9MDt0aGlzLl9zdW14PTA7dGhpcy5fdHlwZT0iIn1TLnByb3RvdHlwZT1uZXcgTC5qcXBsb3QuRWxlbUNvbnRhaW5lcigpO1MucHJvdG90eXBlLmNvbnN0cnVjdG9yPVM7Uy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhayxhbyxhbSl7dGhpcy5pbmRleD1hazt0aGlzLmdyaWRCb3JkZXJXaWR0aD1hbzt2YXIgYW49dGhpcy5kYXRhO3ZhciBhaj1bXSxhbCxhaDtmb3IoYWw9MCxhaD1hbi5sZW5ndGg7YWw8YWg7YWwrKyl7aWYoIXRoaXMuYnJlYWtPbk51bGwpe2lmKGFuW2FsXT09bnVsbHx8YW5bYWxdWzBdPT1udWxsfHxhblthbF1bMV09PW51bGwpe2NvbnRpbnVlfWVsc2V7YWoucHVzaChhblthbF0pfX1lbHNle2FqLnB1c2goYW5bYWxdKX19dGhpcy5kYXRhPWFqO2lmKCF0aGlzLmNvbG9yKXt0aGlzLmNvbG9yPWFtLmNvbG9yR2VuZXJhdG9yLmdldCh0aGlzLmluZGV4KX1pZighdGhpcy5uZWdhdGl2ZUNvbG9yKXt0aGlzLm5lZ2F0aXZlQ29sb3I9YW0ubmVnYXRpdmVDb2xvckdlbmVyYXRvci5nZXQodGhpcy5pbmRleCl9aWYoIXRoaXMuZmlsbENvbG9yKXt0aGlzLmZpbGxDb2xvcj10aGlzLmNvbG9yfWlmKHRoaXMuZmlsbEFscGhhKXt2YXIgYWk9TC5qcXBsb3Qubm9ybWFsaXplMnJnYih0aGlzLmZpbGxDb2xvcik7dmFyIGFpPUwuanFwbG90LmdldENvbG9yQ29tcG9uZW50cyhhaSk7dGhpcy5maWxsQ29sb3I9InJnYmEoIithaVswXSsiLCIrYWlbMV0rIiwiK2FpWzJdKyIsIit0aGlzLmZpbGxBbHBoYSsiKSJ9aWYoTC5pc0Z1bmN0aW9uKHRoaXMucmVuZGVyZXIpKXt0aGlzLnJlbmRlcmVyPW5ldyB0aGlzLnJlbmRlcmVyKCl9dGhpcy5yZW5kZXJlci5pbml0LmNhbGwodGhpcyx0aGlzLnJlbmRlcmVyT3B0aW9ucyxhbSk7dGhpcy5tYXJrZXJSZW5kZXJlcj1uZXcgdGhpcy5tYXJrZXJSZW5kZXJlcigpO2lmKCF0aGlzLm1hcmtlck9wdGlvbnMuY29sb3Ipe3RoaXMubWFya2VyT3B0aW9ucy5jb2xvcj10aGlzLmNvbG9yfWlmKHRoaXMubWFya2VyT3B0aW9ucy5zaG93PT1udWxsKXt0aGlzLm1hcmtlck9wdGlvbnMuc2hvdz10aGlzLnNob3dNYXJrZXJ9dGhpcy5zaG93TWFya2VyPXRoaXMubWFya2VyT3B0aW9ucy5zaG93O3RoaXMubWFya2VyUmVuZGVyZXIuaW5pdCh0aGlzLm1hcmtlck9wdGlvbnMpfTtTLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGFuLGFrLGFtKXt2YXIgYWk9KGFrPT11KT97fTphazthbj0oYW49PXUpP3RoaXMuY2FudmFzLl9jdHg6YW47dmFyIGFoLGFsLGFqO2ZvcihhaD0wO2FoPEwuanFwbG90LnByZURyYXdTZXJpZXNIb29rcy5sZW5ndGg7YWgrKyl7TC5qcXBsb3QucHJlRHJhd1Nlcmllc0hvb2tzW2FoXS5jYWxsKHRoaXMsYW4sYWkpfWlmKHRoaXMuc2hvdyl7dGhpcy5yZW5kZXJlci5zZXRHcmlkRGF0YS5jYWxsKHRoaXMsYW0pO2lmKCFhaS5wcmV2ZW50SnFQbG90U2VyaWVzRHJhd1RyaWdnZXIpe0woYW4uY2FudmFzKS50cmlnZ2VyKCJqcXBsb3RTZXJpZXNEcmF3IixbdGhpcy5kYXRhLHRoaXMuZ3JpZERhdGFdKX1hbD1bXTtpZihhaS5kYXRhKXthbD1haS5kYXRhfWVsc2V7aWYoIXRoaXMuX3N0YWNrKXthbD10aGlzLmRhdGF9ZWxzZXthbD10aGlzLl9wbG90RGF0YX19YWo9YWkuZ3JpZERhdGF8fHRoaXMucmVuZGVyZXIubWFrZUdyaWREYXRhLmNhbGwodGhpcyxhbCxhbSk7aWYodGhpcy5fdHlwZT09PSJsaW5lIiYmdGhpcy5yZW5kZXJlci5zbW9vdGgmJnRoaXMucmVuZGVyZXIuX3Ntb290aGVkRGF0YS5sZW5ndGgpe2FqPXRoaXMucmVuZGVyZXIuX3Ntb290aGVkRGF0YX10aGlzLnJlbmRlcmVyLmRyYXcuY2FsbCh0aGlzLGFuLGFqLGFpLGFtKX1mb3IoYWg9MDthaDxMLmpxcGxvdC5wb3N0RHJhd1Nlcmllc0hvb2tzLmxlbmd0aDthaCsrKXtMLmpxcGxvdC5wb3N0RHJhd1Nlcmllc0hvb2tzW2FoXS5jYWxsKHRoaXMsYW4sYWksYW0pfWFuPWFrPWFtPWFoPWFsPWFqPW51bGx9O1MucHJvdG90eXBlLmRyYXdTaGFkb3c9ZnVuY3Rpb24oYW4sYWssYW0pe3ZhciBhaT0oYWs9PXUpP3t9OmFrO2FuPShhbj09dSk/dGhpcy5zaGFkb3dDYW52YXMuX2N0eDphbjt2YXIgYWgsYWwsYWo7Zm9yKGFoPTA7YWg8TC5qcXBsb3QucHJlRHJhd1Nlcmllc1NoYWRvd0hvb2tzLmxlbmd0aDthaCsrKXtMLmpxcGxvdC5wcmVEcmF3U2VyaWVzU2hhZG93SG9va3NbYWhdLmNhbGwodGhpcyxhbixhaSl9aWYodGhpcy5zaGFkb3cpe3RoaXMucmVuZGVyZXIuc2V0R3JpZERhdGEuY2FsbCh0aGlzLGFtKTthbD1bXTtpZihhaS5kYXRhKXthbD1haS5kYXRhfWVsc2V7aWYoIXRoaXMuX3N0YWNrKXthbD10aGlzLmRhdGF9ZWxzZXthbD10aGlzLl9wbG90RGF0YX19YWo9YWkuZ3JpZERhdGF8fHRoaXMucmVuZGVyZXIubWFrZUdyaWREYXRhLmNhbGwodGhpcyxhbCxhbSk7dGhpcy5yZW5kZXJlci5kcmF3U2hhZG93LmNhbGwodGhpcyxhbixhaixhaSxhbSl9Zm9yKGFoPTA7YWg8TC5qcXBsb3QucG9zdERyYXdTZXJpZXNTaGFkb3dIb29rcy5sZW5ndGg7YWgrKyl7TC5qcXBsb3QucG9zdERyYXdTZXJpZXNTaGFkb3dIb29rc1thaF0uY2FsbCh0aGlzLGFuLGFpKX1hbj1haz1hbT1haD1hbD1haj1udWxsfTtTLnByb3RvdHlwZS50b2dnbGVEaXNwbGF5PWZ1bmN0aW9uKGFpLGFrKXt2YXIgYWgsYWo7aWYoYWkuZGF0YS5zZXJpZXMpe2FoPWFpLmRhdGEuc2VyaWVzfWVsc2V7YWg9dGhpc31pZihhaS5kYXRhLnNwZWVkKXthaj1haS5kYXRhLnNwZWVkfWlmKGFqKXtpZihhaC5jYW52YXMuX2VsZW0uaXMoIjpoaWRkZW4iKXx8IWFoLnNob3cpe2FoLnNob3c9dHJ1ZTthaC5jYW52YXMuX2VsZW0ucmVtb3ZlQ2xhc3MoImpxcGxvdC1zZXJpZXMtaGlkZGVuIik7aWYoYWguc2hhZG93Q2FudmFzLl9lbGVtKXthaC5zaGFkb3dDYW52YXMuX2VsZW0uZmFkZUluKGFqKX1haC5jYW52YXMuX2VsZW0uZmFkZUluKGFqLGFrKTthaC5jYW52YXMuX2VsZW0ubmV4dEFsbCgiLmpxcGxvdC1wb2ludC1sYWJlbC5qcXBsb3Qtc2VyaWVzLSIrYWguaW5kZXgpLmZhZGVJbihhail9ZWxzZXthaC5zaG93PWZhbHNlO2FoLmNhbnZhcy5fZWxlbS5hZGRDbGFzcygianFwbG90LXNlcmllcy1oaWRkZW4iKTtpZihhaC5zaGFkb3dDYW52YXMuX2VsZW0pe2FoLnNoYWRvd0NhbnZhcy5fZWxlbS5mYWRlT3V0KGFqKX1haC5jYW52YXMuX2VsZW0uZmFkZU91dChhaixhayk7YWguY2FudmFzLl9lbGVtLm5leHRBbGwoIi5qcXBsb3QtcG9pbnQtbGFiZWwuanFwbG90LXNlcmllcy0iK2FoLmluZGV4KS5mYWRlT3V0KGFqKX19ZWxzZXtpZihhaC5jYW52YXMuX2VsZW0uaXMoIjpoaWRkZW4iKXx8IWFoLnNob3cpe2FoLnNob3c9dHJ1ZTthaC5jYW52YXMuX2VsZW0ucmVtb3ZlQ2xhc3MoImpxcGxvdC1zZXJpZXMtaGlkZGVuIik7aWYoYWguc2hhZG93Q2FudmFzLl9lbGVtKXthaC5zaGFkb3dDYW52YXMuX2VsZW0uc2hvdygpfWFoLmNhbnZhcy5fZWxlbS5zaG93KDAsYWspO2FoLmNhbnZhcy5fZWxlbS5uZXh0QWxsKCIuanFwbG90LXBvaW50LWxhYmVsLmpxcGxvdC1zZXJpZXMtIithaC5pbmRleCkuc2hvdygpfWVsc2V7YWguc2hvdz1mYWxzZTthaC5jYW52YXMuX2VsZW0uYWRkQ2xhc3MoImpxcGxvdC1zZXJpZXMtaGlkZGVuIik7aWYoYWguc2hhZG93Q2FudmFzLl9lbGVtKXthaC5zaGFkb3dDYW52YXMuX2VsZW0uaGlkZSgpfWFoLmNhbnZhcy5fZWxlbS5oaWRlKDAsYWspO2FoLmNhbnZhcy5fZWxlbS5uZXh0QWxsKCIuanFwbG90LXBvaW50LWxhYmVsLmpxcGxvdC1zZXJpZXMtIithaC5pbmRleCkuaGlkZSgpfX19O2Z1bmN0aW9uIE0oKXtMLmpxcGxvdC5FbGVtQ29udGFpbmVyLmNhbGwodGhpcyk7dGhpcy5kcmF3R3JpZGxpbmVzPXRydWU7dGhpcy5ncmlkTGluZUNvbG9yPSIjY2NjY2NjIjt0aGlzLmdyaWRMaW5lV2lkdGg9MTt0aGlzLmJhY2tncm91bmQ9IiNmZmZkZjYiO3RoaXMuYm9yZGVyQ29sb3I9IiM5OTk5OTkiO3RoaXMuYm9yZGVyV2lkdGg9Mjt0aGlzLmRyYXdCb3JkZXI9dHJ1ZTt0aGlzLnNoYWRvdz10cnVlO3RoaXMuc2hhZG93QW5nbGU9NDU7dGhpcy5zaGFkb3dPZmZzZXQ9MS41O3RoaXMuc2hhZG93V2lkdGg9Mzt0aGlzLnNoYWRvd0RlcHRoPTM7dGhpcy5zaGFkb3dDb2xvcj1udWxsO3RoaXMuc2hhZG93QWxwaGE9IjAuMDciO3RoaXMuX2xlZnQ7dGhpcy5fdG9wO3RoaXMuX3JpZ2h0O3RoaXMuX2JvdHRvbTt0aGlzLl93aWR0aDt0aGlzLl9oZWlnaHQ7dGhpcy5fYXhlcz1bXTt0aGlzLnJlbmRlcmVyPUwuanFwbG90LkNhbnZhc0dyaWRSZW5kZXJlcjt0aGlzLnJlbmRlcmVyT3B0aW9ucz17fTt0aGlzLl9vZmZzZXRzPXt0b3A6bnVsbCxib3R0b206bnVsbCxsZWZ0Om51bGwscmlnaHQ6bnVsbH19TS5wcm90b3R5cGU9bmV3IEwuanFwbG90LkVsZW1Db250YWluZXIoKTtNLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NO00ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtpZihMLmlzRnVuY3Rpb24odGhpcy5yZW5kZXJlcikpe3RoaXMucmVuZGVyZXI9bmV3IHRoaXMucmVuZGVyZXIoKX10aGlzLnJlbmRlcmVyLmluaXQuY2FsbCh0aGlzLHRoaXMucmVuZGVyZXJPcHRpb25zKX07TS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihhaCxhaSl7dGhpcy5fb2Zmc2V0cz1haDtyZXR1cm4gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50LmNhbGwodGhpcyxhaSl9O00ucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLmRyYXcuY2FsbCh0aGlzKX07TC5qcXBsb3QuR2VuZXJpY0NhbnZhcz1mdW5jdGlvbigpe0wuanFwbG90LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTt0aGlzLl9jdHh9O0wuanFwbG90LkdlbmVyaWNDYW52YXMucHJvdG90eXBlPW5ldyBMLmpxcGxvdC5FbGVtQ29udGFpbmVyKCk7TC5qcXBsb3QuR2VuZXJpY0NhbnZhcy5wcm90b3R5cGUuY29uc3RydWN0b3I9TC5qcXBsb3QuR2VuZXJpY0NhbnZhcztMLmpxcGxvdC5HZW5lcmljQ2FudmFzLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGFsLGFqLGFpLGFtKXt0aGlzLl9vZmZzZXRzPWFsO3ZhciBhaD0ianFwbG90IjtpZihhaiE9dSl7YWg9YWp9dmFyIGFrO2FrPWFtLmNhbnZhc01hbmFnZXIuZ2V0Q2FudmFzKCk7aWYoYWkhPW51bGwpe3RoaXMuX3Bsb3REaW1lbnNpb25zPWFpfWFrLndpZHRoPXRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoLXRoaXMuX29mZnNldHMubGVmdC10aGlzLl9vZmZzZXRzLnJpZ2h0O2FrLmhlaWdodD10aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQtdGhpcy5fb2Zmc2V0cy50b3AtdGhpcy5fb2Zmc2V0cy5ib3R0b207dGhpcy5fZWxlbT1MKGFrKTt0aGlzLl9lbGVtLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OnRoaXMuX29mZnNldHMubGVmdCx0b3A6dGhpcy5fb2Zmc2V0cy50b3B9KTt0aGlzLl9lbGVtLmFkZENsYXNzKGFoKTthaz1hbS5jYW52YXNNYW5hZ2VyLmluaXRDYW52YXMoYWspO2FrPW51bGw7cmV0dXJuIHRoaXMuX2VsZW19O0wuanFwbG90LkdlbmVyaWNDYW52YXMucHJvdG90eXBlLnNldENvbnRleHQ9ZnVuY3Rpb24oKXt0aGlzLl9jdHg9dGhpcy5fZWxlbS5nZXQoMCkuZ2V0Q29udGV4dCgiMmQiKTtyZXR1cm4gdGhpcy5fY3R4fTtMLmpxcGxvdC5HZW5lcmljQ2FudmFzLnByb3RvdHlwZS5yZXNldENhbnZhcz1mdW5jdGlvbigpe2lmKHRoaXMuX2VsZW0pe2lmKEwuanFwbG90LnVzZV9leGNhbnZhcyYmd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50IT09dSl7d2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50KHRoaXMuX2VsZW0uZ2V0KDApKX10aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKX10aGlzLl9jdHg9bnVsbH07TC5qcXBsb3QuSG9va3NNYW5hZ2VyPWZ1bmN0aW9uKCl7dGhpcy5ob29rcz1bXTt0aGlzLmFyZ3M9W119O0wuanFwbG90Lkhvb2tzTWFuYWdlci5wcm90b3R5cGUuYWRkT25jZT1mdW5jdGlvbihhayxhaSl7YWk9YWl8fFtdO3ZhciBhbD1mYWxzZTtmb3IodmFyIGFqPTAsYWg9dGhpcy5ob29rcy5sZW5ndGg7YWo8YWg7YWorKyl7aWYodGhpcy5ob29rc1thal09PWFrKXthbD10cnVlfX1pZighYWwpe3RoaXMuaG9va3MucHVzaChhayk7dGhpcy5hcmdzLnB1c2goYWkpfX07TC5qcXBsb3QuSG9va3NNYW5hZ2VyLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYWksYWgpe2FoPWFofHxbXTt0aGlzLmhvb2tzLnB1c2goYWkpO3RoaXMuYXJncy5wdXNoKGFoKX07TC5qcXBsb3QuRXZlbnRMaXN0ZW5lck1hbmFnZXI9ZnVuY3Rpb24oKXt0aGlzLmhvb2tzPVtdfTtMLmpxcGxvdC5FdmVudExpc3RlbmVyTWFuYWdlci5wcm90b3R5cGUuYWRkT25jZT1mdW5jdGlvbihhbCxhayl7dmFyIGFtPWZhbHNlLGFqLGFpO2Zvcih2YXIgYWk9MCxhaD10aGlzLmhvb2tzLmxlbmd0aDthaTxhaDthaSsrKXthaj10aGlzLmhvb2tzW2FpXTtpZihhalswXT09YWwmJmFqWzFdPT1hayl7YW09dHJ1ZX19aWYoIWFtKXt0aGlzLmhvb2tzLnB1c2goW2FsLGFrXSl9fTtMLmpxcGxvdC5FdmVudExpc3RlbmVyTWFuYWdlci5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGFpLGFoKXt0aGlzLmhvb2tzLnB1c2goW2FpLGFoXSl9O3ZhciBVPVsieU1pZEF4aXMiLCJ4YXhpcyIsInlheGlzIiwieDJheGlzIiwieTJheGlzIiwieTNheGlzIiwieTRheGlzIiwieTVheGlzIiwieTZheGlzIiwieTdheGlzIiwieThheGlzIiwieTlheGlzIl07ZnVuY3Rpb24gUigpe3RoaXMuYW5pbWF0ZT1mYWxzZTt0aGlzLmFuaW1hdGVSZXBsb3Q9ZmFsc2U7dGhpcy5heGVzPXt4YXhpczpuZXcgdygieGF4aXMiKSx5YXhpczpuZXcgdygieWF4aXMiKSx4MmF4aXM6bmV3IHcoIngyYXhpcyIpLHkyYXhpczpuZXcgdygieTJheGlzIikseTNheGlzOm5ldyB3KCJ5M2F4aXMiKSx5NGF4aXM6bmV3IHcoInk0YXhpcyIpLHk1YXhpczpuZXcgdygieTVheGlzIikseTZheGlzOm5ldyB3KCJ5NmF4aXMiKSx5N2F4aXM6bmV3IHcoInk3YXhpcyIpLHk4YXhpczpuZXcgdygieThheGlzIikseTlheGlzOm5ldyB3KCJ5OWF4aXMiKSx5TWlkQXhpczpuZXcgdygieU1pZEF4aXMiKX07dGhpcy5iYXNlQ2FudmFzPW5ldyBMLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7dGhpcy5jYXB0dXJlUmlnaHRDbGljaz1mYWxzZTt0aGlzLmRhdGE9W107dGhpcy5kYXRhUmVuZGVyZXI7dGhpcy5kYXRhUmVuZGVyZXJPcHRpb25zO3RoaXMuZGVmYXVsdHM9e2F4ZXNEZWZhdWx0czp7fSxheGVzOnt4YXhpczp7fSx5YXhpczp7fSx4MmF4aXM6e30seTJheGlzOnt9LHkzYXhpczp7fSx5NGF4aXM6e30seTVheGlzOnt9LHk2YXhpczp7fSx5N2F4aXM6e30seThheGlzOnt9LHk5YXhpczp7fSx5TWlkQXhpczp7fX0sc2VyaWVzRGVmYXVsdHM6e30sc2VyaWVzOltdfTt0aGlzLmRlZmF1bHRBeGlzU3RhcnQ9MTt0aGlzLmRyYXdJZkhpZGRlbj1mYWxzZTt0aGlzLmV2ZW50Q2FudmFzPW5ldyBMLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7dGhpcy5maWxsQmV0d2Vlbj17c2VyaWVzMTpudWxsLHNlcmllczI6bnVsbCxjb2xvcjpudWxsLGJhc2VTZXJpZXM6MCxmaWxsOnRydWV9O3RoaXMuZm9udEZhbWlseTt0aGlzLmZvbnRTaXplO3RoaXMuZ3JpZD1uZXcgTSgpO3RoaXMubGVnZW5kPW5ldyBxKCk7dGhpcy5ub0RhdGFJbmRpY2F0b3I9e3Nob3c6ZmFsc2UsaW5kaWNhdG9yOiJMb2FkaW5nIERhdGEuLi4iLGF4ZXM6e3hheGlzOnttaW46MCxtYXg6MTAsdGlja0ludGVydmFsOjIsc2hvdzp0cnVlfSx5YXhpczp7bWluOjAsbWF4OjEyLHRpY2tJbnRlcnZhbDozLHNob3c6dHJ1ZX19fTt0aGlzLm5lZ2F0aXZlU2VyaWVzQ29sb3JzPUwuanFwbG90LmNvbmZpZy5kZWZhdWx0TmVnYXRpdmVDb2xvcnM7dGhpcy5vcHRpb25zPXt9O3RoaXMucHJldmlvdXNTZXJpZXNTdGFjaz1bXTt0aGlzLnBsdWdpbnM9e307dGhpcy5zZXJpZXM9W107dGhpcy5zZXJpZXNTdGFjaz1bXTt0aGlzLnNlcmllc0NvbG9ycz1MLmpxcGxvdC5jb25maWcuZGVmYXVsdENvbG9yczt0aGlzLnNvcnREYXRhPXRydWU7dGhpcy5zdGFja1Nlcmllcz1mYWxzZTt0aGlzLnN5bmNYVGlja3M9dHJ1ZTt0aGlzLnN5bmNZVGlja3M9dHJ1ZTt0aGlzLnRhcmdldD1udWxsO3RoaXMudGFyZ2V0SWQ9bnVsbDt0aGlzLnRleHRDb2xvcjt0aGlzLnRpdGxlPW5ldyB5KCk7dGhpcy5fZHJhd0NvdW50PTA7dGhpcy5fc3VteT0wO3RoaXMuX3N1bXg9MDt0aGlzLl9zdGFja0RhdGE9W107dGhpcy5fcGxvdERhdGE9W107dGhpcy5fd2lkdGg9bnVsbDt0aGlzLl9oZWlnaHQ9bnVsbDt0aGlzLl9wbG90RGltZW5zaW9ucz17aGVpZ2h0Om51bGwsd2lkdGg6bnVsbH07dGhpcy5fZ3JpZFBhZGRpbmc9e3RvcDpudWxsLHJpZ2h0Om51bGwsYm90dG9tOm51bGwsbGVmdDpudWxsfTt0aGlzLl9kZWZhdWx0R3JpZFBhZGRpbmc9e3RvcDoxMCxyaWdodDoxMCxib3R0b206MjMsbGVmdDoxMH07dGhpcy5fYWRkRG9tUmVmZXJlbmNlPUwuanFwbG90LmNvbmZpZy5hZGREb21SZWZlcmVuY2U7dGhpcy5wcmVJbml0SG9va3M9bmV3IEwuanFwbG90Lkhvb2tzTWFuYWdlcigpO3RoaXMucG9zdEluaXRIb29rcz1uZXcgTC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5wcmVQYXJzZU9wdGlvbnNIb29rcz1uZXcgTC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5wb3N0UGFyc2VPcHRpb25zSG9va3M9bmV3IEwuanFwbG90Lkhvb2tzTWFuYWdlcigpO3RoaXMucHJlRHJhd0hvb2tzPW5ldyBMLmpxcGxvdC5Ib29rc01hbmFnZXIoKTt0aGlzLnBvc3REcmF3SG9va3M9bmV3IEwuanFwbG90Lkhvb2tzTWFuYWdlcigpO3RoaXMucHJlRHJhd1Nlcmllc0hvb2tzPW5ldyBMLmpxcGxvdC5Ib29rc01hbmFnZXIoKTt0aGlzLnBvc3REcmF3U2VyaWVzSG9va3M9bmV3IEwuanFwbG90Lkhvb2tzTWFuYWdlcigpO3RoaXMucHJlRHJhd0xlZ2VuZEhvb2tzPW5ldyBMLmpxcGxvdC5Ib29rc01hbmFnZXIoKTt0aGlzLmFkZExlZ2VuZFJvd0hvb2tzPW5ldyBMLmpxcGxvdC5Ib29rc01hbmFnZXIoKTt0aGlzLnByZVNlcmllc0luaXRIb29rcz1uZXcgTC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5wb3N0U2VyaWVzSW5pdEhvb2tzPW5ldyBMLmpxcGxvdC5Ib29rc01hbmFnZXIoKTt0aGlzLnByZVBhcnNlU2VyaWVzT3B0aW9uc0hvb2tzPW5ldyBMLmpxcGxvdC5Ib29rc01hbmFnZXIoKTt0aGlzLnBvc3RQYXJzZVNlcmllc09wdGlvbnNIb29rcz1uZXcgTC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5ldmVudExpc3RlbmVySG9va3M9bmV3IEwuanFwbG90LkV2ZW50TGlzdGVuZXJNYW5hZ2VyKCk7dGhpcy5wcmVEcmF3U2VyaWVzU2hhZG93SG9va3M9bmV3IEwuanFwbG90Lkhvb2tzTWFuYWdlcigpO3RoaXMucG9zdERyYXdTZXJpZXNTaGFkb3dIb29rcz1uZXcgTC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5jb2xvckdlbmVyYXRvcj1uZXcgTC5qcXBsb3QuQ29sb3JHZW5lcmF0b3IoKTt0aGlzLm5lZ2F0aXZlQ29sb3JHZW5lcmF0b3I9bmV3IEwuanFwbG90LkNvbG9yR2VuZXJhdG9yKCk7dGhpcy5jYW52YXNNYW5hZ2VyPW5ldyBMLmpxcGxvdC5DYW52YXNNYW5hZ2VyKCk7dGhpcy50aGVtZUVuZ2luZT1uZXcgTC5qcXBsb3QuVGhlbWVFbmdpbmUoKTt2YXIgYWo9MDt0aGlzLmluaXQ9ZnVuY3Rpb24oYXYsYXIsYXkpe2F5PWF5fHx7fTtmb3IodmFyIGF0PTA7YXQ8TC5qcXBsb3QucHJlSW5pdEhvb2tzLmxlbmd0aDthdCsrKXtMLmpxcGxvdC5wcmVJbml0SG9va3NbYXRdLmNhbGwodGhpcyxhdixhcixheSl9Zm9yKHZhciBhdD0wO2F0PHRoaXMucHJlSW5pdEhvb2tzLmhvb2tzLmxlbmd0aDthdCsrKXt0aGlzLnByZUluaXRIb29rcy5ob29rc1thdF0uY2FsbCh0aGlzLGF2LGFyLGF5KX10aGlzLnRhcmdldElkPSIjIithdjt0aGlzLnRhcmdldD1MKCIjIithdik7aWYodGhpcy5fYWRkRG9tUmVmZXJlbmNlKXt0aGlzLnRhcmdldC5kYXRhKCJqcXBsb3QiLHRoaXMpfXRoaXMudGFyZ2V0LnJlbW92ZUNsYXNzKCJqcXBsb3QtZXJyb3IiKTtpZighdGhpcy50YXJnZXQuZ2V0KDApKXt0aHJvdyBuZXcgRXJyb3IoIk5vIHBsb3QgdGFyZ2V0IHNwZWNpZmllZCIpfWlmKHRoaXMudGFyZ2V0LmNzcygicG9zaXRpb24iKT09InN0YXRpYyIpe3RoaXMudGFyZ2V0LmNzcygicG9zaXRpb24iLCJyZWxhdGl2ZSIpfWlmKCF0aGlzLnRhcmdldC5oYXNDbGFzcygianFwbG90LXRhcmdldCIpKXt0aGlzLnRhcmdldC5hZGRDbGFzcygianFwbG90LXRhcmdldCIpfWlmKCF0aGlzLnRhcmdldC5oZWlnaHQoKSl7dmFyIGF1O2lmKGF5JiZheS5oZWlnaHQpe2F1PXBhcnNlSW50KGF5LmhlaWdodCwxMCl9ZWxzZXtpZih0aGlzLnRhcmdldC5hdHRyKCJkYXRhLWhlaWdodCIpKXthdT1wYXJzZUludCh0aGlzLnRhcmdldC5hdHRyKCJkYXRhLWhlaWdodCIpLDEwKX1lbHNle2F1PXBhcnNlSW50KEwuanFwbG90LmNvbmZpZy5kZWZhdWx0SGVpZ2h0LDEwKX19dGhpcy5faGVpZ2h0PWF1O3RoaXMudGFyZ2V0LmNzcygiaGVpZ2h0IixhdSsicHgiKX1lbHNle3RoaXMuX2hlaWdodD1hdT10aGlzLnRhcmdldC5oZWlnaHQoKX1pZighdGhpcy50YXJnZXQud2lkdGgoKSl7dmFyIGF3O2lmKGF5JiZheS53aWR0aCl7YXc9cGFyc2VJbnQoYXkud2lkdGgsMTApfWVsc2V7aWYodGhpcy50YXJnZXQuYXR0cigiZGF0YS13aWR0aCIpKXthdz1wYXJzZUludCh0aGlzLnRhcmdldC5hdHRyKCJkYXRhLXdpZHRoIiksMTApfWVsc2V7YXc9cGFyc2VJbnQoTC5qcXBsb3QuY29uZmlnLmRlZmF1bHRXaWR0aCwxMCl9fXRoaXMuX3dpZHRoPWF3O3RoaXMudGFyZ2V0LmNzcygid2lkdGgiLGF3KyJweCIpfWVsc2V7dGhpcy5fd2lkdGg9YXc9dGhpcy50YXJnZXQud2lkdGgoKX1mb3IodmFyIGF0PTAsYXA9VS5sZW5ndGg7YXQ8YXA7YXQrKyl7dGhpcy5heGVzW1VbYXRdXT1uZXcgdyhVW2F0XSl9dGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0PXRoaXMuX2hlaWdodDt0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aD10aGlzLl93aWR0aDt0aGlzLmdyaWQuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMudGl0bGUuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMuYmFzZUNhbnZhcy5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5ldmVudENhbnZhcy5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5sZWdlbmQuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO2lmKHRoaXMuX2hlaWdodDw9MHx8dGhpcy5fd2lkdGg8PTB8fCF0aGlzLl9oZWlnaHR8fCF0aGlzLl93aWR0aCl7dGhyb3cgbmV3IEVycm9yKCJDYW52YXMgZGltZW5zaW9uIG5vdCBzZXQiKX1pZihheS5kYXRhUmVuZGVyZXImJkwuaXNGdW5jdGlvbihheS5kYXRhUmVuZGVyZXIpKXtpZihheS5kYXRhUmVuZGVyZXJPcHRpb25zKXt0aGlzLmRhdGFSZW5kZXJlck9wdGlvbnM9YXkuZGF0YVJlbmRlcmVyT3B0aW9uc310aGlzLmRhdGFSZW5kZXJlcj1heS5kYXRhUmVuZGVyZXI7YXI9dGhpcy5kYXRhUmVuZGVyZXIoYXIsdGhpcyx0aGlzLmRhdGFSZW5kZXJlck9wdGlvbnMpfWlmKGF5Lm5vRGF0YUluZGljYXRvciYmTC5pc1BsYWluT2JqZWN0KGF5Lm5vRGF0YUluZGljYXRvcikpe0wuZXh0ZW5kKHRydWUsdGhpcy5ub0RhdGFJbmRpY2F0b3IsYXkubm9EYXRhSW5kaWNhdG9yKX1pZihhcj09bnVsbHx8TC5pc0FycmF5KGFyKT09ZmFsc2V8fGFyLmxlbmd0aD09MHx8TC5pc0FycmF5KGFyWzBdKT09ZmFsc2V8fGFyWzBdLmxlbmd0aD09MCl7aWYodGhpcy5ub0RhdGFJbmRpY2F0b3Iuc2hvdz09ZmFsc2Upe3Rocm93IG5ldyBFcnJvcigiTm8gZGF0YSBzcGVjaWZpZWQiKX1lbHNle2Zvcih2YXIgYWwgaW4gdGhpcy5ub0RhdGFJbmRpY2F0b3IuYXhlcyl7Zm9yKHZhciBhbiBpbiB0aGlzLm5vRGF0YUluZGljYXRvci5heGVzW2FsXSl7dGhpcy5heGVzW2FsXVthbl09dGhpcy5ub0RhdGFJbmRpY2F0b3IuYXhlc1thbF1bYW5dfX10aGlzLnBvc3REcmF3SG9va3MuYWRkKGZ1bmN0aW9uKCl7dmFyIGFEPXRoaXMuZXZlbnRDYW52YXMuZ2V0SGVpZ2h0KCk7dmFyIGFBPXRoaXMuZXZlbnRDYW52YXMuZ2V0V2lkdGgoKTt2YXIgYXo9TCgnPGRpdiBjbGFzcz0ianFwbG90LW5vRGF0YS1jb250YWluZXIiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiPjwvZGl2PicpO3RoaXMudGFyZ2V0LmFwcGVuZChheik7YXouaGVpZ2h0KGFEKTthei53aWR0aChhQSk7YXouY3NzKCJ0b3AiLHRoaXMuZXZlbnRDYW52YXMuX29mZnNldHMudG9wKTthei5jc3MoImxlZnQiLHRoaXMuZXZlbnRDYW52YXMuX29mZnNldHMubGVmdCk7dmFyIGFDPUwoJzxkaXYgY2xhc3M9ImpxcGxvdC1ub0RhdGEtY29udGVudHMiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1sZWZ0OmF1dG87IG1hcmdpbi1yaWdodDphdXRvOyI+PC9kaXY+Jyk7YXouYXBwZW5kKGFDKTthQy5odG1sKHRoaXMubm9EYXRhSW5kaWNhdG9yLmluZGljYXRvcik7dmFyIGFCPWFDLmhlaWdodCgpO3ZhciBheD1hQy53aWR0aCgpO2FDLmhlaWdodChhQik7YUMud2lkdGgoYXgpO2FDLmNzcygidG9wIiwoYUQtYUIpLzIrInB4Iil9KX19dGhpcy5kYXRhPUwuZXh0ZW5kKHRydWUsW10sYXIpO3RoaXMucGFyc2VPcHRpb25zKGF5KTtpZih0aGlzLnRleHRDb2xvcil7dGhpcy50YXJnZXQuY3NzKCJjb2xvciIsdGhpcy50ZXh0Q29sb3IpfWlmKHRoaXMuZm9udEZhbWlseSl7dGhpcy50YXJnZXQuY3NzKCJmb250LWZhbWlseSIsdGhpcy5mb250RmFtaWx5KX1pZih0aGlzLmZvbnRTaXplKXt0aGlzLnRhcmdldC5jc3MoImZvbnQtc2l6ZSIsdGhpcy5mb250U2l6ZSl9dGhpcy50aXRsZS5pbml0KCk7dGhpcy5sZWdlbmQuaW5pdCgpO3RoaXMuX3N1bXk9MDt0aGlzLl9zdW14PTA7dGhpcy5jb21wdXRlUGxvdERhdGEoKTtmb3IodmFyIGF0PTA7YXQ8dGhpcy5zZXJpZXMubGVuZ3RoO2F0Kyspe3RoaXMuc2VyaWVzU3RhY2sucHVzaChhdCk7dGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrLnB1c2goYXQpO3RoaXMuc2VyaWVzW2F0XS5zaGFkb3dDYW52YXMuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMuc2VyaWVzW2F0XS5jYW52YXMuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO2Zvcih2YXIgYXE9MDthcTxMLmpxcGxvdC5wcmVTZXJpZXNJbml0SG9va3MubGVuZ3RoO2FxKyspe0wuanFwbG90LnByZVNlcmllc0luaXRIb29rc1thcV0uY2FsbCh0aGlzLnNlcmllc1thdF0sYXYsdGhpcy5kYXRhLHRoaXMub3B0aW9ucy5zZXJpZXNEZWZhdWx0cyx0aGlzLm9wdGlvbnMuc2VyaWVzW2F0XSx0aGlzKX1mb3IodmFyIGFxPTA7YXE8dGhpcy5wcmVTZXJpZXNJbml0SG9va3MuaG9va3MubGVuZ3RoO2FxKyspe3RoaXMucHJlU2VyaWVzSW5pdEhvb2tzLmhvb2tzW2FxXS5jYWxsKHRoaXMuc2VyaWVzW2F0XSxhdix0aGlzLmRhdGEsdGhpcy5vcHRpb25zLnNlcmllc0RlZmF1bHRzLHRoaXMub3B0aW9ucy5zZXJpZXNbYXRdLHRoaXMpfXRoaXMuc2VyaWVzW2F0XS5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5zZXJpZXNbYXRdLmluaXQoYXQsdGhpcy5ncmlkLmJvcmRlcldpZHRoLHRoaXMpO2Zvcih2YXIgYXE9MDthcTxMLmpxcGxvdC5wb3N0U2VyaWVzSW5pdEhvb2tzLmxlbmd0aDthcSsrKXtMLmpxcGxvdC5wb3N0U2VyaWVzSW5pdEhvb2tzW2FxXS5jYWxsKHRoaXMuc2VyaWVzW2F0XSxhdix0aGlzLmRhdGEsdGhpcy5vcHRpb25zLnNlcmllc0RlZmF1bHRzLHRoaXMub3B0aW9ucy5zZXJpZXNbYXRdLHRoaXMpfWZvcih2YXIgYXE9MDthcTx0aGlzLnBvc3RTZXJpZXNJbml0SG9va3MuaG9va3MubGVuZ3RoO2FxKyspe3RoaXMucG9zdFNlcmllc0luaXRIb29rcy5ob29rc1thcV0uY2FsbCh0aGlzLnNlcmllc1thdF0sYXYsdGhpcy5kYXRhLHRoaXMub3B0aW9ucy5zZXJpZXNEZWZhdWx0cyx0aGlzLm9wdGlvbnMuc2VyaWVzW2F0XSx0aGlzKX10aGlzLl9zdW15Kz10aGlzLnNlcmllc1thdF0uX3N1bXk7dGhpcy5fc3VteCs9dGhpcy5zZXJpZXNbYXRdLl9zdW14fXZhciBhbSxhbztmb3IodmFyIGF0PTAsYXA9VS5sZW5ndGg7YXQ8YXA7YXQrKyl7YW09VVthdF07YW89dGhpcy5heGVzW2FtXTthby5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7YW8uaW5pdCgpO2lmKHRoaXMuYXhlc1thbV0uYm9yZGVyQ29sb3I9PW51bGwpe2lmKGFtLmNoYXJBdCgwKSE9PSJ4IiYmYW8udXNlU2VyaWVzQ29sb3I9PT10cnVlJiZhby5zaG93KXthby5ib3JkZXJDb2xvcj1hby5fc2VyaWVzWzBdLmNvbG9yfWVsc2V7YW8uYm9yZGVyQ29sb3I9dGhpcy5ncmlkLmJvcmRlckNvbG9yfX19aWYodGhpcy5zb3J0RGF0YSl7YWgodGhpcy5zZXJpZXMpfXRoaXMuZ3JpZC5pbml0KCk7dGhpcy5ncmlkLl9heGVzPXRoaXMuYXhlczt0aGlzLmxlZ2VuZC5fc2VyaWVzPXRoaXMuc2VyaWVzO2Zvcih2YXIgYXQ9MDthdDxMLmpxcGxvdC5wb3N0SW5pdEhvb2tzLmxlbmd0aDthdCsrKXtMLmpxcGxvdC5wb3N0SW5pdEhvb2tzW2F0XS5jYWxsKHRoaXMsYXYsdGhpcy5kYXRhLGF5KX1mb3IodmFyIGF0PTA7YXQ8dGhpcy5wb3N0SW5pdEhvb2tzLmhvb2tzLmxlbmd0aDthdCsrKXt0aGlzLnBvc3RJbml0SG9va3MuaG9va3NbYXRdLmNhbGwodGhpcyxhdix0aGlzLmRhdGEsYXkpfX07dGhpcy5yZXNldEF4ZXNTY2FsZT1mdW5jdGlvbihhcSxhbSl7dmFyIGFvPWFtfHx7fTt2YXIgYXA9YXF8fHRoaXMuYXhlcztpZihhcD09PXRydWUpe2FwPXRoaXMuYXhlc31pZihMLmlzQXJyYXkoYXApKXtmb3IodmFyIGFuPTA7YW48YXAubGVuZ3RoO2FuKyspe3RoaXMuYXhlc1thcFthbl1dLnJlc2V0U2NhbGUoYW9bYXBbYW5dXSl9fWVsc2V7aWYodHlwZW9mKGFwKT09PSJvYmplY3QiKXtmb3IodmFyIGFsIGluIGFwKXt0aGlzLmF4ZXNbYWxdLnJlc2V0U2NhbGUoYW9bYWxdKX19fX07dGhpcy5yZUluaXRpYWxpemU9ZnVuY3Rpb24oYXUsYWwpe3ZhciBheT1MLmV4dGVuZCh0cnVlLHt9LHRoaXMub3B0aW9ucyxhbCk7dmFyIGF3PXRoaXMudGFyZ2V0SWQuc3Vic3RyKDEpO3ZhciBhcj0oYXU9PW51bGwpP3RoaXMuZGF0YTphdTtmb3IodmFyIGF2PTA7YXY8TC5qcXBsb3QucHJlSW5pdEhvb2tzLmxlbmd0aDthdisrKXtMLmpxcGxvdC5wcmVJbml0SG9va3NbYXZdLmNhbGwodGhpcyxhdyxhcixheSl9Zm9yKHZhciBhdj0wO2F2PHRoaXMucHJlSW5pdEhvb2tzLmhvb2tzLmxlbmd0aDthdisrKXt0aGlzLnByZUluaXRIb29rcy5ob29rc1thdl0uY2FsbCh0aGlzLGF3LGFyLGF5KX10aGlzLl9oZWlnaHQ9dGhpcy50YXJnZXQuaGVpZ2h0KCk7dGhpcy5fd2lkdGg9dGhpcy50YXJnZXQud2lkdGgoKTtpZih0aGlzLl9oZWlnaHQ8PTB8fHRoaXMuX3dpZHRoPD0wfHwhdGhpcy5faGVpZ2h0fHwhdGhpcy5fd2lkdGgpe3Rocm93IG5ldyBFcnJvcigiVGFyZ2V0IGRpbWVuc2lvbiBub3Qgc2V0Iil9dGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0PXRoaXMuX2hlaWdodDt0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aD10aGlzLl93aWR0aDt0aGlzLmdyaWQuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMudGl0bGUuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMuYmFzZUNhbnZhcy5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5ldmVudENhbnZhcy5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5sZWdlbmQuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO3ZhciBhbSxheCxhdCxhbztmb3IodmFyIGF2PTAsYXE9VS5sZW5ndGg7YXY8YXE7YXYrKyl7YW09VVthdl07YW89dGhpcy5heGVzW2FtXTtheD1hby5fdGlja3M7Zm9yKHZhciBhdD0wLGFwPWF4Lmxlbmd0aDthdDxhcDthdCsrKXt2YXIgYW49YXhbYXRdLl9lbGVtO2lmKGFuKXtpZihMLmpxcGxvdC51c2VfZXhjYW52YXMmJndpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIudW5pbml0RWxlbWVudCE9PXUpe3dpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIudW5pbml0RWxlbWVudChhbi5nZXQoMCkpfWFuLmVtcHR5Rm9yY2UoKTthbj1udWxsO2F4Ll9lbGVtPW51bGx9fWF4PW51bGw7ZGVsZXRlIGFvLnRpY2tzO2RlbGV0ZSBhby5fdGlja3M7dGhpcy5heGVzW2FtXT1uZXcgdyhhbSk7dGhpcy5heGVzW2FtXS5fcGxvdFdpZHRoPXRoaXMuX3dpZHRoO3RoaXMuYXhlc1thbV0uX3Bsb3RIZWlnaHQ9dGhpcy5faGVpZ2h0fWlmKGF1KXtpZihheS5kYXRhUmVuZGVyZXImJkwuaXNGdW5jdGlvbihheS5kYXRhUmVuZGVyZXIpKXtpZihheS5kYXRhUmVuZGVyZXJPcHRpb25zKXt0aGlzLmRhdGFSZW5kZXJlck9wdGlvbnM9YXkuZGF0YVJlbmRlcmVyT3B0aW9uc310aGlzLmRhdGFSZW5kZXJlcj1heS5kYXRhUmVuZGVyZXI7YXU9dGhpcy5kYXRhUmVuZGVyZXIoYXUsdGhpcyx0aGlzLmRhdGFSZW5kZXJlck9wdGlvbnMpfXRoaXMuZGF0YT1MLmV4dGVuZCh0cnVlLFtdLGF1KX1pZihhbCl7dGhpcy5wYXJzZU9wdGlvbnMoYXkpfXRoaXMudGl0bGUuX3Bsb3RXaWR0aD10aGlzLl93aWR0aDtpZih0aGlzLnRleHRDb2xvcil7dGhpcy50YXJnZXQuY3NzKCJjb2xvciIsdGhpcy50ZXh0Q29sb3IpfWlmKHRoaXMuZm9udEZhbWlseSl7dGhpcy50YXJnZXQuY3NzKCJmb250LWZhbWlseSIsdGhpcy5mb250RmFtaWx5KX1pZih0aGlzLmZvbnRTaXplKXt0aGlzLnRhcmdldC5jc3MoImZvbnQtc2l6ZSIsdGhpcy5mb250U2l6ZSl9dGhpcy50aXRsZS5pbml0KCk7dGhpcy5sZWdlbmQuaW5pdCgpO3RoaXMuX3N1bXk9MDt0aGlzLl9zdW14PTA7dGhpcy5zZXJpZXNTdGFjaz1bXTt0aGlzLnByZXZpb3VzU2VyaWVzU3RhY2s9W107dGhpcy5jb21wdXRlUGxvdERhdGEoKTtmb3IodmFyIGF2PTAsYXE9dGhpcy5zZXJpZXMubGVuZ3RoO2F2PGFxO2F2Kyspe3RoaXMuc2VyaWVzU3RhY2sucHVzaChhdik7dGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrLnB1c2goYXYpO3RoaXMuc2VyaWVzW2F2XS5zaGFkb3dDYW52YXMuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMuc2VyaWVzW2F2XS5jYW52YXMuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO2Zvcih2YXIgYXQ9MDthdDxMLmpxcGxvdC5wcmVTZXJpZXNJbml0SG9va3MubGVuZ3RoO2F0Kyspe0wuanFwbG90LnByZVNlcmllc0luaXRIb29rc1thdF0uY2FsbCh0aGlzLnNlcmllc1thdl0sYXcsdGhpcy5kYXRhLHRoaXMub3B0aW9ucy5zZXJpZXNEZWZhdWx0cyx0aGlzLm9wdGlvbnMuc2VyaWVzW2F2XSx0aGlzKX1mb3IodmFyIGF0PTA7YXQ8dGhpcy5wcmVTZXJpZXNJbml0SG9va3MuaG9va3MubGVuZ3RoO2F0Kyspe3RoaXMucHJlU2VyaWVzSW5pdEhvb2tzLmhvb2tzW2F0XS5jYWxsKHRoaXMuc2VyaWVzW2F2XSxhdyx0aGlzLmRhdGEsdGhpcy5vcHRpb25zLnNlcmllc0RlZmF1bHRzLHRoaXMub3B0aW9ucy5zZXJpZXNbYXZdLHRoaXMpfXRoaXMuc2VyaWVzW2F2XS5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5zZXJpZXNbYXZdLmluaXQoYXYsdGhpcy5ncmlkLmJvcmRlcldpZHRoLHRoaXMpO2Zvcih2YXIgYXQ9MDthdDxMLmpxcGxvdC5wb3N0U2VyaWVzSW5pdEhvb2tzLmxlbmd0aDthdCsrKXtMLmpxcGxvdC5wb3N0U2VyaWVzSW5pdEhvb2tzW2F0XS5jYWxsKHRoaXMuc2VyaWVzW2F2XSxhdyx0aGlzLmRhdGEsdGhpcy5vcHRpb25zLnNlcmllc0RlZmF1bHRzLHRoaXMub3B0aW9ucy5zZXJpZXNbYXZdLHRoaXMpfWZvcih2YXIgYXQ9MDthdDx0aGlzLnBvc3RTZXJpZXNJbml0SG9va3MuaG9va3MubGVuZ3RoO2F0Kyspe3RoaXMucG9zdFNlcmllc0luaXRIb29rcy5ob29rc1thdF0uY2FsbCh0aGlzLnNlcmllc1thdl0sYXcsdGhpcy5kYXRhLHRoaXMub3B0aW9ucy5zZXJpZXNEZWZhdWx0cyx0aGlzLm9wdGlvbnMuc2VyaWVzW2F2XSx0aGlzKX10aGlzLl9zdW15Kz10aGlzLnNlcmllc1thdl0uX3N1bXk7dGhpcy5fc3VteCs9dGhpcy5zZXJpZXNbYXZdLl9zdW14fWZvcih2YXIgYXY9MCxhcT1VLmxlbmd0aDthdjxhcTthdisrKXthbT1VW2F2XTthbz10aGlzLmF4ZXNbYW1dO2FvLl9wbG90RGltZW5zaW9ucz10aGlzLl9wbG90RGltZW5zaW9uczthby5pbml0KCk7aWYoYW8uYm9yZGVyQ29sb3I9PW51bGwpe2lmKGFtLmNoYXJBdCgwKSE9PSJ4IiYmYW8udXNlU2VyaWVzQ29sb3I9PT10cnVlJiZhby5zaG93KXthby5ib3JkZXJDb2xvcj1hby5fc2VyaWVzWzBdLmNvbG9yfWVsc2V7YW8uYm9yZGVyQ29sb3I9dGhpcy5ncmlkLmJvcmRlckNvbG9yfX19aWYodGhpcy5zb3J0RGF0YSl7YWgodGhpcy5zZXJpZXMpfXRoaXMuZ3JpZC5pbml0KCk7dGhpcy5ncmlkLl9heGVzPXRoaXMuYXhlczt0aGlzLmxlZ2VuZC5fc2VyaWVzPXRoaXMuc2VyaWVzO2Zvcih2YXIgYXY9MCxhcT1MLmpxcGxvdC5wb3N0SW5pdEhvb2tzLmxlbmd0aDthdjxhcTthdisrKXtMLmpxcGxvdC5wb3N0SW5pdEhvb2tzW2F2XS5jYWxsKHRoaXMsYXcsdGhpcy5kYXRhLGF5KX1mb3IodmFyIGF2PTAsYXE9dGhpcy5wb3N0SW5pdEhvb2tzLmhvb2tzLmxlbmd0aDthdjxhcTthdisrKXt0aGlzLnBvc3RJbml0SG9va3MuaG9va3NbYXZdLmNhbGwodGhpcyxhdyx0aGlzLmRhdGEsYXkpfX07dGhpcy5xdWlja0luaXQ9ZnVuY3Rpb24oKXt0aGlzLl9oZWlnaHQ9dGhpcy50YXJnZXQuaGVpZ2h0KCk7dGhpcy5fd2lkdGg9dGhpcy50YXJnZXQud2lkdGgoKTtpZih0aGlzLl9oZWlnaHQ8PTB8fHRoaXMuX3dpZHRoPD0wfHwhdGhpcy5faGVpZ2h0fHwhdGhpcy5fd2lkdGgpe3Rocm93IG5ldyBFcnJvcigiVGFyZ2V0IGRpbWVuc2lvbiBub3Qgc2V0Iil9dGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0PXRoaXMuX2hlaWdodDt0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aD10aGlzLl93aWR0aDt0aGlzLmdyaWQuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMudGl0bGUuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMuYmFzZUNhbnZhcy5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5ldmVudENhbnZhcy5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5sZWdlbmQuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO2Zvcih2YXIgYXEgaW4gdGhpcy5heGVzKXt0aGlzLmF4ZXNbYXFdLl9wbG90V2lkdGg9dGhpcy5fd2lkdGg7dGhpcy5heGVzW2FxXS5fcGxvdEhlaWdodD10aGlzLl9oZWlnaHR9dGhpcy50aXRsZS5fcGxvdFdpZHRoPXRoaXMuX3dpZHRoO2lmKHRoaXMudGV4dENvbG9yKXt0aGlzLnRhcmdldC5jc3MoImNvbG9yIix0aGlzLnRleHRDb2xvcil9aWYodGhpcy5mb250RmFtaWx5KXt0aGlzLnRhcmdldC5jc3MoImZvbnQtZmFtaWx5Iix0aGlzLmZvbnRGYW1pbHkpfWlmKHRoaXMuZm9udFNpemUpe3RoaXMudGFyZ2V0LmNzcygiZm9udC1zaXplIix0aGlzLmZvbnRTaXplKX10aGlzLl9zdW15PTA7dGhpcy5fc3VteD0wO3RoaXMuY29tcHV0ZVBsb3REYXRhKCk7Zm9yKHZhciBhbz0wO2FvPHRoaXMuc2VyaWVzLmxlbmd0aDthbysrKXtpZih0aGlzLnNlcmllc1thb10uX3R5cGU9PT0ibGluZSImJnRoaXMuc2VyaWVzW2FvXS5yZW5kZXJlci5iYW5kcy5zaG93KXt0aGlzLnNlcmllc1thb10ucmVuZGVyZXIuaW5pdEJhbmRzLmNhbGwodGhpcy5zZXJpZXNbYW9dLHRoaXMuc2VyaWVzW2FvXS5yZW5kZXJlci5vcHRpb25zLHRoaXMpfXRoaXMuc2VyaWVzW2FvXS5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5zZXJpZXNbYW9dLmNhbnZhcy5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5fc3VteSs9dGhpcy5zZXJpZXNbYW9dLl9zdW15O3RoaXMuX3N1bXgrPXRoaXMuc2VyaWVzW2FvXS5fc3VteH12YXIgYW07Zm9yKHZhciBhbD0wO2FsPDEyO2FsKyspe2FtPVVbYWxdO3ZhciBhbj10aGlzLmF4ZXNbYW1dLl90aWNrcztmb3IodmFyIGFvPTA7YW88YW4ubGVuZ3RoO2FvKyspe3ZhciBhcD1hblthb10uX2VsZW07aWYoYXApe2lmKEwuanFwbG90LnVzZV9leGNhbnZhcyYmd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50IT09dSl7d2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50KGFwLmdldCgwKSl9YXAuZW1wdHlGb3JjZSgpO2FwPW51bGw7YW4uX2VsZW09bnVsbH19YW49bnVsbDt0aGlzLmF4ZXNbYW1dLl9wbG90RGltZW5zaW9ucz10aGlzLl9wbG90RGltZW5zaW9uczt0aGlzLmF4ZXNbYW1dLl90aWNrcz1bXX1pZih0aGlzLnNvcnREYXRhKXthaCh0aGlzLnNlcmllcyl9dGhpcy5ncmlkLl9heGVzPXRoaXMuYXhlczt0aGlzLmxlZ2VuZC5fc2VyaWVzPXRoaXMuc2VyaWVzfTtmdW5jdGlvbiBhaChhcCl7dmFyIGF1LGF2LGF3LGFsLGF0O2Zvcih2YXIgYXE9MDthcTxhcC5sZW5ndGg7YXErKyl7dmFyIGFtO3ZhciBhcj1bYXBbYXFdLmRhdGEsYXBbYXFdLl9zdGFja0RhdGEsYXBbYXFdLl9wbG90RGF0YSxhcFthcV0uX3ByZXZQbG90RGF0YV07Zm9yKHZhciBhbj0wO2FuPDQ7YW4rKyl7YW09dHJ1ZTthdT1hclthbl07aWYoYXBbYXFdLl9zdGFja0F4aXM9PSJ4Iil7Zm9yKHZhciBhbz0wO2FvPGF1Lmxlbmd0aDthbysrKXtpZih0eXBlb2YoYXVbYW9dWzFdKSE9Im51bWJlciIpe2FtPWZhbHNlO2JyZWFrfX1pZihhbSl7YXUuc29ydChmdW5jdGlvbihheSxheCl7cmV0dXJuIGF5WzFdLWF4WzFdfSl9fWVsc2V7Zm9yKHZhciBhbz0wO2FvPGF1Lmxlbmd0aDthbysrKXtpZih0eXBlb2YoYXVbYW9dWzBdKSE9Im51bWJlciIpe2FtPWZhbHNlO2JyZWFrfX1pZihhbSl7YXUuc29ydChmdW5jdGlvbihheSxheCl7cmV0dXJuIGF5WzBdLWF4WzBdfSl9fX19fXRoaXMuY29tcHV0ZVBsb3REYXRhPWZ1bmN0aW9uKCl7dGhpcy5fcGxvdERhdGE9W107dGhpcy5fc3RhY2tEYXRhPVtdO3ZhciBhdCxhdSxhbztmb3IoYXU9MCxhbz10aGlzLnNlcmllcy5sZW5ndGg7YXU8YW87YXUrKyl7YXQ9dGhpcy5zZXJpZXNbYXVdO3RoaXMuX3Bsb3REYXRhLnB1c2goW10pO3RoaXMuX3N0YWNrRGF0YS5wdXNoKFtdKTt2YXIgYW09YXQuZGF0YTt0aGlzLl9wbG90RGF0YVthdV09TC5leHRlbmQodHJ1ZSxbXSxhbSk7dGhpcy5fc3RhY2tEYXRhW2F1XT1MLmV4dGVuZCh0cnVlLFtdLGFtKTthdC5fcGxvdERhdGE9dGhpcy5fcGxvdERhdGFbYXVdO2F0Ll9zdGFja0RhdGE9dGhpcy5fc3RhY2tEYXRhW2F1XTt2YXIgYXg9e3g6W10seTpbXX07aWYodGhpcy5zdGFja1NlcmllcyYmIWF0LmRpc2FibGVTdGFjayl7YXQuX3N0YWNrPXRydWU7dmFyIGF2PShhdC5fc3RhY2tBeGlzPT09IngiKT8wOjE7Zm9yKHZhciBhcD0wLGFsPWFtLmxlbmd0aDthcDxhbDthcCsrKXt2YXIgYXc9YW1bYXBdW2F2XTtpZihhdz09bnVsbCl7YXc9MH10aGlzLl9wbG90RGF0YVthdV1bYXBdW2F2XT1hdzt0aGlzLl9zdGFja0RhdGFbYXVdW2FwXVthdl09YXc7aWYoYXU+MCl7Zm9yKHZhciBhcT1hdTthcS0tOyl7dmFyIGFuPXRoaXMuX3Bsb3REYXRhW2FxXVthcF1bYXZdO2lmKGF3KmFuPj0wKXt0aGlzLl9wbG90RGF0YVthdV1bYXBdW2F2XSs9YW47dGhpcy5fc3RhY2tEYXRhW2F1XVthcF1bYXZdKz1hbjticmVha319fX19ZWxzZXtmb3IodmFyIGFyPTA7YXI8YXQuZGF0YS5sZW5ndGg7YXIrKyl7YXgueC5wdXNoKGF0LmRhdGFbYXJdWzBdKTtheC55LnB1c2goYXQuZGF0YVthcl1bMV0pfXRoaXMuX3N0YWNrRGF0YS5wdXNoKGF0LmRhdGEpO3RoaXMuc2VyaWVzW2F1XS5fc3RhY2tEYXRhPWF0LmRhdGE7dGhpcy5fcGxvdERhdGEucHVzaChhdC5kYXRhKTthdC5fcGxvdERhdGE9YXQuZGF0YTthdC5fcGxvdFZhbHVlcz1heH1pZihhdT4wKXthdC5fcHJldlBsb3REYXRhPXRoaXMuc2VyaWVzW2F1LTFdLl9wbG90RGF0YX1hdC5fc3VteT0wO2F0Ll9zdW14PTA7Zm9yKGFyPWF0LmRhdGEubGVuZ3RoLTE7YXI+LTE7YXItLSl7YXQuX3N1bXkrPWF0LmRhdGFbYXJdWzFdO2F0Ll9zdW14Kz1hdC5kYXRhW2FyXVswXX19fTt0aGlzLnBvcHVsYXRlUGxvdERhdGE9ZnVuY3Rpb24oYXUsYXYpe3RoaXMuX3Bsb3REYXRhPVtdO3RoaXMuX3N0YWNrRGF0YT1bXTthdS5fc3RhY2tEYXRhPVtdO2F1Ll9wbG90RGF0YT1bXTt2YXIgYXk9e3g6W10seTpbXX07aWYodGhpcy5zdGFja1NlcmllcyYmIWF1LmRpc2FibGVTdGFjayl7YXUuX3N0YWNrPXRydWU7dmFyIGF4PShhdS5fc3RhY2tBeGlzPT09IngiKT8wOjE7dmFyIGF6PUwuZXh0ZW5kKHRydWUsW10sYXUuZGF0YSk7dmFyIGFBPUwuZXh0ZW5kKHRydWUsW10sYXUuZGF0YSk7dmFyIGFuLGFtLGFvLGF3LGFsO2Zvcih2YXIgYXI9MDthcjxhdjthcisrKXt2YXIgYXA9dGhpcy5zZXJpZXNbYXJdLmRhdGE7Zm9yKHZhciBhcT0wO2FxPGFwLmxlbmd0aDthcSsrKXthbz1hcFthcV07YW49KGFvWzBdIT1udWxsKT9hb1swXTowO2FtPShhb1sxXSE9bnVsbCk/YW9bMV06MDthelthcV1bMF0rPWFuO2F6W2FxXVsxXSs9YW07YXc9KGF4KT9hbTphbjtpZihhdS5kYXRhW2FxXVtheF0qYXc+PTApe2FBW2FxXVtheF0rPWF3fX19Zm9yKHZhciBhdD0wO2F0PGFBLmxlbmd0aDthdCsrKXtheS54LnB1c2goYUFbYXRdWzBdKTtheS55LnB1c2goYUFbYXRdWzFdKX10aGlzLl9wbG90RGF0YS5wdXNoKGFBKTt0aGlzLl9zdGFja0RhdGEucHVzaChheik7YXUuX3N0YWNrRGF0YT1hejthdS5fcGxvdERhdGE9YUE7YXUuX3Bsb3RWYWx1ZXM9YXl9ZWxzZXtmb3IodmFyIGF0PTA7YXQ8YXUuZGF0YS5sZW5ndGg7YXQrKyl7YXkueC5wdXNoKGF1LmRhdGFbYXRdWzBdKTtheS55LnB1c2goYXUuZGF0YVthdF1bMV0pfXRoaXMuX3N0YWNrRGF0YS5wdXNoKGF1LmRhdGEpO3RoaXMuc2VyaWVzW2F2XS5fc3RhY2tEYXRhPWF1LmRhdGE7dGhpcy5fcGxvdERhdGEucHVzaChhdS5kYXRhKTthdS5fcGxvdERhdGE9YXUuZGF0YTthdS5fcGxvdFZhbHVlcz1heX1pZihhdj4wKXthdS5fcHJldlBsb3REYXRhPXRoaXMuc2VyaWVzW2F2LTFdLl9wbG90RGF0YX1hdS5fc3VteT0wO2F1Ll9zdW14PTA7Zm9yKGF0PWF1LmRhdGEubGVuZ3RoLTE7YXQ+LTE7YXQtLSl7YXUuX3N1bXkrPWF1LmRhdGFbYXRdWzFdO2F1Ll9zdW14Kz1hdS5kYXRhW2F0XVswXX19O3RoaXMuZ2V0TmV4dFNlcmllc0NvbG9yPShmdW5jdGlvbihhbSl7dmFyIGFsPTA7dmFyIGFuPWFtLnNlcmllc0NvbG9ycztyZXR1cm4gZnVuY3Rpb24oKXtpZihhbDxhbi5sZW5ndGgpe3JldHVybiBhblthbCsrXX1lbHNle2FsPTA7cmV0dXJuIGFuW2FsKytdfX19KSh0aGlzKTt0aGlzLnBhcnNlT3B0aW9ucz1mdW5jdGlvbihheSl7Zm9yKHZhciBhdD0wO2F0PHRoaXMucHJlUGFyc2VPcHRpb25zSG9va3MuaG9va3MubGVuZ3RoO2F0Kyspe3RoaXMucHJlUGFyc2VPcHRpb25zSG9va3MuaG9va3NbYXRdLmNhbGwodGhpcyxheSl9Zm9yKHZhciBhdD0wO2F0PEwuanFwbG90LnByZVBhcnNlT3B0aW9uc0hvb2tzLmxlbmd0aDthdCsrKXtMLmpxcGxvdC5wcmVQYXJzZU9wdGlvbnNIb29rc1thdF0uY2FsbCh0aGlzLGF5KX10aGlzLm9wdGlvbnM9TC5leHRlbmQodHJ1ZSx7fSx0aGlzLmRlZmF1bHRzLGF5KTt2YXIgYW09dGhpcy5vcHRpb25zO3RoaXMuYW5pbWF0ZT1hbS5hbmltYXRlO3RoaXMuYW5pbWF0ZVJlcGxvdD1hbS5hbmltYXRlUmVwbG90O3RoaXMuc3RhY2tTZXJpZXM9YW0uc3RhY2tTZXJpZXM7aWYoTC5pc1BsYWluT2JqZWN0KGFtLmZpbGxCZXR3ZWVuKSl7dmFyIGF4PVsic2VyaWVzMSIsInNlcmllczIiLCJjb2xvciIsImJhc2VTZXJpZXMiLCJmaWxsIl0sYXU7Zm9yKHZhciBhdD0wLGFxPWF4Lmxlbmd0aDthdDxhcTthdCsrKXthdT1heFthdF07aWYoYW0uZmlsbEJldHdlZW5bYXVdIT1udWxsKXt0aGlzLmZpbGxCZXR3ZWVuW2F1XT1hbS5maWxsQmV0d2VlblthdV19fX1pZihhbS5zZXJpZXNDb2xvcnMpe3RoaXMuc2VyaWVzQ29sb3JzPWFtLnNlcmllc0NvbG9yc31pZihhbS5uZWdhdGl2ZVNlcmllc0NvbG9ycyl7dGhpcy5uZWdhdGl2ZVNlcmllc0NvbG9ycz1hbS5uZWdhdGl2ZVNlcmllc0NvbG9yc31pZihhbS5jYXB0dXJlUmlnaHRDbGljayl7dGhpcy5jYXB0dXJlUmlnaHRDbGljaz1hbS5jYXB0dXJlUmlnaHRDbGlja310aGlzLmRlZmF1bHRBeGlzU3RhcnQ9KGF5JiZheS5kZWZhdWx0QXhpc1N0YXJ0IT1udWxsKT9heS5kZWZhdWx0QXhpc1N0YXJ0OnRoaXMuZGVmYXVsdEF4aXNTdGFydDt0aGlzLmNvbG9yR2VuZXJhdG9yLnNldENvbG9ycyh0aGlzLnNlcmllc0NvbG9ycyk7dGhpcy5uZWdhdGl2ZUNvbG9yR2VuZXJhdG9yLnNldENvbG9ycyh0aGlzLm5lZ2F0aXZlU2VyaWVzQ29sb3JzKTtMLmV4dGVuZCh0cnVlLHRoaXMuX2dyaWRQYWRkaW5nLGFtLmdyaWRQYWRkaW5nKTt0aGlzLnNvcnREYXRhPShhbS5zb3J0RGF0YSE9bnVsbCk/YW0uc29ydERhdGE6dGhpcy5zb3J0RGF0YTtmb3IodmFyIGF0PTA7YXQ8MTI7YXQrKyl7dmFyIGFuPVVbYXRdO3ZhciBhcD10aGlzLmF4ZXNbYW5dO2FwLl9vcHRpb25zPUwuZXh0ZW5kKHRydWUse30sYW0uYXhlc0RlZmF1bHRzLGFtLmF4ZXNbYW5dKTtMLmV4dGVuZCh0cnVlLGFwLGFtLmF4ZXNEZWZhdWx0cyxhbS5heGVzW2FuXSk7YXAuX3Bsb3RXaWR0aD10aGlzLl93aWR0aDthcC5fcGxvdEhlaWdodD10aGlzLl9oZWlnaHR9dmFyIGF3PWZ1bmN0aW9uKGFELGFCLGFFKXt2YXIgYUE9W107dmFyIGFDLGF6O2FCPWFCfHwidmVydGljYWwiO2lmKCFMLmlzQXJyYXkoYURbMF0pKXtmb3IoYUM9MCxhej1hRC5sZW5ndGg7YUM8YXo7YUMrKyl7aWYoYUI9PSJ2ZXJ0aWNhbCIpe2FBLnB1c2goW2FFK2FDLGFEW2FDXV0pfWVsc2V7YUEucHVzaChbYURbYUNdLGFFK2FDXSl9fX1lbHNle0wuZXh0ZW5kKHRydWUsYUEsYUQpfXJldHVybiBhQX07dmFyIGF2PTA7dGhpcy5zZXJpZXM9W107Zm9yKHZhciBhdD0wO2F0PHRoaXMuZGF0YS5sZW5ndGg7YXQrKyl7dmFyIGFsPUwuZXh0ZW5kKHRydWUse2luZGV4OmF0fSx7c2VyaWVzQ29sb3JzOnRoaXMuc2VyaWVzQ29sb3JzLG5lZ2F0aXZlU2VyaWVzQ29sb3JzOnRoaXMubmVnYXRpdmVTZXJpZXNDb2xvcnN9LHRoaXMub3B0aW9ucy5zZXJpZXNEZWZhdWx0cyx0aGlzLm9wdGlvbnMuc2VyaWVzW2F0XSx7cmVuZGVyZXJPcHRpb25zOnthbmltYXRpb246e3Nob3c6dGhpcy5hbmltYXRlfX19KTt2YXIgYXg9bmV3IFMoYWwpO2Zvcih2YXIgYXI9MDthcjxMLmpxcGxvdC5wcmVQYXJzZVNlcmllc09wdGlvbnNIb29rcy5sZW5ndGg7YXIrKyl7TC5qcXBsb3QucHJlUGFyc2VTZXJpZXNPcHRpb25zSG9va3NbYXJdLmNhbGwoYXgsdGhpcy5vcHRpb25zLnNlcmllc0RlZmF1bHRzLHRoaXMub3B0aW9ucy5zZXJpZXNbYXRdKX1mb3IodmFyIGFyPTA7YXI8dGhpcy5wcmVQYXJzZVNlcmllc09wdGlvbnNIb29rcy5ob29rcy5sZW5ndGg7YXIrKyl7dGhpcy5wcmVQYXJzZVNlcmllc09wdGlvbnNIb29rcy5ob29rc1thcl0uY2FsbChheCx0aGlzLm9wdGlvbnMuc2VyaWVzRGVmYXVsdHMsdGhpcy5vcHRpb25zLnNlcmllc1thdF0pfUwuZXh0ZW5kKHRydWUsYXgsYWwpO3ZhciBhbz0idmVydGljYWwiO2lmKGF4LnJlbmRlcmVyPT09TC5qcXBsb3QuQmFyUmVuZGVyZXImJmF4LnJlbmRlcmVyT3B0aW9ucyYmYXgucmVuZGVyZXJPcHRpb25zLmJhckRpcmVjdGlvbj09Imhvcml6b250YWwiKXthbz0iaG9yaXpvbnRhbCI7YXguX3N0YWNrQXhpcz0ieCI7YXguX3ByaW1hcnlBeGlzPSJfeWF4aXMifWF4LmRhdGE9YXcodGhpcy5kYXRhW2F0XSxhbyx0aGlzLmRlZmF1bHRBeGlzU3RhcnQpO3N3aXRjaChheC54YXhpcyl7Y2FzZSJ4YXhpcyI6YXguX3hheGlzPXRoaXMuYXhlcy54YXhpczticmVhaztjYXNlIngyYXhpcyI6YXguX3hheGlzPXRoaXMuYXhlcy54MmF4aXM7YnJlYWs7ZGVmYXVsdDpicmVha31heC5feWF4aXM9dGhpcy5heGVzW2F4LnlheGlzXTtheC5feGF4aXMuX3Nlcmllcy5wdXNoKGF4KTtheC5feWF4aXMuX3Nlcmllcy5wdXNoKGF4KTtpZihheC5zaG93KXtheC5feGF4aXMuc2hvdz10cnVlO2F4Ll95YXhpcy5zaG93PXRydWV9ZWxzZXtpZihheC5feGF4aXMuc2NhbGVUb0hpZGRlblNlcmllcyl7YXguX3hheGlzLnNob3c9dHJ1ZX1pZihheC5feWF4aXMuc2NhbGVUb0hpZGRlblNlcmllcyl7YXguX3lheGlzLnNob3c9dHJ1ZX19aWYoIWF4LmxhYmVsKXtheC5sYWJlbD0iU2VyaWVzICIrKGF0KzEpLnRvU3RyaW5nKCl9dGhpcy5zZXJpZXMucHVzaChheCk7Zm9yKHZhciBhcj0wO2FyPEwuanFwbG90LnBvc3RQYXJzZVNlcmllc09wdGlvbnNIb29rcy5sZW5ndGg7YXIrKyl7TC5qcXBsb3QucG9zdFBhcnNlU2VyaWVzT3B0aW9uc0hvb2tzW2FyXS5jYWxsKHRoaXMuc2VyaWVzW2F0XSx0aGlzLm9wdGlvbnMuc2VyaWVzRGVmYXVsdHMsdGhpcy5vcHRpb25zLnNlcmllc1thdF0pfWZvcih2YXIgYXI9MDthcjx0aGlzLnBvc3RQYXJzZVNlcmllc09wdGlvbnNIb29rcy5ob29rcy5sZW5ndGg7YXIrKyl7dGhpcy5wb3N0UGFyc2VTZXJpZXNPcHRpb25zSG9va3MuaG9va3NbYXJdLmNhbGwodGhpcy5zZXJpZXNbYXRdLHRoaXMub3B0aW9ucy5zZXJpZXNEZWZhdWx0cyx0aGlzLm9wdGlvbnMuc2VyaWVzW2F0XSl9fUwuZXh0ZW5kKHRydWUsdGhpcy5ncmlkLHRoaXMub3B0aW9ucy5ncmlkKTtmb3IodmFyIGF0PTAsYXE9VS5sZW5ndGg7YXQ8YXE7YXQrKyl7dmFyIGFuPVVbYXRdO3ZhciBhcD10aGlzLmF4ZXNbYW5dO2lmKGFwLmJvcmRlcldpZHRoPT1udWxsKXthcC5ib3JkZXJXaWR0aD10aGlzLmdyaWQuYm9yZGVyV2lkdGh9fWlmKHR5cGVvZiB0aGlzLm9wdGlvbnMudGl0bGU9PSJzdHJpbmciKXt0aGlzLnRpdGxlLnRleHQ9dGhpcy5vcHRpb25zLnRpdGxlfWVsc2V7aWYodHlwZW9mIHRoaXMub3B0aW9ucy50aXRsZT09Im9iamVjdCIpe0wuZXh0ZW5kKHRydWUsdGhpcy50aXRsZSx0aGlzLm9wdGlvbnMudGl0bGUpfX10aGlzLnRpdGxlLl9wbG90V2lkdGg9dGhpcy5fd2lkdGg7dGhpcy5sZWdlbmQuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMubGVnZW5kKTtmb3IodmFyIGF0PTA7YXQ8TC5qcXBsb3QucG9zdFBhcnNlT3B0aW9uc0hvb2tzLmxlbmd0aDthdCsrKXtMLmpxcGxvdC5wb3N0UGFyc2VPcHRpb25zSG9va3NbYXRdLmNhbGwodGhpcyxheSl9Zm9yKHZhciBhdD0wO2F0PHRoaXMucG9zdFBhcnNlT3B0aW9uc0hvb2tzLmhvb2tzLmxlbmd0aDthdCsrKXt0aGlzLnBvc3RQYXJzZU9wdGlvbnNIb29rcy5ob29rc1thdF0uY2FsbCh0aGlzLGF5KX19O3RoaXMuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY2FudmFzTWFuYWdlci5mcmVlQWxsQ2FudmFzZXMoKTtpZih0aGlzLmV2ZW50Q2FudmFzJiZ0aGlzLmV2ZW50Q2FudmFzLl9lbGVtKXt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLnVuYmluZCgpfXRoaXMudGFyZ2V0LmVtcHR5KCk7dGhpcy50YXJnZXRbMF0uaW5uZXJIVE1MPSIifTt0aGlzLnJlcGxvdD1mdW5jdGlvbihhbSl7dmFyIGFuPWFtfHx7fTt2YXIgYXA9YW4uZGF0YXx8bnVsbDt2YXIgYWw9KGFuLmNsZWFyPT09ZmFsc2UpP2ZhbHNlOnRydWU7dmFyIGFvPWFuLnJlc2V0QXhlc3x8ZmFsc2U7ZGVsZXRlIGFuLmRhdGE7ZGVsZXRlIGFuLmNsZWFyO2RlbGV0ZSBhbi5yZXNldEF4ZXM7dGhpcy50YXJnZXQudHJpZ2dlcigianFwbG90UHJlUmVwbG90Iik7aWYoYWwpe3RoaXMuZGVzdHJveSgpfWlmKGFwfHwhTC5pc0VtcHR5T2JqZWN0KGFuKSl7dGhpcy5yZUluaXRpYWxpemUoYXAsYW4pfWVsc2V7dGhpcy5xdWlja0luaXQoKX1pZihhbyl7dGhpcy5yZXNldEF4ZXNTY2FsZShhbyxhbi5heGVzKX10aGlzLmRyYXcoKTt0aGlzLnRhcmdldC50cmlnZ2VyKCJqcXBsb3RQb3N0UmVwbG90Iil9O3RoaXMucmVkcmF3PWZ1bmN0aW9uKGFsKXthbD0oYWwhPW51bGwpP2FsOnRydWU7dGhpcy50YXJnZXQudHJpZ2dlcigianFwbG90UHJlUmVkcmF3Iik7aWYoYWwpe3RoaXMuY2FudmFzTWFuYWdlci5mcmVlQWxsQ2FudmFzZXMoKTt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLnVuYmluZCgpO3RoaXMudGFyZ2V0LmVtcHR5KCl9Zm9yKHZhciBhbiBpbiB0aGlzLmF4ZXMpe3RoaXMuYXhlc1thbl0uX3RpY2tzPVtdfXRoaXMuY29tcHV0ZVBsb3REYXRhKCk7dGhpcy5fc3VteT0wO3RoaXMuX3N1bXg9MDtmb3IodmFyIGFtPTAsYW89dGhpcy5zZXJpZXMubGVuZ3RoO2FtPGFvO2FtKyspe3RoaXMuX3N1bXkrPXRoaXMuc2VyaWVzW2FtXS5fc3VteTt0aGlzLl9zdW14Kz10aGlzLnNlcmllc1thbV0uX3N1bXh9dGhpcy5kcmF3KCk7dGhpcy50YXJnZXQudHJpZ2dlcigianFwbG90UG9zdFJlZHJhdyIpfTt0aGlzLmRyYXc9ZnVuY3Rpb24oKXtpZih0aGlzLmRyYXdJZkhpZGRlbnx8dGhpcy50YXJnZXQuaXMoIjp2aXNpYmxlIikpe3RoaXMudGFyZ2V0LnRyaWdnZXIoImpxcGxvdFByZURyYXciKTt2YXIgYUgsYUYsYUUsYW87Zm9yKGFIPTAsYUU9TC5qcXBsb3QucHJlRHJhd0hvb2tzLmxlbmd0aDthSDxhRTthSCsrKXtMLmpxcGxvdC5wcmVEcmF3SG9va3NbYUhdLmNhbGwodGhpcyl9Zm9yKGFIPTAsYUU9dGhpcy5wcmVEcmF3SG9va3MuaG9va3MubGVuZ3RoO2FIPGFFO2FIKyspe3RoaXMucHJlRHJhd0hvb2tzLmhvb2tzW2FIXS5hcHBseSh0aGlzLHRoaXMucHJlRHJhd1Nlcmllc0hvb2tzLmFyZ3NbYUhdKX10aGlzLnRhcmdldC5hcHBlbmQodGhpcy5iYXNlQ2FudmFzLmNyZWF0ZUVsZW1lbnQoe2xlZnQ6MCxyaWdodDowLHRvcDowLGJvdHRvbTowfSwianFwbG90LWJhc2UtY2FudmFzIixudWxsLHRoaXMpKTt0aGlzLmJhc2VDYW52YXMuc2V0Q29udGV4dCgpO3RoaXMudGFyZ2V0LmFwcGVuZCh0aGlzLnRpdGxlLmRyYXcoKSk7dGhpcy50aXRsZS5wYWNrKHt0b3A6MCxsZWZ0OjB9KTt2YXIgYUw9dGhpcy5sZWdlbmQuZHJhdyh7fSx0aGlzKTt2YXIgYWw9e3RvcDowLGxlZnQ6MCxib3R0b206MCxyaWdodDowfTtpZih0aGlzLmxlZ2VuZC5wbGFjZW1lbnQ9PSJvdXRzaWRlR3JpZCIpe3RoaXMudGFyZ2V0LmFwcGVuZChhTCk7c3dpdGNoKHRoaXMubGVnZW5kLmxvY2F0aW9uKXtjYXNlIm4iOmFsLnRvcCs9dGhpcy5sZWdlbmQuZ2V0SGVpZ2h0KCk7YnJlYWs7Y2FzZSJzIjphbC5ib3R0b20rPXRoaXMubGVnZW5kLmdldEhlaWdodCgpO2JyZWFrO2Nhc2UibmUiOmNhc2UiZSI6Y2FzZSJzZSI6YWwucmlnaHQrPXRoaXMubGVnZW5kLmdldFdpZHRoKCk7YnJlYWs7Y2FzZSJudyI6Y2FzZSJ3IjpjYXNlInN3IjphbC5sZWZ0Kz10aGlzLmxlZ2VuZC5nZXRXaWR0aCgpO2JyZWFrO2RlZmF1bHQ6YWwucmlnaHQrPXRoaXMubGVnZW5kLmdldFdpZHRoKCk7YnJlYWt9YUw9YUwuZGV0YWNoKCl9dmFyIGFyPXRoaXMuYXhlczt2YXIgYU07Zm9yKGFIPTA7YUg8MTI7YUgrKyl7YU09VVthSF07dGhpcy50YXJnZXQuYXBwZW5kKGFyW2FNXS5kcmF3KHRoaXMuYmFzZUNhbnZhcy5fY3R4LHRoaXMpKTthclthTV0uc2V0KCl9aWYoYXIueWF4aXMuc2hvdyl7YWwubGVmdCs9YXIueWF4aXMuZ2V0V2lkdGgoKX12YXIgYUc9WyJ5MmF4aXMiLCJ5M2F4aXMiLCJ5NGF4aXMiLCJ5NWF4aXMiLCJ5NmF4aXMiLCJ5N2F4aXMiLCJ5OGF4aXMiLCJ5OWF4aXMiXTt2YXIgYXo9WzAsMCwwLDAsMCwwLDAsMF07dmFyIGFDPTA7dmFyIGFCO2ZvcihhQj0wO2FCPDg7YUIrKyl7aWYoYXJbYUdbYUJdXS5zaG93KXthQys9YXJbYUdbYUJdXS5nZXRXaWR0aCgpO2F6W2FCXT1hQ319YWwucmlnaHQrPWFDO2lmKGFyLngyYXhpcy5zaG93KXthbC50b3ArPWFyLngyYXhpcy5nZXRIZWlnaHQoKX1pZih0aGlzLnRpdGxlLnNob3cpe2FsLnRvcCs9dGhpcy50aXRsZS5nZXRIZWlnaHQoKX1pZihhci54YXhpcy5zaG93KXthbC5ib3R0b20rPWFyLnhheGlzLmdldEhlaWdodCgpfWlmKHRoaXMub3B0aW9ucy5ncmlkRGltZW5zaW9ucyYmTC5pc1BsYWluT2JqZWN0KHRoaXMub3B0aW9ucy5ncmlkRGltZW5zaW9ucykpe3ZhciBhdD1wYXJzZUludCh0aGlzLm9wdGlvbnMuZ3JpZERpbWVuc2lvbnMud2lkdGgsMTApfHwwO3ZhciBhST1wYXJzZUludCh0aGlzLm9wdGlvbnMuZ3JpZERpbWVuc2lvbnMuaGVpZ2h0LDEwKXx8MDt2YXIgYW49KHRoaXMuX3dpZHRoLWFsLmxlZnQtYWwucmlnaHQtYXQpLzI7dmFyIGFLPSh0aGlzLl9oZWlnaHQtYWwudG9wLWFsLmJvdHRvbS1hSSkvMjtpZihhSz49MCYmYW4+PTApe2FsLnRvcCs9YUs7YWwuYm90dG9tKz1hSzthbC5sZWZ0Kz1hbjthbC5yaWdodCs9YW59fXZhciBhbT1bInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdO2Zvcih2YXIgYUIgaW4gYW0pe2lmKHRoaXMuX2dyaWRQYWRkaW5nW2FtW2FCXV09PW51bGwmJmFsW2FtW2FCXV0+MCl7dGhpcy5fZ3JpZFBhZGRpbmdbYW1bYUJdXT1hbFthbVthQl1dfWVsc2V7aWYodGhpcy5fZ3JpZFBhZGRpbmdbYW1bYUJdXT09bnVsbCl7dGhpcy5fZ3JpZFBhZGRpbmdbYW1bYUJdXT10aGlzLl9kZWZhdWx0R3JpZFBhZGRpbmdbYW1bYUJdXX19fXZhciBhQT10aGlzLl9ncmlkUGFkZGluZztpZih0aGlzLmxlZ2VuZC5wbGFjZW1lbnQ9PT0ib3V0c2lkZUdyaWQiKXthQT17dG9wOnRoaXMudGl0bGUuZ2V0SGVpZ2h0KCksbGVmdDowLHJpZ2h0OjAsYm90dG9tOjB9O2lmKHRoaXMubGVnZW5kLmxvY2F0aW9uPT09InMiKXthQS5sZWZ0PXRoaXMuX2dyaWRQYWRkaW5nLmxlZnQ7YUEucmlnaHQ9dGhpcy5fZ3JpZFBhZGRpbmcucmlnaHR9fWFyLnhheGlzLnBhY2soe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsYm90dG9tOnRoaXMuX2dyaWRQYWRkaW5nLmJvdHRvbS1hci54YXhpcy5nZXRIZWlnaHQoKSxsZWZ0OjAsd2lkdGg6dGhpcy5fd2lkdGh9LHttaW46dGhpcy5fZ3JpZFBhZGRpbmcubGVmdCxtYXg6dGhpcy5fd2lkdGgtdGhpcy5fZ3JpZFBhZGRpbmcucmlnaHR9KTthci55YXhpcy5wYWNrKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6dGhpcy5fZ3JpZFBhZGRpbmcubGVmdC1hci55YXhpcy5nZXRXaWR0aCgpLGhlaWdodDp0aGlzLl9oZWlnaHR9LHttaW46dGhpcy5faGVpZ2h0LXRoaXMuX2dyaWRQYWRkaW5nLmJvdHRvbSxtYXg6dGhpcy5fZ3JpZFBhZGRpbmcudG9wfSk7YXIueDJheGlzLnBhY2soe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOnRoaXMuX2dyaWRQYWRkaW5nLnRvcC1hci54MmF4aXMuZ2V0SGVpZ2h0KCksbGVmdDowLHdpZHRoOnRoaXMuX3dpZHRofSx7bWluOnRoaXMuX2dyaWRQYWRkaW5nLmxlZnQsbWF4OnRoaXMuX3dpZHRoLXRoaXMuX2dyaWRQYWRkaW5nLnJpZ2h0fSk7Zm9yKGFIPTg7YUg+MDthSC0tKXthclthR1thSC0xXV0ucGFjayh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxyaWdodDp0aGlzLl9ncmlkUGFkZGluZy5yaWdodC1helthSC0xXX0se21pbjp0aGlzLl9oZWlnaHQtdGhpcy5fZ3JpZFBhZGRpbmcuYm90dG9tLG1heDp0aGlzLl9ncmlkUGFkZGluZy50b3B9KX12YXIgYXU9KHRoaXMuX3dpZHRoLXRoaXMuX2dyaWRQYWRkaW5nLmxlZnQtdGhpcy5fZ3JpZFBhZGRpbmcucmlnaHQpLzIrdGhpcy5fZ3JpZFBhZGRpbmcubGVmdC1hci55TWlkQXhpcy5nZXRXaWR0aCgpLzI7YXIueU1pZEF4aXMucGFjayh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OmF1LHpJbmRleDo5LHRleHRBbGlnbjoiY2VudGVyIn0se21pbjp0aGlzLl9oZWlnaHQtdGhpcy5fZ3JpZFBhZGRpbmcuYm90dG9tLG1heDp0aGlzLl9ncmlkUGFkZGluZy50b3B9KTt0aGlzLnRhcmdldC5hcHBlbmQodGhpcy5ncmlkLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsdGhpcykpO3RoaXMuZ3JpZC5kcmF3KCk7dmFyIGFxPXRoaXMuc2VyaWVzO3ZhciBhSj1hcS5sZW5ndGg7Zm9yKGFIPTAsYUU9YUo7YUg8YUU7YUgrKyl7YUY9dGhpcy5zZXJpZXNTdGFja1thSF07dGhpcy50YXJnZXQuYXBwZW5kKGFxW2FGXS5zaGFkb3dDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywianFwbG90LXNlcmllcy1zaGFkb3dDYW52YXMiLG51bGwsdGhpcykpO2FxW2FGXS5zaGFkb3dDYW52YXMuc2V0Q29udGV4dCgpO2FxW2FGXS5zaGFkb3dDYW52YXMuX2VsZW0uZGF0YSgic2VyaWVzSW5kZXgiLGFGKX1mb3IoYUg9MCxhRT1hSjthSDxhRTthSCsrKXthRj10aGlzLnNlcmllc1N0YWNrW2FIXTt0aGlzLnRhcmdldC5hcHBlbmQoYXFbYUZdLmNhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCJqcXBsb3Qtc2VyaWVzLWNhbnZhcyIsbnVsbCx0aGlzKSk7YXFbYUZdLmNhbnZhcy5zZXRDb250ZXh0KCk7YXFbYUZdLmNhbnZhcy5fZWxlbS5kYXRhKCJzZXJpZXNJbmRleCIsYUYpfXRoaXMudGFyZ2V0LmFwcGVuZCh0aGlzLmV2ZW50Q2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsImpxcGxvdC1ldmVudC1jYW52YXMiLG51bGwsdGhpcykpO3RoaXMuZXZlbnRDYW52YXMuc2V0Q29udGV4dCgpO3RoaXMuZXZlbnRDYW52YXMuX2N0eC5maWxsU3R5bGU9InJnYmEoMCwwLDAsMCkiO3RoaXMuZXZlbnRDYW52YXMuX2N0eC5maWxsUmVjdCgwLDAsdGhpcy5ldmVudENhbnZhcy5fY3R4LmNhbnZhcy53aWR0aCx0aGlzLmV2ZW50Q2FudmFzLl9jdHguY2FudmFzLmhlaWdodCk7dGhpcy5iaW5kQ3VzdG9tRXZlbnRzKCk7aWYodGhpcy5sZWdlbmQucHJlRHJhdyl7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZvcmUoYUwpO3RoaXMubGVnZW5kLnBhY2soYUEpO2lmKHRoaXMubGVnZW5kLl9lbGVtKXt0aGlzLmRyYXdTZXJpZXMoe2xlZ2VuZEluZm86e2xvY2F0aW9uOnRoaXMubGVnZW5kLmxvY2F0aW9uLHBsYWNlbWVudDp0aGlzLmxlZ2VuZC5wbGFjZW1lbnQsd2lkdGg6dGhpcy5sZWdlbmQuZ2V0V2lkdGgoKSxoZWlnaHQ6dGhpcy5sZWdlbmQuZ2V0SGVpZ2h0KCkseG9mZnNldDp0aGlzLmxlZ2VuZC54b2Zmc2V0LHlvZmZzZXQ6dGhpcy5sZWdlbmQueW9mZnNldH19KX1lbHNle3RoaXMuZHJhd1NlcmllcygpfX1lbHNle3RoaXMuZHJhd1NlcmllcygpO2lmKGFKKXtMKGFxW2FKLTFdLmNhbnZhcy5fZWxlbSkuYWZ0ZXIoYUwpfXRoaXMubGVnZW5kLnBhY2soYUEpfWZvcih2YXIgYUg9MCxhRT1MLmpxcGxvdC5ldmVudExpc3RlbmVySG9va3MubGVuZ3RoO2FIPGFFO2FIKyspe3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZChMLmpxcGxvdC5ldmVudExpc3RlbmVySG9va3NbYUhdWzBdLHtwbG90OnRoaXN9LEwuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rc1thSF1bMV0pfWZvcih2YXIgYUg9MCxhRT10aGlzLmV2ZW50TGlzdGVuZXJIb29rcy5ob29rcy5sZW5ndGg7YUg8YUU7YUgrKyl7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKHRoaXMuZXZlbnRMaXN0ZW5lckhvb2tzLmhvb2tzW2FIXVswXSx7cGxvdDp0aGlzfSx0aGlzLmV2ZW50TGlzdGVuZXJIb29rcy5ob29rc1thSF1bMV0pfXZhciBheT10aGlzLmZpbGxCZXR3ZWVuO2lmKGF5LmZpbGwmJmF5LnNlcmllczEhPT1heS5zZXJpZXMyJiZheS5zZXJpZXMxPGFKJiZheS5zZXJpZXMyPGFKJiZhcVtheS5zZXJpZXMxXS5fdHlwZT09PSJsaW5lIiYmYXFbYXkuc2VyaWVzMl0uX3R5cGU9PT0ibGluZSIpe3RoaXMuZG9GaWxsQmV0d2VlbkxpbmVzKCl9Zm9yKHZhciBhSD0wLGFFPUwuanFwbG90LnBvc3REcmF3SG9va3MubGVuZ3RoO2FIPGFFO2FIKyspe0wuanFwbG90LnBvc3REcmF3SG9va3NbYUhdLmNhbGwodGhpcyl9Zm9yKHZhciBhSD0wLGFFPXRoaXMucG9zdERyYXdIb29rcy5ob29rcy5sZW5ndGg7YUg8YUU7YUgrKyl7dGhpcy5wb3N0RHJhd0hvb2tzLmhvb2tzW2FIXS5hcHBseSh0aGlzLHRoaXMucG9zdERyYXdIb29rcy5hcmdzW2FIXSl9aWYodGhpcy50YXJnZXQuaXMoIjp2aXNpYmxlIikpe3RoaXMuX2RyYXdDb3VudCs9MX12YXIgYXYsYXcsYUQsYXA7Zm9yKGFIPTAsYUU9YUo7YUg8YUU7YUgrKyl7YXY9YXFbYUhdO2F3PWF2LnJlbmRlcmVyO2FEPSIuanFwbG90LXBvaW50LWxhYmVsLmpxcGxvdC1zZXJpZXMtIithSDtpZihhdy5hbmltYXRpb24mJmF3LmFuaW1hdGlvbi5fc3VwcG9ydGVkJiZhdy5hbmltYXRpb24uc2hvdyYmKHRoaXMuX2RyYXdDb3VudDwyfHx0aGlzLmFuaW1hdGVSZXBsb3QpKXthcD10aGlzLnRhcmdldC5maW5kKGFEKTthcC5zdG9wKHRydWUsdHJ1ZSkuaGlkZSgpO2F2LmNhbnZhcy5fZWxlbS5zdG9wKHRydWUsdHJ1ZSkuaGlkZSgpO2F2LnNoYWRvd0NhbnZhcy5fZWxlbS5zdG9wKHRydWUsdHJ1ZSkuaGlkZSgpO2F2LmNhbnZhcy5fZWxlbS5qcXBsb3RFZmZlY3QoImJsaW5kIix7bW9kZToic2hvdyIsZGlyZWN0aW9uOmF3LmFuaW1hdGlvbi5kaXJlY3Rpb259LGF3LmFuaW1hdGlvbi5zcGVlZCk7YXYuc2hhZG93Q2FudmFzLl9lbGVtLmpxcGxvdEVmZmVjdCgiYmxpbmQiLHttb2RlOiJzaG93IixkaXJlY3Rpb246YXcuYW5pbWF0aW9uLmRpcmVjdGlvbn0sYXcuYW5pbWF0aW9uLnNwZWVkKTthcC5mYWRlSW4oYXcuYW5pbWF0aW9uLnNwZWVkKjAuOCl9fWFwPW51bGw7dGhpcy50YXJnZXQudHJpZ2dlcigianFwbG90UG9zdERyYXciLFt0aGlzXSl9fTtSLnByb3RvdHlwZS5kb0ZpbGxCZXR3ZWVuTGluZXM9ZnVuY3Rpb24oKXt2YXIgYW49dGhpcy5maWxsQmV0d2Vlbjt2YXIgYXg9YW4uc2VyaWVzMTt2YXIgYXY9YW4uc2VyaWVzMjt2YXIgYXc9KGF4PGF2KT9heDphdjt2YXIgYXU9KGF2PmF4KT9hdjpheDt2YXIgYXI9dGhpcy5zZXJpZXNbYXddO3ZhciBhcT10aGlzLnNlcmllc1thdV07aWYoYXEucmVuZGVyZXIuc21vb3RoKXt2YXIgYXA9YXEucmVuZGVyZXIuX3Ntb290aGVkRGF0YS5zbGljZSgwKS5yZXZlcnNlKCl9ZWxzZXt2YXIgYXA9YXEuZ3JpZERhdGEuc2xpY2UoMCkucmV2ZXJzZSgpfWlmKGFyLnJlbmRlcmVyLnNtb290aCl7dmFyIGF0PWFyLnJlbmRlcmVyLl9zbW9vdGhlZERhdGEuY29uY2F0KGFwKX1lbHNle3ZhciBhdD1hci5ncmlkRGF0YS5jb25jYXQoYXApfXZhciBhbz0oYW4uY29sb3IhPT1udWxsKT9hbi5jb2xvcjp0aGlzLnNlcmllc1theF0uZmlsbENvbG9yO3ZhciBheT0oYW4uYmFzZVNlcmllcyE9PW51bGwpP2FuLmJhc2VTZXJpZXM6YXc7dmFyIGFtPXRoaXMuc2VyaWVzW2F5XS5yZW5kZXJlci5zaGFwZVJlbmRlcmVyO3ZhciBhbD17ZmlsbFN0eWxlOmFvLGZpbGw6dHJ1ZSxjbG9zZVBhdGg6dHJ1ZX07YW0uZHJhdyhhci5zaGFkb3dDYW52YXMuX2N0eCxhdCxhbCl9O3RoaXMuYmluZEN1c3RvbUV2ZW50cz1mdW5jdGlvbigpe3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgiY2xpY2siLHtwbG90OnRoaXN9LHRoaXMub25DbGljayk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCJkYmxjbGljayIse3Bsb3Q6dGhpc30sdGhpcy5vbkRibENsaWNrKTt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoIm1vdXNlZG93biIse3Bsb3Q6dGhpc30sdGhpcy5vbk1vdXNlRG93bik7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCJtb3VzZW1vdmUiLHtwbG90OnRoaXN9LHRoaXMub25Nb3VzZU1vdmUpO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgibW91c2VlbnRlciIse3Bsb3Q6dGhpc30sdGhpcy5vbk1vdXNlRW50ZXIpO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgibW91c2VsZWF2ZSIse3Bsb3Q6dGhpc30sdGhpcy5vbk1vdXNlTGVhdmUpO2lmKHRoaXMuY2FwdHVyZVJpZ2h0Q2xpY2spe3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgibW91c2V1cCIse3Bsb3Q6dGhpc30sdGhpcy5vblJpZ2h0Q2xpY2spO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uZ2V0KDApLm9uY29udGV4dG1lbnU9ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9fWVsc2V7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCJtb3VzZXVwIix7cGxvdDp0aGlzfSx0aGlzLm9uTW91c2VVcCl9fTtmdW5jdGlvbiBhaShhdil7dmFyIGF1PWF2LmRhdGEucGxvdDt2YXIgYXA9YXUuZXZlbnRDYW52YXMuX2VsZW0ub2Zmc2V0KCk7dmFyIGF0PXt4OmF2LnBhZ2VYLWFwLmxlZnQseTphdi5wYWdlWS1hcC50b3B9O3ZhciBhcT17eGF4aXM6bnVsbCx5YXhpczpudWxsLHgyYXhpczpudWxsLHkyYXhpczpudWxsLHkzYXhpczpudWxsLHk0YXhpczpudWxsLHk1YXhpczpudWxsLHk2YXhpczpudWxsLHk3YXhpczpudWxsLHk4YXhpczpudWxsLHk5YXhpczpudWxsLHlNaWRBeGlzOm51bGx9O3ZhciBhcj1bInhheGlzIiwieWF4aXMiLCJ4MmF4aXMiLCJ5MmF4aXMiLCJ5M2F4aXMiLCJ5NGF4aXMiLCJ5NWF4aXMiLCJ5NmF4aXMiLCJ5N2F4aXMiLCJ5OGF4aXMiLCJ5OWF4aXMiLCJ5TWlkQXhpcyJdO3ZhciBhbD1hdS5heGVzO3ZhciBhbSxhbztmb3IoYW09MTE7YW0+MDthbS0tKXthbz1hclthbS0xXTtpZihhbFthb10uc2hvdyl7YXFbYW9dPWFsW2FvXS5zZXJpZXNfcDJ1KGF0W2FvLmNoYXJBdCgwKV0pfX1yZXR1cm57b2Zmc2V0czphcCxncmlkUG9zOmF0LGRhdGFQb3M6YXF9fWZ1bmN0aW9uIGFrKGFsLGFtKXt2YXIgYXE9YW0uc2VyaWVzO3ZhciBhVyxhVSxhVCxhTyxhUCxhSixhSSxhdyxhdSxheixhQSxhSzt2YXIgYVMsYVgsYVEsYXIsYUgsYU0sYVY7dmFyIGFuLGFOO2ZvcihhVD1hbS5zZXJpZXNTdGFjay5sZW5ndGgtMTthVD49MDthVC0tKXthVz1hbS5zZXJpZXNTdGFja1thVF07YU89YXFbYVddO2FWPWFPLl9oaWdobGlnaHRUaHJlc2hvbGQ7c3dpdGNoKGFPLnJlbmRlcmVyLmNvbnN0cnVjdG9yKXtjYXNlIEwuanFwbG90LkJhclJlbmRlcmVyOmFKPWFsLng7YUk9YWwueTtmb3IoYVU9MDthVTxhTy5fYmFyUG9pbnRzLmxlbmd0aDthVSsrKXthSD1hTy5fYmFyUG9pbnRzW2FVXTthUT1hTy5ncmlkRGF0YVthVV07aWYoYUo+YUhbMF1bMF0mJmFKPGFIWzJdWzBdJiZhST5hSFsyXVsxXSYmYUk8YUhbMF1bMV0pe3JldHVybntzZXJpZXNJbmRleDphTy5pbmRleCxwb2ludEluZGV4OmFVLGdyaWREYXRhOmFRLGRhdGE6YU8uZGF0YVthVV0scG9pbnRzOmFPLl9iYXJQb2ludHNbYVVdfX19YnJlYWs7Y2FzZSBMLmpxcGxvdC5QeXJhbWlkUmVuZGVyZXI6YUo9YWwueDthST1hbC55O2ZvcihhVT0wO2FVPGFPLl9iYXJQb2ludHMubGVuZ3RoO2FVKyspe2FIPWFPLl9iYXJQb2ludHNbYVVdO2FRPWFPLmdyaWREYXRhW2FVXTtpZihhSj5hSFswXVswXSthVlswXVswXSYmYUo8YUhbMl1bMF0rYVZbMl1bMF0mJmFJPmFIWzJdWzFdJiZhSTxhSFswXVsxXSl7cmV0dXJue3Nlcmllc0luZGV4OmFPLmluZGV4LHBvaW50SW5kZXg6YVUsZ3JpZERhdGE6YVEsZGF0YTphTy5kYXRhW2FVXSxwb2ludHM6YU8uX2JhclBvaW50c1thVV19fX1icmVhaztjYXNlIEwuanFwbG90LkRvbnV0UmVuZGVyZXI6YXo9YU8uc3RhcnRBbmdsZS8xODAqTWF0aC5QSTthSj1hbC54LWFPLl9jZW50ZXJbMF07YUk9YWwueS1hTy5fY2VudGVyWzFdO2FQPU1hdGguc3FydChNYXRoLnBvdyhhSiwyKStNYXRoLnBvdyhhSSwyKSk7aWYoYUo+MCYmLWFJPj0wKXthdz0yKk1hdGguUEktTWF0aC5hdGFuKC1hSS9hSil9ZWxzZXtpZihhSj4wJiYtYUk8MCl7YXc9LU1hdGguYXRhbigtYUkvYUopfWVsc2V7aWYoYUo8MCl7YXc9TWF0aC5QSS1NYXRoLmF0YW4oLWFJL2FKKX1lbHNle2lmKGFKPT0wJiYtYUk+MCl7YXc9MypNYXRoLlBJLzJ9ZWxzZXtpZihhSj09MCYmLWFJPDApe2F3PU1hdGguUEkvMn1lbHNle2lmKGFKPT0wJiZhST09MCl7YXc9MH19fX19fWlmKGF6KXthdy09YXo7aWYoYXc8MCl7YXcrPTIqTWF0aC5QSX1lbHNle2lmKGF3PjIqTWF0aC5QSSl7YXctPTIqTWF0aC5QSX19fWF1PWFPLnNsaWNlTWFyZ2luLzE4MCpNYXRoLlBJO2lmKGFQPGFPLl9yYWRpdXMmJmFQPmFPLl9pbm5lclJhZGl1cyl7Zm9yKGFVPTA7YVU8YU8uZ3JpZERhdGEubGVuZ3RoO2FVKyspe2FBPShhVT4wKT9hTy5ncmlkRGF0YVthVS0xXVsxXSthdTphdTthSz1hTy5ncmlkRGF0YVthVV1bMV07aWYoYXc+YUEmJmF3PGFLKXtyZXR1cm57c2VyaWVzSW5kZXg6YU8uaW5kZXgscG9pbnRJbmRleDphVSxncmlkRGF0YTpbYWwueCxhbC55XSxkYXRhOmFPLmRhdGFbYVVdfX19fWJyZWFrO2Nhc2UgTC5qcXBsb3QuUGllUmVuZGVyZXI6YXo9YU8uc3RhcnRBbmdsZS8xODAqTWF0aC5QSTthSj1hbC54LWFPLl9jZW50ZXJbMF07YUk9YWwueS1hTy5fY2VudGVyWzFdO2FQPU1hdGguc3FydChNYXRoLnBvdyhhSiwyKStNYXRoLnBvdyhhSSwyKSk7aWYoYUo+MCYmLWFJPj0wKXthdz0yKk1hdGguUEktTWF0aC5hdGFuKC1hSS9hSil9ZWxzZXtpZihhSj4wJiYtYUk8MCl7YXc9LU1hdGguYXRhbigtYUkvYUopfWVsc2V7aWYoYUo8MCl7YXc9TWF0aC5QSS1NYXRoLmF0YW4oLWFJL2FKKX1lbHNle2lmKGFKPT0wJiYtYUk+MCl7YXc9MypNYXRoLlBJLzJ9ZWxzZXtpZihhSj09MCYmLWFJPDApe2F3PU1hdGguUEkvMn1lbHNle2lmKGFKPT0wJiZhST09MCl7YXc9MH19fX19fWlmKGF6KXthdy09YXo7aWYoYXc8MCl7YXcrPTIqTWF0aC5QSX1lbHNle2lmKGF3PjIqTWF0aC5QSSl7YXctPTIqTWF0aC5QSX19fWF1PWFPLnNsaWNlTWFyZ2luLzE4MCpNYXRoLlBJO2lmKGFQPGFPLl9yYWRpdXMpe2ZvcihhVT0wO2FVPGFPLmdyaWREYXRhLmxlbmd0aDthVSsrKXthQT0oYVU+MCk/YU8uZ3JpZERhdGFbYVUtMV1bMV0rYXU6YXU7YUs9YU8uZ3JpZERhdGFbYVVdWzFdO2lmKGF3PmFBJiZhdzxhSyl7cmV0dXJue3Nlcmllc0luZGV4OmFPLmluZGV4LHBvaW50SW5kZXg6YVUsZ3JpZERhdGE6W2FsLngsYWwueV0sZGF0YTphTy5kYXRhW2FVXX19fX1icmVhaztjYXNlIEwuanFwbG90LkJ1YmJsZVJlbmRlcmVyOmFKPWFsLng7YUk9YWwueTt2YXIgYUY9bnVsbDtpZihhTy5zaG93KXtmb3IodmFyIGFVPTA7YVU8YU8uZ3JpZERhdGEubGVuZ3RoO2FVKyspe2FRPWFPLmdyaWREYXRhW2FVXTthWD1NYXRoLnNxcnQoKGFKLWFRWzBdKSooYUotYVFbMF0pKyhhSS1hUVsxXSkqKGFJLWFRWzFdKSk7aWYoYVg8PWFRWzJdJiYoYVg8PWFTfHxhUz09bnVsbCkpe2FTPWFYO2FGPXtzZXJpZXNJbmRleDphVyxwb2ludEluZGV4OmFVLGdyaWREYXRhOmFRLGRhdGE6YU8uZGF0YVthVV19fX1pZihhRiE9bnVsbCl7cmV0dXJuIGFGfX1icmVhaztjYXNlIEwuanFwbG90LkZ1bm5lbFJlbmRlcmVyOmFKPWFsLng7YUk9YWwueTt2YXIgYUw9YU8uX3ZlcnRpY2VzLGFwPWFMWzBdLGFvPWFMW2FMLmxlbmd0aC0xXSxhdCxhRSxheTtmdW5jdGlvbiBhUihhMCxhMixhMSl7dmFyIGFaPShhMlsxXS1hMVsxXSkvKGEyWzBdLWExWzBdKTt2YXIgYVk9YTJbMV0tYVoqYTJbMF07dmFyIGEzPWEwK2EyWzFdO3JldHVyblsoYTMtYVkpL2FaLGEzXX1hdD1hUihhSSxhcFswXSxhb1szXSk7YUU9YVIoYUksYXBbMV0sYW9bMl0pO2ZvcihhVT0wO2FVPGFMLmxlbmd0aDthVSsrKXtheT1hTFthVV07aWYoYUk+PWF5WzBdWzFdJiZhSTw9YXlbM11bMV0mJmFKPj1hdFswXSYmYUo8PWFFWzBdKXtyZXR1cm57c2VyaWVzSW5kZXg6YU8uaW5kZXgscG9pbnRJbmRleDphVSxncmlkRGF0YTpudWxsLGRhdGE6YU8uZGF0YVthVV19fX1icmVhaztjYXNlIEwuanFwbG90LkxpbmVSZW5kZXJlcjphSj1hbC54O2FJPWFsLnk7YVA9YU8ucmVuZGVyZXI7aWYoYU8uc2hvdyl7aWYoKGFPLmZpbGx8fChhTy5yZW5kZXJlci5iYW5kcy5zaG93JiZhTy5yZW5kZXJlci5iYW5kcy5maWxsKSkmJighYW0ucGx1Z2lucy5oaWdobGlnaHRlcnx8IWFtLnBsdWdpbnMuaGlnaGxpZ2h0ZXIuc2hvdykpe3ZhciBheD1mYWxzZTtpZihhSj5hTy5fYm91bmRpbmdCb3hbMF1bMF0mJmFKPGFPLl9ib3VuZGluZ0JveFsxXVswXSYmYUk+YU8uX2JvdW5kaW5nQm94WzFdWzFdJiZhSTxhTy5fYm91bmRpbmdCb3hbMF1bMV0pe3ZhciBhRD1hTy5fYXJlYVBvaW50cy5sZW5ndGg7dmFyIGFHO3ZhciBhVT1hRC0xO2Zvcih2YXIgYUc9MDthRzxhRDthRysrKXt2YXIgYUM9W2FPLl9hcmVhUG9pbnRzW2FHXVswXSxhTy5fYXJlYVBvaW50c1thR11bMV1dO3ZhciBhQj1bYU8uX2FyZWFQb2ludHNbYVVdWzBdLGFPLl9hcmVhUG9pbnRzW2FVXVsxXV07aWYoYUNbMV08YUkmJmFCWzFdPj1hSXx8YUJbMV08YUkmJmFDWzFdPj1hSSl7aWYoYUNbMF0rKGFJLWFDWzFdKS8oYUJbMV0tYUNbMV0pKihhQlswXS1hQ1swXSk8YUope2F4PSFheH19YVU9YUd9fWlmKGF4KXtyZXR1cm57c2VyaWVzSW5kZXg6YVcscG9pbnRJbmRleDpudWxsLGdyaWREYXRhOmFPLmdyaWREYXRhLGRhdGE6YU8uZGF0YSxwb2ludHM6YU8uX2FyZWFQb2ludHN9fWJyZWFrfWVsc2V7YU49YU8ubWFya2VyUmVuZGVyZXIuc2l6ZS8yK2FPLm5laWdoYm9yVGhyZXNob2xkO2FuPShhTj4wKT9hTjowO2Zvcih2YXIgYVU9MDthVTxhTy5ncmlkRGF0YS5sZW5ndGg7YVUrKyl7YVE9YU8uZ3JpZERhdGFbYVVdO2lmKGFQLmNvbnN0cnVjdG9yPT1MLmpxcGxvdC5PSExDUmVuZGVyZXIpe2lmKGFQLmNhbmRsZVN0aWNrKXt2YXIgYXY9YU8uX3lheGlzLnNlcmllc191MnA7aWYoYUo+PWFRWzBdLWFQLl9ib2R5V2lkdGgvMiYmYUo8PWFRWzBdK2FQLl9ib2R5V2lkdGgvMiYmYUk+PWF2KGFPLmRhdGFbYVVdWzJdKSYmYUk8PWF2KGFPLmRhdGFbYVVdWzNdKSl7cmV0dXJue3Nlcmllc0luZGV4OmFXLHBvaW50SW5kZXg6YVUsZ3JpZERhdGE6YVEsZGF0YTphTy5kYXRhW2FVXX19fWVsc2V7aWYoIWFQLmhsYyl7dmFyIGF2PWFPLl95YXhpcy5zZXJpZXNfdTJwO2lmKGFKPj1hUVswXS1hUC5fdGlja0xlbmd0aCYmYUo8PWFRWzBdK2FQLl90aWNrTGVuZ3RoJiZhST49YXYoYU8uZGF0YVthVV1bMl0pJiZhSTw9YXYoYU8uZGF0YVthVV1bM10pKXtyZXR1cm57c2VyaWVzSW5kZXg6YVcscG9pbnRJbmRleDphVSxncmlkRGF0YTphUSxkYXRhOmFPLmRhdGFbYVVdfX19ZWxzZXt2YXIgYXY9YU8uX3lheGlzLnNlcmllc191MnA7aWYoYUo+PWFRWzBdLWFQLl90aWNrTGVuZ3RoJiZhSjw9YVFbMF0rYVAuX3RpY2tMZW5ndGgmJmFJPj1hdihhTy5kYXRhW2FVXVsxXSkmJmFJPD1hdihhTy5kYXRhW2FVXVsyXSkpe3JldHVybntzZXJpZXNJbmRleDphVyxwb2ludEluZGV4OmFVLGdyaWREYXRhOmFRLGRhdGE6YU8uZGF0YVthVV19fX19fWVsc2V7aWYoYVFbMF0hPW51bGwmJmFRWzFdIT1udWxsKXthWD1NYXRoLnNxcnQoKGFKLWFRWzBdKSooYUotYVFbMF0pKyhhSS1hUVsxXSkqKGFJLWFRWzFdKSk7aWYoYVg8PWFuJiYoYVg8PWFTfHxhUz09bnVsbCkpe2FTPWFYO3JldHVybntzZXJpZXNJbmRleDphVyxwb2ludEluZGV4OmFVLGdyaWREYXRhOmFRLGRhdGE6YU8uZGF0YVthVV19fX19fX19YnJlYWs7ZGVmYXVsdDphSj1hbC54O2FJPWFsLnk7YVA9YU8ucmVuZGVyZXI7aWYoYU8uc2hvdyl7YU49YU8ubWFya2VyUmVuZGVyZXIuc2l6ZS8yK2FPLm5laWdoYm9yVGhyZXNob2xkO2FuPShhTj4wKT9hTjowO2Zvcih2YXIgYVU9MDthVTxhTy5ncmlkRGF0YS5sZW5ndGg7YVUrKyl7YVE9YU8uZ3JpZERhdGFbYVVdO2lmKGFQLmNvbnN0cnVjdG9yPT1MLmpxcGxvdC5PSExDUmVuZGVyZXIpe2lmKGFQLmNhbmRsZVN0aWNrKXt2YXIgYXY9YU8uX3lheGlzLnNlcmllc191MnA7aWYoYUo+PWFRWzBdLWFQLl9ib2R5V2lkdGgvMiYmYUo8PWFRWzBdK2FQLl9ib2R5V2lkdGgvMiYmYUk+PWF2KGFPLmRhdGFbYVVdWzJdKSYmYUk8PWF2KGFPLmRhdGFbYVVdWzNdKSl7cmV0dXJue3Nlcmllc0luZGV4OmFXLHBvaW50SW5kZXg6YVUsZ3JpZERhdGE6YVEsZGF0YTphTy5kYXRhW2FVXX19fWVsc2V7aWYoIWFQLmhsYyl7dmFyIGF2PWFPLl95YXhpcy5zZXJpZXNfdTJwO2lmKGFKPj1hUVswXS1hUC5fdGlja0xlbmd0aCYmYUo8PWFRWzBdK2FQLl90aWNrTGVuZ3RoJiZhST49YXYoYU8uZGF0YVthVV1bMl0pJiZhSTw9YXYoYU8uZGF0YVthVV1bM10pKXtyZXR1cm57c2VyaWVzSW5kZXg6YVcscG9pbnRJbmRleDphVSxncmlkRGF0YTphUSxkYXRhOmFPLmRhdGFbYVVdfX19ZWxzZXt2YXIgYXY9YU8uX3lheGlzLnNlcmllc191MnA7aWYoYUo+PWFRWzBdLWFQLl90aWNrTGVuZ3RoJiZhSjw9YVFbMF0rYVAuX3RpY2tMZW5ndGgmJmFJPj1hdihhTy5kYXRhW2FVXVsxXSkmJmFJPD1hdihhTy5kYXRhW2FVXVsyXSkpe3JldHVybntzZXJpZXNJbmRleDphVyxwb2ludEluZGV4OmFVLGdyaWREYXRhOmFRLGRhdGE6YU8uZGF0YVthVV19fX19fWVsc2V7YVg9TWF0aC5zcXJ0KChhSi1hUVswXSkqKGFKLWFRWzBdKSsoYUktYVFbMV0pKihhSS1hUVsxXSkpO2lmKGFYPD1hbiYmKGFYPD1hU3x8YVM9PW51bGwpKXthUz1hWDtyZXR1cm57c2VyaWVzSW5kZXg6YVcscG9pbnRJbmRleDphVSxncmlkRGF0YTphUSxkYXRhOmFPLmRhdGFbYVVdfX19fX1icmVha319cmV0dXJuIG51bGx9dGhpcy5vbkNsaWNrPWZ1bmN0aW9uKGFuKXt2YXIgYW09YWkoYW4pO3ZhciBhcD1hbi5kYXRhLnBsb3Q7dmFyIGFvPWFrKGFtLmdyaWRQb3MsYXApO3ZhciBhbD1MLkV2ZW50KCJqcXBsb3RDbGljayIpO2FsLnBhZ2VYPWFuLnBhZ2VYO2FsLnBhZ2VZPWFuLnBhZ2VZO0wodGhpcykudHJpZ2dlcihhbCxbYW0uZ3JpZFBvcyxhbS5kYXRhUG9zLGFvLGFwXSl9O3RoaXMub25EYmxDbGljaz1mdW5jdGlvbihhbil7dmFyIGFtPWFpKGFuKTt2YXIgYXA9YW4uZGF0YS5wbG90O3ZhciBhbz1hayhhbS5ncmlkUG9zLGFwKTt2YXIgYWw9TC5FdmVudCgianFwbG90RGJsQ2xpY2siKTthbC5wYWdlWD1hbi5wYWdlWDthbC5wYWdlWT1hbi5wYWdlWTtMKHRoaXMpLnRyaWdnZXIoYWwsW2FtLmdyaWRQb3MsYW0uZGF0YVBvcyxhbyxhcF0pfTt0aGlzLm9uTW91c2VEb3duPWZ1bmN0aW9uKGFuKXt2YXIgYW09YWkoYW4pO3ZhciBhcD1hbi5kYXRhLnBsb3Q7dmFyIGFvPWFrKGFtLmdyaWRQb3MsYXApO3ZhciBhbD1MLkV2ZW50KCJqcXBsb3RNb3VzZURvd24iKTthbC5wYWdlWD1hbi5wYWdlWDthbC5wYWdlWT1hbi5wYWdlWTtMKHRoaXMpLnRyaWdnZXIoYWwsW2FtLmdyaWRQb3MsYW0uZGF0YVBvcyxhbyxhcF0pfTt0aGlzLm9uTW91c2VVcD1mdW5jdGlvbihhbil7dmFyIGFtPWFpKGFuKTt2YXIgYWw9TC5FdmVudCgianFwbG90TW91c2VVcCIpO2FsLnBhZ2VYPWFuLnBhZ2VYO2FsLnBhZ2VZPWFuLnBhZ2VZO0wodGhpcykudHJpZ2dlcihhbCxbYW0uZ3JpZFBvcyxhbS5kYXRhUG9zLG51bGwsYW4uZGF0YS5wbG90XSl9O3RoaXMub25SaWdodENsaWNrPWZ1bmN0aW9uKGFuKXt2YXIgYW09YWkoYW4pO3ZhciBhcD1hbi5kYXRhLnBsb3Q7dmFyIGFvPWFrKGFtLmdyaWRQb3MsYXApO2lmKGFwLmNhcHR1cmVSaWdodENsaWNrKXtpZihhbi53aGljaD09Myl7dmFyIGFsPUwuRXZlbnQoImpxcGxvdFJpZ2h0Q2xpY2siKTthbC5wYWdlWD1hbi5wYWdlWDthbC5wYWdlWT1hbi5wYWdlWTtMKHRoaXMpLnRyaWdnZXIoYWwsW2FtLmdyaWRQb3MsYW0uZGF0YVBvcyxhbyxhcF0pfWVsc2V7dmFyIGFsPUwuRXZlbnQoImpxcGxvdE1vdXNlVXAiKTthbC5wYWdlWD1hbi5wYWdlWDthbC5wYWdlWT1hbi5wYWdlWTtMKHRoaXMpLnRyaWdnZXIoYWwsW2FtLmdyaWRQb3MsYW0uZGF0YVBvcyxhbyxhcF0pfX19O3RoaXMub25Nb3VzZU1vdmU9ZnVuY3Rpb24oYW4pe3ZhciBhbT1haShhbik7dmFyIGFwPWFuLmRhdGEucGxvdDt2YXIgYW89YWsoYW0uZ3JpZFBvcyxhcCk7dmFyIGFsPUwuRXZlbnQoImpxcGxvdE1vdXNlTW92ZSIpO2FsLnBhZ2VYPWFuLnBhZ2VYO2FsLnBhZ2VZPWFuLnBhZ2VZO0wodGhpcykudHJpZ2dlcihhbCxbYW0uZ3JpZFBvcyxhbS5kYXRhUG9zLGFvLGFwXSl9O3RoaXMub25Nb3VzZUVudGVyPWZ1bmN0aW9uKGFuKXt2YXIgYW09YWkoYW4pO3ZhciBhbz1hbi5kYXRhLnBsb3Q7dmFyIGFsPUwuRXZlbnQoImpxcGxvdE1vdXNlRW50ZXIiKTthbC5wYWdlWD1hbi5wYWdlWDthbC5wYWdlWT1hbi5wYWdlWTthbC5yZWxhdGVkVGFyZ2V0PWFuLnJlbGF0ZWRUYXJnZXQ7TCh0aGlzKS50cmlnZ2VyKGFsLFthbS5ncmlkUG9zLGFtLmRhdGFQb3MsbnVsbCxhb10pfTt0aGlzLm9uTW91c2VMZWF2ZT1mdW5jdGlvbihhbil7dmFyIGFtPWFpKGFuKTt2YXIgYW89YW4uZGF0YS5wbG90O3ZhciBhbD1MLkV2ZW50KCJqcXBsb3RNb3VzZUxlYXZlIik7YWwucGFnZVg9YW4ucGFnZVg7YWwucGFnZVk9YW4ucGFnZVk7YWwucmVsYXRlZFRhcmdldD1hbi5yZWxhdGVkVGFyZ2V0O0wodGhpcykudHJpZ2dlcihhbCxbYW0uZ3JpZFBvcyxhbS5kYXRhUG9zLG51bGwsYW9dKX07dGhpcy5kcmF3U2VyaWVzPWZ1bmN0aW9uKGFuLGFsKXt2YXIgYXAsYW8sYW07YWw9KHR5cGVvZihhbik9PT0ibnVtYmVyIiYmYWw9PW51bGwpP2FuOmFsO2FuPSh0eXBlb2YoYW4pPT09Im9iamVjdCIpP2FuOnt9O2lmKGFsIT11KXthbz10aGlzLnNlcmllc1thbF07YW09YW8uc2hhZG93Q2FudmFzLl9jdHg7YW0uY2xlYXJSZWN0KDAsMCxhbS5jYW52YXMud2lkdGgsYW0uY2FudmFzLmhlaWdodCk7YW8uZHJhd1NoYWRvdyhhbSxhbix0aGlzKTthbT1hby5jYW52YXMuX2N0eDthbS5jbGVhclJlY3QoMCwwLGFtLmNhbnZhcy53aWR0aCxhbS5jYW52YXMuaGVpZ2h0KTthby5kcmF3KGFtLGFuLHRoaXMpO2lmKGFvLnJlbmRlcmVyLmNvbnN0cnVjdG9yPT1MLmpxcGxvdC5CZXppZXJDdXJ2ZVJlbmRlcmVyKXtpZihhbDx0aGlzLnNlcmllcy5sZW5ndGgtMSl7dGhpcy5kcmF3U2VyaWVzKGFsKzEpfX19ZWxzZXtmb3IoYXA9MDthcDx0aGlzLnNlcmllcy5sZW5ndGg7YXArKyl7YW89dGhpcy5zZXJpZXNbYXBdO2FtPWFvLnNoYWRvd0NhbnZhcy5fY3R4O2FtLmNsZWFyUmVjdCgwLDAsYW0uY2FudmFzLndpZHRoLGFtLmNhbnZhcy5oZWlnaHQpO2FvLmRyYXdTaGFkb3coYW0sYW4sdGhpcyk7YW09YW8uY2FudmFzLl9jdHg7YW0uY2xlYXJSZWN0KDAsMCxhbS5jYW52YXMud2lkdGgsYW0uY2FudmFzLmhlaWdodCk7YW8uZHJhdyhhbSxhbix0aGlzKX19YW49YWw9YXA9YW89YW09bnVsbH07dGhpcy5tb3ZlU2VyaWVzVG9Gcm9udD1mdW5jdGlvbihhbSl7YW09cGFyc2VJbnQoYW0sMTApO3ZhciBhcD1MLmluQXJyYXkoYW0sdGhpcy5zZXJpZXNTdGFjayk7aWYoYXA9PS0xKXtyZXR1cm59aWYoYXA9PXRoaXMuc2VyaWVzU3RhY2subGVuZ3RoLTEpe3RoaXMucHJldmlvdXNTZXJpZXNTdGFjaz10aGlzLnNlcmllc1N0YWNrLnNsaWNlKDApO3JldHVybn12YXIgYWw9dGhpcy5zZXJpZXNTdGFja1t0aGlzLnNlcmllc1N0YWNrLmxlbmd0aC0xXTt2YXIgYW89dGhpcy5zZXJpZXNbYW1dLmNhbnZhcy5fZWxlbS5kZXRhY2goKTt2YXIgYW49dGhpcy5zZXJpZXNbYW1dLnNoYWRvd0NhbnZhcy5fZWxlbS5kZXRhY2goKTt0aGlzLnNlcmllc1thbF0uc2hhZG93Q2FudmFzLl9lbGVtLmFmdGVyKGFuKTt0aGlzLnNlcmllc1thbF0uY2FudmFzLl9lbGVtLmFmdGVyKGFvKTt0aGlzLnByZXZpb3VzU2VyaWVzU3RhY2s9dGhpcy5zZXJpZXNTdGFjay5zbGljZSgwKTt0aGlzLnNlcmllc1N0YWNrLnNwbGljZShhcCwxKTt0aGlzLnNlcmllc1N0YWNrLnB1c2goYW0pfTt0aGlzLm1vdmVTZXJpZXNUb0JhY2s9ZnVuY3Rpb24oYW0pe2FtPXBhcnNlSW50KGFtLDEwKTt2YXIgYXA9TC5pbkFycmF5KGFtLHRoaXMuc2VyaWVzU3RhY2spO2lmKGFwPT0wfHxhcD09LTEpe3JldHVybn12YXIgYWw9dGhpcy5zZXJpZXNTdGFja1swXTt2YXIgYW89dGhpcy5zZXJpZXNbYW1dLmNhbnZhcy5fZWxlbS5kZXRhY2goKTt2YXIgYW49dGhpcy5zZXJpZXNbYW1dLnNoYWRvd0NhbnZhcy5fZWxlbS5kZXRhY2goKTt0aGlzLnNlcmllc1thbF0uc2hhZG93Q2FudmFzLl9lbGVtLmJlZm9yZShhbik7dGhpcy5zZXJpZXNbYWxdLmNhbnZhcy5fZWxlbS5iZWZvcmUoYW8pO3RoaXMucHJldmlvdXNTZXJpZXNTdGFjaz10aGlzLnNlcmllc1N0YWNrLnNsaWNlKDApO3RoaXMuc2VyaWVzU3RhY2suc3BsaWNlKGFwLDEpO3RoaXMuc2VyaWVzU3RhY2sudW5zaGlmdChhbSl9O3RoaXMucmVzdG9yZVByZXZpb3VzU2VyaWVzT3JkZXI9ZnVuY3Rpb24oKXt2YXIgYXIsYXEsYXAsYW8sYW4sYWwsYW07aWYodGhpcy5zZXJpZXNTdGFjaz09dGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrKXtyZXR1cm59Zm9yKGFyPTE7YXI8dGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrLmxlbmd0aDthcisrKXthbD10aGlzLnByZXZpb3VzU2VyaWVzU3RhY2tbYXJdO2FtPXRoaXMucHJldmlvdXNTZXJpZXNTdGFja1thci0xXTthcD10aGlzLnNlcmllc1thbF0uY2FudmFzLl9lbGVtLmRldGFjaCgpO2FvPXRoaXMuc2VyaWVzW2FsXS5zaGFkb3dDYW52YXMuX2VsZW0uZGV0YWNoKCk7dGhpcy5zZXJpZXNbYW1dLnNoYWRvd0NhbnZhcy5fZWxlbS5hZnRlcihhbyk7dGhpcy5zZXJpZXNbYW1dLmNhbnZhcy5fZWxlbS5hZnRlcihhcCl9YW49dGhpcy5zZXJpZXNTdGFjay5zbGljZSgwKTt0aGlzLnNlcmllc1N0YWNrPXRoaXMucHJldmlvdXNTZXJpZXNTdGFjay5zbGljZSgwKTt0aGlzLnByZXZpb3VzU2VyaWVzU3RhY2s9YW59O3RoaXMucmVzdG9yZU9yaWdpbmFsU2VyaWVzT3JkZXI9ZnVuY3Rpb24oKXt2YXIgYXAsYW8sYWw9W10sYW4sYW07Zm9yKGFwPTA7YXA8dGhpcy5zZXJpZXMubGVuZ3RoO2FwKyspe2FsLnB1c2goYXApfWlmKHRoaXMuc2VyaWVzU3RhY2s9PWFsKXtyZXR1cm59dGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrPXRoaXMuc2VyaWVzU3RhY2suc2xpY2UoMCk7dGhpcy5zZXJpZXNTdGFjaz1hbDtmb3IoYXA9MTthcDx0aGlzLnNlcmllc1N0YWNrLmxlbmd0aDthcCsrKXthbj10aGlzLnNlcmllc1thcF0uY2FudmFzLl9lbGVtLmRldGFjaCgpO2FtPXRoaXMuc2VyaWVzW2FwXS5zaGFkb3dDYW52YXMuX2VsZW0uZGV0YWNoKCk7dGhpcy5zZXJpZXNbYXAtMV0uc2hhZG93Q2FudmFzLl9lbGVtLmFmdGVyKGFtKTt0aGlzLnNlcmllc1thcC0xXS5jYW52YXMuX2VsZW0uYWZ0ZXIoYW4pfX07dGhpcy5hY3RpdmF0ZVRoZW1lPWZ1bmN0aW9uKGFsKXt0aGlzLnRoZW1lRW5naW5lLmFjdGl2YXRlKHRoaXMsYWwpfX1MLmpxcGxvdC5jb21wdXRlSGlnaGxpZ2h0Q29sb3JzPWZ1bmN0aW9uKGFpKXt2YXIgYWs7aWYoTC5pc0FycmF5KGFpKSl7YWs9W107Zm9yKHZhciBhbT0wO2FtPGFpLmxlbmd0aDthbSsrKXt2YXIgYWw9TC5qcXBsb3QuZ2V0Q29sb3JDb21wb25lbnRzKGFpW2FtXSk7dmFyIGFoPVthbFswXSxhbFsxXSxhbFsyXV07dmFyIGFuPWFoWzBdK2FoWzFdK2FoWzJdO2Zvcih2YXIgYWo9MDthajwzO2FqKyspe2FoW2FqXT0oYW4+NjYwKT9haFthal0qMC44NTowLjczKmFoW2FqXSs5MDthaFthal09cGFyc2VJbnQoYWhbYWpdLDEwKTsoYWhbYWpdPjI1NSk/MjU1OmFoW2FqXX1haFszXT0wLjMrMC4zNSphbFszXTthay5wdXNoKCJyZ2JhKCIrYWhbMF0rIiwiK2FoWzFdKyIsIithaFsyXSsiLCIrYWhbM10rIikiKX19ZWxzZXt2YXIgYWw9TC5qcXBsb3QuZ2V0Q29sb3JDb21wb25lbnRzKGFpKTt2YXIgYWg9W2FsWzBdLGFsWzFdLGFsWzJdXTt2YXIgYW49YWhbMF0rYWhbMV0rYWhbMl07Zm9yKHZhciBhaj0wO2FqPDM7YWorKyl7YWhbYWpdPShhbj42NjApP2FoW2FqXSowLjg1OjAuNzMqYWhbYWpdKzkwO2FoW2FqXT1wYXJzZUludChhaFthal0sMTApOyhhaFthal0+MjU1KT8yNTU6YWhbYWpdfWFoWzNdPTAuMyswLjM1KmFsWzNdO2FrPSJyZ2JhKCIrYWhbMF0rIiwiK2FoWzFdKyIsIithaFsyXSsiLCIrYWhbM10rIikifXJldHVybiBha307TC5qcXBsb3QuQ29sb3JHZW5lcmF0b3I9ZnVuY3Rpb24oYWkpe2FpPWFpfHxMLmpxcGxvdC5jb25maWcuZGVmYXVsdENvbG9yczt2YXIgYWg9MDt0aGlzLm5leHQ9ZnVuY3Rpb24oKXtpZihhaDxhaS5sZW5ndGgpe3JldHVybiBhaVthaCsrXX1lbHNle2FoPTA7cmV0dXJuIGFpW2FoKytdfX07dGhpcy5wcmV2aW91cz1mdW5jdGlvbigpe2lmKGFoPjApe3JldHVybiBhaVthaC0tXX1lbHNle2FoPWFpLmxlbmd0aC0xO3JldHVybiBhaVthaF19fTt0aGlzLmdldD1mdW5jdGlvbihhayl7dmFyIGFqPWFrLWFpLmxlbmd0aCpNYXRoLmZsb29yKGFrL2FpLmxlbmd0aCk7cmV0dXJuIGFpW2FqXX07dGhpcy5zZXRDb2xvcnM9ZnVuY3Rpb24oYWope2FpPWFqfTt0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7YWg9MH07dGhpcy5nZXRJbmRleD1mdW5jdGlvbigpe3JldHVybiBhaH07dGhpcy5zZXRJbmRleD1mdW5jdGlvbihhail7YWg9YWp9fTtMLmpxcGxvdC5oZXgycmdiPWZ1bmN0aW9uKGFqLGFoKXthaj1hai5yZXBsYWNlKCIjIiwiIik7aWYoYWoubGVuZ3RoPT0zKXthaj1hai5jaGFyQXQoMCkrYWouY2hhckF0KDApK2FqLmNoYXJBdCgxKSthai5jaGFyQXQoMSkrYWouY2hhckF0KDIpK2FqLmNoYXJBdCgyKX12YXIgYWk7YWk9InJnYmEoIitwYXJzZUludChhai5zbGljZSgwLDIpLDE2KSsiLCAiK3BhcnNlSW50KGFqLnNsaWNlKDIsNCksMTYpKyIsICIrcGFyc2VJbnQoYWouc2xpY2UoNCw2KSwxNik7aWYoYWgpe2FpKz0iLCAiK2FofWFpKz0iKSI7cmV0dXJuIGFpfTtMLmpxcGxvdC5yZ2IyaGV4PWZ1bmN0aW9uKGFtKXt2YXIgYWo9L3JnYmE/XCggKihbMC05XXsxLDN9XC4/WzAtOV0qJT8pICosICooWzAtOV17MSwzfVwuP1swLTldKiU/KSAqLCAqKFswLTldezEsM31cLj9bMC05XSolPykgKig/OiwgKlswLTkuXSopP1wpLzt2YXIgYWg9YW0ubWF0Y2goYWopO3ZhciBhbD0iIyI7Zm9yKHZhciBhaz0xO2FrPDQ7YWsrKyl7dmFyIGFpO2lmKGFoW2FrXS5zZWFyY2goLyUvKSE9LTEpe2FpPXBhcnNlSW50KDI1NSphaFtha10vMTAwLDEwKS50b1N0cmluZygxNik7aWYoYWkubGVuZ3RoPT0xKXthaT0iMCIrYWl9fWVsc2V7YWk9cGFyc2VJbnQoYWhbYWtdLDEwKS50b1N0cmluZygxNik7aWYoYWkubGVuZ3RoPT0xKXthaT0iMCIrYWl9fWFsKz1haX1yZXR1cm4gYWx9O0wuanFwbG90Lm5vcm1hbGl6ZTJyZ2I9ZnVuY3Rpb24oYWksYWgpe2lmKGFpLnNlYXJjaCgvXiAqcmdiYT9cKC8pIT0tMSl7cmV0dXJuIGFpfWVsc2V7aWYoYWkuc2VhcmNoKC9eICojP1swLTlhLWZBLUZdP1swLTlhLWZBLUZdLykhPS0xKXtyZXR1cm4gTC5qcXBsb3QuaGV4MnJnYihhaSxhaCl9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29sb3Igc3BlYyIpfX19O0wuanFwbG90LmdldENvbG9yQ29tcG9uZW50cz1mdW5jdGlvbihhbSl7YW09TC5qcXBsb3QuY29sb3JLZXl3b3JkTWFwW2FtXXx8YW07dmFyIGFrPUwuanFwbG90Lm5vcm1hbGl6ZTJyZ2IoYW0pO3ZhciBhaj0vcmdiYT9cKCAqKFswLTldezEsM31cLj9bMC05XSolPykgKiwgKihbMC05XXsxLDN9XC4/WzAtOV0qJT8pICosICooWzAtOV17MSwzfVwuP1swLTldKiU/KSAqLD8gKihbMC05Ll0qICopP1wpLzt2YXIgYWg9YWsubWF0Y2goYWopO3ZhciBhaT1bXTtmb3IodmFyIGFsPTE7YWw8NDthbCsrKXtpZihhaFthbF0uc2VhcmNoKC8lLykhPS0xKXthaVthbC0xXT1wYXJzZUludCgyNTUqYWhbYWxdLzEwMCwxMCl9ZWxzZXthaVthbC0xXT1wYXJzZUludChhaFthbF0sMTApfX1haVszXT1wYXJzZUZsb2F0KGFoWzRdKT9wYXJzZUZsb2F0KGFoWzRdKToxO3JldHVybiBhaX07TC5qcXBsb3QuY29sb3JLZXl3b3JkTWFwPXthbGljZWJsdWU6InJnYigyNDAsIDI0OCwgMjU1KSIsYW50aXF1ZXdoaXRlOiJyZ2IoMjUwLCAyMzUsIDIxNSkiLGFxdWE6InJnYiggMCwgMjU1LCAyNTUpIixhcXVhbWFyaW5lOiJyZ2IoMTI3LCAyNTUsIDIxMikiLGF6dXJlOiJyZ2IoMjQwLCAyNTUsIDI1NSkiLGJlaWdlOiJyZ2IoMjQ1LCAyNDUsIDIyMCkiLGJpc3F1ZToicmdiKDI1NSwgMjI4LCAxOTYpIixibGFjazoicmdiKCAwLCAwLCAwKSIsYmxhbmNoZWRhbG1vbmQ6InJnYigyNTUsIDIzNSwgMjA1KSIsYmx1ZToicmdiKCAwLCAwLCAyNTUpIixibHVldmlvbGV0OiJyZ2IoMTM4LCA0MywgMjI2KSIsYnJvd246InJnYigxNjUsIDQyLCA0MikiLGJ1cmx5d29vZDoicmdiKDIyMiwgMTg0LCAxMzUpIixjYWRldGJsdWU6InJnYiggOTUsIDE1OCwgMTYwKSIsY2hhcnRyZXVzZToicmdiKDEyNywgMjU1LCAwKSIsY2hvY29sYXRlOiJyZ2IoMjEwLCAxMDUsIDMwKSIsY29yYWw6InJnYigyNTUsIDEyNywgODApIixjb3JuZmxvd2VyYmx1ZToicmdiKDEwMCwgMTQ5LCAyMzcpIixjb3Juc2lsazoicmdiKDI1NSwgMjQ4LCAyMjApIixjcmltc29uOiJyZ2IoMjIwLCAyMCwgNjApIixjeWFuOiJyZ2IoIDAsIDI1NSwgMjU1KSIsZGFya2JsdWU6InJnYiggMCwgMCwgMTM5KSIsZGFya2N5YW46InJnYiggMCwgMTM5LCAxMzkpIixkYXJrZ29sZGVucm9kOiJyZ2IoMTg0LCAxMzQsIDExKSIsZGFya2dyYXk6InJnYigxNjksIDE2OSwgMTY5KSIsZGFya2dyZWVuOiJyZ2IoIDAsIDEwMCwgMCkiLGRhcmtncmV5OiJyZ2IoMTY5LCAxNjksIDE2OSkiLGRhcmtraGFraToicmdiKDE4OSwgMTgzLCAxMDcpIixkYXJrbWFnZW50YToicmdiKDEzOSwgMCwgMTM5KSIsZGFya29saXZlZ3JlZW46InJnYiggODUsIDEwNywgNDcpIixkYXJrb3JhbmdlOiJyZ2IoMjU1LCAxNDAsIDApIixkYXJrb3JjaGlkOiJyZ2IoMTUzLCA1MCwgMjA0KSIsZGFya3JlZDoicmdiKDEzOSwgMCwgMCkiLGRhcmtzYWxtb246InJnYigyMzMsIDE1MCwgMTIyKSIsZGFya3NlYWdyZWVuOiJyZ2IoMTQzLCAxODgsIDE0MykiLGRhcmtzbGF0ZWJsdWU6InJnYiggNzIsIDYxLCAxMzkpIixkYXJrc2xhdGVncmF5OiJyZ2IoIDQ3LCA3OSwgNzkpIixkYXJrc2xhdGVncmV5OiJyZ2IoIDQ3LCA3OSwgNzkpIixkYXJrdHVycXVvaXNlOiJyZ2IoIDAsIDIwNiwgMjA5KSIsZGFya3Zpb2xldDoicmdiKDE0OCwgMCwgMjExKSIsZGVlcHBpbms6InJnYigyNTUsIDIwLCAxNDcpIixkZWVwc2t5Ymx1ZToicmdiKCAwLCAxOTEsIDI1NSkiLGRpbWdyYXk6InJnYigxMDUsIDEwNSwgMTA1KSIsZGltZ3JleToicmdiKDEwNSwgMTA1LCAxMDUpIixkb2RnZXJibHVlOiJyZ2IoIDMwLCAxNDQsIDI1NSkiLGZpcmVicmljazoicmdiKDE3OCwgMzQsIDM0KSIsZmxvcmFsd2hpdGU6InJnYigyNTUsIDI1MCwgMjQwKSIsZm9yZXN0Z3JlZW46InJnYiggMzQsIDEzOSwgMzQpIixmdWNoc2lhOiJyZ2IoMjU1LCAwLCAyNTUpIixnYWluc2Jvcm86InJnYigyMjAsIDIyMCwgMjIwKSIsZ2hvc3R3aGl0ZToicmdiKDI0OCwgMjQ4LCAyNTUpIixnb2xkOiJyZ2IoMjU1LCAyMTUsIDApIixnb2xkZW5yb2Q6InJnYigyMTgsIDE2NSwgMzIpIixncmF5OiJyZ2IoMTI4LCAxMjgsIDEyOCkiLGdyZXk6InJnYigxMjgsIDEyOCwgMTI4KSIsZ3JlZW46InJnYiggMCwgMTI4LCAwKSIsZ3JlZW55ZWxsb3c6InJnYigxNzMsIDI1NSwgNDcpIixob25leWRldzoicmdiKDI0MCwgMjU1LCAyNDApIixob3RwaW5rOiJyZ2IoMjU1LCAxMDUsIDE4MCkiLGluZGlhbnJlZDoicmdiKDIwNSwgOTIsIDkyKSIsaW5kaWdvOiJyZ2IoIDc1LCAwLCAxMzApIixpdm9yeToicmdiKDI1NSwgMjU1LCAyNDApIixraGFraToicmdiKDI0MCwgMjMwLCAxNDApIixsYXZlbmRlcjoicmdiKDIzMCwgMjMwLCAyNTApIixsYXZlbmRlcmJsdXNoOiJyZ2IoMjU1LCAyNDAsIDI0NSkiLGxhd25ncmVlbjoicmdiKDEyNCwgMjUyLCAwKSIsbGVtb25jaGlmZm9uOiJyZ2IoMjU1LCAyNTAsIDIwNSkiLGxpZ2h0Ymx1ZToicmdiKDE3MywgMjE2LCAyMzApIixsaWdodGNvcmFsOiJyZ2IoMjQwLCAxMjgsIDEyOCkiLGxpZ2h0Y3lhbjoicmdiKDIyNCwgMjU1LCAyNTUpIixsaWdodGdvbGRlbnJvZHllbGxvdzoicmdiKDI1MCwgMjUwLCAyMTApIixsaWdodGdyYXk6InJnYigyMTEsIDIxMSwgMjExKSIsbGlnaHRncmVlbjoicmdiKDE0NCwgMjM4LCAxNDQpIixsaWdodGdyZXk6InJnYigyMTEsIDIxMSwgMjExKSIsbGlnaHRwaW5rOiJyZ2IoMjU1LCAxODIsIDE5MykiLGxpZ2h0c2FsbW9uOiJyZ2IoMjU1LCAxNjAsIDEyMikiLGxpZ2h0c2VhZ3JlZW46InJnYiggMzIsIDE3OCwgMTcwKSIsbGlnaHRza3libHVlOiJyZ2IoMTM1LCAyMDYsIDI1MCkiLGxpZ2h0c2xhdGVncmF5OiJyZ2IoMTE5LCAxMzYsIDE1MykiLGxpZ2h0c2xhdGVncmV5OiJyZ2IoMTE5LCAxMzYsIDE1MykiLGxpZ2h0c3RlZWxibHVlOiJyZ2IoMTc2LCAxOTYsIDIyMikiLGxpZ2h0eWVsbG93OiJyZ2IoMjU1LCAyNTUsIDIyNCkiLGxpbWU6InJnYiggMCwgMjU1LCAwKSIsbGltZWdyZWVuOiJyZ2IoIDUwLCAyMDUsIDUwKSIsbGluZW46InJnYigyNTAsIDI0MCwgMjMwKSIsbWFnZW50YToicmdiKDI1NSwgMCwgMjU1KSIsbWFyb29uOiJyZ2IoMTI4LCAwLCAwKSIsbWVkaXVtYXF1YW1hcmluZToicmdiKDEwMiwgMjA1LCAxNzApIixtZWRpdW1ibHVlOiJyZ2IoIDAsIDAsIDIwNSkiLG1lZGl1bW9yY2hpZDoicmdiKDE4NiwgODUsIDIxMSkiLG1lZGl1bXB1cnBsZToicmdiKDE0NywgMTEyLCAyMTkpIixtZWRpdW1zZWFncmVlbjoicmdiKCA2MCwgMTc5LCAxMTMpIixtZWRpdW1zbGF0ZWJsdWU6InJnYigxMjMsIDEwNCwgMjM4KSIsbWVkaXVtc3ByaW5nZ3JlZW46InJnYiggMCwgMjUwLCAxNTQpIixtZWRpdW10dXJxdW9pc2U6InJnYiggNzIsIDIwOSwgMjA0KSIsbWVkaXVtdmlvbGV0cmVkOiJyZ2IoMTk5LCAyMSwgMTMzKSIsbWlkbmlnaHRibHVlOiJyZ2IoIDI1LCAyNSwgMTEyKSIsbWludGNyZWFtOiJyZ2IoMjQ1LCAyNTUsIDI1MCkiLG1pc3R5cm9zZToicmdiKDI1NSwgMjI4LCAyMjUpIixtb2NjYXNpbjoicmdiKDI1NSwgMjI4LCAxODEpIixuYXZham93aGl0ZToicmdiKDI1NSwgMjIyLCAxNzMpIixuYXZ5OiJyZ2IoIDAsIDAsIDEyOCkiLG9sZGxhY2U6InJnYigyNTMsIDI0NSwgMjMwKSIsb2xpdmU6InJnYigxMjgsIDEyOCwgMCkiLG9saXZlZHJhYjoicmdiKDEwNywgMTQyLCAzNSkiLG9yYW5nZToicmdiKDI1NSwgMTY1LCAwKSIsb3JhbmdlcmVkOiJyZ2IoMjU1LCA2OSwgMCkiLG9yY2hpZDoicmdiKDIxOCwgMTEyLCAyMTQpIixwYWxlZ29sZGVucm9kOiJyZ2IoMjM4LCAyMzIsIDE3MCkiLHBhbGVncmVlbjoicmdiKDE1MiwgMjUxLCAxNTIpIixwYWxldHVycXVvaXNlOiJyZ2IoMTc1LCAyMzgsIDIzOCkiLHBhbGV2aW9sZXRyZWQ6InJnYigyMTksIDExMiwgMTQ3KSIscGFwYXlhd2hpcDoicmdiKDI1NSwgMjM5LCAyMTMpIixwZWFjaHB1ZmY6InJnYigyNTUsIDIxOCwgMTg1KSIscGVydToicmdiKDIwNSwgMTMzLCA2MykiLHBpbms6InJnYigyNTUsIDE5MiwgMjAzKSIscGx1bToicmdiKDIyMSwgMTYwLCAyMjEpIixwb3dkZXJibHVlOiJyZ2IoMTc2LCAyMjQsIDIzMCkiLHB1cnBsZToicmdiKDEyOCwgMCwgMTI4KSIscmVkOiJyZ2IoMjU1LCAwLCAwKSIscm9zeWJyb3duOiJyZ2IoMTg4LCAxNDMsIDE0MykiLHJveWFsYmx1ZToicmdiKCA2NSwgMTA1LCAyMjUpIixzYWRkbGVicm93bjoicmdiKDEzOSwgNjksIDE5KSIsc2FsbW9uOiJyZ2IoMjUwLCAxMjgsIDExNCkiLHNhbmR5YnJvd246InJnYigyNDQsIDE2NCwgOTYpIixzZWFncmVlbjoicmdiKCA0NiwgMTM5LCA4NykiLHNlYXNoZWxsOiJyZ2IoMjU1LCAyNDUsIDIzOCkiLHNpZW5uYToicmdiKDE2MCwgODIsIDQ1KSIsc2lsdmVyOiJyZ2IoMTkyLCAxOTIsIDE5MikiLHNreWJsdWU6InJnYigxMzUsIDIwNiwgMjM1KSIsc2xhdGVibHVlOiJyZ2IoMTA2LCA5MCwgMjA1KSIsc2xhdGVncmF5OiJyZ2IoMTEyLCAxMjgsIDE0NCkiLHNsYXRlZ3JleToicmdiKDExMiwgMTI4LCAxNDQpIixzbm93OiJyZ2IoMjU1LCAyNTAsIDI1MCkiLHNwcmluZ2dyZWVuOiJyZ2IoIDAsIDI1NSwgMTI3KSIsc3RlZWxibHVlOiJyZ2IoIDcwLCAxMzAsIDE4MCkiLHRhbjoicmdiKDIxMCwgMTgwLCAxNDApIix0ZWFsOiJyZ2IoIDAsIDEyOCwgMTI4KSIsdGhpc3RsZToicmdiKDIxNiwgMTkxLCAyMTYpIix0b21hdG86InJnYigyNTUsIDk5LCA3MSkiLHR1cnF1b2lzZToicmdiKCA2NCwgMjI0LCAyMDgpIix2aW9sZXQ6InJnYigyMzgsIDEzMCwgMjM4KSIsd2hlYXQ6InJnYigyNDUsIDIyMiwgMTc5KSIsd2hpdGU6InJnYigyNTUsIDI1NSwgMjU1KSIsd2hpdGVzbW9rZToicmdiKDI0NSwgMjQ1LCAyNDUpIix5ZWxsb3c6InJnYigyNTUsIDI1NSwgMCkiLHllbGxvd2dyZWVuOiJyZ2IoMTU0LCAyMDUsIDUwKSJ9O0wuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyPWZ1bmN0aW9uKGFoKXtMLmpxcGxvdC5FbGVtQ29udGFpbmVyLmNhbGwodGhpcyk7dGhpcy5heGlzO3RoaXMuc2hvdz10cnVlO3RoaXMubGFiZWw9IiI7dGhpcy5mb250RmFtaWx5PW51bGw7dGhpcy5mb250U2l6ZT1udWxsO3RoaXMudGV4dENvbG9yPW51bGw7dGhpcy5fZWxlbTt0aGlzLmVzY2FwZUhUTUw9ZmFsc2U7TC5leHRlbmQodHJ1ZSx0aGlzLGFoKX07TC5qcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXIucHJvdG90eXBlPW5ldyBMLmpxcGxvdC5FbGVtQ29udGFpbmVyKCk7TC5qcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUwuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyO0wuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGFoKXtMLmV4dGVuZCh0cnVlLHRoaXMsYWgpfTtMLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhaCxhaSl7aWYodGhpcy5fZWxlbSl7dGhpcy5fZWxlbS5lbXB0eUZvcmNlKCk7dGhpcy5fZWxlbT1udWxsfXRoaXMuX2VsZW09TCgnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IiBjbGFzcz0ianFwbG90LScrdGhpcy5heGlzKyctbGFiZWwiPjwvZGl2PicpO2lmKE51bWJlcih0aGlzLmxhYmVsKSl7dGhpcy5fZWxlbS5jc3MoIndoaXRlLXNwYWNlIiwibm93cmFwIil9aWYoIXRoaXMuZXNjYXBlSFRNTCl7dGhpcy5fZWxlbS5odG1sKHRoaXMubGFiZWwpfWVsc2V7dGhpcy5fZWxlbS50ZXh0KHRoaXMubGFiZWwpfWlmKHRoaXMuZm9udEZhbWlseSl7dGhpcy5fZWxlbS5jc3MoImZvbnQtZmFtaWx5Iix0aGlzLmZvbnRGYW1pbHkpfWlmKHRoaXMuZm9udFNpemUpe3RoaXMuX2VsZW0uY3NzKCJmb250LXNpemUiLHRoaXMuZm9udFNpemUpfWlmKHRoaXMudGV4dENvbG9yKXt0aGlzLl9lbGVtLmNzcygiY29sb3IiLHRoaXMudGV4dENvbG9yKX1yZXR1cm4gdGhpcy5fZWxlbX07TC5qcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXIucHJvdG90eXBlLnBhY2s9ZnVuY3Rpb24oKXt9O0wuanFwbG90LkF4aXNUaWNrUmVuZGVyZXI9ZnVuY3Rpb24oYWgpe0wuanFwbG90LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTt0aGlzLm1hcms9Im91dHNpZGUiO3RoaXMuYXhpczt0aGlzLnNob3dNYXJrPXRydWU7dGhpcy5zaG93R3JpZGxpbmU9dHJ1ZTt0aGlzLmlzTWlub3JUaWNrPWZhbHNlO3RoaXMuc2l6ZT00O3RoaXMubWFya1NpemU9Njt0aGlzLnNob3c9dHJ1ZTt0aGlzLnNob3dMYWJlbD10cnVlO3RoaXMubGFiZWw9bnVsbDt0aGlzLnZhbHVlPW51bGw7dGhpcy5fc3R5bGVzPXt9O3RoaXMuZm9ybWF0dGVyPUwuanFwbG90LkRlZmF1bHRUaWNrRm9ybWF0dGVyO3RoaXMucHJlZml4PSIiO3RoaXMuc3VmZml4PSIiO3RoaXMuZm9ybWF0U3RyaW5nPSIiO3RoaXMuZm9udEZhbWlseTt0aGlzLmZvbnRTaXplO3RoaXMudGV4dENvbG9yO3RoaXMuZXNjYXBlSFRNTD1mYWxzZTt0aGlzLl9lbGVtO3RoaXMuX2JyZWFrVGljaz1mYWxzZTtMLmV4dGVuZCh0cnVlLHRoaXMsYWgpfTtMLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGFoKXtMLmV4dGVuZCh0cnVlLHRoaXMsYWgpfTtMLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyLnByb3RvdHlwZT1uZXcgTC5qcXBsb3QuRWxlbUNvbnRhaW5lcigpO0wuanFwbG90LkF4aXNUaWNrUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUwuanFwbG90LkF4aXNUaWNrUmVuZGVyZXI7TC5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUuc2V0VGljaz1mdW5jdGlvbihhaCxhaixhaSl7dGhpcy52YWx1ZT1haDt0aGlzLmF4aXM9YWo7aWYoYWkpe3RoaXMuaXNNaW5vclRpY2s9dHJ1ZX1yZXR1cm4gdGhpc307TC5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2lmKHRoaXMubGFiZWw9PT1udWxsKXt0aGlzLmxhYmVsPXRoaXMucHJlZml4K3RoaXMuZm9ybWF0dGVyKHRoaXMuZm9ybWF0U3RyaW5nLHRoaXMudmFsdWUpK3RoaXMuc3VmZml4fXZhciBhaT17cG9zaXRpb246ImFic29sdXRlIn07aWYoTnVtYmVyKHRoaXMubGFiZWwpKXthaS53aGl0U3BhY2U9Im5vd3JhcCJ9aWYodGhpcy5fZWxlbSl7dGhpcy5fZWxlbS5lbXB0eUZvcmNlKCk7dGhpcy5fZWxlbT1udWxsfXRoaXMuX2VsZW09TChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7dGhpcy5fZWxlbS5hZGRDbGFzcygianFwbG90LSIrdGhpcy5heGlzKyItdGljayIpO2lmKCF0aGlzLmVzY2FwZUhUTUwpe3RoaXMuX2VsZW0uaHRtbCh0aGlzLmxhYmVsKX1lbHNle3RoaXMuX2VsZW0udGV4dCh0aGlzLmxhYmVsKX10aGlzLl9lbGVtLmNzcyhhaSk7Zm9yKHZhciBhaCBpbiB0aGlzLl9zdHlsZXMpe3RoaXMuX2VsZW0uY3NzKGFoLHRoaXMuX3N0eWxlc1thaF0pfWlmKHRoaXMuZm9udEZhbWlseSl7dGhpcy5fZWxlbS5jc3MoImZvbnQtZmFtaWx5Iix0aGlzLmZvbnRGYW1pbHkpfWlmKHRoaXMuZm9udFNpemUpe3RoaXMuX2VsZW0uY3NzKCJmb250LXNpemUiLHRoaXMuZm9udFNpemUpfWlmKHRoaXMudGV4dENvbG9yKXt0aGlzLl9lbGVtLmNzcygiY29sb3IiLHRoaXMudGV4dENvbG9yKX1pZih0aGlzLl9icmVha1RpY2spe3RoaXMuX2VsZW0uYWRkQ2xhc3MoImpxcGxvdC1icmVha1RpY2siKX1yZXR1cm4gdGhpcy5fZWxlbX07TC5qcXBsb3QuRGVmYXVsdFRpY2tGb3JtYXR0ZXI9ZnVuY3Rpb24oYWgsYWkpe2lmKHR5cGVvZiBhaT09Im51bWJlciIpe2lmKCFhaCl7YWg9TC5qcXBsb3QuY29uZmlnLmRlZmF1bHRUaWNrRm9ybWF0U3RyaW5nfXJldHVybiBMLmpxcGxvdC5zcHJpbnRmKGFoLGFpKX1lbHNle3JldHVybiBTdHJpbmcoYWkpfX07TC5qcXBsb3QuUGVyY2VudFRpY2tGb3JtYXR0ZXI9ZnVuY3Rpb24oYWgsYWkpe2lmKHR5cGVvZiBhaT09Im51bWJlciIpe2FpPTEwMCphaTtpZighYWgpe2FoPUwuanFwbG90LmNvbmZpZy5kZWZhdWx0VGlja0Zvcm1hdFN0cmluZ31yZXR1cm4gTC5qcXBsb3Quc3ByaW50ZihhaCxhaSl9ZWxzZXtyZXR1cm4gU3RyaW5nKGFpKX19O0wuanFwbG90LkF4aXNUaWNrUmVuZGVyZXIucHJvdG90eXBlLnBhY2s9ZnVuY3Rpb24oKXt9O0wuanFwbG90LkNhbnZhc0dyaWRSZW5kZXJlcj1mdW5jdGlvbigpe3RoaXMuc2hhZG93UmVuZGVyZXI9bmV3IEwuanFwbG90LlNoYWRvd1JlbmRlcmVyKCl9O0wuanFwbG90LkNhbnZhc0dyaWRSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhaSl7dGhpcy5fY3R4O0wuZXh0ZW5kKHRydWUsdGhpcyxhaSk7dmFyIGFoPXtsaW5lSm9pbjoibWl0ZXIiLGxpbmVDYXA6InJvdW5kIixmaWxsOmZhbHNlLGlzYXJjOmZhbHNlLGFuZ2xlOnRoaXMuc2hhZG93QW5nbGUsb2Zmc2V0OnRoaXMuc2hhZG93T2Zmc2V0LGFscGhhOnRoaXMuc2hhZG93QWxwaGEsZGVwdGg6dGhpcy5zaGFkb3dEZXB0aCxsaW5lV2lkdGg6dGhpcy5zaGFkb3dXaWR0aCxjbG9zZVBhdGg6ZmFsc2Usc3Ryb2tlU3R5bGU6dGhpcy5zaGFkb3dDb2xvcn07dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5pbml0KGFoKX07TC5qcXBsb3QuQ2FudmFzR3JpZFJlbmRlcmVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGFrKXt2YXIgYWo7aWYodGhpcy5fZWxlbSl7aWYoTC5qcXBsb3QudXNlX2V4Y2FudmFzJiZ3aW5kb3cuR192bWxDYW52YXNNYW5hZ2VyLnVuaW5pdEVsZW1lbnQhPT11KXthaj10aGlzLl9lbGVtLmdldCgwKTt3aW5kb3cuR192bWxDYW52YXNNYW5hZ2VyLnVuaW5pdEVsZW1lbnQoYWopO2FqPW51bGx9dGhpcy5fZWxlbS5lbXB0eUZvcmNlKCk7dGhpcy5fZWxlbT1udWxsfWFqPWFrLmNhbnZhc01hbmFnZXIuZ2V0Q2FudmFzKCk7dmFyIGFoPXRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoO3ZhciBhaT10aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQ7YWoud2lkdGg9YWg7YWouaGVpZ2h0PWFpO3RoaXMuX2VsZW09TChhaik7dGhpcy5fZWxlbS5hZGRDbGFzcygianFwbG90LWdyaWQtY2FudmFzIik7dGhpcy5fZWxlbS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDowLHRvcDowfSk7YWo9YWsuY2FudmFzTWFuYWdlci5pbml0Q2FudmFzKGFqKTt0aGlzLl90b3A9dGhpcy5fb2Zmc2V0cy50b3A7dGhpcy5fYm90dG9tPWFpLXRoaXMuX29mZnNldHMuYm90dG9tO3RoaXMuX2xlZnQ9dGhpcy5fb2Zmc2V0cy5sZWZ0O3RoaXMuX3JpZ2h0PWFoLXRoaXMuX29mZnNldHMucmlnaHQ7dGhpcy5fd2lkdGg9dGhpcy5fcmlnaHQtdGhpcy5fbGVmdDt0aGlzLl9oZWlnaHQ9dGhpcy5fYm90dG9tLXRoaXMuX3RvcDthaj1udWxsO3JldHVybiB0aGlzLl9lbGVtfTtMLmpxcGxvdC5DYW52YXNHcmlkUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXt0aGlzLl9jdHg9dGhpcy5fZWxlbS5nZXQoMCkuZ2V0Q29udGV4dCgiMmQiKTt2YXIgYXQ9dGhpcy5fY3R4O3ZhciBhdz10aGlzLl9heGVzO2F0LnNhdmUoKTthdC5jbGVhclJlY3QoMCwwLHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoLHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCk7YXQuZmlsbFN0eWxlPXRoaXMuYmFja2dyb3VuZENvbG9yfHx0aGlzLmJhY2tncm91bmQ7YXQuZmlsbFJlY3QodGhpcy5fbGVmdCx0aGlzLl90b3AsdGhpcy5fd2lkdGgsdGhpcy5faGVpZ2h0KTthdC5zYXZlKCk7YXQubGluZUpvaW49Im1pdGVyIjthdC5saW5lQ2FwPSJidXR0IjthdC5saW5lV2lkdGg9dGhpcy5ncmlkTGluZVdpZHRoO2F0LnN0cm9rZVN0eWxlPXRoaXMuZ3JpZExpbmVDb2xvcjt2YXIgYUEsYXosYXAsYXE7dmFyIGFtPVsieGF4aXMiLCJ5YXhpcyIsIngyYXhpcyIsInkyYXhpcyJdO2Zvcih2YXIgYXk9NDtheT4wO2F5LS0pe3ZhciBhRD1hbVtheS0xXTt2YXIgYWg9YXdbYURdO3ZhciBhQj1haC5fdGlja3M7dmFyIGFyPWFCLmxlbmd0aDtpZihhaC5zaG93KXtpZihhaC5kcmF3QmFzZWxpbmUpe3ZhciBhQz17fTtpZihhaC5iYXNlbGluZVdpZHRoIT09bnVsbCl7YUMubGluZVdpZHRoPWFoLmJhc2VsaW5lV2lkdGh9aWYoYWguYmFzZWxpbmVDb2xvciE9PW51bGwpe2FDLnN0cm9rZVN0eWxlPWFoLmJhc2VsaW5lQ29sb3J9c3dpdGNoKGFEKXtjYXNlInhheGlzIjphbyh0aGlzLl9sZWZ0LHRoaXMuX2JvdHRvbSx0aGlzLl9yaWdodCx0aGlzLl9ib3R0b20sYUMpO2JyZWFrO2Nhc2UieWF4aXMiOmFvKHRoaXMuX2xlZnQsdGhpcy5fYm90dG9tLHRoaXMuX2xlZnQsdGhpcy5fdG9wLGFDKTticmVhaztjYXNlIngyYXhpcyI6YW8odGhpcy5fbGVmdCx0aGlzLl9ib3R0b20sdGhpcy5fcmlnaHQsdGhpcy5fYm90dG9tLGFDKTticmVhaztjYXNlInkyYXhpcyI6YW8odGhpcy5fcmlnaHQsdGhpcy5fYm90dG9tLHRoaXMuX3JpZ2h0LHRoaXMuX3RvcCxhQyk7YnJlYWt9fWZvcih2YXIgYXU9YXI7YXU+MDthdS0tKXt2YXIgYW49YUJbYXUtMV07aWYoYW4uc2hvdyl7dmFyIGFrPU1hdGgucm91bmQoYWgudTJwKGFuLnZhbHVlKSkrMC41O3N3aXRjaChhRCl7Y2FzZSJ4YXhpcyI6aWYoYW4uc2hvd0dyaWRsaW5lJiZ0aGlzLmRyYXdHcmlkbGluZXMmJigoIWFuLmlzTWlub3JUaWNrJiZhaC5kcmF3TWFqb3JHcmlkbGluZXMpfHwoYW4uaXNNaW5vclRpY2smJmFoLmRyYXdNaW5vckdyaWRsaW5lcykpKXthbyhhayx0aGlzLl90b3AsYWssdGhpcy5fYm90dG9tKX1pZihhbi5zaG93TWFyayYmYW4ubWFyayYmKCghYW4uaXNNaW5vclRpY2smJmFoLmRyYXdNYWpvclRpY2tNYXJrcyl8fChhbi5pc01pbm9yVGljayYmYWguZHJhd01pbm9yVGlja01hcmtzKSkpe2FwPWFuLm1hcmtTaXplO2FxPWFuLm1hcms7dmFyIGFrPU1hdGgucm91bmQoYWgudTJwKGFuLnZhbHVlKSkrMC41O3N3aXRjaChhcSl7Y2FzZSJvdXRzaWRlIjphQT10aGlzLl9ib3R0b207YXo9dGhpcy5fYm90dG9tK2FwO2JyZWFrO2Nhc2UiaW5zaWRlIjphQT10aGlzLl9ib3R0b20tYXA7YXo9dGhpcy5fYm90dG9tO2JyZWFrO2Nhc2UiY3Jvc3MiOmFBPXRoaXMuX2JvdHRvbS1hcDthej10aGlzLl9ib3R0b20rYXA7YnJlYWs7ZGVmYXVsdDphQT10aGlzLl9ib3R0b207YXo9dGhpcy5fYm90dG9tK2FwO2JyZWFrfWlmKHRoaXMuc2hhZG93KXt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoYXQsW1thayxhQV0sW2FrLGF6XV0se2xpbmVDYXA6ImJ1dHQiLGxpbmVXaWR0aDp0aGlzLmdyaWRMaW5lV2lkdGgsb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LGRlcHRoOjIsZmlsbDpmYWxzZSxjbG9zZVBhdGg6ZmFsc2V9KX1hbyhhayxhQSxhayxheil9YnJlYWs7Y2FzZSJ5YXhpcyI6aWYoYW4uc2hvd0dyaWRsaW5lJiZ0aGlzLmRyYXdHcmlkbGluZXMmJigoIWFuLmlzTWlub3JUaWNrJiZhaC5kcmF3TWFqb3JHcmlkbGluZXMpfHwoYW4uaXNNaW5vclRpY2smJmFoLmRyYXdNaW5vckdyaWRsaW5lcykpKXthbyh0aGlzLl9yaWdodCxhayx0aGlzLl9sZWZ0LGFrKX1pZihhbi5zaG93TWFyayYmYW4ubWFyayYmKCghYW4uaXNNaW5vclRpY2smJmFoLmRyYXdNYWpvclRpY2tNYXJrcyl8fChhbi5pc01pbm9yVGljayYmYWguZHJhd01pbm9yVGlja01hcmtzKSkpe2FwPWFuLm1hcmtTaXplO2FxPWFuLm1hcms7dmFyIGFrPU1hdGgucm91bmQoYWgudTJwKGFuLnZhbHVlKSkrMC41O3N3aXRjaChhcSl7Y2FzZSJvdXRzaWRlIjphQT10aGlzLl9sZWZ0LWFwO2F6PXRoaXMuX2xlZnQ7YnJlYWs7Y2FzZSJpbnNpZGUiOmFBPXRoaXMuX2xlZnQ7YXo9dGhpcy5fbGVmdCthcDticmVhaztjYXNlImNyb3NzIjphQT10aGlzLl9sZWZ0LWFwO2F6PXRoaXMuX2xlZnQrYXA7YnJlYWs7ZGVmYXVsdDphQT10aGlzLl9sZWZ0LWFwO2F6PXRoaXMuX2xlZnQ7YnJlYWt9aWYodGhpcy5zaGFkb3cpe3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhhdCxbW2FBLGFrXSxbYXosYWtdXSx7bGluZUNhcDoiYnV0dCIsbGluZVdpZHRoOnRoaXMuZ3JpZExpbmVXaWR0aCoxLjUsb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LGZpbGw6ZmFsc2UsY2xvc2VQYXRoOmZhbHNlfSl9YW8oYUEsYWssYXosYWsse3N0cm9rZVN0eWxlOmFoLmJvcmRlckNvbG9yfSl9YnJlYWs7Y2FzZSJ4MmF4aXMiOmlmKGFuLnNob3dHcmlkbGluZSYmdGhpcy5kcmF3R3JpZGxpbmVzJiYoKCFhbi5pc01pbm9yVGljayYmYWguZHJhd01ham9yR3JpZGxpbmVzKXx8KGFuLmlzTWlub3JUaWNrJiZhaC5kcmF3TWlub3JHcmlkbGluZXMpKSl7YW8oYWssdGhpcy5fYm90dG9tLGFrLHRoaXMuX3RvcCl9aWYoYW4uc2hvd01hcmsmJmFuLm1hcmsmJigoIWFuLmlzTWlub3JUaWNrJiZhaC5kcmF3TWFqb3JUaWNrTWFya3MpfHwoYW4uaXNNaW5vclRpY2smJmFoLmRyYXdNaW5vclRpY2tNYXJrcykpKXthcD1hbi5tYXJrU2l6ZTthcT1hbi5tYXJrO3ZhciBhaz1NYXRoLnJvdW5kKGFoLnUycChhbi52YWx1ZSkpKzAuNTtzd2l0Y2goYXEpe2Nhc2Uib3V0c2lkZSI6YUE9dGhpcy5fdG9wLWFwO2F6PXRoaXMuX3RvcDticmVhaztjYXNlImluc2lkZSI6YUE9dGhpcy5fdG9wO2F6PXRoaXMuX3RvcCthcDticmVhaztjYXNlImNyb3NzIjphQT10aGlzLl90b3AtYXA7YXo9dGhpcy5fdG9wK2FwO2JyZWFrO2RlZmF1bHQ6YUE9dGhpcy5fdG9wLWFwO2F6PXRoaXMuX3RvcDticmVha31pZih0aGlzLnNoYWRvdyl7dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGF0LFtbYWssYUFdLFthayxhel1dLHtsaW5lQ2FwOiJidXR0IixsaW5lV2lkdGg6dGhpcy5ncmlkTGluZVdpZHRoLG9mZnNldDp0aGlzLmdyaWRMaW5lV2lkdGgqMC43NSxkZXB0aDoyLGZpbGw6ZmFsc2UsY2xvc2VQYXRoOmZhbHNlfSl9YW8oYWssYUEsYWssYXopfWJyZWFrO2Nhc2UieTJheGlzIjppZihhbi5zaG93R3JpZGxpbmUmJnRoaXMuZHJhd0dyaWRsaW5lcyYmKCghYW4uaXNNaW5vclRpY2smJmFoLmRyYXdNYWpvckdyaWRsaW5lcyl8fChhbi5pc01pbm9yVGljayYmYWguZHJhd01pbm9yR3JpZGxpbmVzKSkpe2FvKHRoaXMuX2xlZnQsYWssdGhpcy5fcmlnaHQsYWspfWlmKGFuLnNob3dNYXJrJiZhbi5tYXJrJiYoKCFhbi5pc01pbm9yVGljayYmYWguZHJhd01ham9yVGlja01hcmtzKXx8KGFuLmlzTWlub3JUaWNrJiZhaC5kcmF3TWlub3JUaWNrTWFya3MpKSl7YXA9YW4ubWFya1NpemU7YXE9YW4ubWFyazt2YXIgYWs9TWF0aC5yb3VuZChhaC51MnAoYW4udmFsdWUpKSswLjU7c3dpdGNoKGFxKXtjYXNlIm91dHNpZGUiOmFBPXRoaXMuX3JpZ2h0O2F6PXRoaXMuX3JpZ2h0K2FwO2JyZWFrO2Nhc2UiaW5zaWRlIjphQT10aGlzLl9yaWdodC1hcDthej10aGlzLl9yaWdodDticmVhaztjYXNlImNyb3NzIjphQT10aGlzLl9yaWdodC1hcDthej10aGlzLl9yaWdodCthcDticmVhaztkZWZhdWx0OmFBPXRoaXMuX3JpZ2h0O2F6PXRoaXMuX3JpZ2h0K2FwO2JyZWFrfWlmKHRoaXMuc2hhZG93KXt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoYXQsW1thQSxha10sW2F6LGFrXV0se2xpbmVDYXA6ImJ1dHQiLGxpbmVXaWR0aDp0aGlzLmdyaWRMaW5lV2lkdGgqMS41LG9mZnNldDp0aGlzLmdyaWRMaW5lV2lkdGgqMC43NSxmaWxsOmZhbHNlLGNsb3NlUGF0aDpmYWxzZX0pfWFvKGFBLGFrLGF6LGFrLHtzdHJva2VTdHlsZTphaC5ib3JkZXJDb2xvcn0pfWJyZWFrO2RlZmF1bHQ6YnJlYWt9fX1hbj1udWxsfWFoPW51bGw7YUI9bnVsbH1hbT1bInkzYXhpcyIsInk0YXhpcyIsInk1YXhpcyIsInk2YXhpcyIsInk3YXhpcyIsInk4YXhpcyIsInk5YXhpcyIsInlNaWRBeGlzIl07Zm9yKHZhciBheT03O2F5PjA7YXktLSl7dmFyIGFoPWF3W2FtW2F5LTFdXTt2YXIgYUI9YWguX3RpY2tzO2lmKGFoLnNob3cpe3ZhciBhaT1hQlthaC5udW1iZXJUaWNrcy0xXTt2YXIgYWw9YUJbMF07dmFyIGFqPWFoLmdldExlZnQoKTt2YXIgYXY9W1thaixhaS5nZXRUb3AoKSthaS5nZXRIZWlnaHQoKS8yXSxbYWosYWwuZ2V0VG9wKCkrYWwuZ2V0SGVpZ2h0KCkvMisxXV07aWYodGhpcy5zaGFkb3cpe3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhhdCxhdix7bGluZUNhcDoiYnV0dCIsZmlsbDpmYWxzZSxjbG9zZVBhdGg6ZmFsc2V9KX1hbyhhdlswXVswXSxhdlswXVsxXSxhdlsxXVswXSxhdlsxXVsxXSx7bGluZUNhcDoiYnV0dCIsc3Ryb2tlU3R5bGU6YWguYm9yZGVyQ29sb3IsbGluZVdpZHRoOmFoLmJvcmRlcldpZHRofSk7Zm9yKHZhciBhdT1hQi5sZW5ndGg7YXU+MDthdS0tKXt2YXIgYW49YUJbYXUtMV07YXA9YW4ubWFya1NpemU7YXE9YW4ubWFyazt2YXIgYWs9TWF0aC5yb3VuZChhaC51MnAoYW4udmFsdWUpKSswLjU7aWYoYW4uc2hvd01hcmsmJmFuLm1hcmspe3N3aXRjaChhcSl7Y2FzZSJvdXRzaWRlIjphQT1hajthej1haithcDticmVhaztjYXNlImluc2lkZSI6YUE9YWotYXA7YXo9YWo7YnJlYWs7Y2FzZSJjcm9zcyI6YUE9YWotYXA7YXo9YWorYXA7YnJlYWs7ZGVmYXVsdDphQT1hajthej1haithcDticmVha31hdj1bW2FBLGFrXSxbYXosYWtdXTtpZih0aGlzLnNoYWRvdyl7dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGF0LGF2LHtsaW5lQ2FwOiJidXR0IixsaW5lV2lkdGg6dGhpcy5ncmlkTGluZVdpZHRoKjEuNSxvZmZzZXQ6dGhpcy5ncmlkTGluZVdpZHRoKjAuNzUsZmlsbDpmYWxzZSxjbG9zZVBhdGg6ZmFsc2V9KX1hbyhhQSxhayxheixhayx7c3Ryb2tlU3R5bGU6YWguYm9yZGVyQ29sb3J9KX1hbj1udWxsfWFsPW51bGx9YWg9bnVsbDthQj1udWxsfWF0LnJlc3RvcmUoKTtmdW5jdGlvbiBhbyhhSCxhRyxhRSxheCxhRil7YXQuc2F2ZSgpO2FGPWFGfHx7fTtpZihhRi5saW5lV2lkdGg9PW51bGx8fGFGLmxpbmVXaWR0aCE9MCl7TC5leHRlbmQodHJ1ZSxhdCxhRik7YXQuYmVnaW5QYXRoKCk7YXQubW92ZVRvKGFILGFHKTthdC5saW5lVG8oYUUsYXgpO2F0LnN0cm9rZSgpO2F0LnJlc3RvcmUoKX19aWYodGhpcy5zaGFkb3cpe3ZhciBhdj1bW3RoaXMuX2xlZnQsdGhpcy5fYm90dG9tXSxbdGhpcy5fcmlnaHQsdGhpcy5fYm90dG9tXSxbdGhpcy5fcmlnaHQsdGhpcy5fdG9wXV07dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGF0LGF2KX1pZih0aGlzLmJvcmRlcldpZHRoIT0wJiZ0aGlzLmRyYXdCb3JkZXIpe2FvKHRoaXMuX2xlZnQsdGhpcy5fdG9wLHRoaXMuX3JpZ2h0LHRoaXMuX3RvcCx7bGluZUNhcDoicm91bmQiLHN0cm9rZVN0eWxlOmF3LngyYXhpcy5ib3JkZXJDb2xvcixsaW5lV2lkdGg6YXcueDJheGlzLmJvcmRlcldpZHRofSk7YW8odGhpcy5fcmlnaHQsdGhpcy5fdG9wLHRoaXMuX3JpZ2h0LHRoaXMuX2JvdHRvbSx7bGluZUNhcDoicm91bmQiLHN0cm9rZVN0eWxlOmF3LnkyYXhpcy5ib3JkZXJDb2xvcixsaW5lV2lkdGg6YXcueTJheGlzLmJvcmRlcldpZHRofSk7YW8odGhpcy5fcmlnaHQsdGhpcy5fYm90dG9tLHRoaXMuX2xlZnQsdGhpcy5fYm90dG9tLHtsaW5lQ2FwOiJyb3VuZCIsc3Ryb2tlU3R5bGU6YXcueGF4aXMuYm9yZGVyQ29sb3IsbGluZVdpZHRoOmF3LnhheGlzLmJvcmRlcldpZHRofSk7YW8odGhpcy5fbGVmdCx0aGlzLl9ib3R0b20sdGhpcy5fbGVmdCx0aGlzLl90b3Ase2xpbmVDYXA6InJvdW5kIixzdHJva2VTdHlsZTphdy55YXhpcy5ib3JkZXJDb2xvcixsaW5lV2lkdGg6YXcueWF4aXMuYm9yZGVyV2lkdGh9KX1hdC5yZXN0b3JlKCk7YXQ9bnVsbDthdz1udWxsfTtMLmpxcGxvdC5EaXZUaXRsZVJlbmRlcmVyPWZ1bmN0aW9uKCl7fTtMLmpxcGxvdC5EaXZUaXRsZVJlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGFoKXtMLmV4dGVuZCh0cnVlLHRoaXMsYWgpfTtMLmpxcGxvdC5EaXZUaXRsZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7aWYodGhpcy5fZWxlbSl7dGhpcy5fZWxlbS5lbXB0eUZvcmNlKCk7dGhpcy5fZWxlbT1udWxsfXZhciBhaz10aGlzLnJlbmRlcmVyO3ZhciBhaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLl9lbGVtPUwoYWopO3RoaXMuX2VsZW0uYWRkQ2xhc3MoImpxcGxvdC10aXRsZSIpO2lmKCF0aGlzLnRleHQpe3RoaXMuc2hvdz1mYWxzZTt0aGlzLl9lbGVtLmhlaWdodCgwKTt0aGlzLl9lbGVtLndpZHRoKDApfWVsc2V7aWYodGhpcy50ZXh0KXt2YXIgYWg7aWYodGhpcy5jb2xvcil7YWg9dGhpcy5jb2xvcn1lbHNle2lmKHRoaXMudGV4dENvbG9yKXthaD10aGlzLnRleHRDb2xvcn19dmFyIGFpPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiMHB4IixsZWZ0OiIwcHgifTtpZih0aGlzLl9wbG90V2lkdGgpe2FpLndpZHRoPXRoaXMuX3Bsb3RXaWR0aCsicHgifWlmKHRoaXMuZm9udFNpemUpe2FpLmZvbnRTaXplPXRoaXMuZm9udFNpemV9aWYodHlwZW9mIHRoaXMudGV4dEFsaWduPT09InN0cmluZyIpe2FpLnRleHRBbGlnbj10aGlzLnRleHRBbGlnbn1lbHNle2FpLnRleHRBbGlnbj0iY2VudGVyIn1pZihhaCl7YWkuY29sb3I9YWh9aWYodGhpcy5wYWRkaW5nQm90dG9tKXthaS5wYWRkaW5nQm90dG9tPXRoaXMucGFkZGluZ0JvdHRvbX1pZih0aGlzLmZvbnRGYW1pbHkpe2FpLmZvbnRGYW1pbHk9dGhpcy5mb250RmFtaWx5fXRoaXMuX2VsZW0uY3NzKGFpKTtpZih0aGlzLmVzY2FwZUh0bWwpe3RoaXMuX2VsZW0udGV4dCh0aGlzLnRleHQpfWVsc2V7dGhpcy5fZWxlbS5odG1sKHRoaXMudGV4dCl9fX1haj1udWxsO3JldHVybiB0aGlzLl9lbGVtfTtMLmpxcGxvdC5EaXZUaXRsZVJlbmRlcmVyLnByb3RvdHlwZS5wYWNrPWZ1bmN0aW9uKCl7fTt2YXIgcj0wLjE7TC5qcXBsb3QuTGluZVBhdHRlcm49ZnVuY3Rpb24oYXcsYXEpe3ZhciBhcD17ZG90dGVkOltyLEwuanFwbG90LmNvbmZpZy5kb3RHYXBMZW5ndGhdLGRhc2hlZDpbTC5qcXBsb3QuY29uZmlnLmRhc2hMZW5ndGgsTC5qcXBsb3QuY29uZmlnLmdhcExlbmd0aF0sc29saWQ6bnVsbH07aWYodHlwZW9mIGFxPT09InN0cmluZyIpe2lmKGFxWzBdPT09Ii4ifHxhcVswXT09PSItIil7dmFyIGF4PWFxO2FxPVtdO2Zvcih2YXIgYW89MCxhbD1heC5sZW5ndGg7YW88YWw7YW8rKyl7aWYoYXhbYW9dPT09Ii4iKXthcS5wdXNoKHIpfWVsc2V7aWYoYXhbYW9dPT09Ii0iKXthcS5wdXNoKEwuanFwbG90LmNvbmZpZy5kYXNoTGVuZ3RoKX1lbHNle2NvbnRpbnVlfX1hcS5wdXNoKEwuanFwbG90LmNvbmZpZy5nYXBMZW5ndGgpfX1lbHNle2FxPWFwW2FxXX19aWYoIShhcSYmYXEubGVuZ3RoKSl7cmV0dXJuIGF3fXZhciBhaz0wO3ZhciBhcj1hcVswXTt2YXIgYXU9MDt2YXIgYXQ9MDt2YXIgYW49MDt2YXIgYWg9MDt2YXIgYXY9ZnVuY3Rpb24oYXksYXope2F3Lm1vdmVUbyhheSxheik7YXU9YXk7YXQ9YXo7YW49YXk7YWg9YXp9O3ZhciBhaj1mdW5jdGlvbihheSxhRSl7dmFyIGFDPWF3LmxpbmVXaWR0aDt2YXIgYUE9YXktYXU7dmFyIGF6PWFFLWF0O3ZhciBhQj1NYXRoLnNxcnQoYUEqYUErYXoqYXopO2lmKChhQj4wKSYmKGFDPjApKXthQS89YUI7YXovPWFCO3doaWxlKHRydWUpe3ZhciBhRD1hQyphcjtpZihhRDxhQil7YXUrPWFEKmFBO2F0Kz1hRCphejtpZigoYWsmMSk9PTApe2F3LmxpbmVUbyhhdSxhdCl9ZWxzZXthdy5tb3ZlVG8oYXUsYXQpfWFCLT1hRDthaysrO2lmKGFrPj1hcS5sZW5ndGgpe2FrPTB9YXI9YXFbYWtdfWVsc2V7YXU9YXk7YXQ9YUU7aWYoKGFrJjEpPT0wKXthdy5saW5lVG8oYXUsYXQpfWVsc2V7YXcubW92ZVRvKGF1LGF0KX1hci09YUIvYUM7YnJlYWt9fX19O3ZhciBhaT1mdW5jdGlvbigpe2F3LmJlZ2luUGF0aCgpfTt2YXIgYW09ZnVuY3Rpb24oKXthaihhbixhaCl9O3JldHVybnttb3ZlVG86YXYsbGluZVRvOmFqLGJlZ2luUGF0aDphaSxjbG9zZVBhdGg6YW19fTtMLmpxcGxvdC5MaW5lUmVuZGVyZXI9ZnVuY3Rpb24oKXt0aGlzLnNoYXBlUmVuZGVyZXI9bmV3IEwuanFwbG90LlNoYXBlUmVuZGVyZXIoKTt0aGlzLnNoYWRvd1JlbmRlcmVyPW5ldyBMLmpxcGxvdC5TaGFkb3dSZW5kZXJlcigpfTtMLmpxcGxvdC5MaW5lUmVuZGVyZXIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYWksYW4pe2FpPWFpfHx7fTt0aGlzLl90eXBlPSJsaW5lIjt0aGlzLnJlbmRlcmVyLmFuaW1hdGlvbj17c2hvdzpmYWxzZSxkaXJlY3Rpb246ImxlZnQiLHNwZWVkOjI1MDAsX3N1cHBvcnRlZDp0cnVlfTt0aGlzLnJlbmRlcmVyLnNtb290aD1mYWxzZTt0aGlzLnJlbmRlcmVyLnRlbnNpb249bnVsbDt0aGlzLnJlbmRlcmVyLmNvbnN0cmFpblNtb290aGluZz10cnVlO3RoaXMucmVuZGVyZXIuX3Ntb290aGVkRGF0YT1bXTt0aGlzLnJlbmRlcmVyLl9zbW9vdGhlZFBsb3REYXRhPVtdO3RoaXMucmVuZGVyZXIuX2hpQmFuZEdyaWREYXRhPVtdO3RoaXMucmVuZGVyZXIuX2xvd0JhbmRHcmlkRGF0YT1bXTt0aGlzLnJlbmRlcmVyLl9oaUJhbmRTbW9vdGhlZERhdGE9W107dGhpcy5yZW5kZXJlci5fbG93QmFuZFNtb290aGVkRGF0YT1bXTt0aGlzLnJlbmRlcmVyLmJhbmREYXRhPVtdO3RoaXMucmVuZGVyZXIuYmFuZHM9e3Nob3c6ZmFsc2UsaGlEYXRhOltdLGxvd0RhdGE6W10sY29sb3I6dGhpcy5jb2xvcixzaG93TGluZXM6ZmFsc2UsZmlsbDp0cnVlLGZpbGxDb2xvcjpudWxsLF9taW46bnVsbCxfbWF4Om51bGwsaW50ZXJ2YWw6IjMlIn07dmFyIGFsPXtoaWdobGlnaHRNb3VzZU92ZXI6YWkuaGlnaGxpZ2h0TW91c2VPdmVyLGhpZ2hsaWdodE1vdXNlRG93bjphaS5oaWdobGlnaHRNb3VzZURvd24saGlnaGxpZ2h0Q29sb3I6YWkuaGlnaGxpZ2h0Q29sb3J9O2RlbGV0ZSAoYWkuaGlnaGxpZ2h0TW91c2VPdmVyKTtkZWxldGUgKGFpLmhpZ2hsaWdodE1vdXNlRG93bik7ZGVsZXRlIChhaS5oaWdobGlnaHRDb2xvcik7TC5leHRlbmQodHJ1ZSx0aGlzLnJlbmRlcmVyLGFpKTt0aGlzLnJlbmRlcmVyLm9wdGlvbnM9YWk7aWYodGhpcy5yZW5kZXJlci5iYW5kRGF0YS5sZW5ndGg+MSYmKCFhaS5iYW5kc3x8YWkuYmFuZHMuc2hvdz09bnVsbCkpe3RoaXMucmVuZGVyZXIuYmFuZHMuc2hvdz10cnVlfWVsc2V7aWYoYWkuYmFuZHMmJmFpLmJhbmRzLnNob3c9PW51bGwmJmFpLmJhbmRzLmludGVydmFsIT1udWxsKXt0aGlzLnJlbmRlcmVyLmJhbmRzLnNob3c9dHJ1ZX19aWYodGhpcy5maWxsKXt0aGlzLnJlbmRlcmVyLmJhbmRzLnNob3c9ZmFsc2V9aWYodGhpcy5yZW5kZXJlci5iYW5kcy5zaG93KXt0aGlzLnJlbmRlcmVyLmluaXRCYW5kcy5jYWxsKHRoaXMsdGhpcy5yZW5kZXJlci5vcHRpb25zLGFuKX1pZih0aGlzLl9zdGFjayl7dGhpcy5yZW5kZXJlci5zbW9vdGg9ZmFsc2V9dmFyIGFtPXtsaW5lSm9pbjp0aGlzLmxpbmVKb2luLGxpbmVDYXA6dGhpcy5saW5lQ2FwLGZpbGw6dGhpcy5maWxsLGlzYXJjOmZhbHNlLHN0cm9rZVN0eWxlOnRoaXMuY29sb3IsZmlsbFN0eWxlOnRoaXMuZmlsbENvbG9yLGxpbmVXaWR0aDp0aGlzLmxpbmVXaWR0aCxsaW5lUGF0dGVybjp0aGlzLmxpbmVQYXR0ZXJuLGNsb3NlUGF0aDp0aGlzLmZpbGx9O3RoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5pbml0KGFtKTt2YXIgYWo9YWkuc2hhZG93T2Zmc2V0O2lmKGFqPT1udWxsKXtpZih0aGlzLmxpbmVXaWR0aD4yLjUpe2FqPTEuMjUqKDErKE1hdGguYXRhbigodGhpcy5saW5lV2lkdGgvMi41KSkvMC43ODUzOTgxNjMtMSkqMC42KX1lbHNle2FqPTEuMjUqTWF0aC5hdGFuKCh0aGlzLmxpbmVXaWR0aC8yLjUpKS8wLjc4NTM5ODE2M319dmFyIGFoPXtsaW5lSm9pbjp0aGlzLmxpbmVKb2luLGxpbmVDYXA6dGhpcy5saW5lQ2FwLGZpbGw6dGhpcy5maWxsLGlzYXJjOmZhbHNlLGFuZ2xlOnRoaXMuc2hhZG93QW5nbGUsb2Zmc2V0OmFqLGFscGhhOnRoaXMuc2hhZG93QWxwaGEsZGVwdGg6dGhpcy5zaGFkb3dEZXB0aCxsaW5lV2lkdGg6dGhpcy5saW5lV2lkdGgsbGluZVBhdHRlcm46dGhpcy5saW5lUGF0dGVybixjbG9zZVBhdGg6dGhpcy5maWxsfTt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmluaXQoYWgpO3RoaXMuX2FyZWFQb2ludHM9W107dGhpcy5fYm91bmRpbmdCb3g9W1tdLFtdXTtpZighdGhpcy5pc1RyZW5kbGluZSYmdGhpcy5maWxsfHx0aGlzLnJlbmRlcmVyLmJhbmRzLnNob3cpe3RoaXMuaGlnaGxpZ2h0TW91c2VPdmVyPXRydWU7dGhpcy5oaWdobGlnaHRNb3VzZURvd249ZmFsc2U7dGhpcy5oaWdobGlnaHRDb2xvcj1udWxsO2lmKGFsLmhpZ2hsaWdodE1vdXNlRG93biYmYWwuaGlnaGxpZ2h0TW91c2VPdmVyPT1udWxsKXthbC5oaWdobGlnaHRNb3VzZU92ZXI9ZmFsc2V9TC5leHRlbmQodHJ1ZSx0aGlzLHtoaWdobGlnaHRNb3VzZU92ZXI6YWwuaGlnaGxpZ2h0TW91c2VPdmVyLGhpZ2hsaWdodE1vdXNlRG93bjphbC5oaWdobGlnaHRNb3VzZURvd24saGlnaGxpZ2h0Q29sb3I6YWwuaGlnaGxpZ2h0Q29sb3J9KTtpZighdGhpcy5oaWdobGlnaHRDb2xvcil7dmFyIGFrPSh0aGlzLnJlbmRlcmVyLmJhbmRzLnNob3cpP3RoaXMucmVuZGVyZXIuYmFuZHMuZmlsbENvbG9yOnRoaXMuZmlsbENvbG9yO3RoaXMuaGlnaGxpZ2h0Q29sb3I9TC5qcXBsb3QuY29tcHV0ZUhpZ2hsaWdodENvbG9ycyhhayl9aWYodGhpcy5oaWdobGlnaHRlcil7dGhpcy5oaWdobGlnaHRlci5zaG93PWZhbHNlfX1pZighdGhpcy5pc1RyZW5kbGluZSYmYW4pe2FuLnBsdWdpbnMubGluZVJlbmRlcmVyPXt9O2FuLnBvc3RJbml0SG9va3MuYWRkT25jZSh6KTthbi5wb3N0RHJhd0hvb2tzLmFkZE9uY2UoYWYpO2FuLmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RNb3VzZU1vdmUiLGgpO2FuLmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RNb3VzZURvd24iLGUpO2FuLmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RNb3VzZVVwIixhZCk7YW4uZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoImpxcGxvdENsaWNrIixnKTthbi5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgianFwbG90UmlnaHRDbGljayIscyl9fTtMLmpxcGxvdC5MaW5lUmVuZGVyZXIucHJvdG90eXBlLmluaXRCYW5kcz1mdW5jdGlvbihhayxhdil7dmFyIGFsPWFrLmJhbmREYXRhfHxbXTt2YXIgYW49dGhpcy5yZW5kZXJlci5iYW5kczthbi5oaURhdGE9W107YW4ubG93RGF0YT1bXTt2YXIgYUI9dGhpcy5kYXRhO2FuLl9tYXg9bnVsbDthbi5fbWluPW51bGw7aWYoYWwubGVuZ3RoPT0yKXtpZihMLmlzQXJyYXkoYWxbMF1bMF0pKXt2YXIgYW87dmFyIGFoPTAsYXI9MDtmb3IodmFyIGF3PTAsYXQ9YWxbMF0ubGVuZ3RoO2F3PGF0O2F3Kyspe2FvPWFsWzBdW2F3XTtpZigoYW9bMV0hPW51bGwmJmFvWzFdPmFuLl9tYXgpfHxhbi5fbWF4PT1udWxsKXthbi5fbWF4PWFvWzFdfWlmKChhb1sxXSE9bnVsbCYmYW9bMV08YW4uX21pbil8fGFuLl9taW49PW51bGwpe2FuLl9taW49YW9bMV19fWZvcih2YXIgYXc9MCxhdD1hbFsxXS5sZW5ndGg7YXc8YXQ7YXcrKyl7YW89YWxbMV1bYXddO2lmKChhb1sxXSE9bnVsbCYmYW9bMV0+YW4uX21heCl8fGFuLl9tYXg9PW51bGwpe2FuLl9tYXg9YW9bMV07YXI9MX1pZigoYW9bMV0hPW51bGwmJmFvWzFdPGFuLl9taW4pfHxhbi5fbWluPT1udWxsKXthbi5fbWluPWFvWzFdO2FoPTF9fWlmKGFyPT09YWgpe2FuLnNob3c9ZmFsc2V9YW4uaGlEYXRhPWFsW2FyXTthbi5sb3dEYXRhPWFsW2FoXX1lbHNle2lmKGFsWzBdLmxlbmd0aD09PWFCLmxlbmd0aCYmYWxbMV0ubGVuZ3RoPT09YUIubGVuZ3RoKXt2YXIgYWo9KGFsWzBdWzBdPmFsWzFdWzBdKT8wOjE7dmFyIGFDPShhaik/MDoxO2Zvcih2YXIgYXc9MCxhdD1hQi5sZW5ndGg7YXc8YXQ7YXcrKyl7YW4uaGlEYXRhLnB1c2goW2FCW2F3XVswXSxhbFthal1bYXddXSk7YW4ubG93RGF0YS5wdXNoKFthQlthd11bMF0sYWxbYUNdW2F3XV0pfX1lbHNle2FuLnNob3c9ZmFsc2V9fX1lbHNle2lmKGFsLmxlbmd0aD4yJiYhTC5pc0FycmF5KGFsWzBdWzBdKSl7dmFyIGFqPShhbFswXVswXT5hbFswXVsxXSk/MDoxO3ZhciBhQz0oYWopPzA6MTtmb3IodmFyIGF3PTAsYXQ9YWwubGVuZ3RoO2F3PGF0O2F3Kyspe2FuLmhpRGF0YS5wdXNoKFthQlthd11bMF0sYWxbYXddW2FqXV0pO2FuLmxvd0RhdGEucHVzaChbYUJbYXddWzBdLGFsW2F3XVthQ11dKX19ZWxzZXt2YXIgYXE9YW4uaW50ZXJ2YWw7dmFyIGFBPW51bGw7dmFyIGF6PW51bGw7dmFyIGFpPW51bGw7dmFyIGF1PW51bGw7aWYoTC5pc0FycmF5KGFxKSl7YUE9YXFbMF07YXo9YXFbMV19ZWxzZXthQT1hcX1pZihpc05hTihhQSkpe2lmKGFBLmNoYXJBdChhQS5sZW5ndGgtMSk9PT0iJSIpe2FpPSJtdWx0aXBseSI7YUE9cGFyc2VGbG9hdChhQSkvMTAwKzF9fWVsc2V7YUE9cGFyc2VGbG9hdChhQSk7YWk9ImFkZCJ9aWYoYXohPT1udWxsJiZpc05hTihheikpe2lmKGF6LmNoYXJBdChhei5sZW5ndGgtMSk9PT0iJSIpe2F1PSJtdWx0aXBseSI7YXo9cGFyc2VGbG9hdChheikvMTAwKzF9fWVsc2V7aWYoYXohPT1udWxsKXthej1wYXJzZUZsb2F0KGF6KTthdT0iYWRkIn19aWYoYUEhPT1udWxsKXtpZihhej09PW51bGwpe2F6PS1hQTthdT1haTtpZihhdT09PSJtdWx0aXBseSIpe2F6Kz0yfX1pZihhQTxheil7dmFyIGF4PWFBO2FBPWF6O2F6PWF4O2F4PWFpO2FpPWF1O2F1PWF4fWZvcih2YXIgYXc9MCxhdD1hQi5sZW5ndGg7YXc8YXQ7YXcrKyl7c3dpdGNoKGFpKXtjYXNlImFkZCI6YW4uaGlEYXRhLnB1c2goW2FCW2F3XVswXSxhQlthd11bMV0rYUFdKTticmVhaztjYXNlIm11bHRpcGx5Ijphbi5oaURhdGEucHVzaChbYUJbYXddWzBdLGFCW2F3XVsxXSphQV0pO2JyZWFrfXN3aXRjaChhdSl7Y2FzZSJhZGQiOmFuLmxvd0RhdGEucHVzaChbYUJbYXddWzBdLGFCW2F3XVsxXSthel0pO2JyZWFrO2Nhc2UibXVsdGlwbHkiOmFuLmxvd0RhdGEucHVzaChbYUJbYXddWzBdLGFCW2F3XVsxXSphel0pO2JyZWFrfX19ZWxzZXthbi5zaG93PWZhbHNlfX19dmFyIGFtPWFuLmhpRGF0YTt2YXIgYXA9YW4ubG93RGF0YTtmb3IodmFyIGF3PTAsYXQ9YW0ubGVuZ3RoO2F3PGF0O2F3Kyspe2lmKChhbVthd11bMV0hPW51bGwmJmFtW2F3XVsxXT5hbi5fbWF4KXx8YW4uX21heD09bnVsbCl7YW4uX21heD1hbVthd11bMV19fWZvcih2YXIgYXc9MCxhdD1hcC5sZW5ndGg7YXc8YXQ7YXcrKyl7aWYoKGFwW2F3XVsxXSE9bnVsbCYmYXBbYXddWzFdPGFuLl9taW4pfHxhbi5fbWluPT1udWxsKXthbi5fbWluPWFwW2F3XVsxXX19aWYoYW4uZmlsbENvbG9yPT09bnVsbCl7dmFyIGF5PUwuanFwbG90LmdldENvbG9yQ29tcG9uZW50cyhhbi5jb2xvcik7YXlbM109YXlbM10qMC41O2FuLmZpbGxDb2xvcj0icmdiYSgiK2F5WzBdKyIsICIrYXlbMV0rIiwgIitheVsyXSsiLCAiK2F5WzNdKyIpIn19O2Z1bmN0aW9uIEsoYWksYWgpe3JldHVybigzLjQxODIwNTQrYWgpKk1hdGgucG93KGFpLC0wLjM1MzQ5OTIpfWZ1bmN0aW9uIG4oYWosYWkpe3ZhciBhaD1NYXRoLnNxcnQoTWF0aC5wb3coKGFpWzBdLWFqWzBdKSwyKStNYXRoLnBvdygoYWlbMV0tYWpbMV0pLDIpKTtyZXR1cm4gNS43NjQ4Kk1hdGgubG9nKGFoKSs3LjQ0NTZ9ZnVuY3Rpb24gQShhaCl7dmFyIGFpPShNYXRoLmV4cCgyKmFoKS0xKS8oTWF0aC5leHAoMiphaCkrMSk7cmV0dXJuIGFpfWZ1bmN0aW9uIEooYUope3ZhciBhdD10aGlzLnJlbmRlcmVyLnNtb290aDt2YXIgYUQ9dGhpcy5jYW52YXMuZ2V0V2lkdGgoKTt2YXIgYW49dGhpcy5feGF4aXMuc2VyaWVzX3AydTt2YXIgYUc9dGhpcy5feWF4aXMuc2VyaWVzX3AydTt2YXIgYUY9bnVsbDt2YXIgYW09bnVsbDt2YXIgYXo9YUoubGVuZ3RoL2FEO3ZhciBhaj1bXTt2YXIgYXk9W107aWYoIWlzTmFOKHBhcnNlRmxvYXQoYXQpKSl7YUY9cGFyc2VGbG9hdChhdCl9ZWxzZXthRj1LKGF6LDAuNSl9dmFyIGF3PVtdO3ZhciBhaz1bXTtmb3IodmFyIGFFPTAsYUE9YUoubGVuZ3RoO2FFPGFBO2FFKyspe2F3LnB1c2goYUpbYUVdWzFdKTthay5wdXNoKGFKW2FFXVswXSl9ZnVuY3Rpb24gYXYoYUssYUwpe2lmKGFLLWFMPT0wKXtyZXR1cm4gTWF0aC5wb3coMTAsMTApfWVsc2V7cmV0dXJuIGFLLWFMfX12YXIgYXgsYXIsYXEsYXA7dmFyIGFoPWFKLmxlbmd0aC0xO2Zvcih2YXIgYWw9MSxhQj1hSi5sZW5ndGg7YWw8YUI7YWwrKyl7dmFyIGFpPVtdO3ZhciBhdT1bXTtmb3IodmFyIGFDPTA7YUM8MjthQysrKXt2YXIgYUU9YWwtMSthQztpZihhRT09MHx8YUU9PWFoKXthaVthQ109TWF0aC5wb3coMTAsMTApfWVsc2V7aWYoYXdbYUUrMV0tYXdbYUVdPT0wfHxhd1thRV0tYXdbYUUtMV09PTApe2FpW2FDXT0wfWVsc2V7aWYoKChha1thRSsxXS1ha1thRV0pLyhhd1thRSsxXS1hd1thRV0pKyhha1thRV0tYWtbYUUtMV0pLyhhd1thRV0tYXdbYUUtMV0pKT09MCl7YWlbYUNdPTB9ZWxzZXtpZigoYXdbYUUrMV0tYXdbYUVdKSooYXdbYUVdLWF3W2FFLTFdKTwwKXthaVthQ109MH1lbHNle2FpW2FDXT0yLyhhdihha1thRSsxXSxha1thRV0pLyhhd1thRSsxXS1hd1thRV0pK2F2KGFrW2FFXSxha1thRS0xXSkvKGF3W2FFXS1hd1thRS0xXSkpfX19fX1pZihhbD09MSl7YWlbMF09My8yKihhd1sxXS1hd1swXSkvYXYoYWtbMV0sYWtbMF0pLWFpWzFdLzJ9ZWxzZXtpZihhbD09YWgpe2FpWzFdPTMvMiooYXdbYWhdLWF3W2FoLTFdKS9hdihha1thaF0sYWtbYWgtMV0pLWFpWzBdLzJ9fWF1WzBdPS0yKihhaVsxXSsyKmFpWzBdKS9hdihha1thbF0sYWtbYWwtMV0pKzYqKGF3W2FsXS1hd1thbC0xXSkvTWF0aC5wb3coYXYoYWtbYWxdLGFrW2FsLTFdKSwyKTthdVsxXT0yKigyKmFpWzFdK2FpWzBdKS9hdihha1thbF0sYWtbYWwtMV0pLTYqKGF3W2FsXS1hd1thbC0xXSkvTWF0aC5wb3coYXYoYWtbYWxdLGFrW2FsLTFdKSwyKTthcD0xLzYqKGF1WzFdLWF1WzBdKS9hdihha1thbF0sYWtbYWwtMV0pO2FxPTEvMiooYWtbYWxdKmF1WzBdLWFrW2FsLTFdKmF1WzFdKS9hdihha1thbF0sYWtbYWwtMV0pO2FyPShhd1thbF0tYXdbYWwtMV0tYXEqKE1hdGgucG93KGFrW2FsXSwyKS1NYXRoLnBvdyhha1thbC0xXSwyKSktYXAqKE1hdGgucG93KGFrW2FsXSwzKS1NYXRoLnBvdyhha1thbC0xXSwzKSkpL2F2KGFrW2FsXSxha1thbC0xXSk7YXg9YXdbYWwtMV0tYXIqYWtbYWwtMV0tYXEqTWF0aC5wb3coYWtbYWwtMV0sMiktYXAqTWF0aC5wb3coYWtbYWwtMV0sMyk7dmFyIGFJPShha1thbF0tYWtbYWwtMV0pL2FGO3ZhciBhSCxhbztmb3IodmFyIGFDPTAsYUE9YUY7YUM8YUE7YUMrKyl7YUg9W107YW89YWtbYWwtMV0rYUMqYUk7YUgucHVzaChhbyk7YUgucHVzaChheCthciphbythcSpNYXRoLnBvdyhhbywyKSthcCpNYXRoLnBvdyhhbywzKSk7YWoucHVzaChhSCk7YXkucHVzaChbYW4oYUhbMF0pLGFHKGFIWzFdKV0pfX1hai5wdXNoKGFKW2FFXSk7YXkucHVzaChbYW4oYUpbYUVdWzBdKSxhRyhhSlthRV1bMV0pXSk7cmV0dXJuW2FqLGF5XX1mdW5jdGlvbiBGKGFwKXt2YXIgYW89dGhpcy5yZW5kZXJlci5zbW9vdGg7dmFyIGFVPXRoaXMucmVuZGVyZXIudGVuc2lvbjt2YXIgYWg9dGhpcy5jYW52YXMuZ2V0V2lkdGgoKTt2YXIgYUg9dGhpcy5feGF4aXMuc2VyaWVzX3AydTt2YXIgYXE9dGhpcy5feWF4aXMuc2VyaWVzX3AydTt2YXIgYUk9bnVsbDt2YXIgYUo9bnVsbDt2YXIgYVQ9bnVsbDt2YXIgYU89bnVsbDt2YXIgYU09bnVsbDt2YXIgYXQ9bnVsbDt2YXIgYVI9bnVsbDt2YXIgYW09bnVsbDt2YXIgYUssYUwsYUQsYUMsYUEsYXk7dmFyIGFrLGFpLGF2LGF1O3ZhciBhQixheixhTjt2YXIgYXc9W107dmFyIGFqPVtdO3ZhciBhbD1hcC5sZW5ndGgvYWg7dmFyIGFTLGF4LGFGLGFHLGFFO3ZhciBhcj1bXTt2YXIgYW49W107aWYoIWlzTmFOKHBhcnNlRmxvYXQoYW8pKSl7YUk9cGFyc2VGbG9hdChhbyl9ZWxzZXthST1LKGFsLDAuNSl9aWYoIWlzTmFOKHBhcnNlRmxvYXQoYVUpKSl7YVU9cGFyc2VGbG9hdChhVSl9Zm9yKHZhciBhUT0wLGFQPWFwLmxlbmd0aC0xO2FRPGFQO2FRKyspe2lmKGFVPT09bnVsbCl7YXQ9TWF0aC5hYnMoKGFwW2FRKzFdWzFdLWFwW2FRXVsxXSkvKGFwW2FRKzFdWzBdLWFwW2FRXVswXSkpO2FTPTAuMztheD0wLjY7YUY9KGF4LWFTKS8yO2FHPTIuNTthRT0tMS40O2FtPWF0L2FHK2FFO2FPPWFGKkEoYW0pLWFGKkEoYUUpK2FTO2lmKGFRPjApe2FSPU1hdGguYWJzKChhcFthUV1bMV0tYXBbYVEtMV1bMV0pLyhhcFthUV1bMF0tYXBbYVEtMV1bMF0pKX1hbT1hUi9hRythRTthTT1hRipBKGFtKS1hRipBKGFFKSthUzthVD0oYU8rYU0pLzJ9ZWxzZXthVD1hVX1mb3IoYUs9MDthSzxhSTthSysrKXthTD1hSy9hSTthRD0oMSsyKmFMKSpNYXRoLnBvdygoMS1hTCksMik7YUM9YUwqTWF0aC5wb3coKDEtYUwpLDIpO2FBPU1hdGgucG93KGFMLDIpKigzLTIqYUwpO2F5PU1hdGgucG93KGFMLDIpKihhTC0xKTtpZihhcFthUS0xXSl7YWs9YVQqKGFwW2FRKzFdWzBdLWFwW2FRLTFdWzBdKTthaT1hVCooYXBbYVErMV1bMV0tYXBbYVEtMV1bMV0pfWVsc2V7YWs9YVQqKGFwW2FRKzFdWzBdLWFwW2FRXVswXSk7YWk9YVQqKGFwW2FRKzFdWzFdLWFwW2FRXVsxXSl9aWYoYXBbYVErMl0pe2F2PWFUKihhcFthUSsyXVswXS1hcFthUV1bMF0pO2F1PWFUKihhcFthUSsyXVsxXS1hcFthUV1bMV0pfWVsc2V7YXY9YVQqKGFwW2FRKzFdWzBdLWFwW2FRXVswXSk7YXU9YVQqKGFwW2FRKzFdWzFdLWFwW2FRXVsxXSl9YUI9YUQqYXBbYVFdWzBdK2FBKmFwW2FRKzFdWzBdK2FDKmFrK2F5KmF2O2F6PWFEKmFwW2FRXVsxXSthQSphcFthUSsxXVsxXSthQyphaStheSphdTthTj1bYUIsYXpdO2FyLnB1c2goYU4pO2FuLnB1c2goW2FIKGFCKSxhcShheildKX19YXIucHVzaChhcFthUF0pO2FuLnB1c2goW2FIKGFwW2FQXVswXSksYXEoYXBbYVBdWzFdKV0pO3JldHVyblthcixhbl19TC5qcXBsb3QuTGluZVJlbmRlcmVyLnByb3RvdHlwZS5zZXRHcmlkRGF0YT1mdW5jdGlvbihhcCl7dmFyIGFsPXRoaXMuX3hheGlzLnNlcmllc191MnA7dmFyIGFoPXRoaXMuX3lheGlzLnNlcmllc191MnA7dmFyIGFtPXRoaXMuX3Bsb3REYXRhO3ZhciBhcT10aGlzLl9wcmV2UGxvdERhdGE7dGhpcy5ncmlkRGF0YT1bXTt0aGlzLl9wcmV2R3JpZERhdGE9W107dGhpcy5yZW5kZXJlci5fc21vb3RoZWREYXRhPVtdO3RoaXMucmVuZGVyZXIuX3Ntb290aGVkUGxvdERhdGE9W107dGhpcy5yZW5kZXJlci5faGlCYW5kR3JpZERhdGE9W107dGhpcy5yZW5kZXJlci5fbG93QmFuZEdyaWREYXRhPVtdO3RoaXMucmVuZGVyZXIuX2hpQmFuZFNtb290aGVkRGF0YT1bXTt0aGlzLnJlbmRlcmVyLl9sb3dCYW5kU21vb3RoZWREYXRhPVtdO3ZhciBhaz10aGlzLnJlbmRlcmVyLmJhbmRzO3ZhciBhaT1mYWxzZTtmb3IodmFyIGFuPTAsYWo9YW0ubGVuZ3RoO2FuPGFqO2FuKyspe2lmKGFtW2FuXVswXSE9bnVsbCYmYW1bYW5dWzFdIT1udWxsKXt0aGlzLmdyaWREYXRhLnB1c2goW2FsLmNhbGwodGhpcy5feGF4aXMsYW1bYW5dWzBdKSxhaC5jYWxsKHRoaXMuX3lheGlzLGFtW2FuXVsxXSldKX1lbHNle2lmKGFtW2FuXVswXT09bnVsbCl7YWk9dHJ1ZTt0aGlzLmdyaWREYXRhLnB1c2goW251bGwsYWguY2FsbCh0aGlzLl95YXhpcyxhbVthbl1bMV0pXSl9ZWxzZXtpZihhbVthbl1bMV09PW51bGwpe2FpPXRydWU7dGhpcy5ncmlkRGF0YS5wdXNoKFthbC5jYWxsKHRoaXMuX3hheGlzLGFtW2FuXVswXSksbnVsbF0pfX19aWYoYXFbYW5dIT1udWxsJiZhcVthbl1bMF0hPW51bGwmJmFxW2FuXVsxXSE9bnVsbCl7dGhpcy5fcHJldkdyaWREYXRhLnB1c2goW2FsLmNhbGwodGhpcy5feGF4aXMsYXFbYW5dWzBdKSxhaC5jYWxsKHRoaXMuX3lheGlzLGFxW2FuXVsxXSldKX1lbHNle2lmKGFxW2FuXSE9bnVsbCYmYXFbYW5dWzBdPT1udWxsKXt0aGlzLl9wcmV2R3JpZERhdGEucHVzaChbbnVsbCxhaC5jYWxsKHRoaXMuX3lheGlzLGFxW2FuXVsxXSldKX1lbHNle2lmKGFxW2FuXSE9bnVsbCYmYXFbYW5dWzBdIT1udWxsJiZhcVthbl1bMV09PW51bGwpe3RoaXMuX3ByZXZHcmlkRGF0YS5wdXNoKFthbC5jYWxsKHRoaXMuX3hheGlzLGFxW2FuXVswXSksbnVsbF0pfX19fWlmKGFpKXt0aGlzLnJlbmRlcmVyLnNtb290aD1mYWxzZTtpZih0aGlzLl90eXBlPT09ImxpbmUiKXthay5zaG93PWZhbHNlfX1pZih0aGlzLl90eXBlPT09ImxpbmUiJiZhay5zaG93KXtmb3IodmFyIGFuPTAsYWo9YWsuaGlEYXRhLmxlbmd0aDthbjxhajthbisrKXt0aGlzLnJlbmRlcmVyLl9oaUJhbmRHcmlkRGF0YS5wdXNoKFthbC5jYWxsKHRoaXMuX3hheGlzLGFrLmhpRGF0YVthbl1bMF0pLGFoLmNhbGwodGhpcy5feWF4aXMsYWsuaGlEYXRhW2FuXVsxXSldKX1mb3IodmFyIGFuPTAsYWo9YWsubG93RGF0YS5sZW5ndGg7YW48YWo7YW4rKyl7dGhpcy5yZW5kZXJlci5fbG93QmFuZEdyaWREYXRhLnB1c2goW2FsLmNhbGwodGhpcy5feGF4aXMsYWsubG93RGF0YVthbl1bMF0pLGFoLmNhbGwodGhpcy5feWF4aXMsYWsubG93RGF0YVthbl1bMV0pXSl9fWlmKHRoaXMuX3R5cGU9PT0ibGluZSImJnRoaXMucmVuZGVyZXIuc21vb3RoJiZ0aGlzLmdyaWREYXRhLmxlbmd0aD4yKXt2YXIgYW87aWYodGhpcy5yZW5kZXJlci5jb25zdHJhaW5TbW9vdGhpbmcpe2FvPUouY2FsbCh0aGlzLHRoaXMuZ3JpZERhdGEpO3RoaXMucmVuZGVyZXIuX3Ntb290aGVkRGF0YT1hb1swXTt0aGlzLnJlbmRlcmVyLl9zbW9vdGhlZFBsb3REYXRhPWFvWzFdO2lmKGFrLnNob3cpe2FvPUouY2FsbCh0aGlzLHRoaXMucmVuZGVyZXIuX2hpQmFuZEdyaWREYXRhKTt0aGlzLnJlbmRlcmVyLl9oaUJhbmRTbW9vdGhlZERhdGE9YW9bMF07YW89Si5jYWxsKHRoaXMsdGhpcy5yZW5kZXJlci5fbG93QmFuZEdyaWREYXRhKTt0aGlzLnJlbmRlcmVyLl9sb3dCYW5kU21vb3RoZWREYXRhPWFvWzBdfWFvPW51bGx9ZWxzZXthbz1GLmNhbGwodGhpcyx0aGlzLmdyaWREYXRhKTt0aGlzLnJlbmRlcmVyLl9zbW9vdGhlZERhdGE9YW9bMF07dGhpcy5yZW5kZXJlci5fc21vb3RoZWRQbG90RGF0YT1hb1sxXTtpZihhay5zaG93KXthbz1GLmNhbGwodGhpcyx0aGlzLnJlbmRlcmVyLl9oaUJhbmRHcmlkRGF0YSk7dGhpcy5yZW5kZXJlci5faGlCYW5kU21vb3RoZWREYXRhPWFvWzBdO2FvPUYuY2FsbCh0aGlzLHRoaXMucmVuZGVyZXIuX2xvd0JhbmRHcmlkRGF0YSk7dGhpcy5yZW5kZXJlci5fbG93QmFuZFNtb290aGVkRGF0YT1hb1swXX1hbz1udWxsfX19O0wuanFwbG90LkxpbmVSZW5kZXJlci5wcm90b3R5cGUubWFrZUdyaWREYXRhPWZ1bmN0aW9uKGFvLGFxKXt2YXIgYW09dGhpcy5feGF4aXMuc2VyaWVzX3UycDt2YXIgYWg9dGhpcy5feWF4aXMuc2VyaWVzX3UycDt2YXIgYXI9W107dmFyIGFqPVtdO3RoaXMucmVuZGVyZXIuX3Ntb290aGVkRGF0YT1bXTt0aGlzLnJlbmRlcmVyLl9zbW9vdGhlZFBsb3REYXRhPVtdO3RoaXMucmVuZGVyZXIuX2hpQmFuZEdyaWREYXRhPVtdO3RoaXMucmVuZGVyZXIuX2xvd0JhbmRHcmlkRGF0YT1bXTt0aGlzLnJlbmRlcmVyLl9oaUJhbmRTbW9vdGhlZERhdGE9W107dGhpcy5yZW5kZXJlci5fbG93QmFuZFNtb290aGVkRGF0YT1bXTt2YXIgYWw9dGhpcy5yZW5kZXJlci5iYW5kczt2YXIgYWk9ZmFsc2U7Zm9yKHZhciBhbj0wO2FuPGFvLmxlbmd0aDthbisrKXtpZihhb1thbl1bMF0hPW51bGwmJmFvW2FuXVsxXSE9bnVsbCl7YXIucHVzaChbYW0uY2FsbCh0aGlzLl94YXhpcyxhb1thbl1bMF0pLGFoLmNhbGwodGhpcy5feWF4aXMsYW9bYW5dWzFdKV0pfWVsc2V7aWYoYW9bYW5dWzBdPT1udWxsKXthaT10cnVlO2FyLnB1c2goW251bGwsYWguY2FsbCh0aGlzLl95YXhpcyxhb1thbl1bMV0pXSl9ZWxzZXtpZihhb1thbl1bMV09PW51bGwpe2FpPXRydWU7YXIucHVzaChbYW0uY2FsbCh0aGlzLl94YXhpcyxhb1thbl1bMF0pLG51bGxdKX19fX1pZihhaSl7dGhpcy5yZW5kZXJlci5zbW9vdGg9ZmFsc2U7aWYodGhpcy5fdHlwZT09PSJsaW5lIil7YWwuc2hvdz1mYWxzZX19aWYodGhpcy5fdHlwZT09PSJsaW5lIiYmYWwuc2hvdyl7Zm9yKHZhciBhbj0wLGFrPWFsLmhpRGF0YS5sZW5ndGg7YW48YWs7YW4rKyl7dGhpcy5yZW5kZXJlci5faGlCYW5kR3JpZERhdGEucHVzaChbYW0uY2FsbCh0aGlzLl94YXhpcyxhbC5oaURhdGFbYW5dWzBdKSxhaC5jYWxsKHRoaXMuX3lheGlzLGFsLmhpRGF0YVthbl1bMV0pXSl9Zm9yKHZhciBhbj0wLGFrPWFsLmxvd0RhdGEubGVuZ3RoO2FuPGFrO2FuKyspe3RoaXMucmVuZGVyZXIuX2xvd0JhbmRHcmlkRGF0YS5wdXNoKFthbS5jYWxsKHRoaXMuX3hheGlzLGFsLmxvd0RhdGFbYW5dWzBdKSxhaC5jYWxsKHRoaXMuX3lheGlzLGFsLmxvd0RhdGFbYW5dWzFdKV0pfX1pZih0aGlzLl90eXBlPT09ImxpbmUiJiZ0aGlzLnJlbmRlcmVyLnNtb290aCYmYXIubGVuZ3RoPjIpe3ZhciBhcDtpZih0aGlzLnJlbmRlcmVyLmNvbnN0cmFpblNtb290aGluZyl7YXA9Si5jYWxsKHRoaXMsYXIpO3RoaXMucmVuZGVyZXIuX3Ntb290aGVkRGF0YT1hcFswXTt0aGlzLnJlbmRlcmVyLl9zbW9vdGhlZFBsb3REYXRhPWFwWzFdO2lmKGFsLnNob3cpe2FwPUouY2FsbCh0aGlzLHRoaXMucmVuZGVyZXIuX2hpQmFuZEdyaWREYXRhKTt0aGlzLnJlbmRlcmVyLl9oaUJhbmRTbW9vdGhlZERhdGE9YXBbMF07YXA9Si5jYWxsKHRoaXMsdGhpcy5yZW5kZXJlci5fbG93QmFuZEdyaWREYXRhKTt0aGlzLnJlbmRlcmVyLl9sb3dCYW5kU21vb3RoZWREYXRhPWFwWzBdfWFwPW51bGx9ZWxzZXthcD1GLmNhbGwodGhpcyxhcik7dGhpcy5yZW5kZXJlci5fc21vb3RoZWREYXRhPWFwWzBdO3RoaXMucmVuZGVyZXIuX3Ntb290aGVkUGxvdERhdGE9YXBbMV07aWYoYWwuc2hvdyl7YXA9Ri5jYWxsKHRoaXMsdGhpcy5yZW5kZXJlci5faGlCYW5kR3JpZERhdGEpO3RoaXMucmVuZGVyZXIuX2hpQmFuZFNtb290aGVkRGF0YT1hcFswXTthcD1GLmNhbGwodGhpcyx0aGlzLnJlbmRlcmVyLl9sb3dCYW5kR3JpZERhdGEpO3RoaXMucmVuZGVyZXIuX2xvd0JhbmRTbW9vdGhlZERhdGE9YXBbMF19YXA9bnVsbH19cmV0dXJuIGFyfTtMLmpxcGxvdC5MaW5lUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYXgsYUksYWksYUIpe3ZhciBhQzt2YXIgYXE9TC5leHRlbmQodHJ1ZSx7fSxhaSk7dmFyIGFrPShhcS5zaGFkb3chPXUpP2FxLnNoYWRvdzp0aGlzLnNoYWRvdzt2YXIgYUo9KGFxLnNob3dMaW5lIT11KT9hcS5zaG93TGluZTp0aGlzLnNob3dMaW5lO3ZhciBhQT0oYXEuZmlsbCE9dSk/YXEuZmlsbDp0aGlzLmZpbGw7dmFyIGFoPShhcS5maWxsQW5kU3Ryb2tlIT11KT9hcS5maWxsQW5kU3Ryb2tlOnRoaXMuZmlsbEFuZFN0cm9rZTt2YXIgYXIsYXksYXYsYUU7YXguc2F2ZSgpO2lmKGFJLmxlbmd0aCl7aWYoYUope2lmKGFBKXtpZih0aGlzLmZpbGxUb1plcm8pe3ZhciBhRj10aGlzLm5lZ2F0aXZlQ29sb3I7aWYoIXRoaXMudXNlTmVnYXRpdmVDb2xvcnMpe2FGPWFxLmZpbGxTdHlsZX12YXIgYW89ZmFsc2U7dmFyIGFwPWFxLmZpbGxTdHlsZTtpZihhaCl7dmFyIGFIPWFJLnNsaWNlKDApfWlmKHRoaXMuaW5kZXg9PTB8fCF0aGlzLl9zdGFjayl7dmFyIGF3PVtdO3ZhciBhTD0odGhpcy5yZW5kZXJlci5zbW9vdGgpP3RoaXMucmVuZGVyZXIuX3Ntb290aGVkUGxvdERhdGE6dGhpcy5fcGxvdERhdGE7dGhpcy5fYXJlYVBvaW50cz1bXTt2YXIgYUc9dGhpcy5feWF4aXMuc2VyaWVzX3UycCh0aGlzLmZpbGxUb1ZhbHVlKTt2YXIgYWo9dGhpcy5feGF4aXMuc2VyaWVzX3UycCh0aGlzLmZpbGxUb1ZhbHVlKTthcS5jbG9zZVBhdGg9dHJ1ZTtpZih0aGlzLmZpbGxBeGlzPT0ieSIpe2F3LnB1c2goW2FJWzBdWzBdLGFHXSk7dGhpcy5fYXJlYVBvaW50cy5wdXNoKFthSVswXVswXSxhR10pO2Zvcih2YXIgYUM9MDthQzxhSS5sZW5ndGgtMTthQysrKXthdy5wdXNoKGFJW2FDXSk7dGhpcy5fYXJlYVBvaW50cy5wdXNoKGFJW2FDXSk7aWYoYUxbYUNdWzFdKmFMW2FDKzFdWzFdPD0wKXtpZihhTFthQ11bMV08MCl7YW89dHJ1ZTthcS5maWxsU3R5bGU9YUZ9ZWxzZXthbz1mYWxzZTthcS5maWxsU3R5bGU9YXB9dmFyIGFuPWFJW2FDXVswXSsoYUlbYUMrMV1bMF0tYUlbYUNdWzBdKSooYUctYUlbYUNdWzFdKS8oYUlbYUMrMV1bMV0tYUlbYUNdWzFdKTthdy5wdXNoKFthbixhR10pO3RoaXMuX2FyZWFQb2ludHMucHVzaChbYW4sYUddKTtpZihhayl7dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGF4LGF3LGFxKX10aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhheCxhdyxhcSk7YXc9W1thbixhR11dfX1pZihhTFthSS5sZW5ndGgtMV1bMV08MCl7YW89dHJ1ZTthcS5maWxsU3R5bGU9YUZ9ZWxzZXthbz1mYWxzZTthcS5maWxsU3R5bGU9YXB9YXcucHVzaChhSVthSS5sZW5ndGgtMV0pO3RoaXMuX2FyZWFQb2ludHMucHVzaChhSVthSS5sZW5ndGgtMV0pO2F3LnB1c2goW2FJW2FJLmxlbmd0aC0xXVswXSxhR10pO3RoaXMuX2FyZWFQb2ludHMucHVzaChbYUlbYUkubGVuZ3RoLTFdWzBdLGFHXSl9aWYoYWspe3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhheCxhdyxhcSl9dGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmRyYXcoYXgsYXcsYXEpfWVsc2V7dmFyIGF1PXRoaXMuX3ByZXZHcmlkRGF0YTtmb3IodmFyIGFDPWF1Lmxlbmd0aDthQz4wO2FDLS0pe2FJLnB1c2goYXVbYUMtMV0pfWlmKGFrKXt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoYXgsYUksYXEpfXRoaXMuX2FyZWFQb2ludHM9YUk7dGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmRyYXcoYXgsYUksYXEpfX1lbHNle2lmKGFoKXt2YXIgYUg9YUkuc2xpY2UoMCl9aWYodGhpcy5pbmRleD09MHx8IXRoaXMuX3N0YWNrKXt2YXIgYWw9YXguY2FudmFzLmhlaWdodDthSS51bnNoaWZ0KFthSVswXVswXSxhbF0pO3ZhciBhRD1hSS5sZW5ndGg7YUkucHVzaChbYUlbYUQtMV1bMF0sYWxdKX1lbHNle3ZhciBhdT10aGlzLl9wcmV2R3JpZERhdGE7Zm9yKHZhciBhQz1hdS5sZW5ndGg7YUM+MDthQy0tKXthSS5wdXNoKGF1W2FDLTFdKX19dGhpcy5fYXJlYVBvaW50cz1hSTtpZihhayl7dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGF4LGFJLGFxKX10aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhheCxhSSxhcSl9aWYoYWgpe3ZhciBhej1MLmV4dGVuZCh0cnVlLHt9LGFxLHtmaWxsOmZhbHNlLGNsb3NlUGF0aDpmYWxzZX0pO3RoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KGF4LGFILGF6KTtpZih0aGlzLm1hcmtlclJlbmRlcmVyLnNob3cpe2lmKHRoaXMucmVuZGVyZXIuc21vb3RoKXthSD10aGlzLmdyaWREYXRhfWZvcihhQz0wO2FDPGFILmxlbmd0aDthQysrKXt0aGlzLm1hcmtlclJlbmRlcmVyLmRyYXcoYUhbYUNdWzBdLGFIW2FDXVsxXSxheCxhcS5tYXJrZXJPcHRpb25zKX19fX1lbHNle2lmKHRoaXMucmVuZGVyZXIuYmFuZHMuc2hvdyl7dmFyIGFtO3ZhciBhSz1MLmV4dGVuZCh0cnVlLHt9LGFxKTtpZih0aGlzLnJlbmRlcmVyLmJhbmRzLnNob3dMaW5lcyl7YW09KHRoaXMucmVuZGVyZXIuc21vb3RoKT90aGlzLnJlbmRlcmVyLl9oaUJhbmRTbW9vdGhlZERhdGE6dGhpcy5yZW5kZXJlci5faGlCYW5kR3JpZERhdGE7dGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmRyYXcoYXgsYW0sYXEpO2FtPSh0aGlzLnJlbmRlcmVyLnNtb290aCk/dGhpcy5yZW5kZXJlci5fbG93QmFuZFNtb290aGVkRGF0YTp0aGlzLnJlbmRlcmVyLl9sb3dCYW5kR3JpZERhdGE7dGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmRyYXcoYXgsYW0sYUspfWlmKHRoaXMucmVuZGVyZXIuYmFuZHMuZmlsbCl7aWYodGhpcy5yZW5kZXJlci5zbW9vdGgpe2FtPXRoaXMucmVuZGVyZXIuX2hpQmFuZFNtb290aGVkRGF0YS5jb25jYXQodGhpcy5yZW5kZXJlci5fbG93QmFuZFNtb290aGVkRGF0YS5yZXZlcnNlKCkpfWVsc2V7YW09dGhpcy5yZW5kZXJlci5faGlCYW5kR3JpZERhdGEuY29uY2F0KHRoaXMucmVuZGVyZXIuX2xvd0JhbmRHcmlkRGF0YS5yZXZlcnNlKCkpfXRoaXMuX2FyZWFQb2ludHM9YW07YUsuY2xvc2VQYXRoPXRydWU7YUsuZmlsbD10cnVlO2FLLmZpbGxTdHlsZT10aGlzLnJlbmRlcmVyLmJhbmRzLmZpbGxDb2xvcjt0aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhheCxhbSxhSyl9fWlmKGFrKXt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoYXgsYUksYXEpfXRoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KGF4LGFJLGFxKX19dmFyIGFyPWF2PWF5PWFFPW51bGw7Zm9yKGFDPTA7YUM8dGhpcy5fYXJlYVBvaW50cy5sZW5ndGg7YUMrKyl7dmFyIGF0PXRoaXMuX2FyZWFQb2ludHNbYUNdO2lmKGFyPmF0WzBdfHxhcj09bnVsbCl7YXI9YXRbMF19aWYoYUU8YXRbMV18fGFFPT1udWxsKXthRT1hdFsxXX1pZihhdjxhdFswXXx8YXY9PW51bGwpe2F2PWF0WzBdfWlmKGF5PmF0WzFdfHxheT09bnVsbCl7YXk9YXRbMV19fWlmKHRoaXMudHlwZT09PSJsaW5lIiYmdGhpcy5yZW5kZXJlci5iYW5kcy5zaG93KXthRT10aGlzLl95YXhpcy5zZXJpZXNfdTJwKHRoaXMucmVuZGVyZXIuYmFuZHMuX21pbik7YXk9dGhpcy5feWF4aXMuc2VyaWVzX3UycCh0aGlzLnJlbmRlcmVyLmJhbmRzLl9tYXgpfXRoaXMuX2JvdW5kaW5nQm94PVtbYXIsYUVdLFthdixheV1dO2lmKHRoaXMubWFya2VyUmVuZGVyZXIuc2hvdyYmIWFBKXtpZih0aGlzLnJlbmRlcmVyLnNtb290aCl7YUk9dGhpcy5ncmlkRGF0YX1mb3IoYUM9MDthQzxhSS5sZW5ndGg7YUMrKyl7aWYoYUlbYUNdWzBdIT1udWxsJiZhSVthQ11bMV0hPW51bGwpe3RoaXMubWFya2VyUmVuZGVyZXIuZHJhdyhhSVthQ11bMF0sYUlbYUNdWzFdLGF4LGFxLm1hcmtlck9wdGlvbnMpfX19fWF4LnJlc3RvcmUoKX07TC5qcXBsb3QuTGluZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3U2hhZG93PWZ1bmN0aW9uKGFoLGFqLGFpKXt9O2Z1bmN0aW9uIHooYWssYWosYWgpe2Zvcih2YXIgYWk9MDthaTx0aGlzLnNlcmllcy5sZW5ndGg7YWkrKyl7aWYodGhpcy5zZXJpZXNbYWldLnJlbmRlcmVyLmNvbnN0cnVjdG9yPT1MLmpxcGxvdC5MaW5lUmVuZGVyZXIpe2lmKHRoaXMuc2VyaWVzW2FpXS5oaWdobGlnaHRNb3VzZU92ZXIpe3RoaXMuc2VyaWVzW2FpXS5oaWdobGlnaHRNb3VzZURvd249ZmFsc2V9fX19ZnVuY3Rpb24gYWYoKXtpZih0aGlzLnBsdWdpbnMubGluZVJlbmRlcmVyJiZ0aGlzLnBsdWdpbnMubGluZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcyl7dGhpcy5wbHVnaW5zLmxpbmVSZW5kZXJlci5oaWdobGlnaHRDYW52YXMucmVzZXRDYW52YXMoKTt0aGlzLnBsdWdpbnMubGluZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcz1udWxsfXRoaXMucGx1Z2lucy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleD1udWxsO3RoaXMucGx1Z2lucy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzPW5ldyBMLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZvcmUodGhpcy5wbHVnaW5zLmxpbmVSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywianFwbG90LWxpbmVSZW5kZXJlci1oaWdobGlnaHQtY2FudmFzIix0aGlzLl9wbG90RGltZW5zaW9ucyx0aGlzKSk7dGhpcy5wbHVnaW5zLmxpbmVSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuc2V0Q29udGV4dCgpO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgibW91c2VsZWF2ZSIse3Bsb3Q6dGhpc30sZnVuY3Rpb24oYWgpe2FhKGFoLmRhdGEucGxvdCl9KX1mdW5jdGlvbiBhYyhhbixhbSxhayxhail7dmFyIGFpPWFuLnNlcmllc1thbV07dmFyIGFoPWFuLnBsdWdpbnMubGluZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhczthaC5fY3R4LmNsZWFyUmVjdCgwLDAsYWguX2N0eC5jYW52YXMud2lkdGgsYWguX2N0eC5jYW52YXMuaGVpZ2h0KTthaS5faGlnaGxpZ2h0ZWRQb2ludD1hazthbi5wbHVnaW5zLmxpbmVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4PWFtO3ZhciBhbD17ZmlsbFN0eWxlOmFpLmhpZ2hsaWdodENvbG9yfTtpZihhaS50eXBlPT09ImxpbmUiJiZhaS5yZW5kZXJlci5iYW5kcy5zaG93KXthbC5maWxsPXRydWU7YWwuY2xvc2VQYXRoPXRydWV9YWkucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KGFoLl9jdHgsYWosYWwpO2FoPW51bGx9ZnVuY3Rpb24gYWEoYWope3ZhciBhaD1hai5wbHVnaW5zLmxpbmVSZW5kZXJlci5oaWdobGlnaHRDYW52YXM7YWguX2N0eC5jbGVhclJlY3QoMCwwLGFoLl9jdHguY2FudmFzLndpZHRoLGFoLl9jdHguY2FudmFzLmhlaWdodCk7Zm9yKHZhciBhaT0wO2FpPGFqLnNlcmllcy5sZW5ndGg7YWkrKyl7YWouc2VyaWVzW2FpXS5faGlnaGxpZ2h0ZWRQb2ludD1udWxsfWFqLnBsdWdpbnMubGluZVJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg9bnVsbDthai50YXJnZXQudHJpZ2dlcigianFwbG90RGF0YVVuaGlnaGxpZ2h0Iik7YWg9bnVsbH1mdW5jdGlvbiBoKGFsLGFrLGFvLGFuLGFtKXtpZihhbil7dmFyIGFqPVthbi5zZXJpZXNJbmRleCxhbi5wb2ludEluZGV4LGFuLmRhdGFdO3ZhciBhaT1qUXVlcnkuRXZlbnQoImpxcGxvdERhdGFNb3VzZU92ZXIiKTthaS5wYWdlWD1hbC5wYWdlWDthaS5wYWdlWT1hbC5wYWdlWTthbS50YXJnZXQudHJpZ2dlcihhaSxhaik7aWYoYW0uc2VyaWVzW2FqWzBdXS5oaWdobGlnaHRNb3VzZU92ZXImJiEoYWpbMF09PWFtLnBsdWdpbnMubGluZVJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXgpKXt2YXIgYWg9alF1ZXJ5LkV2ZW50KCJqcXBsb3REYXRhSGlnaGxpZ2h0Iik7YWgud2hpY2g9YWwud2hpY2g7YWgucGFnZVg9YWwucGFnZVg7YWgucGFnZVk9YWwucGFnZVk7YW0udGFyZ2V0LnRyaWdnZXIoYWgsYWopO2FjKGFtLGFuLnNlcmllc0luZGV4LGFuLnBvaW50SW5kZXgsYW4ucG9pbnRzKX19ZWxzZXtpZihhbj09bnVsbCl7YWEoYW0pfX19ZnVuY3Rpb24gZShhayxhaixhbixhbSxhbCl7aWYoYW0pe3ZhciBhaT1bYW0uc2VyaWVzSW5kZXgsYW0ucG9pbnRJbmRleCxhbS5kYXRhXTtpZihhbC5zZXJpZXNbYWlbMF1dLmhpZ2hsaWdodE1vdXNlRG93biYmIShhaVswXT09YWwucGx1Z2lucy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCkpe3ZhciBhaD1qUXVlcnkuRXZlbnQoImpxcGxvdERhdGFIaWdobGlnaHQiKTthaC53aGljaD1hay53aGljaDthaC5wYWdlWD1hay5wYWdlWDthaC5wYWdlWT1hay5wYWdlWTthbC50YXJnZXQudHJpZ2dlcihhaCxhaSk7YWMoYWwsYW0uc2VyaWVzSW5kZXgsYW0ucG9pbnRJbmRleCxhbS5wb2ludHMpfX1lbHNle2lmKGFtPT1udWxsKXthYShhbCl9fX1mdW5jdGlvbiBhZChhaixhaSxhbSxhbCxhayl7dmFyIGFoPWFrLnBsdWdpbnMubGluZVJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg7aWYoYWghPW51bGwmJmFrLnNlcmllc1thaF0uaGlnaGxpZ2h0TW91c2VEb3duKXthYShhayl9fWZ1bmN0aW9uIGcoYWssYWosYW4sYW0sYWwpe2lmKGFtKXt2YXIgYWk9W2FtLnNlcmllc0luZGV4LGFtLnBvaW50SW5kZXgsYW0uZGF0YV07dmFyIGFoPWpRdWVyeS5FdmVudCgianFwbG90RGF0YUNsaWNrIik7YWgud2hpY2g9YWsud2hpY2g7YWgucGFnZVg9YWsucGFnZVg7YWgucGFnZVk9YWsucGFnZVk7YWwudGFyZ2V0LnRyaWdnZXIoYWgsYWkpfX1mdW5jdGlvbiBzKGFsLGFrLGFvLGFuLGFtKXtpZihhbil7dmFyIGFqPVthbi5zZXJpZXNJbmRleCxhbi5wb2ludEluZGV4LGFuLmRhdGFdO3ZhciBhaD1hbS5wbHVnaW5zLmxpbmVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4O2lmKGFoIT1udWxsJiZhbS5zZXJpZXNbYWhdLmhpZ2hsaWdodE1vdXNlRG93bil7YWEoYW0pfXZhciBhaT1qUXVlcnkuRXZlbnQoImpxcGxvdERhdGFSaWdodENsaWNrIik7YWkud2hpY2g9YWwud2hpY2g7YWkucGFnZVg9YWwucGFnZVg7YWkucGFnZVk9YWwucGFnZVk7YW0udGFyZ2V0LnRyaWdnZXIoYWksYWopfX1MLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXI9ZnVuY3Rpb24oKXt9O0wuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhaCl7dGhpcy5icmVha1BvaW50cz1udWxsO3RoaXMuYnJlYWtUaWNrTGFiZWw9IiZhc3ltcDsiO3RoaXMuZHJhd0Jhc2VsaW5lPXRydWU7dGhpcy5iYXNlbGluZVdpZHRoPW51bGw7dGhpcy5iYXNlbGluZUNvbG9yPW51bGw7dGhpcy5mb3JjZVRpY2tBdDA9ZmFsc2U7dGhpcy5mb3JjZVRpY2tBdDEwMD1mYWxzZTt0aGlzLnRpY2tJbnNldD0wO3RoaXMubWlub3JUaWNrcz0wO3RoaXMuYWxpZ25UaWNrcz1mYWxzZTt0aGlzLl9hdXRvRm9ybWF0U3RyaW5nPSIiO3RoaXMuX292ZXJyaWRlRm9ybWF0U3RyaW5nPWZhbHNlO3RoaXMuX3NjYWxlZmFjdD0xO0wuZXh0ZW5kKHRydWUsdGhpcyxhaCk7aWYodGhpcy5icmVha1BvaW50cyl7aWYoIUwuaXNBcnJheSh0aGlzLmJyZWFrUG9pbnRzKSl7dGhpcy5icmVha1BvaW50cz1udWxsfWVsc2V7aWYodGhpcy5icmVha1BvaW50cy5sZW5ndGg8Mnx8dGhpcy5icmVha1BvaW50c1sxXTw9dGhpcy5icmVha1BvaW50c1swXSl7dGhpcy5icmVha1BvaW50cz1udWxsfX19aWYodGhpcy5udW1iZXJUaWNrcyE9bnVsbCYmdGhpcy5udW1iZXJUaWNrczwyKXt0aGlzLm51bWJlclRpY2tzPTJ9dGhpcy5yZXNldERhdGFCb3VuZHMoKX07TC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGFoLGFvKXtpZih0aGlzLnNob3cpe3RoaXMucmVuZGVyZXIuY3JlYXRlVGlja3MuY2FsbCh0aGlzLGFvKTt2YXIgYW49MDt2YXIgYWk7aWYodGhpcy5fZWxlbSl7dGhpcy5fZWxlbS5lbXB0eUZvcmNlKCk7dGhpcy5fZWxlbT1udWxsfXRoaXMuX2VsZW09TChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7dGhpcy5fZWxlbS5hZGRDbGFzcygianFwbG90LWF4aXMganFwbG90LSIrdGhpcy5uYW1lKTt0aGlzLl9lbGVtLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpO2lmKHRoaXMubmFtZT09InhheGlzInx8dGhpcy5uYW1lPT0ieDJheGlzIil7dGhpcy5fZWxlbS53aWR0aCh0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCl9ZWxzZXt0aGlzLl9lbGVtLmhlaWdodCh0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQpfXRoaXMubGFiZWxPcHRpb25zLmF4aXM9dGhpcy5uYW1lO3RoaXMuX2xhYmVsPW5ldyB0aGlzLmxhYmVsUmVuZGVyZXIodGhpcy5sYWJlbE9wdGlvbnMpO2lmKHRoaXMuX2xhYmVsLnNob3cpe3ZhciBhbT10aGlzLl9sYWJlbC5kcmF3KGFoLGFvKTthbS5hcHBlbmRUbyh0aGlzLl9lbGVtKTthbT1udWxsfXZhciBhbD10aGlzLl90aWNrczt2YXIgYWs7Zm9yKHZhciBhaj0wO2FqPGFsLmxlbmd0aDthaisrKXthaz1hbFthal07aWYoYWsuc2hvdyYmYWsuc2hvd0xhYmVsJiYoIWFrLmlzTWlub3JUaWNrfHx0aGlzLnNob3dNaW5vclRpY2tzKSl7dGhpcy5fZWxlbS5hcHBlbmQoYWsuZHJhdyhhaCxhbykpfX1haz1udWxsO2FsPW51bGx9cmV0dXJuIHRoaXMuX2VsZW19O0wuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLm1pbj10aGlzLl9vcHRpb25zLm1pbjt0aGlzLm1heD10aGlzLl9vcHRpb25zLm1heDt0aGlzLnRpY2tJbnRlcnZhbD10aGlzLl9vcHRpb25zLnRpY2tJbnRlcnZhbDt0aGlzLm51bWJlclRpY2tzPXRoaXMuX29wdGlvbnMubnVtYmVyVGlja3M7dGhpcy5fYXV0b0Zvcm1hdFN0cmluZz0iIjtpZih0aGlzLl9vdmVycmlkZUZvcm1hdFN0cmluZyYmdGhpcy50aWNrT3B0aW9ucyYmdGhpcy50aWNrT3B0aW9ucy5mb3JtYXRTdHJpbmcpe3RoaXMudGlja09wdGlvbnMuZm9ybWF0U3RyaW5nPSIifX07TC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oKXt2YXIgYW89MDt2YXIgYWo7dmFyIGFpPTA7dmFyIGFuPTA7dmFyIGFoPSh0aGlzLl9sYWJlbD09bnVsbCk/ZmFsc2U6dGhpcy5fbGFiZWwuc2hvdztpZih0aGlzLnNob3cpe3ZhciBhbT10aGlzLl90aWNrczt2YXIgYWw7Zm9yKHZhciBhaz0wO2FrPGFtLmxlbmd0aDthaysrKXthbD1hbVtha107aWYoIWFsLl9icmVha1RpY2smJmFsLnNob3cmJmFsLnNob3dMYWJlbCYmKCFhbC5pc01pbm9yVGlja3x8dGhpcy5zaG93TWlub3JUaWNrcykpe2lmKHRoaXMubmFtZT09InhheGlzInx8dGhpcy5uYW1lPT0ieDJheGlzIil7YWo9YWwuX2VsZW0ub3V0ZXJIZWlnaHQodHJ1ZSl9ZWxzZXthaj1hbC5fZWxlbS5vdXRlcldpZHRoKHRydWUpfWlmKGFqPmFvKXthbz1han19fWFsPW51bGw7YW09bnVsbDtpZihhaCl7YWk9dGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTthbj10aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKX1pZih0aGlzLm5hbWU9PSJ4YXhpcyIpe2FvPWFvK2FuO3RoaXMuX2VsZW0uY3NzKHtoZWlnaHQ6YW8rInB4IixsZWZ0OiIwcHgiLGJvdHRvbToiMHB4In0pfWVsc2V7aWYodGhpcy5uYW1lPT0ieDJheGlzIil7YW89YW8rYW47dGhpcy5fZWxlbS5jc3Moe2hlaWdodDphbysicHgiLGxlZnQ6IjBweCIsdG9wOiIwcHgifSl9ZWxzZXtpZih0aGlzLm5hbWU9PSJ5YXhpcyIpe2FvPWFvK2FpO3RoaXMuX2VsZW0uY3NzKHt3aWR0aDphbysicHgiLGxlZnQ6IjBweCIsdG9wOiIwcHgifSk7aWYoYWgmJnRoaXMuX2xhYmVsLmNvbnN0cnVjdG9yPT1MLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlcil7dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJ3aWR0aCIsYWkrInB4Iil9fWVsc2V7YW89YW8rYWk7dGhpcy5fZWxlbS5jc3Moe3dpZHRoOmFvKyJweCIscmlnaHQ6IjBweCIsdG9wOiIwcHgifSk7aWYoYWgmJnRoaXMuX2xhYmVsLmNvbnN0cnVjdG9yPT1MLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlcil7dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJ3aWR0aCIsYWkrInB4Iil9fX19fX07TC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jcmVhdGVUaWNrcz1mdW5jdGlvbihhail7dmFyIGFUPXRoaXMuX3RpY2tzO3ZhciBhSz10aGlzLnRpY2tzO3ZhciBhej10aGlzLm5hbWU7dmFyIGFCPXRoaXMuX2RhdGFCb3VuZHM7dmFyIGFoPSh0aGlzLm5hbWUuY2hhckF0KDApPT09IngiKT90aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aDp0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQ7dmFyIGFuO3ZhciBhNixhSTt2YXIgYXAsYW87dmFyIGE0LGEwO3ZhciBhSD10aGlzLm1pbjt2YXIgYTU9dGhpcy5tYXg7dmFyIGFXPXRoaXMubnVtYmVyVGlja3M7dmFyIGJhPXRoaXMudGlja0ludGVydmFsO3ZhciBhbT0zMDt0aGlzLl9zY2FsZWZhY3Q9KE1hdGgubWF4KGFoLGFtKzEpLWFtKS8zMDA7aWYoYUsubGVuZ3RoKXtmb3IoYTA9MDthMDxhSy5sZW5ndGg7YTArKyl7dmFyIGFPPWFLW2EwXTt2YXIgYVU9bmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpO2lmKEwuaXNBcnJheShhTykpe2FVLnZhbHVlPWFPWzBdO2lmKHRoaXMuYnJlYWtQb2ludHMpe2lmKGFPWzBdPT10aGlzLmJyZWFrUG9pbnRzWzBdKXthVS5sYWJlbD10aGlzLmJyZWFrVGlja0xhYmVsO2FVLl9icmVha1RpY2s9dHJ1ZTthVS5zaG93R3JpZGxpbmU9ZmFsc2U7YVUuc2hvd01hcms9ZmFsc2V9ZWxzZXtpZihhT1swXT50aGlzLmJyZWFrUG9pbnRzWzBdJiZhT1swXTw9dGhpcy5icmVha1BvaW50c1sxXSl7YVUuc2hvdz1mYWxzZTthVS5zaG93R3JpZGxpbmU9ZmFsc2U7YVUubGFiZWw9YU9bMV19ZWxzZXthVS5sYWJlbD1hT1sxXX19fWVsc2V7YVUubGFiZWw9YU9bMV19YVUuc2V0VGljayhhT1swXSx0aGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1c2goYVUpfWVsc2V7aWYoTC5pc1BsYWluT2JqZWN0KGFPKSl7TC5leHRlbmQodHJ1ZSxhVSxhTyk7YVUuYXhpcz10aGlzLm5hbWU7dGhpcy5fdGlja3MucHVzaChhVSl9ZWxzZXthVS52YWx1ZT1hTztpZih0aGlzLmJyZWFrUG9pbnRzKXtpZihhTz09dGhpcy5icmVha1BvaW50c1swXSl7YVUubGFiZWw9dGhpcy5icmVha1RpY2tMYWJlbDthVS5fYnJlYWtUaWNrPXRydWU7YVUuc2hvd0dyaWRsaW5lPWZhbHNlO2FVLnNob3dNYXJrPWZhbHNlfWVsc2V7aWYoYU8+dGhpcy5icmVha1BvaW50c1swXSYmYU88PXRoaXMuYnJlYWtQb2ludHNbMV0pe2FVLnNob3c9ZmFsc2U7YVUuc2hvd0dyaWRsaW5lPWZhbHNlfX19YVUuc2V0VGljayhhTyx0aGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1c2goYVUpfX19dGhpcy5udW1iZXJUaWNrcz1hSy5sZW5ndGg7dGhpcy5taW49dGhpcy5fdGlja3NbMF0udmFsdWU7dGhpcy5tYXg9dGhpcy5fdGlja3NbdGhpcy5udW1iZXJUaWNrcy0xXS52YWx1ZTt0aGlzLnRpY2tJbnRlcnZhbD0odGhpcy5tYXgtdGhpcy5taW4pLyh0aGlzLm51bWJlclRpY2tzLTEpfWVsc2V7aWYoYXo9PSJ4YXhpcyJ8fGF6PT0ieDJheGlzIil7YWg9dGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGh9ZWxzZXthaD10aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHR9dmFyIGF4PXRoaXMubnVtYmVyVGlja3M7aWYodGhpcy5hbGlnblRpY2tzKXtpZih0aGlzLm5hbWU9PT0ieDJheGlzIiYmYWouYXhlcy54YXhpcy5zaG93KXtheD1hai5heGVzLnhheGlzLm51bWJlclRpY2tzfWVsc2V7aWYodGhpcy5uYW1lLmNoYXJBdCgwKT09PSJ5IiYmdGhpcy5uYW1lIT09InlheGlzIiYmdGhpcy5uYW1lIT09InlNaWRBeGlzIiYmYWouYXhlcy55YXhpcy5zaG93KXtheD1hai5heGVzLnlheGlzLm51bWJlclRpY2tzfX19YTY9KCh0aGlzLm1pbiE9bnVsbCk/dGhpcy5taW46YUIubWluKTthST0oKHRoaXMubWF4IT1udWxsKT90aGlzLm1heDphQi5tYXgpO3ZhciBhdj1hSS1hNjt2YXIgYVMsYXk7dmFyIGF0O2lmKHRoaXMudGlja09wdGlvbnM9PW51bGx8fCF0aGlzLnRpY2tPcHRpb25zLmZvcm1hdFN0cmluZyl7dGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmc9dHJ1ZX1pZih0aGlzLm1pbj09bnVsbHx8dGhpcy5tYXg9PW51bGwmJnRoaXMudGlja0ludGVydmFsPT1udWxsJiYhdGhpcy5hdXRvc2NhbGUpe2lmKHRoaXMuZm9yY2VUaWNrQXQwKXtpZihhNj4wKXthNj0wfWlmKGFJPDApe2FJPTB9fWlmKHRoaXMuZm9yY2VUaWNrQXQxMDApe2lmKGE2PjEwMCl7YTY9MTAwfWlmKGFJPDEwMCl7YUk9MTAwfX12YXIgYUU9ZmFsc2UsYTE9ZmFsc2U7aWYodGhpcy5taW4hPW51bGwpe2FFPXRydWV9ZWxzZXtpZih0aGlzLm1heCE9bnVsbCl7YTE9dHJ1ZX19dmFyIGFQPUwuanFwbG90LkxpbmVhclRpY2tHZW5lcmF0b3IoYTYsYUksdGhpcy5fc2NhbGVmYWN0LGF4LGFFLGExKTt2YXIgYXc9KHRoaXMubWluIT1udWxsKT9hNjphNithdioodGhpcy5wYWRNaW4tMSk7dmFyIGFRPSh0aGlzLm1heCE9bnVsbCk/YUk6YUktYXYqKHRoaXMucGFkTWF4LTEpO2lmKGE2PGF3fHxhST5hUSl7YXc9KHRoaXMubWluIT1udWxsKT9hNjphNi1hdioodGhpcy5wYWRNaW4tMSk7YVE9KHRoaXMubWF4IT1udWxsKT9hSTphSSthdioodGhpcy5wYWRNYXgtMSk7YVA9TC5qcXBsb3QuTGluZWFyVGlja0dlbmVyYXRvcihhdyxhUSx0aGlzLl9zY2FsZWZhY3QsYXgsYUUsYTEpfXRoaXMubWluPWFQWzBdO3RoaXMubWF4PWFQWzFdO3RoaXMubnVtYmVyVGlja3M9YVBbMl07dGhpcy5fYXV0b0Zvcm1hdFN0cmluZz1hUFszXTt0aGlzLnRpY2tJbnRlcnZhbD1hUFs0XX1lbHNle2lmKGE2PT1hSSl7dmFyIGFpPTAuMDU7aWYoYTY+MCl7YWk9TWF0aC5tYXgoTWF0aC5sb2coYTYpL01hdGguTE4xMCwwLjA1KX1hNi09YWk7YUkrPWFpfWlmKHRoaXMuYXV0b3NjYWxlJiZ0aGlzLm1pbj09bnVsbCYmdGhpcy5tYXg9PW51bGwpe3ZhciBhayxhbCxhcjt2YXIgYUM9ZmFsc2U7dmFyIGFOPWZhbHNlO3ZhciBhQT17bWluOm51bGwsbWF4Om51bGwsYXZlcmFnZTpudWxsLHN0ZGRldjpudWxsfTtmb3IodmFyIGEwPTA7YTA8dGhpcy5fc2VyaWVzLmxlbmd0aDthMCsrKXt2YXIgYVY9dGhpcy5fc2VyaWVzW2EwXTt2YXIgYUQ9KGFWLmZpbGxBeGlzPT0ieCIpP2FWLl94YXhpcy5uYW1lOmFWLl95YXhpcy5uYW1lO2lmKHRoaXMubmFtZT09YUQpe3ZhciBhUj1hVi5fcGxvdFZhbHVlc1thVi5maWxsQXhpc107dmFyIGFHPWFSWzBdO3ZhciBhMj1hUlswXTtmb3IodmFyIGFaPTE7YVo8YVIubGVuZ3RoO2FaKyspe2lmKGFSW2FaXTxhRyl7YUc9YVJbYVpdfWVsc2V7aWYoYVJbYVpdPmEyKXthMj1hUlthWl19fX12YXIgYXU9KGEyLWFHKS9hMjtpZihhVi5yZW5kZXJlci5jb25zdHJ1Y3Rvcj09TC5qcXBsb3QuQmFyUmVuZGVyZXIpe2lmKGFHPj0wJiYoYVYuZmlsbFRvWmVyb3x8YXU+MC4xKSl7YUM9dHJ1ZX1lbHNle2FDPWZhbHNlO2lmKGFWLmZpbGwmJmFWLmZpbGxUb1plcm8mJmFHPDAmJmEyPjApe2FOPXRydWV9ZWxzZXthTj1mYWxzZX19fWVsc2V7aWYoYVYuZmlsbCl7aWYoYUc+PTAmJihhVi5maWxsVG9aZXJvfHxhdT4wLjEpKXthQz10cnVlfWVsc2V7aWYoYUc8MCYmYTI+MCYmYVYuZmlsbFRvWmVybyl7YUM9ZmFsc2U7YU49dHJ1ZX1lbHNle2FDPWZhbHNlO2FOPWZhbHNlfX19ZWxzZXtpZihhRzwwKXthQz1mYWxzZX19fX19aWYoYUMpe3RoaXMubnVtYmVyVGlja3M9MitNYXRoLmNlaWwoKGFoLSh0aGlzLnRpY2tTcGFjaW5nLTEpKS90aGlzLnRpY2tTcGFjaW5nKTt0aGlzLm1pbj0wO2FIPTA7YWw9YUkvKHRoaXMubnVtYmVyVGlja3MtMSk7YXQ9TWF0aC5wb3coMTAsTWF0aC5hYnMoTWF0aC5mbG9vcihNYXRoLmxvZyhhbCkvTWF0aC5MTjEwKSkpO2lmKGFsL2F0PT1wYXJzZUludChhbC9hdCwxMCkpe2FsKz1hdH10aGlzLnRpY2tJbnRlcnZhbD1NYXRoLmNlaWwoYWwvYXQpKmF0O3RoaXMubWF4PXRoaXMudGlja0ludGVydmFsKih0aGlzLm51bWJlclRpY2tzLTEpfWVsc2V7aWYoYU4pe3RoaXMubnVtYmVyVGlja3M9MitNYXRoLmNlaWwoKGFoLSh0aGlzLnRpY2tTcGFjaW5nLTEpKS90aGlzLnRpY2tTcGFjaW5nKTt2YXIgYUo9TWF0aC5jZWlsKE1hdGguYWJzKGE2KS9hdioodGhpcy5udW1iZXJUaWNrcy0xKSk7dmFyIGE5PXRoaXMubnVtYmVyVGlja3MtMS1hSjthbD1NYXRoLm1heChNYXRoLmFicyhhNi9hSiksTWF0aC5hYnMoYUkvYTkpKTthdD1NYXRoLnBvdygxMCxNYXRoLmFicyhNYXRoLmZsb29yKE1hdGgubG9nKGFsKS9NYXRoLkxOMTApKSk7dGhpcy50aWNrSW50ZXJ2YWw9TWF0aC5jZWlsKGFsL2F0KSphdDt0aGlzLm1heD10aGlzLnRpY2tJbnRlcnZhbCphOTt0aGlzLm1pbj0tdGhpcy50aWNrSW50ZXJ2YWwqYUp9ZWxzZXtpZih0aGlzLm51bWJlclRpY2tzPT1udWxsKXtpZih0aGlzLnRpY2tJbnRlcnZhbCl7dGhpcy5udW1iZXJUaWNrcz0zK01hdGguY2VpbChhdi90aGlzLnRpY2tJbnRlcnZhbCl9ZWxzZXt0aGlzLm51bWJlclRpY2tzPTIrTWF0aC5jZWlsKChhaC0odGhpcy50aWNrU3BhY2luZy0xKSkvdGhpcy50aWNrU3BhY2luZyl9fWlmKHRoaXMudGlja0ludGVydmFsPT1udWxsKXthbD1hdi8odGhpcy5udW1iZXJUaWNrcy0xKTtpZihhbDwxKXthdD1NYXRoLnBvdygxMCxNYXRoLmFicyhNYXRoLmZsb29yKE1hdGgubG9nKGFsKS9NYXRoLkxOMTApKSl9ZWxzZXthdD0xfXRoaXMudGlja0ludGVydmFsPU1hdGguY2VpbChhbCphdCp0aGlzLnBhZCkvYXR9ZWxzZXthdD0xL3RoaXMudGlja0ludGVydmFsfWFrPXRoaXMudGlja0ludGVydmFsKih0aGlzLm51bWJlclRpY2tzLTEpO2FyPShhay1hdikvMjtpZih0aGlzLm1pbj09bnVsbCl7dGhpcy5taW49TWF0aC5mbG9vcihhdCooYTYtYXIpKS9hdH1pZih0aGlzLm1heD09bnVsbCl7dGhpcy5tYXg9dGhpcy5taW4rYWt9fX12YXIgYUY9TC5qcXBsb3QuZ2V0U2lnbmlmaWNhbnRGaWd1cmVzKHRoaXMudGlja0ludGVydmFsKTt2YXIgYU07aWYoYUYuZGlnaXRzTGVmdD49YUYuc2lnbmlmaWNhbnREaWdpdHMpe2FNPSIlZCJ9ZWxzZXt2YXIgYXQ9TWF0aC5tYXgoMCw1LWFGLmRpZ2l0c0xlZnQpO2F0PU1hdGgubWluKGF0LGFGLmRpZ2l0c1JpZ2h0KTthTT0iJS4iK2F0KyJmIn10aGlzLl9hdXRvRm9ybWF0U3RyaW5nPWFNfWVsc2V7YVM9KHRoaXMubWluIT1udWxsKT90aGlzLm1pbjphNi1hdioodGhpcy5wYWRNaW4tMSk7YXk9KHRoaXMubWF4IT1udWxsKT90aGlzLm1heDphSSthdioodGhpcy5wYWRNYXgtMSk7YXY9YXktYVM7aWYodGhpcy5udW1iZXJUaWNrcz09bnVsbCl7aWYodGhpcy50aWNrSW50ZXJ2YWwhPW51bGwpe3RoaXMubnVtYmVyVGlja3M9TWF0aC5jZWlsKChheS1hUykvdGhpcy50aWNrSW50ZXJ2YWwpKzF9ZWxzZXtpZihhaD4xMDApe3RoaXMubnVtYmVyVGlja3M9cGFyc2VJbnQoMysoYWgtMTAwKS83NSwxMCl9ZWxzZXt0aGlzLm51bWJlclRpY2tzPTJ9fX1pZih0aGlzLnRpY2tJbnRlcnZhbD09bnVsbCl7dGhpcy50aWNrSW50ZXJ2YWw9YXYvKHRoaXMubnVtYmVyVGlja3MtMSl9aWYodGhpcy5tYXg9PW51bGwpe2F5PWFTK3RoaXMudGlja0ludGVydmFsKih0aGlzLm51bWJlclRpY2tzLTEpfWlmKHRoaXMubWluPT1udWxsKXthUz1heS10aGlzLnRpY2tJbnRlcnZhbCoodGhpcy5udW1iZXJUaWNrcy0xKX12YXIgYUY9TC5qcXBsb3QuZ2V0U2lnbmlmaWNhbnRGaWd1cmVzKHRoaXMudGlja0ludGVydmFsKTt2YXIgYU07aWYoYUYuZGlnaXRzTGVmdD49YUYuc2lnbmlmaWNhbnREaWdpdHMpe2FNPSIlZCJ9ZWxzZXt2YXIgYXQ9TWF0aC5tYXgoMCw1LWFGLmRpZ2l0c0xlZnQpO2F0PU1hdGgubWluKGF0LGFGLmRpZ2l0c1JpZ2h0KTthTT0iJS4iK2F0KyJmIn10aGlzLl9hdXRvRm9ybWF0U3RyaW5nPWFNO3RoaXMubWluPWFTO3RoaXMubWF4PWF5fWlmKHRoaXMucmVuZGVyZXIuY29uc3RydWN0b3I9PUwuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlciYmdGhpcy5fYXV0b0Zvcm1hdFN0cmluZz09IiIpe2F2PXRoaXMubWF4LXRoaXMubWluO3ZhciBhNz1uZXcgdGhpcy50aWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7dmFyIGFMPWE3LmZvcm1hdFN0cmluZ3x8TC5qcXBsb3QuY29uZmlnLmRlZmF1bHRUaWNrRm9ybWF0U3RyaW5nO3ZhciBhTD1hTC5tYXRjaChMLmpxcGxvdC5zcHJpbnRmLnJlZ2V4KVswXTt2YXIgYTM9MDtpZihhTCl7aWYoYUwuc2VhcmNoKC9bZkZlRWdHcFBdLyk+LTEpe3ZhciBhWT1hTC5tYXRjaCgvXCVcLihcZHswLH0pP1tlRWZGZ0dwUF0vKTtpZihhWSl7YTM9cGFyc2VJbnQoYVlbMV0sMTApfWVsc2V7YTM9Nn19ZWxzZXtpZihhTC5zZWFyY2goL1tkaV0vKT4tMSl7YTM9MH19dmFyIGFxPU1hdGgucG93KDEwLC1hMyk7aWYodGhpcy50aWNrSW50ZXJ2YWw8YXEpe2lmKGFXPT1udWxsJiZiYT09bnVsbCl7dGhpcy50aWNrSW50ZXJ2YWw9YXE7aWYoYTU9PW51bGwmJmFIPT1udWxsKXt0aGlzLm1pbj1NYXRoLmZsb29yKHRoaXMuX2RhdGFCb3VuZHMubWluL2FxKSphcTtpZih0aGlzLm1pbj09dGhpcy5fZGF0YUJvdW5kcy5taW4pe3RoaXMubWluPXRoaXMuX2RhdGFCb3VuZHMubWluLXRoaXMudGlja0ludGVydmFsfXRoaXMubWF4PU1hdGguY2VpbCh0aGlzLl9kYXRhQm91bmRzLm1heC9hcSkqYXE7aWYodGhpcy5tYXg9PXRoaXMuX2RhdGFCb3VuZHMubWF4KXt0aGlzLm1heD10aGlzLl9kYXRhQm91bmRzLm1heCt0aGlzLnRpY2tJbnRlcnZhbH12YXIgYVg9KHRoaXMubWF4LXRoaXMubWluKS90aGlzLnRpY2tJbnRlcnZhbDthWD1hWC50b0ZpeGVkKDExKTthWD1NYXRoLmNlaWwoYVgpO3RoaXMubnVtYmVyVGlja3M9YVgrMX1lbHNle2lmKGE1PT1udWxsKXt2YXIgYVg9KHRoaXMuX2RhdGFCb3VuZHMubWF4LXRoaXMubWluKS90aGlzLnRpY2tJbnRlcnZhbDthWD1hWC50b0ZpeGVkKDExKTt0aGlzLm51bWJlclRpY2tzPU1hdGguY2VpbChhWCkrMjt0aGlzLm1heD10aGlzLm1pbit0aGlzLnRpY2tJbnRlcnZhbCoodGhpcy5udW1iZXJUaWNrcy0xKX1lbHNle2lmKGFIPT1udWxsKXt2YXIgYVg9KHRoaXMubWF4LXRoaXMuX2RhdGFCb3VuZHMubWluKS90aGlzLnRpY2tJbnRlcnZhbDthWD1hWC50b0ZpeGVkKDExKTt0aGlzLm51bWJlclRpY2tzPU1hdGguY2VpbChhWCkrMjt0aGlzLm1pbj10aGlzLm1heC10aGlzLnRpY2tJbnRlcnZhbCoodGhpcy5udW1iZXJUaWNrcy0xKX1lbHNle3RoaXMubnVtYmVyVGlja3M9TWF0aC5jZWlsKChhNS1hSCkvdGhpcy50aWNrSW50ZXJ2YWwpKzE7dGhpcy5taW49TWF0aC5mbG9vcihhSCpNYXRoLnBvdygxMCxhMykpL01hdGgucG93KDEwLGEzKTt0aGlzLm1heD1NYXRoLmNlaWwoYTUqTWF0aC5wb3coMTAsYTMpKS9NYXRoLnBvdygxMCxhMyk7dGhpcy5udW1iZXJUaWNrcz1NYXRoLmNlaWwoKHRoaXMubWF4LXRoaXMubWluKS90aGlzLnRpY2tJbnRlcnZhbCkrMX19fX19fX19aWYodGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcmJnRoaXMuX2F1dG9Gb3JtYXRTdHJpbmchPSIiKXt0aGlzLnRpY2tPcHRpb25zPXRoaXMudGlja09wdGlvbnN8fHt9O3RoaXMudGlja09wdGlvbnMuZm9ybWF0U3RyaW5nPXRoaXMuX2F1dG9Gb3JtYXRTdHJpbmd9dmFyIGFVLGE4O2Zvcih2YXIgYTA9MDthMDx0aGlzLm51bWJlclRpY2tzO2EwKyspe2E0PXRoaXMubWluK2EwKnRoaXMudGlja0ludGVydmFsO2FVPW5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTthVS5zZXRUaWNrKGE0LHRoaXMubmFtZSk7dGhpcy5fdGlja3MucHVzaChhVSk7aWYoYTA8dGhpcy5udW1iZXJUaWNrcy0xKXtmb3IodmFyIGFaPTA7YVo8dGhpcy5taW5vclRpY2tzO2FaKyspe2E0Kz10aGlzLnRpY2tJbnRlcnZhbC8odGhpcy5taW5vclRpY2tzKzEpO2E4PUwuZXh0ZW5kKHRydWUse30sdGhpcy50aWNrT3B0aW9ucyx7bmFtZTp0aGlzLm5hbWUsdmFsdWU6YTQsbGFiZWw6IiIsaXNNaW5vclRpY2s6dHJ1ZX0pO2FVPW5ldyB0aGlzLnRpY2tSZW5kZXJlcihhOCk7dGhpcy5fdGlja3MucHVzaChhVSl9fWFVPW51bGx9fWlmKHRoaXMudGlja0luc2V0KXt0aGlzLm1pbj10aGlzLm1pbi10aGlzLnRpY2tJbnNldCp0aGlzLnRpY2tJbnRlcnZhbDt0aGlzLm1heD10aGlzLm1heCt0aGlzLnRpY2tJbnNldCp0aGlzLnRpY2tJbnRlcnZhbH1hVD1udWxsfTtMLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIucHJvdG90eXBlLnJlc2V0VGlja1ZhbHVlcz1mdW5jdGlvbihhail7aWYoTC5pc0FycmF5KGFqKSYmYWoubGVuZ3RoPT10aGlzLl90aWNrcy5sZW5ndGgpe3ZhciBhaTtmb3IodmFyIGFoPTA7YWg8YWoubGVuZ3RoO2FoKyspe2FpPXRoaXMuX3RpY2tzW2FoXTthaS52YWx1ZT1halthaF07YWkubGFiZWw9YWkuZm9ybWF0dGVyKGFpLmZvcm1hdFN0cmluZyxhalthaF0pO2FpLmxhYmVsPWFpLnByZWZpeCthaS5sYWJlbDthaS5fZWxlbS5odG1sKGFpLmxhYmVsKX1haT1udWxsO3RoaXMubWluPUwuanFwbG90LmFycmF5TWluKGFqKTt0aGlzLm1heD1MLmpxcGxvdC5hcnJheU1heChhaik7dGhpcy5wYWNrKCl9fTtMLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIucHJvdG90eXBlLnBhY2s9ZnVuY3Rpb24oYWosYWkpe2FqPWFqfHx7fTthaT1haXx8dGhpcy5fb2Zmc2V0czt2YXIgYXk9dGhpcy5fdGlja3M7dmFyIGF1PXRoaXMubWF4O3ZhciBhdD10aGlzLm1pbjt2YXIgYW89YWkubWF4O3ZhciBhbT1haS5taW47dmFyIGFxPSh0aGlzLl9sYWJlbD09bnVsbCk/ZmFsc2U6dGhpcy5fbGFiZWwuc2hvdztmb3IodmFyIGFyIGluIGFqKXt0aGlzLl9lbGVtLmNzcyhhcixhalthcl0pfXRoaXMuX29mZnNldHM9YWk7dmFyIGFrPWFvLWFtO3ZhciBhbD1hdS1hdDtpZih0aGlzLmJyZWFrUG9pbnRzKXthbD1hbC10aGlzLmJyZWFrUG9pbnRzWzFdK3RoaXMuYnJlYWtQb2ludHNbMF07dGhpcy5wMnU9ZnVuY3Rpb24oYUEpe3JldHVybihhQS1hbSkqYWwvYWsrYXR9O3RoaXMudTJwPWZ1bmN0aW9uKGFBKXtpZihhQT50aGlzLmJyZWFrUG9pbnRzWzBdJiZhQTx0aGlzLmJyZWFrUG9pbnRzWzFdKXthQT10aGlzLmJyZWFrUG9pbnRzWzBdfWlmKGFBPD10aGlzLmJyZWFrUG9pbnRzWzBdKXtyZXR1cm4oYUEtYXQpKmFrL2FsK2FtfWVsc2V7cmV0dXJuKGFBLXRoaXMuYnJlYWtQb2ludHNbMV0rdGhpcy5icmVha1BvaW50c1swXS1hdCkqYWsvYWwrYW19fTtpZih0aGlzLm5hbWUuY2hhckF0KDApPT0ieCIpe3RoaXMuc2VyaWVzX3UycD1mdW5jdGlvbihhQSl7aWYoYUE+dGhpcy5icmVha1BvaW50c1swXSYmYUE8dGhpcy5icmVha1BvaW50c1sxXSl7YUE9dGhpcy5icmVha1BvaW50c1swXX1pZihhQTw9dGhpcy5icmVha1BvaW50c1swXSl7cmV0dXJuKGFBLWF0KSphay9hbH1lbHNle3JldHVybihhQS10aGlzLmJyZWFrUG9pbnRzWzFdK3RoaXMuYnJlYWtQb2ludHNbMF0tYXQpKmFrL2FsfX07dGhpcy5zZXJpZXNfcDJ1PWZ1bmN0aW9uKGFBKXtyZXR1cm4gYUEqYWwvYWsrYXR9fWVsc2V7dGhpcy5zZXJpZXNfdTJwPWZ1bmN0aW9uKGFBKXtpZihhQT50aGlzLmJyZWFrUG9pbnRzWzBdJiZhQTx0aGlzLmJyZWFrUG9pbnRzWzFdKXthQT10aGlzLmJyZWFrUG9pbnRzWzBdfWlmKGFBPj10aGlzLmJyZWFrUG9pbnRzWzFdKXtyZXR1cm4oYUEtYXUpKmFrL2FsfWVsc2V7cmV0dXJuKGFBK3RoaXMuYnJlYWtQb2ludHNbMV0tdGhpcy5icmVha1BvaW50c1swXS1hdSkqYWsvYWx9fTt0aGlzLnNlcmllc19wMnU9ZnVuY3Rpb24oYUEpe3JldHVybiBhQSphbC9haythdX19fWVsc2V7dGhpcy5wMnU9ZnVuY3Rpb24oYUEpe3JldHVybihhQS1hbSkqYWwvYWsrYXR9O3RoaXMudTJwPWZ1bmN0aW9uKGFBKXtyZXR1cm4oYUEtYXQpKmFrL2FsK2FtfTtpZih0aGlzLm5hbWU9PSJ4YXhpcyJ8fHRoaXMubmFtZT09IngyYXhpcyIpe3RoaXMuc2VyaWVzX3UycD1mdW5jdGlvbihhQSl7cmV0dXJuKGFBLWF0KSphay9hbH07dGhpcy5zZXJpZXNfcDJ1PWZ1bmN0aW9uKGFBKXtyZXR1cm4gYUEqYWwvYWsrYXR9fWVsc2V7dGhpcy5zZXJpZXNfdTJwPWZ1bmN0aW9uKGFBKXtyZXR1cm4oYUEtYXUpKmFrL2FsfTt0aGlzLnNlcmllc19wMnU9ZnVuY3Rpb24oYUEpe3JldHVybiBhQSphbC9haythdX19fWlmKHRoaXMuc2hvdyl7aWYodGhpcy5uYW1lPT0ieGF4aXMifHx0aGlzLm5hbWU9PSJ4MmF4aXMiKXtmb3IodmFyIGF2PTA7YXY8YXkubGVuZ3RoO2F2Kyspe3ZhciBhcD1heVthdl07aWYoYXAuc2hvdyYmYXAuc2hvd0xhYmVsKXt2YXIgYWg7aWYoYXAuY29uc3RydWN0b3I9PUwuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXImJmFwLmFuZ2xlKXt2YXIgYXg9KHRoaXMubmFtZT09InhheGlzIik/MTotMTtzd2l0Y2goYXAubGFiZWxQb3NpdGlvbil7Y2FzZSJhdXRvIjppZihheCphcC5hbmdsZTwwKXthaD0tYXAuZ2V0V2lkdGgoKSthcC5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbigtYXAuX3RleHRSZW5kZXJlci5hbmdsZSkvMn1lbHNle2FoPS1hcC5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbihhcC5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWJyZWFrO2Nhc2UiZW5kIjphaD0tYXAuZ2V0V2lkdGgoKSthcC5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbigtYXAuX3RleHRSZW5kZXJlci5hbmdsZSkvMjticmVhaztjYXNlInN0YXJ0IjphaD0tYXAuX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5zaW4oYXAuX3RleHRSZW5kZXJlci5hbmdsZSkvMjticmVhaztjYXNlIm1pZGRsZSI6YWg9LWFwLmdldFdpZHRoKCkvMithcC5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbigtYXAuX3RleHRSZW5kZXJlci5hbmdsZSkvMjticmVhaztkZWZhdWx0OmFoPS1hcC5nZXRXaWR0aCgpLzIrYXAuX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5zaW4oLWFwLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzI7YnJlYWt9fWVsc2V7YWg9LWFwLmdldFdpZHRoKCkvMn12YXIgYXo9dGhpcy51MnAoYXAudmFsdWUpK2FoKyJweCI7YXAuX2VsZW0uY3NzKCJsZWZ0Iixheik7YXAucGFjaygpfX1pZihhcSl7dmFyIGFuPXRoaXMuX2xhYmVsLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSk7dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJsZWZ0IixhbSthay8yLWFuLzIrInB4Iik7aWYodGhpcy5uYW1lPT0ieGF4aXMiKXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoImJvdHRvbSIsIjBweCIpfWVsc2V7dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJ0b3AiLCIwcHgiKX10aGlzLl9sYWJlbC5wYWNrKCl9fWVsc2V7Zm9yKHZhciBhdj0wO2F2PGF5Lmxlbmd0aDthdisrKXt2YXIgYXA9YXlbYXZdO2lmKGFwLnNob3cmJmFwLnNob3dMYWJlbCl7dmFyIGFoO2lmKGFwLmNvbnN0cnVjdG9yPT1MLmpxcGxvdC5DYW52YXNBeGlzVGlja1JlbmRlcmVyJiZhcC5hbmdsZSl7dmFyIGF4PSh0aGlzLm5hbWU9PSJ5YXhpcyIpPzE6LTE7c3dpdGNoKGFwLmxhYmVsUG9zaXRpb24pe2Nhc2UiYXV0byI6Y2FzZSJlbmQiOmlmKGF4KmFwLmFuZ2xlPDApe2FoPS1hcC5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLmNvcygtYXAuX3RleHRSZW5kZXJlci5hbmdsZSkvMn1lbHNle2FoPS1hcC5nZXRIZWlnaHQoKSthcC5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLmNvcyhhcC5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWJyZWFrO2Nhc2Uic3RhcnQiOmlmKGFwLmFuZ2xlPjApe2FoPS1hcC5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLmNvcygtYXAuX3RleHRSZW5kZXJlci5hbmdsZSkvMn1lbHNle2FoPS1hcC5nZXRIZWlnaHQoKSthcC5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLmNvcyhhcC5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWJyZWFrO2Nhc2UibWlkZGxlIjphaD0tYXAuZ2V0SGVpZ2h0KCkvMjticmVhaztkZWZhdWx0OmFoPS1hcC5nZXRIZWlnaHQoKS8yO2JyZWFrfX1lbHNle2FoPS1hcC5nZXRIZWlnaHQoKS8yfXZhciBhej10aGlzLnUycChhcC52YWx1ZSkrYWgrInB4IjthcC5fZWxlbS5jc3MoInRvcCIsYXopO2FwLnBhY2soKX19aWYoYXEpe3ZhciBhdz10aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKTt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoInRvcCIsYW8tYWsvMi1hdy8yKyJweCIpO2lmKHRoaXMubmFtZT09InlheGlzIil7dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJsZWZ0IiwiMHB4Iil9ZWxzZXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoInJpZ2h0IiwiMHB4Iil9dGhpcy5fbGFiZWwucGFjaygpfX19YXk9bnVsbH07ZnVuY3Rpb24gaShhaSl7dmFyIGFoO2FpPU1hdGguYWJzKGFpKTtpZihhaT49MTApe2FoPSIlZCJ9ZWxzZXtpZihhaT4xKXtpZihhaT09PXBhcnNlSW50KGFpLDEwKSl7YWg9IiVkIn1lbHNle2FoPSIlLjFmIn19ZWxzZXt2YXIgYWo9LU1hdGguZmxvb3IoTWF0aC5sb2coYWkpL01hdGguTE4xMCk7YWg9IiUuIithaisiZiJ9fXJldHVybiBhaH12YXIgYj1bMC4xLDAuMiwwLjMsMC40LDAuNSwwLjgsMSwyLDMsNCw1XTt2YXIgYz1mdW5jdGlvbihhaSl7dmFyIGFoPWIuaW5kZXhPZihhaSk7aWYoYWg+MCl7cmV0dXJuIGJbYWgtMV19ZWxzZXtyZXR1cm4gYltiLmxlbmd0aC0xXS8xMDB9fTt2YXIgaz1mdW5jdGlvbihhaSl7dmFyIGFoPWIuaW5kZXhPZihhaSk7aWYoYWg8Yi5sZW5ndGgtMSl7cmV0dXJuIGJbYWgrMV19ZWxzZXtyZXR1cm4gYlswXSoxMDB9fTtmdW5jdGlvbiBkKGFsLGF1LGF0KXt2YXIgYXE9TWF0aC5mbG9vcihhdC8yKTt2YXIgYWk9TWF0aC5jZWlsKGF0KjEuNSk7dmFyIGFrPU51bWJlci5NQVhfVkFMVUU7dmFyIGFoPShhdS1hbCk7dmFyIGF4O3ZhciBhcDt2YXIgYXI7dmFyIGF5PUwuanFwbG90LmdldFNpZ25pZmljYW50RmlndXJlczt2YXIgYXc7dmFyIGFuO3ZhciBhbzt2YXIgYXY7Zm9yKHZhciBhbT0wLGFqPWFpLWFxKzE7YW08YWo7YW0rKyl7YW89YXErYW07YXg9YWgvKGFvLTEpO2FwPWF5KGF4KTtheD1NYXRoLmFicyhhdC1hbykrYXAuZGlnaXRzUmlnaHQ7aWYoYXg8YWspe2FrPWF4O2FyPWFvO2F2PWFwLmRpZ2l0c1JpZ2h0fWVsc2V7aWYoYXg9PT1hayl7aWYoYXAuZGlnaXRzUmlnaHQ8YXYpe2FyPWFvO2F2PWFwLmRpZ2l0c1JpZ2h0fX19fWF3PU1hdGgubWF4KGF2LE1hdGgubWF4KGF5KGFsKS5kaWdpdHNSaWdodCxheShhdSkuZGlnaXRzUmlnaHQpKTtpZihhdz09PTApe2FuPSIlZCJ9ZWxzZXthbj0iJS4iK2F3KyJmIn1heD1haC8oYXItMSk7cmV0dXJuW2FsLGF1LGFyLGFuLGF4XX1mdW5jdGlvbiBXKGFpLGFsKXthbD1hbHx8Nzt2YXIgYWs9YWkvKGFsLTEpO3ZhciBhaj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGFrKS9NYXRoLkxOMTApKTt2YXIgYW09YWsvYWo7dmFyIGFoO2lmKGFqPDEpe2lmKGFtPjUpe2FoPTEwKmFqfWVsc2V7aWYoYW0+Mil7YWg9NSphan1lbHNle2lmKGFtPjEpe2FoPTIqYWp9ZWxzZXthaD1han19fX1lbHNle2lmKGFtPjUpe2FoPTEwKmFqfWVsc2V7aWYoYW0+NCl7YWg9NSphan1lbHNle2lmKGFtPjMpe2FoPTQqYWp9ZWxzZXtpZihhbT4yKXthaD0zKmFqfWVsc2V7aWYoYW0+MSl7YWg9Miphan1lbHNle2FoPWFqfX19fX19cmV0dXJuIGFofWZ1bmN0aW9uIFEoYWksYWgpe2FoPWFofHwxO3ZhciBhaz1NYXRoLmZsb29yKE1hdGgubG9nKGFpKS9NYXRoLkxOMTApO3ZhciBhbT1NYXRoLnBvdygxMCxhayk7dmFyIGFsPWFpL2FtO3ZhciBhajthbD1hbC9haDtpZihhbDw9MC4zOCl7YWo9MC4xfWVsc2V7aWYoYWw8PTEuNil7YWo9MC4yfWVsc2V7aWYoYWw8PTQpe2FqPTAuNX1lbHNle2lmKGFsPD04KXthaj0xfWVsc2V7aWYoYWw8PTE2KXthaj0yfWVsc2V7YWo9NX19fX19cmV0dXJuIGFqKmFtfWZ1bmN0aW9uIHgoYWosYWkpe3ZhciBhbD1NYXRoLmZsb29yKE1hdGgubG9nKGFqKS9NYXRoLkxOMTApO3ZhciBhbj1NYXRoLnBvdygxMCxhbCk7dmFyIGFtPWFqL2FuO3ZhciBhaDt2YXIgYWs7YW09YW0vYWk7aWYoYW08PTAuMzgpe2FrPTAuMX1lbHNle2lmKGFtPD0xLjYpe2FrPTAuMn1lbHNle2lmKGFtPD00KXthaz0wLjV9ZWxzZXtpZihhbTw9OCl7YWs9MX1lbHNle2lmKGFtPD0xNil7YWs9Mn1lbHNle2FrPTV9fX19fWFoPWFrKmFuO3JldHVyblthaCxhayxhbl19TC5qcXBsb3QuTGluZWFyVGlja0dlbmVyYXRvcj1mdW5jdGlvbihhbixhcSxhaixhayxhbyxhcil7YW89KGFvPT09bnVsbCk/ZmFsc2U6YW87YXI9KGFyPT09bnVsbHx8YW8pP2ZhbHNlOmFyO2lmKGFuPT09YXEpe2FxPShhcSk/MDoxfWFqPWFqfHwxO2lmKGFxPGFuKXt2YXIgYXQ9YXE7YXE9YW47YW49YXR9dmFyIGFpPVtdO3ZhciBhdz1RKGFxLWFuLGFqKTt2YXIgYXY9TC5qcXBsb3QuZ2V0U2lnbmlmaWNhbnRGaWd1cmVzO2lmKGFrPT1udWxsKXtpZighYW8mJiFhcil7YWlbMF09TWF0aC5mbG9vcihhbi9hdykqYXc7YWlbMV09TWF0aC5jZWlsKGFxL2F3KSphdzthaVsyXT1NYXRoLnJvdW5kKChhaVsxXS1haVswXSkvYXcrMSk7YWlbM109aShhdyk7YWlbNF09YXd9ZWxzZXtpZihhbyl7YWlbMF09YW47YWlbMl09TWF0aC5jZWlsKChhcS1hbikvYXcrMSk7YWlbMV09YW4rKGFpWzJdLTEpKmF3O3ZhciBhdT1hdihhbikuZGlnaXRzUmlnaHQ7dmFyIGFwPWF2KGF3KS5kaWdpdHNSaWdodDtpZihhdTxhcCl7YWlbM109aShhdyl9ZWxzZXthaVszXT0iJS4iK2F1KyJmIn1haVs0XT1hd31lbHNle2lmKGFyKXthaVsxXT1hcTthaVsyXT1NYXRoLmNlaWwoKGFxLWFuKS9hdysxKTthaVswXT1hcS0oYWlbMl0tMSkqYXc7dmFyIGFsPWF2KGFxKS5kaWdpdHNSaWdodDt2YXIgYXA9YXYoYXcpLmRpZ2l0c1JpZ2h0O2lmKGFsPGFwKXthaVszXT1pKGF3KX1lbHNle2FpWzNdPSIlLiIrYWwrImYifWFpWzRdPWF3fX19fWVsc2V7dmFyIGFtPVtdO2FtWzBdPU1hdGguZmxvb3IoYW4vYXcpKmF3O2FtWzFdPU1hdGguY2VpbChhcS9hdykqYXc7YW1bMl09TWF0aC5yb3VuZCgoYW1bMV0tYW1bMF0pL2F3KzEpO2FtWzNdPWkoYXcpO2FtWzRdPWF3O2lmKGFtWzJdPT09YWspe2FpPWFtfWVsc2V7dmFyIGFoPVcoYW1bMV0tYW1bMF0sYWspO2FpWzBdPWFtWzBdO2FpWzJdPWFrO2FpWzRdPWFoO2FpWzNdPWkoYWgpO2FpWzFdPWFpWzBdKyhhaVsyXS0xKSphaVs0XX19cmV0dXJuIGFpfTtMLmpxcGxvdC5MaW5lYXJUaWNrR2VuZXJhdG9yLmJlc3RMaW5lYXJJbnRlcnZhbD1RO0wuanFwbG90LkxpbmVhclRpY2tHZW5lcmF0b3IuYmVzdEludGVydmFsPVc7TC5qcXBsb3QuTGluZWFyVGlja0dlbmVyYXRvci5iZXN0TGluZWFyQ29tcG9uZW50cz14O0wuanFwbG90LkxpbmVhclRpY2tHZW5lcmF0b3IuYmVzdENvbnN0cmFpbmVkSW50ZXJ2YWw9ZDtMLmpxcGxvdC5NYXJrZXJSZW5kZXJlcj1mdW5jdGlvbihhaCl7dGhpcy5zaG93PXRydWU7dGhpcy5zdHlsZT0iZmlsbGVkQ2lyY2xlIjt0aGlzLmxpbmVXaWR0aD0yO3RoaXMuc2l6ZT05O3RoaXMuY29sb3I9IiM2NjY2NjYiO3RoaXMuc2hhZG93PXRydWU7dGhpcy5zaGFkb3dBbmdsZT00NTt0aGlzLnNoYWRvd09mZnNldD0xO3RoaXMuc2hhZG93RGVwdGg9Mzt0aGlzLnNoYWRvd0FscGhhPSIwLjA3Ijt0aGlzLnNoYWRvd1JlbmRlcmVyPW5ldyBMLmpxcGxvdC5TaGFkb3dSZW5kZXJlcigpO3RoaXMuc2hhcGVSZW5kZXJlcj1uZXcgTC5qcXBsb3QuU2hhcGVSZW5kZXJlcigpO0wuZXh0ZW5kKHRydWUsdGhpcyxhaCl9O0wuanFwbG90Lk1hcmtlclJlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGFoKXtMLmV4dGVuZCh0cnVlLHRoaXMsYWgpO3ZhciBhaj17YW5nbGU6dGhpcy5zaGFkb3dBbmdsZSxvZmZzZXQ6dGhpcy5zaGFkb3dPZmZzZXQsYWxwaGE6dGhpcy5zaGFkb3dBbHBoYSxsaW5lV2lkdGg6dGhpcy5saW5lV2lkdGgsZGVwdGg6dGhpcy5zaGFkb3dEZXB0aCxjbG9zZVBhdGg6dHJ1ZX07aWYodGhpcy5zdHlsZS5pbmRleE9mKCJmaWxsZWQiKSE9LTEpe2FqLmZpbGw9dHJ1ZX1pZih0aGlzLnN0eWxlLmluZGV4T2YoImlyY2xlIikhPS0xKXthai5pc2FyYz10cnVlO2FqLmNsb3NlUGF0aD1mYWxzZX10aGlzLnNoYWRvd1JlbmRlcmVyLmluaXQoYWopO3ZhciBhaT17ZmlsbDpmYWxzZSxpc2FyYzpmYWxzZSxzdHJva2VTdHlsZTp0aGlzLmNvbG9yLGZpbGxTdHlsZTp0aGlzLmNvbG9yLGxpbmVXaWR0aDp0aGlzLmxpbmVXaWR0aCxjbG9zZVBhdGg6dHJ1ZX07aWYodGhpcy5zdHlsZS5pbmRleE9mKCJmaWxsZWQiKSE9LTEpe2FpLmZpbGw9dHJ1ZX1pZih0aGlzLnN0eWxlLmluZGV4T2YoImlyY2xlIikhPS0xKXthaS5pc2FyYz10cnVlO2FpLmNsb3NlUGF0aD1mYWxzZX10aGlzLnNoYXBlUmVuZGVyZXIuaW5pdChhaSl9O0wuanFwbG90Lk1hcmtlclJlbmRlcmVyLnByb3RvdHlwZS5kcmF3RGlhbW9uZD1mdW5jdGlvbihhaixhaSxhbSxhbCxhbyl7dmFyIGFoPTEuMjt2YXIgYXA9dGhpcy5zaXplLzIvYWg7dmFyIGFuPXRoaXMuc2l6ZS8yKmFoO3ZhciBhaz1bW2FqLWFwLGFpXSxbYWosYWkrYW5dLFthaithcCxhaV0sW2FqLGFpLWFuXV07aWYodGhpcy5zaGFkb3cpe3RoaXMuc2hhZG93UmVuZGVyZXIuZHJhdyhhbSxhayl9dGhpcy5zaGFwZVJlbmRlcmVyLmRyYXcoYW0sYWssYW8pfTtMLmpxcGxvdC5NYXJrZXJSZW5kZXJlci5wcm90b3R5cGUuZHJhd1BsdXM9ZnVuY3Rpb24oYWssYWosYW4sYW0sYXEpe3ZhciBhaT0xO3ZhciBhcj10aGlzLnNpemUvMiphaTt2YXIgYW89dGhpcy5zaXplLzIqYWk7dmFyIGFwPVtbYWssYWotYW9dLFthayxhaithb11dO3ZhciBhbD1bW2FrK2FyLGFqXSxbYWstYXIsYWpdXTt2YXIgYWg9TC5leHRlbmQodHJ1ZSx7fSx0aGlzLm9wdGlvbnMse2Nsb3NlUGF0aDpmYWxzZX0pO2lmKHRoaXMuc2hhZG93KXt0aGlzLnNoYWRvd1JlbmRlcmVyLmRyYXcoYW4sYXAse2Nsb3NlUGF0aDpmYWxzZX0pO3RoaXMuc2hhZG93UmVuZGVyZXIuZHJhdyhhbixhbCx7Y2xvc2VQYXRoOmZhbHNlfSl9dGhpcy5zaGFwZVJlbmRlcmVyLmRyYXcoYW4sYXAsYWgpO3RoaXMuc2hhcGVSZW5kZXJlci5kcmF3KGFuLGFsLGFoKX07TC5qcXBsb3QuTWFya2VyUmVuZGVyZXIucHJvdG90eXBlLmRyYXdYPWZ1bmN0aW9uKGFrLGFqLGFuLGFtLGFxKXt2YXIgYWk9MTt2YXIgYXI9dGhpcy5zaXplLzIqYWk7dmFyIGFvPXRoaXMuc2l6ZS8yKmFpO3ZhciBhaD1MLmV4dGVuZCh0cnVlLHt9LHRoaXMub3B0aW9ucyx7Y2xvc2VQYXRoOmZhbHNlfSk7dmFyIGFwPVtbYWstYXIsYWotYW9dLFthaythcixhaithb11dO3ZhciBhbD1bW2FrLWFyLGFqK2FvXSxbYWsrYXIsYWotYW9dXTtpZih0aGlzLnNoYWRvdyl7dGhpcy5zaGFkb3dSZW5kZXJlci5kcmF3KGFuLGFwLHtjbG9zZVBhdGg6ZmFsc2V9KTt0aGlzLnNoYWRvd1JlbmRlcmVyLmRyYXcoYW4sYWwse2Nsb3NlUGF0aDpmYWxzZX0pfXRoaXMuc2hhcGVSZW5kZXJlci5kcmF3KGFuLGFwLGFoKTt0aGlzLnNoYXBlUmVuZGVyZXIuZHJhdyhhbixhbCxhaCl9O0wuanFwbG90Lk1hcmtlclJlbmRlcmVyLnByb3RvdHlwZS5kcmF3RGFzaD1mdW5jdGlvbihhaixhaSxhbSxhbCxhbyl7dmFyIGFoPTE7dmFyIGFwPXRoaXMuc2l6ZS8yKmFoO3ZhciBhbj10aGlzLnNpemUvMiphaDt2YXIgYWs9W1thai1hcCxhaV0sW2FqK2FwLGFpXV07aWYodGhpcy5zaGFkb3cpe3RoaXMuc2hhZG93UmVuZGVyZXIuZHJhdyhhbSxhayl9dGhpcy5zaGFwZVJlbmRlcmVyLmRyYXcoYW0sYWssYW8pfTtMLmpxcGxvdC5NYXJrZXJSZW5kZXJlci5wcm90b3R5cGUuZHJhd0xpbmU9ZnVuY3Rpb24oYW0sYWwsYWgsYWssYWkpe3ZhciBhaj1bYW0sYWxdO2lmKHRoaXMuc2hhZG93KXt0aGlzLnNoYWRvd1JlbmRlcmVyLmRyYXcoYWgsYWopfXRoaXMuc2hhcGVSZW5kZXJlci5kcmF3KGFoLGFqLGFpKX07TC5qcXBsb3QuTWFya2VyUmVuZGVyZXIucHJvdG90eXBlLmRyYXdTcXVhcmU9ZnVuY3Rpb24oYWosYWksYW0sYWwsYW8pe3ZhciBhaD0xO3ZhciBhcD10aGlzLnNpemUvMi9haDt2YXIgYW49dGhpcy5zaXplLzIqYWg7dmFyIGFrPVtbYWotYXAsYWktYW5dLFthai1hcCxhaSthbl0sW2FqK2FwLGFpK2FuXSxbYWorYXAsYWktYW5dXTtpZih0aGlzLnNoYWRvdyl7dGhpcy5zaGFkb3dSZW5kZXJlci5kcmF3KGFtLGFrKX10aGlzLnNoYXBlUmVuZGVyZXIuZHJhdyhhbSxhayxhbyl9O0wuanFwbG90Lk1hcmtlclJlbmRlcmVyLnByb3RvdHlwZS5kcmF3Q2lyY2xlPWZ1bmN0aW9uKGFpLGFvLGFrLGFuLGFsKXt2YXIgYWg9dGhpcy5zaXplLzI7dmFyIGFqPTIqTWF0aC5QSTt2YXIgYW09W2FpLGFvLGFoLDAsYWosdHJ1ZV07aWYodGhpcy5zaGFkb3cpe3RoaXMuc2hhZG93UmVuZGVyZXIuZHJhdyhhayxhbSl9dGhpcy5zaGFwZVJlbmRlcmVyLmRyYXcoYWssYW0sYWwpfTtMLmpxcGxvdC5NYXJrZXJSZW5kZXJlci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhaCxhayxhaSxhail7YWo9YWp8fHt9O2lmKGFqLnNob3c9PW51bGx8fGFqLnNob3chPWZhbHNlKXtpZihhai5jb2xvciYmIWFqLmZpbGxTdHlsZSl7YWouZmlsbFN0eWxlPWFqLmNvbG9yfWlmKGFqLmNvbG9yJiYhYWouc3Ryb2tlU3R5bGUpe2FqLnN0cm9rZVN0eWxlPWFqLmNvbG9yfXN3aXRjaCh0aGlzLnN0eWxlKXtjYXNlImRpYW1vbmQiOnRoaXMuZHJhd0RpYW1vbmQoYWgsYWssYWksZmFsc2UsYWopO2JyZWFrO2Nhc2UiZmlsbGVkRGlhbW9uZCI6dGhpcy5kcmF3RGlhbW9uZChhaCxhayxhaSx0cnVlLGFqKTticmVhaztjYXNlImNpcmNsZSI6dGhpcy5kcmF3Q2lyY2xlKGFoLGFrLGFpLGZhbHNlLGFqKTticmVhaztjYXNlImZpbGxlZENpcmNsZSI6dGhpcy5kcmF3Q2lyY2xlKGFoLGFrLGFpLHRydWUsYWopO2JyZWFrO2Nhc2Uic3F1YXJlIjp0aGlzLmRyYXdTcXVhcmUoYWgsYWssYWksZmFsc2UsYWopO2JyZWFrO2Nhc2UiZmlsbGVkU3F1YXJlIjp0aGlzLmRyYXdTcXVhcmUoYWgsYWssYWksdHJ1ZSxhaik7YnJlYWs7Y2FzZSJ4Ijp0aGlzLmRyYXdYKGFoLGFrLGFpLHRydWUsYWopO2JyZWFrO2Nhc2UicGx1cyI6dGhpcy5kcmF3UGx1cyhhaCxhayxhaSx0cnVlLGFqKTticmVhaztjYXNlImRhc2giOnRoaXMuZHJhd0Rhc2goYWgsYWssYWksdHJ1ZSxhaik7YnJlYWs7Y2FzZSJsaW5lIjp0aGlzLmRyYXdMaW5lKGFoLGFrLGFpLGZhbHNlLGFqKTticmVhaztkZWZhdWx0OnRoaXMuZHJhd0RpYW1vbmQoYWgsYWssYWksZmFsc2UsYWopO2JyZWFrfX19O0wuanFwbG90LlNoYWRvd1JlbmRlcmVyPWZ1bmN0aW9uKGFoKXt0aGlzLmFuZ2xlPTQ1O3RoaXMub2Zmc2V0PTE7dGhpcy5hbHBoYT0wLjA3O3RoaXMubGluZVdpZHRoPTEuNTt0aGlzLmxpbmVKb2luPSJtaXRlciI7dGhpcy5saW5lQ2FwPSJyb3VuZCI7dGhpcy5jbG9zZVBhdGg9ZmFsc2U7dGhpcy5maWxsPWZhbHNlO3RoaXMuZGVwdGg9Mzt0aGlzLnN0cm9rZVN0eWxlPSJyZ2JhKDAsMCwwLDAuMSkiO3RoaXMuaXNhcmM9ZmFsc2U7TC5leHRlbmQodHJ1ZSx0aGlzLGFoKX07TC5qcXBsb3QuU2hhZG93UmVuZGVyZXIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYWgpe0wuZXh0ZW5kKHRydWUsdGhpcyxhaCl9O0wuanFwbG90LlNoYWRvd1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGF2LGF0LGF4KXthdi5zYXZlKCk7dmFyIGFoPShheCE9bnVsbCk/YXg6e307dmFyIGF1PShhaC5maWxsIT1udWxsKT9haC5maWxsOnRoaXMuZmlsbDt2YXIgYXA9KGFoLmZpbGxSZWN0IT1udWxsKT9haC5maWxsUmVjdDp0aGlzLmZpbGxSZWN0O3ZhciBhbz0oYWguY2xvc2VQYXRoIT1udWxsKT9haC5jbG9zZVBhdGg6dGhpcy5jbG9zZVBhdGg7dmFyIGFsPShhaC5vZmZzZXQhPW51bGwpP2FoLm9mZnNldDp0aGlzLm9mZnNldDt2YXIgYWo9KGFoLmFscGhhIT1udWxsKT9haC5hbHBoYTp0aGlzLmFscGhhO3ZhciBhbj0oYWguZGVwdGghPW51bGwpP2FoLmRlcHRoOnRoaXMuZGVwdGg7dmFyIGF3PShhaC5pc2FyYyE9bnVsbCk/YWguaXNhcmM6dGhpcy5pc2FyYzt2YXIgYXE9KGFoLmxpbmVQYXR0ZXJuIT1udWxsKT9haC5saW5lUGF0dGVybjp0aGlzLmxpbmVQYXR0ZXJuO2F2LmxpbmVXaWR0aD0oYWgubGluZVdpZHRoIT1udWxsKT9haC5saW5lV2lkdGg6dGhpcy5saW5lV2lkdGg7YXYubGluZUpvaW49KGFoLmxpbmVKb2luIT1udWxsKT9haC5saW5lSm9pbjp0aGlzLmxpbmVKb2luO2F2LmxpbmVDYXA9KGFoLmxpbmVDYXAhPW51bGwpP2FoLmxpbmVDYXA6dGhpcy5saW5lQ2FwO2F2LnN0cm9rZVN0eWxlPWFoLnN0cm9rZVN0eWxlfHx0aGlzLnN0cm9rZVN0eWxlfHwicmdiYSgwLDAsMCwiK2FqKyIpIjthdi5maWxsU3R5bGU9YWguZmlsbFN0eWxlfHx0aGlzLmZpbGxTdHlsZXx8InJnYmEoMCwwLDAsIithaisiKSI7Zm9yKHZhciBhaz0wO2FrPGFuO2FrKyspe3ZhciBhcj1MLmpxcGxvdC5MaW5lUGF0dGVybihhdixhcSk7YXYudHJhbnNsYXRlKE1hdGguY29zKHRoaXMuYW5nbGUqTWF0aC5QSS8xODApKmFsLE1hdGguc2luKHRoaXMuYW5nbGUqTWF0aC5QSS8xODApKmFsKTthci5iZWdpblBhdGgoKTtpZihhdyl7YXYuYXJjKGF0WzBdLGF0WzFdLGF0WzJdLGF0WzNdLGF0WzRdLHRydWUpfWVsc2V7aWYoYXApe2lmKGFwKXthdi5maWxsUmVjdChhdFswXSxhdFsxXSxhdFsyXSxhdFszXSl9fWVsc2V7aWYoYXQmJmF0Lmxlbmd0aCl7dmFyIGFpPXRydWU7Zm9yKHZhciBhbT0wO2FtPGF0Lmxlbmd0aDthbSsrKXtpZihhdFthbV1bMF0hPW51bGwmJmF0W2FtXVsxXSE9bnVsbCl7aWYoYWkpe2FyLm1vdmVUbyhhdFthbV1bMF0sYXRbYW1dWzFdKTthaT1mYWxzZX1lbHNle2FyLmxpbmVUbyhhdFthbV1bMF0sYXRbYW1dWzFdKX19ZWxzZXthaT10cnVlfX19fX1pZihhbyl7YXIuY2xvc2VQYXRoKCl9aWYoYXUpe2F2LmZpbGwoKX1lbHNle2F2LnN0cm9rZSgpfX1hdi5yZXN0b3JlKCl9O0wuanFwbG90LlNoYXBlUmVuZGVyZXI9ZnVuY3Rpb24oYWgpe3RoaXMubGluZVdpZHRoPTEuNTt0aGlzLmxpbmVQYXR0ZXJuPSJzb2xpZCI7dGhpcy5saW5lSm9pbj0ibWl0ZXIiO3RoaXMubGluZUNhcD0icm91bmQiO3RoaXMuY2xvc2VQYXRoPWZhbHNlO3RoaXMuZmlsbD1mYWxzZTt0aGlzLmlzYXJjPWZhbHNlO3RoaXMuZmlsbFJlY3Q9ZmFsc2U7dGhpcy5zdHJva2VSZWN0PWZhbHNlO3RoaXMuY2xlYXJSZWN0PWZhbHNlO3RoaXMuc3Ryb2tlU3R5bGU9IiM5OTk5OTkiO3RoaXMuZmlsbFN0eWxlPSIjOTk5OTk5IjtMLmV4dGVuZCh0cnVlLHRoaXMsYWgpfTtMLmpxcGxvdC5TaGFwZVJlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGFoKXtMLmV4dGVuZCh0cnVlLHRoaXMsYWgpfTtMLmpxcGxvdC5TaGFwZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGF0LGFxLGF2KXthdC5zYXZlKCk7dmFyIGFoPShhdiE9bnVsbCk/YXY6e307dmFyIGFyPShhaC5maWxsIT1udWxsKT9haC5maWxsOnRoaXMuZmlsbDt2YXIgYW09KGFoLmNsb3NlUGF0aCE9bnVsbCk/YWguY2xvc2VQYXRoOnRoaXMuY2xvc2VQYXRoO3ZhciBhbj0oYWguZmlsbFJlY3QhPW51bGwpP2FoLmZpbGxSZWN0OnRoaXMuZmlsbFJlY3Q7dmFyIGFrPShhaC5zdHJva2VSZWN0IT1udWxsKT9haC5zdHJva2VSZWN0OnRoaXMuc3Ryb2tlUmVjdDt2YXIgYWk9KGFoLmNsZWFyUmVjdCE9bnVsbCk/YWguY2xlYXJSZWN0OnRoaXMuY2xlYXJSZWN0O3ZhciBhdT0oYWguaXNhcmMhPW51bGwpP2FoLmlzYXJjOnRoaXMuaXNhcmM7dmFyIGFvPShhaC5saW5lUGF0dGVybiE9bnVsbCk/YWgubGluZVBhdHRlcm46dGhpcy5saW5lUGF0dGVybjt2YXIgYXA9TC5qcXBsb3QuTGluZVBhdHRlcm4oYXQsYW8pO2F0LmxpbmVXaWR0aD1haC5saW5lV2lkdGh8fHRoaXMubGluZVdpZHRoO2F0LmxpbmVKb2luPWFoLmxpbmVKb2lufHx0aGlzLmxpbmVKb2luO2F0LmxpbmVDYXA9YWgubGluZUNhcHx8dGhpcy5saW5lQ2FwO2F0LnN0cm9rZVN0eWxlPShhaC5zdHJva2VTdHlsZXx8YWguY29sb3IpfHx0aGlzLnN0cm9rZVN0eWxlO2F0LmZpbGxTdHlsZT1haC5maWxsU3R5bGV8fHRoaXMuZmlsbFN0eWxlO2F0LmJlZ2luUGF0aCgpO2lmKGF1KXthdC5hcmMoYXFbMF0sYXFbMV0sYXFbMl0sYXFbM10sYXFbNF0sdHJ1ZSk7aWYoYW0pe2F0LmNsb3NlUGF0aCgpfWlmKGFyKXthdC5maWxsKCl9ZWxzZXthdC5zdHJva2UoKX1hdC5yZXN0b3JlKCk7cmV0dXJufWVsc2V7aWYoYWkpe2F0LmNsZWFyUmVjdChhcVswXSxhcVsxXSxhcVsyXSxhcVszXSk7YXQucmVzdG9yZSgpO3JldHVybn1lbHNle2lmKGFufHxhayl7aWYoYW4pe2F0LmZpbGxSZWN0KGFxWzBdLGFxWzFdLGFxWzJdLGFxWzNdKX1pZihhayl7YXQuc3Ryb2tlUmVjdChhcVswXSxhcVsxXSxhcVsyXSxhcVszXSk7YXQucmVzdG9yZSgpO3JldHVybn19ZWxzZXtpZihhcSYmYXEubGVuZ3RoKXt2YXIgYWo9dHJ1ZTtmb3IodmFyIGFsPTA7YWw8YXEubGVuZ3RoO2FsKyspe2lmKGFxW2FsXVswXSE9bnVsbCYmYXFbYWxdWzFdIT1udWxsKXtpZihhail7YXAubW92ZVRvKGFxW2FsXVswXSxhcVthbF1bMV0pO2FqPWZhbHNlfWVsc2V7YXAubGluZVRvKGFxW2FsXVswXSxhcVthbF1bMV0pfX1lbHNle2FqPXRydWV9fWlmKGFtKXthcC5jbG9zZVBhdGgoKX1pZihhcil7YXQuZmlsbCgpfWVsc2V7YXQuc3Ryb2tlKCl9fX19fWF0LnJlc3RvcmUoKX07TC5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlcj1mdW5jdGlvbigpe307TC5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhaCl7TC5leHRlbmQodHJ1ZSx0aGlzLGFoKX07TC5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuYWRkcm93PWZ1bmN0aW9uKGFxLGFrLGFoLGFvKXt2YXIgYWw9KGFoKT90aGlzLnJvd1NwYWNpbmcrInB4IjoiMHB4Ijt2YXIgYXA7dmFyIGFqO3ZhciBhaTt2YXIgYW47dmFyIGFtO2FpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7YXA9TChhaSk7YXAuYWRkQ2xhc3MoImpxcGxvdC10YWJsZS1sZWdlbmQiKTthaT1udWxsO2lmKGFvKXthcC5wcmVwZW5kVG8odGhpcy5fZWxlbSl9ZWxzZXthcC5hcHBlbmRUbyh0aGlzLl9lbGVtKX1pZih0aGlzLnNob3dTd2F0Y2hlcyl7YWo9TChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpKTthai5hZGRDbGFzcygianFwbG90LXRhYmxlLWxlZ2VuZCBqcXBsb3QtdGFibGUtbGVnZW5kLXN3YXRjaCIpO2FqLmNzcyh7dGV4dEFsaWduOiJjZW50ZXIiLHBhZGRpbmdUb3A6YWx9KTthbj1MKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTthbi5hZGRDbGFzcygianFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2gtb3V0bGluZSIpO2FtPUwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO2FtLmFkZENsYXNzKCJqcXBsb3QtdGFibGUtbGVnZW5kLXN3YXRjaCIpO2FtLmNzcyh7YmFja2dyb3VuZENvbG9yOmFrLGJvcmRlckNvbG9yOmFrfSk7YXAuYXBwZW5kKGFqLmFwcGVuZChhbi5hcHBlbmQoYW0pKSl9aWYodGhpcy5zaG93TGFiZWxzKXthaj1MKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIikpO2FqLmFkZENsYXNzKCJqcXBsb3QtdGFibGUtbGVnZW5kIGpxcGxvdC10YWJsZS1sZWdlbmQtbGFiZWwiKTthai5jc3MoInBhZGRpbmdUb3AiLGFsKTthcC5hcHBlbmQoYWopO2lmKHRoaXMuZXNjYXBlSHRtbCl7YWoudGV4dChhcSl9ZWxzZXthai5odG1sKGFxKX19YWo9bnVsbDthbj1udWxsO2FtPW51bGw7YXA9bnVsbDthaT1udWxsfTtMLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7aWYodGhpcy5fZWxlbSl7dGhpcy5fZWxlbS5lbXB0eUZvcmNlKCk7dGhpcy5fZWxlbT1udWxsfWlmKHRoaXMuc2hvdyl7dmFyIGFtPXRoaXMuX3Nlcmllczt2YXIgYWk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUiKTt0aGlzLl9lbGVtPUwoYWkpO3RoaXMuX2VsZW0uYWRkQ2xhc3MoImpxcGxvdC10YWJsZS1sZWdlbmQiKTt2YXIgYXI9e3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9O2lmKHRoaXMuYmFja2dyb3VuZCl7YXIuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmR9aWYodGhpcy5ib3JkZXIpe2FyLmJvcmRlcj10aGlzLmJvcmRlcn1pZih0aGlzLmZvbnRTaXplKXthci5mb250U2l6ZT10aGlzLmZvbnRTaXplfWlmKHRoaXMuZm9udEZhbWlseSl7YXIuZm9udEZhbWlseT10aGlzLmZvbnRGYW1pbHl9aWYodGhpcy50ZXh0Q29sb3Ipe2FyLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcn1pZih0aGlzLm1hcmdpblRvcCE9bnVsbCl7YXIubWFyZ2luVG9wPXRoaXMubWFyZ2luVG9wfWlmKHRoaXMubWFyZ2luQm90dG9tIT1udWxsKXthci5tYXJnaW5Cb3R0b209dGhpcy5tYXJnaW5Cb3R0b219aWYodGhpcy5tYXJnaW5MZWZ0IT1udWxsKXthci5tYXJnaW5MZWZ0PXRoaXMubWFyZ2luTGVmdH1pZih0aGlzLm1hcmdpblJpZ2h0IT1udWxsKXthci5tYXJnaW5SaWdodD10aGlzLm1hcmdpblJpZ2h0fXZhciBhaD1mYWxzZSxhbz1mYWxzZSxhcTtmb3IodmFyIGFuPTA7YW48YW0ubGVuZ3RoO2FuKyspe2FxPWFtW2FuXTtpZihhcS5fc3RhY2t8fGFxLnJlbmRlcmVyLmNvbnN0cnVjdG9yPT1MLmpxcGxvdC5CZXppZXJDdXJ2ZVJlbmRlcmVyKXthbz10cnVlfWlmKGFxLnNob3cmJmFxLnNob3dMYWJlbCl7dmFyIGFsPXRoaXMubGFiZWxzW2FuXXx8YXEubGFiZWwudG9TdHJpbmcoKTtpZihhbCl7dmFyIGFqPWFxLmNvbG9yO2lmKGFvJiZhbjxhbS5sZW5ndGgtMSl7YWg9dHJ1ZX1lbHNle2lmKGFvJiZhbj09YW0ubGVuZ3RoLTEpe2FoPWZhbHNlfX10aGlzLnJlbmRlcmVyLmFkZHJvdy5jYWxsKHRoaXMsYWwsYWosYWgsYW8pO2FoPXRydWV9Zm9yKHZhciBhaz0wO2FrPEwuanFwbG90LmFkZExlZ2VuZFJvd0hvb2tzLmxlbmd0aDthaysrKXt2YXIgYXA9TC5qcXBsb3QuYWRkTGVnZW5kUm93SG9va3NbYWtdLmNhbGwodGhpcyxhcSk7aWYoYXApe3RoaXMucmVuZGVyZXIuYWRkcm93LmNhbGwodGhpcyxhcC5sYWJlbCxhcC5jb2xvcixhaCk7YWg9dHJ1ZX19YWw9bnVsbH19fXJldHVybiB0aGlzLl9lbGVtfTtMLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5wYWNrPWZ1bmN0aW9uKGFqKXtpZih0aGlzLnNob3cpe2lmKHRoaXMucGxhY2VtZW50PT0iaW5zaWRlR3JpZCIpe3N3aXRjaCh0aGlzLmxvY2F0aW9uKXtjYXNlIm53Ijp2YXIgYWk9YWoubGVmdDt2YXIgYWg9YWoudG9wO3RoaXMuX2VsZW0uY3NzKCJsZWZ0IixhaSk7dGhpcy5fZWxlbS5jc3MoInRvcCIsYWgpO2JyZWFrO2Nhc2UibiI6dmFyIGFpPShhai5sZWZ0Kyh0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC1hai5yaWdodCkpLzItdGhpcy5nZXRXaWR0aCgpLzI7dmFyIGFoPWFqLnRvcDt0aGlzLl9lbGVtLmNzcygibGVmdCIsYWkpO3RoaXMuX2VsZW0uY3NzKCJ0b3AiLGFoKTticmVhaztjYXNlIm5lIjp2YXIgYWk9YWoucmlnaHQ7dmFyIGFoPWFqLnRvcDt0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6YWksdG9wOmFofSk7YnJlYWs7Y2FzZSJlIjp2YXIgYWk9YWoucmlnaHQ7dmFyIGFoPShhai50b3ArKHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodC1hai5ib3R0b20pKS8yLXRoaXMuZ2V0SGVpZ2h0KCkvMjt0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6YWksdG9wOmFofSk7YnJlYWs7Y2FzZSJzZSI6dmFyIGFpPWFqLnJpZ2h0O3ZhciBhaD1hai5ib3R0b207dGhpcy5fZWxlbS5jc3Moe3JpZ2h0OmFpLGJvdHRvbTphaH0pO2JyZWFrO2Nhc2UicyI6dmFyIGFpPShhai5sZWZ0Kyh0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC1hai5yaWdodCkpLzItdGhpcy5nZXRXaWR0aCgpLzI7dmFyIGFoPWFqLmJvdHRvbTt0aGlzLl9lbGVtLmNzcyh7bGVmdDphaSxib3R0b206YWh9KTticmVhaztjYXNlInN3Ijp2YXIgYWk9YWoubGVmdDt2YXIgYWg9YWouYm90dG9tO3RoaXMuX2VsZW0uY3NzKHtsZWZ0OmFpLGJvdHRvbTphaH0pO2JyZWFrO2Nhc2UidyI6dmFyIGFpPWFqLmxlZnQ7dmFyIGFoPShhai50b3ArKHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodC1hai5ib3R0b20pKS8yLXRoaXMuZ2V0SGVpZ2h0KCkvMjt0aGlzLl9lbGVtLmNzcyh7bGVmdDphaSx0b3A6YWh9KTticmVhaztkZWZhdWx0OnZhciBhaT1hai5yaWdodDt2YXIgYWg9YWouYm90dG9tO3RoaXMuX2VsZW0uY3NzKHtyaWdodDphaSxib3R0b206YWh9KTticmVha319ZWxzZXtpZih0aGlzLnBsYWNlbWVudD09Im91dHNpZGUiKXtzd2l0Y2godGhpcy5sb2NhdGlvbil7Y2FzZSJudyI6dmFyIGFpPXRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoLWFqLmxlZnQ7dmFyIGFoPWFqLnRvcDt0aGlzLl9lbGVtLmNzcygicmlnaHQiLGFpKTt0aGlzLl9lbGVtLmNzcygidG9wIixhaCk7YnJlYWs7Y2FzZSJuIjp2YXIgYWk9KGFqLmxlZnQrKHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoLWFqLnJpZ2h0KSkvMi10aGlzLmdldFdpZHRoKCkvMjt2YXIgYWg9dGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0LWFqLnRvcDt0aGlzLl9lbGVtLmNzcygibGVmdCIsYWkpO3RoaXMuX2VsZW0uY3NzKCJib3R0b20iLGFoKTticmVhaztjYXNlIm5lIjp2YXIgYWk9dGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgtYWoucmlnaHQ7dmFyIGFoPWFqLnRvcDt0aGlzLl9lbGVtLmNzcyh7bGVmdDphaSx0b3A6YWh9KTticmVhaztjYXNlImUiOnZhciBhaT10aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC1hai5yaWdodDt2YXIgYWg9KGFqLnRvcCsodGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0LWFqLmJvdHRvbSkpLzItdGhpcy5nZXRIZWlnaHQoKS8yO3RoaXMuX2VsZW0uY3NzKHtsZWZ0OmFpLHRvcDphaH0pO2JyZWFrO2Nhc2Uic2UiOnZhciBhaT10aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC1hai5yaWdodDt2YXIgYWg9YWouYm90dG9tO3RoaXMuX2VsZW0uY3NzKHtsZWZ0OmFpLGJvdHRvbTphaH0pO2JyZWFrO2Nhc2UicyI6dmFyIGFpPShhai5sZWZ0Kyh0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC1hai5yaWdodCkpLzItdGhpcy5nZXRXaWR0aCgpLzI7dmFyIGFoPXRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodC1hai5ib3R0b207dGhpcy5fZWxlbS5jc3Moe2xlZnQ6YWksdG9wOmFofSk7YnJlYWs7Y2FzZSJzdyI6dmFyIGFpPXRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoLWFqLmxlZnQ7dmFyIGFoPWFqLmJvdHRvbTt0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6YWksYm90dG9tOmFofSk7YnJlYWs7Y2FzZSJ3Ijp2YXIgYWk9dGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgtYWoubGVmdDt2YXIgYWg9KGFqLnRvcCsodGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0LWFqLmJvdHRvbSkpLzItdGhpcy5nZXRIZWlnaHQoKS8yO3RoaXMuX2VsZW0uY3NzKHtyaWdodDphaSx0b3A6YWh9KTticmVhaztkZWZhdWx0OnZhciBhaT1hai5yaWdodDt2YXIgYWg9YWouYm90dG9tO3RoaXMuX2VsZW0uY3NzKHtyaWdodDphaSxib3R0b206YWh9KTticmVha319ZWxzZXtzd2l0Y2godGhpcy5sb2NhdGlvbil7Y2FzZSJudyI6dGhpcy5fZWxlbS5jc3Moe2xlZnQ6MCx0b3A6YWoudG9wfSk7YnJlYWs7Y2FzZSJuIjp2YXIgYWk9KGFqLmxlZnQrKHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoLWFqLnJpZ2h0KSkvMi10aGlzLmdldFdpZHRoKCkvMjt0aGlzLl9lbGVtLmNzcyh7bGVmdDphaSx0b3A6YWoudG9wfSk7YnJlYWs7Y2FzZSJuZSI6dGhpcy5fZWxlbS5jc3Moe3JpZ2h0OjAsdG9wOmFqLnRvcH0pO2JyZWFrO2Nhc2UiZSI6dmFyIGFoPShhai50b3ArKHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodC1hai5ib3R0b20pKS8yLXRoaXMuZ2V0SGVpZ2h0KCkvMjt0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6YWoucmlnaHQsdG9wOmFofSk7YnJlYWs7Y2FzZSJzZSI6dGhpcy5fZWxlbS5jc3Moe3JpZ2h0OmFqLnJpZ2h0LGJvdHRvbTphai5ib3R0b219KTticmVhaztjYXNlInMiOnZhciBhaT0oYWoubGVmdCsodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgtYWoucmlnaHQpKS8yLXRoaXMuZ2V0V2lkdGgoKS8yO3RoaXMuX2VsZW0uY3NzKHtsZWZ0OmFpLGJvdHRvbTphai5ib3R0b219KTticmVhaztjYXNlInN3Ijp0aGlzLl9lbGVtLmNzcyh7bGVmdDphai5sZWZ0LGJvdHRvbTphai5ib3R0b219KTticmVhaztjYXNlInciOnZhciBhaD0oYWoudG9wKyh0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQtYWouYm90dG9tKSkvMi10aGlzLmdldEhlaWdodCgpLzI7dGhpcy5fZWxlbS5jc3Moe2xlZnQ6YWoubGVmdCx0b3A6YWh9KTticmVhaztkZWZhdWx0OnRoaXMuX2VsZW0uY3NzKHtyaWdodDphai5yaWdodCxib3R0b206YWouYm90dG9tfSk7YnJlYWt9fX19fTtMLmpxcGxvdC5UaGVtZUVuZ2luZT1mdW5jdGlvbigpe3RoaXMudGhlbWVzPXt9O3RoaXMuYWN0aXZlVGhlbWU9bnVsbH07TC5qcXBsb3QuVGhlbWVFbmdpbmUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgYWs9bmV3IEwuanFwbG90LlRoZW1lKHtfbmFtZToiRGVmYXVsdCJ9KTt2YXIgYW4sYWksYW07Zm9yKGFuIGluIGFrLnRhcmdldCl7aWYoYW49PSJ0ZXh0Q29sb3IiKXthay50YXJnZXRbYW5dPXRoaXMudGFyZ2V0LmNzcygiY29sb3IiKX1lbHNle2FrLnRhcmdldFthbl09dGhpcy50YXJnZXQuY3NzKGFuKX19aWYodGhpcy50aXRsZS5zaG93JiZ0aGlzLnRpdGxlLl9lbGVtKXtmb3IoYW4gaW4gYWsudGl0bGUpe2lmKGFuPT0idGV4dENvbG9yIil7YWsudGl0bGVbYW5dPXRoaXMudGl0bGUuX2VsZW0uY3NzKCJjb2xvciIpfWVsc2V7YWsudGl0bGVbYW5dPXRoaXMudGl0bGUuX2VsZW0uY3NzKGFuKX19fWZvcihhbiBpbiBhay5ncmlkKXthay5ncmlkW2FuXT10aGlzLmdyaWRbYW5dfWlmKGFrLmdyaWQuYmFja2dyb3VuZENvbG9yPT1udWxsJiZ0aGlzLmdyaWQuYmFja2dyb3VuZCE9bnVsbCl7YWsuZ3JpZC5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5ncmlkLmJhY2tncm91bmR9aWYodGhpcy5sZWdlbmQuc2hvdyYmdGhpcy5sZWdlbmQuX2VsZW0pe2ZvcihhbiBpbiBhay5sZWdlbmQpe2lmKGFuPT0idGV4dENvbG9yIil7YWsubGVnZW5kW2FuXT10aGlzLmxlZ2VuZC5fZWxlbS5jc3MoImNvbG9yIil9ZWxzZXthay5sZWdlbmRbYW5dPXRoaXMubGVnZW5kLl9lbGVtLmNzcyhhbil9fX12YXIgYWo7Zm9yKGFpPTA7YWk8dGhpcy5zZXJpZXMubGVuZ3RoO2FpKyspe2FqPXRoaXMuc2VyaWVzW2FpXTtpZihhai5yZW5kZXJlci5jb25zdHJ1Y3Rvcj09TC5qcXBsb3QuTGluZVJlbmRlcmVyKXthay5zZXJpZXMucHVzaChuZXcgcCgpKX1lbHNle2lmKGFqLnJlbmRlcmVyLmNvbnN0cnVjdG9yPT1MLmpxcGxvdC5CYXJSZW5kZXJlcil7YWsuc2VyaWVzLnB1c2gobmV3IFQoKSl9ZWxzZXtpZihhai5yZW5kZXJlci5jb25zdHJ1Y3Rvcj09TC5qcXBsb3QuUGllUmVuZGVyZXIpe2FrLnNlcmllcy5wdXNoKG5ldyBmKCkpfWVsc2V7aWYoYWoucmVuZGVyZXIuY29uc3RydWN0b3I9PUwuanFwbG90LkRvbnV0UmVuZGVyZXIpe2FrLnNlcmllcy5wdXNoKG5ldyBHKCkpfWVsc2V7aWYoYWoucmVuZGVyZXIuY29uc3RydWN0b3I9PUwuanFwbG90LkZ1bm5lbFJlbmRlcmVyKXthay5zZXJpZXMucHVzaChuZXcgWigpKX1lbHNle2lmKGFqLnJlbmRlcmVyLmNvbnN0cnVjdG9yPT1MLmpxcGxvdC5NZXRlckdhdWdlUmVuZGVyZXIpe2FrLnNlcmllcy5wdXNoKG5ldyBEKCkpfWVsc2V7YWsuc2VyaWVzLnB1c2goe30pfX19fX19Zm9yKGFuIGluIGFrLnNlcmllc1thaV0pe2FrLnNlcmllc1thaV1bYW5dPWFqW2FuXX19dmFyIGFoLGFsO2ZvcihhbiBpbiB0aGlzLmF4ZXMpe2FsPXRoaXMuYXhlc1thbl07YWg9YWsuYXhlc1thbl09bmV3IFAoKTthaC5ib3JkZXJDb2xvcj1hbC5ib3JkZXJDb2xvcjthaC5ib3JkZXJXaWR0aD1hbC5ib3JkZXJXaWR0aDtpZihhbC5fdGlja3MmJmFsLl90aWNrc1swXSl7Zm9yKGFtIGluIGFoLnRpY2tzKXtpZihhbC5fdGlja3NbMF0uaGFzT3duUHJvcGVydHkoYW0pKXthaC50aWNrc1thbV09YWwuX3RpY2tzWzBdW2FtXX1lbHNle2lmKGFsLl90aWNrc1swXS5fZWxlbSl7YWgudGlja3NbYW1dPWFsLl90aWNrc1swXS5fZWxlbS5jc3MoYW0pfX19fWlmKGFsLl9sYWJlbCYmYWwuX2xhYmVsLnNob3cpe2ZvcihhbSBpbiBhaC5sYWJlbCl7aWYoYWwuX2xhYmVsW2FtXSl7YWgubGFiZWxbYW1dPWFsLl9sYWJlbFthbV19ZWxzZXtpZihhbC5fbGFiZWwuX2VsZW0pe2lmKGFtPT0idGV4dENvbG9yIil7YWgubGFiZWxbYW1dPWFsLl9sYWJlbC5fZWxlbS5jc3MoImNvbG9yIil9ZWxzZXthaC5sYWJlbFthbV09YWwuX2xhYmVsLl9lbGVtLmNzcyhhbSl9fX19fX10aGlzLnRoZW1lRW5naW5lLl9hZGQoYWspO3RoaXMudGhlbWVFbmdpbmUuYWN0aXZlVGhlbWU9dGhpcy50aGVtZUVuZ2luZS50aGVtZXNbYWsuX25hbWVdfTtMLmpxcGxvdC5UaGVtZUVuZ2luZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGFoKXtpZighYWgpe3JldHVybiB0aGlzLmFjdGl2ZVRoZW1lfWVsc2V7cmV0dXJuIHRoaXMudGhlbWVzW2FoXX19O2Z1bmN0aW9uIE8oYWksYWgpe3JldHVybiBhaS1haH1MLmpxcGxvdC5UaGVtZUVuZ2luZS5wcm90b3R5cGUuZ2V0VGhlbWVOYW1lcz1mdW5jdGlvbigpe3ZhciBhaD1bXTtmb3IodmFyIGFpIGluIHRoaXMudGhlbWVzKXthaC5wdXNoKGFpKX1yZXR1cm4gYWguc29ydChPKX07TC5qcXBsb3QuVGhlbWVFbmdpbmUucHJvdG90eXBlLmdldFRoZW1lcz1mdW5jdGlvbigpe3ZhciBhaT1bXTt2YXIgYWg9W107Zm9yKHZhciBhayBpbiB0aGlzLnRoZW1lcyl7YWkucHVzaChhayl9YWkuc29ydChPKTtmb3IodmFyIGFqPTA7YWo8YWkubGVuZ3RoO2FqKyspe2FoLnB1c2godGhpcy50aGVtZXNbYWlbYWpdXSl9cmV0dXJuIGFofTtMLmpxcGxvdC5UaGVtZUVuZ2luZS5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oYXYsYUIpe3ZhciBhaD1mYWxzZTtpZighYUImJnRoaXMuYWN0aXZlVGhlbWUmJnRoaXMuYWN0aXZlVGhlbWUuX25hbWUpe2FCPXRoaXMuYWN0aXZlVGhlbWUuX25hbWV9aWYoIXRoaXMudGhlbWVzLmhhc093blByb3BlcnR5KGFCKSl7dGhyb3cgbmV3IEVycm9yKCJObyB0aGVtZSBvZiB0aGF0IG5hbWUiKX1lbHNle3ZhciBhbT10aGlzLnRoZW1lc1thQl07dGhpcy5hY3RpdmVUaGVtZT1hbTt2YXIgYUEsYXQ9ZmFsc2UsYXI9ZmFsc2U7dmFyIGFpPVsieGF4aXMiLCJ4MmF4aXMiLCJ5YXhpcyIsInkyYXhpcyJdO2Zvcihhdz0wO2F3PGFpLmxlbmd0aDthdysrKXt2YXIgYW49YWlbYXddO2lmKGFtLmF4ZXNTdHlsZXMuYm9yZGVyQ29sb3IhPW51bGwpe2F2LmF4ZXNbYW5dLmJvcmRlckNvbG9yPWFtLmF4ZXNTdHlsZXMuYm9yZGVyQ29sb3J9aWYoYW0uYXhlc1N0eWxlcy5ib3JkZXJXaWR0aCE9bnVsbCl7YXYuYXhlc1thbl0uYm9yZGVyV2lkdGg9YW0uYXhlc1N0eWxlcy5ib3JkZXJXaWR0aH19Zm9yKHZhciBheiBpbiBhdi5heGVzKXt2YXIgYWs9YXYuYXhlc1thel07aWYoYWsuc2hvdyl7dmFyIGFxPWFtLmF4ZXNbYXpdfHx7fTt2YXIgYW89YW0uYXhlc1N0eWxlczt2YXIgYWw9TC5qcXBsb3QuZXh0ZW5kKHRydWUse30sYXEsYW8pO2FBPShhbS5heGVzU3R5bGVzLmJvcmRlckNvbG9yIT1udWxsKT9hbS5heGVzU3R5bGVzLmJvcmRlckNvbG9yOmFsLmJvcmRlckNvbG9yO2lmKGFsLmJvcmRlckNvbG9yIT1udWxsKXthay5ib3JkZXJDb2xvcj1hbC5ib3JkZXJDb2xvcjthaD10cnVlfWFBPShhbS5heGVzU3R5bGVzLmJvcmRlcldpZHRoIT1udWxsKT9hbS5heGVzU3R5bGVzLmJvcmRlcldpZHRoOmFsLmJvcmRlcldpZHRoO2lmKGFsLmJvcmRlcldpZHRoIT1udWxsKXthay5ib3JkZXJXaWR0aD1hbC5ib3JkZXJXaWR0aDthaD10cnVlfWlmKGFrLl90aWNrcyYmYWsuX3RpY2tzWzBdKXtmb3IodmFyIGFqIGluIGFsLnRpY2tzKXthQT1hbC50aWNrc1thal07aWYoYUEhPW51bGwpe2FrLnRpY2tPcHRpb25zW2FqXT1hQTthay5fdGlja3M9W107YWg9dHJ1ZX19fWlmKGFrLl9sYWJlbCYmYWsuX2xhYmVsLnNob3cpe2Zvcih2YXIgYWogaW4gYWwubGFiZWwpe2FBPWFsLmxhYmVsW2FqXTtpZihhQSE9bnVsbCl7YWsubGFiZWxPcHRpb25zW2FqXT1hQTthaD10cnVlfX19fX1mb3IodmFyIGF1IGluIGFtLmdyaWQpe2lmKGFtLmdyaWRbYXVdIT1udWxsKXthdi5ncmlkW2F1XT1hbS5ncmlkW2F1XX19aWYoIWFoKXthdi5ncmlkLmRyYXcoKX1pZihhdi5sZWdlbmQuc2hvdyl7Zm9yKGF1IGluIGFtLmxlZ2VuZCl7aWYoYW0ubGVnZW5kW2F1XSE9bnVsbCl7YXYubGVnZW5kW2F1XT1hbS5sZWdlbmRbYXVdfX19aWYoYXYudGl0bGUuc2hvdyl7Zm9yKGF1IGluIGFtLnRpdGxlKXtpZihhbS50aXRsZVthdV0hPW51bGwpe2F2LnRpdGxlW2F1XT1hbS50aXRsZVthdV19fX12YXIgYXc7Zm9yKGF3PTA7YXc8YW0uc2VyaWVzLmxlbmd0aDthdysrKXt2YXIgYXA9e307dmFyIGF5PWZhbHNlO2ZvcihhdSBpbiBhbS5zZXJpZXNbYXddKXthQT0oYW0uc2VyaWVzU3R5bGVzW2F1XSE9bnVsbCk/YW0uc2VyaWVzU3R5bGVzW2F1XTphbS5zZXJpZXNbYXddW2F1XTtpZihhQSE9bnVsbCl7YXBbYXVdPWFBO2lmKGF1PT0iY29sb3IiKXthdi5zZXJpZXNbYXddLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZmlsbFN0eWxlPWFBO2F2LnNlcmllc1thd10ucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5zdHJva2VTdHlsZT1hQTthdi5zZXJpZXNbYXddW2F1XT1hQX1lbHNle2lmKChhdT09ImxpbmVXaWR0aCIpfHwoYXU9PSJsaW5lUGF0dGVybiIpKXthdi5zZXJpZXNbYXddLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXJbYXVdPWFBO2F2LnNlcmllc1thd11bYXVdPWFBfWVsc2V7aWYoYXU9PSJtYXJrZXJPcHRpb25zIil7Vihhdi5zZXJpZXNbYXddLm1hcmtlck9wdGlvbnMsYUEpO1YoYXYuc2VyaWVzW2F3XS5tYXJrZXJSZW5kZXJlcixhQSl9ZWxzZXthdi5zZXJpZXNbYXddW2F1XT1hQX19fWFoPXRydWV9fX1pZihhaCl7YXYudGFyZ2V0LmVtcHR5KCk7YXYuZHJhdygpfWZvcihhdSBpbiBhbS50YXJnZXQpe2lmKGFtLnRhcmdldFthdV0hPW51bGwpe2F2LnRhcmdldC5jc3MoYXUsYW0udGFyZ2V0W2F1XSl9fX19O0wuanFwbG90LlRoZW1lRW5naW5lLnByb3RvdHlwZS5fYWRkPWZ1bmN0aW9uKGFpLGFoKXtpZihhaCl7YWkuX25hbWU9YWh9aWYoIWFpLl9uYW1lKXthaS5fbmFtZT1EYXRlLnBhcnNlKG5ldyBEYXRlKCkpfWlmKCF0aGlzLnRoZW1lcy5oYXNPd25Qcm9wZXJ0eShhaS5fbmFtZSkpe3RoaXMudGhlbWVzW2FpLl9uYW1lXT1haX1lbHNle3Rocm93IG5ldyBFcnJvcigianFwbG90LlRoZW1lRW5naW5lIEVycm9yOiBUaGVtZSBhbHJlYWR5IGluIHVzZSIpfX07TC5qcXBsb3QuVGhlbWVFbmdpbmUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhaCl7aWYoYWg9PSJEZWZhdWx0Iil7cmV0dXJuIGZhbHNlfXJldHVybiBkZWxldGUgdGhpcy50aGVtZXNbYWhdfTtMLmpxcGxvdC5UaGVtZUVuZ2luZS5wcm90b3R5cGUubmV3VGhlbWU9ZnVuY3Rpb24oYWgsYWope2lmKHR5cGVvZihhaCk9PSJvYmplY3QiKXthaj1hanx8YWg7YWg9bnVsbH1pZihhaiYmYWouX25hbWUpe2FoPWFqLl9uYW1lfWVsc2V7YWg9YWh8fERhdGUucGFyc2UobmV3IERhdGUoKSl9dmFyIGFpPXRoaXMuY29weSh0aGlzLnRoZW1lcy5EZWZhdWx0Ll9uYW1lLGFoKTtMLmpxcGxvdC5leHRlbmQoYWksYWopO3JldHVybiBhaX07ZnVuY3Rpb24gQihhail7aWYoYWo9PW51bGx8fHR5cGVvZihhaikhPSJvYmplY3QiKXtyZXR1cm4gYWp9dmFyIGFoPW5ldyBhai5jb25zdHJ1Y3RvcigpO2Zvcih2YXIgYWkgaW4gYWope2FoW2FpXT1CKGFqW2FpXSl9cmV0dXJuIGFofUwuanFwbG90LmNsb25lPUI7ZnVuY3Rpb24gVihhaixhaSl7aWYoYWk9PW51bGx8fHR5cGVvZihhaSkhPSJvYmplY3QiKXtyZXR1cm59Zm9yKHZhciBhaCBpbiBhaSl7aWYoYWg9PSJoaWdobGlnaHRDb2xvcnMiKXthalthaF09QihhaVthaF0pfWlmKGFpW2FoXSE9bnVsbCYmdHlwZW9mKGFpW2FoXSk9PSJvYmplY3QiKXtpZighYWouaGFzT3duUHJvcGVydHkoYWgpKXthalthaF09e319VihhalthaF0sYWlbYWhdKX1lbHNle2FqW2FoXT1haVthaF19fX1MLmpxcGxvdC5tZXJnZT1WO0wuanFwbG90LmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhbT1hcmd1bWVudHNbMF18fHt9LGFrPTEsYWw9YXJndW1lbnRzLmxlbmd0aCxhaD1mYWxzZSxhajtpZih0eXBlb2YgYW09PT0iYm9vbGVhbiIpe2FoPWFtO2FtPWFyZ3VtZW50c1sxXXx8e307YWs9Mn1pZih0eXBlb2YgYW0hPT0ib2JqZWN0IiYmIXRvU3RyaW5nLmNhbGwoYW0pPT09IltvYmplY3QgRnVuY3Rpb25dIil7YW09e319Zm9yKDthazxhbDthaysrKXtpZigoYWo9YXJndW1lbnRzW2FrXSkhPW51bGwpe2Zvcih2YXIgYWkgaW4gYWope3ZhciBhbj1hbVthaV0sYW89YWpbYWldO2lmKGFtPT09YW8pe2NvbnRpbnVlfWlmKGFoJiZhbyYmdHlwZW9mIGFvPT09Im9iamVjdCImJiFhby5ub2RlVHlwZSl7YW1bYWldPUwuanFwbG90LmV4dGVuZChhaCxhbnx8KGFvLmxlbmd0aCE9bnVsbD9bXTp7fSksYW8pfWVsc2V7aWYoYW8hPT11KXthbVthaV09YW99fX19fXJldHVybiBhbX07TC5qcXBsb3QuVGhlbWVFbmdpbmUucHJvdG90eXBlLnJlbmFtZT1mdW5jdGlvbihhaSxhaCl7aWYoYWk9PSJEZWZhdWx0Inx8YWg9PSJEZWZhdWx0Iil7dGhyb3cgbmV3IEVycm9yKCJqcXBsb3QuVGhlbWVFbmdpbmUgRXJyb3I6IENhbm5vdCByZW5hbWUgZnJvbS90byBEZWZhdWx0Iil9aWYodGhpcy50aGVtZXMuaGFzT3duUHJvcGVydHkoYWgpKXt0aHJvdyBuZXcgRXJyb3IoImpxcGxvdC5UaGVtZUVuZ2luZSBFcnJvcjogTmV3IG5hbWUgYWxyZWFkeSBpbiB1c2UuIil9ZWxzZXtpZih0aGlzLnRoZW1lcy5oYXNPd25Qcm9wZXJ0eShhaSkpe3ZhciBhaj10aGlzLmNvcHkoYWksYWgpO3RoaXMucmVtb3ZlKGFpKTtyZXR1cm4gYWp9fXRocm93IG5ldyBFcnJvcigianFwbG90LlRoZW1lRW5naW5lIEVycm9yOiBPbGQgbmFtZSBvciBuZXcgbmFtZSBpbnZhbGlkIil9O0wuanFwbG90LlRoZW1lRW5naW5lLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGFoLGFqLGFsKXtpZihhaj09IkRlZmF1bHQiKXt0aHJvdyBuZXcgRXJyb3IoImpxcGxvdC5UaGVtZUVuZ2luZSBFcnJvcjogQ2Fubm90IGNvcHkgb3ZlciBEZWZhdWx0IHRoZW1lIil9aWYoIXRoaXMudGhlbWVzLmhhc093blByb3BlcnR5KGFoKSl7dmFyIGFpPSJqcXBsb3QuVGhlbWVFbmdpbmUgRXJyb3I6IFNvdXJjZSBuYW1lIGludmFsaWQiO3Rocm93IG5ldyBFcnJvcihhaSl9aWYodGhpcy50aGVtZXMuaGFzT3duUHJvcGVydHkoYWopKXt2YXIgYWk9ImpxcGxvdC5UaGVtZUVuZ2luZSBFcnJvcjogVGFyZ2V0IG5hbWUgaW52YWxpZCI7dGhyb3cgbmV3IEVycm9yKGFpKX1lbHNle3ZhciBhaz1CKHRoaXMudGhlbWVzW2FoXSk7YWsuX25hbWU9YWo7TC5qcXBsb3QuZXh0ZW5kKHRydWUsYWssYWwpO3RoaXMuX2FkZChhayk7cmV0dXJuIGFrfX07TC5qcXBsb3QuVGhlbWU9ZnVuY3Rpb24oYWgsYWkpe2lmKHR5cGVvZihhaCk9PSJvYmplY3QiKXthaT1haXx8YWg7YWg9bnVsbH1haD1haHx8RGF0ZS5wYXJzZShuZXcgRGF0ZSgpKTt0aGlzLl9uYW1lPWFoO3RoaXMudGFyZ2V0PXtiYWNrZ3JvdW5kQ29sb3I6bnVsbH07dGhpcy5sZWdlbmQ9e3RleHRDb2xvcjpudWxsLGZvbnRGYW1pbHk6bnVsbCxmb250U2l6ZTpudWxsLGJvcmRlcjpudWxsLGJhY2tncm91bmQ6bnVsbH07dGhpcy50aXRsZT17dGV4dENvbG9yOm51bGwsZm9udEZhbWlseTpudWxsLGZvbnRTaXplOm51bGwsdGV4dEFsaWduOm51bGx9O3RoaXMuc2VyaWVzU3R5bGVzPXt9O3RoaXMuc2VyaWVzPVtdO3RoaXMuZ3JpZD17ZHJhd0dyaWRsaW5lczpudWxsLGdyaWRMaW5lQ29sb3I6bnVsbCxncmlkTGluZVdpZHRoOm51bGwsYmFja2dyb3VuZENvbG9yOm51bGwsYm9yZGVyQ29sb3I6bnVsbCxib3JkZXJXaWR0aDpudWxsLHNoYWRvdzpudWxsfTt0aGlzLmF4ZXNTdHlsZXM9e2xhYmVsOnt9LHRpY2tzOnt9fTt0aGlzLmF4ZXM9e307aWYodHlwZW9mKGFpKT09InN0cmluZyIpe3RoaXMuX25hbWU9YWl9ZWxzZXtpZih0eXBlb2YoYWkpPT0ib2JqZWN0Iil7TC5qcXBsb3QuZXh0ZW5kKHRydWUsdGhpcyxhaSl9fX07dmFyIFA9ZnVuY3Rpb24oKXt0aGlzLmJvcmRlckNvbG9yPW51bGw7dGhpcy5ib3JkZXJXaWR0aD1udWxsO3RoaXMudGlja3M9bmV3IG8oKTt0aGlzLmxhYmVsPW5ldyB0KCl9O3ZhciBvPWZ1bmN0aW9uKCl7dGhpcy5zaG93PW51bGw7dGhpcy5zaG93R3JpZGxpbmU9bnVsbDt0aGlzLnNob3dMYWJlbD1udWxsO3RoaXMuc2hvd01hcms9bnVsbDt0aGlzLnNpemU9bnVsbDt0aGlzLnRleHRDb2xvcj1udWxsO3RoaXMud2hpdGVTcGFjZT1udWxsO3RoaXMuZm9udFNpemU9bnVsbDt0aGlzLmZvbnRGYW1pbHk9bnVsbH07dmFyIHQ9ZnVuY3Rpb24oKXt0aGlzLnRleHRDb2xvcj1udWxsO3RoaXMud2hpdGVTcGFjZT1udWxsO3RoaXMuZm9udFNpemU9bnVsbDt0aGlzLmZvbnRGYW1pbHk9bnVsbDt0aGlzLmZvbnRXZWlnaHQ9bnVsbH07dmFyIHA9ZnVuY3Rpb24oKXt0aGlzLmNvbG9yPW51bGw7dGhpcy5saW5lV2lkdGg9bnVsbDt0aGlzLmxpbmVQYXR0ZXJuPW51bGw7dGhpcy5zaGFkb3c9bnVsbDt0aGlzLmZpbGxDb2xvcj1udWxsO3RoaXMuc2hvd01hcmtlcj1udWxsO3RoaXMubWFya2VyT3B0aW9ucz1uZXcgSSgpfTt2YXIgST1mdW5jdGlvbigpe3RoaXMuc2hvdz1udWxsO3RoaXMuc3R5bGU9bnVsbDt0aGlzLmxpbmVXaWR0aD1udWxsO3RoaXMuc2l6ZT1udWxsO3RoaXMuY29sb3I9bnVsbDt0aGlzLnNoYWRvdz1udWxsfTt2YXIgVD1mdW5jdGlvbigpe3RoaXMuY29sb3I9bnVsbDt0aGlzLnNlcmllc0NvbG9ycz1udWxsO3RoaXMubGluZVdpZHRoPW51bGw7dGhpcy5zaGFkb3c9bnVsbDt0aGlzLmJhclBhZGRpbmc9bnVsbDt0aGlzLmJhck1hcmdpbj1udWxsO3RoaXMuYmFyV2lkdGg9bnVsbDt0aGlzLmhpZ2hsaWdodENvbG9ycz1udWxsfTt2YXIgZj1mdW5jdGlvbigpe3RoaXMuc2VyaWVzQ29sb3JzPW51bGw7dGhpcy5wYWRkaW5nPW51bGw7dGhpcy5zbGljZU1hcmdpbj1udWxsO3RoaXMuZmlsbD1udWxsO3RoaXMuc2hhZG93PW51bGw7dGhpcy5zdGFydEFuZ2xlPW51bGw7dGhpcy5saW5lV2lkdGg9bnVsbDt0aGlzLmhpZ2hsaWdodENvbG9ycz1udWxsfTt2YXIgRz1mdW5jdGlvbigpe3RoaXMuc2VyaWVzQ29sb3JzPW51bGw7dGhpcy5wYWRkaW5nPW51bGw7dGhpcy5zbGljZU1hcmdpbj1udWxsO3RoaXMuZmlsbD1udWxsO3RoaXMuc2hhZG93PW51bGw7dGhpcy5zdGFydEFuZ2xlPW51bGw7dGhpcy5saW5lV2lkdGg9bnVsbDt0aGlzLmlubmVyRGlhbWV0ZXI9bnVsbDt0aGlzLnRoaWNrbmVzcz1udWxsO3RoaXMucmluZ01hcmdpbj1udWxsO3RoaXMuaGlnaGxpZ2h0Q29sb3JzPW51bGx9O3ZhciBaPWZ1bmN0aW9uKCl7dGhpcy5jb2xvcj1udWxsO3RoaXMubGluZVdpZHRoPW51bGw7dGhpcy5zaGFkb3c9bnVsbDt0aGlzLnBhZGRpbmc9bnVsbDt0aGlzLnNlY3Rpb25NYXJnaW49bnVsbDt0aGlzLnNlcmllc0NvbG9ycz1udWxsO3RoaXMuaGlnaGxpZ2h0Q29sb3JzPW51bGx9O3ZhciBEPWZ1bmN0aW9uKCl7dGhpcy5wYWRkaW5nPW51bGw7dGhpcy5iYWNrZ3JvdW5kQ29sb3I9bnVsbDt0aGlzLnJpbmdDb2xvcj1udWxsO3RoaXMudGlja0NvbG9yPW51bGw7dGhpcy5yaW5nV2lkdGg9bnVsbDt0aGlzLmludGVydmFsQ29sb3JzPW51bGw7dGhpcy5pbnRlcnZhbElubmVyUmFkaXVzPW51bGw7dGhpcy5pbnRlcnZhbE91dGVyUmFkaXVzPW51bGw7dGhpcy5odWJSYWRpdXM9bnVsbDt0aGlzLm5lZWRsZVRoaWNrbmVzcz1udWxsO3RoaXMubmVlZGxlUGFkPW51bGx9O0wuZm4uanFwbG90Q2hpbGRUZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcykuY29udGVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlVHlwZT09M30pLnRleHQoKX07TC5mbi5qcXBsb3RHZXRDb21wdXRlZEZvbnRTdHlsZT1mdW5jdGlvbigpe3ZhciBhaz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzWzBdLCIiKTp0aGlzWzBdLmN1cnJlbnRTdHlsZTt2YXIgYWk9YWtbImZvbnQtc3R5bGUiXT9bImZvbnQtc3R5bGUiLCJmb250LXdlaWdodCIsImZvbnQtc2l6ZSIsImZvbnQtZmFtaWx5Il06WyJmb250U3R5bGUiLCJmb250V2VpZ2h0IiwiZm9udFNpemUiLCJmb250RmFtaWx5Il07dmFyIGFsPVtdO2Zvcih2YXIgYWo9MDthajxhaS5sZW5ndGg7Kythail7dmFyIGFoPVN0cmluZyhha1thaVthal1dKTtpZihhaCYmYWghPSJub3JtYWwiKXthbC5wdXNoKGFoKX19cmV0dXJuIGFsLmpvaW4oIiAiKX07TC5mbi5qcXBsb3RUb0ltYWdlQ2FudmFzPWZ1bmN0aW9uKGFqKXthaj1hanx8e307dmFyIGF2PShhai54X29mZnNldD09bnVsbCk/MDphai54X29mZnNldDt2YXIgYXg9KGFqLnlfb2Zmc2V0PT1udWxsKT8wOmFqLnlfb2Zmc2V0O3ZhciBhbD0oYWouYmFja2dyb3VuZENvbG9yPT1udWxsKT8icmdiKDI1NSwyNTUsMjU1KSI6YWouYmFja2dyb3VuZENvbG9yO2lmKEwodGhpcykud2lkdGgoKT09MHx8TCh0aGlzKS5oZWlnaHQoKT09MCl7cmV0dXJuIG51bGx9aWYoTC5qcXBsb3QudXNlX2V4Y2FudmFzKXtyZXR1cm4gbnVsbH12YXIgYW49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7dmFyIGFBPUwodGhpcykub3V0ZXJIZWlnaHQodHJ1ZSk7dmFyIGF0PUwodGhpcykub3V0ZXJXaWR0aCh0cnVlKTt2YXIgYW09TCh0aGlzKS5vZmZzZXQoKTt2YXIgYW89YW0ubGVmdDt2YXIgYXE9YW0udG9wO3ZhciBhdT0wLGFyPTA7dmFyIGF5PVsianFwbG90LXRhYmxlLWxlZ2VuZCIsImpxcGxvdC14YXhpcy10aWNrIiwianFwbG90LXgyYXhpcy10aWNrIiwianFwbG90LXlheGlzLXRpY2siLCJqcXBsb3QteTJheGlzLXRpY2siLCJqcXBsb3QteTNheGlzLXRpY2siLCJqcXBsb3QteTRheGlzLXRpY2siLCJqcXBsb3QteTVheGlzLXRpY2siLCJqcXBsb3QteTZheGlzLXRpY2siLCJqcXBsb3QteTdheGlzLXRpY2siLCJqcXBsb3QteThheGlzLXRpY2siLCJqcXBsb3QteTlheGlzLXRpY2siLCJqcXBsb3QteGF4aXMtbGFiZWwiLCJqcXBsb3QteDJheGlzLWxhYmVsIiwianFwbG90LXlheGlzLWxhYmVsIiwianFwbG90LXkyYXhpcy1sYWJlbCIsImpxcGxvdC15M2F4aXMtbGFiZWwiLCJqcXBsb3QteTRheGlzLWxhYmVsIiwianFwbG90LXk1YXhpcy1sYWJlbCIsImpxcGxvdC15NmF4aXMtbGFiZWwiLCJqcXBsb3QteTdheGlzLWxhYmVsIiwianFwbG90LXk4YXhpcy1sYWJlbCIsImpxcGxvdC15OWF4aXMtbGFiZWwiXTt2YXIgYXAsYWgsYWksYUI7Zm9yKHZhciBhej0wO2F6PGF5Lmxlbmd0aDtheisrKXtMKHRoaXMpLmZpbmQoIi4iK2F5W2F6XSkuZWFjaChmdW5jdGlvbigpe2FwPUwodGhpcykub2Zmc2V0KCkudG9wLWFxO2FoPUwodGhpcykub2Zmc2V0KCkubGVmdC1hbzthQj1haCtMKHRoaXMpLm91dGVyV2lkdGgodHJ1ZSkrYXU7YWk9YXArTCh0aGlzKS5vdXRlckhlaWdodCh0cnVlKSthcjtpZihhaDwtYXUpe2F0PWF0LWF1LWFoO2F1PS1haH1pZihhcDwtYXIpe2FBPWFBLWFyLWFwO2FyPS1hcH1pZihhQj5hdCl7YXQ9YUJ9aWYoYWk+YUEpe2FBPWFpfX0pfWFuLndpZHRoPWF0K051bWJlcihhdik7YW4uaGVpZ2h0PWFBK051bWJlcihheCk7dmFyIGFrPWFuLmdldENvbnRleHQoIjJkIik7YWsuc2F2ZSgpO2FrLmZpbGxTdHlsZT1hbDthay5maWxsUmVjdCgwLDAsYW4ud2lkdGgsYW4uaGVpZ2h0KTthay5yZXN0b3JlKCk7YWsudHJhbnNsYXRlKGF1LGFyKTthay50ZXh0QWxpZ249ImxlZnQiO2FrLnRleHRCYXNlbGluZT0idG9wIjtmdW5jdGlvbiBhQyhhRSl7dmFyIGFGPXBhcnNlSW50KEwoYUUpLmNzcygibGluZS1oZWlnaHQiKSwxMCk7aWYoaXNOYU4oYUYpKXthRj1wYXJzZUludChMKGFFKS5jc3MoImZvbnQtc2l6ZSIpLDEwKSoxLjJ9cmV0dXJuIGFGfWZ1bmN0aW9uIGFEKGFGLGFFLGFTLGFHLGFPLGFIKXt2YXIgYVE9YUMoYUYpO3ZhciBhSz1MKGFGKS5pbm5lcldpZHRoKCk7dmFyIGFMPUwoYUYpLmlubmVySGVpZ2h0KCk7dmFyIGFOPWFTLnNwbGl0KC9ccysvKTt2YXIgYVI9YU4ubGVuZ3RoO3ZhciBhUD0iIjt2YXIgYU09W107dmFyIGFVPWFPO3ZhciBhVD1hRztmb3IodmFyIGFKPTA7YUo8YVI7YUorKyl7YVArPWFOW2FKXTtpZihhRS5tZWFzdXJlVGV4dChhUCkud2lkdGg+YUspe2FNLnB1c2goYUopO2FQPSIiO2FKLS19fWlmKGFNLmxlbmd0aD09PTApe2lmKEwoYUYpLmNzcygidGV4dEFsaWduIik9PT0iY2VudGVyIil7YVQ9YUcrKGFILWFFLm1lYXN1cmVUZXh0KGFQKS53aWR0aCkvMi1hdX1hRS5maWxsVGV4dChhUyxhVCxhTyl9ZWxzZXthUD1hTi5zbGljZSgwLGFNWzBdKS5qb2luKCIgIik7aWYoTChhRikuY3NzKCJ0ZXh0QWxpZ24iKT09PSJjZW50ZXIiKXthVD1hRysoYUgtYUUubWVhc3VyZVRleHQoYVApLndpZHRoKS8yLWF1fWFFLmZpbGxUZXh0KGFQLGFULGFVKTthVSs9YVE7Zm9yKHZhciBhSj0xLGFJPWFNLmxlbmd0aDthSjxhSTthSisrKXthUD1hTi5zbGljZShhTVthSi0xXSxhTVthSl0pLmpvaW4oIiAiKTtpZihMKGFGKS5jc3MoInRleHRBbGlnbiIpPT09ImNlbnRlciIpe2FUPWFHKyhhSC1hRS5tZWFzdXJlVGV4dChhUCkud2lkdGgpLzItYXV9YUUuZmlsbFRleHQoYVAsYVQsYVUpO2FVKz1hUX1hUD1hTi5zbGljZShhTVthSi0xXSxhTi5sZW5ndGgpLmpvaW4oIiAiKTtpZihMKGFGKS5jc3MoInRleHRBbGlnbiIpPT09ImNlbnRlciIpe2FUPWFHKyhhSC1hRS5tZWFzdXJlVGV4dChhUCkud2lkdGgpLzItYXV9YUUuZmlsbFRleHQoYVAsYVQsYVUpfX1mdW5jdGlvbiBhdyhhRyxhSixhRSl7dmFyIGFOPWFHLnRhZ05hbWUudG9Mb3dlckNhc2UoKTt2YXIgYUY9TChhRykucG9zaXRpb24oKTt2YXIgYUs9d2luZG93LmdldENvbXB1dGVkU3R5bGU/d2luZG93LmdldENvbXB1dGVkU3R5bGUoYUcsIiIpOmFHLmN1cnJlbnRTdHlsZTt2YXIgYUk9YUorYUYubGVmdCtwYXJzZUludChhSy5tYXJnaW5MZWZ0LDEwKStwYXJzZUludChhSy5ib3JkZXJMZWZ0V2lkdGgsMTApK3BhcnNlSW50KGFLLnBhZGRpbmdMZWZ0LDEwKTt2YXIgYUw9YUUrYUYudG9wK3BhcnNlSW50KGFLLm1hcmdpblRvcCwxMCkrcGFyc2VJbnQoYUsuYm9yZGVyVG9wV2lkdGgsMTApK3BhcnNlSW50KGFLLnBhZGRpbmdUb3AsMTApO3ZhciBhTT1hbi53aWR0aDtpZigoYU49PSJkaXYifHxhTj09InNwYW4iKSYmIUwoYUcpLmhhc0NsYXNzKCJqcXBsb3QtaGlnaGxpZ2h0ZXItdG9vbHRpcCIpKXtMKGFHKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXthdyh0aGlzLGFJLGFMKX0pO3ZhciBhTz1MKGFHKS5qcXBsb3RDaGlsZFRleHQoKTtpZihhTyl7YWsuZm9udD1MKGFHKS5qcXBsb3RHZXRDb21wdXRlZEZvbnRTdHlsZSgpO2FrLmZpbGxTdHlsZT1MKGFHKS5jc3MoImNvbG9yIik7YUQoYUcsYWssYU8sYUksYUwsYU0pfX1lbHNle2lmKGFOPT09InRhYmxlIiYmTChhRykuaGFzQ2xhc3MoImpxcGxvdC10YWJsZS1sZWdlbmQiKSl7YWsuc3Ryb2tlU3R5bGU9TChhRykuY3NzKCJib3JkZXItdG9wLWNvbG9yIik7YWsuZmlsbFN0eWxlPUwoYUcpLmNzcygiYmFja2dyb3VuZC1jb2xvciIpO2FrLmZpbGxSZWN0KGFJLGFMLEwoYUcpLmlubmVyV2lkdGgoKSxMKGFHKS5pbm5lckhlaWdodCgpKTtpZihwYXJzZUludChMKGFHKS5jc3MoImJvcmRlci10b3Atd2lkdGgiKSwxMCk+MCl7YWsuc3Ryb2tlUmVjdChhSSxhTCxMKGFHKS5pbm5lcldpZHRoKCksTChhRykuaW5uZXJIZWlnaHQoKSl9TChhRykuZmluZCgiZGl2LmpxcGxvdC10YWJsZS1sZWdlbmQtc3dhdGNoLW91dGxpbmUiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGFVPUwodGhpcyk7YWsuc3Ryb2tlU3R5bGU9YVUuY3NzKCJib3JkZXItdG9wLWNvbG9yIik7dmFyIGFRPWFJK2FVLnBvc2l0aW9uKCkubGVmdDt2YXIgYVI9YUwrYVUucG9zaXRpb24oKS50b3A7YWsuc3Ryb2tlUmVjdChhUSxhUixhVS5pbm5lcldpZHRoKCksYVUuaW5uZXJIZWlnaHQoKSk7YVErPXBhcnNlSW50KGFVLmNzcygicGFkZGluZy1sZWZ0IiksMTApO2FSKz1wYXJzZUludChhVS5jc3MoInBhZGRpbmctdG9wIiksMTApO3ZhciBhVD1hVS5pbm5lckhlaWdodCgpLTIqcGFyc2VJbnQoYVUuY3NzKCJwYWRkaW5nLXRvcCIpLDEwKTt2YXIgYVA9YVUuaW5uZXJXaWR0aCgpLTIqcGFyc2VJbnQoYVUuY3NzKCJwYWRkaW5nLWxlZnQiKSwxMCk7dmFyIGFTPWFVLmNoaWxkcmVuKCJkaXYuanFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2giKTthay5maWxsU3R5bGU9YVMuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIik7YWsuZmlsbFJlY3QoYVEsYVIsYVAsYVQpfSk7TChhRykuZmluZCgidGQuanFwbG90LXRhYmxlLWxlZ2VuZC1sYWJlbCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgYVI9TCh0aGlzKTt2YXIgYVA9YUkrYVIucG9zaXRpb24oKS5sZWZ0O3ZhciBhUT1hTCthUi5wb3NpdGlvbigpLnRvcCtwYXJzZUludChhUi5jc3MoInBhZGRpbmctdG9wIiksMTApO2FrLmZvbnQ9YVIuanFwbG90R2V0Q29tcHV0ZWRGb250U3R5bGUoKTthay5maWxsU3R5bGU9YVIuY3NzKCJjb2xvciIpO2FEKGFSLGFrLGFSLnRleHQoKSxhUCxhUSxhTSl9KTt2YXIgYUg9bnVsbH1lbHNle2lmKGFOPT0iY2FudmFzIil7YWsuZHJhd0ltYWdlKGFHLGFJLGFMKX19fX1MKHRoaXMpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpe2F3KHRoaXMsYXYsYXgpfSk7cmV0dXJuIGFufTtMLmZuLmpxcGxvdFRvSW1hZ2VTdHI9ZnVuY3Rpb24oYWkpe3ZhciBhaD1MKHRoaXMpLmpxcGxvdFRvSW1hZ2VDYW52YXMoYWkpO2lmKGFoKXtyZXR1cm4gYWgudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1lbHNle3JldHVybiBudWxsfX07TC5mbi5qcXBsb3RUb0ltYWdlRWxlbT1mdW5jdGlvbihhaCl7dmFyIGFpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpO3ZhciBhaj1MKHRoaXMpLmpxcGxvdFRvSW1hZ2VTdHIoYWgpO2FpLnNyYz1hajtyZXR1cm4gYWl9O0wuZm4uanFwbG90VG9JbWFnZUVsZW1TdHI9ZnVuY3Rpb24oYWgpe3ZhciBhaT0iPGltZyBzcmM9IitMKHRoaXMpLmpxcGxvdFRvSW1hZ2VTdHIoYWgpKyIgLz4iO3JldHVybiBhaX07TC5mbi5qcXBsb3RTYXZlSW1hZ2U9ZnVuY3Rpb24oKXt2YXIgYWg9TCh0aGlzKS5qcXBsb3RUb0ltYWdlU3RyKHt9KTtpZihhaCl7d2luZG93LmxvY2F0aW9uLmhyZWY9YWgucmVwbGFjZSgiaW1hZ2UvcG5nIiwiaW1hZ2Uvb2N0ZXQtc3RyZWFtIil9fTtMLmZuLmpxcGxvdFZpZXdJbWFnZT1mdW5jdGlvbigpe3ZhciBhaT1MKHRoaXMpLmpxcGxvdFRvSW1hZ2VFbGVtU3RyKHt9KTt2YXIgYWo9TCh0aGlzKS5qcXBsb3RUb0ltYWdlU3RyKHt9KTtpZihhaSl7dmFyIGFoPXdpbmRvdy5vcGVuKCIiKTthaC5kb2N1bWVudC5vcGVuKCJpbWFnZS9wbmciKTthaC5kb2N1bWVudC53cml0ZShhaSk7YWguZG9jdW1lbnQuY2xvc2UoKTthaD1udWxsfX07dmFyIGFnPWZ1bmN0aW9uKCl7dGhpcy5zeW50YXg9YWcuY29uZmlnLnN5bnRheDt0aGlzLl90eXBlPSJqc0RhdGUiO3RoaXMucHJveHk9bmV3IERhdGUoKTt0aGlzLm9wdGlvbnM9e307dGhpcy5sb2NhbGU9YWcucmVnaW9uYWwuZ2V0TG9jYWxlKCk7dGhpcy5mb3JtYXRTdHJpbmc9IiI7dGhpcy5kZWZhdWx0Q2VudHVyeT1hZy5jb25maWcuZGVmYXVsdENlbnR1cnk7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6aWYobChhcmd1bWVudHNbMF0pPT0iW29iamVjdCBPYmplY3RdIiYmYXJndW1lbnRzWzBdLl90eXBlIT0ianNEYXRlIil7dmFyIGFqPXRoaXMub3B0aW9ucz1hcmd1bWVudHNbMF07dGhpcy5zeW50YXg9YWouc3ludGF4fHx0aGlzLnN5bnRheDt0aGlzLmRlZmF1bHRDZW50dXJ5PWFqLmRlZmF1bHRDZW50dXJ5fHx0aGlzLmRlZmF1bHRDZW50dXJ5O3RoaXMucHJveHk9YWcuY3JlYXRlRGF0ZShhai5kYXRlKX1lbHNle3RoaXMucHJveHk9YWcuY3JlYXRlRGF0ZShhcmd1bWVudHNbMF0pfWJyZWFrO2RlZmF1bHQ6dmFyIGFoPVtdO2Zvcih2YXIgYWk9MDthaTxhcmd1bWVudHMubGVuZ3RoO2FpKyspe2FoLnB1c2goYXJndW1lbnRzW2FpXSl9dGhpcy5wcm94eT1uZXcgRGF0ZSgpO3RoaXMucHJveHkuc2V0RnVsbFllYXIuYXBwbHkodGhpcy5wcm94eSxhaC5zbGljZSgwLDMpKTtpZihhaC5zbGljZSgzKS5sZW5ndGgpe3RoaXMucHJveHkuc2V0SG91cnMuYXBwbHkodGhpcy5wcm94eSxhaC5zbGljZSgzKSl9YnJlYWt9fTthZy5jb25maWc9e2RlZmF1bHRMb2NhbGU6ImVuIixzeW50YXg6InBlcmwiLGRlZmF1bHRDZW50dXJ5OjE5MDB9O2FnLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYWosYWkpe3ZhciBhaD1FW2FpXXx8RS5kYXk7aWYodHlwZW9mIGFoPT0ibnVtYmVyIil7dGhpcy5wcm94eS5zZXRUaW1lKHRoaXMucHJveHkuZ2V0VGltZSgpKyhhaCphaikpfWVsc2V7YWguYWRkKHRoaXMsYWopfXJldHVybiB0aGlzfTthZy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGFnKHRoaXMucHJveHkuZ2V0VGltZSgpKX07YWcucHJvdG90eXBlLmdldFV0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3h5LmdldFRpbWV6b25lT2Zmc2V0KCkqNjAwMDB9O2FnLnByb3RvdHlwZS5kaWZmPWZ1bmN0aW9uKGFpLGFsLGFoKXthaT1uZXcgYWcoYWkpO2lmKGFpPT09bnVsbCl7cmV0dXJuIG51bGx9dmFyIGFqPUVbYWxdfHxFLmRheTtpZih0eXBlb2YgYWo9PSJudW1iZXIiKXt2YXIgYWs9KHRoaXMucHJveHkuZ2V0VGltZSgpLWFpLnByb3h5LmdldFRpbWUoKSkvYWp9ZWxzZXt2YXIgYWs9YWouZGlmZih0aGlzLnByb3h5LGFpLnByb3h5KX1yZXR1cm4oYWg/YWs6TWF0aFthaz4wPyJmbG9vciI6ImNlaWwiXShhaykpfTthZy5wcm90b3R5cGUuZ2V0QWJickRheU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gYWcucmVnaW9uYWxbdGhpcy5sb2NhbGVdWyJkYXlOYW1lc1Nob3J0Il1bdGhpcy5wcm94eS5nZXREYXkoKV19O2FnLnByb3RvdHlwZS5nZXRBYmJyTW9udGhOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGFnLnJlZ2lvbmFsW3RoaXMubG9jYWxlXVsibW9udGhOYW1lc1Nob3J0Il1bdGhpcy5wcm94eS5nZXRNb250aCgpXX07YWcucHJvdG90eXBlLmdldEFNUE09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm94eS5nZXRIb3VycygpPj0xMj8iUE0iOiJBTSJ9O2FnLnByb3RvdHlwZS5nZXRBbVBtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJveHkuZ2V0SG91cnMoKT49MTI/InBtIjoiYW0ifTthZy5wcm90b3R5cGUuZ2V0Q2VudHVyeT1mdW5jdGlvbigpe3JldHVybiBwYXJzZUludCh0aGlzLnByb3h5LmdldEZ1bGxZZWFyKCkvMTAwLDEwKX07YWcucHJvdG90eXBlLmdldERhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm94eS5nZXREYXRlKCl9O2FnLnByb3RvdHlwZS5nZXREYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm94eS5nZXREYXkoKX07YWcucHJvdG90eXBlLmdldERheU9mV2Vlaz1mdW5jdGlvbigpe3ZhciBhaD10aGlzLnByb3h5LmdldERheSgpO3JldHVybiBhaD09PTA/NzphaH07YWcucHJvdG90eXBlLmdldERheU9mWWVhcj1mdW5jdGlvbigpe3ZhciBhaT10aGlzLnByb3h5O3ZhciBhaD1haS1uZXcgRGF0ZSgiIithaS5nZXRGdWxsWWVhcigpKyIvMS8xIEdNVCIpO2FoKz1haS5nZXRUaW1lem9uZU9mZnNldCgpKjYwMDAwO2FpPW51bGw7cmV0dXJuIHBhcnNlSW50KGFoLzYwMDAwLzYwLzI0LDEwKSsxfTthZy5wcm90b3R5cGUuZ2V0RGF5TmFtZT1mdW5jdGlvbigpe3JldHVybiBhZy5yZWdpb25hbFt0aGlzLmxvY2FsZV1bImRheU5hbWVzIl1bdGhpcy5wcm94eS5nZXREYXkoKV19O2FnLnByb3RvdHlwZS5nZXRGdWxsV2Vla09mWWVhcj1mdW5jdGlvbigpe3ZhciBhaz10aGlzLnByb3h5O3ZhciBhaD10aGlzLmdldERheU9mWWVhcigpO3ZhciBhaj02LWFrLmdldERheSgpO3ZhciBhaT1wYXJzZUludCgoYWgrYWopLzcsMTApO3JldHVybiBhaX07YWcucHJvdG90eXBlLmdldEZ1bGxZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJveHkuZ2V0RnVsbFllYXIoKX07YWcucHJvdG90eXBlLmdldEdtdE9mZnNldD1mdW5jdGlvbigpe3ZhciBhaD10aGlzLnByb3h5LmdldFRpbWV6b25lT2Zmc2V0KCkvNjA7dmFyIGFpPWFoPDA/IisiOiItIjthaD1NYXRoLmFicyhhaCk7cmV0dXJuIGFpK04oTWF0aC5mbG9vcihhaCksMikrIjoiK04oKGFoJTEpKjYwLDIpfTthZy5wcm90b3R5cGUuZ2V0SG91cnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm94eS5nZXRIb3VycygpfTthZy5wcm90b3R5cGUuZ2V0SG91cnMxMj1mdW5jdGlvbigpe3ZhciBhaD10aGlzLnByb3h5LmdldEhvdXJzKCk7cmV0dXJuIGFoPjEyP2FoLTEyOihhaD09MD8xMjphaCl9O2FnLnByb3RvdHlwZS5nZXRJc29XZWVrPWZ1bmN0aW9uKCl7dmFyIGFrPXRoaXMucHJveHk7dmFyIGFqPXRoaXMuZ2V0V2Vla09mWWVhcigpO3ZhciBhaD0obmV3IERhdGUoIiIrYWsuZ2V0RnVsbFllYXIoKSsiLzEvMSIpKS5nZXREYXkoKTt2YXIgYWk9YWorKGFoPjR8fGFoPD0xPzA6MSk7aWYoYWk9PTUzJiYobmV3IERhdGUoIiIrYWsuZ2V0RnVsbFllYXIoKSsiLzEyLzMxIikpLmdldERheSgpPDQpe2FpPTF9ZWxzZXtpZihhaT09PTApe2FrPW5ldyBhZyhuZXcgRGF0ZSgiIisoYWsuZ2V0RnVsbFllYXIoKS0xKSsiLzEyLzMxIikpO2FpPWFrLmdldElzb1dlZWsoKX19YWs9bnVsbDtyZXR1cm4gYWl9O2FnLnByb3RvdHlwZS5nZXRNaWxsaXNlY29uZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm94eS5nZXRNaWxsaXNlY29uZHMoKX07YWcucHJvdG90eXBlLmdldE1pbnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm94eS5nZXRNaW51dGVzKCl9O2FnLnByb3RvdHlwZS5nZXRNb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3h5LmdldE1vbnRoKCl9O2FnLnByb3RvdHlwZS5nZXRNb250aE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gYWcucmVnaW9uYWxbdGhpcy5sb2NhbGVdWyJtb250aE5hbWVzIl1bdGhpcy5wcm94eS5nZXRNb250aCgpXX07YWcucHJvdG90eXBlLmdldE1vbnRoTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJveHkuZ2V0TW9udGgoKSsxfTthZy5wcm90b3R5cGUuZ2V0U2Vjb25kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3h5LmdldFNlY29uZHMoKX07YWcucHJvdG90eXBlLmdldFNob3J0WWVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3h5LmdldFllYXIoKSUxMDB9O2FnLnByb3RvdHlwZS5nZXRUaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJveHkuZ2V0VGltZSgpfTthZy5wcm90b3R5cGUuZ2V0VGltZXpvbmVBYmJyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJveHkudG9TdHJpbmcoKS5yZXBsYWNlKC9eLipcKChbXildKylcKSQvLCIkMSIpfTthZy5wcm90b3R5cGUuZ2V0VGltZXpvbmVOYW1lPWZ1bmN0aW9uKCl7dmFyIGFoPS8oPzpcKCguKylcKSR8IChbQS1aXXszfSkgKS8uZXhlYyh0aGlzLnRvU3RyaW5nKCkpO3JldHVybiBhaFsxXXx8YWhbMl18fCJHTVQiK3RoaXMuZ2V0R210T2Zmc2V0KCl9O2FnLnByb3RvdHlwZS5nZXRUaW1lem9uZU9mZnNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3h5LmdldFRpbWV6b25lT2Zmc2V0KCl9O2FnLnByb3RvdHlwZS5nZXRXZWVrT2ZZZWFyPWZ1bmN0aW9uKCl7dmFyIGFoPXRoaXMuZ2V0RGF5T2ZZZWFyKCk7dmFyIGFqPTctdGhpcy5nZXREYXlPZldlZWsoKTt2YXIgYWk9cGFyc2VJbnQoKGFoK2FqKS83LDEwKTtyZXR1cm4gYWl9O2FnLnByb3RvdHlwZS5nZXRVbml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQodGhpcy5wcm94eS5nZXRUaW1lKCkvMTAwMCwwKX07YWcucHJvdG90eXBlLmdldFllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm94eS5nZXRZZWFyKCl9O2FnLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKGFoKXthaD1haHx8ImRheSI7cmV0dXJuIHRoaXMuY2xvbmUoKS5hZGQoMSxhaCl9O2FnLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnRoaXMucHJveHk9bmV3IERhdGUoKTticmVhaztjYXNlIDE6aWYobChhcmd1bWVudHNbMF0pPT0iW29iamVjdCBPYmplY3RdIiYmYXJndW1lbnRzWzBdLl90eXBlIT0ianNEYXRlIil7dmFyIGFqPXRoaXMub3B0aW9ucz1hcmd1bWVudHNbMF07dGhpcy5zeW50YXg9YWouc3ludGF4fHx0aGlzLnN5bnRheDt0aGlzLmRlZmF1bHRDZW50dXJ5PWFqLmRlZmF1bHRDZW50dXJ5fHx0aGlzLmRlZmF1bHRDZW50dXJ5O3RoaXMucHJveHk9YWcuY3JlYXRlRGF0ZShhai5kYXRlKX1lbHNle3RoaXMucHJveHk9YWcuY3JlYXRlRGF0ZShhcmd1bWVudHNbMF0pfWJyZWFrO2RlZmF1bHQ6dmFyIGFoPVtdO2Zvcih2YXIgYWk9MDthaTxhcmd1bWVudHMubGVuZ3RoO2FpKyspe2FoLnB1c2goYXJndW1lbnRzW2FpXSl9dGhpcy5wcm94eT1uZXcgRGF0ZSgpO3RoaXMucHJveHkuc2V0RnVsbFllYXIuYXBwbHkodGhpcy5wcm94eSxhaC5zbGljZSgwLDMpKTtpZihhaC5zbGljZSgzKS5sZW5ndGgpe3RoaXMucHJveHkuc2V0SG91cnMuYXBwbHkodGhpcy5wcm94eSxhaC5zbGljZSgzKSl9YnJlYWt9cmV0dXJuIHRoaXN9O2FnLnByb3RvdHlwZS5zZXREYXRlPWZ1bmN0aW9uKGFoKXt0aGlzLnByb3h5LnNldERhdGUoYWgpO3JldHVybiB0aGlzfTthZy5wcm90b3R5cGUuc2V0RnVsbFllYXI9ZnVuY3Rpb24oKXt0aGlzLnByb3h5LnNldEZ1bGxZZWFyLmFwcGx5KHRoaXMucHJveHksYXJndW1lbnRzKTtyZXR1cm4gdGhpc307YWcucHJvdG90eXBlLnNldEhvdXJzPWZ1bmN0aW9uKCl7dGhpcy5wcm94eS5zZXRIb3Vycy5hcHBseSh0aGlzLnByb3h5LGFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9O2FnLnByb3RvdHlwZS5zZXRNaWxsaXNlY29uZHM9ZnVuY3Rpb24oYWgpe3RoaXMucHJveHkuc2V0TWlsbGlzZWNvbmRzKGFoKTtyZXR1cm4gdGhpc307YWcucHJvdG90eXBlLnNldE1pbnV0ZXM9ZnVuY3Rpb24oKXt0aGlzLnByb3h5LnNldE1pbnV0ZXMuYXBwbHkodGhpcy5wcm94eSxhcmd1bWVudHMpO3JldHVybiB0aGlzfTthZy5wcm90b3R5cGUuc2V0TW9udGg9ZnVuY3Rpb24oKXt0aGlzLnByb3h5LnNldE1vbnRoLmFwcGx5KHRoaXMucHJveHksYXJndW1lbnRzKTtyZXR1cm4gdGhpc307YWcucHJvdG90eXBlLnNldFNlY29uZHM9ZnVuY3Rpb24oKXt0aGlzLnByb3h5LnNldFNlY29uZHMuYXBwbHkodGhpcy5wcm94eSxhcmd1bWVudHMpO3JldHVybiB0aGlzfTthZy5wcm90b3R5cGUuc2V0VGltZT1mdW5jdGlvbihhaCl7dGhpcy5wcm94eS5zZXRUaW1lKGFoKTtyZXR1cm4gdGhpc307YWcucHJvdG90eXBlLnNldFllYXI9ZnVuY3Rpb24oKXt0aGlzLnByb3h5LnNldFllYXIuYXBwbHkodGhpcy5wcm94eSxhcmd1bWVudHMpO3JldHVybiB0aGlzfTthZy5wcm90b3R5cGUuc3RyZnRpbWU9ZnVuY3Rpb24oYWgpe2FoPWFofHx0aGlzLmZvcm1hdFN0cmluZ3x8YWcucmVnaW9uYWxbdGhpcy5sb2NhbGVdWyJmb3JtYXRTdHJpbmciXTtyZXR1cm4gYWcuc3RyZnRpbWUodGhpcyxhaCx0aGlzLnN5bnRheCl9O2FnLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3h5LnRvU3RyaW5nKCl9O2FnLnByb3RvdHlwZS50b1ltZEludD1mdW5jdGlvbigpe3JldHVybih0aGlzLnByb3h5LmdldEZ1bGxZZWFyKCkqMTAwMDApKyh0aGlzLmdldE1vbnRoTnVtYmVyKCkqMTAwKSt0aGlzLnByb3h5LmdldERhdGUoKX07YWcucmVnaW9uYWw9e2VuOnttb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGZvcm1hdFN0cmluZzoiJVktJW0tJWQgJUg6JU06JVMifSxmcjp7bW9udGhOYW1lczpbIkphbnZpZXIiLCJGw6l2cmllciIsIk1hcnMiLCJBdnJpbCIsIk1haSIsIkp1aW4iLCJKdWlsbGV0IiwiQW/Du3QiLCJTZXB0ZW1icmUiLCJPY3RvYnJlIiwiTm92ZW1icmUiLCJEw6ljZW1icmUiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGw6l2IiwiTWFyIiwiQXZyIiwiTWFpIiwiSnVuIiwiSnVsIiwiQW/DuyIsIlNlcCIsIk9jdCIsIk5vdiIsIkTDqWMiXSxkYXlOYW1lczpbIkRpbWFuY2hlIiwiTHVuZGkiLCJNYXJkaSIsIk1lcmNyZWRpIiwiSmV1ZGkiLCJWZW5kcmVkaSIsIlNhbWVkaSJdLGRheU5hbWVzU2hvcnQ6WyJEaW0iLCJMdW4iLCJNYXIiLCJNZXIiLCJKZXUiLCJWZW4iLCJTYW0iXSxmb3JtYXRTdHJpbmc6IiVZLSVtLSVkICVIOiVNOiVTIn0sZGU6e21vbnRoTmFtZXM6WyJKYW51YXIiLCJGZWJydWFyIiwiTcOkcnoiLCJBcHJpbCIsIk1haSIsIkp1bmkiLCJKdWxpIiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2t0b2JlciIsIk5vdmVtYmVyIiwiRGV6ZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNw6RyIiwiQXByIiwiTWFpIiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2t0IiwiTm92IiwiRGV6Il0sZGF5TmFtZXM6WyJTb25udGFnIiwiTW9udGFnIiwiRGllbnN0YWciLCJNaXR0d29jaCIsIkRvbm5lcnN0YWciLCJGcmVpdGFnIiwiU2Ftc3RhZyJdLGRheU5hbWVzU2hvcnQ6WyJTbyIsIk1vIiwiRGkiLCJNaSIsIkRvIiwiRnIiLCJTYSJdLGZvcm1hdFN0cmluZzoiJVktJW0tJWQgJUg6JU06JVMifSxlczp7bW9udGhOYW1lczpbIkVuZXJvIiwiRmVicmVybyIsIk1hcnpvIiwiQWJyaWwiLCJNYXlvIiwiSnVuaW8iLCJKdWxpbyIsIkFnb3N0byIsIlNlcHRpZW1icmUiLCJPY3R1YnJlIiwiTm92aWVtYnJlIiwiRGljaWVtYnJlIl0sbW9udGhOYW1lc1Nob3J0OlsiRW5lIiwiRmViIiwiTWFyIiwiQWJyIiwiTWF5IiwiSnVuIiwiSnVsIiwiQWdvIiwiU2VwIiwiT2N0IiwiTm92IiwiRGljIl0sZGF5TmFtZXM6WyJEb21pbmdvIiwiTHVuZXMiLCJNYXJ0ZXMiLCJNaSZlYWN1dGU7cmNvbGVzIiwiSnVldmVzIiwiVmllcm5lcyIsIlMmYWFjdXRlO2JhZG8iXSxkYXlOYW1lc1Nob3J0OlsiRG9tIiwiTHVuIiwiTWFyIiwiTWkmZWFjdXRlOyIsIkp1diIsIlZpZSIsIlMmYWFjdXRlO2IiXSxmb3JtYXRTdHJpbmc6IiVZLSVtLSVkICVIOiVNOiVTIn0scnU6e21vbnRoTmFtZXM6WyLQr9C90LLQsNGA0YwiLCLQpNC10LLRgNCw0LvRjCIsItCc0LDRgNGCIiwi0JDQv9GA0LXQu9GMIiwi0JzQsNC5Iiwi0JjRjtC90YwiLCLQmNGO0LvRjCIsItCQ0LLQs9GD0YHRgiIsItCh0LXQvdGC0Y/QsdGA0YwiLCLQntC60YLRj9Cx0YDRjCIsItCd0L7Rj9Cx0YDRjCIsItCU0LXQutCw0LHRgNGMIl0sbW9udGhOYW1lc1Nob3J0Olsi0K/QvdCyIiwi0KTQtdCyIiwi0JzQsNGAIiwi0JDQv9GAIiwi0JzQsNC5Iiwi0JjRjtC9Iiwi0JjRjtC7Iiwi0JDQstCzIiwi0KHQtdC9Iiwi0J7QutGCIiwi0J3QvtGPIiwi0JTQtdC6Il0sZGF5TmFtZXM6WyLQstC+0YHQutGA0LXRgdC10L3RjNC1Iiwi0L/QvtC90LXQtNC10LvRjNC90LjQuiIsItCy0YLQvtGA0L3QuNC6Iiwi0YHRgNC10LTQsCIsItGH0LXRgtCy0LXRgNCzIiwi0L/Rj9GC0L3QuNGG0LAiLCLRgdGD0LHQsdC+0YLQsCJdLGRheU5hbWVzU2hvcnQ6WyLQstGB0LoiLCLQv9C90LQiLCLQstGC0YAiLCLRgdGA0LQiLCLRh9GC0LIiLCLQv9GC0L0iLCLRgdCx0YIiXSxmb3JtYXRTdHJpbmc6IiVZLSVtLSVkICVIOiVNOiVTIn0sYXI6e21vbnRoTmFtZXM6WyLZg9in2YbZiNmGINin2YTYq9in2YbZiiIsIti02KjYp9i3Iiwi2KLYsNin2LEiLCLZhtmK2LPYp9mGIiwi2KLYsNin2LEiLCLYrdiy2YrYsdin2YYiLCLYqtmF2YjYsiIsItii2KgiLCLYo9mK2YTZiNmEIiwi2KrYtNix2YrZhiDYp9mE2KPZiNmEIiwi2KrYtNix2YrZhiDYp9mE2KvYp9mG2YoiLCLZg9in2YbZiNmGINin2YTYo9mI2YQiXSxtb250aE5hbWVzU2hvcnQ6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSxkYXlOYW1lczpbItin2YTYs9io2KoiLCLYp9mE2KPYrdivIiwi2KfZhNin2KvZhtmK2YYiLCLYp9mE2KvZhNin2KvYp9ihIiwi2KfZhNij2LHYqNi52KfYoSIsItin2YTYrtmF2YrYsyIsItin2YTYrNmF2LnYqSJdLGRheU5hbWVzU2hvcnQ6WyLYs9io2KoiLCLYo9it2K8iLCLYp9ir2YbZitmGIiwi2KvZhNin2KvYp9ihIiwi2KPYsdio2LnYp9ihIiwi2K7ZhdmK2LMiLCLYrNmF2LnYqSJdLGZvcm1hdFN0cmluZzoiJVktJW0tJWQgJUg6JU06JVMifSxwdDp7bW9udGhOYW1lczpbIkphbmVpcm8iLCJGZXZlcmVpcm8iLCJNYXImY2NlZGlsO28iLCJBYnJpbCIsIk1haW8iLCJKdW5obyIsIkp1bGhvIiwiQWdvc3RvIiwiU2V0ZW1icm8iLCJPdXR1YnJvIiwiTm92ZW1icm8iLCJEZXplbWJybyJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZldiIsIk1hciIsIkFiciIsIk1haSIsIkp1biIsIkp1bCIsIkFnbyIsIlNldCIsIk91dCIsIk5vdiIsIkRleiJdLGRheU5hbWVzOlsiRG9taW5nbyIsIlNlZ3VuZGEtZmVpcmEiLCJUZXImY2NlZGlsO2EtZmVpcmEiLCJRdWFydGEtZmVpcmEiLCJRdWludGEtZmVpcmEiLCJTZXh0YS1mZWlyYSIsIlMmYWFjdXRlO2JhZG8iXSxkYXlOYW1lc1Nob3J0OlsiRG9tIiwiU2VnIiwiVGVyIiwiUXVhIiwiUXVpIiwiU2V4IiwiUyZhYWN1dGU7YiJdLGZvcm1hdFN0cmluZzoiJVktJW0tJWQgJUg6JU06JVMifSwicHQtQlIiOnttb250aE5hbWVzOlsiSmFuZWlybyIsIkZldmVyZWlybyIsIk1hciZjY2VkaWw7byIsIkFicmlsIiwiTWFpbyIsIkp1bmhvIiwiSnVsaG8iLCJBZ29zdG8iLCJTZXRlbWJybyIsIk91dHVicm8iLCJOb3ZlbWJybyIsIkRlemVtYnJvIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmV2IiwiTWFyIiwiQWJyIiwiTWFpIiwiSnVuIiwiSnVsIiwiQWdvIiwiU2V0IiwiT3V0IiwiTm92IiwiRGV6Il0sZGF5TmFtZXM6WyJEb21pbmdvIiwiU2VndW5kYS1mZWlyYSIsIlRlciZjY2VkaWw7YS1mZWlyYSIsIlF1YXJ0YS1mZWlyYSIsIlF1aW50YS1mZWlyYSIsIlNleHRhLWZlaXJhIiwiUyZhYWN1dGU7YmFkbyJdLGRheU5hbWVzU2hvcnQ6WyJEb20iLCJTZWciLCJUZXIiLCJRdWEiLCJRdWkiLCJTZXgiLCJTJmFhY3V0ZTtiIl0sZm9ybWF0U3RyaW5nOiIlWS0lbS0lZCAlSDolTTolUyJ9LHBsOnttb250aE5hbWVzOlsiU3R5Y3plxYQiLCJMdXR5IiwiTWFyemVjIiwiS3dpZWNpZcWEIiwiTWFqIiwiQ3plcndpZWMiLCJMaXBpZWMiLCJTaWVycGllxYQiLCJXcnplc2llxYQiLCJQYcW6ZHppZXJuaWsiLCJMaXN0b3BhZCIsIkdydWR6aWXFhCJdLG1vbnRoTmFtZXNTaG9ydDpbIlN0eSIsIkx1dCIsIk1hciIsIkt3aSIsIk1haiIsIkN6ZSIsIkxpcCIsIlNpZSIsIldyeiIsIlBhxboiLCJMaXMiLCJHcnUiXSxkYXlOYW1lczpbIk5pZWR6aWVsYSIsIlBvbmllZHppYcWCZWsiLCJXdG9yZWsiLCLFmnJvZGEiLCJDendhcnRlayIsIlBpxIV0ZWsiLCJTb2JvdGEiXSxkYXlOYW1lc1Nob3J0OlsiTmkiLCJQbiIsIld0IiwixZpyIiwiQ3oiLCJQdCIsIlNiIl0sZm9ybWF0U3RyaW5nOiIlWS0lbS0lZCAlSDolTTolUyJ9LG5sOnttb250aE5hbWVzOlsiSmFudWFyaSIsIkZlYnJ1YXJpIiwiTWFhcnQiLCJBcHJpbCIsIk1laSIsIkp1bmkiLCJKdWx5IiwiQXVndXN0dXMiLCJTZXB0ZW1iZXIiLCJPa3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1laSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9rdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOiIsIlsiWm9uZGFnIiwiTWFhbmRhZyIsIkRpbnNkYWciLCJXb2Vuc2RhZyIsIkRvbmRlcmRhZyIsIlZyaWpkYWciLCJaYXRlcmRhZyJdLGRheU5hbWVzU2hvcnQ6WyJabyIsIk1hIiwiRGkiLCJXbyIsIkRvIiwiVnIiLCJaYSJdLGZvcm1hdFN0cmluZzoiJVktJW0tJWQgJUg6JU06JVMifSxzdjp7bW9udGhOYW1lczpbImphbnVhcmkiLCJmZWJydWFyaSIsIm1hcnMiLCJhcHJpbCIsIm1haiIsImp1bmkiLCJqdWxpIiwiYXVndXN0aSIsInNlcHRlbWJlciIsIm9rdG9iZXIiLCJub3ZlbWJlciIsImRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiamFuIiwiZmViIiwibWFyIiwiYXByIiwibWFqIiwianVuIiwianVsIiwiYXVnIiwic2VwIiwib2t0Iiwibm92IiwiZGVjIl0sZGF5TmFtZXM6WyJzw7ZuZGFnIiwibcOlbmRhZyIsInRpc2RhZyIsIm9uc2RhZyIsInRvcnNkYWciLCJmcmVkYWciLCJsw7ZyZGFnIl0sZGF5TmFtZXNTaG9ydDpbInPDtm4iLCJtw6VuIiwidGlzIiwib25zIiwidG9yIiwiZnJlIiwibMO2ciJdLGZvcm1hdFN0cmluZzoiJVktJW0tJWQgJUg6JU06JVMifX07YWcucmVnaW9uYWxbImVuLVVTIl09YWcucmVnaW9uYWxbImVuLUdCIl09YWcucmVnaW9uYWwuZW47YWcucmVnaW9uYWwuZ2V0TG9jYWxlPWZ1bmN0aW9uKCl7dmFyIGFoPWFnLmNvbmZpZy5kZWZhdWx0TG9jYWxlO2lmKGRvY3VtZW50JiZkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpJiZkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdLmxhbmcpe2FoPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF0ubGFuZztpZighYWcucmVnaW9uYWwuaGFzT3duUHJvcGVydHkoYWgpKXthaD1hZy5jb25maWcuZGVmYXVsdExvY2FsZX19cmV0dXJuIGFofTt2YXIgQz0yNCo2MCo2MCoxMDAwO3ZhciBOPWZ1bmN0aW9uKGFoLGFrKXthaD1TdHJpbmcoYWgpO3ZhciBhaT1hay1haC5sZW5ndGg7dmFyIGFqPVN0cmluZyhNYXRoLnBvdygxMCxhaSkpLnNsaWNlKDEpO3JldHVybiBhai5jb25jYXQoYWgpfTt2YXIgRT17bWlsbGlzZWNvbmQ6MSxzZWNvbmQ6MTAwMCxtaW51dGU6NjAqMTAwMCxob3VyOjYwKjYwKjEwMDAsZGF5OkMsd2Vlazo3KkMsbW9udGg6e2FkZDpmdW5jdGlvbihhaixhaCl7RS55ZWFyLmFkZChhaixNYXRoW2FoPjA/ImZsb29yIjoiY2VpbCJdKGFoLzEyKSk7dmFyIGFpPWFqLmdldE1vbnRoKCkrKGFoJTEyKTtpZihhaT09MTIpe2FpPTA7YWouc2V0WWVhcihhai5nZXRGdWxsWWVhcigpKzEpfWVsc2V7aWYoYWk9PS0xKXthaT0xMTthai5zZXRZZWFyKGFqLmdldEZ1bGxZZWFyKCktMSl9fWFqLnNldE1vbnRoKGFpKX0sZGlmZjpmdW5jdGlvbihhbCxhail7dmFyIGFoPWFsLmdldEZ1bGxZZWFyKCktYWouZ2V0RnVsbFllYXIoKTt2YXIgYWk9YWwuZ2V0TW9udGgoKS1hai5nZXRNb250aCgpKyhhaCoxMik7dmFyIGFrPWFsLmdldERhdGUoKS1hai5nZXREYXRlKCk7cmV0dXJuIGFpKyhhay8zMCl9fSx5ZWFyOnthZGQ6ZnVuY3Rpb24oYWksYWgpe2FpLnNldFllYXIoYWkuZ2V0RnVsbFllYXIoKStNYXRoW2FoPjA/ImZsb29yIjoiY2VpbCJdKGFoKSl9LGRpZmY6ZnVuY3Rpb24oYWksYWgpe3JldHVybiBFLm1vbnRoLmRpZmYoYWksYWgpLzEyfX19O2Zvcih2YXIgWSBpbiBFKXtpZihZLnN1YnN0cmluZyhZLmxlbmd0aC0xKSE9InMiKXtFW1krInMiXT1FW1ldfX12YXIgSD1mdW5jdGlvbihhbCxhayxhaSl7aWYoYWcuZm9ybWF0c1thaV1bInNob3J0Y3V0cyJdW2FrXSl7cmV0dXJuIGFnLnN0cmZ0aW1lKGFsLGFnLmZvcm1hdHNbYWldWyJzaG9ydGN1dHMiXVtha10sYWkpfWVsc2V7dmFyIGFoPShhZy5mb3JtYXRzW2FpXVsiY29kZXMiXVtha118fCIiKS5zcGxpdCgiLiIpO3ZhciBhaj1hbFsiZ2V0IithaFswXV0/YWxbImdldCIrYWhbMF1dKCk6IiI7aWYoYWhbMV0pe2FqPU4oYWosYWhbMV0pfXJldHVybiBhan19O2FnLnN0cmZ0aW1lPWZ1bmN0aW9uKGFuLGFrLGFqLGFvKXt2YXIgYWk9InBlcmwiO3ZhciBhbT1hZy5yZWdpb25hbC5nZXRMb2NhbGUoKTtpZihhaiYmYWcuZm9ybWF0cy5oYXNPd25Qcm9wZXJ0eShhaikpe2FpPWFqfWVsc2V7aWYoYWomJmFnLnJlZ2lvbmFsLmhhc093blByb3BlcnR5KGFqKSl7YW09YWp9fWlmKGFvJiZhZy5mb3JtYXRzLmhhc093blByb3BlcnR5KGFvKSl7YWk9YW99ZWxzZXtpZihhbyYmYWcucmVnaW9uYWwuaGFzT3duUHJvcGVydHkoYW8pKXthbT1hb319aWYobChhbikhPSJbb2JqZWN0IE9iamVjdF0ifHxhbi5fdHlwZSE9ImpzRGF0ZSIpe2FuPW5ldyBhZyhhbik7YW4ubG9jYWxlPWFtfWlmKCFhayl7YWs9YW4uZm9ybWF0U3RyaW5nfHxhZy5yZWdpb25hbFthbV1bImZvcm1hdFN0cmluZyJdfXZhciBhaD1ha3x8IiVZLSVtLSVkIixhcD0iIixhbDt3aGlsZShhaC5sZW5ndGg+MCl7aWYoYWw9YWgubWF0Y2goYWcuZm9ybWF0c1thaV0uY29kZXMubWF0Y2hlcikpe2FwKz1haC5zbGljZSgwLGFsLmluZGV4KTthcCs9KGFsWzFdfHwiIikrSChhbixhbFsyXSxhaSk7YWg9YWguc2xpY2UoYWwuaW5kZXgrYWxbMF0ubGVuZ3RoKX1lbHNle2FwKz1haDthaD0iIn19cmV0dXJuIGFwfTthZy5mb3JtYXRzPXtJU086IiVZLSVtLSVkVCVIOiVNOiVTLiVOJUciLFNRTDoiJVktJW0tJWQgJUg6JU06JVMifTthZy5mb3JtYXRzLnBlcmw9e2NvZGVzOnttYXRjaGVyOi8oKSUoIz8oJXxbYS16XSkpL2ksWToiRnVsbFllYXIiLHk6IlNob3J0WWVhci4yIixtOiJNb250aE51bWJlci4yIiwiI20iOiJNb250aE51bWJlciIsQjoiTW9udGhOYW1lIixiOiJBYmJyTW9udGhOYW1lIixkOiJEYXRlLjIiLCIjZCI6IkRhdGUiLGU6IkRhdGUiLEE6IkRheU5hbWUiLGE6IkFiYnJEYXlOYW1lIix3OiJEYXkiLEg6IkhvdXJzLjIiLCIjSCI6IkhvdXJzIixJOiJIb3VyczEyLjIiLCIjSSI6IkhvdXJzMTIiLHA6IkFNUE0iLE06Ik1pbnV0ZXMuMiIsIiNNIjoiTWludXRlcyIsUzoiU2Vjb25kcy4yIiwiI1MiOiJTZWNvbmRzIixzOiJVbml4IixOOiJNaWxsaXNlY29uZHMuMyIsIiNOIjoiTWlsbGlzZWNvbmRzIixPOiJUaW1lem9uZU9mZnNldCIsWjoiVGltZXpvbmVOYW1lIixHOiJHbXRPZmZzZXQifSxzaG9ydGN1dHM6e0Y6IiVZLSVtLSVkIixUOiIlSDolTTolUyIsWDoiJUg6JU06JVMiLHg6IiVtLyVkLyV5IixEOiIlbS8lZC8leSIsIiNjIjoiJWEgJWIgJWUgJUg6JU06JVMgJVkiLHY6IiVlLSViLSVZIixSOiIlSDolTSIscjoiJUk6JU06JVMgJXAiLHQ6Ilx0IixuOiJcbiIsIiUiOiIlIn19O2FnLmZvcm1hdHMucGhwPXtjb2Rlczp7bWF0Y2hlcjovKCklKCglfFthLXpdKSkvaSxhOiJBYmJyRGF5TmFtZSIsQToiRGF5TmFtZSIsZDoiRGF0ZS4yIixlOiJEYXRlIixqOiJEYXlPZlllYXIuMyIsdToiRGF5T2ZXZWVrIix3OiJEYXkiLFU6IkZ1bGxXZWVrT2ZZZWFyLjIiLFY6Iklzb1dlZWsuMiIsVzoiV2Vla09mWWVhci4yIixiOiJBYmJyTW9udGhOYW1lIixCOiJNb250aE5hbWUiLG06Ik1vbnRoTnVtYmVyLjIiLGg6IkFiYnJNb250aE5hbWUiLEM6IkNlbnR1cnkuMiIseToiU2hvcnRZZWFyLjIiLFk6IkZ1bGxZZWFyIixIOiJIb3Vycy4yIixJOiJIb3VyczEyLjIiLGw6IkhvdXJzMTIiLHA6IkFNUE0iLFA6IkFtUG0iLE06Ik1pbnV0ZXMuMiIsUzoiU2Vjb25kcy4yIixzOiJVbml4IixPOiJUaW1lem9uZU9mZnNldCIsejoiR210T2Zmc2V0IixaOiJUaW1lem9uZUFiYnIifSxzaG9ydGN1dHM6e0Q6IiVtLyVkLyV5IixGOiIlWS0lbS0lZCIsVDoiJUg6JU06JVMiLFg6IiVIOiVNOiVTIix4OiIlbS8lZC8leSIsUjoiJUg6JU0iLHI6IiVJOiVNOiVTICVwIix0OiJcdCIsbjoiXG4iLCIlIjoiJSJ9fTthZy5jcmVhdGVEYXRlPWZ1bmN0aW9uKGFqKXtpZihhaj09bnVsbCl7cmV0dXJuIG5ldyBEYXRlKCl9aWYoYWogaW5zdGFuY2VvZiBEYXRlKXtyZXR1cm4gYWp9aWYodHlwZW9mIGFqPT0ibnVtYmVyIil7cmV0dXJuIG5ldyBEYXRlKGFqKX12YXIgYW89U3RyaW5nKGFqKS5yZXBsYWNlKC9eXHMqKC4rKVxzKiQvZywiJDEiKTthbz1hby5yZXBsYWNlKC9eKFswLTldezEsNH0pLShbMC05XXsxLDJ9KS0oWzAtOV17MSw0fSkvLCIkMS8kMi8kMyIpO2FvPWFvLnJlcGxhY2UoL14oM1swMV18WzAtMl0/XGQpWy1cL10oW2Etel17Myx9KVstXC9dKFxkezR9KS9pLCIkMSAkMiAkMyIpO3ZhciBhbj1hby5tYXRjaCgvXigzWzAxXXxbMC0yXT9cZClbLVwvXShbYS16XXszLH0pWy1cL10oXGR7Mn0pXEQqL2kpO2lmKGFuJiZhbi5sZW5ndGg+Myl7dmFyIGF0PXBhcnNlRmxvYXQoYW5bM10pO3ZhciBhbT1hZy5jb25maWcuZGVmYXVsdENlbnR1cnkrYXQ7YW09U3RyaW5nKGFtKTthbz1hby5yZXBsYWNlKC9eKDNbMDFdfFswLTJdP1xkKVstXC9dKFthLXpdezMsfSlbLVwvXShcZHsyfSlcRCovaSxhblsxXSsiICIrYW5bMl0rIiAiK2FtKX1hbj1hby5tYXRjaCgvXihbMC05XXsxLDJ9KVstXC9dKFswLTldezEsMn0pWy1cL10oWzAtOV17MSwyfSlbXjAtOV0vKTtmdW5jdGlvbiBhcihheCxhdyl7dmFyIGFDPXBhcnNlRmxvYXQoYXdbMV0pO3ZhciBhQj1wYXJzZUZsb2F0KGF3WzJdKTt2YXIgYUE9cGFyc2VGbG9hdChhd1szXSk7dmFyIGF6PWFnLmNvbmZpZy5kZWZhdWx0Q2VudHVyeTt2YXIgYXYsYXUsYUQsYXk7aWYoYUM+MzEpe2F1PWFBO2FEPWFCO2F2PWF6K2FDfWVsc2V7YXU9YUI7YUQ9YUM7YXY9YXorYUF9YXk9YUQrIi8iK2F1KyIvIithdjtyZXR1cm4gYXgucmVwbGFjZSgvXihbMC05XXsxLDJ9KVstXC9dKFswLTldezEsMn0pWy1cL10oWzAtOV17MSwyfSkvLGF5KX1pZihhbiYmYW4ubGVuZ3RoPjMpe2FvPWFyKGFvLGFuKX12YXIgYW49YW8ubWF0Y2goL14oWzAtOV17MSwyfSlbLVwvXShbMC05XXsxLDJ9KVstXC9dKFswLTldezEsMn0pJC8pO2lmKGFuJiZhbi5sZW5ndGg+Myl7YW89YXIoYW8sYW4pfXZhciBhbD0wO3ZhciBhaT1hZy5tYXRjaGVycy5sZW5ndGg7dmFyIGFxLGFoLGFwPWFvLGFrO3doaWxlKGFsPGFpKXthaD1EYXRlLnBhcnNlKGFwKTtpZighaXNOYU4oYWgpKXtyZXR1cm4gbmV3IERhdGUoYWgpfWFxPWFnLm1hdGNoZXJzW2FsXTtpZih0eXBlb2YgYXE9PSJmdW5jdGlvbiIpe2FrPWFxLmNhbGwoYWcsYXApO2lmKGFrIGluc3RhbmNlb2YgRGF0ZSl7cmV0dXJuIGFrfX1lbHNle2FwPWFvLnJlcGxhY2UoYXFbMF0sYXFbMV0pfWFsKyt9cmV0dXJuIE5hTn07YWcuZGF5c0luTW9udGg9ZnVuY3Rpb24oYWgsYWkpe2lmKGFpPT0yKXtyZXR1cm4gbmV3IERhdGUoYWgsMSwyOSkuZ2V0RGF0ZSgpPT0yOT8yOToyOH1yZXR1cm5bdSwzMSx1LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXVthaV19O2FnLm1hdGNoZXJzPVtbLygzWzAxXXxbMC0yXVxkKVxzKlwuXHMqKDFbMC0yXXwwXGQpXHMqXC5ccyooWzEtOV1cZHszfSkvLCIkMi8kMS8kMyJdLFsvKFsxLTldXGR7M30pXHMqLVxzKigxWzAtMl18MFxkKVxzKi1ccyooM1swMV18WzAtMl1cZCkvLCIkMi8kMy8kMSJdLGZ1bmN0aW9uKGFrKXt2YXIgYWk9YWsubWF0Y2goL14oPzooLispXHMrKT8oWzAxMl0/XGQpKD86XHMqXDpccyooXGRcZCkpPyg/OlxzKlw6XHMqKFxkXGQoXC5cZCopPykpP1xzKihhbXxwbSk/XHMqJC9pKTtpZihhaSl7aWYoYWlbMV0pe3ZhciBhaj10aGlzLmNyZWF0ZURhdGUoYWlbMV0pO2lmKGlzTmFOKGFqKSl7cmV0dXJufX1lbHNle3ZhciBhaj1uZXcgRGF0ZSgpO2FqLnNldE1pbGxpc2Vjb25kcygwKX12YXIgYWg9cGFyc2VGbG9hdChhaVsyXSk7aWYoYWlbNl0pe2FoPWFpWzZdLnRvTG93ZXJDYXNlKCk9PSJhbSI/KGFoPT0xMj8wOmFoKTooYWg9PTEyPzEyOmFoKzEyKX1hai5zZXRIb3VycyhhaCxwYXJzZUludChhaVszXXx8MCwxMCkscGFyc2VJbnQoYWlbNF18fDAsMTApLCgocGFyc2VGbG9hdChhaVs1XXx8MCkpfHwwKSoxMDAwKTtyZXR1cm4gYWp9ZWxzZXtyZXR1cm4gYWt9fSxmdW5jdGlvbihhayl7dmFyIGFpPWFrLm1hdGNoKC9eKD86KC4rKSlbVHxccytdKFswMTJdXGQpKD86XDooXGRcZCkpKD86XDooXGRcZCkpKD86XC5cZCspKFtcK1wtXVxkXGRcOlxkXGQpJC9pKTtpZihhaSl7aWYoYWlbMV0pe3ZhciBhaj10aGlzLmNyZWF0ZURhdGUoYWlbMV0pO2lmKGlzTmFOKGFqKSl7cmV0dXJufX1lbHNle3ZhciBhaj1uZXcgRGF0ZSgpO2FqLnNldE1pbGxpc2Vjb25kcygwKX12YXIgYWg9cGFyc2VGbG9hdChhaVsyXSk7YWouc2V0SG91cnMoYWgscGFyc2VJbnQoYWlbM10sMTApLHBhcnNlSW50KGFpWzRdLDEwKSxwYXJzZUZsb2F0KGFpWzVdKSoxMDAwKTtyZXR1cm4gYWp9ZWxzZXtyZXR1cm4gYWt9fSxmdW5jdGlvbihhbCl7dmFyIGFqPWFsLm1hdGNoKC9eKFswLTNdP1xkKVxzKlstXC8uXHNdezF9XHMqKFthLXpBLVpdezMsOX0pXHMqWy1cLy5cc117MX1ccyooWzAtM10/XGQpJC8pO2lmKGFqKXt2YXIgYWs9bmV3IERhdGUoKTt2YXIgYW09YWcuY29uZmlnLmRlZmF1bHRDZW50dXJ5O3ZhciBhbz1wYXJzZUZsb2F0KGFqWzFdKTt2YXIgYW49cGFyc2VGbG9hdChhalszXSk7dmFyIGFpLGFoLGFwO2lmKGFvPjMxKXthaD1hbjthaT1hbSthb31lbHNle2FoPWFvO2FpPWFtK2FufXZhciBhcD1hYihhalsyXSxhZy5yZWdpb25hbFthZy5yZWdpb25hbC5nZXRMb2NhbGUoKV1bIm1vbnRoTmFtZXNTaG9ydCJdKTtpZihhcD09LTEpe2FwPWFiKGFqWzJdLGFnLnJlZ2lvbmFsW2FnLnJlZ2lvbmFsLmdldExvY2FsZSgpXVsibW9udGhOYW1lcyJdKX1hay5zZXRGdWxsWWVhcihhaSxhcCxhaCk7YWsuc2V0SG91cnMoMCwwLDAsMCk7cmV0dXJuIGFrfWVsc2V7cmV0dXJuIGFsfX1dO2Z1bmN0aW9uIGFiKGFqLGFrKXtpZihhay5pbmRleE9mKXtyZXR1cm4gYWsuaW5kZXhPZihhail9Zm9yKHZhciBhaD0wLGFpPWFrLmxlbmd0aDthaDxhaTthaCsrKXtpZihha1thaF09PT1hail7cmV0dXJuIGFofX1yZXR1cm4gLTF9ZnVuY3Rpb24gbChhaCl7aWYoYWg9PT1udWxsKXtyZXR1cm4iW29iamVjdCBOdWxsXSJ9cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhaCl9TC5qc0RhdGU9YWc7TC5qcXBsb3Quc3ByaW50Zj1mdW5jdGlvbigpe2Z1bmN0aW9uIGFuKGF1LGFwLGFxLGF0KXt2YXIgYXI9KGF1Lmxlbmd0aD49YXApPyIiOkFycmF5KDErYXAtYXUubGVuZ3RoPj4+MCkuam9pbihhcSk7cmV0dXJuIGF0P2F1K2FyOmFyK2F1fWZ1bmN0aW9uIGFrKGFyKXt2YXIgYXE9bmV3IFN0cmluZyhhcik7Zm9yKHZhciBhcD0xMDthcD4wO2FwLS0pe2lmKGFxPT0oYXE9YXEucmVwbGFjZSgvXihcZCspKFxkezN9KS8sIiQxIitMLmpxcGxvdC5zcHJpbnRmLnRob3VzYW5kc1NlcGFyYXRvcisiJDIiKSkpe2JyZWFrfX1yZXR1cm4gYXF9ZnVuY3Rpb24gYWooYXYsYXUsYXgsYXIsYXQsYXEpe3ZhciBhdz1hci1hdi5sZW5ndGg7aWYoYXc+MCl7dmFyIGFwPSIgIjtpZihhcSl7YXA9IiZuYnNwOyJ9aWYoYXh8fCFhdCl7YXY9YW4oYXYsYXIsYXAsYXgpfWVsc2V7YXY9YXYuc2xpY2UoMCxhdS5sZW5ndGgpK2FuKCIiLGF3LCIwIix0cnVlKSthdi5zbGljZShhdS5sZW5ndGgpfX1yZXR1cm4gYXZ9ZnVuY3Rpb24gYW8oYXksYXEsYXcsYXIsYXAsYXYsYXgsYXUpe3ZhciBhdD1heT4+PjA7YXc9YXcmJmF0JiZ7IjIiOiIwYiIsIjgiOiIwIiwiMTYiOiIweCJ9W2FxXXx8IiI7YXk9YXcrYW4oYXQudG9TdHJpbmcoYXEpLGF2fHwwLCIwIixmYWxzZSk7cmV0dXJuIGFqKGF5LGF3LGFyLGFwLGF4LGF1KX1mdW5jdGlvbiBhaChhdSxhdixhcixhcCxhdCxhcSl7aWYoYXAhPW51bGwpe2F1PWF1LnNsaWNlKDAsYXApfXJldHVybiBhaihhdSwiIixhdixhcixhdCxhcSl9dmFyIGFpPWFyZ3VtZW50cyxhbD0wLGFtPWFpW2FsKytdO3JldHVybiBhbS5yZXBsYWNlKEwuanFwbG90LnNwcmludGYucmVnZXgsZnVuY3Rpb24oYU0sYXgsYXksYUIsYU8sYUosYXYpe2lmKGFNPT0iJSUiKXtyZXR1cm4iJSJ9dmFyIGFEPWZhbHNlLGF6PSIiLGFBPWZhbHNlLGFMPWZhbHNlLGF3PWZhbHNlLGF1PWZhbHNlO2Zvcih2YXIgYUk9MDtheSYmYUk8YXkubGVuZ3RoO2FJKyspe3N3aXRjaChheS5jaGFyQXQoYUkpKXtjYXNlIiAiOmF6PSIgIjticmVhaztjYXNlIisiOmF6PSIrIjticmVhaztjYXNlIi0iOmFEPXRydWU7YnJlYWs7Y2FzZSIwIjphQT10cnVlO2JyZWFrO2Nhc2UiIyI6YUw9dHJ1ZTticmVhaztjYXNlIiYiOmF3PXRydWU7YnJlYWs7Y2FzZSInIjphdT10cnVlO2JyZWFrfX1pZighYUIpe2FCPTB9ZWxzZXtpZihhQj09IioiKXthQj0rYWlbYWwrK119ZWxzZXtpZihhQi5jaGFyQXQoMCk9PSIqIil7YUI9K2FpW2FCLnNsaWNlKDEsLTEpXX1lbHNle2FCPSthQn19fWlmKGFCPDApe2FCPS1hQjthRD10cnVlfWlmKCFpc0Zpbml0ZShhQikpe3Rocm93IG5ldyBFcnJvcigiJC5qcXBsb3Quc3ByaW50ZjogKG1pbmltdW0tKXdpZHRoIG11c3QgYmUgZmluaXRlIil9aWYoIWFKKXthSj0iZkZlRSIuaW5kZXhPZihhdik+LTE/NjooYXY9PSJkIik/MDp2b2lkICgwKX1lbHNle2lmKGFKPT0iKiIpe2FKPSthaVthbCsrXX1lbHNle2lmKGFKLmNoYXJBdCgwKT09IioiKXthSj0rYWlbYUouc2xpY2UoMSwtMSldfWVsc2V7YUo9K2FKfX19dmFyIGFGPWF4P2FpW2F4LnNsaWNlKDAsLTEpXTphaVthbCsrXTtzd2l0Y2goYXYpe2Nhc2UicyI6aWYoYUY9PW51bGwpe3JldHVybiIifXJldHVybiBhaChTdHJpbmcoYUYpLGFELGFCLGFKLGFBLGF3KTtjYXNlImMiOnJldHVybiBhaChTdHJpbmcuZnJvbUNoYXJDb2RlKCthRiksYUQsYUIsYUosYUEsYXcpO2Nhc2UiYiI6cmV0dXJuIGFvKGFGLDIsYUwsYUQsYUIsYUosYUEsYXcpO2Nhc2UibyI6cmV0dXJuIGFvKGFGLDgsYUwsYUQsYUIsYUosYUEsYXcpO2Nhc2UieCI6cmV0dXJuIGFvKGFGLDE2LGFMLGFELGFCLGFKLGFBLGF3KTtjYXNlIlgiOnJldHVybiBhbyhhRiwxNixhTCxhRCxhQixhSixhQSxhdykudG9VcHBlckNhc2UoKTtjYXNlInUiOnJldHVybiBhbyhhRiwxMCxhTCxhRCxhQixhSixhQSxhdyk7Y2FzZSJpIjp2YXIgYXI9cGFyc2VJbnQoK2FGLDEwKTtpZihpc05hTihhcikpe3JldHVybiIifXZhciBhSD1hcjwwPyItIjphejt2YXIgYUs9YXU/YWsoU3RyaW5nKE1hdGguYWJzKGFyKSkpOlN0cmluZyhNYXRoLmFicyhhcikpO2FGPWFIK2FuKGFLLGFKLCIwIixmYWxzZSk7cmV0dXJuIGFqKGFGLGFILGFELGFCLGFBLGF3KTtjYXNlImQiOnZhciBhcj1NYXRoLnJvdW5kKCthRik7aWYoaXNOYU4oYXIpKXtyZXR1cm4iIn12YXIgYUg9YXI8MD8iLSI6YXo7dmFyIGFLPWF1P2FrKFN0cmluZyhNYXRoLmFicyhhcikpKTpTdHJpbmcoTWF0aC5hYnMoYXIpKTthRj1hSCthbihhSyxhSiwiMCIsZmFsc2UpO3JldHVybiBhaihhRixhSCxhRCxhQixhQSxhdyk7Y2FzZSJlIjpjYXNlIkUiOmNhc2UiZiI6Y2FzZSJGIjpjYXNlImciOmNhc2UiRyI6dmFyIGFyPSthRjtpZihpc05hTihhcikpe3JldHVybiIifXZhciBhSD1hcjwwPyItIjphejt2YXIgYXQ9WyJ0b0V4cG9uZW50aWFsIiwidG9GaXhlZCIsInRvUHJlY2lzaW9uIl1bImVmZyIuaW5kZXhPZihhdi50b0xvd2VyQ2FzZSgpKV07dmFyIGFOPVsidG9TdHJpbmciLCJ0b1VwcGVyQ2FzZSJdWyJlRWZGZ0ciLmluZGV4T2YoYXYpJTJdO3ZhciBhSz1NYXRoLmFicyhhcilbYXRdKGFKKTt2YXIgYUU9YUsudG9TdHJpbmcoKS5zcGxpdCgiLiIpO2FFWzBdPWF1P2FrKGFFWzBdKTphRVswXTthSz1hRS5qb2luKEwuanFwbG90LnNwcmludGYuZGVjaW1hbE1hcmspO2FGPWFIK2FLO3ZhciBhQz1haihhRixhSCxhRCxhQixhQSxhdylbYU5dKCk7cmV0dXJuIGFDO2Nhc2UicCI6Y2FzZSJQIjp2YXIgYXI9K2FGO2lmKGlzTmFOKGFyKSl7cmV0dXJuIiJ9dmFyIGFIPWFyPDA/Ii0iOmF6O3ZhciBhRT1TdHJpbmcoTnVtYmVyKE1hdGguYWJzKGFyKSkudG9FeHBvbmVudGlhbCgpKS5zcGxpdCgvZXxFLyk7dmFyIGFxPShhRVswXS5pbmRleE9mKCIuIikhPS0xKT9hRVswXS5sZW5ndGgtMTpTdHJpbmcoYXIpLmxlbmd0aDt2YXIgYUc9KGFFWzFdPDApPy1hRVsxXS0xOjA7aWYoTWF0aC5hYnMoYXIpPDEpe2lmKGFxK2FHPD1hSil7YUY9YUgrTWF0aC5hYnMoYXIpLnRvUHJlY2lzaW9uKGFxKX1lbHNle2lmKGFxPD1hSi0xKXthRj1hSCtNYXRoLmFicyhhcikudG9FeHBvbmVudGlhbChhcS0xKX1lbHNle2FGPWFIK01hdGguYWJzKGFyKS50b0V4cG9uZW50aWFsKGFKLTEpfX19ZWxzZXt2YXIgYXA9KGFxPD1hSik/YXE6YUo7YUY9YUgrTWF0aC5hYnMoYXIpLnRvUHJlY2lzaW9uKGFwKX12YXIgYU49WyJ0b1N0cmluZyIsInRvVXBwZXJDYXNlIl1bInBQIi5pbmRleE9mKGF2KSUyXTtyZXR1cm4gYWooYUYsYUgsYUQsYUIsYUEsYXcpW2FOXSgpO2Nhc2UibiI6cmV0dXJuIiI7ZGVmYXVsdDpyZXR1cm4gYU19fSl9O0wuanFwbG90LnNwcmludGYudGhvdXNhbmRzU2VwYXJhdG9yPSIsIjtMLmpxcGxvdC5zcHJpbnRmLmRlY2ltYWxNYXJrPSIuIjtMLmpxcGxvdC5zcHJpbnRmLnJlZ2V4PS8lJXwlKFxkK1wkKT8oWy0rIzAmXCcgXSopKFwqXGQrXCR8XCp8XGQrKT8oXC4oXCpcZCtcJHxcKnxcZCspKT8oW25Bc2Nib3hYdWlkZmVncEVHUF0pL2c7TC5qcXBsb3QuZ2V0U2lnbmlmaWNhbnRGaWd1cmVzPWZ1bmN0aW9uKGFsKXt2YXIgYW49U3RyaW5nKE51bWJlcihNYXRoLmFicyhhbCkpLnRvRXhwb25lbnRpYWwoKSkuc3BsaXQoL2V8RS8pO3ZhciBhbT0oYW5bMF0uaW5kZXhPZigiLiIpIT0tMSk/YW5bMF0ubGVuZ3RoLTE6YW5bMF0ubGVuZ3RoO3ZhciBhaT0oYW5bMV08MCk/LWFuWzFdLTE6MDt2YXIgYWg9cGFyc2VJbnQoYW5bMV0sMTApO3ZhciBhaj0oYWgrMT4wKT9haCsxOjA7dmFyIGFrPShhbTw9YWopPzA6YW0tYWgtMTtyZXR1cm57c2lnbmlmaWNhbnREaWdpdHM6YW0sZGlnaXRzTGVmdDphaixkaWdpdHNSaWdodDphayx6ZXJvczphaSxleHBvbmVudDphaH19O0wuanFwbG90LmdldFByZWNpc2lvbj1mdW5jdGlvbihhaCl7cmV0dXJuIEwuanFwbG90LmdldFNpZ25pZmljYW50RmlndXJlcyhhaCkuZGlnaXRzUmlnaHR9O3ZhciBYPUwudWlCYWNrQ29tcGF0IT09ZmFsc2U7TC5qcXBsb3QuZWZmZWN0cz17ZWZmZWN0Ont9fTt2YXIgbT0ianFwbG90LnN0b3JhZ2UuIjtMLmV4dGVuZChMLmpxcGxvdC5lZmZlY3RzLHt2ZXJzaW9uOiIxLjlwcmUiLHNhdmU6ZnVuY3Rpb24oYWksYWope2Zvcih2YXIgYWg9MDthaDxhai5sZW5ndGg7YWgrKyl7aWYoYWpbYWhdIT09bnVsbCl7YWkuZGF0YShtK2FqW2FoXSxhaVswXS5zdHlsZVthalthaF1dKX19fSxyZXN0b3JlOmZ1bmN0aW9uKGFpLGFqKXtmb3IodmFyIGFoPTA7YWg8YWoubGVuZ3RoO2FoKyspe2lmKGFqW2FoXSE9PW51bGwpe2FpLmNzcyhhalthaF0sYWkuZGF0YShtK2FqW2FoXSkpfX19LHNldE1vZGU6ZnVuY3Rpb24oYWgsYWkpe2lmKGFpPT09InRvZ2dsZSIpe2FpPWFoLmlzKCI6aGlkZGVuIik/InNob3ciOiJoaWRlIn1yZXR1cm4gYWl9LGNyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oYWkpe2lmKGFpLnBhcmVudCgpLmlzKCIudWktZWZmZWN0cy13cmFwcGVyIikpe3JldHVybiBhaS5wYXJlbnQoKX12YXIgYWo9e3dpZHRoOmFpLm91dGVyV2lkdGgodHJ1ZSksaGVpZ2h0OmFpLm91dGVySGVpZ2h0KHRydWUpLCJmbG9hdCI6YWkuY3NzKCJmbG9hdCIpfSxhbD1MKCI8ZGl2PjwvZGl2PiIpLmFkZENsYXNzKCJ1aS1lZmZlY3RzLXdyYXBwZXIiKS5jc3Moe2ZvbnRTaXplOiIxMDAlIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixtYXJnaW46MCxwYWRkaW5nOjB9KSxhaD17d2lkdGg6YWkud2lkdGgoKSxoZWlnaHQ6YWkuaGVpZ2h0KCl9LGFrPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7YWkud3JhcChhbCk7aWYoYWlbMF09PT1ha3x8TC5jb250YWlucyhhaVswXSxhaykpe0woYWspLmZvY3VzKCl9YWw9YWkucGFyZW50KCk7aWYoYWkuY3NzKCJwb3NpdGlvbiIpPT09InN0YXRpYyIpe2FsLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIn0pO2FpLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIn0pfWVsc2V7TC5leHRlbmQoYWose3Bvc2l0aW9uOmFpLmNzcygicG9zaXRpb24iKSx6SW5kZXg6YWkuY3NzKCJ6LWluZGV4Iil9KTtMLmVhY2goWyJ0b3AiLCJsZWZ0IiwiYm90dG9tIiwicmlnaHQiXSxmdW5jdGlvbihhbSxhbil7YWpbYW5dPWFpLmNzcyhhbik7aWYoaXNOYU4ocGFyc2VJbnQoYWpbYW5dLDEwKSkpe2FqW2FuXT0iYXV0byJ9fSk7YWkuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLHRvcDowLGxlZnQ6MCxyaWdodDoiYXV0byIsYm90dG9tOiJhdXRvIn0pfWFpLmNzcyhhaCk7cmV0dXJuIGFsLmNzcyhhaikuc2hvdygpfSxyZW1vdmVXcmFwcGVyOmZ1bmN0aW9uKGFoKXt2YXIgYWk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZihhaC5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpKXthaC5wYXJlbnQoKS5yZXBsYWNlV2l0aChhaCk7aWYoYWhbMF09PT1haXx8TC5jb250YWlucyhhaFswXSxhaSkpe0woYWkpLmZvY3VzKCl9fXJldHVybiBhaH19KTtmdW5jdGlvbiBqKGFpLGFoLGFqLGFrKXtpZihMLmlzUGxhaW5PYmplY3QoYWkpKXtyZXR1cm4gYWl9YWk9e2VmZmVjdDphaX07aWYoYWg9PT11KXthaD17fX1pZihMLmlzRnVuY3Rpb24oYWgpKXthaz1haDthaj1udWxsO2FoPXt9fWlmKEwudHlwZShhaCk9PT0ibnVtYmVyInx8TC5meC5zcGVlZHNbYWhdKXthaz1hajthaj1haDthaD17fX1pZihMLmlzRnVuY3Rpb24oYWopKXthaz1hajthaj1udWxsfWlmKGFoKXtMLmV4dGVuZChhaSxhaCl9YWo9YWp8fGFoLmR1cmF0aW9uO2FpLmR1cmF0aW9uPUwuZngub2ZmPzA6dHlwZW9mIGFqPT09Im51bWJlciI/YWo6YWogaW4gTC5meC5zcGVlZHM/TC5meC5zcGVlZHNbYWpdOkwuZnguc3BlZWRzLl9kZWZhdWx0O2FpLmNvbXBsZXRlPWFrfHxhaC5jb21wbGV0ZTtyZXR1cm4gYWl9ZnVuY3Rpb24gYWUoYWgpe2lmKCFhaHx8dHlwZW9mIGFoPT09Im51bWJlciJ8fEwuZnguc3BlZWRzW2FoXSl7cmV0dXJuIHRydWV9aWYodHlwZW9mIGFoPT09InN0cmluZyImJiFMLmpxcGxvdC5lZmZlY3RzLmVmZmVjdFthaF0pe2lmKFgmJkwuanFwbG90LmVmZmVjdHNbYWhdKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfUwuZm4uZXh0ZW5kKHtqcXBsb3RFZmZlY3Q6ZnVuY3Rpb24oYXAsYXEsYWksYW8pe3ZhciBhbj1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhaz1hbi5tb2RlLGFsPWFuLnF1ZXVlLGFtPUwuanFwbG90LmVmZmVjdHMuZWZmZWN0W2FuLmVmZmVjdF0sYWg9IWFtJiZYJiZMLmpxcGxvdC5lZmZlY3RzW2FuLmVmZmVjdF07aWYoTC5meC5vZmZ8fCEoYW18fGFoKSl7aWYoYWspe3JldHVybiB0aGlzW2FrXShhbi5kdXJhdGlvbixhbi5jb21wbGV0ZSl9ZWxzZXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoYW4uY29tcGxldGUpe2FuLmNvbXBsZXRlLmNhbGwodGhpcyl9fSl9fWZ1bmN0aW9uIGFqKGF1KXt2YXIgYXY9TCh0aGlzKSxhdD1hbi5jb21wbGV0ZSxhdz1hbi5tb2RlO2Z1bmN0aW9uIGFyKCl7aWYoTC5pc0Z1bmN0aW9uKGF0KSl7YXQuY2FsbChhdlswXSl9aWYoTC5pc0Z1bmN0aW9uKGF1KSl7YXUoKX19aWYoYXYuaXMoIjpoaWRkZW4iKT9hdz09PSJoaWRlIjphdz09PSJzaG93Iil7YXIoKX1lbHNle2FtLmNhbGwoYXZbMF0sYW4sYXIpfX1pZihhbSl7cmV0dXJuIGFsPT09ZmFsc2U/dGhpcy5lYWNoKGFqKTp0aGlzLnF1ZXVlKGFsfHwiZngiLGFqKX1lbHNle3JldHVybiBhaC5jYWxsKHRoaXMse29wdGlvbnM6YW4sZHVyYXRpb246YW4uZHVyYXRpb24sY2FsbGJhY2s6YW4uY29tcGxldGUsbW9kZTphbi5tb2RlfSl9fX0pO3ZhciBhPS91cHxkb3dufHZlcnRpY2FsLyx2PS91cHxsZWZ0fHZlcnRpY2FsfGhvcml6b250YWwvO0wuanFwbG90LmVmZmVjdHMuZWZmZWN0LmJsaW5kPWZ1bmN0aW9uKGFqLGFvKXt2YXIgYWs9TCh0aGlzKSxhcj1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSxhcD1MLmpxcGxvdC5lZmZlY3RzLnNldE1vZGUoYWssYWoubW9kZXx8ImhpZGUiKSxhdT1hai5kaXJlY3Rpb258fCJ1cCIsYW09YS50ZXN0KGF1KSxhbD1hbT8iaGVpZ2h0Ijoid2lkdGgiLGFxPWFtPyJ0b3AiOiJsZWZ0Iixhdz12LnRlc3QoYXUpLGFuPXt9LGF2PWFwPT09InNob3ciLGFpLGFoLGF0O2lmKGFrLnBhcmVudCgpLmlzKCIudWktZWZmZWN0cy13cmFwcGVyIikpe0wuanFwbG90LmVmZmVjdHMuc2F2ZShhay5wYXJlbnQoKSxhcil9ZWxzZXtMLmpxcGxvdC5lZmZlY3RzLnNhdmUoYWssYXIpfWFrLnNob3coKTthdD1wYXJzZUludChhay5jc3MoInRvcCIpLDEwKTthaT1MLmpxcGxvdC5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYWspLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KTthaD1hbT9haVthbF0oKSthdDphaVthbF0oKTthblthbF09YXY/U3RyaW5nKGFoKToiMCI7aWYoIWF3KXthay5jc3MoYW0/ImJvdHRvbSI6InJpZ2h0IiwwKS5jc3MoYW0/InRvcCI6ImxlZnQiLCIiKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9KTthblthcV09YXY/IjAiOlN0cmluZyhhaCl9aWYoYXYpe2FpLmNzcyhhbCwwKTtpZighYXcpe2FpLmNzcyhhcSxhaCl9fWFpLmFuaW1hdGUoYW4se2R1cmF0aW9uOmFqLmR1cmF0aW9uLGVhc2luZzphai5lYXNpbmcscXVldWU6ZmFsc2UsY29tcGxldGU6ZnVuY3Rpb24oKXtpZihhcD09PSJoaWRlIil7YWsuaGlkZSgpfUwuanFwbG90LmVmZmVjdHMucmVzdG9yZShhayxhcik7TC5qcXBsb3QuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGFrKTthbygpfX0pfX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.barRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgCiAgICAvLyBDbGFzczogJC5qcXBsb3QuQmFyUmVuZGVyZXIKICAgIC8vIEEgcGx1Z2luIHJlbmRlcmVyIGZvciBqcVBsb3QgdG8gZHJhdyBhIGJhciBwbG90LgogICAgLy8gRHJhd3Mgc2VyaWVzIGFzIGEgbGluZS4KICAgIAogICAgJC5qcXBsb3QuQmFyUmVuZGVyZXIgPSBmdW5jdGlvbigpewogICAgICAgICQuanFwbG90LkxpbmVSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQmFyUmVuZGVyZXIucHJvdG90eXBlID0gbmV3ICQuanFwbG90LkxpbmVSZW5kZXJlcigpOwogICAgJC5qcXBsb3QuQmFyUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJC5qcXBsb3QuQmFyUmVuZGVyZXI7CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIHNlcmllcy4KICAgICQuanFwbG90LkJhclJlbmRlcmVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucywgcGxvdCkgewogICAgICAgIC8vIEdyb3VwOiBQcm9wZXJ0aWVzCiAgICAgICAgLy8KICAgICAgICAvLyBwcm9wOiBiYXJQYWRkaW5nCiAgICAgICAgLy8gTnVtYmVyIG9mIHBpeGVscyBiZXR3ZWVuIGFkamFjZW50IGJhcnMgYXQgdGhlIHNhbWUgYXhpcyB2YWx1ZS4KICAgICAgICB0aGlzLmJhclBhZGRpbmcgPSA4OwogICAgICAgIC8vIHByb3A6IGJhck1hcmdpbgogICAgICAgIC8vIE51bWJlciBvZiBwaXhlbHMgYmV0d2VlbiBncm91cHMgb2YgYmFycyBhdCBhZGphY2VudCBheGlzIHZhbHVlcy4KICAgICAgICB0aGlzLmJhck1hcmdpbiA9IDEwOwogICAgICAgIC8vIHByb3A6IGJhckRpcmVjdGlvbgogICAgICAgIC8vICd2ZXJ0aWNhbCcgPSB1cCBhbmQgZG93biBiYXJzLCAnaG9yaXpvbnRhbCcgPSBzaWRlIHRvIHNpZGUgYmFycwogICAgICAgIHRoaXMuYmFyRGlyZWN0aW9uID0gJ3ZlcnRpY2FsJzsKICAgICAgICAvLyBwcm9wOiBiYXJXaWR0aAogICAgICAgIC8vIFdpZHRoIG9mIHRoZSBiYXIgaW4gcGl4ZWxzIChhdXRvIGJ5IGRldmF1bCkuICBudWxsID0gY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5LgogICAgICAgIHRoaXMuYmFyV2lkdGggPSBudWxsOwogICAgICAgIC8vIHByb3A6IHNoYWRvd09mZnNldAogICAgICAgIC8vIG9mZnNldCBvZiB0aGUgc2hhZG93IGZyb20gdGhlIHNsaWNlIGFuZCBvZmZzZXQgb2YgCiAgICAgICAgLy8gZWFjaCBzdWNjZXNpdmUgc3Ryb2tlIG9mIHRoZSBzaGFkb3cgZnJvbSB0aGUgbGFzdC4KICAgICAgICB0aGlzLnNoYWRvd09mZnNldCA9IDI7CiAgICAgICAgLy8gcHJvcDogc2hhZG93RGVwdGgKICAgICAgICAvLyBudW1iZXIgb2Ygc3Ryb2tlcyB0byBhcHBseSB0byB0aGUgc2hhZG93LCAKICAgICAgICAvLyBlYWNoIHN0cm9rZSBvZmZzZXQgc2hhZG93T2Zmc2V0IGZyb20gdGhlIGxhc3QuCiAgICAgICAgdGhpcy5zaGFkb3dEZXB0aCA9IDU7CiAgICAgICAgLy8gcHJvcDogc2hhZG93QWxwaGEKICAgICAgICAvLyB0cmFuc3BhcmVuY3kgb2YgdGhlIHNoYWRvdyAoMCA9IHRyYW5zcGFyZW50LCAxID0gb3BhcXVlKQogICAgICAgIHRoaXMuc2hhZG93QWxwaGEgPSAwLjA4OwogICAgICAgIC8vIHByb3A6IHdhdGVyZmFsbAogICAgICAgIC8vIHRydWUgdG8gZW5hYmxlIHdhdGVyZmFsbCBwbG90LgogICAgICAgIHRoaXMud2F0ZXJmYWxsID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogZ3JvdXBzCiAgICAgICAgLy8gZ3JvdXAgYmFycyBpbnRvIHRoaXMgbWFueSBncm91cHMKICAgICAgICB0aGlzLmdyb3VwcyA9IDE7CiAgICAgICAgLy8gcHJvcDogdmFyeUJhckNvbG9yCiAgICAgICAgLy8gdHJ1ZSB0byBjb2xvciBlYWNoIGJhciBvZiBhIHNlcmllcyBzZXBhcmF0ZWx5IHJhdGhlciB0aGFuCiAgICAgICAgLy8gaGF2ZSBldmVyeSBiYXIgb2YgYSBnaXZlbiBzZXJpZXMgdGhlIHNhbWUgY29sb3IuCiAgICAgICAgLy8gSWYgdXNlZCBmb3Igbm9uLXN0YWNrZWQgbXVsdGlwbGUgc2VyaWVzIGJhciBwbG90cywgdXNlciBzaG91bGQKICAgICAgICAvLyBzcGVjaWZ5IGEgc2VwYXJhdGUgJ3Nlcmllc0NvbG9ycycgYXJyYXkgZm9yIGVhY2ggc2VyaWVzLgogICAgICAgIC8vIE90aGVyd2lzZSwgZWFjaCBzZXJpZXMgd2lsbCBzZXQgdGhlaXIgYmFycyB0byB0aGUgc2FtZSBjb2xvciBhcnJheS4KICAgICAgICAvLyBUaGlzIG9wdGlvbiBoYXMgbm8gRWZmZWN0IGZvciBzdGFja2VkIGJhciBjaGFydHMgYW5kIGlzIGRpc2FibGVkLgogICAgICAgIHRoaXMudmFyeUJhckNvbG9yID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogaGlnaGxpZ2h0TW91c2VPdmVyCiAgICAgICAgLy8gVHJ1ZSB0byBoaWdobGlnaHQgc2xpY2Ugd2hlbiBtb3VzZWQgb3Zlci4KICAgICAgICAvLyBUaGlzIG11c3QgYmUgZmFsc2UgdG8gZW5hYmxlIGhpZ2hsaWdodE1vdXNlRG93biB0byBoaWdobGlnaHQgd2hlbiBjbGlja2luZyBvbiBhIHNsaWNlLgogICAgICAgIHRoaXMuaGlnaGxpZ2h0TW91c2VPdmVyID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBoaWdobGlnaHRNb3VzZURvd24KICAgICAgICAvLyBUcnVlIHRvIGhpZ2hsaWdodCB3aGVuIGEgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgb3ZlciBhIHNsaWNlLgogICAgICAgIC8vIFRoaXMgd2lsbCBiZSBkaXNhYmxlZCBpZiBoaWdobGlnaHRNb3VzZU92ZXIgaXMgdHJ1ZS4KICAgICAgICB0aGlzLmhpZ2hsaWdodE1vdXNlRG93biA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGhpZ2hsaWdodENvbG9ycwogICAgICAgIC8vIGFuIGFycmF5IG9mIGNvbG9ycyB0byB1c2Ugd2hlbiBoaWdobGlnaHRpbmcgYSBiYXIuCiAgICAgICAgdGhpcy5oaWdobGlnaHRDb2xvcnMgPSBbXTsKICAgICAgICAvLyBwcm9wOiB0cmFuc3Bvc2VkRGF0YQogICAgICAgIC8vIE5PVCBJTVBMRU1FTlRFRCBZRVQuICBUcnVlIGlmIHRoaXMgaXMgYSBob3Jpem9udGFsIGJhciBwbG90IGFuZCAKICAgICAgICAvLyB4IGFuZCB5IHZhbHVlcyBhcmUgInRyYW5zcG9zZWQiLiAgVHJhbnBvc2VkLCBvciAic3dhcHBlZCIsIGRhdGEgaXMgCiAgICAgICAgLy8gcmVxdWlyZWQgcHJpb3IgdG8gcmV2LiA4OTQgYnVpbGRzIG9mIGpxUGxvdCB3aXRoIGhvcml6b250YWwgYmFycy4gCiAgICAgICAgLy8gQWxsb3dzIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgb2YgYmFyIHJlbmRlcmVyIGhvcml6b250YWwgYmFycyB3aXRoIAogICAgICAgIC8vIG9sZCBzdHlsZSBkYXRhIHNldHMuCiAgICAgICAgdGhpcy50cmFuc3Bvc2VkRGF0YSA9IHRydWU7CiAgICAgICAgdGhpcy5yZW5kZXJlci5hbmltYXRpb24gPSB7CiAgICAgICAgICAgIHNob3c6IGZhbHNlLAogICAgICAgICAgICBkaXJlY3Rpb246ICdkb3duJywKICAgICAgICAgICAgc3BlZWQ6IDMwMDAsCiAgICAgICAgICAgIF9zdXBwb3J0ZWQ6IHRydWUKICAgICAgICB9OwogICAgICAgIHRoaXMuX3R5cGUgPSAnYmFyJzsKICAgICAgICAKICAgICAgICAvLyBpZiB1c2VyIGhhcyBwYXNzZWQgaW4gaGlnaGxpZ2h0TW91c2VEb3duIG9wdGlvbiBhbmQgbm90IHNldCBoaWdobGlnaHRNb3VzZU92ZXIsIGRpc2FibGUgaGlnaGxpZ2h0TW91c2VPdmVyCiAgICAgICAgaWYgKG9wdGlvbnMuaGlnaGxpZ2h0TW91c2VEb3duICYmIG9wdGlvbnMuaGlnaGxpZ2h0TW91c2VPdmVyID09IG51bGwpIHsKICAgICAgICAgICAgb3B0aW9ucy5oaWdobGlnaHRNb3VzZU92ZXIgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8vLy8vCiAgICAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSB3cm9uZyBoZXJlLgogICAgICAgIC8vIEFmdGVyIGdvaW5nIGJhY2sgYW5kIGZvcnRoIG9uIHdoZXRoZXIgcmVuZGVyZXIgc2hvdWxkIGJlIHRoZSB0aGluZwogICAgICAgIC8vIG9yIGV4dGVuZCB0aGUgdGhpbmcsIGl0IHNlZW1zIHRoYXQgaXQgaXQgYmVzdCBpZiBpdCBpcyBhIHByb3BlcnR5CiAgICAgICAgLy8gb24gdGhlIHRoaW5nLiAgVGhpcyBzaG91bGQgYmUgc29tZXRoaW5nIHRoYXQgaXMgY29tbW9uaXplZCAKICAgICAgICAvLyBhbW9uZyBzZXJpZXMgcmVuZGVyZXJzIGluIHRoZSBmdXR1cmUuCiAgICAgICAgLy8vLy8vCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CgogICAgICAgIC8vIHJlYWxseSBzaG91bGQgcHJvYmFibHkgZG8gdGhpcwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMucmVuZGVyZXIsIG9wdGlvbnMpOwogICAgICAgIC8vIGZpbGwgaXMgc3RpbGwgbmVlZGVkIHRvIHByb3Blcmx5IGRyYXcgdGhlIGxlZ2VuZC4KICAgICAgICAvLyBiYXJzIGhhdmUgdG8gYmUgZmlsbGVkLgogICAgICAgIHRoaXMuZmlsbCA9IHRydWU7CgogICAgICAgIC8vIGlmIGhvcml6b250YWwgYmFyIGFuZCBhbmltYXRpbmcsIHJlc2V0IHRoZSBkZWZhdWx0IGRpcmVjdGlvbgogICAgICAgIGlmICh0aGlzLmJhckRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIHRoaXMucmVuZGVyZXJPcHRpb25zLmFuaW1hdGlvbiAmJiB0aGlzLnJlbmRlcmVyT3B0aW9ucy5hbmltYXRpb24uZGlyZWN0aW9uID09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hbmltYXRpb24uZGlyZWN0aW9uID0gJ2xlZnQnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAodGhpcy53YXRlcmZhbGwpIHsKICAgICAgICAgICAgdGhpcy5maWxsVG9aZXJvID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVN0YWNrID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuYmFyRGlyZWN0aW9uID09ICd2ZXJ0aWNhbCcgKSB7CiAgICAgICAgICAgIHRoaXMuX3ByaW1hcnlBeGlzID0gJ194YXhpcyc7CiAgICAgICAgICAgIHRoaXMuX3N0YWNrQXhpcyA9ICd5JzsKICAgICAgICAgICAgdGhpcy5maWxsQXhpcyA9ICd5JzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMuX3ByaW1hcnlBeGlzID0gJ195YXhpcyc7CiAgICAgICAgICAgIHRoaXMuX3N0YWNrQXhpcyA9ICd4JzsKICAgICAgICAgICAgdGhpcy5maWxsQXhpcyA9ICd4JzsKICAgICAgICB9CiAgICAgICAgLy8gaW5kZXggb2YgdGhlIGN1cnJlbnR5IGhpZ2hsaWdodGVkIHBvaW50LCBpZiBhbnkKICAgICAgICB0aGlzLl9oaWdobGlnaHRlZFBvaW50ID0gbnVsbDsKICAgICAgICAvLyB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIGZvciBhbGwgYmFyIHNlcmllcywgdG90YWwgbnVtYmVyIG9mIGJhciBzZXJpZXMsIGFuZCBwb3NpdGlvbiBvZiB0aGlzIHNlcmllcwogICAgICAgIHRoaXMuX3Bsb3RTZXJpZXNJbmZvID0gbnVsbDsKICAgICAgICAvLyBBcnJheSBvZiBhY3R1YWwgZGF0YSBjb2xvcnMgdXNlZCBmb3IgZWFjaCBkYXRhIHBvaW50LgogICAgICAgIHRoaXMuX2RhdGFDb2xvcnMgPSBbXTsKICAgICAgICB0aGlzLl9iYXJQb2ludHMgPSBbXTsKICAgICAgICAKICAgICAgICAvLyBzZXQgdGhlIHNoYXBlIHJlbmRlcmVyIG9wdGlvbnMKICAgICAgICB2YXIgb3B0cyA9IHtsaW5lSm9pbjonbWl0ZXInLCBsaW5lQ2FwOidyb3VuZCcsIGZpbGw6dHJ1ZSwgaXNhcmM6ZmFsc2UsIHN0cm9rZVN0eWxlOnRoaXMuY29sb3IsIGZpbGxTdHlsZTp0aGlzLmNvbG9yLCBjbG9zZVBhdGg6dGhpcy5maWxsfTsKICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuaW5pdChvcHRzKTsKICAgICAgICAvLyBzZXQgdGhlIHNoYWRvdyByZW5kZXJlciBvcHRpb25zCiAgICAgICAgdmFyIHNvcHRzID0ge2xpbmVKb2luOidtaXRlcicsIGxpbmVDYXA6J3JvdW5kJywgZmlsbDp0cnVlLCBpc2FyYzpmYWxzZSwgYW5nbGU6dGhpcy5zaGFkb3dBbmdsZSwgb2Zmc2V0OnRoaXMuc2hhZG93T2Zmc2V0LCBhbHBoYTp0aGlzLnNoYWRvd0FscGhhLCBkZXB0aDp0aGlzLnNoYWRvd0RlcHRoLCBjbG9zZVBhdGg6dGhpcy5maWxsfTsKICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmluaXQoc29wdHMpOwogICAgICAgIAogICAgICAgIHBsb3QucG9zdEluaXRIb29rcy5hZGRPbmNlKHBvc3RJbml0KTsKICAgICAgICBwbG90LnBvc3REcmF3SG9va3MuYWRkT25jZShwb3N0UGxvdERyYXcpOwogICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdE1vdXNlTW92ZScsIGhhbmRsZU1vdmUpOwogICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdE1vdXNlRG93bicsIGhhbmRsZU1vdXNlRG93bik7CiAgICAgICAgcGxvdC5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgnanFwbG90TW91c2VVcCcsIGhhbmRsZU1vdXNlVXApOwogICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdENsaWNrJywgaGFuZGxlQ2xpY2spOwogICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdFJpZ2h0Q2xpY2snLCBoYW5kbGVSaWdodENsaWNrKTsgCiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBzZXJpZXMKICAgIGZ1bmN0aW9uIGJhclByZUluaXQodGFyZ2V0LCBkYXRhLCBzZXJpZXNEZWZhdWx0cywgb3B0aW9ucykgewogICAgICAgIGlmICh0aGlzLnJlbmRlcmVyT3B0aW9ucy5iYXJEaXJlY3Rpb24gPT0gJ2hvcml6b250YWwnKSB7CiAgICAgICAgICAgIHRoaXMuX3N0YWNrQXhpcyA9ICd4JzsKICAgICAgICAgICAgdGhpcy5fcHJpbWFyeUF4aXMgPSAnX3lheGlzJzsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMucmVuZGVyZXJPcHRpb25zLndhdGVyZmFsbCA9PSB0cnVlKSB7CiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSAkLmV4dGVuZCh0cnVlLCBbXSwgdGhpcy5kYXRhKTsKICAgICAgICAgICAgdmFyIHN1bSA9IDA7CiAgICAgICAgICAgIHZhciBwb3MgPSAoIXRoaXMucmVuZGVyZXJPcHRpb25zLmJhckRpcmVjdGlvbiB8fCB0aGlzLnJlbmRlcmVyT3B0aW9ucy5iYXJEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgfHwgdGhpcy50cmFuc3Bvc2VkRGF0YSA9PT0gZmFsc2UpID8gMSA6IDA7CiAgICAgICAgICAgIGZvcih2YXIgaT0wOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgc3VtICs9IHRoaXMuZGF0YVtpXVtwb3NdOwogICAgICAgICAgICAgICAgaWYgKGk+MCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpXVtwb3NdICs9IHRoaXMuZGF0YVtpLTFdW3Bvc107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGhdID0gKHBvcyA9PSAxKSA/IFt0aGlzLmRhdGEubGVuZ3RoKzEsIHN1bV0gOiBbc3VtLCB0aGlzLmRhdGEubGVuZ3RoKzFdOwogICAgICAgICAgICB0aGlzLl9kYXRhW3RoaXMuX2RhdGEubGVuZ3RoXSA9IChwb3MgPT0gMSkgPyBbdGhpcy5fZGF0YS5sZW5ndGgrMSwgc3VtXSA6IFtzdW0sIHRoaXMuX2RhdGEubGVuZ3RoKzFdOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5yZW5kZXJlck9wdGlvbnMuZ3JvdXBzID4gMSkgewogICAgICAgICAgICB0aGlzLmJyZWFrT25OdWxsID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIGwgPSB0aGlzLmRhdGEubGVuZ3RoOwogICAgICAgICAgICB2YXIgc2tpcCA9IHBhcnNlSW50KGwvdGhpcy5yZW5kZXJlck9wdGlvbnMuZ3JvdXBzLCAxMCk7CiAgICAgICAgICAgIHZhciBjb3VudCA9IDA7CiAgICAgICAgICAgIGZvciAodmFyIGk9c2tpcDsgaTxsOyBpKz1za2lwKSB7CiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuc3BsaWNlKGkrY291bnQsIDAsIFtudWxsLCBudWxsXSk7CiAgICAgICAgICAgICAgICB0aGlzLl9wbG90RGF0YS5zcGxpY2UoaStjb3VudCwgMCwgW251bGwsIG51bGxdKTsKICAgICAgICAgICAgICAgIHRoaXMuX3N0YWNrRGF0YS5zcGxpY2UoaStjb3VudCwgMCwgW251bGwsIG51bGxdKTsKICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChpPTA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJpbWFyeUF4aXMgPT0gJ194YXhpcycpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaV1bMF0gPSBpKzE7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGxvdERhdGFbaV1bMF0gPSBpKzE7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhY2tEYXRhW2ldWzBdID0gaSsxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW2ldWzFdID0gaSsxOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bsb3REYXRhW2ldWzFdID0gaSsxOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YWNrRGF0YVtpXVsxXSA9IGkrMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgJC5qcXBsb3QucHJlU2VyaWVzSW5pdEhvb2tzLnB1c2goYmFyUHJlSW5pdCk7CiAgICAKICAgIC8vIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHNjb3BlIG9mIHNlcmllcywgbm90IHJlbmRlcmVyLgogICAgJC5qcXBsb3QuQmFyUmVuZGVyZXIucHJvdG90eXBlLmNhbGNTZXJpZXNOdW1iZXJzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG52YWxzID0gMDsKICAgICAgICB2YXIgbnNlcmllcyA9IDA7CiAgICAgICAgdmFyIHBheGlzID0gdGhpc1t0aGlzLl9wcmltYXJ5QXhpc107CiAgICAgICAgdmFyIHMsIHNlcmllcywgcG9zOwogICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbGwgc2VyaWVzIG9uIHRoaXMgYXhpcwogICAgICAgIGZvciAodmFyIGk9MDsgaSA8IHBheGlzLl9zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgc2VyaWVzID0gcGF4aXMuX3Nlcmllc1tpXTsKICAgICAgICAgICAgaWYgKHNlcmllcyA9PT0gdGhpcykgewogICAgICAgICAgICAgICAgcG9zID0gaTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBpcyB0aGUgc2VyaWVzIHJlbmRlcmVkIGFzIGEgYmFyPwogICAgICAgICAgICBpZiAoc2VyaWVzLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkJhclJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAvLyBncmlkRGF0YSBtYXkgbm90IGJlIGNvbXB1dGVkIHlldCwgdXNlIGRhdGEgbGVuZ3RoIGluc3RlZAogICAgICAgICAgICAgICAgbnZhbHMgKz0gc2VyaWVzLmRhdGEubGVuZ3RoOwogICAgICAgICAgICAgICAgbnNlcmllcyArPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIHJldHVybiB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIGZvciBhbGwgYmFyIHNlcmllcywgdG90YWwgbnVtYmVyIG9mIGJhciBzZXJpZXMsIGFuZCBwb3NpdGlvbiBvZiB0aGlzIHNlcmllcwogICAgICAgIHJldHVybiBbbnZhbHMsIG5zZXJpZXMsIHBvc107CiAgICB9OwoKICAgICQuanFwbG90LkJhclJlbmRlcmVyLnByb3RvdHlwZS5zZXRCYXJXaWR0aCA9IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIG5lZWQgdG8ga25vdyBob3cgbWFueSBkYXRhIHZhbHVlcyB3ZSBoYXZlIG9uIHRoZSBhcHByb3ByYXRlIGF4aXMgYW5kIGZpZ3VyZSBpdCBvdXQuCiAgICAgICAgdmFyIGk7CiAgICAgICAgdmFyIG52YWxzID0gMDsKICAgICAgICB2YXIgbnNlcmllcyA9IDA7CiAgICAgICAgdmFyIHBheGlzID0gdGhpc1t0aGlzLl9wcmltYXJ5QXhpc107CiAgICAgICAgdmFyIHMsIHNlcmllcywgcG9zOwogICAgICAgIHZhciB0ZW1wID0gdGhpcy5fcGxvdFNlcmllc0luZm8gPSB0aGlzLnJlbmRlcmVyLmNhbGNTZXJpZXNOdW1iZXJzLmNhbGwodGhpcyk7CiAgICAgICAgbnZhbHMgPSB0ZW1wWzBdOwogICAgICAgIG5zZXJpZXMgPSB0ZW1wWzFdOwogICAgICAgIHZhciBudGlja3MgPSBwYXhpcy5udW1iZXJUaWNrczsKICAgICAgICB2YXIgbmJpbnMgPSAobnRpY2tzLTEpLzI7CiAgICAgICAgLy8gc28sIG5vdyB3ZSBoYXZlIHRvdGFsIG51bWJlciBvZiBheGlzIHZhbHVlcy4KICAgICAgICBpZiAocGF4aXMubmFtZSA9PSAneGF4aXMnIHx8IHBheGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgaWYgKHRoaXMuX3N0YWNrKSB7CiAgICAgICAgICAgICAgICB0aGlzLmJhcldpZHRoID0gKHBheGlzLl9vZmZzZXRzLm1heCAtIHBheGlzLl9vZmZzZXRzLm1pbikgLyBudmFscyAqIG5zZXJpZXMgLSB0aGlzLmJhck1hcmdpbjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuYmFyV2lkdGggPSAoKHBheGlzLl9vZmZzZXRzLm1heCAtIHBheGlzLl9vZmZzZXRzLm1pbikvbmJpbnMgIC0gdGhpcy5iYXJQYWRkaW5nICogKG5zZXJpZXMtMSkgLSB0aGlzLmJhck1hcmdpbioyKS9uc2VyaWVzOwogICAgICAgICAgICAgICAgLy8gdGhpcy5iYXJXaWR0aCA9IChwYXhpcy5fb2Zmc2V0cy5tYXggLSBwYXhpcy5fb2Zmc2V0cy5taW4pIC8gbnZhbHMgLSB0aGlzLmJhclBhZGRpbmcgLSB0aGlzLmJhck1hcmdpbi9uc2VyaWVzOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAodGhpcy5fc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMuYmFyV2lkdGggPSAocGF4aXMuX29mZnNldHMubWluIC0gcGF4aXMuX29mZnNldHMubWF4KSAvIG52YWxzICogbnNlcmllcyAtIHRoaXMuYmFyTWFyZ2luOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5iYXJXaWR0aCA9ICgocGF4aXMuX29mZnNldHMubWluIC0gcGF4aXMuX29mZnNldHMubWF4KS9uYmlucyAgLSB0aGlzLmJhclBhZGRpbmcgKiAobnNlcmllcy0xKSAtIHRoaXMuYmFyTWFyZ2luKjIpL25zZXJpZXM7CiAgICAgICAgICAgICAgICAvLyB0aGlzLmJhcldpZHRoID0gKHBheGlzLl9vZmZzZXRzLm1pbiAtIHBheGlzLl9vZmZzZXRzLm1heCkgLyBudmFscyAtIHRoaXMuYmFyUGFkZGluZyAtIHRoaXMuYmFyTWFyZ2luL25zZXJpZXM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIFtudmFscywgbnNlcmllc107CiAgICB9OwoKICAgIGZ1bmN0aW9uIGNvbXB1dGVIaWdobGlnaHRDb2xvcnMgKGNvbG9ycykgewogICAgICAgIHZhciByZXQgPSBbXTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8Y29sb3JzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgdmFyIHJnYmEgPSAkLmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHMoY29sb3JzW2ldKTsKICAgICAgICAgICAgdmFyIG5ld3JnYiA9IFtyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdXTsKICAgICAgICAgICAgdmFyIHN1bSA9IG5ld3JnYlswXSArIG5ld3JnYlsxXSArIG5ld3JnYlsyXTsKICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPDM7IGorKykgewogICAgICAgICAgICAgICAgLy8gd2hlbiBkYXJrZW5pbmcsIGxvd2VzdCBjb2xvciBjb21wb25lbnQgY2FuIGJlIGlzIDYwLgogICAgICAgICAgICAgICAgbmV3cmdiW2pdID0gKHN1bSA+IDU3MCkgPyAgbmV3cmdiW2pdICogMC44IDogbmV3cmdiW2pdICsgMC4zICogKDI1NSAtIG5ld3JnYltqXSk7CiAgICAgICAgICAgICAgICBuZXdyZ2Jbal0gPSBwYXJzZUludChuZXdyZ2Jbal0sIDEwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXQucHVzaCgncmdiKCcrbmV3cmdiWzBdKycsJytuZXdyZ2JbMV0rJywnK25ld3JnYlsyXSsnKScpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFN0YXJ0KHNpZHgsIGRpZHgsIGNvbXAsIHBsb3QsIGF4aXMpIHsKICAgICAgICAvLyBjaGVjayBpZiBzaWduIGNoYW5nZQogICAgICAgIHZhciBzZXJpZXNJbmRleCA9IHNpZHgsCiAgICAgICAgICAgIHByZXZTZXJpZXNJbmRleCA9IHNpZHggLSAxLAogICAgICAgICAgICBzdGFydCwKICAgICAgICAgICAgcHJldlZhbCwKICAgICAgICAgICAgYWlkeCA9IChheGlzID09PSAneCcpID8gMCA6IDE7CgogICAgICAgIC8vIGlzIHRoaXMgbm90IHRoZSBmaXJzdCBzZXJpZXM/CiAgICAgICAgaWYgKHNlcmllc0luZGV4ID4gMCkgewogICAgICAgICAgICBwcmV2VmFsID0gcGxvdC5zZXJpZXNbcHJldlNlcmllc0luZGV4XS5fcGxvdERhdGFbZGlkeF1bYWlkeF07CgogICAgICAgICAgICAvLyBpcyB0aGVyZSBhIHNpZ24gY2hhbmdlCiAgICAgICAgICAgIGlmICgoY29tcCAqIHByZXZWYWwpIDwgMCkgewogICAgICAgICAgICAgICAgc3RhcnQgPSBnZXRTdGFydChwcmV2U2VyaWVzSW5kZXgsIGRpZHgsIGNvbXAsIHBsb3QsIGF4aXMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBubyBzaWduIGNoYW5nZS4KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzdGFydCA9IHBsb3Quc2VyaWVzW3ByZXZTZXJpZXNJbmRleF0uZ3JpZERhdGFbZGlkeF1bYWlkeF07CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICAvLyBpZiBmaXJzdCBzZXJpZXMsIHJldHVybiB2YWx1ZSBhdCAwCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICBzdGFydCA9IChhaWR4ID09PSAwKSA/IHBsb3Quc2VyaWVzW3Nlcmllc0luZGV4XS5feGF4aXMuc2VyaWVzX3UycCgwKSA6IHBsb3Quc2VyaWVzW3Nlcmllc0luZGV4XS5feWF4aXMuc2VyaWVzX3UycCgwKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdGFydDsKICAgIH0KCiAgICAKICAgICQuanFwbG90LkJhclJlbmRlcmVyLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24oY3R4LCBncmlkRGF0YSwgb3B0aW9ucywgcGxvdCkgewogICAgICAgIHZhciBpOwogICAgICAgIC8vIFVnaGhoLCBoYXZlIHRvIG1ha2UgYSBjb3B5IG9mIG9wdGlvbnMgYi9jIGl0IG1heSBiZSBtb2RpZmllZCBsYXRlci4KICAgICAgICB2YXIgb3B0cyA9ICQuZXh0ZW5kKHt9LCBvcHRpb25zKTsKICAgICAgICB2YXIgc2hhZG93ID0gKG9wdHMuc2hhZG93ICE9IHVuZGVmaW5lZCkgPyBvcHRzLnNoYWRvdyA6IHRoaXMuc2hhZG93OwogICAgICAgIHZhciBzaG93TGluZSA9IChvcHRzLnNob3dMaW5lICE9IHVuZGVmaW5lZCkgPyBvcHRzLnNob3dMaW5lIDogdGhpcy5zaG93TGluZTsKICAgICAgICB2YXIgZmlsbCA9IChvcHRzLmZpbGwgIT0gdW5kZWZpbmVkKSA/IG9wdHMuZmlsbCA6IHRoaXMuZmlsbDsKICAgICAgICB2YXIgeGF4aXMgPSB0aGlzLnhheGlzOwogICAgICAgIHZhciB5YXhpcyA9IHRoaXMueWF4aXM7CiAgICAgICAgdmFyIHhwID0gdGhpcy5feGF4aXMuc2VyaWVzX3UycDsKICAgICAgICB2YXIgeXAgPSB0aGlzLl95YXhpcy5zZXJpZXNfdTJwOwogICAgICAgIHZhciBwb2ludHgsIHBvaW50eTsKICAgICAgICAvLyBjbGVhciBvdXQgZGF0YSBjb2xvcnMuCiAgICAgICAgdGhpcy5fZGF0YUNvbG9ycyA9IFtdOwogICAgICAgIHRoaXMuX2JhclBvaW50cyA9IFtdOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLmJhcldpZHRoID09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRCYXJXaWR0aC5jYWxsKHRoaXMpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgdGVtcCA9IHRoaXMuX3Bsb3RTZXJpZXNJbmZvID0gdGhpcy5yZW5kZXJlci5jYWxjU2VyaWVzTnVtYmVycy5jYWxsKHRoaXMpOwogICAgICAgIHZhciBudmFscyA9IHRlbXBbMF07CiAgICAgICAgdmFyIG5zZXJpZXMgPSB0ZW1wWzFdOwogICAgICAgIHZhciBwb3MgPSB0ZW1wWzJdOwogICAgICAgIHZhciBwb2ludHMgPSBbXTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5fc3RhY2spIHsKICAgICAgICAgICAgdGhpcy5fYmFyTnVkZ2UgPSAwOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy5fYmFyTnVkZ2UgPSAoLU1hdGguYWJzKG5zZXJpZXMvMiAtIDAuNSkgKyBwb3MpICogKHRoaXMuYmFyV2lkdGggKyB0aGlzLmJhclBhZGRpbmcpOwogICAgICAgIH0KICAgICAgICBpZiAoc2hvd0xpbmUpIHsKICAgICAgICAgICAgdmFyIG5lZ2F0aXZlQ29sb3JzID0gbmV3ICQuanFwbG90LkNvbG9yR2VuZXJhdG9yKHRoaXMubmVnYXRpdmVTZXJpZXNDb2xvcnMpOwogICAgICAgICAgICB2YXIgcG9zaXRpdmVDb2xvcnMgPSBuZXcgJC5qcXBsb3QuQ29sb3JHZW5lcmF0b3IodGhpcy5zZXJpZXNDb2xvcnMpOwogICAgICAgICAgICB2YXIgbmVnYXRpdmVDb2xvciA9IG5lZ2F0aXZlQ29sb3JzLmdldCh0aGlzLmluZGV4KTsKICAgICAgICAgICAgaWYgKCEgdGhpcy51c2VOZWdhdGl2ZUNvbG9ycykgewogICAgICAgICAgICAgICAgbmVnYXRpdmVDb2xvciA9IG9wdHMuZmlsbFN0eWxlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBwb3NpdGl2ZUNvbG9yID0gb3B0cy5maWxsU3R5bGU7CiAgICAgICAgICAgIHZhciBiYXNlOwogICAgICAgICAgICB2YXIgeHN0YXJ0OyAKICAgICAgICAgICAgdmFyIHlzdGFydDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLmJhckRpcmVjdGlvbiA9PSAndmVydGljYWwnKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8Z3JpZERhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3N0YWNrICYmIHRoaXMuZGF0YVtpXVsxXSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICBiYXNlID0gZ3JpZERhdGFbaV1bMF0gKyB0aGlzLl9iYXJOdWRnZTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBzdGFja2VkCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0YWNrICYmIHRoaXMuX3ByZXZHcmlkRGF0YS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgeXN0YXJ0ID0gZ2V0U3RhcnQodGhpcy5pbmRleCwgaSwgdGhpcy5fcGxvdERhdGFbaV1bMV0sIHBsb3QsICd5Jyk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBub3Qgc3RhY2tlZAogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maWxsVG9aZXJvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RhcnQgPSB0aGlzLl95YXhpcy5zZXJpZXNfdTJwKDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMud2F0ZXJmYWxsICYmIGkgPiAwICYmIGkgPCB0aGlzLmdyaWREYXRhLmxlbmd0aC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RhcnQgPSB0aGlzLmdyaWREYXRhW2ktMV1bMV07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy53YXRlcmZhbGwgJiYgaSA9PSAwICYmIGkgPCB0aGlzLmdyaWREYXRhLmxlbmd0aC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5feWF4aXMubWluIDw9IDAgJiYgdGhpcy5feWF4aXMubWF4ID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RhcnQgPSB0aGlzLl95YXhpcy5zZXJpZXNfdTJwKDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5feWF4aXMubWluID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzdGFydCA9IGN0eC5jYW52YXMuaGVpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLndhdGVyZmFsbCAmJiBpID09IHRoaXMuZ3JpZERhdGEubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3lheGlzLm1pbiA8PSAwICYmIHRoaXMuX3lheGlzLm1heCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXN0YXJ0ID0gdGhpcy5feWF4aXMuc2VyaWVzX3UycCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3lheGlzLm1pbiA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RhcnQgPSBjdHguY2FudmFzLmhlaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzdGFydCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RhcnQgPSBjdHguY2FudmFzLmhlaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZmlsbFRvWmVybyAmJiB0aGlzLl9wbG90RGF0YVtpXVsxXSA8IDApIHx8ICh0aGlzLndhdGVyZmFsbCAmJiB0aGlzLl9kYXRhW2ldWzFdIDwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFyeUJhckNvbG9yICYmICF0aGlzLl9zdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudXNlTmVnYXRpdmVDb2xvcnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpbGxTdHlsZSA9IG5lZ2F0aXZlQ29sb3JzLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZmlsbFN0eWxlID0gcG9zaXRpdmVDb2xvcnMubmV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5maWxsU3R5bGUgPSBuZWdhdGl2ZUNvbG9yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YXJ5QmFyQ29sb3IgJiYgIXRoaXMuX3N0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpbGxTdHlsZSA9IHBvc2l0aXZlQ29sb3JzLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZmlsbFN0eWxlID0gcG9zaXRpdmVDb2xvcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZmlsbFRvWmVybyB8fCB0aGlzLl9wbG90RGF0YVtpXVsxXSA+PSAwKSB7IAogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbYmFzZS10aGlzLmJhcldpZHRoLzIsIHlzdGFydF0pOwogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbYmFzZS10aGlzLmJhcldpZHRoLzIsIGdyaWREYXRhW2ldWzFdXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKFtiYXNlK3RoaXMuYmFyV2lkdGgvMiwgZ3JpZERhdGFbaV1bMV1dKTsKICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goW2Jhc2UrdGhpcy5iYXJXaWR0aC8yLCB5c3RhcnRdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gZm9yIG5lZ2F0aXZlIGJhcnMgbWFrZSBzdXJlIHBvaW50cyBhcmUgYWx3YXlzIG9yZGVyZWQgY2xvY2t3aXNlCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goW2Jhc2UtdGhpcy5iYXJXaWR0aC8yLCBncmlkRGF0YVtpXVsxXV0pOwogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbYmFzZS10aGlzLmJhcldpZHRoLzIsIHlzdGFydF0pOwogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbYmFzZSt0aGlzLmJhcldpZHRoLzIsIHlzdGFydF0pOwogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbYmFzZSt0aGlzLmJhcldpZHRoLzIsIGdyaWREYXRhW2ldWzFdXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2JhclBvaW50cy5wdXNoKHBvaW50cyk7CiAgICAgICAgICAgICAgICAgICAgLy8gbm93IGRyYXcgdGhlIHNoYWRvd3MgaWYgbm90IHN0YWNrZWQuCiAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHN0YWNrZWQgcGxvdHMsIHRoZXkgYXJlIHByZWRyYXduIGJ5IGRyYXdTaGFkb3cKICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZG93ICYmICF0aGlzLl9zdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc29wdHMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgb3B0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gZ2V0IHJpZCBvZiBmaWxsU3R5bGUgb24gc2hhZG93LgogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc29wdHMuZmlsbFN0eWxlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCBwb2ludHMsIHNvcHRzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmFyIGNsciA9IG9wdHMuZmlsbFN0eWxlIHx8IHRoaXMuY29sb3I7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YUNvbG9ycy5wdXNoKGNscik7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmRyYXcoY3R4LCBwb2ludHMsIG9wdHMpOyAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5iYXJEaXJlY3Rpb24gPT0gJ2hvcml6b250YWwnKXsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxncmlkRGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc3RhY2sgJiYgdGhpcy5kYXRhW2ldWzBdID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IFtdOwogICAgICAgICAgICAgICAgICAgIGJhc2UgPSBncmlkRGF0YVtpXVsxXSAtIHRoaXMuX2Jhck51ZGdlOwogICAgICAgICAgICAgICAgICAgIHhzdGFydDsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RhY2sgJiYgdGhpcy5fcHJldkdyaWREYXRhLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB4c3RhcnQgPSBnZXRTdGFydCh0aGlzLmluZGV4LCBpLCB0aGlzLl9wbG90RGF0YVtpXVswXSwgcGxvdCwgJ3gnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gbm90IHN0YWNrZWQKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsbFRvWmVybykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0ID0gdGhpcy5feGF4aXMuc2VyaWVzX3UycCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLndhdGVyZmFsbCAmJiBpID4gMCAmJiBpIDwgdGhpcy5ncmlkRGF0YS5sZW5ndGgtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0ID0gdGhpcy5ncmlkRGF0YVtpLTFdWzBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMud2F0ZXJmYWxsICYmIGkgPT0gMCAmJiBpIDwgdGhpcy5ncmlkRGF0YS5sZW5ndGgtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3hheGlzLm1pbiA8PSAwICYmIHRoaXMuX3hheGlzLm1heCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0ID0gdGhpcy5feGF4aXMuc2VyaWVzX3UycCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3hheGlzLm1pbiA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3RhcnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLndhdGVyZmFsbCAmJiBpID09IHRoaXMuZ3JpZERhdGEubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3hheGlzLm1pbiA8PSAwICYmIHRoaXMuX3hheGlzLm1heCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0ID0gdGhpcy5feGF4aXMuc2VyaWVzX3UycCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3hheGlzLm1pbiA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3RhcnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0ID0gY3R4LmNhbnZhcy53aWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdGFydCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmZpbGxUb1plcm8gJiYgdGhpcy5fcGxvdERhdGFbaV1bMF0gPCAwKSB8fCAodGhpcy53YXRlcmZhbGwgJiYgdGhpcy5fZGF0YVtpXVswXSA8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhcnlCYXJDb2xvciAmJiAhdGhpcy5fc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZU5lZ2F0aXZlQ29sb3JzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5maWxsU3R5bGUgPSBuZWdhdGl2ZUNvbG9ycy5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpbGxTdHlsZSA9IHBvc2l0aXZlQ29sb3JzLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZmlsbFN0eWxlID0gbmVnYXRpdmVDb2xvcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFyeUJhckNvbG9yICYmICF0aGlzLl9zdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5maWxsU3R5bGUgPSBwb3NpdGl2ZUNvbG9ycy5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpbGxTdHlsZSA9IHBvc2l0aXZlQ29sb3I7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbGxUb1plcm8gfHwgdGhpcy5fcGxvdERhdGFbaV1bMF0gPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbeHN0YXJ0LCBiYXNlICsgdGhpcy5iYXJXaWR0aCAvIDJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goW3hzdGFydCwgYmFzZSAtIHRoaXMuYmFyV2lkdGggLyAyXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKFtncmlkRGF0YVtpXVswXSwgYmFzZSAtIHRoaXMuYmFyV2lkdGggLyAyXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKFtncmlkRGF0YVtpXVswXSwgYmFzZSArIHRoaXMuYmFyV2lkdGggLyAyXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbZ3JpZERhdGFbaV1bMF0sIGJhc2UgKyB0aGlzLmJhcldpZHRoIC8gMl0pOwogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbZ3JpZERhdGFbaV1bMF0sIGJhc2UgLSB0aGlzLmJhcldpZHRoIC8gMl0pOwogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbeHN0YXJ0LCBiYXNlIC0gdGhpcy5iYXJXaWR0aCAvIDJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goW3hzdGFydCwgYmFzZSArIHRoaXMuYmFyV2lkdGggLyAyXSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB0aGlzLl9iYXJQb2ludHMucHVzaChwb2ludHMpOwogICAgICAgICAgICAgICAgICAgIC8vIG5vdyBkcmF3IHRoZSBzaGFkb3dzIGlmIG5vdCBzdGFja2VkLgogICAgICAgICAgICAgICAgICAgIC8vIGZvciBzdGFja2VkIHBsb3RzLCB0aGV5IGFyZSBwcmVkcmF3biBieSBkcmF3U2hhZG93CiAgICAgICAgICAgICAgICAgICAgaWYgKHNoYWRvdyAmJiAhdGhpcy5fc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvcHRzID0gJC5leHRlbmQodHJ1ZSwge30sIG9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc29wdHMuZmlsbFN0eWxlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCBwb2ludHMsIHNvcHRzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmFyIGNsciA9IG9wdHMuZmlsbFN0eWxlIHx8IHRoaXMuY29sb3I7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YUNvbG9ycy5wdXNoKGNscik7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmRyYXcoY3R4LCBwb2ludHMsIG9wdHMpOwogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgfQogICAgICAgIH0gICAgICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0Q29sb3JzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Q29sb3JzID0gJC5qcXBsb3QuY29tcHV0ZUhpZ2hsaWdodENvbG9ycyh0aGlzLl9kYXRhQ29sb3JzKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZWxzZSBpZiAodHlwZW9mKHRoaXMuaGlnaGxpZ2h0Q29sb3JzKSA9PSAnc3RyaW5nJykgewogICAgICAgICAgICB2YXIgdGVtcCA9IHRoaXMuaGlnaGxpZ2h0Q29sb3JzOwogICAgICAgICAgICB0aGlzLmhpZ2hsaWdodENvbG9ycyA9IFtdOwogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5fZGF0YUNvbG9ycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRDb2xvcnMucHVzaCh0ZW1wKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07CiAgICAKICAgICAKICAgIC8vIGZvciBzdGFja2VkIHBsb3RzLCBzaGFkb3dzIHdpbGwgYmUgcHJlIGRyYXduIGJ5IGRyYXdTaGFkb3cuCiAgICAkLmpxcGxvdC5CYXJSZW5kZXJlci5wcm90b3R5cGUuZHJhd1NoYWRvdyA9IGZ1bmN0aW9uKGN0eCwgZ3JpZERhdGEsIG9wdGlvbnMsIHBsb3QpIHsKICAgICAgICB2YXIgaTsKICAgICAgICB2YXIgb3B0cyA9IChvcHRpb25zICE9IHVuZGVmaW5lZCkgPyBvcHRpb25zIDoge307CiAgICAgICAgdmFyIHNoYWRvdyA9IChvcHRzLnNoYWRvdyAhPSB1bmRlZmluZWQpID8gb3B0cy5zaGFkb3cgOiB0aGlzLnNoYWRvdzsKICAgICAgICB2YXIgc2hvd0xpbmUgPSAob3B0cy5zaG93TGluZSAhPSB1bmRlZmluZWQpID8gb3B0cy5zaG93TGluZSA6IHRoaXMuc2hvd0xpbmU7CiAgICAgICAgdmFyIGZpbGwgPSAob3B0cy5maWxsICE9IHVuZGVmaW5lZCkgPyBvcHRzLmZpbGwgOiB0aGlzLmZpbGw7CiAgICAgICAgdmFyIHhheGlzID0gdGhpcy54YXhpczsKICAgICAgICB2YXIgeWF4aXMgPSB0aGlzLnlheGlzOwogICAgICAgIHZhciB4cCA9IHRoaXMuX3hheGlzLnNlcmllc191MnA7CiAgICAgICAgdmFyIHlwID0gdGhpcy5feWF4aXMuc2VyaWVzX3UycDsKICAgICAgICB2YXIgcG9pbnR4LCBwb2ludHMsIHBvaW50eSwgbnZhbHMsIG5zZXJpZXMsIHBvczsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5fc3RhY2sgJiYgdGhpcy5zaGFkb3cpIHsKICAgICAgICAgICAgaWYgKHRoaXMuYmFyV2lkdGggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRCYXJXaWR0aC5jYWxsKHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgIHZhciB0ZW1wID0gdGhpcy5fcGxvdFNlcmllc0luZm8gPSB0aGlzLnJlbmRlcmVyLmNhbGNTZXJpZXNOdW1iZXJzLmNhbGwodGhpcyk7CiAgICAgICAgICAgIG52YWxzID0gdGVtcFswXTsKICAgICAgICAgICAgbnNlcmllcyA9IHRlbXBbMV07CiAgICAgICAgICAgIHBvcyA9IHRlbXBbMl07CiAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLl9zdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5fYmFyTnVkZ2UgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5fYmFyTnVkZ2UgPSAoLU1hdGguYWJzKG5zZXJpZXMvMiAtIDAuNSkgKyBwb3MpICogKHRoaXMuYmFyV2lkdGggKyB0aGlzLmJhclBhZGRpbmcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzaG93TGluZSkgewogICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0aGlzLmJhckRpcmVjdGlvbiA9PSAndmVydGljYWwnKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGdyaWREYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV1bMV0gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXNlID0gZ3JpZERhdGFbaV1bMF0gKyB0aGlzLl9iYXJOdWRnZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHlzdGFydDsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0YWNrICYmIHRoaXMuX3ByZXZHcmlkRGF0YS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzdGFydCA9IGdldFN0YXJ0KHRoaXMuaW5kZXgsIGksIHRoaXMuX3Bsb3REYXRhW2ldWzFdLCBwbG90LCAneScpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsbFRvWmVybykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzdGFydCA9IHRoaXMuX3lheGlzLnNlcmllc191MnAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RhcnQgPSBjdHguY2FudmFzLmhlaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbYmFzZS10aGlzLmJhcldpZHRoLzIsIHlzdGFydF0pOwogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbYmFzZS10aGlzLmJhcldpZHRoLzIsIGdyaWREYXRhW2ldWzFdXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKFtiYXNlK3RoaXMuYmFyV2lkdGgvMiwgZ3JpZERhdGFbaV1bMV1dKTsKICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goW2Jhc2UrdGhpcy5iYXJXaWR0aC8yLCB5c3RhcnRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGN0eCwgcG9pbnRzLCBvcHRzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5iYXJEaXJlY3Rpb24gPT0gJ2hvcml6b250YWwnKXsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8Z3JpZERhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtpXVswXSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2UgPSBncmlkRGF0YVtpXVsxXSAtIHRoaXMuX2Jhck51ZGdlOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHN0YXJ0OwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RhY2sgJiYgdGhpcy5fcHJldkdyaWREYXRhLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0ID0gZ2V0U3RhcnQodGhpcy5pbmRleCwgaSwgdGhpcy5fcGxvdERhdGFbaV1bMF0sIHBsb3QsICd4Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maWxsVG9aZXJvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0ID0gdGhpcy5feGF4aXMuc2VyaWVzX3UycCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdGFydCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goW3hzdGFydCwgYmFzZSt0aGlzLmJhcldpZHRoLzJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goW2dyaWREYXRhW2ldWzBdLCBiYXNlK3RoaXMuYmFyV2lkdGgvMl0pOwogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbZ3JpZERhdGFbaV1bMF0sIGJhc2UtdGhpcy5iYXJXaWR0aC8yXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKFt4c3RhcnQsIGJhc2UtdGhpcy5iYXJXaWR0aC8yXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50cywgb3B0cyk7CiAgICAgICAgICAgICAgICAgICAgfSAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gICAKICAgICAgICAgICAgCiAgICAgICAgfQogICAgfTsKICAgIAogICAgZnVuY3Rpb24gcG9zdEluaXQodGFyZ2V0LCBkYXRhLCBvcHRpb25zKSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMuc2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnNlcmllc1tpXS5yZW5kZXJlci5jb25zdHJ1Y3RvciA9PSAkLmpxcGxvdC5CYXJSZW5kZXJlcikgewogICAgICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbW91c2VvdmVyIGFuZCBtb3VzZWRvd24gYXQgc2FtZSB0aW1lLgogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VyaWVzW2ldLmhpZ2hsaWdodE1vdXNlT3ZlcikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzW2ldLmhpZ2hsaWdodE1vdXNlRG93biA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyBjYWxsZWQgd2l0aGluIGNvbnRleHQgb2YgcGxvdAogICAgLy8gY3JlYXRlIGEgY2FudmFzIHdoaWNoIHdlIGNhbiBkcmF3IG9uLgogICAgLy8gaW5zZXJ0IGl0IGJlZm9yZSB0aGUgZXZlbnRDYW52YXMsIHNvIGV2ZW50Q2FudmFzIHdpbGwgc3RpbGwgY2FwdHVyZSBldmVudHMuCiAgICBmdW5jdGlvbiBwb3N0UGxvdERyYXcoKSB7CiAgICAgICAgLy8gTWVtb3J5IExlYWtzIHBhdGNoICAgIAogICAgICAgIGlmICh0aGlzLnBsdWdpbnMuYmFyUmVuZGVyZXIgJiYgdGhpcy5wbHVnaW5zLmJhclJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcykgewoKICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmJhclJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5yZXNldENhbnZhcygpOwogICAgICAgICAgICB0aGlzLnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgIAogICAgICAgIHRoaXMucGx1Z2lucy5iYXJSZW5kZXJlciA9IHtoaWdobGlnaHRlZFNlcmllc0luZGV4Om51bGx9OwogICAgICAgIHRoaXMucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRDYW52YXMgPSBuZXcgJC5qcXBsb3QuR2VuZXJpY0NhbnZhcygpOwogICAgICAgIAogICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKHRoaXMucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywgJ2pxcGxvdC1iYXJSZW5kZXJlci1oaWdobGlnaHQtY2FudmFzJywgdGhpcy5fcGxvdERpbWVuc2lvbnMsIHRoaXMpKTsKICAgICAgICB0aGlzLnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLnNldENvbnRleHQoKTsKICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoJ21vdXNlbGVhdmUnLCB7cGxvdDp0aGlzfSwgZnVuY3Rpb24gKGV2KSB7IHVuaGlnaGxpZ2h0KGV2LmRhdGEucGxvdCk7IH0pOwogICAgfSAgIAogICAgCiAgICBmdW5jdGlvbiBoaWdobGlnaHQgKHBsb3QsIHNpZHgsIHBpZHgsIHBvaW50cykgewogICAgICAgIHZhciBzID0gcGxvdC5zZXJpZXNbc2lkeF07CiAgICAgICAgdmFyIGNhbnZhcyA9IHBsb3QucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRDYW52YXM7CiAgICAgICAgY2FudmFzLl9jdHguY2xlYXJSZWN0KDAsMCxjYW52YXMuX2N0eC5jYW52YXMud2lkdGgsIGNhbnZhcy5fY3R4LmNhbnZhcy5oZWlnaHQpOwogICAgICAgIHMuX2hpZ2hsaWdodGVkUG9pbnQgPSBwaWR4OwogICAgICAgIHBsb3QucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4ID0gc2lkeDsKICAgICAgICB2YXIgb3B0cyA9IHtmaWxsU3R5bGU6IHMuaGlnaGxpZ2h0Q29sb3JzW3BpZHhdfTsKICAgICAgICBzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhjYW52YXMuX2N0eCwgcG9pbnRzLCBvcHRzKTsKICAgICAgICBjYW52YXMgPSBudWxsOwogICAgfQogICAgCiAgICBmdW5jdGlvbiB1bmhpZ2hsaWdodCAocGxvdCkgewogICAgICAgIHZhciBjYW52YXMgPSBwbG90LnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzOwogICAgICAgIGNhbnZhcy5fY3R4LmNsZWFyUmVjdCgwLDAsIGNhbnZhcy5fY3R4LmNhbnZhcy53aWR0aCwgY2FudmFzLl9jdHguY2FudmFzLmhlaWdodCk7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHBsb3Quc2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHBsb3Quc2VyaWVzW2ldLl9oaWdobGlnaHRlZFBvaW50ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcGxvdC5wbHVnaW5zLmJhclJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXggPSBudWxsOwogICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoJ2pxcGxvdERhdGFVbmhpZ2hsaWdodCcpOwogICAgICAgIGNhbnZhcyA9ICBudWxsOwogICAgfQogICAgCiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZU1vdmUoZXYsIGdyaWRwb3MsIGRhdGFwb3MsIG5laWdoYm9yLCBwbG90KSB7CiAgICAgICAgaWYgKG5laWdoYm9yKSB7CiAgICAgICAgICAgIHZhciBpbnMgPSBbbmVpZ2hib3Iuc2VyaWVzSW5kZXgsIG5laWdoYm9yLnBvaW50SW5kZXgsIG5laWdoYm9yLmRhdGFdOwogICAgICAgICAgICB2YXIgZXZ0MSA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YU1vdXNlT3ZlcicpOwogICAgICAgICAgICBldnQxLnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgIGV2dDEucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQxLCBpbnMpOwogICAgICAgICAgICBpZiAocGxvdC5zZXJpZXNbaW5zWzBdXS5zaG93ICYmIHBsb3Quc2VyaWVzW2luc1swXV0uaGlnaGxpZ2h0TW91c2VPdmVyICYmCiAgICAgICAgICAgICAgICAhKGluc1swXSA9PSBwbG90LnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCAmJiBpbnNbMV0gPT0gcGxvdC5zZXJpZXNbaW5zWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpIHsKICAgICAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ2pxcGxvdERhdGFIaWdobGlnaHQnKTsKICAgICAgICAgICAgICAgIGV2dC53aGljaCA9IGV2LndoaWNoOwogICAgICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoZXZ0LCBpbnMpOwogICAgICAgICAgICAgICAgaGlnaGxpZ2h0IChwbG90LCBuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IucG9pbnRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChuZWlnaGJvciA9PSBudWxsKSB7CiAgICAgICAgICAgIHVuaGlnaGxpZ2h0IChwbG90KTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICBpZiAobmVpZ2hib3IpIHsKICAgICAgICAgICAgdmFyIGlucyA9IFtuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IuZGF0YV07CiAgICAgICAgICAgIGlmIChwbG90LnNlcmllc1tpbnNbMF1dLmhpZ2hsaWdodE1vdXNlRG93biAmJiAhKGluc1swXSA9PSBwbG90LnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCAmJiBpbnNbMV0gPT0gcGxvdC5zZXJpZXNbaW5zWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpIHsKICAgICAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ2pxcGxvdERhdGFIaWdobGlnaHQnKTsKICAgICAgICAgICAgICAgIGV2dC53aGljaCA9IGV2LndoaWNoOwogICAgICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoZXZ0LCBpbnMpOwogICAgICAgICAgICAgICAgaGlnaGxpZ2h0IChwbG90LCBuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IucG9pbnRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChuZWlnaGJvciA9PSBudWxsKSB7CiAgICAgICAgICAgIHVuaGlnaGxpZ2h0IChwbG90KTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlVXAoZXYsIGdyaWRwb3MsIGRhdGFwb3MsIG5laWdoYm9yLCBwbG90KSB7CiAgICAgICAgdmFyIGlkeCA9IHBsb3QucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4OwogICAgICAgIGlmIChpZHggIT0gbnVsbCAmJiBwbG90LnNlcmllc1tpZHhdLmhpZ2hsaWdodE1vdXNlRG93bikgewogICAgICAgICAgICB1bmhpZ2hsaWdodChwbG90KTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIGlmIChuZWlnaGJvcikgewogICAgICAgICAgICB2YXIgaW5zID0gW25laWdoYm9yLnNlcmllc0luZGV4LCBuZWlnaGJvci5wb2ludEluZGV4LCBuZWlnaGJvci5kYXRhXTsKICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YUNsaWNrJyk7CiAgICAgICAgICAgIGV2dC53aGljaCA9IGV2LndoaWNoOwogICAgICAgICAgICBldnQucGFnZVggPSBldi5wYWdlWDsKICAgICAgICAgICAgZXZ0LnBhZ2VZID0gZXYucGFnZVk7CiAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoZXZ0LCBpbnMpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgZnVuY3Rpb24gaGFuZGxlUmlnaHRDbGljayhldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICBpZiAobmVpZ2hib3IpIHsKICAgICAgICAgICAgdmFyIGlucyA9IFtuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IuZGF0YV07CiAgICAgICAgICAgIHZhciBpZHggPSBwbG90LnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDsKICAgICAgICAgICAgaWYgKGlkeCAhPSBudWxsICYmIHBsb3Quc2VyaWVzW2lkeF0uaGlnaGxpZ2h0TW91c2VEb3duKSB7CiAgICAgICAgICAgICAgICB1bmhpZ2hsaWdodChwbG90KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdqcXBsb3REYXRhUmlnaHRDbGljaycpOwogICAgICAgICAgICBldnQud2hpY2ggPSBldi53aGljaDsKICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKGV2dCwgaW5zKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIAp9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.barRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGQpe2QuanFwbG90LkJhclJlbmRlcmVyPWZ1bmN0aW9uKCl7ZC5qcXBsb3QuTGluZVJlbmRlcmVyLmNhbGwodGhpcyl9O2QuanFwbG90LkJhclJlbmRlcmVyLnByb3RvdHlwZT1uZXcgZC5qcXBsb3QuTGluZVJlbmRlcmVyKCk7ZC5qcXBsb3QuQmFyUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWQuanFwbG90LkJhclJlbmRlcmVyO2QuanFwbG90LkJhclJlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKG8scSl7dGhpcy5iYXJQYWRkaW5nPTg7dGhpcy5iYXJNYXJnaW49MTA7dGhpcy5iYXJEaXJlY3Rpb249InZlcnRpY2FsIjt0aGlzLmJhcldpZHRoPW51bGw7dGhpcy5zaGFkb3dPZmZzZXQ9Mjt0aGlzLnNoYWRvd0RlcHRoPTU7dGhpcy5zaGFkb3dBbHBoYT0wLjA4O3RoaXMud2F0ZXJmYWxsPWZhbHNlO3RoaXMuZ3JvdXBzPTE7dGhpcy52YXJ5QmFyQ29sb3I9ZmFsc2U7dGhpcy5oaWdobGlnaHRNb3VzZU92ZXI9dHJ1ZTt0aGlzLmhpZ2hsaWdodE1vdXNlRG93bj1mYWxzZTt0aGlzLmhpZ2hsaWdodENvbG9ycz1bXTt0aGlzLnRyYW5zcG9zZWREYXRhPXRydWU7dGhpcy5yZW5kZXJlci5hbmltYXRpb249e3Nob3c6ZmFsc2UsZGlyZWN0aW9uOiJkb3duIixzcGVlZDozMDAwLF9zdXBwb3J0ZWQ6dHJ1ZX07dGhpcy5fdHlwZT0iYmFyIjtpZihvLmhpZ2hsaWdodE1vdXNlRG93biYmby5oaWdobGlnaHRNb3VzZU92ZXI9PW51bGwpe28uaGlnaGxpZ2h0TW91c2VPdmVyPWZhbHNlfWQuZXh0ZW5kKHRydWUsdGhpcyxvKTtkLmV4dGVuZCh0cnVlLHRoaXMucmVuZGVyZXIsbyk7dGhpcy5maWxsPXRydWU7aWYodGhpcy5iYXJEaXJlY3Rpb249PT0iaG9yaXpvbnRhbCImJnRoaXMucmVuZGVyZXJPcHRpb25zLmFuaW1hdGlvbiYmdGhpcy5yZW5kZXJlck9wdGlvbnMuYW5pbWF0aW9uLmRpcmVjdGlvbj09bnVsbCl7dGhpcy5yZW5kZXJlci5hbmltYXRpb24uZGlyZWN0aW9uPSJsZWZ0In1pZih0aGlzLndhdGVyZmFsbCl7dGhpcy5maWxsVG9aZXJvPWZhbHNlO3RoaXMuZGlzYWJsZVN0YWNrPXRydWV9aWYodGhpcy5iYXJEaXJlY3Rpb249PSJ2ZXJ0aWNhbCIpe3RoaXMuX3ByaW1hcnlBeGlzPSJfeGF4aXMiO3RoaXMuX3N0YWNrQXhpcz0ieSI7dGhpcy5maWxsQXhpcz0ieSJ9ZWxzZXt0aGlzLl9wcmltYXJ5QXhpcz0iX3lheGlzIjt0aGlzLl9zdGFja0F4aXM9IngiO3RoaXMuZmlsbEF4aXM9IngifXRoaXMuX2hpZ2hsaWdodGVkUG9pbnQ9bnVsbDt0aGlzLl9wbG90U2VyaWVzSW5mbz1udWxsO3RoaXMuX2RhdGFDb2xvcnM9W107dGhpcy5fYmFyUG9pbnRzPVtdO3ZhciBwPXtsaW5lSm9pbjoibWl0ZXIiLGxpbmVDYXA6InJvdW5kIixmaWxsOnRydWUsaXNhcmM6ZmFsc2Usc3Ryb2tlU3R5bGU6dGhpcy5jb2xvcixmaWxsU3R5bGU6dGhpcy5jb2xvcixjbG9zZVBhdGg6dGhpcy5maWxsfTt0aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuaW5pdChwKTt2YXIgbj17bGluZUpvaW46Im1pdGVyIixsaW5lQ2FwOiJyb3VuZCIsZmlsbDp0cnVlLGlzYXJjOmZhbHNlLGFuZ2xlOnRoaXMuc2hhZG93QW5nbGUsb2Zmc2V0OnRoaXMuc2hhZG93T2Zmc2V0LGFscGhhOnRoaXMuc2hhZG93QWxwaGEsZGVwdGg6dGhpcy5zaGFkb3dEZXB0aCxjbG9zZVBhdGg6dGhpcy5maWxsfTt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmluaXQobik7cS5wb3N0SW5pdEhvb2tzLmFkZE9uY2UoaCk7cS5wb3N0RHJhd0hvb2tzLmFkZE9uY2Uoaik7cS5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgianFwbG90TW91c2VNb3ZlIixiKTtxLmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RNb3VzZURvd24iLGEpO3EuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoImpxcGxvdE1vdXNlVXAiLGwpO3EuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoImpxcGxvdENsaWNrIixlKTtxLmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RSaWdodENsaWNrIixtKX07ZnVuY3Rpb24gZyh0LHAsbyx3KXtpZih0aGlzLnJlbmRlcmVyT3B0aW9ucy5iYXJEaXJlY3Rpb249PSJob3Jpem9udGFsIil7dGhpcy5fc3RhY2tBeGlzPSJ4Ijt0aGlzLl9wcmltYXJ5QXhpcz0iX3lheGlzIn1pZih0aGlzLnJlbmRlcmVyT3B0aW9ucy53YXRlcmZhbGw9PXRydWUpe3RoaXMuX2RhdGE9ZC5leHRlbmQodHJ1ZSxbXSx0aGlzLmRhdGEpO3ZhciBzPTA7dmFyIHU9KCF0aGlzLnJlbmRlcmVyT3B0aW9ucy5iYXJEaXJlY3Rpb258fHRoaXMucmVuZGVyZXJPcHRpb25zLmJhckRpcmVjdGlvbj09PSJ2ZXJ0aWNhbCJ8fHRoaXMudHJhbnNwb3NlZERhdGE9PT1mYWxzZSk/MTowO2Zvcih2YXIgcT0wO3E8dGhpcy5kYXRhLmxlbmd0aDtxKyspe3MrPXRoaXMuZGF0YVtxXVt1XTtpZihxPjApe3RoaXMuZGF0YVtxXVt1XSs9dGhpcy5kYXRhW3EtMV1bdV19fXRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoXT0odT09MSk/W3RoaXMuZGF0YS5sZW5ndGgrMSxzXTpbcyx0aGlzLmRhdGEubGVuZ3RoKzFdO3RoaXMuX2RhdGFbdGhpcy5fZGF0YS5sZW5ndGhdPSh1PT0xKT9bdGhpcy5fZGF0YS5sZW5ndGgrMSxzXTpbcyx0aGlzLl9kYXRhLmxlbmd0aCsxXX1pZih0aGlzLnJlbmRlcmVyT3B0aW9ucy5ncm91cHM+MSl7dGhpcy5icmVha09uTnVsbD10cnVlO3ZhciBuPXRoaXMuZGF0YS5sZW5ndGg7dmFyIHY9cGFyc2VJbnQobi90aGlzLnJlbmRlcmVyT3B0aW9ucy5ncm91cHMsMTApO3ZhciByPTA7Zm9yKHZhciBxPXY7cTxuO3ErPXYpe3RoaXMuZGF0YS5zcGxpY2UocStyLDAsW251bGwsbnVsbF0pO3RoaXMuX3Bsb3REYXRhLnNwbGljZShxK3IsMCxbbnVsbCxudWxsXSk7dGhpcy5fc3RhY2tEYXRhLnNwbGljZShxK3IsMCxbbnVsbCxudWxsXSk7cisrfWZvcihxPTA7cTx0aGlzLmRhdGEubGVuZ3RoO3ErKyl7aWYodGhpcy5fcHJpbWFyeUF4aXM9PSJfeGF4aXMiKXt0aGlzLmRhdGFbcV1bMF09cSsxO3RoaXMuX3Bsb3REYXRhW3FdWzBdPXErMTt0aGlzLl9zdGFja0RhdGFbcV1bMF09cSsxfWVsc2V7dGhpcy5kYXRhW3FdWzFdPXErMTt0aGlzLl9wbG90RGF0YVtxXVsxXT1xKzE7dGhpcy5fc3RhY2tEYXRhW3FdWzFdPXErMX19fX1kLmpxcGxvdC5wcmVTZXJpZXNJbml0SG9va3MucHVzaChnKTtkLmpxcGxvdC5CYXJSZW5kZXJlci5wcm90b3R5cGUuY2FsY1Nlcmllc051bWJlcnM9ZnVuY3Rpb24oKXt2YXIgcj0wO3ZhciB0PTA7dmFyIHE9dGhpc1t0aGlzLl9wcmltYXJ5QXhpc107dmFyIHAsbyx1O2Zvcih2YXIgbj0wO248cS5fc2VyaWVzLmxlbmd0aDtuKyspe289cS5fc2VyaWVzW25dO2lmKG89PT10aGlzKXt1PW59aWYoby5yZW5kZXJlci5jb25zdHJ1Y3Rvcj09ZC5qcXBsb3QuQmFyUmVuZGVyZXIpe3IrPW8uZGF0YS5sZW5ndGg7dCs9MX19cmV0dXJuW3IsdCx1XX07ZC5qcXBsb3QuQmFyUmVuZGVyZXIucHJvdG90eXBlLnNldEJhcldpZHRoPWZ1bmN0aW9uKCl7dmFyIHE7dmFyIG49MDt2YXIgbz0wO3ZhciB0PXRoaXNbdGhpcy5fcHJpbWFyeUF4aXNdO3ZhciB4LHIsdjt2YXIgdz10aGlzLl9wbG90U2VyaWVzSW5mbz10aGlzLnJlbmRlcmVyLmNhbGNTZXJpZXNOdW1iZXJzLmNhbGwodGhpcyk7bj13WzBdO289d1sxXTt2YXIgdT10Lm51bWJlclRpY2tzO3ZhciBwPSh1LTEpLzI7aWYodC5uYW1lPT0ieGF4aXMifHx0Lm5hbWU9PSJ4MmF4aXMiKXtpZih0aGlzLl9zdGFjayl7dGhpcy5iYXJXaWR0aD0odC5fb2Zmc2V0cy5tYXgtdC5fb2Zmc2V0cy5taW4pL24qby10aGlzLmJhck1hcmdpbn1lbHNle3RoaXMuYmFyV2lkdGg9KCh0Ll9vZmZzZXRzLm1heC10Ll9vZmZzZXRzLm1pbikvcC10aGlzLmJhclBhZGRpbmcqKG8tMSktdGhpcy5iYXJNYXJnaW4qMikvb319ZWxzZXtpZih0aGlzLl9zdGFjayl7dGhpcy5iYXJXaWR0aD0odC5fb2Zmc2V0cy5taW4tdC5fb2Zmc2V0cy5tYXgpL24qby10aGlzLmJhck1hcmdpbn1lbHNle3RoaXMuYmFyV2lkdGg9KCh0Ll9vZmZzZXRzLm1pbi10Ll9vZmZzZXRzLm1heCkvcC10aGlzLmJhclBhZGRpbmcqKG8tMSktdGhpcy5iYXJNYXJnaW4qMikvb319cmV0dXJuW24sb119O2Z1bmN0aW9uIGYobyl7dmFyIHE9W107Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspe3ZhciByPWQuanFwbG90LmdldENvbG9yQ29tcG9uZW50cyhvW3NdKTt2YXIgbj1bclswXSxyWzFdLHJbMl1dO3ZhciB0PW5bMF0rblsxXStuWzJdO2Zvcih2YXIgcD0wO3A8MztwKyspe25bcF09KHQ+NTcwKT9uW3BdKjAuODpuW3BdKzAuMyooMjU1LW5bcF0pO25bcF09cGFyc2VJbnQobltwXSwxMCl9cS5wdXNoKCJyZ2IoIituWzBdKyIsIituWzFdKyIsIituWzJdKyIpIil9cmV0dXJuIHF9ZnVuY3Rpb24gaSh2LHUscyx0LG8pe3ZhciBxPXYsdz12LTEsbixwLHI9KG89PT0ieCIpPzA6MTtpZihxPjApe3A9dC5zZXJpZXNbd10uX3Bsb3REYXRhW3VdW3JdO2lmKChzKnApPDApe249aSh3LHUscyx0LG8pfWVsc2V7bj10LnNlcmllc1t3XS5ncmlkRGF0YVt1XVtyXX19ZWxzZXtuPShyPT09MCk/dC5zZXJpZXNbcV0uX3hheGlzLnNlcmllc191MnAoMCk6dC5zZXJpZXNbcV0uX3lheGlzLnNlcmllc191MnAoMCl9cmV0dXJuIG59ZC5qcXBsb3QuQmFyUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oRSxMLHEsRyl7dmFyIEk7dmFyIEE9ZC5leHRlbmQoe30scSk7dmFyIHc9KEEuc2hhZG93IT11bmRlZmluZWQpP0Euc2hhZG93OnRoaXMuc2hhZG93O3ZhciBPPShBLnNob3dMaW5lIT11bmRlZmluZWQpP0Euc2hvd0xpbmU6dGhpcy5zaG93TGluZTt2YXIgRj0oQS5maWxsIT11bmRlZmluZWQpP0EuZmlsbDp0aGlzLmZpbGw7dmFyIHA9dGhpcy54YXhpczt2YXIgSj10aGlzLnlheGlzO3ZhciB5PXRoaXMuX3hheGlzLnNlcmllc191MnA7dmFyIEs9dGhpcy5feWF4aXMuc2VyaWVzX3UycDt2YXIgRCxDO3RoaXMuX2RhdGFDb2xvcnM9W107dGhpcy5fYmFyUG9pbnRzPVtdO2lmKHRoaXMuYmFyV2lkdGg9PW51bGwpe3RoaXMucmVuZGVyZXIuc2V0QmFyV2lkdGguY2FsbCh0aGlzKX12YXIgTj10aGlzLl9wbG90U2VyaWVzSW5mbz10aGlzLnJlbmRlcmVyLmNhbGNTZXJpZXNOdW1iZXJzLmNhbGwodGhpcyk7dmFyIHg9TlswXTt2YXIgdj1OWzFdO3ZhciBzPU5bMl07dmFyIEg9W107aWYodGhpcy5fc3RhY2spe3RoaXMuX2Jhck51ZGdlPTB9ZWxzZXt0aGlzLl9iYXJOdWRnZT0oLU1hdGguYWJzKHYvMi0wLjUpK3MpKih0aGlzLmJhcldpZHRoK3RoaXMuYmFyUGFkZGluZyl9aWYoTyl7dmFyIHU9bmV3IGQuanFwbG90LkNvbG9yR2VuZXJhdG9yKHRoaXMubmVnYXRpdmVTZXJpZXNDb2xvcnMpO3ZhciBCPW5ldyBkLmpxcGxvdC5Db2xvckdlbmVyYXRvcih0aGlzLnNlcmllc0NvbG9ycyk7dmFyIE09dS5nZXQodGhpcy5pbmRleCk7aWYoIXRoaXMudXNlTmVnYXRpdmVDb2xvcnMpe009QS5maWxsU3R5bGV9dmFyIHQ9QS5maWxsU3R5bGU7dmFyIHI7dmFyIFA7dmFyIG87aWYodGhpcy5iYXJEaXJlY3Rpb249PSJ2ZXJ0aWNhbCIpe2Zvcih2YXIgST0wO0k8TC5sZW5ndGg7SSsrKXtpZighdGhpcy5fc3RhY2smJnRoaXMuZGF0YVtJXVsxXT09bnVsbCl7Y29udGludWV9SD1bXTtyPUxbSV1bMF0rdGhpcy5fYmFyTnVkZ2U7aWYodGhpcy5fc3RhY2smJnRoaXMuX3ByZXZHcmlkRGF0YS5sZW5ndGgpe289aSh0aGlzLmluZGV4LEksdGhpcy5fcGxvdERhdGFbSV1bMV0sRywieSIpfWVsc2V7aWYodGhpcy5maWxsVG9aZXJvKXtvPXRoaXMuX3lheGlzLnNlcmllc191MnAoMCl9ZWxzZXtpZih0aGlzLndhdGVyZmFsbCYmST4wJiZJPHRoaXMuZ3JpZERhdGEubGVuZ3RoLTEpe289dGhpcy5ncmlkRGF0YVtJLTFdWzFdfWVsc2V7aWYodGhpcy53YXRlcmZhbGwmJkk9PTAmJkk8dGhpcy5ncmlkRGF0YS5sZW5ndGgtMSl7aWYodGhpcy5feWF4aXMubWluPD0wJiZ0aGlzLl95YXhpcy5tYXg+PTApe289dGhpcy5feWF4aXMuc2VyaWVzX3UycCgwKX1lbHNle2lmKHRoaXMuX3lheGlzLm1pbj4wKXtvPUUuY2FudmFzLmhlaWdodH1lbHNle289MH19fWVsc2V7aWYodGhpcy53YXRlcmZhbGwmJkk9PXRoaXMuZ3JpZERhdGEubGVuZ3RoLTEpe2lmKHRoaXMuX3lheGlzLm1pbjw9MCYmdGhpcy5feWF4aXMubWF4Pj0wKXtvPXRoaXMuX3lheGlzLnNlcmllc191MnAoMCl9ZWxzZXtpZih0aGlzLl95YXhpcy5taW4+MCl7bz1FLmNhbnZhcy5oZWlnaHR9ZWxzZXtvPTB9fX1lbHNle289RS5jYW52YXMuaGVpZ2h0fX19fX1pZigodGhpcy5maWxsVG9aZXJvJiZ0aGlzLl9wbG90RGF0YVtJXVsxXTwwKXx8KHRoaXMud2F0ZXJmYWxsJiZ0aGlzLl9kYXRhW0ldWzFdPDApKXtpZih0aGlzLnZhcnlCYXJDb2xvciYmIXRoaXMuX3N0YWNrKXtpZih0aGlzLnVzZU5lZ2F0aXZlQ29sb3JzKXtBLmZpbGxTdHlsZT11Lm5leHQoKX1lbHNle0EuZmlsbFN0eWxlPUIubmV4dCgpfX1lbHNle0EuZmlsbFN0eWxlPU19fWVsc2V7aWYodGhpcy52YXJ5QmFyQ29sb3ImJiF0aGlzLl9zdGFjayl7QS5maWxsU3R5bGU9Qi5uZXh0KCl9ZWxzZXtBLmZpbGxTdHlsZT10fX1pZighdGhpcy5maWxsVG9aZXJvfHx0aGlzLl9wbG90RGF0YVtJXVsxXT49MCl7SC5wdXNoKFtyLXRoaXMuYmFyV2lkdGgvMixvXSk7SC5wdXNoKFtyLXRoaXMuYmFyV2lkdGgvMixMW0ldWzFdXSk7SC5wdXNoKFtyK3RoaXMuYmFyV2lkdGgvMixMW0ldWzFdXSk7SC5wdXNoKFtyK3RoaXMuYmFyV2lkdGgvMixvXSl9ZWxzZXtILnB1c2goW3ItdGhpcy5iYXJXaWR0aC8yLExbSV1bMV1dKTtILnB1c2goW3ItdGhpcy5iYXJXaWR0aC8yLG9dKTtILnB1c2goW3IrdGhpcy5iYXJXaWR0aC8yLG9dKTtILnB1c2goW3IrdGhpcy5iYXJXaWR0aC8yLExbSV1bMV1dKX10aGlzLl9iYXJQb2ludHMucHVzaChIKTtpZih3JiYhdGhpcy5fc3RhY2spe3ZhciB6PWQuZXh0ZW5kKHRydWUse30sQSk7ZGVsZXRlIHouZmlsbFN0eWxlO3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhFLEgseil9dmFyIG49QS5maWxsU3R5bGV8fHRoaXMuY29sb3I7dGhpcy5fZGF0YUNvbG9ycy5wdXNoKG4pO3RoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KEUsSCxBKX19ZWxzZXtpZih0aGlzLmJhckRpcmVjdGlvbj09Imhvcml6b250YWwiKXtmb3IodmFyIEk9MDtJPEwubGVuZ3RoO0krKyl7aWYoIXRoaXMuX3N0YWNrJiZ0aGlzLmRhdGFbSV1bMF09PW51bGwpe2NvbnRpbnVlfUg9W107cj1MW0ldWzFdLXRoaXMuX2Jhck51ZGdlO1A7aWYodGhpcy5fc3RhY2smJnRoaXMuX3ByZXZHcmlkRGF0YS5sZW5ndGgpe1A9aSh0aGlzLmluZGV4LEksdGhpcy5fcGxvdERhdGFbSV1bMF0sRywieCIpfWVsc2V7aWYodGhpcy5maWxsVG9aZXJvKXtQPXRoaXMuX3hheGlzLnNlcmllc191MnAoMCl9ZWxzZXtpZih0aGlzLndhdGVyZmFsbCYmST4wJiZJPHRoaXMuZ3JpZERhdGEubGVuZ3RoLTEpe1A9dGhpcy5ncmlkRGF0YVtJLTFdWzBdfWVsc2V7aWYodGhpcy53YXRlcmZhbGwmJkk9PTAmJkk8dGhpcy5ncmlkRGF0YS5sZW5ndGgtMSl7aWYodGhpcy5feGF4aXMubWluPD0wJiZ0aGlzLl94YXhpcy5tYXg+PTApe1A9dGhpcy5feGF4aXMuc2VyaWVzX3UycCgwKX1lbHNle2lmKHRoaXMuX3hheGlzLm1pbj4wKXtQPTB9ZWxzZXtQPTB9fX1lbHNle2lmKHRoaXMud2F0ZXJmYWxsJiZJPT10aGlzLmdyaWREYXRhLmxlbmd0aC0xKXtpZih0aGlzLl94YXhpcy5taW48PTAmJnRoaXMuX3hheGlzLm1heD49MCl7UD10aGlzLl94YXhpcy5zZXJpZXNfdTJwKDApfWVsc2V7aWYodGhpcy5feGF4aXMubWluPjApe1A9MH1lbHNle1A9RS5jYW52YXMud2lkdGh9fX1lbHNle1A9MH19fX19aWYoKHRoaXMuZmlsbFRvWmVybyYmdGhpcy5fcGxvdERhdGFbSV1bMF08MCl8fCh0aGlzLndhdGVyZmFsbCYmdGhpcy5fZGF0YVtJXVswXTwwKSl7aWYodGhpcy52YXJ5QmFyQ29sb3ImJiF0aGlzLl9zdGFjayl7aWYodGhpcy51c2VOZWdhdGl2ZUNvbG9ycyl7QS5maWxsU3R5bGU9dS5uZXh0KCl9ZWxzZXtBLmZpbGxTdHlsZT1CLm5leHQoKX19ZWxzZXtBLmZpbGxTdHlsZT1NfX1lbHNle2lmKHRoaXMudmFyeUJhckNvbG9yJiYhdGhpcy5fc3RhY2spe0EuZmlsbFN0eWxlPUIubmV4dCgpfWVsc2V7QS5maWxsU3R5bGU9dH19aWYoIXRoaXMuZmlsbFRvWmVyb3x8dGhpcy5fcGxvdERhdGFbSV1bMF0+PTApe0gucHVzaChbUCxyK3RoaXMuYmFyV2lkdGgvMl0pO0gucHVzaChbUCxyLXRoaXMuYmFyV2lkdGgvMl0pO0gucHVzaChbTFtJXVswXSxyLXRoaXMuYmFyV2lkdGgvMl0pO0gucHVzaChbTFtJXVswXSxyK3RoaXMuYmFyV2lkdGgvMl0pfWVsc2V7SC5wdXNoKFtMW0ldWzBdLHIrdGhpcy5iYXJXaWR0aC8yXSk7SC5wdXNoKFtMW0ldWzBdLHItdGhpcy5iYXJXaWR0aC8yXSk7SC5wdXNoKFtQLHItdGhpcy5iYXJXaWR0aC8yXSk7SC5wdXNoKFtQLHIrdGhpcy5iYXJXaWR0aC8yXSl9dGhpcy5fYmFyUG9pbnRzLnB1c2goSCk7aWYodyYmIXRoaXMuX3N0YWNrKXt2YXIgej1kLmV4dGVuZCh0cnVlLHt9LEEpO2RlbGV0ZSB6LmZpbGxTdHlsZTt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoRSxILHopfXZhciBuPUEuZmlsbFN0eWxlfHx0aGlzLmNvbG9yO3RoaXMuX2RhdGFDb2xvcnMucHVzaChuKTt0aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhFLEgsQSl9fX19aWYodGhpcy5oaWdobGlnaHRDb2xvcnMubGVuZ3RoPT0wKXt0aGlzLmhpZ2hsaWdodENvbG9ycz1kLmpxcGxvdC5jb21wdXRlSGlnaGxpZ2h0Q29sb3JzKHRoaXMuX2RhdGFDb2xvcnMpfWVsc2V7aWYodHlwZW9mKHRoaXMuaGlnaGxpZ2h0Q29sb3JzKT09InN0cmluZyIpe3ZhciBOPXRoaXMuaGlnaGxpZ2h0Q29sb3JzO3RoaXMuaGlnaGxpZ2h0Q29sb3JzPVtdO2Zvcih2YXIgST0wO0k8dGhpcy5fZGF0YUNvbG9ycy5sZW5ndGg7SSsrKXt0aGlzLmhpZ2hsaWdodENvbG9ycy5wdXNoKE4pfX19fTtkLmpxcGxvdC5CYXJSZW5kZXJlci5wcm90b3R5cGUuZHJhd1NoYWRvdz1mdW5jdGlvbih6LEcscCxCKXt2YXIgRDt2YXIgdz0ocCE9dW5kZWZpbmVkKT9wOnt9O3ZhciB0PSh3LnNoYWRvdyE9dW5kZWZpbmVkKT93LnNoYWRvdzp0aGlzLnNoYWRvdzt2YXIgST0ody5zaG93TGluZSE9dW5kZWZpbmVkKT93LnNob3dMaW5lOnRoaXMuc2hvd0xpbmU7dmFyIEE9KHcuZmlsbCE9dW5kZWZpbmVkKT93LmZpbGw6dGhpcy5maWxsO3ZhciBvPXRoaXMueGF4aXM7dmFyIEU9dGhpcy55YXhpczt2YXIgdj10aGlzLl94YXhpcy5zZXJpZXNfdTJwO3ZhciBGPXRoaXMuX3lheGlzLnNlcmllc191MnA7dmFyIHksQyx4LHUscyxyO2lmKHRoaXMuX3N0YWNrJiZ0aGlzLnNoYWRvdyl7aWYodGhpcy5iYXJXaWR0aD09bnVsbCl7dGhpcy5yZW5kZXJlci5zZXRCYXJXaWR0aC5jYWxsKHRoaXMpfXZhciBIPXRoaXMuX3Bsb3RTZXJpZXNJbmZvPXRoaXMucmVuZGVyZXIuY2FsY1Nlcmllc051bWJlcnMuY2FsbCh0aGlzKTt1PUhbMF07cz1IWzFdO3I9SFsyXTtpZih0aGlzLl9zdGFjayl7dGhpcy5fYmFyTnVkZ2U9MH1lbHNle3RoaXMuX2Jhck51ZGdlPSgtTWF0aC5hYnMocy8yLTAuNSkrcikqKHRoaXMuYmFyV2lkdGgrdGhpcy5iYXJQYWRkaW5nKX1pZihJKXtpZih0aGlzLmJhckRpcmVjdGlvbj09InZlcnRpY2FsIil7Zm9yKHZhciBEPTA7RDxHLmxlbmd0aDtEKyspe2lmKHRoaXMuZGF0YVtEXVsxXT09bnVsbCl7Y29udGludWV9Qz1bXTt2YXIgcT1HW0RdWzBdK3RoaXMuX2Jhck51ZGdlO3ZhciBuO2lmKHRoaXMuX3N0YWNrJiZ0aGlzLl9wcmV2R3JpZERhdGEubGVuZ3RoKXtuPWkodGhpcy5pbmRleCxELHRoaXMuX3Bsb3REYXRhW0RdWzFdLEIsInkiKX1lbHNle2lmKHRoaXMuZmlsbFRvWmVybyl7bj10aGlzLl95YXhpcy5zZXJpZXNfdTJwKDApfWVsc2V7bj16LmNhbnZhcy5oZWlnaHR9fUMucHVzaChbcS10aGlzLmJhcldpZHRoLzIsbl0pO0MucHVzaChbcS10aGlzLmJhcldpZHRoLzIsR1tEXVsxXV0pO0MucHVzaChbcSt0aGlzLmJhcldpZHRoLzIsR1tEXVsxXV0pO0MucHVzaChbcSt0aGlzLmJhcldpZHRoLzIsbl0pO3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyh6LEMsdyl9fWVsc2V7aWYodGhpcy5iYXJEaXJlY3Rpb249PSJob3Jpem9udGFsIil7Zm9yKHZhciBEPTA7RDxHLmxlbmd0aDtEKyspe2lmKHRoaXMuZGF0YVtEXVswXT09bnVsbCl7Y29udGludWV9Qz1bXTt2YXIgcT1HW0RdWzFdLXRoaXMuX2Jhck51ZGdlO3ZhciBKO2lmKHRoaXMuX3N0YWNrJiZ0aGlzLl9wcmV2R3JpZERhdGEubGVuZ3RoKXtKPWkodGhpcy5pbmRleCxELHRoaXMuX3Bsb3REYXRhW0RdWzBdLEIsIngiKX1lbHNle2lmKHRoaXMuZmlsbFRvWmVybyl7Sj10aGlzLl94YXhpcy5zZXJpZXNfdTJwKDApfWVsc2V7Sj0wfX1DLnB1c2goW0oscSt0aGlzLmJhcldpZHRoLzJdKTtDLnB1c2goW0dbRF1bMF0scSt0aGlzLmJhcldpZHRoLzJdKTtDLnB1c2goW0dbRF1bMF0scS10aGlzLmJhcldpZHRoLzJdKTtDLnB1c2goW0oscS10aGlzLmJhcldpZHRoLzJdKTt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoeixDLHcpfX19fX19O2Z1bmN0aW9uIGgocSxwLG4pe2Zvcih2YXIgbz0wO288dGhpcy5zZXJpZXMubGVuZ3RoO28rKyl7aWYodGhpcy5zZXJpZXNbb10ucmVuZGVyZXIuY29uc3RydWN0b3I9PWQuanFwbG90LkJhclJlbmRlcmVyKXtpZih0aGlzLnNlcmllc1tvXS5oaWdobGlnaHRNb3VzZU92ZXIpe3RoaXMuc2VyaWVzW29dLmhpZ2hsaWdodE1vdXNlRG93bj1mYWxzZX19fX1mdW5jdGlvbiBqKCl7aWYodGhpcy5wbHVnaW5zLmJhclJlbmRlcmVyJiZ0aGlzLnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzKXt0aGlzLnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLnJlc2V0Q2FudmFzKCk7dGhpcy5wbHVnaW5zLmJhclJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcz1udWxsfXRoaXMucGx1Z2lucy5iYXJSZW5kZXJlcj17aGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDpudWxsfTt0aGlzLnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzPW5ldyBkLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZvcmUodGhpcy5wbHVnaW5zLmJhclJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCJqcXBsb3QtYmFyUmVuZGVyZXItaGlnaGxpZ2h0LWNhbnZhcyIsdGhpcy5fcGxvdERpbWVuc2lvbnMsdGhpcykpO3RoaXMucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuc2V0Q29udGV4dCgpO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgibW91c2VsZWF2ZSIse3Bsb3Q6dGhpc30sZnVuY3Rpb24obil7ayhuLmRhdGEucGxvdCl9KX1mdW5jdGlvbiBjKHUsdCxxLHApe3ZhciBvPXUuc2VyaWVzW3RdO3ZhciBuPXUucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRDYW52YXM7bi5fY3R4LmNsZWFyUmVjdCgwLDAsbi5fY3R4LmNhbnZhcy53aWR0aCxuLl9jdHguY2FudmFzLmhlaWdodCk7by5faGlnaGxpZ2h0ZWRQb2ludD1xO3UucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4PXQ7dmFyIHI9e2ZpbGxTdHlsZTpvLmhpZ2hsaWdodENvbG9yc1txXX07by5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmRyYXcobi5fY3R4LHAscik7bj1udWxsfWZ1bmN0aW9uIGsocCl7dmFyIG49cC5wbHVnaW5zLmJhclJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcztuLl9jdHguY2xlYXJSZWN0KDAsMCxuLl9jdHguY2FudmFzLndpZHRoLG4uX2N0eC5jYW52YXMuaGVpZ2h0KTtmb3IodmFyIG89MDtvPHAuc2VyaWVzLmxlbmd0aDtvKyspe3Auc2VyaWVzW29dLl9oaWdobGlnaHRlZFBvaW50PW51bGx9cC5wbHVnaW5zLmJhclJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg9bnVsbDtwLnRhcmdldC50cmlnZ2VyKCJqcXBsb3REYXRhVW5oaWdobGlnaHQiKTtuPW51bGx9ZnVuY3Rpb24gYihyLHEsdSx0LHMpe2lmKHQpe3ZhciBwPVt0LnNlcmllc0luZGV4LHQucG9pbnRJbmRleCx0LmRhdGFdO3ZhciBvPWpRdWVyeS5FdmVudCgianFwbG90RGF0YU1vdXNlT3ZlciIpO28ucGFnZVg9ci5wYWdlWDtvLnBhZ2VZPXIucGFnZVk7cy50YXJnZXQudHJpZ2dlcihvLHApO2lmKHMuc2VyaWVzW3BbMF1dLnNob3cmJnMuc2VyaWVzW3BbMF1dLmhpZ2hsaWdodE1vdXNlT3ZlciYmIShwWzBdPT1zLnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCYmcFsxXT09cy5zZXJpZXNbcFswXV0uX2hpZ2hsaWdodGVkUG9pbnQpKXt2YXIgbj1qUXVlcnkuRXZlbnQoImpxcGxvdERhdGFIaWdobGlnaHQiKTtuLndoaWNoPXIud2hpY2g7bi5wYWdlWD1yLnBhZ2VYO24ucGFnZVk9ci5wYWdlWTtzLnRhcmdldC50cmlnZ2VyKG4scCk7YyhzLHQuc2VyaWVzSW5kZXgsdC5wb2ludEluZGV4LHQucG9pbnRzKX19ZWxzZXtpZih0PT1udWxsKXtrKHMpfX19ZnVuY3Rpb24gYShxLHAsdCxzLHIpe2lmKHMpe3ZhciBvPVtzLnNlcmllc0luZGV4LHMucG9pbnRJbmRleCxzLmRhdGFdO2lmKHIuc2VyaWVzW29bMF1dLmhpZ2hsaWdodE1vdXNlRG93biYmIShvWzBdPT1yLnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCYmb1sxXT09ci5zZXJpZXNbb1swXV0uX2hpZ2hsaWdodGVkUG9pbnQpKXt2YXIgbj1qUXVlcnkuRXZlbnQoImpxcGxvdERhdGFIaWdobGlnaHQiKTtuLndoaWNoPXEud2hpY2g7bi5wYWdlWD1xLnBhZ2VYO24ucGFnZVk9cS5wYWdlWTtyLnRhcmdldC50cmlnZ2VyKG4sbyk7YyhyLHMuc2VyaWVzSW5kZXgscy5wb2ludEluZGV4LHMucG9pbnRzKX19ZWxzZXtpZihzPT1udWxsKXtrKHIpfX19ZnVuY3Rpb24gbChwLG8scyxyLHEpe3ZhciBuPXEucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4O2lmKG4hPW51bGwmJnEuc2VyaWVzW25dLmhpZ2hsaWdodE1vdXNlRG93bil7ayhxKX19ZnVuY3Rpb24gZShxLHAsdCxzLHIpe2lmKHMpe3ZhciBvPVtzLnNlcmllc0luZGV4LHMucG9pbnRJbmRleCxzLmRhdGFdO3ZhciBuPWpRdWVyeS5FdmVudCgianFwbG90RGF0YUNsaWNrIik7bi53aGljaD1xLndoaWNoO24ucGFnZVg9cS5wYWdlWDtuLnBhZ2VZPXEucGFnZVk7ci50YXJnZXQudHJpZ2dlcihuLG8pfX1mdW5jdGlvbiBtKHIscSx1LHQscyl7aWYodCl7dmFyIHA9W3Quc2VyaWVzSW5kZXgsdC5wb2ludEluZGV4LHQuZGF0YV07dmFyIG49cy5wbHVnaW5zLmJhclJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg7aWYobiE9bnVsbCYmcy5zZXJpZXNbbl0uaGlnaGxpZ2h0TW91c2VEb3duKXtrKHMpfXZhciBvPWpRdWVyeS5FdmVudCgianFwbG90RGF0YVJpZ2h0Q2xpY2siKTtvLndoaWNoPXIud2hpY2g7by5wYWdlWD1yLnBhZ2VYO28ucGFnZVk9ci5wYWdlWTtzLnRhcmdldC50cmlnZ2VyKG8scCl9fX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.BezierCurveRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLy8gQ2xhc3M6ICQuanFwbG90LkJlemllckN1cnZlUmVuZGVyZXIuanMKICAgIC8vIFJlbmRlcmVyIHdoaWNoIGRyYXdzIGxpbmVzIGFzIHN0YWNrZWQgYmV6aWVyIGN1cnZlcy4KICAgIC8vIERhdGEgZm9yIHRoZSBsaW5lIHdpbGwgbm90IGJlIHNwZWNpZmllZCBhcyBhbiBhcnJheSBvZgogICAgLy8gW3gsIHldIGRhdGEgcG9pbnQgdmFsdWVzLCBidXQgYXMgYSBhbiBhcnJheSBvZiBbc3RhcnQgcGlvbnQsIGJlemllciBjdXJ2ZV0KICAgIC8vIFNvLCB0aGUgbGluZSBpcyBzcGVjaWZpZWQgYXM6IFtbeHN0YXJ0LCB5c3RhcnRdLCBbY3AxeCwgY3AxeSwgY3AyeCwgY3AyeSwgeGVuZCwgeWVuZF1dLgogICAgJC5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlciA9IGZ1bmN0aW9uKCl7CiAgICAgICAgJC5qcXBsb3QuTGluZVJlbmRlcmVyLmNhbGwodGhpcyk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5CZXppZXJDdXJ2ZVJlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5MaW5lUmVuZGVyZXIoKTsKICAgICQuanFwbG90LkJlemllckN1cnZlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJC5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlcjsKCiAgICAKICAgIC8vIE1ldGhvZDogc2V0R3JpZERhdGEKICAgIC8vIGNvbnZlcnRzIHRoZSB1c2VyIGRhdGEgdmFsdWVzIHRvIGdyaWQgY29vcmRpbmF0ZXMgYW5kIHN0b3JlcyB0aGVtCiAgICAvLyBpbiB0aGUgZ3JpZERhdGEgYXJyYXkuCiAgICAvLyBDYWxsZWQgd2l0aCBzY29wZSBvZiBhIHNlcmllcy4KICAgICQuanFwbG90LkJlemllckN1cnZlUmVuZGVyZXIucHJvdG90eXBlLnNldEdyaWREYXRhID0gZnVuY3Rpb24ocGxvdCkgewogICAgICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBncmlkIGRhdGEKICAgICAgICB2YXIgeHAgPSB0aGlzLl94YXhpcy5zZXJpZXNfdTJwOwogICAgICAgIHZhciB5cCA9IHRoaXMuX3lheGlzLnNlcmllc191MnA7CiAgICAgICAgLy8gdGhpcy5fcGxvdERhdGEgc2hvdWxkIGJlIHNhbWUgYXMgdGhpcy5kYXRhCiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7CiAgICAgICAgdGhpcy5ncmlkRGF0YSA9IFtdOwogICAgICAgIHRoaXMuX3ByZXZHcmlkRGF0YSA9IFtdOwogICAgICAgIC8vIGlmIHNlcmllc0luZGV4ID0gMCwgZmlsbCB0byB4IGF4aXMuCiAgICAgICAgLy8gaWYgc2VyaWVzSW5kZXggPiAwLCBmaWxsIHRvIHByZXZpb3VzIHNlcmllcyBkYXRhLgogICAgICAgIHZhciBpZHggPSB0aGlzLmluZGV4OwogICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgIGlmIChpZHggPT0gMCkgewogICAgICAgICAgICAgICAgdGhpcy5ncmlkRGF0YSA9IFsKICAgICAgICAgICAgICAgICAgICBbeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVswXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIGRhdGFbMF1bMV0pXSwgCiAgICAgICAgICAgICAgICAgICAgW3hwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbMV1bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhWzFdWzFdKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHhwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbMV1bMl0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhWzFdWzNdKSwgIAogICAgICAgICAgICAgICAgICAgICAgICB4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzFdWzRdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVsxXVs1XSldLAogICAgICAgICAgICAgICAgICAgIFt4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzFdWzRdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgdGhpcy5feWF4aXMubWluKV0sCiAgICAgICAgICAgICAgICAgICAgW3hwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbMF1bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCB0aGlzLl95YXhpcy5taW4pXQogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBwc2QgPSBwbG90LnNlcmllc1tpZHgtMV0uZGF0YTsKICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGEgPSBbCiAgICAgICAgICAgICAgICAgICAgW3hwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbMF1bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhWzBdWzFdKV0sIAogICAgICAgICAgICAgICAgICAgIFt4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzFdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVsxXVsxXSksIAogICAgICAgICAgICAgICAgICAgICAgICB4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzFdWzJdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVsxXVszXSksICAKICAgICAgICAgICAgICAgICAgICAgICAgeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVsxXVs0XSksIHlwLmNhbGwodGhpcy5feWF4aXMsIGRhdGFbMV1bNV0pXSwKICAgICAgICAgICAgICAgICAgICBbeHAuY2FsbCh0aGlzLl94YXhpcywgcHNkWzFdWzRdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgcHNkWzFdWzVdKV0sCiAgICAgICAgICAgICAgICAgICAgW3hwLmNhbGwodGhpcy5feGF4aXMsIHBzZFsxXVsyXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIHBzZFsxXVszXSksIAogICAgICAgICAgICAgICAgICAgICAgICB4cC5jYWxsKHRoaXMuX3hheGlzLCBwc2RbMV1bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBwc2RbMV1bMV0pLCAgCiAgICAgICAgICAgICAgICAgICAgICAgIHhwLmNhbGwodGhpcy5feGF4aXMsIHBzZFswXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIHBzZFswXVsxXSldCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoaWR4ID09IDApIHsKICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGEgPSBbCiAgICAgICAgICAgICAgICAgICAgW3hwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbMF1bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhWzBdWzFdKV0sIAogICAgICAgICAgICAgICAgICAgIFt4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzFdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVsxXVsxXSksIAogICAgICAgICAgICAgICAgICAgICAgICB4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzJdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVsyXVsxXSksICAKICAgICAgICAgICAgICAgICAgICAgICAgeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVszXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIGRhdGFbM11bMV0pXSwKICAgICAgICAgICAgICAgICAgICBbeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVszXVsxXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIHRoaXMuX3lheGlzLm1pbildLAogICAgICAgICAgICAgICAgICAgIFt4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzBdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgdGhpcy5feWF4aXMubWluKV0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgcHNkID0gcGxvdC5zZXJpZXNbaWR4LTFdLmRhdGE7CiAgICAgICAgICAgICAgICB0aGlzLmdyaWREYXRhID0gWwogICAgICAgICAgICAgICAgICAgIFt4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzBdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVswXVsxXSldLCAKICAgICAgICAgICAgICAgICAgICBbeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVsxXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIGRhdGFbMV1bMV0pLCAKICAgICAgICAgICAgICAgICAgICAgICAgeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVsyXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIGRhdGFbMl1bMV0pLCAgCiAgICAgICAgICAgICAgICAgICAgICAgIHhwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbM11bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhWzNdWzFdKV0sCiAgICAgICAgICAgICAgICAgICAgW3hwLmNhbGwodGhpcy5feGF4aXMsIHBzZFszXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIHBzZFszXVsxXSldLAogICAgICAgICAgICAgICAgICAgIFt4cC5jYWxsKHRoaXMuX3hheGlzLCBwc2RbMl1bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBwc2RbMl1bMV0pLCAKICAgICAgICAgICAgICAgICAgICAgICAgeHAuY2FsbCh0aGlzLl94YXhpcywgcHNkWzFdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgcHNkWzFdWzFdKSwgIAogICAgICAgICAgICAgICAgICAgICAgICB4cC5jYWxsKHRoaXMuX3hheGlzLCBwc2RbMF1bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBwc2RbMF1bMV0pXQogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8vIE1ldGhvZDogbWFrZUdyaWREYXRhCiAgICAvLyBjb252ZXJ0cyBhbnkgYXJiaXRyYXJ5IGRhdGEgdmFsdWVzIHRvIGdyaWQgY29vcmRpbmF0ZXMgYW5kCiAgICAvLyByZXR1cm5zIHRoZW0uICBUaGlzIG1ldGhvZCBleGlzdHMgc28gdGhhdCBwbHVnaW5zIGNhbiB1c2UgYSBzZXJpZXMnCiAgICAvLyBsaW5lcmVuZGVyZXIgdG8gZ2VuZXJhdGUgZ3JpZCBkYXRhIHBvaW50cyB3aXRob3V0IG92ZXJ3cml0aW5nIHRoZQogICAgLy8gZ3JpZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcmllcy4KICAgIC8vIENhbGxlZCB3aXRoIHNjb3BlIG9mIGEgc2VyaWVzLgogICAgJC5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlci5wcm90b3R5cGUubWFrZUdyaWREYXRhID0gZnVuY3Rpb24oZGF0YSwgcGxvdCkgewogICAgICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBncmlkIGRhdGEKICAgICAgICB2YXIgeHAgPSB0aGlzLl94YXhpcy5zZXJpZXNfdTJwOwogICAgICAgIHZhciB5cCA9IHRoaXMuX3lheGlzLnNlcmllc191MnA7CiAgICAgICAgdmFyIGdkID0gW107CiAgICAgICAgdmFyIHBnZCA9IFtdOwogICAgICAgIC8vIGlmIHNlcmllc0luZGV4ID0gMCwgZmlsbCB0byB4IGF4aXMuCiAgICAgICAgLy8gaWYgc2VyaWVzSW5kZXggPiAwLCBmaWxsIHRvIHByZXZpb3VzIHNlcmllcyBkYXRhLgogICAgICAgIHZhciBpZHggPSB0aGlzLmluZGV4OwogICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgIGlmIChpZHggPT0gMCkgewogICAgICAgICAgICAgICAgZ2QgPSBbCiAgICAgICAgICAgICAgICAgICAgW3hwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbMF1bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhWzBdWzFdKV0sIAogICAgICAgICAgICAgICAgICAgIFt4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzFdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVsxXVsxXSksIAogICAgICAgICAgICAgICAgICAgICAgICB4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzFdWzJdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVsxXVszXSksICAKICAgICAgICAgICAgICAgICAgICAgICAgeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVsxXVs0XSksIHlwLmNhbGwodGhpcy5feWF4aXMsIGRhdGFbMV1bNV0pXSwKICAgICAgICAgICAgICAgICAgICBbeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVsxXVs0XSksIHlwLmNhbGwodGhpcy5feWF4aXMsIHRoaXMuX3lheGlzLm1pbildLAogICAgICAgICAgICAgICAgICAgIFt4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzBdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgdGhpcy5feWF4aXMubWluKV0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgcHNkID0gcGxvdC5zZXJpZXNbaWR4LTFdLmRhdGE7CiAgICAgICAgICAgICAgICBnZCA9IFsKICAgICAgICAgICAgICAgICAgICBbeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVswXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIGRhdGFbMF1bMV0pXSwgCiAgICAgICAgICAgICAgICAgICAgW3hwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbMV1bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhWzFdWzFdKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHhwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbMV1bMl0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhWzFdWzNdKSwgIAogICAgICAgICAgICAgICAgICAgICAgICB4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzFdWzRdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVsxXVs1XSldLAogICAgICAgICAgICAgICAgICAgIFt4cC5jYWxsKHRoaXMuX3hheGlzLCBwc2RbMV1bNF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBwc2RbMV1bNV0pXSwKICAgICAgICAgICAgICAgICAgICBbeHAuY2FsbCh0aGlzLl94YXhpcywgcHNkWzFdWzJdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgcHNkWzFdWzNdKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHhwLmNhbGwodGhpcy5feGF4aXMsIHBzZFsxXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIHBzZFsxXVsxXSksICAKICAgICAgICAgICAgICAgICAgICAgICAgeHAuY2FsbCh0aGlzLl94YXhpcywgcHNkWzBdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgcHNkWzBdWzFdKV0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChpZHggPT0gMCkgewogICAgICAgICAgICAgICAgZ2QgPSBbCiAgICAgICAgICAgICAgICAgICAgW3hwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbMF1bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhWzBdWzFdKV0sIAogICAgICAgICAgICAgICAgICAgIFt4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzFdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVsxXVsxXSksIAogICAgICAgICAgICAgICAgICAgICAgICB4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzJdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVsyXVsxXSksICAKICAgICAgICAgICAgICAgICAgICAgICAgeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVszXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIGRhdGFbM11bMV0pXSwKICAgICAgICAgICAgICAgICAgICBbeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVszXVsxXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIHRoaXMuX3lheGlzLm1pbildLAogICAgICAgICAgICAgICAgICAgIFt4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzBdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgdGhpcy5feWF4aXMubWluKV0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgcHNkID0gcGxvdC5zZXJpZXNbaWR4LTFdLmRhdGE7CiAgICAgICAgICAgICAgICBnZCA9IFsKICAgICAgICAgICAgICAgICAgICBbeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVswXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIGRhdGFbMF1bMV0pXSwgCiAgICAgICAgICAgICAgICAgICAgW3hwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbMV1bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhWzFdWzFdKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHhwLmNhbGwodGhpcy5feGF4aXMsIGRhdGFbMl1bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBkYXRhWzJdWzFdKSwgIAogICAgICAgICAgICAgICAgICAgICAgICB4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhWzNdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVszXVsxXSldLAogICAgICAgICAgICAgICAgICAgIFt4cC5jYWxsKHRoaXMuX3hheGlzLCBwc2RbM11bMF0pLCB5cC5jYWxsKHRoaXMuX3lheGlzLCBwc2RbM11bMV0pXSwKICAgICAgICAgICAgICAgICAgICBbeHAuY2FsbCh0aGlzLl94YXhpcywgcHNkWzJdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgcHNkWzJdWzFdKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHhwLmNhbGwodGhpcy5feGF4aXMsIHBzZFsxXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIHBzZFsxXVsxXSksICAKICAgICAgICAgICAgICAgICAgICAgICAgeHAuY2FsbCh0aGlzLl94YXhpcywgcHNkWzBdWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgcHNkWzBdWzFdKV0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdkOwogICAgfTsKICAgIAoKICAgIC8vIGNhbGxlZCB3aXRoaW4gc2NvcGUgb2Ygc2VyaWVzLgogICAgJC5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlci5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKGN0eCwgZ2QsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgaTsKICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgIGlmIChnZC5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0xpbmUpIHsKICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgICAgICAgICB2YXIgb3B0cyA9IChvcHRpb25zICE9IG51bGwpID8gb3B0aW9ucyA6IHt9OwogICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdHMuZmlsbFN0eWxlIHx8IHRoaXMuY29sb3I7CiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgICAgICBjdHgubW92ZVRvKGdkWzBdWzBdLCBnZFswXVsxXSk7CiAgICAgICAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhnZFsxXVswXSwgZ2RbMV1bMV0sIGdkWzFdWzJdLCBnZFsxXVszXSwgZ2RbMV1bNF0sIGdkWzFdWzVdKTsKICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oZ2RbMl1bMF0sIGdkWzJdWzFdKTsKICAgICAgICAgICAgICAgIGlmIChnZFszXS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oZ2RbM11bMF0sIGdkWzNdWzFdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKGdkWzNdWzBdLCBnZFszXVsxXSwgZ2RbM11bMl0sIGdkWzNdWzNdLCBnZFszXVs0XSwgZ2RbM11bNV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpOwogICAgICAgICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgIH07ICAKICAgIAogICAgJC5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlci5wcm90b3R5cGUuZHJhd1NoYWRvdyA9IGZ1bmN0aW9uKGN0eCwgZ2QsIG9wdGlvbnMpIHsKICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AsIHNoYWRvd3MgZHJhd24gd2l0aCBsaW5lcy4KICAgIH07CiAgICAKICAgICQuanFwbG90LkJlemllckF4aXNSZW5kZXJlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQmV6aWVyQXhpc1JlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIoKTsKICAgICQuanFwbG90LkJlemllckF4aXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5CZXppZXJBeGlzUmVuZGVyZXI7CiAgICAgICAgCiAgICAKICAgIC8vIEF4ZXMgb24gYSBwbG90IHdpdGggQmV6aWVyIEN1cnZlcwogICAgJC5qcXBsb3QuQmV6aWVyQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucyl7CiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CiAgICAgICAgdmFyIGRiID0gdGhpcy5fZGF0YUJvdW5kczsKICAgICAgICAvLyBHbyB0aHJvdWdoIGFsbCB0aGUgc2VyaWVzIGF0dGFjaGVkIHRvIHRoaXMgYXhpcyBhbmQgZmluZAogICAgICAgIC8vIHRoZSBtaW4vbWF4IGJvdW5kcyBmb3IgdGhpcyBheGlzLgogICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLl9zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHMgPSB0aGlzLl9zZXJpZXNbaV07CiAgICAgICAgICAgIHZhciBkID0gcy5kYXRhOyAgCiAgICAgICAgICAgIGlmIChkLmxlbmd0aCA9PSA0KSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8ZC5sZW5ndGg7IGorKykgeyAKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lID09ICd4YXhpcycgfHwgdGhpcy5uYW1lID09ICd4MmF4aXMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkW2pdWzBdIDwgZGIubWluIHx8IGRiLm1pbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYi5taW4gPSBkW2pdWzBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkW2pdWzBdID4gZGIubWF4IHx8IGRiLm1heCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYi5tYXggPSBkW2pdWzBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkW2pdWzFdIDwgZGIubWluIHx8IGRiLm1pbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYi5taW4gPSBkW2pdWzFdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkW2pdWzFdID4gZGIubWF4IHx8IGRiLm1heCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYi5tYXggPSBkW2pdWzFdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gICAgICAgICAgCiAgICAgICAgICAgIGVsc2UgeyAgICAKICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZFswXVswXSA8IGRiLm1pbiB8fCBkYi5taW4gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBkYi5taW4gPSBkWzBdWzBdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZFswXVswXSA+IGRiLm1heCB8fCBkYi5tYXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBkYi5tYXggPSBkWzBdWzBdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8NTsgais9MikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZFsxXVtqXSA8IGRiLm1pbiB8fCBkYi5taW4gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGIubWluID0gZFsxXVtqXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZFsxXVtqXSA+IGRiLm1heCB8fCBkYi5tYXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGIubWF4ID0gZFsxXVtqXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRbMF1bMV0gPCBkYi5taW4gfHwgZGIubWluID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGIubWluID0gZFswXVsxXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGRbMF1bMV0gPiBkYi5tYXggfHwgZGIubWF4ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGIubWF4ID0gZFswXVsxXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqPDY7IGorPTIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRbMV1bal0gPCBkYi5taW4gfHwgZGIubWluID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLm1pbiA9IGRbMV1bal07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRbMV1bal0gPiBkYi5tYXggfHwgZGIubWF4ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLm1heCA9IGRbMV1bal07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8vIHNldHVwIGRlZmF1bHQgcmVuZGVyZXJzIGZvciBheGVzIGFuZCBsZWdlbmQgc28gdXNlciBkb2Vzbid0IGhhdmUgdG8KICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIHBsb3QKICAgIGZ1bmN0aW9uIHByZUluaXQodGFyZ2V0LCBkYXRhLCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5heGVzRGVmYXVsdHMgPSAkLmV4dGVuZCh0cnVlLCB7cGFkOjB9LCBvcHRpb25zLmF4ZXNEZWZhdWx0cyk7CiAgICAgICAgb3B0aW9ucy5zZXJpZXNEZWZhdWx0cyA9IG9wdGlvbnMuc2VyaWVzRGVmYXVsdHMgfHwge307CiAgICAgICAgb3B0aW9ucy5sZWdlbmQgPSAkLmV4dGVuZCh0cnVlLCB7cGxhY2VtZW50OidvdXRzaWRlJ30sIG9wdGlvbnMubGVnZW5kKTsKICAgICAgICAvLyBvbmx5IHNldCB0aGVzZSBpZiB0aGVyZSBpcyBhIHBpZSBzZXJpZXMKICAgICAgICB2YXIgc2V0b3B0cyA9IGZhbHNlOwogICAgICAgIGlmIChvcHRpb25zLnNlcmllc0RlZmF1bHRzLnJlbmRlcmVyID09ICQuanFwbG90LkJlemllckN1cnZlUmVuZGVyZXIpIHsKICAgICAgICAgICAgc2V0b3B0cyA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuc2VyaWVzKSB7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaSA8IG9wdGlvbnMuc2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zZXJpZXNbaV0ucmVuZGVyZXIgPT0gJC5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlcikgewogICAgICAgICAgICAgICAgICAgIHNldG9wdHMgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChzZXRvcHRzKSB7CiAgICAgICAgICAgIG9wdGlvbnMuYXhlc0RlZmF1bHRzLnJlbmRlcmVyID0gJC5qcXBsb3QuQmV6aWVyQXhpc1JlbmRlcmVyOwogICAgICAgIH0KICAgIH0KICAgIAogICAgJC5qcXBsb3QucHJlSW5pdEhvb2tzLnB1c2gocHJlSW5pdCk7CiAgICAKfSkoalF1ZXJ5KTsgICAg]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.BezierCurveRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGIpe2IuanFwbG90LkJlemllckN1cnZlUmVuZGVyZXI9ZnVuY3Rpb24oKXtiLmpxcGxvdC5MaW5lUmVuZGVyZXIuY2FsbCh0aGlzKX07Yi5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlci5wcm90b3R5cGU9bmV3IGIuanFwbG90LkxpbmVSZW5kZXJlcigpO2IuanFwbG90LkJlemllckN1cnZlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWIuanFwbG90LkJlemllckN1cnZlUmVuZGVyZXI7Yi5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlci5wcm90b3R5cGUuc2V0R3JpZERhdGE9ZnVuY3Rpb24oaCl7dmFyIGU9dGhpcy5feGF4aXMuc2VyaWVzX3UycDt2YXIgZz10aGlzLl95YXhpcy5zZXJpZXNfdTJwO3ZhciBmPXRoaXMuZGF0YTt0aGlzLmdyaWREYXRhPVtdO3RoaXMuX3ByZXZHcmlkRGF0YT1bXTt2YXIgZD10aGlzLmluZGV4O2lmKGYubGVuZ3RoPT0yKXtpZihkPT0wKXt0aGlzLmdyaWREYXRhPVtbZS5jYWxsKHRoaXMuX3hheGlzLGZbMF1bMF0pLGcuY2FsbCh0aGlzLl95YXhpcyxmWzBdWzFdKV0sW2UuY2FsbCh0aGlzLl94YXhpcyxmWzFdWzBdKSxnLmNhbGwodGhpcy5feWF4aXMsZlsxXVsxXSksZS5jYWxsKHRoaXMuX3hheGlzLGZbMV1bMl0pLGcuY2FsbCh0aGlzLl95YXhpcyxmWzFdWzNdKSxlLmNhbGwodGhpcy5feGF4aXMsZlsxXVs0XSksZy5jYWxsKHRoaXMuX3lheGlzLGZbMV1bNV0pXSxbZS5jYWxsKHRoaXMuX3hheGlzLGZbMV1bNF0pLGcuY2FsbCh0aGlzLl95YXhpcyx0aGlzLl95YXhpcy5taW4pXSxbZS5jYWxsKHRoaXMuX3hheGlzLGZbMF1bMF0pLGcuY2FsbCh0aGlzLl95YXhpcyx0aGlzLl95YXhpcy5taW4pXV19ZWxzZXt2YXIgYz1oLnNlcmllc1tkLTFdLmRhdGE7dGhpcy5ncmlkRGF0YT1bW2UuY2FsbCh0aGlzLl94YXhpcyxmWzBdWzBdKSxnLmNhbGwodGhpcy5feWF4aXMsZlswXVsxXSldLFtlLmNhbGwodGhpcy5feGF4aXMsZlsxXVswXSksZy5jYWxsKHRoaXMuX3lheGlzLGZbMV1bMV0pLGUuY2FsbCh0aGlzLl94YXhpcyxmWzFdWzJdKSxnLmNhbGwodGhpcy5feWF4aXMsZlsxXVszXSksZS5jYWxsKHRoaXMuX3hheGlzLGZbMV1bNF0pLGcuY2FsbCh0aGlzLl95YXhpcyxmWzFdWzVdKV0sW2UuY2FsbCh0aGlzLl94YXhpcyxjWzFdWzRdKSxnLmNhbGwodGhpcy5feWF4aXMsY1sxXVs1XSldLFtlLmNhbGwodGhpcy5feGF4aXMsY1sxXVsyXSksZy5jYWxsKHRoaXMuX3lheGlzLGNbMV1bM10pLGUuY2FsbCh0aGlzLl94YXhpcyxjWzFdWzBdKSxnLmNhbGwodGhpcy5feWF4aXMsY1sxXVsxXSksZS5jYWxsKHRoaXMuX3hheGlzLGNbMF1bMF0pLGcuY2FsbCh0aGlzLl95YXhpcyxjWzBdWzFdKV1dfX1lbHNle2lmKGQ9PTApe3RoaXMuZ3JpZERhdGE9W1tlLmNhbGwodGhpcy5feGF4aXMsZlswXVswXSksZy5jYWxsKHRoaXMuX3lheGlzLGZbMF1bMV0pXSxbZS5jYWxsKHRoaXMuX3hheGlzLGZbMV1bMF0pLGcuY2FsbCh0aGlzLl95YXhpcyxmWzFdWzFdKSxlLmNhbGwodGhpcy5feGF4aXMsZlsyXVswXSksZy5jYWxsKHRoaXMuX3lheGlzLGZbMl1bMV0pLGUuY2FsbCh0aGlzLl94YXhpcyxmWzNdWzBdKSxnLmNhbGwodGhpcy5feWF4aXMsZlszXVsxXSldLFtlLmNhbGwodGhpcy5feGF4aXMsZlszXVsxXSksZy5jYWxsKHRoaXMuX3lheGlzLHRoaXMuX3lheGlzLm1pbildLFtlLmNhbGwodGhpcy5feGF4aXMsZlswXVswXSksZy5jYWxsKHRoaXMuX3lheGlzLHRoaXMuX3lheGlzLm1pbildXX1lbHNle3ZhciBjPWguc2VyaWVzW2QtMV0uZGF0YTt0aGlzLmdyaWREYXRhPVtbZS5jYWxsKHRoaXMuX3hheGlzLGZbMF1bMF0pLGcuY2FsbCh0aGlzLl95YXhpcyxmWzBdWzFdKV0sW2UuY2FsbCh0aGlzLl94YXhpcyxmWzFdWzBdKSxnLmNhbGwodGhpcy5feWF4aXMsZlsxXVsxXSksZS5jYWxsKHRoaXMuX3hheGlzLGZbMl1bMF0pLGcuY2FsbCh0aGlzLl95YXhpcyxmWzJdWzFdKSxlLmNhbGwodGhpcy5feGF4aXMsZlszXVswXSksZy5jYWxsKHRoaXMuX3lheGlzLGZbM11bMV0pXSxbZS5jYWxsKHRoaXMuX3hheGlzLGNbM11bMF0pLGcuY2FsbCh0aGlzLl95YXhpcyxjWzNdWzFdKV0sW2UuY2FsbCh0aGlzLl94YXhpcyxjWzJdWzBdKSxnLmNhbGwodGhpcy5feWF4aXMsY1syXVsxXSksZS5jYWxsKHRoaXMuX3hheGlzLGNbMV1bMF0pLGcuY2FsbCh0aGlzLl95YXhpcyxjWzFdWzFdKSxlLmNhbGwodGhpcy5feGF4aXMsY1swXVswXSksZy5jYWxsKHRoaXMuX3lheGlzLGNbMF1bMV0pXV19fX07Yi5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlci5wcm90b3R5cGUubWFrZUdyaWREYXRhPWZ1bmN0aW9uKGcsaSl7dmFyIGY9dGhpcy5feGF4aXMuc2VyaWVzX3UycDt2YXIgaD10aGlzLl95YXhpcy5zZXJpZXNfdTJwO3ZhciBlPVtdO3ZhciBqPVtdO3ZhciBkPXRoaXMuaW5kZXg7aWYoZy5sZW5ndGg9PTIpe2lmKGQ9PTApe2U9W1tmLmNhbGwodGhpcy5feGF4aXMsZ1swXVswXSksaC5jYWxsKHRoaXMuX3lheGlzLGdbMF1bMV0pXSxbZi5jYWxsKHRoaXMuX3hheGlzLGdbMV1bMF0pLGguY2FsbCh0aGlzLl95YXhpcyxnWzFdWzFdKSxmLmNhbGwodGhpcy5feGF4aXMsZ1sxXVsyXSksaC5jYWxsKHRoaXMuX3lheGlzLGdbMV1bM10pLGYuY2FsbCh0aGlzLl94YXhpcyxnWzFdWzRdKSxoLmNhbGwodGhpcy5feWF4aXMsZ1sxXVs1XSldLFtmLmNhbGwodGhpcy5feGF4aXMsZ1sxXVs0XSksaC5jYWxsKHRoaXMuX3lheGlzLHRoaXMuX3lheGlzLm1pbildLFtmLmNhbGwodGhpcy5feGF4aXMsZ1swXVswXSksaC5jYWxsKHRoaXMuX3lheGlzLHRoaXMuX3lheGlzLm1pbildXX1lbHNle3ZhciBjPWkuc2VyaWVzW2QtMV0uZGF0YTtlPVtbZi5jYWxsKHRoaXMuX3hheGlzLGdbMF1bMF0pLGguY2FsbCh0aGlzLl95YXhpcyxnWzBdWzFdKV0sW2YuY2FsbCh0aGlzLl94YXhpcyxnWzFdWzBdKSxoLmNhbGwodGhpcy5feWF4aXMsZ1sxXVsxXSksZi5jYWxsKHRoaXMuX3hheGlzLGdbMV1bMl0pLGguY2FsbCh0aGlzLl95YXhpcyxnWzFdWzNdKSxmLmNhbGwodGhpcy5feGF4aXMsZ1sxXVs0XSksaC5jYWxsKHRoaXMuX3lheGlzLGdbMV1bNV0pXSxbZi5jYWxsKHRoaXMuX3hheGlzLGNbMV1bNF0pLGguY2FsbCh0aGlzLl95YXhpcyxjWzFdWzVdKV0sW2YuY2FsbCh0aGlzLl94YXhpcyxjWzFdWzJdKSxoLmNhbGwodGhpcy5feWF4aXMsY1sxXVszXSksZi5jYWxsKHRoaXMuX3hheGlzLGNbMV1bMF0pLGguY2FsbCh0aGlzLl95YXhpcyxjWzFdWzFdKSxmLmNhbGwodGhpcy5feGF4aXMsY1swXVswXSksaC5jYWxsKHRoaXMuX3lheGlzLGNbMF1bMV0pXV19fWVsc2V7aWYoZD09MCl7ZT1bW2YuY2FsbCh0aGlzLl94YXhpcyxnWzBdWzBdKSxoLmNhbGwodGhpcy5feWF4aXMsZ1swXVsxXSldLFtmLmNhbGwodGhpcy5feGF4aXMsZ1sxXVswXSksaC5jYWxsKHRoaXMuX3lheGlzLGdbMV1bMV0pLGYuY2FsbCh0aGlzLl94YXhpcyxnWzJdWzBdKSxoLmNhbGwodGhpcy5feWF4aXMsZ1syXVsxXSksZi5jYWxsKHRoaXMuX3hheGlzLGdbM11bMF0pLGguY2FsbCh0aGlzLl95YXhpcyxnWzNdWzFdKV0sW2YuY2FsbCh0aGlzLl94YXhpcyxnWzNdWzFdKSxoLmNhbGwodGhpcy5feWF4aXMsdGhpcy5feWF4aXMubWluKV0sW2YuY2FsbCh0aGlzLl94YXhpcyxnWzBdWzBdKSxoLmNhbGwodGhpcy5feWF4aXMsdGhpcy5feWF4aXMubWluKV1dfWVsc2V7dmFyIGM9aS5zZXJpZXNbZC0xXS5kYXRhO2U9W1tmLmNhbGwodGhpcy5feGF4aXMsZ1swXVswXSksaC5jYWxsKHRoaXMuX3lheGlzLGdbMF1bMV0pXSxbZi5jYWxsKHRoaXMuX3hheGlzLGdbMV1bMF0pLGguY2FsbCh0aGlzLl95YXhpcyxnWzFdWzFdKSxmLmNhbGwodGhpcy5feGF4aXMsZ1syXVswXSksaC5jYWxsKHRoaXMuX3lheGlzLGdbMl1bMV0pLGYuY2FsbCh0aGlzLl94YXhpcyxnWzNdWzBdKSxoLmNhbGwodGhpcy5feWF4aXMsZ1szXVsxXSldLFtmLmNhbGwodGhpcy5feGF4aXMsY1szXVswXSksaC5jYWxsKHRoaXMuX3lheGlzLGNbM11bMV0pXSxbZi5jYWxsKHRoaXMuX3hheGlzLGNbMl1bMF0pLGguY2FsbCh0aGlzLl95YXhpcyxjWzJdWzFdKSxmLmNhbGwodGhpcy5feGF4aXMsY1sxXVswXSksaC5jYWxsKHRoaXMuX3lheGlzLGNbMV1bMV0pLGYuY2FsbCh0aGlzLl94YXhpcyxjWzBdWzBdKSxoLmNhbGwodGhpcy5feWF4aXMsY1swXVsxXSldXX19cmV0dXJuIGV9O2IuanFwbG90LkJlemllckN1cnZlUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYyxnLGQpe3ZhciBlO2Muc2F2ZSgpO2lmKGcubGVuZ3RoKXtpZih0aGlzLnNob3dMaW5lKXtjLnNhdmUoKTt2YXIgZj0oZCE9bnVsbCk/ZDp7fTtjLmZpbGxTdHlsZT1mLmZpbGxTdHlsZXx8dGhpcy5jb2xvcjtjLmJlZ2luUGF0aCgpO2MubW92ZVRvKGdbMF1bMF0sZ1swXVsxXSk7Yy5iZXppZXJDdXJ2ZVRvKGdbMV1bMF0sZ1sxXVsxXSxnWzFdWzJdLGdbMV1bM10sZ1sxXVs0XSxnWzFdWzVdKTtjLmxpbmVUbyhnWzJdWzBdLGdbMl1bMV0pO2lmKGdbM10ubGVuZ3RoPT0yKXtjLmxpbmVUbyhnWzNdWzBdLGdbM11bMV0pfWVsc2V7Yy5iZXppZXJDdXJ2ZVRvKGdbM11bMF0sZ1szXVsxXSxnWzNdWzJdLGdbM11bM10sZ1szXVs0XSxnWzNdWzVdKX1jLmNsb3NlUGF0aCgpO2MuZmlsbCgpO2MucmVzdG9yZSgpfX1jLnJlc3RvcmUoKX07Yi5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlci5wcm90b3R5cGUuZHJhd1NoYWRvdz1mdW5jdGlvbihjLGUsZCl7fTtiLmpxcGxvdC5CZXppZXJBeGlzUmVuZGVyZXI9ZnVuY3Rpb24oKXtiLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIuY2FsbCh0aGlzKX07Yi5qcXBsb3QuQmV6aWVyQXhpc1JlbmRlcmVyLnByb3RvdHlwZT1uZXcgYi5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyKCk7Yi5qcXBsb3QuQmV6aWVyQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1iLmpxcGxvdC5CZXppZXJBeGlzUmVuZGVyZXI7Yi5qcXBsb3QuQmV6aWVyQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGYpe2IuZXh0ZW5kKHRydWUsdGhpcyxmKTt2YXIgYz10aGlzLl9kYXRhQm91bmRzO2Zvcih2YXIgZz0wO2c8dGhpcy5fc2VyaWVzLmxlbmd0aDtnKyspe3ZhciBoPXRoaXMuX3Nlcmllc1tnXTt2YXIgaz1oLmRhdGE7aWYoay5sZW5ndGg9PTQpe2Zvcih2YXIgZT0wO2U8ay5sZW5ndGg7ZSsrKXtpZih0aGlzLm5hbWU9PSJ4YXhpcyJ8fHRoaXMubmFtZT09IngyYXhpcyIpe2lmKGtbZV1bMF08Yy5taW58fGMubWluPT1udWxsKXtjLm1pbj1rW2VdWzBdfWlmKGtbZV1bMF0+Yy5tYXh8fGMubWF4PT1udWxsKXtjLm1heD1rW2VdWzBdfX1lbHNle2lmKGtbZV1bMV08Yy5taW58fGMubWluPT1udWxsKXtjLm1pbj1rW2VdWzFdfWlmKGtbZV1bMV0+Yy5tYXh8fGMubWF4PT1udWxsKXtjLm1heD1rW2VdWzFdfX19fWVsc2V7aWYodGhpcy5uYW1lPT0ieGF4aXMifHx0aGlzLm5hbWU9PSJ4MmF4aXMiKXtpZihrWzBdWzBdPGMubWlufHxjLm1pbj09bnVsbCl7Yy5taW49a1swXVswXX1pZihrWzBdWzBdPmMubWF4fHxjLm1heD09bnVsbCl7Yy5tYXg9a1swXVswXX1mb3IodmFyIGU9MDtlPDU7ZSs9Mil7aWYoa1sxXVtlXTxjLm1pbnx8Yy5taW49PW51bGwpe2MubWluPWtbMV1bZV19aWYoa1sxXVtlXT5jLm1heHx8Yy5tYXg9PW51bGwpe2MubWF4PWtbMV1bZV19fX1lbHNle2lmKGtbMF1bMV08Yy5taW58fGMubWluPT1udWxsKXtjLm1pbj1rWzBdWzFdfWlmKGtbMF1bMV0+Yy5tYXh8fGMubWF4PT1udWxsKXtjLm1heD1rWzBdWzFdfWZvcih2YXIgZT0xO2U8NjtlKz0yKXtpZihrWzFdW2VdPGMubWlufHxjLm1pbj09bnVsbCl7Yy5taW49a1sxXVtlXX1pZihrWzFdW2VdPmMubWF4fHxjLm1heD09bnVsbCl7Yy5tYXg9a1sxXVtlXX19fX19fTtmdW5jdGlvbiBhKGcsZixkKXtkPWR8fHt9O2QuYXhlc0RlZmF1bHRzPWIuZXh0ZW5kKHRydWUse3BhZDowfSxkLmF4ZXNEZWZhdWx0cyk7ZC5zZXJpZXNEZWZhdWx0cz1kLnNlcmllc0RlZmF1bHRzfHx7fTtkLmxlZ2VuZD1iLmV4dGVuZCh0cnVlLHtwbGFjZW1lbnQ6Im91dHNpZGUifSxkLmxlZ2VuZCk7dmFyIGM9ZmFsc2U7aWYoZC5zZXJpZXNEZWZhdWx0cy5yZW5kZXJlcj09Yi5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlcil7Yz10cnVlfWVsc2V7aWYoZC5zZXJpZXMpe2Zvcih2YXIgZT0wO2U8ZC5zZXJpZXMubGVuZ3RoO2UrKyl7aWYoZC5zZXJpZXNbZV0ucmVuZGVyZXI9PWIuanFwbG90LkJlemllckN1cnZlUmVuZGVyZXIpe2M9dHJ1ZX19fX1pZihjKXtkLmF4ZXNEZWZhdWx0cy5yZW5kZXJlcj1iLmpxcGxvdC5CZXppZXJBeGlzUmVuZGVyZXJ9fWIuanFwbG90LnByZUluaXRIb29rcy5wdXNoKGEpfSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.blockRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLyoqCiAgICAgKiBDbGFzczogJC5qcXBsb3QuQmxvY2tSZW5kZXJlcgogICAgICogUGx1Z2luIHJlbmRlcmVyIHRvIGRyYXcgYSB4LXkgYmxvY2sgY2hhcnQuICBBIEJsb2NrIGNoYXJ0IGhhcyBkYXRhIHBvaW50cyBkaXNwbGF5ZWQgYXMKICAgICAqIGNvbG9yZWQgc3F1YXJlcyB3aXRoIGEgdGV4dCBsYWJlbCBpbnNpZGUuICBEYXRhIG11c3QgYmUgc3VwcGxpZWQgaW4gdGhlIGZvcm06CiAgICAgKiAKICAgICAqID4gW1t4MSwgeTEsICJsYWJlbCAxIiwge2Nzc31dLCBbeDIsIHkyLCAibGFiZWwgMiIsIHtjc3N9XSwgLi4uXQogICAgICogCiAgICAgKiBUaGUgbGFiZWwgYW5kIGNzcyBvYmplY3QgYXJlIG9wdGlvbmFsLiAgSWYgdGhlIGxhYmVsIGlzIG9tbWl0dGVkLCB0aGUKICAgICAqIGJveCB3aWxsIGNvbGxhcHNlIHVubGVzcyBhIGNzcyBoZWlnaHQgYW5kL29yIHdpZHRoIGlzIHNwZWNpZmllZC4KICAgICAqIAogICAgICogVGhlIGNzcyBvYmplY3QgaXMgYW4gb2JqZWN0IHNwZWNpZnlpbmcgY3NzIHByb3BlcnRpZXMgCiAgICAgKiBzdWNoIGFzOgogICAgICogCiAgICAgKiA+IHtiYWNrZ3JvdW5kOicjNGY5OGE1JywgYm9yZGVyOiczcHggc29saWQgZ3JheScsIHBhZGRpbmc6JzFweCd9CiAgICAgKiAKICAgICAqIE5vdGUgdGhhdCBjc3MgcHJvcGVydGllcyBzcGVjaWZpZWQgd2l0aCB0aGUgZGF0YSBwb2ludCBvdmVycmlkZSBkZWZhdWx0cwogICAgICogc3BlY2lmaWVkIHdpdGggdGhlIHNlcmllcy4KICAgICAqIAogICAgICovCiAgICAkLmpxcGxvdC5CbG9ja1JlbmRlcmVyID0gZnVuY3Rpb24oKXsKICAgICAgICAkLmpxcGxvdC5MaW5lUmVuZGVyZXIuY2FsbCh0aGlzKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkJsb2NrUmVuZGVyZXIucHJvdG90eXBlID0gbmV3ICQuanFwbG90LkxpbmVSZW5kZXJlcigpOwogICAgJC5qcXBsb3QuQmxvY2tSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5CbG9ja1JlbmRlcmVyOwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBhIHNlcmllcwogICAgJC5qcXBsb3QuQmxvY2tSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAvLyBHcm91cDogUHJvcGVydGllcwogICAgICAgIC8vCiAgICAgICAgLy8gcHJvcDogY3NzCiAgICAgICAgLy8gZGVmYXVsdCBjc3Mgc3R5bGVzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbCBkYXRhIGJsb2Nrcy4KICAgICAgICAvLyB0aGVzZSB2YWx1ZXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IGNzcyBzdHlsZXMgc3VwcGxpZWQgd2l0aCB0aGUKICAgICAgICAvLyBpbmRpdmlkdWxhbCBkYXRhIHBvaW50cy4KICAgICAgICB0aGlzLmNzcyA9IHtwYWRkaW5nOicycHgnLCBib3JkZXI6JzFweCBzb2xpZCAjOTk5JywgdGV4dEFsaWduOidjZW50ZXInfTsKICAgICAgICAvLyBwcm9wOiBlc2NhcGVIdG1sCiAgICAgICAgLy8gdHJ1ZSB0byBlc2NhcGUgaHRtbCBpbiB0aGUgYm94IGxhYmVsLgogICAgICAgIHRoaXMuZXNjYXBlSHRtbCA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGluc2VydEJyZWFrcwogICAgICAgIC8vIHRydWUgdG8gdHVybiBzcGFjZXMgaW4gZGF0YSBibG9jayBsYWJlbCBpbnRvIGh0bWwgYnJlYWtzIDxiciAvPi4KICAgICAgICB0aGlzLmluc2VydEJyZWFrcyA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogdmFyeUJsb2NrQ29sb3JzCiAgICAgICAgLy8gdHJ1ZSB0byB2YXJ5IHRoZSBjb2xvciBvZiBlYWNoIGJsb2NrIGluIHRoaXMgc2VyaWVzIGFjY29yZGluZyB0bwogICAgICAgIC8vIHRoZSBzZXJpZXNDb2xvcnMgYXJyYXkuICBGYWxzZSB0byBzZXQgZWFjaCBibG9jayB0byB0aGUgY29sb3IKICAgICAgICAvLyBzcGVjaWZpZWQgb24gdGhpcyBzZXJpZXMuICBUaGlzIGhhcyBubyBlZmZlY3QgaWYgYSBjc3MgYmFja2dyb3VuZCBjb2xvcgogICAgICAgIC8vIG9wdGlvbiBpcyBzcGVjaWZpZWQgaW4gdGhlIHJlbmRlcmVyIGNzcyBvcHRpb25zLgogICAgICAgIHRoaXMudmFyeUJsb2NrQ29sb3JzID0gZmFsc2U7CiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CiAgICAgICAgaWYgKHRoaXMuY3NzLmJhY2tncm91bmRDb2xvcikgewogICAgICAgICAgICB0aGlzLmNvbG9yID0gdGhpcy5jc3MuYmFja2dyb3VuZENvbG9yOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0aGlzLmNzcy5iYWNrZ3JvdW5kKSB7CiAgICAgICAgICAgIHRoaXMuY29sb3IgPSB0aGlzLmNzcy5iYWNrZ3JvdW5kOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICghdGhpcy52YXJ5QmxvY2tDb2xvcnMpIHsKICAgICAgICAgICAgdGhpcy5jc3MuYmFja2dyb3VuZCA9IHRoaXMuY29sb3I7CiAgICAgICAgfQogICAgICAgIHRoaXMuY2FudmFzID0gbmV3ICQuanFwbG90LkJsb2NrQ2FudmFzKCk7CiAgICAgICAgdGhpcy5zaGFkb3dDYW52YXMgPSAgbmV3ICQuanFwbG90LkJsb2NrQ2FudmFzKCk7CiAgICAgICAgdGhpcy5jYW52YXMuX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CiAgICAgICAgdGhpcy5zaGFkb3dDYW52YXMuX3Bsb3REaW1lbnNpb25zID0gdGhpcy5fcGxvdERpbWVuc2lvbnM7CiAgICAgICAgdGhpcy5fdHlwZSA9ICdibG9jayc7CiAgICAgICAgCiAgICAgICAgLy8gZ3JvdXA6IE1ldGhvZHMgCiAgICAgICAgLy8KICAgICAgICAvLyBNZXRob2Q6IG1vdmVCbG9jawogICAgICAgIC8vIE1vdmVzIGFuIGluZGl2aWR1YWwgYmxvY2suICBNb3JlIGVmZmljaWVudCB0aGFuIHJlZHJhd2luZwogICAgICAgIC8vIHRoZSB3aG9sZSBzZXJpZXMgYnkgY2FsbGluZyBwbG90LmRyYXdTZXJpZXMoKS4KICAgICAgICAvLyBQcm9wZXJ0aWVzOgogICAgICAgIC8vIGlkeCAtIHRoZSAwIGJhc2VkIGluZGV4IG9mIHRoZSBibG9jayBvciBwb2ludCBpbiB0aGlzIHNlcmllcy4KICAgICAgICAvLyB4IC0gdGhlIHggY29vcmRpbmF0ZSBpbiBkYXRhIHVuaXRzICh2YWx1ZSBvbiB4IGF4aXMpIHRvIG1vdmUgdGhlIGJsb2NrIHRvLgogICAgICAgIC8vIHkgLSB0aGUgeSBjb29yZGluYXRlIGluIGRhdGEgdW5pdHMgKHZhbHVlIG9uIHRoZSB5IGF4aXMpIHRvIG1vdmUgdGhlIGJsb2NrIHRvLgogICAgICAgIC8vIGR1cmF0aW9uIC0gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIGNyZWF0ZSBhbiBhbmltYXRlZCBtb3ZlbWVudC4gIENhbiBiZSBhCiAgICAgICAgLy8gbnVtYmVyIChoaWdoZXIgaXMgc2xvd2VyIGFuaW1hdGlvbikgb3IgJ2Zhc3QnLCAnbm9ybWFsJyBvciAnc2xvdycuICBJZiBub3QKICAgICAgICAvLyBwcm92aWRlZCwgdGhlIGVsZW1lbnQgaXMgbW92ZWQgd2l0aG91dCBhbnkgYW5pbWF0aW9uLgogICAgICAgIHRoaXMubW92ZUJsb2NrID0gZnVuY3Rpb24gKGlkeCwgeCwgeSwgZHVyYXRpb24pIHsKICAgICAgICAgICAgLy8gdXBkYXRlIHBsb3REYXRhLCBzdGFja0RhdGEsIGRhdGEgYW5kIGdyaWREYXRhCiAgICAgICAgICAgIC8vIHggYW5kIHkgYXJlIGluIGRhdGEgY29vcmRpbmF0ZXMuCiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuY2FudmFzLl9lbGVtLmNoaWxkcmVuKCc6ZXEoJytpZHgrJyknKTsKICAgICAgICAgICAgdGhpcy5kYXRhW2lkeF1bMF0gPSB4OwogICAgICAgICAgICB0aGlzLmRhdGFbaWR4XVsxXSA9IHk7CiAgICAgICAgICAgIHRoaXMuX3Bsb3REYXRhW2lkeF1bMF0gPSB4OwogICAgICAgICAgICB0aGlzLl9wbG90RGF0YVtpZHhdWzFdID0geTsKICAgICAgICAgICAgdGhpcy5fc3RhY2tEYXRhW2lkeF1bMF0gPSB4OwogICAgICAgICAgICB0aGlzLl9zdGFja0RhdGFbaWR4XVsxXSA9IHk7CiAgICAgICAgICAgIHRoaXMuZ3JpZERhdGFbaWR4XVswXSA9IHRoaXMuX3hheGlzLnNlcmllc191MnAoeCk7CiAgICAgICAgICAgIHRoaXMuZ3JpZERhdGFbaWR4XVsxXSA9IHRoaXMuX3lheGlzLnNlcmllc191MnAoeSk7CiAgICAgICAgICAgIHZhciB3ID0gZWwub3V0ZXJXaWR0aCgpOwogICAgICAgICAgICB2YXIgaCA9IGVsLm91dGVySGVpZ2h0KCk7CiAgICAgICAgICAgIHZhciBsZWZ0ID0gdGhpcy5ncmlkRGF0YVtpZHhdWzBdIC0gdy8yICsgJ3B4JzsKICAgICAgICAgICAgdmFyIHRvcCA9IHRoaXMuZ3JpZERhdGFbaWR4XVsxXSAtIGgvMiArICdweCc7CiAgICAgICAgICAgIGlmIChkdXJhdGlvbikgewogICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KGR1cmF0aW9uLCAxMCkpIHsKICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHBhcnNlSW50KGR1cmF0aW9uLCAxMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbC5hbmltYXRlKHtsZWZ0OmxlZnQsIHRvcDp0b3B9LCBkdXJhdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBlbC5jc3Moe2xlZnQ6bGVmdCwgdG9wOnRvcH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsID0gbnVsbDsKICAgICAgICB9OwogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2Ygc2VyaWVzCiAgICAkLmpxcGxvdC5CbG9ja1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKGN0eCwgZ2QsIG9wdGlvbnMpIHsKICAgICAgICBpZiAodGhpcy5wbHVnaW5zLnBvaW50TGFiZWxzKSB7CiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5wb2ludExhYmVscy5zaG93ID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHZhciBpLCBlbCwgZCwgZ2QsIHQsIGNzcywgdywgaCwgbGVmdCwgdG9wOwogICAgICAgIHZhciBvcHRzID0gKG9wdGlvbnMgIT0gdW5kZWZpbmVkKSA/IG9wdGlvbnMgOiB7fTsKICAgICAgICB2YXIgY29sb3JHZW5lcmF0b3IgPSBuZXcgJC5qcXBsb3QuQ29sb3JHZW5lcmF0b3IodGhpcy5zZXJpZXNDb2xvcnMpOwogICAgICAgIHRoaXMuY2FudmFzLl9lbGVtLmVtcHR5KCk7CiAgICAgICAgZm9yIChpPTA7IGk8dGhpcy5ncmlkRGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBkID0gdGhpcy5kYXRhW2ldOwogICAgICAgICAgICBnZCA9IHRoaXMuZ3JpZERhdGFbaV07CiAgICAgICAgICAgIHQgPSAnJzsKICAgICAgICAgICAgY3NzID0ge307CiAgICAgICAgICAgIGlmICh0eXBlb2YgZFsyXSA9PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgdCA9IGRbMl07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGRbMl0gPT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgICAgIGNzcyA9IGRbMl07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHR5cGVvZiBkWzNdID09ICAnb2JqZWN0JykgewogICAgICAgICAgICAgICAgY3NzID0gZFszXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5pbnNlcnRCcmVha3MpeyAKICAgICAgICAgICAgICAgIHQgPSB0LnJlcGxhY2UoLyAvZywgJzxiciAvPicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNzcyA9ICQuZXh0ZW5kKHRydWUsIHt9LCB0aGlzLmNzcywgY3NzKTsKICAgICAgICAgICAgLy8gY3JlYXRlIGEgZGl2CiAgICAgICAgICAgIGVsID0gJCgnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0bzsiPjwvZGl2PicpOwogICAgICAgICAgICB0aGlzLmNhbnZhcy5fZWxlbS5hcHBlbmQoZWwpOwogICAgICAgICAgICAvLyBzZXQgdGV4dAogICAgICAgICAgICB0aGlzLmVzY2FwZUh0bWwgPyBlbC50ZXh0KHQpIDogZWwuaHRtbCh0KTsKICAgICAgICAgICAgLy8gc3R5bGUgaXQKICAgICAgICAgICAgLy8gcmVtb3ZlIHN0eWxlcyB3ZSBkb24ndCB3YW50IG92ZXJyaWRkZW4uCiAgICAgICAgICAgIGRlbGV0ZSBjc3MucG9zaXRpb247CiAgICAgICAgICAgIGRlbGV0ZSBjc3MubWFyZ2luUmlnaHQ7CiAgICAgICAgICAgIGRlbGV0ZSBjc3MubWFyZ2luTGVmdDsKICAgICAgICAgICAgaWYgKCFjc3MuYmFja2dyb3VuZCAmJiAhY3NzLmJhY2tncm91bmRDb2xvciAmJiAhY3NzLmJhY2tncm91bmRJbWFnZSl7IAogICAgICAgICAgICAgICAgY3NzLmJhY2tncm91bmQgPSBjb2xvckdlbmVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWwuY3NzKGNzcyk7CiAgICAgICAgICAgIHcgPSBlbC5vdXRlcldpZHRoKCk7CiAgICAgICAgICAgIGggPSBlbC5vdXRlckhlaWdodCgpOwogICAgICAgICAgICBsZWZ0ID0gZ2RbMF0gLSB3LzIgKyAncHgnOwogICAgICAgICAgICB0b3AgPSBnZFsxXSAtIGgvMiArICdweCc7CiAgICAgICAgICAgIGVsLmNzcyh7bGVmdDpsZWZ0LCB0b3A6dG9wfSk7CiAgICAgICAgICAgIGVsID0gbnVsbDsKICAgICAgICB9CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5CbG9ja0NhbnZhcyA9IGZ1bmN0aW9uKCkgewogICAgICAgICQuanFwbG90LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTsKICAgICAgICB0aGlzLl9jdHg7ICAKICAgIH07CiAgICAKICAgICQuanFwbG90LkJsb2NrQ2FudmFzLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5FbGVtQ29udGFpbmVyKCk7CiAgICAkLmpxcGxvdC5CbG9ja0NhbnZhcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5CbG9ja0NhbnZhczsKICAgIAogICAgJC5qcXBsb3QuQmxvY2tDYW52YXMucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihvZmZzZXRzLCBjbHNzLCBwbG90RGltZW5zaW9ucykgewogICAgICAgIHRoaXMuX29mZnNldHMgPSBvZmZzZXRzOwogICAgICAgIHZhciBrbGFzcyA9ICdqcXBsb3QtYmxvY2tDYW52YXMnOwogICAgICAgIGlmIChjbHNzICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICBrbGFzcyA9IGNsc3M7CiAgICAgICAgfQogICAgICAgIHZhciBlbGVtOwogICAgICAgIC8vIGlmIHRoaXMgY2FudmFzIGFscmVhZHkgaGFzIGEgZG9tIGVsZW1lbnQsIGRvbid0IG1ha2UgYSBuZXcgb25lLgogICAgICAgIGlmICh0aGlzLl9lbGVtKSB7CiAgICAgICAgICAgIGVsZW0gPSB0aGlzLl9lbGVtLmdldCgwKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICB9CiAgICAgICAgLy8gaWYgbmV3IHBsb3REaW1lbnNpb25zIHN1cHBsaWVkLCB1c2UgdGhlbS4KICAgICAgICBpZiAocGxvdERpbWVuc2lvbnMgIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuX3Bsb3REaW1lbnNpb25zID0gcGxvdERpbWVuc2lvbnM7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciB3ID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSB0aGlzLl9vZmZzZXRzLmxlZnQgLSB0aGlzLl9vZmZzZXRzLnJpZ2h0ICsgJ3B4JzsKICAgICAgICB2YXIgaCA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIHRoaXMuX29mZnNldHMudG9wIC0gdGhpcy5fb2Zmc2V0cy5ib3R0b20gKyAncHgnOwogICAgICAgIHRoaXMuX2VsZW0gPSAkKGVsZW0pOwogICAgICAgIHRoaXMuX2VsZW0uY3NzKHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIHdpZHRoOncsIGhlaWdodDpoLCBsZWZ0OiB0aGlzLl9vZmZzZXRzLmxlZnQsIHRvcDogdGhpcy5fb2Zmc2V0cy50b3AgfSk7CiAgICAgICAgCiAgICAgICAgdGhpcy5fZWxlbS5hZGRDbGFzcyhrbGFzcyk7CiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW07CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5CbG9ja0NhbnZhcy5wcm90b3R5cGUuc2V0Q29udGV4dCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuX2N0eCA9IHsKICAgICAgICAgICAgY2FudmFzOnsKICAgICAgICAgICAgICAgIHdpZHRoOjAsCiAgICAgICAgICAgICAgICBoZWlnaHQ6MAogICAgICAgICAgICB9LAogICAgICAgICAgICBjbGVhclJlY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbDt9CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gdGhpcy5fY3R4OwogICAgfTsKICAgIAp9KShqUXVlcnkpOwogICAgCiAgICA=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.blockRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGEpe2EuanFwbG90LkJsb2NrUmVuZGVyZXI9ZnVuY3Rpb24oKXthLmpxcGxvdC5MaW5lUmVuZGVyZXIuY2FsbCh0aGlzKX07YS5qcXBsb3QuQmxvY2tSZW5kZXJlci5wcm90b3R5cGU9bmV3IGEuanFwbG90LkxpbmVSZW5kZXJlcigpO2EuanFwbG90LkJsb2NrUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWEuanFwbG90LkJsb2NrUmVuZGVyZXI7YS5qcXBsb3QuQmxvY2tSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihiKXt0aGlzLmNzcz17cGFkZGluZzoiMnB4Iixib3JkZXI6IjFweCBzb2xpZCAjOTk5Iix0ZXh0QWxpZ246ImNlbnRlciJ9O3RoaXMuZXNjYXBlSHRtbD1mYWxzZTt0aGlzLmluc2VydEJyZWFrcz10cnVlO3RoaXMudmFyeUJsb2NrQ29sb3JzPWZhbHNlO2EuZXh0ZW5kKHRydWUsdGhpcyxiKTtpZih0aGlzLmNzcy5iYWNrZ3JvdW5kQ29sb3Ipe3RoaXMuY29sb3I9dGhpcy5jc3MuYmFja2dyb3VuZENvbG9yfWVsc2V7aWYodGhpcy5jc3MuYmFja2dyb3VuZCl7dGhpcy5jb2xvcj10aGlzLmNzcy5iYWNrZ3JvdW5kfWVsc2V7aWYoIXRoaXMudmFyeUJsb2NrQ29sb3JzKXt0aGlzLmNzcy5iYWNrZ3JvdW5kPXRoaXMuY29sb3J9fX10aGlzLmNhbnZhcz1uZXcgYS5qcXBsb3QuQmxvY2tDYW52YXMoKTt0aGlzLnNoYWRvd0NhbnZhcz1uZXcgYS5qcXBsb3QuQmxvY2tDYW52YXMoKTt0aGlzLmNhbnZhcy5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5zaGFkb3dDYW52YXMuX3Bsb3REaW1lbnNpb25zPXRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMuX3R5cGU9ImJsb2NrIjt0aGlzLm1vdmVCbG9jaz1mdW5jdGlvbihsLGosaSxlKXt2YXIgYz10aGlzLmNhbnZhcy5fZWxlbS5jaGlsZHJlbigiOmVxKCIrbCsiKSIpO3RoaXMuZGF0YVtsXVswXT1qO3RoaXMuZGF0YVtsXVsxXT1pO3RoaXMuX3Bsb3REYXRhW2xdWzBdPWo7dGhpcy5fcGxvdERhdGFbbF1bMV09aTt0aGlzLl9zdGFja0RhdGFbbF1bMF09ajt0aGlzLl9zdGFja0RhdGFbbF1bMV09aTt0aGlzLmdyaWREYXRhW2xdWzBdPXRoaXMuX3hheGlzLnNlcmllc191MnAoaik7dGhpcy5ncmlkRGF0YVtsXVsxXT10aGlzLl95YXhpcy5zZXJpZXNfdTJwKGkpO3ZhciBrPWMub3V0ZXJXaWR0aCgpO3ZhciBmPWMub3V0ZXJIZWlnaHQoKTt2YXIgZD10aGlzLmdyaWREYXRhW2xdWzBdLWsvMisicHgiO3ZhciBnPXRoaXMuZ3JpZERhdGFbbF1bMV0tZi8yKyJweCI7aWYoZSl7aWYocGFyc2VJbnQoZSwxMCkpe2U9cGFyc2VJbnQoZSwxMCl9Yy5hbmltYXRlKHtsZWZ0OmQsdG9wOmd9LGUpfWVsc2V7Yy5jc3Moe2xlZnQ6ZCx0b3A6Z30pfWM9bnVsbH19O2EuanFwbG90LkJsb2NrUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24ocSxvLHIpe2lmKHRoaXMucGx1Z2lucy5wb2ludExhYmVscyl7dGhpcy5wbHVnaW5zLnBvaW50TGFiZWxzLnNob3c9ZmFsc2V9dmFyIGYsYyxsLG8scCxrLG4sZyxlLG07dmFyIGI9KHIhPXVuZGVmaW5lZCk/cjp7fTt2YXIgaj1uZXcgYS5qcXBsb3QuQ29sb3JHZW5lcmF0b3IodGhpcy5zZXJpZXNDb2xvcnMpO3RoaXMuY2FudmFzLl9lbGVtLmVtcHR5KCk7Zm9yKGY9MDtmPHRoaXMuZ3JpZERhdGEubGVuZ3RoO2YrKyl7bD10aGlzLmRhdGFbZl07bz10aGlzLmdyaWREYXRhW2ZdO3A9IiI7az17fTtpZih0eXBlb2YgbFsyXT09InN0cmluZyIpe3A9bFsyXX1lbHNle2lmKHR5cGVvZiBsWzJdPT0ib2JqZWN0Iil7az1sWzJdfX1pZih0eXBlb2YgbFszXT09Im9iamVjdCIpe2s9bFszXX1pZih0aGlzLmluc2VydEJyZWFrcyl7cD1wLnJlcGxhY2UoLyAvZywiPGJyIC8+Iil9az1hLmV4dGVuZCh0cnVlLHt9LHRoaXMuY3NzLGspO2M9YSgnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0bzsiPjwvZGl2PicpO3RoaXMuY2FudmFzLl9lbGVtLmFwcGVuZChjKTt0aGlzLmVzY2FwZUh0bWw/Yy50ZXh0KHApOmMuaHRtbChwKTtkZWxldGUgay5wb3NpdGlvbjtkZWxldGUgay5tYXJnaW5SaWdodDtkZWxldGUgay5tYXJnaW5MZWZ0O2lmKCFrLmJhY2tncm91bmQmJiFrLmJhY2tncm91bmRDb2xvciYmIWsuYmFja2dyb3VuZEltYWdlKXtrLmJhY2tncm91bmQ9ai5uZXh0KCl9Yy5jc3Moayk7bj1jLm91dGVyV2lkdGgoKTtnPWMub3V0ZXJIZWlnaHQoKTtlPW9bMF0tbi8yKyJweCI7bT1vWzFdLWcvMisicHgiO2MuY3NzKHtsZWZ0OmUsdG9wOm19KTtjPW51bGx9fTthLmpxcGxvdC5CbG9ja0NhbnZhcz1mdW5jdGlvbigpe2EuanFwbG90LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTt0aGlzLl9jdHh9O2EuanFwbG90LkJsb2NrQ2FudmFzLnByb3RvdHlwZT1uZXcgYS5qcXBsb3QuRWxlbUNvbnRhaW5lcigpO2EuanFwbG90LkJsb2NrQ2FudmFzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hLmpxcGxvdC5CbG9ja0NhbnZhczthLmpxcGxvdC5CbG9ja0NhbnZhcy5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihpLGUsYyl7dGhpcy5fb2Zmc2V0cz1pO3ZhciBiPSJqcXBsb3QtYmxvY2tDYW52YXMiO2lmKGUhPXVuZGVmaW5lZCl7Yj1lfXZhciBnO2lmKHRoaXMuX2VsZW0pe2c9dGhpcy5fZWxlbS5nZXQoMCl9ZWxzZXtnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfWlmKGMhPXVuZGVmaW5lZCl7dGhpcy5fcGxvdERpbWVuc2lvbnM9Y312YXIgZD10aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC10aGlzLl9vZmZzZXRzLmxlZnQtdGhpcy5fb2Zmc2V0cy5yaWdodCsicHgiO3ZhciBmPXRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodC10aGlzLl9vZmZzZXRzLnRvcC10aGlzLl9vZmZzZXRzLmJvdHRvbSsicHgiO3RoaXMuX2VsZW09YShnKTt0aGlzLl9lbGVtLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix3aWR0aDpkLGhlaWdodDpmLGxlZnQ6dGhpcy5fb2Zmc2V0cy5sZWZ0LHRvcDp0aGlzLl9vZmZzZXRzLnRvcH0pO3RoaXMuX2VsZW0uYWRkQ2xhc3MoYik7cmV0dXJuIHRoaXMuX2VsZW19O2EuanFwbG90LkJsb2NrQ2FudmFzLnByb3RvdHlwZS5zZXRDb250ZXh0PWZ1bmN0aW9uKCl7dGhpcy5fY3R4PXtjYW52YXM6e3dpZHRoOjAsaGVpZ2h0OjB9LGNsZWFyUmVjdDpmdW5jdGlvbigpe3JldHVybiBudWxsfX07cmV0dXJuIHRoaXMuX2N0eH19KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.bubbleRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgdmFyIGFycmF5TWF4ID0gZnVuY3Rpb24oIGFycmF5ICl7CiAgICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KCBNYXRoLCBhcnJheSApOwogICAgfTsKICAgIHZhciBhcnJheU1pbiA9IGZ1bmN0aW9uKCBhcnJheSApewogICAgICAgIHJldHVybiBNYXRoLm1pbi5hcHBseSggTWF0aCwgYXJyYXkgKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBDbGFzczogJC5qcXBsb3QuQnViYmxlUmVuZGVyZXIKICAgICAqIFBsdWdpbiByZW5kZXJlciB0byBkcmF3IGEgYnViYmxlIGNoYXJ0LiAgQSBCdWJibGUgY2hhcnQgaGFzIGRhdGEgcG9pbnRzIGRpc3BsYXllZCBhcwogICAgICogY29sb3JlZCBjaXJjbGVzIHdpdGggYW4gb3B0aW9uYWwgdGV4dCBsYWJlbCBpbnNpZGUuICBUbyB1c2UKICAgICAqIHRoZSBidWJibGUgcmVuZGVyZXIsIHlvdSBtdXN0IGluY2x1ZGUgdGhlIGJ1YmJsZSByZW5kZXJlciBsaWtlOgogICAgICogCiAgICAgKiA+IDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9zcmMvcGx1Z2lucy9qcXBsb3QuYnViYmxlUmVuZGVyZXIuanMiPjwvc2NyaXB0PgogICAgICogCiAgICAgKiBEYXRhIG11c3QgYmUgc3VwcGxpZWQgaW4gCiAgICAgKiB0aGUgZm9ybToKICAgICAqIAogICAgICogPiBbW3gxLCB5MSwgcjEsIDxsYWJlbCBvciB7bGFiZWw6J3RleHQnLCBjb2xvcjpjb2xvcn0+XSwgLi4uXQogICAgICogCiAgICAgKiB3aGVyZSB0aGUgbGFiZWwgb3Igb3B0aW9ucyAKICAgICAqIG9iamVjdCBpcyBvcHRpb25hbC4gIAogICAgICogCiAgICAgKiBOb3RlIHRoYXQgYWxsIGJ1YmJsZSBjb2xvcnMgd2lsbCBiZSB0aGUgc2FtZQogICAgICogdW5sZXNzIHRoZSAidmFyeUJ1YmJsZUNvbG9ycyIgb3B0aW9uIGlzIHNldCB0byB0cnVlLiAgQ29sb3JzIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIGRhdGEgYXJyYXkKICAgICAqIG9yIGluIHRoZSBzZXJpZXNDb2xvcnMgYXJyYXkgb3B0aW9uIG9uIHRoZSBzZXJpZXMuICBJZiBubyBjb2xvcnMgYXJlIGRlZmluZWQsIHRoZSBkZWZhdWx0IGpxUGxvdAogICAgICogc2VyaWVzIG9mIDE2IGNvbG9ycyBhcmUgdXNlZC4gIENvbG9ycyBhcmUgYXV0b21hdGljYWxseSBjeWNsZWQgYXJvdW5kIGFnYWluIGlmIHRoZXJlIGFyZSBtb3JlCiAgICAgKiBidWJibGVzIHRoYW4gY29sb3JzLgogICAgICogCiAgICAgKiBCdWJibGVzIGFyZSBhdXRvc2NhbGVkIGJ5IGRlZmF1bHQgdG8gZml0IHdpdGhpbiB0aGUgY2hhcnQgYXJlYSB3aGlsZSBtYWludGFpbmluZyAKICAgICAqIHJlbGF0aXZlIHNpemVzLiAgSWYgdGhlICJhdXRvc2NhbGVCdWJibGVzIiBvcHRpb24gaXMgc2V0IHRvIGZhbHNlLCB0aGUgcihhZGl1cykgdmFsdWVzCiAgICAgKiBpbiB0aGUgZGF0YSBhcnJheSBhIHRyZWF0ZWQgYXMgbGl0ZXJhbCBwaXhlbCB2YWx1ZXMgZm9yIHRoZSByYWRpaSBvZiB0aGUgYnViYmxlcy4KICAgICAqIAogICAgICogUHJvcGVydGllcyBhcmUgcGFzc2VkIGludG8gdGhlIGJ1YmJsZSByZW5kZXJlciBpbiB0aGUgcmVuZGVyZXJPcHRpb25zIG9iamVjdCBvZgogICAgICogdGhlIHNlcmllcyBvcHRpb25zIGxpa2U6CiAgICAgKiAKICAgICAqID4gc2VyaWVzRGVmYXVsdHM6IHsKICAgICAqID4gICAgIHJlbmRlcmVyOiAkLmpxcGxvdC5CdWJibGVSZW5kZXJlciwKICAgICAqID4gICAgIHJlbmRlcmVyT3B0aW9uczogewogICAgICogPiAgICAgICAgIGJ1YmJsZUFscGhhOiAwLjcsCiAgICAgKiA+ICAgICAgICAgdmFyeUJ1YmJsZUNvbG9yczogZmFsc2UKICAgICAqID4gICAgIH0KICAgICAqID4gfQogICAgICogCiAgICAgKi8KICAgICQuanFwbG90LkJ1YmJsZVJlbmRlcmVyID0gZnVuY3Rpb24oKXsKICAgICAgICAkLmpxcGxvdC5MaW5lUmVuZGVyZXIuY2FsbCh0aGlzKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkJ1YmJsZVJlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5MaW5lUmVuZGVyZXIoKTsKICAgICQuanFwbG90LkJ1YmJsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90LkJ1YmJsZVJlbmRlcmVyOwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBhIHNlcmllcwogICAgJC5qcXBsb3QuQnViYmxlUmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zLCBwbG90KSB7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAvLwogICAgICAgIC8vIHByb3A6IHZhcnlCdWJibGVDb2xvcnMKICAgICAgICAvLyBUcnVlIHRvIHZhcnkgdGhlIGNvbG9yIG9mIGVhY2ggYnViYmxlIGluIHRoaXMgc2VyaWVzIGFjY29yZGluZyB0bwogICAgICAgIC8vIHRoZSBzZXJpZXNDb2xvcnMgYXJyYXkuICBGYWxzZSB0byBzZXQgZWFjaCBidWJibGUgdG8gdGhlIGNvbG9yCiAgICAgICAgLy8gc3BlY2lmaWVkIG9uIHRoaXMgc2VyaWVzLiAgVGhpcyBoYXMgbm8gZWZmZWN0IGlmIGEgY3NzIGJhY2tncm91bmQgY29sb3IKICAgICAgICAvLyBvcHRpb24gaXMgc3BlY2lmaWVkIGluIHRoZSByZW5kZXJlciBjc3Mgb3B0aW9ucy4KICAgICAgICB0aGlzLnZhcnlCdWJibGVDb2xvcnMgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IGF1dG9zY2FsZUJ1YmJsZXMKICAgICAgICAvLyBUcnVlIHRvIHNjYWxlIHRoZSBidWJibGUgcmFkaXVzIGJhc2VkIG9uIHBsb3Qgc2l6ZS4KICAgICAgICAvLyBGYWxzZSB3aWxsIHVzZSB0aGUgcmFkaXVzIHZhbHVlIGFzIHByb3ZpZGVkIGFzIGEgcmF3IHBpeGVsIHZhbHVlIGZvcgogICAgICAgIC8vIGJ1YmJsZSByYWRpdXMuCiAgICAgICAgdGhpcy5hdXRvc2NhbGVCdWJibGVzID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBhdXRvc2NhbGVNdWx0aXBsaWVyCiAgICAgICAgLy8gTXVsdGlwbGllciB0aGUgYnViYmxlIHNpemUgaWYgYXV0b3NjYWxlQnViYmxlcyBpcyB0cnVlLgogICAgICAgIHRoaXMuYXV0b3NjYWxlTXVsdGlwbGllciA9IDEuMDsKICAgICAgICAvLyBwcm9wOiBhdXRvc2NhbGVQb2ludHNGYWN0b3IKICAgICAgICAvLyBGYWN0b3Igd2hpY2ggZGVjcmVhc2VzIGJ1YmJsZSBzaXplIGJhc2VkIG9uIGhvdyBtYW55IGJ1YmJsZXMgb24gb24gdGhlIGNoYXJ0LgogICAgICAgIC8vIDAgbWVhbnMgbm8gYWRqdXN0bWVudCBmb3IgbnVtYmVyIG9mIGJ1YmJsZXMuICBOZWdhdGl2ZSB2YWx1ZXMgd2lsbCBkZWNyZWFzZQogICAgICAgIC8vIHNpemUgb2YgYnViYmxlcyBhcyBtb3JlIGJ1YmJsZXMgYXJlIGFkZGVkLiAgVmFsdWVzIGJldHdlZW4gMCBhbmQgLTAuMgogICAgICAgIC8vIHNob3VsZCB3b3JrIHdlbGwuCiAgICAgICAgdGhpcy5hdXRvc2NhbGVQb2ludHNGYWN0b3IgPSAtMC4wNzsKICAgICAgICAvLyBwcm9wOiBlc2NhcGVIdG1sCiAgICAgICAgLy8gVHJ1ZSB0byBlc2NhcGUgaHRtbCBpbiBidWJibGUgbGFiZWwgdGV4dC4KICAgICAgICB0aGlzLmVzY2FwZUh0bWwgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IGhpZ2hsaWdodE1vdXNlT3ZlcgogICAgICAgIC8vIFRydWUgdG8gaGlnaGxpZ2h0IGJ1YmJsZXMgd2hlbiBtb3VzZWQgb3Zlci4KICAgICAgICAvLyBUaGlzIG11c3QgYmUgZmFsc2UgdG8gZW5hYmxlIGhpZ2hsaWdodE1vdXNlRG93biB0byBoaWdobGlnaHQgd2hlbiBjbGlja2luZyBvbiBhIHNsaWNlLgogICAgICAgIHRoaXMuaGlnaGxpZ2h0TW91c2VPdmVyID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBoaWdobGlnaHRNb3VzZURvd24KICAgICAgICAvLyBUcnVlIHRvIGhpZ2hsaWdodCB3aGVuIGEgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgb3ZlciBhIGJ1YmJsZS4KICAgICAgICAvLyBUaGlzIHdpbGwgYmUgZGlzYWJsZWQgaWYgaGlnaGxpZ2h0TW91c2VPdmVyIGlzIHRydWUuCiAgICAgICAgdGhpcy5oaWdobGlnaHRNb3VzZURvd24gPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBoaWdobGlnaHRDb2xvcnMKICAgICAgICAvLyBBbiBhcnJheSBvZiBjb2xvcnMgdG8gdXNlIHdoZW4gaGlnaGxpZ2h0aW5nIGEgc2xpY2UuICBDYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkKICAgICAgICAvLyBpZiBub3Qgc3VwcGxpZWQuCiAgICAgICAgdGhpcy5oaWdobGlnaHRDb2xvcnMgPSBbXTsKICAgICAgICAvLyBwcm9wOiBidWJibGVBbHBoYQogICAgICAgIC8vIEFscGhhIHRyYW5zcGFyZW5jeSB0byBhcHBseSB0byBhbGwgYnViYmxlcyBpbiB0aGlzIHNlcmllcy4KICAgICAgICB0aGlzLmJ1YmJsZUFscGhhID0gMS4wOwogICAgICAgIC8vIHByb3A6IGhpZ2hsaWdodEFscGhhCiAgICAgICAgLy8gQWxwaGEgdHJhbnNwYXJlbmN5IHRvIGFwcGx5IHdoZW4gaGlnaGxpZ2h0aW5nIGJ1YmJsZS4KICAgICAgICAvLyBTZXQgdG8gdmFsdWUgb2YgYnViYmxlQWxwaGEgYnkgZGVmYXVsdC4KICAgICAgICB0aGlzLmhpZ2hsaWdodEFscGhhID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBidWJibGVHcmFkaWVudHMKICAgICAgICAvLyBUcnVlIHRvIGNvbG9yIHRoZSBidWJibGVzIHdpdGggZ3JhZGllbnQgZmlsbHMgaW5zdGVhZCBvZiBmbGF0IGNvbG9ycy4KICAgICAgICAvLyBOT1QgQVZBSUxBQkxFIElOIElFIGR1ZSB0byBsYWNrIG9mIGV4Y2FudmFzIHN1cHBvcnQgZm9yIHJhZGlhbCBncmFkaWVudCBmaWxscy4KICAgICAgICAvLyB3aWxsIGJlIGlnbm9yZWQgaW4gSUUuCiAgICAgICAgdGhpcy5idWJibGVHcmFkaWVudHMgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBzaG93TGFiZWxzCiAgICAgICAgLy8gVHJ1ZSB0byBzaG93IGxhYmVscyBvbiBidWJibGVzIChpZiBhbnkpLCBmYWxzZSB0byBub3Qgc2hvdy4KICAgICAgICB0aGlzLnNob3dMYWJlbHMgPSB0cnVlOwogICAgICAgIC8vIGFycmF5IG9mIFtwb2ludCBpbmRleCwgcmFkaXVzXSB3aGljaCB3aWxsIGJlIHNvcnRlZCBpbiBkZXNjZW5kaW5nIG9yZGVyIHRvIHBsb3QgCiAgICAgICAgLy8gbGFyZ2VzdCBwb2ludHMgYmVsb3cgc21hbGxlciBwb2ludHMuCiAgICAgICAgdGhpcy5yYWRpaSA9IFtdOwogICAgICAgIHRoaXMubWF4UmFkaXVzID0gMDsKICAgICAgICAvLyBpbmRleCBvZiB0aGUgY3VycmVudHkgaGlnaGxpZ2h0ZWQgcG9pbnQsIGlmIGFueQogICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkUG9pbnQgPSBudWxsOwogICAgICAgIC8vIGFycmF5IG9mIGpRdWVyeSBsYWJlbHMuCiAgICAgICAgdGhpcy5sYWJlbHMgPSBbXTsKICAgICAgICB0aGlzLmJ1YmJsZUNhbnZhc2VzID0gW107CiAgICAgICAgdGhpcy5fdHlwZSA9ICdidWJibGUnOwogICAgICAgIAogICAgICAgIC8vIGlmIHVzZXIgaGFzIHBhc3NlZCBpbiBoaWdobGlnaHRNb3VzZURvd24gb3B0aW9uIGFuZCBub3Qgc2V0IGhpZ2hsaWdodE1vdXNlT3ZlciwgZGlzYWJsZSBoaWdobGlnaHRNb3VzZU92ZXIKICAgICAgICBpZiAob3B0aW9ucy5oaWdobGlnaHRNb3VzZURvd24gJiYgb3B0aW9ucy5oaWdobGlnaHRNb3VzZU92ZXIgPT0gbnVsbCkgewogICAgICAgICAgICBvcHRpb25zLmhpZ2hsaWdodE1vdXNlT3ZlciA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRBbHBoYSA9PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0QWxwaGEgPSB0aGlzLmJ1YmJsZUFscGhhOwogICAgICAgICAgICBpZiAodGhpcy5idWJibGVHcmFkaWVudHMpIHsKICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0QWxwaGEgPSAwLjM1OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMuYXV0b3NjYWxlTXVsdGlwbGllciA9IHRoaXMuYXV0b3NjYWxlTXVsdGlwbGllciAqIE1hdGgucG93KHRoaXMuZGF0YS5sZW5ndGgsIHRoaXMuYXV0b3NjYWxlUG9pbnRzRmFjdG9yKTsKICAgICAgICAKICAgICAgICAvLyBpbmRleCBvZiB0aGUgY3VycmVudHkgaGlnaGxpZ2h0ZWQgcG9pbnQsIGlmIGFueQogICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkUG9pbnQgPSBudWxsOwogICAgICAgIAogICAgICAgIC8vIGFkanVzdCB0aGUgc2VyaWVzIGNvbG9ycyBmb3Igb3B0aW9ucyBjb2xvcnMgcGFzc2VkIGluIHdpdGggZGF0YSBvciBmb3IgYWxwaGEuCiAgICAgICAgLy8gbm90ZSwgdGhpcyBjYW4gbGVhdmUgdW5kZWZpbmVkIGhvbGVzIGluIHRoZSBzZXJpZXNDb2xvcnMgYXJyYXkuCiAgICAgICAgdmFyIGNvbXBzOwogICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGNvbG9yID0gbnVsbDsKICAgICAgICAgICAgdmFyIGQgPSB0aGlzLmRhdGFbaV07CiAgICAgICAgICAgIHRoaXMubWF4UmFkaXVzID0gTWF0aC5tYXgodGhpcy5tYXhSYWRpdXMsIGRbMl0pOwogICAgICAgICAgICBpZiAoZFszXSkgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZihkWzNdKSA9PSAnb2JqZWN0JykgewogICAgICAgICAgICAgICAgICAgIGNvbG9yID0gZFszXVsnY29sb3InXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGNvbG9yID09IG51bGwpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlcmllc0NvbG9yc1tpXSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLnNlcmllc0NvbG9yc1tpXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGNvbG9yICYmIHRoaXMuYnViYmxlQWxwaGEgPCAxLjApIHsKICAgICAgICAgICAgICAgIGNvbXBzID0gJC5qcXBsb3QuZ2V0Q29sb3JDb21wb25lbnRzKGNvbG9yKTsKICAgICAgICAgICAgICAgIGNvbG9yID0gJ3JnYmEoJytjb21wc1swXSsnLCAnK2NvbXBzWzFdKycsICcrY29tcHNbMl0rJywgJyt0aGlzLmJ1YmJsZUFscGhhKycpJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGNvbG9yKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc0NvbG9yc1tpXSA9IGNvbG9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICghdGhpcy52YXJ5QnViYmxlQ29sb3JzKSB7CiAgICAgICAgICAgIHRoaXMuc2VyaWVzQ29sb3JzID0gW3RoaXMuY29sb3JdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLmNvbG9yR2VuZXJhdG9yID0gbmV3ICQuanFwbG90LkNvbG9yR2VuZXJhdG9yKHRoaXMuc2VyaWVzQ29sb3JzKTsKICAgICAgICAKICAgICAgICAvLyBzZXQgaGlnaGxpZ2h0IGNvbG9ycyBpZiBub25lIHByb3ZpZGVkCiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0Q29sb3JzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnNlcmllc0NvbG9ycy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICB2YXIgcmdiYSA9ICQuanFwbG90LmdldENvbG9yQ29tcG9uZW50cyh0aGlzLnNlcmllc0NvbG9yc1tpXSk7CiAgICAgICAgICAgICAgICB2YXIgbmV3cmdiID0gW3JnYmFbMF0sIHJnYmFbMV0sIHJnYmFbMl1dOwogICAgICAgICAgICAgICAgdmFyIHN1bSA9IG5ld3JnYlswXSArIG5ld3JnYlsxXSArIG5ld3JnYlsyXTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajwzOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGRhcmtlbmluZywgbG93ZXN0IGNvbG9yIGNvbXBvbmVudCBjYW4gYmUgaXMgNjAuCiAgICAgICAgICAgICAgICAgICAgbmV3cmdiW2pdID0gKHN1bSA+IDU3MCkgPyAgbmV3cmdiW2pdICogMC44IDogbmV3cmdiW2pdICsgMC4zICogKDI1NSAtIG5ld3JnYltqXSk7CiAgICAgICAgICAgICAgICAgICAgbmV3cmdiW2pdID0gcGFyc2VJbnQobmV3cmdiW2pdLCAxMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodENvbG9ycy5wdXNoKCdyZ2JhKCcrbmV3cmdiWzBdKycsJytuZXdyZ2JbMV0rJywnK25ld3JnYlsyXSsnLCAnK3RoaXMuaGlnaGxpZ2h0QWxwaGErJyknKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLmhpZ2hsaWdodENvbG9yR2VuZXJhdG9yID0gbmV3ICQuanFwbG90LkNvbG9yR2VuZXJhdG9yKHRoaXMuaGlnaGxpZ2h0Q29sb3JzKTsKICAgICAgICAKICAgICAgICB2YXIgc29wdHMgPSB7ZmlsbDp0cnVlLCBpc2FyYzp0cnVlLCBhbmdsZTp0aGlzLnNoYWRvd0FuZ2xlLCBhbHBoYTp0aGlzLnNoYWRvd0FscGhhLCBjbG9zZVBhdGg6dHJ1ZX07CiAgICAgICAgCiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5pbml0KHNvcHRzKTsKICAgICAgICAKICAgICAgICB0aGlzLmNhbnZhcyA9IG5ldyAkLmpxcGxvdC5EaXZDYW52YXMoKTsKICAgICAgICB0aGlzLmNhbnZhcy5fcGxvdERpbWVuc2lvbnMgPSB0aGlzLl9wbG90RGltZW5zaW9uczsKICAgICAgICAKICAgICAgICBwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCdqcXBsb3RNb3VzZU1vdmUnLCBoYW5kbGVNb3ZlKTsKICAgICAgICBwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCdqcXBsb3RNb3VzZURvd24nLCBoYW5kbGVNb3VzZURvd24pOwogICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdE1vdXNlVXAnLCBoYW5kbGVNb3VzZVVwKTsKICAgICAgICBwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCdqcXBsb3RDbGljaycsIGhhbmRsZUNsaWNrKTsKICAgICAgICBwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCdqcXBsb3RSaWdodENsaWNrJywgaGFuZGxlUmlnaHRDbGljayk7CiAgICAgICAgcGxvdC5wb3N0RHJhd0hvb2tzLmFkZE9uY2UocG9zdFBsb3REcmF3KTsKICAgICAgICAKICAgIH07CiAgICAKCiAgICAvLyBjb252ZXJ0cyB0aGUgdXNlciBkYXRhIHZhbHVlcyB0byBncmlkIGNvb3JkaW5hdGVzIGFuZCBzdG9yZXMgdGhlbQogICAgLy8gaW4gdGhlIGdyaWREYXRhIGFycmF5LgogICAgLy8gQ2FsbGVkIHdpdGggc2NvcGUgb2YgYSBzZXJpZXMuCiAgICAkLmpxcGxvdC5CdWJibGVSZW5kZXJlci5wcm90b3R5cGUuc2V0R3JpZERhdGEgPSBmdW5jdGlvbihwbG90KSB7CiAgICAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGdyaWQgZGF0YQogICAgICAgIHZhciB4cCA9IHRoaXMuX3hheGlzLnNlcmllc191MnA7CiAgICAgICAgdmFyIHlwID0gdGhpcy5feWF4aXMuc2VyaWVzX3UycDsKICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX3Bsb3REYXRhOwogICAgICAgIHRoaXMuZ3JpZERhdGEgPSBbXTsKICAgICAgICB2YXIgcmFkaWkgPSBbXTsKICAgICAgICB0aGlzLnJhZGlpID0gW107CiAgICAgICAgdmFyIGRpbSA9IE1hdGgubWluKHBsb3QuX2hlaWdodCwgcGxvdC5fd2lkdGgpOwogICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGRhdGFbaV0gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhpcy5ncmlkRGF0YS5wdXNoKFt4cC5jYWxsKHRoaXMuX3hheGlzLCBkYXRhW2ldWzBdKSwgeXAuY2FsbCh0aGlzLl95YXhpcywgZGF0YVtpXVsxXSksIGRhdGFbaV1bMl1dKTsKICAgICAgICAgICAgICAgIHRoaXMucmFkaWkucHVzaChbaSwgZGF0YVtpXVsyXV0pOwogICAgICAgICAgICAgICAgcmFkaWkucHVzaChkYXRhW2ldWzJdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgciwgdmFsLCBtYXhyID0gdGhpcy5tYXhSYWRpdXMgPSBhcnJheU1heChyYWRpaSk7CiAgICAgICAgdmFyIGwgPSB0aGlzLmdyaWREYXRhLmxlbmd0aDsKICAgICAgICBpZiAodGhpcy5hdXRvc2NhbGVCdWJibGVzKSB7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhbCA9IHJhZGlpW2ldL21heHI7CiAgICAgICAgICAgICAgICByID0gdGhpcy5hdXRvc2NhbGVNdWx0aXBsaWVyICogZGltIC8gNjsKICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGFbaV1bMl0gPSByICogdmFsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMucmFkaWkuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBiWzFdIC0gYVsxXTsgfSk7CiAgICB9OwogICAgCiAgICAvLyBjb252ZXJ0cyBhbnkgYXJiaXRyYXJ5IGRhdGEgdmFsdWVzIHRvIGdyaWQgY29vcmRpbmF0ZXMgYW5kCiAgICAvLyByZXR1cm5zIHRoZW0uICBUaGlzIG1ldGhvZCBleGlzdHMgc28gdGhhdCBwbHVnaW5zIGNhbiB1c2UgYSBzZXJpZXMnCiAgICAvLyBsaW5lcmVuZGVyZXIgdG8gZ2VuZXJhdGUgZ3JpZCBkYXRhIHBvaW50cyB3aXRob3V0IG92ZXJ3cml0aW5nIHRoZQogICAgLy8gZ3JpZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcmllcy4KICAgIC8vIENhbGxlZCB3aXRoIHNjb3BlIG9mIGEgc2VyaWVzLgogICAgJC5qcXBsb3QuQnViYmxlUmVuZGVyZXIucHJvdG90eXBlLm1ha2VHcmlkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHBsb3QpIHsKICAgICAgICAvLyByZWNhbGN1bGF0ZSB0aGUgZ3JpZCBkYXRhCiAgICAgICAgdmFyIHhwID0gdGhpcy5feGF4aXMuc2VyaWVzX3UycDsKICAgICAgICB2YXIgeXAgPSB0aGlzLl95YXhpcy5zZXJpZXNfdTJwOwogICAgICAgIHZhciBnZCA9IFtdOwogICAgICAgIHZhciByYWRpaSA9IFtdOwogICAgICAgIHRoaXMucmFkaWkgPSBbXTsKICAgICAgICB2YXIgZGltID0gTWF0aC5taW4ocGxvdC5faGVpZ2h0LCBwbG90Ll93aWR0aCk7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPGRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGRhdGFbaV0gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgZ2QucHVzaChbeHAuY2FsbCh0aGlzLl94YXhpcywgZGF0YVtpXVswXSksIHlwLmNhbGwodGhpcy5feWF4aXMsIGRhdGFbaV1bMV0pLCBkYXRhW2ldWzJdXSk7CiAgICAgICAgICAgICAgICByYWRpaS5wdXNoKGRhdGFbaV1bMl0pOwogICAgICAgICAgICAgICAgdGhpcy5yYWRpaS5wdXNoKFtpLCBkYXRhW2ldWzJdXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIHIsIHZhbCwgbWF4ciA9IHRoaXMubWF4UmFkaXVzID0gYXJyYXlNYXgocmFkaWkpOwogICAgICAgIHZhciBsID0gdGhpcy5ncmlkRGF0YS5sZW5ndGg7CiAgICAgICAgaWYgKHRoaXMuYXV0b3NjYWxlQnViYmxlcykgewogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8bDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YWwgPSByYWRpaVtpXS9tYXhyOwogICAgICAgICAgICAgICAgciA9IHRoaXMuYXV0b3NjYWxlTXVsdGlwbGllciAqIGRpbSAvIDY7CiAgICAgICAgICAgICAgICBnZFtpXVsyXSA9IHIgKiB2YWw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5yYWRpaS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGJbMV0gLSBhWzFdOyB9KTsKICAgICAgICByZXR1cm4gZ2Q7CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBzZXJpZXMKICAgICQuanFwbG90LkJ1YmJsZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKGN0eCwgZ2QsIG9wdGlvbnMpIHsKICAgICAgICBpZiAodGhpcy5wbHVnaW5zLnBvaW50TGFiZWxzKSB7CiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5wb2ludExhYmVscy5zaG93ID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHZhciBvcHRzID0gKG9wdGlvbnMgIT0gdW5kZWZpbmVkKSA/IG9wdGlvbnMgOiB7fTsKICAgICAgICB2YXIgc2hhZG93ID0gKG9wdHMuc2hhZG93ICE9IHVuZGVmaW5lZCkgPyBvcHRzLnNoYWRvdyA6IHRoaXMuc2hhZG93OwogICAgICAgIHRoaXMuY2FudmFzLl9lbGVtLmVtcHR5KCk7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMucmFkaWkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGlkeCA9IHRoaXMucmFkaWlbaV1bMF07CiAgICAgICAgICAgIHZhciB0PW51bGw7CiAgICAgICAgICAgIHZhciBjb2xvciA9IG51bGw7CiAgICAgICAgICAgIHZhciBlbCA9IG51bGw7CiAgICAgICAgICAgIHZhciB0ZWwgPSBudWxsOwogICAgICAgICAgICB2YXIgZCA9IHRoaXMuZGF0YVtpZHhdOwogICAgICAgICAgICB2YXIgZ2QgPSB0aGlzLmdyaWREYXRhW2lkeF07CiAgICAgICAgICAgIGlmIChkWzNdKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGRbM10pID09ICdvYmplY3QnKSB7CiAgICAgICAgICAgICAgICAgICAgdCA9IGRbM11bJ2xhYmVsJ107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YoZFszXSkgPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICB0ID0gZFszXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gY29sb3IgPSAodGhpcy52YXJ5QnViYmxlQ29sb3JzKSA/IHRoaXMuY29sb3JHZW5lcmF0b3IuZ2V0KGlkeCkgOiB0aGlzLmNvbG9yOwogICAgICAgICAgICBjb2xvciA9IHRoaXMuY29sb3JHZW5lcmF0b3IuZ2V0KGlkeCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBJZiB3ZSdyZSBkcmF3aW5nIGEgc2hhZG93LCBleHBhbmQgdGhlIGNhbnZhcyBkaW1lbnNpb25zIHRvIGFjY29tb2RhdGUuCiAgICAgICAgICAgIHZhciBjYW52YXNSYWRpdXMgPSBnZFsyXTsKICAgICAgICAgICAgdmFyIG9mZnNldCwgZGVwdGg7CiAgICAgICAgICAgIGlmICh0aGlzLnNoYWRvdykgewogICAgICAgICAgICAgICAgb2Zmc2V0ID0gKDAuNyArIGdkWzJdLzQwKS50b0ZpeGVkKDEpOwogICAgICAgICAgICAgICAgZGVwdGggPSAxICsgTWF0aC5jZWlsKGdkWzJdLzE1KTsKICAgICAgICAgICAgICAgIGNhbnZhc1JhZGl1cyArPSBvZmZzZXQqZGVwdGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5idWJibGVDYW52YXNlc1tpZHhdID0gbmV3ICQuanFwbG90LkJ1YmJsZUNhbnZhcygpOwogICAgICAgICAgICB0aGlzLmNhbnZhcy5fZWxlbS5hcHBlbmQodGhpcy5idWJibGVDYW52YXNlc1tpZHhdLmNyZWF0ZUVsZW1lbnQoZ2RbMF0sIGdkWzFdLCBjYW52YXNSYWRpdXMpKTsKICAgICAgICAgICAgdGhpcy5idWJibGVDYW52YXNlc1tpZHhdLnNldENvbnRleHQoKTsKICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuYnViYmxlQ2FudmFzZXNbaWR4XS5fY3R4OwogICAgICAgICAgICB2YXIgeCA9IGN0eC5jYW52YXMud2lkdGgvMjsKICAgICAgICAgICAgdmFyIHkgPSBjdHguY2FudmFzLmhlaWdodC8yOwogICAgICAgICAgICBpZiAodGhpcy5zaGFkb3cpIHsKICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIFt4LCB5LCBnZFsyXSwgMCwgMipNYXRoLlBJXSwge29mZnNldDogb2Zmc2V0LCBkZXB0aDogZGVwdGh9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmJ1YmJsZUNhbnZhc2VzW2lkeF0uZHJhdyhnZFsyXSwgY29sb3IsIHRoaXMuYnViYmxlR3JhZGllbnRzLCB0aGlzLnNoYWRvd0FuZ2xlLzE4MCpNYXRoLlBJKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIG5vdyBkcmF3IGxhYmVsLgogICAgICAgICAgICBpZiAodCAmJiB0aGlzLnNob3dMYWJlbHMpIHsKICAgICAgICAgICAgICAgIHRlbCA9ICQoJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyIgY2xhc3M9ImpxcGxvdC1idWJibGUtbGFiZWwiPjwvZGl2PicpOwogICAgICAgICAgICAgICAgaWYgKHRoaXMuZXNjYXBlSHRtbCkgewogICAgICAgICAgICAgICAgICAgIHRlbC50ZXh0KHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGVsLmh0bWwodCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5fZWxlbS5hcHBlbmQodGVsKTsKICAgICAgICAgICAgICAgIHZhciBoID0gJCh0ZWwpLm91dGVySGVpZ2h0KCk7CiAgICAgICAgICAgICAgICB2YXIgdyA9ICQodGVsKS5vdXRlcldpZHRoKCk7CiAgICAgICAgICAgICAgICB2YXIgdG9wID0gZ2RbMV0gLSAwLjUqaDsKICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gZ2RbMF0gLSAwLjUqdzsKICAgICAgICAgICAgICAgIHRlbC5jc3Moe3RvcDogdG9wLCBsZWZ0OiBsZWZ0fSk7CiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsc1tpZHhdID0gJCh0ZWwpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICAKICAgICQuanFwbG90LkRpdkNhbnZhcyA9IGZ1bmN0aW9uKCkgewogICAgICAgICQuanFwbG90LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTsKICAgICAgICB0aGlzLl9jdHg7ICAKICAgIH07CiAgICAKICAgICQuanFwbG90LkRpdkNhbnZhcy5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuRWxlbUNvbnRhaW5lcigpOwogICAgJC5qcXBsb3QuRGl2Q2FudmFzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90LkRpdkNhbnZhczsKICAgIAogICAgJC5qcXBsb3QuRGl2Q2FudmFzLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24ob2Zmc2V0cywgY2xzcywgcGxvdERpbWVuc2lvbnMpIHsKICAgICAgICB0aGlzLl9vZmZzZXRzID0gb2Zmc2V0czsKICAgICAgICB2YXIga2xhc3MgPSAnanFwbG90LURpdkNhbnZhcyc7CiAgICAgICAgaWYgKGNsc3MgIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGtsYXNzID0gY2xzczsKICAgICAgICB9CiAgICAgICAgdmFyIGVsZW07CiAgICAgICAgLy8gaWYgdGhpcyBjYW52YXMgYWxyZWFkeSBoYXMgYSBkb20gZWxlbWVudCwgZG9uJ3QgbWFrZSBhIG5ldyBvbmUuCiAgICAgICAgaWYgKHRoaXMuX2VsZW0pIHsKICAgICAgICAgICAgZWxlbSA9IHRoaXMuX2VsZW0uZ2V0KDApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIH0KICAgICAgICAvLyBpZiBuZXcgcGxvdERpbWVuc2lvbnMgc3VwcGxpZWQsIHVzZSB0aGVtLgogICAgICAgIGlmIChwbG90RGltZW5zaW9ucyAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgdGhpcy5fcGxvdERpbWVuc2lvbnMgPSBwbG90RGltZW5zaW9uczsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmFyIHcgPSB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCAtIHRoaXMuX29mZnNldHMubGVmdCAtIHRoaXMuX29mZnNldHMucmlnaHQgKyAncHgnOwogICAgICAgIHZhciBoID0gdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0IC0gdGhpcy5fb2Zmc2V0cy50b3AgLSB0aGlzLl9vZmZzZXRzLmJvdHRvbSArICdweCc7CiAgICAgICAgdGhpcy5fZWxlbSA9ICQoZWxlbSk7CiAgICAgICAgdGhpcy5fZWxlbS5jc3MoeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgd2lkdGg6dywgaGVpZ2h0OmgsIGxlZnQ6IHRoaXMuX29mZnNldHMubGVmdCwgdG9wOiB0aGlzLl9vZmZzZXRzLnRvcCB9KTsKICAgICAgICAKICAgICAgICB0aGlzLl9lbGVtLmFkZENsYXNzKGtsYXNzKTsKICAgICAgICByZXR1cm4gdGhpcy5fZWxlbTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkRpdkNhbnZhcy5wcm90b3R5cGUuc2V0Q29udGV4dCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuX2N0eCA9IHsKICAgICAgICAgICAgY2FudmFzOnsKICAgICAgICAgICAgICAgIHdpZHRoOjAsCiAgICAgICAgICAgICAgICBoZWlnaHQ6MAogICAgICAgICAgICB9LAogICAgICAgICAgICBjbGVhclJlY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbDt9CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gdGhpcy5fY3R4OwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQnViYmxlQ2FudmFzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgJC5qcXBsb3QuRWxlbUNvbnRhaW5lci5jYWxsKHRoaXMpOwogICAgICAgIHRoaXMuX2N0eDsKICAgIH07CiAgICAKICAgICQuanFwbG90LkJ1YmJsZUNhbnZhcy5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuRWxlbUNvbnRhaW5lcigpOwogICAgJC5qcXBsb3QuQnViYmxlQ2FudmFzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90LkJ1YmJsZUNhbnZhczsKICAgIAogICAgLy8gaW5pdGlhbGl6ZSB3aXRoIHRoZSB4LHkgcG9udCBvZiBidWJibGUgY2VudGVyIGFuZCB0aGUgYnViYmxlIHJhZGl1cy4KICAgICQuanFwbG90LkJ1YmJsZUNhbnZhcy5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKHgsIHksIHIpIHsgICAgIAogICAgICAgIHZhciBrbGFzcyA9ICdqcXBsb3QtYnViYmxlLXBvaW50JzsKCiAgICAgICAgdmFyIGVsZW07CiAgICAgICAgLy8gaWYgdGhpcyBjYW52YXMgYWxyZWFkeSBoYXMgYSBkb20gZWxlbWVudCwgZG9uJ3QgbWFrZSBhIG5ldyBvbmUuCiAgICAgICAgaWYgKHRoaXMuX2VsZW0pIHsKICAgICAgICAgICAgZWxlbSA9IHRoaXMuX2VsZW0uZ2V0KDApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBlbGVtLndpZHRoID0gKHIgIT0gbnVsbCkgPyAyKnIgOiBlbGVtLndpZHRoOwogICAgICAgIGVsZW0uaGVpZ2h0ID0gKHIgIT0gbnVsbCkgPyAyKnIgOiBlbGVtLmhlaWdodDsKICAgICAgICB0aGlzLl9lbGVtID0gJChlbGVtKTsKICAgICAgICB2YXIgbCA9ICh4ICE9IG51bGwgJiYgciAhPSBudWxsKSA/IHggLSByIDogdGhpcy5fZWxlbS5jc3MoJ2xlZnQnKTsKICAgICAgICB2YXIgdCA9ICh5ICE9IG51bGwgJiYgciAhPSBudWxsKSA/IHkgLSByIDogdGhpcy5fZWxlbS5jc3MoJ3RvcCcpOwogICAgICAgIHRoaXMuX2VsZW0uY3NzKHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIGxlZnQ6IGwsIHRvcDogdCB9KTsKICAgICAgICAKICAgICAgICB0aGlzLl9lbGVtLmFkZENsYXNzKGtsYXNzKTsKICAgICAgICBpZiAoJC5qcXBsb3QudXNlX2V4Y2FudmFzKSB7CiAgICAgICAgICAgIHdpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIuaW5pdF8oZG9jdW1lbnQpOwogICAgICAgICAgICBlbGVtID0gd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci5pbml0RWxlbWVudChlbGVtKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW07CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5CdWJibGVDYW52YXMucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihyLCBjb2xvciwgZ3JhZGllbnRzLCBhbmdsZSkgewogICAgICAgIHZhciBjdHggPSB0aGlzLl9jdHg7CiAgICAgICAgLy8gciA9IE1hdGguZmxvb3IocioxLjA0KTsKICAgICAgICAvLyB2YXIgeCA9IE1hdGgucm91bmQoY3R4LmNhbnZhcy53aWR0aC8yKTsKICAgICAgICAvLyB2YXIgeSA9IE1hdGgucm91bmQoY3R4LmNhbnZhcy5oZWlnaHQvMik7CiAgICAgICAgdmFyIHggPSBjdHguY2FudmFzLndpZHRoLzI7CiAgICAgICAgdmFyIHkgPSBjdHguY2FudmFzLmhlaWdodC8yOwogICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgaWYgKGdyYWRpZW50cyAmJiAhJC5qcXBsb3QudXNlX2V4Y2FudmFzKSB7CiAgICAgICAgICAgIHIgPSByKjEuMDQ7CiAgICAgICAgICAgIHZhciBjb21wcyA9ICQuanFwbG90LmdldENvbG9yQ29tcG9uZW50cyhjb2xvcik7CiAgICAgICAgICAgIHZhciBjb2xvcmlubmVyID0gJ3JnYmEoJytNYXRoLnJvdW5kKGNvbXBzWzBdKzAuOCooMjU1LWNvbXBzWzBdKSkrJywgJytNYXRoLnJvdW5kKGNvbXBzWzFdKzAuOCooMjU1LWNvbXBzWzFdKSkrJywgJytNYXRoLnJvdW5kKGNvbXBzWzJdKzAuOCooMjU1LWNvbXBzWzJdKSkrJywgJytjb21wc1szXSsnKSc7CiAgICAgICAgICAgIHZhciBjb2xvcmVuZCA9ICdyZ2JhKCcrY29tcHNbMF0rJywgJytjb21wc1sxXSsnLCAnK2NvbXBzWzJdKycsIDApJzsKICAgICAgICAgICAgLy8gdmFyIHJpbm5lciA9IE1hdGgucm91bmQoMC4zNSAqIHIpOwogICAgICAgICAgICAvLyB2YXIgeGlubmVyID0gTWF0aC5yb3VuZCh4IC0gTWF0aC5jb3MoYW5nbGUpICogMC4zMyAqIHIpOwogICAgICAgICAgICAvLyB2YXIgeWlubmVyID0gTWF0aC5yb3VuZCh5IC0gTWF0aC5zaW4oYW5nbGUpICogMC4zMyAqIHIpOwogICAgICAgICAgICB2YXIgcmlubmVyID0gMC4zNSAqIHI7CiAgICAgICAgICAgIHZhciB4aW5uZXIgPSB4IC0gTWF0aC5jb3MoYW5nbGUpICogMC4zMyAqIHI7CiAgICAgICAgICAgIHZhciB5aW5uZXIgPSB5IC0gTWF0aC5zaW4oYW5nbGUpICogMC4zMyAqIHI7CiAgICAgICAgICAgIHZhciByYWRncmFkID0gY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHhpbm5lciwgeWlubmVyLCByaW5uZXIsIHgsIHksIHIpOwogICAgICAgICAgICByYWRncmFkLmFkZENvbG9yU3RvcCgwLCBjb2xvcmlubmVyKTsKICAgICAgICAgICAgcmFkZ3JhZC5hZGRDb2xvclN0b3AoMC45MywgY29sb3IpOwogICAgICAgICAgICByYWRncmFkLmFkZENvbG9yU3RvcCgwLjk2LCBjb2xvcmVuZCk7CiAgICAgICAgICAgIHJhZGdyYWQuYWRkQ29sb3JTdG9wKDEsIGNvbG9yZW5kKTsKICAgICAgICAgICAgLy8gcmFkZ3JhZC5hZGRDb2xvclN0b3AoLjk4LCBjb2xvcmVuZCk7CiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSByYWRncmFkOwogICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwwLCBjdHguY2FudmFzLndpZHRoLCBjdHguY2FudmFzLmhlaWdodCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7CiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yOwogICAgICAgICAgICBjdHgubGluZVdpZHRoID0gMTsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICB2YXIgYW5nID0gMipNYXRoLlBJOwogICAgICAgICAgICBjdHguYXJjKHgsIHksIHIsIDAsIGFuZywgMCk7CiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTsKICAgICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICB9CiAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkJ1YmJsZUNhbnZhcy5wcm90b3R5cGUuc2V0Q29udGV4dCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuX2N0eCA9IHRoaXMuX2VsZW0uZ2V0KDApLmdldENvbnRleHQoIjJkIik7CiAgICAgICAgcmV0dXJuIHRoaXMuX2N0eDsKICAgIH07CiAgICAKICAgICQuanFwbG90LkJ1YmJsZUF4aXNSZW5kZXJlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQnViYmxlQXhpc1JlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIoKTsKICAgICQuanFwbG90LkJ1YmJsZUF4aXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5CdWJibGVBeGlzUmVuZGVyZXI7CiAgICAgICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBheGlzIG9iamVjdC4KICAgICQuanFwbG90LkJ1YmJsZUF4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpewogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIHZhciBkYiA9IHRoaXMuX2RhdGFCb3VuZHM7CiAgICAgICAgdmFyIG1pbnNpZHggPSAwLAogICAgICAgICAgICBtaW5waWR4ID0gMCwKICAgICAgICAgICAgbWF4c2lkeCA9IDAsCiAgICAgICAgICAgIG1heHBpZHggPSAwLAogICAgICAgICAgICBtYXhyID0gMCwKICAgICAgICAgICAgbWluciA9IDAsCiAgICAgICAgICAgIG1pbk1heFJhZGl1cyA9IDAsCiAgICAgICAgICAgIG1heE1heFJhZGl1cyA9IDAsCiAgICAgICAgICAgIG1heE11bHQgPSAwLAogICAgICAgICAgICBtaW5NdWx0ID0gMDsKICAgICAgICAvLyBHbyB0aHJvdWdoIGFsbCB0aGUgc2VyaWVzIGF0dGFjaGVkIHRvIHRoaXMgYXhpcyBhbmQgZmluZAogICAgICAgIC8vIHRoZSBtaW4vbWF4IGJvdW5kcyBmb3IgdGhpcyBheGlzLgogICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLl9zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHMgPSB0aGlzLl9zZXJpZXNbaV07CiAgICAgICAgICAgIHZhciBkID0gcy5fcGxvdERhdGE7CiAgICAgICAgICAgIAogICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8ZC5sZW5ndGg7IGorKykgeyAKICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZFtqXVswXSA8IGRiLm1pbiB8fCBkYi5taW4gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBkYi5taW4gPSBkW2pdWzBdOwogICAgICAgICAgICAgICAgICAgICAgICBtaW5zaWR4PWk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnBpZHg9ajsKICAgICAgICAgICAgICAgICAgICAgICAgbWluciA9IGRbal1bMl07CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbk1heFJhZGl1cyA9IHMubWF4UmFkaXVzOwogICAgICAgICAgICAgICAgICAgICAgICBtaW5NdWx0ID0gcy5hdXRvc2NhbGVNdWx0aXBsaWVyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZFtqXVswXSA+IGRiLm1heCB8fCBkYi5tYXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBkYi5tYXggPSBkW2pdWzBdOwogICAgICAgICAgICAgICAgICAgICAgICBtYXhzaWR4PWk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1heHBpZHg9ajsKICAgICAgICAgICAgICAgICAgICAgICAgbWF4ciA9IGRbal1bMl07CiAgICAgICAgICAgICAgICAgICAgICAgIG1heE1heFJhZGl1cyA9IHMubWF4UmFkaXVzOwogICAgICAgICAgICAgICAgICAgICAgICBtYXhNdWx0ID0gcy5hdXRvc2NhbGVNdWx0aXBsaWVyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRbal1bMV0gPCBkYi5taW4gfHwgZGIubWluID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGIubWluID0gZFtqXVsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgbWluc2lkeD1pOwogICAgICAgICAgICAgICAgICAgICAgICBtaW5waWR4PWo7CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnIgPSBkW2pdWzJdOwogICAgICAgICAgICAgICAgICAgICAgICBtaW5NYXhSYWRpdXMgPSBzLm1heFJhZGl1czsKICAgICAgICAgICAgICAgICAgICAgICAgbWluTXVsdCA9IHMuYXV0b3NjYWxlTXVsdGlwbGllcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGRbal1bMV0gPiBkYi5tYXggfHwgZGIubWF4ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGIubWF4ID0gZFtqXVsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgbWF4c2lkeD1pOwogICAgICAgICAgICAgICAgICAgICAgICBtYXhwaWR4PWo7CiAgICAgICAgICAgICAgICAgICAgICAgIG1heHIgPSBkW2pdWzJdOwogICAgICAgICAgICAgICAgICAgICAgICBtYXhNYXhSYWRpdXMgPSBzLm1heFJhZGl1czsKICAgICAgICAgICAgICAgICAgICAgICAgbWF4TXVsdCA9IHMuYXV0b3NjYWxlTXVsdGlwbGllcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgbWluUmF0aW8gPSBtaW5yL21pbk1heFJhZGl1czsKICAgICAgICB2YXIgbWF4UmF0aW8gPSBtYXhyL21heE1heFJhZGl1czsKICAgICAgICAKICAgICAgICAvLyBuZWVkIHRvIGVzdGltYXRlIHRoZSBlZmZlY3Qgb2YgdGhlIHJhZGl1cyBvbiB0b3RhbCBheGlzIHNwYW4gYW5kIGFkanVzdCBheGlzIGFjY29yZGluZ2x5LgogICAgICAgIHZhciBzcGFuID0gZGIubWF4IC0gZGIubWluOwogICAgICAgIC8vIHZhciBkaW0gPSAodGhpcy5uYW1lID09ICd4YXhpcycgfHwgdGhpcy5uYW1lID09ICd4MmF4aXMnKSA/IHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIDogdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0OwogICAgICAgIHZhciBkaW0gPSBNYXRoLm1pbih0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCwgdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0KTsKICAgICAgICAKICAgICAgICB2YXIgbWluZmFjdCA9IG1pblJhdGlvICogbWluTXVsdC8zICogc3BhbjsKICAgICAgICB2YXIgbWF4ZmFjdCA9IG1heFJhdGlvICogbWF4TXVsdC8zICogc3BhbjsKICAgICAgICBkYi5tYXggKz0gbWF4ZmFjdDsKICAgICAgICBkYi5taW4gLT0gbWluZmFjdDsKICAgIH07CiAgICAKICAgIGZ1bmN0aW9uIGhpZ2hsaWdodCAocGxvdCwgc2lkeCwgcGlkeCkgewogICAgICAgIHBsb3QucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRMYWJlbENhbnZhcy5lbXB0eSgpOwogICAgICAgIHZhciBzID0gcGxvdC5zZXJpZXNbc2lkeF07CiAgICAgICAgdmFyIGNhbnZhcyA9IHBsb3QucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRDYW52YXM7CiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5fY3R4OwogICAgICAgIGN0eC5jbGVhclJlY3QoMCwwLGN0eC5jYW52YXMud2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTsKICAgICAgICBzLl9oaWdobGlnaHRlZFBvaW50ID0gcGlkeDsKICAgICAgICBwbG90LnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCA9IHNpZHg7CiAgICAgICAgCiAgICAgICAgdmFyIGNvbG9yID0gcy5oaWdobGlnaHRDb2xvckdlbmVyYXRvci5nZXQocGlkeCk7CiAgICAgICAgdmFyIHggPSBzLmdyaWREYXRhW3BpZHhdWzBdLAogICAgICAgICAgICB5ID0gcy5ncmlkRGF0YVtwaWR4XVsxXSwKICAgICAgICAgICAgciA9IHMuZ3JpZERhdGFbcGlkeF1bMl07CiAgICAgICAgY3R4LnNhdmUoKTsKICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7CiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gY29sb3I7CiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7CiAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgIGN0eC5hcmMoeCwgeSwgciwgMCwgMipNYXRoLlBJLCAwKTsKICAgICAgICBjdHguY2xvc2VQYXRoKCk7CiAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICBjdHgucmVzdG9yZSgpOyAgICAgICAgCiAgICAgICAgLy8gYnJpbmcgbGFiZWwgdG8gZnJvbnQKICAgICAgICBpZiAocy5sYWJlbHNbcGlkeF0pIHsKICAgICAgICAgICAgcGxvdC5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodExhYmVsID0gcy5sYWJlbHNbcGlkeF0uY2xvbmUoKTsKICAgICAgICAgICAgcGxvdC5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodExhYmVsLmFwcGVuZFRvKHBsb3QucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRMYWJlbENhbnZhcyk7CiAgICAgICAgICAgIHBsb3QucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRMYWJlbC5hZGRDbGFzcygnanFwbG90LWJ1YmJsZS1sYWJlbC1oaWdobGlnaHQnKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIHVuaGlnaGxpZ2h0IChwbG90KSB7CiAgICAgICAgdmFyIGNhbnZhcyA9IHBsb3QucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRDYW52YXM7CiAgICAgICAgdmFyIHNpZHggPSBwbG90LnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDsKICAgICAgICBwbG90LnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0TGFiZWxDYW52YXMuZW1wdHkoKTsKICAgICAgICBjYW52YXMuX2N0eC5jbGVhclJlY3QoMCwwLCBjYW52YXMuX2N0eC5jYW52YXMud2lkdGgsIGNhbnZhcy5fY3R4LmNhbnZhcy5oZWlnaHQpOwogICAgICAgIGZvciAodmFyIGk9MDsgaTxwbG90LnNlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBwbG90LnNlcmllc1tpXS5faGlnaGxpZ2h0ZWRQb2ludCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHBsb3QucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4ID0gbnVsbDsKICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKCdqcXBsb3REYXRhVW5oaWdobGlnaHQnKTsKICAgIH0KICAgIAogCiAgICBmdW5jdGlvbiBoYW5kbGVNb3ZlKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIGlmIChuZWlnaGJvcikgewogICAgICAgICAgICB2YXIgc2kgPSBuZWlnaGJvci5zZXJpZXNJbmRleDsKICAgICAgICAgICAgdmFyIHBpID0gbmVpZ2hib3IucG9pbnRJbmRleDsKICAgICAgICAgICAgdmFyIGlucyA9IFtzaSwgcGksIG5laWdoYm9yLmRhdGEsIHBsb3Quc2VyaWVzW3NpXS5ncmlkRGF0YVtwaV1bMl1dOwogICAgICAgICAgICB2YXIgZXZ0MSA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YU1vdXNlT3ZlcicpOwogICAgICAgICAgICBldnQxLnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgIGV2dDEucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQxLCBpbnMpOwogICAgICAgICAgICBpZiAocGxvdC5zZXJpZXNbaW5zWzBdXS5oaWdobGlnaHRNb3VzZU92ZXIgJiYgIShpbnNbMF0gPT0gcGxvdC5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXggJiYgaW5zWzFdID09IHBsb3Quc2VyaWVzW2luc1swXV0uX2hpZ2hsaWdodGVkUG9pbnQpKSB7CiAgICAgICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdqcXBsb3REYXRhSGlnaGxpZ2h0Jyk7CiAgICAgICAgICAgICAgICBldnQud2hpY2ggPSBldi53aGljaDsKICAgICAgICAgICAgICAgIGV2dC5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICAgICAgZXZ0LnBhZ2VZID0gZXYucGFnZVk7CiAgICAgICAgICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKGV2dCwgaW5zKTsKICAgICAgICAgICAgICAgIGhpZ2hsaWdodCAocGxvdCwgaW5zWzBdLCBpbnNbMV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG5laWdoYm9yID09IG51bGwpIHsKICAgICAgICAgICAgdW5oaWdobGlnaHQgKHBsb3QpOwogICAgICAgIH0KICAgIH0gCiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICBpZiAobmVpZ2hib3IpIHsKICAgICAgICAgICAgdmFyIHNpID0gbmVpZ2hib3Iuc2VyaWVzSW5kZXg7CiAgICAgICAgICAgIHZhciBwaSA9IG5laWdoYm9yLnBvaW50SW5kZXg7CiAgICAgICAgICAgIHZhciBpbnMgPSBbc2ksIHBpLCBuZWlnaGJvci5kYXRhLCBwbG90LnNlcmllc1tzaV0uZ3JpZERhdGFbcGldWzJdXTsKICAgICAgICAgICAgaWYgKHBsb3Quc2VyaWVzW2luc1swXV0uaGlnaGxpZ2h0TW91c2VEb3duICYmICEoaW5zWzBdID09IHBsb3QucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4ICYmIGluc1sxXSA9PSBwbG90LnNlcmllc1tpbnNbMF1dLl9oaWdobGlnaHRlZFBvaW50KSkgewogICAgICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YUhpZ2hsaWdodCcpOwogICAgICAgICAgICAgICAgZXZ0LndoaWNoID0gZXYud2hpY2g7CiAgICAgICAgICAgICAgICBldnQucGFnZVggPSBldi5wYWdlWDsKICAgICAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQsIGlucyk7CiAgICAgICAgICAgICAgICBoaWdobGlnaHQgKHBsb3QsIGluc1swXSwgaW5zWzFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChuZWlnaGJvciA9PSBudWxsKSB7CiAgICAgICAgICAgIHVuaGlnaGxpZ2h0IChwbG90KTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlVXAoZXYsIGdyaWRwb3MsIGRhdGFwb3MsIG5laWdoYm9yLCBwbG90KSB7CiAgICAgICAgdmFyIGlkeCA9IHBsb3QucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4OwogICAgICAgIGlmIChpZHggIT0gbnVsbCAmJiBwbG90LnNlcmllc1tpZHhdLmhpZ2hsaWdodE1vdXNlRG93bikgewogICAgICAgICAgICB1bmhpZ2hsaWdodChwbG90KTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIGlmIChuZWlnaGJvcikgewogICAgICAgICAgICB2YXIgc2kgPSBuZWlnaGJvci5zZXJpZXNJbmRleDsKICAgICAgICAgICAgdmFyIHBpID0gbmVpZ2hib3IucG9pbnRJbmRleDsKICAgICAgICAgICAgdmFyIGlucyA9IFtzaSwgcGksIG5laWdoYm9yLmRhdGEsIHBsb3Quc2VyaWVzW3NpXS5ncmlkRGF0YVtwaV1bMl1dOwogICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdqcXBsb3REYXRhQ2xpY2snKTsKICAgICAgICAgICAgZXZ0LndoaWNoID0gZXYud2hpY2g7CiAgICAgICAgICAgIGV2dC5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQsIGlucyk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVSaWdodENsaWNrKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIGlmIChuZWlnaGJvcikgewogICAgICAgICAgICB2YXIgc2kgPSBuZWlnaGJvci5zZXJpZXNJbmRleDsKICAgICAgICAgICAgdmFyIHBpID0gbmVpZ2hib3IucG9pbnRJbmRleDsKICAgICAgICAgICAgdmFyIGlucyA9IFtzaSwgcGksIG5laWdoYm9yLmRhdGEsIHBsb3Quc2VyaWVzW3NpXS5ncmlkRGF0YVtwaV1bMl1dOwogICAgICAgICAgICB2YXIgaWR4ID0gcGxvdC5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg7CiAgICAgICAgICAgIGlmIChpZHggIT0gbnVsbCAmJiBwbG90LnNlcmllc1tpZHhdLmhpZ2hsaWdodE1vdXNlRG93bikgewogICAgICAgICAgICAgICAgdW5oaWdobGlnaHQocGxvdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YVJpZ2h0Q2xpY2snKTsKICAgICAgICAgICAgZXZ0LndoaWNoID0gZXYud2hpY2g7CiAgICAgICAgICAgIGV2dC5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQsIGlucyk7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyBjYWxsZWQgd2l0aGluIGNvbnRleHQgb2YgcGxvdAogICAgLy8gY3JlYXRlIGEgY2FudmFzIHdoaWNoIHdlIGNhbiBkcmF3IG9uLgogICAgLy8gaW5zZXJ0IGl0IGJlZm9yZSB0aGUgZXZlbnRDYW52YXMsIHNvIGV2ZW50Q2FudmFzIHdpbGwgc3RpbGwgY2FwdHVyZSBldmVudHMuCiAgICBmdW5jdGlvbiBwb3N0UGxvdERyYXcoKSB7CiAgICAgICAgLy8gTWVtb3J5IExlYWtzIHBhdGNoICAgIAogICAgICAgIGlmICh0aGlzLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIgJiYgdGhpcy5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcykgewogICAgICAgICAgICB0aGlzLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLnJlc2V0Q2FudmFzKCk7CiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRDYW52YXMgPSBudWxsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIgPSB7aGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDpudWxsfTsKICAgICAgICB0aGlzLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzID0gbmV3ICQuanFwbG90LkdlbmVyaWNDYW52YXMoKTsKICAgICAgICB0aGlzLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0TGFiZWwgPSBudWxsOwogICAgICAgIHRoaXMucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRMYWJlbENhbnZhcyA9ICQoJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyI+PC9kaXY+Jyk7CiAgICAgICAgdmFyIHRvcCA9IHRoaXMuX2dyaWRQYWRkaW5nLnRvcDsKICAgICAgICB2YXIgbGVmdCA9IHRoaXMuX2dyaWRQYWRkaW5nLmxlZnQ7CiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSB0aGlzLl9ncmlkUGFkZGluZy5sZWZ0IC0gdGhpcy5fZ3JpZFBhZGRpbmcucmlnaHQ7CiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIHRoaXMuX2dyaWRQYWRkaW5nLnRvcCAtIHRoaXMuX2dyaWRQYWRkaW5nLmJvdHRvbTsKICAgICAgICB0aGlzLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0TGFiZWxDYW52YXMuY3NzKHt0b3A6dG9wLCBsZWZ0OmxlZnQsIHdpZHRoOndpZHRoKydweCcsIGhlaWdodDpoZWlnaHQrJ3B4J30pOwoKICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZSh0aGlzLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsICdqcXBsb3QtYnViYmxlUmVuZGVyZXItaGlnaGxpZ2h0LWNhbnZhcycsIHRoaXMuX3Bsb3REaW1lbnNpb25zLCB0aGlzKSk7CiAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZvcmUodGhpcy5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodExhYmVsQ2FudmFzKTsKICAgICAgICAKICAgICAgICB2YXIgaGN0eCA9IHRoaXMucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuc2V0Q29udGV4dCgpOwogICAgfQoKICAgIAogICAgLy8gc2V0dXAgZGVmYXVsdCByZW5kZXJlcnMgZm9yIGF4ZXMgYW5kIGxlZ2VuZCBzbyB1c2VyIGRvZXNuJ3QgaGF2ZSB0bwogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgcGxvdAogICAgZnVuY3Rpb24gcHJlSW5pdCh0YXJnZXQsIGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICBvcHRpb25zLmF4ZXNEZWZhdWx0cyA9IG9wdGlvbnMuYXhlc0RlZmF1bHRzIHx8IHt9OwogICAgICAgIG9wdGlvbnMuc2VyaWVzRGVmYXVsdHMgPSBvcHRpb25zLnNlcmllc0RlZmF1bHRzIHx8IHt9OwogICAgICAgIC8vIG9ubHkgc2V0IHRoZXNlIGlmIHRoZXJlIGlzIGEgQnViYmxlIHNlcmllcwogICAgICAgIHZhciBzZXRvcHRzID0gZmFsc2U7CiAgICAgICAgaWYgKG9wdGlvbnMuc2VyaWVzRGVmYXVsdHMucmVuZGVyZXIgPT0gJC5qcXBsb3QuQnViYmxlUmVuZGVyZXIpIHsKICAgICAgICAgICAgc2V0b3B0cyA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuc2VyaWVzKSB7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaSA8IG9wdGlvbnMuc2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zZXJpZXNbaV0ucmVuZGVyZXIgPT0gJC5qcXBsb3QuQnViYmxlUmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICAgICBzZXRvcHRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc2V0b3B0cykgewogICAgICAgICAgICBvcHRpb25zLmF4ZXNEZWZhdWx0cy5yZW5kZXJlciA9ICQuanFwbG90LkJ1YmJsZUF4aXNSZW5kZXJlcjsKICAgICAgICAgICAgb3B0aW9ucy5zb3J0RGF0YSA9IGZhbHNlOwogICAgICAgIH0KICAgIH0KICAgIAogICAgJC5qcXBsb3QucHJlSW5pdEhvb2tzLnB1c2gocHJlSW5pdCk7CiAgICAKfSkoalF1ZXJ5KTsKICAgIAogICAg]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.bubbleRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGYpe3ZhciBkPWZ1bmN0aW9uKG0pe3JldHVybiBNYXRoLm1heC5hcHBseShNYXRoLG0pfTt2YXIgaj1mdW5jdGlvbihtKXtyZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCxtKX07Zi5qcXBsb3QuQnViYmxlUmVuZGVyZXI9ZnVuY3Rpb24oKXtmLmpxcGxvdC5MaW5lUmVuZGVyZXIuY2FsbCh0aGlzKX07Zi5qcXBsb3QuQnViYmxlUmVuZGVyZXIucHJvdG90eXBlPW5ldyBmLmpxcGxvdC5MaW5lUmVuZGVyZXIoKTtmLmpxcGxvdC5CdWJibGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3I9Zi5qcXBsb3QuQnViYmxlUmVuZGVyZXI7Zi5qcXBsb3QuQnViYmxlUmVuZGVyZXIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24odyx0KXt0aGlzLnZhcnlCdWJibGVDb2xvcnM9dHJ1ZTt0aGlzLmF1dG9zY2FsZUJ1YmJsZXM9dHJ1ZTt0aGlzLmF1dG9zY2FsZU11bHRpcGxpZXI9MTt0aGlzLmF1dG9zY2FsZVBvaW50c0ZhY3Rvcj0tMC4wNzt0aGlzLmVzY2FwZUh0bWw9dHJ1ZTt0aGlzLmhpZ2hsaWdodE1vdXNlT3Zlcj10cnVlO3RoaXMuaGlnaGxpZ2h0TW91c2VEb3duPWZhbHNlO3RoaXMuaGlnaGxpZ2h0Q29sb3JzPVtdO3RoaXMuYnViYmxlQWxwaGE9MTt0aGlzLmhpZ2hsaWdodEFscGhhPW51bGw7dGhpcy5idWJibGVHcmFkaWVudHM9ZmFsc2U7dGhpcy5zaG93TGFiZWxzPXRydWU7dGhpcy5yYWRpaT1bXTt0aGlzLm1heFJhZGl1cz0wO3RoaXMuX2hpZ2hsaWdodGVkUG9pbnQ9bnVsbDt0aGlzLmxhYmVscz1bXTt0aGlzLmJ1YmJsZUNhbnZhc2VzPVtdO3RoaXMuX3R5cGU9ImJ1YmJsZSI7aWYody5oaWdobGlnaHRNb3VzZURvd24mJncuaGlnaGxpZ2h0TW91c2VPdmVyPT1udWxsKXt3LmhpZ2hsaWdodE1vdXNlT3Zlcj1mYWxzZX1mLmV4dGVuZCh0cnVlLHRoaXMsdyk7aWYodGhpcy5oaWdobGlnaHRBbHBoYT09bnVsbCl7dGhpcy5oaWdobGlnaHRBbHBoYT10aGlzLmJ1YmJsZUFscGhhO2lmKHRoaXMuYnViYmxlR3JhZGllbnRzKXt0aGlzLmhpZ2hsaWdodEFscGhhPTAuMzV9fXRoaXMuYXV0b3NjYWxlTXVsdGlwbGllcj10aGlzLmF1dG9zY2FsZU11bHRpcGxpZXIqTWF0aC5wb3codGhpcy5kYXRhLmxlbmd0aCx0aGlzLmF1dG9zY2FsZVBvaW50c0ZhY3Rvcik7dGhpcy5faGlnaGxpZ2h0ZWRQb2ludD1udWxsO3ZhciBuO2Zvcih2YXIgcj0wO3I8dGhpcy5kYXRhLmxlbmd0aDtyKyspe3ZhciBwPW51bGw7dmFyIHY9dGhpcy5kYXRhW3JdO3RoaXMubWF4UmFkaXVzPU1hdGgubWF4KHRoaXMubWF4UmFkaXVzLHZbMl0pO2lmKHZbM10pe2lmKHR5cGVvZih2WzNdKT09Im9iamVjdCIpe3A9dlszXVsiY29sb3IiXX19aWYocD09bnVsbCl7aWYodGhpcy5zZXJpZXNDb2xvcnNbcl0hPW51bGwpe3A9dGhpcy5zZXJpZXNDb2xvcnNbcl19fWlmKHAmJnRoaXMuYnViYmxlQWxwaGE8MSl7bj1mLmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHMocCk7cD0icmdiYSgiK25bMF0rIiwgIituWzFdKyIsICIrblsyXSsiLCAiK3RoaXMuYnViYmxlQWxwaGErIikifWlmKHApe3RoaXMuc2VyaWVzQ29sb3JzW3JdPXB9fWlmKCF0aGlzLnZhcnlCdWJibGVDb2xvcnMpe3RoaXMuc2VyaWVzQ29sb3JzPVt0aGlzLmNvbG9yXX10aGlzLmNvbG9yR2VuZXJhdG9yPW5ldyBmLmpxcGxvdC5Db2xvckdlbmVyYXRvcih0aGlzLnNlcmllc0NvbG9ycyk7aWYodGhpcy5oaWdobGlnaHRDb2xvcnMubGVuZ3RoPT0wKXtmb3IodmFyIHI9MDtyPHRoaXMuc2VyaWVzQ29sb3JzLmxlbmd0aDtyKyspe3ZhciBvPWYuanFwbG90LmdldENvbG9yQ29tcG9uZW50cyh0aGlzLnNlcmllc0NvbG9yc1tyXSk7dmFyIHU9W29bMF0sb1sxXSxvWzJdXTt2YXIgcz11WzBdK3VbMV0rdVsyXTtmb3IodmFyIHE9MDtxPDM7cSsrKXt1W3FdPShzPjU3MCk/dVtxXSowLjg6dVtxXSswLjMqKDI1NS11W3FdKTt1W3FdPXBhcnNlSW50KHVbcV0sMTApfXRoaXMuaGlnaGxpZ2h0Q29sb3JzLnB1c2goInJnYmEoIit1WzBdKyIsIit1WzFdKyIsIit1WzJdKyIsICIrdGhpcy5oaWdobGlnaHRBbHBoYSsiKSIpfX10aGlzLmhpZ2hsaWdodENvbG9yR2VuZXJhdG9yPW5ldyBmLmpxcGxvdC5Db2xvckdlbmVyYXRvcih0aGlzLmhpZ2hsaWdodENvbG9ycyk7dmFyIG09e2ZpbGw6dHJ1ZSxpc2FyYzp0cnVlLGFuZ2xlOnRoaXMuc2hhZG93QW5nbGUsYWxwaGE6dGhpcy5zaGFkb3dBbHBoYSxjbG9zZVBhdGg6dHJ1ZX07dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5pbml0KG0pO3RoaXMuY2FudmFzPW5ldyBmLmpxcGxvdC5EaXZDYW52YXMoKTt0aGlzLmNhbnZhcy5fcGxvdERpbWVuc2lvbnM9dGhpcy5fcGxvdERpbWVuc2lvbnM7dC5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgianFwbG90TW91c2VNb3ZlIixhKTt0LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RNb3VzZURvd24iLGIpO3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoImpxcGxvdE1vdXNlVXAiLGspO3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoImpxcGxvdENsaWNrIixnKTt0LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RSaWdodENsaWNrIixsKTt0LnBvc3REcmF3SG9va3MuYWRkT25jZShoKX07Zi5qcXBsb3QuQnViYmxlUmVuZGVyZXIucHJvdG90eXBlLnNldEdyaWREYXRhPWZ1bmN0aW9uKHcpe3ZhciBxPXRoaXMuX3hheGlzLnNlcmllc191MnA7dmFyIG09dGhpcy5feWF4aXMuc2VyaWVzX3UycDt2YXIgdD10aGlzLl9wbG90RGF0YTt0aGlzLmdyaWREYXRhPVtdO3ZhciBzPVtdO3RoaXMucmFkaWk9W107dmFyIHY9TWF0aC5taW4ody5faGVpZ2h0LHcuX3dpZHRoKTtmb3IodmFyIHU9MDt1PHRoaXMuZGF0YS5sZW5ndGg7dSsrKXtpZih0W3VdIT1udWxsKXt0aGlzLmdyaWREYXRhLnB1c2goW3EuY2FsbCh0aGlzLl94YXhpcyx0W3VdWzBdKSxtLmNhbGwodGhpcy5feWF4aXMsdFt1XVsxXSksdFt1XVsyXV0pO3RoaXMucmFkaWkucHVzaChbdSx0W3VdWzJdXSk7cy5wdXNoKHRbdV1bMl0pfX12YXIgbixvLHg9dGhpcy5tYXhSYWRpdXM9ZChzKTt2YXIgcD10aGlzLmdyaWREYXRhLmxlbmd0aDtpZih0aGlzLmF1dG9zY2FsZUJ1YmJsZXMpe2Zvcih2YXIgdT0wO3U8cDt1Kyspe289c1t1XS94O249dGhpcy5hdXRvc2NhbGVNdWx0aXBsaWVyKnYvNjt0aGlzLmdyaWREYXRhW3VdWzJdPW4qb319dGhpcy5yYWRpaS5zb3J0KGZ1bmN0aW9uKHkscil7cmV0dXJuIHJbMV0teVsxXX0pfTtmLmpxcGxvdC5CdWJibGVSZW5kZXJlci5wcm90b3R5cGUubWFrZUdyaWREYXRhPWZ1bmN0aW9uKHQsdyl7dmFyIHE9dGhpcy5feGF4aXMuc2VyaWVzX3UycDt2YXIgbj10aGlzLl95YXhpcy5zZXJpZXNfdTJwO3ZhciB4PVtdO3ZhciBzPVtdO3RoaXMucmFkaWk9W107dmFyIHY9TWF0aC5taW4ody5faGVpZ2h0LHcuX3dpZHRoKTtmb3IodmFyIHU9MDt1PHQubGVuZ3RoO3UrKyl7aWYodFt1XSE9bnVsbCl7eC5wdXNoKFtxLmNhbGwodGhpcy5feGF4aXMsdFt1XVswXSksbi5jYWxsKHRoaXMuX3lheGlzLHRbdV1bMV0pLHRbdV1bMl1dKTtzLnB1c2godFt1XVsyXSk7dGhpcy5yYWRpaS5wdXNoKFt1LHRbdV1bMl1dKX19dmFyIG0sbyx5PXRoaXMubWF4UmFkaXVzPWQocyk7dmFyIHA9dGhpcy5ncmlkRGF0YS5sZW5ndGg7aWYodGhpcy5hdXRvc2NhbGVCdWJibGVzKXtmb3IodmFyIHU9MDt1PHA7dSsrKXtvPXNbdV0veTttPXRoaXMuYXV0b3NjYWxlTXVsdGlwbGllcip2LzY7eFt1XVsyXT1tKm99fXRoaXMucmFkaWkuc29ydChmdW5jdGlvbih6LHIpe3JldHVybiByWzFdLXpbMV19KTtyZXR1cm4geH07Zi5qcXBsb3QuQnViYmxlUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oRCxKLG4pe2lmKHRoaXMucGx1Z2lucy5wb2ludExhYmVscyl7dGhpcy5wbHVnaW5zLnBvaW50TGFiZWxzLnNob3c9ZmFsc2V9dmFyIEE9KG4hPXVuZGVmaW5lZCk/bjp7fTt2YXIgcj0oQS5zaGFkb3chPXVuZGVmaW5lZCk/QS5zaGFkb3c6dGhpcy5zaGFkb3c7dGhpcy5jYW52YXMuX2VsZW0uZW1wdHkoKTtmb3IodmFyIEc9MDtHPHRoaXMucmFkaWkubGVuZ3RoO0crKyl7dmFyIEM9dGhpcy5yYWRpaVtHXVswXTt2YXIgej1udWxsO3ZhciBGPW51bGw7dmFyIG09bnVsbDt2YXIgcD1udWxsO3ZhciBJPXRoaXMuZGF0YVtDXTt2YXIgSj10aGlzLmdyaWREYXRhW0NdO2lmKElbM10pe2lmKHR5cGVvZihJWzNdKT09Im9iamVjdCIpe3o9SVszXVsibGFiZWwiXX1lbHNle2lmKHR5cGVvZihJWzNdKT09InN0cmluZyIpe3o9SVszXX19fUY9dGhpcy5jb2xvckdlbmVyYXRvci5nZXQoQyk7dmFyIEU9SlsyXTt2YXIgcSxLO2lmKHRoaXMuc2hhZG93KXtxPSgwLjcrSlsyXS80MCkudG9GaXhlZCgxKTtLPTErTWF0aC5jZWlsKEpbMl0vMTUpO0UrPXEqS310aGlzLmJ1YmJsZUNhbnZhc2VzW0NdPW5ldyBmLmpxcGxvdC5CdWJibGVDYW52YXMoKTt0aGlzLmNhbnZhcy5fZWxlbS5hcHBlbmQodGhpcy5idWJibGVDYW52YXNlc1tDXS5jcmVhdGVFbGVtZW50KEpbMF0sSlsxXSxFKSk7dGhpcy5idWJibGVDYW52YXNlc1tDXS5zZXRDb250ZXh0KCk7dmFyIEQ9dGhpcy5idWJibGVDYW52YXNlc1tDXS5fY3R4O3ZhciB1PUQuY2FudmFzLndpZHRoLzI7dmFyIHM9RC5jYW52YXMuaGVpZ2h0LzI7aWYodGhpcy5zaGFkb3cpe3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhELFt1LHMsSlsyXSwwLDIqTWF0aC5QSV0se29mZnNldDpxLGRlcHRoOkt9KX10aGlzLmJ1YmJsZUNhbnZhc2VzW0NdLmRyYXcoSlsyXSxGLHRoaXMuYnViYmxlR3JhZGllbnRzLHRoaXMuc2hhZG93QW5nbGUvMTgwKk1hdGguUEkpO2lmKHomJnRoaXMuc2hvd0xhYmVscyl7cD1mKCc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiIGNsYXNzPSJqcXBsb3QtYnViYmxlLWxhYmVsIj48L2Rpdj4nKTtpZih0aGlzLmVzY2FwZUh0bWwpe3AudGV4dCh6KX1lbHNle3AuaHRtbCh6KX10aGlzLmNhbnZhcy5fZWxlbS5hcHBlbmQocCk7dmFyIEg9ZihwKS5vdXRlckhlaWdodCgpO3ZhciB2PWYocCkub3V0ZXJXaWR0aCgpO3ZhciBCPUpbMV0tMC41Kkg7dmFyIG89SlswXS0wLjUqdjtwLmNzcyh7dG9wOkIsbGVmdDpvfSk7dGhpcy5sYWJlbHNbQ109ZihwKX19fTtmLmpxcGxvdC5EaXZDYW52YXM9ZnVuY3Rpb24oKXtmLmpxcGxvdC5FbGVtQ29udGFpbmVyLmNhbGwodGhpcyk7dGhpcy5fY3R4fTtmLmpxcGxvdC5EaXZDYW52YXMucHJvdG90eXBlPW5ldyBmLmpxcGxvdC5FbGVtQ29udGFpbmVyKCk7Zi5qcXBsb3QuRGl2Q2FudmFzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1mLmpxcGxvdC5EaXZDYW52YXM7Zi5qcXBsb3QuRGl2Q2FudmFzLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHMscCxuKXt0aGlzLl9vZmZzZXRzPXM7dmFyIG09ImpxcGxvdC1EaXZDYW52YXMiO2lmKHAhPXVuZGVmaW5lZCl7bT1wfXZhciByO2lmKHRoaXMuX2VsZW0pe3I9dGhpcy5fZWxlbS5nZXQoMCl9ZWxzZXtyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfWlmKG4hPXVuZGVmaW5lZCl7dGhpcy5fcGxvdERpbWVuc2lvbnM9bn12YXIgbz10aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC10aGlzLl9vZmZzZXRzLmxlZnQtdGhpcy5fb2Zmc2V0cy5yaWdodCsicHgiO3ZhciBxPXRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodC10aGlzLl9vZmZzZXRzLnRvcC10aGlzLl9vZmZzZXRzLmJvdHRvbSsicHgiO3RoaXMuX2VsZW09ZihyKTt0aGlzLl9lbGVtLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix3aWR0aDpvLGhlaWdodDpxLGxlZnQ6dGhpcy5fb2Zmc2V0cy5sZWZ0LHRvcDp0aGlzLl9vZmZzZXRzLnRvcH0pO3RoaXMuX2VsZW0uYWRkQ2xhc3MobSk7cmV0dXJuIHRoaXMuX2VsZW19O2YuanFwbG90LkRpdkNhbnZhcy5wcm90b3R5cGUuc2V0Q29udGV4dD1mdW5jdGlvbigpe3RoaXMuX2N0eD17Y2FudmFzOnt3aWR0aDowLGhlaWdodDowfSxjbGVhclJlY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19O3JldHVybiB0aGlzLl9jdHh9O2YuanFwbG90LkJ1YmJsZUNhbnZhcz1mdW5jdGlvbigpe2YuanFwbG90LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTt0aGlzLl9jdHh9O2YuanFwbG90LkJ1YmJsZUNhbnZhcy5wcm90b3R5cGU9bmV3IGYuanFwbG90LkVsZW1Db250YWluZXIoKTtmLmpxcGxvdC5CdWJibGVDYW52YXMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWYuanFwbG90LkJ1YmJsZUNhbnZhcztmLmpxcGxvdC5CdWJibGVDYW52YXMucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24obix1LHMpe3ZhciBtPSJqcXBsb3QtYnViYmxlLXBvaW50Ijt2YXIgcTtpZih0aGlzLl9lbGVtKXtxPXRoaXMuX2VsZW0uZ2V0KDApfWVsc2V7cT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKX1xLndpZHRoPShzIT1udWxsKT8yKnM6cS53aWR0aDtxLmhlaWdodD0ocyE9bnVsbCk/MipzOnEuaGVpZ2h0O3RoaXMuX2VsZW09ZihxKTt2YXIgbz0obiE9bnVsbCYmcyE9bnVsbCk/bi1zOnRoaXMuX2VsZW0uY3NzKCJsZWZ0Iik7dmFyIHA9KHUhPW51bGwmJnMhPW51bGwpP3Utczp0aGlzLl9lbGVtLmNzcygidG9wIik7dGhpcy5fZWxlbS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpvLHRvcDpwfSk7dGhpcy5fZWxlbS5hZGRDbGFzcyhtKTtpZihmLmpxcGxvdC51c2VfZXhjYW52YXMpe3dpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIuaW5pdF8oZG9jdW1lbnQpO3E9d2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci5pbml0RWxlbWVudChxKX1yZXR1cm4gdGhpcy5fZWxlbX07Zi5qcXBsb3QuQnViYmxlQ2FudmFzLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKG0scyx2LHApe3ZhciBEPXRoaXMuX2N0eDt2YXIgQj1ELmNhbnZhcy53aWR0aC8yO3ZhciB6PUQuY2FudmFzLmhlaWdodC8yO0Quc2F2ZSgpO2lmKHYmJiFmLmpxcGxvdC51c2VfZXhjYW52YXMpe209bSoxLjA0O3ZhciBvPWYuanFwbG90LmdldENvbG9yQ29tcG9uZW50cyhzKTt2YXIgdT0icmdiYSgiK01hdGgucm91bmQob1swXSswLjgqKDI1NS1vWzBdKSkrIiwgIitNYXRoLnJvdW5kKG9bMV0rMC44KigyNTUtb1sxXSkpKyIsICIrTWF0aC5yb3VuZChvWzJdKzAuOCooMjU1LW9bMl0pKSsiLCAiK29bM10rIikiO3ZhciB0PSJyZ2JhKCIrb1swXSsiLCAiK29bMV0rIiwgIitvWzJdKyIsIDApIjt2YXIgQz0wLjM1Km07dmFyIEE9Qi1NYXRoLmNvcyhwKSowLjMzKm07dmFyIG49ei1NYXRoLnNpbihwKSowLjMzKm07dmFyIHc9RC5jcmVhdGVSYWRpYWxHcmFkaWVudChBLG4sQyxCLHosbSk7dy5hZGRDb2xvclN0b3AoMCx1KTt3LmFkZENvbG9yU3RvcCgwLjkzLHMpO3cuYWRkQ29sb3JTdG9wKDAuOTYsdCk7dy5hZGRDb2xvclN0b3AoMSx0KTtELmZpbGxTdHlsZT13O0QuZmlsbFJlY3QoMCwwLEQuY2FudmFzLndpZHRoLEQuY2FudmFzLmhlaWdodCl9ZWxzZXtELmZpbGxTdHlsZT1zO0Quc3Ryb2tlU3R5bGU9cztELmxpbmVXaWR0aD0xO0QuYmVnaW5QYXRoKCk7dmFyIHE9MipNYXRoLlBJO0QuYXJjKEIseixtLDAscSwwKTtELmNsb3NlUGF0aCgpO0QuZmlsbCgpfUQucmVzdG9yZSgpfTtmLmpxcGxvdC5CdWJibGVDYW52YXMucHJvdG90eXBlLnNldENvbnRleHQ9ZnVuY3Rpb24oKXt0aGlzLl9jdHg9dGhpcy5fZWxlbS5nZXQoMCkuZ2V0Q29udGV4dCgiMmQiKTtyZXR1cm4gdGhpcy5fY3R4fTtmLmpxcGxvdC5CdWJibGVBeGlzUmVuZGVyZXI9ZnVuY3Rpb24oKXtmLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIuY2FsbCh0aGlzKX07Zi5qcXBsb3QuQnViYmxlQXhpc1JlbmRlcmVyLnByb3RvdHlwZT1uZXcgZi5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyKCk7Zi5qcXBsb3QuQnViYmxlQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1mLmpxcGxvdC5CdWJibGVBeGlzUmVuZGVyZXI7Zi5qcXBsb3QuQnViYmxlQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKG4pe2YuZXh0ZW5kKHRydWUsdGhpcyxuKTt2YXIgST10aGlzLl9kYXRhQm91bmRzO3ZhciBIPTAsdj0wLG09MCx5PTAscT0wLHI9MCxEPTAsdD0wLEY9MCx6PTA7Zm9yKHZhciBFPTA7RTx0aGlzLl9zZXJpZXMubGVuZ3RoO0UrKyl7dmFyIHg9dGhpcy5fc2VyaWVzW0VdO3ZhciBHPXguX3Bsb3REYXRhO2Zvcih2YXIgQj0wO0I8Ry5sZW5ndGg7QisrKXtpZih0aGlzLm5hbWU9PSJ4YXhpcyJ8fHRoaXMubmFtZT09IngyYXhpcyIpe2lmKEdbQl1bMF08SS5taW58fEkubWluPT1udWxsKXtJLm1pbj1HW0JdWzBdO0g9RTt2PUI7cj1HW0JdWzJdO0Q9eC5tYXhSYWRpdXM7ej14LmF1dG9zY2FsZU11bHRpcGxpZXJ9aWYoR1tCXVswXT5JLm1heHx8SS5tYXg9PW51bGwpe0kubWF4PUdbQl1bMF07bT1FO3k9QjtxPUdbQl1bMl07dD14Lm1heFJhZGl1cztGPXguYXV0b3NjYWxlTXVsdGlwbGllcn19ZWxzZXtpZihHW0JdWzFdPEkubWlufHxJLm1pbj09bnVsbCl7SS5taW49R1tCXVsxXTtIPUU7dj1CO3I9R1tCXVsyXTtEPXgubWF4UmFkaXVzO3o9eC5hdXRvc2NhbGVNdWx0aXBsaWVyfWlmKEdbQl1bMV0+SS5tYXh8fEkubWF4PT1udWxsKXtJLm1heD1HW0JdWzFdO209RTt5PUI7cT1HW0JdWzJdO3Q9eC5tYXhSYWRpdXM7Rj14LmF1dG9zY2FsZU11bHRpcGxpZXJ9fX19dmFyIG89ci9EO3ZhciB3PXEvdDt2YXIgQz1JLm1heC1JLm1pbjt2YXIgQT1NYXRoLm1pbih0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCx0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQpO3ZhciBwPW8qei8zKkM7dmFyIHU9dypGLzMqQztJLm1heCs9dTtJLm1pbi09cH07ZnVuY3Rpb24gZShwLHYscSl7cC5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodExhYmVsQ2FudmFzLmVtcHR5KCk7dmFyIHo9cC5zZXJpZXNbdl07dmFyIG49cC5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhczt2YXIgdz1uLl9jdHg7dy5jbGVhclJlY3QoMCwwLHcuY2FudmFzLndpZHRoLHcuY2FudmFzLmhlaWdodCk7ei5faGlnaGxpZ2h0ZWRQb2ludD1xO3AucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4PXY7dmFyIG89ei5oaWdobGlnaHRDb2xvckdlbmVyYXRvci5nZXQocSk7dmFyIHU9ei5ncmlkRGF0YVtxXVswXSx0PXouZ3JpZERhdGFbcV1bMV0sbT16LmdyaWREYXRhW3FdWzJdO3cuc2F2ZSgpO3cuZmlsbFN0eWxlPW87dy5zdHJva2VTdHlsZT1vO3cubGluZVdpZHRoPTE7dy5iZWdpblBhdGgoKTt3LmFyYyh1LHQsbSwwLDIqTWF0aC5QSSwwKTt3LmNsb3NlUGF0aCgpO3cuZmlsbCgpO3cucmVzdG9yZSgpO2lmKHoubGFiZWxzW3FdKXtwLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0TGFiZWw9ei5sYWJlbHNbcV0uY2xvbmUoKTtwLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0TGFiZWwuYXBwZW5kVG8ocC5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodExhYmVsQ2FudmFzKTtwLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0TGFiZWwuYWRkQ2xhc3MoImpxcGxvdC1idWJibGUtbGFiZWwtaGlnaGxpZ2h0Iil9fWZ1bmN0aW9uIGkocCl7dmFyIG09cC5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhczt2YXIgbz1wLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDtwLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0TGFiZWxDYW52YXMuZW1wdHkoKTttLl9jdHguY2xlYXJSZWN0KDAsMCxtLl9jdHguY2FudmFzLndpZHRoLG0uX2N0eC5jYW52YXMuaGVpZ2h0KTtmb3IodmFyIG49MDtuPHAuc2VyaWVzLmxlbmd0aDtuKyspe3Auc2VyaWVzW25dLl9oaWdobGlnaHRlZFBvaW50PW51bGx9cC5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg9bnVsbDtwLnRhcmdldC50cmlnZ2VyKCJqcXBsb3REYXRhVW5oaWdobGlnaHQiKX1mdW5jdGlvbiBhKHMscCxtLHYscil7aWYodil7dmFyIG49di5zZXJpZXNJbmRleDt2YXIgbz12LnBvaW50SW5kZXg7dmFyIHE9W24sbyx2LmRhdGEsci5zZXJpZXNbbl0uZ3JpZERhdGFbb11bMl1dO3ZhciB0PWpRdWVyeS5FdmVudCgianFwbG90RGF0YU1vdXNlT3ZlciIpO3QucGFnZVg9cy5wYWdlWDt0LnBhZ2VZPXMucGFnZVk7ci50YXJnZXQudHJpZ2dlcih0LHEpO2lmKHIuc2VyaWVzW3FbMF1dLmhpZ2hsaWdodE1vdXNlT3ZlciYmIShxWzBdPT1yLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCYmcVsxXT09ci5zZXJpZXNbcVswXV0uX2hpZ2hsaWdodGVkUG9pbnQpKXt2YXIgdT1qUXVlcnkuRXZlbnQoImpxcGxvdERhdGFIaWdobGlnaHQiKTt1LndoaWNoPXMud2hpY2g7dS5wYWdlWD1zLnBhZ2VYO3UucGFnZVk9cy5wYWdlWTtyLnRhcmdldC50cmlnZ2VyKHUscSk7ZShyLHFbMF0scVsxXSl9fWVsc2V7aWYodj09bnVsbCl7aShyKX19fWZ1bmN0aW9uIGIocyxwLG0sdSxyKXtpZih1KXt2YXIgbj11LnNlcmllc0luZGV4O3ZhciBvPXUucG9pbnRJbmRleDt2YXIgcT1bbixvLHUuZGF0YSxyLnNlcmllc1tuXS5ncmlkRGF0YVtvXVsyXV07aWYoci5zZXJpZXNbcVswXV0uaGlnaGxpZ2h0TW91c2VEb3duJiYhKHFbMF09PXIucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4JiZxWzFdPT1yLnNlcmllc1txWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpe3ZhciB0PWpRdWVyeS5FdmVudCgianFwbG90RGF0YUhpZ2hsaWdodCIpO3Qud2hpY2g9cy53aGljaDt0LnBhZ2VYPXMucGFnZVg7dC5wYWdlWT1zLnBhZ2VZO3IudGFyZ2V0LnRyaWdnZXIodCxxKTtlKHIscVswXSxxWzFdKX19ZWxzZXtpZih1PT1udWxsKXtpKHIpfX19ZnVuY3Rpb24gayhvLG4scixxLHApe3ZhciBtPXAucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4O2lmKG0hPW51bGwmJnAuc2VyaWVzW21dLmhpZ2hsaWdodE1vdXNlRG93bil7aShwKX19ZnVuY3Rpb24gZyhzLHAsbSx1LHIpe2lmKHUpe3ZhciBuPXUuc2VyaWVzSW5kZXg7dmFyIG89dS5wb2ludEluZGV4O3ZhciBxPVtuLG8sdS5kYXRhLHIuc2VyaWVzW25dLmdyaWREYXRhW29dWzJdXTt2YXIgdD1qUXVlcnkuRXZlbnQoImpxcGxvdERhdGFDbGljayIpO3Qud2hpY2g9cy53aGljaDt0LnBhZ2VYPXMucGFnZVg7dC5wYWdlWT1zLnBhZ2VZO3IudGFyZ2V0LnRyaWdnZXIodCxxKX19ZnVuY3Rpb24gbChzLHAsbSx2LHIpe2lmKHYpe3ZhciBuPXYuc2VyaWVzSW5kZXg7dmFyIG89di5wb2ludEluZGV4O3ZhciBxPVtuLG8sdi5kYXRhLHIuc2VyaWVzW25dLmdyaWREYXRhW29dWzJdXTt2YXIgdD1yLnBsdWdpbnMuYnViYmxlUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDtpZih0IT1udWxsJiZyLnNlcmllc1t0XS5oaWdobGlnaHRNb3VzZURvd24pe2kocil9dmFyIHU9alF1ZXJ5LkV2ZW50KCJqcXBsb3REYXRhUmlnaHRDbGljayIpO3Uud2hpY2g9cy53aGljaDt1LnBhZ2VYPXMucGFnZVg7dS5wYWdlWT1zLnBhZ2VZO3IudGFyZ2V0LnRyaWdnZXIodSxxKX19ZnVuY3Rpb24gaCgpe2lmKHRoaXMucGx1Z2lucy5idWJibGVSZW5kZXJlciYmdGhpcy5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcyl7dGhpcy5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5yZXNldENhbnZhcygpO3RoaXMucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRDYW52YXM9bnVsbH10aGlzLnBsdWdpbnMuYnViYmxlUmVuZGVyZXI9e2hpZ2hsaWdodGVkU2VyaWVzSW5kZXg6bnVsbH07dGhpcy5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcz1uZXcgZi5qcXBsb3QuR2VuZXJpY0NhbnZhcygpO3RoaXMucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRMYWJlbD1udWxsO3RoaXMucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRMYWJlbENhbnZhcz1mKCc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiPjwvZGl2PicpO3ZhciBxPXRoaXMuX2dyaWRQYWRkaW5nLnRvcDt2YXIgcD10aGlzLl9ncmlkUGFkZGluZy5sZWZ0O3ZhciBuPXRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoLXRoaXMuX2dyaWRQYWRkaW5nLmxlZnQtdGhpcy5fZ3JpZFBhZGRpbmcucmlnaHQ7dmFyIG09dGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0LXRoaXMuX2dyaWRQYWRkaW5nLnRvcC10aGlzLl9ncmlkUGFkZGluZy5ib3R0b207dGhpcy5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodExhYmVsQ2FudmFzLmNzcyh7dG9wOnEsbGVmdDpwLHdpZHRoOm4rInB4IixoZWlnaHQ6bSsicHgifSk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZvcmUodGhpcy5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCJqcXBsb3QtYnViYmxlUmVuZGVyZXItaGlnaGxpZ2h0LWNhbnZhcyIsdGhpcy5fcGxvdERpbWVuc2lvbnMsdGhpcykpO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKHRoaXMucGx1Z2lucy5idWJibGVSZW5kZXJlci5oaWdobGlnaHRMYWJlbENhbnZhcyk7dmFyIG89dGhpcy5wbHVnaW5zLmJ1YmJsZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5zZXRDb250ZXh0KCl9ZnVuY3Rpb24gYyhxLHAsbil7bj1ufHx7fTtuLmF4ZXNEZWZhdWx0cz1uLmF4ZXNEZWZhdWx0c3x8e307bi5zZXJpZXNEZWZhdWx0cz1uLnNlcmllc0RlZmF1bHRzfHx7fTt2YXIgbT1mYWxzZTtpZihuLnNlcmllc0RlZmF1bHRzLnJlbmRlcmVyPT1mLmpxcGxvdC5CdWJibGVSZW5kZXJlcil7bT10cnVlfWVsc2V7aWYobi5zZXJpZXMpe2Zvcih2YXIgbz0wO288bi5zZXJpZXMubGVuZ3RoO28rKyl7aWYobi5zZXJpZXNbb10ucmVuZGVyZXI9PWYuanFwbG90LkJ1YmJsZVJlbmRlcmVyKXttPXRydWV9fX19aWYobSl7bi5heGVzRGVmYXVsdHMucmVuZGVyZXI9Zi5qcXBsb3QuQnViYmxlQXhpc1JlbmRlcmVyO24uc29ydERhdGE9ZmFsc2V9fWYuanFwbG90LnByZUluaXRIb29rcy5wdXNoKGMpfSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLyoqCiAgICAqIENsYXNzOiAkLmpxcGxvdC5DYW52YXNBeGlzTGFiZWxSZW5kZXJlcgogICAgKiBSZW5kZXJlciB0byBkcmF3IGF4aXMgbGFiZWxzIHdpdGggYSBjYW52YXMgZWxlbWVudCB0byBzdXBwb3J0IGFkdmFuY2VkCiAgICAqIGZlYXRydWVzIHN1Y2ggYXMgcm90YXRlZCB0ZXh0LiAgVGhpcyByZW5kZXJlciB1c2VzIGEgc2VwYXJhdGUgcmVuZGVyaW5nIGVuZ2luZQogICAgKiB0byBkcmF3IHRoZSB0ZXh0IG9uIHRoZSBjYW52YXMuICBUd28gbW9kZXMgb2YgcmVuZGVyaW5nIHRoZSB0ZXh0IGFyZSBhdmFpbGFibGUuCiAgICAqIElmIHRoZSBicm93c2VyIGhhcyBuYXRpdmUgZm9udCBzdXBwb3J0IGZvciBjYW52YXMgZm9udHMgKGN1cnJlbnRseSBNb3ppbGEgMy41CiAgICAqIGFuZCBTYWZhcmkgNCksIHlvdSBjYW4gZW5hYmxlIHRleHQgcmVuZGVyaW5nIHdpdGggdGhlIGNhbnZhcyBmaWxsVGV4dCBtZXRob2QuCiAgICAqIFlvdSBkbyBzbyBieSBzZXR0aW5nIHRoZSAiZW5hYmxlRm9udFN1cHBvcnQiIG9wdGlvbiB0byB0cnVlLiAKICAgICogCiAgICAqIEJyb3dzZXJzIGxhY2tpbmcgbmF0aXZlIGZvbnQgc3VwcG9ydCB3aWxsIGhhdmUgdGhlIHRleHQgZHJhd24gb24gdGhlIGNhbnZhcwogICAgKiB1c2luZyB0aGUgSGVyc2hleSBmb250IG1ldHJpY3MuICBFdmVuIGlmIHRoZSAiZW5hYmxlRm9udFN1cHBvcnQiIG9wdGlvbiBpcyB0cnVlCiAgICAqIG5vbi1zdXBwb3J0aW5nIGJyb3dzZXJzIHdpbGwgc3RpbGwgcmVuZGVyIHdpdGggdGhlIEhlcnNoZXkgZm9udC4KICAgICogCiAgICAqLwogICAgJC5qcXBsb3QuQ2FudmFzQXhpc0xhYmVsUmVuZGVyZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAKICAgICAgICAvLyBwcm9wOiBhbmdsZQogICAgICAgIC8vIGFuZ2xlIG9mIHRleHQsIG1lYXN1cmVkIGNsb2Nrd2lzZSBmcm9tIHggYXhpcy4KICAgICAgICB0aGlzLmFuZ2xlID0gMDsKICAgICAgICAvLyBuYW1lIG9mIHRoZSBheGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRpY2sKICAgICAgICB0aGlzLmF4aXM7CiAgICAgICAgLy8gcHJvcDogc2hvdwogICAgICAgIC8vIHdoZXRoZXIgb3Igbm90IHRvIHNob3cgdGhlIHRpY2sgKG1hcmsgYW5kIGxhYmVsKS4KICAgICAgICB0aGlzLnNob3cgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IHNob3dMYWJlbAogICAgICAgIC8vIHdoZXRoZXIgb3Igbm90IHRvIHNob3cgdGhlIGxhYmVsLgogICAgICAgIHRoaXMuc2hvd0xhYmVsID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBsYWJlbAogICAgICAgIC8vIGxhYmVsIGZvciB0aGUgYXhpcy4KICAgICAgICB0aGlzLmxhYmVsID0gJyc7CiAgICAgICAgLy8gcHJvcDogZm9udEZhbWlseQogICAgICAgIC8vIENTUyBzcGVjIGZvciB0aGUgZm9udC1mYW1pbHkgY3NzIGF0dHJpYnV0ZS4KICAgICAgICAvLyBBcHBsaWVzIG9ubHkgdG8gYnJvd3NlcnMgc3VwcG9ydGluZyBuYXRpdmUgZm9udCByZW5kZXJpbmcgaW4gdGhlCiAgICAgICAgLy8gY2FudmFzIHRhZy4gIEN1cnJlbnRseSBNb3ppbGxhIDMuNSBhbmQgU2FmYXJpIDQuCiAgICAgICAgdGhpcy5mb250RmFtaWx5ID0gJyJUcmVidWNoZXQgTVMiLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmJzsKICAgICAgICAvLyBwcm9wOiBmb250U2l6ZQogICAgICAgIC8vIENTUyBzcGVjIGZvciBmb250IHNpemUuCiAgICAgICAgdGhpcy5mb250U2l6ZSA9ICcxMXB0JzsKICAgICAgICAvLyBwcm9wOiBmb250V2VpZ2h0CiAgICAgICAgLy8gQ1NTIHNwZWMgZm9yIGZvbnRXZWlnaHQ6ICBub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlciBvciBhIG51bWJlciAxMDAgLSA5MDAKICAgICAgICB0aGlzLmZvbnRXZWlnaHQgPSAnbm9ybWFsJzsKICAgICAgICAvLyBwcm9wOiBmb250U3RyZXRjaAogICAgICAgIC8vIE11bHRpcGxpZXIgdG8gY29uZGVuc2Ugb3IgZXhwYW5kIGZvbnQgd2lkdGguICAKICAgICAgICAvLyBBcHBsaWVzIG9ubHkgdG8gYnJvd3NlcnMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCBjYW52YXMgbmF0aXZlIGZvbnQgcmVuZGVyaW5nLgogICAgICAgIHRoaXMuZm9udFN0cmV0Y2ggPSAxLjA7CiAgICAgICAgLy8gcHJvcDogdGV4dENvbG9yCiAgICAgICAgLy8gY3NzIHNwZWMgZm9yIHRoZSBjb2xvciBhdHRyaWJ1dGUuCiAgICAgICAgdGhpcy50ZXh0Q29sb3IgPSAnIzY2NjY2Nic7CiAgICAgICAgLy8gcHJvcDogZW5hYmxlRm9udFN1cHBvcnQKICAgICAgICAvLyB0cnVlIHRvIHR1cm4gb24gbmF0aXZlIGNhbnZhcyBmb250IHN1cHBvcnQgaW4gTW96aWxsYSAzLjUrIGFuZCBTYWZhcmkgNCsuCiAgICAgICAgLy8gSWYgdHJ1ZSwgbGFiZWwgd2lsbCBiZSBkcmF3biB3aXRoIGNhbnZhcyB0YWcgbmF0aXZlIHN1cHBvcnQgZm9yIGZvbnRzLgogICAgICAgIC8vIElmIGZhbHNlLCBsYWJlbCB3aWxsIGJlIGRyYXduIHdpdGggSGVyc2hleSBmb250IG1ldHJpY3MuCiAgICAgICAgdGhpcy5lbmFibGVGb250U3VwcG9ydCA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogcHQycHgKICAgICAgICAvLyBQb2ludCB0byBwaXhlbCBzY2FsaW5nIGZhY3RvciwgdXNlZCBmb3IgY29tcHV0aW5nIGhlaWdodCBvZiBib3VuZGluZyBib3gKICAgICAgICAvLyBhcm91bmQgYSBsYWJlbC4gIFRoZSBsYWJlbHMgdGV4dCByZW5kZXJlciBoYXMgYSBkZWZhdWx0IHNldHRpbmcgb2YgMS40LCB3aGljaCAKICAgICAgICAvLyBzaG91bGQgYmUgc3VpdGFibGUgZm9yIG1vc3QgZm9udHMuICBMZWF2ZSBhcyBudWxsIHRvIHVzZSBkZWZhdWx0LiAgSWYgdG9wcyBvZgogICAgICAgIC8vIGxldHRlcnMgYXBwZWFyIGNsaXBwZWQsIGluY3JlYXNlIHRoaXMuICBJZiBib3VuZGluZyBib3ggc2VlbXMgdG9vIGJpZywgZGVjcmVhc2UuCiAgICAgICAgLy8gVGhpcyBpcyBhbiBpc3N1ZSBvbmx5IHdpdGggdGhlIG5hdGl2ZSBmb250IHJlbmRlcmVyaW5nIGNhcGFiaWxpdGllcyBvZiBNb3ppbGxhCiAgICAgICAgLy8gMy41IGFuZCBTYWZhcmkgNCBzaW5jZSB0aGV5IGRvIG5vdCBwcm92aWRlIGEgbWV0aG9kIHRvIGRldGVybWluZSB0aGUgZm9udCBoZWlnaHQuCiAgICAgICAgdGhpcy5wdDJweCA9IG51bGw7CiAgICAgICAgCiAgICAgICAgdGhpcy5fZWxlbTsKICAgICAgICB0aGlzLl9jdHg7CiAgICAgICAgdGhpcy5fcGxvdFdpZHRoOwogICAgICAgIHRoaXMuX3Bsb3RIZWlnaHQ7CiAgICAgICAgdGhpcy5fcGxvdERpbWVuc2lvbnMgPSB7aGVpZ2h0Om51bGwsIHdpZHRoOm51bGx9OwogICAgICAgIAogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIAogICAgICAgIGlmIChvcHRpb25zLmFuZ2xlID09IG51bGwgJiYgdGhpcy5heGlzICE9ICd4YXhpcycgJiYgdGhpcy5heGlzICE9ICd4MmF4aXMnKSB7CiAgICAgICAgICAgIHRoaXMuYW5nbGUgPSAtOTA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciByb3B0cyA9IHtmb250U2l6ZTp0aGlzLmZvbnRTaXplLCBmb250V2VpZ2h0OnRoaXMuZm9udFdlaWdodCwgZm9udFN0cmV0Y2g6dGhpcy5mb250U3RyZXRjaCwgZmlsbFN0eWxlOnRoaXMudGV4dENvbG9yLCBhbmdsZTp0aGlzLmdldEFuZ2xlUmFkKCksIGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5fTsKICAgICAgICBpZiAodGhpcy5wdDJweCkgewogICAgICAgICAgICByb3B0cy5wdDJweCA9IHRoaXMucHQycHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICh0aGlzLmVuYWJsZUZvbnRTdXBwb3J0KSB7CiAgICAgICAgICAgIGlmICgkLmpxcGxvdC5zdXBwb3J0X2NhbnZhc190ZXh0KCkpIHsKICAgICAgICAgICAgICAgIHRoaXMuX3RleHRSZW5kZXJlciA9IG5ldyAkLmpxcGxvdC5DYW52YXNGb250UmVuZGVyZXIocm9wdHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuX3RleHRSZW5kZXJlciA9IG5ldyAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIocm9wdHMpOyAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy5fdGV4dFJlbmRlcmVyID0gbmV3ICQuanFwbG90LkNhbnZhc1RleHRSZW5kZXJlcihyb3B0cyk7IAogICAgICAgIH0KICAgIH07CiAgICAKICAgICQuanFwbG90LkNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIHRoaXMuX3RleHRSZW5kZXJlci5pbml0KHtmb250U2l6ZTp0aGlzLmZvbnRTaXplLCBmb250V2VpZ2h0OnRoaXMuZm9udFdlaWdodCwgZm9udFN0cmV0Y2g6dGhpcy5mb250U3RyZXRjaCwgZmlsbFN0eWxlOnRoaXMudGV4dENvbG9yLCBhbmdsZTp0aGlzLmdldEFuZ2xlUmFkKCksIGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5fSk7CiAgICB9OwogICAgCiAgICAvLyByZXR1cm4gd2lkdGggYWxvbmcgdGhlIHggYXhpcwogICAgLy8gd2lsbCBjaGVjayBmaXJzdCB0byBzZWUgaWYgYW4gZWxlbWVudCBleGlzdHMuCiAgICAvLyBpZiBub3QsIHdpbGwgcmV0dXJuIHRoZSBjb21wdXRlZCB0ZXh0IGJveCB3aWR0aC4KICAgICQuanFwbG90LkNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5nZXRXaWR0aCA9IGZ1bmN0aW9uKGN0eCkgewogICAgICAgIGlmICh0aGlzLl9lbGVtKSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgdHIgPSB0aGlzLl90ZXh0UmVuZGVyZXI7CiAgICAgICAgICAgIHZhciBsID0gdHIuZ2V0V2lkdGgoY3R4KTsKICAgICAgICAgICAgdmFyIGggPSB0ci5nZXRIZWlnaHQoY3R4KTsKICAgICAgICAgICAgdmFyIHcgPSBNYXRoLmFicyhNYXRoLnNpbih0ci5hbmdsZSkqaCkgKyBNYXRoLmFicyhNYXRoLmNvcyh0ci5hbmdsZSkqbCk7CiAgICAgICAgICAgIHJldHVybiB3OwogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8vIHJldHVybiBoZWlnaHQgYWxvbmcgdGhlIHkgYXhpcy4KICAgICQuanFwbG90LkNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5nZXRIZWlnaHQgPSBmdW5jdGlvbihjdHgpIHsKICAgICAgICBpZiAodGhpcy5fZWxlbSkgewogICAgICAgICByZXR1cm4gdGhpcy5fZWxlbS5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHZhciB0ciA9IHRoaXMuX3RleHRSZW5kZXJlcjsKICAgICAgICAgICAgdmFyIGwgPSB0ci5nZXRXaWR0aChjdHgpOwogICAgICAgICAgICB2YXIgaCA9IHRyLmdldEhlaWdodChjdHgpOwogICAgICAgICAgICB2YXIgdyA9IE1hdGguYWJzKE1hdGguY29zKHRyLmFuZ2xlKSpoKSArIE1hdGguYWJzKE1hdGguc2luKHRyLmFuZ2xlKSpsKTsKICAgICAgICAgICAgcmV0dXJuIHc7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQ2FudmFzQXhpc0xhYmVsUmVuZGVyZXIucHJvdG90eXBlLmdldEFuZ2xlUmFkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGEgPSB0aGlzLmFuZ2xlICogTWF0aC5QSS8xODA7CiAgICAgICAgcmV0dXJuIGE7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5DYW52YXNBeGlzTGFiZWxSZW5kZXJlci5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKGN0eCwgcGxvdCkgewogICAgICAgICAgLy8gTWVtb3J5IExlYWtzIHBhdGNoCiAgICAgICAgICBpZiAodGhpcy5fZWxlbSkgewogICAgICAgICAgICAgIGlmICgkLmpxcGxvdC51c2VfZXhjYW52YXMgJiYgd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50ICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgd2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50KHRoaXMuX2VsZW0uZ2V0KDApKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAgIHRoaXMuX2VsZW0uZW1wdHlGb3JjZSgpOwogICAgICAgICAgICAgIHRoaXMuX2VsZW0gPSBudWxsOwogICAgICAgICAgfQoKICAgICAgICAvLyBjcmVhdGUgYSBjYW52YXMgaGVyZSwgYnV0IGNhbid0IGRyYXcgb24gaXQgdW50aWxsIGl0IGlzIGFwcGVuZGVkCiAgICAgICAgLy8gdG8gZG9tIGZvciBJRSBjb21wYXRhYmlsaXR5LgogICAgICAgIHZhciBlbGVtID0gcGxvdC5jYW52YXNNYW5hZ2VyLmdldENhbnZhcygpOwoKICAgICAgICB0aGlzLl90ZXh0UmVuZGVyZXIuc2V0VGV4dCh0aGlzLmxhYmVsLCBjdHgpOwogICAgICAgIHZhciB3ID0gdGhpcy5nZXRXaWR0aChjdHgpOwogICAgICAgIHZhciBoID0gdGhpcy5nZXRIZWlnaHQoY3R4KTsKICAgICAgICBlbGVtLndpZHRoID0gdzsKICAgICAgICBlbGVtLmhlaWdodCA9IGg7CiAgICAgICAgZWxlbS5zdHlsZS53aWR0aCA9IHc7CiAgICAgICAgZWxlbS5zdHlsZS5oZWlnaHQgPSBoOwogICAgICAgIAogICAgICAgIGVsZW0gPSBwbG90LmNhbnZhc01hbmFnZXIuaW5pdENhbnZhcyhlbGVtKTsKCiAgICAgICAgdGhpcy5fZWxlbSA9ICQoZWxlbSk7CiAgICAgICAgdGhpcy5fZWxlbS5jc3MoeyBwb3NpdGlvbjogJ2Fic29sdXRlJ30pOwogICAgICAgIHRoaXMuX2VsZW0uYWRkQ2xhc3MoJ2pxcGxvdC0nK3RoaXMuYXhpcysnLWxhYmVsJyk7CiAgICAgICAgCiAgICAgICAgZWxlbSA9IG51bGw7CiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW07CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5DYW52YXNBeGlzTGFiZWxSZW5kZXJlci5wcm90b3R5cGUucGFjayA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuX3RleHRSZW5kZXJlci5kcmF3KHRoaXMuX2VsZW0uZ2V0KDApLmdldENvbnRleHQoIjJkIiksIHRoaXMubGFiZWwpOwogICAgfTsKICAgIAp9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGEpe2EuanFwbG90LkNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyPWZ1bmN0aW9uKGIpe3RoaXMuYW5nbGU9MDt0aGlzLmF4aXM7dGhpcy5zaG93PXRydWU7dGhpcy5zaG93TGFiZWw9dHJ1ZTt0aGlzLmxhYmVsPSIiO3RoaXMuZm9udEZhbWlseT0nIlRyZWJ1Y2hldCBNUyIsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYnO3RoaXMuZm9udFNpemU9IjExcHQiO3RoaXMuZm9udFdlaWdodD0ibm9ybWFsIjt0aGlzLmZvbnRTdHJldGNoPTE7dGhpcy50ZXh0Q29sb3I9IiM2NjY2NjYiO3RoaXMuZW5hYmxlRm9udFN1cHBvcnQ9dHJ1ZTt0aGlzLnB0MnB4PW51bGw7dGhpcy5fZWxlbTt0aGlzLl9jdHg7dGhpcy5fcGxvdFdpZHRoO3RoaXMuX3Bsb3RIZWlnaHQ7dGhpcy5fcGxvdERpbWVuc2lvbnM9e2hlaWdodDpudWxsLHdpZHRoOm51bGx9O2EuZXh0ZW5kKHRydWUsdGhpcyxiKTtpZihiLmFuZ2xlPT1udWxsJiZ0aGlzLmF4aXMhPSJ4YXhpcyImJnRoaXMuYXhpcyE9IngyYXhpcyIpe3RoaXMuYW5nbGU9LTkwfXZhciBjPXtmb250U2l6ZTp0aGlzLmZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5mb250V2VpZ2h0LGZvbnRTdHJldGNoOnRoaXMuZm9udFN0cmV0Y2gsZmlsbFN0eWxlOnRoaXMudGV4dENvbG9yLGFuZ2xlOnRoaXMuZ2V0QW5nbGVSYWQoKSxmb250RmFtaWx5OnRoaXMuZm9udEZhbWlseX07aWYodGhpcy5wdDJweCl7Yy5wdDJweD10aGlzLnB0MnB4fWlmKHRoaXMuZW5hYmxlRm9udFN1cHBvcnQpe2lmKGEuanFwbG90LnN1cHBvcnRfY2FudmFzX3RleHQoKSl7dGhpcy5fdGV4dFJlbmRlcmVyPW5ldyBhLmpxcGxvdC5DYW52YXNGb250UmVuZGVyZXIoYyl9ZWxzZXt0aGlzLl90ZXh0UmVuZGVyZXI9bmV3IGEuanFwbG90LkNhbnZhc1RleHRSZW5kZXJlcihjKX19ZWxzZXt0aGlzLl90ZXh0UmVuZGVyZXI9bmV3IGEuanFwbG90LkNhbnZhc1RleHRSZW5kZXJlcihjKX19O2EuanFwbG90LkNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGIpe2EuZXh0ZW5kKHRydWUsdGhpcyxiKTt0aGlzLl90ZXh0UmVuZGVyZXIuaW5pdCh7Zm9udFNpemU6dGhpcy5mb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZm9udFdlaWdodCxmb250U3RyZXRjaDp0aGlzLmZvbnRTdHJldGNoLGZpbGxTdHlsZTp0aGlzLnRleHRDb2xvcixhbmdsZTp0aGlzLmdldEFuZ2xlUmFkKCksZm9udEZhbWlseTp0aGlzLmZvbnRGYW1pbHl9KX07YS5qcXBsb3QuQ2FudmFzQXhpc0xhYmVsUmVuZGVyZXIucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKGQpe2lmKHRoaXMuX2VsZW0pe3JldHVybiB0aGlzLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSl9ZWxzZXt2YXIgZj10aGlzLl90ZXh0UmVuZGVyZXI7dmFyIGM9Zi5nZXRXaWR0aChkKTt2YXIgZT1mLmdldEhlaWdodChkKTt2YXIgYj1NYXRoLmFicyhNYXRoLnNpbihmLmFuZ2xlKSplKStNYXRoLmFicyhNYXRoLmNvcyhmLmFuZ2xlKSpjKTtyZXR1cm4gYn19O2EuanFwbG90LkNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oZCl7aWYodGhpcy5fZWxlbSl7cmV0dXJuIHRoaXMuX2VsZW0ub3V0ZXJIZWlnaHQodHJ1ZSl9ZWxzZXt2YXIgZj10aGlzLl90ZXh0UmVuZGVyZXI7dmFyIGM9Zi5nZXRXaWR0aChkKTt2YXIgZT1mLmdldEhlaWdodChkKTt2YXIgYj1NYXRoLmFicyhNYXRoLmNvcyhmLmFuZ2xlKSplKStNYXRoLmFicyhNYXRoLnNpbihmLmFuZ2xlKSpjKTtyZXR1cm4gYn19O2EuanFwbG90LkNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5nZXRBbmdsZVJhZD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuYW5nbGUqTWF0aC5QSS8xODA7cmV0dXJuIGJ9O2EuanFwbG90LkNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGMsZil7aWYodGhpcy5fZWxlbSl7aWYoYS5qcXBsb3QudXNlX2V4Y2FudmFzJiZ3aW5kb3cuR192bWxDYW52YXNNYW5hZ2VyLnVuaW5pdEVsZW1lbnQhPT11bmRlZmluZWQpe3dpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIudW5pbml0RWxlbWVudCh0aGlzLl9lbGVtLmdldCgwKSl9dGhpcy5fZWxlbS5lbXB0eUZvcmNlKCk7dGhpcy5fZWxlbT1udWxsfXZhciBlPWYuY2FudmFzTWFuYWdlci5nZXRDYW52YXMoKTt0aGlzLl90ZXh0UmVuZGVyZXIuc2V0VGV4dCh0aGlzLmxhYmVsLGMpO3ZhciBiPXRoaXMuZ2V0V2lkdGgoYyk7dmFyIGQ9dGhpcy5nZXRIZWlnaHQoYyk7ZS53aWR0aD1iO2UuaGVpZ2h0PWQ7ZS5zdHlsZS53aWR0aD1iO2Uuc3R5bGUuaGVpZ2h0PWQ7ZT1mLmNhbnZhc01hbmFnZXIuaW5pdENhbnZhcyhlKTt0aGlzLl9lbGVtPWEoZSk7dGhpcy5fZWxlbS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9KTt0aGlzLl9lbGVtLmFkZENsYXNzKCJqcXBsb3QtIit0aGlzLmF4aXMrIi1sYWJlbCIpO2U9bnVsbDtyZXR1cm4gdGhpcy5fZWxlbX07YS5qcXBsb3QuQ2FudmFzQXhpc0xhYmVsUmVuZGVyZXIucHJvdG90eXBlLnBhY2s9ZnVuY3Rpb24oKXt0aGlzLl90ZXh0UmVuZGVyZXIuZHJhdyh0aGlzLl9lbGVtLmdldCgwKS5nZXRDb250ZXh0KCIyZCIpLHRoaXMubGFiZWwpfX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.canvasAxisTickRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLyoqCiAgICAqICBDbGFzczogJC5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlcgogICAgKiBSZW5kZXJlciB0byBkcmF3IGF4aXMgdGlja3Mgd2l0aCBhIGNhbnZhcyBlbGVtZW50IHRvIHN1cHBvcnQgYWR2YW5jZWQKICAgICogZmVhdHJ1ZXMgc3VjaCBhcyByb3RhdGVkIHRleHQuICBUaGlzIHJlbmRlcmVyIHVzZXMgYSBzZXBhcmF0ZSByZW5kZXJpbmcgZW5naW5lCiAgICAqIHRvIGRyYXcgdGhlIHRleHQgb24gdGhlIGNhbnZhcy4gIFR3byBtb2RlcyBvZiByZW5kZXJpbmcgdGhlIHRleHQgYXJlIGF2YWlsYWJsZS4KICAgICogSWYgdGhlIGJyb3dzZXIgaGFzIG5hdGl2ZSBmb250IHN1cHBvcnQgZm9yIGNhbnZhcyBmb250cyAoY3VycmVudGx5IE1vemlsYSAzLjUKICAgICogYW5kIFNhZmFyaSA0KSwgeW91IGNhbiBlbmFibGUgdGV4dCByZW5kZXJpbmcgd2l0aCB0aGUgY2FudmFzIGZpbGxUZXh0IG1ldGhvZC4KICAgICogWW91IGRvIHNvIGJ5IHNldHRpbmcgdGhlICJlbmFibGVGb250U3VwcG9ydCIgb3B0aW9uIHRvIHRydWUuIAogICAgKiAKICAgICogQnJvd3NlcnMgbGFja2luZyBuYXRpdmUgZm9udCBzdXBwb3J0IHdpbGwgaGF2ZSB0aGUgdGV4dCBkcmF3biBvbiB0aGUgY2FudmFzCiAgICAqIHVzaW5nIHRoZSBIZXJzaGV5IGZvbnQgbWV0cmljcy4gIEV2ZW4gaWYgdGhlICJlbmFibGVGb250U3VwcG9ydCIgb3B0aW9uIGlzIHRydWUKICAgICogbm9uLXN1cHBvcnRpbmcgYnJvd3NlcnMgd2lsbCBzdGlsbCByZW5kZXIgd2l0aCB0aGUgSGVyc2hleSBmb250LgogICAgKi8KICAgICQuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAKICAgICAgICAvLyBwcm9wOiBtYXJrCiAgICAgICAgLy8gdGljayBtYXJrIG9uIHRoZSBheGlzLiAgT25lIG9mICdpbnNpZGUnLCAnb3V0c2lkZScsICdjcm9zcycsICcnIG9yIG51bGwuCiAgICAgICAgdGhpcy5tYXJrID0gJ291dHNpZGUnOwogICAgICAgIC8vIHByb3A6IHNob3dNYXJrCiAgICAgICAgLy8gd2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgbWFyayBvbiB0aGUgYXhpcy4KICAgICAgICB0aGlzLnNob3dNYXJrID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBzaG93R3JpZGxpbmUKICAgICAgICAvLyB3aGV0aGVyIG9yIG5vdCB0byBkcmF3IHRoZSBncmlkbGluZSBvbiB0aGUgZ3JpZCBhdCB0aGlzIHRpY2suCiAgICAgICAgdGhpcy5zaG93R3JpZGxpbmUgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IGlzTWlub3JUaWNrCiAgICAgICAgLy8gaWYgdGhpcyBpcyBhIG1pbm9yIHRpY2suCiAgICAgICAgdGhpcy5pc01pbm9yVGljayA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGFuZ2xlCiAgICAgICAgLy8gYW5nbGUgb2YgdGV4dCwgbWVhc3VyZWQgY2xvY2t3aXNlIGZyb20geCBheGlzLgogICAgICAgIHRoaXMuYW5nbGUgPSAwOwogICAgICAgIC8vIHByb3A6ICBtYXJrU2l6ZQogICAgICAgIC8vIExlbmd0aCBvZiB0aGUgdGljayBtYXJrcyBpbiBwaXhlbHMuICBGb3IgJ2Nyb3NzJyBzdHlsZSwgbGVuZ3RoCiAgICAgICAgLy8gd2lsbCBiZSBzdG9rZWQgYWJvdmUgYW5kIGJlbG93IGF4aXMsIHNvIHRvdGFsIGxlbmd0aCB3aWxsIGJlIHR3aWNlIHRoaXMuCiAgICAgICAgdGhpcy5tYXJrU2l6ZSA9IDQ7CiAgICAgICAgLy8gcHJvcDogc2hvdwogICAgICAgIC8vIHdoZXRoZXIgb3Igbm90IHRvIHNob3cgdGhlIHRpY2sgKG1hcmsgYW5kIGxhYmVsKS4KICAgICAgICB0aGlzLnNob3cgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IHNob3dMYWJlbAogICAgICAgIC8vIHdoZXRoZXIgb3Igbm90IHRvIHNob3cgdGhlIGxhYmVsLgogICAgICAgIHRoaXMuc2hvd0xhYmVsID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBsYWJlbFBvc2l0aW9uCiAgICAgICAgLy8gJ2F1dG8nLCAnc3RhcnQnLCAnbWlkZGxlJyBvciAnZW5kJy4KICAgICAgICAvLyBXaGV0aGVyIHRpY2sgbGFiZWwgc2hvdWxkIGJlIHBvc2l0aW9uZWQgc28gdGhlIHN0YXJ0LCBtaWRkbGUsIG9yIGVuZAogICAgICAgIC8vIG9mIHRoZSB0aWNrIG1hcmsuCiAgICAgICAgdGhpcy5sYWJlbFBvc2l0aW9uID0gJ2F1dG8nOwogICAgICAgIHRoaXMubGFiZWwgPSAnJzsKICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDsKICAgICAgICB0aGlzLl9zdHlsZXMgPSB7fTsKICAgICAgICAvLyBwcm9wOiBmb3JtYXR0ZXIKICAgICAgICAvLyBBIGNsYXNzIG9mIGEgZm9ybWF0dGVyIGZvciB0aGUgdGljayB0ZXh0LgogICAgICAgIC8vIFRoZSBkZWZhdWx0ICQuanFwbG90LkRlZmF1bHRUaWNrRm9ybWF0dGVyIHVzZXMgc3ByaW50Zi4KICAgICAgICB0aGlzLmZvcm1hdHRlciA9ICQuanFwbG90LkRlZmF1bHRUaWNrRm9ybWF0dGVyOwogICAgICAgIC8vIHByb3A6IGZvcm1hdFN0cmluZwogICAgICAgIC8vIHN0cmluZyBwYXNzZWQgdG8gdGhlIGZvcm1hdHRlci4KICAgICAgICB0aGlzLmZvcm1hdFN0cmluZyA9ICcnOwogICAgICAgIC8vIHByb3A6IHByZWZpeAogICAgICAgIC8vIFN0cmluZyB0byBwcmVwZW5kIHRvIHRoZSB0aWNrIGxhYmVsLgogICAgICAgIC8vIFByZWZpeCBpcyBwcmVwZW5kZWQgdG8gdGhlIGZvcm1hdHRlZCB0aWNrIGxhYmVsLgogICAgICAgIHRoaXMucHJlZml4ID0gJyc7CiAgICAgICAgLy8gcHJvcDogZm9udEZhbWlseQogICAgICAgIC8vIGNzcyBzcGVjIGZvciB0aGUgZm9udC1mYW1pbHkgY3NzIGF0dHJpYnV0ZS4KICAgICAgICB0aGlzLmZvbnRGYW1pbHkgPSAnIlRyZWJ1Y2hldCBNUyIsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYnOwogICAgICAgIC8vIHByb3A6IGZvbnRTaXplCiAgICAgICAgLy8gQ1NTIHNwZWMgZm9yIGZvbnQgc2l6ZS4KICAgICAgICB0aGlzLmZvbnRTaXplID0gJzEwcHQnOwogICAgICAgIC8vIHByb3A6IGZvbnRXZWlnaHQKICAgICAgICAvLyBDU1Mgc3BlYyBmb3IgZm9udFdlaWdodAogICAgICAgIHRoaXMuZm9udFdlaWdodCA9ICdub3JtYWwnOwogICAgICAgIC8vIHByb3A6IGZvbnRTdHJldGNoCiAgICAgICAgLy8gTXVsdGlwbGllciB0byBjb25kZW5zZSBvciBleHBhbmQgZm9udCB3aWR0aC4gIAogICAgICAgIC8vIEFwcGxpZXMgb25seSB0byBicm93c2VycyB3aGljaCBkb24ndCBzdXBwb3J0IGNhbnZhcyBuYXRpdmUgZm9udCByZW5kZXJpbmcuCiAgICAgICAgdGhpcy5mb250U3RyZXRjaCA9IDEuMDsKICAgICAgICAvLyBwcm9wOiB0ZXh0Q29sb3IKICAgICAgICAvLyBjc3Mgc3BlYyBmb3IgdGhlIGNvbG9yIGF0dHJpYnV0ZS4KICAgICAgICB0aGlzLnRleHRDb2xvciA9ICcjNjY2NjY2JzsKICAgICAgICAvLyBwcm9wOiBlbmFibGVGb250U3VwcG9ydAogICAgICAgIC8vIHRydWUgdG8gdHVybiBvbiBuYXRpdmUgY2FudmFzIGZvbnQgc3VwcG9ydCBpbiBNb3ppbGxhIDMuNSsgYW5kIFNhZmFyaSA0Ky4KICAgICAgICAvLyBJZiB0cnVlLCB0aWNrIGxhYmVsIHdpbGwgYmUgZHJhd24gd2l0aCBjYW52YXMgdGFnIG5hdGl2ZSBzdXBwb3J0IGZvciBmb250cy4KICAgICAgICAvLyBJZiBmYWxzZSwgdGljayBsYWJlbCB3aWxsIGJlIGRyYXduIHdpdGggSGVyc2hleSBmb250IG1ldHJpY3MuCiAgICAgICAgdGhpcy5lbmFibGVGb250U3VwcG9ydCA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogcHQycHgKICAgICAgICAvLyBQb2ludCB0byBwaXhlbCBzY2FsaW5nIGZhY3RvciwgdXNlZCBmb3IgY29tcHV0aW5nIGhlaWdodCBvZiBib3VuZGluZyBib3gKICAgICAgICAvLyBhcm91bmQgYSBsYWJlbC4gIFRoZSBsYWJlbHMgdGV4dCByZW5kZXJlciBoYXMgYSBkZWZhdWx0IHNldHRpbmcgb2YgMS40LCB3aGljaCAKICAgICAgICAvLyBzaG91bGQgYmUgc3VpdGFibGUgZm9yIG1vc3QgZm9udHMuICBMZWF2ZSBhcyBudWxsIHRvIHVzZSBkZWZhdWx0LiAgSWYgdG9wcyBvZgogICAgICAgIC8vIGxldHRlcnMgYXBwZWFyIGNsaXBwZWQsIGluY3JlYXNlIHRoaXMuICBJZiBib3VuZGluZyBib3ggc2VlbXMgdG9vIGJpZywgZGVjcmVhc2UuCiAgICAgICAgLy8gVGhpcyBpcyBhbiBpc3N1ZSBvbmx5IHdpdGggdGhlIG5hdGl2ZSBmb250IHJlbmRlcmVyaW5nIGNhcGFiaWxpdGllcyBvZiBNb3ppbGxhCiAgICAgICAgLy8gMy41IGFuZCBTYWZhcmkgNCBzaW5jZSB0aGV5IGRvIG5vdCBwcm92aWRlIGEgbWV0aG9kIHRvIGRldGVybWluZSB0aGUgZm9udCBoZWlnaHQuCiAgICAgICAgdGhpcy5wdDJweCA9IG51bGw7CiAgICAgICAgCiAgICAgICAgdGhpcy5fZWxlbTsKICAgICAgICB0aGlzLl9jdHg7CiAgICAgICAgdGhpcy5fcGxvdFdpZHRoOwogICAgICAgIHRoaXMuX3Bsb3RIZWlnaHQ7CiAgICAgICAgdGhpcy5fcGxvdERpbWVuc2lvbnMgPSB7aGVpZ2h0Om51bGwsIHdpZHRoOm51bGx9OwogICAgICAgIAogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIAogICAgICAgIHZhciByb3B0cyA9IHtmb250U2l6ZTp0aGlzLmZvbnRTaXplLCBmb250V2VpZ2h0OnRoaXMuZm9udFdlaWdodCwgZm9udFN0cmV0Y2g6dGhpcy5mb250U3RyZXRjaCwgZmlsbFN0eWxlOnRoaXMudGV4dENvbG9yLCBhbmdsZTp0aGlzLmdldEFuZ2xlUmFkKCksIGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5fTsKICAgICAgICBpZiAodGhpcy5wdDJweCkgewogICAgICAgICAgICByb3B0cy5wdDJweCA9IHRoaXMucHQycHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICh0aGlzLmVuYWJsZUZvbnRTdXBwb3J0KSB7CiAgICAgICAgICAgIGlmICgkLmpxcGxvdC5zdXBwb3J0X2NhbnZhc190ZXh0KCkpIHsKICAgICAgICAgICAgICAgIHRoaXMuX3RleHRSZW5kZXJlciA9IG5ldyAkLmpxcGxvdC5DYW52YXNGb250UmVuZGVyZXIocm9wdHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuX3RleHRSZW5kZXJlciA9IG5ldyAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIocm9wdHMpOyAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy5fdGV4dFJlbmRlcmVyID0gbmV3ICQuanFwbG90LkNhbnZhc1RleHRSZW5kZXJlcihyb3B0cyk7IAogICAgICAgIH0KICAgIH07CiAgICAKICAgICQuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CiAgICAgICAgdGhpcy5fdGV4dFJlbmRlcmVyLmluaXQoe2ZvbnRTaXplOnRoaXMuZm9udFNpemUsIGZvbnRXZWlnaHQ6dGhpcy5mb250V2VpZ2h0LCBmb250U3RyZXRjaDp0aGlzLmZvbnRTdHJldGNoLCBmaWxsU3R5bGU6dGhpcy50ZXh0Q29sb3IsIGFuZ2xlOnRoaXMuZ2V0QW5nbGVSYWQoKSwgZm9udEZhbWlseTp0aGlzLmZvbnRGYW1pbHl9KTsKICAgIH07CiAgICAKICAgIC8vIHJldHVybiB3aWR0aCBhbG9uZyB0aGUgeCBheGlzCiAgICAvLyB3aWxsIGNoZWNrIGZpcnN0IHRvIHNlZSBpZiBhbiBlbGVtZW50IGV4aXN0cy4KICAgIC8vIGlmIG5vdCwgd2lsbCByZXR1cm4gdGhlIGNvbXB1dGVkIHRleHQgYm94IHdpZHRoLgogICAgJC5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUuZ2V0V2lkdGggPSBmdW5jdGlvbihjdHgpIHsKICAgICAgICBpZiAodGhpcy5fZWxlbSkgewogICAgICAgICByZXR1cm4gdGhpcy5fZWxlbS5vdXRlcldpZHRoKHRydWUpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIHRyID0gdGhpcy5fdGV4dFJlbmRlcmVyOwogICAgICAgICAgICB2YXIgbCA9IHRyLmdldFdpZHRoKGN0eCk7CiAgICAgICAgICAgIHZhciBoID0gdHIuZ2V0SGVpZ2h0KGN0eCk7CiAgICAgICAgICAgIHZhciB3ID0gTWF0aC5hYnMoTWF0aC5zaW4odHIuYW5nbGUpKmgpICsgTWF0aC5hYnMoTWF0aC5jb3ModHIuYW5nbGUpKmwpOwogICAgICAgICAgICByZXR1cm4gdzsKICAgICAgICB9CiAgICB9OwogICAgCiAgICAvLyByZXR1cm4gaGVpZ2h0IGFsb25nIHRoZSB5IGF4aXMuCiAgICAkLmpxcGxvdC5DYW52YXNBeGlzVGlja1JlbmRlcmVyLnByb3RvdHlwZS5nZXRIZWlnaHQgPSBmdW5jdGlvbihjdHgpIHsKICAgICAgICBpZiAodGhpcy5fZWxlbSkgewogICAgICAgICByZXR1cm4gdGhpcy5fZWxlbS5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHZhciB0ciA9IHRoaXMuX3RleHRSZW5kZXJlcjsKICAgICAgICAgICAgdmFyIGwgPSB0ci5nZXRXaWR0aChjdHgpOwogICAgICAgICAgICB2YXIgaCA9IHRyLmdldEhlaWdodChjdHgpOwogICAgICAgICAgICB2YXIgdyA9IE1hdGguYWJzKE1hdGguY29zKHRyLmFuZ2xlKSpoKSArIE1hdGguYWJzKE1hdGguc2luKHRyLmFuZ2xlKSpsKTsKICAgICAgICAgICAgcmV0dXJuIHc7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyByZXR1cm4gdG9wLgogICAgJC5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUuZ2V0VG9wID0gZnVuY3Rpb24oY3R4KSB7CiAgICAgICAgaWYgKHRoaXMuX2VsZW0pIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW0ucG9zaXRpb24oKS50b3A7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5DYW52YXNBeGlzVGlja1JlbmRlcmVyLnByb3RvdHlwZS5nZXRBbmdsZVJhZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBhID0gdGhpcy5hbmdsZSAqIE1hdGguUEkvMTgwOwogICAgICAgIHJldHVybiBhOwogICAgfTsKICAgIAogICAgCiAgICAkLmpxcGxvdC5DYW52YXNBeGlzVGlja1JlbmRlcmVyLnByb3RvdHlwZS5zZXRUaWNrID0gZnVuY3Rpb24odmFsdWUsIGF4aXNOYW1lLCBpc01pbm9yKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogICAgICAgIGlmIChpc01pbm9yKSB7CiAgICAgICAgICAgIHRoaXMuaXNNaW5vclRpY2sgPSB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgIH07CiAgICAKICAgICQuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihjdHgsIHBsb3QpIHsKICAgICAgICBpZiAoIXRoaXMubGFiZWwpIHsKICAgICAgICAgICAgdGhpcy5sYWJlbCA9IHRoaXMucHJlZml4ICsgdGhpcy5mb3JtYXR0ZXIodGhpcy5mb3JtYXRTdHJpbmcsIHRoaXMudmFsdWUpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBNZW1vcnkgTGVha3MgcGF0Y2gKICAgICAgICBpZiAodGhpcy5fZWxlbSkgewogICAgICAgICAgICBpZiAoJC5qcXBsb3QudXNlX2V4Y2FudmFzICYmIHdpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIudW5pbml0RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cuR192bWxDYW52YXNNYW5hZ2VyLnVuaW5pdEVsZW1lbnQodGhpcy5fZWxlbS5nZXQoMCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKTsKICAgICAgICAgICAgdGhpcy5fZWxlbSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvLyBjcmVhdGUgYSBjYW52YXMgaGVyZSwgYnV0IGNhbid0IGRyYXcgb24gaXQgdW50aWxsIGl0IGlzIGFwcGVuZGVkCiAgICAgICAgLy8gdG8gZG9tIGZvciBJRSBjb21wYXRhYmlsaXR5LgoKICAgICAgICB2YXIgZWxlbSA9IHBsb3QuY2FudmFzTWFuYWdlci5nZXRDYW52YXMoKTsKCiAgICAgICAgdGhpcy5fdGV4dFJlbmRlcmVyLnNldFRleHQodGhpcy5sYWJlbCwgY3R4KTsKICAgICAgICB2YXIgdyA9IHRoaXMuZ2V0V2lkdGgoY3R4KTsKICAgICAgICB2YXIgaCA9IHRoaXMuZ2V0SGVpZ2h0KGN0eCk7CiAgICAgICAgLy8gY2FudmFzZXMgc2VlbSB0byBuZWVkIHRvIGhhdmUgd2lkdGggYW5kIGhlaWdoIGF0dHJpYnV0ZXMgZGlyZWN0bHkgc2V0LgogICAgICAgIGVsZW0ud2lkdGggPSB3OwogICAgICAgIGVsZW0uaGVpZ2h0ID0gaDsKICAgICAgICBlbGVtLnN0eWxlLndpZHRoID0gdzsKICAgICAgICBlbGVtLnN0eWxlLmhlaWdodCA9IGg7CiAgICAgICAgZWxlbS5zdHlsZS50ZXh0QWxpZ24gPSAnbGVmdCc7CiAgICAgICAgZWxlbS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CgogICAgICAgIGVsZW0gPSBwbG90LmNhbnZhc01hbmFnZXIuaW5pdENhbnZhcyhlbGVtKTsKCiAgICAgICAgdGhpcy5fZWxlbSA9ICQoZWxlbSk7CiAgICAgICAgdGhpcy5fZWxlbS5jc3ModGhpcy5fc3R5bGVzKTsKICAgICAgICB0aGlzLl9lbGVtLmFkZENsYXNzKCdqcXBsb3QtJyt0aGlzLmF4aXMrJy10aWNrJyk7CgogICAgICAgIGVsZW0gPSBudWxsOwogICAgICAgIHJldHVybiB0aGlzLl9lbGVtOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUucGFjayA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuX3RleHRSZW5kZXJlci5kcmF3KHRoaXMuX2VsZW0uZ2V0KDApLmdldENvbnRleHQoIjJkIiksIHRoaXMubGFiZWwpOwogICAgfTsKICAgIAp9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGEpe2EuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXI9ZnVuY3Rpb24oYil7dGhpcy5tYXJrPSJvdXRzaWRlIjt0aGlzLnNob3dNYXJrPXRydWU7dGhpcy5zaG93R3JpZGxpbmU9dHJ1ZTt0aGlzLmlzTWlub3JUaWNrPWZhbHNlO3RoaXMuYW5nbGU9MDt0aGlzLm1hcmtTaXplPTQ7dGhpcy5zaG93PXRydWU7dGhpcy5zaG93TGFiZWw9dHJ1ZTt0aGlzLmxhYmVsUG9zaXRpb249ImF1dG8iO3RoaXMubGFiZWw9IiI7dGhpcy52YWx1ZT1udWxsO3RoaXMuX3N0eWxlcz17fTt0aGlzLmZvcm1hdHRlcj1hLmpxcGxvdC5EZWZhdWx0VGlja0Zvcm1hdHRlcjt0aGlzLmZvcm1hdFN0cmluZz0iIjt0aGlzLnByZWZpeD0iIjt0aGlzLmZvbnRGYW1pbHk9JyJUcmVidWNoZXQgTVMiLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmJzt0aGlzLmZvbnRTaXplPSIxMHB0Ijt0aGlzLmZvbnRXZWlnaHQ9Im5vcm1hbCI7dGhpcy5mb250U3RyZXRjaD0xO3RoaXMudGV4dENvbG9yPSIjNjY2NjY2Ijt0aGlzLmVuYWJsZUZvbnRTdXBwb3J0PXRydWU7dGhpcy5wdDJweD1udWxsO3RoaXMuX2VsZW07dGhpcy5fY3R4O3RoaXMuX3Bsb3RXaWR0aDt0aGlzLl9wbG90SGVpZ2h0O3RoaXMuX3Bsb3REaW1lbnNpb25zPXtoZWlnaHQ6bnVsbCx3aWR0aDpudWxsfTthLmV4dGVuZCh0cnVlLHRoaXMsYik7dmFyIGM9e2ZvbnRTaXplOnRoaXMuZm9udFNpemUsZm9udFdlaWdodDp0aGlzLmZvbnRXZWlnaHQsZm9udFN0cmV0Y2g6dGhpcy5mb250U3RyZXRjaCxmaWxsU3R5bGU6dGhpcy50ZXh0Q29sb3IsYW5nbGU6dGhpcy5nZXRBbmdsZVJhZCgpLGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5fTtpZih0aGlzLnB0MnB4KXtjLnB0MnB4PXRoaXMucHQycHh9aWYodGhpcy5lbmFibGVGb250U3VwcG9ydCl7aWYoYS5qcXBsb3Quc3VwcG9ydF9jYW52YXNfdGV4dCgpKXt0aGlzLl90ZXh0UmVuZGVyZXI9bmV3IGEuanFwbG90LkNhbnZhc0ZvbnRSZW5kZXJlcihjKX1lbHNle3RoaXMuX3RleHRSZW5kZXJlcj1uZXcgYS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyKGMpfX1lbHNle3RoaXMuX3RleHRSZW5kZXJlcj1uZXcgYS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyKGMpfX07YS5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihiKXthLmV4dGVuZCh0cnVlLHRoaXMsYik7dGhpcy5fdGV4dFJlbmRlcmVyLmluaXQoe2ZvbnRTaXplOnRoaXMuZm9udFNpemUsZm9udFdlaWdodDp0aGlzLmZvbnRXZWlnaHQsZm9udFN0cmV0Y2g6dGhpcy5mb250U3RyZXRjaCxmaWxsU3R5bGU6dGhpcy50ZXh0Q29sb3IsYW5nbGU6dGhpcy5nZXRBbmdsZVJhZCgpLGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5fSl9O2EuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKGQpe2lmKHRoaXMuX2VsZW0pe3JldHVybiB0aGlzLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSl9ZWxzZXt2YXIgZj10aGlzLl90ZXh0UmVuZGVyZXI7dmFyIGM9Zi5nZXRXaWR0aChkKTt2YXIgZT1mLmdldEhlaWdodChkKTt2YXIgYj1NYXRoLmFicyhNYXRoLnNpbihmLmFuZ2xlKSplKStNYXRoLmFicyhNYXRoLmNvcyhmLmFuZ2xlKSpjKTtyZXR1cm4gYn19O2EuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbihkKXtpZih0aGlzLl9lbGVtKXtyZXR1cm4gdGhpcy5fZWxlbS5vdXRlckhlaWdodCh0cnVlKX1lbHNle3ZhciBmPXRoaXMuX3RleHRSZW5kZXJlcjt2YXIgYz1mLmdldFdpZHRoKGQpO3ZhciBlPWYuZ2V0SGVpZ2h0KGQpO3ZhciBiPU1hdGguYWJzKE1hdGguY29zKGYuYW5nbGUpKmUpK01hdGguYWJzKE1hdGguc2luKGYuYW5nbGUpKmMpO3JldHVybiBifX07YS5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKGIpe2lmKHRoaXMuX2VsZW0pe3JldHVybiB0aGlzLl9lbGVtLnBvc2l0aW9uKCkudG9wfWVsc2V7cmV0dXJuIG51bGx9fTthLmpxcGxvdC5DYW52YXNBeGlzVGlja1JlbmRlcmVyLnByb3RvdHlwZS5nZXRBbmdsZVJhZD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuYW5nbGUqTWF0aC5QSS8xODA7cmV0dXJuIGJ9O2EuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIucHJvdG90eXBlLnNldFRpY2s9ZnVuY3Rpb24oYixkLGMpe3RoaXMudmFsdWU9YjtpZihjKXt0aGlzLmlzTWlub3JUaWNrPXRydWV9cmV0dXJuIHRoaXN9O2EuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYyxmKXtpZighdGhpcy5sYWJlbCl7dGhpcy5sYWJlbD10aGlzLnByZWZpeCt0aGlzLmZvcm1hdHRlcih0aGlzLmZvcm1hdFN0cmluZyx0aGlzLnZhbHVlKX1pZih0aGlzLl9lbGVtKXtpZihhLmpxcGxvdC51c2VfZXhjYW52YXMmJndpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIudW5pbml0RWxlbWVudCE9PXVuZGVmaW5lZCl7d2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50KHRoaXMuX2VsZW0uZ2V0KDApKX10aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKTt0aGlzLl9lbGVtPW51bGx9dmFyIGU9Zi5jYW52YXNNYW5hZ2VyLmdldENhbnZhcygpO3RoaXMuX3RleHRSZW5kZXJlci5zZXRUZXh0KHRoaXMubGFiZWwsYyk7dmFyIGI9dGhpcy5nZXRXaWR0aChjKTt2YXIgZD10aGlzLmdldEhlaWdodChjKTtlLndpZHRoPWI7ZS5oZWlnaHQ9ZDtlLnN0eWxlLndpZHRoPWI7ZS5zdHlsZS5oZWlnaHQ9ZDtlLnN0eWxlLnRleHRBbGlnbj0ibGVmdCI7ZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2U9Zi5jYW52YXNNYW5hZ2VyLmluaXRDYW52YXMoZSk7dGhpcy5fZWxlbT1hKGUpO3RoaXMuX2VsZW0uY3NzKHRoaXMuX3N0eWxlcyk7dGhpcy5fZWxlbS5hZGRDbGFzcygianFwbG90LSIrdGhpcy5heGlzKyItdGljayIpO2U9bnVsbDtyZXR1cm4gdGhpcy5fZWxlbX07YS5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUucGFjaz1mdW5jdGlvbigpe3RoaXMuX3RleHRSZW5kZXJlci5kcmF3KHRoaXMuX2VsZW0uZ2V0KDApLmdldENvbnRleHQoIjJkIiksdGhpcy5sYWJlbCl9fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.canvasOverlay.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgdmFyIG9iakNvdW50ZXIgPSAwOwogICAgLy8gY2xhc3M6ICQuanFwbG90LkNhbnZhc092ZXJsYXkKICAgICQuanFwbG90LkNhbnZhc092ZXJsYXkgPSBmdW5jdGlvbihvcHRzKXsKICAgICAgICB2YXIgb3B0aW9ucyA9IG9wdHMgfHwge307CiAgICAgICAgdGhpcy5vcHRpb25zID0gewogICAgICAgICAgICBzaG93OiAkLmpxcGxvdC5jb25maWcuZW5hYmxlUGx1Z2lucywKICAgICAgICAgICAgZGVmZXJEcmF3OiBmYWxzZQogICAgICAgIH07CiAgICAgICAgLy8gcHJvcDogb2JqZWN0cwogICAgICAgIHRoaXMub2JqZWN0cyA9IFtdOwogICAgICAgIHRoaXMub2JqZWN0TmFtZXMgPSBbXTsKICAgICAgICB0aGlzLmNhbnZhcyA9IG51bGw7CiAgICAgICAgdGhpcy5tYXJrZXJSZW5kZXJlciA9IG5ldyAkLmpxcGxvdC5NYXJrZXJSZW5kZXJlcih7c3R5bGU6J2xpbmUnfSk7CiAgICAgICAgdGhpcy5tYXJrZXJSZW5kZXJlci5pbml0KCk7CiAgICAgICAgdGhpcy5oaWdobGlnaHRPYmplY3RJbmRleCA9IG51bGw7CiAgICAgICAgaWYgKG9wdGlvbnMub2JqZWN0cykgewogICAgICAgICAgICB2YXIgb2JqcyA9IG9wdGlvbnMub2JqZWN0cywKICAgICAgICAgICAgICAgIG9iajsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPG9ianMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIG9iaiA9IG9ianNbaV07CiAgICAgICAgICAgICAgICBmb3IgKHZhciBuIGluIG9iaikgewogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobikgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsaW5lJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTGluZShvYmpbbl0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hvcml6b250YWxMaW5lJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSG9yaXpvbnRhbExpbmUob2JqW25dKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXNoZWRIb3Jpem9udGFsTGluZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZERhc2hlZEhvcml6b250YWxMaW5lKG9ialtuXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndmVydGljYWxMaW5lJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVmVydGljYWxMaW5lKG9ialtuXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGFzaGVkVmVydGljYWxMaW5lJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRGFzaGVkVmVydGljYWxMaW5lKG9ialtuXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVjdGFuZ2xlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkUmVjdGFuZ2xlKG9ialtuXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOwogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgYSBwbG90IG9iamVjdAogICAgJC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wb3N0UGxvdEluaXQgPSBmdW5jdGlvbiAodGFyZ2V0LCBkYXRhLCBvcHRzKSB7CiAgICAgICAgdmFyIG9wdGlvbnMgPSBvcHRzIHx8IHt9OwogICAgICAgIC8vIGFkZCBhIGNhbnZhc092ZXJsYXkgYXR0cmlidXRlIHRvIHRoZSBwbG90CiAgICAgICAgdGhpcy5wbHVnaW5zLmNhbnZhc092ZXJsYXkgPSBuZXcgJC5qcXBsb3QuQ2FudmFzT3ZlcmxheShvcHRpb25zLmNhbnZhc092ZXJsYXkpOyAgICAgCiAgICB9OwoKCiAgICBmdW5jdGlvbiBMaW5lQmFzZSgpIHsKICAgICAgICB0aGlzLnVpZCA9IG51bGw7CiAgICAgICAgdGhpcy50eXBlID0gbnVsbDsKICAgICAgICB0aGlzLmdyaWRTdGFydCA9IG51bGw7CiAgICAgICAgdGhpcy5ncmlkU3RvcCA9IG51bGw7CiAgICAgICAgdGhpcy50b29sdGlwV2lkdGhGYWN0b3IgPSAwOwogICAgICAgIHRoaXMub3B0aW9ucyA9IHsgICAgICAgICAgIAogICAgICAgICAgICAvLyBwcm9wOiBuYW1lCiAgICAgICAgICAgIC8vIE9wdGlvbmFsIG5hbWUgZm9yIHRoZSBvdmVybGF5IG9iamVjdC4KICAgICAgICAgICAgLy8gQ2FuIGJlIGxhdGVyIHVzZWQgdG8gcmV0cmlldmUgdGhlIG9iamVjdCBieSBuYW1lLgogICAgICAgICAgICBuYW1lOiBudWxsLAogICAgICAgICAgICAvLyBwcm9wOiBzaG93CiAgICAgICAgICAgIC8vIHRydWUgdG8gc2hvdyAoZHJhdyksIGZhbHNlIHRvIG5vdCBkcmF3LgogICAgICAgICAgICBzaG93OiB0cnVlLAogICAgICAgICAgICAvLyBwcm9wOiBsaW5lV2lkdGgKICAgICAgICAgICAgLy8gV2lkdGggb2YgdGhlIGxpbmUuCiAgICAgICAgICAgIGxpbmVXaWR0aDogMiwKICAgICAgICAgICAgLy8gcHJvcDogbGluZUNhcAogICAgICAgICAgICAvLyBUeXBlIG9mIGVuZGluZyBwbGFjZWQgb24gdGhlIGxpbmUgWydyb3VuZCcsICdidXR0JywgJ3NxdWFyZSddCiAgICAgICAgICAgIGxpbmVDYXA6ICdyb3VuZCcsCiAgICAgICAgICAgIC8vIHByb3A6IGNvbG9yCiAgICAgICAgICAgIC8vIGNvbG9yIG9mIHRoZSBsaW5lCiAgICAgICAgICAgIGNvbG9yOiAnIzY2NjY2NicsCiAgICAgICAgICAgIC8vIHByb3A6IHNoYWRvdwogICAgICAgICAgICAvLyB3aGV0aGVyIG9yIG5vdCB0byBkcmF3IGEgc2hhZG93IG9uIHRoZSBsaW5lCiAgICAgICAgICAgIHNoYWRvdzogdHJ1ZSwKICAgICAgICAgICAgLy8gcHJvcDogc2hhZG93QW5nbGUKICAgICAgICAgICAgLy8gU2hhZG93IGFuZ2xlIGluIGRlZ3JlZXMKICAgICAgICAgICAgc2hhZG93QW5nbGU6IDQ1LAogICAgICAgICAgICAvLyBwcm9wOiBzaGFkb3dPZmZzZXQKICAgICAgICAgICAgLy8gU2hhZG93IG9mZnNldCBmcm9tIGxpbmUgaW4gcGl4ZWxzCiAgICAgICAgICAgIHNoYWRvd09mZnNldDogMSwKICAgICAgICAgICAgLy8gcHJvcDogc2hhZG93RGVwdGgKICAgICAgICAgICAgLy8gTnVtYmVyIG9mIHRpbWVzIHNoYWRvdyBpcyBzdHJva2VkLCBlYWNoIHN0cm9rZSBvZmZzZXQgc2hhZG93T2Zmc2V0IGZyb20gdGhlIGxhc3QuCiAgICAgICAgICAgIHNoYWRvd0RlcHRoOiAzLAogICAgICAgICAgICAvLyBwcm9wOiBzaGFkb3dBbHBoYQogICAgICAgICAgICAvLyBBbHBoYSBjaGFubmVsIHRyYW5zcGFyZW5jeSBvZiBzaGFkb3cuICAwID0gdHJhbnNwYXJlbnQuCiAgICAgICAgICAgIHNoYWRvd0FscGhhOiAnMC4wNycsCiAgICAgICAgICAgIC8vIHByb3A6IHhheGlzCiAgICAgICAgICAgIC8vIFggYXhpcyB0byB1c2UgZm9yIHBvc2l0aW9uaW5nL3NjYWxpbmcgdGhlIGxpbmUuCiAgICAgICAgICAgIHhheGlzOiAneGF4aXMnLAogICAgICAgICAgICAvLyBwcm9wOiB5YXhpcwogICAgICAgICAgICAvLyBZIGF4aXMgdG8gdXNlIGZvciBwb3NpdGlvbmluZy9zY2FsaW5nIHRoZSBsaW5lLgogICAgICAgICAgICB5YXhpczogJ3lheGlzJywKICAgICAgICAgICAgLy8gcHJvcDogc2hvd1Rvb2x0aXAKICAgICAgICAgICAgLy8gU2hvdyBhIHRvb2x0aXAgd2l0aCBkYXRhIHBvaW50IHZhbHVlcy4KICAgICAgICAgICAgc2hvd1Rvb2x0aXA6IGZhbHNlLAogICAgICAgICAgICAvLyBwcm9wOiBzaG93VG9vbHRpcFByZWNpc2lvbgogICAgICAgICAgICAvLyBDb250cm9scyBob3cgY2xvc2UgdG8gbGluZSBjdXJzb3IgbXVzdCBiZSB0byBzaG93IHRvb2x0aXAuCiAgICAgICAgICAgIC8vIEhpZ2hlciBudW1iZXIgPSBjbG9zZXIgdG8gbGluZSwgbG93ZXIgbnVtYmVyID0gZmFydGhlciBmcm9tIGxpbmUuCiAgICAgICAgICAgIC8vIDEuMCA9IGN1cnNvciBtdXN0IGJlIG92ZXIgbGluZS4KICAgICAgICAgICAgc2hvd1Rvb2x0aXBQcmVjaXNpb246IDAuNiwKICAgICAgICAgICAgLy8gcHJvcDogdG9vbHRpcExvY2F0aW9uCiAgICAgICAgICAgIC8vIFdoZXJlIHRvIHBvc2l0aW9uIHRvb2x0aXAsICduJywgJ25lJywgJ2UnLCAnc2UnLCAncycsICdzdycsICd3JywgJ253JwogICAgICAgICAgICB0b29sdGlwTG9jYXRpb246ICdudycsCiAgICAgICAgICAgIC8vIHByb3A6IGZhZGVUb29sdGlwCiAgICAgICAgICAgIC8vIHRydWUgPSBmYWRlIGluL291dCB0b29sdGlwLCBmbGFzZSA9IHNob3cvaGlkZSB0b29sdGlwCiAgICAgICAgICAgIGZhZGVUb29sdGlwOiB0cnVlLAogICAgICAgICAgICAvLyBwcm9wOiB0b29sdGlwRmFkZVNwZWVkCiAgICAgICAgICAgIC8vICdzbG93JywgJ2RlZicsICdmYXN0Jywgb3IgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4KICAgICAgICAgICAgdG9vbHRpcEZhZGVTcGVlZDogImZhc3QiLAogICAgICAgICAgICAvLyBwcm9wOiB0b29sdGlwT2Zmc2V0CiAgICAgICAgICAgIC8vIFBpeGVsIG9mZnNldCBvZiB0b29sdGlwIGZyb20gdGhlIGhpZ2hsaWdodC4KICAgICAgICAgICAgdG9vbHRpcE9mZnNldDogNCwKICAgICAgICAgICAgLy8gcHJvcDogdG9vbHRpcEZvcm1hdFN0cmluZwogICAgICAgICAgICAvLyBGb3JtYXQgc3RyaW5nIHBhc3NlZCB0aGUgeCBhbmQgeSB2YWx1ZXMgb2YgdGhlIGN1cnNvciBvbiB0aGUgbGluZS4KICAgICAgICAgICAgLy8gZS5nLiwgJ0RvZ3M6ICUuMmYsIENhdHM6ICVkJy4KICAgICAgICAgICAgdG9vbHRpcEZvcm1hdFN0cmluZzogJyVkLCAlZCcKICAgICAgICB9OwogICAgfQogICAgCiAgICAKICAgIGZ1bmN0aW9uIFJlY3RhbmdsZShvcHRpb25zKSB7CiAgICAgICAgTGluZUJhc2UuY2FsbCh0aGlzKTsKICAgICAgICB0aGlzLnR5cGUgPSAncmVjdGFuZ2xlJzsKICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgLy8gcHJvcDogeG1pbgogICAgICAgICAgICAgICAgLy8geCB2YWx1ZSBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLCBudWxsIHRvIHNjYWxlIHRvIGF4aXMgbWluLgogICAgICAgICAgICAgICAgeG1pbjogbnVsbCwKICAgICAgICAgICAgICAgIC8vIHByb3A6IHhtYXgKICAgICAgICAgICAgICAgIC8vIHggdmFsdWUgZm9yIHRoZSBlbmQgb2YgdGhlIGxpbmUsIG51bGwgdG8gc2NhbGUgdG8gYXhpcyBtYXguCiAgICAgICAgICAgICAgICB4bWF4OiBudWxsLAogICAgICAgICAgICAgICAgLy8gcHJvcCB4T2Zmc2V0CiAgICAgICAgICAgICAgICAvLyBvZmZzZXQgZW5kcyBvZiB0aGUgbGluZSBpbnNpZGUgdGhlIGdyaWQuIE51bWJlcgogICAgICAgICAgICAgICAgeE9mZnNldDogJzZweCcsIC8vIG51bWJlciBvciBzdHJpbmcuIE51bWJlciBpbnRlcnByZXRlZCBhcyB1bml0cywgc3RyaW5nIGFzIHBpeGVscy4KICAgICAgICAgICAgICAgIHhtaW5PZmZzZXQ6IG51bGwsCiAgICAgICAgICAgICAgICB4bWF4T2Zmc2V0OiBudWxsLAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB5bWluOiBudWxsLAogICAgICAgICAgICAgICAgeW1heDogbnVsbCwKICAgICAgICAgICAgICAgIHlPZmZzZXQ6ICc2cHgnLCAvLyBudW1iZXIgb3Igc3RyaW5nLiBOdW1iZXIgaW50ZXJwcmV0ZWQgYXMgdW5pdHMsIHN0cmluZyBhcyBwaXhlbHMuCiAgICAgICAgICAgICAgICB5bWluT2Zmc2V0OiBudWxsLAogICAgICAgICAgICAgICAgeW1heE9mZnNldDogbnVsbAogICAgICAgIH07CiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcy5vcHRpb25zLCBvcHRzLCBvcHRpb25zKTsKCiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbiA8IDAuMDEpIHsKICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9uID0gMC4wMTsKICAgICAgICB9CiAgICB9CgogICAgUmVjdGFuZ2xlLnByb3RvdHlwZSA9IG5ldyBMaW5lQmFzZSgpOwogICAgUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlY3RhbmdsZTsKCiAgICAKICAgIC8qKgogICAgICogQ2xhc3M6IExpbmUKICAgICAqIEEgc3RyYWlnaHQgbGluZS4KICAgICAqLwogICAgZnVuY3Rpb24gTGluZShvcHRpb25zKSB7CiAgICAgICAgTGluZUJhc2UuY2FsbCh0aGlzKTsKICAgICAgICB0aGlzLnR5cGUgPSAnbGluZSc7CiAgICAgICAgdmFyIG9wdHMgPSB7CiAgICAgICAgICAgIC8vIHByb3A6IHN0YXJ0CiAgICAgICAgICAgIC8vIFt4LCB5XSBjb29yZGluYXRlcyBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLgogICAgICAgICAgICBzdGFydDogW10sCiAgICAgICAgICAgIC8vIHByb3A6IHN0b3AKICAgICAgICAgICAgLy8gW3gsIHldIGNvb3JkaW5hdGVzIGZvciB0aGUgZW5kIG9mIHRoZSBsaW5lLgogICAgICAgICAgICBzdG9wOiBbXQogICAgICAgIH07CiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcy5vcHRpb25zLCBvcHRzLCBvcHRpb25zKTsKCiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbiA8IDAuMDEpIHsKICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9uID0gMC4wMTsKICAgICAgICB9CiAgICB9CgogICAgTGluZS5wcm90b3R5cGUgPSBuZXcgTGluZUJhc2UoKTsKICAgIExpbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGluZTsKCgogICAgLyoqCiAgICAgKiBDbGFzczogSG9yaXpvbnRhbExpbmUKICAgICAqIEEgc3RyYWlnaHQgaG9yaXpvbnRhbCBsaW5lLgogICAgICovCiAgICBmdW5jdGlvbiBIb3Jpem9udGFsTGluZShvcHRpb25zKSB7CiAgICAgICAgTGluZUJhc2UuY2FsbCh0aGlzKTsKICAgICAgICB0aGlzLnR5cGUgPSAnaG9yaXpvbnRhbExpbmUnOwogICAgICAgIHZhciBvcHRzID0gewogICAgICAgICAgICAvLyBwcm9wOiB5CiAgICAgICAgICAgIC8vIHkgdmFsdWUgdG8gcG9zaXRpb24gdGhlIGxpbmUKICAgICAgICAgICAgeTogbnVsbCwKICAgICAgICAgICAgLy8gcHJvcDogeG1pbgogICAgICAgICAgICAvLyB4IHZhbHVlIGZvciB0aGUgc3RhcnQgb2YgdGhlIGxpbmUsIG51bGwgdG8gc2NhbGUgdG8gYXhpcyBtaW4uCiAgICAgICAgICAgIHhtaW46IG51bGwsCiAgICAgICAgICAgIC8vIHByb3A6IHhtYXgKICAgICAgICAgICAgLy8geCB2YWx1ZSBmb3IgdGhlIGVuZCBvZiB0aGUgbGluZSwgbnVsbCB0byBzY2FsZSB0byBheGlzIG1heC4KICAgICAgICAgICAgeG1heDogbnVsbCwKICAgICAgICAgICAgLy8gcHJvcCB4T2Zmc2V0CiAgICAgICAgICAgIC8vIG9mZnNldCBlbmRzIG9mIHRoZSBsaW5lIGluc2lkZSB0aGUgZ3JpZC4gIE51bWJlciAKICAgICAgICAgICAgeE9mZnNldDogJzZweCcsIC8vIG51bWJlciBvciBzdHJpbmcuICBOdW1iZXIgaW50ZXJwcmV0ZWQgYXMgdW5pdHMsIHN0cmluZyBhcyBwaXhlbHMuCiAgICAgICAgICAgIHhtaW5PZmZzZXQ6IG51bGwsCiAgICAgICAgICAgIHhtYXhPZmZzZXQ6IG51bGwKICAgICAgICB9OwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMub3B0aW9ucywgb3B0cywgb3B0aW9ucyk7CgogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1Rvb2x0aXBQcmVjaXNpb24gPCAwLjAxKSB7CiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbiA9IDAuMDE7CiAgICAgICAgfQogICAgfQoKICAgIEhvcml6b250YWxMaW5lLnByb3RvdHlwZSA9IG5ldyBMaW5lQmFzZSgpOwogICAgSG9yaXpvbnRhbExpbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSG9yaXpvbnRhbExpbmU7CiAgICAKCiAgICAvKioKICAgICAqIENsYXNzOiBEYXNoZWRIb3Jpem9udGFsTGluZQogICAgICogQSBzdHJhaWdodCBkYXNoZWQgaG9yaXpvbnRhbCBsaW5lLgogICAgICovCiAgICBmdW5jdGlvbiBEYXNoZWRIb3Jpem9udGFsTGluZShvcHRpb25zKSB7CiAgICAgICAgTGluZUJhc2UuY2FsbCh0aGlzKTsKICAgICAgICB0aGlzLnR5cGUgPSAnZGFzaGVkSG9yaXpvbnRhbExpbmUnOwogICAgICAgIHZhciBvcHRzID0gewogICAgICAgICAgICB5OiBudWxsLAogICAgICAgICAgICB4bWluOiBudWxsLAogICAgICAgICAgICB4bWF4OiBudWxsLAogICAgICAgICAgICB4T2Zmc2V0OiAnNnB4JywgLy8gbnVtYmVyIG9yIHN0cmluZy4gIE51bWJlciBpbnRlcnByZXRlZCBhcyB1bml0cywgc3RyaW5nIGFzIHBpeGVscy4KICAgICAgICAgICAgeG1pbk9mZnNldDogbnVsbCwKICAgICAgICAgICAgeG1heE9mZnNldDogbnVsbCwKICAgICAgICAgICAgLy8gcHJvcDogZGFzaFBhdHRlcm4KICAgICAgICAgICAgLy8gQXJyYXkgb2YgbGluZSwgc3BhY2Ugc2V0dGluZ3MgaW4gcGl4ZWxzLgogICAgICAgICAgICAvLyBEZWZhdWx0IGlzIDggcGl4ZWwgb2YgbGluZSwgOCBwaXhlbCBvZiBzcGFjZS4KICAgICAgICAgICAgLy8gTm90ZSwgbGltaXQgdG8gYSAyIGVsZW1lbnQgYXJyYXkgYi9jIG9mIGJ1ZyB3aXRoIGhpZ2hlciBvcmRlciBhcnJheXMuCiAgICAgICAgICAgIGRhc2hQYXR0ZXJuOiBbOCw4XQogICAgICAgIH07CiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcy5vcHRpb25zLCBvcHRzLCBvcHRpb25zKTsKCiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbiA8IDAuMDEpIHsKICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9uID0gMC4wMTsKICAgICAgICB9CiAgICB9CgogICAgRGFzaGVkSG9yaXpvbnRhbExpbmUucHJvdG90eXBlID0gbmV3IExpbmVCYXNlKCk7CiAgICBEYXNoZWRIb3Jpem9udGFsTGluZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEYXNoZWRIb3Jpem9udGFsTGluZTsKICAgIAoKICAgIC8qKgogICAgICogQ2xhc3M6IFZlcnRpY2FsTGluZQogICAgICogQSBzdHJhaWdodCB2ZXJ0aWNhbCBsaW5lLgogICAgICovCiAgICBmdW5jdGlvbiBWZXJ0aWNhbExpbmUob3B0aW9ucykgewogICAgICAgIExpbmVCYXNlLmNhbGwodGhpcyk7CiAgICAgICAgdGhpcy50eXBlID0gJ3ZlcnRpY2FsTGluZSc7CiAgICAgICAgdmFyIG9wdHMgPSB7CiAgICAgICAgICAgIHg6IG51bGwsCiAgICAgICAgICAgIHltaW46IG51bGwsCiAgICAgICAgICAgIHltYXg6IG51bGwsCiAgICAgICAgICAgIHlPZmZzZXQ6ICc2cHgnLCAvLyBudW1iZXIgb3Igc3RyaW5nLiAgTnVtYmVyIGludGVycHJldGVkIGFzIHVuaXRzLCBzdHJpbmcgYXMgcGl4ZWxzLgogICAgICAgICAgICB5bWluT2Zmc2V0OiBudWxsLAogICAgICAgICAgICB5bWF4T2Zmc2V0OiBudWxsCiAgICAgICAgfTsKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLm9wdGlvbnMsIG9wdHMsIG9wdGlvbnMpOwoKICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9uIDwgMC4wMSkgewogICAgICAgICAgICB0aGlzLm9wdGlvbnMuc2hvd1Rvb2x0aXBQcmVjaXNpb24gPSAwLjAxOwogICAgICAgIH0KICAgIH0KCiAgICBWZXJ0aWNhbExpbmUucHJvdG90eXBlID0gbmV3IExpbmVCYXNlKCk7CiAgICBWZXJ0aWNhbExpbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGljYWxMaW5lOwogICAgCgogICAgLyoqCiAgICAgKiBDbGFzczogRGFzaGVkVmVydGljYWxMaW5lCiAgICAgKiBBIHN0cmFpZ2h0IGRhc2hlZCB2ZXJ0aWNhbCBsaW5lLgogICAgICovCiAgICBmdW5jdGlvbiBEYXNoZWRWZXJ0aWNhbExpbmUob3B0aW9ucykgewogICAgICAgIExpbmVCYXNlLmNhbGwodGhpcyk7CiAgICAgICAgdGhpcy50eXBlID0gJ2Rhc2hlZFZlcnRpY2FsTGluZSc7CiAgICAgICAgdGhpcy5zdGFydCA9IG51bGw7CiAgICAgICAgdGhpcy5zdG9wID0gbnVsbDsKICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgICAgeDogbnVsbCwKICAgICAgICAgICAgeW1pbjogbnVsbCwKICAgICAgICAgICAgeW1heDogbnVsbCwKICAgICAgICAgICAgeU9mZnNldDogJzZweCcsIC8vIG51bWJlciBvciBzdHJpbmcuICBOdW1iZXIgaW50ZXJwcmV0ZWQgYXMgdW5pdHMsIHN0cmluZyBhcyBwaXhlbHMuCiAgICAgICAgICAgIHltaW5PZmZzZXQ6IG51bGwsCiAgICAgICAgICAgIHltYXhPZmZzZXQ6IG51bGwsCiAgICAgICAgICAgIC8vIHByb3A6IGRhc2hQYXR0ZXJuCiAgICAgICAgICAgIC8vIEFycmF5IG9mIGxpbmUsIHNwYWNlIHNldHRpbmdzIGluIHBpeGVscy4KICAgICAgICAgICAgLy8gRGVmYXVsdCBpcyA4IHBpeGVsIG9mIGxpbmUsIDggcGl4ZWwgb2Ygc3BhY2UuCiAgICAgICAgICAgIC8vIE5vdGUsIGxpbWl0IHRvIGEgMiBlbGVtZW50IGFycmF5IGIvYyBvZiBidWcgd2l0aCBoaWdoZXIgb3JkZXIgYXJyYXlzLgogICAgICAgICAgICBkYXNoUGF0dGVybjogWzgsOF0KICAgICAgICB9OwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMub3B0aW9ucywgb3B0cywgb3B0aW9ucyk7CgogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1Rvb2x0aXBQcmVjaXNpb24gPCAwLjAxKSB7CiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbiA9IDAuMDE7CiAgICAgICAgfQogICAgfQoKICAgIERhc2hlZFZlcnRpY2FsTGluZS5wcm90b3R5cGUgPSBuZXcgTGluZUJhc2UoKTsKICAgIERhc2hlZFZlcnRpY2FsTGluZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEYXNoZWRWZXJ0aWNhbExpbmU7CiAgICAKICAgICQuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdG90eXBlLmFkZExpbmUgPSBmdW5jdGlvbihvcHRzKSB7CiAgICAgICAgdmFyIGxpbmUgPSBuZXcgTGluZShvcHRzKTsKICAgICAgICBsaW5lLnVpZCA9IG9iakNvdW50ZXIrKzsKICAgICAgICB0aGlzLm9iamVjdHMucHVzaChsaW5lKTsKICAgICAgICB0aGlzLm9iamVjdE5hbWVzLnB1c2gobGluZS5vcHRpb25zLm5hbWUpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wcm90b3R5cGUuYWRkSG9yaXpvbnRhbExpbmUgPSBmdW5jdGlvbihvcHRzKSB7CiAgICAgICAgdmFyIGxpbmUgPSBuZXcgSG9yaXpvbnRhbExpbmUob3B0cyk7CiAgICAgICAgbGluZS51aWQgPSBvYmpDb3VudGVyKys7CiAgICAgICAgdGhpcy5vYmplY3RzLnB1c2gobGluZSk7CiAgICAgICAgdGhpcy5vYmplY3ROYW1lcy5wdXNoKGxpbmUub3B0aW9ucy5uYW1lKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdG90eXBlLmFkZERhc2hlZEhvcml6b250YWxMaW5lID0gZnVuY3Rpb24ob3B0cykgewogICAgICAgIHZhciBsaW5lID0gbmV3IERhc2hlZEhvcml6b250YWxMaW5lKG9wdHMpOwogICAgICAgIGxpbmUudWlkID0gb2JqQ291bnRlcisrOwogICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKGxpbmUpOwogICAgICAgIHRoaXMub2JqZWN0TmFtZXMucHVzaChsaW5lLm9wdGlvbnMubmFtZSk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5DYW52YXNPdmVybGF5LnByb3RvdHlwZS5hZGRWZXJ0aWNhbExpbmUgPSBmdW5jdGlvbihvcHRzKSB7CiAgICAgICAgdmFyIGxpbmUgPSBuZXcgVmVydGljYWxMaW5lKG9wdHMpOwogICAgICAgIGxpbmUudWlkID0gb2JqQ291bnRlcisrOwogICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKGxpbmUpOwogICAgICAgIHRoaXMub2JqZWN0TmFtZXMucHVzaChsaW5lLm9wdGlvbnMubmFtZSk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5DYW52YXNPdmVybGF5LnByb3RvdHlwZS5hZGREYXNoZWRWZXJ0aWNhbExpbmUgPSBmdW5jdGlvbihvcHRzKSB7CiAgICAgICAgdmFyIGxpbmUgPSBuZXcgRGFzaGVkVmVydGljYWxMaW5lKG9wdHMpOwogICAgICAgIGxpbmUudWlkID0gb2JqQ291bnRlcisrOwogICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKGxpbmUpOwogICAgICAgIHRoaXMub2JqZWN0TmFtZXMucHVzaChsaW5lLm9wdGlvbnMubmFtZSk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5DYW52YXNPdmVybGF5LnByb3RvdHlwZS5hZGRSZWN0YW5nbGUgPSBmdW5jdGlvbihvcHRzKSB7CiAgICAgICAgdmFyIGxpbmUgPSBuZXcgUmVjdGFuZ2xlKG9wdHMpOwogICAgICAgIGxpbmUudWlkID0gb2JqQ291bnRlcisrOwogICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKGxpbmUpOwogICAgICAgIHRoaXMub2JqZWN0TmFtZXMucHVzaChsaW5lLm9wdGlvbnMubmFtZSk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5DYW52YXNPdmVybGF5LnByb3RvdHlwZS5yZW1vdmVPYmplY3QgPSBmdW5jdGlvbihpZHgpIHsKICAgICAgICAvLyBjaGVjayBpZiBpbnRlZ2VyLCByZW1vdmUgYnkgaW5kZXgKICAgICAgICBpZiAoJC50eXBlKGlkeCkgPT0gJ251bWJlcicpIHsKICAgICAgICAgICAgdGhpcy5vYmplY3RzLnNwbGljZShpZHgsIDEpOwogICAgICAgICAgICB0aGlzLm9iamVjdE5hbWVzLnNwbGljZShpZHgsIDEpOwogICAgICAgIH0KICAgICAgICAvLyBpZiBzdHJpbmcsIHJlbW92ZSBieSBuYW1lCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHZhciBpZCA9ICQuaW5BcnJheShpZHgsIHRoaXMub2JqZWN0TmFtZXMpOwogICAgICAgICAgICBpZiAoaWQgIT0gLTEpIHsKICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0cy5zcGxpY2UoaWQsIDEpOwogICAgICAgICAgICAgICAgdGhpcy5vYmplY3ROYW1lcy5zcGxpY2UoaWQsIDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wcm90b3R5cGUuZ2V0T2JqZWN0ID0gZnVuY3Rpb24oaWR4KSB7CiAgICAgICAgLy8gY2hlY2sgaWYgaW50ZWdlciwgcmVtb3ZlIGJ5IGluZGV4CiAgICAgICAgaWYgKCQudHlwZShpZHgpID09ICdudW1iZXInKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLm9iamVjdHNbaWR4XTsKICAgICAgICB9CiAgICAgICAgLy8gaWYgc3RyaW5nLCByZW1vdmUgYnkgbmFtZQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaWQgPSAkLmluQXJyYXkoaWR4LCB0aGlzLm9iamVjdE5hbWVzKTsKICAgICAgICAgICAgaWYgKGlkICE9IC0xKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3RzW2lkXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8vIFNldCBnZXQgYXMgYWxpYXMgZm9yIGdldE9iamVjdC4KICAgICQuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdG90eXBlLmdldCA9ICQuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdG90eXBlLmdldE9iamVjdDsKICAgIAogICAgJC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihwbG90KSB7CiAgICAgICAgdGhpcy5jYW52YXMuX2N0eC5jbGVhclJlY3QoMCwwLHRoaXMuY2FudmFzLmdldFdpZHRoKCksIHRoaXMuY2FudmFzLmdldEhlaWdodCgpKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihwbG90KSB7CiAgICAgICAgdmFyIG9iaiwgCiAgICAgICAgICAgIG9ianMgPSB0aGlzLm9iamVjdHMsCiAgICAgICAgICAgIG1yID0gdGhpcy5tYXJrZXJSZW5kZXJlciwKICAgICAgICAgICAgc3RhcnQsCiAgICAgICAgICAgIHN0b3A7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93KSB7CiAgICAgICAgICAgIHRoaXMuY2FudmFzLl9jdHguY2xlYXJSZWN0KDAsMCx0aGlzLmNhbnZhcy5nZXRXaWR0aCgpLCB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKSk7CiAgICAgICAgICAgIGZvciAodmFyIGs9MDsgazxvYmpzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgICAgICBvYmogPSBvYmpzW2tdOwogICAgICAgICAgICAgICAgdmFyIG9wdHMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgb2JqLm9wdGlvbnMpOwogICAgICAgICAgICAgICAgaWYgKG9iai5vcHRpb25zLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICAvLyBzdHlsZSBhbmQgc2hhZG93IHByb3BlcnRpZXMgc2hvdWxkIGJlIHNldCBiZWZvcmUKICAgICAgICAgICAgICAgICAgICAvLyBldmVyeSBkcmF3IG9mIG1hcmtlciByZW5kZXJlci4KICAgICAgICAgICAgICAgICAgICBtci5zaGFkb3cgPSBvYmoub3B0aW9ucy5zaGFkb3c7CiAgICAgICAgICAgICAgICAgICAgb2JqLnRvb2x0aXBXaWR0aEZhY3RvciA9IG9iai5vcHRpb25zLmxpbmVXaWR0aCAvIG9iai5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9uOwogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2JqLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGluZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHlsZSBhbmQgc2hhZG93IHByb3BlcnRpZXMgc2hvdWxkIGJlIHNldCBiZWZvcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZXJ5IGRyYXcgb2YgbWFya2VyIHJlbmRlcmVyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXIuc3R5bGUgPSAnbGluZSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmNsb3NlUGF0aCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBbcGxvdC5heGVzW29iai5vcHRpb25zLnhheGlzXS5zZXJpZXNfdTJwKG9iai5vcHRpb25zLnN0YXJ0WzBdKSwgcGxvdC5heGVzW29iai5vcHRpb25zLnlheGlzXS5zZXJpZXNfdTJwKG9iai5vcHRpb25zLnN0YXJ0WzFdKV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wID0gW3Bsb3QuYXhlc1tvYmoub3B0aW9ucy54YXhpc10uc2VyaWVzX3UycChvYmoub3B0aW9ucy5zdG9wWzBdKSwgcGxvdC5heGVzW29iai5vcHRpb25zLnlheGlzXS5zZXJpZXNfdTJwKG9iai5vcHRpb25zLnN0b3BbMV0pXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5ncmlkU3RhcnQgPSBzdGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5ncmlkU3RvcCA9IHN0b3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtci5kcmF3KHN0YXJ0LCBzdG9wLCB0aGlzLmNhbnZhcy5fY3R4LCBvcHRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdob3Jpem9udGFsTGluZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0eWxlIGFuZCBzaGFkb3cgcHJvcGVydGllcyBzaG91bGQgYmUgc2V0IGJlZm9yZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXZlcnkgZHJhdyBvZiBtYXJrZXIgcmVuZGVyZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqLm9wdGlvbnMueSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXIuc3R5bGUgPSAnbGluZSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5jbG9zZVBhdGggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGF4aXMgPSBwbG90LmF4ZXNbb2JqLm9wdGlvbnMueGF4aXNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gcGxvdC5heGVzW29iai5vcHRpb25zLnlheGlzXS5zZXJpZXNfdTJwKG9iai5vcHRpb25zLnkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWlub2ZmID0gb2JqLm9wdGlvbnMueG1pbk9mZnNldCB8fCBvYmoub3B0aW9ucy54T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWF4b2ZmID0gb2JqLm9wdGlvbnMueG1heE9mZnNldCB8fCBvYmoub3B0aW9ucy54T2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmoub3B0aW9ucy54bWluICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0ID0geGF4aXMuc2VyaWVzX3UycChvYmoub3B0aW9ucy54bWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeG1pbm9mZiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLnR5cGUoeG1pbm9mZikgPT0gIm51bWJlciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdGFydCA9IHhheGlzLnNlcmllc191MnAoeGF4aXMubWluICsgeG1pbm9mZik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJC50eXBlKHhtaW5vZmYpID09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3RhcnQgPSB4YXhpcy5zZXJpZXNfdTJwKHhheGlzLm1pbikgKyBwYXJzZUZsb2F0KHhtaW5vZmYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmoub3B0aW9ucy54bWF4ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0b3AgPSB4YXhpcy5zZXJpZXNfdTJwKG9iai5vcHRpb25zLnhtYXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4bWF4b2ZmICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQudHlwZSh4bWF4b2ZmKSA9PSAibnVtYmVyIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0b3AgPSB4YXhpcy5zZXJpZXNfdTJwKHhheGlzLm1heCAtIHhtYXhvZmYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCQudHlwZSh4bWF4b2ZmKSA9PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0b3AgPSB4YXhpcy5zZXJpZXNfdTJwKHhheGlzLm1heCkgLSBwYXJzZUZsb2F0KHhtYXhvZmYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4c3RvcCAhPSBudWxsICYmIHhzdGFydCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5ncmlkU3RhcnQgPSBbeHN0YXJ0LCB5XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmdyaWRTdG9wID0gW3hzdG9wLCB5XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXIuZHJhdyhbeHN0YXJ0LCB5XSwgW3hzdG9wLCB5XSwgdGhpcy5jYW52YXMuX2N0eCwgb3B0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXNoZWRIb3Jpem9udGFsTGluZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXNoUGF0ID0gb2JqLm9wdGlvbnMuZGFzaFBhdHRlcm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGFzaFBhdExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8ZGFzaFBhdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hQYXRMZW4gKz0gZGFzaFBhdFtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHlsZSBhbmQgc2hhZG93IHByb3BlcnRpZXMgc2hvdWxkIGJlIHNldCBiZWZvcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZXJ5IGRyYXcgb2YgbWFya2VyIHJlbmRlcmVyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5vcHRpb25zLnkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1yLnN0eWxlID0gJ2xpbmUnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuY2xvc2VQYXRoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhheGlzID0gcGxvdC5heGVzW29iai5vcHRpb25zLnhheGlzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3RvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHBsb3QuYXhlc1tvYmoub3B0aW9ucy55YXhpc10uc2VyaWVzX3UycChvYmoub3B0aW9ucy55KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1pbm9mZiA9IG9iai5vcHRpb25zLnhtaW5PZmZzZXQgfHwgb2JqLm9wdGlvbnMueE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1heG9mZiA9IG9iai5vcHRpb25zLnhtYXhPZmZzZXQgfHwgb2JqLm9wdGlvbnMueE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqLm9wdGlvbnMueG1pbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdGFydCA9IHhheGlzLnNlcmllc191MnAob2JqLm9wdGlvbnMueG1pbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHhtaW5vZmYgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC50eXBlKHhtaW5vZmYpID09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3RhcnQgPSB4YXhpcy5zZXJpZXNfdTJwKHhheGlzLm1pbiArIHhtaW5vZmYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCQudHlwZSh4bWlub2ZmKSA9PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0ID0geGF4aXMuc2VyaWVzX3UycCh4YXhpcy5taW4pICsgcGFyc2VGbG9hdCh4bWlub2ZmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqLm9wdGlvbnMueG1heCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdG9wID0geGF4aXMuc2VyaWVzX3UycChvYmoub3B0aW9ucy54bWF4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeG1heG9mZiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLnR5cGUoeG1heG9mZikgPT0gIm51bWJlciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdG9wID0geGF4aXMuc2VyaWVzX3UycCh4YXhpcy5tYXggLSB4bWF4b2ZmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkLnR5cGUoeG1heG9mZikgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdG9wID0geGF4aXMuc2VyaWVzX3UycCh4YXhpcy5tYXgpIC0gcGFyc2VGbG9hdCh4bWF4b2ZmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHN0b3AgIT0gbnVsbCAmJiB4c3RhcnQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouZ3JpZFN0YXJ0ID0gW3hzdGFydCwgeV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5ncmlkU3RvcCA9IFt4c3RvcCwgeV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1EYXNoID0gTWF0aC5jZWlsKCh4c3RvcCAtIHhzdGFydCkvZGFzaFBhdExlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiPXhzdGFydCwgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPG51bURhc2g7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPGRhc2hQYXQubGVuZ3RoOyBqKz0yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGIrZGFzaFBhdFtqXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtci5kcmF3KFtiLCB5XSwgW2UsIHldLCB0aGlzLmNhbnZhcy5fY3R4LCBvcHRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiICs9IGRhc2hQYXRbal07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBkYXNoUGF0Lmxlbmd0aC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgKz0gZGFzaFBhdFtqKzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndmVydGljYWxMaW5lJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3R5bGUgYW5kIHNoYWRvdyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBzZXQgYmVmb3JlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBldmVyeSBkcmF3IG9mIG1hcmtlciByZW5kZXJlci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmoub3B0aW9ucy54ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtci5zdHlsZSA9ICdsaW5lJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmNsb3NlUGF0aCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5YXhpcyA9IHBsb3QuYXhlc1tvYmoub3B0aW9ucy55YXhpc10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXN0b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBwbG90LmF4ZXNbb2JqLm9wdGlvbnMueGF4aXNdLnNlcmllc191MnAob2JqLm9wdGlvbnMueCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHltaW5vZmYgPSBvYmoub3B0aW9ucy55bWluT2Zmc2V0IHx8IG9iai5vcHRpb25zLnlPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHltYXhvZmYgPSBvYmoub3B0aW9ucy55bWF4T2Zmc2V0IHx8IG9iai5vcHRpb25zLnlPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5vcHRpb25zLnltaW4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RhcnQgPSB5YXhpcy5zZXJpZXNfdTJwKG9iai5vcHRpb25zLnltaW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh5bWlub2ZmICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQudHlwZSh5bWlub2ZmKSA9PSAibnVtYmVyIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXN0YXJ0ID0geWF4aXMuc2VyaWVzX3UycCh5YXhpcy5taW4gLSB5bWlub2ZmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkLnR5cGUoeW1pbm9mZikgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzdGFydCA9IHlheGlzLnNlcmllc191MnAoeWF4aXMubWluKSAtIHBhcnNlRmxvYXQoeW1pbm9mZik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5vcHRpb25zLnltYXggIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RvcCA9IHlheGlzLnNlcmllc191MnAob2JqLm9wdGlvbnMueW1heCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHltYXhvZmYgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC50eXBlKHltYXhvZmYpID09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RvcCA9IHlheGlzLnNlcmllc191MnAoeWF4aXMubWF4ICsgeW1heG9mZik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJC50eXBlKHltYXhvZmYpID09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RvcCA9IHlheGlzLnNlcmllc191MnAoeWF4aXMubWF4KSArIHBhcnNlRmxvYXQoeW1heG9mZik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHlzdG9wICE9IG51bGwgJiYgeXN0YXJ0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmdyaWRTdGFydCA9IFt4LCB5c3RhcnRdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouZ3JpZFN0b3AgPSBbeCwgeXN0b3BdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtci5kcmF3KFt4LCB5c3RhcnRdLCBbeCwgeXN0b3BdLCB0aGlzLmNhbnZhcy5fY3R4LCBvcHRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Rhc2hlZFZlcnRpY2FsTGluZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXNoUGF0ID0gb2JqLm9wdGlvbnMuZGFzaFBhdHRlcm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGFzaFBhdExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8ZGFzaFBhdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hQYXRMZW4gKz0gZGFzaFBhdFtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHlsZSBhbmQgc2hhZG93IHByb3BlcnRpZXMgc2hvdWxkIGJlIHNldCBiZWZvcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZXJ5IGRyYXcgb2YgbWFya2VyIHJlbmRlcmVyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5vcHRpb25zLnggIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1yLnN0eWxlID0gJ2xpbmUnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuY2xvc2VQYXRoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHlheGlzID0gcGxvdC5heGVzW29iai5vcHRpb25zLnlheGlzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHBsb3QuYXhlc1tvYmoub3B0aW9ucy54YXhpc10uc2VyaWVzX3UycChvYmoub3B0aW9ucy54KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW1pbm9mZiA9IG9iai5vcHRpb25zLnltaW5PZmZzZXQgfHwgb2JqLm9wdGlvbnMueU9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW1heG9mZiA9IG9iai5vcHRpb25zLnltYXhPZmZzZXQgfHwgb2JqLm9wdGlvbnMueU9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqLm9wdGlvbnMueW1pbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzdGFydCA9IHlheGlzLnNlcmllc191MnAob2JqLm9wdGlvbnMueW1pbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHltaW5vZmYgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC50eXBlKHltaW5vZmYpID09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RhcnQgPSB5YXhpcy5zZXJpZXNfdTJwKHlheGlzLm1pbiAtIHltaW5vZmYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCQudHlwZSh5bWlub2ZmKSA9PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXN0YXJ0ID0geWF4aXMuc2VyaWVzX3UycCh5YXhpcy5taW4pIC0gcGFyc2VGbG9hdCh5bWlub2ZmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqLm9wdGlvbnMueW1heCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzdG9wID0geWF4aXMuc2VyaWVzX3UycChvYmoub3B0aW9ucy55bWF4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeW1heG9mZiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLnR5cGUoeW1heG9mZikgPT0gIm51bWJlciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzdG9wID0geWF4aXMuc2VyaWVzX3UycCh5YXhpcy5tYXggKyB5bWF4b2ZmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkLnR5cGUoeW1heG9mZikgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzdG9wID0geWF4aXMuc2VyaWVzX3UycCh5YXhpcy5tYXgpICsgcGFyc2VGbG9hdCh5bWF4b2ZmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5c3RvcCAhPSBudWxsICYmIHlzdGFydCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5ncmlkU3RhcnQgPSBbeCwgeXN0YXJ0XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmdyaWRTdG9wID0gW3gsIHlzdG9wXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bURhc2ggPSBNYXRoLmNlaWwoKHlzdGFydCAtIHlzdG9wKS9kYXNoUGF0TGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0RGFzaEFkanVzdCA9ICgobnVtRGFzaCAqIGRhc2hQYXRMZW4pIC0gKHlzdGFydCAtIHlzdG9wKSkvMi4wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYj15c3RhcnQsIGUsIGJzLCBlczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPG51bURhc2g7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPGRhc2hQYXQubGVuZ3RoOyBqKz0yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGIgLSBkYXNoUGF0W2pdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlIDwgeXN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHlzdG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYiA8IHlzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSB5c3RvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXMgPSBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIChpID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgZXMgKz0gZmlyc3REYXNoQWRqdXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtci5kcmF3KFt4LCBiXSwgW3gsIGVdLCB0aGlzLmNhbnZhcy5fY3R4LCBvcHRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIC09IGRhc2hQYXRbal07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBkYXNoUGF0Lmxlbmd0aC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgLT0gZGFzaFBhdFtqKzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlY3RhbmdsZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHlsZSBhbmQgc2hhZG93IHByb3BlcnRpZXMgc2hvdWxkIGJlIHNldCBiZWZvcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZXJ5IGRyYXcgb2YgbWFya2VyIHJlbmRlcmVyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXIuc3R5bGUgPSAnbGluZSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmNsb3NlUGF0aCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4YXhpcyA9IHBsb3QuYXhlc1tvYmoub3B0aW9ucy54YXhpc10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBwbG90LmF4ZXNbb2JqLm9wdGlvbnMueWF4aXNdLnNlcmllc191MnAob2JqLm9wdGlvbnMueSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtaW5vZmYgPSBvYmoub3B0aW9ucy54bWluT2Zmc2V0IHx8IG9iai5vcHRpb25zLnhPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtYXhvZmYgPSBvYmoub3B0aW9ucy54bWF4T2Zmc2V0IHx8IG9iai5vcHRpb25zLnhPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqLm9wdGlvbnMueG1pbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0ID0geGF4aXMuc2VyaWVzX3UycChvYmoub3B0aW9ucy54bWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHhtaW5vZmYgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLnR5cGUoeG1pbm9mZikgPT0gIm51bWJlciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXJ0ID0geGF4aXMuc2VyaWVzX3UycCh4YXhpcy5taW4gKyB4bWlub2ZmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJC50eXBlKHhtaW5vZmYpID09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdGFydCA9IHhheGlzLnNlcmllc191MnAoeGF4aXMubWluKSArIHBhcnNlRmxvYXQoeG1pbm9mZik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5vcHRpb25zLnhtYXggIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdG9wID0geGF4aXMuc2VyaWVzX3UycChvYmoub3B0aW9ucy54bWF4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHhtYXhvZmYgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLnR5cGUoeG1heG9mZikgPT0gIm51bWJlciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0b3AgPSB4YXhpcy5zZXJpZXNfdTJwKHhheGlzLm1heCAtIHhtYXhvZmYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkLnR5cGUoeG1heG9mZikgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0b3AgPSB4YXhpcy5zZXJpZXNfdTJwKHhheGlzLm1heCkgLSBwYXJzZUZsb2F0KHhtYXhvZmYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHlheGlzID0gcGxvdC5heGVzW29iai5vcHRpb25zLnlheGlzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5c3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXN0b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHBsb3QuYXhlc1tvYmoub3B0aW9ucy54YXhpc10uc2VyaWVzX3UycChvYmoub3B0aW9ucy54KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5bWlub2ZmID0gb2JqLm9wdGlvbnMueW1pbk9mZnNldCB8fCBvYmoub3B0aW9ucy55T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHltYXhvZmYgPSBvYmoub3B0aW9ucy55bWF4T2Zmc2V0IHx8IG9iai5vcHRpb25zLnlPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqLm9wdGlvbnMueW1pbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXN0YXJ0ID0geWF4aXMuc2VyaWVzX3UycChvYmoub3B0aW9ucy55bWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHltaW5vZmYgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLnR5cGUoeW1pbm9mZikgPT0gIm51bWJlciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXN0YXJ0ID0geWF4aXMuc2VyaWVzX3UycCh5YXhpcy5taW4gLSB5bWlub2ZmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJC50eXBlKHltaW5vZmYpID09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzdGFydCA9IHlheGlzLnNlcmllc191MnAoeWF4aXMubWluKSAtIHBhcnNlRmxvYXQoeW1pbm9mZik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5vcHRpb25zLnltYXggIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzdG9wID0geWF4aXMuc2VyaWVzX3UycChvYmoub3B0aW9ucy55bWF4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHltYXhvZmYgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLnR5cGUoeW1heG9mZikgPT0gIm51bWJlciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXN0b3AgPSB5YXhpcy5zZXJpZXNfdTJwKHlheGlzLm1heCArIHltYXhvZmYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkLnR5cGUoeW1heG9mZikgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXN0b3AgPSB5YXhpcy5zZXJpZXNfdTJwKHlheGlzLm1heCkgKyBwYXJzZUZsb2F0KHltYXhvZmYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4c3RvcCAhPSBudWxsICYmIHhzdGFydCAhPSBudWxsICYmIHlzdG9wICE9IG51bGwgJiYgeXN0YXJ0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouZ3JpZFN0YXJ0ID0gW3hzdGFydCwgeXN0YXJ0XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouZ3JpZFN0b3AgPSBbeHN0b3AsIHlzdG9wXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5fY3R4LmZpbGxTdHlsZSA9IG9iai5vcHRpb25zLmNvbG9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLl9jdHguZmlsbFJlY3QoeHN0YXJ0LCB5c3RhcnQsIHhzdG9wIC0geHN0YXJ0LCB5c3RvcCAtIHlzdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aGluIGNvbnRleHQgb2YgcGxvdAogICAgLy8gY3JlYXRlIGEgY2FudmFzIHdoaWNoIHdlIGNhbiBkcmF3IG9uLgogICAgLy8gaW5zZXJ0IGl0IGJlZm9yZSB0aGUgZXZlbnRDYW52YXMsIHNvIGV2ZW50Q2FudmFzIHdpbGwgc3RpbGwgY2FwdHVyZSBldmVudHMuCiAgICAkLmpxcGxvdC5DYW52YXNPdmVybGF5LnBvc3RQbG90RHJhdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBjbyA9IHRoaXMucGx1Z2lucy5jYW52YXNPdmVybGF5OwogICAgICAgIC8vIE1lbW9yeSBMZWFrcyBwYXRjaCAgICAKICAgICAgICBpZiAoY28gJiYgY28uaGlnaGxpZ2h0Q2FudmFzKSB7CiAgICAgICAgICAgIGNvLmhpZ2hsaWdodENhbnZhcy5yZXNldENhbnZhcygpOwogICAgICAgICAgICBjby5oaWdobGlnaHRDYW52YXMgPSBudWxsOwogICAgICAgIH0KICAgICAgICBjby5jYW52YXMgPSBuZXcgJC5qcXBsb3QuR2VuZXJpY0NhbnZhcygpOwogICAgICAgIAogICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKGNvLmNhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCAnanFwbG90LW92ZXJsYXlDYW52YXMtY2FudmFzJywgdGhpcy5fcGxvdERpbWVuc2lvbnMsIHRoaXMpKTsKICAgICAgICBjby5jYW52YXMuc2V0Q29udGV4dCgpOwogICAgICAgIGlmICghY28uZGVmZXJEcmF3KSB7CiAgICAgICAgICAgIGNvLmRyYXcodGhpcyk7CiAgICAgICAgfQoKICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIGNvLl90b29sdGlwRWxlbSA9ICQoZWxlbSk7CiAgICAgICAgZWxlbSA9IG51bGw7CiAgICAgICAgY28uX3Rvb2x0aXBFbGVtLmFkZENsYXNzKCdqcXBsb3QtY2FudmFzT3ZlcmxheS10b29sdGlwJyk7CiAgICAgICAgY28uX3Rvb2x0aXBFbGVtLmNzcyh7cG9zaXRpb246J2Fic29sdXRlJywgZGlzcGxheTonbm9uZSd9KTsKICAgICAgICAKICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZShjby5fdG9vbHRpcEVsZW0pOwogICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgnbW91c2VsZWF2ZScsIHsgZWxlbTogY28uX3Rvb2x0aXBFbGVtIH0sIGZ1bmN0aW9uIChldikgeyBldi5kYXRhLmVsZW0uaGlkZSgpOyB9KTsKCiAgICAgICAgdmFyIGNvID0gbnVsbDsKICAgIH07CgoKICAgIGZ1bmN0aW9uIHNob3dUb29sdGlwKHBsb3QsIG9iaiwgZ3JpZHBvcywgZGF0YXBvcykgewogICAgICAgIHZhciBjbyA9IHBsb3QucGx1Z2lucy5jYW52YXNPdmVybGF5OwogICAgICAgIHZhciBlbGVtID0gY28uX3Rvb2x0aXBFbGVtOwoKICAgICAgICB2YXIgb3B0cyA9IG9iai5vcHRpb25zLCB4LCB5OwoKICAgICAgICBlbGVtLmh0bWwoJC5qcXBsb3Quc3ByaW50ZihvcHRzLnRvb2x0aXBGb3JtYXRTdHJpbmcsIGRhdGFwb3NbMF0sIGRhdGFwb3NbMV0pKTsKICAgICAgICAKICAgICAgICBzd2l0Y2ggKG9wdHMudG9vbHRpcExvY2F0aW9uKSB7CiAgICAgICAgICAgIGNhc2UgJ253JzoKICAgICAgICAgICAgICAgIHggPSBncmlkcG9zWzBdICsgcGxvdC5fZ3JpZFBhZGRpbmcubGVmdCAtIGVsZW0ub3V0ZXJXaWR0aCh0cnVlKSAtIG9wdHMudG9vbHRpcE9mZnNldDsKICAgICAgICAgICAgICAgIHkgPSBncmlkcG9zWzFdICsgcGxvdC5fZ3JpZFBhZGRpbmcudG9wIC0gb3B0cy50b29sdGlwT2Zmc2V0IC0gZWxlbS5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgIHggPSBncmlkcG9zWzBdICsgcGxvdC5fZ3JpZFBhZGRpbmcubGVmdCAtIGVsZW0ub3V0ZXJXaWR0aCh0cnVlKS8yOwogICAgICAgICAgICAgICAgeSA9IGdyaWRwb3NbMV0gKyBwbG90Ll9ncmlkUGFkZGluZy50b3AgLSBvcHRzLnRvb2x0aXBPZmZzZXQgLSBlbGVtLm91dGVySGVpZ2h0KHRydWUpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ25lJzoKICAgICAgICAgICAgICAgIHggPSBncmlkcG9zWzBdICsgcGxvdC5fZ3JpZFBhZGRpbmcubGVmdCArIG9wdHMudG9vbHRpcE9mZnNldDsKICAgICAgICAgICAgICAgIHkgPSBncmlkcG9zWzFdICsgcGxvdC5fZ3JpZFBhZGRpbmcudG9wIC0gb3B0cy50b29sdGlwT2Zmc2V0IC0gZWxlbS5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdlJzoKICAgICAgICAgICAgICAgIHggPSBncmlkcG9zWzBdICsgcGxvdC5fZ3JpZFBhZGRpbmcubGVmdCArIG9wdHMudG9vbHRpcE9mZnNldDsKICAgICAgICAgICAgICAgIHkgPSBncmlkcG9zWzFdICsgcGxvdC5fZ3JpZFBhZGRpbmcudG9wIC0gZWxlbS5vdXRlckhlaWdodCh0cnVlKS8yOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3NlJzoKICAgICAgICAgICAgICAgIHggPSBncmlkcG9zWzBdICsgcGxvdC5fZ3JpZFBhZGRpbmcubGVmdCArIG9wdHMudG9vbHRpcE9mZnNldDsKICAgICAgICAgICAgICAgIHkgPSBncmlkcG9zWzFdICsgcGxvdC5fZ3JpZFBhZGRpbmcudG9wICsgb3B0cy50b29sdGlwT2Zmc2V0OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICAgICAgeCA9IGdyaWRwb3NbMF0gKyBwbG90Ll9ncmlkUGFkZGluZy5sZWZ0IC0gZWxlbS5vdXRlcldpZHRoKHRydWUpLzI7CiAgICAgICAgICAgICAgICB5ID0gZ3JpZHBvc1sxXSArIHBsb3QuX2dyaWRQYWRkaW5nLnRvcCArIG9wdHMudG9vbHRpcE9mZnNldDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdzdyc6CiAgICAgICAgICAgICAgICB4ID0gZ3JpZHBvc1swXSArIHBsb3QuX2dyaWRQYWRkaW5nLmxlZnQgLSBlbGVtLm91dGVyV2lkdGgodHJ1ZSkgLSBvcHRzLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICB5ID0gZ3JpZHBvc1sxXSArIHBsb3QuX2dyaWRQYWRkaW5nLnRvcCArIG9wdHMudG9vbHRpcE9mZnNldDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd3JzoKICAgICAgICAgICAgICAgIHggPSBncmlkcG9zWzBdICsgcGxvdC5fZ3JpZFBhZGRpbmcubGVmdCAtIGVsZW0ub3V0ZXJXaWR0aCh0cnVlKSAtIG9wdHMudG9vbHRpcE9mZnNldDsKICAgICAgICAgICAgICAgIHkgPSBncmlkcG9zWzFdICsgcGxvdC5fZ3JpZFBhZGRpbmcudG9wIC0gZWxlbS5vdXRlckhlaWdodCh0cnVlKS8yOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNhbWUgYXMgJ253JwogICAgICAgICAgICAgICAgeCA9IGdyaWRwb3NbMF0gKyBwbG90Ll9ncmlkUGFkZGluZy5sZWZ0IC0gZWxlbS5vdXRlcldpZHRoKHRydWUpIC0gb3B0cy50b29sdGlwT2Zmc2V0OwogICAgICAgICAgICAgICAgeSA9IGdyaWRwb3NbMV0gKyBwbG90Ll9ncmlkUGFkZGluZy50b3AgLSBvcHRzLnRvb2x0aXBPZmZzZXQgLSBlbGVtLm91dGVySGVpZ2h0KHRydWUpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBlbGVtLmNzcygnbGVmdCcsIHgpOwogICAgICAgIGVsZW0uY3NzKCd0b3AnLCB5KTsKICAgICAgICBpZiAob3B0cy5mYWRlVG9vbHRpcCkgewogICAgICAgICAgICAvLyBGaXggZm9yIHN0YWNrZWQgdXAgYW5pbWF0aW9ucy4gIFRobmFua3MgVHJldm9yIQogICAgICAgICAgICBlbGVtLnN0b3AodHJ1ZSx0cnVlKS5mYWRlSW4ob3B0cy50b29sdGlwRmFkZVNwZWVkKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGVsZW0uc2hvdygpOwogICAgICAgIH0KICAgICAgICBlbGVtID0gbnVsbDsKICAgIH0KCgogICAgZnVuY3Rpb24gaXNOZWFyTGluZShwb2ludCwgbHN0YXJ0LCBsc3RvcCwgd2lkdGgpIHsKICAgICAgICAvLyByIGlzIHBvaW50IHRvIHRlc3QsIHAgYW5kIHEgYXJlIGVuZCBwb2ludHMuCiAgICAgICAgdmFyIHJ4ID0gcG9pbnRbMF07CiAgICAgICAgdmFyIHJ5ID0gcG9pbnRbMV07CiAgICAgICAgdmFyIHB4ID0gTWF0aC5yb3VuZChsc3RvcFswXSk7CiAgICAgICAgdmFyIHB5ID0gTWF0aC5yb3VuZChsc3RvcFsxXSk7CiAgICAgICAgdmFyIHF4ID0gTWF0aC5yb3VuZChsc3RhcnRbMF0pOwogICAgICAgIHZhciBxeSA9IE1hdGgucm91bmQobHN0YXJ0WzFdKTsKCiAgICAgICAgdmFyIGwgPSBNYXRoLnNxcnQoTWF0aC5wb3cocHgtcXgsIDIpICsgTWF0aC5wb3cocHktcXksIDIpKTsKCiAgICAgICAgLy8gc2NhbGUgZXJyb3IgdGVybSBieSBsZW5ndGggb2YgbGluZS4KICAgICAgICB2YXIgZXBzID0gd2lkdGgqbDsKICAgICAgICB2YXIgcmVzID0gTWF0aC5hYnMoKHF4LXB4KSAqIChyeS1weSkgLSAocXktcHkpICogKHJ4LXB4KSk7CiAgICAgICAgdmFyIHJldCA9IChyZXMgPCBlcHMpID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIHJldHVybiByZXQ7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGlzTmVhclJlY3RhbmdsZShwb2ludCwgbHN0YXJ0LCBsc3RvcCwgd2lkdGgpIHsKICAgICAgICAvLyByIGlzIHBvaW50IHRvIHRlc3QsIHAgYW5kIHEgYXJlIGVuZCBwb2ludHMuCiAgICAgICAgdmFyIHJ4ID0gcG9pbnRbMF07CiAgICAgICAgdmFyIHJ5ID0gcG9pbnRbMV07CiAgICAgICAgdmFyIHB4ID0gTWF0aC5yb3VuZChsc3RvcFswXSk7CiAgICAgICAgdmFyIHB5ID0gTWF0aC5yb3VuZChsc3RvcFsxXSk7CiAgICAgICAgdmFyIHF4ID0gTWF0aC5yb3VuZChsc3RhcnRbMF0pOwogICAgICAgIHZhciBxeSA9IE1hdGgucm91bmQobHN0YXJ0WzFdKTsKICAgICAgICAKICAgICAgICB2YXIgdGVtcDsKICAgICAgICBpZiAocHggPiBxeCkgeyB0ZW1wID0gcHg7IHB4ID0gcXg7IHF4ID0gdGVtcDsgfQogICAgICAgIGlmIChweSA+IHF5KSB7IHRlbXAgPSBweTsgcHkgPSBxeTsgcXkgPSB0ZW1wOyB9CiAgICAgICAgCiAgICAgICAgdmFyIHJldCA9IChyeCA+PSBweCAmJiByeCA8PSBxeCAmJiByeSA+PSBweSAmJiByeSA8PSBxeSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KCgogICAgZnVuY3Rpb24gaGFuZGxlTW92ZShldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICB2YXIgY28gPSBwbG90LnBsdWdpbnMuY2FudmFzT3ZlcmxheTsKICAgICAgICB2YXIgb2JqcyA9IGNvLm9iamVjdHM7CiAgICAgICAgdmFyIGwgPSBvYmpzLmxlbmd0aDsKICAgICAgICB2YXIgb2JqLCBoYXZlSGlnaGxpZ2h0PWZhbHNlOwogICAgICAgIHZhciBlbGVtOwogICAgICAgIGZvciAodmFyIGk9MDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgb2JqID0gb2Jqc1tpXTsKICAgICAgICAgICAgaWYgKG9iai5vcHRpb25zLnNob3dUb29sdGlwKSB7CiAgICAgICAgICAgIAl2YXIgbjsKICAgICAgICAgICAgICAgIGlmIChvYmoudHlwZSA9PT0gJ3JlY3RhbmdsZScpIHsKICAgICAgICAgICAgICAgICBuID0gaXNOZWFyUmVjdGFuZ2xlKFtncmlkcG9zLngsIGdyaWRwb3MueV0sIG9iai5ncmlkU3RhcnQsIG9iai5ncmlkU3RvcCwgb2JqLnRvb2x0aXBXaWR0aEZhY3Rvcik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG4gPSBpc05lYXJMaW5lKFtncmlkcG9zLngsIGdyaWRwb3MueV0sIG9iai5ncmlkU3RhcnQsIG9iai5ncmlkU3RvcCwgb2JqLnRvb2x0aXBXaWR0aEZhY3Rvcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkYXRhcG9zID0gW3Bsb3QuYXhlc1tvYmoub3B0aW9ucy54YXhpc10uc2VyaWVzX3AydShncmlkcG9zLngpLCBwbG90LmF4ZXNbb2JqLm9wdGlvbnMueWF4aXNdLnNlcmllc19wMnUoZ3JpZHBvcy55KV07CgogICAgICAgICAgICAgICAgLy8gY2FzZXM6CiAgICAgICAgICAgICAgICAvLyAgICBuZWFyIGxpbmUsIG5vIGhpZ2hsaWdodGluZwogICAgICAgICAgICAgICAgLy8gICAgbmVhciBsaW5lLCBoaWdobGl0aW5nIG9uIHRoaXMgbGluZQogICAgICAgICAgICAgICAgLy8gICAgbmVhciBsaW5lLCBoaWdobGlnaHRpbmcgYW5vdGhlciBsaW5lCiAgICAgICAgICAgICAgICAvLyAgICBub3QgbmVhciBhbnkgbGluZSwgaGlnaGxpZ2h0aW5nCiAgICAgICAgICAgICAgICAvLyAgICBub3QgbmVhciBhbnkgbGluZSwgbm8gaGlnaGxpZ2h0aW5nCgogICAgICAgICAgICAgICAgLy8gbmVhciBsaW5lLCBub3QgY3VycmVudGx5IGhpZ2hsaWdodGluZwogICAgICAgICAgICAgICAgaWYgKG4gJiYgY28uaGlnaGxpZ2h0T2JqZWN0SW5kZXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2JqLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGluZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93VG9vbHRpcChwbG90LCBvYmosIFtncmlkcG9zLngsIGdyaWRwb3MueV0sIGRhdGFwb3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdob3Jpem9udGFsTGluZSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Rhc2hlZEhvcml6b250YWxMaW5lJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dUb29sdGlwKHBsb3QsIG9iaiwgW2dyaWRwb3MueCwgb2JqLmdyaWRTdGFydFsxXV0sIFtkYXRhcG9zWzBdLCBvYmoub3B0aW9ucy55XSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3ZlcnRpY2FsTGluZSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Rhc2hlZFZlcnRpY2FsTGluZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93VG9vbHRpcChwbG90LCBvYmosIFtvYmouZ3JpZFN0YXJ0WzBdLCBncmlkcG9zLnldLCBbb2JqLm9wdGlvbnMueCwgZGF0YXBvc1sxXV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVjdGFuZ2xlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dUb29sdGlwKHBsb3QsIG9iaiwgW29iai5ncmlkU3RhcnRbMF0sIGdyaWRwb3MueV0sIFtvYmoub3B0aW9ucy54LCBkYXRhcG9zWzFdXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICBjby5oaWdobGlnaHRPYmplY3RJbmRleCA9IGk7CiAgICAgICAgICAgICAgICAgICAgaGF2ZUhpZ2hsaWdodCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gbmVhciBsaW5lLCBoaWdobGlnaHRpbmcgYW5vdGhlciBsaW5lLgogICAgICAgICAgICAgICAgZWxzZSBpZiAobiAmJiBjby5oaWdobGlnaHRPYmplY3RJbmRleCAhPT0gaSkgewogICAgICAgICAgICAgICAgICAgIC8vIHR1cm4gb2ZmIHRvb2x0aXAuCiAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGNvLl90b29sdGlwRWxlbTsKICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmZhZGVUb29sdGlwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZmFkZU91dChvYmoudG9vbHRpcEZhZGVTcGVlZCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIHR1cm4gb24gcmlnaHQgdG9vbHRpcC4KICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9iai50eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xpbmUnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1Rvb2x0aXAocGxvdCwgb2JqLCBbZ3JpZHBvcy54LCBncmlkcG9zLnldLCBkYXRhcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaG9yaXpvbnRhbExpbmUnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXNoZWRIb3Jpem9udGFsTGluZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93VG9vbHRpcChwbG90LCBvYmosIFtncmlkcG9zLngsIG9iai5ncmlkU3RhcnRbMV1dLCBbZGF0YXBvc1swXSwgb2JqLm9wdGlvbnMueV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd2ZXJ0aWNhbExpbmUnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXNoZWRWZXJ0aWNhbExpbmUnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1Rvb2x0aXAocGxvdCwgb2JqLCBbb2JqLmdyaWRTdGFydFswXSwgZ3JpZHBvcy55XSwgW29iai5vcHRpb25zLngsIGRhdGFwb3NbMV1dKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlY3RhbmdsZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93VG9vbHRpcChwbG90LCBvYmosIFtvYmouZ3JpZFN0YXJ0WzBdLCBncmlkcG9zLnldLCBbb2JqLm9wdGlvbnMueCwgZGF0YXBvc1sxXV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgY28uaGlnaGxpZ2h0T2JqZWN0SW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgIGhhdmVIaWdobGlnaHQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIG5lYXIgbGluZSwgYWxyZWFkeSBoaWdobGlnaHRpbmcgdGhpcyBsaW5lLCB1cGRhdGUKICAgICAgICAgICAgICAgIGVsc2UgaWYgKG4pIHsKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9iai50eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xpbmUnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1Rvb2x0aXAocGxvdCwgb2JqLCBbZ3JpZHBvcy54LCBncmlkcG9zLnldLCBkYXRhcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaG9yaXpvbnRhbExpbmUnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXNoZWRIb3Jpem9udGFsTGluZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93VG9vbHRpcChwbG90LCBvYmosIFtncmlkcG9zLngsIG9iai5ncmlkU3RhcnRbMV1dLCBbZGF0YXBvc1swXSwgb2JqLm9wdGlvbnMueV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd2ZXJ0aWNhbExpbmUnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXNoZWRWZXJ0aWNhbExpbmUnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1Rvb2x0aXAocGxvdCwgb2JqLCBbb2JqLmdyaWRTdGFydFswXSwgZ3JpZHBvcy55XSwgW29iai5vcHRpb25zLngsIGRhdGFwb3NbMV1dKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlY3RhbmdsZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93VG9vbHRpcChwbG90LCBvYmosIFtvYmouZ3JpZFN0YXJ0WzBdLCBncmlkcG9zLnldLCBbb2JqLm9wdGlvbnMueCwgZGF0YXBvc1sxXV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaGF2ZUhpZ2hsaWdodCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIGNoZWNrIGlmIHdlIGFyZSBoaWdobGlnaHRpbmcgYW5kIG5vdCBuZWFyIGEgbGluZSwgdHVybiBpdCBvZmYuCiAgICAgICAgaWYgKCFoYXZlSGlnaGxpZ2h0ICYmIGNvLmhpZ2hsaWdodE9iamVjdEluZGV4ICE9PSBudWxsKSB7CiAgICAgICAgICAgIGVsZW0gPSBjby5fdG9vbHRpcEVsZW07CiAgICAgICAgICAgIG9iaiA9IGNvLmdldE9iamVjdChjby5oaWdobGlnaHRPYmplY3RJbmRleCk7CiAgICAgICAgICAgIGlmIChvYmouZmFkZVRvb2x0aXApIHsKICAgICAgICAgICAgICAgIGVsZW0uZmFkZU91dChvYmoudG9vbHRpcEZhZGVTcGVlZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBlbGVtLmhpZGUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjby5oaWdobGlnaHRPYmplY3RJbmRleCA9IG51bGw7CiAgICAgICAgfQogICAgfQogICAgCiAgICAkLmpxcGxvdC5wb3N0SW5pdEhvb2tzLnB1c2goJC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wb3N0UGxvdEluaXQpOwogICAgJC5qcXBsb3QucG9zdERyYXdIb29rcy5wdXNoKCQuanFwbG90LkNhbnZhc092ZXJsYXkucG9zdFBsb3REcmF3KTsKICAgICQuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsnanFwbG90TW91c2VNb3ZlJywgaGFuZGxlTW92ZV0pOwoKfSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.canvasOverlay.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGQpe3ZhciBmPTA7ZC5qcXBsb3QuQ2FudmFzT3ZlcmxheT1mdW5jdGlvbihxKXt2YXIgbz1xfHx7fTt0aGlzLm9wdGlvbnM9e3Nob3c6ZC5qcXBsb3QuY29uZmlnLmVuYWJsZVBsdWdpbnMsZGVmZXJEcmF3OmZhbHNlfTt0aGlzLm9iamVjdHM9W107dGhpcy5vYmplY3ROYW1lcz1bXTt0aGlzLmNhbnZhcz1udWxsO3RoaXMubWFya2VyUmVuZGVyZXI9bmV3IGQuanFwbG90Lk1hcmtlclJlbmRlcmVyKHtzdHlsZToibGluZSJ9KTt0aGlzLm1hcmtlclJlbmRlcmVyLmluaXQoKTt0aGlzLmhpZ2hsaWdodE9iamVjdEluZGV4PW51bGw7aWYoby5vYmplY3RzKXt2YXIgcz1vLm9iamVjdHMscjtmb3IodmFyIHA9MDtwPHMubGVuZ3RoO3ArKyl7cj1zW3BdO2Zvcih2YXIgdCBpbiByKXtzd2l0Y2godCl7Y2FzZSJsaW5lIjp0aGlzLmFkZExpbmUoclt0XSk7YnJlYWs7Y2FzZSJob3Jpem9udGFsTGluZSI6dGhpcy5hZGRIb3Jpem9udGFsTGluZShyW3RdKTticmVhaztjYXNlImRhc2hlZEhvcml6b250YWxMaW5lIjp0aGlzLmFkZERhc2hlZEhvcml6b250YWxMaW5lKHJbdF0pO2JyZWFrO2Nhc2UidmVydGljYWxMaW5lIjp0aGlzLmFkZFZlcnRpY2FsTGluZShyW3RdKTticmVhaztjYXNlImRhc2hlZFZlcnRpY2FsTGluZSI6dGhpcy5hZGREYXNoZWRWZXJ0aWNhbExpbmUoclt0XSk7YnJlYWs7Y2FzZSJyZWN0YW5nbGUiOnRoaXMuYWRkUmVjdGFuZ2xlKHJbdF0pO2JyZWFrO2RlZmF1bHQ6YnJlYWt9fX19ZC5leHRlbmQodHJ1ZSx0aGlzLm9wdGlvbnMsbyl9O2QuanFwbG90LkNhbnZhc092ZXJsYXkucG9zdFBsb3RJbml0PWZ1bmN0aW9uKHEscCxvKXt2YXIgbj1vfHx7fTt0aGlzLnBsdWdpbnMuY2FudmFzT3ZlcmxheT1uZXcgZC5qcXBsb3QuQ2FudmFzT3ZlcmxheShuLmNhbnZhc092ZXJsYXkpfTtmdW5jdGlvbiBpKCl7dGhpcy51aWQ9bnVsbDt0aGlzLnR5cGU9bnVsbDt0aGlzLmdyaWRTdGFydD1udWxsO3RoaXMuZ3JpZFN0b3A9bnVsbDt0aGlzLnRvb2x0aXBXaWR0aEZhY3Rvcj0wO3RoaXMub3B0aW9ucz17bmFtZTpudWxsLHNob3c6dHJ1ZSxsaW5lV2lkdGg6MixsaW5lQ2FwOiJyb3VuZCIsY29sb3I6IiM2NjY2NjYiLHNoYWRvdzp0cnVlLHNoYWRvd0FuZ2xlOjQ1LHNoYWRvd09mZnNldDoxLHNoYWRvd0RlcHRoOjMsc2hhZG93QWxwaGE6IjAuMDciLHhheGlzOiJ4YXhpcyIseWF4aXM6InlheGlzIixzaG93VG9vbHRpcDpmYWxzZSxzaG93VG9vbHRpcFByZWNpc2lvbjowLjYsdG9vbHRpcExvY2F0aW9uOiJudyIsZmFkZVRvb2x0aXA6dHJ1ZSx0b29sdGlwRmFkZVNwZWVkOiJmYXN0Iix0b29sdGlwT2Zmc2V0OjQsdG9vbHRpcEZvcm1hdFN0cmluZzoiJWQsICVkIn19ZnVuY3Rpb24gbShuKXtpLmNhbGwodGhpcyk7dGhpcy50eXBlPSJyZWN0YW5nbGUiO3ZhciBvPXt4bWluOm51bGwseG1heDpudWxsLHhPZmZzZXQ6IjZweCIseG1pbk9mZnNldDpudWxsLHhtYXhPZmZzZXQ6bnVsbCx5bWluOm51bGwseW1heDpudWxsLHlPZmZzZXQ6IjZweCIseW1pbk9mZnNldDpudWxsLHltYXhPZmZzZXQ6bnVsbH07ZC5leHRlbmQodHJ1ZSx0aGlzLm9wdGlvbnMsbyxuKTtpZih0aGlzLm9wdGlvbnMuc2hvd1Rvb2x0aXBQcmVjaXNpb248MC4wMSl7dGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9uPTAuMDF9fW0ucHJvdG90eXBlPW5ldyBpKCk7bS5wcm90b3R5cGUuY29uc3RydWN0b3I9bTtmdW5jdGlvbiBiKG4pe2kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9ImxpbmUiO3ZhciBvPXtzdGFydDpbXSxzdG9wOltdfTtkLmV4dGVuZCh0cnVlLHRoaXMub3B0aW9ucyxvLG4pO2lmKHRoaXMub3B0aW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbjwwLjAxKXt0aGlzLm9wdGlvbnMuc2hvd1Rvb2x0aXBQcmVjaXNpb249MC4wMX19Yi5wcm90b3R5cGU9bmV3IGkoKTtiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1iO2Z1bmN0aW9uIGUobil7aS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iaG9yaXpvbnRhbExpbmUiO3ZhciBvPXt5Om51bGwseG1pbjpudWxsLHhtYXg6bnVsbCx4T2Zmc2V0OiI2cHgiLHhtaW5PZmZzZXQ6bnVsbCx4bWF4T2Zmc2V0Om51bGx9O2QuZXh0ZW5kKHRydWUsdGhpcy5vcHRpb25zLG8sbik7aWYodGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9uPDAuMDEpe3RoaXMub3B0aW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbj0wLjAxfX1lLnByb3RvdHlwZT1uZXcgaSgpO2UucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7ZnVuY3Rpb24gaihuKXtpLmNhbGwodGhpcyk7dGhpcy50eXBlPSJkYXNoZWRIb3Jpem9udGFsTGluZSI7dmFyIG89e3k6bnVsbCx4bWluOm51bGwseG1heDpudWxsLHhPZmZzZXQ6IjZweCIseG1pbk9mZnNldDpudWxsLHhtYXhPZmZzZXQ6bnVsbCxkYXNoUGF0dGVybjpbOCw4XX07ZC5leHRlbmQodHJ1ZSx0aGlzLm9wdGlvbnMsbyxuKTtpZih0aGlzLm9wdGlvbnMuc2hvd1Rvb2x0aXBQcmVjaXNpb248MC4wMSl7dGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9uPTAuMDF9fWoucHJvdG90eXBlPW5ldyBpKCk7ai5wcm90b3R5cGUuY29uc3RydWN0b3I9ajtmdW5jdGlvbiBjKG4pe2kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9InZlcnRpY2FsTGluZSI7dmFyIG89e3g6bnVsbCx5bWluOm51bGwseW1heDpudWxsLHlPZmZzZXQ6IjZweCIseW1pbk9mZnNldDpudWxsLHltYXhPZmZzZXQ6bnVsbH07ZC5leHRlbmQodHJ1ZSx0aGlzLm9wdGlvbnMsbyxuKTtpZih0aGlzLm9wdGlvbnMuc2hvd1Rvb2x0aXBQcmVjaXNpb248MC4wMSl7dGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9uPTAuMDF9fWMucHJvdG90eXBlPW5ldyBpKCk7Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9YztmdW5jdGlvbiBsKG4pe2kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9ImRhc2hlZFZlcnRpY2FsTGluZSI7dGhpcy5zdGFydD1udWxsO3RoaXMuc3RvcD1udWxsO3ZhciBvPXt4Om51bGwseW1pbjpudWxsLHltYXg6bnVsbCx5T2Zmc2V0OiI2cHgiLHltaW5PZmZzZXQ6bnVsbCx5bWF4T2Zmc2V0Om51bGwsZGFzaFBhdHRlcm46WzgsOF19O2QuZXh0ZW5kKHRydWUsdGhpcy5vcHRpb25zLG8sbik7aWYodGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9uPDAuMDEpe3RoaXMub3B0aW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbj0wLjAxfX1sLnByb3RvdHlwZT1uZXcgaSgpO2wucHJvdG90eXBlLmNvbnN0cnVjdG9yPWw7ZC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wcm90b3R5cGUuYWRkTGluZT1mdW5jdGlvbihvKXt2YXIgbj1uZXcgYihvKTtuLnVpZD1mKys7dGhpcy5vYmplY3RzLnB1c2gobik7dGhpcy5vYmplY3ROYW1lcy5wdXNoKG4ub3B0aW9ucy5uYW1lKX07ZC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wcm90b3R5cGUuYWRkSG9yaXpvbnRhbExpbmU9ZnVuY3Rpb24obyl7dmFyIG49bmV3IGUobyk7bi51aWQ9ZisrO3RoaXMub2JqZWN0cy5wdXNoKG4pO3RoaXMub2JqZWN0TmFtZXMucHVzaChuLm9wdGlvbnMubmFtZSl9O2QuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdG90eXBlLmFkZERhc2hlZEhvcml6b250YWxMaW5lPWZ1bmN0aW9uKG8pe3ZhciBuPW5ldyBqKG8pO24udWlkPWYrKzt0aGlzLm9iamVjdHMucHVzaChuKTt0aGlzLm9iamVjdE5hbWVzLnB1c2gobi5vcHRpb25zLm5hbWUpfTtkLmpxcGxvdC5DYW52YXNPdmVybGF5LnByb3RvdHlwZS5hZGRWZXJ0aWNhbExpbmU9ZnVuY3Rpb24obyl7dmFyIG49bmV3IGMobyk7bi51aWQ9ZisrO3RoaXMub2JqZWN0cy5wdXNoKG4pO3RoaXMub2JqZWN0TmFtZXMucHVzaChuLm9wdGlvbnMubmFtZSl9O2QuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdG90eXBlLmFkZERhc2hlZFZlcnRpY2FsTGluZT1mdW5jdGlvbihvKXt2YXIgbj1uZXcgbChvKTtuLnVpZD1mKys7dGhpcy5vYmplY3RzLnB1c2gobik7dGhpcy5vYmplY3ROYW1lcy5wdXNoKG4ub3B0aW9ucy5uYW1lKX07ZC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wcm90b3R5cGUuYWRkUmVjdGFuZ2xlPWZ1bmN0aW9uKG8pe3ZhciBuPW5ldyBtKG8pO24udWlkPWYrKzt0aGlzLm9iamVjdHMucHVzaChuKTt0aGlzLm9iamVjdE5hbWVzLnB1c2gobi5vcHRpb25zLm5hbWUpfTtkLmpxcGxvdC5DYW52YXNPdmVybGF5LnByb3RvdHlwZS5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24obil7aWYoZC50eXBlKG4pPT0ibnVtYmVyIil7dGhpcy5vYmplY3RzLnNwbGljZShuLDEpO3RoaXMub2JqZWN0TmFtZXMuc3BsaWNlKG4sMSl9ZWxzZXt2YXIgbz1kLmluQXJyYXkobix0aGlzLm9iamVjdE5hbWVzKTtpZihvIT0tMSl7dGhpcy5vYmplY3RzLnNwbGljZShvLDEpO3RoaXMub2JqZWN0TmFtZXMuc3BsaWNlKG8sMSl9fX07ZC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wcm90b3R5cGUuZ2V0T2JqZWN0PWZ1bmN0aW9uKG4pe2lmKGQudHlwZShuKT09Im51bWJlciIpe3JldHVybiB0aGlzLm9iamVjdHNbbl19ZWxzZXt2YXIgbz1kLmluQXJyYXkobix0aGlzLm9iamVjdE5hbWVzKTtpZihvIT0tMSl7cmV0dXJuIHRoaXMub2JqZWN0c1tvXX19fTtkLmpxcGxvdC5DYW52YXNPdmVybGF5LnByb3RvdHlwZS5nZXQ9ZC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wcm90b3R5cGUuZ2V0T2JqZWN0O2QuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKG4pe3RoaXMuY2FudmFzLl9jdHguY2xlYXJSZWN0KDAsMCx0aGlzLmNhbnZhcy5nZXRXaWR0aCgpLHRoaXMuY2FudmFzLmdldEhlaWdodCgpKX07ZC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihLKXt2YXIgQSx2PXRoaXMub2JqZWN0cyxGPXRoaXMubWFya2VyUmVuZGVyZXIscyxHO2lmKHRoaXMub3B0aW9ucy5zaG93KXt0aGlzLmNhbnZhcy5fY3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXMuZ2V0V2lkdGgoKSx0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKSk7Zm9yKHZhciBIPTA7SDx2Lmxlbmd0aDtIKyspe0E9dltIXTt2YXIgQj1kLmV4dGVuZCh0cnVlLHt9LEEub3B0aW9ucyk7aWYoQS5vcHRpb25zLnNob3cpe0Yuc2hhZG93PUEub3B0aW9ucy5zaGFkb3c7QS50b29sdGlwV2lkdGhGYWN0b3I9QS5vcHRpb25zLmxpbmVXaWR0aC9BLm9wdGlvbnMuc2hvd1Rvb2x0aXBQcmVjaXNpb247c3dpdGNoKEEudHlwZSl7Y2FzZSJsaW5lIjpGLnN0eWxlPSJsaW5lIjtCLmNsb3NlUGF0aD1mYWxzZTtzPVtLLmF4ZXNbQS5vcHRpb25zLnhheGlzXS5zZXJpZXNfdTJwKEEub3B0aW9ucy5zdGFydFswXSksSy5heGVzW0Eub3B0aW9ucy55YXhpc10uc2VyaWVzX3UycChBLm9wdGlvbnMuc3RhcnRbMV0pXTtHPVtLLmF4ZXNbQS5vcHRpb25zLnhheGlzXS5zZXJpZXNfdTJwKEEub3B0aW9ucy5zdG9wWzBdKSxLLmF4ZXNbQS5vcHRpb25zLnlheGlzXS5zZXJpZXNfdTJwKEEub3B0aW9ucy5zdG9wWzFdKV07QS5ncmlkU3RhcnQ9cztBLmdyaWRTdG9wPUc7Ri5kcmF3KHMsRyx0aGlzLmNhbnZhcy5fY3R4LEIpO2JyZWFrO2Nhc2UiaG9yaXpvbnRhbExpbmUiOmlmKEEub3B0aW9ucy55IT1udWxsKXtGLnN0eWxlPSJsaW5lIjtCLmNsb3NlUGF0aD1mYWxzZTt2YXIgcD1LLmF4ZXNbQS5vcHRpb25zLnhheGlzXSxTLEwsdz1LLmF4ZXNbQS5vcHRpb25zLnlheGlzXS5zZXJpZXNfdTJwKEEub3B0aW9ucy55KSxJPUEub3B0aW9ucy54bWluT2Zmc2V0fHxBLm9wdGlvbnMueE9mZnNldCx0PUEub3B0aW9ucy54bWF4T2Zmc2V0fHxBLm9wdGlvbnMueE9mZnNldDtpZihBLm9wdGlvbnMueG1pbiE9bnVsbCl7Uz1wLnNlcmllc191MnAoQS5vcHRpb25zLnhtaW4pfWVsc2V7aWYoSSE9bnVsbCl7aWYoZC50eXBlKEkpPT0ibnVtYmVyIil7Uz1wLnNlcmllc191MnAocC5taW4rSSl9ZWxzZXtpZihkLnR5cGUoSSk9PSJzdHJpbmciKXtTPXAuc2VyaWVzX3UycChwLm1pbikrcGFyc2VGbG9hdChJKX19fX1pZihBLm9wdGlvbnMueG1heCE9bnVsbCl7TD1wLnNlcmllc191MnAoQS5vcHRpb25zLnhtYXgpfWVsc2V7aWYodCE9bnVsbCl7aWYoZC50eXBlKHQpPT0ibnVtYmVyIil7TD1wLnNlcmllc191MnAocC5tYXgtdCl9ZWxzZXtpZihkLnR5cGUodCk9PSJzdHJpbmciKXtMPXAuc2VyaWVzX3UycChwLm1heCktcGFyc2VGbG9hdCh0KX19fX1pZihMIT1udWxsJiZTIT1udWxsKXtBLmdyaWRTdGFydD1bUyx3XTtBLmdyaWRTdG9wPVtMLHddO0YuZHJhdyhbUyx3XSxbTCx3XSx0aGlzLmNhbnZhcy5fY3R4LEIpfX1icmVhaztjYXNlImRhc2hlZEhvcml6b250YWxMaW5lIjp2YXIgbz1BLm9wdGlvbnMuZGFzaFBhdHRlcm47dmFyIEU9MDtmb3IodmFyIE09MDtNPG8ubGVuZ3RoO00rKyl7RSs9b1tNXX1pZihBLm9wdGlvbnMueSE9bnVsbCl7Ri5zdHlsZT0ibGluZSI7Qi5jbG9zZVBhdGg9ZmFsc2U7dmFyIHA9Sy5heGVzW0Eub3B0aW9ucy54YXhpc10sUyxMLHc9Sy5heGVzW0Eub3B0aW9ucy55YXhpc10uc2VyaWVzX3UycChBLm9wdGlvbnMueSksST1BLm9wdGlvbnMueG1pbk9mZnNldHx8QS5vcHRpb25zLnhPZmZzZXQsdD1BLm9wdGlvbnMueG1heE9mZnNldHx8QS5vcHRpb25zLnhPZmZzZXQ7aWYoQS5vcHRpb25zLnhtaW4hPW51bGwpe1M9cC5zZXJpZXNfdTJwKEEub3B0aW9ucy54bWluKX1lbHNle2lmKEkhPW51bGwpe2lmKGQudHlwZShJKT09Im51bWJlciIpe1M9cC5zZXJpZXNfdTJwKHAubWluK0kpfWVsc2V7aWYoZC50eXBlKEkpPT0ic3RyaW5nIil7Uz1wLnNlcmllc191MnAocC5taW4pK3BhcnNlRmxvYXQoSSl9fX19aWYoQS5vcHRpb25zLnhtYXghPW51bGwpe0w9cC5zZXJpZXNfdTJwKEEub3B0aW9ucy54bWF4KX1lbHNle2lmKHQhPW51bGwpe2lmKGQudHlwZSh0KT09Im51bWJlciIpe0w9cC5zZXJpZXNfdTJwKHAubWF4LXQpfWVsc2V7aWYoZC50eXBlKHQpPT0ic3RyaW5nIil7TD1wLnNlcmllc191MnAocC5tYXgpLXBhcnNlRmxvYXQodCl9fX19aWYoTCE9bnVsbCYmUyE9bnVsbCl7QS5ncmlkU3RhcnQ9W1Msd107QS5ncmlkU3RvcD1bTCx3XTt2YXIgcj1NYXRoLmNlaWwoKEwtUykvRSk7dmFyIFE9UyxPO2Zvcih2YXIgTT0wO008cjtNKyspe2Zvcih2YXIgSj0wO0o8by5sZW5ndGg7Sis9Mil7Tz1RK29bSl07Ri5kcmF3KFtRLHddLFtPLHddLHRoaXMuY2FudmFzLl9jdHgsQik7USs9b1tKXTtpZihKPG8ubGVuZ3RoLTEpe1ErPW9bSisxXX19fX19YnJlYWs7Y2FzZSJ2ZXJ0aWNhbExpbmUiOmlmKEEub3B0aW9ucy54IT1udWxsKXtGLnN0eWxlPSJsaW5lIjtCLmNsb3NlUGF0aD1mYWxzZTt2YXIgTj1LLmF4ZXNbQS5vcHRpb25zLnlheGlzXSxuLHUsej1LLmF4ZXNbQS5vcHRpb25zLnhheGlzXS5zZXJpZXNfdTJwKEEub3B0aW9ucy54KSxEPUEub3B0aW9ucy55bWluT2Zmc2V0fHxBLm9wdGlvbnMueU9mZnNldCxxPUEub3B0aW9ucy55bWF4T2Zmc2V0fHxBLm9wdGlvbnMueU9mZnNldDtpZihBLm9wdGlvbnMueW1pbiE9bnVsbCl7bj1OLnNlcmllc191MnAoQS5vcHRpb25zLnltaW4pfWVsc2V7aWYoRCE9bnVsbCl7aWYoZC50eXBlKEQpPT0ibnVtYmVyIil7bj1OLnNlcmllc191MnAoTi5taW4tRCl9ZWxzZXtpZihkLnR5cGUoRCk9PSJzdHJpbmciKXtuPU4uc2VyaWVzX3UycChOLm1pbiktcGFyc2VGbG9hdChEKX19fX1pZihBLm9wdGlvbnMueW1heCE9bnVsbCl7dT1OLnNlcmllc191MnAoQS5vcHRpb25zLnltYXgpfWVsc2V7aWYocSE9bnVsbCl7aWYoZC50eXBlKHEpPT0ibnVtYmVyIil7dT1OLnNlcmllc191MnAoTi5tYXgrcSl9ZWxzZXtpZihkLnR5cGUocSk9PSJzdHJpbmciKXt1PU4uc2VyaWVzX3UycChOLm1heCkrcGFyc2VGbG9hdChxKX19fX1pZih1IT1udWxsJiZuIT1udWxsKXtBLmdyaWRTdGFydD1beixuXTtBLmdyaWRTdG9wPVt6LHVdO0YuZHJhdyhbeixuXSxbeix1XSx0aGlzLmNhbnZhcy5fY3R4LEIpfX1icmVhaztjYXNlImRhc2hlZFZlcnRpY2FsTGluZSI6dmFyIG89QS5vcHRpb25zLmRhc2hQYXR0ZXJuO3ZhciBFPTA7Zm9yKHZhciBNPTA7TTxvLmxlbmd0aDtNKyspe0UrPW9bTV19aWYoQS5vcHRpb25zLnghPW51bGwpe0Yuc3R5bGU9ImxpbmUiO0IuY2xvc2VQYXRoPWZhbHNlO3ZhciBOPUsuYXhlc1tBLm9wdGlvbnMueWF4aXNdLG4sdSx6PUsuYXhlc1tBLm9wdGlvbnMueGF4aXNdLnNlcmllc191MnAoQS5vcHRpb25zLngpLEQ9QS5vcHRpb25zLnltaW5PZmZzZXR8fEEub3B0aW9ucy55T2Zmc2V0LHE9QS5vcHRpb25zLnltYXhPZmZzZXR8fEEub3B0aW9ucy55T2Zmc2V0O2lmKEEub3B0aW9ucy55bWluIT1udWxsKXtuPU4uc2VyaWVzX3UycChBLm9wdGlvbnMueW1pbil9ZWxzZXtpZihEIT1udWxsKXtpZihkLnR5cGUoRCk9PSJudW1iZXIiKXtuPU4uc2VyaWVzX3UycChOLm1pbi1EKX1lbHNle2lmKGQudHlwZShEKT09InN0cmluZyIpe249Ti5zZXJpZXNfdTJwKE4ubWluKS1wYXJzZUZsb2F0KEQpfX19fWlmKEEub3B0aW9ucy55bWF4IT1udWxsKXt1PU4uc2VyaWVzX3UycChBLm9wdGlvbnMueW1heCl9ZWxzZXtpZihxIT1udWxsKXtpZihkLnR5cGUocSk9PSJudW1iZXIiKXt1PU4uc2VyaWVzX3UycChOLm1heCtxKX1lbHNle2lmKGQudHlwZShxKT09InN0cmluZyIpe3U9Ti5zZXJpZXNfdTJwKE4ubWF4KStwYXJzZUZsb2F0KHEpfX19fWlmKHUhPW51bGwmJm4hPW51bGwpe0EuZ3JpZFN0YXJ0PVt6LG5dO0EuZ3JpZFN0b3A9W3osdV07dmFyIHI9TWF0aC5jZWlsKChuLXUpL0UpO3ZhciBDPSgocipFKS0obi11KSkvMjt2YXIgUT1uLE8sUCxSO2Zvcih2YXIgTT0wO008cjtNKyspe2Zvcih2YXIgSj0wO0o8by5sZW5ndGg7Sis9Mil7Tz1RLW9bSl07aWYoTzx1KXtPPXV9aWYoUTx1KXtRPXV9Ri5kcmF3KFt6LFFdLFt6LE9dLHRoaXMuY2FudmFzLl9jdHgsQik7US09b1tKXTtpZihKPG8ubGVuZ3RoLTEpe1EtPW9bSisxXX19fX19YnJlYWs7Y2FzZSJyZWN0YW5nbGUiOkYuc3R5bGU9ImxpbmUiO0IuY2xvc2VQYXRoPXRydWU7dmFyIHA9Sy5heGVzW0Eub3B0aW9ucy54YXhpc10sUyxMLHc9Sy5heGVzW0Eub3B0aW9ucy55YXhpc10uc2VyaWVzX3UycChBLm9wdGlvbnMueSksST1BLm9wdGlvbnMueG1pbk9mZnNldHx8QS5vcHRpb25zLnhPZmZzZXQsdD1BLm9wdGlvbnMueG1heE9mZnNldHx8QS5vcHRpb25zLnhPZmZzZXQ7aWYoQS5vcHRpb25zLnhtaW4hPW51bGwpe1M9cC5zZXJpZXNfdTJwKEEub3B0aW9ucy54bWluKX1lbHNle2lmKEkhPW51bGwpe2lmKGQudHlwZShJKT09Im51bWJlciIpe1M9cC5zZXJpZXNfdTJwKHAubWluK0kpfWVsc2V7aWYoZC50eXBlKEkpPT0ic3RyaW5nIil7Uz1wLnNlcmllc191MnAocC5taW4pK3BhcnNlRmxvYXQoSSl9fX19aWYoQS5vcHRpb25zLnhtYXghPW51bGwpe0w9cC5zZXJpZXNfdTJwKEEub3B0aW9ucy54bWF4KX1lbHNle2lmKHQhPW51bGwpe2lmKGQudHlwZSh0KT09Im51bWJlciIpe0w9cC5zZXJpZXNfdTJwKHAubWF4LXQpfWVsc2V7aWYoZC50eXBlKHQpPT0ic3RyaW5nIil7TD1wLnNlcmllc191MnAocC5tYXgpLXBhcnNlRmxvYXQodCl9fX19dmFyIE49Sy5heGVzW0Eub3B0aW9ucy55YXhpc10sbix1LHo9Sy5heGVzW0Eub3B0aW9ucy54YXhpc10uc2VyaWVzX3UycChBLm9wdGlvbnMueCksRD1BLm9wdGlvbnMueW1pbk9mZnNldHx8QS5vcHRpb25zLnlPZmZzZXQscT1BLm9wdGlvbnMueW1heE9mZnNldHx8QS5vcHRpb25zLnlPZmZzZXQ7aWYoQS5vcHRpb25zLnltaW4hPW51bGwpe249Ti5zZXJpZXNfdTJwKEEub3B0aW9ucy55bWluKX1lbHNle2lmKEQhPW51bGwpe2lmKGQudHlwZShEKT09Im51bWJlciIpe249Ti5zZXJpZXNfdTJwKE4ubWluLUQpfWVsc2V7aWYoZC50eXBlKEQpPT0ic3RyaW5nIil7bj1OLnNlcmllc191MnAoTi5taW4pLXBhcnNlRmxvYXQoRCl9fX19aWYoQS5vcHRpb25zLnltYXghPW51bGwpe3U9Ti5zZXJpZXNfdTJwKEEub3B0aW9ucy55bWF4KX1lbHNle2lmKHEhPW51bGwpe2lmKGQudHlwZShxKT09Im51bWJlciIpe3U9Ti5zZXJpZXNfdTJwKE4ubWF4K3EpfWVsc2V7aWYoZC50eXBlKHEpPT0ic3RyaW5nIil7dT1OLnNlcmllc191MnAoTi5tYXgpK3BhcnNlRmxvYXQocSl9fX19aWYoTCE9bnVsbCYmUyE9bnVsbCYmdSE9bnVsbCYmbiE9bnVsbCl7QS5ncmlkU3RhcnQ9W1Msbl07QS5ncmlkU3RvcD1bTCx1XTt0aGlzLmNhbnZhcy5fY3R4LmZpbGxTdHlsZT1BLm9wdGlvbnMuY29sb3I7dGhpcy5jYW52YXMuX2N0eC5maWxsUmVjdChTLG4sTC1TLHUtbil9YnJlYWs7ZGVmYXVsdDpicmVha319fX19O2QuanFwbG90LkNhbnZhc092ZXJsYXkucG9zdFBsb3REcmF3PWZ1bmN0aW9uKCl7dmFyIG89dGhpcy5wbHVnaW5zLmNhbnZhc092ZXJsYXk7aWYobyYmby5oaWdobGlnaHRDYW52YXMpe28uaGlnaGxpZ2h0Q2FudmFzLnJlc2V0Q2FudmFzKCk7by5oaWdobGlnaHRDYW52YXM9bnVsbH1vLmNhbnZhcz1uZXcgZC5qcXBsb3QuR2VuZXJpY0NhbnZhcygpO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKG8uY2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsImpxcGxvdC1vdmVybGF5Q2FudmFzLWNhbnZhcyIsdGhpcy5fcGxvdERpbWVuc2lvbnMsdGhpcykpO28uY2FudmFzLnNldENvbnRleHQoKTtpZighby5kZWZlckRyYXcpe28uZHJhdyh0aGlzKX12YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLl90b29sdGlwRWxlbT1kKG4pO249bnVsbDtvLl90b29sdGlwRWxlbS5hZGRDbGFzcygianFwbG90LWNhbnZhc092ZXJsYXktdG9vbHRpcCIpO28uX3Rvb2x0aXBFbGVtLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIn0pO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKG8uX3Rvb2x0aXBFbGVtKTt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoIm1vdXNlbGVhdmUiLHtlbGVtOm8uX3Rvb2x0aXBFbGVtfSxmdW5jdGlvbihwKXtwLmRhdGEuZWxlbS5oaWRlKCl9KTt2YXIgbz1udWxsfTtmdW5jdGlvbiBrKHMscSxyLHApe3ZhciB1PXMucGx1Z2lucy5jYW52YXNPdmVybGF5O3ZhciBvPXUuX3Rvb2x0aXBFbGVtO3ZhciBuPXEub3B0aW9ucyx2LHQ7by5odG1sKGQuanFwbG90LnNwcmludGYobi50b29sdGlwRm9ybWF0U3RyaW5nLHBbMF0scFsxXSkpO3N3aXRjaChuLnRvb2x0aXBMb2NhdGlvbil7Y2FzZSJudyI6dj1yWzBdK3MuX2dyaWRQYWRkaW5nLmxlZnQtby5vdXRlcldpZHRoKHRydWUpLW4udG9vbHRpcE9mZnNldDt0PXJbMV0rcy5fZ3JpZFBhZGRpbmcudG9wLW4udG9vbHRpcE9mZnNldC1vLm91dGVySGVpZ2h0KHRydWUpO2JyZWFrO2Nhc2UibiI6dj1yWzBdK3MuX2dyaWRQYWRkaW5nLmxlZnQtby5vdXRlcldpZHRoKHRydWUpLzI7dD1yWzFdK3MuX2dyaWRQYWRkaW5nLnRvcC1uLnRvb2x0aXBPZmZzZXQtby5vdXRlckhlaWdodCh0cnVlKTticmVhaztjYXNlIm5lIjp2PXJbMF0rcy5fZ3JpZFBhZGRpbmcubGVmdCtuLnRvb2x0aXBPZmZzZXQ7dD1yWzFdK3MuX2dyaWRQYWRkaW5nLnRvcC1uLnRvb2x0aXBPZmZzZXQtby5vdXRlckhlaWdodCh0cnVlKTticmVhaztjYXNlImUiOnY9clswXStzLl9ncmlkUGFkZGluZy5sZWZ0K24udG9vbHRpcE9mZnNldDt0PXJbMV0rcy5fZ3JpZFBhZGRpbmcudG9wLW8ub3V0ZXJIZWlnaHQodHJ1ZSkvMjticmVhaztjYXNlInNlIjp2PXJbMF0rcy5fZ3JpZFBhZGRpbmcubGVmdCtuLnRvb2x0aXBPZmZzZXQ7dD1yWzFdK3MuX2dyaWRQYWRkaW5nLnRvcCtuLnRvb2x0aXBPZmZzZXQ7YnJlYWs7Y2FzZSJzIjp2PXJbMF0rcy5fZ3JpZFBhZGRpbmcubGVmdC1vLm91dGVyV2lkdGgodHJ1ZSkvMjt0PXJbMV0rcy5fZ3JpZFBhZGRpbmcudG9wK24udG9vbHRpcE9mZnNldDticmVhaztjYXNlInN3Ijp2PXJbMF0rcy5fZ3JpZFBhZGRpbmcubGVmdC1vLm91dGVyV2lkdGgodHJ1ZSktbi50b29sdGlwT2Zmc2V0O3Q9clsxXStzLl9ncmlkUGFkZGluZy50b3Arbi50b29sdGlwT2Zmc2V0O2JyZWFrO2Nhc2UidyI6dj1yWzBdK3MuX2dyaWRQYWRkaW5nLmxlZnQtby5vdXRlcldpZHRoKHRydWUpLW4udG9vbHRpcE9mZnNldDt0PXJbMV0rcy5fZ3JpZFBhZGRpbmcudG9wLW8ub3V0ZXJIZWlnaHQodHJ1ZSkvMjticmVhaztkZWZhdWx0OnY9clswXStzLl9ncmlkUGFkZGluZy5sZWZ0LW8ub3V0ZXJXaWR0aCh0cnVlKS1uLnRvb2x0aXBPZmZzZXQ7dD1yWzFdK3MuX2dyaWRQYWRkaW5nLnRvcC1uLnRvb2x0aXBPZmZzZXQtby5vdXRlckhlaWdodCh0cnVlKTticmVha31vLmNzcygibGVmdCIsdik7by5jc3MoInRvcCIsdCk7aWYobi5mYWRlVG9vbHRpcCl7by5zdG9wKHRydWUsdHJ1ZSkuZmFkZUluKG4udG9vbHRpcEZhZGVTcGVlZCl9ZWxzZXtvLnNob3coKX1vPW51bGx9ZnVuY3Rpb24gaCh6LHEscyxwKXt2YXIgbz16WzBdO3ZhciBuPXpbMV07dmFyIHk9TWF0aC5yb3VuZChzWzBdKTt2YXIgeD1NYXRoLnJvdW5kKHNbMV0pO3ZhciB1PU1hdGgucm91bmQocVswXSk7dmFyIHQ9TWF0aC5yb3VuZChxWzFdKTt2YXIgcj1NYXRoLnNxcnQoTWF0aC5wb3coeS11LDIpK01hdGgucG93KHgtdCwyKSk7dmFyIEE9cCpyO3ZhciB3PU1hdGguYWJzKCh1LXkpKihuLXgpLSh0LXgpKihvLXkpKTt2YXIgdj0odzxBKT90cnVlOmZhbHNlO3JldHVybiB2fWZ1bmN0aW9uIGcoeCxxLHIscCl7dmFyIG89eFswXTt2YXIgbj14WzFdO3ZhciB3PU1hdGgucm91bmQoclswXSk7dmFyIHY9TWF0aC5yb3VuZChyWzFdKTt2YXIgdD1NYXRoLnJvdW5kKHFbMF0pO3ZhciBzPU1hdGgucm91bmQocVsxXSk7dmFyIHk7aWYodz50KXt5PXc7dz10O3Q9eX1pZih2PnMpe3k9djt2PXM7cz15fXZhciB1PShvPj13JiZvPD10JiZuPj12JiZuPD1zKTtyZXR1cm4gdX1mdW5jdGlvbiBhKHosdyxyLEEseCl7dmFyIHk9eC5wbHVnaW5zLmNhbnZhc092ZXJsYXk7dmFyIHY9eS5vYmplY3RzO3ZhciBzPXYubGVuZ3RoO3ZhciB1LG89ZmFsc2U7dmFyIHE7Zm9yKHZhciB0PTA7dDxzO3QrKyl7dT12W3RdO2lmKHUub3B0aW9ucy5zaG93VG9vbHRpcCl7dmFyIHA7aWYodS50eXBlPT09InJlY3RhbmdsZSIpe3A9Zyhbdy54LHcueV0sdS5ncmlkU3RhcnQsdS5ncmlkU3RvcCx1LnRvb2x0aXBXaWR0aEZhY3Rvcil9ZWxzZXtwPWgoW3cueCx3LnldLHUuZ3JpZFN0YXJ0LHUuZ3JpZFN0b3AsdS50b29sdGlwV2lkdGhGYWN0b3IpfXI9W3guYXhlc1t1Lm9wdGlvbnMueGF4aXNdLnNlcmllc19wMnUody54KSx4LmF4ZXNbdS5vcHRpb25zLnlheGlzXS5zZXJpZXNfcDJ1KHcueSldO2lmKHAmJnkuaGlnaGxpZ2h0T2JqZWN0SW5kZXg9PW51bGwpe3N3aXRjaCh1LnR5cGUpe2Nhc2UibGluZSI6ayh4LHUsW3cueCx3LnldLHIpO2JyZWFrO2Nhc2UiaG9yaXpvbnRhbExpbmUiOmNhc2UiZGFzaGVkSG9yaXpvbnRhbExpbmUiOmsoeCx1LFt3LngsdS5ncmlkU3RhcnRbMV1dLFtyWzBdLHUub3B0aW9ucy55XSk7YnJlYWs7Y2FzZSJ2ZXJ0aWNhbExpbmUiOmNhc2UiZGFzaGVkVmVydGljYWxMaW5lIjprKHgsdSxbdS5ncmlkU3RhcnRbMF0sdy55XSxbdS5vcHRpb25zLngsclsxXV0pO2JyZWFrO2Nhc2UicmVjdGFuZ2xlIjprKHgsdSxbdS5ncmlkU3RhcnRbMF0sdy55XSxbdS5vcHRpb25zLngsclsxXV0pO2JyZWFrO2RlZmF1bHQ6YnJlYWt9eS5oaWdobGlnaHRPYmplY3RJbmRleD10O289dHJ1ZTticmVha31lbHNle2lmKHAmJnkuaGlnaGxpZ2h0T2JqZWN0SW5kZXghPT10KXtxPXkuX3Rvb2x0aXBFbGVtO2lmKHUuZmFkZVRvb2x0aXApe3EuZmFkZU91dCh1LnRvb2x0aXBGYWRlU3BlZWQpfWVsc2V7cS5oaWRlKCl9c3dpdGNoKHUudHlwZSl7Y2FzZSJsaW5lIjprKHgsdSxbdy54LHcueV0scik7YnJlYWs7Y2FzZSJob3Jpem9udGFsTGluZSI6Y2FzZSJkYXNoZWRIb3Jpem9udGFsTGluZSI6ayh4LHUsW3cueCx1LmdyaWRTdGFydFsxXV0sW3JbMF0sdS5vcHRpb25zLnldKTticmVhaztjYXNlInZlcnRpY2FsTGluZSI6Y2FzZSJkYXNoZWRWZXJ0aWNhbExpbmUiOmsoeCx1LFt1LmdyaWRTdGFydFswXSx3LnldLFt1Lm9wdGlvbnMueCxyWzFdXSk7YnJlYWs7Y2FzZSJyZWN0YW5nbGUiOmsoeCx1LFt1LmdyaWRTdGFydFswXSx3LnldLFt1Lm9wdGlvbnMueCxyWzFdXSk7YnJlYWs7ZGVmYXVsdDpicmVha315LmhpZ2hsaWdodE9iamVjdEluZGV4PXQ7bz10cnVlO2JyZWFrfWVsc2V7aWYocCl7c3dpdGNoKHUudHlwZSl7Y2FzZSJsaW5lIjprKHgsdSxbdy54LHcueV0scik7YnJlYWs7Y2FzZSJob3Jpem9udGFsTGluZSI6Y2FzZSJkYXNoZWRIb3Jpem9udGFsTGluZSI6ayh4LHUsW3cueCx1LmdyaWRTdGFydFsxXV0sW3JbMF0sdS5vcHRpb25zLnldKTticmVhaztjYXNlInZlcnRpY2FsTGluZSI6Y2FzZSJkYXNoZWRWZXJ0aWNhbExpbmUiOmsoeCx1LFt1LmdyaWRTdGFydFswXSx3LnldLFt1Lm9wdGlvbnMueCxyWzFdXSk7YnJlYWs7Y2FzZSJyZWN0YW5nbGUiOmsoeCx1LFt1LmdyaWRTdGFydFswXSx3LnldLFt1Lm9wdGlvbnMueCxyWzFdXSk7YnJlYWs7ZGVmYXVsdDpicmVha31vPXRydWU7YnJlYWt9fX19fWlmKCFvJiZ5LmhpZ2hsaWdodE9iamVjdEluZGV4IT09bnVsbCl7cT15Ll90b29sdGlwRWxlbTt1PXkuZ2V0T2JqZWN0KHkuaGlnaGxpZ2h0T2JqZWN0SW5kZXgpO2lmKHUuZmFkZVRvb2x0aXApe3EuZmFkZU91dCh1LnRvb2x0aXBGYWRlU3BlZWQpfWVsc2V7cS5oaWRlKCl9eS5oaWdobGlnaHRPYmplY3RJbmRleD1udWxsfX1kLmpxcGxvdC5wb3N0SW5pdEhvb2tzLnB1c2goZC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wb3N0UGxvdEluaXQpO2QuanFwbG90LnBvc3REcmF3SG9va3MucHVzaChkLmpxcGxvdC5DYW52YXNPdmVybGF5LnBvc3RQbG90RHJhdyk7ZC5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLnB1c2goWyJqcXBsb3RNb3VzZU1vdmUiLGFdKX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.canvasTextRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICoKICogaW5jbHVkZWQganNEYXRlIGxpYnJhcnkgYnkgQ2hyaXMgTGVvbmVsbG86CiAqCiAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEzIENocmlzIExlb25lbGxvCiAqCiAqIGpzRGF0ZSBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gYWxsIHBlcnNvbmFsIG9yIGNvbW1lcmNpYWwgcHJvamVjdHMgCiAqIHVuZGVyIGJvdGggdGhlIE1JVCBhbmQgR1BMIHZlcnNpb24gMi4wIGxpY2Vuc2VzLiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiAKICogY2hvb3NlIHRoZSBsaWNlbnNlIHRoYXQgYmVzdCBzdWl0cyB5b3VyIHByb2plY3QgYW5kIHVzZSBpdCBhY2NvcmRpbmdseS4KICoKICoganNEYXRlIGJvcnJvd3MgbWFueSBjb25jZXB0cyBhbmQgaWRlYXMgZnJvbSB0aGUgRGF0ZSBJbnN0YW5jZSAKICogTWV0aG9kcyBieSBLZW4gU255ZGVyIGFsb25nIHdpdGggc29tZSBwYXJ0cyBvZiBLZW4ncyBhY3R1YWwgY29kZS4KICogCiAqIEtlbidzIG9yaWdpbmFsIERhdGUgSW5zdGFuY2UgTWV0aG9kcyBhbmQgY29weXJpZ2h0IG5vdGljZToKICogCiAqIEtlbiBTbnlkZXIgKGtlbiBkIHNueWRlciBhdCBnbWFpbCBkb3QgY29tKQogKiAyMDA4LTA5LTEwCiAqIHZlcnNpb24gMi4wLjIgKGh0dHA6Ly9rZW5kc255ZGVyLmNvbS9zYW5kYm94L2RhdGUvKSAgICAgCiAqIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gTGljZW5zZSAzLjAgKGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMC8pCiAqCiAqIGpxcGxvdFRvSW1hZ2UgZnVuY3Rpb24gYmFzZWQgb24gTGFycnkgU2lkZW4ncyBleHBvcnQtanFwbG90LXRvLXBuZy5qcy4KICogTGFycnkgaGFzIGdlbmVyb3VzbHkgZ2l2ZW4gcGVybWlzc2lvbiB0byBhZGFwdCBoaXMgY29kZSBmb3IgaW5jbHVzaW9uCiAqIGludG8ganFQbG90LgogKgogKiBMYXJyeSdzIG9yaWdpbmFsIGNvZGUgY2FuIGJlIGZvdW5kIGhlcmU6CiAqCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9sc2lkZW4vZXhwb3J0LWpxcGxvdC10by1wbmcKICogCiAqIAogKi8KCihmdW5jdGlvbigkKSB7ICAgIAogICAgLy8gVGhpcyBjb2RlIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgY2FudmFzdGV4dC5qcyBjb2RlLCBjb3B5cmlnaHQgYmVsb3c6CiAgICAvLwogICAgLy8gVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluIGJ5IEppbSBTdHVkdCwgMjAwNy4KICAgIC8vIEhlIG1heSBrZWVwIHNvbWUgc29ydCBvZiB1cCB0byBkYXRlIGNvcHkgYXQgaHR0cDovL3d3dy5mZWRlcmF0ZWQuY29tL35qaW0vY2FudmFzdGV4dC8KICAgIC8vCiAgICAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIgPSBmdW5jdGlvbihvcHRpb25zKXsKICAgICAgICB0aGlzLmZvbnRTdHlsZSA9ICdub3JtYWwnOyAgLy8gbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWUgW25vdCBpbXBsZW1lbnRlZF0KICAgICAgICB0aGlzLmZvbnRWYXJpYW50ID0gJ25vcm1hbCc7ICAgIC8vIG5vcm1hbCwgc21hbGwgY2FwcyBbbm90IGltcGxlbWVudGVkXQogICAgICAgIHRoaXMuZm9udFdlaWdodCA9ICdub3JtYWwnOyAvLyBub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlciwgMTAwIC0gOTAwCiAgICAgICAgdGhpcy5mb250U2l6ZSA9ICcxMHB4JzsgCiAgICAgICAgdGhpcy5mb250RmFtaWx5ID0gJ3NhbnMtc2VyaWYnOwogICAgICAgIHRoaXMuZm9udFN0cmV0Y2ggPSAxLjA7CiAgICAgICAgdGhpcy5maWxsU3R5bGUgPSAnIzY2NjY2Nic7CiAgICAgICAgdGhpcy5hbmdsZSA9IDA7CiAgICAgICAgdGhpcy50ZXh0QWxpZ24gPSAnc3RhcnQnOwogICAgICAgIHRoaXMudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnOwogICAgICAgIHRoaXMudGV4dDsKICAgICAgICB0aGlzLndpZHRoOwogICAgICAgIHRoaXMuaGVpZ2h0OwogICAgICAgIHRoaXMucHQycHggPSAxLjI4OwoKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgICAgICB0aGlzLm5vcm1hbGl6ZWRGb250U2l6ZSA9IHRoaXMubm9ybWFsaXplRm9udFNpemUodGhpcy5mb250U2l6ZSk7CiAgICAgICAgdGhpcy5zZXRIZWlnaHQoKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkNhbnZhc1RleHRSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgICAgICB0aGlzLm5vcm1hbGl6ZWRGb250U2l6ZSA9IHRoaXMubm9ybWFsaXplRm9udFNpemUodGhpcy5mb250U2l6ZSk7CiAgICAgICAgdGhpcy5zZXRIZWlnaHQoKTsKICAgIH07CiAgICAKICAgIC8vIGNvbnZlcnQgY3NzIHNwZWMgaW50byBwb2ludCBzaXplCiAgICAvLyByZXR1cm5zIGZsb2F0CiAgICAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLm5vcm1hbGl6ZUZvbnRTaXplID0gZnVuY3Rpb24oc3opIHsKICAgICAgICBzeiA9IFN0cmluZyhzeik7CiAgICAgICAgdmFyIG4gPSBwYXJzZUZsb2F0KHN6KTsKICAgICAgICBpZiAoc3ouaW5kZXhPZigncHgnKSA+IC0xKSB7CiAgICAgICAgICAgIHJldHVybiBuL3RoaXMucHQycHg7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHN6LmluZGV4T2YoJ3B0JykgPiAtMSkgewogICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoc3ouaW5kZXhPZignZW0nKSA+IC0xKSB7CiAgICAgICAgICAgIHJldHVybiBuKjEyOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChzei5pbmRleE9mKCclJykgPiAtMSkgewogICAgICAgICAgICByZXR1cm4gbioxMi8xMDA7CiAgICAgICAgfQogICAgICAgIC8vIGRlZmF1bHQgdG8gcGl4ZWxzOwogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gbi90aGlzLnB0MnB4OwogICAgICAgIH0KICAgIH07CiAgICAKICAgIAogICAgJC5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5mb250V2VpZ2h0MkZsb2F0ID0gZnVuY3Rpb24odykgewogICAgICAgIC8vIHcgPSBub3JtYWwgfCBib2xkIHwgYm9sZGVyIHwgbGlnaHRlciB8IDEwMCB8IDIwMCB8IDMwMCB8IDQwMCB8IDUwMCB8IDYwMCB8IDcwMCB8IDgwMCB8IDkwMAogICAgICAgIC8vIHJldHVybiB2YWx1ZXMgYWRqdXN0ZWQgZm9yIEhlcnNoZXkgZm9udC4KICAgICAgICBpZiAoTnVtYmVyKHcpKSB7CiAgICAgICAgICAgIHJldHVybiB3LzQwMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHN3aXRjaCAodykgewogICAgICAgICAgICAgICAgY2FzZSAnbm9ybWFsJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2JvbGQnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAxLjc1OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnYm9sZGVyJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMi4yNTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2xpZ2h0ZXInOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjc1OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gICAKICAgICAgICB9CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy50ZXh0OwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odCwgY3R4KSB7CiAgICAgICAgdGhpcy50ZXh0ID0gdDsKICAgICAgICB0aGlzLnNldFdpZHRoKGN0eCk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmdldFdpZHRoID0gZnVuY3Rpb24oY3R4KSB7CiAgICAgICAgcmV0dXJuIHRoaXMud2lkdGg7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLnNldFdpZHRoID0gZnVuY3Rpb24oY3R4LCB3KSB7CiAgICAgICAgaWYgKCF3KSB7CiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLm1lYXN1cmUoY3R4LCB0aGlzLnRleHQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy53aWR0aCA9IHc7ICAgCiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgfTsKICAgIAogICAgLy8gcmV0dXJuIGhlaWdodCBpbiBwaXhlbHMuCiAgICAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmdldEhlaWdodCA9IGZ1bmN0aW9uKGN0eCkgewogICAgICAgIHJldHVybiB0aGlzLmhlaWdodDsKICAgIH07CiAgICAKICAgIC8vIHcgLSBoZWlnaHQgaW4gcHQKICAgIC8vIHNldCBoZWlnaCBpbiBweAogICAgJC5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5zZXRIZWlnaHQgPSBmdW5jdGlvbih3KSB7CiAgICAgICAgaWYgKCF3KSB7CiAgICAgICAgICAgIC8vaGVpZ2h0ID0gdGhpcy5mb250U2l6ZSAvMC43NTsKICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLm5vcm1hbGl6ZWRGb250U2l6ZSAqIHRoaXMucHQycHg7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0aGlzLmhlaWdodCA9IHc7ICAgCiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgfTsKCiAgICAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmxldHRlciA9IGZ1bmN0aW9uIChjaCkKICAgIHsKICAgICAgICByZXR1cm4gdGhpcy5sZXR0ZXJzW2NoXTsKICAgIH07CgogICAgJC5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5hc2NlbnQgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplZEZvbnRTaXplOwogICAgfTsKCiAgICAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmRlc2NlbnQgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuIDcuMCp0aGlzLm5vcm1hbGl6ZWRGb250U2l6ZS8yNS4wOwogICAgfTsKCiAgICAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLm1lYXN1cmUgPSBmdW5jdGlvbihjdHgsIHN0cikKICAgIHsKICAgICAgICB2YXIgdG90YWwgPSAwOwogICAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoOwogCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICB2YXIgYyA9IHRoaXMubGV0dGVyKHN0ci5jaGFyQXQoaSkpOwogICAgICAgICAgICBpZiAoYykgewogICAgICAgICAgICAgICAgdG90YWwgKz0gYy53aWR0aCAqIHRoaXMubm9ybWFsaXplZEZvbnRTaXplIC8gMjUuMCAqIHRoaXMuZm9udFN0cmV0Y2g7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRvdGFsOwogICAgfTsKCiAgICAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihjdHgsc3RyKQogICAgewogICAgICAgIHZhciB4ID0gMDsKICAgICAgICAvLyBsZWF2ZSByb29tIGF0IGJvdHRvbSBmb3IgZGVzY2VuZGVycy4KICAgICAgICB2YXIgeSA9IHRoaXMuaGVpZ2h0KjAuNzI7CiAgICAgICAgIHZhciB0b3RhbCA9IDA7CiAgICAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoOwogICAgICAgICB2YXIgbWFnID0gdGhpcy5ub3JtYWxpemVkRm9udFNpemUgLyAyNS4wOwoKICAgICAgICAgY3R4LnNhdmUoKTsKICAgICAgICAgdmFyIHR4LCB0eTsKICAgICAgICAgCiAgICAgICAgIC8vIDFzdCBxdWFkcmFudAogICAgICAgICBpZiAoKC1NYXRoLlBJLzIgPD0gdGhpcy5hbmdsZSAmJiB0aGlzLmFuZ2xlIDw9IDApIHx8IChNYXRoLlBJKjMvMiA8PSB0aGlzLmFuZ2xlICYmIHRoaXMuYW5nbGUgPD0gTWF0aC5QSSoyKSkgewogICAgICAgICAgICAgdHggPSAwOwogICAgICAgICAgICAgdHkgPSAtTWF0aC5zaW4odGhpcy5hbmdsZSkgKiB0aGlzLndpZHRoOwogICAgICAgICB9CiAgICAgICAgIC8vIDR0aCBxdWFkcmFudAogICAgICAgICBlbHNlIGlmICgoMCA8IHRoaXMuYW5nbGUgJiYgdGhpcy5hbmdsZSA8PSBNYXRoLlBJLzIpIHx8ICgtTWF0aC5QSSoyIDw9IHRoaXMuYW5nbGUgJiYgdGhpcy5hbmdsZSA8PSAtTWF0aC5QSSozLzIpKSB7CiAgICAgICAgICAgICB0eCA9IE1hdGguc2luKHRoaXMuYW5nbGUpICogdGhpcy5oZWlnaHQ7CiAgICAgICAgICAgICB0eSA9IDA7CiAgICAgICAgIH0KICAgICAgICAgLy8gMm5kIHF1YWRyYW50CiAgICAgICAgIGVsc2UgaWYgKCgtTWF0aC5QSSA8IHRoaXMuYW5nbGUgJiYgdGhpcy5hbmdsZSA8IC1NYXRoLlBJLzIpIHx8IChNYXRoLlBJIDw9IHRoaXMuYW5nbGUgJiYgdGhpcy5hbmdsZSA8PSBNYXRoLlBJKjMvMikpIHsKICAgICAgICAgICAgIHR4ID0gLU1hdGguY29zKHRoaXMuYW5nbGUpICogdGhpcy53aWR0aDsKICAgICAgICAgICAgIHR5ID0gLU1hdGguc2luKHRoaXMuYW5nbGUpICogdGhpcy53aWR0aCAtIE1hdGguY29zKHRoaXMuYW5nbGUpICogdGhpcy5oZWlnaHQ7CiAgICAgICAgIH0KICAgICAgICAgLy8gM3JkIHF1YWRyYW50CiAgICAgICAgIGVsc2UgaWYgKCgtTWF0aC5QSSozLzIgPCB0aGlzLmFuZ2xlICYmIHRoaXMuYW5nbGUgPCBNYXRoLlBJKSB8fCAoTWF0aC5QSS8yIDwgdGhpcy5hbmdsZSAmJiB0aGlzLmFuZ2xlIDwgTWF0aC5QSSkpIHsKICAgICAgICAgICAgIHR4ID0gTWF0aC5zaW4odGhpcy5hbmdsZSkgKiB0aGlzLmhlaWdodCAtIE1hdGguY29zKHRoaXMuYW5nbGUpKnRoaXMud2lkdGg7CiAgICAgICAgICAgICB0eSA9IC1NYXRoLmNvcyh0aGlzLmFuZ2xlKSAqIHRoaXMuaGVpZ2h0OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmZpbGxTdHlsZTsKICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuZmlsbFN0eWxlOwogICAgICAgICBjdHgudHJhbnNsYXRlKHR4LCB0eSk7CiAgICAgICAgIGN0eC5yb3RhdGUodGhpcy5hbmdsZSk7CiAgICAgICAgIGN0eC5saW5lQ2FwID0gInJvdW5kIjsKICAgICAgICAgLy8gbXVsdGlwbGllciB3YXMgMi4wCiAgICAgICAgIHZhciBmYWN0ID0gKHRoaXMubm9ybWFsaXplZEZvbnRTaXplID4gMzApID8gMi4wIDogMiArICgzMCAtIHRoaXMubm9ybWFsaXplZEZvbnRTaXplKS8yMDsKICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGZhY3QgKiBtYWcgKiB0aGlzLmZvbnRXZWlnaHQyRmxvYXQodGhpcy5mb250V2VpZ2h0KTsKICAgICAgICAgCiAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIHZhciBjID0gdGhpcy5sZXR0ZXIoIHN0ci5jaGFyQXQoaSkpOwogICAgICAgICAgICBpZiAoICFjKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwoKICAgICAgICAgICAgdmFyIHBlblVwID0gMTsKICAgICAgICAgICAgdmFyIG5lZWRTdHJva2UgPSAwOwogICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDA7IGogPCBjLnBvaW50cy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgIHZhciBhID0gYy5wb2ludHNbal07CiAgICAgICAgICAgICAgaWYgKCBhWzBdID09IC0xICYmIGFbMV0gPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgcGVuVXAgPSAxOwogICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKCBwZW5VcCkgewogICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKCB4ICsgYVswXSptYWcqdGhpcy5mb250U3RyZXRjaCwgeSAtIGFbMV0qbWFnKTsKICAgICAgICAgICAgICAgICAgcGVuVXAgPSBmYWxzZTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBjdHgubGluZVRvKCB4ICsgYVswXSptYWcqdGhpcy5mb250U3RyZXRjaCwgeSAtIGFbMV0qbWFnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICB4ICs9IGMud2lkdGgqbWFnKnRoaXMuZm9udFN0cmV0Y2g7CiAgICAgICAgIH0KICAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuIHRvdGFsOwogICAgfTsKCiAgICAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmxldHRlcnMgPSB7CiAgICAgICAgICcgJzogeyB3aWR0aDogMTYsIHBvaW50czogW10gfSwKICAgICAgICAgJyEnOiB7IHdpZHRoOiAxMCwgcG9pbnRzOiBbWzUsMjFdLFs1LDddLFstMSwtMV0sWzUsMl0sWzQsMV0sWzUsMF0sWzYsMV0sWzUsMl1dIH0sCiAgICAgICAgICciJzogeyB3aWR0aDogMTYsIHBvaW50czogW1s0LDIxXSxbNCwxNF0sWy0xLC0xXSxbMTIsMjFdLFsxMiwxNF1dIH0sCiAgICAgICAgICcjJzogeyB3aWR0aDogMjEsIHBvaW50czogW1sxMSwyNV0sWzQsLTddLFstMSwtMV0sWzE3LDI1XSxbMTAsLTddLFstMSwtMV0sWzQsMTJdLFsxOCwxMl0sWy0xLC0xXSxbMyw2XSxbMTcsNl1dIH0sCiAgICAgICAgICckJzogeyB3aWR0aDogMjAsIHBvaW50czogW1s4LDI1XSxbOCwtNF0sWy0xLC0xXSxbMTIsMjVdLFsxMiwtNF0sWy0xLC0xXSxbMTcsMThdLFsxNSwyMF0sWzEyLDIxXSxbOCwyMV0sWzUsMjBdLFszLDE4XSxbMywxNl0sWzQsMTRdLFs1LDEzXSxbNywxMl0sWzEzLDEwXSxbMTUsOV0sWzE2LDhdLFsxNyw2XSxbMTcsM10sWzE1LDFdLFsxMiwwXSxbOCwwXSxbNSwxXSxbMywzXV0gfSwKICAgICAgICAgJyUnOiB7IHdpZHRoOiAyNCwgcG9pbnRzOiBbWzIxLDIxXSxbMywwXSxbLTEsLTFdLFs4LDIxXSxbMTAsMTldLFsxMCwxN10sWzksMTVdLFs3LDE0XSxbNSwxNF0sWzMsMTZdLFszLDE4XSxbNCwyMF0sWzYsMjFdLFs4LDIxXSxbMTAsMjBdLFsxMywxOV0sWzE2LDE5XSxbMTksMjBdLFsyMSwyMV0sWy0xLC0xXSxbMTcsN10sWzE1LDZdLFsxNCw0XSxbMTQsMl0sWzE2LDBdLFsxOCwwXSxbMjAsMV0sWzIxLDNdLFsyMSw1XSxbMTksN10sWzE3LDddXSB9LAogICAgICAgICAnJic6IHsgd2lkdGg6IDI2LCBwb2ludHM6IFtbMjMsMTJdLFsyMywxM10sWzIyLDE0XSxbMjEsMTRdLFsyMCwxM10sWzE5LDExXSxbMTcsNl0sWzE1LDNdLFsxMywxXSxbMTEsMF0sWzcsMF0sWzUsMV0sWzQsMl0sWzMsNF0sWzMsNl0sWzQsOF0sWzUsOV0sWzEyLDEzXSxbMTMsMTRdLFsxNCwxNl0sWzE0LDE4XSxbMTMsMjBdLFsxMSwyMV0sWzksMjBdLFs4LDE4XSxbOCwxNl0sWzksMTNdLFsxMSwxMF0sWzE2LDNdLFsxOCwxXSxbMjAsMF0sWzIyLDBdLFsyMywxXSxbMjMsMl1dIH0sCiAgICAgICAgICdcJyc6IHsgd2lkdGg6IDEwLCBwb2ludHM6IFtbNSwxOV0sWzQsMjBdLFs1LDIxXSxbNiwyMF0sWzYsMThdLFs1LDE2XSxbNCwxNV1dIH0sCiAgICAgICAgICcoJzogeyB3aWR0aDogMTQsIHBvaW50czogW1sxMSwyNV0sWzksMjNdLFs3LDIwXSxbNSwxNl0sWzQsMTFdLFs0LDddLFs1LDJdLFs3LC0yXSxbOSwtNV0sWzExLC03XV0gfSwKICAgICAgICAgJyknOiB7IHdpZHRoOiAxNCwgcG9pbnRzOiBbWzMsMjVdLFs1LDIzXSxbNywyMF0sWzksMTZdLFsxMCwxMV0sWzEwLDddLFs5LDJdLFs3LC0yXSxbNSwtNV0sWzMsLTddXSB9LAogICAgICAgICAnKic6IHsgd2lkdGg6IDE2LCBwb2ludHM6IFtbOCwyMV0sWzgsOV0sWy0xLC0xXSxbMywxOF0sWzEzLDEyXSxbLTEsLTFdLFsxMywxOF0sWzMsMTJdXSB9LAogICAgICAgICAnKyc6IHsgd2lkdGg6IDI2LCBwb2ludHM6IFtbMTMsMThdLFsxMywwXSxbLTEsLTFdLFs0LDldLFsyMiw5XV0gfSwKICAgICAgICAgJywnOiB7IHdpZHRoOiAxMCwgcG9pbnRzOiBbWzYsMV0sWzUsMF0sWzQsMV0sWzUsMl0sWzYsMV0sWzYsLTFdLFs1LC0zXSxbNCwtNF1dIH0sCiAgICAgICAgICctJzogeyB3aWR0aDogMTgsIHBvaW50czogW1s2LDldLFsxMiw5XV0gfSwKICAgICAgICAgJy4nOiB7IHdpZHRoOiAxMCwgcG9pbnRzOiBbWzUsMl0sWzQsMV0sWzUsMF0sWzYsMV0sWzUsMl1dIH0sCiAgICAgICAgICcvJzogeyB3aWR0aDogMjIsIHBvaW50czogW1syMCwyNV0sWzIsLTddXSB9LAogICAgICAgICAnMCc6IHsgd2lkdGg6IDIwLCBwb2ludHM6IFtbOSwyMV0sWzYsMjBdLFs0LDE3XSxbMywxMl0sWzMsOV0sWzQsNF0sWzYsMV0sWzksMF0sWzExLDBdLFsxNCwxXSxbMTYsNF0sWzE3LDldLFsxNywxMl0sWzE2LDE3XSxbMTQsMjBdLFsxMSwyMV0sWzksMjFdXSB9LAogICAgICAgICAnMSc6IHsgd2lkdGg6IDIwLCBwb2ludHM6IFtbNiwxN10sWzgsMThdLFsxMSwyMV0sWzExLDBdXSB9LAogICAgICAgICAnMic6IHsgd2lkdGg6IDIwLCBwb2ludHM6IFtbNCwxNl0sWzQsMTddLFs1LDE5XSxbNiwyMF0sWzgsMjFdLFsxMiwyMV0sWzE0LDIwXSxbMTUsMTldLFsxNiwxN10sWzE2LDE1XSxbMTUsMTNdLFsxMywxMF0sWzMsMF0sWzE3LDBdXSB9LAogICAgICAgICAnMyc6IHsgd2lkdGg6IDIwLCBwb2ludHM6IFtbNSwyMV0sWzE2LDIxXSxbMTAsMTNdLFsxMywxM10sWzE1LDEyXSxbMTYsMTFdLFsxNyw4XSxbMTcsNl0sWzE2LDNdLFsxNCwxXSxbMTEsMF0sWzgsMF0sWzUsMV0sWzQsMl0sWzMsNF1dIH0sCiAgICAgICAgICc0JzogeyB3aWR0aDogMjAsIHBvaW50czogW1sxMywyMV0sWzMsN10sWzE4LDddLFstMSwtMV0sWzEzLDIxXSxbMTMsMF1dIH0sCiAgICAgICAgICc1JzogeyB3aWR0aDogMjAsIHBvaW50czogW1sxNSwyMV0sWzUsMjFdLFs0LDEyXSxbNSwxM10sWzgsMTRdLFsxMSwxNF0sWzE0LDEzXSxbMTYsMTFdLFsxNyw4XSxbMTcsNl0sWzE2LDNdLFsxNCwxXSxbMTEsMF0sWzgsMF0sWzUsMV0sWzQsMl0sWzMsNF1dIH0sCiAgICAgICAgICc2JzogeyB3aWR0aDogMjAsIHBvaW50czogW1sxNiwxOF0sWzE1LDIwXSxbMTIsMjFdLFsxMCwyMV0sWzcsMjBdLFs1LDE3XSxbNCwxMl0sWzQsN10sWzUsM10sWzcsMV0sWzEwLDBdLFsxMSwwXSxbMTQsMV0sWzE2LDNdLFsxNyw2XSxbMTcsN10sWzE2LDEwXSxbMTQsMTJdLFsxMSwxM10sWzEwLDEzXSxbNywxMl0sWzUsMTBdLFs0LDddXSB9LAogICAgICAgICAnNyc6IHsgd2lkdGg6IDIwLCBwb2ludHM6IFtbMTcsMjFdLFs3LDBdLFstMSwtMV0sWzMsMjFdLFsxNywyMV1dIH0sCiAgICAgICAgICc4JzogeyB3aWR0aDogMjAsIHBvaW50czogW1s4LDIxXSxbNSwyMF0sWzQsMThdLFs0LDE2XSxbNSwxNF0sWzcsMTNdLFsxMSwxMl0sWzE0LDExXSxbMTYsOV0sWzE3LDddLFsxNyw0XSxbMTYsMl0sWzE1LDFdLFsxMiwwXSxbOCwwXSxbNSwxXSxbNCwyXSxbMyw0XSxbMyw3XSxbNCw5XSxbNiwxMV0sWzksMTJdLFsxMywxM10sWzE1LDE0XSxbMTYsMTZdLFsxNiwxOF0sWzE1LDIwXSxbMTIsMjFdLFs4LDIxXV0gfSwKICAgICAgICAgJzknOiB7IHdpZHRoOiAyMCwgcG9pbnRzOiBbWzE2LDE0XSxbMTUsMTFdLFsxMyw5XSxbMTAsOF0sWzksOF0sWzYsOV0sWzQsMTFdLFszLDE0XSxbMywxNV0sWzQsMThdLFs2LDIwXSxbOSwyMV0sWzEwLDIxXSxbMTMsMjBdLFsxNSwxOF0sWzE2LDE0XSxbMTYsOV0sWzE1LDRdLFsxMywxXSxbMTAsMF0sWzgsMF0sWzUsMV0sWzQsM11dIH0sCiAgICAgICAgICc6JzogeyB3aWR0aDogMTAsIHBvaW50czogW1s1LDE0XSxbNCwxM10sWzUsMTJdLFs2LDEzXSxbNSwxNF0sWy0xLC0xXSxbNSwyXSxbNCwxXSxbNSwwXSxbNiwxXSxbNSwyXV0gfSwKICAgICAgICAgJzsnOiB7IHdpZHRoOiAxMCwgcG9pbnRzOiBbWzUsMTRdLFs0LDEzXSxbNSwxMl0sWzYsMTNdLFs1LDE0XSxbLTEsLTFdLFs2LDFdLFs1LDBdLFs0LDFdLFs1LDJdLFs2LDFdLFs2LC0xXSxbNSwtM10sWzQsLTRdXSB9LAogICAgICAgICAnPCc6IHsgd2lkdGg6IDI0LCBwb2ludHM6IFtbMjAsMThdLFs0LDldLFsyMCwwXV0gfSwKICAgICAgICAgJz0nOiB7IHdpZHRoOiAyNiwgcG9pbnRzOiBbWzQsMTJdLFsyMiwxMl0sWy0xLC0xXSxbNCw2XSxbMjIsNl1dIH0sCiAgICAgICAgICc+JzogeyB3aWR0aDogMjQsIHBvaW50czogW1s0LDE4XSxbMjAsOV0sWzQsMF1dIH0sCiAgICAgICAgICc/JzogeyB3aWR0aDogMTgsIHBvaW50czogW1szLDE2XSxbMywxN10sWzQsMTldLFs1LDIwXSxbNywyMV0sWzExLDIxXSxbMTMsMjBdLFsxNCwxOV0sWzE1LDE3XSxbMTUsMTVdLFsxNCwxM10sWzEzLDEyXSxbOSwxMF0sWzksN10sWy0xLC0xXSxbOSwyXSxbOCwxXSxbOSwwXSxbMTAsMV0sWzksMl1dIH0sCiAgICAgICAgICdAJzogeyB3aWR0aDogMjcsIHBvaW50czogW1sxOCwxM10sWzE3LDE1XSxbMTUsMTZdLFsxMiwxNl0sWzEwLDE1XSxbOSwxNF0sWzgsMTFdLFs4LDhdLFs5LDZdLFsxMSw1XSxbMTQsNV0sWzE2LDZdLFsxNyw4XSxbLTEsLTFdLFsxMiwxNl0sWzEwLDE0XSxbOSwxMV0sWzksOF0sWzEwLDZdLFsxMSw1XSxbLTEsLTFdLFsxOCwxNl0sWzE3LDhdLFsxNyw2XSxbMTksNV0sWzIxLDVdLFsyMyw3XSxbMjQsMTBdLFsyNCwxMl0sWzIzLDE1XSxbMjIsMTddLFsyMCwxOV0sWzE4LDIwXSxbMTUsMjFdLFsxMiwyMV0sWzksMjBdLFs3LDE5XSxbNSwxN10sWzQsMTVdLFszLDEyXSxbMyw5XSxbNCw2XSxbNSw0XSxbNywyXSxbOSwxXSxbMTIsMF0sWzE1LDBdLFsxOCwxXSxbMjAsMl0sWzIxLDNdLFstMSwtMV0sWzE5LDE2XSxbMTgsOF0sWzE4LDZdLFsxOSw1XV0gfSwKICAgICAgICAgJ0EnOiB7IHdpZHRoOiAxOCwgcG9pbnRzOiBbWzksMjFdLFsxLDBdLFstMSwtMV0sWzksMjFdLFsxNywwXSxbLTEsLTFdLFs0LDddLFsxNCw3XV0gfSwKICAgICAgICAgJ0InOiB7IHdpZHRoOiAyMSwgcG9pbnRzOiBbWzQsMjFdLFs0LDBdLFstMSwtMV0sWzQsMjFdLFsxMywyMV0sWzE2LDIwXSxbMTcsMTldLFsxOCwxN10sWzE4LDE1XSxbMTcsMTNdLFsxNiwxMl0sWzEzLDExXSxbLTEsLTFdLFs0LDExXSxbMTMsMTFdLFsxNiwxMF0sWzE3LDldLFsxOCw3XSxbMTgsNF0sWzE3LDJdLFsxNiwxXSxbMTMsMF0sWzQsMF1dIH0sCiAgICAgICAgICdDJzogeyB3aWR0aDogMjEsIHBvaW50czogW1sxOCwxNl0sWzE3LDE4XSxbMTUsMjBdLFsxMywyMV0sWzksMjFdLFs3LDIwXSxbNSwxOF0sWzQsMTZdLFszLDEzXSxbMyw4XSxbNCw1XSxbNSwzXSxbNywxXSxbOSwwXSxbMTMsMF0sWzE1LDFdLFsxNywzXSxbMTgsNV1dIH0sCiAgICAgICAgICdEJzogeyB3aWR0aDogMjEsIHBvaW50czogW1s0LDIxXSxbNCwwXSxbLTEsLTFdLFs0LDIxXSxbMTEsMjFdLFsxNCwyMF0sWzE2LDE4XSxbMTcsMTZdLFsxOCwxM10sWzE4LDhdLFsxNyw1XSxbMTYsM10sWzE0LDFdLFsxMSwwXSxbNCwwXV0gfSwKICAgICAgICAgJ0UnOiB7IHdpZHRoOiAxOSwgcG9pbnRzOiBbWzQsMjFdLFs0LDBdLFstMSwtMV0sWzQsMjFdLFsxNywyMV0sWy0xLC0xXSxbNCwxMV0sWzEyLDExXSxbLTEsLTFdLFs0LDBdLFsxNywwXV0gfSwKICAgICAgICAgJ0YnOiB7IHdpZHRoOiAxOCwgcG9pbnRzOiBbWzQsMjFdLFs0LDBdLFstMSwtMV0sWzQsMjFdLFsxNywyMV0sWy0xLC0xXSxbNCwxMV0sWzEyLDExXV0gfSwKICAgICAgICAgJ0cnOiB7IHdpZHRoOiAyMSwgcG9pbnRzOiBbWzE4LDE2XSxbMTcsMThdLFsxNSwyMF0sWzEzLDIxXSxbOSwyMV0sWzcsMjBdLFs1LDE4XSxbNCwxNl0sWzMsMTNdLFszLDhdLFs0LDVdLFs1LDNdLFs3LDFdLFs5LDBdLFsxMywwXSxbMTUsMV0sWzE3LDNdLFsxOCw1XSxbMTgsOF0sWy0xLC0xXSxbMTMsOF0sWzE4LDhdXSB9LAogICAgICAgICAnSCc6IHsgd2lkdGg6IDIyLCBwb2ludHM6IFtbNCwyMV0sWzQsMF0sWy0xLC0xXSxbMTgsMjFdLFsxOCwwXSxbLTEsLTFdLFs0LDExXSxbMTgsMTFdXSB9LAogICAgICAgICAnSSc6IHsgd2lkdGg6IDgsIHBvaW50czogW1s0LDIxXSxbNCwwXV0gfSwKICAgICAgICAgJ0onOiB7IHdpZHRoOiAxNiwgcG9pbnRzOiBbWzEyLDIxXSxbMTIsNV0sWzExLDJdLFsxMCwxXSxbOCwwXSxbNiwwXSxbNCwxXSxbMywyXSxbMiw1XSxbMiw3XV0gfSwKICAgICAgICAgJ0snOiB7IHdpZHRoOiAyMSwgcG9pbnRzOiBbWzQsMjFdLFs0LDBdLFstMSwtMV0sWzE4LDIxXSxbNCw3XSxbLTEsLTFdLFs5LDEyXSxbMTgsMF1dIH0sCiAgICAgICAgICdMJzogeyB3aWR0aDogMTcsIHBvaW50czogW1s0LDIxXSxbNCwwXSxbLTEsLTFdLFs0LDBdLFsxNiwwXV0gfSwKICAgICAgICAgJ00nOiB7IHdpZHRoOiAyNCwgcG9pbnRzOiBbWzQsMjFdLFs0LDBdLFstMSwtMV0sWzQsMjFdLFsxMiwwXSxbLTEsLTFdLFsyMCwyMV0sWzEyLDBdLFstMSwtMV0sWzIwLDIxXSxbMjAsMF1dIH0sCiAgICAgICAgICdOJzogeyB3aWR0aDogMjIsIHBvaW50czogW1s0LDIxXSxbNCwwXSxbLTEsLTFdLFs0LDIxXSxbMTgsMF0sWy0xLC0xXSxbMTgsMjFdLFsxOCwwXV0gfSwKICAgICAgICAgJ08nOiB7IHdpZHRoOiAyMiwgcG9pbnRzOiBbWzksMjFdLFs3LDIwXSxbNSwxOF0sWzQsMTZdLFszLDEzXSxbMyw4XSxbNCw1XSxbNSwzXSxbNywxXSxbOSwwXSxbMTMsMF0sWzE1LDFdLFsxNywzXSxbMTgsNV0sWzE5LDhdLFsxOSwxM10sWzE4LDE2XSxbMTcsMThdLFsxNSwyMF0sWzEzLDIxXSxbOSwyMV1dIH0sCiAgICAgICAgICdQJzogeyB3aWR0aDogMjEsIHBvaW50czogW1s0LDIxXSxbNCwwXSxbLTEsLTFdLFs0LDIxXSxbMTMsMjFdLFsxNiwyMF0sWzE3LDE5XSxbMTgsMTddLFsxOCwxNF0sWzE3LDEyXSxbMTYsMTFdLFsxMywxMF0sWzQsMTBdXSB9LAogICAgICAgICAnUSc6IHsgd2lkdGg6IDIyLCBwb2ludHM6IFtbOSwyMV0sWzcsMjBdLFs1LDE4XSxbNCwxNl0sWzMsMTNdLFszLDhdLFs0LDVdLFs1LDNdLFs3LDFdLFs5LDBdLFsxMywwXSxbMTUsMV0sWzE3LDNdLFsxOCw1XSxbMTksOF0sWzE5LDEzXSxbMTgsMTZdLFsxNywxOF0sWzE1LDIwXSxbMTMsMjFdLFs5LDIxXSxbLTEsLTFdLFsxMiw0XSxbMTgsLTJdXSB9LAogICAgICAgICAnUic6IHsgd2lkdGg6IDIxLCBwb2ludHM6IFtbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwyMV0sWzEzLDIxXSxbMTYsMjBdLFsxNywxOV0sWzE4LDE3XSxbMTgsMTVdLFsxNywxM10sWzE2LDEyXSxbMTMsMTFdLFs0LDExXSxbLTEsLTFdLFsxMSwxMV0sWzE4LDBdXSB9LAogICAgICAgICAnUyc6IHsgd2lkdGg6IDIwLCBwb2ludHM6IFtbMTcsMThdLFsxNSwyMF0sWzEyLDIxXSxbOCwyMV0sWzUsMjBdLFszLDE4XSxbMywxNl0sWzQsMTRdLFs1LDEzXSxbNywxMl0sWzEzLDEwXSxbMTUsOV0sWzE2LDhdLFsxNyw2XSxbMTcsM10sWzE1LDFdLFsxMiwwXSxbOCwwXSxbNSwxXSxbMywzXV0gfSwKICAgICAgICAgJ1QnOiB7IHdpZHRoOiAxNiwgcG9pbnRzOiBbWzgsMjFdLFs4LDBdLFstMSwtMV0sWzEsMjFdLFsxNSwyMV1dIH0sCiAgICAgICAgICdVJzogeyB3aWR0aDogMjIsIHBvaW50czogW1s0LDIxXSxbNCw2XSxbNSwzXSxbNywxXSxbMTAsMF0sWzEyLDBdLFsxNSwxXSxbMTcsM10sWzE4LDZdLFsxOCwyMV1dIH0sCiAgICAgICAgICdWJzogeyB3aWR0aDogMTgsIHBvaW50czogW1sxLDIxXSxbOSwwXSxbLTEsLTFdLFsxNywyMV0sWzksMF1dIH0sCiAgICAgICAgICdXJzogeyB3aWR0aDogMjQsIHBvaW50czogW1syLDIxXSxbNywwXSxbLTEsLTFdLFsxMiwyMV0sWzcsMF0sWy0xLC0xXSxbMTIsMjFdLFsxNywwXSxbLTEsLTFdLFsyMiwyMV0sWzE3LDBdXSB9LAogICAgICAgICAnWCc6IHsgd2lkdGg6IDIwLCBwb2ludHM6IFtbMywyMV0sWzE3LDBdLFstMSwtMV0sWzE3LDIxXSxbMywwXV0gfSwKICAgICAgICAgJ1knOiB7IHdpZHRoOiAxOCwgcG9pbnRzOiBbWzEsMjFdLFs5LDExXSxbOSwwXSxbLTEsLTFdLFsxNywyMV0sWzksMTFdXSB9LAogICAgICAgICAnWic6IHsgd2lkdGg6IDIwLCBwb2ludHM6IFtbMTcsMjFdLFszLDBdLFstMSwtMV0sWzMsMjFdLFsxNywyMV0sWy0xLC0xXSxbMywwXSxbMTcsMF1dIH0sCiAgICAgICAgICdbJzogeyB3aWR0aDogMTQsIHBvaW50czogW1s0LDI1XSxbNCwtN10sWy0xLC0xXSxbNSwyNV0sWzUsLTddLFstMSwtMV0sWzQsMjVdLFsxMSwyNV0sWy0xLC0xXSxbNCwtN10sWzExLC03XV0gfSwKICAgICAgICAgJ1xcJzogeyB3aWR0aDogMTQsIHBvaW50czogW1swLDIxXSxbMTQsLTNdXSB9LAogICAgICAgICAnXSc6IHsgd2lkdGg6IDE0LCBwb2ludHM6IFtbOSwyNV0sWzksLTddLFstMSwtMV0sWzEwLDI1XSxbMTAsLTddLFstMSwtMV0sWzMsMjVdLFsxMCwyNV0sWy0xLC0xXSxbMywtN10sWzEwLC03XV0gfSwKICAgICAgICAgJ14nOiB7IHdpZHRoOiAxNiwgcG9pbnRzOiBbWzYsMTVdLFs4LDE4XSxbMTAsMTVdLFstMSwtMV0sWzMsMTJdLFs4LDE3XSxbMTMsMTJdLFstMSwtMV0sWzgsMTddLFs4LDBdXSB9LAogICAgICAgICAnXyc6IHsgd2lkdGg6IDE2LCBwb2ludHM6IFtbMCwtMl0sWzE2LC0yXV0gfSwKICAgICAgICAgJ2AnOiB7IHdpZHRoOiAxMCwgcG9pbnRzOiBbWzYsMjFdLFs1LDIwXSxbNCwxOF0sWzQsMTZdLFs1LDE1XSxbNiwxNl0sWzUsMTddXSB9LAogICAgICAgICAnYSc6IHsgd2lkdGg6IDE5LCBwb2ludHM6IFtbMTUsMTRdLFsxNSwwXSxbLTEsLTFdLFsxNSwxMV0sWzEzLDEzXSxbMTEsMTRdLFs4LDE0XSxbNiwxM10sWzQsMTFdLFszLDhdLFszLDZdLFs0LDNdLFs2LDFdLFs4LDBdLFsxMSwwXSxbMTMsMV0sWzE1LDNdXSB9LAogICAgICAgICAnYic6IHsgd2lkdGg6IDE5LCBwb2ludHM6IFtbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwxMV0sWzYsMTNdLFs4LDE0XSxbMTEsMTRdLFsxMywxM10sWzE1LDExXSxbMTYsOF0sWzE2LDZdLFsxNSwzXSxbMTMsMV0sWzExLDBdLFs4LDBdLFs2LDFdLFs0LDNdXSB9LAogICAgICAgICAnYyc6IHsgd2lkdGg6IDE4LCBwb2ludHM6IFtbMTUsMTFdLFsxMywxM10sWzExLDE0XSxbOCwxNF0sWzYsMTNdLFs0LDExXSxbMyw4XSxbMyw2XSxbNCwzXSxbNiwxXSxbOCwwXSxbMTEsMF0sWzEzLDFdLFsxNSwzXV0gfSwKICAgICAgICAgJ2QnOiB7IHdpZHRoOiAxOSwgcG9pbnRzOiBbWzE1LDIxXSxbMTUsMF0sWy0xLC0xXSxbMTUsMTFdLFsxMywxM10sWzExLDE0XSxbOCwxNF0sWzYsMTNdLFs0LDExXSxbMyw4XSxbMyw2XSxbNCwzXSxbNiwxXSxbOCwwXSxbMTEsMF0sWzEzLDFdLFsxNSwzXV0gfSwKICAgICAgICAgJ2UnOiB7IHdpZHRoOiAxOCwgcG9pbnRzOiBbWzMsOF0sWzE1LDhdLFsxNSwxMF0sWzE0LDEyXSxbMTMsMTNdLFsxMSwxNF0sWzgsMTRdLFs2LDEzXSxbNCwxMV0sWzMsOF0sWzMsNl0sWzQsM10sWzYsMV0sWzgsMF0sWzExLDBdLFsxMywxXSxbMTUsM11dIH0sCiAgICAgICAgICdmJzogeyB3aWR0aDogMTIsIHBvaW50czogW1sxMCwyMV0sWzgsMjFdLFs2LDIwXSxbNSwxN10sWzUsMF0sWy0xLC0xXSxbMiwxNF0sWzksMTRdXSB9LAogICAgICAgICAnZyc6IHsgd2lkdGg6IDE5LCBwb2ludHM6IFtbMTUsMTRdLFsxNSwtMl0sWzE0LC01XSxbMTMsLTZdLFsxMSwtN10sWzgsLTddLFs2LC02XSxbLTEsLTFdLFsxNSwxMV0sWzEzLDEzXSxbMTEsMTRdLFs4LDE0XSxbNiwxM10sWzQsMTFdLFszLDhdLFszLDZdLFs0LDNdLFs2LDFdLFs4LDBdLFsxMSwwXSxbMTMsMV0sWzE1LDNdXSB9LAogICAgICAgICAnaCc6IHsgd2lkdGg6IDE5LCBwb2ludHM6IFtbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwxMF0sWzcsMTNdLFs5LDE0XSxbMTIsMTRdLFsxNCwxM10sWzE1LDEwXSxbMTUsMF1dIH0sCiAgICAgICAgICdpJzogeyB3aWR0aDogOCwgcG9pbnRzOiBbWzMsMjFdLFs0LDIwXSxbNSwyMV0sWzQsMjJdLFszLDIxXSxbLTEsLTFdLFs0LDE0XSxbNCwwXV0gfSwKICAgICAgICAgJ2onOiB7IHdpZHRoOiAxMCwgcG9pbnRzOiBbWzUsMjFdLFs2LDIwXSxbNywyMV0sWzYsMjJdLFs1LDIxXSxbLTEsLTFdLFs2LDE0XSxbNiwtM10sWzUsLTZdLFszLC03XSxbMSwtN11dIH0sCiAgICAgICAgICdrJzogeyB3aWR0aDogMTcsIHBvaW50czogW1s0LDIxXSxbNCwwXSxbLTEsLTFdLFsxNCwxNF0sWzQsNF0sWy0xLC0xXSxbOCw4XSxbMTUsMF1dIH0sCiAgICAgICAgICdsJzogeyB3aWR0aDogOCwgcG9pbnRzOiBbWzQsMjFdLFs0LDBdXSB9LAogICAgICAgICAnbSc6IHsgd2lkdGg6IDMwLCBwb2ludHM6IFtbNCwxNF0sWzQsMF0sWy0xLC0xXSxbNCwxMF0sWzcsMTNdLFs5LDE0XSxbMTIsMTRdLFsxNCwxM10sWzE1LDEwXSxbMTUsMF0sWy0xLC0xXSxbMTUsMTBdLFsxOCwxM10sWzIwLDE0XSxbMjMsMTRdLFsyNSwxM10sWzI2LDEwXSxbMjYsMF1dIH0sCiAgICAgICAgICduJzogeyB3aWR0aDogMTksIHBvaW50czogW1s0LDE0XSxbNCwwXSxbLTEsLTFdLFs0LDEwXSxbNywxM10sWzksMTRdLFsxMiwxNF0sWzE0LDEzXSxbMTUsMTBdLFsxNSwwXV0gfSwKICAgICAgICAgJ28nOiB7IHdpZHRoOiAxOSwgcG9pbnRzOiBbWzgsMTRdLFs2LDEzXSxbNCwxMV0sWzMsOF0sWzMsNl0sWzQsM10sWzYsMV0sWzgsMF0sWzExLDBdLFsxMywxXSxbMTUsM10sWzE2LDZdLFsxNiw4XSxbMTUsMTFdLFsxMywxM10sWzExLDE0XSxbOCwxNF1dIH0sCiAgICAgICAgICdwJzogeyB3aWR0aDogMTksIHBvaW50czogW1s0LDE0XSxbNCwtN10sWy0xLC0xXSxbNCwxMV0sWzYsMTNdLFs4LDE0XSxbMTEsMTRdLFsxMywxM10sWzE1LDExXSxbMTYsOF0sWzE2LDZdLFsxNSwzXSxbMTMsMV0sWzExLDBdLFs4LDBdLFs2LDFdLFs0LDNdXSB9LAogICAgICAgICAncSc6IHsgd2lkdGg6IDE5LCBwb2ludHM6IFtbMTUsMTRdLFsxNSwtN10sWy0xLC0xXSxbMTUsMTFdLFsxMywxM10sWzExLDE0XSxbOCwxNF0sWzYsMTNdLFs0LDExXSxbMyw4XSxbMyw2XSxbNCwzXSxbNiwxXSxbOCwwXSxbMTEsMF0sWzEzLDFdLFsxNSwzXV0gfSwKICAgICAgICAgJ3InOiB7IHdpZHRoOiAxMywgcG9pbnRzOiBbWzQsMTRdLFs0LDBdLFstMSwtMV0sWzQsOF0sWzUsMTFdLFs3LDEzXSxbOSwxNF0sWzEyLDE0XV0gfSwKICAgICAgICAgJ3MnOiB7IHdpZHRoOiAxNywgcG9pbnRzOiBbWzE0LDExXSxbMTMsMTNdLFsxMCwxNF0sWzcsMTRdLFs0LDEzXSxbMywxMV0sWzQsOV0sWzYsOF0sWzExLDddLFsxMyw2XSxbMTQsNF0sWzE0LDNdLFsxMywxXSxbMTAsMF0sWzcsMF0sWzQsMV0sWzMsM11dIH0sCiAgICAgICAgICd0JzogeyB3aWR0aDogMTIsIHBvaW50czogW1s1LDIxXSxbNSw0XSxbNiwxXSxbOCwwXSxbMTAsMF0sWy0xLC0xXSxbMiwxNF0sWzksMTRdXSB9LAogICAgICAgICAndSc6IHsgd2lkdGg6IDE5LCBwb2ludHM6IFtbNCwxNF0sWzQsNF0sWzUsMV0sWzcsMF0sWzEwLDBdLFsxMiwxXSxbMTUsNF0sWy0xLC0xXSxbMTUsMTRdLFsxNSwwXV0gfSwKICAgICAgICAgJ3YnOiB7IHdpZHRoOiAxNiwgcG9pbnRzOiBbWzIsMTRdLFs4LDBdLFstMSwtMV0sWzE0LDE0XSxbOCwwXV0gfSwKICAgICAgICAgJ3cnOiB7IHdpZHRoOiAyMiwgcG9pbnRzOiBbWzMsMTRdLFs3LDBdLFstMSwtMV0sWzExLDE0XSxbNywwXSxbLTEsLTFdLFsxMSwxNF0sWzE1LDBdLFstMSwtMV0sWzE5LDE0XSxbMTUsMF1dIH0sCiAgICAgICAgICd4JzogeyB3aWR0aDogMTcsIHBvaW50czogW1szLDE0XSxbMTQsMF0sWy0xLC0xXSxbMTQsMTRdLFszLDBdXSB9LAogICAgICAgICAneSc6IHsgd2lkdGg6IDE2LCBwb2ludHM6IFtbMiwxNF0sWzgsMF0sWy0xLC0xXSxbMTQsMTRdLFs4LDBdLFs2LC00XSxbNCwtNl0sWzIsLTddLFsxLC03XV0gfSwKICAgICAgICAgJ3onOiB7IHdpZHRoOiAxNywgcG9pbnRzOiBbWzE0LDE0XSxbMywwXSxbLTEsLTFdLFszLDE0XSxbMTQsMTRdLFstMSwtMV0sWzMsMF0sWzE0LDBdXSB9LAogICAgICAgICAneyc6IHsgd2lkdGg6IDE0LCBwb2ludHM6IFtbOSwyNV0sWzcsMjRdLFs2LDIzXSxbNSwyMV0sWzUsMTldLFs2LDE3XSxbNywxNl0sWzgsMTRdLFs4LDEyXSxbNiwxMF0sWy0xLC0xXSxbNywyNF0sWzYsMjJdLFs2LDIwXSxbNywxOF0sWzgsMTddLFs5LDE1XSxbOSwxM10sWzgsMTFdLFs0LDldLFs4LDddLFs5LDVdLFs5LDNdLFs4LDFdLFs3LDBdLFs2LC0yXSxbNiwtNF0sWzcsLTZdLFstMSwtMV0sWzYsOF0sWzgsNl0sWzgsNF0sWzcsMl0sWzYsMV0sWzUsLTFdLFs1LC0zXSxbNiwtNV0sWzcsLTZdLFs5LC03XV0gfSwKICAgICAgICAgJ3wnOiB7IHdpZHRoOiA4LCBwb2ludHM6IFtbNCwyNV0sWzQsLTddXSB9LAogICAgICAgICAnfSc6IHsgd2lkdGg6IDE0LCBwb2ludHM6IFtbNSwyNV0sWzcsMjRdLFs4LDIzXSxbOSwyMV0sWzksMTldLFs4LDE3XSxbNywxNl0sWzYsMTRdLFs2LDEyXSxbOCwxMF0sWy0xLC0xXSxbNywyNF0sWzgsMjJdLFs4LDIwXSxbNywxOF0sWzYsMTddLFs1LDE1XSxbNSwxM10sWzYsMTFdLFsxMCw5XSxbNiw3XSxbNSw1XSxbNSwzXSxbNiwxXSxbNywwXSxbOCwtMl0sWzgsLTRdLFs3LC02XSxbLTEsLTFdLFs4LDhdLFs2LDZdLFs2LDRdLFs3LDJdLFs4LDFdLFs5LC0xXSxbOSwtM10sWzgsLTVdLFs3LC02XSxbNSwtN11dIH0sCiAgICAgICAgICd+JzogeyB3aWR0aDogMjQsIHBvaW50czogW1szLDZdLFszLDhdLFs0LDExXSxbNiwxMl0sWzgsMTJdLFsxMCwxMV0sWzE0LDhdLFsxNiw3XSxbMTgsN10sWzIwLDhdLFsyMSwxMF0sWy0xLC0xXSxbMyw4XSxbNCwxMF0sWzYsMTFdLFs4LDExXSxbMTAsMTBdLFsxNCw3XSxbMTYsNl0sWzE4LDZdLFsyMCw3XSxbMjEsMTBdLFsyMSwxMl1dIH0KICAgICB9OwogICAgIAogICAgJC5qcXBsb3QuQ2FudmFzRm9udFJlbmRlcmVyID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIGlmICghb3B0aW9ucy5wdDJweCkgewogICAgICAgICAgICBvcHRpb25zLnB0MnB4ID0gMS41OwogICAgICAgIH0KICAgICAgICAkLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIuY2FsbCh0aGlzLCBvcHRpb25zKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkNhbnZhc0ZvbnRSZW5kZXJlci5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyKHt9KTsKICAgICQuanFwbG90LkNhbnZhc0ZvbnRSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5DYW52YXNGb250UmVuZGVyZXI7CgogICAgJC5qcXBsb3QuQ2FudmFzRm9udFJlbmRlcmVyLnByb3RvdHlwZS5tZWFzdXJlID0gZnVuY3Rpb24oY3R4LCBzdHIpCiAgICB7CiAgICAgICAgLy8gdmFyIGZzdHlsZSA9IHRoaXMuZm9udFN0eWxlKycgJyt0aGlzLmZvbnRWYXJpYW50KycgJyt0aGlzLmZvbnRXZWlnaHQrJyAnK3RoaXMuZm9udFNpemUrJyAnK3RoaXMuZm9udEZhbWlseTsKICAgICAgICB2YXIgZnN0eWxlID0gdGhpcy5mb250U2l6ZSsnICcrdGhpcy5mb250RmFtaWx5OwogICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgY3R4LmZvbnQgPSBmc3R5bGU7CiAgICAgICAgdmFyIHcgPSBjdHgubWVhc3VyZVRleHQoc3RyKS53aWR0aDsKICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgICAgIHJldHVybiB3OwogICAgfTsKCiAgICAkLmpxcGxvdC5DYW52YXNGb250UmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihjdHgsIHN0cikKICAgIHsKICAgICAgICB2YXIgeCA9IDA7CiAgICAgICAgLy8gbGVhdmUgcm9vbSBhdCBib3R0b20gZm9yIGRlc2NlbmRlcnMuCiAgICAgICAgdmFyIHkgPSB0aGlzLmhlaWdodCowLjcyOwogICAgICAgIC8vdmFyIHkgPSAxMjsKCiAgICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgIHZhciB0eCwgdHk7CiAgICAgICAgIAogICAgICAgICAvLyAxc3QgcXVhZHJhbnQKICAgICAgICAgaWYgKCgtTWF0aC5QSS8yIDw9IHRoaXMuYW5nbGUgJiYgdGhpcy5hbmdsZSA8PSAwKSB8fCAoTWF0aC5QSSozLzIgPD0gdGhpcy5hbmdsZSAmJiB0aGlzLmFuZ2xlIDw9IE1hdGguUEkqMikpIHsKICAgICAgICAgICAgIHR4ID0gMDsKICAgICAgICAgICAgIHR5ID0gLU1hdGguc2luKHRoaXMuYW5nbGUpICogdGhpcy53aWR0aDsKICAgICAgICAgfQogICAgICAgICAvLyA0dGggcXVhZHJhbnQKICAgICAgICAgZWxzZSBpZiAoKDAgPCB0aGlzLmFuZ2xlICYmIHRoaXMuYW5nbGUgPD0gTWF0aC5QSS8yKSB8fCAoLU1hdGguUEkqMiA8PSB0aGlzLmFuZ2xlICYmIHRoaXMuYW5nbGUgPD0gLU1hdGguUEkqMy8yKSkgewogICAgICAgICAgICAgdHggPSBNYXRoLnNpbih0aGlzLmFuZ2xlKSAqIHRoaXMuaGVpZ2h0OwogICAgICAgICAgICAgdHkgPSAwOwogICAgICAgICB9CiAgICAgICAgIC8vIDJuZCBxdWFkcmFudAogICAgICAgICBlbHNlIGlmICgoLU1hdGguUEkgPCB0aGlzLmFuZ2xlICYmIHRoaXMuYW5nbGUgPCAtTWF0aC5QSS8yKSB8fCAoTWF0aC5QSSA8PSB0aGlzLmFuZ2xlICYmIHRoaXMuYW5nbGUgPD0gTWF0aC5QSSozLzIpKSB7CiAgICAgICAgICAgICB0eCA9IC1NYXRoLmNvcyh0aGlzLmFuZ2xlKSAqIHRoaXMud2lkdGg7CiAgICAgICAgICAgICB0eSA9IC1NYXRoLnNpbih0aGlzLmFuZ2xlKSAqIHRoaXMud2lkdGggLSBNYXRoLmNvcyh0aGlzLmFuZ2xlKSAqIHRoaXMuaGVpZ2h0OwogICAgICAgICB9CiAgICAgICAgIC8vIDNyZCBxdWFkcmFudAogICAgICAgICBlbHNlIGlmICgoLU1hdGguUEkqMy8yIDwgdGhpcy5hbmdsZSAmJiB0aGlzLmFuZ2xlIDwgTWF0aC5QSSkgfHwgKE1hdGguUEkvMiA8IHRoaXMuYW5nbGUgJiYgdGhpcy5hbmdsZSA8IE1hdGguUEkpKSB7CiAgICAgICAgICAgICB0eCA9IE1hdGguc2luKHRoaXMuYW5nbGUpICogdGhpcy5oZWlnaHQgLSBNYXRoLmNvcyh0aGlzLmFuZ2xlKSp0aGlzLndpZHRoOwogICAgICAgICAgICAgdHkgPSAtTWF0aC5jb3ModGhpcy5hbmdsZSkgKiB0aGlzLmhlaWdodDsKICAgICAgICAgfQogICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmZpbGxTdHlsZTsKICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuZmlsbFN0eWxlOwogICAgICAgIC8vIHZhciBmc3R5bGUgPSB0aGlzLmZvbnRTdHlsZSsnICcrdGhpcy5mb250VmFyaWFudCsnICcrdGhpcy5mb250V2VpZ2h0KycgJyt0aGlzLmZvbnRTaXplKycgJyt0aGlzLmZvbnRGYW1pbHk7CiAgICAgICAgdmFyIGZzdHlsZSA9IHRoaXMuZm9udFNpemUrJyAnK3RoaXMuZm9udEZhbWlseTsKICAgICAgICAgY3R4LmZvbnQgPSBmc3R5bGU7CiAgICAgICAgIGN0eC50cmFuc2xhdGUodHgsIHR5KTsKICAgICAgICAgY3R4LnJvdGF0ZSh0aGlzLmFuZ2xlKTsKICAgICAgICAgY3R4LmZpbGxUZXh0KHN0ciwgeCwgeSk7CiAgICAgICAgIC8vIGN0eC5zdHJva2VUZXh0KHN0ciwgeCwgeSk7CgogICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgfTsKICAgIAp9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.canvasTextRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGEpe2EuanFwbG90LkNhbnZhc1RleHRSZW5kZXJlcj1mdW5jdGlvbihiKXt0aGlzLmZvbnRTdHlsZT0ibm9ybWFsIjt0aGlzLmZvbnRWYXJpYW50PSJub3JtYWwiO3RoaXMuZm9udFdlaWdodD0ibm9ybWFsIjt0aGlzLmZvbnRTaXplPSIxMHB4Ijt0aGlzLmZvbnRGYW1pbHk9InNhbnMtc2VyaWYiO3RoaXMuZm9udFN0cmV0Y2g9MTt0aGlzLmZpbGxTdHlsZT0iIzY2NjY2NiI7dGhpcy5hbmdsZT0wO3RoaXMudGV4dEFsaWduPSJzdGFydCI7dGhpcy50ZXh0QmFzZWxpbmU9ImFscGhhYmV0aWMiO3RoaXMudGV4dDt0aGlzLndpZHRoO3RoaXMuaGVpZ2h0O3RoaXMucHQycHg9MS4yODthLmV4dGVuZCh0cnVlLHRoaXMsYik7dGhpcy5ub3JtYWxpemVkRm9udFNpemU9dGhpcy5ub3JtYWxpemVGb250U2l6ZSh0aGlzLmZvbnRTaXplKTt0aGlzLnNldEhlaWdodCgpfTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYil7YS5leHRlbmQodHJ1ZSx0aGlzLGIpO3RoaXMubm9ybWFsaXplZEZvbnRTaXplPXRoaXMubm9ybWFsaXplRm9udFNpemUodGhpcy5mb250U2l6ZSk7dGhpcy5zZXRIZWlnaHQoKX07YS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5ub3JtYWxpemVGb250U2l6ZT1mdW5jdGlvbihiKXtiPVN0cmluZyhiKTt2YXIgYz1wYXJzZUZsb2F0KGIpO2lmKGIuaW5kZXhPZigicHgiKT4tMSl7cmV0dXJuIGMvdGhpcy5wdDJweH1lbHNle2lmKGIuaW5kZXhPZigicHQiKT4tMSl7cmV0dXJuIGN9ZWxzZXtpZihiLmluZGV4T2YoImVtIik+LTEpe3JldHVybiBjKjEyfWVsc2V7aWYoYi5pbmRleE9mKCIlIik+LTEpe3JldHVybiBjKjEyLzEwMH1lbHNle3JldHVybiBjL3RoaXMucHQycHh9fX19fTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmZvbnRXZWlnaHQyRmxvYXQ9ZnVuY3Rpb24oYil7aWYoTnVtYmVyKGIpKXtyZXR1cm4gYi80MDB9ZWxzZXtzd2l0Y2goYil7Y2FzZSJub3JtYWwiOnJldHVybiAxO2JyZWFrO2Nhc2UiYm9sZCI6cmV0dXJuIDEuNzU7YnJlYWs7Y2FzZSJib2xkZXIiOnJldHVybiAyLjI1O2JyZWFrO2Nhc2UibGlnaHRlciI6cmV0dXJuIDAuNzU7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gMTticmVha319fTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0fTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24oYyxiKXt0aGlzLnRleHQ9Yzt0aGlzLnNldFdpZHRoKGIpO3JldHVybiB0aGlzfTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLndpZHRofTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGMsYil7aWYoIWIpe3RoaXMud2lkdGg9dGhpcy5tZWFzdXJlKGMsdGhpcy50ZXh0KX1lbHNle3RoaXMud2lkdGg9Yn1yZXR1cm4gdGhpc307YS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaGVpZ2h0fTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihiKXtpZighYil7dGhpcy5oZWlnaHQ9dGhpcy5ub3JtYWxpemVkRm9udFNpemUqdGhpcy5wdDJweH1lbHNle3RoaXMuaGVpZ2h0PWJ9cmV0dXJuIHRoaXN9O2EuanFwbG90LkNhbnZhc1RleHRSZW5kZXJlci5wcm90b3R5cGUubGV0dGVyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxldHRlcnNbYl19O2EuanFwbG90LkNhbnZhc1RleHRSZW5kZXJlci5wcm90b3R5cGUuYXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplZEZvbnRTaXplfTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmRlc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gNyp0aGlzLm5vcm1hbGl6ZWRGb250U2l6ZS8yNX07YS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKGQsZyl7dmFyIGY9MDt2YXIgYj1nLmxlbmd0aDtmb3IodmFyIGU9MDtlPGI7ZSsrKXt2YXIgaD10aGlzLmxldHRlcihnLmNoYXJBdChlKSk7aWYoaCl7Zis9aC53aWR0aCp0aGlzLm5vcm1hbGl6ZWRGb250U2l6ZS8yNSp0aGlzLmZvbnRTdHJldGNofX1yZXR1cm4gZn07YS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHMsbil7dmFyIHI9MDt2YXIgbz10aGlzLmhlaWdodCowLjcyO3ZhciBwPTA7dmFyIGw9bi5sZW5ndGg7dmFyIGs9dGhpcy5ub3JtYWxpemVkRm9udFNpemUvMjU7cy5zYXZlKCk7dmFyIGgsZjtpZigoLU1hdGguUEkvMjw9dGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9MCl8fChNYXRoLlBJKjMvMjw9dGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9TWF0aC5QSSoyKSl7aD0wO2Y9LU1hdGguc2luKHRoaXMuYW5nbGUpKnRoaXMud2lkdGh9ZWxzZXtpZigoMDx0aGlzLmFuZ2xlJiZ0aGlzLmFuZ2xlPD1NYXRoLlBJLzIpfHwoLU1hdGguUEkqMjw9dGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9LU1hdGguUEkqMy8yKSl7aD1NYXRoLnNpbih0aGlzLmFuZ2xlKSp0aGlzLmhlaWdodDtmPTB9ZWxzZXtpZigoLU1hdGguUEk8dGhpcy5hbmdsZSYmdGhpcy5hbmdsZTwtTWF0aC5QSS8yKXx8KE1hdGguUEk8PXRoaXMuYW5nbGUmJnRoaXMuYW5nbGU8PU1hdGguUEkqMy8yKSl7aD0tTWF0aC5jb3ModGhpcy5hbmdsZSkqdGhpcy53aWR0aDtmPS1NYXRoLnNpbih0aGlzLmFuZ2xlKSp0aGlzLndpZHRoLU1hdGguY29zKHRoaXMuYW5nbGUpKnRoaXMuaGVpZ2h0fWVsc2V7aWYoKC1NYXRoLlBJKjMvMjx0aGlzLmFuZ2xlJiZ0aGlzLmFuZ2xlPE1hdGguUEkpfHwoTWF0aC5QSS8yPHRoaXMuYW5nbGUmJnRoaXMuYW5nbGU8TWF0aC5QSSkpe2g9TWF0aC5zaW4odGhpcy5hbmdsZSkqdGhpcy5oZWlnaHQtTWF0aC5jb3ModGhpcy5hbmdsZSkqdGhpcy53aWR0aDtmPS1NYXRoLmNvcyh0aGlzLmFuZ2xlKSp0aGlzLmhlaWdodH19fX1zLnN0cm9rZVN0eWxlPXRoaXMuZmlsbFN0eWxlO3MuZmlsbFN0eWxlPXRoaXMuZmlsbFN0eWxlO3MudHJhbnNsYXRlKGgsZik7cy5yb3RhdGUodGhpcy5hbmdsZSk7cy5saW5lQ2FwPSJyb3VuZCI7dmFyIHQ9KHRoaXMubm9ybWFsaXplZEZvbnRTaXplPjMwKT8yOjIrKDMwLXRoaXMubm9ybWFsaXplZEZvbnRTaXplKS8yMDtzLmxpbmVXaWR0aD10KmsqdGhpcy5mb250V2VpZ2h0MkZsb2F0KHRoaXMuZm9udFdlaWdodCk7Zm9yKHZhciBnPTA7ZzxsO2crKyl7dmFyIG09dGhpcy5sZXR0ZXIobi5jaGFyQXQoZykpO2lmKCFtKXtjb250aW51ZX1zLmJlZ2luUGF0aCgpO3ZhciBlPTE7dmFyIGI9MDtmb3IodmFyIGQ9MDtkPG0ucG9pbnRzLmxlbmd0aDtkKyspe3ZhciBxPW0ucG9pbnRzW2RdO2lmKHFbMF09PS0xJiZxWzFdPT0tMSl7ZT0xO2NvbnRpbnVlfWlmKGUpe3MubW92ZVRvKHIrcVswXSprKnRoaXMuZm9udFN0cmV0Y2gsby1xWzFdKmspO2U9ZmFsc2V9ZWxzZXtzLmxpbmVUbyhyK3FbMF0qayp0aGlzLmZvbnRTdHJldGNoLG8tcVsxXSprKX19cy5zdHJva2UoKTtyKz1tLndpZHRoKmsqdGhpcy5mb250U3RyZXRjaH1zLnJlc3RvcmUoKTtyZXR1cm4gcH07YS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5sZXR0ZXJzPXsiICI6e3dpZHRoOjE2LHBvaW50czpbXX0sIiEiOnt3aWR0aDoxMCxwb2ludHM6W1s1LDIxXSxbNSw3XSxbLTEsLTFdLFs1LDJdLFs0LDFdLFs1LDBdLFs2LDFdLFs1LDJdXX0sJyInOnt3aWR0aDoxNixwb2ludHM6W1s0LDIxXSxbNCwxNF0sWy0xLC0xXSxbMTIsMjFdLFsxMiwxNF1dfSwiIyI6e3dpZHRoOjIxLHBvaW50czpbWzExLDI1XSxbNCwtN10sWy0xLC0xXSxbMTcsMjVdLFsxMCwtN10sWy0xLC0xXSxbNCwxMl0sWzE4LDEyXSxbLTEsLTFdLFszLDZdLFsxNyw2XV19LCIkIjp7d2lkdGg6MjAscG9pbnRzOltbOCwyNV0sWzgsLTRdLFstMSwtMV0sWzEyLDI1XSxbMTIsLTRdLFstMSwtMV0sWzE3LDE4XSxbMTUsMjBdLFsxMiwyMV0sWzgsMjFdLFs1LDIwXSxbMywxOF0sWzMsMTZdLFs0LDE0XSxbNSwxM10sWzcsMTJdLFsxMywxMF0sWzE1LDldLFsxNiw4XSxbMTcsNl0sWzE3LDNdLFsxNSwxXSxbMTIsMF0sWzgsMF0sWzUsMV0sWzMsM11dfSwiJSI6e3dpZHRoOjI0LHBvaW50czpbWzIxLDIxXSxbMywwXSxbLTEsLTFdLFs4LDIxXSxbMTAsMTldLFsxMCwxN10sWzksMTVdLFs3LDE0XSxbNSwxNF0sWzMsMTZdLFszLDE4XSxbNCwyMF0sWzYsMjFdLFs4LDIxXSxbMTAsMjBdLFsxMywxOV0sWzE2LDE5XSxbMTksMjBdLFsyMSwyMV0sWy0xLC0xXSxbMTcsN10sWzE1LDZdLFsxNCw0XSxbMTQsMl0sWzE2LDBdLFsxOCwwXSxbMjAsMV0sWzIxLDNdLFsyMSw1XSxbMTksN10sWzE3LDddXX0sIiYiOnt3aWR0aDoyNixwb2ludHM6W1syMywxMl0sWzIzLDEzXSxbMjIsMTRdLFsyMSwxNF0sWzIwLDEzXSxbMTksMTFdLFsxNyw2XSxbMTUsM10sWzEzLDFdLFsxMSwwXSxbNywwXSxbNSwxXSxbNCwyXSxbMyw0XSxbMyw2XSxbNCw4XSxbNSw5XSxbMTIsMTNdLFsxMywxNF0sWzE0LDE2XSxbMTQsMThdLFsxMywyMF0sWzExLDIxXSxbOSwyMF0sWzgsMThdLFs4LDE2XSxbOSwxM10sWzExLDEwXSxbMTYsM10sWzE4LDFdLFsyMCwwXSxbMjIsMF0sWzIzLDFdLFsyMywyXV19LCInIjp7d2lkdGg6MTAscG9pbnRzOltbNSwxOV0sWzQsMjBdLFs1LDIxXSxbNiwyMF0sWzYsMThdLFs1LDE2XSxbNCwxNV1dfSwiKCI6e3dpZHRoOjE0LHBvaW50czpbWzExLDI1XSxbOSwyM10sWzcsMjBdLFs1LDE2XSxbNCwxMV0sWzQsN10sWzUsMl0sWzcsLTJdLFs5LC01XSxbMTEsLTddXX0sIikiOnt3aWR0aDoxNCxwb2ludHM6W1szLDI1XSxbNSwyM10sWzcsMjBdLFs5LDE2XSxbMTAsMTFdLFsxMCw3XSxbOSwyXSxbNywtMl0sWzUsLTVdLFszLC03XV19LCIqIjp7d2lkdGg6MTYscG9pbnRzOltbOCwyMV0sWzgsOV0sWy0xLC0xXSxbMywxOF0sWzEzLDEyXSxbLTEsLTFdLFsxMywxOF0sWzMsMTJdXX0sIisiOnt3aWR0aDoyNixwb2ludHM6W1sxMywxOF0sWzEzLDBdLFstMSwtMV0sWzQsOV0sWzIyLDldXX0sIiwiOnt3aWR0aDoxMCxwb2ludHM6W1s2LDFdLFs1LDBdLFs0LDFdLFs1LDJdLFs2LDFdLFs2LC0xXSxbNSwtM10sWzQsLTRdXX0sIi0iOnt3aWR0aDoxOCxwb2ludHM6W1s2LDldLFsxMiw5XV19LCIuIjp7d2lkdGg6MTAscG9pbnRzOltbNSwyXSxbNCwxXSxbNSwwXSxbNiwxXSxbNSwyXV19LCIvIjp7d2lkdGg6MjIscG9pbnRzOltbMjAsMjVdLFsyLC03XV19LCIwIjp7d2lkdGg6MjAscG9pbnRzOltbOSwyMV0sWzYsMjBdLFs0LDE3XSxbMywxMl0sWzMsOV0sWzQsNF0sWzYsMV0sWzksMF0sWzExLDBdLFsxNCwxXSxbMTYsNF0sWzE3LDldLFsxNywxMl0sWzE2LDE3XSxbMTQsMjBdLFsxMSwyMV0sWzksMjFdXX0sIjEiOnt3aWR0aDoyMCxwb2ludHM6W1s2LDE3XSxbOCwxOF0sWzExLDIxXSxbMTEsMF1dfSwiMiI6e3dpZHRoOjIwLHBvaW50czpbWzQsMTZdLFs0LDE3XSxbNSwxOV0sWzYsMjBdLFs4LDIxXSxbMTIsMjFdLFsxNCwyMF0sWzE1LDE5XSxbMTYsMTddLFsxNiwxNV0sWzE1LDEzXSxbMTMsMTBdLFszLDBdLFsxNywwXV19LCIzIjp7d2lkdGg6MjAscG9pbnRzOltbNSwyMV0sWzE2LDIxXSxbMTAsMTNdLFsxMywxM10sWzE1LDEyXSxbMTYsMTFdLFsxNyw4XSxbMTcsNl0sWzE2LDNdLFsxNCwxXSxbMTEsMF0sWzgsMF0sWzUsMV0sWzQsMl0sWzMsNF1dfSwiNCI6e3dpZHRoOjIwLHBvaW50czpbWzEzLDIxXSxbMyw3XSxbMTgsN10sWy0xLC0xXSxbMTMsMjFdLFsxMywwXV19LCI1Ijp7d2lkdGg6MjAscG9pbnRzOltbMTUsMjFdLFs1LDIxXSxbNCwxMl0sWzUsMTNdLFs4LDE0XSxbMTEsMTRdLFsxNCwxM10sWzE2LDExXSxbMTcsOF0sWzE3LDZdLFsxNiwzXSxbMTQsMV0sWzExLDBdLFs4LDBdLFs1LDFdLFs0LDJdLFszLDRdXX0sIjYiOnt3aWR0aDoyMCxwb2ludHM6W1sxNiwxOF0sWzE1LDIwXSxbMTIsMjFdLFsxMCwyMV0sWzcsMjBdLFs1LDE3XSxbNCwxMl0sWzQsN10sWzUsM10sWzcsMV0sWzEwLDBdLFsxMSwwXSxbMTQsMV0sWzE2LDNdLFsxNyw2XSxbMTcsN10sWzE2LDEwXSxbMTQsMTJdLFsxMSwxM10sWzEwLDEzXSxbNywxMl0sWzUsMTBdLFs0LDddXX0sIjciOnt3aWR0aDoyMCxwb2ludHM6W1sxNywyMV0sWzcsMF0sWy0xLC0xXSxbMywyMV0sWzE3LDIxXV19LCI4Ijp7d2lkdGg6MjAscG9pbnRzOltbOCwyMV0sWzUsMjBdLFs0LDE4XSxbNCwxNl0sWzUsMTRdLFs3LDEzXSxbMTEsMTJdLFsxNCwxMV0sWzE2LDldLFsxNyw3XSxbMTcsNF0sWzE2LDJdLFsxNSwxXSxbMTIsMF0sWzgsMF0sWzUsMV0sWzQsMl0sWzMsNF0sWzMsN10sWzQsOV0sWzYsMTFdLFs5LDEyXSxbMTMsMTNdLFsxNSwxNF0sWzE2LDE2XSxbMTYsMThdLFsxNSwyMF0sWzEyLDIxXSxbOCwyMV1dfSwiOSI6e3dpZHRoOjIwLHBvaW50czpbWzE2LDE0XSxbMTUsMTFdLFsxMyw5XSxbMTAsOF0sWzksOF0sWzYsOV0sWzQsMTFdLFszLDE0XSxbMywxNV0sWzQsMThdLFs2LDIwXSxbOSwyMV0sWzEwLDIxXSxbMTMsMjBdLFsxNSwxOF0sWzE2LDE0XSxbMTYsOV0sWzE1LDRdLFsxMywxXSxbMTAsMF0sWzgsMF0sWzUsMV0sWzQsM11dfSwiOiI6e3dpZHRoOjEwLHBvaW50czpbWzUsMTRdLFs0LDEzXSxbNSwxMl0sWzYsMTNdLFs1LDE0XSxbLTEsLTFdLFs1LDJdLFs0LDFdLFs1LDBdLFs2LDFdLFs1LDJdXX0sIjsiOnt3aWR0aDoxMCxwb2ludHM6W1s1LDE0XSxbNCwxM10sWzUsMTJdLFs2LDEzXSxbNSwxNF0sWy0xLC0xXSxbNiwxXSxbNSwwXSxbNCwxXSxbNSwyXSxbNiwxXSxbNiwtMV0sWzUsLTNdLFs0LC00XV19LCI8Ijp7d2lkdGg6MjQscG9pbnRzOltbMjAsMThdLFs0LDldLFsyMCwwXV19LCI9Ijp7d2lkdGg6MjYscG9pbnRzOltbNCwxMl0sWzIyLDEyXSxbLTEsLTFdLFs0LDZdLFsyMiw2XV19LCI+Ijp7d2lkdGg6MjQscG9pbnRzOltbNCwxOF0sWzIwLDldLFs0LDBdXX0sIj8iOnt3aWR0aDoxOCxwb2ludHM6W1szLDE2XSxbMywxN10sWzQsMTldLFs1LDIwXSxbNywyMV0sWzExLDIxXSxbMTMsMjBdLFsxNCwxOV0sWzE1LDE3XSxbMTUsMTVdLFsxNCwxM10sWzEzLDEyXSxbOSwxMF0sWzksN10sWy0xLC0xXSxbOSwyXSxbOCwxXSxbOSwwXSxbMTAsMV0sWzksMl1dfSwiQCI6e3dpZHRoOjI3LHBvaW50czpbWzE4LDEzXSxbMTcsMTVdLFsxNSwxNl0sWzEyLDE2XSxbMTAsMTVdLFs5LDE0XSxbOCwxMV0sWzgsOF0sWzksNl0sWzExLDVdLFsxNCw1XSxbMTYsNl0sWzE3LDhdLFstMSwtMV0sWzEyLDE2XSxbMTAsMTRdLFs5LDExXSxbOSw4XSxbMTAsNl0sWzExLDVdLFstMSwtMV0sWzE4LDE2XSxbMTcsOF0sWzE3LDZdLFsxOSw1XSxbMjEsNV0sWzIzLDddLFsyNCwxMF0sWzI0LDEyXSxbMjMsMTVdLFsyMiwxN10sWzIwLDE5XSxbMTgsMjBdLFsxNSwyMV0sWzEyLDIxXSxbOSwyMF0sWzcsMTldLFs1LDE3XSxbNCwxNV0sWzMsMTJdLFszLDldLFs0LDZdLFs1LDRdLFs3LDJdLFs5LDFdLFsxMiwwXSxbMTUsMF0sWzE4LDFdLFsyMCwyXSxbMjEsM10sWy0xLC0xXSxbMTksMTZdLFsxOCw4XSxbMTgsNl0sWzE5LDVdXX0sQTp7d2lkdGg6MTgscG9pbnRzOltbOSwyMV0sWzEsMF0sWy0xLC0xXSxbOSwyMV0sWzE3LDBdLFstMSwtMV0sWzQsN10sWzE0LDddXX0sQjp7d2lkdGg6MjEscG9pbnRzOltbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwyMV0sWzEzLDIxXSxbMTYsMjBdLFsxNywxOV0sWzE4LDE3XSxbMTgsMTVdLFsxNywxM10sWzE2LDEyXSxbMTMsMTFdLFstMSwtMV0sWzQsMTFdLFsxMywxMV0sWzE2LDEwXSxbMTcsOV0sWzE4LDddLFsxOCw0XSxbMTcsMl0sWzE2LDFdLFsxMywwXSxbNCwwXV19LEM6e3dpZHRoOjIxLHBvaW50czpbWzE4LDE2XSxbMTcsMThdLFsxNSwyMF0sWzEzLDIxXSxbOSwyMV0sWzcsMjBdLFs1LDE4XSxbNCwxNl0sWzMsMTNdLFszLDhdLFs0LDVdLFs1LDNdLFs3LDFdLFs5LDBdLFsxMywwXSxbMTUsMV0sWzE3LDNdLFsxOCw1XV19LEQ6e3dpZHRoOjIxLHBvaW50czpbWzQsMjFdLFs0LDBdLFstMSwtMV0sWzQsMjFdLFsxMSwyMV0sWzE0LDIwXSxbMTYsMThdLFsxNywxNl0sWzE4LDEzXSxbMTgsOF0sWzE3LDVdLFsxNiwzXSxbMTQsMV0sWzExLDBdLFs0LDBdXX0sRTp7d2lkdGg6MTkscG9pbnRzOltbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwyMV0sWzE3LDIxXSxbLTEsLTFdLFs0LDExXSxbMTIsMTFdLFstMSwtMV0sWzQsMF0sWzE3LDBdXX0sRjp7d2lkdGg6MTgscG9pbnRzOltbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwyMV0sWzE3LDIxXSxbLTEsLTFdLFs0LDExXSxbMTIsMTFdXX0sRzp7d2lkdGg6MjEscG9pbnRzOltbMTgsMTZdLFsxNywxOF0sWzE1LDIwXSxbMTMsMjFdLFs5LDIxXSxbNywyMF0sWzUsMThdLFs0LDE2XSxbMywxM10sWzMsOF0sWzQsNV0sWzUsM10sWzcsMV0sWzksMF0sWzEzLDBdLFsxNSwxXSxbMTcsM10sWzE4LDVdLFsxOCw4XSxbLTEsLTFdLFsxMyw4XSxbMTgsOF1dfSxIOnt3aWR0aDoyMixwb2ludHM6W1s0LDIxXSxbNCwwXSxbLTEsLTFdLFsxOCwyMV0sWzE4LDBdLFstMSwtMV0sWzQsMTFdLFsxOCwxMV1dfSxJOnt3aWR0aDo4LHBvaW50czpbWzQsMjFdLFs0LDBdXX0sSjp7d2lkdGg6MTYscG9pbnRzOltbMTIsMjFdLFsxMiw1XSxbMTEsMl0sWzEwLDFdLFs4LDBdLFs2LDBdLFs0LDFdLFszLDJdLFsyLDVdLFsyLDddXX0sSzp7d2lkdGg6MjEscG9pbnRzOltbNCwyMV0sWzQsMF0sWy0xLC0xXSxbMTgsMjFdLFs0LDddLFstMSwtMV0sWzksMTJdLFsxOCwwXV19LEw6e3dpZHRoOjE3LHBvaW50czpbWzQsMjFdLFs0LDBdLFstMSwtMV0sWzQsMF0sWzE2LDBdXX0sTTp7d2lkdGg6MjQscG9pbnRzOltbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwyMV0sWzEyLDBdLFstMSwtMV0sWzIwLDIxXSxbMTIsMF0sWy0xLC0xXSxbMjAsMjFdLFsyMCwwXV19LE46e3dpZHRoOjIyLHBvaW50czpbWzQsMjFdLFs0LDBdLFstMSwtMV0sWzQsMjFdLFsxOCwwXSxbLTEsLTFdLFsxOCwyMV0sWzE4LDBdXX0sTzp7d2lkdGg6MjIscG9pbnRzOltbOSwyMV0sWzcsMjBdLFs1LDE4XSxbNCwxNl0sWzMsMTNdLFszLDhdLFs0LDVdLFs1LDNdLFs3LDFdLFs5LDBdLFsxMywwXSxbMTUsMV0sWzE3LDNdLFsxOCw1XSxbMTksOF0sWzE5LDEzXSxbMTgsMTZdLFsxNywxOF0sWzE1LDIwXSxbMTMsMjFdLFs5LDIxXV19LFA6e3dpZHRoOjIxLHBvaW50czpbWzQsMjFdLFs0LDBdLFstMSwtMV0sWzQsMjFdLFsxMywyMV0sWzE2LDIwXSxbMTcsMTldLFsxOCwxN10sWzE4LDE0XSxbMTcsMTJdLFsxNiwxMV0sWzEzLDEwXSxbNCwxMF1dfSxROnt3aWR0aDoyMixwb2ludHM6W1s5LDIxXSxbNywyMF0sWzUsMThdLFs0LDE2XSxbMywxM10sWzMsOF0sWzQsNV0sWzUsM10sWzcsMV0sWzksMF0sWzEzLDBdLFsxNSwxXSxbMTcsM10sWzE4LDVdLFsxOSw4XSxbMTksMTNdLFsxOCwxNl0sWzE3LDE4XSxbMTUsMjBdLFsxMywyMV0sWzksMjFdLFstMSwtMV0sWzEyLDRdLFsxOCwtMl1dfSxSOnt3aWR0aDoyMSxwb2ludHM6W1s0LDIxXSxbNCwwXSxbLTEsLTFdLFs0LDIxXSxbMTMsMjFdLFsxNiwyMF0sWzE3LDE5XSxbMTgsMTddLFsxOCwxNV0sWzE3LDEzXSxbMTYsMTJdLFsxMywxMV0sWzQsMTFdLFstMSwtMV0sWzExLDExXSxbMTgsMF1dfSxTOnt3aWR0aDoyMCxwb2ludHM6W1sxNywxOF0sWzE1LDIwXSxbMTIsMjFdLFs4LDIxXSxbNSwyMF0sWzMsMThdLFszLDE2XSxbNCwxNF0sWzUsMTNdLFs3LDEyXSxbMTMsMTBdLFsxNSw5XSxbMTYsOF0sWzE3LDZdLFsxNywzXSxbMTUsMV0sWzEyLDBdLFs4LDBdLFs1LDFdLFszLDNdXX0sVDp7d2lkdGg6MTYscG9pbnRzOltbOCwyMV0sWzgsMF0sWy0xLC0xXSxbMSwyMV0sWzE1LDIxXV19LFU6e3dpZHRoOjIyLHBvaW50czpbWzQsMjFdLFs0LDZdLFs1LDNdLFs3LDFdLFsxMCwwXSxbMTIsMF0sWzE1LDFdLFsxNywzXSxbMTgsNl0sWzE4LDIxXV19LFY6e3dpZHRoOjE4LHBvaW50czpbWzEsMjFdLFs5LDBdLFstMSwtMV0sWzE3LDIxXSxbOSwwXV19LFc6e3dpZHRoOjI0LHBvaW50czpbWzIsMjFdLFs3LDBdLFstMSwtMV0sWzEyLDIxXSxbNywwXSxbLTEsLTFdLFsxMiwyMV0sWzE3LDBdLFstMSwtMV0sWzIyLDIxXSxbMTcsMF1dfSxYOnt3aWR0aDoyMCxwb2ludHM6W1szLDIxXSxbMTcsMF0sWy0xLC0xXSxbMTcsMjFdLFszLDBdXX0sWTp7d2lkdGg6MTgscG9pbnRzOltbMSwyMV0sWzksMTFdLFs5LDBdLFstMSwtMV0sWzE3LDIxXSxbOSwxMV1dfSxaOnt3aWR0aDoyMCxwb2ludHM6W1sxNywyMV0sWzMsMF0sWy0xLC0xXSxbMywyMV0sWzE3LDIxXSxbLTEsLTFdLFszLDBdLFsxNywwXV19LCJbIjp7d2lkdGg6MTQscG9pbnRzOltbNCwyNV0sWzQsLTddLFstMSwtMV0sWzUsMjVdLFs1LC03XSxbLTEsLTFdLFs0LDI1XSxbMTEsMjVdLFstMSwtMV0sWzQsLTddLFsxMSwtN11dfSwiXFwiOnt3aWR0aDoxNCxwb2ludHM6W1swLDIxXSxbMTQsLTNdXX0sIl0iOnt3aWR0aDoxNCxwb2ludHM6W1s5LDI1XSxbOSwtN10sWy0xLC0xXSxbMTAsMjVdLFsxMCwtN10sWy0xLC0xXSxbMywyNV0sWzEwLDI1XSxbLTEsLTFdLFszLC03XSxbMTAsLTddXX0sIl4iOnt3aWR0aDoxNixwb2ludHM6W1s2LDE1XSxbOCwxOF0sWzEwLDE1XSxbLTEsLTFdLFszLDEyXSxbOCwxN10sWzEzLDEyXSxbLTEsLTFdLFs4LDE3XSxbOCwwXV19LF86e3dpZHRoOjE2LHBvaW50czpbWzAsLTJdLFsxNiwtMl1dfSwiYCI6e3dpZHRoOjEwLHBvaW50czpbWzYsMjFdLFs1LDIwXSxbNCwxOF0sWzQsMTZdLFs1LDE1XSxbNiwxNl0sWzUsMTddXX0sYTp7d2lkdGg6MTkscG9pbnRzOltbMTUsMTRdLFsxNSwwXSxbLTEsLTFdLFsxNSwxMV0sWzEzLDEzXSxbMTEsMTRdLFs4LDE0XSxbNiwxM10sWzQsMTFdLFszLDhdLFszLDZdLFs0LDNdLFs2LDFdLFs4LDBdLFsxMSwwXSxbMTMsMV0sWzE1LDNdXX0sYjp7d2lkdGg6MTkscG9pbnRzOltbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwxMV0sWzYsMTNdLFs4LDE0XSxbMTEsMTRdLFsxMywxM10sWzE1LDExXSxbMTYsOF0sWzE2LDZdLFsxNSwzXSxbMTMsMV0sWzExLDBdLFs4LDBdLFs2LDFdLFs0LDNdXX0sYzp7d2lkdGg6MTgscG9pbnRzOltbMTUsMTFdLFsxMywxM10sWzExLDE0XSxbOCwxNF0sWzYsMTNdLFs0LDExXSxbMyw4XSxbMyw2XSxbNCwzXSxbNiwxXSxbOCwwXSxbMTEsMF0sWzEzLDFdLFsxNSwzXV19LGQ6e3dpZHRoOjE5LHBvaW50czpbWzE1LDIxXSxbMTUsMF0sWy0xLC0xXSxbMTUsMTFdLFsxMywxM10sWzExLDE0XSxbOCwxNF0sWzYsMTNdLFs0LDExXSxbMyw4XSxbMyw2XSxbNCwzXSxbNiwxXSxbOCwwXSxbMTEsMF0sWzEzLDFdLFsxNSwzXV19LGU6e3dpZHRoOjE4LHBvaW50czpbWzMsOF0sWzE1LDhdLFsxNSwxMF0sWzE0LDEyXSxbMTMsMTNdLFsxMSwxNF0sWzgsMTRdLFs2LDEzXSxbNCwxMV0sWzMsOF0sWzMsNl0sWzQsM10sWzYsMV0sWzgsMF0sWzExLDBdLFsxMywxXSxbMTUsM11dfSxmOnt3aWR0aDoxMixwb2ludHM6W1sxMCwyMV0sWzgsMjFdLFs2LDIwXSxbNSwxN10sWzUsMF0sWy0xLC0xXSxbMiwxNF0sWzksMTRdXX0sZzp7d2lkdGg6MTkscG9pbnRzOltbMTUsMTRdLFsxNSwtMl0sWzE0LC01XSxbMTMsLTZdLFsxMSwtN10sWzgsLTddLFs2LC02XSxbLTEsLTFdLFsxNSwxMV0sWzEzLDEzXSxbMTEsMTRdLFs4LDE0XSxbNiwxM10sWzQsMTFdLFszLDhdLFszLDZdLFs0LDNdLFs2LDFdLFs4LDBdLFsxMSwwXSxbMTMsMV0sWzE1LDNdXX0saDp7d2lkdGg6MTkscG9pbnRzOltbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwxMF0sWzcsMTNdLFs5LDE0XSxbMTIsMTRdLFsxNCwxM10sWzE1LDEwXSxbMTUsMF1dfSxpOnt3aWR0aDo4LHBvaW50czpbWzMsMjFdLFs0LDIwXSxbNSwyMV0sWzQsMjJdLFszLDIxXSxbLTEsLTFdLFs0LDE0XSxbNCwwXV19LGo6e3dpZHRoOjEwLHBvaW50czpbWzUsMjFdLFs2LDIwXSxbNywyMV0sWzYsMjJdLFs1LDIxXSxbLTEsLTFdLFs2LDE0XSxbNiwtM10sWzUsLTZdLFszLC03XSxbMSwtN11dfSxrOnt3aWR0aDoxNyxwb2ludHM6W1s0LDIxXSxbNCwwXSxbLTEsLTFdLFsxNCwxNF0sWzQsNF0sWy0xLC0xXSxbOCw4XSxbMTUsMF1dfSxsOnt3aWR0aDo4LHBvaW50czpbWzQsMjFdLFs0LDBdXX0sbTp7d2lkdGg6MzAscG9pbnRzOltbNCwxNF0sWzQsMF0sWy0xLC0xXSxbNCwxMF0sWzcsMTNdLFs5LDE0XSxbMTIsMTRdLFsxNCwxM10sWzE1LDEwXSxbMTUsMF0sWy0xLC0xXSxbMTUsMTBdLFsxOCwxM10sWzIwLDE0XSxbMjMsMTRdLFsyNSwxM10sWzI2LDEwXSxbMjYsMF1dfSxuOnt3aWR0aDoxOSxwb2ludHM6W1s0LDE0XSxbNCwwXSxbLTEsLTFdLFs0LDEwXSxbNywxM10sWzksMTRdLFsxMiwxNF0sWzE0LDEzXSxbMTUsMTBdLFsxNSwwXV19LG86e3dpZHRoOjE5LHBvaW50czpbWzgsMTRdLFs2LDEzXSxbNCwxMV0sWzMsOF0sWzMsNl0sWzQsM10sWzYsMV0sWzgsMF0sWzExLDBdLFsxMywxXSxbMTUsM10sWzE2LDZdLFsxNiw4XSxbMTUsMTFdLFsxMywxM10sWzExLDE0XSxbOCwxNF1dfSxwOnt3aWR0aDoxOSxwb2ludHM6W1s0LDE0XSxbNCwtN10sWy0xLC0xXSxbNCwxMV0sWzYsMTNdLFs4LDE0XSxbMTEsMTRdLFsxMywxM10sWzE1LDExXSxbMTYsOF0sWzE2LDZdLFsxNSwzXSxbMTMsMV0sWzExLDBdLFs4LDBdLFs2LDFdLFs0LDNdXX0scTp7d2lkdGg6MTkscG9pbnRzOltbMTUsMTRdLFsxNSwtN10sWy0xLC0xXSxbMTUsMTFdLFsxMywxM10sWzExLDE0XSxbOCwxNF0sWzYsMTNdLFs0LDExXSxbMyw4XSxbMyw2XSxbNCwzXSxbNiwxXSxbOCwwXSxbMTEsMF0sWzEzLDFdLFsxNSwzXV19LHI6e3dpZHRoOjEzLHBvaW50czpbWzQsMTRdLFs0LDBdLFstMSwtMV0sWzQsOF0sWzUsMTFdLFs3LDEzXSxbOSwxNF0sWzEyLDE0XV19LHM6e3dpZHRoOjE3LHBvaW50czpbWzE0LDExXSxbMTMsMTNdLFsxMCwxNF0sWzcsMTRdLFs0LDEzXSxbMywxMV0sWzQsOV0sWzYsOF0sWzExLDddLFsxMyw2XSxbMTQsNF0sWzE0LDNdLFsxMywxXSxbMTAsMF0sWzcsMF0sWzQsMV0sWzMsM11dfSx0Ont3aWR0aDoxMixwb2ludHM6W1s1LDIxXSxbNSw0XSxbNiwxXSxbOCwwXSxbMTAsMF0sWy0xLC0xXSxbMiwxNF0sWzksMTRdXX0sdTp7d2lkdGg6MTkscG9pbnRzOltbNCwxNF0sWzQsNF0sWzUsMV0sWzcsMF0sWzEwLDBdLFsxMiwxXSxbMTUsNF0sWy0xLC0xXSxbMTUsMTRdLFsxNSwwXV19LHY6e3dpZHRoOjE2LHBvaW50czpbWzIsMTRdLFs4LDBdLFstMSwtMV0sWzE0LDE0XSxbOCwwXV19LHc6e3dpZHRoOjIyLHBvaW50czpbWzMsMTRdLFs3LDBdLFstMSwtMV0sWzExLDE0XSxbNywwXSxbLTEsLTFdLFsxMSwxNF0sWzE1LDBdLFstMSwtMV0sWzE5LDE0XSxbMTUsMF1dfSx4Ont3aWR0aDoxNyxwb2ludHM6W1szLDE0XSxbMTQsMF0sWy0xLC0xXSxbMTQsMTRdLFszLDBdXX0seTp7d2lkdGg6MTYscG9pbnRzOltbMiwxNF0sWzgsMF0sWy0xLC0xXSxbMTQsMTRdLFs4LDBdLFs2LC00XSxbNCwtNl0sWzIsLTddLFsxLC03XV19LHo6e3dpZHRoOjE3LHBvaW50czpbWzE0LDE0XSxbMywwXSxbLTEsLTFdLFszLDE0XSxbMTQsMTRdLFstMSwtMV0sWzMsMF0sWzE0LDBdXX0sInsiOnt3aWR0aDoxNCxwb2ludHM6W1s5LDI1XSxbNywyNF0sWzYsMjNdLFs1LDIxXSxbNSwxOV0sWzYsMTddLFs3LDE2XSxbOCwxNF0sWzgsMTJdLFs2LDEwXSxbLTEsLTFdLFs3LDI0XSxbNiwyMl0sWzYsMjBdLFs3LDE4XSxbOCwxN10sWzksMTVdLFs5LDEzXSxbOCwxMV0sWzQsOV0sWzgsN10sWzksNV0sWzksM10sWzgsMV0sWzcsMF0sWzYsLTJdLFs2LC00XSxbNywtNl0sWy0xLC0xXSxbNiw4XSxbOCw2XSxbOCw0XSxbNywyXSxbNiwxXSxbNSwtMV0sWzUsLTNdLFs2LC01XSxbNywtNl0sWzksLTddXX0sInwiOnt3aWR0aDo4LHBvaW50czpbWzQsMjVdLFs0LC03XV19LCJ9Ijp7d2lkdGg6MTQscG9pbnRzOltbNSwyNV0sWzcsMjRdLFs4LDIzXSxbOSwyMV0sWzksMTldLFs4LDE3XSxbNywxNl0sWzYsMTRdLFs2LDEyXSxbOCwxMF0sWy0xLC0xXSxbNywyNF0sWzgsMjJdLFs4LDIwXSxbNywxOF0sWzYsMTddLFs1LDE1XSxbNSwxM10sWzYsMTFdLFsxMCw5XSxbNiw3XSxbNSw1XSxbNSwzXSxbNiwxXSxbNywwXSxbOCwtMl0sWzgsLTRdLFs3LC02XSxbLTEsLTFdLFs4LDhdLFs2LDZdLFs2LDRdLFs3LDJdLFs4LDFdLFs5LC0xXSxbOSwtM10sWzgsLTVdLFs3LC02XSxbNSwtN11dfSwifiI6e3dpZHRoOjI0LHBvaW50czpbWzMsNl0sWzMsOF0sWzQsMTFdLFs2LDEyXSxbOCwxMl0sWzEwLDExXSxbMTQsOF0sWzE2LDddLFsxOCw3XSxbMjAsOF0sWzIxLDEwXSxbLTEsLTFdLFszLDhdLFs0LDEwXSxbNiwxMV0sWzgsMTFdLFsxMCwxMF0sWzE0LDddLFsxNiw2XSxbMTgsNl0sWzIwLDddLFsyMSwxMF0sWzIxLDEyXV19fTthLmpxcGxvdC5DYW52YXNGb250UmVuZGVyZXI9ZnVuY3Rpb24oYil7Yj1ifHx7fTtpZighYi5wdDJweCl7Yi5wdDJweD0xLjV9YS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLmNhbGwodGhpcyxiKX07YS5qcXBsb3QuQ2FudmFzRm9udFJlbmRlcmVyLnByb3RvdHlwZT1uZXcgYS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyKHt9KTthLmpxcGxvdC5DYW52YXNGb250UmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWEuanFwbG90LkNhbnZhc0ZvbnRSZW5kZXJlcjthLmpxcGxvdC5DYW52YXNGb250UmVuZGVyZXIucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24oYyxlKXt2YXIgZD10aGlzLmZvbnRTaXplKyIgIit0aGlzLmZvbnRGYW1pbHk7Yy5zYXZlKCk7Yy5mb250PWQ7dmFyIGI9Yy5tZWFzdXJlVGV4dChlKS53aWR0aDtjLnJlc3RvcmUoKTtyZXR1cm4gYn07YS5qcXBsb3QuQ2FudmFzRm9udFJlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGUsZyl7dmFyIGM9MDt2YXIgaD10aGlzLmhlaWdodCowLjcyO2Uuc2F2ZSgpO3ZhciBkLGI7aWYoKC1NYXRoLlBJLzI8PXRoaXMuYW5nbGUmJnRoaXMuYW5nbGU8PTApfHwoTWF0aC5QSSozLzI8PXRoaXMuYW5nbGUmJnRoaXMuYW5nbGU8PU1hdGguUEkqMikpe2Q9MDtiPS1NYXRoLnNpbih0aGlzLmFuZ2xlKSp0aGlzLndpZHRofWVsc2V7aWYoKDA8dGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9TWF0aC5QSS8yKXx8KC1NYXRoLlBJKjI8PXRoaXMuYW5nbGUmJnRoaXMuYW5nbGU8PS1NYXRoLlBJKjMvMikpe2Q9TWF0aC5zaW4odGhpcy5hbmdsZSkqdGhpcy5oZWlnaHQ7Yj0wfWVsc2V7aWYoKC1NYXRoLlBJPHRoaXMuYW5nbGUmJnRoaXMuYW5nbGU8LU1hdGguUEkvMil8fChNYXRoLlBJPD10aGlzLmFuZ2xlJiZ0aGlzLmFuZ2xlPD1NYXRoLlBJKjMvMikpe2Q9LU1hdGguY29zKHRoaXMuYW5nbGUpKnRoaXMud2lkdGg7Yj0tTWF0aC5zaW4odGhpcy5hbmdsZSkqdGhpcy53aWR0aC1NYXRoLmNvcyh0aGlzLmFuZ2xlKSp0aGlzLmhlaWdodH1lbHNle2lmKCgtTWF0aC5QSSozLzI8dGhpcy5hbmdsZSYmdGhpcy5hbmdsZTxNYXRoLlBJKXx8KE1hdGguUEkvMjx0aGlzLmFuZ2xlJiZ0aGlzLmFuZ2xlPE1hdGguUEkpKXtkPU1hdGguc2luKHRoaXMuYW5nbGUpKnRoaXMuaGVpZ2h0LU1hdGguY29zKHRoaXMuYW5nbGUpKnRoaXMud2lkdGg7Yj0tTWF0aC5jb3ModGhpcy5hbmdsZSkqdGhpcy5oZWlnaHR9fX19ZS5zdHJva2VTdHlsZT10aGlzLmZpbGxTdHlsZTtlLmZpbGxTdHlsZT10aGlzLmZpbGxTdHlsZTt2YXIgZj10aGlzLmZvbnRTaXplKyIgIit0aGlzLmZvbnRGYW1pbHk7ZS5mb250PWY7ZS50cmFuc2xhdGUoZCxiKTtlLnJvdGF0ZSh0aGlzLmFuZ2xlKTtlLmZpbGxUZXh0KGcsYyxoKTtlLnJlc3RvcmUoKX19KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.categoryAxisRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgeyAgIAogICAgLyoqCiAgICAqICBjbGFzczogJC5qcXBsb3QuQ2F0ZWdvcnlBeGlzUmVuZGVyZXIKICAgICogIEEgcGx1Z2luIGZvciBqcVBsb3QgdG8gcmVuZGVyIGEgY2F0ZWdvcnkgc3R5bGUgYXhpcywgd2l0aCBlcXVhbCBwaXhlbCBzcGFjaW5nIGJldHdlZW4geSBkYXRhIHZhbHVlcyBvZiBhIHNlcmllcy4KICAgICogIAogICAgKiAgVG8gdXNlIHRoaXMgcmVuZGVyZXIsIGluY2x1ZGUgdGhlIHBsdWdpbiBpbiB5b3VyIHNvdXJjZQogICAgKiAgPiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0icGx1Z2lucy9qcXBsb3QuY2F0ZWdvcnlBeGlzUmVuZGVyZXIuanMiPjwvc2NyaXB0PgogICAgKiAgCiAgICAqICBhbmQgc3VwcGx5IHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIHRvIHlvdXIgcGxvdAogICAgKiAgCiAgICAqICA+IHtheGVzOnt4YXhpczp7cmVuZGVyZXI6JC5qcXBsb3QuQ2F0ZWdvcnlBeGlzUmVuZGVyZXJ9fX0KICAgICoqLwogICAgJC5qcXBsb3QuQ2F0ZWdvcnlBeGlzUmVuZGVyZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgJC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyLmNhbGwodGhpcyk7CiAgICAgICAgLy8gcHJvcDogc29ydE1lcmdlZExhYmVscwogICAgICAgIC8vIFRydWUgdG8gc29ydCB0aWNrIGxhYmVscyB3aGVuIGxhYmVscyBhcmUgY3JlYXRlZCBieSBtZXJnaW5nCiAgICAgICAgLy8geCBheGlzIHZhbHVlcyBmcm9tIG11bHRpcGxlIHNlcmllcy4gIFRoYXQgaXMsIHNheSB5b3UgaGF2ZQogICAgICAgIC8vIHR3byBzZXJpZXMgbGlrZToKICAgICAgICAvLyA+IGxpbmUxID0gW1syMDA2LCA0XSwgICAgICAgICAgICBbMjAwOCwgOV0sIFsyMDA5LCAxNl1dOwogICAgICAgIC8vID4gbGluZTIgPSBbWzIwMDYsIDNdLCBbMjAwNywgN10sIFsyMDA4LCA2XV07CiAgICAgICAgLy8gSWYgbm8gbGFiZWwgYXJyYXkgaXMgc3BlY2lmaWVkLCB0aWNrIGxhYmVscyB3aWxsIGJlIGNvbGxlY3RlZAogICAgICAgIC8vIGZyb20gdGhlIHggdmFsdWVzIG9mIHRoZSBzZXJpZXMuICBXaXRoIHNvcnRNZXJnZWRMYWJlbHMKICAgICAgICAvLyBzZXQgdG8gdHJ1ZSwgdGljayBsYWJlbHMgd2lsbCBiZToKICAgICAgICAvLyA+IFsyMDA2LCAyMDA3LCAyMDA4LCAyMDA5XQogICAgICAgIC8vIFdpdGggc29ydE1lcmdlZExhYmVscyBzZXQgdG8gZmFsc2UsIHRpY2sgbGFiZWxzIHdpbGwgYmU6CiAgICAgICAgLy8gPiBbMjAwNiwgMjAwOCwgMjAwOSwgMjAwN10KICAgICAgICAvLwogICAgICAgIC8vIE5vdGUsIHRoaXMgcHJvcGVydHkgaXMgc3BlY2lmaWVkIG9uIHRoZSByZW5kZXJPcHRpb25zIGZvciB0aGUgCiAgICAgICAgLy8gYXhlcyB3aGVuIGNyZWF0aW5nIGEgcGxvdDoKICAgICAgICAvLyA+IGF4ZXM6e3hheGlzOntyZW5kZXJlcjokLmpxcGxvdC5DYXRlZ29yeUF4aXNSZW5kZXJlciwgcmVuZGVyZXJPcHRpb25zOntzb3J0TWVyZ2VkTGFiZWxzOnRydWV9fX0KICAgICAgICB0aGlzLnNvcnRNZXJnZWRMYWJlbHMgPSBmYWxzZTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkNhdGVnb3J5QXhpc1JlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIoKTsKICAgICQuanFwbG90LkNhdGVnb3J5QXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90LkNhdGVnb3J5QXhpc1JlbmRlcmVyOwogICAgCiAgICAkLmpxcGxvdC5DYXRlZ29yeUF4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpewogICAgICAgIHRoaXMuZ3JvdXBzID0gMTsKICAgICAgICB0aGlzLmdyb3VwTGFiZWxzID0gW107CiAgICAgICAgdGhpcy5fZ3JvdXBMYWJlbHMgPSBbXTsKICAgICAgICB0aGlzLl9ncm91cGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5fYmFyc1Blckdyb3VwID0gbnVsbDsKICAgICAgICB0aGlzLnJldmVyc2UgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiB0aWNrUmVuZGVyZXIKICAgICAgICAvLyBBIGNsYXNzIG9mIGEgcmVuZGVyaW5nIGVuZ2luZSBmb3IgY3JlYXRpbmcgdGhlIHRpY2tzIGxhYmVscyBkaXNwbGF5ZWQgb24gdGhlIHBsb3QsIAogICAgICAgIC8vIFNlZSA8JC5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlcj4uCiAgICAgICAgLy8gdGhpcy50aWNrUmVuZGVyZXIgPSAkLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyOwogICAgICAgIC8vIHRoaXMubGFiZWxSZW5kZXJlciA9ICQuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyOwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIHt0aWNrT3B0aW9uczp7Zm9ybWF0U3RyaW5nOiclZCd9fSwgb3B0aW9ucyk7CiAgICAgICAgdmFyIGRiID0gdGhpcy5fZGF0YUJvdW5kczsKICAgICAgICAvLyBHbyB0aHJvdWdoIGFsbCB0aGUgc2VyaWVzIGF0dGFjaGVkIHRvIHRoaXMgYXhpcyBhbmQgZmluZAogICAgICAgIC8vIHRoZSBtaW4vbWF4IGJvdW5kcyBmb3IgdGhpcyBheGlzLgogICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLl9zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHMgPSB0aGlzLl9zZXJpZXNbaV07CiAgICAgICAgICAgIGlmIChzLmdyb3VwcykgewogICAgICAgICAgICAgICAgdGhpcy5ncm91cHMgPSBzLmdyb3VwczsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgZCA9IHMuZGF0YTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajxkLmxlbmd0aDsgaisrKSB7IAogICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneGF4aXMnIHx8IHRoaXMubmFtZSA9PSAneDJheGlzJykgewogICAgICAgICAgICAgICAgICAgIGlmIChkW2pdWzBdIDwgZGIubWluIHx8IGRiLm1pbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRiLm1pbiA9IGRbal1bMF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChkW2pdWzBdID4gZGIubWF4IHx8IGRiLm1heCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRiLm1heCA9IGRbal1bMF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZFtqXVsxXSA8IGRiLm1pbiB8fCBkYi5taW4gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBkYi5taW4gPSBkW2pdWzFdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZFtqXVsxXSA+IGRiLm1heCB8fCBkYi5tYXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBkYi5tYXggPSBkW2pdWzFdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgIAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICh0aGlzLmdyb3VwTGFiZWxzLmxlbmd0aCkgewogICAgICAgICAgICB0aGlzLmdyb3VwcyA9IHRoaXMuZ3JvdXBMYWJlbHMubGVuZ3RoOwogICAgICAgIH0KICAgIH07CiAKCiAgICAkLmpxcGxvdC5DYXRlZ29yeUF4aXNSZW5kZXJlci5wcm90b3R5cGUuY3JlYXRlVGlja3MgPSBmdW5jdGlvbigpIHsKICAgICAgICAvLyB3ZSdyZSBhcmUgb3BlcmF0aW5nIG9uIGFuIGF4aXMgaGVyZQogICAgICAgIHZhciB0aWNrcyA9IHRoaXMuX3RpY2tzOwogICAgICAgIHZhciB1c2VyVGlja3MgPSB0aGlzLnRpY2tzOwogICAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lOwogICAgICAgIC8vIGRhdGFib3VuZHMgd2VyZSBzZXQgb24gYXhpcyBpbml0aWFsaXphdGlvbi4KICAgICAgICB2YXIgZGIgPSB0aGlzLl9kYXRhQm91bmRzOwogICAgICAgIHZhciBkaW0sIGludGVydmFsOwogICAgICAgIHZhciBtaW4sIG1heDsKICAgICAgICB2YXIgcG9zMSwgcG9zMjsKICAgICAgICB2YXIgdHQsIGk7CgogICAgICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSB0aWNrcywgdXNlIHRoZW0uCiAgICAgICAgaWYgKHVzZXJUaWNrcy5sZW5ndGgpIHsKICAgICAgICAgICAgLy8gYWRqdXN0IHdpdGggYmxhbmtzIGlmIHdlIGhhdmUgZ3JvdXBzCiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwcyA+IDEgJiYgIXRoaXMuX2dyb3VwZWQpIHsKICAgICAgICAgICAgICAgIHZhciBsID0gdXNlclRpY2tzLmxlbmd0aDsKICAgICAgICAgICAgICAgIHZhciBza2lwID0gcGFyc2VJbnQobC90aGlzLmdyb3VwcywgMTApOwogICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9c2tpcDsgaTxsOyBpKz1za2lwKSB7CiAgICAgICAgICAgICAgICAgICAgdXNlclRpY2tzLnNwbGljZShpK2NvdW50LCAwLCAnICcpOwogICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLl9ncm91cGVkID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm1pbiA9IDAuNTsKICAgICAgICAgICAgdGhpcy5tYXggPSB1c2VyVGlja3MubGVuZ3RoICsgMC41OwogICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluOwogICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0gMip1c2VyVGlja3MubGVuZ3RoICsgMTsKICAgICAgICAgICAgZm9yIChpPTA7IGk8dXNlclRpY2tzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgIHR0ID0gdGhpcy5taW4gKyAyICogaSAqIHJhbmdlIC8gKHRoaXMubnVtYmVyVGlja3MtMSk7CiAgICAgICAgICAgICAgICAvLyBuZWVkIGEgbWFya2VyIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHRpY2sKICAgICAgICAgICAgICAgIHZhciB0ID0gbmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpOwogICAgICAgICAgICAgICAgdC5zaG93TGFiZWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgIC8vIHQuc2hvd01hcmsgPSB0cnVlOwogICAgICAgICAgICAgICAgdC5zZXRUaWNrKHR0LCB0aGlzLm5hbWUpOwogICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgICAgIHZhciB0ID0gbmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpOwogICAgICAgICAgICAgICAgdC5sYWJlbCA9IHVzZXJUaWNrc1tpXTsKICAgICAgICAgICAgICAgIC8vIHQuc2hvd0xhYmVsID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHQuc2hvd0dyaWRsaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0LnNldFRpY2sodHQrMC41LCB0aGlzLm5hbWUpOwogICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBub3cgYWRkIHRoZSBsYXN0IHRpY2sgYXQgdGhlIGVuZAogICAgICAgICAgICB2YXIgdCA9IG5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTsKICAgICAgICAgICAgdC5zaG93TGFiZWwgPSBmYWxzZTsKICAgICAgICAgICAgLy8gdC5zaG93TWFyayA9IHRydWU7CiAgICAgICAgICAgIHQuc2V0VGljayh0dCsxLCB0aGlzLm5hbWUpOwogICAgICAgICAgICB0aGlzLl90aWNrcy5wdXNoKHQpOwogICAgICAgIH0KCiAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSBhbnkgdGlja3MgeWV0LCBsZXQncyBtYWtlIHNvbWUhCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChuYW1lID09ICd4YXhpcycgfHwgbmFtZSA9PSAneDJheGlzJykgewogICAgICAgICAgICAgICAgZGltID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBkaW0gPSB0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGlmIG1pbiwgbWF4IGFuZCBudW1iZXIgb2YgdGlja3Mgc3BlY2lmaWVkLCB1c2VyIGNhbid0IHNwZWNpZnkgaW50ZXJ2YWwuCiAgICAgICAgICAgIGlmICh0aGlzLm1pbiAhPSBudWxsICYmIHRoaXMubWF4ICE9IG51bGwgJiYgdGhpcy5udW1iZXJUaWNrcyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aGlzLnRpY2tJbnRlcnZhbCA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGlmIG1heCwgbWluLCBhbmQgaW50ZXJ2YWwgc3BlY2lmaWVkIGFuZCBpbnRlcnZhbCB3b24ndCBmaXQsIGlnbm9yZSBpbnRlcnZhbC4KICAgICAgICAgICAgaWYgKHRoaXMubWluICE9IG51bGwgJiYgdGhpcy5tYXggIT0gbnVsbCAmJiB0aGlzLnRpY2tJbnRlcnZhbCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoKHRoaXMubWF4LXRoaXMubWluKS90aGlzLnRpY2tJbnRlcnZhbCwgMTApICE9ICh0aGlzLm1heC10aGlzLm1pbikvdGhpcy50aWNrSW50ZXJ2YWwpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRpY2tJbnRlcnZhbCA9IG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgLy8gZmluZCBvdXQgaG93IG1hbnkgY2F0ZWdvcmllcyBhcmUgaW4gdGhlIGxpbmVzIGFuZCBjb2xsZWN0IGxhYmVscwogICAgICAgICAgICB2YXIgbGFiZWxzID0gW107CiAgICAgICAgICAgIHZhciBudW1jYXRzID0gMDsKICAgICAgICAgICAgdmFyIG1pbiA9IDAuNTsKICAgICAgICAgICAgdmFyIG1heCwgdmFsOwogICAgICAgICAgICB2YXIgaXNNZXJnZWQgPSBmYWxzZTsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMuX3Nlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIHMgPSB0aGlzLl9zZXJpZXNbaV07CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8cy5kYXRhLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneGF4aXMnIHx8IHRoaXMubmFtZSA9PSAneDJheGlzJykgewogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBzLmRhdGFbal1bMF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBzLmRhdGFbal1bMV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgkLmluQXJyYXkodmFsLCBsYWJlbHMpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlzTWVyZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgbnVtY2F0cyArPSAxOyAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMucHVzaCh2YWwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGlzTWVyZ2VkICYmIHRoaXMuc29ydE1lcmdlZExhYmVscykgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsYWJlbHNbMF0gPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgICBsYWJlbHMuc29ydCgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBsYWJlbHMuc29ydChmdW5jdGlvbihhLGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGVzZSB0aWNrIGxhYmVscyB0byB1c2UgZm9yIHJlZHJhd2luZyBwbG90IChzZWUgYnVnICM1NykKICAgICAgICAgICAgdGhpcy50aWNrcyA9IGxhYmVsczsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIG5vdyBiaW4gdGhlIGRhdGEgdmFsdWVzIHRvIHRoZSByaWdodCBsYWJsZXMuCiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLl9zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBzID0gdGhpcy5fc2VyaWVzW2ldOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPHMuZGF0YS5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gcy5kYXRhW2pdWzBdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gcy5kYXRhW2pdWzFdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBmb3IgY2F0ZWdvcnkgYXhpcywgZm9yY2UgdGhlIHZhbHVlcyBpbnRvIGNhdGVnb3J5IGJpbnMuCiAgICAgICAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkIGhhdmUgdGhlIHZhbHVlIGluIHRoZSBsYWJlbCBhcnJheSBub3cuCiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9ICQuaW5BcnJheSh2YWwsIGxhYmVscykrMTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lID09ICd4YXhpcycgfHwgdGhpcy5uYW1lID09ICd4MmF4aXMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YVtqXVswXSA9IGlkeDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YVtqXVsxXSA9IGlkeDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGFkanVzdCB3aXRoIGJsYW5rcyBpZiB3ZSBoYXZlIGdyb3VwcwogICAgICAgICAgICBpZiAodGhpcy5ncm91cHMgPiAxICYmICF0aGlzLl9ncm91cGVkKSB7CiAgICAgICAgICAgICAgICB2YXIgbCA9IGxhYmVscy5sZW5ndGg7CiAgICAgICAgICAgICAgICB2YXIgc2tpcCA9IHBhcnNlSW50KGwvdGhpcy5ncm91cHMsIDEwKTsKICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IDA7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPXNraXA7IGk8bDsgaSs9c2tpcCsxKSB7CiAgICAgICAgICAgICAgICAgICAgbGFiZWxzW2ldID0gJyAnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5fZ3JvdXBlZCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgbWF4ID0gbnVtY2F0cyArIDAuNTsKICAgICAgICAgICAgaWYgKHRoaXMubnVtYmVyVGlja3MgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IDIqbnVtY2F0cyArIDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByYW5nZSA9IG1heCAtIG1pbjsKICAgICAgICAgICAgdGhpcy5taW4gPSBtaW47CiAgICAgICAgICAgIHRoaXMubWF4ID0gbWF4OwogICAgICAgICAgICB2YXIgdHJhY2sgPSAwOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gdG9kbzogYWRqdXN0IHRoaXMgc28gbW9yZSB0aWNrcyBkaXNwbGF5ZWQuCiAgICAgICAgICAgIHZhciBtYXhWaXNpYmxlVGlja3MgPSBwYXJzZUludCgzK2RpbS8xMCwgMTApOwogICAgICAgICAgICB2YXIgc2tpcCA9IHBhcnNlSW50KG51bWNhdHMvbWF4VmlzaWJsZVRpY2tzLCAxMCk7CgogICAgICAgICAgICBpZiAodGhpcy50aWNrSW50ZXJ2YWwgPT0gbnVsbCkgewoKICAgICAgICAgICAgICAgIHRoaXMudGlja0ludGVydmFsID0gcmFuZ2UgLyAodGhpcy5udW1iZXJUaWNrcy0xKTsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gaWYgdGlja0ludGVydmFsIGlzIHNwZWNpZmllZCwgd2Ugd2lsbCBpZ25vcmUgYW55IGNvbXB1dGVkIG1heGltdW0uCiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLm51bWJlclRpY2tzOyBpKyspewogICAgICAgICAgICAgICAgdHQgPSB0aGlzLm1pbiArIGkgKiB0aGlzLnRpY2tJbnRlcnZhbDsKICAgICAgICAgICAgICAgIHZhciB0ID0gbmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpOwogICAgICAgICAgICAgICAgLy8gaWYgZXZlbiB0aWNrLCBpdCBpc24ndCBhIGNhdGVnb3J5LCBpdCdzIGEgZGl2aWRlcgogICAgICAgICAgICAgICAgaWYgKGkvMiA9PSBwYXJzZUludChpLzIsIDEwKSkgewogICAgICAgICAgICAgICAgICAgIHQuc2hvd0xhYmVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc2tpcD4wICYmIHRyYWNrPHNraXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TGFiZWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgKz0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd0xhYmVsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgPSAwOwogICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgdC5sYWJlbCA9IHQuZm9ybWF0dGVyKHQuZm9ybWF0U3RyaW5nLCBsYWJlbHNbKGktMSkvMl0pOwogICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB0LnNob3dHcmlkbGluZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdC5zZXRUaWNrKHR0LCB0aGlzLm5hbWUpOwogICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIGF4aXMKICAgICQuanFwbG90LkNhdGVnb3J5QXhpc1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24oY3R4LCBwbG90KSB7CiAgICAgICAgaWYgKHRoaXMuc2hvdykgewogICAgICAgICAgICAvLyBwb3B1bGF0ZSB0aGUgYXhpcyBsYWJlbCBhbmQgdmFsdWUgcHJvcGVydGllcy4KICAgICAgICAgICAgLy8gY3JlYXRlVGlja3MgaXMgYSBtZXRob2Qgb24gdGhlIHJlbmRlcmVyLCBidXQKICAgICAgICAgICAgLy8gY2FsbCBpdCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBheGlzLgogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRpY2tzLmNhbGwodGhpcyk7CiAgICAgICAgICAgIC8vIGZpbGwgYSBkaXYgd2l0aCBheGVzIGxhYmVscyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgogICAgICAgICAgICAvLyBOZWVkIHRvIHByZWdlbmVyYXRlIGVhY2ggYXhpcyB0byBnZXQgaXRzIGJvdW5kcyBhbmQKICAgICAgICAgICAgLy8gcG9zaXRpb24gaXQgYW5kIHRoZSBsYWJlbHMgY29ycmVjdGx5IG9uIHRoZSBwbG90LgogICAgICAgICAgICB2YXIgZGltPTA7CiAgICAgICAgICAgIHZhciB0ZW1wOwogICAgICAgICAgICAvLyBBZGRlZCBmb3IgdGhlbWluZy4KICAgICAgICAgICAgaWYgKHRoaXMuX2VsZW0pIHsKICAgICAgICAgICAgICAgIC8vIHRoaXMuX2VsZW0uZW1wdHkoKTsKICAgICAgICAgICAgICAgIC8vIE1lbW9yeSBMZWFrcyBwYXRjaAogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5lbXB0eUZvcmNlKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMuX2VsZW0gPSB0aGlzLl9lbGVtIHx8ICQoJzxkaXYgY2xhc3M9ImpxcGxvdC1heGlzIGpxcGxvdC0nK3RoaXMubmFtZSsnIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij48L2Rpdj4nKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0ud2lkdGgodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5oZWlnaHQodGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gY3JlYXRlIGEgX2xhYmVsIG9iamVjdC4KICAgICAgICAgICAgdGhpcy5sYWJlbE9wdGlvbnMuYXhpcyA9IHRoaXMubmFtZTsKICAgICAgICAgICAgdGhpcy5fbGFiZWwgPSBuZXcgdGhpcy5sYWJlbFJlbmRlcmVyKHRoaXMubGFiZWxPcHRpb25zKTsKICAgICAgICAgICAgaWYgKHRoaXMuX2xhYmVsLnNob3cpIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpcy5fbGFiZWwuZHJhdyhjdHgsIHBsb3QpOwogICAgICAgICAgICAgICAgZWxlbS5hcHBlbmRUbyh0aGlzLl9lbGVtKTsKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIHZhciB0ID0gdGhpcy5fdGlja3M7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgdGljayA9IHRbaV07CiAgICAgICAgICAgICAgICBpZiAodGljay5zaG93TGFiZWwgJiYgKCF0aWNrLmlzTWlub3JUaWNrIHx8IHRoaXMuc2hvd01pbm9yVGlja3MpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aWNrLmRyYXcoY3R4LCBwbG90KTsKICAgICAgICAgICAgICAgICAgICBlbGVtLmFwcGVuZFRvKHRoaXMuX2VsZW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgIHRoaXMuX2dyb3VwTGFiZWxzID0gW107CiAgICAgICAgICAgIC8vIG5vdyBtYWtlIGdyb3VwIGxhYmVscwogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5ncm91cExhYmVscy5sZW5ndGg7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIGVsZW0gPSAkKCc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiIGNsYXNzPSJqcXBsb3QtJyt0aGlzLm5hbWUrJy1ncm91cExhYmVsIj48L2Rpdj4nKTsKICAgICAgICAgICAgICAgIGVsZW0uaHRtbCh0aGlzLmdyb3VwTGFiZWxzW2ldKTsKICAgICAgICAgICAgICAgIHRoaXMuX2dyb3VwTGFiZWxzLnB1c2goZWxlbSk7CiAgICAgICAgICAgICAgICBlbGVtLmFwcGVuZFRvKHRoaXMuX2VsZW0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9lbGVtOwogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgYXhpcwogICAgJC5qcXBsb3QuQ2F0ZWdvcnlBeGlzUmVuZGVyZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKCkgeyAKICAgICAgICB2YXIgZGltID0gMDsKICAgICAgICB2YXIgdGVtcDsKICAgICAgICB2YXIgdyA9IDA7CiAgICAgICAgdmFyIGggPSAwOwogICAgICAgIHZhciBsc2hvdyA9ICh0aGlzLl9sYWJlbCA9PSBudWxsKSA/IGZhbHNlIDogdGhpcy5fbGFiZWwuc2hvdzsKICAgICAgICBpZiAodGhpcy5zaG93KSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpcy5fdGlja3M7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgdGljayA9IHRbaV07CiAgICAgICAgICAgICAgICBpZiAodGljay5zaG93TGFiZWwgJiYgKCF0aWNrLmlzTWlub3JUaWNrIHx8IHRoaXMuc2hvd01pbm9yVGlja3MpKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneGF4aXMnIHx8IHRoaXMubmFtZSA9PSAneDJheGlzJykgewogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gdGljay5fZWxlbS5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0aWNrLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wID4gZGltKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpbSA9IHRlbXA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgZGltMiA9IDA7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLl9ncm91cExhYmVscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGwgPSB0aGlzLl9ncm91cExhYmVsc1tpXTsKICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgICAgICB0ZW1wID0gbC5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRlbXAgPSBsLm91dGVyV2lkdGgodHJ1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodGVtcCA+IGRpbTIpIHsKICAgICAgICAgICAgICAgICAgICBkaW0yID0gdGVtcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGxzaG93KSB7CiAgICAgICAgICAgICAgICB3ID0gdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTsKICAgICAgICAgICAgICAgIGggPSB0aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKTsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneGF4aXMnKSB7CiAgICAgICAgICAgICAgICBkaW0gKz0gZGltMiArIGg7CiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7J2hlaWdodCc6ZGltKydweCcsIGxlZnQ6JzBweCcsIGJvdHRvbTonMHB4J30pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubmFtZSA9PSAneDJheGlzJykgewogICAgICAgICAgICAgICAgZGltICs9IGRpbTIgKyBoOwogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoeydoZWlnaHQnOmRpbSsncHgnLCBsZWZ0OicwcHgnLCB0b3A6JzBweCd9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICh0aGlzLm5hbWUgPT0gJ3lheGlzJykgewogICAgICAgICAgICAgICAgZGltICs9IGRpbTIgKyB3OwogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moeyd3aWR0aCc6ZGltKydweCcsIGxlZnQ6JzBweCcsIHRvcDonMHB4J30pOwogICAgICAgICAgICAgICAgaWYgKGxzaG93ICYmIHRoaXMuX2xhYmVsLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCd3aWR0aCcsIHcrJ3B4Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBkaW0gKz0gZGltMiArIHc7CiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7J3dpZHRoJzpkaW0rJ3B4JywgcmlnaHQ6JzBweCcsIHRvcDonMHB4J30pOwogICAgICAgICAgICAgICAgaWYgKGxzaG93ICYmIHRoaXMuX2xhYmVsLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCd3aWR0aCcsIHcrJ3B4Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9ICAKICAgIH07CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIGF4aXMKICAgICQuanFwbG90LkNhdGVnb3J5QXhpc1JlbmRlcmVyLnByb3RvdHlwZS5wYWNrID0gZnVuY3Rpb24ocG9zLCBvZmZzZXRzKSB7CiAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5fdGlja3M7CiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4OwogICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjsKICAgICAgICB2YXIgb2ZmbWF4ID0gb2Zmc2V0cy5tYXg7CiAgICAgICAgdmFyIG9mZm1pbiA9IG9mZnNldHMubWluOwogICAgICAgIHZhciBsc2hvdyA9ICh0aGlzLl9sYWJlbCA9PSBudWxsKSA/IGZhbHNlIDogdGhpcy5fbGFiZWwuc2hvdzsKICAgICAgICB2YXIgaTsKCiAgICAgICAgZm9yICh2YXIgcCBpbiBwb3MpIHsKICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MocCwgcG9zW3BdKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdGhpcy5fb2Zmc2V0cyA9IG9mZnNldHM7CiAgICAgICAgLy8gcGl4ZWxsZW5ndGggd2lsbCBiZSArIGZvciB4IGF4ZXMgYW5kIC0gZm9yIHkgYXhlcyBiZWNhc3VlIHBpeGVscyBhbHdheXMgbWVhc3VyZWQgZnJvbSB0b3AgbGVmdC4KICAgICAgICB2YXIgcGl4ZWxsZW5ndGggPSBvZmZtYXggLSBvZmZtaW47CiAgICAgICAgdmFyIHVuaXRsZW5ndGggPSBtYXggLSBtaW47CiAgICAgICAgCiAgICAgICAgaWYgKCF0aGlzLnJldmVyc2UpIHsKICAgICAgICAgICAgLy8gcG9pbnQgdG8gdW5pdCBhbmQgdW5pdCB0byBwb2ludCBjb252ZXJzaW9ucyByZWZlcmVuY2VzIHRvIFBsb3QgRE9NIGVsZW1lbnQgdG9wIGxlZnQgY29ybmVyLgogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy51MnAgPSBmdW5jdGlvbih1KXsKICAgICAgICAgICAgICAgIHJldHVybiAodSAtIG1pbikgKiBwaXhlbGxlbmd0aCAvIHVuaXRsZW5ndGggKyBvZmZtaW47CiAgICAgICAgICAgIH07CgogICAgICAgICAgICB0aGlzLnAydSA9IGZ1bmN0aW9uKHApewogICAgICAgICAgICAgICAgcmV0dXJuIChwIC0gb2ZmbWluKSAqIHVuaXRsZW5ndGggLyBwaXhlbGxlbmd0aCArIG1pbjsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneGF4aXMnIHx8IHRoaXMubmFtZSA9PSAneDJheGlzJyl7CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc191MnAgPSBmdW5jdGlvbih1KXsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHUgLSBtaW4pICogcGl4ZWxsZW5ndGggLyB1bml0bGVuZ3RoOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzX3AydSA9IGZ1bmN0aW9uKHApewogICAgICAgICAgICAgICAgICAgIHJldHVybiBwICogdW5pdGxlbmd0aCAvIHBpeGVsbGVuZ3RoICsgbWluOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc191MnAgPSBmdW5jdGlvbih1KXsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHUgLSBtYXgpICogcGl4ZWxsZW5ndGggLyB1bml0bGVuZ3RoOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzX3AydSA9IGZ1bmN0aW9uKHApewogICAgICAgICAgICAgICAgICAgIHJldHVybiBwICogdW5pdGxlbmd0aCAvIHBpeGVsbGVuZ3RoICsgbWF4OwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIHBvaW50IHRvIHVuaXQgYW5kIHVuaXQgdG8gcG9pbnQgY29udmVyc2lvbnMgcmVmZXJlbmNlcyB0byBQbG90IERPTSBlbGVtZW50IHRvcCBsZWZ0IGNvcm5lci4KICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMudTJwID0gZnVuY3Rpb24odSl7CiAgICAgICAgICAgICAgICByZXR1cm4gb2ZmbWluICsgKG1heCAtIHUpICogcGl4ZWxsZW5ndGggLyB1bml0bGVuZ3RoOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgdGhpcy5wMnUgPSBmdW5jdGlvbihwKXsKICAgICAgICAgICAgICAgIHJldHVybiBtaW4gKyAocCAtIG9mZm1pbikgKiB1bml0bGVuZ3RoIC8gcGl4ZWxsZW5ndGg7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpewogICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNfdTJwID0gZnVuY3Rpb24odSl7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtYXggLSB1KSAqIHBpeGVsbGVuZ3RoIC8gdW5pdGxlbmd0aDsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc19wMnUgPSBmdW5jdGlvbihwKXsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcCAqIHVuaXRsZW5ndGggLyBwaXhlbGxlbmd0aCArIG1heDsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNfdTJwID0gZnVuY3Rpb24odSl7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtaW4gLSB1KSAqIHBpeGVsbGVuZ3RoIC8gdW5pdGxlbmd0aDsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc19wMnUgPSBmdW5jdGlvbihwKXsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcCAqIHVuaXRsZW5ndGggLyBwaXhlbGxlbmd0aCArIG1pbjsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zaG93KSB7CiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHRpY2tzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0aWNrc1tpXTsKICAgICAgICAgICAgICAgICAgICBpZiAodC5zaG93ICYmIHQuc2hvd0xhYmVsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGltOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlciAmJiB0LmFuZ2xlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5lZWQgdG8gYWRqdXN0IGF1dG8gcG9zaXRpb25pbmcgYmFzZWQgb24gd2hpY2ggYXhpcyB0aGlzIGlzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSAodGhpcy5uYW1lID09ICd4YXhpcycpID8gMSA6IC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0LmxhYmVsUG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24gYXQgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wICogdC5hbmdsZSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5nZXRXaWR0aCgpICsgdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguc2luKC10Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbiBhdCBzdGFydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguc2luKHQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5nZXRXaWR0aCgpICsgdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguc2luKC10Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RhcnQnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbih0Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWlkZGxlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldFdpZHRoKCkvMiArIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbigtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5nZXRXaWR0aCgpLzIgKyB0Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5zaW4oLXQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5nZXRXaWR0aCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudTJwKHQudmFsdWUpICsgc2hpbSArICdweCc7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuX2VsZW0uY3NzKCdsZWZ0JywgdmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgdC5wYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbGFiZWxlZGdlPVsnYm90dG9tJywgMF07CiAgICAgICAgICAgICAgICBpZiAobHNob3cpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdyA9IHRoaXMuX2xhYmVsLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCdsZWZ0Jywgb2ZmbWluICsgcGl4ZWxsZW5ndGgvMiAtIHcvMiArICdweCcpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJykgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5fZWxlbS5jc3MoJ2JvdHRvbScsICcwcHgnKTsKICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxlZGdlID0gWydib3R0b20nLCB0aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5fZWxlbS5jc3MoJ3RvcCcsICcwcHgnKTsKICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxlZGdlID0gWyd0b3AnLCB0aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLnBhY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgZ3JvdXAgbGFiZWxzCiAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IHBhcnNlSW50KHRoaXMuX3RpY2tzLmxlbmd0aC90aGlzLmdyb3VwcywgMTApICsgMTsKICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHRoaXMuX2dyb3VwTGFiZWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1pZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqPWkqc3RlcDsgajwoaSsxKSpzdGVwOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPj0gdGhpcy5fdGlja3MubGVuZ3RoLTEpIGNvbnRpbnVlOyAvLyB0aGUgbGFzdCB0aWNrIGRvZXMgbm90IGV4aXN0IGFzIHRoZXJlIGlzIG5vIG90aGVyIGdyb3VwIGluIG9yZGVyIHRvIGhhdmUgYW4gZW1wdHkgb25lLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGlja3Nbal0uX2VsZW0gJiYgdGhpcy5fdGlja3Nbal0ubGFiZWwgIT0gIiAiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHRoaXMuX3RpY2tzW2pdLl9lbGVtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSB0LnBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWQgKz0gcC5sZWZ0ICsgdC5vdXRlcldpZHRoKHRydWUpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG1pZCA9IG1pZC9jb3VudDsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9ncm91cExhYmVsc1tpXS5jc3MoeydsZWZ0JzoobWlkIC0gdGhpcy5fZ3JvdXBMYWJlbHNbaV0ub3V0ZXJXaWR0aCh0cnVlKS8yKX0pOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dyb3VwTGFiZWxzW2ldLmNzcyhsYWJlbGVkZ2VbMF0sIGxhYmVsZWRnZVsxXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTx0aWNrcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGlja3NbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvdyAmJiB0LnNob3dMYWJlbCkgeyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpbTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlciAmJiB0LmFuZ2xlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5lZWQgdG8gYWRqdXN0IGF1dG8gcG9zaXRpb25pbmcgYmFzZWQgb24gd2hpY2ggYXhpcyB0aGlzIGlzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSAodGhpcy5uYW1lID09ICd5YXhpcycpID8gMSA6IC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0LmxhYmVsUG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24gYXQgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgKiB0LmFuZ2xlIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5jb3MoLXQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldEhlaWdodCgpICsgdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguY29zKHQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuYW5nbGUgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLmNvcygtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkgKyB0Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5jb3ModC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWlkZGxlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHQuYW5nbGUgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkvMiArIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbigtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkvMiAtIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbih0Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldEhlaWdodCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldEhlaWdodCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnUycCh0LnZhbHVlKSArIHNoaW0gKyAncHgnOwogICAgICAgICAgICAgICAgICAgICAgICB0Ll9lbGVtLmNzcygndG9wJywgdmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgdC5wYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbGFiZWxlZGdlPVsnbGVmdCcsIDBdOwogICAgICAgICAgICAgICAgaWYgKGxzaG93KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGggPSB0aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5fZWxlbS5jc3MoJ3RvcCcsIG9mZm1heCAtIHBpeGVsbGVuZ3RoLzIgLSBoLzIgKyAncHgnKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lID09ICd5YXhpcycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCdsZWZ0JywgJzBweCcpOwogICAgICAgICAgICAgICAgICAgICAgICBsYWJlbGVkZ2UgPSBbJ2xlZnQnLCB0aGlzLl9sYWJlbC5fZWxlbS5vdXRlcldpZHRoKHRydWUpXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcygncmlnaHQnLCAnMHB4Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsZWRnZSA9IFsncmlnaHQnLCB0aGlzLl9sYWJlbC5fZWxlbS5vdXRlcldpZHRoKHRydWUpXTsKICAgICAgICAgICAgICAgICAgICB9ICAgCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwucGFjaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBncm91cCBsYWJlbHMsIHBvc2l0aW9uIHRvcCBoZXJlLCBkbyBsZWZ0IGFmdGVyIGxhYmVsIHBvc2l0aW9uLgogICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBwYXJzZUludCh0aGlzLl90aWNrcy5sZW5ndGgvdGhpcy5ncm91cHMsIDEwKSArIDE7IC8vIHN0ZXAgaXMgb25lIG1vcmUgdGhhbiBiZWZvcmUgYXMgd2UgZG9uJ3Qgd2FudCB0byBoYXZlIG92ZXJsYXBzIGluIGxvb3BzCiAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTx0aGlzLl9ncm91cExhYmVscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciBtaWQgPSAwOwogICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaj1pKnN0ZXA7IGo8KGkrMSkqc3RlcDsgaisrKSB7IC8vIGogbXVzdCBuZXZlciByZWFjaCAoaSsxKSpzdGVwIGFzIHdlIGRvbid0IHdhbnQgdG8gaGF2ZSBvdmVybGFwIGJldHdlZW4gbG9vcHMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPj0gdGhpcy5fdGlja3MubGVuZ3RoLTEpIGNvbnRpbnVlOyAvLyB0aGUgbGFzdCB0aWNrIGRvZXMgbm90IGV4aXN0IGFzIHRoZXJlIGlzIG5vIG90aGVyIGdyb3VwIGluIG9yZGVyIHRvIGhhdmUgYW4gZW1wdHkgb25lLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGlja3Nbal0uX2VsZW0gJiYgdGhpcy5fdGlja3Nbal0ubGFiZWwgIT0gIiAiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHRoaXMuX3RpY2tzW2pdLl9lbGVtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSB0LnBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWQgKz0gcC50b3AgKyB0Lm91dGVySGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbWlkID0gbWlkL2NvdW50OwogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dyb3VwTGFiZWxzW2ldLmNzcyh7J3RvcCc6bWlkIC0gdGhpcy5fZ3JvdXBMYWJlbHNbaV0ub3V0ZXJIZWlnaHQoKS8yfSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ3JvdXBMYWJlbHNbaV0uY3NzKGxhYmVsZWRnZVswXSwgbGFiZWxlZGdlWzFdKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07ICAgIAogICAgCiAgICAKfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.categoryAxisRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGEpe2EuanFwbG90LkNhdGVnb3J5QXhpc1JlbmRlcmVyPWZ1bmN0aW9uKGIpe2EuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlci5jYWxsKHRoaXMpO3RoaXMuc29ydE1lcmdlZExhYmVscz1mYWxzZX07YS5qcXBsb3QuQ2F0ZWdvcnlBeGlzUmVuZGVyZXIucHJvdG90eXBlPW5ldyBhLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIoKTthLmpxcGxvdC5DYXRlZ29yeUF4aXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3I9YS5qcXBsb3QuQ2F0ZWdvcnlBeGlzUmVuZGVyZXI7YS5qcXBsb3QuQ2F0ZWdvcnlBeGlzUmVuZGVyZXIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oZSl7dGhpcy5ncm91cHM9MTt0aGlzLmdyb3VwTGFiZWxzPVtdO3RoaXMuX2dyb3VwTGFiZWxzPVtdO3RoaXMuX2dyb3VwZWQ9ZmFsc2U7dGhpcy5fYmFyc1Blckdyb3VwPW51bGw7dGhpcy5yZXZlcnNlPWZhbHNlO2EuZXh0ZW5kKHRydWUsdGhpcyx7dGlja09wdGlvbnM6e2Zvcm1hdFN0cmluZzoiJWQifX0sZSk7dmFyIGI9dGhpcy5fZGF0YUJvdW5kcztmb3IodmFyIGY9MDtmPHRoaXMuX3Nlcmllcy5sZW5ndGg7ZisrKXt2YXIgZz10aGlzLl9zZXJpZXNbZl07aWYoZy5ncm91cHMpe3RoaXMuZ3JvdXBzPWcuZ3JvdXBzfXZhciBoPWcuZGF0YTtmb3IodmFyIGM9MDtjPGgubGVuZ3RoO2MrKyl7aWYodGhpcy5uYW1lPT0ieGF4aXMifHx0aGlzLm5hbWU9PSJ4MmF4aXMiKXtpZihoW2NdWzBdPGIubWlufHxiLm1pbj09bnVsbCl7Yi5taW49aFtjXVswXX1pZihoW2NdWzBdPmIubWF4fHxiLm1heD09bnVsbCl7Yi5tYXg9aFtjXVswXX19ZWxzZXtpZihoW2NdWzFdPGIubWlufHxiLm1pbj09bnVsbCl7Yi5taW49aFtjXVsxXX1pZihoW2NdWzFdPmIubWF4fHxiLm1heD09bnVsbCl7Yi5tYXg9aFtjXVsxXX19fX1pZih0aGlzLmdyb3VwTGFiZWxzLmxlbmd0aCl7dGhpcy5ncm91cHM9dGhpcy5ncm91cExhYmVscy5sZW5ndGh9fTthLmpxcGxvdC5DYXRlZ29yeUF4aXNSZW5kZXJlci5wcm90b3R5cGUuY3JlYXRlVGlja3M9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLl90aWNrczt2YXIgej10aGlzLnRpY2tzO3ZhciBGPXRoaXMubmFtZTt2YXIgQz10aGlzLl9kYXRhQm91bmRzO3ZhciB2LEE7dmFyIHEsdzt2YXIgZCxjO3ZhciBiLHg7aWYoei5sZW5ndGgpe2lmKHRoaXMuZ3JvdXBzPjEmJiF0aGlzLl9ncm91cGVkKXt2YXIgcj16Lmxlbmd0aDt2YXIgcD1wYXJzZUludChyL3RoaXMuZ3JvdXBzLDEwKTt2YXIgZT0wO2Zvcih2YXIgeD1wO3g8cjt4Kz1wKXt6LnNwbGljZSh4K2UsMCwiICIpO2UrK310aGlzLl9ncm91cGVkPXRydWV9dGhpcy5taW49MC41O3RoaXMubWF4PXoubGVuZ3RoKzAuNTt2YXIgbT10aGlzLm1heC10aGlzLm1pbjt0aGlzLm51bWJlclRpY2tzPTIqei5sZW5ndGgrMTtmb3IoeD0wO3g8ei5sZW5ndGg7eCsrKXtiPXRoaXMubWluKzIqeCptLyh0aGlzLm51bWJlclRpY2tzLTEpO3ZhciBoPW5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTtoLnNob3dMYWJlbD1mYWxzZTtoLnNldFRpY2soYix0aGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1c2goaCk7dmFyIGg9bmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpO2gubGFiZWw9elt4XTtoLnNob3dNYXJrPWZhbHNlO2guc2hvd0dyaWRsaW5lPWZhbHNlO2guc2V0VGljayhiKzAuNSx0aGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1c2goaCl9dmFyIGg9bmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpO2guc2hvd0xhYmVsPWZhbHNlO2guc2V0VGljayhiKzEsdGhpcy5uYW1lKTt0aGlzLl90aWNrcy5wdXNoKGgpfWVsc2V7aWYoRj09InhheGlzInx8Rj09IngyYXhpcyIpe3Y9dGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGh9ZWxzZXt2PXRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodH1pZih0aGlzLm1pbiE9bnVsbCYmdGhpcy5tYXghPW51bGwmJnRoaXMubnVtYmVyVGlja3MhPW51bGwpe3RoaXMudGlja0ludGVydmFsPW51bGx9aWYodGhpcy5taW4hPW51bGwmJnRoaXMubWF4IT1udWxsJiZ0aGlzLnRpY2tJbnRlcnZhbCE9bnVsbCl7aWYocGFyc2VJbnQoKHRoaXMubWF4LXRoaXMubWluKS90aGlzLnRpY2tJbnRlcnZhbCwxMCkhPSh0aGlzLm1heC10aGlzLm1pbikvdGhpcy50aWNrSW50ZXJ2YWwpe3RoaXMudGlja0ludGVydmFsPW51bGx9fXZhciB5PVtdO3ZhciBCPTA7dmFyIHE9MC41O3ZhciB3LEU7dmFyIGY9ZmFsc2U7Zm9yKHZhciB4PTA7eDx0aGlzLl9zZXJpZXMubGVuZ3RoO3grKyl7dmFyIGs9dGhpcy5fc2VyaWVzW3hdO2Zvcih2YXIgdT0wO3U8ay5kYXRhLmxlbmd0aDt1Kyspe2lmKHRoaXMubmFtZT09InhheGlzInx8dGhpcy5uYW1lPT0ieDJheGlzIil7RT1rLmRhdGFbdV1bMF19ZWxzZXtFPWsuZGF0YVt1XVsxXX1pZihhLmluQXJyYXkoRSx5KT09LTEpe2Y9dHJ1ZTtCKz0xO3kucHVzaChFKX19fWlmKGYmJnRoaXMuc29ydE1lcmdlZExhYmVscyl7aWYodHlwZW9mIHlbMF09PSJzdHJpbmciKXt5LnNvcnQoKX1lbHNle3kuc29ydChmdW5jdGlvbihqLGkpe3JldHVybiBqLWl9KX19dGhpcy50aWNrcz15O2Zvcih2YXIgeD0wO3g8dGhpcy5fc2VyaWVzLmxlbmd0aDt4Kyspe3ZhciBrPXRoaXMuX3Nlcmllc1t4XTtmb3IodmFyIHU9MDt1PGsuZGF0YS5sZW5ndGg7dSsrKXtpZih0aGlzLm5hbWU9PSJ4YXhpcyJ8fHRoaXMubmFtZT09IngyYXhpcyIpe0U9ay5kYXRhW3VdWzBdfWVsc2V7RT1rLmRhdGFbdV1bMV19dmFyIG49YS5pbkFycmF5KEUseSkrMTtpZih0aGlzLm5hbWU9PSJ4YXhpcyJ8fHRoaXMubmFtZT09IngyYXhpcyIpe2suZGF0YVt1XVswXT1ufWVsc2V7ay5kYXRhW3VdWzFdPW59fX1pZih0aGlzLmdyb3Vwcz4xJiYhdGhpcy5fZ3JvdXBlZCl7dmFyIHI9eS5sZW5ndGg7dmFyIHA9cGFyc2VJbnQoci90aGlzLmdyb3VwcywxMCk7dmFyIGU9MDtmb3IodmFyIHg9cDt4PHI7eCs9cCsxKXt5W3hdPSIgIn10aGlzLl9ncm91cGVkPXRydWV9dz1CKzAuNTtpZih0aGlzLm51bWJlclRpY2tzPT1udWxsKXt0aGlzLm51bWJlclRpY2tzPTIqQisxfXZhciBtPXctcTt0aGlzLm1pbj1xO3RoaXMubWF4PXc7dmFyIG89MDt2YXIgZz1wYXJzZUludCgzK3YvMTAsMTApO3ZhciBwPXBhcnNlSW50KEIvZywxMCk7aWYodGhpcy50aWNrSW50ZXJ2YWw9PW51bGwpe3RoaXMudGlja0ludGVydmFsPW0vKHRoaXMubnVtYmVyVGlja3MtMSl9Zm9yKHZhciB4PTA7eDx0aGlzLm51bWJlclRpY2tzO3grKyl7Yj10aGlzLm1pbit4KnRoaXMudGlja0ludGVydmFsO3ZhciBoPW5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTtpZih4LzI9PXBhcnNlSW50KHgvMiwxMCkpe2guc2hvd0xhYmVsPWZhbHNlO2guc2hvd01hcms9dHJ1ZX1lbHNle2lmKHA+MCYmbzxwKXtoLnNob3dMYWJlbD1mYWxzZTtvKz0xfWVsc2V7aC5zaG93TGFiZWw9dHJ1ZTtvPTB9aC5sYWJlbD1oLmZvcm1hdHRlcihoLmZvcm1hdFN0cmluZyx5Wyh4LTEpLzJdKTtoLnNob3dNYXJrPWZhbHNlO2guc2hvd0dyaWRsaW5lPWZhbHNlfWguc2V0VGljayhiLHRoaXMubmFtZSk7dGhpcy5fdGlja3MucHVzaChoKX19fTthLmpxcGxvdC5DYXRlZ29yeUF4aXNSZW5kZXJlci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihiLGope2lmKHRoaXMuc2hvdyl7dGhpcy5yZW5kZXJlci5jcmVhdGVUaWNrcy5jYWxsKHRoaXMpO3ZhciBoPTA7dmFyIGM7aWYodGhpcy5fZWxlbSl7dGhpcy5fZWxlbS5lbXB0eUZvcmNlKCl9dGhpcy5fZWxlbT10aGlzLl9lbGVtfHxhKCc8ZGl2IGNsYXNzPSJqcXBsb3QtYXhpcyBqcXBsb3QtJyt0aGlzLm5hbWUrJyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyI+PC9kaXY+Jyk7aWYodGhpcy5uYW1lPT0ieGF4aXMifHx0aGlzLm5hbWU9PSJ4MmF4aXMiKXt0aGlzLl9lbGVtLndpZHRoKHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoKX1lbHNle3RoaXMuX2VsZW0uaGVpZ2h0KHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCl9dGhpcy5sYWJlbE9wdGlvbnMuYXhpcz10aGlzLm5hbWU7dGhpcy5fbGFiZWw9bmV3IHRoaXMubGFiZWxSZW5kZXJlcih0aGlzLmxhYmVsT3B0aW9ucyk7aWYodGhpcy5fbGFiZWwuc2hvdyl7dmFyIGc9dGhpcy5fbGFiZWwuZHJhdyhiLGopO2cuYXBwZW5kVG8odGhpcy5fZWxlbSl9dmFyIGY9dGhpcy5fdGlja3M7Zm9yKHZhciBlPTA7ZTxmLmxlbmd0aDtlKyspe3ZhciBkPWZbZV07aWYoZC5zaG93TGFiZWwmJighZC5pc01pbm9yVGlja3x8dGhpcy5zaG93TWlub3JUaWNrcykpe3ZhciBnPWQuZHJhdyhiLGopO2cuYXBwZW5kVG8odGhpcy5fZWxlbSl9fXRoaXMuX2dyb3VwTGFiZWxzPVtdO2Zvcih2YXIgZT0wO2U8dGhpcy5ncm91cExhYmVscy5sZW5ndGg7ZSsrKXt2YXIgZz1hKCc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiIGNsYXNzPSJqcXBsb3QtJyt0aGlzLm5hbWUrJy1ncm91cExhYmVsIj48L2Rpdj4nKTtnLmh0bWwodGhpcy5ncm91cExhYmVsc1tlXSk7dGhpcy5fZ3JvdXBMYWJlbHMucHVzaChnKTtnLmFwcGVuZFRvKHRoaXMuX2VsZW0pfX1yZXR1cm4gdGhpcy5fZWxlbX07YS5qcXBsb3QuQ2F0ZWdvcnlBeGlzUmVuZGVyZXIucHJvdG90eXBlLnNldD1mdW5jdGlvbigpe3ZhciBlPTA7dmFyIG07dmFyIGs9MDt2YXIgZj0wO3ZhciBkPSh0aGlzLl9sYWJlbD09bnVsbCk/ZmFsc2U6dGhpcy5fbGFiZWwuc2hvdztpZih0aGlzLnNob3cpe3ZhciBuPXRoaXMuX3RpY2tzO2Zvcih2YXIgYz0wO2M8bi5sZW5ndGg7YysrKXt2YXIgZz1uW2NdO2lmKGcuc2hvd0xhYmVsJiYoIWcuaXNNaW5vclRpY2t8fHRoaXMuc2hvd01pbm9yVGlja3MpKXtpZih0aGlzLm5hbWU9PSJ4YXhpcyJ8fHRoaXMubmFtZT09IngyYXhpcyIpe209Zy5fZWxlbS5vdXRlckhlaWdodCh0cnVlKX1lbHNle209Zy5fZWxlbS5vdXRlcldpZHRoKHRydWUpfWlmKG0+ZSl7ZT1tfX19dmFyIGo9MDtmb3IodmFyIGM9MDtjPHRoaXMuX2dyb3VwTGFiZWxzLmxlbmd0aDtjKyspe3ZhciBiPXRoaXMuX2dyb3VwTGFiZWxzW2NdO2lmKHRoaXMubmFtZT09InhheGlzInx8dGhpcy5uYW1lPT0ieDJheGlzIil7bT1iLm91dGVySGVpZ2h0KHRydWUpfWVsc2V7bT1iLm91dGVyV2lkdGgodHJ1ZSl9aWYobT5qKXtqPW19fWlmKGQpe2s9dGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTtmPXRoaXMuX2xhYmVsLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpfWlmKHRoaXMubmFtZT09InhheGlzIil7ZSs9aitmO3RoaXMuX2VsZW0uY3NzKHtoZWlnaHQ6ZSsicHgiLGxlZnQ6IjBweCIsYm90dG9tOiIwcHgifSl9ZWxzZXtpZih0aGlzLm5hbWU9PSJ4MmF4aXMiKXtlKz1qK2Y7dGhpcy5fZWxlbS5jc3Moe2hlaWdodDplKyJweCIsbGVmdDoiMHB4Iix0b3A6IjBweCJ9KX1lbHNle2lmKHRoaXMubmFtZT09InlheGlzIil7ZSs9aitrO3RoaXMuX2VsZW0uY3NzKHt3aWR0aDplKyJweCIsbGVmdDoiMHB4Iix0b3A6IjBweCJ9KTtpZihkJiZ0aGlzLl9sYWJlbC5jb25zdHJ1Y3Rvcj09YS5qcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXIpe3RoaXMuX2xhYmVsLl9lbGVtLmNzcygid2lkdGgiLGsrInB4Iil9fWVsc2V7ZSs9aitrO3RoaXMuX2VsZW0uY3NzKHt3aWR0aDplKyJweCIscmlnaHQ6IjBweCIsdG9wOiIwcHgifSk7aWYoZCYmdGhpcy5fbGFiZWwuY29uc3RydWN0b3I9PWEuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyKXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoIndpZHRoIixrKyJweCIpfX19fX19O2EuanFwbG90LkNhdGVnb3J5QXhpc1JlbmRlcmVyLnByb3RvdHlwZS5wYWNrPWZ1bmN0aW9uKGUsYyl7dmFyIEM9dGhpcy5fdGlja3M7dmFyIHY9dGhpcy5tYXg7dmFyIHM9dGhpcy5taW47dmFyIG49Yy5tYXg7dmFyIGw9Yy5taW47dmFyIHE9KHRoaXMuX2xhYmVsPT1udWxsKT9mYWxzZTp0aGlzLl9sYWJlbC5zaG93O3ZhciB4O2Zvcih2YXIgciBpbiBlKXt0aGlzLl9lbGVtLmNzcyhyLGVbcl0pfXRoaXMuX29mZnNldHM9Yzt2YXIgZz1uLWw7dmFyIGs9di1zO2lmKCF0aGlzLnJldmVyc2Upe3RoaXMudTJwPWZ1bmN0aW9uKGgpe3JldHVybihoLXMpKmcvaytsfTt0aGlzLnAydT1mdW5jdGlvbihoKXtyZXR1cm4oaC1sKSprL2crc307aWYodGhpcy5uYW1lPT0ieGF4aXMifHx0aGlzLm5hbWU9PSJ4MmF4aXMiKXt0aGlzLnNlcmllc191MnA9ZnVuY3Rpb24oaCl7cmV0dXJuKGgtcykqZy9rfTt0aGlzLnNlcmllc19wMnU9ZnVuY3Rpb24oaCl7cmV0dXJuIGgqay9nK3N9fWVsc2V7dGhpcy5zZXJpZXNfdTJwPWZ1bmN0aW9uKGgpe3JldHVybihoLXYpKmcva307dGhpcy5zZXJpZXNfcDJ1PWZ1bmN0aW9uKGgpe3JldHVybiBoKmsvZyt2fX19ZWxzZXt0aGlzLnUycD1mdW5jdGlvbihoKXtyZXR1cm4gbCsodi1oKSpnL2t9O3RoaXMucDJ1PWZ1bmN0aW9uKGgpe3JldHVybiBzKyhoLWwpKmsvZ307aWYodGhpcy5uYW1lPT0ieGF4aXMifHx0aGlzLm5hbWU9PSJ4MmF4aXMiKXt0aGlzLnNlcmllc191MnA9ZnVuY3Rpb24oaCl7cmV0dXJuKHYtaCkqZy9rfTt0aGlzLnNlcmllc19wMnU9ZnVuY3Rpb24oaCl7cmV0dXJuIGgqay9nK3Z9fWVsc2V7dGhpcy5zZXJpZXNfdTJwPWZ1bmN0aW9uKGgpe3JldHVybihzLWgpKmcva307dGhpcy5zZXJpZXNfcDJ1PWZ1bmN0aW9uKGgpe3JldHVybiBoKmsvZytzfX19aWYodGhpcy5zaG93KXtpZih0aGlzLm5hbWU9PSJ4YXhpcyJ8fHRoaXMubmFtZT09IngyYXhpcyIpe2Zvcih4PTA7eDxDLmxlbmd0aDt4Kyspe3ZhciBvPUNbeF07aWYoby5zaG93JiZvLnNob3dMYWJlbCl7dmFyIGI7aWYoby5jb25zdHJ1Y3Rvcj09YS5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlciYmby5hbmdsZSl7dmFyIEE9KHRoaXMubmFtZT09InhheGlzIik/MTotMTtzd2l0Y2goby5sYWJlbFBvc2l0aW9uKXtjYXNlImF1dG8iOmlmKEEqby5hbmdsZTwwKXtiPS1vLmdldFdpZHRoKCkrby5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbigtby5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWVsc2V7Yj0tby5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbihvLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzJ9YnJlYWs7Y2FzZSJlbmQiOmI9LW8uZ2V0V2lkdGgoKStvLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguc2luKC1vLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzI7YnJlYWs7Y2FzZSJzdGFydCI6Yj0tby5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbihvLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzI7YnJlYWs7Y2FzZSJtaWRkbGUiOmI9LW8uZ2V0V2lkdGgoKS8yK28uX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5zaW4oLW8uX3RleHRSZW5kZXJlci5hbmdsZSkvMjticmVhaztkZWZhdWx0OmI9LW8uZ2V0V2lkdGgoKS8yK28uX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5zaW4oLW8uX3RleHRSZW5kZXJlci5hbmdsZSkvMjticmVha319ZWxzZXtiPS1vLmdldFdpZHRoKCkvMn12YXIgRD10aGlzLnUycChvLnZhbHVlKStiKyJweCI7by5fZWxlbS5jc3MoImxlZnQiLEQpO28ucGFjaygpfX12YXIgej1bImJvdHRvbSIsMF07aWYocSl7dmFyIG09dGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoImxlZnQiLGwrZy8yLW0vMisicHgiKTtpZih0aGlzLm5hbWU9PSJ4YXhpcyIpe3RoaXMuX2xhYmVsLl9lbGVtLmNzcygiYm90dG9tIiwiMHB4Iik7ej1bImJvdHRvbSIsdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJIZWlnaHQodHJ1ZSldfWVsc2V7dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJ0b3AiLCIwcHgiKTt6PVsidG9wIix0aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKV19dGhpcy5fbGFiZWwucGFjaygpfXZhciBkPXBhcnNlSW50KHRoaXMuX3RpY2tzLmxlbmd0aC90aGlzLmdyb3VwcywxMCkrMTtmb3IoeD0wO3g8dGhpcy5fZ3JvdXBMYWJlbHMubGVuZ3RoO3grKyl7dmFyIEI9MDt2YXIgZj0wO2Zvcih2YXIgdT14KmQ7dTwoeCsxKSpkO3UrKyl7aWYodT49dGhpcy5fdGlja3MubGVuZ3RoLTEpe2NvbnRpbnVlfWlmKHRoaXMuX3RpY2tzW3VdLl9lbGVtJiZ0aGlzLl90aWNrc1t1XS5sYWJlbCE9IiAiKXt2YXIgbz10aGlzLl90aWNrc1t1XS5fZWxlbTt2YXIgcj1vLnBvc2l0aW9uKCk7Qis9ci5sZWZ0K28ub3V0ZXJXaWR0aCh0cnVlKS8yO2YrK319Qj1CL2Y7dGhpcy5fZ3JvdXBMYWJlbHNbeF0uY3NzKHtsZWZ0OihCLXRoaXMuX2dyb3VwTGFiZWxzW3hdLm91dGVyV2lkdGgodHJ1ZSkvMil9KTt0aGlzLl9ncm91cExhYmVsc1t4XS5jc3MoelswXSx6WzFdKX19ZWxzZXtmb3IoeD0wO3g8Qy5sZW5ndGg7eCsrKXt2YXIgbz1DW3hdO2lmKG8uc2hvdyYmby5zaG93TGFiZWwpe3ZhciBiO2lmKG8uY29uc3RydWN0b3I9PWEuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXImJm8uYW5nbGUpe3ZhciBBPSh0aGlzLm5hbWU9PSJ5YXhpcyIpPzE6LTE7c3dpdGNoKG8ubGFiZWxQb3NpdGlvbil7Y2FzZSJhdXRvIjpjYXNlImVuZCI6aWYoQSpvLmFuZ2xlPDApe2I9LW8uX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5jb3MoLW8uX3RleHRSZW5kZXJlci5hbmdsZSkvMn1lbHNle2I9LW8uZ2V0SGVpZ2h0KCkrby5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLmNvcyhvLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzJ9YnJlYWs7Y2FzZSJzdGFydCI6aWYoby5hbmdsZT4wKXtiPS1vLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguY29zKC1vLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzJ9ZWxzZXtiPS1vLmdldEhlaWdodCgpK28uX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5jb3Moby5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWJyZWFrO2Nhc2UibWlkZGxlIjpiPS1vLmdldEhlaWdodCgpLzI7YnJlYWs7ZGVmYXVsdDpiPS1vLmdldEhlaWdodCgpLzI7YnJlYWt9fWVsc2V7Yj0tby5nZXRIZWlnaHQoKS8yfXZhciBEPXRoaXMudTJwKG8udmFsdWUpK2IrInB4IjtvLl9lbGVtLmNzcygidG9wIixEKTtvLnBhY2soKX19dmFyIHo9WyJsZWZ0IiwwXTtpZihxKXt2YXIgeT10aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKTt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoInRvcCIsbi1nLzIteS8yKyJweCIpO2lmKHRoaXMubmFtZT09InlheGlzIil7dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJsZWZ0IiwiMHB4Iik7ej1bImxlZnQiLHRoaXMuX2xhYmVsLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSldfWVsc2V7dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJyaWdodCIsIjBweCIpO3o9WyJyaWdodCIsdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKV19dGhpcy5fbGFiZWwucGFjaygpfXZhciBkPXBhcnNlSW50KHRoaXMuX3RpY2tzLmxlbmd0aC90aGlzLmdyb3VwcywxMCkrMTtmb3IoeD0wO3g8dGhpcy5fZ3JvdXBMYWJlbHMubGVuZ3RoO3grKyl7dmFyIEI9MDt2YXIgZj0wO2Zvcih2YXIgdT14KmQ7dTwoeCsxKSpkO3UrKyl7aWYodT49dGhpcy5fdGlja3MubGVuZ3RoLTEpe2NvbnRpbnVlfWlmKHRoaXMuX3RpY2tzW3VdLl9lbGVtJiZ0aGlzLl90aWNrc1t1XS5sYWJlbCE9IiAiKXt2YXIgbz10aGlzLl90aWNrc1t1XS5fZWxlbTt2YXIgcj1vLnBvc2l0aW9uKCk7Qis9ci50b3Arby5vdXRlckhlaWdodCgpLzI7ZisrfX1CPUIvZjt0aGlzLl9ncm91cExhYmVsc1t4XS5jc3Moe3RvcDpCLXRoaXMuX2dyb3VwTGFiZWxzW3hdLm91dGVySGVpZ2h0KCkvMn0pO3RoaXMuX2dyb3VwTGFiZWxzW3hdLmNzcyh6WzBdLHpbMV0pfX19fX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.ciParser.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLyoqCiAgICAgKiBDbGFzczogJC5qcXBsb3QuY2lQYXJzZXIKICAgICAqIERhdGEgUmVuZGVyZXIgZnVuY3Rpb24gd2hpY2ggY29udmVydHMgYSBjdXN0b20gSlNPTiBkYXRhIG9iamVjdCBpbnRvIGpxUGxvdCBkYXRhIGZvcm1hdC4KICAgICAqIFNldCB0aGlzIGFzIGEgY2FsbGFibGUgb24gdGhlIGpxcGxvdCBkYXRhUmVuZGVyZXIgcGxvdCBvcHRpb246CiAgICAgKiAKICAgICAqID4gcGxvdCA9ICQuanFwbG90KCdteWNoYXJ0JywgW2RhdGFdLCB7IGRhdGFSZW5kZXJlcjogJC5qcXBsb3QuY2lQYXJzZXIsIC4uLiB9KTsKICAgICAqIAogICAgICogV2hlcmUgZGF0YSBpcyBhbiBvYmplY3QgaW4gSlNPTiBmb3JtYXQgb3IgYSBKU09OIGVuY29kZWQgc3RyaW5nIGNvbmZvcm1pbmcgdG8gdGhlCiAgICAgKiBDaXR5IEluZGV4IEFQSSBzcGVjLgogICAgICogCiAgICAgKiBOb3RlIHRoYXQgY2FsbGluZyB0aGUgcmVuZGVyZXIgZnVuY3Rpb24gaXMgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IGpxUGxvdC4gIFRoZQogICAgICogdXNlciBkb2VzIG5vdCBoYXZlIHRvIGNhbGwgdGhlIGZ1bmN0aW9uLiAgVGhlIHBhcmFtZXRlcnMgZGVzY3JpYmVkIGJlbG93IHdpbGwKICAgICAqIGF1dG9tYXRpY2FsbHkgYmUgcGFzc2VkIHRvIHRoZSBjaVBhcnNlciBmdW5jdGlvbi4KICAgICAqIAogICAgICogUGFyYW1ldGVyczoKICAgICAqIGRhdGEgLSBKU09OIGVuY29kZWQgc3RyaW5nIG9yIG9iamVjdC4KICAgICAqIHBsb3QgLSByZWZlcmVuY2UgdG8ganFQbG90IFBsb3Qgb2JqZWN0LgogICAgICogCiAgICAgKiBSZXR1cm5zOgogICAgICogZGF0YSBhcnJheSBpbiBqcVBsb3QgZm9ybWF0LgogICAgICogCiAgICAgKi8KICAgICQuanFwbG90LmNpUGFyc2VyID0gZnVuY3Rpb24gKGRhdGEsIHBsb3QpIHsKICAgICAgICB2YXIgcmV0ID0gW10sCiAgICAgICAgICAgIGxpbmUsCiAgICAgICAgICAgIHRlbXAsCiAgICAgICAgICAgIGksIGosIGssIGtrOwogICAgCiAgICAgICAgIGlmICh0eXBlb2YoZGF0YSkgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgIGRhdGEgPSAgJC5qcXBsb3QuSlNPTi5wYXJzZShkYXRhLCBoYW5kbGVTdHJpbmdzKTsKICAgICAgICAgfQogCiAgICAgICAgIGVsc2UgaWYgKHR5cGVvZihkYXRhKSA9PSAib2JqZWN0IikgewogICAgICAgICAgICAgZm9yIChrIGluIGRhdGEpIHsKICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTxkYXRhW2tdLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoa2sgaW4gZGF0YVtrXVtpXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtrXVtpXVtra10gPSBoYW5kbGVTdHJpbmdzKGtrLCBkYXRhW2tdW2ldW2trXSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAKICAgICAgICAgLy8gZnVuY3Rpb24gaGFuZGxlU3RyaW5ncwogICAgICAgICAvLyBDaGVja3MgYW55IEpTT04gZW5jb2RlZCBzdHJpbmdzIHRvIHNlZSBpZiB0aGV5IGFyZQogICAgICAgICAvLyBlbmNvZGVkIGRhdGVzLiAgSWYgc28sIHB1bGwgb3V0IHRoZSB0aW1lc3RhbXAuCiAgICAgICAgIC8vIEV4cGVjdHMgZGF0ZXMgdG8gYmUgcmVwcmVzZW50ZWQgYnkganMgdGltZXN0YW1wcy4KIAogICAgICAgICBmdW5jdGlvbiBoYW5kbGVTdHJpbmdzKGtleSwgdmFsdWUpIHsKICAgICAgICAgICAgdmFyIGE7CiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUudG9TdHJpbmcoKS5pbmRleE9mKCdEYXRlJykgPj0gMCkgewogICAgICAgICAgICAgICAgICAgIC8vaGVyZSB3ZSB3aWxsIHRyeSB0byBleHRyYWN0IHRoZSB0aWNrcyBmcm9tIHRoZSBEYXRlIHN0cmluZyBpbiB0aGUgInZhbHVlIiBmaWVsZHMgb2YgSlNPTiByZXR1cm5lZCBkYXRhCiAgICAgICAgICAgICAgICAgICAgYSA9IC9eXC9EYXRlXCgoLT9bMC05XSspXClcLyQvLmV4ZWModmFsdWUpOwogICAgICAgICAgICAgICAgICAgIGlmIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChhWzFdLCAxMCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgIGZvciAodmFyIHByb3AgaW4gZGF0YSkgewogICAgICAgICAgICBsaW5lID0gW107CiAgICAgICAgICAgIHRlbXAgPSBkYXRhW3Byb3BdOwogICAgICAgICAgICBzd2l0Y2ggKHByb3ApIHsKICAgICAgICAgICAgICAgIGNhc2UgIlByaWNlVGlja3MiOgogICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHRlbXAubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5wdXNoKFt0ZW1wW2ldWydUaWNrRGF0ZSddLCB0ZW1wW2ldWydQcmljZSddXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiUHJpY2VCYXJzIjoKICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTx0ZW1wLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUucHVzaChbdGVtcFtpXVsnQmFyRGF0ZSddLCB0ZW1wW2ldWydPcGVuJ10sIHRlbXBbaV1bJ0hpZ2gnXSwgdGVtcFtpXVsnTG93J10sIHRlbXBbaV1bJ0Nsb3NlJ11dKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0LnB1c2gobGluZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICB9Owp9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.ciParser.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGEpe2EuanFwbG90LmNpUGFyc2VyPWZ1bmN0aW9uKGcsbCl7dmFyIG09W10sbyxuLGgsZixlLGM7aWYodHlwZW9mKGcpPT0ic3RyaW5nIil7Zz1hLmpxcGxvdC5KU09OLnBhcnNlKGcsZCl9ZWxzZXtpZih0eXBlb2YoZyk9PSJvYmplY3QiKXtmb3IoZSBpbiBnKXtmb3IoaD0wO2g8Z1tlXS5sZW5ndGg7aCsrKXtmb3IoYyBpbiBnW2VdW2hdKXtnW2VdW2hdW2NdPWQoYyxnW2VdW2hdW2NdKX19fX1lbHNle3JldHVybiBudWxsfX1mdW5jdGlvbiBkKGosayl7dmFyIGk7aWYoayE9bnVsbCl7aWYoay50b1N0cmluZygpLmluZGV4T2YoIkRhdGUiKT49MCl7aT0vXlwvRGF0ZVwoKC0/WzAtOV0rKVwpXC8kLy5leGVjKGspO2lmKGkpe3JldHVybiBwYXJzZUludChpWzFdLDEwKX19cmV0dXJuIGt9fWZvcih2YXIgYiBpbiBnKXtvPVtdO249Z1tiXTtzd2l0Y2goYil7Y2FzZSJQcmljZVRpY2tzIjpmb3IoaD0wO2g8bi5sZW5ndGg7aCsrKXtvLnB1c2goW25baF1bIlRpY2tEYXRlIl0sbltoXVsiUHJpY2UiXV0pfWJyZWFrO2Nhc2UiUHJpY2VCYXJzIjpmb3IoaD0wO2g8bi5sZW5ndGg7aCsrKXtvLnB1c2goW25baF1bIkJhckRhdGUiXSxuW2hdWyJPcGVuIl0sbltoXVsiSGlnaCJdLG5baF1bIkxvdyJdLG5baF1bIkNsb3NlIl1dKX1icmVha31tLnB1c2gobyl9cmV0dXJuIG19fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.cursor.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgCiAgICAvKioKICAgICAqIENsYXNzOiAkLmpxcGxvdC5DdXJzb3IKICAgICAqIFBsdWdpbiBjbGFzcyByZXByZXNlbnRpbmcgdGhlIGN1cnNvciBhcyBkaXNwbGF5ZWQgb24gdGhlIHBsb3QuCiAgICAgKi8KICAgICQuanFwbG90LkN1cnNvciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAvLyBHcm91cDogUHJvcGVydGllcwogICAgICAgIC8vCiAgICAgICAgLy8gcHJvcDogc3R5bGUKICAgICAgICAvLyBDU1Mgc3BlYyBmb3IgY3Vyc29yIHN0eWxlCiAgICAgICAgdGhpcy5zdHlsZSA9ICdjcm9zc2hhaXInOwogICAgICAgIHRoaXMucHJldmlvdXNDdXJzb3IgPSAnYXV0byc7CiAgICAgICAgLy8gcHJvcDogc2hvdwogICAgICAgIC8vIHdoZXRoZXIgdG8gc2hvdyB0aGUgY3Vyc29yIG9yIG5vdC4KICAgICAgICB0aGlzLnNob3cgPSAkLmpxcGxvdC5jb25maWcuZW5hYmxlUGx1Z2luczsKICAgICAgICAvLyBwcm9wOiBzaG93VG9vbHRpcAogICAgICAgIC8vIHNob3cgYSBjdXJzb3IgcG9zaXRpb24gdG9vbHRpcC4gIExvY2F0aW9uIG9mIHRoZSB0b29sdGlwCiAgICAgICAgLy8gd2lsbCBiZSBjb250cm9sbGVkIGJ5IGZvbGxvd01vdXNlIGFuZCB0b29sdGlwTG9jYXRpb24uCiAgICAgICAgdGhpcy5zaG93VG9vbHRpcCA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogZm9sbG93TW91c2UKICAgICAgICAvLyBUb29sdGlwIGZvbGxvd3MgdGhlIG1vdXNlLCBpdCBpcyBub3QgYXQgYSBmaXhlZCBsb2NhdGlvbi4KICAgICAgICAvLyBUb29sdGlwIHdpbGwgc2hvdyBvbiB0aGUgZ3JpZCBhdCB0aGUgbG9jYXRpb24gZ2l2ZW4gYnkKICAgICAgICAvLyB0b29sdGlwTG9jYXRpb24sIG9mZnNldCBmcm9tIHRoZSBncmlkIGVkZ2UgYnkgdG9vbHRpcE9mZnNldC4KICAgICAgICB0aGlzLmZvbGxvd01vdXNlID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogdG9vbHRpcExvY2F0aW9uCiAgICAgICAgLy8gV2hlcmUgdG8gcG9zaXRpb24gdG9vbHRpcC4gIElmIGZvbGxvd01vdXNlIGlzIHRydWUsIHRoaXMgaXMKICAgICAgICAvLyByZWxhdGl2ZSB0byB0aGUgY3Vyc29yLCBvdGhlcndpc2UsIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSBncmlkLgogICAgICAgIC8vIE9uZSBvZiAnbicsICduZScsICdlJywgJ3NlJywgJ3MnLCAnc3cnLCAndycsICdudycKICAgICAgICB0aGlzLnRvb2x0aXBMb2NhdGlvbiA9ICdzZSc7CiAgICAgICAgLy8gcHJvcDogdG9vbHRpcE9mZnNldAogICAgICAgIC8vIFBpeGVsIG9mZnNldCBvZiB0b29sdGlwIGZyb20gdGhlIGdyaWQgYm91ZGFyaWVzIG9yIGN1cnNvciBjZW50ZXIuCiAgICAgICAgdGhpcy50b29sdGlwT2Zmc2V0ID0gNjsKICAgICAgICAvLyBwcm9wOiBzaG93VG9vbHRpcEdyaWRQb3NpdGlvbgogICAgICAgIC8vIHNob3cgdGhlIGdyaWQgcGl4ZWwgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlLgogICAgICAgIHRoaXMuc2hvd1Rvb2x0aXBHcmlkUG9zaXRpb24gPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBzaG93VG9vbHRpcFVuaXRQb3NpdGlvbgogICAgICAgIC8vIHNob3cgdGhlIHVuaXQgKGRhdGEpIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZS4KICAgICAgICB0aGlzLnNob3dUb29sdGlwVW5pdFBvc2l0aW9uID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBzaG93VG9vbHRpcERhdGFQb3NpdGlvbgogICAgICAgIC8vIFVzZWQgd2l0aCBzaG93VmVydGljYWxMaW5lIHRvIHNob3cgaW50ZXJzZWN0aW5nIGRhdGEgcG9pbnRzIGluIHRoZSB0b29sdGlwLgogICAgICAgIHRoaXMuc2hvd1Rvb2x0aXBEYXRhUG9zaXRpb24gPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiB0b29sdGlwRm9ybWF0U3RyaW5nCiAgICAgICAgLy8gc3ByaW50ZiBmb3JtYXQgc3RyaW5nIGZvciB0aGUgdG9vbHRpcC4KICAgICAgICAvLyBVc2VzIEFzaCBTZWFybGUncyBqYXZhc2NyaXB0IHNwcmludGYgaW1wbGVtZW50YXRpb24KICAgICAgICAvLyBmb3VuZCBoZXJlOiBodHRwOi8vaGV4bWVuLmNvbS9ibG9nLzIwMDcvMDMvcHJpbnRmLXNwcmludGYvCiAgICAgICAgLy8gU2VlIGh0dHA6Ly9wZXJsZG9jLnBlcmwub3JnL2Z1bmN0aW9ucy9zcHJpbnRmLmh0bWwgZm9yIHJlZmVyZW5jZQogICAgICAgIC8vIE5vdGUsIGlmIHNob3dUb29sdGlwRGF0YVBvc2l0aW9uIGlzIHRydWUsIHRoZSBkZWZhdWx0IHRvb2x0aXBGb3JtYXRTdHJpbmcKICAgICAgICAvLyB3aWxsIGJlIHNldCB0byB0aGUgY3Vyc29yTGVnZW5kRm9ybWF0U3RyaW5nLCBub3QgdGhlIGRlZmF1bHQgZ2l2ZW4gaGVyZS4KICAgICAgICB0aGlzLnRvb2x0aXBGb3JtYXRTdHJpbmcgPSAnJS40UCwgJS40UCc7CiAgICAgICAgLy8gcHJvcDogdXNlQXhlc0Zvcm1hdHRlcnMKICAgICAgICAvLyBVc2UgdGhlIHggYW5kIHkgYXhlcyBmb3JtYXR0ZXJzIHRvIGZvcm1hdCB0aGUgdGV4dCBpbiB0aGUgdG9vbHRpcC4KICAgICAgICB0aGlzLnVzZUF4ZXNGb3JtYXR0ZXJzID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiB0b29sdGlwQXhpc0dyb3VwcwogICAgICAgIC8vIFNob3cgcG9zaXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgYXhlcy4KICAgICAgICAvLyBUaGlzIGlzIGFuIGFycmF5IGxpa2UgW1sneGF4aXMnLCAneWF4aXMnXSwgWyd4YXhpcycsICd5MmF4aXMnXV0KICAgICAgICAvLyBEZWZhdWx0IGlzIHRvIGNvbXB1dGUgYXV0b21hdGljYWxseSBmb3IgYWxsIHZpc2libGUgYXhlcy4KICAgICAgICB0aGlzLnRvb2x0aXBBeGlzR3JvdXBzID0gW107CiAgICAgICAgLy8gcHJvcDogem9vbQogICAgICAgIC8vIEVuYWJsZSBwbG90IHpvb21pbmcuCiAgICAgICAgdGhpcy56b29tID0gZmFsc2U7CiAgICAgICAgLy8gem9vbVByb3h5IGFuZCB6b29tVGFyZ2V0IHByb3BlcnRpZXMgYXJlIG5vdCBkaXJlY3RseSBzZXQgYnkgdXNlci4gIAogICAgICAgIC8vIFRoZXkgV2lsbCBiZSBzZXQgdGhyb3VnaCBjYWxsIHRvIHpvb21Qcm94eSBtZXRob2QuCiAgICAgICAgdGhpcy56b29tUHJveHkgPSBmYWxzZTsKICAgICAgICB0aGlzLnpvb21UYXJnZXQgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBsb29zZVpvb20KICAgICAgICAvLyBXaWxsIGV4cGFuZCB6b29tIHJhbmdlIHRvIHByb3ZpZGUgbW9yZSByb3VuZGVkIHRpY2sgdmFsdWVzLgogICAgICAgIC8vIFdvcmtzIG9ubHkgd2l0aCBsaW5lYXIsIGxvZyBhbmQgZGF0ZSBheGVzLgogICAgICAgIHRoaXMubG9vc2Vab29tID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBjbGlja1Jlc2V0CiAgICAgICAgLy8gV2lsbCByZXNldCBwbG90IHpvb20gaWYgc2luZ2xlIGNsaWNrIG9uIHBsb3Qgd2l0aG91dCBkcmFnLgogICAgICAgIHRoaXMuY2xpY2tSZXNldCA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGRibENsaWNrUmVzZXQKICAgICAgICAvLyBXaWxsIHJlc2V0IHBsb3Qgem9vbSBpZiBkb3VibGUgY2xpY2sgb24gcGxvdCB3aXRob3V0IGRyYWcuCiAgICAgICAgdGhpcy5kYmxDbGlja1Jlc2V0ID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBzaG93VmVydGljYWxMaW5lCiAgICAgICAgLy8gZHJhdyBhIHZlcnRpY2FsIGxpbmUgYWNyb3NzIHRoZSBwbG90IHdoaWNoIGZvbGxvd3MgdGhlIGN1cnNvci4KICAgICAgICAvLyBXaGVuIHRoZSBsaW5lIGlzIG5lYXIgYSBkYXRhIHBvaW50LCBhIHNwZWNpYWwgbGVnZW5kIGFuZC9vciB0b29sdGlwIGNhbgogICAgICAgIC8vIGJlIHVwZGF0ZWQgd2l0aCB0aGUgZGF0YSB2YWx1ZXMuCiAgICAgICAgdGhpcy5zaG93VmVydGljYWxMaW5lID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogc2hvd0hvcml6b250YWxMaW5lCiAgICAgICAgLy8gZHJhdyBhIGhvcml6b250YWwgbGluZSBhY3Jvc3MgdGhlIHBsb3Qgd2hpY2ggZm9sbG93cyB0aGUgY3Vyc29yLgogICAgICAgIHRoaXMuc2hvd0hvcml6b250YWxMaW5lID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogY29uc3RyYWluWm9vbVRvCiAgICAgICAgLy8gJ25vbmUnLCAneCcgb3IgJ3knCiAgICAgICAgdGhpcy5jb25zdHJhaW5ab29tVG8gPSAnbm9uZSc7CiAgICAgICAgLy8gLy8gcHJvcDogYXV0b3NjYWxlQ29uc3RyYWludAogICAgICAgIC8vIC8vIHdoZW4gYSBjb25zdHJhaW5lZCBheGlzIGlzIHNwZWNpZmllZCwgdHJ1ZSB3aWxsCiAgICAgICAgLy8gLy8gYXVhdG9zY2FsZSB0aGUgYWRqYWNlbnQgYXhpcy4KICAgICAgICAvLyB0aGlzLmF1dG9zY2FsZUNvbnN0cmFpbnQgPSB0cnVlOwogICAgICAgIHRoaXMuc2hhcGVSZW5kZXJlciA9IG5ldyAkLmpxcGxvdC5TaGFwZVJlbmRlcmVyKCk7CiAgICAgICAgdGhpcy5fem9vbSA9IHtzdGFydDpbXSwgZW5kOltdLCBzdGFydGVkOiBmYWxzZSwgem9vbWluZzpmYWxzZSwgaXNab29tZWQ6ZmFsc2UsIGF4ZXM6e3N0YXJ0Ont9LCBlbmQ6e319LCBncmlkcG9zOnt9LCBkYXRhcG9zOnt9fTsKICAgICAgICB0aGlzLl90b29sdGlwRWxlbTsKICAgICAgICB0aGlzLnpvb21DYW52YXM7CiAgICAgICAgdGhpcy5jdXJzb3JDYW52YXM7CiAgICAgICAgLy8gcHJvcDogaW50ZXJzZWN0aW9uVGhyZXNob2xkCiAgICAgICAgLy8gcGl4ZWwgZGlzdGFuY2UgZnJvbSBkYXRhIHBvaW50IG9yIG1hcmtlciB0byBjb25zaWRlciBjdXJzb3IgbGluZXMgaW50ZXJzZWN0aW5nIHdpdGggcG9pbnQuCiAgICAgICAgLy8gSWYgZGF0YSBwb2ludCBtYXJrZXJzIGFyZSBub3Qgc2hvd24sIHRoaXMgc2hvdWxkIGJlID49IDEgb3Igd2lsbCBvZnRlbiBtaXNzIHBvaW50IGludGVyc2VjdGlvbnMuCiAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25UaHJlc2hvbGQgPSAyOwogICAgICAgIC8vIHByb3A6IHNob3dDdXJzb3JMZWdlbmQKICAgICAgICAvLyBSZXBsYWNlIHRoZSBwbG90IGxlZ2VuZCB3aXRoIGFuIGVuaGFuY2VkIGxlZ2VuZCBkaXNwbGF5aW5nIGludGVyc2VjdGlvbiBpbmZvcm1hdGlvbi4KICAgICAgICB0aGlzLnNob3dDdXJzb3JMZWdlbmQgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBjdXJzb3JMZWdlbmRGb3JtYXRTdHJpbmcKICAgICAgICAvLyBGb3JtYXQgc3RyaW5nIHVzZWQgaW4gdGhlIGN1cnNvciBsZWdlbmQuICBJZiBzaG93VG9vbHRpcERhdGFQb3NpdGlvbiBpcyB0cnVlLAogICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJlIHRoZSBkZWZhdWx0IGZvcm1hdCBzdHJpbmcgdXNlZCBieSB0b29sdGlwRm9ybWF0U3RyaW5nLgogICAgICAgIHRoaXMuY3Vyc29yTGVnZW5kRm9ybWF0U3RyaW5nID0gJC5qcXBsb3QuQ3Vyc29yLmN1cnNvckxlZ2VuZEZvcm1hdFN0cmluZzsKICAgICAgICAvLyB3aGV0aGVyIHRoZSBjdXJzb3IgaXMgb3ZlciB0aGUgZ3JpZCBvciBub3QuCiAgICAgICAgdGhpcy5fb2xkSGFuZGxlcnMgPSB7b25zZWxlY3RzdGFydDogbnVsbCwgb25kcmFnOiBudWxsLCBvbm1vdXNlZG93bjogbnVsbH07CiAgICAgICAgLy8gcHJvcDogY29uc3RyYWluT3V0c2lkZVpvb20KICAgICAgICAvLyBUcnVlIHRvIGxpbWl0IGFjdHVhbCB6b29tIGFyZWEgdG8gZWRnZXMgb2YgZ3JpZCwgZXZlbiB3aGVuIHpvb21pbmcKICAgICAgICAvLyBvdXRzaWRlIG9mIHBsb3QgYXJlYS4gIFRoYXQgaXMsIGNhbid0IHpvb20gb3V0IGJ5IG1vdXNpbmcgb3V0c2lkZSBwbG90LgogICAgICAgIHRoaXMuY29uc3RyYWluT3V0c2lkZVpvb20gPSB0cnVlOwogICAgICAgIC8vIHByb3A6IHNob3dUb29sdGlwT3V0c2lkZVpvb20KICAgICAgICAvLyBUcnVlIHdpbGwga2VlcCB1cGRhdGluZyB0aGUgdG9vbHRpcCB3aGVuIHpvb21pbmcgb2YgdGhlIGdyaWQuCiAgICAgICAgdGhpcy5zaG93VG9vbHRpcE91dHNpZGVab29tID0gZmFsc2U7CiAgICAgICAgLy8gdHJ1ZSBpZiBtb3VzZSBpcyBvdmVyIGdyaWQsIGZhbHNlIGlmIG5vdC4KICAgICAgICB0aGlzLm9uR3JpZCA9IGZhbHNlOwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQ3Vyc29yLmN1cnNvckxlZ2VuZEZvcm1hdFN0cmluZyA9ICclcyB4OiVzLCB5OiVzJzsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgcGxvdAogICAgJC5qcXBsb3QuQ3Vyc29yLmluaXQgPSBmdW5jdGlvbiAodGFyZ2V0LCBkYXRhLCBvcHRzKXsKICAgICAgICAvLyBhZGQgYSBjdXJzb3IgYXR0cmlidXRlIHRvIHRoZSBwbG90CiAgICAgICAgdmFyIG9wdGlvbnMgPSBvcHRzIHx8IHt9OwogICAgICAgIHRoaXMucGx1Z2lucy5jdXJzb3IgPSBuZXcgJC5qcXBsb3QuQ3Vyc29yKG9wdGlvbnMuY3Vyc29yKTsKICAgICAgICB2YXIgYyA9IHRoaXMucGx1Z2lucy5jdXJzb3I7CgogICAgICAgIGlmIChjLnNob3cpIHsKICAgICAgICAgICAgJC5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLnB1c2goWydqcXBsb3RNb3VzZUVudGVyJywgaGFuZGxlTW91c2VFbnRlcl0pOwogICAgICAgICAgICAkLmpxcGxvdC5ldmVudExpc3RlbmVySG9va3MucHVzaChbJ2pxcGxvdE1vdXNlTGVhdmUnLCBoYW5kbGVNb3VzZUxlYXZlXSk7CiAgICAgICAgICAgICQuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsnanFwbG90TW91c2VNb3ZlJywgaGFuZGxlTW91c2VNb3ZlXSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoYy5zaG93Q3Vyc29yTGVnZW5kKSB7ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIG9wdHMubGVnZW5kID0gb3B0cy5sZWdlbmQgfHwge307CiAgICAgICAgICAgICAgICBvcHRzLmxlZ2VuZC5yZW5kZXJlciA9ICAkLmpxcGxvdC5DdXJzb3JMZWdlbmRSZW5kZXJlcjsKICAgICAgICAgICAgICAgIG9wdHMubGVnZW5kLmZvcm1hdFN0cmluZyA9IHRoaXMucGx1Z2lucy5jdXJzb3IuY3Vyc29yTGVnZW5kRm9ybWF0U3RyaW5nOwogICAgICAgICAgICAgICAgb3B0cy5sZWdlbmQuc2hvdyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChjLnpvb20pIHsKICAgICAgICAgICAgICAgICQuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsnanFwbG90TW91c2VEb3duJywgaGFuZGxlTW91c2VEb3duXSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIChjLmNsaWNrUmVzZXQpIHsKICAgICAgICAgICAgICAgICAgICAkLmpxcGxvdC5ldmVudExpc3RlbmVySG9va3MucHVzaChbJ2pxcGxvdENsaWNrJywgaGFuZGxlQ2xpY2tdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKGMuZGJsQ2xpY2tSZXNldCkgewogICAgICAgICAgICAgICAgICAgICQuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsnanFwbG90RGJsQ2xpY2snLCBoYW5kbGVEYmxDbGlja10pOwogICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIHRoaXMucmVzZXRab29tID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgYXhlcyA9IHRoaXMuYXhlczsKICAgICAgICAgICAgICAgIGlmICghYy56b29tUHJveHkpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBheCBpbiBheGVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF4ZXNbYXhdLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGF4ZXNbYXhdLl90aWNrcyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBmYWtlIG91dCB0aWNrIGNyZWF0aW9uIGFsZ29yaXRobSB0byBtYWtlIHN1cmUgb3JpZ2luYWwgYXV0bwogICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wdXRlZCBmb3JtYXQgc3RyaW5nIGlzIHVzZWQgaWYgX292ZXJyaWRlRm9ybWF0U3RyaW5nIGlzIHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMuX3pvb20uYXhlc1theF0gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhlc1theF0uX2F1dG9Gb3JtYXRTdHJpbmcgPSBjLl96b29tLmF4ZXNbYXhdLnRpY2tGb3JtYXRTdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRyYXcoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLnBsdWdpbnMuY3Vyc29yLnpvb21DYW52YXMuX2N0eDsKICAgICAgICAgICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsMCxjdHguY2FudmFzLndpZHRoLCBjdHguY2FudmFzLmhlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgY3R4ID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5jdXJzb3IuX3pvb20uaXNab29tZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LnRyaWdnZXIoJ2pxcGxvdFJlc2V0Wm9vbScsIFt0aGlzLCB0aGlzLnBsdWdpbnMuY3Vyc29yXSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIAoKICAgICAgICAgICAgaWYgKGMuc2hvd1Rvb2x0aXBEYXRhUG9zaXRpb24pIHsKICAgICAgICAgICAgICAgIGMuc2hvd1Rvb2x0aXBVbml0UG9zaXRpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgIGMuc2hvd1Rvb2x0aXBHcmlkUG9zaXRpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmN1cnNvci50b29sdGlwRm9ybWF0U3RyaW5nID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGMudG9vbHRpcEZvcm1hdFN0cmluZyA9ICQuanFwbG90LkN1cnNvci5jdXJzb3JMZWdlbmRGb3JtYXRTdHJpbmc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBjb250ZXh0IG9mIHBsb3QKICAgICQuanFwbG90LkN1cnNvci5wb3N0RHJhdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBjID0gdGhpcy5wbHVnaW5zLmN1cnNvcjsKICAgICAgICAKICAgICAgICAvLyBNZW1vcnkgTGVha3MgcGF0Y2gKICAgICAgICBpZiAoYy56b29tQ2FudmFzKSB7CiAgICAgICAgICAgIGMuem9vbUNhbnZhcy5yZXNldENhbnZhcygpOwogICAgICAgICAgICBjLnpvb21DYW52YXMgPSBudWxsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoYy5jdXJzb3JDYW52YXMpIHsKICAgICAgICAgICAgYy5jdXJzb3JDYW52YXMucmVzZXRDYW52YXMoKTsKICAgICAgICAgICAgYy5jdXJzb3JDYW52YXMgPSBudWxsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoYy5fdG9vbHRpcEVsZW0pIHsKICAgICAgICAgICAgYy5fdG9vbHRpcEVsZW0uZW1wdHlGb3JjZSgpOwogICAgICAgICAgICBjLl90b29sdGlwRWxlbSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAKICAgICAgICBpZiAoYy56b29tKSB7CiAgICAgICAgICAgIGMuem9vbUNhbnZhcyA9IG5ldyAkLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7CiAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKGMuem9vbUNhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCAnanFwbG90LXpvb20tY2FudmFzJywgdGhpcy5fcGxvdERpbWVuc2lvbnMsIHRoaXMpKTsKICAgICAgICAgICAgYy56b29tQ2FudmFzLnNldENvbnRleHQoKTsKICAgICAgICB9CgogICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgYy5fdG9vbHRpcEVsZW0gPSAkKGVsZW0pOwogICAgICAgIGVsZW0gPSBudWxsOwogICAgICAgIGMuX3Rvb2x0aXBFbGVtLmFkZENsYXNzKCdqcXBsb3QtY3Vyc29yLXRvb2x0aXAnKTsKICAgICAgICBjLl90b29sdGlwRWxlbS5jc3Moe3Bvc2l0aW9uOidhYnNvbHV0ZScsIGRpc3BsYXk6J25vbmUnfSk7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgaWYgKGMuem9vbUNhbnZhcykgewogICAgICAgICAgICBjLnpvb21DYW52YXMuX2VsZW0uYmVmb3JlKGMuX3Rvb2x0aXBFbGVtKTsKICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZShjLl90b29sdGlwRWxlbSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYy5zaG93VmVydGljYWxMaW5lIHx8IGMuc2hvd0hvcml6b250YWxMaW5lKSB7CiAgICAgICAgICAgIGMuY3Vyc29yQ2FudmFzID0gbmV3ICQuanFwbG90LkdlbmVyaWNDYW52YXMoKTsKICAgICAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZvcmUoYy5jdXJzb3JDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywgJ2pxcGxvdC1jdXJzb3ItY2FudmFzJywgdGhpcy5fcGxvdERpbWVuc2lvbnMsIHRoaXMpKTsKICAgICAgICAgICAgYy5jdXJzb3JDYW52YXMuc2V0Q29udGV4dCgpOwogICAgICAgIH0KCiAgICAgICAgLy8gaWYgd2UgYXJlIHNob3dpbmcgdGhlIHBvc2l0aW9ucyBpbiB1bml0IGNvb3JkaW5hdGVzLCBhbmQgbm8gYXhlcyBncm91cHMKICAgICAgICAvLyB3ZXJlIHNwZWNpZmllZCwgY3JlYXRlIGEgZGVmYXVsdCBzZXQuCiAgICAgICAgaWYgKGMuc2hvd1Rvb2x0aXBVbml0UG9zaXRpb24pewogICAgICAgICAgICBpZiAoYy50b29sdGlwQXhpc0dyb3Vwcy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgIHZhciBzZXJpZXMgPSB0aGlzLnNlcmllczsKICAgICAgICAgICAgICAgIHZhciBzOwogICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBbXTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxzZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBzID0gc2VyaWVzW2ldOwogICAgICAgICAgICAgICAgICAgIHZhciBheCA9IHMueGF4aXMrJywnK3MueWF4aXM7CiAgICAgICAgICAgICAgICAgICAgaWYgKCQuaW5BcnJheShheCwgdGVtcCkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKGF4KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGVtcC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGMudG9vbHRpcEF4aXNHcm91cHMucHVzaCh0ZW1wW2ldLnNwbGl0KCcsJykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgLy8gR3JvdXA6IG1ldGhvZHMKICAgIC8vCiAgICAvLyBtZXRob2Q6ICQuanFwbG90LkN1cnNvci56b29tUHJveHkKICAgIC8vIGxpbmtzIHRhcmdldFBsb3QgdG8gY29udHJvbGxlclBsb3Qgc28gdGhhdCBwbG90IHpvb21pbmcgb2YKICAgIC8vIHRhcmdldFBsb3Qgd2lsbCBiZSBjb250cm9sbGVkIGJ5IHpvb21pbmcgb24gdGhlIGNvbnRyb2xsZXJQbG90LgogICAgLy8gY29udHJvbGxlclBsb3Qgd2lsbCBub3QgYWN0dWFsbHkgem9vbSwgYnV0IGFjdHMgYXMgYW4KICAgIC8vIG92ZXJ2aWV3IHBsb3QuICBOb3RlLCB0aGUgem9vbSBvcHRpb25zIG11c3QgYmUgc2V0IHRvIHRydWUgZm9yCiAgICAvLyB6b29tUHJveHkgdG8gd29yay4KICAgICQuanFwbG90LkN1cnNvci56b29tUHJveHkgPSBmdW5jdGlvbih0YXJnZXRQbG90LCBjb250cm9sbGVyUGxvdCkgewogICAgICAgIHZhciB0YyA9IHRhcmdldFBsb3QucGx1Z2lucy5jdXJzb3I7CiAgICAgICAgdmFyIGNjID0gY29udHJvbGxlclBsb3QucGx1Z2lucy5jdXJzb3I7CiAgICAgICAgdGMuem9vbVRhcmdldCA9IHRydWU7CiAgICAgICAgdGMuem9vbSA9IHRydWU7CiAgICAgICAgdGMuc3R5bGUgPSAnYXV0byc7CiAgICAgICAgdGMuZGJsQ2xpY2tSZXNldCA9IGZhbHNlOwogICAgICAgIGNjLnpvb20gPSB0cnVlOwogICAgICAgIGNjLnpvb21Qcm94eSA9IHRydWU7CiAgICAgICAgICAgICAgCiAgICAgICAgY29udHJvbGxlclBsb3QudGFyZ2V0LmJpbmQoJ2pxcGxvdFpvb20nLCBwbG90Wm9vbSk7CiAgICAgICAgY29udHJvbGxlclBsb3QudGFyZ2V0LmJpbmQoJ2pxcGxvdFJlc2V0Wm9vbScsIHBsb3RSZXNldCk7CgogICAgICAgIGZ1bmN0aW9uIHBsb3Rab29tKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBwbG90LCBjdXJzb3IpIHsKICAgICAgICAgICAgdGMuZG9ab29tKGdyaWRwb3MsIGRhdGFwb3MsIHRhcmdldFBsb3QsIGN1cnNvcik7CiAgICAgICAgfSAKCiAgICAgICAgZnVuY3Rpb24gcGxvdFJlc2V0KGV2LCBwbG90LCBjdXJzb3IpIHsKICAgICAgICAgICAgdGFyZ2V0UGxvdC5yZXNldFpvb20oKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5DdXJzb3IucHJvdG90eXBlLnJlc2V0Wm9vbSA9IGZ1bmN0aW9uKHBsb3QsIGN1cnNvcikgewogICAgICAgIHZhciBheGVzID0gcGxvdC5heGVzOwogICAgICAgIHZhciBjYXggPSBjdXJzb3IuX3pvb20uYXhlczsKICAgICAgICBpZiAoIXBsb3QucGx1Z2lucy5jdXJzb3Iuem9vbVByb3h5ICYmIGN1cnNvci5fem9vbS5pc1pvb21lZCkgewogICAgICAgICAgICBmb3IgKHZhciBheCBpbiBheGVzKSB7CiAgICAgICAgICAgICAgICAvLyBheGVzW2F4XS5fdGlja3MgPSBbXTsKICAgICAgICAgICAgICAgIC8vIGF4ZXNbYXhdLm1pbiA9IGNheFtheF0ubWluOwogICAgICAgICAgICAgICAgLy8gYXhlc1theF0ubWF4ID0gY2F4W2F4XS5tYXg7CiAgICAgICAgICAgICAgICAvLyBheGVzW2F4XS5udW1iZXJUaWNrcyA9IGNheFtheF0ubnVtYmVyVGlja3M7IAogICAgICAgICAgICAgICAgLy8gYXhlc1theF0udGlja0ludGVydmFsID0gY2F4W2F4XS50aWNrSW50ZXJ2YWw7CiAgICAgICAgICAgICAgICAvLyAvLyBmb3IgZGF0ZSBheGVzCiAgICAgICAgICAgICAgICAvLyBheGVzW2F4XS5kYVRpY2tJbnRlcnZhbCA9IGNheFtheF0uZGFUaWNrSW50ZXJ2YWw7CiAgICAgICAgICAgICAgICBheGVzW2F4XS5yZXNldCgpOwogICAgICAgICAgICAgICAgYXhlc1theF0uX3RpY2tzID0gW107CiAgICAgICAgICAgICAgICAvLyBmYWtlIG91dCB0aWNrIGNyZWF0aW9uIGFsZ29yaXRobSB0byBtYWtlIHN1cmUgb3JpZ2luYWwgYXV0bwogICAgICAgICAgICAgICAgLy8gY29tcHV0ZWQgZm9ybWF0IHN0cmluZyBpcyB1c2VkIGlmIF9vdmVycmlkZUZvcm1hdFN0cmluZyBpcyB0cnVlCiAgICAgICAgICAgICAgICBheGVzW2F4XS5fYXV0b0Zvcm1hdFN0cmluZyA9IGNheFtheF0udGlja0Zvcm1hdFN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgICAgICBwbG90LnJlZHJhdygpOwogICAgICAgICAgICBjdXJzb3IuX3pvb20uaXNab29tZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHZhciBjdHggPSBjdXJzb3Iuem9vbUNhbnZhcy5fY3R4OwogICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsMCxjdHguY2FudmFzLndpZHRoLCBjdHguY2FudmFzLmhlaWdodCk7CiAgICAgICAgICAgIGN0eCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoJ2pxcGxvdFJlc2V0Wm9vbScsIFtwbG90LCBjdXJzb3JdKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkN1cnNvci5yZXNldFpvb20gPSBmdW5jdGlvbihwbG90KSB7CiAgICAgICAgcGxvdC5yZXNldFpvb20oKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkN1cnNvci5wcm90b3R5cGUuZG9ab29tID0gZnVuY3Rpb24gKGdyaWRwb3MsIGRhdGFwb3MsIHBsb3QsIGN1cnNvcikgewogICAgICAgIHZhciBjID0gY3Vyc29yOwogICAgICAgIHZhciBheGVzID0gcGxvdC5heGVzOwogICAgICAgIHZhciB6YXhlcyA9IGMuX3pvb20uYXhlczsKICAgICAgICB2YXIgc3RhcnQgPSB6YXhlcy5zdGFydDsKICAgICAgICB2YXIgZW5kID0gemF4ZXMuZW5kOwogICAgICAgIHZhciBtaW4sIG1heCwgZHAsIHNwYW4sCiAgICAgICAgICAgIG5ld21pbiwgbmV3bWF4LCBjdXJheCwgX251bWJlclRpY2tzLCByZXQ7CiAgICAgICAgdmFyIGN0eCA9IHBsb3QucGx1Z2lucy5jdXJzb3Iuem9vbUNhbnZhcy5fY3R4OwogICAgICAgIC8vIGRvbid0IHpvb20gaWYgem9vbSBhcmVhIGlzIHRvbyBzbWFsbCAoaW4gcGl4ZWxzKQogICAgICAgIGlmICgoYy5jb25zdHJhaW5ab29tVG8gPT0gJ25vbmUnICYmIE1hdGguYWJzKGdyaWRwb3MueCAtIGMuX3pvb20uc3RhcnRbMF0pID4gNiAmJiBNYXRoLmFicyhncmlkcG9zLnkgLSBjLl96b29tLnN0YXJ0WzFdKSA+IDYpIHx8IChjLmNvbnN0cmFpblpvb21UbyA9PSAneCcgJiYgTWF0aC5hYnMoZ3JpZHBvcy54IC0gYy5fem9vbS5zdGFydFswXSkgPiA2KSB8fCAgKGMuY29uc3RyYWluWm9vbVRvID09ICd5JyAmJiBNYXRoLmFicyhncmlkcG9zLnkgLSBjLl96b29tLnN0YXJ0WzFdKSA+IDYpKSB7CiAgICAgICAgICAgIGlmICghcGxvdC5wbHVnaW5zLmN1cnNvci56b29tUHJveHkpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGF4IGluIGRhdGFwb3MpIHsKICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgYXhlcyB0byByZXZlcnQgYmFjay4KICAgICAgICAgICAgICAgICAgICBpZiAoYy5fem9vbS5heGVzW2F4XSA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYy5fem9vbS5heGVzW2F4XSA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICBjLl96b29tLmF4ZXNbYXhdLm51bWJlclRpY2tzID0gYXhlc1theF0ubnVtYmVyVGlja3M7CiAgICAgICAgICAgICAgICAgICAgICAgIGMuX3pvb20uYXhlc1theF0udGlja0ludGVydmFsID0gYXhlc1theF0udGlja0ludGVydmFsOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZGF0ZSBheGVzLi4uCiAgICAgICAgICAgICAgICAgICAgICAgIGMuX3pvb20uYXhlc1theF0uZGFUaWNrSW50ZXJ2YWwgPSBheGVzW2F4XS5kYVRpY2tJbnRlcnZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgYy5fem9vbS5heGVzW2F4XS5taW4gPSBheGVzW2F4XS5taW47CiAgICAgICAgICAgICAgICAgICAgICAgIGMuX3pvb20uYXhlc1theF0ubWF4ID0gYXhlc1theF0ubWF4OwogICAgICAgICAgICAgICAgICAgICAgICBjLl96b29tLmF4ZXNbYXhdLnRpY2tGb3JtYXRTdHJpbmcgPSAoYXhlc1theF0udGlja09wdGlvbnMgIT0gbnVsbCkgPyBheGVzW2F4XS50aWNrT3B0aW9ucy5mb3JtYXRTdHJpbmcgOiAgJyc7CiAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgaWYgKChjLmNvbnN0cmFpblpvb21UbyA9PSAnbm9uZScpIHx8IChjLmNvbnN0cmFpblpvb21UbyA9PSAneCcgJiYgYXguY2hhckF0KDApID09ICd4JykgfHwgKGMuY29uc3RyYWluWm9vbVRvID09ICd5JyAmJiBheC5jaGFyQXQoMCkgPT0gJ3knKSkgeyAgIAogICAgICAgICAgICAgICAgICAgICAgICBkcCA9IGRhdGFwb3NbYXhdOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHAgIT0gbnVsbCkgeyAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHAgPiBzdGFydFtheF0pIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bWluID0gc3RhcnRbYXhdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld21heCA9IGRwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbiA9IHN0YXJ0W2F4XSAtIGRwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld21pbiA9IGRwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld21heCA9IHN0YXJ0W2F4XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJheCA9IGF4ZXNbYXhdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9udW1iZXJUaWNrcyA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgYWxpZ25pbmcgdGhpcyBheGlzLCB1c2UgbnVtYmVyIG9mIHRpY2tzIGZyb20gcHJldmlvdXMgYXhpcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIEkgbmVlZCB0byByZXNldCBzb21laG93IGlmIGFsaWduVGlja3MgaXMgY2hhbmdlZCBhbmQgdGhlbiBncmFwaCBpcyByZXBsb3R0ZWQ/PwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmF4LmFsaWduVGlja3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyYXgubmFtZSA9PT0gJ3gyYXhpcycgJiYgcGxvdC5heGVzLnhheGlzLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX251bWJlclRpY2tzID0gcGxvdC5heGVzLnhheGlzLm51bWJlclRpY2tzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJheC5uYW1lLmNoYXJBdCgwKSA9PT0gJ3knICYmIGN1cmF4Lm5hbWUgIT09ICd5YXhpcycgJiYgY3VyYXgubmFtZSAhPT0gJ3lNaWRBeGlzJyAmJiBwbG90LmF4ZXMueWF4aXMuc2hvdykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbnVtYmVyVGlja3MgPSBwbG90LmF4ZXMueWF4aXMubnVtYmVyVGlja3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb29zZVpvb20gJiYgKGF4ZXNbYXhdLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09PSAkLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIgfHwgYXhlc1theF0ucmVuZGVyZXIuY29uc3RydWN0b3IgPT09ICQuanFwbG90LkxvZ0F4aXNSZW5kZXJlciApKSB7IC8vfSB8fCBheGVzW2F4XS5yZW5kZXJlci5jb25zdHJ1Y3RvciA9PT0gJC5qcXBsb3QuRGF0ZUF4aXNSZW5kZXJlcikpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gJC5qcXBsb3QuTGluZWFyVGlja0dlbmVyYXRvcihuZXdtaW4sIG5ld21heCwgY3VyYXguX3NjYWxlZmFjdCwgX251bWJlclRpY2tzKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbmV3IG1pbmltdW0gaXMgbGVzcyB0aGFuICJ0cnVlIiBtaW5pbXVtIG9mIGF4aXMgZGlzcGxheSwgYWRqdXN0IGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF4ZXNbYXhdLnRpY2tJbnNldCAmJiByZXRbMF0gPCBheGVzW2F4XS5taW4gKyBheGVzW2F4XS50aWNrSW5zZXQgKiBheGVzW2F4XS50aWNrSW50ZXJ2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0WzBdICs9IHJldFs0XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0WzJdIC09IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBuZXcgbWF4aW11bSBpcyBncmVhdGVyIHRoYW4gInRydWUiIG1heCBvZiBheGlzIGRpc3BsYXksIGFkanVzdCBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChheGVzW2F4XS50aWNrSW5zZXQgJiYgcmV0WzFdID4gYXhlc1theF0ubWF4IC0gYXhlc1theF0udGlja0luc2V0ICogYXhlc1theF0udGlja0ludGVydmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFsxXSAtPSByZXRbNF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFsyXSAtPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGxvZyBheGVzLCBkb24ndCBmYWxsIGJlbG93IGN1cnJlbnQgbWluaW11bSwgdGhpcyB3aWxsIGxvb2sgYmFkIGFuZCBjYW4ndCBoYXZlIDAgaW4gcmFuZ2UgYW55d2F5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChheGVzW2F4XS5yZW5kZXJlci5jb25zdHJ1Y3RvciA9PT0gJC5qcXBsb3QuTG9nQXhpc1JlbmRlcmVyICYmIHJldFswXSA8IGF4ZXNbYXhdLm1pbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgYSB0aWNrIGFuZCBzaGlmdCBtaW4gdXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0WzBdICs9IHJldFs0XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0WzJdIC09IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGVzW2F4XS5taW4gPSByZXRbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhlc1theF0ubWF4ID0gcmV0WzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4ZXNbYXhdLl9hdXRvRm9ybWF0U3RyaW5nID0gcmV0WzNdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4ZXNbYXhdLm51bWJlclRpY2tzID0gcmV0WzJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4ZXNbYXhdLnRpY2tJbnRlcnZhbCA9IHJldFs0XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZGF0ZSBheGVzLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhlc1theF0uZGFUaWNrSW50ZXJ2YWwgPSBbcmV0WzRdLzEwMDAsICdzZWNvbmRzJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGVzW2F4XS5taW4gPSBuZXdtaW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhlc1theF0ubWF4ID0gbmV3bWF4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4ZXNbYXhdLnRpY2tJbnRlcnZhbCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhlc1theF0ubnVtYmVyVGlja3MgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBkYXRlIGF4ZXMuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGVzW2F4XS5kYVRpY2tJbnRlcnZhbCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhlc1theF0uX3RpY2tzID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBpZiAoKGMuY29uc3RyYWluWm9vbVRvID09ICd4JyAmJiBheC5jaGFyQXQoMCkgPT0gJ3knICYmIGMuYXV0b3NjYWxlQ29uc3RyYWludCkgfHwgKGMuY29uc3RyYWluWm9vbVRvID09ICd5JyAmJiBheC5jaGFyQXQoMCkgPT0gJ3gnICYmIGMuYXV0b3NjYWxlQ29uc3RyYWludCkpIHsKICAgICAgICAgICAgICAgICAgICAvLyAgICAgZHAgPSBkYXRhcG9zW2F4XTsKICAgICAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGRwICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGF4ZXNbYXhdLm1heCA9PSBudWxsOwogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgYXhlc1theF0ubWluID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAvLyAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwwLGN0eC5jYW52YXMud2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTsKICAgICAgICAgICAgICAgIHBsb3QucmVkcmF3KCk7CiAgICAgICAgICAgICAgICBjLl96b29tLmlzWm9vbWVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGN0eCA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcignanFwbG90Wm9vbScsIFtncmlkcG9zLCBkYXRhcG9zLCBwbG90LCBjdXJzb3JdKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5wcmVJbml0SG9va3MucHVzaCgkLmpxcGxvdC5DdXJzb3IuaW5pdCk7CiAgICAkLmpxcGxvdC5wb3N0RHJhd0hvb2tzLnB1c2goJC5qcXBsb3QuQ3Vyc29yLnBvc3REcmF3KTsKICAgIAogICAgZnVuY3Rpb24gdXBkYXRlVG9vbHRpcChncmlkcG9zLCBkYXRhcG9zLCBwbG90KSB7CiAgICAgICAgdmFyIGMgPSBwbG90LnBsdWdpbnMuY3Vyc29yOwogICAgICAgIHZhciBzID0gJyc7CiAgICAgICAgdmFyIGFkZGJyID0gZmFsc2U7CiAgICAgICAgaWYgKGMuc2hvd1Rvb2x0aXBHcmlkUG9zaXRpb24pIHsKICAgICAgICAgICAgcyA9IGdyaWRwb3MueCsnLCAnK2dyaWRwb3MueTsKICAgICAgICAgICAgYWRkYnIgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoYy5zaG93VG9vbHRpcFVuaXRQb3NpdGlvbikgewogICAgICAgICAgICB2YXIgZzsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGMudG9vbHRpcEF4aXNHcm91cHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGcgPSBjLnRvb2x0aXBBeGlzR3JvdXBzW2ldOwogICAgICAgICAgICAgICAgaWYgKGFkZGJyKSB7CiAgICAgICAgICAgICAgICAgICAgcyArPSAnPGJyIC8+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChjLnVzZUF4ZXNGb3JtYXR0ZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPGcubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGopIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgKz0gJywgJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWYgPSBwbG90LmF4ZXNbZ1tqXV0uX3RpY2tzWzBdLmZvcm1hdHRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFmc3RyID0gcGxvdC5heGVzW2dbal1dLl90aWNrc1swXS5mb3JtYXRTdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgICAgIHMgKz0gYWYoYWZzdHIsIGRhdGFwb3NbZ1tqXV0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHMgKz0gJC5qcXBsb3Quc3ByaW50ZihjLnRvb2x0aXBGb3JtYXRTdHJpbmcsIGRhdGFwb3NbZ1swXV0sIGRhdGFwb3NbZ1sxXV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYWRkYnIgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChjLnNob3dUb29sdGlwRGF0YVBvc2l0aW9uKSB7CiAgICAgICAgICAgIHZhciBzZXJpZXMgPSBwbG90LnNlcmllczsgCiAgICAgICAgICAgIHZhciByZXQgPSBnZXRJbnRlcnNlY3RpbmdQb2ludHMocGxvdCwgZ3JpZHBvcy54LCBncmlkcG9zLnkpOwogICAgICAgICAgICB2YXIgYWRkYnIgPSBmYWxzZTsKICAgICAgICAKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGk8IHNlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKHNlcmllc1tpXS5zaG93KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IHNlcmllc1tpXS5pbmRleDsKICAgICAgICAgICAgICAgICAgICB2YXIgbGFiZWwgPSBzZXJpZXNbaV0ubGFiZWwudG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbGlkID0gJC5pbkFycmF5KGlkeCwgcmV0LmluZGljZXMpOwogICAgICAgICAgICAgICAgICAgIHZhciBzeCA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgICB2YXIgc3kgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxpZCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHJldC5kYXRhW2NlbGxpZF0uZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMudXNlQXhlc0Zvcm1hdHRlcnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ZiA9IHNlcmllc1tpXS5feGF4aXMuX3RpY2tzWzBdLmZvcm1hdHRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5ZiA9IHNlcmllc1tpXS5feWF4aXMuX3RpY2tzWzBdLmZvcm1hdHRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ZnN0ciA9IHNlcmllc1tpXS5feGF4aXMuX3RpY2tzWzBdLmZvcm1hdFN0cmluZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5ZnN0ciA9IHNlcmllc1tpXS5feWF4aXMuX3RpY2tzWzBdLmZvcm1hdFN0cmluZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4ID0geGYoeGZzdHIsIGRhdGFbMF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSB5Zih5ZnN0ciwgZGF0YVsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeCA9IGRhdGFbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeSA9IGRhdGFbMV07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZGJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICs9ICc8YnIgLz4nOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHMgKz0gJC5qcXBsb3Quc3ByaW50ZihjLnRvb2x0aXBGb3JtYXRTdHJpbmcsIGxhYmVsLCBzeCwgc3kpOwogICAgICAgICAgICAgICAgICAgICAgICBhZGRiciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgICBjLl90b29sdGlwRWxlbS5odG1sKHMpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBtb3ZlTGluZShncmlkcG9zLCBwbG90KSB7CiAgICAgICAgdmFyIGMgPSBwbG90LnBsdWdpbnMuY3Vyc29yOwogICAgICAgIHZhciBjdHggPSBjLmN1cnNvckNhbnZhcy5fY3R4OwogICAgICAgIGN0eC5jbGVhclJlY3QoMCwwLGN0eC5jYW52YXMud2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTsKICAgICAgICBpZiAoYy5zaG93VmVydGljYWxMaW5lKSB7CiAgICAgICAgICAgIGMuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgW1tncmlkcG9zLngsIDBdLCBbZ3JpZHBvcy54LCBjdHguY2FudmFzLmhlaWdodF1dKTsKICAgICAgICB9CiAgICAgICAgaWYgKGMuc2hvd0hvcml6b250YWxMaW5lKSB7CiAgICAgICAgICAgIGMuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgW1swLCBncmlkcG9zLnldLCBbY3R4LmNhbnZhcy53aWR0aCwgZ3JpZHBvcy55XV0pOwogICAgICAgIH0KICAgICAgICB2YXIgcmV0ID0gZ2V0SW50ZXJzZWN0aW5nUG9pbnRzKHBsb3QsIGdyaWRwb3MueCwgZ3JpZHBvcy55KTsKICAgICAgICBpZiAoYy5zaG93Q3Vyc29yTGVnZW5kKSB7CiAgICAgICAgICAgIHZhciBjZWxscyA9ICQocGxvdC50YXJnZXRJZCArICcgdGQuanFwbG90LWN1cnNvci1sZWdlbmQtbGFiZWwnKTsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNlbGxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gJChjZWxsc1tpXSkuZGF0YSgnc2VyaWVzSW5kZXgnKTsKICAgICAgICAgICAgICAgIHZhciBzZXJpZXMgPSBwbG90LnNlcmllc1tpZHhdOwogICAgICAgICAgICAgICAgdmFyIGxhYmVsID0gc2VyaWVzLmxhYmVsLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB2YXIgY2VsbGlkID0gJC5pbkFycmF5KGlkeCwgcmV0LmluZGljZXMpOwogICAgICAgICAgICAgICAgdmFyIHN4ID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgdmFyIHN5ID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgaWYgKGNlbGxpZCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcmV0LmRhdGFbY2VsbGlkXS5kYXRhOwogICAgICAgICAgICAgICAgICAgIGlmIChjLnVzZUF4ZXNGb3JtYXR0ZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ZiA9IHNlcmllcy5feGF4aXMuX3RpY2tzWzBdLmZvcm1hdHRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHlmID0gc2VyaWVzLl95YXhpcy5fdGlja3NbMF0uZm9ybWF0dGVyOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGZzdHIgPSBzZXJpZXMuX3hheGlzLl90aWNrc1swXS5mb3JtYXRTdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5ZnN0ciA9IHNlcmllcy5feWF4aXMuX3RpY2tzWzBdLmZvcm1hdFN0cmluZzsKICAgICAgICAgICAgICAgICAgICAgICAgc3ggPSB4Zih4ZnN0ciwgZGF0YVswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0geWYoeWZzdHIsIGRhdGFbMV0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3ggPSBkYXRhWzBdOwogICAgICAgICAgICAgICAgICAgICAgICBzeSA9IGRhdGFbMV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHBsb3QubGVnZW5kLmVzY2FwZUh0bWwpIHsKICAgICAgICAgICAgICAgICAgICAkKGNlbGxzW2ldKS50ZXh0KCQuanFwbG90LnNwcmludGYoYy5jdXJzb3JMZWdlbmRGb3JtYXRTdHJpbmcsIGxhYmVsLCBzeCwgc3kpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICQoY2VsbHNbaV0pLmh0bWwoJC5qcXBsb3Quc3ByaW50ZihjLmN1cnNvckxlZ2VuZEZvcm1hdFN0cmluZywgbGFiZWwsIHN4LCBzeSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9ICAgICAgICAKICAgICAgICB9CiAgICAgICAgY3R4ID0gbnVsbDsKICAgIH0KICAgICAgICAKICAgIGZ1bmN0aW9uIGdldEludGVyc2VjdGluZ1BvaW50cyhwbG90LCB4LCB5KSB7CiAgICAgICAgdmFyIHJldCA9IHtpbmRpY2VzOltdLCBkYXRhOltdfTsKICAgICAgICB2YXIgcywgaSwgZDAsIGQsIGosIHIsIHA7CiAgICAgICAgdmFyIHRocmVzaG9sZDsKICAgICAgICB2YXIgYyA9IHBsb3QucGx1Z2lucy5jdXJzb3I7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHBsb3Quc2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHMgPSBwbG90LnNlcmllc1tpXTsKICAgICAgICAgICAgciA9IHMucmVuZGVyZXI7CiAgICAgICAgICAgIGlmIChzLnNob3cpIHsKICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IGMuaW50ZXJzZWN0aW9uVGhyZXNob2xkOwogICAgICAgICAgICAgICAgaWYgKHMuc2hvd01hcmtlcikgewogICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCArPSBzLm1hcmtlclJlbmRlcmVyLnNpemUvMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajxzLmdyaWREYXRhLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgcCA9IHMuZ3JpZERhdGFbal07CiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgdmVydGljYWwgbGluZQogICAgICAgICAgICAgICAgICAgIGlmIChjLnNob3dWZXJ0aWNhbExpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHgtcFswXSkgPD0gdGhyZXNob2xkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuaW5kaWNlcy5wdXNoKGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LmRhdGEucHVzaCh7c2VyaWVzSW5kZXg6IGksIHBvaW50SW5kZXg6aiwgZ3JpZERhdGE6cCwgZGF0YTpzLmRhdGFbal19KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gbW92ZVRvb2x0aXAoZ3JpZHBvcywgcGxvdCkgewogICAgICAgIHZhciBjID0gcGxvdC5wbHVnaW5zLmN1cnNvcjsgIAogICAgICAgIHZhciBlbGVtID0gYy5fdG9vbHRpcEVsZW07CiAgICAgICAgc3dpdGNoIChjLnRvb2x0aXBMb2NhdGlvbikgewogICAgICAgICAgICBjYXNlICdudyc6CiAgICAgICAgICAgICAgICB2YXIgeCA9IGdyaWRwb3MueCArIHBsb3QuX2dyaWRQYWRkaW5nLmxlZnQgLSBlbGVtLm91dGVyV2lkdGgodHJ1ZSkgLSBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICB2YXIgeSA9IGdyaWRwb3MueSArIHBsb3QuX2dyaWRQYWRkaW5nLnRvcCAtIGMudG9vbHRpcE9mZnNldCAtIGVsZW0ub3V0ZXJIZWlnaHQodHJ1ZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnbic6CiAgICAgICAgICAgICAgICB2YXIgeCA9IGdyaWRwb3MueCArIHBsb3QuX2dyaWRQYWRkaW5nLmxlZnQgLSBlbGVtLm91dGVyV2lkdGgodHJ1ZSkvMjsKICAgICAgICAgICAgICAgIHZhciB5ID0gZ3JpZHBvcy55ICsgcGxvdC5fZ3JpZFBhZGRpbmcudG9wIC0gYy50b29sdGlwT2Zmc2V0IC0gZWxlbS5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICduZSc6CiAgICAgICAgICAgICAgICB2YXIgeCA9IGdyaWRwb3MueCArIHBsb3QuX2dyaWRQYWRkaW5nLmxlZnQgKyBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICB2YXIgeSA9IGdyaWRwb3MueSArIHBsb3QuX2dyaWRQYWRkaW5nLnRvcCAtIGMudG9vbHRpcE9mZnNldCAtIGVsZW0ub3V0ZXJIZWlnaHQodHJ1ZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZSc6CiAgICAgICAgICAgICAgICB2YXIgeCA9IGdyaWRwb3MueCArIHBsb3QuX2dyaWRQYWRkaW5nLmxlZnQgKyBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICB2YXIgeSA9IGdyaWRwb3MueSArIHBsb3QuX2dyaWRQYWRkaW5nLnRvcCAtIGVsZW0ub3V0ZXJIZWlnaHQodHJ1ZSkvMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdzZSc6CiAgICAgICAgICAgICAgICB2YXIgeCA9IGdyaWRwb3MueCArIHBsb3QuX2dyaWRQYWRkaW5nLmxlZnQgKyBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICB2YXIgeSA9IGdyaWRwb3MueSArIHBsb3QuX2dyaWRQYWRkaW5nLnRvcCArIGMudG9vbHRpcE9mZnNldDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgIHZhciB4ID0gZ3JpZHBvcy54ICsgcGxvdC5fZ3JpZFBhZGRpbmcubGVmdCAtIGVsZW0ub3V0ZXJXaWR0aCh0cnVlKS8yOwogICAgICAgICAgICAgICAgdmFyIHkgPSBncmlkcG9zLnkgKyBwbG90Ll9ncmlkUGFkZGluZy50b3AgKyBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnc3cnOgogICAgICAgICAgICAgICAgdmFyIHggPSBncmlkcG9zLnggKyBwbG90Ll9ncmlkUGFkZGluZy5sZWZ0IC0gZWxlbS5vdXRlcldpZHRoKHRydWUpIC0gYy50b29sdGlwT2Zmc2V0OwogICAgICAgICAgICAgICAgdmFyIHkgPSBncmlkcG9zLnkgKyBwbG90Ll9ncmlkUGFkZGluZy50b3AgKyBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndyc6CiAgICAgICAgICAgICAgICB2YXIgeCA9IGdyaWRwb3MueCArIHBsb3QuX2dyaWRQYWRkaW5nLmxlZnQgLSBlbGVtLm91dGVyV2lkdGgodHJ1ZSkgLSBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICB2YXIgeSA9IGdyaWRwb3MueSArIHBsb3QuX2dyaWRQYWRkaW5nLnRvcCAtIGVsZW0ub3V0ZXJIZWlnaHQodHJ1ZSkvMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdmFyIHggPSBncmlkcG9zLnggKyBwbG90Ll9ncmlkUGFkZGluZy5sZWZ0ICsgYy50b29sdGlwT2Zmc2V0OwogICAgICAgICAgICAgICAgdmFyIHkgPSBncmlkcG9zLnkgKyBwbG90Ll9ncmlkUGFkZGluZy50b3AgKyBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIGVsZW0uY3NzKCdsZWZ0JywgeCk7CiAgICAgICAgZWxlbS5jc3MoJ3RvcCcsIHkpOwogICAgICAgIGVsZW0gPSBudWxsOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBwb3NpdGlvblRvb2x0aXAocGxvdCkgeyAKICAgICAgICAvLyBmYWtlIGEgZ3JpZCBmb3IgcG9zaXRpb25pbmcKICAgICAgICB2YXIgZ3JpZCA9IHBsb3QuX2dyaWRQYWRkaW5nOyAKICAgICAgICB2YXIgYyA9IHBsb3QucGx1Z2lucy5jdXJzb3I7CiAgICAgICAgdmFyIGVsZW0gPSBjLl90b29sdGlwRWxlbTsgIAogICAgICAgIHN3aXRjaCAoYy50b29sdGlwTG9jYXRpb24pIHsKICAgICAgICAgICAgY2FzZSAnbncnOgogICAgICAgICAgICAgICAgdmFyIGEgPSBncmlkLmxlZnQgKyBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICB2YXIgYiA9IGdyaWQudG9wICsgYy50b29sdGlwT2Zmc2V0OwogICAgICAgICAgICAgICAgZWxlbS5jc3MoJ2xlZnQnLCBhKTsKICAgICAgICAgICAgICAgIGVsZW0uY3NzKCd0b3AnLCBiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgIHZhciBhID0gKGdyaWQubGVmdCArIChwbG90Ll9wbG90RGltZW5zaW9ucy53aWR0aCAtIGdyaWQucmlnaHQpKS8yIC0gZWxlbS5vdXRlcldpZHRoKHRydWUpLzI7CiAgICAgICAgICAgICAgICB2YXIgYiA9IGdyaWQudG9wICsgYy50b29sdGlwT2Zmc2V0OwogICAgICAgICAgICAgICAgZWxlbS5jc3MoJ2xlZnQnLCBhKTsKICAgICAgICAgICAgICAgIGVsZW0uY3NzKCd0b3AnLCBiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICduZSc6CiAgICAgICAgICAgICAgICB2YXIgYSA9IGdyaWQucmlnaHQgKyBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICB2YXIgYiA9IGdyaWQudG9wICsgYy50b29sdGlwT2Zmc2V0OwogICAgICAgICAgICAgICAgZWxlbS5jc3Moe3JpZ2h0OmEsIHRvcDpifSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZSc6CiAgICAgICAgICAgICAgICB2YXIgYSA9IGdyaWQucmlnaHQgKyBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICB2YXIgYiA9IChncmlkLnRvcCArIChwbG90Ll9wbG90RGltZW5zaW9ucy5oZWlnaHQgLSBncmlkLmJvdHRvbSkpLzIgLSBlbGVtLm91dGVySGVpZ2h0KHRydWUpLzI7CiAgICAgICAgICAgICAgICBlbGVtLmNzcyh7cmlnaHQ6YSwgdG9wOmJ9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdzZSc6CiAgICAgICAgICAgICAgICB2YXIgYSA9IGdyaWQucmlnaHQgKyBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICB2YXIgYiA9IGdyaWQuYm90dG9tICsgYy50b29sdGlwT2Zmc2V0OwogICAgICAgICAgICAgICAgZWxlbS5jc3Moe3JpZ2h0OmEsIGJvdHRvbTpifSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICAgICB2YXIgYSA9IChncmlkLmxlZnQgKyAocGxvdC5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBncmlkLnJpZ2h0KSkvMiAtIGVsZW0ub3V0ZXJXaWR0aCh0cnVlKS8yOwogICAgICAgICAgICAgICAgdmFyIGIgPSBncmlkLmJvdHRvbSArIGMudG9vbHRpcE9mZnNldDsKICAgICAgICAgICAgICAgIGVsZW0uY3NzKHtsZWZ0OmEsIGJvdHRvbTpifSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnc3cnOgogICAgICAgICAgICAgICAgdmFyIGEgPSBncmlkLmxlZnQgKyBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICB2YXIgYiA9IGdyaWQuYm90dG9tICsgYy50b29sdGlwT2Zmc2V0OwogICAgICAgICAgICAgICAgZWxlbS5jc3Moe2xlZnQ6YSwgYm90dG9tOmJ9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd3JzoKICAgICAgICAgICAgICAgIHZhciBhID0gZ3JpZC5sZWZ0ICsgYy50b29sdGlwT2Zmc2V0OwogICAgICAgICAgICAgICAgdmFyIGIgPSAoZ3JpZC50b3AgKyAocGxvdC5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0IC0gZ3JpZC5ib3R0b20pKS8yIC0gZWxlbS5vdXRlckhlaWdodCh0cnVlKS8yOwogICAgICAgICAgICAgICAgZWxlbS5jc3Moe2xlZnQ6YSwgdG9wOmJ9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OiAgLy8gc2FtZSBhcyAnc2UnCiAgICAgICAgICAgICAgICB2YXIgYSA9IGdyaWQucmlnaHQgLSBjLnRvb2x0aXBPZmZzZXQ7CiAgICAgICAgICAgICAgICB2YXIgYiA9IGdyaWQuYm90dG9tICsgYy50b29sdGlwT2Zmc2V0OwogICAgICAgICAgICAgICAgZWxlbS5jc3Moe3JpZ2h0OmEsIGJvdHRvbTpifSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZWxlbSA9IG51bGw7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrIChldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGV2LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwogICAgICAgIHZhciBjID0gcGxvdC5wbHVnaW5zLmN1cnNvcjsKICAgICAgICBpZiAoYy5jbGlja1Jlc2V0KSB7CiAgICAgICAgICAgIGMucmVzZXRab29tKHBsb3QsIGMpOwogICAgICAgIH0KICAgICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbjsKICAgICAgICBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSkKICAgICAgICB7CiAgICAgICAgICAgIGRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChzZWwgJiYgIXNlbCgpLmlzQ29sbGFwc2VkKSB7CiAgICAgICAgICAgIHNlbCgpLmNvbGxhcHNlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gaGFuZGxlRGJsQ2xpY2sgKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZXYuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CiAgICAgICAgdmFyIGMgPSBwbG90LnBsdWdpbnMuY3Vyc29yOwogICAgICAgIGlmIChjLmRibENsaWNrUmVzZXQpIHsKICAgICAgICAgICAgYy5yZXNldFpvb20ocGxvdCwgYyk7CiAgICAgICAgfQogICAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uOwogICAgICAgIGlmIChkb2N1bWVudC5zZWxlY3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KQogICAgICAgIHsKICAgICAgICAgICAgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHNlbCAmJiAhc2VsKCkuaXNDb2xsYXBzZWQpIHsKICAgICAgICAgICAgc2VsKCkuY29sbGFwc2UoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZUxlYXZlKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIHZhciBjID0gcGxvdC5wbHVnaW5zLmN1cnNvcjsKICAgICAgICBjLm9uR3JpZCA9IGZhbHNlOwogICAgICAgIGlmIChjLnNob3cpIHsKICAgICAgICAgICAgJChldi50YXJnZXQpLmNzcygnY3Vyc29yJywgYy5wcmV2aW91c0N1cnNvcik7CiAgICAgICAgICAgIGlmIChjLnNob3dUb29sdGlwICYmICEoYy5fem9vbS56b29taW5nICYmIGMuc2hvd1Rvb2x0aXBPdXRzaWRlWm9vbSAmJiAhYy5jb25zdHJhaW5PdXRzaWRlWm9vbSkpIHsKICAgICAgICAgICAgICAgIGMuX3Rvb2x0aXBFbGVtLmVtcHR5KCk7CiAgICAgICAgICAgICAgICBjLl90b29sdGlwRWxlbS5oaWRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGMuem9vbSkgewogICAgICAgICAgICAgICAgYy5fem9vbS5ncmlkcG9zID0gZ3JpZHBvczsKICAgICAgICAgICAgICAgIGMuX3pvb20uZGF0YXBvcyA9IGRhdGFwb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGMuc2hvd1ZlcnRpY2FsTGluZSB8fCBjLnNob3dIb3Jpem9udGFsTGluZSkgewogICAgICAgICAgICAgICAgdmFyIGN0eCA9IGMuY3Vyc29yQ2FudmFzLl9jdHg7CiAgICAgICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsMCxjdHguY2FudmFzLndpZHRoLCBjdHguY2FudmFzLmhlaWdodCk7CiAgICAgICAgICAgICAgICBjdHggPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjLnNob3dDdXJzb3JMZWdlbmQpIHsKICAgICAgICAgICAgICAgIHZhciBjZWxscyA9ICQocGxvdC50YXJnZXRJZCArICcgdGQuanFwbG90LWN1cnNvci1sZWdlbmQtbGFiZWwnKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxjZWxscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSAkKGNlbGxzW2ldKS5kYXRhKCdzZXJpZXNJbmRleCcpOwogICAgICAgICAgICAgICAgICAgIHZhciBzZXJpZXMgPSBwbG90LnNlcmllc1tpZHhdOwogICAgICAgICAgICAgICAgICAgIHZhciBsYWJlbCA9IHNlcmllcy5sYWJlbC50b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgIGlmIChwbG90LmxlZ2VuZC5lc2NhcGVIdG1sKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoY2VsbHNbaV0pLnRleHQoJC5qcXBsb3Quc3ByaW50ZihjLmN1cnNvckxlZ2VuZEZvcm1hdFN0cmluZywgbGFiZWwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkKGNlbGxzW2ldKS5odG1sKCQuanFwbG90LnNwcmludGYoYy5jdXJzb3JMZWdlbmRGb3JtYXRTdHJpbmcsIGxhYmVsLCB1bmRlZmluZWQsIHVuZGVmaW5lZCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfSAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoZXYsIGdyaWRwb3MsIGRhdGFwb3MsIG5laWdoYm9yLCBwbG90KSB7CiAgICAgICAgdmFyIGMgPSBwbG90LnBsdWdpbnMuY3Vyc29yOwogICAgICAgIGMub25HcmlkID0gdHJ1ZTsKICAgICAgICBpZiAoYy5zaG93KSB7CiAgICAgICAgICAgIGMucHJldmlvdXNDdXJzb3IgPSBldi50YXJnZXQuc3R5bGUuY3Vyc29yOwogICAgICAgICAgICBldi50YXJnZXQuc3R5bGUuY3Vyc29yID0gYy5zdHlsZTsKICAgICAgICAgICAgaWYgKGMuc2hvd1Rvb2x0aXApIHsKICAgICAgICAgICAgICAgIHVwZGF0ZVRvb2x0aXAoZ3JpZHBvcywgZGF0YXBvcywgcGxvdCk7CiAgICAgICAgICAgICAgICBpZiAoYy5mb2xsb3dNb3VzZSkgewogICAgICAgICAgICAgICAgICAgIG1vdmVUb29sdGlwKGdyaWRwb3MsIHBsb3QpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25Ub29sdGlwKHBsb3QpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYy5fdG9vbHRpcEVsZW0uc2hvdygpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjLnNob3dWZXJ0aWNhbExpbmUgfHwgYy5zaG93SG9yaXpvbnRhbExpbmUpIHsKICAgICAgICAgICAgICAgIG1vdmVMaW5lKGdyaWRwb3MsIHBsb3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgIH0gICAgCiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlTW92ZShldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICB2YXIgYyA9IHBsb3QucGx1Z2lucy5jdXJzb3I7CiAgICAgICAgaWYgKGMuc2hvdykgewogICAgICAgICAgICBpZiAoYy5zaG93VG9vbHRpcCkgewogICAgICAgICAgICAgICAgdXBkYXRlVG9vbHRpcChncmlkcG9zLCBkYXRhcG9zLCBwbG90KTsKICAgICAgICAgICAgICAgIGlmIChjLmZvbGxvd01vdXNlKSB7CiAgICAgICAgICAgICAgICAgICAgbW92ZVRvb2x0aXAoZ3JpZHBvcywgcGxvdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGMuc2hvd1ZlcnRpY2FsTGluZSB8fCBjLnNob3dIb3Jpem9udGFsTGluZSkgewogICAgICAgICAgICAgICAgbW92ZUxpbmUoZ3JpZHBvcywgcGxvdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAgICAgICAgIAogICAgZnVuY3Rpb24gZ2V0RXZlbnRQb3NpdGlvbihldikgewogICAgICAgIHZhciBwbG90ID0gZXYuZGF0YS5wbG90OwogICAgICAgIHZhciBnbyA9IHBsb3QuZXZlbnRDYW52YXMuX2VsZW0ub2Zmc2V0KCk7CiAgICAgICAgdmFyIGdyaWRQb3MgPSB7eDpldi5wYWdlWCAtIGdvLmxlZnQsIHk6ZXYucGFnZVkgLSBnby50b3B9OwogICAgICAgIC8vLy8vLwogICAgICAgIC8vIFRPIERPOiBoYW5kbGUgeU1pZEF4aXMKICAgICAgICAvLy8vLy8KICAgICAgICB2YXIgZGF0YVBvcyA9IHt4YXhpczpudWxsLCB5YXhpczpudWxsLCB4MmF4aXM6bnVsbCwgeTJheGlzOm51bGwsIHkzYXhpczpudWxsLCB5NGF4aXM6bnVsbCwgeTVheGlzOm51bGwsIHk2YXhpczpudWxsLCB5N2F4aXM6bnVsbCwgeThheGlzOm51bGwsIHk5YXhpczpudWxsLCB5TWlkQXhpczpudWxsfTsKICAgICAgICB2YXIgYW4gPSBbJ3hheGlzJywgJ3lheGlzJywgJ3gyYXhpcycsICd5MmF4aXMnLCAneTNheGlzJywgJ3k0YXhpcycsICd5NWF4aXMnLCAneTZheGlzJywgJ3k3YXhpcycsICd5OGF4aXMnLCAneTlheGlzJywgJ3lNaWRBeGlzJ107CiAgICAgICAgdmFyIGF4ID0gcGxvdC5heGVzOwogICAgICAgIHZhciBuLCBheGlzOwogICAgICAgIGZvciAobj0xMTsgbj4wOyBuLS0pIHsKICAgICAgICAgICAgYXhpcyA9IGFuW24tMV07CiAgICAgICAgICAgIGlmIChheFtheGlzXS5zaG93KSB7CiAgICAgICAgICAgICAgICBkYXRhUG9zW2F4aXNdID0gYXhbYXhpc10uc2VyaWVzX3AydShncmlkUG9zW2F4aXMuY2hhckF0KDApXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB7b2Zmc2V0czpnbywgZ3JpZFBvczpncmlkUG9zLCBkYXRhUG9zOmRhdGFQb3N9OwogICAgfSAgICAKICAgIAogICAgZnVuY3Rpb24gaGFuZGxlWm9vbU1vdmUoZXYpIHsKICAgICAgICB2YXIgcGxvdCA9IGV2LmRhdGEucGxvdDsKICAgICAgICB2YXIgYyA9IHBsb3QucGx1Z2lucy5jdXJzb3I7CiAgICAgICAgLy8gZG9uJ3QgZG8gYW55dGhpbmcgaWYgbm90IG9uIGdyaWQuCiAgICAgICAgaWYgKGMuc2hvdyAmJiBjLnpvb20gJiYgYy5fem9vbS5zdGFydGVkICYmICFjLnpvb21UYXJnZXQpIHsKICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdmFyIGN0eCA9IGMuem9vbUNhbnZhcy5fY3R4OwogICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gZ2V0RXZlbnRQb3NpdGlvbihldik7CiAgICAgICAgICAgIHZhciBncmlkcG9zID0gcG9zaXRpb25zLmdyaWRQb3M7CiAgICAgICAgICAgIHZhciBkYXRhcG9zID0gcG9zaXRpb25zLmRhdGFQb3M7CiAgICAgICAgICAgIGMuX3pvb20uZ3JpZHBvcyA9IGdyaWRwb3M7CiAgICAgICAgICAgIGMuX3pvb20uZGF0YXBvcyA9IGRhdGFwb3M7CiAgICAgICAgICAgIGMuX3pvb20uem9vbWluZyA9IHRydWU7CiAgICAgICAgICAgIHZhciB4cG9zID0gZ3JpZHBvcy54OwogICAgICAgICAgICB2YXIgeXBvcyA9IGdyaWRwb3MueTsKICAgICAgICAgICAgdmFyIGhlaWdodCA9IGN0eC5jYW52YXMuaGVpZ2h0OwogICAgICAgICAgICB2YXIgd2lkdGggPSBjdHguY2FudmFzLndpZHRoOwogICAgICAgICAgICBpZiAoYy5zaG93VG9vbHRpcCAmJiAhYy5vbkdyaWQgJiYgYy5zaG93VG9vbHRpcE91dHNpZGVab29tKSB7CiAgICAgICAgICAgICAgICB1cGRhdGVUb29sdGlwKGdyaWRwb3MsIGRhdGFwb3MsIHBsb3QpOwogICAgICAgICAgICAgICAgaWYgKGMuZm9sbG93TW91c2UpIHsKICAgICAgICAgICAgICAgICAgICBtb3ZlVG9vbHRpcChncmlkcG9zLCBwbG90KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYy5jb25zdHJhaW5ab29tVG8gPT0gJ3gnKSB7CiAgICAgICAgICAgICAgICBjLl96b29tLmVuZCA9IFt4cG9zLCBoZWlnaHRdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGMuY29uc3RyYWluWm9vbVRvID09ICd5JykgewogICAgICAgICAgICAgICAgYy5fem9vbS5lbmQgPSBbd2lkdGgsIHlwb3NdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgYy5fem9vbS5lbmQgPSBbeHBvcywgeXBvc107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb247CiAgICAgICAgICAgIGlmIChkb2N1bWVudC5zZWxlY3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzZWwgJiYgIXNlbCgpLmlzQ29sbGFwc2VkKSB7CiAgICAgICAgICAgICAgICBzZWwoKS5jb2xsYXBzZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRyYXdab29tQm94LmNhbGwoYyk7CiAgICAgICAgICAgIGN0eCA9IG51bGw7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZURvd24oZXYsIGdyaWRwb3MsIGRhdGFwb3MsIG5laWdoYm9yLCBwbG90KSB7CiAgICAgICAgdmFyIGMgPSBwbG90LnBsdWdpbnMuY3Vyc29yOwogICAgICAgIGlmKHBsb3QucGx1Z2lucy5tb2JpbGUpewogICAgICAgICAgICAkKGRvY3VtZW50KS5vbmUoJ3Ztb3VzZXVwLmpxcGxvdF9jdXJzb3InLCB7cGxvdDpwbG90fSwgaGFuZGxlTW91c2VVcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJChkb2N1bWVudCkub25lKCdtb3VzZXVwLmpxcGxvdF9jdXJzb3InLCB7cGxvdDpwbG90fSwgaGFuZGxlTW91c2VVcCk7CiAgICAgICAgfQogICAgICAgIHZhciBheGVzID0gcGxvdC5heGVzOwogICAgICAgIGlmIChkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICBjLl9vbGRIYW5kbGVycy5vbnNlbGVjdHN0YXJ0ID0gZG9jdW1lbnQub25zZWxlY3RzdGFydDsKICAgICAgICAgICAgZG9jdW1lbnQub25zZWxlY3RzdGFydCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9OwogICAgICAgIH0KICAgICAgICBpZiAoZG9jdW1lbnQub25kcmFnICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICBjLl9vbGRIYW5kbGVycy5vbmRyYWcgPSBkb2N1bWVudC5vbmRyYWc7CiAgICAgICAgICAgIGRvY3VtZW50Lm9uZHJhZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9OwogICAgICAgIH0KICAgICAgICBpZiAoZG9jdW1lbnQub25tb3VzZWRvd24gIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGMuX29sZEhhbmRsZXJzLm9ubW91c2Vkb3duID0gZG9jdW1lbnQub25tb3VzZWRvd247CiAgICAgICAgICAgIGRvY3VtZW50Lm9ubW91c2Vkb3duID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH07CiAgICAgICAgfQogICAgICAgIGlmIChjLnpvb20pIHsKICAgICAgICAgICAgaWYgKCFjLnpvb21Qcm94eSkgewogICAgICAgICAgICAgICAgdmFyIGN0eCA9IGMuem9vbUNhbnZhcy5fY3R4OwogICAgICAgICAgICAgICAgY3R4LmNsZWFyUmVjdCgwLDAsY3R4LmNhbnZhcy53aWR0aCwgY3R4LmNhbnZhcy5oZWlnaHQpOwogICAgICAgICAgICAgICAgY3R4ID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYy5jb25zdHJhaW5ab29tVG8gPT0gJ3gnKSB7CiAgICAgICAgICAgICAgICBjLl96b29tLnN0YXJ0ID0gW2dyaWRwb3MueCwgMF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoYy5jb25zdHJhaW5ab29tVG8gPT0gJ3knKSB7CiAgICAgICAgICAgICAgICBjLl96b29tLnN0YXJ0ID0gWzAsIGdyaWRwb3MueV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjLl96b29tLnN0YXJ0ID0gW2dyaWRwb3MueCwgZ3JpZHBvcy55XTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjLl96b29tLnN0YXJ0ZWQgPSB0cnVlOwogICAgICAgICAgICBmb3IgKHZhciBheCBpbiBkYXRhcG9zKSB7CiAgICAgICAgICAgICAgICAvLyBnZXQgem9vbSBzdGFydGluZyBwb3NpdGlvbi4KICAgICAgICAgICAgICAgIGMuX3pvb20uYXhlcy5zdGFydFtheF0gPSBkYXRhcG9zW2F4XTsKICAgICAgICAgICAgfSAgCiAgICAgICAgICAgaWYocGxvdC5wbHVnaW5zLm1vYmlsZSl7CiAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5iaW5kKCd2bW91c2Vtb3ZlLmpxcGxvdEN1cnNvcicsIHtwbG90OnBsb3R9LCBoYW5kbGVab29tTW92ZSk7ICAgICAgICAgICAgICAKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmJpbmQoJ21vdXNlbW92ZS5qcXBsb3RDdXJzb3InLCB7cGxvdDpwbG90fSwgaGFuZGxlWm9vbU1vdmUpOyAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZVVwKGV2KSB7CiAgICAgICAgdmFyIHBsb3QgPSBldi5kYXRhLnBsb3Q7CiAgICAgICAgdmFyIGMgPSBwbG90LnBsdWdpbnMuY3Vyc29yOwogICAgICAgIGlmIChjLnpvb20gJiYgYy5fem9vbS56b29taW5nICYmICFjLnpvb21UYXJnZXQpIHsKICAgICAgICAgICAgdmFyIHhwb3MgPSBjLl96b29tLmdyaWRwb3MueDsKICAgICAgICAgICAgdmFyIHlwb3MgPSBjLl96b29tLmdyaWRwb3MueTsKICAgICAgICAgICAgdmFyIGRhdGFwb3MgPSBjLl96b29tLmRhdGFwb3M7CiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBjLnpvb21DYW52YXMuX2N0eC5jYW52YXMuaGVpZ2h0OwogICAgICAgICAgICB2YXIgd2lkdGggPSBjLnpvb21DYW52YXMuX2N0eC5jYW52YXMud2lkdGg7CiAgICAgICAgICAgIHZhciBheGVzID0gcGxvdC5heGVzOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGMuY29uc3RyYWluT3V0c2lkZVpvb20gJiYgIWMub25HcmlkKSB7CiAgICAgICAgICAgICAgICBpZiAoeHBvcyA8IDApIHsgeHBvcyA9IDA7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHhwb3MgPiB3aWR0aCkgeyB4cG9zID0gd2lkdGg7IH0KICAgICAgICAgICAgICAgIGlmICh5cG9zIDwgMCkgeyB5cG9zID0gMDsgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoeXBvcyA+IGhlaWdodCkgeyB5cG9zID0gaGVpZ2h0OyB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZvciAodmFyIGF4aXMgaW4gZGF0YXBvcykgewogICAgICAgICAgICAgICAgICAgIGlmIChkYXRhcG9zW2F4aXNdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChheGlzLmNoYXJBdCgwKSA9PSAneCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFwb3NbYXhpc10gPSBheGVzW2F4aXNdLnNlcmllc19wMnUoeHBvcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhcG9zW2F4aXNdID0gYXhlc1theGlzXS5zZXJpZXNfcDJ1KHlwb3MpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoYy5jb25zdHJhaW5ab29tVG8gPT0gJ3gnKSB7CiAgICAgICAgICAgICAgICB5cG9zID0gaGVpZ2h0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGMuY29uc3RyYWluWm9vbVRvID09ICd5JykgewogICAgICAgICAgICAgICAgeHBvcyA9IHdpZHRoOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGMuX3pvb20uZW5kID0gW3hwb3MsIHlwb3NdOwogICAgICAgICAgICBjLl96b29tLmdyaWRwb3MgPSB7eDp4cG9zLCB5Onlwb3N9OwogICAgICAgICAgICAKICAgICAgICAgICAgYy5kb1pvb20oYy5fem9vbS5ncmlkcG9zLCBkYXRhcG9zLCBwbG90LCBjKTsKICAgICAgICB9CiAgICAgICAgYy5fem9vbS5zdGFydGVkID0gZmFsc2U7CiAgICAgICAgYy5fem9vbS56b29taW5nID0gZmFsc2U7CiAgICAgICAgCiAgICAgICAgJChkb2N1bWVudCkudW5iaW5kKCdtb3VzZW1vdmUuanFwbG90Q3Vyc29yJywgaGFuZGxlWm9vbU1vdmUpOwogICAgICAgIAogICAgICAgIGlmIChkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ICE9IHVuZGVmaW5lZCAmJiBjLl9vbGRIYW5kbGVycy5vbnNlbGVjdHN0YXJ0ICE9IG51bGwpewogICAgICAgICAgICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gYy5fb2xkSGFuZGxlcnMub25zZWxlY3RzdGFydDsKICAgICAgICAgICAgYy5fb2xkSGFuZGxlcnMub25zZWxlY3RzdGFydCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGlmIChkb2N1bWVudC5vbmRyYWcgIT0gdW5kZWZpbmVkICYmIGMuX29sZEhhbmRsZXJzLm9uZHJhZyAhPSBudWxsKXsKICAgICAgICAgICAgZG9jdW1lbnQub25kcmFnID0gYy5fb2xkSGFuZGxlcnMub25kcmFnOwogICAgICAgICAgICBjLl9vbGRIYW5kbGVycy5vbmRyYWcgPSBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoZG9jdW1lbnQub25tb3VzZWRvd24gIT0gdW5kZWZpbmVkICYmIGMuX29sZEhhbmRsZXJzLm9ubW91c2Vkb3duICE9IG51bGwpewogICAgICAgICAgICBkb2N1bWVudC5vbm1vdXNlZG93biA9IGMuX29sZEhhbmRsZXJzLm9ubW91c2Vkb3duOwogICAgICAgICAgICBjLl9vbGRIYW5kbGVycy5vbm1vdXNlZG93biA9IG51bGw7CiAgICAgICAgfQoKICAgIH0KICAgIAogICAgZnVuY3Rpb24gZHJhd1pvb21Cb3goKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fem9vbS5zdGFydDsKICAgICAgICB2YXIgZW5kID0gdGhpcy5fem9vbS5lbmQ7CiAgICAgICAgdmFyIGN0eCA9IHRoaXMuem9vbUNhbnZhcy5fY3R4OwogICAgICAgIHZhciBsLCB0LCBoLCB3OwogICAgICAgIGlmIChlbmRbMF0gPiBzdGFydFswXSkgewogICAgICAgICAgICBsID0gc3RhcnRbMF07CiAgICAgICAgICAgIHcgPSBlbmRbMF0gLSBzdGFydFswXTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGwgPSBlbmRbMF07CiAgICAgICAgICAgIHcgPSBzdGFydFswXSAtIGVuZFswXTsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZFsxXSA+IHN0YXJ0WzFdKSB7CiAgICAgICAgICAgIHQgPSBzdGFydFsxXTsKICAgICAgICAgICAgaCA9IGVuZFsxXSAtIHN0YXJ0WzFdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdCA9IGVuZFsxXTsKICAgICAgICAgICAgaCA9IHN0YXJ0WzFdIC0gZW5kWzFdOwogICAgICAgIH0KICAgICAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoMCwwLDAsMC4yKSc7CiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gJyM5OTk5OTknOwogICAgICAgIGN0eC5saW5lV2lkdGggPSAxLjA7CiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLDAsY3R4LmNhbnZhcy53aWR0aCwgY3R4LmNhbnZhcy5oZWlnaHQpOwogICAgICAgIGN0eC5maWxsUmVjdCgwLDAsY3R4LmNhbnZhcy53aWR0aCwgY3R4LmNhbnZhcy5oZWlnaHQpOwogICAgICAgIGN0eC5jbGVhclJlY3QobCwgdCwgdywgaCk7CiAgICAgICAgLy8gSUUgd29uJ3Qgc2hvdyB0cmFuc3BhcmVudCBmaWxsIHJlY3QsIHNvIHN0cm9rZSBhIHJlY3QgYWxzby4KICAgICAgICBjdHguc3Ryb2tlUmVjdChsLHQsdyxoKTsKICAgICAgICBjdHggPSBudWxsOwogICAgfQogICAgCiAgICAkLmpxcGxvdC5DdXJzb3JMZWdlbmRSZW5kZXJlciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAkLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyLmNhbGwodGhpcywgb3B0aW9ucyk7CiAgICAgICAgdGhpcy5mb3JtYXRTdHJpbmcgPSAnJXMnOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuQ3Vyc29yTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlID0gbmV3ICQuanFwbG90LlRhYmxlTGVnZW5kUmVuZGVyZXIoKTsKICAgICQuanFwbG90LkN1cnNvckxlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90LkN1cnNvckxlZ2VuZFJlbmRlcmVyOwogICAgCiAgICAvLyBjYWxsZWQgaW4gY29udGV4dCBvZiBhIExlZ2VuZAogICAgJC5qcXBsb3QuQ3Vyc29yTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5fZWxlbSkgewogICAgICAgICAgICB0aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKTsKICAgICAgICAgICAgdGhpcy5fZWxlbSA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNob3cpIHsKICAgICAgICAgICAgdmFyIHNlcmllcyA9IHRoaXMuX3NlcmllcywgczsKICAgICAgICAgICAgLy8gbWFrZSBhIHRhYmxlLiAgb25lIGxpbmUgbGFiZWwgcGVyIHJvdy4KICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOwogICAgICAgICAgICB0aGlzLl9lbGVtID0gJChlbGVtKTsKICAgICAgICAgICAgZWxlbSA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uYWRkQ2xhc3MoJ2pxcGxvdC1sZWdlbmQganFwbG90LWN1cnNvci1sZWdlbmQnKTsKICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7CiAgICAgICAgCiAgICAgICAgICAgIHZhciBwYWQgPSBmYWxzZTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGk8IHNlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcyA9IHNlcmllc1tpXTsKICAgICAgICAgICAgICAgIGlmIChzLnNob3cgJiYgcy5zaG93TGFiZWwpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbHQgPSAkLmpxcGxvdC5zcHJpbnRmKHRoaXMuZm9ybWF0U3RyaW5nLCBzLmxhYmVsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgIGlmIChsdCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBzLmNvbG9yOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5fc3RhY2sgJiYgIXMuZmlsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBhZGRyb3cuY2FsbCh0aGlzLCBsdCwgY29sb3IsIHBhZCwgaSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vIGxldCBwbHVnaW5zIGFkZCBtb3JlIHJvd3MgdG8gbGVnZW5kLiAgVXNlZCBieSB0cmVuZCBsaW5lIHBsdWdpbi4KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8JC5qcXBsb3QuYWRkTGVnZW5kUm93SG9va3MubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSAkLmpxcGxvdC5hZGRMZWdlbmRSb3dIb29rc1tqXS5jYWxsKHRoaXMsIHMpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcm93LmNhbGwodGhpcywgaXRlbS5sYWJlbCwgaXRlbS5jb2xvciwgcGFkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHNlcmllcyA9IHMgPSBudWxsOwogICAgICAgICAgICBkZWxldGUgc2VyaWVzOwogICAgICAgICAgICBkZWxldGUgczsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZnVuY3Rpb24gYWRkcm93KGxhYmVsLCBjb2xvciwgcGFkLCBpZHgpIHsKICAgICAgICAgICAgdmFyIHJzID0gKHBhZCkgPyB0aGlzLnJvd1NwYWNpbmcgOiAnMCc7CiAgICAgICAgICAgIHZhciB0ciA9ICQoJzx0ciBjbGFzcz0ianFwbG90LWxlZ2VuZCBqcXBsb3QtY3Vyc29yLWxlZ2VuZCI+PC90cj4nKS5hcHBlbmRUbyh0aGlzLl9lbGVtKTsKICAgICAgICAgICAgdHIuZGF0YSgnc2VyaWVzSW5kZXgnLCBpZHgpOwogICAgICAgICAgICAkKCc8dGQgY2xhc3M9ImpxcGxvdC1sZWdlbmQganFwbG90LWN1cnNvci1sZWdlbmQtc3dhdGNoIiBzdHlsZT0icGFkZGluZy10b3A6JytycysnOyI+JysKICAgICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7cGFkZGluZzowLjJlbTsiPicrCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ianFwbG90LWN1cnNvci1sZWdlbmQtc3dhdGNoIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjonK2NvbG9yKyc7Ij48L2Rpdj4nKwogICAgICAgICAgICAgICAgJzwvZGl2PjwvdGQ+JykuYXBwZW5kVG8odHIpOwogICAgICAgICAgICB2YXIgdGQgPSAkKCc8dGQgY2xhc3M9ImpxcGxvdC1sZWdlbmQganFwbG90LWN1cnNvci1sZWdlbmQtbGFiZWwiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cGFkZGluZy10b3A6JytycysnOyI+PC90ZD4nKTsKICAgICAgICAgICAgdGQuYXBwZW5kVG8odHIpOwogICAgICAgICAgICB0ZC5kYXRhKCdzZXJpZXNJbmRleCcsIGlkeCk7CiAgICAgICAgICAgIGlmICh0aGlzLmVzY2FwZUh0bWwpIHsKICAgICAgICAgICAgICAgIHRkLnRleHQobGFiZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGQuaHRtbChsYWJlbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHIgPSBudWxsOwogICAgICAgICAgICB0ZCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9lbGVtOwogICAgfTsKICAgIAp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.cursor.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGope2ouanFwbG90LkN1cnNvcj1mdW5jdGlvbihxKXt0aGlzLnN0eWxlPSJjcm9zc2hhaXIiO3RoaXMucHJldmlvdXNDdXJzb3I9ImF1dG8iO3RoaXMuc2hvdz1qLmpxcGxvdC5jb25maWcuZW5hYmxlUGx1Z2luczt0aGlzLnNob3dUb29sdGlwPXRydWU7dGhpcy5mb2xsb3dNb3VzZT1mYWxzZTt0aGlzLnRvb2x0aXBMb2NhdGlvbj0ic2UiO3RoaXMudG9vbHRpcE9mZnNldD02O3RoaXMuc2hvd1Rvb2x0aXBHcmlkUG9zaXRpb249ZmFsc2U7dGhpcy5zaG93VG9vbHRpcFVuaXRQb3NpdGlvbj10cnVlO3RoaXMuc2hvd1Rvb2x0aXBEYXRhUG9zaXRpb249ZmFsc2U7dGhpcy50b29sdGlwRm9ybWF0U3RyaW5nPSIlLjRQLCAlLjRQIjt0aGlzLnVzZUF4ZXNGb3JtYXR0ZXJzPXRydWU7dGhpcy50b29sdGlwQXhpc0dyb3Vwcz1bXTt0aGlzLnpvb209ZmFsc2U7dGhpcy56b29tUHJveHk9ZmFsc2U7dGhpcy56b29tVGFyZ2V0PWZhbHNlO3RoaXMubG9vc2Vab29tPXRydWU7dGhpcy5jbGlja1Jlc2V0PWZhbHNlO3RoaXMuZGJsQ2xpY2tSZXNldD10cnVlO3RoaXMuc2hvd1ZlcnRpY2FsTGluZT1mYWxzZTt0aGlzLnNob3dIb3Jpem9udGFsTGluZT1mYWxzZTt0aGlzLmNvbnN0cmFpblpvb21Ubz0ibm9uZSI7dGhpcy5zaGFwZVJlbmRlcmVyPW5ldyBqLmpxcGxvdC5TaGFwZVJlbmRlcmVyKCk7dGhpcy5fem9vbT17c3RhcnQ6W10sZW5kOltdLHN0YXJ0ZWQ6ZmFsc2Usem9vbWluZzpmYWxzZSxpc1pvb21lZDpmYWxzZSxheGVzOntzdGFydDp7fSxlbmQ6e319LGdyaWRwb3M6e30sZGF0YXBvczp7fX07dGhpcy5fdG9vbHRpcEVsZW07dGhpcy56b29tQ2FudmFzO3RoaXMuY3Vyc29yQ2FudmFzO3RoaXMuaW50ZXJzZWN0aW9uVGhyZXNob2xkPTI7dGhpcy5zaG93Q3Vyc29yTGVnZW5kPWZhbHNlO3RoaXMuY3Vyc29yTGVnZW5kRm9ybWF0U3RyaW5nPWouanFwbG90LkN1cnNvci5jdXJzb3JMZWdlbmRGb3JtYXRTdHJpbmc7dGhpcy5fb2xkSGFuZGxlcnM9e29uc2VsZWN0c3RhcnQ6bnVsbCxvbmRyYWc6bnVsbCxvbm1vdXNlZG93bjpudWxsfTt0aGlzLmNvbnN0cmFpbk91dHNpZGVab29tPXRydWU7dGhpcy5zaG93VG9vbHRpcE91dHNpZGVab29tPWZhbHNlO3RoaXMub25HcmlkPWZhbHNlO2ouZXh0ZW5kKHRydWUsdGhpcyxxKX07ai5qcXBsb3QuQ3Vyc29yLmN1cnNvckxlZ2VuZEZvcm1hdFN0cmluZz0iJXMgeDolcywgeTolcyI7ai5qcXBsb3QuQ3Vyc29yLmluaXQ9ZnVuY3Rpb24odCxzLHIpe3ZhciBxPXJ8fHt9O3RoaXMucGx1Z2lucy5jdXJzb3I9bmV3IGouanFwbG90LkN1cnNvcihxLmN1cnNvcik7dmFyIHU9dGhpcy5wbHVnaW5zLmN1cnNvcjtpZih1LnNob3cpe2ouanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsianFwbG90TW91c2VFbnRlciIsYl0pO2ouanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsianFwbG90TW91c2VMZWF2ZSIsZl0pO2ouanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsianFwbG90TW91c2VNb3ZlIixpXSk7aWYodS5zaG93Q3Vyc29yTGVnZW5kKXtyLmxlZ2VuZD1yLmxlZ2VuZHx8e307ci5sZWdlbmQucmVuZGVyZXI9ai5qcXBsb3QuQ3Vyc29yTGVnZW5kUmVuZGVyZXI7ci5sZWdlbmQuZm9ybWF0U3RyaW5nPXRoaXMucGx1Z2lucy5jdXJzb3IuY3Vyc29yTGVnZW5kRm9ybWF0U3RyaW5nO3IubGVnZW5kLnNob3c9dHJ1ZX1pZih1Lnpvb20pe2ouanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsianFwbG90TW91c2VEb3duIixhXSk7aWYodS5jbGlja1Jlc2V0KXtqLmpxcGxvdC5ldmVudExpc3RlbmVySG9va3MucHVzaChbImpxcGxvdENsaWNrIixrXSl9aWYodS5kYmxDbGlja1Jlc2V0KXtqLmpxcGxvdC5ldmVudExpc3RlbmVySG9va3MucHVzaChbImpxcGxvdERibENsaWNrIixjXSl9fXRoaXMucmVzZXRab29tPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5heGVzO2lmKCF1Lnpvb21Qcm94eSl7Zm9yKHZhciB3IGluIHgpe3hbd10ucmVzZXQoKTt4W3ddLl90aWNrcz1bXTtpZih1Ll96b29tLmF4ZXNbd10hPT11bmRlZmluZWQpe3hbd10uX2F1dG9Gb3JtYXRTdHJpbmc9dS5fem9vbS5heGVzW3ddLnRpY2tGb3JtYXRTdHJpbmd9fXRoaXMucmVkcmF3KCl9ZWxzZXt2YXIgdj10aGlzLnBsdWdpbnMuY3Vyc29yLnpvb21DYW52YXMuX2N0eDt2LmNsZWFyUmVjdCgwLDAsdi5jYW52YXMud2lkdGgsdi5jYW52YXMuaGVpZ2h0KTt2PW51bGx9dGhpcy5wbHVnaW5zLmN1cnNvci5fem9vbS5pc1pvb21lZD1mYWxzZTt0aGlzLnRhcmdldC50cmlnZ2VyKCJqcXBsb3RSZXNldFpvb20iLFt0aGlzLHRoaXMucGx1Z2lucy5jdXJzb3JdKX07aWYodS5zaG93VG9vbHRpcERhdGFQb3NpdGlvbil7dS5zaG93VG9vbHRpcFVuaXRQb3NpdGlvbj1mYWxzZTt1LnNob3dUb29sdGlwR3JpZFBvc2l0aW9uPWZhbHNlO2lmKHEuY3Vyc29yLnRvb2x0aXBGb3JtYXRTdHJpbmc9PXVuZGVmaW5lZCl7dS50b29sdGlwRm9ybWF0U3RyaW5nPWouanFwbG90LkN1cnNvci5jdXJzb3JMZWdlbmRGb3JtYXRTdHJpbmd9fX19O2ouanFwbG90LkN1cnNvci5wb3N0RHJhdz1mdW5jdGlvbigpe3ZhciB4PXRoaXMucGx1Z2lucy5jdXJzb3I7aWYoeC56b29tQ2FudmFzKXt4Lnpvb21DYW52YXMucmVzZXRDYW52YXMoKTt4Lnpvb21DYW52YXM9bnVsbH1pZih4LmN1cnNvckNhbnZhcyl7eC5jdXJzb3JDYW52YXMucmVzZXRDYW52YXMoKTt4LmN1cnNvckNhbnZhcz1udWxsfWlmKHguX3Rvb2x0aXBFbGVtKXt4Ll90b29sdGlwRWxlbS5lbXB0eUZvcmNlKCk7eC5fdG9vbHRpcEVsZW09bnVsbH1pZih4Lnpvb20pe3guem9vbUNhbnZhcz1uZXcgai5qcXBsb3QuR2VuZXJpY0NhbnZhcygpO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKHguem9vbUNhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCJqcXBsb3Qtem9vbS1jYW52YXMiLHRoaXMuX3Bsb3REaW1lbnNpb25zLHRoaXMpKTt4Lnpvb21DYW52YXMuc2V0Q29udGV4dCgpfXZhciB2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3guX3Rvb2x0aXBFbGVtPWoodik7dj1udWxsO3guX3Rvb2x0aXBFbGVtLmFkZENsYXNzKCJqcXBsb3QtY3Vyc29yLXRvb2x0aXAiKTt4Ll90b29sdGlwRWxlbS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZGlzcGxheToibm9uZSJ9KTtpZih4Lnpvb21DYW52YXMpe3guem9vbUNhbnZhcy5fZWxlbS5iZWZvcmUoeC5fdG9vbHRpcEVsZW0pfWVsc2V7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZvcmUoeC5fdG9vbHRpcEVsZW0pfWlmKHguc2hvd1ZlcnRpY2FsTGluZXx8eC5zaG93SG9yaXpvbnRhbExpbmUpe3guY3Vyc29yQ2FudmFzPW5ldyBqLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZvcmUoeC5jdXJzb3JDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywianFwbG90LWN1cnNvci1jYW52YXMiLHRoaXMuX3Bsb3REaW1lbnNpb25zLHRoaXMpKTt4LmN1cnNvckNhbnZhcy5zZXRDb250ZXh0KCl9aWYoeC5zaG93VG9vbHRpcFVuaXRQb3NpdGlvbil7aWYoeC50b29sdGlwQXhpc0dyb3Vwcy5sZW5ndGg9PT0wKXt2YXIgdD10aGlzLnNlcmllczt2YXIgdTt2YXIgcT1bXTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dT10W3JdO3ZhciB3PXUueGF4aXMrIiwiK3UueWF4aXM7aWYoai5pbkFycmF5KHcscSk9PS0xKXtxLnB1c2godyl9fWZvcih2YXIgcj0wO3I8cS5sZW5ndGg7cisrKXt4LnRvb2x0aXBBeGlzR3JvdXBzLnB1c2gocVtyXS5zcGxpdCgiLCIpKX19fX07ai5qcXBsb3QuQ3Vyc29yLnpvb21Qcm94eT1mdW5jdGlvbih2LHIpe3ZhciBxPXYucGx1Z2lucy5jdXJzb3I7dmFyIHU9ci5wbHVnaW5zLmN1cnNvcjtxLnpvb21UYXJnZXQ9dHJ1ZTtxLnpvb209dHJ1ZTtxLnN0eWxlPSJhdXRvIjtxLmRibENsaWNrUmVzZXQ9ZmFsc2U7dS56b29tPXRydWU7dS56b29tUHJveHk9dHJ1ZTtyLnRhcmdldC5iaW5kKCJqcXBsb3Rab29tIix0KTtyLnRhcmdldC5iaW5kKCJqcXBsb3RSZXNldFpvb20iLHMpO2Z1bmN0aW9uIHQoeCx3LHoseSxBKXtxLmRvWm9vbSh3LHosdixBKX1mdW5jdGlvbiBzKHcseCx5KXt2LnJlc2V0Wm9vbSgpfX07ai5qcXBsb3QuQ3Vyc29yLnByb3RvdHlwZS5yZXNldFpvb209ZnVuY3Rpb24odSx2KXt2YXIgdD11LmF4ZXM7dmFyIHM9di5fem9vbS5heGVzO2lmKCF1LnBsdWdpbnMuY3Vyc29yLnpvb21Qcm94eSYmdi5fem9vbS5pc1pvb21lZCl7Zm9yKHZhciByIGluIHQpe3Rbcl0ucmVzZXQoKTt0W3JdLl90aWNrcz1bXTt0W3JdLl9hdXRvRm9ybWF0U3RyaW5nPXNbcl0udGlja0Zvcm1hdFN0cmluZ311LnJlZHJhdygpO3YuX3pvb20uaXNab29tZWQ9ZmFsc2V9ZWxzZXt2YXIgcT12Lnpvb21DYW52YXMuX2N0eDtxLmNsZWFyUmVjdCgwLDAscS5jYW52YXMud2lkdGgscS5jYW52YXMuaGVpZ2h0KTtxPW51bGx9dS50YXJnZXQudHJpZ2dlcigianFwbG90UmVzZXRab29tIixbdSx2XSl9O2ouanFwbG90LkN1cnNvci5yZXNldFpvb209ZnVuY3Rpb24ocSl7cS5yZXNldFpvb20oKX07ai5qcXBsb3QuQ3Vyc29yLnByb3RvdHlwZS5kb1pvb209ZnVuY3Rpb24oRyx0LEMsdSl7dmFyIEk9dTt2YXIgRj1DLmF4ZXM7dmFyIHI9SS5fem9vbS5heGVzO3ZhciB3PXIuc3RhcnQ7dmFyIHM9ci5lbmQ7dmFyIEIsRSx6LEQsdix4LHEsSCxKO3ZhciBBPUMucGx1Z2lucy5jdXJzb3Iuem9vbUNhbnZhcy5fY3R4O2lmKChJLmNvbnN0cmFpblpvb21Ubz09Im5vbmUiJiZNYXRoLmFicyhHLngtSS5fem9vbS5zdGFydFswXSk+NiYmTWF0aC5hYnMoRy55LUkuX3pvb20uc3RhcnRbMV0pPjYpfHwoSS5jb25zdHJhaW5ab29tVG89PSJ4IiYmTWF0aC5hYnMoRy54LUkuX3pvb20uc3RhcnRbMF0pPjYpfHwoSS5jb25zdHJhaW5ab29tVG89PSJ5IiYmTWF0aC5hYnMoRy55LUkuX3pvb20uc3RhcnRbMV0pPjYpKXtpZighQy5wbHVnaW5zLmN1cnNvci56b29tUHJveHkpe2Zvcih2YXIgeSBpbiB0KXtpZihJLl96b29tLmF4ZXNbeV09PXVuZGVmaW5lZCl7SS5fem9vbS5heGVzW3ldPXt9O0kuX3pvb20uYXhlc1t5XS5udW1iZXJUaWNrcz1GW3ldLm51bWJlclRpY2tzO0kuX3pvb20uYXhlc1t5XS50aWNrSW50ZXJ2YWw9Rlt5XS50aWNrSW50ZXJ2YWw7SS5fem9vbS5heGVzW3ldLmRhVGlja0ludGVydmFsPUZbeV0uZGFUaWNrSW50ZXJ2YWw7SS5fem9vbS5heGVzW3ldLm1pbj1GW3ldLm1pbjtJLl96b29tLmF4ZXNbeV0ubWF4PUZbeV0ubWF4O0kuX3pvb20uYXhlc1t5XS50aWNrRm9ybWF0U3RyaW5nPShGW3ldLnRpY2tPcHRpb25zIT1udWxsKT9GW3ldLnRpY2tPcHRpb25zLmZvcm1hdFN0cmluZzoiIn1pZigoSS5jb25zdHJhaW5ab29tVG89PSJub25lIil8fChJLmNvbnN0cmFpblpvb21Ubz09IngiJiZ5LmNoYXJBdCgwKT09IngiKXx8KEkuY29uc3RyYWluWm9vbVRvPT0ieSImJnkuY2hhckF0KDApPT0ieSIpKXt6PXRbeV07aWYoeiE9bnVsbCl7aWYoej53W3ldKXt2PXdbeV07eD16fWVsc2V7RD13W3ldLXo7dj16O3g9d1t5XX1xPUZbeV07SD1udWxsO2lmKHEuYWxpZ25UaWNrcyl7aWYocS5uYW1lPT09IngyYXhpcyImJkMuYXhlcy54YXhpcy5zaG93KXtIPUMuYXhlcy54YXhpcy5udW1iZXJUaWNrc31lbHNle2lmKHEubmFtZS5jaGFyQXQoMCk9PT0ieSImJnEubmFtZSE9PSJ5YXhpcyImJnEubmFtZSE9PSJ5TWlkQXhpcyImJkMuYXhlcy55YXhpcy5zaG93KXtIPUMuYXhlcy55YXhpcy5udW1iZXJUaWNrc319fWlmKHRoaXMubG9vc2Vab29tJiYoRlt5XS5yZW5kZXJlci5jb25zdHJ1Y3Rvcj09PWouanFwbG90LkxpbmVhckF4aXNSZW5kZXJlcnx8Rlt5XS5yZW5kZXJlci5jb25zdHJ1Y3Rvcj09PWouanFwbG90LkxvZ0F4aXNSZW5kZXJlcikpe0o9ai5qcXBsb3QuTGluZWFyVGlja0dlbmVyYXRvcih2LHgscS5fc2NhbGVmYWN0LEgpO2lmKEZbeV0udGlja0luc2V0JiZKWzBdPEZbeV0ubWluK0ZbeV0udGlja0luc2V0KkZbeV0udGlja0ludGVydmFsKXtKWzBdKz1KWzRdO0pbMl0tPTF9aWYoRlt5XS50aWNrSW5zZXQmJkpbMV0+Rlt5XS5tYXgtRlt5XS50aWNrSW5zZXQqRlt5XS50aWNrSW50ZXJ2YWwpe0pbMV0tPUpbNF07SlsyXS09MX1pZihGW3ldLnJlbmRlcmVyLmNvbnN0cnVjdG9yPT09ai5qcXBsb3QuTG9nQXhpc1JlbmRlcmVyJiZKWzBdPEZbeV0ubWluKXtKWzBdKz1KWzRdO0pbMl0tPTF9Rlt5XS5taW49SlswXTtGW3ldLm1heD1KWzFdO0ZbeV0uX2F1dG9Gb3JtYXRTdHJpbmc9SlszXTtGW3ldLm51bWJlclRpY2tzPUpbMl07Rlt5XS50aWNrSW50ZXJ2YWw9Sls0XTtGW3ldLmRhVGlja0ludGVydmFsPVtKWzRdLzEwMDAsInNlY29uZHMiXX1lbHNle0ZbeV0ubWluPXY7Rlt5XS5tYXg9eDtGW3ldLnRpY2tJbnRlcnZhbD1udWxsO0ZbeV0ubnVtYmVyVGlja3M9bnVsbDtGW3ldLmRhVGlja0ludGVydmFsPW51bGx9Rlt5XS5fdGlja3M9W119fX1BLmNsZWFyUmVjdCgwLDAsQS5jYW52YXMud2lkdGgsQS5jYW52YXMuaGVpZ2h0KTtDLnJlZHJhdygpO0kuX3pvb20uaXNab29tZWQ9dHJ1ZTtBPW51bGx9Qy50YXJnZXQudHJpZ2dlcigianFwbG90Wm9vbSIsW0csdCxDLHVdKX19O2ouanFwbG90LnByZUluaXRIb29rcy5wdXNoKGouanFwbG90LkN1cnNvci5pbml0KTtqLmpxcGxvdC5wb3N0RHJhd0hvb2tzLnB1c2goai5qcXBsb3QuQ3Vyc29yLnBvc3REcmF3KTtmdW5jdGlvbiBlKEcscixDKXt2YXIgSj1DLnBsdWdpbnMuY3Vyc29yO3ZhciB3PSIiO3ZhciBOPWZhbHNlO2lmKEouc2hvd1Rvb2x0aXBHcmlkUG9zaXRpb24pe3c9Ry54KyIsICIrRy55O049dHJ1ZX1pZihKLnNob3dUb29sdGlwVW5pdFBvc2l0aW9uKXt2YXIgRjtmb3IodmFyIEU9MDtFPEoudG9vbHRpcEF4aXNHcm91cHMubGVuZ3RoO0UrKyl7Rj1KLnRvb2x0aXBBeGlzR3JvdXBzW0VdO2lmKE4pe3crPSI8YnIgLz4ifWlmKEoudXNlQXhlc0Zvcm1hdHRlcnMpe2Zvcih2YXIgRD0wO0Q8Ri5sZW5ndGg7RCsrKXtpZihEKXt3Kz0iLCAifXZhciBIPUMuYXhlc1tGW0RdXS5fdGlja3NbMF0uZm9ybWF0dGVyO3ZhciBCPUMuYXhlc1tGW0RdXS5fdGlja3NbMF0uZm9ybWF0U3RyaW5nO3crPUgoQixyW0ZbRF1dKX19ZWxzZXt3Kz1qLmpxcGxvdC5zcHJpbnRmKEoudG9vbHRpcEZvcm1hdFN0cmluZyxyW0ZbMF1dLHJbRlsxXV0pfU49dHJ1ZX19aWYoSi5zaG93VG9vbHRpcERhdGFQb3NpdGlvbil7dmFyIHU9Qy5zZXJpZXM7dmFyIE09ZChDLEcueCxHLnkpO3ZhciBOPWZhbHNlO2Zvcih2YXIgRT0wO0U8dS5sZW5ndGg7RSsrKXtpZih1W0VdLnNob3cpe3ZhciB5PXVbRV0uaW5kZXg7dmFyIHQ9dVtFXS5sYWJlbC50b1N0cmluZygpO3ZhciBJPWouaW5BcnJheSh5LE0uaW5kaWNlcyk7dmFyIHo9dW5kZWZpbmVkO3ZhciB4PXVuZGVmaW5lZDtpZihJIT0tMSl7dmFyIEw9TS5kYXRhW0ldLmRhdGE7aWYoSi51c2VBeGVzRm9ybWF0dGVycyl7dmFyIEE9dVtFXS5feGF4aXMuX3RpY2tzWzBdLmZvcm1hdHRlcjt2YXIgcT11W0VdLl95YXhpcy5fdGlja3NbMF0uZm9ybWF0dGVyO3ZhciBLPXVbRV0uX3hheGlzLl90aWNrc1swXS5mb3JtYXRTdHJpbmc7dmFyIHY9dVtFXS5feWF4aXMuX3RpY2tzWzBdLmZvcm1hdFN0cmluZzt6PUEoSyxMWzBdKTt4PXEodixMWzFdKX1lbHNle3o9TFswXTt4PUxbMV19aWYoTil7dys9IjxiciAvPiJ9dys9ai5qcXBsb3Quc3ByaW50ZihKLnRvb2x0aXBGb3JtYXRTdHJpbmcsdCx6LHgpO049dHJ1ZX19fX1KLl90b29sdGlwRWxlbS5odG1sKHcpfWZ1bmN0aW9uIGcoQyxBKXt2YXIgRT1BLnBsdWdpbnMuY3Vyc29yO3ZhciB6PUUuY3Vyc29yQ2FudmFzLl9jdHg7ei5jbGVhclJlY3QoMCwwLHouY2FudmFzLndpZHRoLHouY2FudmFzLmhlaWdodCk7aWYoRS5zaG93VmVydGljYWxMaW5lKXtFLnNoYXBlUmVuZGVyZXIuZHJhdyh6LFtbQy54LDBdLFtDLngsei5jYW52YXMuaGVpZ2h0XV0pfWlmKEUuc2hvd0hvcml6b250YWxMaW5lKXtFLnNoYXBlUmVuZGVyZXIuZHJhdyh6LFtbMCxDLnldLFt6LmNhbnZhcy53aWR0aCxDLnldXSl9dmFyIEc9ZChBLEMueCxDLnkpO2lmKEUuc2hvd0N1cnNvckxlZ2VuZCl7dmFyIHI9aihBLnRhcmdldElkKyIgdGQuanFwbG90LWN1cnNvci1sZWdlbmQtbGFiZWwiKTtmb3IodmFyIEI9MDtCPHIubGVuZ3RoO0IrKyl7dmFyIHY9aihyW0JdKS5kYXRhKCJzZXJpZXNJbmRleCIpO3ZhciB0PUEuc2VyaWVzW3ZdO3ZhciBzPXQubGFiZWwudG9TdHJpbmcoKTt2YXIgRD1qLmluQXJyYXkodixHLmluZGljZXMpO3ZhciB4PXVuZGVmaW5lZDt2YXIgdz11bmRlZmluZWQ7aWYoRCE9LTEpe3ZhciBIPUcuZGF0YVtEXS5kYXRhO2lmKEUudXNlQXhlc0Zvcm1hdHRlcnMpe3ZhciB5PXQuX3hheGlzLl90aWNrc1swXS5mb3JtYXR0ZXI7dmFyIHE9dC5feWF4aXMuX3RpY2tzWzBdLmZvcm1hdHRlcjt2YXIgRj10Ll94YXhpcy5fdGlja3NbMF0uZm9ybWF0U3RyaW5nO3ZhciB1PXQuX3lheGlzLl90aWNrc1swXS5mb3JtYXRTdHJpbmc7eD15KEYsSFswXSk7dz1xKHUsSFsxXSl9ZWxzZXt4PUhbMF07dz1IWzFdfX1pZihBLmxlZ2VuZC5lc2NhcGVIdG1sKXtqKHJbQl0pLnRleHQoai5qcXBsb3Quc3ByaW50ZihFLmN1cnNvckxlZ2VuZEZvcm1hdFN0cmluZyxzLHgsdykpfWVsc2V7aihyW0JdKS5odG1sKGouanFwbG90LnNwcmludGYoRS5jdXJzb3JMZWdlbmRGb3JtYXRTdHJpbmcscyx4LHcpKX19fXo9bnVsbH1mdW5jdGlvbiBkKEEsRixFKXt2YXIgQj17aW5kaWNlczpbXSxkYXRhOltdfTt2YXIgRyx3LHUsQyx2LHEsdDt2YXIgejt2YXIgRD1BLnBsdWdpbnMuY3Vyc29yO2Zvcih2YXIgdz0wO3c8QS5zZXJpZXMubGVuZ3RoO3crKyl7Rz1BLnNlcmllc1t3XTtxPUcucmVuZGVyZXI7aWYoRy5zaG93KXt6PUQuaW50ZXJzZWN0aW9uVGhyZXNob2xkO2lmKEcuc2hvd01hcmtlcil7eis9Ry5tYXJrZXJSZW5kZXJlci5zaXplLzJ9Zm9yKHZhciB2PTA7djxHLmdyaWREYXRhLmxlbmd0aDt2Kyspe3Q9Ry5ncmlkRGF0YVt2XTtpZihELnNob3dWZXJ0aWNhbExpbmUpe2lmKE1hdGguYWJzKEYtdFswXSk8PXope0IuaW5kaWNlcy5wdXNoKHcpO0IuZGF0YS5wdXNoKHtzZXJpZXNJbmRleDp3LHBvaW50SW5kZXg6dixncmlkRGF0YTp0LGRhdGE6Ry5kYXRhW3ZdfSl9fX19fXJldHVybiBCfWZ1bmN0aW9uIG4ocix0KXt2YXIgdj10LnBsdWdpbnMuY3Vyc29yO3ZhciBzPXYuX3Rvb2x0aXBFbGVtO3N3aXRjaCh2LnRvb2x0aXBMb2NhdGlvbil7Y2FzZSJudyI6dmFyIHE9ci54K3QuX2dyaWRQYWRkaW5nLmxlZnQtcy5vdXRlcldpZHRoKHRydWUpLXYudG9vbHRpcE9mZnNldDt2YXIgdT1yLnkrdC5fZ3JpZFBhZGRpbmcudG9wLXYudG9vbHRpcE9mZnNldC1zLm91dGVySGVpZ2h0KHRydWUpO2JyZWFrO2Nhc2UibiI6dmFyIHE9ci54K3QuX2dyaWRQYWRkaW5nLmxlZnQtcy5vdXRlcldpZHRoKHRydWUpLzI7dmFyIHU9ci55K3QuX2dyaWRQYWRkaW5nLnRvcC12LnRvb2x0aXBPZmZzZXQtcy5vdXRlckhlaWdodCh0cnVlKTticmVhaztjYXNlIm5lIjp2YXIgcT1yLngrdC5fZ3JpZFBhZGRpbmcubGVmdCt2LnRvb2x0aXBPZmZzZXQ7dmFyIHU9ci55K3QuX2dyaWRQYWRkaW5nLnRvcC12LnRvb2x0aXBPZmZzZXQtcy5vdXRlckhlaWdodCh0cnVlKTticmVhaztjYXNlImUiOnZhciBxPXIueCt0Ll9ncmlkUGFkZGluZy5sZWZ0K3YudG9vbHRpcE9mZnNldDt2YXIgdT1yLnkrdC5fZ3JpZFBhZGRpbmcudG9wLXMub3V0ZXJIZWlnaHQodHJ1ZSkvMjticmVhaztjYXNlInNlIjp2YXIgcT1yLngrdC5fZ3JpZFBhZGRpbmcubGVmdCt2LnRvb2x0aXBPZmZzZXQ7dmFyIHU9ci55K3QuX2dyaWRQYWRkaW5nLnRvcCt2LnRvb2x0aXBPZmZzZXQ7YnJlYWs7Y2FzZSJzIjp2YXIgcT1yLngrdC5fZ3JpZFBhZGRpbmcubGVmdC1zLm91dGVyV2lkdGgodHJ1ZSkvMjt2YXIgdT1yLnkrdC5fZ3JpZFBhZGRpbmcudG9wK3YudG9vbHRpcE9mZnNldDticmVhaztjYXNlInN3Ijp2YXIgcT1yLngrdC5fZ3JpZFBhZGRpbmcubGVmdC1zLm91dGVyV2lkdGgodHJ1ZSktdi50b29sdGlwT2Zmc2V0O3ZhciB1PXIueSt0Ll9ncmlkUGFkZGluZy50b3Ardi50b29sdGlwT2Zmc2V0O2JyZWFrO2Nhc2UidyI6dmFyIHE9ci54K3QuX2dyaWRQYWRkaW5nLmxlZnQtcy5vdXRlcldpZHRoKHRydWUpLXYudG9vbHRpcE9mZnNldDt2YXIgdT1yLnkrdC5fZ3JpZFBhZGRpbmcudG9wLXMub3V0ZXJIZWlnaHQodHJ1ZSkvMjticmVhaztkZWZhdWx0OnZhciBxPXIueCt0Ll9ncmlkUGFkZGluZy5sZWZ0K3YudG9vbHRpcE9mZnNldDt2YXIgdT1yLnkrdC5fZ3JpZFBhZGRpbmcudG9wK3YudG9vbHRpcE9mZnNldDticmVha31zLmNzcygibGVmdCIscSk7cy5jc3MoInRvcCIsdSk7cz1udWxsfWZ1bmN0aW9uIG0odSl7dmFyIHM9dS5fZ3JpZFBhZGRpbmc7dmFyIHY9dS5wbHVnaW5zLmN1cnNvcjt2YXIgdD12Ll90b29sdGlwRWxlbTtzd2l0Y2godi50b29sdGlwTG9jYXRpb24pe2Nhc2UibnciOnZhciByPXMubGVmdCt2LnRvb2x0aXBPZmZzZXQ7dmFyIHE9cy50b3Ardi50b29sdGlwT2Zmc2V0O3QuY3NzKCJsZWZ0IixyKTt0LmNzcygidG9wIixxKTticmVhaztjYXNlIm4iOnZhciByPShzLmxlZnQrKHUuX3Bsb3REaW1lbnNpb25zLndpZHRoLXMucmlnaHQpKS8yLXQub3V0ZXJXaWR0aCh0cnVlKS8yO3ZhciBxPXMudG9wK3YudG9vbHRpcE9mZnNldDt0LmNzcygibGVmdCIscik7dC5jc3MoInRvcCIscSk7YnJlYWs7Y2FzZSJuZSI6dmFyIHI9cy5yaWdodCt2LnRvb2x0aXBPZmZzZXQ7dmFyIHE9cy50b3Ardi50b29sdGlwT2Zmc2V0O3QuY3NzKHtyaWdodDpyLHRvcDpxfSk7YnJlYWs7Y2FzZSJlIjp2YXIgcj1zLnJpZ2h0K3YudG9vbHRpcE9mZnNldDt2YXIgcT0ocy50b3ArKHUuX3Bsb3REaW1lbnNpb25zLmhlaWdodC1zLmJvdHRvbSkpLzItdC5vdXRlckhlaWdodCh0cnVlKS8yO3QuY3NzKHtyaWdodDpyLHRvcDpxfSk7YnJlYWs7Y2FzZSJzZSI6dmFyIHI9cy5yaWdodCt2LnRvb2x0aXBPZmZzZXQ7dmFyIHE9cy5ib3R0b20rdi50b29sdGlwT2Zmc2V0O3QuY3NzKHtyaWdodDpyLGJvdHRvbTpxfSk7YnJlYWs7Y2FzZSJzIjp2YXIgcj0ocy5sZWZ0Kyh1Ll9wbG90RGltZW5zaW9ucy53aWR0aC1zLnJpZ2h0KSkvMi10Lm91dGVyV2lkdGgodHJ1ZSkvMjt2YXIgcT1zLmJvdHRvbSt2LnRvb2x0aXBPZmZzZXQ7dC5jc3Moe2xlZnQ6cixib3R0b206cX0pO2JyZWFrO2Nhc2Uic3ciOnZhciByPXMubGVmdCt2LnRvb2x0aXBPZmZzZXQ7dmFyIHE9cy5ib3R0b20rdi50b29sdGlwT2Zmc2V0O3QuY3NzKHtsZWZ0OnIsYm90dG9tOnF9KTticmVhaztjYXNlInciOnZhciByPXMubGVmdCt2LnRvb2x0aXBPZmZzZXQ7dmFyIHE9KHMudG9wKyh1Ll9wbG90RGltZW5zaW9ucy5oZWlnaHQtcy5ib3R0b20pKS8yLXQub3V0ZXJIZWlnaHQodHJ1ZSkvMjt0LmNzcyh7bGVmdDpyLHRvcDpxfSk7YnJlYWs7ZGVmYXVsdDp2YXIgcj1zLnJpZ2h0LXYudG9vbHRpcE9mZnNldDt2YXIgcT1zLmJvdHRvbSt2LnRvb2x0aXBPZmZzZXQ7dC5jc3Moe3JpZ2h0OnIsYm90dG9tOnF9KTticmVha310PW51bGx9ZnVuY3Rpb24gayhyLHEsdix1LHQpe3IucHJldmVudERlZmF1bHQoKTtyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO3ZhciB3PXQucGx1Z2lucy5jdXJzb3I7aWYody5jbGlja1Jlc2V0KXt3LnJlc2V0Wm9vbSh0LHcpfXZhciBzPXdpbmRvdy5nZXRTZWxlY3Rpb247aWYoZG9jdW1lbnQuc2VsZWN0aW9uJiZkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkpe2RvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpfWVsc2V7aWYocyYmIXMoKS5pc0NvbGxhcHNlZCl7cygpLmNvbGxhcHNlKCl9fXJldHVybiBmYWxzZX1mdW5jdGlvbiBjKHIscSx2LHUsdCl7ci5wcmV2ZW50RGVmYXVsdCgpO3Iuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7dmFyIHc9dC5wbHVnaW5zLmN1cnNvcjtpZih3LmRibENsaWNrUmVzZXQpe3cucmVzZXRab29tKHQsdyl9dmFyIHM9d2luZG93LmdldFNlbGVjdGlvbjtpZihkb2N1bWVudC5zZWxlY3Rpb24mJmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSl7ZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCl9ZWxzZXtpZihzJiYhcygpLmlzQ29sbGFwc2VkKXtzKCkuY29sbGFwc2UoKX19cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIGYodyx0LHEseix1KXt2YXIgdj11LnBsdWdpbnMuY3Vyc29yO3Yub25HcmlkPWZhbHNlO2lmKHYuc2hvdyl7aih3LnRhcmdldCkuY3NzKCJjdXJzb3IiLHYucHJldmlvdXNDdXJzb3IpO2lmKHYuc2hvd1Rvb2x0aXAmJiEodi5fem9vbS56b29taW5nJiZ2LnNob3dUb29sdGlwT3V0c2lkZVpvb20mJiF2LmNvbnN0cmFpbk91dHNpZGVab29tKSl7di5fdG9vbHRpcEVsZW0uZW1wdHkoKTt2Ll90b29sdGlwRWxlbS5oaWRlKCl9aWYodi56b29tKXt2Ll96b29tLmdyaWRwb3M9dDt2Ll96b29tLmRhdGFwb3M9cX1pZih2LnNob3dWZXJ0aWNhbExpbmV8fHYuc2hvd0hvcml6b250YWxMaW5lKXt2YXIgQj12LmN1cnNvckNhbnZhcy5fY3R4O0IuY2xlYXJSZWN0KDAsMCxCLmNhbnZhcy53aWR0aCxCLmNhbnZhcy5oZWlnaHQpO0I9bnVsbH1pZih2LnNob3dDdXJzb3JMZWdlbmQpe3ZhciBBPWoodS50YXJnZXRJZCsiIHRkLmpxcGxvdC1jdXJzb3ItbGVnZW5kLWxhYmVsIik7Zm9yKHZhciBzPTA7czxBLmxlbmd0aDtzKyspe3ZhciB5PWooQVtzXSkuZGF0YSgic2VyaWVzSW5kZXgiKTt2YXIgcj11LnNlcmllc1t5XTt2YXIgeD1yLmxhYmVsLnRvU3RyaW5nKCk7aWYodS5sZWdlbmQuZXNjYXBlSHRtbCl7aihBW3NdKS50ZXh0KGouanFwbG90LnNwcmludGYodi5jdXJzb3JMZWdlbmRGb3JtYXRTdHJpbmcseCx1bmRlZmluZWQsdW5kZWZpbmVkKSl9ZWxzZXtqKEFbc10pLmh0bWwoai5qcXBsb3Quc3ByaW50Zih2LmN1cnNvckxlZ2VuZEZvcm1hdFN0cmluZyx4LHVuZGVmaW5lZCx1bmRlZmluZWQpKX19fX19ZnVuY3Rpb24gYihyLHEsdSx0LHMpe3ZhciB2PXMucGx1Z2lucy5jdXJzb3I7di5vbkdyaWQ9dHJ1ZTtpZih2LnNob3cpe3YucHJldmlvdXNDdXJzb3I9ci50YXJnZXQuc3R5bGUuY3Vyc29yO3IudGFyZ2V0LnN0eWxlLmN1cnNvcj12LnN0eWxlO2lmKHYuc2hvd1Rvb2x0aXApe2UocSx1LHMpO2lmKHYuZm9sbG93TW91c2Upe24ocSxzKX1lbHNle20ocyl9di5fdG9vbHRpcEVsZW0uc2hvdygpfWlmKHYuc2hvd1ZlcnRpY2FsTGluZXx8di5zaG93SG9yaXpvbnRhbExpbmUpe2cocSxzKX19fWZ1bmN0aW9uIGkocixxLHUsdCxzKXt2YXIgdj1zLnBsdWdpbnMuY3Vyc29yO2lmKHYuc2hvdyl7aWYodi5zaG93VG9vbHRpcCl7ZShxLHUscyk7aWYodi5mb2xsb3dNb3VzZSl7bihxLHMpfX1pZih2LnNob3dWZXJ0aWNhbExpbmV8fHYuc2hvd0hvcml6b250YWxMaW5lKXtnKHEscyl9fX1mdW5jdGlvbiBvKHkpe3ZhciB4PXkuZGF0YS5wbG90O3ZhciB0PXguZXZlbnRDYW52YXMuX2VsZW0ub2Zmc2V0KCk7dmFyIHc9e3g6eS5wYWdlWC10LmxlZnQseTp5LnBhZ2VZLXQudG9wfTt2YXIgdT17eGF4aXM6bnVsbCx5YXhpczpudWxsLHgyYXhpczpudWxsLHkyYXhpczpudWxsLHkzYXhpczpudWxsLHk0YXhpczpudWxsLHk1YXhpczpudWxsLHk2YXhpczpudWxsLHk3YXhpczpudWxsLHk4YXhpczpudWxsLHk5YXhpczpudWxsLHlNaWRBeGlzOm51bGx9O3ZhciB2PVsieGF4aXMiLCJ5YXhpcyIsIngyYXhpcyIsInkyYXhpcyIsInkzYXhpcyIsInk0YXhpcyIsInk1YXhpcyIsInk2YXhpcyIsInk3YXhpcyIsInk4YXhpcyIsInk5YXhpcyIsInlNaWRBeGlzIl07dmFyIHE9eC5heGVzO3ZhciByLHM7Zm9yKHI9MTE7cj4wO3ItLSl7cz12W3ItMV07aWYocVtzXS5zaG93KXt1W3NdPXFbc10uc2VyaWVzX3AydSh3W3MuY2hhckF0KDApXSl9fXJldHVybntvZmZzZXRzOnQsZ3JpZFBvczp3LGRhdGFQb3M6dX19ZnVuY3Rpb24gaCh6KXt2YXIgeD16LmRhdGEucGxvdDt2YXIgeT14LnBsdWdpbnMuY3Vyc29yO2lmKHkuc2hvdyYmeS56b29tJiZ5Ll96b29tLnN0YXJ0ZWQmJiF5Lnpvb21UYXJnZXQpe3oucHJldmVudERlZmF1bHQoKTt2YXIgQj15Lnpvb21DYW52YXMuX2N0eDt2YXIgdj1vKHopO3ZhciB3PXYuZ3JpZFBvczt2YXIgdD12LmRhdGFQb3M7eS5fem9vbS5ncmlkcG9zPXc7eS5fem9vbS5kYXRhcG9zPXQ7eS5fem9vbS56b29taW5nPXRydWU7dmFyIHU9dy54O3ZhciBzPXcueTt2YXIgQT1CLmNhbnZhcy5oZWlnaHQ7dmFyIHE9Qi5jYW52YXMud2lkdGg7aWYoeS5zaG93VG9vbHRpcCYmIXkub25HcmlkJiZ5LnNob3dUb29sdGlwT3V0c2lkZVpvb20pe2Uodyx0LHgpO2lmKHkuZm9sbG93TW91c2Upe24odyx4KX19aWYoeS5jb25zdHJhaW5ab29tVG89PSJ4Iil7eS5fem9vbS5lbmQ9W3UsQV19ZWxzZXtpZih5LmNvbnN0cmFpblpvb21Ubz09InkiKXt5Ll96b29tLmVuZD1bcSxzXX1lbHNle3kuX3pvb20uZW5kPVt1LHNdfX12YXIgcj13aW5kb3cuZ2V0U2VsZWN0aW9uO2lmKGRvY3VtZW50LnNlbGVjdGlvbiYmZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KXtkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKX1lbHNle2lmKHImJiFyKCkuaXNDb2xsYXBzZWQpe3IoKS5jb2xsYXBzZSgpfX1sLmNhbGwoeSk7Qj1udWxsfX1mdW5jdGlvbiBhKHcscyxyLHgsdCl7dmFyIHY9dC5wbHVnaW5zLmN1cnNvcjtpZih0LnBsdWdpbnMubW9iaWxlKXtqKGRvY3VtZW50KS5vbmUoInZtb3VzZXVwLmpxcGxvdF9jdXJzb3IiLHtwbG90OnR9LHApfWVsc2V7aihkb2N1bWVudCkub25lKCJtb3VzZXVwLmpxcGxvdF9jdXJzb3IiLHtwbG90OnR9LHApfXZhciB1PXQuYXhlcztpZihkb2N1bWVudC5vbnNlbGVjdHN0YXJ0IT11bmRlZmluZWQpe3YuX29sZEhhbmRsZXJzLm9uc2VsZWN0c3RhcnQ9ZG9jdW1lbnQub25zZWxlY3RzdGFydDtkb2N1bWVudC5vbnNlbGVjdHN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfX1pZihkb2N1bWVudC5vbmRyYWchPXVuZGVmaW5lZCl7di5fb2xkSGFuZGxlcnMub25kcmFnPWRvY3VtZW50Lm9uZHJhZztkb2N1bWVudC5vbmRyYWc9ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9fWlmKGRvY3VtZW50Lm9ubW91c2Vkb3duIT11bmRlZmluZWQpe3YuX29sZEhhbmRsZXJzLm9ubW91c2Vkb3duPWRvY3VtZW50Lm9ubW91c2Vkb3duO2RvY3VtZW50Lm9ubW91c2Vkb3duPWZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfX1pZih2Lnpvb20pe2lmKCF2Lnpvb21Qcm94eSl7dmFyIHk9di56b29tQ2FudmFzLl9jdHg7eS5jbGVhclJlY3QoMCwwLHkuY2FudmFzLndpZHRoLHkuY2FudmFzLmhlaWdodCk7eT1udWxsfWlmKHYuY29uc3RyYWluWm9vbVRvPT0ieCIpe3YuX3pvb20uc3RhcnQ9W3MueCwwXX1lbHNle2lmKHYuY29uc3RyYWluWm9vbVRvPT0ieSIpe3YuX3pvb20uc3RhcnQ9WzAscy55XX1lbHNle3YuX3pvb20uc3RhcnQ9W3MueCxzLnldfX12Ll96b29tLnN0YXJ0ZWQ9dHJ1ZTtmb3IodmFyIHEgaW4gcil7di5fem9vbS5heGVzLnN0YXJ0W3FdPXJbcV19aWYodC5wbHVnaW5zLm1vYmlsZSl7aihkb2N1bWVudCkuYmluZCgidm1vdXNlbW92ZS5qcXBsb3RDdXJzb3IiLHtwbG90OnR9LGgpfWVsc2V7aihkb2N1bWVudCkuYmluZCgibW91c2Vtb3ZlLmpxcGxvdEN1cnNvciIse3Bsb3Q6dH0saCl9fX1mdW5jdGlvbiBwKHkpe3ZhciB2PXkuZGF0YS5wbG90O3ZhciB4PXYucGx1Z2lucy5jdXJzb3I7aWYoeC56b29tJiZ4Ll96b29tLnpvb21pbmcmJiF4Lnpvb21UYXJnZXQpe3ZhciB1PXguX3pvb20uZ3JpZHBvcy54O3ZhciByPXguX3pvb20uZ3JpZHBvcy55O3ZhciB0PXguX3pvb20uZGF0YXBvczt2YXIgej14Lnpvb21DYW52YXMuX2N0eC5jYW52YXMuaGVpZ2h0O3ZhciBxPXguem9vbUNhbnZhcy5fY3R4LmNhbnZhcy53aWR0aDt2YXIgdz12LmF4ZXM7aWYoeC5jb25zdHJhaW5PdXRzaWRlWm9vbSYmIXgub25HcmlkKXtpZih1PDApe3U9MH1lbHNle2lmKHU+cSl7dT1xfX1pZihyPDApe3I9MH1lbHNle2lmKHI+eil7cj16fX1mb3IodmFyIHMgaW4gdCl7aWYodFtzXSl7aWYocy5jaGFyQXQoMCk9PSJ4Iil7dFtzXT13W3NdLnNlcmllc19wMnUodSl9ZWxzZXt0W3NdPXdbc10uc2VyaWVzX3AydShyKX19fX1pZih4LmNvbnN0cmFpblpvb21Ubz09IngiKXtyPXp9ZWxzZXtpZih4LmNvbnN0cmFpblpvb21Ubz09InkiKXt1PXF9fXguX3pvb20uZW5kPVt1LHJdO3guX3pvb20uZ3JpZHBvcz17eDp1LHk6cn07eC5kb1pvb20oeC5fem9vbS5ncmlkcG9zLHQsdix4KX14Ll96b29tLnN0YXJ0ZWQ9ZmFsc2U7eC5fem9vbS56b29taW5nPWZhbHNlO2ooZG9jdW1lbnQpLnVuYmluZCgibW91c2Vtb3ZlLmpxcGxvdEN1cnNvciIsaCk7aWYoZG9jdW1lbnQub25zZWxlY3RzdGFydCE9dW5kZWZpbmVkJiZ4Ll9vbGRIYW5kbGVycy5vbnNlbGVjdHN0YXJ0IT1udWxsKXtkb2N1bWVudC5vbnNlbGVjdHN0YXJ0PXguX29sZEhhbmRsZXJzLm9uc2VsZWN0c3RhcnQ7eC5fb2xkSGFuZGxlcnMub25zZWxlY3RzdGFydD1udWxsfWlmKGRvY3VtZW50Lm9uZHJhZyE9dW5kZWZpbmVkJiZ4Ll9vbGRIYW5kbGVycy5vbmRyYWchPW51bGwpe2RvY3VtZW50Lm9uZHJhZz14Ll9vbGRIYW5kbGVycy5vbmRyYWc7eC5fb2xkSGFuZGxlcnMub25kcmFnPW51bGx9aWYoZG9jdW1lbnQub25tb3VzZWRvd24hPXVuZGVmaW5lZCYmeC5fb2xkSGFuZGxlcnMub25tb3VzZWRvd24hPW51bGwpe2RvY3VtZW50Lm9ubW91c2Vkb3duPXguX29sZEhhbmRsZXJzLm9ubW91c2Vkb3duO3guX29sZEhhbmRsZXJzLm9ubW91c2Vkb3duPW51bGx9fWZ1bmN0aW9uIGwoKXt2YXIgeT10aGlzLl96b29tLnN0YXJ0O3ZhciB1PXRoaXMuX3pvb20uZW5kO3ZhciBzPXRoaXMuem9vbUNhbnZhcy5fY3R4O3ZhciByLHYseCxxO2lmKHVbMF0+eVswXSl7cj15WzBdO3E9dVswXS15WzBdfWVsc2V7cj11WzBdO3E9eVswXS11WzBdfWlmKHVbMV0+eVsxXSl7dj15WzFdO3g9dVsxXS15WzFdfWVsc2V7dj11WzFdO3g9eVsxXS11WzFdfXMuZmlsbFN0eWxlPSJyZ2JhKDAsMCwwLDAuMikiO3Muc3Ryb2tlU3R5bGU9IiM5OTk5OTkiO3MubGluZVdpZHRoPTE7cy5jbGVhclJlY3QoMCwwLHMuY2FudmFzLndpZHRoLHMuY2FudmFzLmhlaWdodCk7cy5maWxsUmVjdCgwLDAscy5jYW52YXMud2lkdGgscy5jYW52YXMuaGVpZ2h0KTtzLmNsZWFyUmVjdChyLHYscSx4KTtzLnN0cm9rZVJlY3Qocix2LHEseCk7cz1udWxsfWouanFwbG90LkN1cnNvckxlZ2VuZFJlbmRlcmVyPWZ1bmN0aW9uKHEpe2ouanFwbG90LlRhYmxlTGVnZW5kUmVuZGVyZXIuY2FsbCh0aGlzLHEpO3RoaXMuZm9ybWF0U3RyaW5nPSIlcyJ9O2ouanFwbG90LkN1cnNvckxlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZT1uZXcgai5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlcigpO2ouanFwbG90LkN1cnNvckxlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1qLmpxcGxvdC5DdXJzb3JMZWdlbmRSZW5kZXJlcjtqLmpxcGxvdC5DdXJzb3JMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2lmKHRoaXMuX2VsZW0pe3RoaXMuX2VsZW0uZW1wdHlGb3JjZSgpO3RoaXMuX2VsZW09bnVsbH1pZih0aGlzLnNob3cpe3ZhciB3PXRoaXMuX3NlcmllcyxBO3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7dGhpcy5fZWxlbT1qKHIpO3I9bnVsbDt0aGlzLl9lbGVtLmFkZENsYXNzKCJqcXBsb3QtbGVnZW5kIGpxcGxvdC1jdXJzb3ItbGVnZW5kIik7dGhpcy5fZWxlbS5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKTt2YXIgcT1mYWxzZTtmb3IodmFyIHg9MDt4PHcubGVuZ3RoO3grKyl7QT13W3hdO2lmKEEuc2hvdyYmQS5zaG93TGFiZWwpe3ZhciB2PWouanFwbG90LnNwcmludGYodGhpcy5mb3JtYXRTdHJpbmcsQS5sYWJlbC50b1N0cmluZygpKTtpZih2KXt2YXIgdD1BLmNvbG9yO2lmKEEuX3N0YWNrJiYhQS5maWxsKXt0PSIifXouY2FsbCh0aGlzLHYsdCxxLHgpO3E9dHJ1ZX1mb3IodmFyIHU9MDt1PGouanFwbG90LmFkZExlZ2VuZFJvd0hvb2tzLmxlbmd0aDt1Kyspe3ZhciB5PWouanFwbG90LmFkZExlZ2VuZFJvd0hvb2tzW3VdLmNhbGwodGhpcyxBKTtpZih5KXt6LmNhbGwodGhpcyx5LmxhYmVsLHkuY29sb3IscSk7cT10cnVlfX19fXc9QT1udWxsO2RlbGV0ZSB3O2RlbGV0ZSBBfWZ1bmN0aW9uIHooRCxDLEYscyl7dmFyIEI9KEYpP3RoaXMucm93U3BhY2luZzoiMCI7dmFyIEU9aignPHRyIGNsYXNzPSJqcXBsb3QtbGVnZW5kIGpxcGxvdC1jdXJzb3ItbGVnZW5kIj48L3RyPicpLmFwcGVuZFRvKHRoaXMuX2VsZW0pO0UuZGF0YSgic2VyaWVzSW5kZXgiLHMpO2ooJzx0ZCBjbGFzcz0ianFwbG90LWxlZ2VuZCBqcXBsb3QtY3Vyc29yLWxlZ2VuZC1zd2F0Y2giIHN0eWxlPSJwYWRkaW5nLXRvcDonK0IrJzsiPjxkaXYgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2NjY2NjYztwYWRkaW5nOjAuMmVtOyI+PGRpdiBjbGFzcz0ianFwbG90LWN1cnNvci1sZWdlbmQtc3dhdGNoIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjonK0MrJzsiPjwvZGl2PjwvZGl2PjwvdGQ+JykuYXBwZW5kVG8oRSk7dmFyIEc9aignPHRkIGNsYXNzPSJqcXBsb3QtbGVnZW5kIGpxcGxvdC1jdXJzb3ItbGVnZW5kLWxhYmVsIiBzdHlsZT0idmVydGljYWwtYWxpZ246bWlkZGxlO3BhZGRpbmctdG9wOicrQisnOyI+PC90ZD4nKTtHLmFwcGVuZFRvKEUpO0cuZGF0YSgic2VyaWVzSW5kZXgiLHMpO2lmKHRoaXMuZXNjYXBlSHRtbCl7Ry50ZXh0KEQpfWVsc2V7Ry5odG1sKEQpfUU9bnVsbDtHPW51bGx9cmV0dXJuIHRoaXMuX2VsZW19fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.dateAxisRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgeyAgCiAgICAvKioKICAgICAqIENsYXNzOiAkLmpxcGxvdC5EYXRlQXhpc1JlbmRlcmVyCiAgICAgKiBBIHBsdWdpbiBmb3IgYSBqcVBsb3QgdG8gcmVuZGVyIGFuIGF4aXMgYXMgYSBzZXJpZXMgb2YgZGF0ZSB2YWx1ZXMuCiAgICAgKiBUaGlzIHJlbmRlcmVyIGhhcyBubyBvcHRpb25zIGJleW9uZCB0aG9zZSBzdXBwbGllZCBieSB0aGUgPEF4aXM+IGNsYXNzLgogICAgICogSXQgc3VwcGxpZXMgaXRzIG93biB0aWNrIGZvcm1hdHRlciwgc28gdGhlIHRpY2tPcHRpb25zLmZvcm1hdHRlciBvcHRpb24KICAgICAqIHNob3VsZCBub3QgYmUgb3ZlcnJpZGRlbi4KICAgICAqIAogICAgICogVGhhbmtzIHRvIEtlbiBTeW5kZXIgZm9yIGhpcyBlbmhhbmNlZCBEYXRlIGluc3RhbmNlIG1ldGhvZHMgd2hpY2ggYXJlCiAgICAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgY29kZSA8aHR0cDovL2tlbmRzbnlkZXIuY29tL3NhbmRib3gvZGF0ZS8+LgogICAgICogCiAgICAgKiBUbyB1c2UgdGhpcyByZW5kZXJlciwgaW5jbHVkZSB0aGUgcGx1Z2luIGluIHlvdXIgc291cmNlCiAgICAgKiA+IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSJwbHVnaW5zL2pxcGxvdC5kYXRlQXhpc1JlbmRlcmVyLmpzIj48L3NjcmlwdD4KICAgICAqIAogICAgICogYW5kIHN1cHBseSB0aGUgYXBwcm9wcmlhdGUgb3B0aW9ucyB0byB5b3VyIHBsb3QKICAgICAqIAogICAgICogPiB7YXhlczp7eGF4aXM6e3JlbmRlcmVyOiQuanFwbG90LkRhdGVBeGlzUmVuZGVyZXJ9fX0KICAgICAqIAogICAgICogRGF0ZXMgY2FuIGJlIHBhc3NlZCBpbnRvIHRoZSBheGlzIGluIGFsbW9zdCBhbnkgcmVjb2duaXphYmxlIHZhbHVlIGFuZCAKICAgICAqIHdpbGwgYmUgcGFyc2VkLiAgVGhleSB3aWxsIGJlIHJlbmRlcmVkIG9uIHRoZSBheGlzIGluIHRoZSBmb3JtYXQKICAgICAqIHNwZWNpZmllZCBieSB0aWNrT3B0aW9ucy5mb3JtYXRTdHJpbmcuICBlLmcuIHRpY2tPcHRpb25zLmZvcm1hdFN0cmluZyA9ICclWS0lbS0lZCcuCiAgICAgKiAKICAgICAqIEFjY2VjcHRhYmxlIGZvcm1hdCBjb2RlcyAKICAgICAqIGFyZToKICAgICAqIAogICAgICogPiBDb2RlICAgIFJlc3VsdCAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uCiAgICAgKiA+ICAgICAgICAgICAgID09IFllYXJzID09CiAgICAgKiA+ICVZICAgICAgMjAwOCAgICAgICAgICAgICAgICBGb3VyLWRpZ2l0IHllYXIKICAgICAqID4gJXkgICAgICAwOCAgICAgICAgICAgICAgICAgIFR3by1kaWdpdCB5ZWFyCiAgICAgKiA+ICAgICAgICAgICAgID09IE1vbnRocyA9PQogICAgICogPiAlbSAgICAgIDA5ICAgICAgICAgICAgICAgICAgVHdvLWRpZ2l0IG1vbnRoCiAgICAgKiA+ICUjbSAgICAgOSAgICAgICAgICAgICAgICAgICBPbmUgb3IgdHdvLWRpZ2l0IG1vbnRoCiAgICAgKiA+ICVCICAgICAgU2VwdGVtYmVyICAgICAgICAgICBGdWxsIG1vbnRoIG5hbWUKICAgICAqID4gJWIgICAgICBTZXAgICAgICAgICAgICAgICAgIEFiYnJldmlhdGVkIG1vbnRoIG5hbWUKICAgICAqID4gICAgICAgICAgICAgPT0gRGF5cyA9PQogICAgICogPiAlZCAgICAgIDA1ICAgICAgICAgICAgICAgICAgVHdvLWRpZ2l0IGRheSBvZiBtb250aAogICAgICogPiAlI2QgICAgIDUgICAgICAgICAgICAgICAgICAgT25lIG9yIHR3by1kaWdpdCBkYXkgb2YgbW9udGgKICAgICAqID4gJWUgICAgICA1ICAgICAgICAgICAgICAgICAgIE9uZSBvciB0d28tZGlnaXQgZGF5IG9mIG1vbnRoCiAgICAgKiA+ICVBICAgICAgU3VuZGF5ICAgICAgICAgICAgICBGdWxsIG5hbWUgb2YgdGhlIGRheSBvZiB0aGUgd2VlawogICAgICogPiAlYSAgICAgIFN1biAgICAgICAgICAgICAgICAgQWJicmV2aWF0ZWQgbmFtZSBvZiB0aGUgZGF5IG9mIHRoZSB3ZWVrCiAgICAgKiA+ICV3ICAgICAgMCAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgdGhlIGRheSBvZiB0aGUgd2VlayAoMCA9IFN1bmRheSwgNiA9IFNhdHVyZGF5KQogICAgICogPiAlbyAgICAgIHRoICAgICAgICAgICAgICAgICAgVGhlIG9yZGluYWwgc3VmZml4IHN0cmluZyBmb2xsb3dpbmcgdGhlIGRheSBvZiB0aGUgbW9udGgKICAgICAqID4gICAgICAgICAgICAgPT0gSG91cnMgPT0KICAgICAqID4gJUggICAgICAyMyAgICAgICAgICAgICAgICAgIEhvdXJzIGluIDI0LWhvdXIgZm9ybWF0ICh0d28gZGlnaXRzKQogICAgICogPiAlI0ggICAgIDMgICAgICAgICAgICAgICAgICAgSG91cnMgaW4gMjQtaG91ciBpbnRlZ2VyIGZvcm1hdCAob25lIG9yIHR3byBkaWdpdHMpCiAgICAgKiA+ICVJICAgICAgMTEgICAgICAgICAgICAgICAgICBIb3VycyBpbiAxMi1ob3VyIGZvcm1hdCAodHdvIGRpZ2l0cykKICAgICAqID4gJSNJICAgICAzICAgICAgICAgICAgICAgICAgIEhvdXJzIGluIDEyLWhvdXIgaW50ZWdlciBmb3JtYXQgKG9uZSBvciB0d28gZGlnaXRzKQogICAgICogPiAlcCAgICAgIFBNICAgICAgICAgICAgICAgICAgQU0gb3IgUE0KICAgICAqID4gICAgICAgICAgICAgPT0gTWludXRlcyA9PQogICAgICogPiAlTSAgICAgIDA5ICAgICAgICAgICAgICAgICAgTWludXRlcyAodHdvIGRpZ2l0cykKICAgICAqID4gJSNNICAgICA5ICAgICAgICAgICAgICAgICAgIE1pbnV0ZXMgKG9uZSBvciB0d28gZGlnaXRzKQogICAgICogPiAgICAgICAgICAgICA9PSBTZWNvbmRzID09CiAgICAgKiA+ICVTICAgICAgMDIgICAgICAgICAgICAgICAgICBTZWNvbmRzICh0d28gZGlnaXRzKQogICAgICogPiAlI1MgICAgIDIgICAgICAgICAgICAgICAgICAgU2Vjb25kcyAob25lIG9yIHR3byBkaWdpdHMpCiAgICAgKiA+ICVzICAgICAgMTIwNjU2NzYyNTcyMyAgICAgICBVbml4IHRpbWVzdGFtcCAoU2Vjb25kcyBwYXN0IDE5NzAtMDEtMDEgMDA6MDA6MDApCiAgICAgKiA+ICAgICAgICAgICAgID09IE1pbGxpc2Vjb25kcyA9PQogICAgICogPiAlTiAgICAgIDAwOCAgICAgICAgICAgICAgICAgTWlsbGlzZWNvbmRzICh0aHJlZSBkaWdpdHMpCiAgICAgKiA+ICUjTiAgICAgOCAgICAgICAgICAgICAgICAgICBNaWxsaXNlY29uZHMgKG9uZSB0byB0aHJlZSBkaWdpdHMpCiAgICAgKiA+ICAgICAgICAgICAgID09IFRpbWV6b25lID09CiAgICAgKiA+ICVPICAgICAgMzYwICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlIGluIG1pbnV0ZXMgYmV0d2VlbiBsb2NhbCB0aW1lIGFuZCBHTVQKICAgICAqID4gJVogICAgICBNb3VudGFpbiBTdGFuZGFyZCBUaW1lICBOYW1lIG9mIHRpbWV6b25lIGFzIHJlcG9ydGVkIGJ5IGJyb3dzZXIKICAgICAqID4gJUcgICAgICAtMDY6MDAgICAgICAgICAgICAgIEhvdXJzIGFuZCBtaW51dGVzIGJldHdlZW4gR01UCiAgICAgKiA+ICAgICAgICAgICAgID09IFNob3J0Y3V0cyA9PQogICAgICogPiAlRiAgICAgIDIwMDgtMDMtMjYgICAgICAgICAgJVktJW0tJWQKICAgICAqID4gJVQgICAgICAwNTowNjozMCAgICAgICAgICAgICVIOiVNOiVTCiAgICAgKiA+ICVYICAgICAgMDU6MDY6MzAgICAgICAgICAgICAlSDolTTolUwogICAgICogPiAleCAgICAgIDAzLzI2LzA4ICAgICAgICAgICAgJW0vJWQvJXkKICAgICAqID4gJUQgICAgICAwMy8yNi8wOCAgICAgICAgICAgICVtLyVkLyV5CiAgICAgKiA+ICUjYyAgICAgV2VkIE1hciAyNiAxNTozMTowMCAyMDA4ICAlYSAlYiAlZSAlSDolTTolUyAlWQogICAgICogPiAldiAgICAgIDMtU2VwLTIwMDggICAgICAgICAgJWUtJWItJVkKICAgICAqID4gJVIgICAgICAxNTozMSAgICAgICAgICAgICAgICVIOiVNCiAgICAgKiA+ICVyICAgICAgMzozMTowMCBQTSAgICAgICAgICAlSTolTTolUyAlcAogICAgICogPiAgICAgICAgICAgICA9PSBDaGFyYWN0ZXJzID09CiAgICAgKiA+ICVuICAgICAgXG4gICAgICAgICAgICAgICAgICBOZXdsaW5lCiAgICAgKiA+ICV0ICAgICAgXHQgICAgICAgICAgICAgICAgICBUYWIKICAgICAqID4gJSUgICAgICAlICAgICAgICAgICAgICAgICAgIFBlcmNlbnQgU3ltYm9sIAogICAgICovCiAgICAkLmpxcGxvdC5EYXRlQXhpc1JlbmRlcmVyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgJC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyLmNhbGwodGhpcyk7CiAgICAgICAgdGhpcy5kYXRlID0gbmV3ICQuanNEYXRlKCk7CiAgICB9OwoKICAgIHZhciBzZWNvbmQgPSAxMDAwOwogICAgdmFyIG1pbnV0ZSA9IDYwICogc2Vjb25kOwogICAgdmFyIGhvdXIgPSA2MCAqIG1pbnV0ZTsKICAgIHZhciBkYXkgPSAyNCAqIGhvdXI7CiAgICB2YXIgd2VlayA9IDcgKiBkYXk7CgogICAgLy8gdGhlc2UgYXJlIGxlc3MgZGVmaW5pdGl2ZQogICAgdmFyIG1vbnRoID0gMzAuNDM2ODQ5OSAqIGRheTsKICAgIHZhciB5ZWFyID0gMzY1LjI0MjE5OSAqIGRheTsKCiAgICB2YXIgZGF5c0luTW9udGhzID0gWzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMwLDMxLDMwLDMxLDMwXTsKICAgIC8vIGFycmF5IG9mIGNvbnNpc3RlbnQgbmljZSBpbnRlcnZhbHMuICBMb25nZXIgaW50ZXJ2YWxzCiAgICAvLyB3aWxsIGRlcGVuZCBvbiBkYXlzIGluIG1vbnRoLCBkYXlzIGluIHllYXIsIGV0Yy4KICAgIHZhciBuaWNlRm9ybWF0U3RyaW5ncyA9IFsnJU06JVMuJSNOJywgJyVNOiVTLiUjTicsICclTTolUy4lI04nLCAnJU06JVMnLCAnJU06JVMnLCAnJU06JVMnLCAnJU06JVMnLCAnJUg6JU06JVMnLCAnJUg6JU06JVMnLCAnJUg6JU0nLCAnJUg6JU0nLCAnJUg6JU0nLCAnJUg6JU0nLCAnJUg6JU0nLCAnJUg6JU0nLCAnJWEgJUg6JU0nLCAnJWEgJUg6JU0nLCAnJWIgJWUgJUg6JU0nLCAnJWIgJWUgJUg6JU0nLCAnJWIgJWUgJUg6JU0nLCAnJWIgJWUgJUg6JU0nLCAnJXYnLCAnJXYnLCAnJXYnLCAnJXYnLCAnJXYnLCAnJXYnLCAnJXYnXTsKICAgIHZhciBuaWNlSW50ZXJ2YWxzID0gWzAuMSpzZWNvbmQsIDAuMipzZWNvbmQsIDAuNSpzZWNvbmQsIHNlY29uZCwgMipzZWNvbmQsIDUqc2Vjb25kLCAxMCpzZWNvbmQsIDE1KnNlY29uZCwgMzAqc2Vjb25kLCBtaW51dGUsIDIqbWludXRlLCA1Km1pbnV0ZSwgMTAqbWludXRlLCAxNSptaW51dGUsIDMwKm1pbnV0ZSwgaG91ciwgMipob3VyLCA0KmhvdXIsIDYqaG91ciwgOCpob3VyLCAxMipob3VyLCBkYXksIDIqZGF5LCAzKmRheSwgNCpkYXksIDUqZGF5LCB3ZWVrLCAyKndlZWtdOwoKICAgIHZhciBuaWNlTW9udGhseUludGVydmFscyA9IFtdOwoKICAgIGZ1bmN0aW9uIGJlc3REYXRlSW50ZXJ2YWwobWluLCBtYXgsIHRpdGFyZ2V0KSB7CiAgICAgICAgLy8gaXRlcmF0ZSB0aHJvdWdoIG5pY2VJbnRlcnZhbHMgdG8gZmluZCBvbmUgY2xvc2VzdCB0byB0aXRhcmdldAogICAgICAgIHZhciBiYWRuZXNzID0gTnVtYmVyLk1BWF9WQUxVRTsKICAgICAgICB2YXIgdGVtcCwgYmVzdFRpLCBiZXN0Zm10OwogICAgICAgIGZvciAodmFyIGk9MCwgbD1uaWNlSW50ZXJ2YWxzLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICB0ZW1wID0gTWF0aC5hYnModGl0YXJnZXQgLSBuaWNlSW50ZXJ2YWxzW2ldKTsKICAgICAgICAgICAgaWYgKHRlbXAgPCBiYWRuZXNzKSB7CiAgICAgICAgICAgICAgICBiYWRuZXNzID0gdGVtcDsKICAgICAgICAgICAgICAgIGJlc3RUaSA9IG5pY2VJbnRlcnZhbHNbaV07CiAgICAgICAgICAgICAgICBiZXN0Zm10ID0gbmljZUZvcm1hdFN0cmluZ3NbaV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBbYmVzdFRpLCBiZXN0Zm10XTsKICAgIH0KICAgIAogICAgJC5qcXBsb3QuRGF0ZUF4aXNSZW5kZXJlci5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyKCk7CiAgICAkLmpxcGxvdC5EYXRlQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90LkRhdGVBeGlzUmVuZGVyZXI7CiAgICAKICAgICQuanFwbG90LkRhdGVUaWNrRm9ybWF0dGVyID0gZnVuY3Rpb24oZm9ybWF0LCB2YWwpIHsKICAgICAgICBpZiAoIWZvcm1hdCkgewogICAgICAgICAgICBmb3JtYXQgPSAnJVkvJW0vJWQnOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJC5qc0RhdGUuc3RyZnRpbWUodmFsLCBmb3JtYXQpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRGF0ZUF4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpewogICAgICAgIC8vIHByb3A6IHRpY2tSZW5kZXJlcgogICAgICAgIC8vIEEgY2xhc3Mgb2YgYSByZW5kZXJpbmcgZW5naW5lIGZvciBjcmVhdGluZyB0aGUgdGlja3MgbGFiZWxzIGRpc3BsYXllZCBvbiB0aGUgcGxvdCwgCiAgICAgICAgLy8gU2VlIDwkLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyPi4KICAgICAgICAvLyB0aGlzLnRpY2tSZW5kZXJlciA9ICQuanFwbG90LkF4aXNUaWNrUmVuZGVyZXI7CiAgICAgICAgLy8gdGhpcy5sYWJlbFJlbmRlcmVyID0gJC5qcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXI7CiAgICAgICAgdGhpcy50aWNrT3B0aW9ucy5mb3JtYXR0ZXIgPSAkLmpxcGxvdC5EYXRlVGlja0Zvcm1hdHRlcjsKICAgICAgICAvLyBwcm9wOiB0aWNrSW5zZXQKICAgICAgICAvLyBDb250cm9scyB0aGUgYW1vdW50IHRvIGluc2V0IHRoZSBmaXJzdCBhbmQgbGFzdCB0aWNrcyBmcm9tIAogICAgICAgIC8vIHRoZSBlZGdlcyBvZiB0aGUgZ3JpZCwgaW4gbXVsdGlwbGVzIG9mIHRoZSB0aWNrIGludGVydmFsLgogICAgICAgIC8vIDAgaXMgbm8gaW5zZXQsIDAuNSBpcyBvbmUgaGFsZiBhIHRpY2sgaW50ZXJ2YWwsIDEgaXMgYSBmdWxsCiAgICAgICAgLy8gdGljayBpbnRlcnZhbCwgZXRjLgogICAgICAgIHRoaXMudGlja0luc2V0ID0gMDsKICAgICAgICAvLyBwcm9wOiBkcmF3QmFzZWxpbmUKICAgICAgICAvLyBUcnVlIHRvIGRyYXcgdGhlIGF4aXMgYmFzZWxpbmUuCiAgICAgICAgdGhpcy5kcmF3QmFzZWxpbmUgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IGJhc2VsaW5lV2lkdGgKICAgICAgICAvLyB3aWR0aCBvZiB0aGUgYmFzZWxpbmUgaW4gcGl4ZWxzLgogICAgICAgIHRoaXMuYmFzZWxpbmVXaWR0aCA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogYmFzZWxpbmVDb2xvcgogICAgICAgIC8vIENTUyBjb2xvciBzcGVjIGZvciB0aGUgYmFzZWxpbmUuCiAgICAgICAgdGhpcy5iYXNlbGluZUNvbG9yID0gbnVsbDsKICAgICAgICB0aGlzLmRhVGlja0ludGVydmFsID0gbnVsbDsKICAgICAgICB0aGlzLl9kYVRpY2tJbnRlcnZhbCA9IG51bGw7CiAgICAgICAgCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CiAgICAgICAgCiAgICAgICAgdmFyIGRiID0gdGhpcy5fZGF0YUJvdW5kcywKICAgICAgICAgICAgc3RhdHMsIAogICAgICAgICAgICBzdW0sCiAgICAgICAgICAgIHMsCiAgICAgICAgICAgIGQsCiAgICAgICAgICAgIHBkLAogICAgICAgICAgICBzZCwKICAgICAgICAgICAgaW50djsKICAgICAgICAKICAgICAgICAvLyBHbyB0aHJvdWdoIGFsbCB0aGUgc2VyaWVzIGF0dGFjaGVkIHRvIHRoaXMgYXhpcyBhbmQgZmluZAogICAgICAgIC8vIHRoZSBtaW4vbWF4IGJvdW5kcyBmb3IgdGhpcyBheGlzLgogICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLl9zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgc3RhdHMgPSB7aW50ZXJ2YWxzOltdLCBmcmVxdWVuY2llczp7fSwgc29ydGVkSW50ZXJ2YWxzOltdLCBtaW46bnVsbCwgbWF4Om51bGwsIG1lYW46bnVsbH07CiAgICAgICAgICAgIHN1bSA9IDA7CiAgICAgICAgICAgIHMgPSB0aGlzLl9zZXJpZXNbaV07CiAgICAgICAgICAgIGQgPSBzLmRhdGE7CiAgICAgICAgICAgIHBkID0gcy5fcGxvdERhdGE7CiAgICAgICAgICAgIHNkID0gcy5fc3RhY2tEYXRhOwogICAgICAgICAgICBpbnR2ID0gMDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajxkLmxlbmd0aDsgaisrKSB7IAogICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneGF4aXMnIHx8IHRoaXMubmFtZSA9PSAneDJheGlzJykgewogICAgICAgICAgICAgICAgICAgIGRbal1bMF0gPSBuZXcgJC5qc0RhdGUoZFtqXVswXSkuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgICAgIHBkW2pdWzBdID0gbmV3ICQuanNEYXRlKGRbal1bMF0pLmdldFRpbWUoKTsKICAgICAgICAgICAgICAgICAgICBzZFtqXVswXSA9IG5ldyAkLmpzRGF0ZShkW2pdWzBdKS5nZXRUaW1lKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKChkW2pdWzBdICE9IG51bGwgJiYgZFtqXVswXSA8IGRiLm1pbikgfHwgZGIubWluID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGIubWluID0gZFtqXVswXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKChkW2pdWzBdICE9IG51bGwgJiYgZFtqXVswXSA+IGRiLm1heCkgfHwgZGIubWF4ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGIubWF4ID0gZFtqXVswXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGo+MCkgewogICAgICAgICAgICAgICAgICAgICAgICBpbnR2ID0gTWF0aC5hYnMoZFtqXVswXSAtIGRbai0xXVswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLmludGVydmFscy5wdXNoKGludHYpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuZnJlcXVlbmNpZXMuaGFzT3duUHJvcGVydHkoaW50dikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLmZyZXF1ZW5jaWVzW2ludHZdICs9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0cy5mcmVxdWVuY2llc1tpbnR2XSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3VtICs9IGludHY7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGRbal1bMV0gPSBuZXcgJC5qc0RhdGUoZFtqXVsxXSkuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgICAgIHBkW2pdWzFdID0gbmV3ICQuanNEYXRlKGRbal1bMV0pLmdldFRpbWUoKTsKICAgICAgICAgICAgICAgICAgICBzZFtqXVsxXSA9IG5ldyAkLmpzRGF0ZShkW2pdWzFdKS5nZXRUaW1lKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKChkW2pdWzFdICE9IG51bGwgJiYgZFtqXVsxXSA8IGRiLm1pbikgfHwgZGIubWluID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGIubWluID0gZFtqXVsxXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKChkW2pdWzFdICE9IG51bGwgJiYgZFtqXVsxXSA+IGRiLm1heCkgfHwgZGIubWF4ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGIubWF4ID0gZFtqXVsxXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGo+MCkgewogICAgICAgICAgICAgICAgICAgICAgICBpbnR2ID0gTWF0aC5hYnMoZFtqXVsxXSAtIGRbai0xXVsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLmludGVydmFscy5wdXNoKGludHYpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuZnJlcXVlbmNpZXMuaGFzT3duUHJvcGVydHkoaW50dikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLmZyZXF1ZW5jaWVzW2ludHZdICs9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0cy5mcmVxdWVuY2llc1tpbnR2XSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdW0gKz0gaW50djsgICAgICAgICAgICAgIAogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAocy5yZW5kZXJlci5iYW5kcykgewogICAgICAgICAgICAgICAgaWYgKHMucmVuZGVyZXIuYmFuZHMuaGlEYXRhLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHZhciBiZCA9IHMucmVuZGVyZXIuYmFuZHMuaGlEYXRhOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MCwgbD1iZC5sZW5ndGg7IGogPCBsOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT09ICd4MmF4aXMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZFtqXVswXSA9IG5ldyAkLmpzRGF0ZShiZFtqXVswXSkuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiZFtqXVswXSAhPSBudWxsICYmIGJkW2pdWzBdID4gZGIubWF4KSB8fCBkYi5tYXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLm1heCA9IGJkW2pdWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZFtqXVsxXSA9IG5ldyAkLmpzRGF0ZShiZFtqXVsxXSkuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiZFtqXVsxXSAhPSBudWxsICYmIGJkW2pdWzFdID4gZGIubWF4KSB8fCBkYi5tYXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLm1heCA9IGJkW2pdWzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHMucmVuZGVyZXIuYmFuZHMubG93RGF0YS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYmQgPSBzLnJlbmRlcmVyLmJhbmRzLmxvd0RhdGE7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wLCBsPWJkLmxlbmd0aDsgaiA8IGw7IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lID09PSAneGF4aXMnIHx8IHRoaXMubmFtZSA9PT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJkW2pdWzBdID0gbmV3ICQuanNEYXRlKGJkW2pdWzBdKS5nZXRUaW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGJkW2pdWzBdICE9IG51bGwgJiYgYmRbal1bMF0gPCBkYi5taW4pIHx8IGRiLm1pbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGIubWluID0gYmRbal1bMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmRbal1bMV0gPSBuZXcgJC5qc0RhdGUoYmRbal1bMV0pLmdldFRpbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYmRbal1bMV0gIT0gbnVsbCAmJiBiZFtqXVsxXSA8IGRiLm1pbikgfHwgZGIubWluID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYi5taW4gPSBiZFtqXVsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHRlbXBmID0gMCwKICAgICAgICAgICAgICAgIHRlbXBuPTA7CiAgICAgICAgICAgIGZvciAodmFyIG4gaW4gc3RhdHMuZnJlcXVlbmNpZXMpIHsKICAgICAgICAgICAgICAgIHN0YXRzLnNvcnRlZEludGVydmFscy5wdXNoKHtpbnRlcnZhbDpuLCBmcmVxdWVuY3k6c3RhdHMuZnJlcXVlbmNpZXNbbl19KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdGF0cy5zb3J0ZWRJbnRlcnZhbHMuc29ydChmdW5jdGlvbihhLCBiKXsKICAgICAgICAgICAgICAgIHJldHVybiBiLmZyZXF1ZW5jeSAtIGEuZnJlcXVlbmN5OwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHN0YXRzLm1pbiA9ICQuanFwbG90LmFycmF5TWluKHN0YXRzLmludGVydmFscyk7CiAgICAgICAgICAgIHN0YXRzLm1heCA9ICQuanFwbG90LmFycmF5TWF4KHN0YXRzLmludGVydmFscyk7CiAgICAgICAgICAgIHN0YXRzLm1lYW4gPSBzdW0vZC5sZW5ndGg7CiAgICAgICAgICAgIHRoaXMuX2ludGVydmFsU3RhdHMucHVzaChzdGF0cyk7CiAgICAgICAgICAgIHN0YXRzID0gc3VtID0gcyA9IGQgPSBwZCA9IHNkID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgZGIgPSBudWxsOwogICAgICAgIAogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgYW4gYXhpcwogICAgJC5qcXBsb3QuRGF0ZUF4aXNSZW5kZXJlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLm1pbiA9IHRoaXMuX29wdGlvbnMubWluOwogICAgICAgIHRoaXMubWF4ID0gdGhpcy5fb3B0aW9ucy5tYXg7CiAgICAgICAgdGhpcy50aWNrSW50ZXJ2YWwgPSB0aGlzLl9vcHRpb25zLnRpY2tJbnRlcnZhbDsKICAgICAgICB0aGlzLm51bWJlclRpY2tzID0gdGhpcy5fb3B0aW9ucy5udW1iZXJUaWNrczsKICAgICAgICB0aGlzLl9hdXRvRm9ybWF0U3RyaW5nID0gJyc7CiAgICAgICAgaWYgKHRoaXMuX292ZXJyaWRlRm9ybWF0U3RyaW5nICYmIHRoaXMudGlja09wdGlvbnMgJiYgdGhpcy50aWNrT3B0aW9ucy5mb3JtYXRTdHJpbmcpIHsKICAgICAgICAgICAgdGhpcy50aWNrT3B0aW9ucy5mb3JtYXRTdHJpbmcgPSAnJzsKICAgICAgICB9CiAgICAgICAgdGhpcy5kYVRpY2tJbnRlcnZhbCA9IHRoaXMuX2RhVGlja0ludGVydmFsOwogICAgICAgIC8vIHRoaXMuX3RpY2tzID0gdGhpcy5fX3RpY2tzOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRGF0ZUF4aXNSZW5kZXJlci5wcm90b3R5cGUuY3JlYXRlVGlja3MgPSBmdW5jdGlvbihwbG90KSB7CiAgICAgICAgLy8gd2UncmUgYXJlIG9wZXJhdGluZyBvbiBhbiBheGlzIGhlcmUKICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl90aWNrczsKICAgICAgICB2YXIgdXNlclRpY2tzID0gdGhpcy50aWNrczsKICAgICAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTsKICAgICAgICAvLyBkYXRhYm91bmRzIHdlcmUgc2V0IG9uIGF4aXMgaW5pdGlhbGl6YXRpb24uCiAgICAgICAgdmFyIGRiID0gdGhpcy5fZGF0YUJvdW5kczsKICAgICAgICB2YXIgaXYgPSB0aGlzLl9pbnRlcnZhbFN0YXRzOwogICAgICAgIHZhciBkaW0gPSAodGhpcy5uYW1lLmNoYXJBdCgwKSA9PT0gJ3gnKSA/IHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIDogdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0OwogICAgICAgIHZhciBpbnRlcnZhbDsKICAgICAgICB2YXIgbWluLCBtYXg7CiAgICAgICAgdmFyIHBvczEsIHBvczI7CiAgICAgICAgdmFyIHR0LCBpOwogICAgICAgIHZhciB0aHJlc2hvbGQgPSAzMDsKICAgICAgICB2YXIgaW5zZXRNdWx0ID0gMTsKICAgICAgICB2YXIgZGFUaWNrSW50ZXJ2YWwgPSBudWxsOwogICAgICAgIAogICAgICAgIC8vIGlmIHVzZXIgc3BlY2lmaWVkIGEgdGljayBpbnRlcnZhbCwgY29udmVydCB0byB1c2FibGUuCiAgICAgICAgaWYgKHRoaXMudGlja0ludGVydmFsICE9IG51bGwpCiAgICAgICAgewogICAgICAgICAgICAvLyBpZiBpbnRlcnZhbCBpcyBhIG51bWJlciBvciBjYW4gYmUgY29udmVydGVkIHRvIG9uZSwgdXNlIGl0LgogICAgICAgICAgICAvLyBBc3N1bWUgaXQgaXMgaW4gU0VDT05EUyEhIQogICAgICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGlja0ludGVydmFsKSkgewogICAgICAgICAgICAgICAgZGFUaWNrSW50ZXJ2YWwgPSBbTnVtYmVyKHRoaXMudGlja0ludGVydmFsKSwgJ3NlY29uZHMnXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBlbHNlLCBwYXJzZSBvdXQgc29tZXRoaW5nIHdlIGNhbiBidWlsZCBmcm9tLgogICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy50aWNrSW50ZXJ2YWwgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IHRoaXMudGlja0ludGVydmFsLnNwbGl0KCcgJyk7CiAgICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgICAgICAgICBkYVRpY2tJbnRlcnZhbCA9IFsxLCBwYXJ0c1swXV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgICAgIGRhVGlja0ludGVydmFsID0gW3BhcnRzWzBdLCBwYXJ0c1sxXV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciB0aWNrSW50ZXJ2YWwgPSB0aGlzLnRpY2tJbnRlcnZhbDsKICAgICAgICAKICAgICAgICAvLyBpZiB3ZSBhbHJlYWR5IGhhdmUgdGlja3MsIHVzZSB0aGVtLgogICAgICAgIC8vIHRpY2tzIG11c3QgYmUgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyB2YWx1ZS4KICAgICAgICAKICAgICAgICBtaW4gPSBuZXcgJC5qc0RhdGUoKHRoaXMubWluICE9IG51bGwpID8gdGhpcy5taW4gOiBkYi5taW4pLmdldFRpbWUoKTsKICAgICAgICBtYXggPSBuZXcgJC5qc0RhdGUoKHRoaXMubWF4ICE9IG51bGwpID8gdGhpcy5tYXggOiBkYi5tYXgpLmdldFRpbWUoKTsKCiAgICAgICAgLy8gc2VlIGlmIHdlJ3JlIHpvb21pbmcuICBpZiB3ZSBhcmUsIGRvbid0IHVzZSB0aGUgbWluIGFuZCBtYXggd2UncmUgZ2l2ZW4sCiAgICAgICAgLy8gYnV0IGNvbXB1dGUgc29tZSBuaWNlIG9uZXMuICBUaGV5IHdpbGwgYmUgcmVzZXQgbGF0ZXIuCgogICAgICAgIHZhciBjdXJzb3IgPSBwbG90LnBsdWdpbnMuY3Vyc29yOwoKICAgICAgICBpZiAoY3Vyc29yICYmIGN1cnNvci5fem9vbSAmJiBjdXJzb3IuX3pvb20uem9vbWluZykgewogICAgICAgICAgICB0aGlzLm1pbiA9IG51bGw7CiAgICAgICAgICAgIHRoaXMubWF4ID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIHZhciByYW5nZSA9IG1heCAtIG1pbjsKCiAgICAgICAgaWYgKHRoaXMudGlja09wdGlvbnMgPT0gbnVsbCB8fCAhdGhpcy50aWNrT3B0aW9ucy5mb3JtYXRTdHJpbmcpIHsKICAgICAgICAgICAgdGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcgPSB0cnVlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAodXNlclRpY2tzLmxlbmd0aCkgewogICAgICAgICAgICAvLyB0aWNrcyBjb3VsZCBiZSAxRCBvciAyRCBhcnJheSBvZiBbdmFsLCB2YWwsICwsLF0gb3IgW1t2YWwsIGxhYmVsXSwgW3ZhbCwgbGFiZWxdLCAuLi5dIG9yIG1peGVkCiAgICAgICAgICAgIGZvciAoaT0wOyBpPHVzZXJUaWNrcy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICB2YXIgdXQgPSB1c2VyVGlja3NbaV07CiAgICAgICAgICAgICAgICB2YXIgdCA9IG5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTsKICAgICAgICAgICAgICAgIGlmICh1dC5jb25zdHJ1Y3RvciA9PSBBcnJheSkgewogICAgICAgICAgICAgICAgICAgIHQudmFsdWUgPSBuZXcgJC5qc0RhdGUodXRbMF0pLmdldFRpbWUoKTsKICAgICAgICAgICAgICAgICAgICB0LmxhYmVsID0gdXRbMV07CiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dUaWNrcykgewogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dMYWJlbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnNob3dUaWNrTWFya3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0LnNldFRpY2sodC52YWx1ZSwgdGhpcy5uYW1lKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl90aWNrcy5wdXNoKHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0LnZhbHVlID0gbmV3ICQuanNEYXRlKHV0KS5nZXRUaW1lKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dUaWNrcykgewogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dMYWJlbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnNob3dUaWNrTWFya3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0LnNldFRpY2sodC52YWx1ZSwgdGhpcy5uYW1lKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl90aWNrcy5wdXNoKHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSB1c2VyVGlja3MubGVuZ3RoOwogICAgICAgICAgICB0aGlzLm1pbiA9IHRoaXMuX3RpY2tzWzBdLnZhbHVlOwogICAgICAgICAgICB0aGlzLm1heCA9IHRoaXMuX3RpY2tzW3RoaXMubnVtYmVyVGlja3MtMV0udmFsdWU7CiAgICAgICAgICAgIHRoaXMuZGFUaWNrSW50ZXJ2YWwgPSBbKHRoaXMubWF4IC0gdGhpcy5taW4pIC8gKHRoaXMubnVtYmVyVGlja3MgLSAxKS8xMDAwLCAnc2Vjb25kcyddOwogICAgICAgIH0KCiAgICAgICAgLy8vLy8vLy8KICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFueSB0aWNrcyB5ZXQsIGxldCdzIG1ha2Ugc29tZSEKICAgICAgICAvLy8vLy8vLwoKICAgICAgICAvLyBzcGVjaWFsIGNhc2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBwb2ludCwgbWFrZSB0aHJlZSB0aWNrIG1hcmtzIHRvIGNlbnRlciB0aGUgcG9pbnQKICAgICAgICBlbHNlIGlmICh0aGlzLm1pbiA9PSBudWxsICYmIHRoaXMubWF4ID09IG51bGwgJiYgZGIubWluID09IGRiLm1heCkKICAgICAgICB7CiAgICAgICAgICAgICB2YXIgb25lUG9pbnRPcHRzID0gJC5leHRlbmQodHJ1ZSwge30sIHRoaXMudGlja09wdGlvbnMsIHtuYW1lOiB0aGlzLm5hbWUsIHZhbHVlOiBudWxsfSk7CiAgICAgICAgICAgICB2YXIgZGVsdGEgPSAzMDAwMDA7CiAgICAgICAgICAgICB0aGlzLm1pbiA9IGRiLm1pbiAtIGRlbHRhOwogICAgICAgICAgICAgdGhpcy5tYXggPSBkYi5tYXggKyBkZWx0YTsKICAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSAzOwoKICAgICAgICAgICAgIGZvcih2YXIgaT10aGlzLm1pbjtpPD10aGlzLm1heDtpKz0gZGVsdGEpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb25lUG9pbnRPcHRzLnZhbHVlID0gaTsKCiAgICAgICAgICAgICAgICAgdmFyIHQgPSBuZXcgdGhpcy50aWNrUmVuZGVyZXIob25lUG9pbnRPcHRzKTsKCiAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX292ZXJyaWRlRm9ybWF0U3RyaW5nICYmIHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmcgIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICB0LmZvcm1hdFN0cmluZyA9IHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmc7CiAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICB0LnNob3dMYWJlbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICBpZih0aGlzLnNob3dUaWNrcykgewogICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzWzFdLnNob3dMYWJlbCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZih0aGlzLnNob3dUaWNrTWFya3MpIHsKICAgICAgICAgICAgICAgICB0aGlzLl90aWNrc1sxXS5zaG93VGlja01hcmtzID0gdHJ1ZTsKICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIC8vIGlmIHVzZXIgc3BlY2lmaWVkIG1pbiBhbmQgbWF4IGFyZSBudWxsLCB3ZSBzZXQgdGhvc2UgdG8gbWFrZSBiZXN0IHRpY2tzLgogICAgICAgIGVsc2UgaWYgKHRoaXMubWluID09IG51bGwgJiYgdGhpcy5tYXggPT0gbnVsbCkgewoKICAgICAgICAgICAgdmFyIG9wdHMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgdGhpcy50aWNrT3B0aW9ucywge25hbWU6IHRoaXMubmFtZSwgdmFsdWU6IG51bGx9KTsKCiAgICAgICAgICAgIC8vIHdhbnQgdG8gZmluZCBhIG5pY2UgaW50ZXJ2YWwgCiAgICAgICAgICAgIHZhciBudHRhcmdldCwKICAgICAgICAgICAgICAgIHRpdGFyZ2V0OwoKICAgICAgICAgICAgLy8gaWYgbm8gdGlja0ludGVydmFsIG9yIG51bWJlclRpY2tzIG9wdGlvbnMgc3BlY2lmaWVkLCAgbWFrZSBhIGdvb2QgZ3Vlc3MuCiAgICAgICAgICAgIGlmICghdGhpcy50aWNrSW50ZXJ2YWwgJiYgIXRoaXMubnVtYmVyVGlja3MpIHsKICAgICAgICAgICAgICAgIHZhciB0ZGltID0gTWF0aC5tYXgoZGltLCB0aHJlc2hvbGQrMSk7CiAgICAgICAgICAgICAgICAvLyBob3cgbWFueSB0aWNrcyB0byBwdXQgb24gdGhlIGF4aXM/CiAgICAgICAgICAgICAgICAvLyBkYXRlIGxhYmVscyB0ZW5kIHRvIGJlIGxvbmcuICBJZiB0aWNrcyBub3Qgcm90YXRlZCwKICAgICAgICAgICAgICAgIC8vIGRvbid0IHVzZSB0b28gbWFueSBhbmQgaGF2ZSBhIGhpZ2ggc3BhY2luZyBmYWN0b3IuCiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgcm90YXRpbmcgdGlja3MsIHVzZSBhIGxvd2VyIGZhY3Rvci4KICAgICAgICAgICAgICAgIHZhciBzcGFjaW5nRmFjdG9yID0gMTE1OwogICAgICAgICAgICAgICAgaWYgKHRoaXMudGlja1JlbmRlcmVyID09PSAkLmpxcGxvdC5DYW52YXNBeGlzVGlja1JlbmRlcmVyICYmIHRoaXMudGlja09wdGlvbnMuYW5nbGUpIHsKICAgICAgICAgICAgICAgICAgICBzcGFjaW5nRmFjdG9yID0gMTE1IC0gNDAgKiBNYXRoLmFicyhNYXRoLnNpbih0aGlzLnRpY2tPcHRpb25zLmFuZ2xlLzE4MCpNYXRoLlBJKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbnR0YXJnZXQgPSAgTWF0aC5jZWlsKCh0ZGltLXRocmVzaG9sZCkvc3BhY2luZ0ZhY3RvciArIDEpOwogICAgICAgICAgICAgICAgdGl0YXJnZXQgPSAobWF4IC0gbWluKSAvIChudHRhcmdldCAtIDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aWNrSW50ZXJ2YWwgaXMgc3BlY2lmaWVkLCB3ZSdsbCB0cnkgdG8gaG9ub3IgaXQuCiAgICAgICAgICAgIC8vIE5vdCBndWFyYW50ZWVkIHRvIGdldCB0aGlzIGludGVydmFsLCBidXQgd2UnbGwgZ2V0IGFzIGNsb3NlIGFzCiAgICAgICAgICAgIC8vIHdlIGNhbi4KICAgICAgICAgICAgLy8gdGlja0ludGVydmFsIHdpbGwgYmUgdXNlZCBiZWZvcmUgbnVtYmVyVGlja3MsIHRoYXQgaXMgaWYKICAgICAgICAgICAgLy8gYm90aCBhcmUgc3BlY2lmaWVkLCBudW1iZXJUaWNrcyB3aWxsIGJlIGlnbm9yZWQuCiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudGlja0ludGVydmFsKSB7CiAgICAgICAgICAgICAgICB0aXRhcmdldCA9IG5ldyAkLmpzRGF0ZSgwKS5hZGQoZGFUaWNrSW50ZXJ2YWxbMF0sIGRhVGlja0ludGVydmFsWzFdKS5nZXRUaW1lKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGlmIG51bWJlclRpY2tzIHNwZWNpZmllZCwgdHJ5IHRvIGhvbm9yIGl0LgogICAgICAgICAgICAvLyBOb3QgZ3VhcmFudGVlZCwgYnV0IHdpbGwgdHJ5IHRvIGdldCBjbG9zZS4KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5udW1iZXJUaWNrcykgewogICAgICAgICAgICAgICAgbnR0YXJnZXQgPSB0aGlzLm51bWJlclRpY2tzOwogICAgICAgICAgICAgICAgdGl0YXJnZXQgPSAobWF4IC0gbWluKSAvIChudHRhcmdldCAtIDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB3ZSBjYW4gdXNlIGFuIGludGVydmFsIG9mIDIgd2Vla3Mgb3IgbGVzcywgcGljayBiZXN0IG9uZQogICAgICAgICAgICBpZiAodGl0YXJnZXQgPD0gMTkqZGF5KSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gYmVzdERhdGVJbnRlcnZhbChtaW4sIG1heCwgdGl0YXJnZXQpOwogICAgICAgICAgICAgICAgdmFyIHRlbXB0aSA9IHJldFswXTsKICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmcgPSByZXRbMV07CgogICAgICAgICAgICAgICAgbWluID0gbmV3ICQuanNEYXRlKG1pbik7CiAgICAgICAgICAgICAgICBtaW4gPSBNYXRoLmZsb29yKChtaW4uZ2V0VGltZSgpIC0gbWluLmdldFV0Y09mZnNldCgpKS90ZW1wdGkpICogdGVtcHRpICsgbWluLmdldFV0Y09mZnNldCgpOwoKICAgICAgICAgICAgICAgIG50dGFyZ2V0ID0gTWF0aC5jZWlsKChtYXggLSBtaW4pIC8gdGVtcHRpKSArIDE7CiAgICAgICAgICAgICAgICB0aGlzLm1pbiA9IG1pbjsKICAgICAgICAgICAgICAgIHRoaXMubWF4ID0gbWluICsgKG50dGFyZ2V0IC0gMSkgKiB0ZW1wdGk7CgogICAgICAgICAgICAgICAgLy8gaWYgbWF4IGlzIGxlc3MgdGhhbiBtYXgsIGFkZCBhbiBpbnRlcnZhbAogICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4IDwgbWF4KSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXggKz0gdGVtcHRpOwogICAgICAgICAgICAgICAgICAgIG50dGFyZ2V0ICs9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLnRpY2tJbnRlcnZhbCA9IHRlbXB0aTsKICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSBudHRhcmdldDsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8bnR0YXJnZXQ7IGkrKykgewogICAgICAgICAgICAgICAgICAgIG9wdHMudmFsdWUgPSB0aGlzLm1pbiArIGkgKiB0ZW1wdGk7CiAgICAgICAgICAgICAgICAgICAgdCA9IG5ldyB0aGlzLnRpY2tSZW5kZXJlcihvcHRzKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcgJiYgdGhpcy5fYXV0b0Zvcm1hdFN0cmluZyAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICB0LmZvcm1hdFN0cmluZyA9IHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG93VGlja3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TGFiZWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5zaG93VGlja01hcmtzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpbnNldE11bHQgPSB0aGlzLnRpY2tJbnRlcnZhbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gc2hvdWxkIHdlIHVzZSBhIG1vbnRobHkgaW50ZXJ2YWw/CiAgICAgICAgICAgIGVsc2UgaWYgKHRpdGFyZ2V0IDw9IDkgKiBtb250aCkgewoKICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmcgPSAnJXYnOwoKICAgICAgICAgICAgICAgIC8vIGhvdyBtYW55IG1vbnRocyBpbiBhbiBpbnRlcnZhbD8KICAgICAgICAgICAgICAgIHZhciBpbnR2ID0gTWF0aC5yb3VuZCh0aXRhcmdldC9tb250aCk7CiAgICAgICAgICAgICAgICBpZiAoaW50diA8IDEpIHsKICAgICAgICAgICAgICAgICAgICBpbnR2ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKGludHYgPiA2KSB7CiAgICAgICAgICAgICAgICAgICAgaW50diA9IDY7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gZmlndXJlIG91dCB0aGUgc3RhcnRpbmcgbW9udGggYW5kIGVuZGluZyBtb250aC4KICAgICAgICAgICAgICAgIHZhciBtc3RhcnQgPSBuZXcgJC5qc0RhdGUobWluKS5zZXREYXRlKDEpLnNldEhvdXJzKDAsMCwwLDApOwoKICAgICAgICAgICAgICAgIC8vIFNlZSBpZiBtYXggZW5kcyBleGFjdGx5IG9uIGEgbW9udGgKICAgICAgICAgICAgICAgIHZhciB0ZW1wbWVuZCA9IG5ldyAkLmpzRGF0ZShtYXgpOwogICAgICAgICAgICAgICAgdmFyIG1lbmQgPSBuZXcgJC5qc0RhdGUobWF4KS5zZXREYXRlKDEpLnNldEhvdXJzKDAsMCwwLDApOwoKICAgICAgICAgICAgICAgIGlmICh0ZW1wbWVuZC5nZXRUaW1lKCkgIT09IG1lbmQuZ2V0VGltZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgbWVuZCA9IG1lbmQuYWRkKDEsICdtb250aCcpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBubW9udGhzID0gbWVuZC5kaWZmKG1zdGFydCwgJ21vbnRoJyk7CgogICAgICAgICAgICAgICAgbnR0YXJnZXQgPSBNYXRoLmNlaWwobm1vbnRocy9pbnR2KSArIDE7CgogICAgICAgICAgICAgICAgdGhpcy5taW4gPSBtc3RhcnQuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgdGhpcy5tYXggPSBtc3RhcnQuY2xvbmUoKS5hZGQoKG50dGFyZ2V0IC0gMSkgKiBpbnR2LCAnbW9udGgnKS5nZXRUaW1lKCk7CiAgICAgICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0gbnR0YXJnZXQ7CgogICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPG50dGFyZ2V0OyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBvcHRzLnZhbHVlID0gbXN0YXJ0LmdldFRpbWUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMudmFsdWUgPSBtc3RhcnQuYWRkKGludHYsICdtb250aCcpLmdldFRpbWUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdCA9IG5ldyB0aGlzLnRpY2tSZW5kZXJlcihvcHRzKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcgJiYgdGhpcy5fYXV0b0Zvcm1hdFN0cmluZyAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICB0LmZvcm1hdFN0cmluZyA9IHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG93VGlja3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TGFiZWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5zaG93VGlja01hcmtzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpbnNldE11bHQgPSBpbnR2ICogbW9udGg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHVzZSB5ZWFybHkgaW50ZXJ2YWxzCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmcgPSAnJXYnOwoKICAgICAgICAgICAgICAgIC8vIGhvdyBtYW55IHllYXJzIGluIGFuIGludGVydmFsPwogICAgICAgICAgICAgICAgdmFyIGludHYgPSBNYXRoLnJvdW5kKHRpdGFyZ2V0L3llYXIpOwogICAgICAgICAgICAgICAgaWYgKGludHYgPCAxKSB7CiAgICAgICAgICAgICAgICAgICAgaW50diA9IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gZmlndXJlIG91dCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyB5ZWFycy4KICAgICAgICAgICAgICAgIHZhciBtc3RhcnQgPSBuZXcgJC5qc0RhdGUobWluKS5zZXRNb250aCgwLCAxKS5zZXRIb3VycygwLDAsMCwwKTsKICAgICAgICAgICAgICAgIHZhciBtZW5kID0gbmV3ICQuanNEYXRlKG1heCkuYWRkKDEsICd5ZWFyJykuc2V0TW9udGgoMCwgMSkuc2V0SG91cnMoMCwwLDAsMCk7CgogICAgICAgICAgICAgICAgdmFyIG55ZWFycyA9IG1lbmQuZGlmZihtc3RhcnQsICd5ZWFyJyk7CgogICAgICAgICAgICAgICAgbnR0YXJnZXQgPSBNYXRoLmNlaWwobnllYXJzL2ludHYpICsgMTsKCiAgICAgICAgICAgICAgICB0aGlzLm1pbiA9IG1zdGFydC5nZXRUaW1lKCk7CiAgICAgICAgICAgICAgICB0aGlzLm1heCA9IG1zdGFydC5jbG9uZSgpLmFkZCgobnR0YXJnZXQgLSAxKSAqIGludHYsICd5ZWFyJykuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IG50dGFyZ2V0OwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxudHRhcmdldDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy52YWx1ZSA9IG1zdGFydC5nZXRUaW1lKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBvcHRzLnZhbHVlID0gbXN0YXJ0LmFkZChpbnR2LCAneWVhcicpLmdldFRpbWUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdCA9IG5ldyB0aGlzLnRpY2tSZW5kZXJlcihvcHRzKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcgJiYgdGhpcy5fYXV0b0Zvcm1hdFN0cmluZyAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICB0LmZvcm1hdFN0cmluZyA9IHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG93VGlja3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TGFiZWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5zaG93VGlja01hcmtzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpbnNldE11bHQgPSBpbnR2ICogeWVhcjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8vLy8vLy8KICAgICAgICAvLyBTb21lIG9wdGlvbihzKSBzcGVjaWZpZWQsIHdvcmsgYXJvdW5kIHRoYXQuCiAgICAgICAgLy8vLy8vLy8KICAgICAgICAKICAgICAgICBlbHNlIHsgICAgICAKICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ3hheGlzJyB8fCBuYW1lID09ICd4MmF4aXMnKSB7CiAgICAgICAgICAgICAgICBkaW0gPSB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGRpbSA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gaWYgbWluLCBtYXggYW5kIG51bWJlciBvZiB0aWNrcyBzcGVjaWZpZWQsIHVzZXIgY2FuJ3Qgc3BlY2lmeSBpbnRlcnZhbC4KICAgICAgICAgICAgaWYgKHRoaXMubWluICE9IG51bGwgJiYgdGhpcy5tYXggIT0gbnVsbCAmJiB0aGlzLm51bWJlclRpY2tzICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMudGlja0ludGVydmFsID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHRoaXMudGlja0ludGVydmFsICE9IG51bGwgJiYgZGFUaWNrSW50ZXJ2YWwgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhpcy5kYVRpY2tJbnRlcnZhbCA9IGRhVGlja0ludGVydmFsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBpZiBtaW4gYW5kIG1heCBhcmUgc2FtZSwgc3BhY2UgdGhlbSBvdXQgYSBiaXQKICAgICAgICAgICAgaWYgKG1pbiA9PSBtYXgpIHsKICAgICAgICAgICAgICAgIHZhciBhZGogPSAyNCo2MCo2MCo1MDA7ICAvLyAxLzIgZGF5CiAgICAgICAgICAgICAgICBtaW4gLT0gYWRqOwogICAgICAgICAgICAgICAgbWF4ICs9IGFkajsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmFuZ2UgPSBtYXggLSBtaW47CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgb3B0TnVtVGlja3MgPSAyICsgcGFyc2VJbnQoTWF0aC5tYXgoMCwgZGltLTEwMCkvMTAwLCAxMCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJtaW4sIHJtYXg7CiAgICAgICAgICAgIAogICAgICAgICAgICBybWluID0gKHRoaXMubWluICE9IG51bGwpID8gbmV3ICQuanNEYXRlKHRoaXMubWluKS5nZXRUaW1lKCkgOiBtaW4gLSByYW5nZS8yKih0aGlzLnBhZE1pbiAtIDEpOwogICAgICAgICAgICBybWF4ID0gKHRoaXMubWF4ICE9IG51bGwpID8gbmV3ICQuanNEYXRlKHRoaXMubWF4KS5nZXRUaW1lKCkgOiBtYXggKyByYW5nZS8yKih0aGlzLnBhZE1heCAtIDEpOwogICAgICAgICAgICB0aGlzLm1pbiA9IHJtaW47CiAgICAgICAgICAgIHRoaXMubWF4ID0gcm1heDsKICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHRoaXMubnVtYmVyVGlja3MgPT0gbnVsbCl7CiAgICAgICAgICAgICAgICAvLyBpZiB0aWNrSW50ZXJ2YWwgaXMgc3BlY2lmaWVkIGJ5IHVzZXIsIHdlIHdpbGwgaWdub3JlIGNvbXB1dGVkIG1heGltdW0uCiAgICAgICAgICAgICAgICAvLyBtYXggd2lsbCBiZSBlcXVhbCBvciBncmVhdGVyIHRvIGZpdCBldmVuICMgb2YgdGlja3MuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYVRpY2tJbnRlcnZhbCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5jID0gbmV3ICQuanNEYXRlKHRoaXMubWF4KS5kaWZmKHRoaXMubWluLCB0aGlzLmRhVGlja0ludGVydmFsWzFdLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0gTWF0aC5jZWlsKG5jL3RoaXMuZGFUaWNrSW50ZXJ2YWxbMF0pICsxOwogICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubWF4ID0gbmV3ICQuanNEYXRlKHRoaXMubWluKS5hZGQodGhpcy5udW1iZXJUaWNrcy0xLCB0aGlzLmRhVGlja0ludGVydmFsWzFdKS5nZXRUaW1lKCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXggPSBuZXcgJC5qc0RhdGUodGhpcy5taW4pLmFkZCgodGhpcy5udW1iZXJUaWNrcy0xKSAqIHRoaXMuZGFUaWNrSW50ZXJ2YWxbMF0sIHRoaXMuZGFUaWNrSW50ZXJ2YWxbMV0pLmdldFRpbWUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRpbSA+IDIwMCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSBwYXJzZUludCgzKyhkaW0tMjAwKS8xMDAsIDEwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSAyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpbnNldE11bHQgPSByYW5nZSAvICh0aGlzLm51bWJlclRpY2tzLTEpLzEwMDA7CgogICAgICAgICAgICBpZiAodGhpcy5kYVRpY2tJbnRlcnZhbCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aGlzLmRhVGlja0ludGVydmFsID0gW2luc2V0TXVsdCwgJ3NlY29uZHMnXTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLm51bWJlclRpY2tzOyBpKyspewogICAgICAgICAgICAgICAgdmFyIG1pbiA9IG5ldyAkLmpzRGF0ZSh0aGlzLm1pbik7CiAgICAgICAgICAgICAgICB0dCA9IG1pbi5hZGQoaSp0aGlzLmRhVGlja0ludGVydmFsWzBdLCB0aGlzLmRhVGlja0ludGVydmFsWzFdKS5nZXRUaW1lKCk7CiAgICAgICAgICAgICAgICB2YXIgdCA9IG5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTsKICAgICAgICAgICAgICAgIC8vIHZhciB0ID0gbmV3ICQuanFwbG90LkF4aXNUaWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1RpY2tzKSB7CiAgICAgICAgICAgICAgICAgICAgdC5zaG93TGFiZWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5zaG93VGlja01hcmtzKSB7CiAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdC5zZXRUaWNrKHR0LCB0aGlzLm5hbWUpOwogICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMudGlja0luc2V0KSB7CiAgICAgICAgICAgIHRoaXMubWluID0gdGhpcy5taW4gLSB0aGlzLnRpY2tJbnNldCAqIGluc2V0TXVsdDsKICAgICAgICAgICAgdGhpcy5tYXggPSB0aGlzLm1heCArIHRoaXMudGlja0luc2V0ICogaW5zZXRNdWx0OwogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMuX2RhVGlja0ludGVydmFsID09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5fZGFUaWNrSW50ZXJ2YWwgPSB0aGlzLmRhVGlja0ludGVydmFsOyAgICAKICAgICAgICB9CgogICAgICAgIHRpY2tzID0gbnVsbDsKICAgIH07CiAgIAp9KShqUXVlcnkpOwoK]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.dateAxisRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGgpe2guanFwbG90LkRhdGVBeGlzUmVuZGVyZXI9ZnVuY3Rpb24oKXtoLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIuY2FsbCh0aGlzKTt0aGlzLmRhdGU9bmV3IGguanNEYXRlKCl9O3ZhciBjPTEwMDA7dmFyIGU9NjAqYzt2YXIgZj02MCplO3ZhciBsPTI0KmY7dmFyIGI9NypsO3ZhciBqPTMwLjQzNjg0OTkqbDt2YXIgaz0zNjUuMjQyMTk5Kmw7dmFyIGc9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMwLDMxLDMwLDMxLDMwXTt2YXIgaT1bIiVNOiVTLiUjTiIsIiVNOiVTLiUjTiIsIiVNOiVTLiUjTiIsIiVNOiVTIiwiJU06JVMiLCIlTTolUyIsIiVNOiVTIiwiJUg6JU06JVMiLCIlSDolTTolUyIsIiVIOiVNIiwiJUg6JU0iLCIlSDolTSIsIiVIOiVNIiwiJUg6JU0iLCIlSDolTSIsIiVhICVIOiVNIiwiJWEgJUg6JU0iLCIlYiAlZSAlSDolTSIsIiViICVlICVIOiVNIiwiJWIgJWUgJUg6JU0iLCIlYiAlZSAlSDolTSIsIiV2IiwiJXYiLCIldiIsIiV2IiwiJXYiLCIldiIsIiV2Il07dmFyIG09WzAuMSpjLDAuMipjLDAuNSpjLGMsMipjLDUqYywxMCpjLDE1KmMsMzAqYyxlLDIqZSw1KmUsMTAqZSwxNSplLDMwKmUsZiwyKmYsNCpmLDYqZiw4KmYsMTIqZixsLDIqbCwzKmwsNCpsLDUqbCxiLDIqYl07dmFyIGQ9W107ZnVuY3Rpb24gYShwLHMsdCl7dmFyIG89TnVtYmVyLk1BWF9WQUxVRTt2YXIgdSxyLHY7Zm9yKHZhciBxPTAsbj1tLmxlbmd0aDtxPG47cSsrKXt1PU1hdGguYWJzKHQtbVtxXSk7aWYodTxvKXtvPXU7cj1tW3FdO3Y9aVtxXX19cmV0dXJuW3Isdl19aC5qcXBsb3QuRGF0ZUF4aXNSZW5kZXJlci5wcm90b3R5cGU9bmV3IGguanFwbG90LkxpbmVhckF4aXNSZW5kZXJlcigpO2guanFwbG90LkRhdGVBeGlzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWguanFwbG90LkRhdGVBeGlzUmVuZGVyZXI7aC5qcXBsb3QuRGF0ZVRpY2tGb3JtYXR0ZXI9ZnVuY3Rpb24obixvKXtpZighbil7bj0iJVkvJW0vJWQifXJldHVybiBoLmpzRGF0ZS5zdHJmdGltZShvLG4pfTtoLmpxcGxvdC5EYXRlQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKEUpe3RoaXMudGlja09wdGlvbnMuZm9ybWF0dGVyPWguanFwbG90LkRhdGVUaWNrRm9ybWF0dGVyO3RoaXMudGlja0luc2V0PTA7dGhpcy5kcmF3QmFzZWxpbmU9dHJ1ZTt0aGlzLmJhc2VsaW5lV2lkdGg9bnVsbDt0aGlzLmJhc2VsaW5lQ29sb3I9bnVsbDt0aGlzLmRhVGlja0ludGVydmFsPW51bGw7dGhpcy5fZGFUaWNrSW50ZXJ2YWw9bnVsbDtoLmV4dGVuZCh0cnVlLHRoaXMsRSk7dmFyIEM9dGhpcy5fZGF0YUJvdW5kcyx1LHgsRCx5LEEseixvO2Zvcih2YXIgdD0wO3Q8dGhpcy5fc2VyaWVzLmxlbmd0aDt0Kyspe3U9e2ludGVydmFsczpbXSxmcmVxdWVuY2llczp7fSxzb3J0ZWRJbnRlcnZhbHM6W10sbWluOm51bGwsbWF4Om51bGwsbWVhbjpudWxsfTt4PTA7RD10aGlzLl9zZXJpZXNbdF07eT1ELmRhdGE7QT1ELl9wbG90RGF0YTt6PUQuX3N0YWNrRGF0YTtvPTA7Zm9yKHZhciByPTA7cjx5Lmxlbmd0aDtyKyspe2lmKHRoaXMubmFtZT09InhheGlzInx8dGhpcy5uYW1lPT0ieDJheGlzIil7eVtyXVswXT1uZXcgaC5qc0RhdGUoeVtyXVswXSkuZ2V0VGltZSgpO0Fbcl1bMF09bmV3IGguanNEYXRlKHlbcl1bMF0pLmdldFRpbWUoKTt6W3JdWzBdPW5ldyBoLmpzRGF0ZSh5W3JdWzBdKS5nZXRUaW1lKCk7aWYoKHlbcl1bMF0hPW51bGwmJnlbcl1bMF08Qy5taW4pfHxDLm1pbj09bnVsbCl7Qy5taW49eVtyXVswXX1pZigoeVtyXVswXSE9bnVsbCYmeVtyXVswXT5DLm1heCl8fEMubWF4PT1udWxsKXtDLm1heD15W3JdWzBdfWlmKHI+MCl7bz1NYXRoLmFicyh5W3JdWzBdLXlbci0xXVswXSk7dS5pbnRlcnZhbHMucHVzaChvKTtpZih1LmZyZXF1ZW5jaWVzLmhhc093blByb3BlcnR5KG8pKXt1LmZyZXF1ZW5jaWVzW29dKz0xfWVsc2V7dS5mcmVxdWVuY2llc1tvXT0xfX14Kz1vfWVsc2V7eVtyXVsxXT1uZXcgaC5qc0RhdGUoeVtyXVsxXSkuZ2V0VGltZSgpO0Fbcl1bMV09bmV3IGguanNEYXRlKHlbcl1bMV0pLmdldFRpbWUoKTt6W3JdWzFdPW5ldyBoLmpzRGF0ZSh5W3JdWzFdKS5nZXRUaW1lKCk7aWYoKHlbcl1bMV0hPW51bGwmJnlbcl1bMV08Qy5taW4pfHxDLm1pbj09bnVsbCl7Qy5taW49eVtyXVsxXX1pZigoeVtyXVsxXSE9bnVsbCYmeVtyXVsxXT5DLm1heCl8fEMubWF4PT1udWxsKXtDLm1heD15W3JdWzFdfWlmKHI+MCl7bz1NYXRoLmFicyh5W3JdWzFdLXlbci0xXVsxXSk7dS5pbnRlcnZhbHMucHVzaChvKTtpZih1LmZyZXF1ZW5jaWVzLmhhc093blByb3BlcnR5KG8pKXt1LmZyZXF1ZW5jaWVzW29dKz0xfWVsc2V7dS5mcmVxdWVuY2llc1tvXT0xfX19eCs9b31pZihELnJlbmRlcmVyLmJhbmRzKXtpZihELnJlbmRlcmVyLmJhbmRzLmhpRGF0YS5sZW5ndGgpe3ZhciB3PUQucmVuZGVyZXIuYmFuZHMuaGlEYXRhO2Zvcih2YXIgcj0wLHE9dy5sZW5ndGg7cjxxO3IrKyl7aWYodGhpcy5uYW1lPT09InhheGlzInx8dGhpcy5uYW1lPT09IngyYXhpcyIpe3dbcl1bMF09bmV3IGguanNEYXRlKHdbcl1bMF0pLmdldFRpbWUoKTtpZigod1tyXVswXSE9bnVsbCYmd1tyXVswXT5DLm1heCl8fEMubWF4PT1udWxsKXtDLm1heD13W3JdWzBdfX1lbHNle3dbcl1bMV09bmV3IGguanNEYXRlKHdbcl1bMV0pLmdldFRpbWUoKTtpZigod1tyXVsxXSE9bnVsbCYmd1tyXVsxXT5DLm1heCl8fEMubWF4PT1udWxsKXtDLm1heD13W3JdWzFdfX19fWlmKEQucmVuZGVyZXIuYmFuZHMubG93RGF0YS5sZW5ndGgpe3ZhciB3PUQucmVuZGVyZXIuYmFuZHMubG93RGF0YTtmb3IodmFyIHI9MCxxPXcubGVuZ3RoO3I8cTtyKyspe2lmKHRoaXMubmFtZT09PSJ4YXhpcyJ8fHRoaXMubmFtZT09PSJ4MmF4aXMiKXt3W3JdWzBdPW5ldyBoLmpzRGF0ZSh3W3JdWzBdKS5nZXRUaW1lKCk7aWYoKHdbcl1bMF0hPW51bGwmJndbcl1bMF08Qy5taW4pfHxDLm1pbj09bnVsbCl7Qy5taW49d1tyXVswXX19ZWxzZXt3W3JdWzFdPW5ldyBoLmpzRGF0ZSh3W3JdWzFdKS5nZXRUaW1lKCk7aWYoKHdbcl1bMV0hPW51bGwmJndbcl1bMV08Qy5taW4pfHxDLm1pbj09bnVsbCl7Qy5taW49d1tyXVsxXX19fX19dmFyIEI9MCx2PTA7Zm9yKHZhciBwIGluIHUuZnJlcXVlbmNpZXMpe3Uuc29ydGVkSW50ZXJ2YWxzLnB1c2goe2ludGVydmFsOnAsZnJlcXVlbmN5OnUuZnJlcXVlbmNpZXNbcF19KX11LnNvcnRlZEludGVydmFscy5zb3J0KGZ1bmN0aW9uKHMsbil7cmV0dXJuIG4uZnJlcXVlbmN5LXMuZnJlcXVlbmN5fSk7dS5taW49aC5qcXBsb3QuYXJyYXlNaW4odS5pbnRlcnZhbHMpO3UubWF4PWguanFwbG90LmFycmF5TWF4KHUuaW50ZXJ2YWxzKTt1Lm1lYW49eC95Lmxlbmd0aDt0aGlzLl9pbnRlcnZhbFN0YXRzLnB1c2godSk7dT14PUQ9eT1BPXo9bnVsbH1DPW51bGx9O2guanFwbG90LkRhdGVBeGlzUmVuZGVyZXIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5taW49dGhpcy5fb3B0aW9ucy5taW47dGhpcy5tYXg9dGhpcy5fb3B0aW9ucy5tYXg7dGhpcy50aWNrSW50ZXJ2YWw9dGhpcy5fb3B0aW9ucy50aWNrSW50ZXJ2YWw7dGhpcy5udW1iZXJUaWNrcz10aGlzLl9vcHRpb25zLm51bWJlclRpY2tzO3RoaXMuX2F1dG9Gb3JtYXRTdHJpbmc9IiI7aWYodGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcmJnRoaXMudGlja09wdGlvbnMmJnRoaXMudGlja09wdGlvbnMuZm9ybWF0U3RyaW5nKXt0aGlzLnRpY2tPcHRpb25zLmZvcm1hdFN0cmluZz0iIn10aGlzLmRhVGlja0ludGVydmFsPXRoaXMuX2RhVGlja0ludGVydmFsfTtoLmpxcGxvdC5EYXRlQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jcmVhdGVUaWNrcz1mdW5jdGlvbihwKXt2YXIgWD10aGlzLl90aWNrczt2YXIgTD10aGlzLnRpY2tzO3ZhciBGPXRoaXMubmFtZTt2YXIgSD10aGlzLl9kYXRhQm91bmRzO3ZhciBNPXRoaXMuX2ludGVydmFsU3RhdHM7dmFyIG49KHRoaXMubmFtZS5jaGFyQXQoMCk9PT0ieCIpP3RoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoOnRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodDt2YXIgdzt2YXIgYWUsSjt2YXIgeSx4O3ZhciBhZCxhYTt2YXIgcz0zMDt2YXIgTz0xO3ZhciBVPW51bGw7aWYodGhpcy50aWNrSW50ZXJ2YWwhPW51bGwpe2lmKE51bWJlcih0aGlzLnRpY2tJbnRlcnZhbCkpe1U9W051bWJlcih0aGlzLnRpY2tJbnRlcnZhbCksInNlY29uZHMiXX1lbHNle2lmKHR5cGVvZiB0aGlzLnRpY2tJbnRlcnZhbD09InN0cmluZyIpe3ZhciBhYz10aGlzLnRpY2tJbnRlcnZhbC5zcGxpdCgiICIpO2lmKGFjLmxlbmd0aD09MSl7VT1bMSxhY1swXV19ZWxzZXtpZihhYy5sZW5ndGg9PTIpe1U9W2FjWzBdLGFjWzFdXX19fX19dmFyIHY9dGhpcy50aWNrSW50ZXJ2YWw7YWU9bmV3IGguanNEYXRlKCh0aGlzLm1pbiE9bnVsbCk/dGhpcy5taW46SC5taW4pLmdldFRpbWUoKTtKPW5ldyBoLmpzRGF0ZSgodGhpcy5tYXghPW51bGwpP3RoaXMubWF4OkgubWF4KS5nZXRUaW1lKCk7dmFyIEE9cC5wbHVnaW5zLmN1cnNvcjtpZihBJiZBLl96b29tJiZBLl96b29tLnpvb21pbmcpe3RoaXMubWluPW51bGw7dGhpcy5tYXg9bnVsbH12YXIgQj1KLWFlO2lmKHRoaXMudGlja09wdGlvbnM9PW51bGx8fCF0aGlzLnRpY2tPcHRpb25zLmZvcm1hdFN0cmluZyl7dGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmc9dHJ1ZX1pZihMLmxlbmd0aCl7Zm9yKGFhPTA7YWE8TC5sZW5ndGg7YWErKyl7dmFyIFA9TFthYV07dmFyIFk9bmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpO2lmKFAuY29uc3RydWN0b3I9PUFycmF5KXtZLnZhbHVlPW5ldyBoLmpzRGF0ZShQWzBdKS5nZXRUaW1lKCk7WS5sYWJlbD1QWzFdO2lmKCF0aGlzLnNob3dUaWNrcyl7WS5zaG93TGFiZWw9ZmFsc2U7WS5zaG93TWFyaz1mYWxzZX1lbHNle2lmKCF0aGlzLnNob3dUaWNrTWFya3Mpe1kuc2hvd01hcms9ZmFsc2V9fVkuc2V0VGljayhZLnZhbHVlLHRoaXMubmFtZSk7dGhpcy5fdGlja3MucHVzaChZKX1lbHNle1kudmFsdWU9bmV3IGguanNEYXRlKFApLmdldFRpbWUoKTtpZighdGhpcy5zaG93VGlja3Mpe1kuc2hvd0xhYmVsPWZhbHNlO1kuc2hvd01hcms9ZmFsc2V9ZWxzZXtpZighdGhpcy5zaG93VGlja01hcmtzKXtZLnNob3dNYXJrPWZhbHNlfX1ZLnNldFRpY2soWS52YWx1ZSx0aGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1c2goWSl9fXRoaXMubnVtYmVyVGlja3M9TC5sZW5ndGg7dGhpcy5taW49dGhpcy5fdGlja3NbMF0udmFsdWU7dGhpcy5tYXg9dGhpcy5fdGlja3NbdGhpcy5udW1iZXJUaWNrcy0xXS52YWx1ZTt0aGlzLmRhVGlja0ludGVydmFsPVsodGhpcy5tYXgtdGhpcy5taW4pLyh0aGlzLm51bWJlclRpY2tzLTEpLzEwMDAsInNlY29uZHMiXX1lbHNle2lmKHRoaXMubWluPT1udWxsJiZ0aGlzLm1heD09bnVsbCYmSC5taW49PUgubWF4KXt2YXIgRT1oLmV4dGVuZCh0cnVlLHt9LHRoaXMudGlja09wdGlvbnMse25hbWU6dGhpcy5uYW1lLHZhbHVlOm51bGx9KTt2YXIgVD0zMDAwMDA7dGhpcy5taW49SC5taW4tVDt0aGlzLm1heD1ILm1heCtUO3RoaXMubnVtYmVyVGlja3M9Mztmb3IodmFyIGFhPXRoaXMubWluO2FhPD10aGlzLm1heDthYSs9VCl7RS52YWx1ZT1hYTt2YXIgWT1uZXcgdGhpcy50aWNrUmVuZGVyZXIoRSk7aWYodGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcmJnRoaXMuX2F1dG9Gb3JtYXRTdHJpbmchPSIiKXtZLmZvcm1hdFN0cmluZz10aGlzLl9hdXRvRm9ybWF0U3RyaW5nfVkuc2hvd0xhYmVsPWZhbHNlO1kuc2hvd01hcms9ZmFsc2U7dGhpcy5fdGlja3MucHVzaChZKX1pZih0aGlzLnNob3dUaWNrcyl7dGhpcy5fdGlja3NbMV0uc2hvd0xhYmVsPXRydWV9aWYodGhpcy5zaG93VGlja01hcmtzKXt0aGlzLl90aWNrc1sxXS5zaG93VGlja01hcmtzPXRydWV9fWVsc2V7aWYodGhpcy5taW49PW51bGwmJnRoaXMubWF4PT1udWxsKXt2YXIgTj1oLmV4dGVuZCh0cnVlLHt9LHRoaXMudGlja09wdGlvbnMse25hbWU6dGhpcy5uYW1lLHZhbHVlOm51bGx9KTt2YXIgYWIsSTtpZighdGhpcy50aWNrSW50ZXJ2YWwmJiF0aGlzLm51bWJlclRpY2tzKXt2YXIgUj1NYXRoLm1heChuLHMrMSk7dmFyIFo9MTE1O2lmKHRoaXMudGlja1JlbmRlcmVyPT09aC5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlciYmdGhpcy50aWNrT3B0aW9ucy5hbmdsZSl7Wj0xMTUtNDAqTWF0aC5hYnMoTWF0aC5zaW4odGhpcy50aWNrT3B0aW9ucy5hbmdsZS8xODAqTWF0aC5QSSkpfWFiPU1hdGguY2VpbCgoUi1zKS9aKzEpO0k9KEotYWUpLyhhYi0xKX1lbHNle2lmKHRoaXMudGlja0ludGVydmFsKXtJPW5ldyBoLmpzRGF0ZSgwKS5hZGQoVVswXSxVWzFdKS5nZXRUaW1lKCl9ZWxzZXtpZih0aGlzLm51bWJlclRpY2tzKXthYj10aGlzLm51bWJlclRpY2tzO0k9KEotYWUpLyhhYi0xKX19fWlmKEk8PTE5Kmwpe3ZhciBRPWEoYWUsSixJKTt2YXIgcj1RWzBdO3RoaXMuX2F1dG9Gb3JtYXRTdHJpbmc9UVsxXTthZT1uZXcgaC5qc0RhdGUoYWUpO2FlPU1hdGguZmxvb3IoKGFlLmdldFRpbWUoKS1hZS5nZXRVdGNPZmZzZXQoKSkvcikqcithZS5nZXRVdGNPZmZzZXQoKTthYj1NYXRoLmNlaWwoKEotYWUpL3IpKzE7dGhpcy5taW49YWU7dGhpcy5tYXg9YWUrKGFiLTEpKnI7aWYodGhpcy5tYXg8Sil7dGhpcy5tYXgrPXI7YWIrPTF9dGhpcy50aWNrSW50ZXJ2YWw9cjt0aGlzLm51bWJlclRpY2tzPWFiO2Zvcih2YXIgYWE9MDthYTxhYjthYSsrKXtOLnZhbHVlPXRoaXMubWluK2FhKnI7WT1uZXcgdGhpcy50aWNrUmVuZGVyZXIoTik7aWYodGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcmJnRoaXMuX2F1dG9Gb3JtYXRTdHJpbmchPSIiKXtZLmZvcm1hdFN0cmluZz10aGlzLl9hdXRvRm9ybWF0U3RyaW5nfWlmKCF0aGlzLnNob3dUaWNrcyl7WS5zaG93TGFiZWw9ZmFsc2U7WS5zaG93TWFyaz1mYWxzZX1lbHNle2lmKCF0aGlzLnNob3dUaWNrTWFya3Mpe1kuc2hvd01hcms9ZmFsc2V9fXRoaXMuX3RpY2tzLnB1c2goWSl9Tz10aGlzLnRpY2tJbnRlcnZhbH1lbHNle2lmKEk8PTkqail7dGhpcy5fYXV0b0Zvcm1hdFN0cmluZz0iJXYiO3ZhciBEPU1hdGgucm91bmQoSS9qKTtpZihEPDEpe0Q9MX1lbHNle2lmKEQ+Nil7RD02fX12YXIgVj1uZXcgaC5qc0RhdGUoYWUpLnNldERhdGUoMSkuc2V0SG91cnMoMCwwLDAsMCk7dmFyIHE9bmV3IGguanNEYXRlKEopO3ZhciB6PW5ldyBoLmpzRGF0ZShKKS5zZXREYXRlKDEpLnNldEhvdXJzKDAsMCwwLDApO2lmKHEuZ2V0VGltZSgpIT09ei5nZXRUaW1lKCkpe3o9ei5hZGQoMSwibW9udGgiKX12YXIgUz16LmRpZmYoViwibW9udGgiKTthYj1NYXRoLmNlaWwoUy9EKSsxO3RoaXMubWluPVYuZ2V0VGltZSgpO3RoaXMubWF4PVYuY2xvbmUoKS5hZGQoKGFiLTEpKkQsIm1vbnRoIikuZ2V0VGltZSgpO3RoaXMubnVtYmVyVGlja3M9YWI7Zm9yKHZhciBhYT0wO2FhPGFiO2FhKyspe2lmKGFhPT09MCl7Ti52YWx1ZT1WLmdldFRpbWUoKX1lbHNle04udmFsdWU9Vi5hZGQoRCwibW9udGgiKS5nZXRUaW1lKCl9WT1uZXcgdGhpcy50aWNrUmVuZGVyZXIoTik7aWYodGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcmJnRoaXMuX2F1dG9Gb3JtYXRTdHJpbmchPSIiKXtZLmZvcm1hdFN0cmluZz10aGlzLl9hdXRvRm9ybWF0U3RyaW5nfWlmKCF0aGlzLnNob3dUaWNrcyl7WS5zaG93TGFiZWw9ZmFsc2U7WS5zaG93TWFyaz1mYWxzZX1lbHNle2lmKCF0aGlzLnNob3dUaWNrTWFya3Mpe1kuc2hvd01hcms9ZmFsc2V9fXRoaXMuX3RpY2tzLnB1c2goWSl9Tz1EKmp9ZWxzZXt0aGlzLl9hdXRvRm9ybWF0U3RyaW5nPSIldiI7dmFyIEQ9TWF0aC5yb3VuZChJL2spO2lmKEQ8MSl7RD0xfXZhciBWPW5ldyBoLmpzRGF0ZShhZSkuc2V0TW9udGgoMCwxKS5zZXRIb3VycygwLDAsMCwwKTt2YXIgej1uZXcgaC5qc0RhdGUoSikuYWRkKDEsInllYXIiKS5zZXRNb250aCgwLDEpLnNldEhvdXJzKDAsMCwwLDApO3ZhciBLPXouZGlmZihWLCJ5ZWFyIik7YWI9TWF0aC5jZWlsKEsvRCkrMTt0aGlzLm1pbj1WLmdldFRpbWUoKTt0aGlzLm1heD1WLmNsb25lKCkuYWRkKChhYi0xKSpELCJ5ZWFyIikuZ2V0VGltZSgpO3RoaXMubnVtYmVyVGlja3M9YWI7Zm9yKHZhciBhYT0wO2FhPGFiO2FhKyspe2lmKGFhPT09MCl7Ti52YWx1ZT1WLmdldFRpbWUoKX1lbHNle04udmFsdWU9Vi5hZGQoRCwieWVhciIpLmdldFRpbWUoKX1ZPW5ldyB0aGlzLnRpY2tSZW5kZXJlcihOKTtpZih0aGlzLl9vdmVycmlkZUZvcm1hdFN0cmluZyYmdGhpcy5fYXV0b0Zvcm1hdFN0cmluZyE9IiIpe1kuZm9ybWF0U3RyaW5nPXRoaXMuX2F1dG9Gb3JtYXRTdHJpbmd9aWYoIXRoaXMuc2hvd1RpY2tzKXtZLnNob3dMYWJlbD1mYWxzZTtZLnNob3dNYXJrPWZhbHNlfWVsc2V7aWYoIXRoaXMuc2hvd1RpY2tNYXJrcyl7WS5zaG93TWFyaz1mYWxzZX19dGhpcy5fdGlja3MucHVzaChZKX1PPUQqa319fWVsc2V7aWYoRj09InhheGlzInx8Rj09IngyYXhpcyIpe249dGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGh9ZWxzZXtuPXRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodH1pZih0aGlzLm1pbiE9bnVsbCYmdGhpcy5tYXghPW51bGwmJnRoaXMubnVtYmVyVGlja3MhPW51bGwpe3RoaXMudGlja0ludGVydmFsPW51bGx9aWYodGhpcy50aWNrSW50ZXJ2YWwhPW51bGwmJlUhPW51bGwpe3RoaXMuZGFUaWNrSW50ZXJ2YWw9VX1pZihhZT09Sil7dmFyIG89MjQqNjAqNjAqNTAwO2FlLT1vO0orPW99Qj1KLWFlO3ZhciBHPTIrcGFyc2VJbnQoTWF0aC5tYXgoMCxuLTEwMCkvMTAwLDEwKTt2YXIgVyxDO1c9KHRoaXMubWluIT1udWxsKT9uZXcgaC5qc0RhdGUodGhpcy5taW4pLmdldFRpbWUoKTphZS1CLzIqKHRoaXMucGFkTWluLTEpO0M9KHRoaXMubWF4IT1udWxsKT9uZXcgaC5qc0RhdGUodGhpcy5tYXgpLmdldFRpbWUoKTpKK0IvMioodGhpcy5wYWRNYXgtMSk7dGhpcy5taW49Vzt0aGlzLm1heD1DO0I9dGhpcy5tYXgtdGhpcy5taW47aWYodGhpcy5udW1iZXJUaWNrcz09bnVsbCl7aWYodGhpcy5kYVRpY2tJbnRlcnZhbCE9bnVsbCl7dmFyIHU9bmV3IGguanNEYXRlKHRoaXMubWF4KS5kaWZmKHRoaXMubWluLHRoaXMuZGFUaWNrSW50ZXJ2YWxbMV0sdHJ1ZSk7dGhpcy5udW1iZXJUaWNrcz1NYXRoLmNlaWwodS90aGlzLmRhVGlja0ludGVydmFsWzBdKSsxO3RoaXMubWF4PW5ldyBoLmpzRGF0ZSh0aGlzLm1pbikuYWRkKCh0aGlzLm51bWJlclRpY2tzLTEpKnRoaXMuZGFUaWNrSW50ZXJ2YWxbMF0sdGhpcy5kYVRpY2tJbnRlcnZhbFsxXSkuZ2V0VGltZSgpfWVsc2V7aWYobj4yMDApe3RoaXMubnVtYmVyVGlja3M9cGFyc2VJbnQoMysobi0yMDApLzEwMCwxMCl9ZWxzZXt0aGlzLm51bWJlclRpY2tzPTJ9fX1PPUIvKHRoaXMubnVtYmVyVGlja3MtMSkvMTAwMDtpZih0aGlzLmRhVGlja0ludGVydmFsPT1udWxsKXt0aGlzLmRhVGlja0ludGVydmFsPVtPLCJzZWNvbmRzIl19Zm9yKHZhciBhYT0wO2FhPHRoaXMubnVtYmVyVGlja3M7YWErKyl7dmFyIGFlPW5ldyBoLmpzRGF0ZSh0aGlzLm1pbik7YWQ9YWUuYWRkKGFhKnRoaXMuZGFUaWNrSW50ZXJ2YWxbMF0sdGhpcy5kYVRpY2tJbnRlcnZhbFsxXSkuZ2V0VGltZSgpO3ZhciBZPW5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTtpZighdGhpcy5zaG93VGlja3Mpe1kuc2hvd0xhYmVsPWZhbHNlO1kuc2hvd01hcms9ZmFsc2V9ZWxzZXtpZighdGhpcy5zaG93VGlja01hcmtzKXtZLnNob3dNYXJrPWZhbHNlfX1ZLnNldFRpY2soYWQsdGhpcy5uYW1lKTt0aGlzLl90aWNrcy5wdXNoKFkpfX19fWlmKHRoaXMudGlja0luc2V0KXt0aGlzLm1pbj10aGlzLm1pbi10aGlzLnRpY2tJbnNldCpPO3RoaXMubWF4PXRoaXMubWF4K3RoaXMudGlja0luc2V0Kk99aWYodGhpcy5fZGFUaWNrSW50ZXJ2YWw9PW51bGwpe3RoaXMuX2RhVGlja0ludGVydmFsPXRoaXMuZGFUaWNrSW50ZXJ2YWx9WD1udWxsfX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.donutRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLyoqCiAgICAgKiBDbGFzczogJC5qcXBsb3QuRG9udXRSZW5kZXJlcgogICAgICogUGx1Z2luIHJlbmRlcmVyIHRvIGRyYXcgYSBkb251dCBjaGFydC4KICAgICAqIHggdmFsdWVzLCBpZiBwcmVzZW50LCB3aWxsIGJlIHVzZWQgYXMgc2xpY2UgbGFiZWxzLgogICAgICogeSB2YWx1ZXMgZ2l2ZSBzbGljZSBzaXplLgogICAgICogCiAgICAgKiBUbyB1c2UgdGhpcyByZW5kZXJlciwgeW91IG5lZWQgdG8gaW5jbHVkZSB0aGUgCiAgICAgKiBkb251dCByZW5kZXJlciBwbHVnaW4sIGZvciBleGFtcGxlOgogICAgICogCiAgICAgKiA+IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InBsdWdpbnMvanFwbG90LmRvbnV0UmVuZGVyZXIuanMiPjwvc2NyaXB0PgogICAgICogCiAgICAgKiBQcm9wZXJ0aWVzIGRlc2NyaWJlZCBoZXJlIGFyZSBwYXNzZWQgaW50byB0aGUgJC5qcXBsb3QgZnVuY3Rpb24KICAgICAqIGFzIG9wdGlvbnMgb24gdGhlIHNlcmllcyByZW5kZXJlci4gIEZvciBleGFtcGxlOgogICAgICogCiAgICAgKiA+IHBsb3QyID0gJC5qcXBsb3QoJ2NoYXJ0MicsIFtzMSwgczJdLCB7CiAgICAgKiA+ICAgICBzZXJpZXNEZWZhdWx0czogewogICAgICogPiAgICAgICAgIHJlbmRlcmVyOiQuanFwbG90LkRvbnV0UmVuZGVyZXIsCiAgICAgKiA+ICAgICAgICAgcmVuZGVyZXJPcHRpb25zOnsKICAgICAqID4gICAgICAgICAgICAgIHNsaWNlTWFyZ2luOiAyLAogICAgICogPiAgICAgICAgICAgICAgaW5uZXJEaWFtZXRlcjogMTEwLAogICAgICogPiAgICAgICAgICAgICAgc3RhcnRBbmdsZTogLTkwCiAgICAgKiA+ICAgICAgICAgIH0KICAgICAqID4gICAgICB9CiAgICAgKiA+IH0pOwogICAgICogCiAgICAgKiBBIGRvbnV0IHBsb3Qgd2lsbCB0cmlnZ2VyIGV2ZW50cyBvbiB0aGUgcGxvdCB0YXJnZXQKICAgICAqIGFjY29yZGluZyB0byB1c2VyIGludGVyYWN0aW9uLiAgQWxsIGV2ZW50cyByZXR1cm4gdGhlIGV2ZW50IG9iamVjdCwKICAgICAqIHRoZSBzZXJpZXMgaW5kZXgsIHRoZSBwb2ludCAoc2xpY2UpIGluZGV4LCBhbmQgdGhlIHBvaW50IGRhdGEgZm9yIAogICAgICogdGhlIGFwcHJvcHJpYXRlIHNsaWNlLgogICAgICogCiAgICAgKiAnanFwbG90RGF0YU1vdXNlT3ZlcicgLSB0cmlnZ2VyZWQgd2hlbiB1c2VyIG1vdXNlaW5nIG92ZXIgYSBzbGljZS4KICAgICAqICdqcXBsb3REYXRhSGlnaGxpZ2h0JyAtIHRyaWdnZXJlZCB0aGUgZmlyc3QgdGltZSB1c2VyIG1vdXNlcyBvdmVyIGEgc2xpY2UsCiAgICAgKiBpZiBoaWdobGlnaHRpbmcgaXMgZW5hYmxlZC4KICAgICAqICdqcXBsb3REYXRhVW5oaWdobGlnaHQnIC0gdHJpZ2dlcmVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZSBvdXQgb2YKICAgICAqIGEgaGlnaGxpZ2h0ZWQgc2xpY2UuCiAgICAgKiAnanFwbG90RGF0YUNsaWNrJyAtIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiBhIHNsaWNlLgogICAgICogJ2pxcGxvdERhdGFSaWdodENsaWNrJyAtIHRpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgcmlnaHQgY2xpY2tzIG9uIGEgc2xpY2UgaWYKICAgICAqIHRoZSAiY2FwdHVyZVJpZ2h0Q2xpY2siIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSBvbiB0aGUgcGxvdC4KICAgICAqLwogICAgJC5qcXBsb3QuRG9udXRSZW5kZXJlciA9IGZ1bmN0aW9uKCl7CiAgICAgICAgJC5qcXBsb3QuTGluZVJlbmRlcmVyLmNhbGwodGhpcyk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5Eb251dFJlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5MaW5lUmVuZGVyZXIoKTsKICAgICQuanFwbG90LkRvbnV0UmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJC5qcXBsb3QuRG9udXRSZW5kZXJlcjsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgYSBzZXJpZXMKICAgICQuanFwbG90LkRvbnV0UmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zLCBwbG90KSB7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAvLwogICAgICAgIC8vIHByb3A6IGRpYW1ldGVyCiAgICAgICAgLy8gT3V0ZXIgZGlhbWV0ZXIgb2YgdGhlIGRvbnV0LCBhdXRvIGNvbXB1dGVkIGJ5IGRlZmF1bHQKICAgICAgICB0aGlzLmRpYW1ldGVyID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBpbm5lckRpYW1ldGVyCiAgICAgICAgLy8gSW5uZXIgZGlhbWV0ZXIgb2YgdGhlIGRvbnV0LCBhdXRvIGNhbGN1bGF0ZWQgYnkgZGVmYXVsdC4KICAgICAgICAvLyBJZiBzcGVjaWZpZWQgd2lsbCBvdmVycmlkZSB0aGlja25lc3MgdmFsdWUuCiAgICAgICAgdGhpcy5pbm5lckRpYW1ldGVyID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiB0aGlja25lc3MKICAgICAgICAvLyB0aGlja25lc3Mgb2YgdGhlIGRvbnV0LCBhdXRvIGNvbXB1dGVkIGJ5IGRlZmF1bHQKICAgICAgICAvLyBPdmVycmlkZGVuIGJ5IGlmIGlubmVyRGlhbWV0ZXIgaXMgc3BlY2lmaWVkLgogICAgICAgIHRoaXMudGhpY2tuZXNzID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBwYWRkaW5nCiAgICAgICAgLy8gcGFkZGluZyBiZXR3ZWVuIHRoZSBkb251dCBhbmQgcGxvdCBlZGdlcywgbGVnZW5kLCBldGMuCiAgICAgICAgdGhpcy5wYWRkaW5nID0gMjA7CiAgICAgICAgLy8gcHJvcDogc2xpY2VNYXJnaW4KICAgICAgICAvLyBhbmd1bGFyIHNwYWNpbmcgYmV0d2VlbiBkb251dCBzbGljZXMgaW4gZGVncmVlcy4KICAgICAgICB0aGlzLnNsaWNlTWFyZ2luID0gMDsKICAgICAgICAvLyBwcm9wOiByaW5nTWFyZ2luCiAgICAgICAgLy8gcGl4ZWwgZGlzdGFuY2UgYmV0d2VlbiByaW5ncywgb3IgbXVsdGlwbGUgc2VyaWVzIGluIGEgZG9udXQgcGxvdC4KICAgICAgICAvLyBudWxsIHdpbGwgY29tcHV0ZSByaW5nTWFyZ2luIGJhc2VkIG9uIHNsaWNlTWFyZ2luLgogICAgICAgIHRoaXMucmluZ01hcmdpbiA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogZmlsbAogICAgICAgIC8vIHRydWUgb3IgZmFsc2UsIHdoZXRoZXIgdG8gZmlsIHRoZSBzbGljZXMuCiAgICAgICAgdGhpcy5maWxsID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBzaGFkb3dPZmZzZXQKICAgICAgICAvLyBvZmZzZXQgb2YgdGhlIHNoYWRvdyBmcm9tIHRoZSBzbGljZSBhbmQgb2Zmc2V0IG9mIAogICAgICAgIC8vIGVhY2ggc3VjY2VzaXZlIHN0cm9rZSBvZiB0aGUgc2hhZG93IGZyb20gdGhlIGxhc3QuCiAgICAgICAgdGhpcy5zaGFkb3dPZmZzZXQgPSAyOwogICAgICAgIC8vIHByb3A6IHNoYWRvd0FscGhhCiAgICAgICAgLy8gdHJhbnNwYXJlbmN5IG9mIHRoZSBzaGFkb3cgKDAgPSB0cmFuc3BhcmVudCwgMSA9IG9wYXF1ZSkKICAgICAgICB0aGlzLnNoYWRvd0FscGhhID0gMC4wNzsKICAgICAgICAvLyBwcm9wOiBzaGFkb3dEZXB0aAogICAgICAgIC8vIG51bWJlciBvZiBzdHJva2VzIHRvIGFwcGx5IHRvIHRoZSBzaGFkb3csIAogICAgICAgIC8vIGVhY2ggc3Ryb2tlIG9mZnNldCBzaGFkb3dPZmZzZXQgZnJvbSB0aGUgbGFzdC4KICAgICAgICB0aGlzLnNoYWRvd0RlcHRoID0gNTsKICAgICAgICAvLyBwcm9wOiBoaWdobGlnaHRNb3VzZU92ZXIKICAgICAgICAvLyBUcnVlIHRvIGhpZ2hsaWdodCBzbGljZSB3aGVuIG1vdXNlZCBvdmVyLgogICAgICAgIC8vIFRoaXMgbXVzdCBiZSBmYWxzZSB0byBlbmFibGUgaGlnaGxpZ2h0TW91c2VEb3duIHRvIGhpZ2hsaWdodCB3aGVuIGNsaWNraW5nIG9uIGEgc2xpY2UuCiAgICAgICAgdGhpcy5oaWdobGlnaHRNb3VzZU92ZXIgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IGhpZ2hsaWdodE1vdXNlRG93bgogICAgICAgIC8vIFRydWUgdG8gaGlnaGxpZ2h0IHdoZW4gYSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBvdmVyIGEgc2xpY2UuCiAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGRpc2FibGVkIGlmIGhpZ2hsaWdodE1vdXNlT3ZlciBpcyB0cnVlLgogICAgICAgIHRoaXMuaGlnaGxpZ2h0TW91c2VEb3duID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogaGlnaGxpZ2h0Q29sb3JzCiAgICAgICAgLy8gYW4gYXJyYXkgb2YgY29sb3JzIHRvIHVzZSB3aGVuIGhpZ2hsaWdodGluZyBhIHNsaWNlLgogICAgICAgIHRoaXMuaGlnaGxpZ2h0Q29sb3JzID0gW107CiAgICAgICAgLy8gcHJvcDogZGF0YUxhYmVscwogICAgICAgIC8vIEVpdGhlciAnbGFiZWwnLCAndmFsdWUnLCAncGVyY2VudCcgb3IgYW4gYXJyYXkgb2YgbGFiZWxzIHRvIHBsYWNlIG9uIHRoZSBwaWUgc2xpY2VzLgogICAgICAgIC8vIERlZmF1bHRzIHRvIHBlcmNlbnRhZ2Ugb2YgZWFjaCBwaWUgc2xpY2UuCiAgICAgICAgdGhpcy5kYXRhTGFiZWxzID0gJ3BlcmNlbnQnOwogICAgICAgIC8vIHByb3A6IHNob3dEYXRhTGFiZWxzCiAgICAgICAgLy8gdHJ1ZSB0byBzaG93IGRhdGEgbGFiZWxzIG9uIHNsaWNlcy4KICAgICAgICB0aGlzLnNob3dEYXRhTGFiZWxzID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogZGF0YUxhYmVsRm9ybWF0U3RyaW5nCiAgICAgICAgLy8gRm9ybWF0IHN0cmluZyBmb3IgZGF0YSBsYWJlbHMuICBJZiBub25lLCAnJXMnIGlzIHVzZWQgZm9yICJsYWJlbCIgYW5kIGZvciBhcnJheXMsICclZCcgZm9yIHZhbHVlIGFuZCAnJWQlJScgZm9yIHBlcmNlbnRhZ2UuCiAgICAgICAgdGhpcy5kYXRhTGFiZWxGb3JtYXRTdHJpbmcgPSBudWxsOwogICAgICAgIC8vIHByb3A6IGRhdGFMYWJlbFRocmVzaG9sZAogICAgICAgIC8vIFRocmVzaGhvbGQgaW4gcGVyY2VudGFnZSAoMCAtIDEwMCkgb2YgcGllIGFyZWEsIGJlbG93IHdoaWNoIG5vIGxhYmVsIHdpbGwgYmUgZGlzcGxheWVkLgogICAgICAgIC8vIFRoaXMgYXBwbGllcyB0byBhbGwgbGFiZWwgdHlwZXMsIG5vdCBqdXN0IHRvIHBlcmNlbnRhZ2UgbGFiZWxzLgogICAgICAgIHRoaXMuZGF0YUxhYmVsVGhyZXNob2xkID0gMzsKICAgICAgICAvLyBwcm9wOiBkYXRhTGFiZWxQb3NpdGlvbkZhY3RvcgogICAgICAgIC8vIEEgTXVsdGlwbGllciAoMC0xKSBvZiB0aGUgcGllIHJhZGl1cyB3aGljaCBjb250cm9scyBwb3NpdGlvbiBvZiBsYWJlbCBvbiBzbGljZS4KICAgICAgICAvLyBJbmNyZWFzaW5nIHdpbGwgc2xpZGUgbGFiZWwgdG93YXJkIGVkZ2Ugb2YgcGllLCBkZWNyZWFzaW5nIHdpbGwgc2xpZGUgbGFiZWwgdG93YXJkIGNlbnRlciBvZiBwaWUuCiAgICAgICAgdGhpcy5kYXRhTGFiZWxQb3NpdGlvbkZhY3RvciA9IDAuNDsKICAgICAgICAvLyBwcm9wOiBkYXRhTGFiZWxOdWRnZQogICAgICAgIC8vIE51bWJlciBvZiBwaXhlbHMgdG8gc2xpZGUgdGhlIGxhYmVsIGF3YXkgZnJvbSAoKykgb3IgdG93YXJkICgtKSB0aGUgY2VudGVyIG9mIHRoZSBwaWUuCiAgICAgICAgdGhpcy5kYXRhTGFiZWxOdWRnZSA9IDA7CiAgICAgICAgLy8gcHJvcDogc3RhcnRBbmdsZQogICAgICAgIC8vIEFuZ2xlIHRvIHN0YXJ0IGRyYXdpbmcgZG9udXQgaW4gZGVncmVlcy4gIAogICAgICAgIC8vIEFjY29yZGluZyB0byBvcmllbnRhdGlvbiBvZiBjYW52YXMgY29vcmRpbmF0ZSBzeXN0ZW06CiAgICAgICAgLy8gMCA9IG9uIHRoZSBwb3NpdGl2ZSB4IGF4aXMKICAgICAgICAvLyAtOTAgPSBvbiB0aGUgcG9zaXRpdmUgeSBheGlzLgogICAgICAgIC8vIDkwID0gb24gdGhlIG5lZ2FpdmUgeSBheGlzLgogICAgICAgIC8vIDE4MCBvciAtIDE4MCA9IG9uIHRoZSBuZWdhdGl2ZSB4IGF4aXMuCiAgICAgICAgdGhpcy5zdGFydEFuZ2xlID0gMDsKICAgICAgICB0aGlzLnRpY2tSZW5kZXJlciA9ICQuanFwbG90LkRvbnV0VGlja1JlbmRlcmVyOwogICAgICAgIC8vIFVzZWQgYXMgY2hlY2sgZm9yIGNvbmRpdGlvbnMgd2hlcmUgZG9udXQgc2hvdWxkbid0IGJlIGRyYXduLgogICAgICAgIHRoaXMuX2RyYXdEYXRhID0gdHJ1ZTsKICAgICAgICB0aGlzLl90eXBlID0gJ2RvbnV0JzsKICAgICAgICAKICAgICAgICAvLyBpZiB1c2VyIGhhcyBwYXNzZWQgaW4gaGlnaGxpZ2h0TW91c2VEb3duIG9wdGlvbiBhbmQgbm90IHNldCBoaWdobGlnaHRNb3VzZU92ZXIsIGRpc2FibGUgaGlnaGxpZ2h0TW91c2VPdmVyCiAgICAgICAgaWYgKG9wdGlvbnMuaGlnaGxpZ2h0TW91c2VEb3duICYmIG9wdGlvbnMuaGlnaGxpZ2h0TW91c2VPdmVyID09IG51bGwpIHsKICAgICAgICAgICAgb3B0aW9ucy5oaWdobGlnaHRNb3VzZU92ZXIgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CiAgICAgICAgaWYgKHRoaXMuZGlhbWV0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLmRpYW1ldGVyID0gdGhpcy5kaWFtZXRlciAtIHRoaXMuc2xpY2VNYXJnaW47CiAgICAgICAgfQogICAgICAgIHRoaXMuX2RpYW1ldGVyID0gbnVsbDsKICAgICAgICB0aGlzLl9pbm5lckRpYW1ldGVyID0gbnVsbDsKICAgICAgICB0aGlzLl9yYWRpdXMgPSBudWxsOwogICAgICAgIHRoaXMuX2lubmVyUmFkaXVzID0gbnVsbDsKICAgICAgICB0aGlzLl90aGlja25lc3MgPSBudWxsOwogICAgICAgIC8vIHJlZmVyZW5jZXMgdG8gdGhlIHByZXZpb3VzIHNlcmllcyBpbiB0aGUgcGxvdCB0byBwcm9wZXJseSBjYWxjdWxhdGUgZGlhbWV0ZXJzCiAgICAgICAgLy8gYW5kIHRoaWNrbmVzc2VzIG9mIG5lc3RlZCByaW5ncy4KICAgICAgICB0aGlzLl9wcmV2aW91c1NlcmllcyA9IFtdOwogICAgICAgIHRoaXMuX251bWJlclNlcmllcyA9IDE7CiAgICAgICAgLy8gYXJyYXkgb2YgW3N0YXJ0LGVuZF0gYW5nbGVzIGFycmF5cywgb25lIGZvciBlYWNoIHNsaWNlLiAgSW4gcmFkaWFucy4KICAgICAgICB0aGlzLl9zbGljZUFuZ2xlcyA9IFtdOwogICAgICAgIC8vIGluZGV4IG9mIHRoZSBjdXJyZW50eSBoaWdobGlnaHRlZCBwb2ludCwgaWYgYW55CiAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWRQb2ludCA9IG51bGw7CiAgICAgICAgCiAgICAgICAgLy8gc2V0IGhpZ2hsaWdodCBjb2xvcnMgaWYgbm9uZSBwcm92aWRlZAogICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodENvbG9ycy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5zZXJpZXNDb2xvcnMubGVuZ3RoOyBpKyspewogICAgICAgICAgICAgICAgdmFyIHJnYmEgPSAkLmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHModGhpcy5zZXJpZXNDb2xvcnNbaV0pOwogICAgICAgICAgICAgICAgdmFyIG5ld3JnYiA9IFtyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdXTsKICAgICAgICAgICAgICAgIHZhciBzdW0gPSBuZXdyZ2JbMF0gKyBuZXdyZ2JbMV0gKyBuZXdyZ2JbMl07CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8MzsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBkYXJrZW5pbmcsIGxvd2VzdCBjb2xvciBjb21wb25lbnQgY2FuIGJlIGlzIDYwLgogICAgICAgICAgICAgICAgICAgIG5ld3JnYltqXSA9IChzdW0gPiA1NzApID8gIG5ld3JnYltqXSAqIDAuOCA6IG5ld3JnYltqXSArIDAuMyAqICgyNTUgLSBuZXdyZ2Jbal0pOwogICAgICAgICAgICAgICAgICAgIG5ld3JnYltqXSA9IHBhcnNlSW50KG5ld3JnYltqXSwgMTApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRDb2xvcnMucHVzaCgncmdiKCcrbmV3cmdiWzBdKycsJytuZXdyZ2JbMV0rJywnK25ld3JnYlsyXSsnKScpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHBsb3QucG9zdFBhcnNlT3B0aW9uc0hvb2tzLmFkZE9uY2UocG9zdFBhcnNlT3B0aW9ucyk7CiAgICAgICAgcGxvdC5wb3N0SW5pdEhvb2tzLmFkZE9uY2UocG9zdEluaXQpOwogICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdE1vdXNlTW92ZScsIGhhbmRsZU1vdmUpOwogICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdE1vdXNlRG93bicsIGhhbmRsZU1vdXNlRG93bik7CiAgICAgICAgcGxvdC5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgnanFwbG90TW91c2VVcCcsIGhhbmRsZU1vdXNlVXApOwogICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdENsaWNrJywgaGFuZGxlQ2xpY2spOwogICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdFJpZ2h0Q2xpY2snLCBoYW5kbGVSaWdodENsaWNrKTsKICAgICAgICBwbG90LnBvc3REcmF3SG9va3MuYWRkT25jZShwb3N0UGxvdERyYXcpOwogICAgICAgIAogICAgICAgIAogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRG9udXRSZW5kZXJlci5wcm90b3R5cGUuc2V0R3JpZERhdGEgPSBmdW5jdGlvbihwbG90KSB7CiAgICAgICAgLy8gc2V0IGdyaWREYXRhIHByb3BlcnR5LiAgVGhpcyB3aWxsIGhvbGQgYW5nbGUgaW4gcmFkaWFucyBvZiBlYWNoIGRhdGEgcG9pbnQuCiAgICAgICAgdmFyIHN0YWNrID0gW107CiAgICAgICAgdmFyIHRkID0gW107CiAgICAgICAgdmFyIHNhID0gdGhpcy5zdGFydEFuZ2xlLzE4MCpNYXRoLlBJOwogICAgICAgIHZhciB0b3QgPSAwOwogICAgICAgIC8vIGRvbid0IGtub3cgaWYgd2UgaGF2ZSBhbnkgdmFsaWQgZGF0YSB5ZXQsIHNvIHNldCBwbG90IHRvIG5vdCBkcmF3LgogICAgICAgIHRoaXMuX2RyYXdEYXRhID0gZmFsc2U7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV1bMV0gIT0gMCkgewogICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBkYXRhLCBPLksuIHRvIGRyYXcuCiAgICAgICAgICAgICAgICB0aGlzLl9kcmF3RGF0YSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLmRhdGFbaV1bMV0pOwogICAgICAgICAgICB0ZC5wdXNoKFt0aGlzLmRhdGFbaV1bMF1dKTsKICAgICAgICAgICAgaWYgKGk+MCkgewogICAgICAgICAgICAgICAgc3RhY2tbaV0gKz0gc3RhY2tbaS0xXTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0b3QgKz0gdGhpcy5kYXRhW2ldWzFdOwogICAgICAgIH0KICAgICAgICB2YXIgZmFjdCA9IE1hdGguUEkqMi9zdGFja1tzdGFjay5sZW5ndGggLSAxXTsKICAgICAgICAKICAgICAgICBmb3IgKHZhciBpPTA7IGk8c3RhY2subGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGRbaV1bMV0gPSBzdGFja1tpXSAqIGZhY3Q7CiAgICAgICAgICAgIHRkW2ldWzJdID0gdGhpcy5kYXRhW2ldWzFdL3RvdDsKICAgICAgICB9CiAgICAgICAgdGhpcy5ncmlkRGF0YSA9IHRkOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRG9udXRSZW5kZXJlci5wcm90b3R5cGUubWFrZUdyaWREYXRhID0gZnVuY3Rpb24oZGF0YSwgcGxvdCkgewogICAgICAgIHZhciBzdGFjayA9IFtdOwogICAgICAgIHZhciB0ZCA9IFtdOwogICAgICAgIHZhciB0b3QgPSAwOwogICAgICAgIHZhciBzYSA9IHRoaXMuc3RhcnRBbmdsZS8xODAqTWF0aC5QSTsKICAgICAgICAvLyBkb24ndCBrbm93IGlmIHdlIGhhdmUgYW55IHZhbGlkIGRhdGEgeWV0LCBzbyBzZXQgcGxvdCB0byBub3QgZHJhdy4KICAgICAgICB0aGlzLl9kcmF3RGF0YSA9IGZhbHNlOwogICAgICAgIGZvciAodmFyIGk9MDsgaTxkYXRhLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtpXVsxXSAhPSAwKSB7CiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGRhdGEsIE8uSy4gdG8gZHJhdy4KICAgICAgICAgICAgICAgIHRoaXMuX2RyYXdEYXRhID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdGFjay5wdXNoKGRhdGFbaV1bMV0pOwogICAgICAgICAgICB0ZC5wdXNoKFtkYXRhW2ldWzBdXSk7CiAgICAgICAgICAgIGlmIChpPjApIHsKICAgICAgICAgICAgICAgIHN0YWNrW2ldICs9IHN0YWNrW2ktMV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdG90ICs9IGRhdGFbaV1bMV07CiAgICAgICAgfQogICAgICAgIHZhciBmYWN0ID0gTWF0aC5QSSoyL3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOwogICAgICAgIAogICAgICAgIGZvciAodmFyIGk9MDsgaTxzdGFjay5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0ZFtpXVsxXSA9IHN0YWNrW2ldICogZmFjdDsKICAgICAgICAgICAgdGRbaV1bMl0gPSBkYXRhW2ldWzFdL3RvdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRkOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRG9udXRSZW5kZXJlci5wcm90b3R5cGUuZHJhd1NsaWNlID0gZnVuY3Rpb24gKGN0eCwgYW5nMSwgYW5nMiwgY29sb3IsIGlzU2hhZG93KSB7CiAgICAgICAgdmFyIHIgPSB0aGlzLl9kaWFtZXRlciAvIDI7CiAgICAgICAgdmFyIHJpID0gciAtIHRoaXMuX3RoaWNrbmVzczsKICAgICAgICB2YXIgZmlsbCA9IHRoaXMuZmlsbDsKICAgICAgICAvLyB2YXIgbGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7CiAgICAgICAgY3R4LnNhdmUoKTsKICAgICAgICBjdHgudHJhbnNsYXRlKHRoaXMuX2NlbnRlclswXSwgdGhpcy5fY2VudGVyWzFdKTsKICAgICAgICAvLyBjdHgudHJhbnNsYXRlKHRoaXMuc2xpY2VNYXJnaW4qTWF0aC5jb3MoKGFuZzErYW5nMikvMiksIHRoaXMuc2xpY2VNYXJnaW4qTWF0aC5zaW4oKGFuZzErYW5nMikvMikpOwogICAgICAgIAogICAgICAgIGlmIChpc1NoYWRvdykgewogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5zaGFkb3dEZXB0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSh0aGlzLnNoYWRvd09mZnNldCpNYXRoLmNvcyh0aGlzLnNoYWRvd0FuZ2xlLzE4MCpNYXRoLlBJKSwgdGhpcy5zaGFkb3dPZmZzZXQqTWF0aC5zaW4odGhpcy5zaGFkb3dBbmdsZS8xODAqTWF0aC5QSSkpOwogICAgICAgICAgICAgICAgZG9EcmF3KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRvRHJhdygpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmdW5jdGlvbiBkb0RyYXcgKCkgewogICAgICAgICAgICAvLyBGaXggZm9yIElFIGFuZCBDaHJvbWUgdGhhdCBjYW4ndCBzZWVtIHRvIGRyYXcgY2lyY2xlcyBjb3JyZWN0bHkuCiAgICAgICAgICAgIC8vIGFuZzIgc2hvdWxkIGFsd2F5cyBiZSA8PSAyIHBpIHNpbmNlIHRoYXQgaXMgdGhlIHdheSB0aGUgZGF0YSBpcyBjb252ZXJ0ZWQuCiAgICAgICAgICAgICBpZiAoYW5nMiA+IDYuMjgyICsgdGhpcy5zdGFydEFuZ2xlKSB7CiAgICAgICAgICAgICAgICBhbmcyID0gNi4yODIgKyB0aGlzLnN0YXJ0QW5nbGU7CiAgICAgICAgICAgICAgICBpZiAoYW5nMSA+IGFuZzIpIHsKICAgICAgICAgICAgICAgICAgICBhbmcxID0gNi4yODEgKyB0aGlzLnN0YXJ0QW5nbGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gRml4IGZvciBJRSwgd2hlcmUgaXQgY2FuJ3Qgc2VlbSB0byBoYW5kbGUgMCBkZWdyZWUgYW5nbGVzLiAgQWxzbyBhdm9pZHMKICAgICAgICAgICAgLy8gdWdseSBsaW5lIG9uIHVuZmlsbGVkIGRvbnV0cy4KICAgICAgICAgICAgaWYgKGFuZzEgPj0gYW5nMikgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsgIAogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7CiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yOwogICAgICAgICAgICAvLyBjdHgubGluZVdpZHRoID0gbGluZVdpZHRoOwogICAgICAgICAgICBjdHguYXJjKDAsIDAsIHIsIGFuZzEsIGFuZzIsIGZhbHNlKTsKICAgICAgICAgICAgY3R4LmxpbmVUbyhyaSpNYXRoLmNvcyhhbmcyKSwgcmkqTWF0aC5zaW4oYW5nMikpOwogICAgICAgICAgICBjdHguYXJjKDAsMCwgcmksIGFuZzIsIGFuZzEsIHRydWUpOwogICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7CiAgICAgICAgICAgIGlmIChmaWxsKSB7CiAgICAgICAgICAgICAgICBjdHguZmlsbCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChpc1NoYWRvdykgewogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5zaGFkb3dEZXB0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBzZXJpZXMKICAgICQuanFwbG90LkRvbnV0UmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbiAoY3R4LCBnZCwgb3B0aW9ucywgcGxvdCkgewogICAgICAgIHZhciBpOwogICAgICAgIHZhciBvcHRzID0gKG9wdGlvbnMgIT0gdW5kZWZpbmVkKSA/IG9wdGlvbnMgOiB7fTsKICAgICAgICAvLyBvZmZzZXQgYW5kIGRpcmVjdGlvbiBvZiBvZmZzZXQgZHVlIHRvIGxlZ2VuZCBwbGFjZW1lbnQKICAgICAgICB2YXIgb2ZmeCA9IDA7CiAgICAgICAgdmFyIG9mZnkgPSAwOwogICAgICAgIHZhciB0cmFucyA9IDE7CiAgICAgICAgLy8gdmFyIGNvbG9yR2VuZXJhdG9yID0gbmV3IHRoaXMuY29sb3JHZW5lcmF0b3IodGhpcy5zZXJpZXNDb2xvcnMpOwogICAgICAgIGlmIChvcHRpb25zLmxlZ2VuZEluZm8gJiYgb3B0aW9ucy5sZWdlbmRJbmZvLnBsYWNlbWVudCA9PSAnaW5zaWRlR3JpZCcpIHsKICAgICAgICAgICAgdmFyIGxpID0gb3B0aW9ucy5sZWdlbmRJbmZvOwogICAgICAgICAgICBzd2l0Y2ggKGxpLmxvY2F0aW9uKSB7CiAgICAgICAgICAgICAgICBjYXNlICdudyc6CiAgICAgICAgICAgICAgICAgICAgb2ZmeCA9IGxpLndpZHRoICsgbGkueG9mZnNldDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3cnOgogICAgICAgICAgICAgICAgICAgIG9mZnggPSBsaS53aWR0aCArIGxpLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdzdyc6CiAgICAgICAgICAgICAgICAgICAgb2ZmeCA9IGxpLndpZHRoICsgbGkueG9mZnNldDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ25lJzoKICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gbGkud2lkdGggKyBsaS54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIHRyYW5zID0gLTE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdlJzoKICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gbGkud2lkdGggKyBsaS54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIHRyYW5zID0gLTE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdzZSc6CiAgICAgICAgICAgICAgICAgICAgb2ZmeCA9IGxpLndpZHRoICsgbGkueG9mZnNldDsKICAgICAgICAgICAgICAgICAgICB0cmFucyA9IC0xOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbic6CiAgICAgICAgICAgICAgICAgICAgb2ZmeSA9IGxpLmhlaWdodCArIGxpLnlvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgICAgICBvZmZ5ID0gbGkuaGVpZ2h0ICsgbGkueW9mZnNldDsKICAgICAgICAgICAgICAgICAgICB0cmFucyA9IC0xOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgc2hhZG93ID0gKG9wdHMuc2hhZG93ICE9IHVuZGVmaW5lZCkgPyBvcHRzLnNoYWRvdyA6IHRoaXMuc2hhZG93OwogICAgICAgIHZhciBzaG93TGluZSA9IChvcHRzLnNob3dMaW5lICE9IHVuZGVmaW5lZCkgPyBvcHRzLnNob3dMaW5lIDogdGhpcy5zaG93TGluZTsKICAgICAgICB2YXIgZmlsbCA9IChvcHRzLmZpbGwgIT0gdW5kZWZpbmVkKSA/IG9wdHMuZmlsbCA6IHRoaXMuZmlsbDsKICAgICAgICB2YXIgY3cgPSBjdHguY2FudmFzLndpZHRoOwogICAgICAgIHZhciBjaCA9IGN0eC5jYW52YXMuaGVpZ2h0OwogICAgICAgIHZhciB3ID0gY3cgLSBvZmZ4IC0gMiAqIHRoaXMucGFkZGluZzsKICAgICAgICB2YXIgaCA9IGNoIC0gb2ZmeSAtIDIgKiB0aGlzLnBhZGRpbmc7CiAgICAgICAgdmFyIG1pbmRpbSA9IE1hdGgubWluKHcsaCk7CiAgICAgICAgdmFyIGQgPSBtaW5kaW07CiAgICAgICAgdmFyIHJpbmdtYXJnaW4gPSAgKHRoaXMucmluZ01hcmdpbiA9PSBudWxsKSA/IHRoaXMuc2xpY2VNYXJnaW4gKiAyLjAgOiB0aGlzLnJpbmdNYXJnaW47CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMuX3ByZXZpb3VzU2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGQgLT0gMi4wICogdGhpcy5fcHJldmlvdXNTZXJpZXNbaV0uX3RoaWNrbmVzcyArIDIuMCAqIHJpbmdtYXJnaW47CiAgICAgICAgfQogICAgICAgIHRoaXMuX2RpYW1ldGVyID0gdGhpcy5kaWFtZXRlciB8fCBkOwogICAgICAgIGlmICh0aGlzLmlubmVyRGlhbWV0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICB2YXIgb2QgPSAodGhpcy5fbnVtYmVyU2VyaWVzID4gMSAmJiB0aGlzLmluZGV4ID4gMCkgPyB0aGlzLl9wcmV2aW91c1Nlcmllc1swXS5fZGlhbWV0ZXIgOiB0aGlzLl9kaWFtZXRlcjsKICAgICAgICAgICAgdGhpcy5fdGhpY2tuZXNzID0gdGhpcy50aGlja25lc3MgfHwgKG9kIC0gdGhpcy5pbm5lckRpYW1ldGVyIC0gMi4wKnJpbmdtYXJnaW4qdGhpcy5fbnVtYmVyU2VyaWVzKSAvIHRoaXMuX251bWJlclNlcmllcy8yLjA7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0aGlzLl90aGlja25lc3MgPSB0aGlzLnRoaWNrbmVzcyB8fCBtaW5kaW0gLyAyIC8gKHRoaXMuX251bWJlclNlcmllcyArIDEpICogMC44NTsKICAgICAgICB9CgogICAgICAgIHZhciByID0gdGhpcy5fcmFkaXVzID0gdGhpcy5fZGlhbWV0ZXIvMjsKICAgICAgICB0aGlzLl9pbm5lclJhZGl1cyA9IHRoaXMuX3JhZGl1cyAtIHRoaXMuX3RoaWNrbmVzczsKICAgICAgICB2YXIgc2EgPSB0aGlzLnN0YXJ0QW5nbGUgLyAxODAgKiBNYXRoLlBJOwogICAgICAgIHRoaXMuX2NlbnRlciA9IFsoY3cgLSB0cmFucyAqIG9mZngpLzIgKyB0cmFucyAqIG9mZngsIChjaCAtIHRyYW5zKm9mZnkpLzIgKyB0cmFucyAqIG9mZnldOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnNoYWRvdykgewogICAgICAgICAgICB2YXIgc2hhZG93Q29sb3IgPSAncmdiYSgwLDAsMCwnK3RoaXMuc2hhZG93QWxwaGErJyknOwogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8Z2QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBhbmcxID0gKGkgPT0gMCkgPyBzYSA6IGdkW2ktMV1bMV0gKyBzYTsKICAgICAgICAgICAgICAgIC8vIEFkanVzdCBhbmcxIGFuZCBhbmcyIGZvciBzbGljZU1hcmdpbgogICAgICAgICAgICAgICAgYW5nMSArPSB0aGlzLnNsaWNlTWFyZ2luLzE4MCpNYXRoLlBJOwogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3U2xpY2UuY2FsbCAodGhpcywgY3R4LCBhbmcxLCBnZFtpXVsxXStzYSwgc2hhZG93Q29sb3IsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpPTA7IGk8Z2QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGFuZzEgPSAoaSA9PSAwKSA/IHNhIDogZ2RbaS0xXVsxXSArIHNhOwogICAgICAgICAgICAvLyBBZGp1c3QgYW5nMSBhbmQgYW5nMiBmb3Igc2xpY2VNYXJnaW4KICAgICAgICAgICAgYW5nMSArPSB0aGlzLnNsaWNlTWFyZ2luLzE4MCpNYXRoLlBJOwogICAgICAgICAgICB2YXIgYW5nMiA9IGdkW2ldWzFdICsgc2E7CiAgICAgICAgICAgIHRoaXMuX3NsaWNlQW5nbGVzLnB1c2goW2FuZzEsIGFuZzJdKTsKICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3U2xpY2UuY2FsbCAodGhpcywgY3R4LCBhbmcxLCBhbmcyLCB0aGlzLnNlcmllc0NvbG9yc1tpXSwgZmFsc2UpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0RhdGFMYWJlbHMgJiYgZ2RbaV1bMl0qMTAwID49IHRoaXMuZGF0YUxhYmVsVGhyZXNob2xkKSB7CiAgICAgICAgICAgICAgICB2YXIgZnN0ciwgYXZnYW5nID0gKGFuZzErYW5nMikvMiwgbGFiZWw7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFMYWJlbHMgPT0gJ2xhYmVsJykgewogICAgICAgICAgICAgICAgICAgIGZzdHIgPSB0aGlzLmRhdGFMYWJlbEZvcm1hdFN0cmluZyB8fCAnJXMnOwogICAgICAgICAgICAgICAgICAgIGxhYmVsID0gJC5qcXBsb3Quc3ByaW50Zihmc3RyLCBnZFtpXVswXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmRhdGFMYWJlbHMgPT0gJ3ZhbHVlJykgewogICAgICAgICAgICAgICAgICAgIGZzdHIgPSB0aGlzLmRhdGFMYWJlbEZvcm1hdFN0cmluZyB8fCAnJWQnOwogICAgICAgICAgICAgICAgICAgIGxhYmVsID0gJC5qcXBsb3Quc3ByaW50Zihmc3RyLCB0aGlzLmRhdGFbaV1bMV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXRhTGFiZWxzID09ICdwZXJjZW50JykgewogICAgICAgICAgICAgICAgICAgIGZzdHIgPSB0aGlzLmRhdGFMYWJlbEZvcm1hdFN0cmluZyB8fCAnJWQlJSc7CiAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAkLmpxcGxvdC5zcHJpbnRmKGZzdHIsIGdkW2ldWzJdKjEwMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmRhdGFMYWJlbHMuY29uc3RydWN0b3IgPT0gQXJyYXkpIHsKICAgICAgICAgICAgICAgICAgICBmc3RyID0gdGhpcy5kYXRhTGFiZWxGb3JtYXRTdHJpbmcgfHwgJyVzJzsKICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICQuanFwbG90LnNwcmludGYoZnN0ciwgdGhpcy5kYXRhTGFiZWxzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGZhY3QgPSB0aGlzLl9pbm5lclJhZGl1cyArIHRoaXMuX3RoaWNrbmVzcyAqIHRoaXMuZGF0YUxhYmVsUG9zaXRpb25GYWN0b3IgKyB0aGlzLnNsaWNlTWFyZ2luICsgdGhpcy5kYXRhTGFiZWxOdWRnZTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIHggPSB0aGlzLl9jZW50ZXJbMF0gKyBNYXRoLmNvcyhhdmdhbmcpICogZmFjdCArIHRoaXMuY2FudmFzLl9vZmZzZXRzLmxlZnQ7CiAgICAgICAgICAgICAgICB2YXIgeSA9IHRoaXMuX2NlbnRlclsxXSArIE1hdGguc2luKGF2Z2FuZykgKiBmYWN0ICsgdGhpcy5jYW52YXMuX29mZnNldHMudG9wOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbGFiZWxlbGVtID0gJCgnPHNwYW4gY2xhc3M9ImpxcGxvdC1kb251dC1zZXJpZXMganFwbG90LWRhdGEtbGFiZWwiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiPicgKyBsYWJlbCArICc8L3NwYW4+JykuaW5zZXJ0QmVmb3JlKHBsb3QuZXZlbnRDYW52YXMuX2VsZW0pOwogICAgICAgICAgICAgICAgeCAtPSBsYWJlbGVsZW0ud2lkdGgoKS8yOwogICAgICAgICAgICAgICAgeSAtPSBsYWJlbGVsZW0uaGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgIHggPSBNYXRoLnJvdW5kKHgpOwogICAgICAgICAgICAgICAgeSA9IE1hdGgucm91bmQoeSk7CiAgICAgICAgICAgICAgICBsYWJlbGVsZW0uY3NzKHtsZWZ0OiB4LCB0b3A6IHl9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAgICAgICAgCiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5Eb251dEF4aXNSZW5kZXJlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRG9udXRBeGlzUmVuZGVyZXIucHJvdG90eXBlID0gbmV3ICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlcigpOwogICAgJC5qcXBsb3QuRG9udXRBeGlzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJC5qcXBsb3QuRG9udXRBeGlzUmVuZGVyZXI7CiAgICAgICAgCiAgICAKICAgIC8vIFRoZXJlIGFyZSBubyB0cmFkaXRpb25hbCBheGVzIG9uIGEgZG9udXQgY2hhcnQuICBXZSBqdXN0IG5lZWQgdG8gcHJvdmlkZQogICAgLy8gZHVtbXkgb2JqZWN0cyB3aXRoIHByb3BlcnRpZXMgc28gdGhlIHBsb3Qgd2lsbCByZW5kZXIuCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBheGlzIG9iamVjdC4KICAgICQuanFwbG90LkRvbnV0QXhpc1JlbmRlcmVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucyl7CiAgICAgICAgLy8KICAgICAgICB0aGlzLnRpY2tSZW5kZXJlciA9ICQuanFwbG90LkRvbnV0VGlja1JlbmRlcmVyOwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIC8vIEkgZG9uJ3QgdGhpbmsgSSdtIGdvaW5nIHRvIG5lZWQgX2RhdGFCb3VuZHMgaGVyZS4KICAgICAgICAvLyBoYXZlIHRvIGdvIEF4aXMgc2NhbGluZyBpbiBhIHdheSB0byBmaXQgY2hhcnQgb250byBwbG90IGFyZWEKICAgICAgICAvLyBhbmQgcHJvdmlkZSB1MnAgYW5kIHAydSBmdW5jdGlvbmFsaXR5IGZvciBtb3VzZSBjdXJzb3IsIGV0Yy4KICAgICAgICAvLyBmb3IgY29udmllbmVuY2Ugc2V0IF9kYXRhQm91bmRzIHRvIDAgYW5kIDEwMCBhbmQKICAgICAgICAvLyBzZXQgbWluL21heCB0byAwIGFuZCAxMDAuCiAgICAgICAgdGhpcy5fZGF0YUJvdW5kcyA9IHttaW46MCwgbWF4OjEwMH07CiAgICAgICAgdGhpcy5taW4gPSAwOwogICAgICAgIHRoaXMubWF4ID0gMTAwOwogICAgICAgIHRoaXMuc2hvd1RpY2tzID0gZmFsc2U7CiAgICAgICAgdGhpcy50aWNrcyA9IFtdOwogICAgICAgIHRoaXMuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTsgCiAgICB9OwogICAgCiAgICAKICAgIAogICAgCiAgICAkLmpxcGxvdC5Eb251dExlZ2VuZFJlbmRlcmVyID0gZnVuY3Rpb24oKXsKICAgICAgICAkLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyLmNhbGwodGhpcyk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5Eb251dExlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyKCk7CiAgICAkLmpxcGxvdC5Eb251dExlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90LkRvbnV0TGVnZW5kUmVuZGVyZXI7CiAgICAKICAgIC8qKgogICAgICogQ2xhc3M6ICQuanFwbG90LkRvbnV0TGVnZW5kUmVuZGVyZXIKICAgICAqIExlZ2VuZCBSZW5kZXJlciBzcGVjaWZpYyB0byBkb251dCBwbG90cy4gIFNldCBieSBkZWZhdWx0CiAgICAgKiB3aGVuIHVzZXIgY3JlYXRlcyBhIGRvbnV0IHBsb3QuCiAgICAgKi8KICAgICQuanFwbG90LkRvbnV0TGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAvLwogICAgICAgIC8vIHByb3A6IG51bWJlclJvd3MKICAgICAgICAvLyBNYXhpbXVtIG51bWJlciBvZiByb3dzIGluIHRoZSBsZWdlbmQuICAwIG9yIG51bGwgZm9yIHVubGltaXRlZC4KICAgICAgICB0aGlzLm51bWJlclJvd3MgPSBudWxsOwogICAgICAgIC8vIHByb3A6IG51bWJlckNvbHVtbnMKICAgICAgICAvLyBNYXhpbXVtIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBsZWdlbmQuICAwIG9yIG51bGwgZm9yIHVubGltaXRlZC4KICAgICAgICB0aGlzLm51bWJlckNvbHVtbnMgPSBudWxsOwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggY29udGV4dCBvZiBsZWdlbmQKICAgICQuanFwbG90LkRvbnV0TGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgbGVnZW5kID0gdGhpczsKICAgICAgICBpZiAodGhpcy5zaG93KSB7CiAgICAgICAgICAgIHZhciBzZXJpZXMgPSB0aGlzLl9zZXJpZXM7CiAgICAgICAgICAgIHZhciBzcyA9ICdwb3NpdGlvbjphYnNvbHV0ZTsnOwogICAgICAgICAgICBzcyArPSAodGhpcy5iYWNrZ3JvdW5kKSA/ICdiYWNrZ3JvdW5kOicrdGhpcy5iYWNrZ3JvdW5kKyc7JyA6ICcnOwogICAgICAgICAgICBzcyArPSAodGhpcy5ib3JkZXIpID8gJ2JvcmRlcjonK3RoaXMuYm9yZGVyKyc7JyA6ICcnOwogICAgICAgICAgICBzcyArPSAodGhpcy5mb250U2l6ZSkgPyAnZm9udC1zaXplOicrdGhpcy5mb250U2l6ZSsnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMuZm9udEZhbWlseSkgPyAnZm9udC1mYW1pbHk6Jyt0aGlzLmZvbnRGYW1pbHkrJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLnRleHRDb2xvcikgPyAnY29sb3I6Jyt0aGlzLnRleHRDb2xvcisnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMubWFyZ2luVG9wICE9IG51bGwpID8gJ21hcmdpbi10b3A6Jyt0aGlzLm1hcmdpblRvcCsnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMubWFyZ2luQm90dG9tICE9IG51bGwpID8gJ21hcmdpbi1ib3R0b206Jyt0aGlzLm1hcmdpbkJvdHRvbSsnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMubWFyZ2luTGVmdCAhPSBudWxsKSA/ICdtYXJnaW4tbGVmdDonK3RoaXMubWFyZ2luTGVmdCsnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMubWFyZ2luUmlnaHQgIT0gbnVsbCkgPyAnbWFyZ2luLXJpZ2h0OicrdGhpcy5tYXJnaW5SaWdodCsnOycgOiAnJzsKICAgICAgICAgICAgdGhpcy5fZWxlbSA9ICQoJzx0YWJsZSBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCIgc3R5bGU9Iicrc3MrJyI+PC90YWJsZT4nKTsKICAgICAgICAgICAgLy8gRG9udXQgY2hhcnRzIGxlZ2VuZHMgZG9uJ3QgZ28gYnkgbnVtYmVyIG9mIHNlcmllcywgYnV0IGJ5IG51bWJlciBvZiBkYXRhIHBvaW50cwogICAgICAgICAgICAvLyBpbiB0aGUgc2VyaWVzLiAgUmVmYWN0b3IgdGhpbmdzIGhlcmUgZm9yIHRoYXQuCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcGFkID0gZmFsc2UsIAogICAgICAgICAgICAgICAgcmV2ZXJzZSA9IGZhbHNlLAogICAgICAgICAgICAgICAgbnIsIG5jOwogICAgICAgICAgICB2YXIgcyA9IHNlcmllc1swXTsKICAgICAgICAgICAgdmFyIGNvbG9yR2VuZXJhdG9yID0gbmV3ICQuanFwbG90LkNvbG9yR2VuZXJhdG9yKHMuc2VyaWVzQ29sb3JzKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzLnNob3cpIHsKICAgICAgICAgICAgICAgIHZhciBwZCA9IHMuZGF0YTsKICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bWJlclJvd3MpIHsKICAgICAgICAgICAgICAgICAgICBuciA9IHRoaXMubnVtYmVyUm93czsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubnVtYmVyQ29sdW1ucyl7CiAgICAgICAgICAgICAgICAgICAgICAgIG5jID0gTWF0aC5jZWlsKHBkLmxlbmd0aC9ucik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIG5jID0gdGhpcy5udW1iZXJDb2x1bW5zOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubnVtYmVyQ29sdW1ucykgewogICAgICAgICAgICAgICAgICAgIG5jID0gdGhpcy5udW1iZXJDb2x1bW5zOwogICAgICAgICAgICAgICAgICAgIG5yID0gTWF0aC5jZWlsKHBkLmxlbmd0aC90aGlzLm51bWJlckNvbHVtbnMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbnIgPSBwZC5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgbmMgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaSwgaiwgdHIsIHRkMSwgdGQyLCBsdCwgcnMsIGNvbG9yOwogICAgICAgICAgICAgICAgdmFyIGlkeCA9IDA7ICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTxucjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHJldmVyc2UpewogICAgICAgICAgICAgICAgICAgICAgICB0ciA9ICQoJzx0ciBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCI+PC90cj4nKS5wcmVwZW5kVG8odGhpcy5fZWxlbSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyID0gJCgnPHRyIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIj48L3RyPicpLmFwcGVuZFRvKHRoaXMuX2VsZW0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3IgKGo9MDsgajxuYzsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZHggPCBwZC5sZW5ndGgpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbHQgPSB0aGlzLmxhYmVsc1tpZHhdIHx8IHBkW2lkeF1bMF0udG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JHZW5lcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXZlcnNlKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaT4wKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBuciAtMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzID0gKHBhZCkgPyB0aGlzLnJvd1NwYWNpbmcgOiAnMCc7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMSA9ICQoJzx0ZCBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmctdG9wOicrcnMrJzsiPicrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXY+PGRpdiBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2giIHN0eWxlPSJib3JkZXItY29sb3I6Jytjb2xvcisnOyI+PC9kaXY+JysKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+PC90ZD4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMiA9ICQoJzx0ZCBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCIgc3R5bGU9InBhZGRpbmctdG9wOicrcnMrJzsiPjwvdGQ+Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lc2NhcGVIdG1sKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDIudGV4dChsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDIuaHRtbChsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2ZXJzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi5wcmVwZW5kVG8odHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMS5wcmVwZW5kVG8odHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQxLmFwcGVuZFRvKHRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDIuYXBwZW5kVG8odHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZHgrKzsKICAgICAgICAgICAgICAgICAgICB9ICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW07ICAgICAgICAgICAgICAgIAogICAgfTsKICAgIAogICAgLy8gc2V0dXAgZGVmYXVsdCByZW5kZXJlcnMgZm9yIGF4ZXMgYW5kIGxlZ2VuZCBzbyB1c2VyIGRvZXNuJ3QgaGF2ZSB0bwogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgcGxvdAogICAgZnVuY3Rpb24gcHJlSW5pdCh0YXJnZXQsIGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICBvcHRpb25zLmF4ZXNEZWZhdWx0cyA9IG9wdGlvbnMuYXhlc0RlZmF1bHRzIHx8IHt9OwogICAgICAgIG9wdGlvbnMubGVnZW5kID0gb3B0aW9ucy5sZWdlbmQgfHwge307CiAgICAgICAgb3B0aW9ucy5zZXJpZXNEZWZhdWx0cyA9IG9wdGlvbnMuc2VyaWVzRGVmYXVsdHMgfHwge307CiAgICAgICAgLy8gb25seSBzZXQgdGhlc2UgaWYgdGhlcmUgaXMgYSBkb251dCBzZXJpZXMKICAgICAgICB2YXIgc2V0b3B0cyA9IGZhbHNlOwogICAgICAgIGlmIChvcHRpb25zLnNlcmllc0RlZmF1bHRzLnJlbmRlcmVyID09ICQuanFwbG90LkRvbnV0UmVuZGVyZXIpIHsKICAgICAgICAgICAgc2V0b3B0cyA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuc2VyaWVzKSB7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaSA8IG9wdGlvbnMuc2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zZXJpZXNbaV0ucmVuZGVyZXIgPT0gJC5qcXBsb3QuRG9udXRSZW5kZXJlcikgewogICAgICAgICAgICAgICAgICAgIHNldG9wdHMgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChzZXRvcHRzKSB7CiAgICAgICAgICAgIG9wdGlvbnMuYXhlc0RlZmF1bHRzLnJlbmRlcmVyID0gJC5qcXBsb3QuRG9udXRBeGlzUmVuZGVyZXI7CiAgICAgICAgICAgIG9wdGlvbnMubGVnZW5kLnJlbmRlcmVyID0gJC5qcXBsb3QuRG9udXRMZWdlbmRSZW5kZXJlcjsKICAgICAgICAgICAgb3B0aW9ucy5sZWdlbmQucHJlRHJhdyA9IHRydWU7CiAgICAgICAgICAgIG9wdGlvbnMuc2VyaWVzRGVmYXVsdHMucG9pbnRMYWJlbHMgPSB7c2hvdzogZmFsc2V9OwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgcGxvdC4KICAgIGZ1bmN0aW9uIHBvc3RJbml0KHRhcmdldCwgZGF0YSwgb3B0aW9ucykgewogICAgICAgIC8vIGlmIG11bHRpcGxlIHNlcmllcywgYWRkIGEgcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBvbmUgc28gdGhhdAogICAgICAgIC8vIGRvbnV0IHJpbmdzIGNhbiBuZXN0LgogICAgICAgIGZvciAodmFyIGk9MTsgaTx0aGlzLnNlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoIXRoaXMuc2VyaWVzW2ldLl9wcmV2aW91c1Nlcmllcy5sZW5ndGgpewogICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPGk7IGorKykgewogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlcmllc1tpXS5yZW5kZXJlci5jb25zdHJ1Y3RvciA9PSAkLmpxcGxvdC5Eb251dFJlbmRlcmVyICYmIHRoaXMuc2VyaWVzW2pdLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkRvbnV0UmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNbaV0uX3ByZXZpb3VzU2VyaWVzLnB1c2godGhpcy5zZXJpZXNbal0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGk9MDsgaTx0aGlzLnNlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAodGhpcy5zZXJpZXNbaV0ucmVuZGVyZXIuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuRG9udXRSZW5kZXJlcikgewogICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNbaV0uX251bWJlclNlcmllcyA9IHRoaXMuc2VyaWVzLmxlbmd0aDsKICAgICAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IG1vdXNlb3ZlciBhbmQgbW91c2Vkb3duIGF0IHNhbWUgdGltZS4KICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlcmllc1tpXS5oaWdobGlnaHRNb3VzZU92ZXIpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcmllc1tpXS5oaWdobGlnaHRNb3VzZURvd24gPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgdmFyIHBvc3RQYXJzZU9wdGlvbnNSdW4gPSBmYWxzZTsKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIHBsb3QKICAgIGZ1bmN0aW9uIHBvc3RQYXJzZU9wdGlvbnMob3B0aW9ucykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnNlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0aGlzLnNlcmllc1tpXS5zZXJpZXNDb2xvcnMgPSB0aGlzLnNlcmllc0NvbG9yczsKICAgICAgICAgICAgdGhpcy5zZXJpZXNbaV0uY29sb3JHZW5lcmF0b3IgPSAkLmpxcGxvdC5jb2xvckdlbmVyYXRvcjsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhpZ2hsaWdodCAocGxvdCwgc2lkeCwgcGlkeCkgewogICAgICAgIHZhciBzID0gcGxvdC5zZXJpZXNbc2lkeF07CiAgICAgICAgdmFyIGNhbnZhcyA9IHBsb3QucGx1Z2lucy5kb251dFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhczsKICAgICAgICBjYW52YXMuX2N0eC5jbGVhclJlY3QoMCwwLGNhbnZhcy5fY3R4LmNhbnZhcy53aWR0aCwgY2FudmFzLl9jdHguY2FudmFzLmhlaWdodCk7CiAgICAgICAgcy5faGlnaGxpZ2h0ZWRQb2ludCA9IHBpZHg7CiAgICAgICAgcGxvdC5wbHVnaW5zLmRvbnV0UmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCA9IHNpZHg7CiAgICAgICAgcy5yZW5kZXJlci5kcmF3U2xpY2UuY2FsbChzLCBjYW52YXMuX2N0eCwgcy5fc2xpY2VBbmdsZXNbcGlkeF1bMF0sIHMuX3NsaWNlQW5nbGVzW3BpZHhdWzFdLCBzLmhpZ2hsaWdodENvbG9yc1twaWR4XSwgZmFsc2UpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiB1bmhpZ2hsaWdodCAocGxvdCkgewogICAgICAgIHZhciBjYW52YXMgPSBwbG90LnBsdWdpbnMuZG9udXRSZW5kZXJlci5oaWdobGlnaHRDYW52YXM7CiAgICAgICAgY2FudmFzLl9jdHguY2xlYXJSZWN0KDAsMCwgY2FudmFzLl9jdHguY2FudmFzLndpZHRoLCBjYW52YXMuX2N0eC5jYW52YXMuaGVpZ2h0KTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8cGxvdC5zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgcGxvdC5zZXJpZXNbaV0uX2hpZ2hsaWdodGVkUG9pbnQgPSBudWxsOwogICAgICAgIH0KICAgICAgICBwbG90LnBsdWdpbnMuZG9udXRSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4ID0gbnVsbDsKICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKCdqcXBsb3REYXRhVW5oaWdobGlnaHQnKTsKICAgIH0KIAogICAgZnVuY3Rpb24gaGFuZGxlTW92ZShldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICBpZiAobmVpZ2hib3IpIHsKICAgICAgICAgICAgdmFyIGlucyA9IFtuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IuZGF0YV07CiAgICAgICAgICAgIHZhciBldnQxID0galF1ZXJ5LkV2ZW50KCdqcXBsb3REYXRhTW91c2VPdmVyJyk7CiAgICAgICAgICAgIGV2dDEucGFnZVggPSBldi5wYWdlWDsKICAgICAgICAgICAgZXZ0MS5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKGV2dDEsIGlucyk7CiAgICAgICAgICAgIGlmIChwbG90LnNlcmllc1tpbnNbMF1dLmhpZ2hsaWdodE1vdXNlT3ZlciAmJiAhKGluc1swXSA9PSBwbG90LnBsdWdpbnMuZG9udXRSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4ICYmIGluc1sxXSA9PSBwbG90LnNlcmllc1tpbnNbMF1dLl9oaWdobGlnaHRlZFBvaW50KSkgewogICAgICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YUhpZ2hsaWdodCcpOwogICAgICAgICAgICAgICAgZXZ0LndoaWNoID0gZXYud2hpY2g7CiAgICAgICAgICAgICAgICBldnQucGFnZVggPSBldi5wYWdlWDsKICAgICAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQsIGlucyk7CiAgICAgICAgICAgICAgICBoaWdobGlnaHQgKHBsb3QsIGluc1swXSwgaW5zWzFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChuZWlnaGJvciA9PSBudWxsKSB7CiAgICAgICAgICAgIHVuaGlnaGxpZ2h0IChwbG90KTsKICAgICAgICB9CiAgICB9IAogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZURvd24oZXYsIGdyaWRwb3MsIGRhdGFwb3MsIG5laWdoYm9yLCBwbG90KSB7CiAgICAgICAgaWYgKG5laWdoYm9yKSB7CiAgICAgICAgICAgIHZhciBpbnMgPSBbbmVpZ2hib3Iuc2VyaWVzSW5kZXgsIG5laWdoYm9yLnBvaW50SW5kZXgsIG5laWdoYm9yLmRhdGFdOwogICAgICAgICAgICBpZiAocGxvdC5zZXJpZXNbaW5zWzBdXS5oaWdobGlnaHRNb3VzZURvd24gJiYgIShpbnNbMF0gPT0gcGxvdC5wbHVnaW5zLmRvbnV0UmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCAmJiBpbnNbMV0gPT0gcGxvdC5zZXJpZXNbaW5zWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpIHsKICAgICAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ2pxcGxvdERhdGFIaWdobGlnaHQnKTsKICAgICAgICAgICAgICAgIGV2dC53aGljaCA9IGV2LndoaWNoOwogICAgICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoZXZ0LCBpbnMpOwogICAgICAgICAgICAgICAgaGlnaGxpZ2h0IChwbG90LCBpbnNbMF0sIGluc1sxXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAobmVpZ2hib3IgPT0gbnVsbCkgewogICAgICAgICAgICB1bmhpZ2hsaWdodCAocGxvdCk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZVVwKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIHZhciBpZHggPSBwbG90LnBsdWdpbnMuZG9udXRSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4OwogICAgICAgIGlmIChpZHggIT0gbnVsbCAmJiBwbG90LnNlcmllc1tpZHhdLmhpZ2hsaWdodE1vdXNlRG93bikgewogICAgICAgICAgICB1bmhpZ2hsaWdodChwbG90KTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIGlmIChuZWlnaGJvcikgewogICAgICAgICAgICB2YXIgaW5zID0gW25laWdoYm9yLnNlcmllc0luZGV4LCBuZWlnaGJvci5wb2ludEluZGV4LCBuZWlnaGJvci5kYXRhXTsKICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YUNsaWNrJyk7CiAgICAgICAgICAgIGV2dC53aGljaCA9IGV2LndoaWNoOwogICAgICAgICAgICBldnQucGFnZVggPSBldi5wYWdlWDsKICAgICAgICAgICAgZXZ0LnBhZ2VZID0gZXYucGFnZVk7CiAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoZXZ0LCBpbnMpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgZnVuY3Rpb24gaGFuZGxlUmlnaHRDbGljayhldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICBpZiAobmVpZ2hib3IpIHsKICAgICAgICAgICAgdmFyIGlucyA9IFtuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IuZGF0YV07CiAgICAgICAgICAgIHZhciBpZHggPSBwbG90LnBsdWdpbnMuZG9udXRSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4OwogICAgICAgICAgICBpZiAoaWR4ICE9IG51bGwgJiYgcGxvdC5zZXJpZXNbaWR4XS5oaWdobGlnaHRNb3VzZURvd24pIHsKICAgICAgICAgICAgICAgIHVuaGlnaGxpZ2h0KHBsb3QpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ2pxcGxvdERhdGFSaWdodENsaWNrJyk7CiAgICAgICAgICAgIGV2dC53aGljaCA9IGV2LndoaWNoOwogICAgICAgICAgICBldnQucGFnZVggPSBldi5wYWdlWDsKICAgICAgICAgICAgZXZ0LnBhZ2VZID0gZXYucGFnZVk7CiAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoZXZ0LCBpbnMpOwogICAgICAgIH0KICAgIH0gICAgCiAgICAKICAgIC8vIGNhbGxlZCB3aXRoaW4gY29udGV4dCBvZiBwbG90CiAgICAvLyBjcmVhdGUgYSBjYW52YXMgd2hpY2ggd2UgY2FuIGRyYXcgb24uCiAgICAvLyBpbnNlcnQgaXQgYmVmb3JlIHRoZSBldmVudENhbnZhcywgc28gZXZlbnRDYW52YXMgd2lsbCBzdGlsbCBjYXB0dXJlIGV2ZW50cy4KICAgIGZ1bmN0aW9uIHBvc3RQbG90RHJhdygpIHsKICAgICAgICAvLyBNZW1vcnkgTGVha3MgcGF0Y2ggICAgCiAgICAgICAgaWYgKHRoaXMucGx1Z2lucy5kb251dFJlbmRlcmVyICYmIHRoaXMucGx1Z2lucy5kb251dFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcykgewogICAgICAgICAgICB0aGlzLnBsdWdpbnMuZG9udXRSZW5kZXJlci5oaWdobGlnaHRDYW52YXMucmVzZXRDYW52YXMoKTsKICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRvbnV0UmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIHRoaXMucGx1Z2lucy5kb251dFJlbmRlcmVyID0ge2hpZ2hsaWdodGVkU2VyaWVzSW5kZXg6bnVsbH07CiAgICAgICAgdGhpcy5wbHVnaW5zLmRvbnV0UmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzID0gbmV3ICQuanFwbG90LkdlbmVyaWNDYW52YXMoKTsKICAgICAgICAvLyBkbyB3ZSBoYXZlIGFueSBkYXRhIGxhYmVscz8gIGlmIHNvLCBwdXQgaGlnaGxpZ2h0IGNhbnZhcyBiZWZvcmUgdGhvc2UKICAgICAgICAvLyBGaXggZm9yIGJyb2tlbiBqcXVlcnkgOmZpcnN0IHNlbGVjdG9yIHdpdGggY2FudmFzIChWTUwpIGVsZW1lbnRzLgogICAgICAgIHZhciBsYWJlbHMgPSAkKHRoaXMudGFyZ2V0SWQrJyAuanFwbG90LWRhdGEtbGFiZWwnKTsKICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCkgewogICAgICAgICAgICAkKGxhYmVsc1swXSkuYmVmb3JlKHRoaXMucGx1Z2lucy5kb251dFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCAnanFwbG90LWRvbnV0UmVuZGVyZXItaGlnaGxpZ2h0LWNhbnZhcycsIHRoaXMuX3Bsb3REaW1lbnNpb25zLCB0aGlzKSk7CiAgICAgICAgfQogICAgICAgIC8vIGVsc2UgcHV0IGhpZ2hsaWdodCBjYW52YXMgYmVmb3JlIGV2ZW50IGNhbnZhcy4KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZvcmUodGhpcy5wbHVnaW5zLmRvbnV0UmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsICdqcXBsb3QtZG9udXRSZW5kZXJlci1oaWdobGlnaHQtY2FudmFzJywgdGhpcy5fcGxvdERpbWVuc2lvbnMsIHRoaXMpKTsKICAgICAgICB9CiAgICAgICAgdmFyIGhjdHggPSB0aGlzLnBsdWdpbnMuZG9udXRSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuc2V0Q29udGV4dCgpOwogICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgnbW91c2VsZWF2ZScsIHtwbG90OnRoaXN9LCBmdW5jdGlvbiAoZXYpIHsgdW5oaWdobGlnaHQoZXYuZGF0YS5wbG90KTsgfSk7CiAgICB9CiAgICAKICAgICQuanFwbG90LnByZUluaXRIb29rcy5wdXNoKHByZUluaXQpOwogICAgCiAgICAkLmpxcGxvdC5Eb251dFRpY2tSZW5kZXJlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICQuanFwbG90LkF4aXNUaWNrUmVuZGVyZXIuY2FsbCh0aGlzKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkRvbnV0VGlja1JlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyKCk7CiAgICAkLmpxcGxvdC5Eb251dFRpY2tSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5Eb251dFRpY2tSZW5kZXJlcjsKICAgIAp9KShqUXVlcnkpOwogICAgCiAgICA=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.donutRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGUpe2UuanFwbG90LkRvbnV0UmVuZGVyZXI9ZnVuY3Rpb24oKXtlLmpxcGxvdC5MaW5lUmVuZGVyZXIuY2FsbCh0aGlzKX07ZS5qcXBsb3QuRG9udXRSZW5kZXJlci5wcm90b3R5cGU9bmV3IGUuanFwbG90LkxpbmVSZW5kZXJlcigpO2UuanFwbG90LkRvbnV0UmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUuanFwbG90LkRvbnV0UmVuZGVyZXI7ZS5qcXBsb3QuRG9udXRSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihwLHQpe3RoaXMuZGlhbWV0ZXI9bnVsbDt0aGlzLmlubmVyRGlhbWV0ZXI9bnVsbDt0aGlzLnRoaWNrbmVzcz1udWxsO3RoaXMucGFkZGluZz0yMDt0aGlzLnNsaWNlTWFyZ2luPTA7dGhpcy5yaW5nTWFyZ2luPW51bGw7dGhpcy5maWxsPXRydWU7dGhpcy5zaGFkb3dPZmZzZXQ9Mjt0aGlzLnNoYWRvd0FscGhhPTAuMDc7dGhpcy5zaGFkb3dEZXB0aD01O3RoaXMuaGlnaGxpZ2h0TW91c2VPdmVyPXRydWU7dGhpcy5oaWdobGlnaHRNb3VzZURvd249ZmFsc2U7dGhpcy5oaWdobGlnaHRDb2xvcnM9W107dGhpcy5kYXRhTGFiZWxzPSJwZXJjZW50Ijt0aGlzLnNob3dEYXRhTGFiZWxzPWZhbHNlO3RoaXMuZGF0YUxhYmVsRm9ybWF0U3RyaW5nPW51bGw7dGhpcy5kYXRhTGFiZWxUaHJlc2hvbGQ9Mzt0aGlzLmRhdGFMYWJlbFBvc2l0aW9uRmFjdG9yPTAuNDt0aGlzLmRhdGFMYWJlbE51ZGdlPTA7dGhpcy5zdGFydEFuZ2xlPTA7dGhpcy50aWNrUmVuZGVyZXI9ZS5qcXBsb3QuRG9udXRUaWNrUmVuZGVyZXI7dGhpcy5fZHJhd0RhdGE9dHJ1ZTt0aGlzLl90eXBlPSJkb251dCI7aWYocC5oaWdobGlnaHRNb3VzZURvd24mJnAuaGlnaGxpZ2h0TW91c2VPdmVyPT1udWxsKXtwLmhpZ2hsaWdodE1vdXNlT3Zlcj1mYWxzZX1lLmV4dGVuZCh0cnVlLHRoaXMscCk7aWYodGhpcy5kaWFtZXRlciE9bnVsbCl7dGhpcy5kaWFtZXRlcj10aGlzLmRpYW1ldGVyLXRoaXMuc2xpY2VNYXJnaW59dGhpcy5fZGlhbWV0ZXI9bnVsbDt0aGlzLl9pbm5lckRpYW1ldGVyPW51bGw7dGhpcy5fcmFkaXVzPW51bGw7dGhpcy5faW5uZXJSYWRpdXM9bnVsbDt0aGlzLl90aGlja25lc3M9bnVsbDt0aGlzLl9wcmV2aW91c1Nlcmllcz1bXTt0aGlzLl9udW1iZXJTZXJpZXM9MTt0aGlzLl9zbGljZUFuZ2xlcz1bXTt0aGlzLl9oaWdobGlnaHRlZFBvaW50PW51bGw7aWYodGhpcy5oaWdobGlnaHRDb2xvcnMubGVuZ3RoPT0wKXtmb3IodmFyIHI9MDtyPHRoaXMuc2VyaWVzQ29sb3JzLmxlbmd0aDtyKyspe3ZhciBxPWUuanFwbG90LmdldENvbG9yQ29tcG9uZW50cyh0aGlzLnNlcmllc0NvbG9yc1tyXSk7dmFyIG49W3FbMF0scVsxXSxxWzJdXTt2YXIgcz1uWzBdK25bMV0rblsyXTtmb3IodmFyIG89MDtvPDM7bysrKXtuW29dPShzPjU3MCk/bltvXSowLjg6bltvXSswLjMqKDI1NS1uW29dKTtuW29dPXBhcnNlSW50KG5bb10sMTApfXRoaXMuaGlnaGxpZ2h0Q29sb3JzLnB1c2goInJnYigiK25bMF0rIiwiK25bMV0rIiwiK25bMl0rIikiKX19dC5wb3N0UGFyc2VPcHRpb25zSG9va3MuYWRkT25jZShsKTt0LnBvc3RJbml0SG9va3MuYWRkT25jZShnKTt0LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RNb3VzZU1vdmUiLGIpO3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoImpxcGxvdE1vdXNlRG93biIsYSk7dC5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgianFwbG90TW91c2VVcCIsaik7dC5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgianFwbG90Q2xpY2siLGYpO3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoImpxcGxvdFJpZ2h0Q2xpY2siLG0pO3QucG9zdERyYXdIb29rcy5hZGRPbmNlKGgpfTtlLmpxcGxvdC5Eb251dFJlbmRlcmVyLnByb3RvdHlwZS5zZXRHcmlkRGF0YT1mdW5jdGlvbihzKXt2YXIgbz1bXTt2YXIgdD1bXTt2YXIgbj10aGlzLnN0YXJ0QW5nbGUvMTgwKk1hdGguUEk7dmFyIHI9MDt0aGlzLl9kcmF3RGF0YT1mYWxzZTtmb3IodmFyIHE9MDtxPHRoaXMuZGF0YS5sZW5ndGg7cSsrKXtpZih0aGlzLmRhdGFbcV1bMV0hPTApe3RoaXMuX2RyYXdEYXRhPXRydWV9by5wdXNoKHRoaXMuZGF0YVtxXVsxXSk7dC5wdXNoKFt0aGlzLmRhdGFbcV1bMF1dKTtpZihxPjApe29bcV0rPW9bcS0xXX1yKz10aGlzLmRhdGFbcV1bMV19dmFyIHA9TWF0aC5QSSoyL29bby5sZW5ndGgtMV07Zm9yKHZhciBxPTA7cTxvLmxlbmd0aDtxKyspe3RbcV1bMV09b1txXSpwO3RbcV1bMl09dGhpcy5kYXRhW3FdWzFdL3J9dGhpcy5ncmlkRGF0YT10fTtlLmpxcGxvdC5Eb251dFJlbmRlcmVyLnByb3RvdHlwZS5tYWtlR3JpZERhdGE9ZnVuY3Rpb24ocyx0KXt2YXIgbz1bXTt2YXIgdT1bXTt2YXIgcj0wO3ZhciBuPXRoaXMuc3RhcnRBbmdsZS8xODAqTWF0aC5QSTt0aGlzLl9kcmF3RGF0YT1mYWxzZTtmb3IodmFyIHE9MDtxPHMubGVuZ3RoO3ErKyl7aWYodGhpcy5kYXRhW3FdWzFdIT0wKXt0aGlzLl9kcmF3RGF0YT10cnVlfW8ucHVzaChzW3FdWzFdKTt1LnB1c2goW3NbcV1bMF1dKTtpZihxPjApe29bcV0rPW9bcS0xXX1yKz1zW3FdWzFdfXZhciBwPU1hdGguUEkqMi9vW28ubGVuZ3RoLTFdO2Zvcih2YXIgcT0wO3E8by5sZW5ndGg7cSsrKXt1W3FdWzFdPW9bcV0qcDt1W3FdWzJdPXNbcV1bMV0vcn1yZXR1cm4gdX07ZS5qcXBsb3QuRG9udXRSZW5kZXJlci5wcm90b3R5cGUuZHJhd1NsaWNlPWZ1bmN0aW9uKHgsdSx0LHAscyl7dmFyIG49dGhpcy5fZGlhbWV0ZXIvMjt2YXIgdj1uLXRoaXMuX3RoaWNrbmVzczt2YXIgdz10aGlzLmZpbGw7eC5zYXZlKCk7eC50cmFuc2xhdGUodGhpcy5fY2VudGVyWzBdLHRoaXMuX2NlbnRlclsxXSk7aWYocyl7Zm9yKHZhciBxPTA7cTx0aGlzLnNoYWRvd0RlcHRoO3ErKyl7eC5zYXZlKCk7eC50cmFuc2xhdGUodGhpcy5zaGFkb3dPZmZzZXQqTWF0aC5jb3ModGhpcy5zaGFkb3dBbmdsZS8xODAqTWF0aC5QSSksdGhpcy5zaGFkb3dPZmZzZXQqTWF0aC5zaW4odGhpcy5zaGFkb3dBbmdsZS8xODAqTWF0aC5QSSkpO28oKX19ZWxzZXtvKCl9ZnVuY3Rpb24gbygpe2lmKHQ+Ni4yODIrdGhpcy5zdGFydEFuZ2xlKXt0PTYuMjgyK3RoaXMuc3RhcnRBbmdsZTtpZih1PnQpe3U9Ni4yODErdGhpcy5zdGFydEFuZ2xlfX1pZih1Pj10KXtyZXR1cm59eC5iZWdpblBhdGgoKTt4LmZpbGxTdHlsZT1wO3guc3Ryb2tlU3R5bGU9cDt4LmFyYygwLDAsbix1LHQsZmFsc2UpO3gubGluZVRvKHYqTWF0aC5jb3ModCksdipNYXRoLnNpbih0KSk7eC5hcmMoMCwwLHYsdCx1LHRydWUpO3guY2xvc2VQYXRoKCk7aWYodyl7eC5maWxsKCl9ZWxzZXt4LnN0cm9rZSgpfX1pZihzKXtmb3IodmFyIHE9MDtxPHRoaXMuc2hhZG93RGVwdGg7cSsrKXt4LnJlc3RvcmUoKX19eC5yZXN0b3JlKCl9O2UuanFwbG90LkRvbnV0UmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oTixWLHQsUCl7dmFyIFE7dmFyIEo9KHQhPXVuZGVmaW5lZCk/dDp7fTt2YXIgcT0wO3ZhciBwPTA7dmFyIHU9MTtpZih0LmxlZ2VuZEluZm8mJnQubGVnZW5kSW5mby5wbGFjZW1lbnQ9PSJpbnNpZGVHcmlkIil7dmFyIEk9dC5sZWdlbmRJbmZvO3N3aXRjaChJLmxvY2F0aW9uKXtjYXNlIm53IjpxPUkud2lkdGgrSS54b2Zmc2V0O2JyZWFrO2Nhc2UidyI6cT1JLndpZHRoK0kueG9mZnNldDticmVhaztjYXNlInN3IjpxPUkud2lkdGgrSS54b2Zmc2V0O2JyZWFrO2Nhc2UibmUiOnE9SS53aWR0aCtJLnhvZmZzZXQ7dT0tMTticmVhaztjYXNlImUiOnE9SS53aWR0aCtJLnhvZmZzZXQ7dT0tMTticmVhaztjYXNlInNlIjpxPUkud2lkdGgrSS54b2Zmc2V0O3U9LTE7YnJlYWs7Y2FzZSJuIjpwPUkuaGVpZ2h0K0kueW9mZnNldDticmVhaztjYXNlInMiOnA9SS5oZWlnaHQrSS55b2Zmc2V0O3U9LTE7YnJlYWs7ZGVmYXVsdDpicmVha319dmFyIEI9KEouc2hhZG93IT11bmRlZmluZWQpP0ouc2hhZG93OnRoaXMuc2hhZG93O3ZhciBXPShKLnNob3dMaW5lIT11bmRlZmluZWQpP0ouc2hvd0xpbmU6dGhpcy5zaG93TGluZTt2YXIgTz0oSi5maWxsIT11bmRlZmluZWQpP0ouZmlsbDp0aGlzLmZpbGw7dmFyIHM9Ti5jYW52YXMud2lkdGg7dmFyIEg9Ti5jYW52YXMuaGVpZ2h0O3ZhciBHPXMtcS0yKnRoaXMucGFkZGluZzt2YXIgUj1ILXAtMip0aGlzLnBhZGRpbmc7dmFyIHY9TWF0aC5taW4oRyxSKTt2YXIgVD12O3ZhciBYPSh0aGlzLnJpbmdNYXJnaW49PW51bGwpP3RoaXMuc2xpY2VNYXJnaW4qMjp0aGlzLnJpbmdNYXJnaW47Zm9yKHZhciBRPTA7UTx0aGlzLl9wcmV2aW91c1Nlcmllcy5sZW5ndGg7USsrKXtULT0yKnRoaXMuX3ByZXZpb3VzU2VyaWVzW1FdLl90aGlja25lc3MrMipYfXRoaXMuX2RpYW1ldGVyPXRoaXMuZGlhbWV0ZXJ8fFQ7aWYodGhpcy5pbm5lckRpYW1ldGVyIT1udWxsKXt2YXIgTT0odGhpcy5fbnVtYmVyU2VyaWVzPjEmJnRoaXMuaW5kZXg+MCk/dGhpcy5fcHJldmlvdXNTZXJpZXNbMF0uX2RpYW1ldGVyOnRoaXMuX2RpYW1ldGVyO3RoaXMuX3RoaWNrbmVzcz10aGlzLnRoaWNrbmVzc3x8KE0tdGhpcy5pbm5lckRpYW1ldGVyLTIqWCp0aGlzLl9udW1iZXJTZXJpZXMpL3RoaXMuX251bWJlclNlcmllcy8yfWVsc2V7dGhpcy5fdGhpY2tuZXNzPXRoaXMudGhpY2tuZXNzfHx2LzIvKHRoaXMuX251bWJlclNlcmllcysxKSowLjg1fXZhciBLPXRoaXMuX3JhZGl1cz10aGlzLl9kaWFtZXRlci8yO3RoaXMuX2lubmVyUmFkaXVzPXRoaXMuX3JhZGl1cy10aGlzLl90aGlja25lc3M7dmFyIG89dGhpcy5zdGFydEFuZ2xlLzE4MCpNYXRoLlBJO3RoaXMuX2NlbnRlcj1bKHMtdSpxKS8yK3UqcSwoSC11KnApLzIrdSpwXTtpZih0aGlzLnNoYWRvdyl7dmFyIEw9InJnYmEoMCwwLDAsIit0aGlzLnNoYWRvd0FscGhhKyIpIjtmb3IodmFyIFE9MDtRPFYubGVuZ3RoO1ErKyl7dmFyIEE9KFE9PTApP286VltRLTFdWzFdK287QSs9dGhpcy5zbGljZU1hcmdpbi8xODAqTWF0aC5QSTt0aGlzLnJlbmRlcmVyLmRyYXdTbGljZS5jYWxsKHRoaXMsTixBLFZbUV1bMV0rbyxMLHRydWUpfX1mb3IodmFyIFE9MDtRPFYubGVuZ3RoO1ErKyl7dmFyIEE9KFE9PTApP286VltRLTFdWzFdK287QSs9dGhpcy5zbGljZU1hcmdpbi8xODAqTWF0aC5QSTt2YXIgej1WW1FdWzFdK287dGhpcy5fc2xpY2VBbmdsZXMucHVzaChbQSx6XSk7dGhpcy5yZW5kZXJlci5kcmF3U2xpY2UuY2FsbCh0aGlzLE4sQSx6LHRoaXMuc2VyaWVzQ29sb3JzW1FdLGZhbHNlKTtpZih0aGlzLnNob3dEYXRhTGFiZWxzJiZWW1FdWzJdKjEwMD49dGhpcy5kYXRhTGFiZWxUaHJlc2hvbGQpe3ZhciBTLFU9KEEreikvMixDO2lmKHRoaXMuZGF0YUxhYmVscz09ImxhYmVsIil7Uz10aGlzLmRhdGFMYWJlbEZvcm1hdFN0cmluZ3x8IiVzIjtDPWUuanFwbG90LnNwcmludGYoUyxWW1FdWzBdKX1lbHNle2lmKHRoaXMuZGF0YUxhYmVscz09InZhbHVlIil7Uz10aGlzLmRhdGFMYWJlbEZvcm1hdFN0cmluZ3x8IiVkIjtDPWUuanFwbG90LnNwcmludGYoUyx0aGlzLmRhdGFbUV1bMV0pfWVsc2V7aWYodGhpcy5kYXRhTGFiZWxzPT0icGVyY2VudCIpe1M9dGhpcy5kYXRhTGFiZWxGb3JtYXRTdHJpbmd8fCIlZCUlIjtDPWUuanFwbG90LnNwcmludGYoUyxWW1FdWzJdKjEwMCl9ZWxzZXtpZih0aGlzLmRhdGFMYWJlbHMuY29uc3RydWN0b3I9PUFycmF5KXtTPXRoaXMuZGF0YUxhYmVsRm9ybWF0U3RyaW5nfHwiJXMiO0M9ZS5qcXBsb3Quc3ByaW50ZihTLHRoaXMuZGF0YUxhYmVsc1tRXSl9fX19dmFyIG49dGhpcy5faW5uZXJSYWRpdXMrdGhpcy5fdGhpY2tuZXNzKnRoaXMuZGF0YUxhYmVsUG9zaXRpb25GYWN0b3IrdGhpcy5zbGljZU1hcmdpbit0aGlzLmRhdGFMYWJlbE51ZGdlO3ZhciBGPXRoaXMuX2NlbnRlclswXStNYXRoLmNvcyhVKSpuK3RoaXMuY2FudmFzLl9vZmZzZXRzLmxlZnQ7dmFyIEU9dGhpcy5fY2VudGVyWzFdK01hdGguc2luKFUpKm4rdGhpcy5jYW52YXMuX29mZnNldHMudG9wO3ZhciBEPWUoJzxzcGFuIGNsYXNzPSJqcXBsb3QtZG9udXQtc2VyaWVzIGpxcGxvdC1kYXRhLWxhYmVsIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4nK0MrIjwvc3Bhbj4iKS5pbnNlcnRCZWZvcmUoUC5ldmVudENhbnZhcy5fZWxlbSk7Ri09RC53aWR0aCgpLzI7RS09RC5oZWlnaHQoKS8yO0Y9TWF0aC5yb3VuZChGKTtFPU1hdGgucm91bmQoRSk7RC5jc3Moe2xlZnQ6Rix0b3A6RX0pfX19O2UuanFwbG90LkRvbnV0QXhpc1JlbmRlcmVyPWZ1bmN0aW9uKCl7ZS5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyLmNhbGwodGhpcyl9O2UuanFwbG90LkRvbnV0QXhpc1JlbmRlcmVyLnByb3RvdHlwZT1uZXcgZS5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyKCk7ZS5qcXBsb3QuRG9udXRBeGlzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUuanFwbG90LkRvbnV0QXhpc1JlbmRlcmVyO2UuanFwbG90LkRvbnV0QXhpc1JlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKG4pe3RoaXMudGlja1JlbmRlcmVyPWUuanFwbG90LkRvbnV0VGlja1JlbmRlcmVyO2UuZXh0ZW5kKHRydWUsdGhpcyxuKTt0aGlzLl9kYXRhQm91bmRzPXttaW46MCxtYXg6MTAwfTt0aGlzLm1pbj0wO3RoaXMubWF4PTEwMDt0aGlzLnNob3dUaWNrcz1mYWxzZTt0aGlzLnRpY2tzPVtdO3RoaXMuc2hvd01hcms9ZmFsc2U7dGhpcy5zaG93PWZhbHNlfTtlLmpxcGxvdC5Eb251dExlZ2VuZFJlbmRlcmVyPWZ1bmN0aW9uKCl7ZS5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlci5jYWxsKHRoaXMpfTtlLmpxcGxvdC5Eb251dExlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZT1uZXcgZS5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlcigpO2UuanFwbG90LkRvbnV0TGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUuanFwbG90LkRvbnV0TGVnZW5kUmVuZGVyZXI7ZS5qcXBsb3QuRG9udXRMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihuKXt0aGlzLm51bWJlclJvd3M9bnVsbDt0aGlzLm51bWJlckNvbHVtbnM9bnVsbDtlLmV4dGVuZCh0cnVlLHRoaXMsbil9O2UuanFwbG90LkRvbnV0TGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXt2YXIgcT10aGlzO2lmKHRoaXMuc2hvdyl7dmFyIHk9dGhpcy5fc2VyaWVzO3ZhciBCPSJwb3NpdGlvbjphYnNvbHV0ZTsiO0IrPSh0aGlzLmJhY2tncm91bmQpPyJiYWNrZ3JvdW5kOiIrdGhpcy5iYWNrZ3JvdW5kKyI7IjoiIjtCKz0odGhpcy5ib3JkZXIpPyJib3JkZXI6Iit0aGlzLmJvcmRlcisiOyI6IiI7Qis9KHRoaXMuZm9udFNpemUpPyJmb250LXNpemU6Iit0aGlzLmZvbnRTaXplKyI7IjoiIjtCKz0odGhpcy5mb250RmFtaWx5KT8iZm9udC1mYW1pbHk6Iit0aGlzLmZvbnRGYW1pbHkrIjsiOiIiO0IrPSh0aGlzLnRleHRDb2xvcik/ImNvbG9yOiIrdGhpcy50ZXh0Q29sb3IrIjsiOiIiO0IrPSh0aGlzLm1hcmdpblRvcCE9bnVsbCk/Im1hcmdpbi10b3A6Iit0aGlzLm1hcmdpblRvcCsiOyI6IiI7Qis9KHRoaXMubWFyZ2luQm90dG9tIT1udWxsKT8ibWFyZ2luLWJvdHRvbToiK3RoaXMubWFyZ2luQm90dG9tKyI7IjoiIjtCKz0odGhpcy5tYXJnaW5MZWZ0IT1udWxsKT8ibWFyZ2luLWxlZnQ6Iit0aGlzLm1hcmdpbkxlZnQrIjsiOiIiO0IrPSh0aGlzLm1hcmdpblJpZ2h0IT1udWxsKT8ibWFyZ2luLXJpZ2h0OiIrdGhpcy5tYXJnaW5SaWdodCsiOyI6IiI7dGhpcy5fZWxlbT1lKCc8dGFibGUgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiIHN0eWxlPSInK0IrJyI+PC90YWJsZT4nKTt2YXIgRj1mYWxzZSx4PWZhbHNlLG4sdjt2YXIgej15WzBdO3ZhciBvPW5ldyBlLmpxcGxvdC5Db2xvckdlbmVyYXRvcih6LnNlcmllc0NvbG9ycyk7aWYoei5zaG93KXt2YXIgRz16LmRhdGE7aWYodGhpcy5udW1iZXJSb3dzKXtuPXRoaXMubnVtYmVyUm93cztpZighdGhpcy5udW1iZXJDb2x1bW5zKXt2PU1hdGguY2VpbChHLmxlbmd0aC9uKX1lbHNle3Y9dGhpcy5udW1iZXJDb2x1bW5zfX1lbHNle2lmKHRoaXMubnVtYmVyQ29sdW1ucyl7dj10aGlzLm51bWJlckNvbHVtbnM7bj1NYXRoLmNlaWwoRy5sZW5ndGgvdGhpcy5udW1iZXJDb2x1bW5zKX1lbHNle249Ry5sZW5ndGg7dj0xfX12YXIgRSxELHAsdCxyLHUsdyxDO3ZhciBBPTA7Zm9yKEU9MDtFPG47RSsrKXtpZih4KXtwPWUoJzx0ciBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCI+PC90cj4nKS5wcmVwZW5kVG8odGhpcy5fZWxlbSl9ZWxzZXtwPWUoJzx0ciBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCI+PC90cj4nKS5hcHBlbmRUbyh0aGlzLl9lbGVtKX1mb3IoRD0wO0Q8djtEKyspe2lmKEE8Ry5sZW5ndGgpe3U9dGhpcy5sYWJlbHNbQV18fEdbQV1bMF0udG9TdHJpbmcoKTtDPW8ubmV4dCgpO2lmKCF4KXtpZihFPjApe0Y9dHJ1ZX1lbHNle0Y9ZmFsc2V9fWVsc2V7aWYoRT09bi0xKXtGPWZhbHNlfWVsc2V7Rj10cnVlfX13PShGKT90aGlzLnJvd1NwYWNpbmc6IjAiO3Q9ZSgnPHRkIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZy10b3A6Jyt3Kyc7Ij48ZGl2PjxkaXYgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQtc3dhdGNoIiBzdHlsZT0iYm9yZGVyLWNvbG9yOicrQysnOyI+PC9kaXY+PC9kaXY+PC90ZD4nKTtyPWUoJzx0ZCBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCIgc3R5bGU9InBhZGRpbmctdG9wOicrdysnOyI+PC90ZD4nKTtpZih0aGlzLmVzY2FwZUh0bWwpe3IudGV4dCh1KX1lbHNle3IuaHRtbCh1KX1pZih4KXtyLnByZXBlbmRUbyhwKTt0LnByZXBlbmRUbyhwKX1lbHNle3QuYXBwZW5kVG8ocCk7ci5hcHBlbmRUbyhwKX1GPXRydWV9QSsrfX19fXJldHVybiB0aGlzLl9lbGVtfTtmdW5jdGlvbiBjKHIscSxvKXtvPW98fHt9O28uYXhlc0RlZmF1bHRzPW8uYXhlc0RlZmF1bHRzfHx7fTtvLmxlZ2VuZD1vLmxlZ2VuZHx8e307by5zZXJpZXNEZWZhdWx0cz1vLnNlcmllc0RlZmF1bHRzfHx7fTt2YXIgbj1mYWxzZTtpZihvLnNlcmllc0RlZmF1bHRzLnJlbmRlcmVyPT1lLmpxcGxvdC5Eb251dFJlbmRlcmVyKXtuPXRydWV9ZWxzZXtpZihvLnNlcmllcyl7Zm9yKHZhciBwPTA7cDxvLnNlcmllcy5sZW5ndGg7cCsrKXtpZihvLnNlcmllc1twXS5yZW5kZXJlcj09ZS5qcXBsb3QuRG9udXRSZW5kZXJlcil7bj10cnVlfX19fWlmKG4pe28uYXhlc0RlZmF1bHRzLnJlbmRlcmVyPWUuanFwbG90LkRvbnV0QXhpc1JlbmRlcmVyO28ubGVnZW5kLnJlbmRlcmVyPWUuanFwbG90LkRvbnV0TGVnZW5kUmVuZGVyZXI7by5sZWdlbmQucHJlRHJhdz10cnVlO28uc2VyaWVzRGVmYXVsdHMucG9pbnRMYWJlbHM9e3Nob3c6ZmFsc2V9fX1mdW5jdGlvbiBnKHIscSxvKXtmb3IodmFyIHA9MTtwPHRoaXMuc2VyaWVzLmxlbmd0aDtwKyspe2lmKCF0aGlzLnNlcmllc1twXS5fcHJldmlvdXNTZXJpZXMubGVuZ3RoKXtmb3IodmFyIG49MDtuPHA7bisrKXtpZih0aGlzLnNlcmllc1twXS5yZW5kZXJlci5jb25zdHJ1Y3Rvcj09ZS5qcXBsb3QuRG9udXRSZW5kZXJlciYmdGhpcy5zZXJpZXNbbl0ucmVuZGVyZXIuY29uc3RydWN0b3I9PWUuanFwbG90LkRvbnV0UmVuZGVyZXIpe3RoaXMuc2VyaWVzW3BdLl9wcmV2aW91c1Nlcmllcy5wdXNoKHRoaXMuc2VyaWVzW25dKX19fX1mb3IocD0wO3A8dGhpcy5zZXJpZXMubGVuZ3RoO3ArKyl7aWYodGhpcy5zZXJpZXNbcF0ucmVuZGVyZXIuY29uc3RydWN0b3I9PWUuanFwbG90LkRvbnV0UmVuZGVyZXIpe3RoaXMuc2VyaWVzW3BdLl9udW1iZXJTZXJpZXM9dGhpcy5zZXJpZXMubGVuZ3RoO2lmKHRoaXMuc2VyaWVzW3BdLmhpZ2hsaWdodE1vdXNlT3Zlcil7dGhpcy5zZXJpZXNbcF0uaGlnaGxpZ2h0TW91c2VEb3duPWZhbHNlfX19fXZhciBrPWZhbHNlO2Z1bmN0aW9uIGwobil7Zm9yKHZhciBvPTA7bzx0aGlzLnNlcmllcy5sZW5ndGg7bysrKXt0aGlzLnNlcmllc1tvXS5zZXJpZXNDb2xvcnM9dGhpcy5zZXJpZXNDb2xvcnM7dGhpcy5zZXJpZXNbb10uY29sb3JHZW5lcmF0b3I9ZS5qcXBsb3QuY29sb3JHZW5lcmF0b3J9fWZ1bmN0aW9uIGQocixxLHApe3ZhciBvPXIuc2VyaWVzW3FdO3ZhciBuPXIucGx1Z2lucy5kb251dFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcztuLl9jdHguY2xlYXJSZWN0KDAsMCxuLl9jdHguY2FudmFzLndpZHRoLG4uX2N0eC5jYW52YXMuaGVpZ2h0KTtvLl9oaWdobGlnaHRlZFBvaW50PXA7ci5wbHVnaW5zLmRvbnV0UmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleD1xO28ucmVuZGVyZXIuZHJhd1NsaWNlLmNhbGwobyxuLl9jdHgsby5fc2xpY2VBbmdsZXNbcF1bMF0sby5fc2xpY2VBbmdsZXNbcF1bMV0sby5oaWdobGlnaHRDb2xvcnNbcF0sZmFsc2UpfWZ1bmN0aW9uIGkocCl7dmFyIG49cC5wbHVnaW5zLmRvbnV0UmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzO24uX2N0eC5jbGVhclJlY3QoMCwwLG4uX2N0eC5jYW52YXMud2lkdGgsbi5fY3R4LmNhbnZhcy5oZWlnaHQpO2Zvcih2YXIgbz0wO288cC5zZXJpZXMubGVuZ3RoO28rKyl7cC5zZXJpZXNbb10uX2hpZ2hsaWdodGVkUG9pbnQ9bnVsbH1wLnBsdWdpbnMuZG9udXRSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4PW51bGw7cC50YXJnZXQudHJpZ2dlcigianFwbG90RGF0YVVuaGlnaGxpZ2h0Iil9ZnVuY3Rpb24gYihyLHEsdSx0LHMpe2lmKHQpe3ZhciBwPVt0LnNlcmllc0luZGV4LHQucG9pbnRJbmRleCx0LmRhdGFdO3ZhciBvPWpRdWVyeS5FdmVudCgianFwbG90RGF0YU1vdXNlT3ZlciIpO28ucGFnZVg9ci5wYWdlWDtvLnBhZ2VZPXIucGFnZVk7cy50YXJnZXQudHJpZ2dlcihvLHApO2lmKHMuc2VyaWVzW3BbMF1dLmhpZ2hsaWdodE1vdXNlT3ZlciYmIShwWzBdPT1zLnBsdWdpbnMuZG9udXRSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4JiZwWzFdPT1zLnNlcmllc1twWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpe3ZhciBuPWpRdWVyeS5FdmVudCgianFwbG90RGF0YUhpZ2hsaWdodCIpO24ud2hpY2g9ci53aGljaDtuLnBhZ2VYPXIucGFnZVg7bi5wYWdlWT1yLnBhZ2VZO3MudGFyZ2V0LnRyaWdnZXIobixwKTtkKHMscFswXSxwWzFdKX19ZWxzZXtpZih0PT1udWxsKXtpKHMpfX19ZnVuY3Rpb24gYShxLHAsdCxzLHIpe2lmKHMpe3ZhciBvPVtzLnNlcmllc0luZGV4LHMucG9pbnRJbmRleCxzLmRhdGFdO2lmKHIuc2VyaWVzW29bMF1dLmhpZ2hsaWdodE1vdXNlRG93biYmIShvWzBdPT1yLnBsdWdpbnMuZG9udXRSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4JiZvWzFdPT1yLnNlcmllc1tvWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpe3ZhciBuPWpRdWVyeS5FdmVudCgianFwbG90RGF0YUhpZ2hsaWdodCIpO24ud2hpY2g9cS53aGljaDtuLnBhZ2VYPXEucGFnZVg7bi5wYWdlWT1xLnBhZ2VZO3IudGFyZ2V0LnRyaWdnZXIobixvKTtkKHIsb1swXSxvWzFdKX19ZWxzZXtpZihzPT1udWxsKXtpKHIpfX19ZnVuY3Rpb24gaihwLG8scyxyLHEpe3ZhciBuPXEucGx1Z2lucy5kb251dFJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg7aWYobiE9bnVsbCYmcS5zZXJpZXNbbl0uaGlnaGxpZ2h0TW91c2VEb3duKXtpKHEpfX1mdW5jdGlvbiBmKHEscCx0LHMscil7aWYocyl7dmFyIG89W3Muc2VyaWVzSW5kZXgscy5wb2ludEluZGV4LHMuZGF0YV07dmFyIG49alF1ZXJ5LkV2ZW50KCJqcXBsb3REYXRhQ2xpY2siKTtuLndoaWNoPXEud2hpY2g7bi5wYWdlWD1xLnBhZ2VYO24ucGFnZVk9cS5wYWdlWTtyLnRhcmdldC50cmlnZ2VyKG4sbyl9fWZ1bmN0aW9uIG0ocixxLHUsdCxzKXtpZih0KXt2YXIgcD1bdC5zZXJpZXNJbmRleCx0LnBvaW50SW5kZXgsdC5kYXRhXTt2YXIgbj1zLnBsdWdpbnMuZG9udXRSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4O2lmKG4hPW51bGwmJnMuc2VyaWVzW25dLmhpZ2hsaWdodE1vdXNlRG93bil7aShzKX12YXIgbz1qUXVlcnkuRXZlbnQoImpxcGxvdERhdGFSaWdodENsaWNrIik7by53aGljaD1yLndoaWNoO28ucGFnZVg9ci5wYWdlWDtvLnBhZ2VZPXIucGFnZVk7cy50YXJnZXQudHJpZ2dlcihvLHApfX1mdW5jdGlvbiBoKCl7aWYodGhpcy5wbHVnaW5zLmRvbnV0UmVuZGVyZXImJnRoaXMucGx1Z2lucy5kb251dFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcyl7dGhpcy5wbHVnaW5zLmRvbnV0UmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLnJlc2V0Q2FudmFzKCk7dGhpcy5wbHVnaW5zLmRvbnV0UmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzPW51bGx9dGhpcy5wbHVnaW5zLmRvbnV0UmVuZGVyZXI9e2hpZ2hsaWdodGVkU2VyaWVzSW5kZXg6bnVsbH07dGhpcy5wbHVnaW5zLmRvbnV0UmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzPW5ldyBlLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7dmFyIG89ZSh0aGlzLnRhcmdldElkKyIgLmpxcGxvdC1kYXRhLWxhYmVsIik7aWYoby5sZW5ndGgpe2Uob1swXSkuYmVmb3JlKHRoaXMucGx1Z2lucy5kb251dFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCJqcXBsb3QtZG9udXRSZW5kZXJlci1oaWdobGlnaHQtY2FudmFzIix0aGlzLl9wbG90RGltZW5zaW9ucyx0aGlzKSl9ZWxzZXt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZSh0aGlzLnBsdWdpbnMuZG9udXRSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywianFwbG90LWRvbnV0UmVuZGVyZXItaGlnaGxpZ2h0LWNhbnZhcyIsdGhpcy5fcGxvdERpbWVuc2lvbnMsdGhpcykpfXZhciBuPXRoaXMucGx1Z2lucy5kb251dFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5zZXRDb250ZXh0KCk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCJtb3VzZWxlYXZlIix7cGxvdDp0aGlzfSxmdW5jdGlvbihwKXtpKHAuZGF0YS5wbG90KX0pfWUuanFwbG90LnByZUluaXRIb29rcy5wdXNoKGMpO2UuanFwbG90LkRvbnV0VGlja1JlbmRlcmVyPWZ1bmN0aW9uKCl7ZS5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlci5jYWxsKHRoaXMpfTtlLmpxcGxvdC5Eb251dFRpY2tSZW5kZXJlci5wcm90b3R5cGU9bmV3IGUuanFwbG90LkF4aXNUaWNrUmVuZGVyZXIoKTtlLmpxcGxvdC5Eb251dFRpY2tSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3I9ZS5qcXBsb3QuRG9udXRUaWNrUmVuZGVyZXJ9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.dragable.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgCiAgICAvKioKICAgICAqIENsYXNzOiAkLmpxcGxvdC5EcmFnYWJsZQogICAgICogUGx1Z2luIHRvIG1ha2UgcGxvdHRlZCBwb2ludHMgZHJhZ2FibGUgYnkgdGhlIHVzZXIuCiAgICAgKi8KICAgICQuanFwbG90LkRyYWdhYmxlID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIC8vIEdyb3VwOiBQcm9wZXJ0aWVzCiAgICAgICAgdGhpcy5tYXJrZXJSZW5kZXJlciA9IG5ldyAkLmpxcGxvdC5NYXJrZXJSZW5kZXJlcih7c2hhZG93OmZhbHNlfSk7CiAgICAgICAgdGhpcy5zaGFwZVJlbmRlcmVyID0gbmV3ICQuanFwbG90LlNoYXBlUmVuZGVyZXIoKTsKICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTsKICAgICAgICB0aGlzLmlzT3ZlciA9IGZhbHNlOwogICAgICAgIHRoaXMuX2N0eDsKICAgICAgICB0aGlzLl9lbGVtOwogICAgICAgIHRoaXMuX3BvaW50OwogICAgICAgIHRoaXMuX2dyaWREYXRhOwogICAgICAgIC8vIHByb3A6IGNvbG9yCiAgICAgICAgLy8gQ1NTIGNvbG9yIHNwZWMgZm9yIHRoZSBkcmFnZ2VkIHBvaW50IChhbmQgYWRqYWNlbnQgbGluZSBzZWdtZW50IG9yIGJhcikuCiAgICAgICAgdGhpcy5jb2xvcjsKICAgICAgICAvLyBwcm9wOiBjb25zdHJhaW5UbwogICAgICAgIC8vIENvbnN0cmFpbiBkcmFnZ2luZyBtb3Rpb24gdG8gYW4gYXhpcyBvciB0byBub25lLgogICAgICAgIC8vIEFsbG93YWJsZSB2YWx1ZXMgYXJlICdub25lJywgJ3gnLCAneScKICAgICAgICB0aGlzLmNvbnN0cmFpblRvID0gJ25vbmUnOyAgLy8gJ3gnLCAneScsIG9yICdub25lJzsKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgIH07CiAgICAKICAgIGZ1bmN0aW9uIERyYWdDYW52YXMoKSB7CiAgICAgICAgJC5qcXBsb3QuR2VuZXJpY0NhbnZhcy5jYWxsKHRoaXMpOwogICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7CiAgICAgICAgdGhpcy5fbmVpZ2hib3I7CiAgICAgICAgdGhpcy5fY3Vyc29ycyA9IFtdOwogICAgfQogICAgCiAgICBEcmFnQ2FudmFzLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7CiAgICBEcmFnQ2FudmFzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyYWdDYW52YXM7CiAgICAKICAgIAogICAgLy8gY2FsbGVkIHdpdGhpbiBzY29wZSBvZiBzZXJpZXMKICAgICQuanFwbG90LkRyYWdhYmxlLnBhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uIChkZWZhdWx0cywgb3B0cykgewogICAgICAgIHZhciBvcHRpb25zID0gb3B0cyB8fCB7fTsKICAgICAgICB0aGlzLnBsdWdpbnMuZHJhZ2FibGUgPSBuZXcgJC5qcXBsb3QuRHJhZ2FibGUob3B0aW9ucy5kcmFnYWJsZSk7CiAgICAgICAgLy8gc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHNlcmllcyBvcHRpb25zIGFyZSBwYXJzZWQsCiAgICAgICAgLy8gd2UgY2FuIHNldCB0aGlzIGhlcmUgYW5kIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWQuCiAgICAgICAgdGhpcy5pc0RyYWdhYmxlID0gJC5qcXBsb3QuY29uZmlnLmVuYWJsZVBsdWdpbnM7CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aGluIGNvbnRleHQgb2YgcGxvdAogICAgLy8gY3JlYXRlIGEgY2FudmFzIHdoaWNoIHdlIGNhbiBkcmF3IG9uLgogICAgLy8gaW5zZXJ0IGl0IGJlZm9yZSB0aGUgZXZlbnRDYW52YXMsIHNvIGV2ZW50Q2FudmFzIHdpbGwgc3RpbGwgY2FwdHVyZSBldmVudHMuCiAgICAvLyBhZGQgYSBuZXcgRHJhZ0NhbnZhcyBvYmplY3QgdG8gdGhlIHBsb3QgcGx1Z2lucyB0byBoYW5kbGUgZHJhd2luZyBvbiB0aGlzIG5ldyBjYW52YXMuCiAgICAkLmpxcGxvdC5EcmFnYWJsZS5wb3N0UGxvdERyYXcgPSBmdW5jdGlvbigpIHsKICAgICAgICAvLyBNZW1vcnkgTGVha3MgcGF0Y2ggICAgCiAgICAgICAgaWYgKHRoaXMucGx1Z2lucy5kcmFnYWJsZSAmJiB0aGlzLnBsdWdpbnMuZHJhZ2FibGUuaGlnaGxpZ2h0Q2FudmFzKSB7CiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kcmFnYWJsZS5oaWdobGlnaHRDYW52YXMucmVzZXRDYW52YXMoKTsKICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRyYWdhYmxlLmhpZ2hsaWdodENhbnZhcyA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICB0aGlzLnBsdWdpbnMuZHJhZ2FibGUgPSB7cHJldmlvdXNDdXJzb3I6J2F1dG8nLCBpc092ZXI6ZmFsc2V9OwogICAgICAgIHRoaXMucGx1Z2lucy5kcmFnYWJsZS5kcmFnQ2FudmFzID0gbmV3IERyYWdDYW52YXMoKTsKICAgICAgICAKICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZSh0aGlzLnBsdWdpbnMuZHJhZ2FibGUuZHJhZ0NhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCAnanFwbG90LWRyYWdhYmxlLWNhbnZhcycsIHRoaXMuX3Bsb3REaW1lbnNpb25zLCB0aGlzKSk7CiAgICAgICAgdmFyIGRjdHggPSB0aGlzLnBsdWdpbnMuZHJhZ2FibGUuZHJhZ0NhbnZhcy5zZXRDb250ZXh0KCk7CiAgICB9OwogICAgCiAgICAvLyQuanFwbG90LnByZUluaXRIb29rcy5wdXNoKCQuanFwbG90LkRyYWdhYmxlLmluaXQpOwogICAgJC5qcXBsb3QucHJlUGFyc2VTZXJpZXNPcHRpb25zSG9va3MucHVzaCgkLmpxcGxvdC5EcmFnYWJsZS5wYXJzZU9wdGlvbnMpOwogICAgJC5qcXBsb3QucG9zdERyYXdIb29rcy5wdXNoKCQuanFwbG90LkRyYWdhYmxlLnBvc3RQbG90RHJhdyk7CiAgICAkLmpxcGxvdC5ldmVudExpc3RlbmVySG9va3MucHVzaChbJ2pxcGxvdE1vdXNlTW92ZScsIGhhbmRsZU1vdmVdKTsKICAgICQuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsnanFwbG90TW91c2VEb3duJywgaGFuZGxlRG93bl0pOwogICAgJC5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLnB1c2goWydqcXBsb3RNb3VzZVVwJywgaGFuZGxlVXBdKTsKCiAgICAKICAgIGZ1bmN0aW9uIGluaXREcmFnUG9pbnQocGxvdCwgbmVpZ2hib3IpIHsKICAgICAgICB2YXIgcyA9IHBsb3Quc2VyaWVzW25laWdoYm9yLnNlcmllc0luZGV4XTsKICAgICAgICB2YXIgZHJhZyA9IHMucGx1Z2lucy5kcmFnYWJsZTsKICAgICAgICAKICAgICAgICAvLyBmaXJzdCwgaW5pdCB0aGUgbWFyayByZW5kZXJlciBmb3IgdGhlIGRyYWdnZWQgcG9pbnQKICAgICAgICB2YXIgc21yID0gcy5tYXJrZXJSZW5kZXJlcjsKICAgICAgICB2YXIgbXIgPSBkcmFnLm1hcmtlclJlbmRlcmVyOwogICAgICAgIG1yLnN0eWxlID0gc21yLnN0eWxlOwogICAgICAgIG1yLmxpbmVXaWR0aCA9IHNtci5saW5lV2lkdGggKyAyLjU7CiAgICAgICAgbXIuc2l6ZSA9IHNtci5zaXplICsgNTsKICAgICAgICBpZiAoIWRyYWcuY29sb3IpIHsKICAgICAgICAgICAgdmFyIHJnYmEgPSAkLmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHMoc21yLmNvbG9yKTsKICAgICAgICAgICAgdmFyIG5ld3JnYiA9IFtyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdXTsKICAgICAgICAgICAgdmFyIGFscGhhID0gKHJnYmFbM10gPj0gMC42KSA/IHJnYmFbM10qMC42IDogcmdiYVszXSooMi1yZ2JhWzNdKTsKICAgICAgICAgICAgZHJhZy5jb2xvciA9ICdyZ2JhKCcrbmV3cmdiWzBdKycsJytuZXdyZ2JbMV0rJywnK25ld3JnYlsyXSsnLCcrYWxwaGErJyknOwogICAgICAgIH0KICAgICAgICBtci5jb2xvciA9IGRyYWcuY29sb3I7CiAgICAgICAgbXIuaW5pdCgpOwoKICAgICAgICB2YXIgc3RhcnQgPSAobmVpZ2hib3IucG9pbnRJbmRleCA+IDApID8gbmVpZ2hib3IucG9pbnRJbmRleCAtIDEgOiAwOwogICAgICAgIHZhciBlbmQgPSBuZWlnaGJvci5wb2ludEluZGV4KzI7CiAgICAgICAgZHJhZy5fZ3JpZERhdGEgPSBzLmdyaWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVNb3ZlKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIGlmIChwbG90LnBsdWdpbnMuZHJhZ2FibGUuZHJhZ0NhbnZhcy5pc0RyYWdnaW5nKSB7CiAgICAgICAgICAgIHZhciBkYyA9IHBsb3QucGx1Z2lucy5kcmFnYWJsZS5kcmFnQ2FudmFzOwogICAgICAgICAgICB2YXIgZHAgPSBkYy5fbmVpZ2hib3I7CiAgICAgICAgICAgIHZhciBzID0gcGxvdC5zZXJpZXNbZHAuc2VyaWVzSW5kZXhdOwogICAgICAgICAgICB2YXIgZHJhZyA9IHMucGx1Z2lucy5kcmFnYWJsZTsKICAgICAgICAgICAgdmFyIGdkID0gcy5ncmlkRGF0YTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGNvbXB1dGUgdGhlIG5ldyBncmlkIHBvc2l0aW9uIHdpdGggYW55IGNvbnN0cmFpbnRzLgogICAgICAgICAgICB2YXIgeCA9IChkcmFnLmNvbnN0cmFpblRvID09ICd5JykgPyBkcC5ncmlkRGF0YVswXSA6IGdyaWRwb3MueDsKICAgICAgICAgICAgdmFyIHkgPSAoZHJhZy5jb25zdHJhaW5UbyA9PSAneCcpID8gZHAuZ3JpZERhdGFbMV0gOiBncmlkcG9zLnk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBjb21wdXRlIGRhdGEgdmFsdWVzIGZvciBhbnkgbGlzdGVuZXJzLgogICAgICAgICAgICB2YXIgeHUgPSBzLl94YXhpcy5zZXJpZXNfcDJ1KHgpOwogICAgICAgICAgICB2YXIgeXUgPSBzLl95YXhpcy5zZXJpZXNfcDJ1KHkpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gY2xlYXIgdGhlIGNhbnZhcyB0aGVuIHJlZHJhdyBlZmZlY3QgYXQgbmV3IHBvc2l0aW9uLgogICAgICAgICAgICB2YXIgY3R4ID0gZGMuX2N0eDsKICAgICAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCBjdHguY2FudmFzLndpZHRoLCBjdHguY2FudmFzLmhlaWdodCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBhZGp1c3Qgb3VyIGdyaWREYXRhIGZvciB0aGUgbmV3IG1vdXNlIHBvc2l0aW9uCiAgICAgICAgICAgIGlmIChkcC5wb2ludEluZGV4ID4gMCkgewogICAgICAgICAgICAgICAgZHJhZy5fZ3JpZERhdGFbMV0gPSBbeCwgeV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBkcmFnLl9ncmlkRGF0YVswXSA9IFt4LCB5XTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwbG90LnNlcmllc1tkcC5zZXJpZXNJbmRleF0uZHJhdyhkYy5fY3R4LCB7Z3JpZERhdGE6ZHJhZy5fZ3JpZERhdGEsIHNoYWRvdzpmYWxzZSwgcHJldmVudEpxUGxvdFNlcmllc0RyYXdUcmlnZ2VyOnRydWUsIGNvbG9yOmRyYWcuY29sb3IsIG1hcmtlck9wdGlvbnM6e2NvbG9yOmRyYWcuY29sb3IsIHNoYWRvdzpmYWxzZX0sIHRyZW5kbGluZTp7c2hvdzpmYWxzZX19KTsKICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcignanFwbG90U2VyaWVzUG9pbnRDaGFuZ2UnLCBbZHAuc2VyaWVzSW5kZXgsIGRwLnBvaW50SW5kZXgsIFt4dSx5dV0sIFt4LHldXSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG5laWdoYm9yICE9IG51bGwpIHsKICAgICAgICAgICAgdmFyIHNlcmllcyA9IHBsb3Quc2VyaWVzW25laWdoYm9yLnNlcmllc0luZGV4XTsKICAgICAgICAgICAgaWYgKHNlcmllcy5pc0RyYWdhYmxlKSB7CiAgICAgICAgICAgICAgICB2YXIgZGMgPSBwbG90LnBsdWdpbnMuZHJhZ2FibGUuZHJhZ0NhbnZhczsKICAgICAgICAgICAgICAgIGlmICghZGMuaXNPdmVyKSB7CiAgICAgICAgICAgICAgICAgICAgZGMuX2N1cnNvcnMucHVzaChldi50YXJnZXQuc3R5bGUuY3Vyc29yKTsKICAgICAgICAgICAgICAgICAgICBldi50YXJnZXQuc3R5bGUuY3Vyc29yID0gInBvaW50ZXIiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGMuaXNPdmVyID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChuZWlnaGJvciA9PSBudWxsKSB7CiAgICAgICAgICAgIHZhciBkYyA9IHBsb3QucGx1Z2lucy5kcmFnYWJsZS5kcmFnQ2FudmFzOwogICAgICAgICAgICBpZiAoZGMuaXNPdmVyKSB7CiAgICAgICAgICAgICAgICBldi50YXJnZXQuc3R5bGUuY3Vyc29yID0gZGMuX2N1cnNvcnMucG9wKCk7CiAgICAgICAgICAgICAgICBkYy5pc092ZXIgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgZnVuY3Rpb24gaGFuZGxlRG93bihldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICB2YXIgZGMgPSBwbG90LnBsdWdpbnMuZHJhZ2FibGUuZHJhZ0NhbnZhczsKICAgICAgICBkYy5fY3Vyc29ycy5wdXNoKGV2LnRhcmdldC5zdHlsZS5jdXJzb3IpOwogICAgICAgIGlmIChuZWlnaGJvciAhPSBudWxsKSB7CiAgICAgICAgICAgIHZhciBzID0gcGxvdC5zZXJpZXNbbmVpZ2hib3Iuc2VyaWVzSW5kZXhdOwogICAgICAgICAgICB2YXIgZHJhZyA9IHMucGx1Z2lucy5kcmFnYWJsZTsKICAgICAgICAgICAgaWYgKHMuaXNEcmFnYWJsZSAmJiAhZGMuaXNEcmFnZ2luZykgewogICAgICAgICAgICAgICAgZGMuX25laWdoYm9yID0gbmVpZ2hib3I7CiAgICAgICAgICAgICAgICBkYy5pc0RyYWdnaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGluaXREcmFnUG9pbnQocGxvdCwgbmVpZ2hib3IpOwogICAgICAgICAgICAgICAgZHJhZy5tYXJrZXJSZW5kZXJlci5kcmF3KHMuZ3JpZERhdGFbbmVpZ2hib3IucG9pbnRJbmRleF1bMF0sIHMuZ3JpZERhdGFbbmVpZ2hib3IucG9pbnRJbmRleF1bMV0sIGRjLl9jdHgpOwogICAgICAgICAgICAgICAgZXYudGFyZ2V0LnN0eWxlLmN1cnNvciA9ICJtb3ZlIjsKICAgICAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoJ2pxcGxvdERyYWdTdGFydCcsIFtuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgZ3JpZHBvcywgZGF0YXBvc10pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIEp1c3QgaW4gY2FzZSBvZiBhIGhpY2t1cCwgd2UnbGwgY2xlYXIgdGhlIGRyYWcgY2FudmFzIGFuZCByZXNldC4KICAgICAgICBlbHNlIHsKICAgICAgICAgICB2YXIgY3R4ID0gZGMuX2N0eDsKICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGN0eC5jYW52YXMud2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTsKICAgICAgICAgICBkYy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVVcChldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICBpZiAocGxvdC5wbHVnaW5zLmRyYWdhYmxlLmRyYWdDYW52YXMuaXNEcmFnZ2luZykgewogICAgICAgICAgICB2YXIgZGMgPSBwbG90LnBsdWdpbnMuZHJhZ2FibGUuZHJhZ0NhbnZhczsKICAgICAgICAgICAgLy8gY2xlYXIgdGhlIGNhbnZhcwogICAgICAgICAgICB2YXIgY3R4ID0gZGMuX2N0eDsKICAgICAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCBjdHguY2FudmFzLndpZHRoLCBjdHguY2FudmFzLmhlaWdodCk7CiAgICAgICAgICAgIGRjLmlzRHJhZ2dpbmcgPSBmYWxzZTsKICAgICAgICAgICAgLy8gcmVkcmF3IHRoZSBzZXJpZXMgY2FudmFzIGF0IHRoZSBuZXcgcG9pbnQuCiAgICAgICAgICAgIHZhciBkcCA9IGRjLl9uZWlnaGJvcjsKICAgICAgICAgICAgdmFyIHMgPSBwbG90LnNlcmllc1tkcC5zZXJpZXNJbmRleF07CiAgICAgICAgICAgIHZhciBkcmFnID0gcy5wbHVnaW5zLmRyYWdhYmxlOwogICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBuZXcgZ3JpZCBwb3NpdGlvbiB3aXRoIGFueSBjb25zdHJhaW50cy4KICAgICAgICAgICAgdmFyIHggPSAoZHJhZy5jb25zdHJhaW5UbyA9PSAneScpID8gZHAuZGF0YVswXSA6IGRhdGFwb3Nbcy54YXhpc107CiAgICAgICAgICAgIHZhciB5ID0gKGRyYWcuY29uc3RyYWluVG8gPT0gJ3gnKSA/IGRwLmRhdGFbMV0gOiBkYXRhcG9zW3MueWF4aXNdOwogICAgICAgICAgICAvLyB2YXIgeCA9IGRhdGFwb3Nbcy54YXhpc107CiAgICAgICAgICAgIC8vIHZhciB5ID0gZGF0YXBvc1tzLnlheGlzXTsKICAgICAgICAgICAgcy5kYXRhW2RwLnBvaW50SW5kZXhdWzBdID0geDsKICAgICAgICAgICAgcy5kYXRhW2RwLnBvaW50SW5kZXhdWzFdID0geTsKICAgICAgICAgICAgcGxvdC5kcmF3U2VyaWVzKHtwcmV2ZW50SnFQbG90U2VyaWVzRHJhd1RyaWdnZXI6dHJ1ZX0sIGRwLnNlcmllc0luZGV4KTsKICAgICAgICAgICAgZGMuX25laWdoYm9yID0gbnVsbDsKICAgICAgICAgICAgZXYudGFyZ2V0LnN0eWxlLmN1cnNvciA9IGRjLl9jdXJzb3JzLnBvcCgpOwogICAgICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKCdqcXBsb3REcmFnU3RvcCcsIFtncmlkcG9zLCBkYXRhcG9zXSk7CiAgICAgICAgfQogICAgfQp9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.dragable.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGQpe2QuanFwbG90LkRyYWdhYmxlPWZ1bmN0aW9uKGcpe3RoaXMubWFya2VyUmVuZGVyZXI9bmV3IGQuanFwbG90Lk1hcmtlclJlbmRlcmVyKHtzaGFkb3c6ZmFsc2V9KTt0aGlzLnNoYXBlUmVuZGVyZXI9bmV3IGQuanFwbG90LlNoYXBlUmVuZGVyZXIoKTt0aGlzLmlzRHJhZ2dpbmc9ZmFsc2U7dGhpcy5pc092ZXI9ZmFsc2U7dGhpcy5fY3R4O3RoaXMuX2VsZW07dGhpcy5fcG9pbnQ7dGhpcy5fZ3JpZERhdGE7dGhpcy5jb2xvcjt0aGlzLmNvbnN0cmFpblRvPSJub25lIjtkLmV4dGVuZCh0cnVlLHRoaXMsZyl9O2Z1bmN0aW9uIGIoKXtkLmpxcGxvdC5HZW5lcmljQ2FudmFzLmNhbGwodGhpcyk7dGhpcy5pc0RyYWdnaW5nPWZhbHNlO3RoaXMuaXNPdmVyPWZhbHNlO3RoaXMuX25laWdoYm9yO3RoaXMuX2N1cnNvcnM9W119Yi5wcm90b3R5cGU9bmV3IGQuanFwbG90LkdlbmVyaWNDYW52YXMoKTtiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1iO2QuanFwbG90LkRyYWdhYmxlLnBhcnNlT3B0aW9ucz1mdW5jdGlvbihpLGgpe3ZhciBnPWh8fHt9O3RoaXMucGx1Z2lucy5kcmFnYWJsZT1uZXcgZC5qcXBsb3QuRHJhZ2FibGUoZy5kcmFnYWJsZSk7dGhpcy5pc0RyYWdhYmxlPWQuanFwbG90LmNvbmZpZy5lbmFibGVQbHVnaW5zfTtkLmpxcGxvdC5EcmFnYWJsZS5wb3N0UGxvdERyYXc9ZnVuY3Rpb24oKXtpZih0aGlzLnBsdWdpbnMuZHJhZ2FibGUmJnRoaXMucGx1Z2lucy5kcmFnYWJsZS5oaWdobGlnaHRDYW52YXMpe3RoaXMucGx1Z2lucy5kcmFnYWJsZS5oaWdobGlnaHRDYW52YXMucmVzZXRDYW52YXMoKTt0aGlzLnBsdWdpbnMuZHJhZ2FibGUuaGlnaGxpZ2h0Q2FudmFzPW51bGx9dGhpcy5wbHVnaW5zLmRyYWdhYmxlPXtwcmV2aW91c0N1cnNvcjoiYXV0byIsaXNPdmVyOmZhbHNlfTt0aGlzLnBsdWdpbnMuZHJhZ2FibGUuZHJhZ0NhbnZhcz1uZXcgYigpO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKHRoaXMucGx1Z2lucy5kcmFnYWJsZS5kcmFnQ2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsImpxcGxvdC1kcmFnYWJsZS1jYW52YXMiLHRoaXMuX3Bsb3REaW1lbnNpb25zLHRoaXMpKTt2YXIgZz10aGlzLnBsdWdpbnMuZHJhZ2FibGUuZHJhZ0NhbnZhcy5zZXRDb250ZXh0KCl9O2QuanFwbG90LnByZVBhcnNlU2VyaWVzT3B0aW9uc0hvb2tzLnB1c2goZC5qcXBsb3QuRHJhZ2FibGUucGFyc2VPcHRpb25zKTtkLmpxcGxvdC5wb3N0RHJhd0hvb2tzLnB1c2goZC5qcXBsb3QuRHJhZ2FibGUucG9zdFBsb3REcmF3KTtkLmpxcGxvdC5ldmVudExpc3RlbmVySG9va3MucHVzaChbImpxcGxvdE1vdXNlTW92ZSIsZV0pO2QuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsianFwbG90TW91c2VEb3duIixjXSk7ZC5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLnB1c2goWyJqcXBsb3RNb3VzZVVwIixhXSk7ZnVuY3Rpb24gZihuLHApe3ZhciBxPW4uc2VyaWVzW3Auc2VyaWVzSW5kZXhdO3ZhciBtPXEucGx1Z2lucy5kcmFnYWJsZTt2YXIgaD1xLm1hcmtlclJlbmRlcmVyO3ZhciBpPW0ubWFya2VyUmVuZGVyZXI7aS5zdHlsZT1oLnN0eWxlO2kubGluZVdpZHRoPWgubGluZVdpZHRoKzIuNTtpLnNpemU9aC5zaXplKzU7aWYoIW0uY29sb3Ipe3ZhciBsPWQuanFwbG90LmdldENvbG9yQ29tcG9uZW50cyhoLmNvbG9yKTt2YXIgbz1bbFswXSxsWzFdLGxbMl1dO3ZhciBrPShsWzNdPj0wLjYpP2xbM10qMC42OmxbM10qKDItbFszXSk7bS5jb2xvcj0icmdiYSgiK29bMF0rIiwiK29bMV0rIiwiK29bMl0rIiwiK2srIikifWkuY29sb3I9bS5jb2xvcjtpLmluaXQoKTt2YXIgZz0ocC5wb2ludEluZGV4PjApP3AucG9pbnRJbmRleC0xOjA7dmFyIGo9cC5wb2ludEluZGV4KzI7bS5fZ3JpZERhdGE9cS5ncmlkRGF0YS5zbGljZShnLGopfWZ1bmN0aW9uIGUobyxsLGgsdCxtKXtpZihtLnBsdWdpbnMuZHJhZ2FibGUuZHJhZ0NhbnZhcy5pc0RyYWdnaW5nKXt2YXIgdT1tLnBsdWdpbnMuZHJhZ2FibGUuZHJhZ0NhbnZhczt2YXIgaT11Ll9uZWlnaGJvcjt2YXIgdz1tLnNlcmllc1tpLnNlcmllc0luZGV4XTt2YXIgaz13LnBsdWdpbnMuZHJhZ2FibGU7dmFyIHI9dy5ncmlkRGF0YTt2YXIgcD0oay5jb25zdHJhaW5Ubz09InkiKT9pLmdyaWREYXRhWzBdOmwueDt2YXIgbj0oay5jb25zdHJhaW5Ubz09IngiKT9pLmdyaWREYXRhWzFdOmwueTt2YXIgZz13Ll94YXhpcy5zZXJpZXNfcDJ1KHApO3ZhciBxPXcuX3lheGlzLnNlcmllc19wMnUobik7dmFyIHY9dS5fY3R4O3YuY2xlYXJSZWN0KDAsMCx2LmNhbnZhcy53aWR0aCx2LmNhbnZhcy5oZWlnaHQpO2lmKGkucG9pbnRJbmRleD4wKXtrLl9ncmlkRGF0YVsxXT1bcCxuXX1lbHNle2suX2dyaWREYXRhWzBdPVtwLG5dfW0uc2VyaWVzW2kuc2VyaWVzSW5kZXhdLmRyYXcodS5fY3R4LHtncmlkRGF0YTprLl9ncmlkRGF0YSxzaGFkb3c6ZmFsc2UscHJldmVudEpxUGxvdFNlcmllc0RyYXdUcmlnZ2VyOnRydWUsY29sb3I6ay5jb2xvcixtYXJrZXJPcHRpb25zOntjb2xvcjprLmNvbG9yLHNoYWRvdzpmYWxzZX0sdHJlbmRsaW5lOntzaG93OmZhbHNlfX0pO20udGFyZ2V0LnRyaWdnZXIoImpxcGxvdFNlcmllc1BvaW50Q2hhbmdlIixbaS5zZXJpZXNJbmRleCxpLnBvaW50SW5kZXgsW2cscV0sW3Asbl1dKX1lbHNle2lmKHQhPW51bGwpe3ZhciBqPW0uc2VyaWVzW3Quc2VyaWVzSW5kZXhdO2lmKGouaXNEcmFnYWJsZSl7dmFyIHU9bS5wbHVnaW5zLmRyYWdhYmxlLmRyYWdDYW52YXM7aWYoIXUuaXNPdmVyKXt1Ll9jdXJzb3JzLnB1c2goby50YXJnZXQuc3R5bGUuY3Vyc29yKTtvLnRhcmdldC5zdHlsZS5jdXJzb3I9InBvaW50ZXIifXUuaXNPdmVyPXRydWV9fWVsc2V7aWYodD09bnVsbCl7dmFyIHU9bS5wbHVnaW5zLmRyYWdhYmxlLmRyYWdDYW52YXM7aWYodS5pc092ZXIpe28udGFyZ2V0LnN0eWxlLmN1cnNvcj11Ll9jdXJzb3JzLnBvcCgpO3UuaXNPdmVyPWZhbHNlfX19fX1mdW5jdGlvbiBjKGssaSxnLGwsail7dmFyIG09ai5wbHVnaW5zLmRyYWdhYmxlLmRyYWdDYW52YXM7bS5fY3Vyc29ycy5wdXNoKGsudGFyZ2V0LnN0eWxlLmN1cnNvcik7aWYobCE9bnVsbCl7dmFyIG89ai5zZXJpZXNbbC5zZXJpZXNJbmRleF07dmFyIGg9by5wbHVnaW5zLmRyYWdhYmxlO2lmKG8uaXNEcmFnYWJsZSYmIW0uaXNEcmFnZ2luZyl7bS5fbmVpZ2hib3I9bDttLmlzRHJhZ2dpbmc9dHJ1ZTtmKGosbCk7aC5tYXJrZXJSZW5kZXJlci5kcmF3KG8uZ3JpZERhdGFbbC5wb2ludEluZGV4XVswXSxvLmdyaWREYXRhW2wucG9pbnRJbmRleF1bMV0sbS5fY3R4KTtrLnRhcmdldC5zdHlsZS5jdXJzb3I9Im1vdmUiO2oudGFyZ2V0LnRyaWdnZXIoImpxcGxvdERyYWdTdGFydCIsW2wuc2VyaWVzSW5kZXgsbC5wb2ludEluZGV4LGksZ10pfX1lbHNle3ZhciBuPW0uX2N0eDtuLmNsZWFyUmVjdCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KTttLmlzRHJhZ2dpbmc9ZmFsc2V9fWZ1bmN0aW9uIGEobSxqLGcsbyxrKXtpZihrLnBsdWdpbnMuZHJhZ2FibGUuZHJhZ0NhbnZhcy5pc0RyYWdnaW5nKXt2YXIgcD1rLnBsdWdpbnMuZHJhZ2FibGUuZHJhZ0NhbnZhczt2YXIgcT1wLl9jdHg7cS5jbGVhclJlY3QoMCwwLHEuY2FudmFzLndpZHRoLHEuY2FudmFzLmhlaWdodCk7cC5pc0RyYWdnaW5nPWZhbHNlO3ZhciBoPXAuX25laWdoYm9yO3ZhciByPWsuc2VyaWVzW2guc2VyaWVzSW5kZXhdO3ZhciBpPXIucGx1Z2lucy5kcmFnYWJsZTt2YXIgbj0oaS5jb25zdHJhaW5Ubz09InkiKT9oLmRhdGFbMF06Z1tyLnhheGlzXTt2YXIgbD0oaS5jb25zdHJhaW5Ubz09IngiKT9oLmRhdGFbMV06Z1tyLnlheGlzXTtyLmRhdGFbaC5wb2ludEluZGV4XVswXT1uO3IuZGF0YVtoLnBvaW50SW5kZXhdWzFdPWw7ay5kcmF3U2VyaWVzKHtwcmV2ZW50SnFQbG90U2VyaWVzRHJhd1RyaWdnZXI6dHJ1ZX0saC5zZXJpZXNJbmRleCk7cC5fbmVpZ2hib3I9bnVsbDttLnRhcmdldC5zdHlsZS5jdXJzb3I9cC5fY3Vyc29ycy5wb3AoKTtrLnRhcmdldC50cmlnZ2VyKCJqcXBsb3REcmFnU3RvcCIsW2osZ10pfX19KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.enhancedLegendRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLy8gY2xhc3MgJC5qcXBsb3QuRW5oYW5jZWRMZWdlbmRSZW5kZXJlcgogICAgLy8gTGVnZW5kIHJlbmRlcmVyIHdoaWNoIGNhbiBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygcm93cyBhbmQvb3IgY29sdW1ucyBpbiB0aGUgbGVnZW5kLgogICAgJC5qcXBsb3QuRW5oYW5jZWRMZWdlbmRSZW5kZXJlciA9IGZ1bmN0aW9uKCl7CiAgICAgICAgJC5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRW5oYW5jZWRMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlcigpOwogICAgJC5qcXBsb3QuRW5oYW5jZWRMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5FbmhhbmNlZExlZ2VuZFJlbmRlcmVyOwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBsZWdlbmQuCiAgICAkLmpxcGxvdC5FbmhhbmNlZExlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIC8vIHByb3A6IG51bWJlclJvd3MKICAgICAgICAvLyBNYXhpbXVtIG51bWJlciBvZiByb3dzIGluIHRoZSBsZWdlbmQuICAwIG9yIG51bGwgZm9yIHVubGltaXRlZC4KICAgICAgICB0aGlzLm51bWJlclJvd3MgPSBudWxsOwogICAgICAgIC8vIHByb3A6IG51bWJlckNvbHVtbnMKICAgICAgICAvLyBNYXhpbXVtIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBsZWdlbmQuICAwIG9yIG51bGwgZm9yIHVubGltaXRlZC4KICAgICAgICB0aGlzLm51bWJlckNvbHVtbnMgPSBudWxsOwogICAgICAgIC8vIHByb3A6IHNlcmllc1RvZ2dsZQogICAgICAgIC8vIGZhbHNlIHRvIG5vdCBlbmFibGUgc2VyaWVzIG9uL29mZiB0b2dnbGluZyBvbiB0aGUgbGVnZW5kLgogICAgICAgIC8vIHRydWUgb3IgYSBmYWRlaW4vZmFkZW91dCBzcGVlZCAobnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBvciAnZmFzdCcsICdub3JtYWwnLCAnc2xvdycpIAogICAgICAgIC8vIHRvIGVuYWJsZSBzaG93L2hpZGUgb2Ygc2VyaWVzIG9uIGNsaWNrIG9mIGxlZ2VuZCBpdGVtLgogICAgICAgIHRoaXMuc2VyaWVzVG9nZ2xlID0gJ25vcm1hbCc7CiAgICAgICAgLy8gcHJvcDogc2VyaWVzVG9nZ2xlUmVwbG90CiAgICAgICAgLy8gVHJ1ZSB0byByZXBsb3QgdGhlIGNoYXJ0IGFmdGVyIHRvZ2dsaW5nIHNlcmllcyBvbi9vZmYuCiAgICAgICAgLy8gVGhpcyB3aWxsIHNldCB0aGUgc2VyaWVzIHNob3cgcHJvcGVydHkgdG8gZmFsc2UuCiAgICAgICAgLy8gVGhpcyBhbGxvd3MgZm9yIHJlc2NhbGluZyBvciBvdGhlciBtYW5pcGxhdGlvbiBvZiBjaGFydC4KICAgICAgICAvLyBTZXQgdG8gYW4gb3B0aW9ucyBvYmplY3QgKGUuZy4ge3Jlc2V0QXhlczogdHJ1ZX0pIGZvciByZXBsb3Qgb3B0aW9ucy4KICAgICAgICB0aGlzLnNlcmllc1RvZ2dsZVJlcGxvdCA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGRpc2FibGVJRUZhZGluZwogICAgICAgIC8vIHRydWUgdG8gdG9nZ2xlIHNlcmllcyB3aXRoIGEgc2hvdy9oaWRlIG1ldGhvZCBvbmx5IGFuZCBub3QgYWxsb3cgZmFkaW5nIGluL291dC4gIAogICAgICAgIC8vIFRoaXMgaXMgdG8gb3ZlcmNvbWUgcG9vciBwZXJmb3JtYW5jZSBvZiBmYWRlIGluIHNvbWUgdmVyc2lvbnMgb2YgSUUuCiAgICAgICAgdGhpcy5kaXNhYmxlSUVGYWRpbmcgPSB0cnVlOwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnNlcmllc1RvZ2dsZSkgewogICAgICAgICAgICAkLmpxcGxvdC5wb3N0RHJhd0hvb2tzLnB1c2gocG9zdERyYXcpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIGxlZ2VuZAogICAgJC5qcXBsb3QuRW5oYW5jZWRMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKG9mZnNldHMsIHBsb3QpIHsKICAgICAgICB2YXIgbGVnZW5kID0gdGhpczsKICAgICAgICBpZiAodGhpcy5zaG93KSB7CiAgICAgICAgICAgIHZhciBzZXJpZXMgPSB0aGlzLl9zZXJpZXM7CiAgICAgICAgICAgIHZhciBzOwogICAgICAgICAgICB2YXIgc3MgPSAncG9zaXRpb246YWJzb2x1dGU7JzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMuYmFja2dyb3VuZCkgPyAnYmFja2dyb3VuZDonK3RoaXMuYmFja2dyb3VuZCsnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMuYm9yZGVyKSA/ICdib3JkZXI6Jyt0aGlzLmJvcmRlcisnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMuZm9udFNpemUpID8gJ2ZvbnQtc2l6ZTonK3RoaXMuZm9udFNpemUrJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLmZvbnRGYW1pbHkpID8gJ2ZvbnQtZmFtaWx5OicrdGhpcy5mb250RmFtaWx5Kyc7JyA6ICcnOwogICAgICAgICAgICBzcyArPSAodGhpcy50ZXh0Q29sb3IpID8gJ2NvbG9yOicrdGhpcy50ZXh0Q29sb3IrJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLm1hcmdpblRvcCAhPSBudWxsKSA/ICdtYXJnaW4tdG9wOicrdGhpcy5tYXJnaW5Ub3ArJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLm1hcmdpbkJvdHRvbSAhPSBudWxsKSA/ICdtYXJnaW4tYm90dG9tOicrdGhpcy5tYXJnaW5Cb3R0b20rJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLm1hcmdpbkxlZnQgIT0gbnVsbCkgPyAnbWFyZ2luLWxlZnQ6Jyt0aGlzLm1hcmdpbkxlZnQrJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLm1hcmdpblJpZ2h0ICE9IG51bGwpID8gJ21hcmdpbi1yaWdodDonK3RoaXMubWFyZ2luUmlnaHQrJzsnIDogJyc7CiAgICAgICAgICAgIHRoaXMuX2VsZW0gPSAkKCc8dGFibGUgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiIHN0eWxlPSInK3NzKyciPjwvdGFibGU+Jyk7CiAgICAgICAgICAgIGlmICh0aGlzLnNlcmllc1RvZ2dsZSkgewogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoJ3otaW5kZXgnLCAnMycpOwogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgIHZhciBwYWQgPSBmYWxzZSwgCiAgICAgICAgICAgICAgICByZXZlcnNlID0gZmFsc2UsCiAgICAgICAgICAgICAgICBuciwgbmM7CiAgICAgICAgICAgIGlmICh0aGlzLm51bWJlclJvd3MpIHsKICAgICAgICAgICAgICAgIG5yID0gdGhpcy5udW1iZXJSb3dzOwogICAgICAgICAgICAgICAgaWYgKCF0aGlzLm51bWJlckNvbHVtbnMpewogICAgICAgICAgICAgICAgICAgIG5jID0gTWF0aC5jZWlsKHNlcmllcy5sZW5ndGgvbnIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICBuYyA9IHRoaXMubnVtYmVyQ29sdW1uczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICh0aGlzLm51bWJlckNvbHVtbnMpIHsKICAgICAgICAgICAgICAgIG5jID0gdGhpcy5udW1iZXJDb2x1bW5zOwogICAgICAgICAgICAgICAgbnIgPSBNYXRoLmNlaWwoc2VyaWVzLmxlbmd0aC90aGlzLm51bWJlckNvbHVtbnMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbnIgPSBzZXJpZXMubGVuZ3RoOwogICAgICAgICAgICAgICAgbmMgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGksIGosIHRyLCB0ZDEsIHRkMiwgbHQsIHJzLCBkaXYsIGRpdjAsIGRpdjE7CiAgICAgICAgICAgIHZhciBpZHggPSAwOwogICAgICAgICAgICAvLyBjaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byByZXZlcnNlCiAgICAgICAgICAgIGZvciAoaT1zZXJpZXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICAgICAgaWYgKG5jID09IDEgJiYgc2VyaWVzW2ldLl9zdGFjayB8fCBzZXJpZXNbaV0ucmVuZGVyZXIuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlcil7CiAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChpPTA7IGk8bnI7IGkrKykgewogICAgICAgICAgICAgICAgdHIgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJykpOwogICAgICAgICAgICAgICAgdHIuYWRkQ2xhc3MoJ2pxcGxvdC10YWJsZS1sZWdlbmQnKTsKICAgICAgICAgICAgICAgIGlmIChyZXZlcnNlKXsKICAgICAgICAgICAgICAgICAgICB0ci5wcmVwZW5kVG8odGhpcy5fZWxlbSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZFRvKHRoaXMuX2VsZW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChqPTA7IGo8bmM7IGorKykgewogICAgICAgICAgICAgICAgICAgIGlmIChpZHggPCBzZXJpZXMubGVuZ3RoICYmIChzZXJpZXNbaWR4XS5zaG93IHx8IHNlcmllc1tpZHhdLnNob3dMYWJlbCkpewogICAgICAgICAgICAgICAgICAgICAgICBzID0gc2VyaWVzW2lkeF07CiAgICAgICAgICAgICAgICAgICAgICAgIGx0ID0gdGhpcy5sYWJlbHNbaWR4XSB8fCBzLmxhYmVsLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gcy5jb2xvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV2ZXJzZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGk+MCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gbnIgLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBycyA9IChwYWQpID8gdGhpcy5yb3dTcGFjaW5nIDogJzAnOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMSA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDEuYWRkQ2xhc3MoJ2pxcGxvdC10YWJsZS1sZWdlbmQganFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2gnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMS5jc3Moe3RleHRBbGlnbjogJ2NlbnRlcicsIHBhZGRpbmdUb3A6IHJzfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2MCA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2MC5hZGRDbGFzcygnanFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2gtb3V0bGluZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2MSA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2MS5hZGRDbGFzcygnanFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2gnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdjEuY3NzKHtiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLCBib3JkZXJDb2xvcjogY29sb3J9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDEuYXBwZW5kKGRpdjAuYXBwZW5kKGRpdjEpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDIgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQyLmFkZENsYXNzKCdqcXBsb3QtdGFibGUtbGVnZW5kIGpxcGxvdC10YWJsZS1sZWdlbmQtbGFiZWwnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi5jc3MoJ3BhZGRpbmdUb3AnLCBycyk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZDEgPSAkKCc8dGQgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nLXRvcDonK3JzKyc7Ij4nKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICc8ZGl2PjxkaXYgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQtc3dhdGNoIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjonK2NvbG9yKyc7Ym9yZGVyLWNvbG9yOicrY29sb3IrJzsiPjwvZGl2PicrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgJzwvZGl2PjwvdGQ+Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZDIgPSAkKCc8dGQgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiIHN0eWxlPSJwYWRkaW5nLXRvcDonK3JzKyc7Ij48L3RkPicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXNjYXBlSHRtbCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQyLnRleHQobHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQyLmh0bWwobHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldmVyc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93TGFiZWxzKSB7dGQyLnByZXBlbmRUbyh0cik7fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dTd2F0Y2hlcykge3RkMS5wcmVwZW5kVG8odHIpO30KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dTd2F0Y2hlcykge3RkMS5hcHBlbmRUbyh0cik7fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dMYWJlbHMpIHt0ZDIuYXBwZW5kVG8odHIpO30KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VyaWVzVG9nZ2xlKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBhbiBvdmVybGF5IGZvciBjbGlja2luZyBzZXJpZXMgb24vb2ZmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGl2MCA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpdjAuYWRkQ2xhc3MoJ2pxcGxvdC10YWJsZS1sZWdlbmQtb3ZlcmxheScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpdjAuY3NzKHtwb3NpdGlvbjoncmVsYXRpdmUnLCBsZWZ0OjAsIHRvcDowLCBoZWlnaHQ6JzEwMCUnLCB3aWR0aDonMTAwJSd9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ci5hcHBlbmQoZGl2MCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcGVlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHRoaXMuc2VyaWVzVG9nZ2xlKSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mKHRoaXMuc2VyaWVzVG9nZ2xlKSA9PT0gJ251bWJlcicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkLmpxcGxvdC51c2VfZXhjYW52YXMgfHwgIXRoaXMuZGlzYWJsZUlFRmFkaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZCA9IHRoaXMuc2VyaWVzVG9nZ2xlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93U3dhdGNoZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQxLmJpbmQoJ2NsaWNrJywge3NlcmllczpzLCBzcGVlZDpzcGVlZCwgcGxvdDogcGxvdCwgcmVwbG90OnRoaXMuc2VyaWVzVG9nZ2xlUmVwbG90fSwgaGFuZGxlVG9nZ2xlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQxLmFkZENsYXNzKCdqcXBsb3Qtc2VyaWVzVG9nZ2xlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dMYWJlbHMpICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi5iaW5kKCdjbGljaycsIHtzZXJpZXM6cywgc3BlZWQ6c3BlZWQsIHBsb3Q6IHBsb3QsIHJlcGxvdDp0aGlzLnNlcmllc1RvZ2dsZVJlcGxvdH0sIGhhbmRsZVRvZ2dsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi5hZGRDbGFzcygnanFwbG90LXNlcmllc1RvZ2dsZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHNlcmllcyB0aGF0IGFyZSBhbHJlYWR5IGhpZGRlbiwgYWRkIHRoZSBoaWRkZW4gY2xhc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXMuc2hvdyAmJiBzLnNob3dMYWJlbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDEuYWRkQ2xhc3MoJ2pxcGxvdC1zZXJpZXMtaGlkZGVuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi5hZGRDbGFzcygnanFwbG90LXNlcmllcy1oaWRkZW4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWR4Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRkMSA9IHRkMiA9IGRpdjAgPSBkaXYxID0gbnVsbDsgICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fZWxlbTsKICAgIH07CgogICAgdmFyIGhhbmRsZVRvZ2dsZSA9IGZ1bmN0aW9uIChldikgewogICAgICAgIHZhciBkID0gZXYuZGF0YSwKICAgICAgICAgICAgcyA9IGQuc2VyaWVzLAogICAgICAgICAgICByZXBsb3QgPSBkLnJlcGxvdCwKICAgICAgICAgICAgcGxvdCA9IGQucGxvdCwKICAgICAgICAgICAgc3BlZWQgPSBkLnNwZWVkLAogICAgICAgICAgICBzaWR4ID0gcy5pbmRleCwKICAgICAgICAgICAgc2hvd2luZyA9IGZhbHNlOwoKICAgICAgICBpZiAocy5jYW52YXMuX2VsZW0uaXMoJzpoaWRkZW4nKSB8fCAhcy5zaG93KSB7CiAgICAgICAgICAgIHNob3dpbmcgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgdmFyIGRvTGVnZW5kVG9nZ2xlID0gZnVuY3Rpb24oKSB7CgogICAgICAgICAgICBpZiAocmVwbG90KSB7CiAgICAgICAgICAgICAgICB2YXIgb3B0cyA9IHt9OwoKICAgICAgICAgICAgICAgIGlmICgkLmlzUGxhaW5PYmplY3QocmVwbG90KSkgewogICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsIG9wdHMsIHJlcGxvdCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcGxvdC5yZXBsb3Qob3B0cyk7CiAgICAgICAgICAgICAgICAvLyBpZiBzaG93aW5nLCB0aGVyZSB3YXMgbm8gY2FudmFzIGVsZW1lbnQgdG8gZmFkZSBpbiwgc28gaGlkZSBoZXJlCiAgICAgICAgICAgICAgICAvLyBhbmQgdGhlbiBkbyBhIGZhZGUgaW4uCiAgICAgICAgICAgICAgICBpZiAoc2hvd2luZyAmJiBzcGVlZCkgewogICAgICAgICAgICAgICAgICAgIHZhciBzID0gcGxvdC5zZXJpZXNbc2lkeF07CgogICAgICAgICAgICAgICAgICAgIGlmIChzLnNoYWRvd0NhbnZhcy5fZWxlbSkgewogICAgICAgICAgICAgICAgICAgICAgICBzLnNoYWRvd0NhbnZhcy5fZWxlbS5oaWRlKCkuZmFkZUluKHNwZWVkKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcy5jYW52YXMuX2VsZW0uaGlkZSgpLmZhZGVJbihzcGVlZCk7CiAgICAgICAgICAgICAgICAgICAgcy5jYW52YXMuX2VsZW0ubmV4dEFsbCgnLmpxcGxvdC1wb2ludC1sYWJlbC5qcXBsb3Qtc2VyaWVzLScrcy5pbmRleCkuaGlkZSgpLmZhZGVJbihzcGVlZCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBzID0gcGxvdC5zZXJpZXNbc2lkeF07CgogICAgICAgICAgICAgICAgaWYgKHMuY2FudmFzLl9lbGVtLmlzKCc6aGlkZGVuJykgfHwgIXMuc2hvdykgewogICAgICAgICAgICAgICAgICAgIC8vIE5vdCBzdXJlIGlmIHRoZXJlIGlzIGEgYmV0dGVyIHdheSB0byBjaGVjayBmb3Igc2hvd1N3YXRjaGVzIGFuZCBzaG93TGFiZWxzID09PSB0cnVlLgogICAgICAgICAgICAgICAgICAgIC8vIFRlc3QgZm9yICJ1bmRlZmluZWQiIHNpbmNlIGRlZmF1bHQgdmFsdWVzIGZvciBib3RoIHNob3dTd2F0Y2hlcyBhbmQgc2hvd0xhYmxlcyBpcyB0cnVlLgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGxvdC5vcHRpb25zLmxlZ2VuZC5zaG93U3dhdGNoZXMgPT09ICd1bmRlZmluZWQnIHx8IHBsb3Qub3B0aW9ucy5sZWdlbmQuc2hvd1N3YXRjaGVzID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBsb3QubGVnZW5kLl9lbGVtLmZpbmQoJ3RkJykuZXEoc2lkeCAqIDIpLmFkZENsYXNzKCdqcXBsb3Qtc2VyaWVzLWhpZGRlbicpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBsb3Qub3B0aW9ucy5sZWdlbmQuc2hvd0xhYmVscyA9PT0gJ3VuZGVmaW5lZCcgfHwgcGxvdC5vcHRpb25zLmxlZ2VuZC5zaG93TGFiZWxzID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBsb3QubGVnZW5kLl9lbGVtLmZpbmQoJ3RkJykuZXEoKHNpZHggKiAyKSArIDEpLmFkZENsYXNzKCdqcXBsb3Qtc2VyaWVzLWhpZGRlbicpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGxvdC5vcHRpb25zLmxlZ2VuZC5zaG93U3dhdGNoZXMgPT09ICd1bmRlZmluZWQnIHx8IHBsb3Qub3B0aW9ucy5sZWdlbmQuc2hvd1N3YXRjaGVzID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBsb3QubGVnZW5kLl9lbGVtLmZpbmQoJ3RkJykuZXEoc2lkeCAqIDIpLnJlbW92ZUNsYXNzKCdqcXBsb3Qtc2VyaWVzLWhpZGRlbicpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBsb3Qub3B0aW9ucy5sZWdlbmQuc2hvd0xhYmVscyA9PT0gJ3VuZGVmaW5lZCcgfHwgcGxvdC5vcHRpb25zLmxlZ2VuZC5zaG93TGFiZWxzID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBsb3QubGVnZW5kLl9lbGVtLmZpbmQoJ3RkJykuZXEoKHNpZHggKiAyKSArIDEpLnJlbW92ZUNsYXNzKCdqcXBsb3Qtc2VyaWVzLWhpZGRlbicpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICAgICAgcy50b2dnbGVEaXNwbGF5KGV2LCBkb0xlZ2VuZFRvZ2dsZSk7CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBwbG90LgogICAgdmFyIHBvc3REcmF3ID0gZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLmxlZ2VuZC5yZW5kZXJlci5jb25zdHJ1Y3RvciA9PSAkLmpxcGxvdC5FbmhhbmNlZExlZ2VuZFJlbmRlcmVyICYmIHRoaXMubGVnZW5kLnNlcmllc1RvZ2dsZSl7CiAgICAgICAgICAgIHZhciBlID0gdGhpcy5sZWdlbmQuX2VsZW0uZGV0YWNoKCk7CiAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYWZ0ZXIoZSk7CiAgICAgICAgfQogICAgfTsKfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGMpe2MuanFwbG90LkVuaGFuY2VkTGVnZW5kUmVuZGVyZXI9ZnVuY3Rpb24oKXtjLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyLmNhbGwodGhpcyl9O2MuanFwbG90LkVuaGFuY2VkTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlPW5ldyBjLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyKCk7Yy5qcXBsb3QuRW5oYW5jZWRMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3I9Yy5qcXBsb3QuRW5oYW5jZWRMZWdlbmRSZW5kZXJlcjtjLmpxcGxvdC5FbmhhbmNlZExlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGQpe3RoaXMubnVtYmVyUm93cz1udWxsO3RoaXMubnVtYmVyQ29sdW1ucz1udWxsO3RoaXMuc2VyaWVzVG9nZ2xlPSJub3JtYWwiO3RoaXMuc2VyaWVzVG9nZ2xlUmVwbG90PWZhbHNlO3RoaXMuZGlzYWJsZUlFRmFkaW5nPXRydWU7Yy5leHRlbmQodHJ1ZSx0aGlzLGQpO2lmKHRoaXMuc2VyaWVzVG9nZ2xlKXtjLmpxcGxvdC5wb3N0RHJhd0hvb2tzLnB1c2goYil9fTtjLmpxcGxvdC5FbmhhbmNlZExlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKG0seSl7dmFyIGY9dGhpcztpZih0aGlzLnNob3cpe3ZhciByPXRoaXMuX3Nlcmllczt2YXIgdTt2YXIgdz0icG9zaXRpb246YWJzb2x1dGU7Ijt3Kz0odGhpcy5iYWNrZ3JvdW5kKT8iYmFja2dyb3VuZDoiK3RoaXMuYmFja2dyb3VuZCsiOyI6IiI7dys9KHRoaXMuYm9yZGVyKT8iYm9yZGVyOiIrdGhpcy5ib3JkZXIrIjsiOiIiO3crPSh0aGlzLmZvbnRTaXplKT8iZm9udC1zaXplOiIrdGhpcy5mb250U2l6ZSsiOyI6IiI7dys9KHRoaXMuZm9udEZhbWlseSk/ImZvbnQtZmFtaWx5OiIrdGhpcy5mb250RmFtaWx5KyI7IjoiIjt3Kz0odGhpcy50ZXh0Q29sb3IpPyJjb2xvcjoiK3RoaXMudGV4dENvbG9yKyI7IjoiIjt3Kz0odGhpcy5tYXJnaW5Ub3AhPW51bGwpPyJtYXJnaW4tdG9wOiIrdGhpcy5tYXJnaW5Ub3ArIjsiOiIiO3crPSh0aGlzLm1hcmdpbkJvdHRvbSE9bnVsbCk/Im1hcmdpbi1ib3R0b206Iit0aGlzLm1hcmdpbkJvdHRvbSsiOyI6IiI7dys9KHRoaXMubWFyZ2luTGVmdCE9bnVsbCk/Im1hcmdpbi1sZWZ0OiIrdGhpcy5tYXJnaW5MZWZ0KyI7IjoiIjt3Kz0odGhpcy5tYXJnaW5SaWdodCE9bnVsbCk/Im1hcmdpbi1yaWdodDoiK3RoaXMubWFyZ2luUmlnaHQrIjsiOiIiO3RoaXMuX2VsZW09YygnPHRhYmxlIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIiBzdHlsZT0iJyt3KyciPjwvdGFibGU+Jyk7aWYodGhpcy5zZXJpZXNUb2dnbGUpe3RoaXMuX2VsZW0uY3NzKCJ6LWluZGV4IiwiMyIpfXZhciBDPWZhbHNlLHE9ZmFsc2UsZCxvO2lmKHRoaXMubnVtYmVyUm93cyl7ZD10aGlzLm51bWJlclJvd3M7aWYoIXRoaXMubnVtYmVyQ29sdW1ucyl7bz1NYXRoLmNlaWwoci5sZW5ndGgvZCl9ZWxzZXtvPXRoaXMubnVtYmVyQ29sdW1uc319ZWxzZXtpZih0aGlzLm51bWJlckNvbHVtbnMpe289dGhpcy5udW1iZXJDb2x1bW5zO2Q9TWF0aC5jZWlsKHIubGVuZ3RoL3RoaXMubnVtYmVyQ29sdW1ucyl9ZWxzZXtkPXIubGVuZ3RoO289MX19dmFyIEIseixlLGwsayxuLHAsdCxoLGc7dmFyIHY9MDtmb3IoQj1yLmxlbmd0aC0xO0I+PTA7Qi0tKXtpZihvPT0xJiZyW0JdLl9zdGFja3x8cltCXS5yZW5kZXJlci5jb25zdHJ1Y3Rvcj09Yy5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlcil7cT10cnVlfX1mb3IoQj0wO0I8ZDtCKyspe2U9Yyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpKTtlLmFkZENsYXNzKCJqcXBsb3QtdGFibGUtbGVnZW5kIik7aWYocSl7ZS5wcmVwZW5kVG8odGhpcy5fZWxlbSl9ZWxzZXtlLmFwcGVuZFRvKHRoaXMuX2VsZW0pfWZvcih6PTA7ejxvO3orKyl7aWYodjxyLmxlbmd0aCYmKHJbdl0uc2hvd3x8clt2XS5zaG93TGFiZWwpKXt1PXJbdl07bj10aGlzLmxhYmVsc1t2XXx8dS5sYWJlbC50b1N0cmluZygpO2lmKG4pe3ZhciB4PXUuY29sb3I7aWYoIXEpe2lmKEI+MCl7Qz10cnVlfWVsc2V7Qz1mYWxzZX19ZWxzZXtpZihCPT1kLTEpe0M9ZmFsc2V9ZWxzZXtDPXRydWV9fXA9KEMpP3RoaXMucm93U3BhY2luZzoiMCI7bD1jKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIikpO2wuYWRkQ2xhc3MoImpxcGxvdC10YWJsZS1sZWdlbmQganFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2giKTtsLmNzcyh7dGV4dEFsaWduOiJjZW50ZXIiLHBhZGRpbmdUb3A6cH0pO2g9Yyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7aC5hZGRDbGFzcygianFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2gtb3V0bGluZSIpO2c9Yyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7Zy5hZGRDbGFzcygianFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2giKTtnLmNzcyh7YmFja2dyb3VuZENvbG9yOngsYm9yZGVyQ29sb3I6eH0pO2wuYXBwZW5kKGguYXBwZW5kKGcpKTtrPWMoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKSk7ay5hZGRDbGFzcygianFwbG90LXRhYmxlLWxlZ2VuZCBqcXBsb3QtdGFibGUtbGVnZW5kLWxhYmVsIik7ay5jc3MoInBhZGRpbmdUb3AiLHApO2lmKHRoaXMuZXNjYXBlSHRtbCl7ay50ZXh0KG4pfWVsc2V7ay5odG1sKG4pfWlmKHEpe2lmKHRoaXMuc2hvd0xhYmVscyl7ay5wcmVwZW5kVG8oZSl9aWYodGhpcy5zaG93U3dhdGNoZXMpe2wucHJlcGVuZFRvKGUpfX1lbHNle2lmKHRoaXMuc2hvd1N3YXRjaGVzKXtsLmFwcGVuZFRvKGUpfWlmKHRoaXMuc2hvd0xhYmVscyl7ay5hcHBlbmRUbyhlKX19aWYodGhpcy5zZXJpZXNUb2dnbGUpe3ZhciBBO2lmKHR5cGVvZih0aGlzLnNlcmllc1RvZ2dsZSk9PT0ic3RyaW5nInx8dHlwZW9mKHRoaXMuc2VyaWVzVG9nZ2xlKT09PSJudW1iZXIiKXtpZighYy5qcXBsb3QudXNlX2V4Y2FudmFzfHwhdGhpcy5kaXNhYmxlSUVGYWRpbmcpe0E9dGhpcy5zZXJpZXNUb2dnbGV9fWlmKHRoaXMuc2hvd1N3YXRjaGVzKXtsLmJpbmQoImNsaWNrIix7c2VyaWVzOnUsc3BlZWQ6QSxwbG90OnkscmVwbG90OnRoaXMuc2VyaWVzVG9nZ2xlUmVwbG90fSxhKTtsLmFkZENsYXNzKCJqcXBsb3Qtc2VyaWVzVG9nZ2xlIil9aWYodGhpcy5zaG93TGFiZWxzKXtrLmJpbmQoImNsaWNrIix7c2VyaWVzOnUsc3BlZWQ6QSxwbG90OnkscmVwbG90OnRoaXMuc2VyaWVzVG9nZ2xlUmVwbG90fSxhKTtrLmFkZENsYXNzKCJqcXBsb3Qtc2VyaWVzVG9nZ2xlIil9aWYoIXUuc2hvdyYmdS5zaG93TGFiZWwpe2wuYWRkQ2xhc3MoImpxcGxvdC1zZXJpZXMtaGlkZGVuIik7ay5hZGRDbGFzcygianFwbG90LXNlcmllcy1oaWRkZW4iKX19Qz10cnVlfX12Kyt9bD1rPWg9Zz1udWxsfX1yZXR1cm4gdGhpcy5fZWxlbX07dmFyIGE9ZnVuY3Rpb24oail7dmFyIGk9ai5kYXRhLG09aS5zZXJpZXMsaz1pLnJlcGxvdCxoPWkucGxvdCxmPWkuc3BlZWQsbD1tLmluZGV4LGc9ZmFsc2U7aWYobS5jYW52YXMuX2VsZW0uaXMoIjpoaWRkZW4iKXx8IW0uc2hvdyl7Zz10cnVlfXZhciBlPWZ1bmN0aW9uKCl7aWYoayl7dmFyIG49e307aWYoYy5pc1BsYWluT2JqZWN0KGspKXtjLmV4dGVuZCh0cnVlLG4sayl9aC5yZXBsb3Qobik7aWYoZyYmZil7dmFyIGQ9aC5zZXJpZXNbbF07aWYoZC5zaGFkb3dDYW52YXMuX2VsZW0pe2Quc2hhZG93Q2FudmFzLl9lbGVtLmhpZGUoKS5mYWRlSW4oZil9ZC5jYW52YXMuX2VsZW0uaGlkZSgpLmZhZGVJbihmKTtkLmNhbnZhcy5fZWxlbS5uZXh0QWxsKCIuanFwbG90LXBvaW50LWxhYmVsLmpxcGxvdC1zZXJpZXMtIitkLmluZGV4KS5oaWRlKCkuZmFkZUluKGYpfX1lbHNle3ZhciBkPWguc2VyaWVzW2xdO2lmKGQuY2FudmFzLl9lbGVtLmlzKCI6aGlkZGVuIil8fCFkLnNob3cpe2lmKHR5cGVvZiBoLm9wdGlvbnMubGVnZW5kLnNob3dTd2F0Y2hlcz09PSJ1bmRlZmluZWQifHxoLm9wdGlvbnMubGVnZW5kLnNob3dTd2F0Y2hlcz09PXRydWUpe2gubGVnZW5kLl9lbGVtLmZpbmQoInRkIikuZXEobCoyKS5hZGRDbGFzcygianFwbG90LXNlcmllcy1oaWRkZW4iKX1pZih0eXBlb2YgaC5vcHRpb25zLmxlZ2VuZC5zaG93TGFiZWxzPT09InVuZGVmaW5lZCJ8fGgub3B0aW9ucy5sZWdlbmQuc2hvd0xhYmVscz09PXRydWUpe2gubGVnZW5kLl9lbGVtLmZpbmQoInRkIikuZXEoKGwqMikrMSkuYWRkQ2xhc3MoImpxcGxvdC1zZXJpZXMtaGlkZGVuIil9fWVsc2V7aWYodHlwZW9mIGgub3B0aW9ucy5sZWdlbmQuc2hvd1N3YXRjaGVzPT09InVuZGVmaW5lZCJ8fGgub3B0aW9ucy5sZWdlbmQuc2hvd1N3YXRjaGVzPT09dHJ1ZSl7aC5sZWdlbmQuX2VsZW0uZmluZCgidGQiKS5lcShsKjIpLnJlbW92ZUNsYXNzKCJqcXBsb3Qtc2VyaWVzLWhpZGRlbiIpfWlmKHR5cGVvZiBoLm9wdGlvbnMubGVnZW5kLnNob3dMYWJlbHM9PT0idW5kZWZpbmVkInx8aC5vcHRpb25zLmxlZ2VuZC5zaG93TGFiZWxzPT09dHJ1ZSl7aC5sZWdlbmQuX2VsZW0uZmluZCgidGQiKS5lcSgobCoyKSsxKS5yZW1vdmVDbGFzcygianFwbG90LXNlcmllcy1oaWRkZW4iKX19fX07bS50b2dnbGVEaXNwbGF5KGosZSl9O3ZhciBiPWZ1bmN0aW9uKCl7aWYodGhpcy5sZWdlbmQucmVuZGVyZXIuY29uc3RydWN0b3I9PWMuanFwbG90LkVuaGFuY2VkTGVnZW5kUmVuZGVyZXImJnRoaXMubGVnZW5kLnNlcmllc1RvZ2dsZSl7dmFyIGQ9dGhpcy5sZWdlbmQuX2VsZW0uZGV0YWNoKCk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5hZnRlcihkKX19fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.funnelRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLyoqCiAgICAgKiBDbGFzczogJC5qcXBsb3QuRnVubmVsUmVuZGVyZXIKICAgICAqIFBsdWdpbiByZW5kZXJlciB0byBkcmF3IGEgZnVubmVsIGNoYXJ0LgogICAgICogeCB2YWx1ZXMsIGlmIHByZXNlbnQsIHdpbGwgYmUgdXNlZCBhcyBsYWJlbHMuCiAgICAgKiB5IHZhbHVlcyBnaXZlIGFyZWEgc2l6ZS4KICAgICAqIAogICAgICogRnVubmVsIGNoYXJ0cyB3aWxsIGRyYXcgYSBzaW5nbGUgc2VyaWVzCiAgICAgKiBvbmx5LgogICAgICogCiAgICAgKiBUbyB1c2UgdGhpcyByZW5kZXJlciwgeW91IG5lZWQgdG8gaW5jbHVkZSB0aGUgCiAgICAgKiBmdW5uZWwgcmVuZGVyZXIgcGx1Z2luLCBmb3IgZXhhbXBsZToKICAgICAqIAogICAgICogPiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJwbHVnaW5zL2pxcGxvdC5mdW5uZWxSZW5kZXJlci5qcyI+PC9zY3JpcHQ+CiAgICAgKiAKICAgICAqIFByb3BlcnRpZXMgZGVzY3JpYmVkIGhlcmUgYXJlIHBhc3NlZCBpbnRvIHRoZSAkLmpxcGxvdCBmdW5jdGlvbgogICAgICogYXMgb3B0aW9ucyBvbiB0aGUgc2VyaWVzIHJlbmRlcmVyLiAgRm9yIGV4YW1wbGU6CiAgICAgKiAKICAgICAqID4gcGxvdDIgPSAkLmpxcGxvdCgnY2hhcnQyJywgW3MxLCBzMl0sIHsKICAgICAqID4gICAgIHNlcmllc0RlZmF1bHRzOiB7CiAgICAgKiA+ICAgICAgICAgcmVuZGVyZXI6JC5qcXBsb3QuRnVubmVsUmVuZGVyZXIsCiAgICAgKiA+ICAgICAgICAgcmVuZGVyZXJPcHRpb25zOnsKICAgICAqID4gICAgICAgICAgICAgIHNlY3Rpb25NYXJnaW46IDEyLAogICAgICogPiAgICAgICAgICAgICAgd2lkdGhSYXRpbzogMC4zCiAgICAgKiA+ICAgICAgICAgIH0KICAgICAqID4gICAgICB9CiAgICAgKiA+IH0pOwogICAgICogCiAgICAgKiBJTVBPUlRBTlQKICAgICAqIAogICAgICogKlRoZSBmdW5uZWwgcmVuZGVyZXIgd2lsbCByZW9yZGVyIGRhdGEgaW4gZGVzY2VuZGluZyBvcmRlciogc28gdGhlIGxhcmdlc3QgdmFsdWUgaW4KICAgICAqIHRoZSBkYXRhIHNldCBpcyBmaXJzdCBhbmQgZGlzcGxheWVkIG9uIHRvcCBvZiB0aGUgZnVubmVsLiAgRGF0YSB3aWxsIHRoZW4KICAgICAqIGJlIGRpc3BsYXllZCBpbiBkZXNjZW5kaW5nIG9yZGVyIGRvd24gdGhlIGZ1bm5lbC4gIFRoZSBhcmVhIG9mIGVhY2ggZnVubmVsCiAgICAgKiBzZWN0aW9uIHdpbGwgY29ycmVzcG9uZCB0byB0aGUgdmFsdWUgb2YgZWFjaCBkYXRhIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBzdW0KICAgICAqIG9mIGFsbCB2YWx1ZXMuICBUaGF0IGlzIHNlY3Rpb24gYXJlYSBpcyBwcm9wb3J0aW9uYWwgdG8gc2VjdGlvbiB2YWx1ZSBkaXZpZGVkIGJ5IAogICAgICogc3VtIG9mIGFsbCBzZWN0aW9uIHZhbHVlcy4KICAgICAqIAogICAgICogSWYgeW91ciBkYXRhIGlzIG5vdCBpbiBkZXNjZW5kaW5nIG9yZGVyIHdoZW4gcGFzc2VkIGludG8gdGhlIHBsb3QsICppdCB3aWxsIGJlCiAgICAgKiByZW9yZGVyZWQqIHdoZW4gc3RvcmVkIGluIHRoZSBzZXJpZXMuZGF0YSBwcm9wZXJ0eS4gIEEgY29weSBvZiB0aGUgdW5vcmRlcmVkCiAgICAgKiBkYXRhIGlzIGtlcHQgaW4gdGhlIHNlcmllcy5fdW5vcmRlcmVkRGF0YSBwcm9wZXJ0eS4KICAgICAqIAogICAgICogQSBmdW5uZWwgcGxvdCB3aWxsIHRyaWdnZXIgZXZlbnRzIG9uIHRoZSBwbG90IHRhcmdldAogICAgICogYWNjb3JkaW5nIHRvIHVzZXIgaW50ZXJhY3Rpb24uICBBbGwgZXZlbnRzIHJldHVybiB0aGUgZXZlbnQgb2JqZWN0LAogICAgICogdGhlIHNlcmllcyBpbmRleCwgdGhlIHBvaW50IChzZWN0aW9uKSBpbmRleCwgYW5kIHRoZSBwb2ludCBkYXRhIGZvciAKICAgICAqIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uLiAqTm90ZSogdGhlIHBvaW50IGluZGV4IHdpbGwgcmVmZXJyIHRvIHRoZSBvcmRlcmVkCiAgICAgKiBkYXRhLCBub3QgdGhlIG9yaWdpbmFsIHVub3JkZXJlZCBkYXRhLgogICAgICogCiAgICAgKiAnanFwbG90RGF0YU1vdXNlT3ZlcicgLSB0cmlnZ2VyZWQgd2hlbiBtb3VzaW5nIG92ZXIgYSBzZWN0aW9uLgogICAgICogJ2pxcGxvdERhdGFIaWdobGlnaHQnIC0gdHJpZ2dlcmVkIHRoZSBmaXJzdCB0aW1lIHVzZXIgbW91c2VzIG92ZXIgYSBzZWN0aW9uLAogICAgICogaWYgaGlnaGxpZ2h0aW5nIGlzIGVuYWJsZWQuCiAgICAgKiAnanFwbG90RGF0YVVuaGlnaGxpZ2h0JyAtIHRyaWdnZXJlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2Ugb3V0IG9mCiAgICAgKiBhIGhpZ2hsaWdodGVkIHNlY3Rpb24uCiAgICAgKiAnanFwbG90RGF0YUNsaWNrJyAtIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiBhIHNlY3Rpb24uCiAgICAgKiAnanFwbG90RGF0YVJpZ2h0Q2xpY2snIC0gdGlnZ2VyZWQgd2hlbiB0aGUgdXNlciByaWdodCBjbGlja3Mgb24gYSBzZWN0aW9uIGlmCiAgICAgKiB0aGUgImNhcHR1cmVSaWdodENsaWNrIiBvcHRpb24gaXMgc2V0IHRvIHRydWUgb24gdGhlIHBsb3QuCiAgICAgKi8KICAgICQuanFwbG90LkZ1bm5lbFJlbmRlcmVyID0gZnVuY3Rpb24oKXsKICAgICAgICAkLmpxcGxvdC5MaW5lUmVuZGVyZXIuY2FsbCh0aGlzKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkZ1bm5lbFJlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5MaW5lUmVuZGVyZXIoKTsKICAgICQuanFwbG90LkZ1bm5lbFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90LkZ1bm5lbFJlbmRlcmVyOwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBhIHNlcmllcwogICAgJC5qcXBsb3QuRnVubmVsUmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zLCBwbG90KSB7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAvLwogICAgICAgIC8vIHByb3A6IHBhZGRpbmcKICAgICAgICAvLyBwYWRkaW5nIGJldHdlZW4gdGhlIGZ1bm5lbCBhbmQgcGxvdCBlZGdlcywgbGVnZW5kLCBldGMuCiAgICAgICAgdGhpcy5wYWRkaW5nID0ge3RvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiAyMCwgbGVmdDogMjB9OwogICAgICAgIC8vIHByb3A6IHNlY3Rpb25NYXJnaW4KICAgICAgICAvLyBzcGFjaW5nIGJldHdlZW4gZnVubmVsIHNlY3Rpb25zIGluIHBpeGVscy4KICAgICAgICB0aGlzLnNlY3Rpb25NYXJnaW4gPSA2OwogICAgICAgIC8vIHByb3A6IGZpbGwKICAgICAgICAvLyB0cnVlIG9yIGZhbHNlLCB3aGV0aGVyIHRvIGZpbGwgdGhlIGFyZWFzLgogICAgICAgIHRoaXMuZmlsbCA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogc2hhZG93T2Zmc2V0CiAgICAgICAgLy8gb2Zmc2V0IG9mIHRoZSBzaGFkb3cgZnJvbSB0aGUgYXJlYSBhbmQgb2Zmc2V0IG9mIAogICAgICAgIC8vIGVhY2ggc3VjY2VzaXZlIHN0cm9rZSBvZiB0aGUgc2hhZG93IGZyb20gdGhlIGxhc3QuCiAgICAgICAgdGhpcy5zaGFkb3dPZmZzZXQgPSAyOwogICAgICAgIC8vIHByb3A6IHNoYWRvd0FscGhhCiAgICAgICAgLy8gdHJhbnNwYXJlbmN5IG9mIHRoZSBzaGFkb3cgKDAgPSB0cmFuc3BhcmVudCwgMSA9IG9wYXF1ZSkKICAgICAgICB0aGlzLnNoYWRvd0FscGhhID0gMC4wNzsKICAgICAgICAvLyBwcm9wOiBzaGFkb3dEZXB0aAogICAgICAgIC8vIG51bWJlciBvZiBzdHJva2VzIHRvIGFwcGx5IHRvIHRoZSBzaGFkb3csIAogICAgICAgIC8vIGVhY2ggc3Ryb2tlIG9mZnNldCBzaGFkb3dPZmZzZXQgZnJvbSB0aGUgbGFzdC4KICAgICAgICB0aGlzLnNoYWRvd0RlcHRoID0gNTsKICAgICAgICAvLyBwcm9wOiBoaWdobGlnaHRNb3VzZU92ZXIKICAgICAgICAvLyBUcnVlIHRvIGhpZ2hsaWdodCBhcmVhIHdoZW4gbW91c2VkIG92ZXIuCiAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGZhbHNlIHRvIGVuYWJsZSBoaWdobGlnaHRNb3VzZURvd24gdG8gaGlnaGxpZ2h0IHdoZW4gY2xpY2tpbmcgb24gYSBhcmVhLgogICAgICAgIHRoaXMuaGlnaGxpZ2h0TW91c2VPdmVyID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBoaWdobGlnaHRNb3VzZURvd24KICAgICAgICAvLyBUcnVlIHRvIGhpZ2hsaWdodCB3aGVuIGEgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgb3ZlciBhIGFyZWEuCiAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGRpc2FibGVkIGlmIGhpZ2hsaWdodE1vdXNlT3ZlciBpcyB0cnVlLgogICAgICAgIHRoaXMuaGlnaGxpZ2h0TW91c2VEb3duID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogaGlnaGxpZ2h0Q29sb3JzCiAgICAgICAgLy8gYXJyYXkgb2YgY29sb3JzIHRvIHVzZSB3aGVuIGhpZ2hsaWdodGluZyBhbiBhcmVhLgogICAgICAgIHRoaXMuaGlnaGxpZ2h0Q29sb3JzID0gW107CiAgICAgICAgLy8gcHJvcDogd2lkdGhSYXRpbwogICAgICAgIC8vIFRoZSByYXRpbyBvZiB0aGUgd2lkdGggb2YgdGhlIHRvcCBvZiB0aGUgZnVubmVsIHRvIHRoZSBib3R0b20uCiAgICAgICAgLy8gYSByYXRpbyBvZiAwIHdpbGwgbWFrZSBhbiB1cHNpZGUgZG93biBweXJhbWlkLiAKICAgICAgICB0aGlzLndpZHRoUmF0aW8gPSAwLjI7CiAgICAgICAgLy8gcHJvcDogbGluZVdpZHRoCiAgICAgICAgLy8gd2lkdGggb2YgbGluZSBpZiBhcmVhcyBhcmUgc3Ryb2tlZCBhbmQgbm90IGZpbGxlZC4KICAgICAgICB0aGlzLmxpbmVXaWR0aCA9IDI7CiAgICAgICAgLy8gcHJvcDogZGF0YUxhYmVscwogICAgICAgIC8vIEVpdGhlciAnbGFiZWwnLCAndmFsdWUnLCAncGVyY2VudCcgb3IgYW4gYXJyYXkgb2YgbGFiZWxzIHRvIHBsYWNlIG9uIHRoZSBwaWUgc2xpY2VzLgogICAgICAgIC8vIERlZmF1bHRzIHRvIHBlcmNlbnRhZ2Ugb2YgZWFjaCBwaWUgc2xpY2UuCiAgICAgICAgdGhpcy5kYXRhTGFiZWxzID0gJ3BlcmNlbnQnOwogICAgICAgIC8vIHByb3A6IHNob3dEYXRhTGFiZWxzCiAgICAgICAgLy8gdHJ1ZSB0byBzaG93IGRhdGEgbGFiZWxzIG9uIHNsaWNlcy4KICAgICAgICB0aGlzLnNob3dEYXRhTGFiZWxzID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogZGF0YUxhYmVsRm9ybWF0U3RyaW5nCiAgICAgICAgLy8gRm9ybWF0IHN0cmluZyBmb3IgZGF0YSBsYWJlbHMuICBJZiBub25lLCAnJXMnIGlzIHVzZWQgZm9yICJsYWJlbCIgYW5kIGZvciBhcnJheXMsICclZCcgZm9yIHZhbHVlIGFuZCAnJWQlJScgZm9yIHBlcmNlbnRhZ2UuCiAgICAgICAgdGhpcy5kYXRhTGFiZWxGb3JtYXRTdHJpbmcgPSBudWxsOwogICAgICAgIC8vIHByb3A6IGRhdGFMYWJlbFRocmVzaG9sZAogICAgICAgIC8vIFRocmVzaGhvbGQgaW4gcGVyY2VudGFnZSAoMCAtIDEwMCkgb2YgcGllIGFyZWEsIGJlbG93IHdoaWNoIG5vIGxhYmVsIHdpbGwgYmUgZGlzcGxheWVkLgogICAgICAgIC8vIFRoaXMgYXBwbGllcyB0byBhbGwgbGFiZWwgdHlwZXMsIG5vdCBqdXN0IHRvIHBlcmNlbnRhZ2UgbGFiZWxzLgogICAgICAgIHRoaXMuZGF0YUxhYmVsVGhyZXNob2xkID0gMzsKICAgICAgICB0aGlzLl90eXBlID0gJ2Z1bm5lbCc7CiAgICAgICAgCiAgICAgICAgdGhpcy50aWNrUmVuZGVyZXIgPSAkLmpxcGxvdC5GdW5uZWxUaWNrUmVuZGVyZXI7CiAgICAgICAgCiAgICAgICAgLy8gaWYgdXNlciBoYXMgcGFzc2VkIGluIGhpZ2hsaWdodE1vdXNlRG93biBvcHRpb24gYW5kIG5vdCBzZXQgaGlnaGxpZ2h0TW91c2VPdmVyLCBkaXNhYmxlIGhpZ2hsaWdodE1vdXNlT3ZlcgogICAgICAgIGlmIChvcHRpb25zLmhpZ2hsaWdodE1vdXNlRG93biAmJiBvcHRpb25zLmhpZ2hsaWdodE1vdXNlT3ZlciA9PSBudWxsKSB7CiAgICAgICAgICAgIG9wdGlvbnMuaGlnaGxpZ2h0TW91c2VPdmVyID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIAogICAgICAgIC8vIGluZGV4IG9mIHRoZSBjdXJyZW50eSBoaWdobGlnaHRlZCBwb2ludCwgaWYgYW55CiAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWRQb2ludCA9IG51bGw7CiAgICAgICAgCiAgICAgICAgLy8gbGVuZ3RocyBvZiBiYXNlcywgb3IgaG9yaXpvbnRhbCBzaWRlcyBvZiBhcmVhcyBvZiB0cmFwZXpvaWQuCiAgICAgICAgdGhpcy5fYmFzZXMgPSBbXTsKICAgICAgICAvLyB0b3RhbCBhcmVhCiAgICAgICAgdGhpcy5fYXRvdDsKICAgICAgICAvLyBhcmVhcyBvZiBzZWdtZW50cy4KICAgICAgICB0aGlzLl9hcmVhcyA9IFtdOwogICAgICAgIC8vIHZlcnRpY2FsIGxlbmd0aHMgb2Ygc2VnbWVudHMuCiAgICAgICAgdGhpcy5fbGVuZ3RocyA9IFtdOwogICAgICAgIC8vIGFuZ2xlIG9mIHRoZSBmdW5uZWwgdG8gdmVydGljYWwuCiAgICAgICAgdGhpcy5fYW5nbGU7CiAgICAgICAgdGhpcy5fZGF0YUluZGljZXMgPSBbXTsKICAgICAgICAKICAgICAgICAvLyBzb3J0IGRhdGEKICAgICAgICB0aGlzLl91bm9yZGVyZWREYXRhID0gJC5leHRlbmQodHJ1ZSwgW10sIHRoaXMuZGF0YSk7CiAgICAgICAgdmFyIGlkeHMgPSAkLmV4dGVuZCh0cnVlLCBbXSwgdGhpcy5kYXRhKTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8aWR4cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZHhzW2ldLnB1c2goaSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGF0YS5zb3J0KCBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYlsxXSAtIGFbMV07IH0gKTsKICAgICAgICBpZHhzLnNvcnQoIGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiWzFdIC0gYVsxXTsgfSk7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPGlkeHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5fZGF0YUluZGljZXMucHVzaChpZHhzW2ldWzJdKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gc2V0IGhpZ2hsaWdodCBjb2xvcnMgaWYgbm9uZSBwcm92aWRlZAogICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodENvbG9ycy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5zZXJpZXNDb2xvcnMubGVuZ3RoOyBpKyspewogICAgICAgICAgICAgICAgdmFyIHJnYmEgPSAkLmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHModGhpcy5zZXJpZXNDb2xvcnNbaV0pOwogICAgICAgICAgICAgICAgdmFyIG5ld3JnYiA9IFtyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdXTsKICAgICAgICAgICAgICAgIHZhciBzdW0gPSBuZXdyZ2JbMF0gKyBuZXdyZ2JbMV0gKyBuZXdyZ2JbMl07CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8MzsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBkYXJrZW5pbmcsIGxvd2VzdCBjb2xvciBjb21wb25lbnQgY2FuIGJlIGlzIDYwLgogICAgICAgICAgICAgICAgICAgIG5ld3JnYltqXSA9IChzdW0gPiA1NzApID8gIG5ld3JnYltqXSAqIDAuOCA6IG5ld3JnYltqXSArIDAuNCAqICgyNTUgLSBuZXdyZ2Jbal0pOwogICAgICAgICAgICAgICAgICAgIG5ld3JnYltqXSA9IHBhcnNlSW50KG5ld3JnYltqXSwgMTApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRDb2xvcnMucHVzaCgncmdiKCcrbmV3cmdiWzBdKycsJytuZXdyZ2JbMV0rJywnK25ld3JnYlsyXSsnKScpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwbG90LnBvc3RQYXJzZU9wdGlvbnNIb29rcy5hZGRPbmNlKHBvc3RQYXJzZU9wdGlvbnMpOwogICAgICAgIHBsb3QucG9zdEluaXRIb29rcy5hZGRPbmNlKHBvc3RJbml0KTsKICAgICAgICBwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCdqcXBsb3RNb3VzZU1vdmUnLCBoYW5kbGVNb3ZlKTsKICAgICAgICBwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCdqcXBsb3RNb3VzZURvd24nLCBoYW5kbGVNb3VzZURvd24pOwogICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdE1vdXNlVXAnLCBoYW5kbGVNb3VzZVVwKTsKICAgICAgICBwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCdqcXBsb3RDbGljaycsIGhhbmRsZUNsaWNrKTsKICAgICAgICBwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCdqcXBsb3RSaWdodENsaWNrJywgaGFuZGxlUmlnaHRDbGljayk7CiAgICAgICAgcGxvdC5wb3N0RHJhd0hvb2tzLmFkZE9uY2UocG9zdFBsb3REcmF3KTsgICAgICAgIAogICAgICAgIAogICAgfTsKICAgIAogICAgLy8gZ3JpZERhdGEgd2lsbCBiZSBvZiBmb3JtIFtsYWJlbCwgcGVyY2VudGFnZSBvZiB0b3RhbF0KICAgICQuanFwbG90LkZ1bm5lbFJlbmRlcmVyLnByb3RvdHlwZS5zZXRHcmlkRGF0YSA9IGZ1bmN0aW9uKHBsb3QpIHsKICAgICAgICAvLyBzZXQgZ3JpZERhdGEgcHJvcGVydHkuICBUaGlzIHdpbGwgaG9sZCBhbmdsZSBpbiByYWRpYW5zIG9mIGVhY2ggZGF0YSBwb2ludC4KICAgICAgICB2YXIgc3VtID0gMDsKICAgICAgICB2YXIgdGQgPSBbXTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgc3VtICs9IHRoaXMuZGF0YVtpXVsxXTsKICAgICAgICAgICAgdGQucHVzaChbdGhpcy5kYXRhW2ldWzBdLCB0aGlzLmRhdGFbaV1bMV1dKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gbm9ybWFsaXplIHkgdmFsdWVzLCBzbyBhcmVhcyBhcmUgcHJvcG9ydGlvbmFsLgogICAgICAgIGZvciAodmFyIGk9MDsgaTx0ZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0ZFtpXVsxXSA9IHRkW2ldWzFdL3N1bTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdGhpcy5fYmFzZXMgPSBuZXcgQXJyYXkodGQubGVuZ3RoICsgMSk7CiAgICAgICAgdGhpcy5fbGVuZ3RocyA9IG5ldyBBcnJheSh0ZC5sZW5ndGgpOwogICAgICAgIAogICAgICAgIHRoaXMuZ3JpZERhdGEgPSB0ZDsKICAgIH07CiAgICAKICAgICQuanFwbG90LkZ1bm5lbFJlbmRlcmVyLnByb3RvdHlwZS5tYWtlR3JpZERhdGEgPSBmdW5jdGlvbihkYXRhLCBwbG90KSB7CiAgICAgICAgLy8gc2V0IGdyaWREYXRhIHByb3BlcnR5LiAgVGhpcyB3aWxsIGhvbGQgYW5nbGUgaW4gcmFkaWFucyBvZiBlYWNoIGRhdGEgcG9pbnQuCiAgICAgICAgdmFyIHN1bSA9IDA7CiAgICAgICAgdmFyIHRkID0gW107CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgIHN1bSArPSB0aGlzLmRhdGFbaV1bMV07CiAgICAgICAgICAgIHRkLnB1c2goW3RoaXMuZGF0YVtpXVswXSwgdGhpcy5kYXRhW2ldWzFdXSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIG5vcm1hbGl6ZSB5IHZhbHVlcywgc28gYXJlYXMgYXJlIHByb3BvcnRpb25hbC4KICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGRbaV1bMV0gPSB0ZFtpXVsxXS9zdW07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMuX2Jhc2VzID0gbmV3IEFycmF5KHRkLmxlbmd0aCArIDEpOwogICAgICAgIHRoaXMuX2xlbmd0aHMgPSBuZXcgQXJyYXkodGQubGVuZ3RoKTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGQ7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5GdW5uZWxSZW5kZXJlci5wcm90b3R5cGUuZHJhd1NlY3Rpb24gPSBmdW5jdGlvbiAoY3R4LCB2ZXJ0aWNlcywgY29sb3IsIGlzU2hhZG93KSB7CiAgICAgICAgdmFyIGZpbGwgPSB0aGlzLmZpbGw7CiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoOwogICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgCiAgICAgICAgaWYgKGlzU2hhZG93KSB7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnNoYWRvd0RlcHRoOyBpKyspIHsKICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKHRoaXMuc2hhZG93T2Zmc2V0Kk1hdGguY29zKHRoaXMuc2hhZG93QW5nbGUvMTgwKk1hdGguUEkpLCB0aGlzLnNoYWRvd09mZnNldCpNYXRoLnNpbih0aGlzLnNoYWRvd0FuZ2xlLzE4MCpNYXRoLlBJKSk7CiAgICAgICAgICAgICAgICBkb0RyYXcoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZG9EcmF3KCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZ1bmN0aW9uIGRvRHJhdyAoKSB7CiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsgIAogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7CiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yOwogICAgICAgICAgICBjdHgubGluZVdpZHRoID0gbGluZVdpZHRoOwogICAgICAgICAgICBjdHgubW92ZVRvKHZlcnRpY2VzWzBdWzBdLCB2ZXJ0aWNlc1swXVsxXSk7CiAgICAgICAgICAgIGZvciAodmFyIGk9MTsgaTw0OyBpKyspIHsKICAgICAgICAgICAgICAgIGN0eC5saW5lVG8odmVydGljZXNbaV1bMF0sIHZlcnRpY2VzW2ldWzFdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7CiAgICAgICAgICAgIGlmIChmaWxsKSB7CiAgICAgICAgICAgICAgICBjdHguZmlsbCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChpc1NoYWRvdykgewogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5zaGFkb3dEZXB0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBzZXJpZXMKICAgICQuanFwbG90LkZ1bm5lbFJlbmRlcmVyLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKGN0eCwgZ2QsIG9wdGlvbnMsIHBsb3QpIHsKICAgICAgICB2YXIgaTsKICAgICAgICB2YXIgb3B0cyA9IChvcHRpb25zICE9IHVuZGVmaW5lZCkgPyBvcHRpb25zIDoge307CiAgICAgICAgLy8gb2Zmc2V0IGFuZCBkaXJlY3Rpb24gb2Ygb2Zmc2V0IGR1ZSB0byBsZWdlbmQgcGxhY2VtZW50CiAgICAgICAgdmFyIG9mZnggPSAwOwogICAgICAgIHZhciBvZmZ5ID0gMDsKICAgICAgICB2YXIgdHJhbnMgPSAxOwogICAgICAgIHRoaXMuX2FyZWFzID0gW107CiAgICAgICAgLy8gdmFyIGNvbG9yR2VuZXJhdG9yID0gbmV3IHRoaXMuY29sb3JHZW5lcmF0b3IodGhpcy5zZXJpZXNDb2xvcnMpOwogICAgICAgIGlmIChvcHRpb25zLmxlZ2VuZEluZm8gJiYgb3B0aW9ucy5sZWdlbmRJbmZvLnBsYWNlbWVudCA9PSAnaW5zaWRlR3JpZCcpIHsKICAgICAgICAgICAgdmFyIGxpID0gb3B0aW9ucy5sZWdlbmRJbmZvOwogICAgICAgICAgICBzd2l0Y2ggKGxpLmxvY2F0aW9uKSB7CiAgICAgICAgICAgICAgICBjYXNlICdudyc6CiAgICAgICAgICAgICAgICAgICAgb2ZmeCA9IGxpLndpZHRoICsgbGkueG9mZnNldDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3cnOgogICAgICAgICAgICAgICAgICAgIG9mZnggPSBsaS53aWR0aCArIGxpLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdzdyc6CiAgICAgICAgICAgICAgICAgICAgb2ZmeCA9IGxpLndpZHRoICsgbGkueG9mZnNldDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ25lJzoKICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gbGkud2lkdGggKyBsaS54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIHRyYW5zID0gLTE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdlJzoKICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gbGkud2lkdGggKyBsaS54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIHRyYW5zID0gLTE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdzZSc6CiAgICAgICAgICAgICAgICAgICAgb2ZmeCA9IGxpLndpZHRoICsgbGkueG9mZnNldDsKICAgICAgICAgICAgICAgICAgICB0cmFucyA9IC0xOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbic6CiAgICAgICAgICAgICAgICAgICAgb2ZmeSA9IGxpLmhlaWdodCArIGxpLnlvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgICAgICBvZmZ5ID0gbGkuaGVpZ2h0ICsgbGkueW9mZnNldDsKICAgICAgICAgICAgICAgICAgICB0cmFucyA9IC0xOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgbG9mZiA9ICh0cmFucz09MSkgPyB0aGlzLnBhZGRpbmcubGVmdCArIG9mZnggOiB0aGlzLnBhZGRpbmcubGVmdDsKICAgICAgICB2YXIgdG9mZiA9ICh0cmFucz09MSkgPyB0aGlzLnBhZGRpbmcudG9wICsgb2ZmeSA6IHRoaXMucGFkZGluZy50b3A7CiAgICAgICAgdmFyIHJvZmYgPSAodHJhbnM9PS0xKSA/IHRoaXMucGFkZGluZy5yaWdodCArIG9mZnggOiB0aGlzLnBhZGRpbmcucmlnaHQ7CiAgICAgICAgdmFyIGJvZmYgPSAodHJhbnM9PS0xKSA/IHRoaXMucGFkZGluZy5ib3R0b20gKyBvZmZ5IDogdGhpcy5wYWRkaW5nLmJvdHRvbTsKICAgICAgICAKICAgICAgICB2YXIgc2hhZG93ID0gKG9wdHMuc2hhZG93ICE9IHVuZGVmaW5lZCkgPyBvcHRzLnNoYWRvdyA6IHRoaXMuc2hhZG93OwogICAgICAgIHZhciBzaG93TGluZSA9IChvcHRzLnNob3dMaW5lICE9IHVuZGVmaW5lZCkgPyBvcHRzLnNob3dMaW5lIDogdGhpcy5zaG93TGluZTsKICAgICAgICB2YXIgZmlsbCA9IChvcHRzLmZpbGwgIT0gdW5kZWZpbmVkKSA/IG9wdHMuZmlsbCA6IHRoaXMuZmlsbDsKICAgICAgICB2YXIgY3cgPSBjdHguY2FudmFzLndpZHRoOwogICAgICAgIHZhciBjaCA9IGN0eC5jYW52YXMuaGVpZ2h0OwogICAgICAgIHRoaXMuX2Jhc2VzWzBdID0gY3cgLSBsb2ZmIC0gcm9mZjsKICAgICAgICB2YXIgbHRvdCA9IHRoaXMuX2xlbmd0aCA9IGNoIC0gdG9mZiAtIGJvZmY7CgogICAgICAgIHZhciBoZW5kID0gdGhpcy5fYmFzZXNbMF0qdGhpcy53aWR0aFJhdGlvOwogICAgICAgIHRoaXMuX2F0b3QgPSBsdG90LzIgKiAodGhpcy5fYmFzZXNbMF0gKyB0aGlzLl9iYXNlc1swXSp0aGlzLndpZHRoUmF0aW8pOwoKICAgICAgICB0aGlzLl9hbmdsZSA9IE1hdGguYXRhbigodGhpcy5fYmFzZXNbMF0gLSBoZW5kKS8yL2x0b3QpOwoKICAgICAgICBmb3IgKGk9MDsgaTxnZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0aGlzLl9hcmVhcy5wdXNoKGdkW2ldWzFdICogdGhpcy5fYXRvdCk7CiAgICAgICAgfQoKICAgICAgICAKICAgICAgICB2YXIgZ3Vlc3MsIGVyciwgY291bnQsIGxzdW09MDsKICAgICAgICB2YXIgdG9sZXJhbmNlID0gMC4wMDAxOwoKICAgICAgICBmb3IgKGk9MDsgaTx0aGlzLl9hcmVhcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBndWVzcyA9IHRoaXMuX2FyZWFzW2ldL3RoaXMuX2Jhc2VzW2ldOwogICAgICAgICAgICBlcnIgPSA5OTk5OTk7CiAgICAgICAgICAgIHRoaXMuX2xlbmd0aHNbaV0gPSBndWVzczsKICAgICAgICAgICAgY291bnQgPSAwOwogICAgICAgICAgICB3aGlsZSAoZXJyID4gdGhpcy5fbGVuZ3Roc1tpXSp0b2xlcmFuY2UgJiYgY291bnQgPCAxMDApIHsKICAgICAgICAgICAgICAgIHRoaXMuX2xlbmd0aHNbaV0gPSB0aGlzLl9hcmVhc1tpXS8odGhpcy5fYmFzZXNbaV0gLSB0aGlzLl9sZW5ndGhzW2ldICogTWF0aC50YW4odGhpcy5fYW5nbGUpKTsKICAgICAgICAgICAgICAgIGVyciA9IE1hdGguYWJzKHRoaXMuX2xlbmd0aHNbaV0gLSBndWVzcyk7CiAgICAgICAgICAgICAgICB0aGlzLl9iYXNlc1tpKzFdID0gdGhpcy5fYmFzZXNbaV0gLSAoMip0aGlzLl9sZW5ndGhzW2ldKk1hdGgudGFuKHRoaXMuX2FuZ2xlKSk7CiAgICAgICAgICAgICAgICBndWVzcyA9IHRoaXMuX2xlbmd0aHNbaV07CiAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxzdW0gKz0gdGhpcy5fbGVuZ3Roc1tpXTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gZmlndXJlIG91dCB2ZXJ0aWNlcyBvZiBlYWNoIHNlY3Rpb24KICAgICAgICB0aGlzLl92ZXJ0aWNlcyA9IG5ldyBBcnJheShnZC5sZW5ndGgpOwogICAgICAgIAogICAgICAgIC8vIHRoZXNlIGFyZSA0IGNvbmVycyBvZiBlbnRpcmUgdHJhcGV6b2lkCiAgICAgICAgdmFyIHAwID0gW2xvZmYsIHRvZmZdLAogICAgICAgICAgICBwMSA9IFtsb2ZmK3RoaXMuX2Jhc2VzWzBdLCB0b2ZmXSwKICAgICAgICAgICAgcDIgPSBbbG9mZiArICh0aGlzLl9iYXNlc1swXSAtIHRoaXMuX2Jhc2VzW3RoaXMuX2Jhc2VzLmxlbmd0aC0xXSkvMiwgdG9mZiArIHRoaXMuX2xlbmd0aF0sCiAgICAgICAgICAgIHAzID0gW3AyWzBdICsgdGhpcy5fYmFzZXNbdGhpcy5fYmFzZXMubGVuZ3RoLTFdLCBwMlsxXV07CiAgICAgICAgICAgIAogICAgICAgIC8vIGVxdWF0aW9ucyBvZiByaWdodCBhbmQgbGVmdCBzaWRlcywgcmV0dXJucyB4LCB5IHZhbHVlcyBnaXZlbiBoZWlnaHQgb2Ygc2VjdGlvbiAoeSB2YWx1ZSkKICAgICAgICBmdW5jdGlvbiBmaW5kbGVmdCAobCkgewogICAgICAgICAgICB2YXIgbSA9IChwMFsxXSAtIHAyWzFdKS8ocDBbMF0gLSBwMlswXSk7CiAgICAgICAgICAgIHZhciBiID0gcDBbMV0gLSBtKnAwWzBdOwogICAgICAgICAgICB2YXIgeSA9IGwgKyBwMFsxXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBbKHkgLSBiKS9tLCB5XTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZnVuY3Rpb24gZmluZHJpZ2h0IChsKSB7CiAgICAgICAgICAgIHZhciBtID0gKHAxWzFdIC0gcDNbMV0pLyhwMVswXSAtIHAzWzBdKTsKICAgICAgICAgICAgdmFyIGIgPSBwMVsxXSAtIG0qcDFbMF07CiAgICAgICAgICAgIHZhciB5ID0gbCArIHAxWzFdOwogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIFsoeSAtIGIpL20sIHldOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgeCA9IG9mZngsIHkgPSBvZmZ5OwogICAgICAgIHZhciBoPTAsIGFkaj0wOwogICAgICAgIAogICAgICAgIGZvciAoaT0wOyBpPGdkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRoaXMuX3ZlcnRpY2VzW2ldID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgIHZhciB2ID0gdGhpcy5fdmVydGljZXNbaV07CiAgICAgICAgICAgIHZhciBzbSA9IHRoaXMuc2VjdGlvbk1hcmdpbjsKICAgICAgICAgICAgaWYgKGkgPT0gMCkgewogICAgICAgICAgICAgICAgYWRqID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaSA9PSAxKSB7CiAgICAgICAgICAgICAgICBhZGogPSBzbS8zOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGkgPiAwICYmIGkgPCBnZC5sZW5ndGgtMSkgewogICAgICAgICAgICAgICAgYWRqID0gc20vMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChpID09IGdkLmxlbmd0aCAtMSkgewogICAgICAgICAgICAgICAgYWRqID0gMipzbS8zOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHYucHVzaChmaW5kbGVmdChoK2FkaikpOwogICAgICAgICAgICB2LnB1c2goZmluZHJpZ2h0KGgrYWRqKSk7CiAgICAgICAgICAgIGggKz0gdGhpcy5fbGVuZ3Roc1tpXTsKICAgICAgICAgICAgaWYgKGkgPT0gMCkgewogICAgICAgICAgICAgICAgYWRqID0gLTIqc20vMzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChpID4gMCAmJiBpIDwgZ2QubGVuZ3RoLTEpIHsKICAgICAgICAgICAgICAgIGFkaiA9IC1zbS8yOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGkgPT0gZ2QubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgICAgYWRqID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICB2LnB1c2goZmluZHJpZ2h0KGgrYWRqKSk7CiAgICAgICAgICAgIHYucHVzaChmaW5kbGVmdChoK2FkaikpOwogICAgICAgICAgICAKICAgICAgICB9CgogICAgICAgIGlmICh0aGlzLnNoYWRvdykgewogICAgICAgICAgICB2YXIgc2hhZG93Q29sb3IgPSAncmdiYSgwLDAsMCwnK3RoaXMuc2hhZG93QWxwaGErJyknOwogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8Z2QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd1NlY3Rpb24uY2FsbCAodGhpcywgY3R4LCB0aGlzLl92ZXJ0aWNlc1tpXSwgc2hhZG93Q29sb3IsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpPTA7IGk8Z2QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHYgPSB0aGlzLl92ZXJ0aWNlc1tpXTsKICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3U2VjdGlvbi5jYWxsICh0aGlzLCBjdHgsIHYsIHRoaXMuc2VyaWVzQ29sb3JzW2ldKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLnNob3dEYXRhTGFiZWxzICYmIGdkW2ldWzFdKjEwMCA+PSB0aGlzLmRhdGFMYWJlbFRocmVzaG9sZCkgewogICAgICAgICAgICAgICAgdmFyIGZzdHIsIGxhYmVsOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhTGFiZWxzID09ICdsYWJlbCcpIHsKICAgICAgICAgICAgICAgICAgICBmc3RyID0gdGhpcy5kYXRhTGFiZWxGb3JtYXRTdHJpbmcgfHwgJyVzJzsKICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICQuanFwbG90LnNwcmludGYoZnN0ciwgZ2RbaV1bMF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXRhTGFiZWxzID09ICd2YWx1ZScpIHsKICAgICAgICAgICAgICAgICAgICBmc3RyID0gdGhpcy5kYXRhTGFiZWxGb3JtYXRTdHJpbmcgfHwgJyVkJzsKICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICQuanFwbG90LnNwcmludGYoZnN0ciwgdGhpcy5kYXRhW2ldWzFdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZGF0YUxhYmVscyA9PSAncGVyY2VudCcpIHsKICAgICAgICAgICAgICAgICAgICBmc3RyID0gdGhpcy5kYXRhTGFiZWxGb3JtYXRTdHJpbmcgfHwgJyVkJSUnOwogICAgICAgICAgICAgICAgICAgIGxhYmVsID0gJC5qcXBsb3Quc3ByaW50Zihmc3RyLCBnZFtpXVsxXSoxMDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXRhTGFiZWxzLmNvbnN0cnVjdG9yID09IEFycmF5KSB7CiAgICAgICAgICAgICAgICAgICAgZnN0ciA9IHRoaXMuZGF0YUxhYmVsRm9ybWF0U3RyaW5nIHx8ICclcyc7CiAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAkLmpxcGxvdC5zcHJpbnRmKGZzdHIsIHRoaXMuZGF0YUxhYmVsc1t0aGlzLl9kYXRhSW5kaWNlc1tpXV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgZmFjdCA9ICh0aGlzLl9yYWRpdXMgKSAqIHRoaXMuZGF0YUxhYmVsUG9zaXRpb25GYWN0b3IgKyB0aGlzLnNsaWNlTWFyZ2luICsgdGhpcy5kYXRhTGFiZWxOdWRnZTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIHggPSAodlswXVswXSArIHZbMV1bMF0pLzIgKyB0aGlzLmNhbnZhcy5fb2Zmc2V0cy5sZWZ0OwogICAgICAgICAgICAgICAgdmFyIHkgPSAodlsxXVsxXSArIHZbMl1bMV0pLzIgKyB0aGlzLmNhbnZhcy5fb2Zmc2V0cy50b3A7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBsYWJlbGVsZW0gPSAkKCc8c3BhbiBjbGFzcz0ianFwbG90LWZ1bm5lbC1zZXJpZXMganFwbG90LWRhdGEtbGFiZWwiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiPicgKyBsYWJlbCArICc8L3NwYW4+JykuaW5zZXJ0QmVmb3JlKHBsb3QuZXZlbnRDYW52YXMuX2VsZW0pOwogICAgICAgICAgICAgICAgeCAtPSBsYWJlbGVsZW0ud2lkdGgoKS8yOwogICAgICAgICAgICAgICAgeSAtPSBsYWJlbGVsZW0uaGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgIHggPSBNYXRoLnJvdW5kKHgpOwogICAgICAgICAgICAgICAgeSA9IE1hdGgucm91bmQoeSk7CiAgICAgICAgICAgICAgICBsYWJlbGVsZW0uY3NzKHtsZWZ0OiB4LCB0b3A6IHl9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgICAgICAgIAogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRnVubmVsQXhpc1JlbmRlcmVyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgJC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyLmNhbGwodGhpcyk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5GdW5uZWxBeGlzUmVuZGVyZXIucHJvdG90eXBlID0gbmV3ICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlcigpOwogICAgJC5qcXBsb3QuRnVubmVsQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90LkZ1bm5lbEF4aXNSZW5kZXJlcjsKICAgICAgICAKICAgIAogICAgLy8gVGhlcmUgYXJlIG5vIHRyYWRpdGlvbmFsIGF4ZXMgb24gYSBmdW5uZWwgY2hhcnQuICBXZSBqdXN0IG5lZWQgdG8gcHJvdmlkZQogICAgLy8gZHVtbXkgb2JqZWN0cyB3aXRoIHByb3BlcnRpZXMgc28gdGhlIHBsb3Qgd2lsbCByZW5kZXIuCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBheGlzIG9iamVjdC4KICAgICQuanFwbG90LkZ1bm5lbEF4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpewogICAgICAgIC8vCiAgICAgICAgdGhpcy50aWNrUmVuZGVyZXIgPSAkLmpxcGxvdC5GdW5uZWxUaWNrUmVuZGVyZXI7CiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CiAgICAgICAgLy8gSSBkb24ndCB0aGluayBJJ20gZ29pbmcgdG8gbmVlZCBfZGF0YUJvdW5kcyBoZXJlLgogICAgICAgIC8vIGhhdmUgdG8gZ28gQXhpcyBzY2FsaW5nIGluIGEgd2F5IHRvIGZpdCBjaGFydCBvbnRvIHBsb3QgYXJlYQogICAgICAgIC8vIGFuZCBwcm92aWRlIHUycCBhbmQgcDJ1IGZ1bmN0aW9uYWxpdHkgZm9yIG1vdXNlIGN1cnNvciwgZXRjLgogICAgICAgIC8vIGZvciBjb252aWVuZW5jZSBzZXQgX2RhdGFCb3VuZHMgdG8gMCBhbmQgMTAwIGFuZAogICAgICAgIC8vIHNldCBtaW4vbWF4IHRvIDAgYW5kIDEwMC4KICAgICAgICB0aGlzLl9kYXRhQm91bmRzID0ge21pbjowLCBtYXg6MTAwfTsKICAgICAgICB0aGlzLm1pbiA9IDA7CiAgICAgICAgdGhpcy5tYXggPSAxMDA7CiAgICAgICAgdGhpcy5zaG93VGlja3MgPSBmYWxzZTsKICAgICAgICB0aGlzLnRpY2tzID0gW107CiAgICAgICAgdGhpcy5zaG93TWFyayA9IGZhbHNlOwogICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlOyAKICAgIH07CiAgICAKICAgIAogICAgCiAgICAvKioKICAgICAqIENsYXNzOiAkLmpxcGxvdC5GdW5uZWxMZWdlbmRSZW5kZXJlcgogICAgICogTGVnZW5kIFJlbmRlcmVyIHNwZWNpZmljIHRvIGZ1bm5lbCBwbG90cy4gIFNldCBieSBkZWZhdWx0CiAgICAgKiB3aGVuIHRoZSB1c2VyIGNyZWF0ZXMgYSBmdW5uZWwgcGxvdC4KICAgICAqLwogICAgJC5qcXBsb3QuRnVubmVsTGVnZW5kUmVuZGVyZXIgPSBmdW5jdGlvbigpewogICAgICAgICQuanFwbG90LlRhYmxlTGVnZW5kUmVuZGVyZXIuY2FsbCh0aGlzKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkZ1bm5lbExlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyKCk7CiAgICAkLmpxcGxvdC5GdW5uZWxMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5GdW5uZWxMZWdlbmRSZW5kZXJlcjsKICAgIAogICAgJC5qcXBsb3QuRnVubmVsTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAvLwogICAgICAgIC8vIHByb3A6IG51bWJlclJvd3MKICAgICAgICAvLyBNYXhpbXVtIG51bWJlciBvZiByb3dzIGluIHRoZSBsZWdlbmQuICAwIG9yIG51bGwgZm9yIHVubGltaXRlZC4KICAgICAgICB0aGlzLm51bWJlclJvd3MgPSBudWxsOwogICAgICAgIC8vIHByb3A6IG51bWJlckNvbHVtbnMKICAgICAgICAvLyBNYXhpbXVtIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBsZWdlbmQuICAwIG9yIG51bGwgZm9yIHVubGltaXRlZC4KICAgICAgICB0aGlzLm51bWJlckNvbHVtbnMgPSBudWxsOwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggY29udGV4dCBvZiBsZWdlbmQKICAgICQuanFwbG90LkZ1bm5lbExlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGxlZ2VuZCA9IHRoaXM7CiAgICAgICAgaWYgKHRoaXMuc2hvdykgewogICAgICAgICAgICB2YXIgc2VyaWVzID0gdGhpcy5fc2VyaWVzOwogICAgICAgICAgICB2YXIgc3MgPSAncG9zaXRpb246YWJzb2x1dGU7JzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMuYmFja2dyb3VuZCkgPyAnYmFja2dyb3VuZDonK3RoaXMuYmFja2dyb3VuZCsnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMuYm9yZGVyKSA/ICdib3JkZXI6Jyt0aGlzLmJvcmRlcisnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMuZm9udFNpemUpID8gJ2ZvbnQtc2l6ZTonK3RoaXMuZm9udFNpemUrJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLmZvbnRGYW1pbHkpID8gJ2ZvbnQtZmFtaWx5OicrdGhpcy5mb250RmFtaWx5Kyc7JyA6ICcnOwogICAgICAgICAgICBzcyArPSAodGhpcy50ZXh0Q29sb3IpID8gJ2NvbG9yOicrdGhpcy50ZXh0Q29sb3IrJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLm1hcmdpblRvcCAhPSBudWxsKSA/ICdtYXJnaW4tdG9wOicrdGhpcy5tYXJnaW5Ub3ArJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLm1hcmdpbkJvdHRvbSAhPSBudWxsKSA/ICdtYXJnaW4tYm90dG9tOicrdGhpcy5tYXJnaW5Cb3R0b20rJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLm1hcmdpbkxlZnQgIT0gbnVsbCkgPyAnbWFyZ2luLWxlZnQ6Jyt0aGlzLm1hcmdpbkxlZnQrJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLm1hcmdpblJpZ2h0ICE9IG51bGwpID8gJ21hcmdpbi1yaWdodDonK3RoaXMubWFyZ2luUmlnaHQrJzsnIDogJyc7CiAgICAgICAgICAgIHRoaXMuX2VsZW0gPSAkKCc8dGFibGUgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiIHN0eWxlPSInK3NzKyciPjwvdGFibGU+Jyk7CiAgICAgICAgICAgIC8vIEZ1bm5lbCBjaGFydHMgbGVnZW5kcyBkb24ndCBnbyBieSBudW1iZXIgb2Ygc2VyaWVzLCBidXQgYnkgbnVtYmVyIG9mIGRhdGEgcG9pbnRzCiAgICAgICAgICAgIC8vIGluIHRoZSBzZXJpZXMuICBSZWZhY3RvciB0aGluZ3MgaGVyZSBmb3IgdGhhdC4KICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwYWQgPSBmYWxzZSwgCiAgICAgICAgICAgICAgICByZXZlcnNlID0gZmFsc2UsCiAgICAgICAgICAgICAgICBuciwgbmM7CiAgICAgICAgICAgIHZhciBzID0gc2VyaWVzWzBdOwogICAgICAgICAgICB2YXIgY29sb3JHZW5lcmF0b3IgPSBuZXcgJC5qcXBsb3QuQ29sb3JHZW5lcmF0b3Iocy5zZXJpZXNDb2xvcnMpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHMuc2hvdykgewogICAgICAgICAgICAgICAgdmFyIHBkID0gcy5kYXRhOwogICAgICAgICAgICAgICAgaWYgKHRoaXMubnVtYmVyUm93cykgewogICAgICAgICAgICAgICAgICAgIG5yID0gdGhpcy5udW1iZXJSb3dzOwogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5udW1iZXJDb2x1bW5zKXsKICAgICAgICAgICAgICAgICAgICAgICAgbmMgPSBNYXRoLmNlaWwocGQubGVuZ3RoL25yKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgbmMgPSB0aGlzLm51bWJlckNvbHVtbnM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5udW1iZXJDb2x1bW5zKSB7CiAgICAgICAgICAgICAgICAgICAgbmMgPSB0aGlzLm51bWJlckNvbHVtbnM7CiAgICAgICAgICAgICAgICAgICAgbnIgPSBNYXRoLmNlaWwocGQubGVuZ3RoL3RoaXMubnVtYmVyQ29sdW1ucyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuciA9IHBkLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBuYyA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBpLCBqLCB0ciwgdGQxLCB0ZDIsIGx0LCBycywgY29sb3I7CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gMDsgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPG5yOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAocmV2ZXJzZSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyID0gJCgnPHRyIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIj48L3RyPicpLnByZXBlbmRUbyh0aGlzLl9lbGVtKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgdHIgPSAkKCc8dHIgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiPjwvdHI+JykuYXBwZW5kVG8odGhpcy5fZWxlbSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqPG5jOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkeCA8IHBkLmxlbmd0aCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdCA9IHRoaXMubGFiZWxzW2lkeF0gfHwgcGRbaWR4XVswXS50b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckdlbmVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJldmVyc2UpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpPjApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IG5yIC0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcnMgPSAocGFkKSA/IHRoaXMucm93U3BhY2luZyA6ICcwJzsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQxID0gJCgnPHRkIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZy10b3A6JytycysnOyI+JysKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdj48ZGl2IGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kLXN3YXRjaCIgc3R5bGU9ImJvcmRlci1jb2xvcjonK2NvbG9yKyc7Ij48L2Rpdj4nKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj48L3RkPicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQyID0gJCgnPHRkIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIiBzdHlsZT0icGFkZGluZy10b3A6JytycysnOyI+PC90ZD4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVzY2FwZUh0bWwpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi50ZXh0KGx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi5odG1sKGx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXZlcnNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQyLnByZXBlbmRUbyh0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQxLnByZXBlbmRUbyh0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDEuYXBwZW5kVG8odHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi5hcHBlbmRUbyh0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlkeCsrOwogICAgICAgICAgICAgICAgICAgIH0gICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fZWxlbTsgICAgICAgICAgICAgICAgCiAgICB9OwogICAgCiAgICAvLyAkLmpxcGxvdC5GdW5uZWxMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUucGFjayA9IGZ1bmN0aW9uKG9mZnNldHMpIHsKICAgIC8vICAgICBpZiAodGhpcy5zaG93KSB7CiAgICAvLyAgICAgICAgIC8vIGZha2UgYSBncmlkIGZvciBwb3NpdGlvbmluZwogICAgLy8gICAgICAgICB2YXIgZ3JpZCA9IHtfdG9wOm9mZnNldHMudG9wLCBfbGVmdDpvZmZzZXRzLmxlZnQsIF9yaWdodDpvZmZzZXRzLnJpZ2h0LCBfYm90dG9tOnRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIG9mZnNldHMuYm90dG9tfTsgICAgICAgIAogICAgLy8gICAgICAgICBpZiAodGhpcy5wbGFjZW1lbnQgPT0gJ2luc2lkZUdyaWQnKSB7CiAgICAvLyAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMubG9jYXRpb24pIHsKICAgIC8vICAgICAgICAgICAgICAgICBjYXNlICdudyc6CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gZ3JpZC5fbGVmdCArIHRoaXMueG9mZnNldDsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBncmlkLl90b3AgKyB0aGlzLnlvZmZzZXQ7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCdsZWZ0JywgYSk7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCd0b3AnLCBiKTsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAvLyAgICAgICAgICAgICAgICAgY2FzZSAnbic6CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gKG9mZnNldHMubGVmdCArICh0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCAtIG9mZnNldHMucmlnaHQpKS8yIC0gdGhpcy5nZXRXaWR0aCgpLzI7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gZ3JpZC5fdG9wICsgdGhpcy55b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcygnbGVmdCcsIGEpOwogICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcygndG9wJywgYik7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgLy8gICAgICAgICAgICAgICAgIGNhc2UgJ25lJzoKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBvZmZzZXRzLnJpZ2h0ICsgdGhpcy54b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IGdyaWQuX3RvcCArIHRoaXMueW9mZnNldDsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe3JpZ2h0OmEsIHRvcDpifSk7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgLy8gICAgICAgICAgICAgICAgIGNhc2UgJ2UnOgogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IG9mZnNldHMucmlnaHQgKyB0aGlzLnhvZmZzZXQ7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gKG9mZnNldHMudG9wICsgKHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIG9mZnNldHMuYm90dG9tKSkvMiAtIHRoaXMuZ2V0SGVpZ2h0KCkvMjsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe3JpZ2h0OmEsIHRvcDpifSk7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgLy8gICAgICAgICAgICAgICAgIGNhc2UgJ3NlJzoKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBvZmZzZXRzLnJpZ2h0ICsgdGhpcy54b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IG9mZnNldHMuYm90dG9tICsgdGhpcy55b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6YSwgYm90dG9tOmJ9KTsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAvLyAgICAgICAgICAgICAgICAgY2FzZSAncyc6CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gKG9mZnNldHMubGVmdCArICh0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCAtIG9mZnNldHMucmlnaHQpKS8yIC0gdGhpcy5nZXRXaWR0aCgpLzI7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gb2Zmc2V0cy5ib3R0b20gKyB0aGlzLnlvZmZzZXQ7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtsZWZ0OmEsIGJvdHRvbTpifSk7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgLy8gICAgICAgICAgICAgICAgIGNhc2UgJ3N3JzoKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBncmlkLl9sZWZ0ICsgdGhpcy54b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IG9mZnNldHMuYm90dG9tICsgdGhpcy55b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7bGVmdDphLCBib3R0b206Yn0pOwogICAgLy8gICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgIC8vICAgICAgICAgICAgICAgICBjYXNlICd3JzoKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBncmlkLl9sZWZ0ICsgdGhpcy54b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IChvZmZzZXRzLnRvcCArICh0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQgLSBvZmZzZXRzLmJvdHRvbSkpLzIgLSB0aGlzLmdldEhlaWdodCgpLzI7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtsZWZ0OmEsIHRvcDpifSk7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgLy8gICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAvLyBzYW1lIGFzICdzZScKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBncmlkLl9yaWdodCAtIHRoaXMueG9mZnNldDsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBncmlkLl9ib3R0b20gKyB0aGlzLnlvZmZzZXQ7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtyaWdodDphLCBib3R0b206Yn0pOwogICAgLy8gICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgIC8vICAgICAgICAgICAgIH0KICAgIC8vICAgICAgICAgICAgIAogICAgLy8gICAgICAgICB9CiAgICAvLyAgICAgICAgIGVsc2UgewogICAgLy8gICAgICAgICAgICAgc3dpdGNoICh0aGlzLmxvY2F0aW9uKSB7CiAgICAvLyAgICAgICAgICAgICAgICAgY2FzZSAnbncnOgogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIC0gZ3JpZC5fbGVmdCArIHRoaXMueG9mZnNldDsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBncmlkLl90b3AgKyB0aGlzLnlvZmZzZXQ7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCdyaWdodCcsIGEpOwogICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcygndG9wJywgYik7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgLy8gICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IChvZmZzZXRzLmxlZnQgKyAodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBvZmZzZXRzLnJpZ2h0KSkvMiAtIHRoaXMuZ2V0V2lkdGgoKS8yOwogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIGdyaWQuX3RvcCArIHRoaXMueW9mZnNldDsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoJ2xlZnQnLCBhKTsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoJ2JvdHRvbScsIGIpOwogICAgLy8gICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgIC8vICAgICAgICAgICAgICAgICBjYXNlICduZSc6CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBvZmZzZXRzLnJpZ2h0ICsgdGhpcy54b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IGdyaWQuX3RvcCArIHRoaXMueW9mZnNldDsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe2xlZnQ6YSwgdG9wOmJ9KTsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAvLyAgICAgICAgICAgICAgICAgY2FzZSAnZSc6CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBvZmZzZXRzLnJpZ2h0ICsgdGhpcy54b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IChvZmZzZXRzLnRvcCArICh0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQgLSBvZmZzZXRzLmJvdHRvbSkpLzIgLSB0aGlzLmdldEhlaWdodCgpLzI7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtsZWZ0OmEsIHRvcDpifSk7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgLy8gICAgICAgICAgICAgICAgIGNhc2UgJ3NlJzoKICAgIC8vICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCAtIG9mZnNldHMucmlnaHQgKyB0aGlzLnhvZmZzZXQ7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gb2Zmc2V0cy5ib3R0b20gKyB0aGlzLnlvZmZzZXQ7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtsZWZ0OmEsIGJvdHRvbTpifSk7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgLy8gICAgICAgICAgICAgICAgIGNhc2UgJ3MnOgogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IChvZmZzZXRzLmxlZnQgKyAodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBvZmZzZXRzLnJpZ2h0KSkvMiAtIHRoaXMuZ2V0V2lkdGgoKS8yOwogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIG9mZnNldHMuYm90dG9tICsgdGhpcy55b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7bGVmdDphLCB0b3A6Yn0pOwogICAgLy8gICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgIC8vICAgICAgICAgICAgICAgICBjYXNlICdzdyc6CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBncmlkLl9sZWZ0ICsgdGhpcy54b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IG9mZnNldHMuYm90dG9tICsgdGhpcy55b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6YSwgYm90dG9tOmJ9KTsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAvLyAgICAgICAgICAgICAgICAgY2FzZSAndyc6CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBncmlkLl9sZWZ0ICsgdGhpcy54b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IChvZmZzZXRzLnRvcCArICh0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQgLSBvZmZzZXRzLmJvdHRvbSkpLzIgLSB0aGlzLmdldEhlaWdodCgpLzI7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtyaWdodDphLCB0b3A6Yn0pOwogICAgLy8gICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgIC8vICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgLy8gc2FtZSBhcyAnc2UnCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gZ3JpZC5fcmlnaHQgLSB0aGlzLnhvZmZzZXQ7CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gZ3JpZC5fYm90dG9tICsgdGhpcy55b2Zmc2V0OwogICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6YSwgYm90dG9tOmJ9KTsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAvLyAgICAgICAgICAgICB9CiAgICAvLyAgICAgICAgIH0KICAgIC8vICAgICB9IAogICAgLy8gfTsKICAgIAogICAgLy8gc2V0dXAgZGVmYXVsdCByZW5kZXJlcnMgZm9yIGF4ZXMgYW5kIGxlZ2VuZCBzbyB1c2VyIGRvZXNuJ3QgaGF2ZSB0bwogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgcGxvdAogICAgZnVuY3Rpb24gcHJlSW5pdCh0YXJnZXQsIGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICBvcHRpb25zLmF4ZXNEZWZhdWx0cyA9IG9wdGlvbnMuYXhlc0RlZmF1bHRzIHx8IHt9OwogICAgICAgIG9wdGlvbnMubGVnZW5kID0gb3B0aW9ucy5sZWdlbmQgfHwge307CiAgICAgICAgb3B0aW9ucy5zZXJpZXNEZWZhdWx0cyA9IG9wdGlvbnMuc2VyaWVzRGVmYXVsdHMgfHwge307CiAgICAgICAgLy8gb25seSBzZXQgdGhlc2UgaWYgdGhlcmUgaXMgYSBmdW5uZWwgc2VyaWVzCiAgICAgICAgdmFyIHNldG9wdHMgPSBmYWxzZTsKICAgICAgICBpZiAob3B0aW9ucy5zZXJpZXNEZWZhdWx0cy5yZW5kZXJlciA9PSAkLmpxcGxvdC5GdW5uZWxSZW5kZXJlcikgewogICAgICAgICAgICBzZXRvcHRzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5zZXJpZXMpIHsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpIDwgb3B0aW9ucy5zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNlcmllc1tpXS5yZW5kZXJlciA9PSAkLmpxcGxvdC5GdW5uZWxSZW5kZXJlcikgewogICAgICAgICAgICAgICAgICAgIHNldG9wdHMgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChzZXRvcHRzKSB7CiAgICAgICAgICAgIG9wdGlvbnMuYXhlc0RlZmF1bHRzLnJlbmRlcmVyID0gJC5qcXBsb3QuRnVubmVsQXhpc1JlbmRlcmVyOwogICAgICAgICAgICBvcHRpb25zLmxlZ2VuZC5yZW5kZXJlciA9ICQuanFwbG90LkZ1bm5lbExlZ2VuZFJlbmRlcmVyOwogICAgICAgICAgICBvcHRpb25zLmxlZ2VuZC5wcmVEcmF3ID0gdHJ1ZTsKICAgICAgICAgICAgb3B0aW9ucy5zb3J0RGF0YSA9IGZhbHNlOwogICAgICAgICAgICBvcHRpb25zLnNlcmllc0RlZmF1bHRzLnBvaW50TGFiZWxzID0ge3Nob3c6IGZhbHNlfTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIHBvc3RJbml0KHRhcmdldCwgZGF0YSwgb3B0aW9ucykgewogICAgICAgIC8vIGlmIG11bHRpcGxlIHNlcmllcywgYWRkIGEgcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBvbmUgc28gdGhhdAogICAgICAgIC8vIGZ1bm5lbCByaW5ncyBjYW4gbmVzdC4KICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKHRoaXMuc2VyaWVzW2ldLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkZ1bm5lbFJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAvLyBkb24ndCBhbGxvdyBtb3VzZW92ZXIgYW5kIG1vdXNlZG93biBhdCBzYW1lIHRpbWUuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXJpZXNbaV0uaGlnaGxpZ2h0TW91c2VPdmVyKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNbaV0uaGlnaGxpZ2h0TW91c2VEb3duID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIHBsb3QKICAgIGZ1bmN0aW9uIHBvc3RQYXJzZU9wdGlvbnMob3B0aW9ucykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnNlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0aGlzLnNlcmllc1tpXS5zZXJpZXNDb2xvcnMgPSB0aGlzLnNlcmllc0NvbG9yczsKICAgICAgICAgICAgdGhpcy5zZXJpZXNbaV0uY29sb3JHZW5lcmF0b3IgPSAkLmpxcGxvdC5jb2xvckdlbmVyYXRvcjsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhpZ2hsaWdodCAocGxvdCwgc2lkeCwgcGlkeCkgewogICAgICAgIHZhciBzID0gcGxvdC5zZXJpZXNbc2lkeF07CiAgICAgICAgdmFyIGNhbnZhcyA9IHBsb3QucGx1Z2lucy5mdW5uZWxSZW5kZXJlci5oaWdobGlnaHRDYW52YXM7CiAgICAgICAgY2FudmFzLl9jdHguY2xlYXJSZWN0KDAsMCxjYW52YXMuX2N0eC5jYW52YXMud2lkdGgsIGNhbnZhcy5fY3R4LmNhbnZhcy5oZWlnaHQpOwogICAgICAgIHMuX2hpZ2hsaWdodGVkUG9pbnQgPSBwaWR4OwogICAgICAgIHBsb3QucGx1Z2lucy5mdW5uZWxSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4ID0gc2lkeDsKICAgICAgICBzLnJlbmRlcmVyLmRyYXdTZWN0aW9uLmNhbGwocywgY2FudmFzLl9jdHgsIHMuX3ZlcnRpY2VzW3BpZHhdLCBzLmhpZ2hsaWdodENvbG9yc1twaWR4XSwgZmFsc2UpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiB1bmhpZ2hsaWdodCAocGxvdCkgewogICAgICAgIHZhciBjYW52YXMgPSBwbG90LnBsdWdpbnMuZnVubmVsUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzOwogICAgICAgIGNhbnZhcy5fY3R4LmNsZWFyUmVjdCgwLDAsIGNhbnZhcy5fY3R4LmNhbnZhcy53aWR0aCwgY2FudmFzLl9jdHguY2FudmFzLmhlaWdodCk7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHBsb3Quc2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHBsb3Quc2VyaWVzW2ldLl9oaWdobGlnaHRlZFBvaW50ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcGxvdC5wbHVnaW5zLmZ1bm5lbFJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXggPSBudWxsOwogICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoJ2pxcGxvdERhdGFVbmhpZ2hsaWdodCcpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVNb3ZlKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIGlmIChuZWlnaGJvcikgewogICAgICAgICAgICB2YXIgaW5zID0gW25laWdoYm9yLnNlcmllc0luZGV4LCBuZWlnaGJvci5wb2ludEluZGV4LCBuZWlnaGJvci5kYXRhXTsKICAgICAgICAgICAgdmFyIGV2dDEgPSBqUXVlcnkuRXZlbnQoJ2pxcGxvdERhdGFNb3VzZU92ZXInKTsKICAgICAgICAgICAgZXZ0MS5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICBldnQxLnBhZ2VZID0gZXYucGFnZVk7CiAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoZXZ0MSwgaW5zKTsKICAgICAgICAgICAgaWYgKHBsb3Quc2VyaWVzW2luc1swXV0uaGlnaGxpZ2h0TW91c2VPdmVyICYmICEoaW5zWzBdID09IHBsb3QucGx1Z2lucy5mdW5uZWxSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4ICYmIGluc1sxXSA9PSBwbG90LnNlcmllc1tpbnNbMF1dLl9oaWdobGlnaHRlZFBvaW50KSkgewogICAgICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YUhpZ2hsaWdodCcpOwogICAgICAgICAgICAgICAgZXZ0LndoaWNoID0gZXYud2hpY2g7CiAgICAgICAgICAgICAgICBldnQucGFnZVggPSBldi5wYWdlWDsKICAgICAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQsIGlucyk7CiAgICAgICAgICAgICAgICBoaWdobGlnaHQgKHBsb3QsIGluc1swXSwgaW5zWzFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChuZWlnaGJvciA9PSBudWxsKSB7CiAgICAgICAgICAgIHVuaGlnaGxpZ2h0IChwbG90KTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICBpZiAobmVpZ2hib3IpIHsKICAgICAgICAgICAgdmFyIGlucyA9IFtuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IuZGF0YV07CiAgICAgICAgICAgIGlmIChwbG90LnNlcmllc1tpbnNbMF1dLmhpZ2hsaWdodE1vdXNlRG93biAmJiAhKGluc1swXSA9PSBwbG90LnBsdWdpbnMuZnVubmVsUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCAmJiBpbnNbMV0gPT0gcGxvdC5zZXJpZXNbaW5zWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpIHsKICAgICAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ2pxcGxvdERhdGFIaWdobGlnaHQnKTsKICAgICAgICAgICAgICAgIGV2dC53aGljaCA9IGV2LndoaWNoOwogICAgICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoZXZ0LCBpbnMpOwogICAgICAgICAgICAgICAgaGlnaGxpZ2h0IChwbG90LCBpbnNbMF0sIGluc1sxXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAobmVpZ2hib3IgPT0gbnVsbCkgewogICAgICAgICAgICB1bmhpZ2hsaWdodCAocGxvdCk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZVVwKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIHZhciBpZHggPSBwbG90LnBsdWdpbnMuZnVubmVsUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDsKICAgICAgICBpZiAoaWR4ICE9IG51bGwgJiYgcGxvdC5zZXJpZXNbaWR4XS5oaWdobGlnaHRNb3VzZURvd24pIHsKICAgICAgICAgICAgdW5oaWdobGlnaHQocGxvdCk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVDbGljayhldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICBpZiAobmVpZ2hib3IpIHsKICAgICAgICAgICAgdmFyIGlucyA9IFtuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IuZGF0YV07CiAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ2pxcGxvdERhdGFDbGljaycpOwogICAgICAgICAgICBldnQud2hpY2ggPSBldi53aGljaDsKICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKGV2dCwgaW5zKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZVJpZ2h0Q2xpY2soZXYsIGdyaWRwb3MsIGRhdGFwb3MsIG5laWdoYm9yLCBwbG90KSB7CiAgICAgICAgaWYgKG5laWdoYm9yKSB7CiAgICAgICAgICAgIHZhciBpbnMgPSBbbmVpZ2hib3Iuc2VyaWVzSW5kZXgsIG5laWdoYm9yLnBvaW50SW5kZXgsIG5laWdoYm9yLmRhdGFdOwogICAgICAgICAgICB2YXIgaWR4ID0gcGxvdC5wbHVnaW5zLmZ1bm5lbFJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg7CiAgICAgICAgICAgIGlmIChpZHggIT0gbnVsbCAmJiBwbG90LnNlcmllc1tpZHhdLmhpZ2hsaWdodE1vdXNlRG93bikgewogICAgICAgICAgICAgICAgdW5oaWdobGlnaHQocGxvdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YVJpZ2h0Q2xpY2snKTsKICAgICAgICAgICAgZXZ0LndoaWNoID0gZXYud2hpY2g7CiAgICAgICAgICAgIGV2dC5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQsIGlucyk7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyBjYWxsZWQgd2l0aGluIGNvbnRleHQgb2YgcGxvdAogICAgLy8gY3JlYXRlIGEgY2FudmFzIHdoaWNoIHdlIGNhbiBkcmF3IG9uLgogICAgLy8gaW5zZXJ0IGl0IGJlZm9yZSB0aGUgZXZlbnRDYW52YXMsIHNvIGV2ZW50Q2FudmFzIHdpbGwgc3RpbGwgY2FwdHVyZSBldmVudHMuCiAgICBmdW5jdGlvbiBwb3N0UGxvdERyYXcoKSB7CiAgICAgICAgLy8gTWVtb3J5IExlYWtzIHBhdGNoICAgIAogICAgICAgIGlmICh0aGlzLnBsdWdpbnMuZnVubmVsUmVuZGVyZXIgJiYgdGhpcy5wbHVnaW5zLmZ1bm5lbFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcykgewogICAgICAgICAgICB0aGlzLnBsdWdpbnMuZnVubmVsUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLnJlc2V0Q2FudmFzKCk7CiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5mdW5uZWxSZW5kZXJlci5oaWdobGlnaHRDYW52YXMgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5wbHVnaW5zLmZ1bm5lbFJlbmRlcmVyID0ge307CiAgICAgICAgdGhpcy5wbHVnaW5zLmZ1bm5lbFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcyA9IG5ldyAkLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7CiAgICAgICAgCiAgICAgICAgLy8gZG8gd2UgaGF2ZSBhbnkgZGF0YSBsYWJlbHM/ICBpZiBzbywgcHV0IGhpZ2hsaWdodCBjYW52YXMgYmVmb3JlIHRob3NlCiAgICAgICAgdmFyIGxhYmVscyA9ICQodGhpcy50YXJnZXRJZCsnIC5qcXBsb3QtZGF0YS1sYWJlbCcpOwogICAgICAgIGlmIChsYWJlbHMubGVuZ3RoKSB7CiAgICAgICAgICAgICQobGFiZWxzWzBdKS5iZWZvcmUodGhpcy5wbHVnaW5zLmZ1bm5lbFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCAnanFwbG90LWZ1bm5lbFJlbmRlcmVyLWhpZ2hsaWdodC1jYW52YXMnLCB0aGlzLl9wbG90RGltZW5zaW9ucywgdGhpcykpOwogICAgICAgIH0KICAgICAgICAvLyBlbHNlIHB1dCBoaWdobGlnaHQgY2FudmFzIGJlZm9yZSBldmVudCBjYW52YXMuCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKHRoaXMucGx1Z2lucy5mdW5uZWxSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywgJ2pxcGxvdC1mdW5uZWxSZW5kZXJlci1oaWdobGlnaHQtY2FudmFzJywgdGhpcy5fcGxvdERpbWVuc2lvbnMsIHRoaXMpKTsKICAgICAgICB9CiAgICAgICAgdmFyIGhjdHggPSB0aGlzLnBsdWdpbnMuZnVubmVsUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLnNldENvbnRleHQoKTsKICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoJ21vdXNlbGVhdmUnLCB7cGxvdDp0aGlzfSwgZnVuY3Rpb24gKGV2KSB7IHVuaGlnaGxpZ2h0KGV2LmRhdGEucGxvdCk7IH0pOwogICAgfQogICAgCiAgICAkLmpxcGxvdC5wcmVJbml0SG9va3MucHVzaChwcmVJbml0KTsKICAgIAogICAgJC5qcXBsb3QuRnVubmVsVGlja1JlbmRlcmVyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgJC5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuRnVubmVsVGlja1JlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyKCk7CiAgICAkLmpxcGxvdC5GdW5uZWxUaWNrUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJC5qcXBsb3QuRnVubmVsVGlja1JlbmRlcmVyOwogICAgCn0pKGpRdWVyeSk7CiAgICAKICAgIA==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.funnelRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGUpe2UuanFwbG90LkZ1bm5lbFJlbmRlcmVyPWZ1bmN0aW9uKCl7ZS5qcXBsb3QuTGluZVJlbmRlcmVyLmNhbGwodGhpcyl9O2UuanFwbG90LkZ1bm5lbFJlbmRlcmVyLnByb3RvdHlwZT1uZXcgZS5qcXBsb3QuTGluZVJlbmRlcmVyKCk7ZS5qcXBsb3QuRnVubmVsUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUuanFwbG90LkZ1bm5lbFJlbmRlcmVyO2UuanFwbG90LkZ1bm5lbFJlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKHAsdCl7dGhpcy5wYWRkaW5nPXt0b3A6MjAscmlnaHQ6MjAsYm90dG9tOjIwLGxlZnQ6MjB9O3RoaXMuc2VjdGlvbk1hcmdpbj02O3RoaXMuZmlsbD10cnVlO3RoaXMuc2hhZG93T2Zmc2V0PTI7dGhpcy5zaGFkb3dBbHBoYT0wLjA3O3RoaXMuc2hhZG93RGVwdGg9NTt0aGlzLmhpZ2hsaWdodE1vdXNlT3Zlcj10cnVlO3RoaXMuaGlnaGxpZ2h0TW91c2VEb3duPWZhbHNlO3RoaXMuaGlnaGxpZ2h0Q29sb3JzPVtdO3RoaXMud2lkdGhSYXRpbz0wLjI7dGhpcy5saW5lV2lkdGg9Mjt0aGlzLmRhdGFMYWJlbHM9InBlcmNlbnQiO3RoaXMuc2hvd0RhdGFMYWJlbHM9ZmFsc2U7dGhpcy5kYXRhTGFiZWxGb3JtYXRTdHJpbmc9bnVsbDt0aGlzLmRhdGFMYWJlbFRocmVzaG9sZD0zO3RoaXMuX3R5cGU9ImZ1bm5lbCI7dGhpcy50aWNrUmVuZGVyZXI9ZS5qcXBsb3QuRnVubmVsVGlja1JlbmRlcmVyO2lmKHAuaGlnaGxpZ2h0TW91c2VEb3duJiZwLmhpZ2hsaWdodE1vdXNlT3Zlcj09bnVsbCl7cC5oaWdobGlnaHRNb3VzZU92ZXI9ZmFsc2V9ZS5leHRlbmQodHJ1ZSx0aGlzLHApO3RoaXMuX2hpZ2hsaWdodGVkUG9pbnQ9bnVsbDt0aGlzLl9iYXNlcz1bXTt0aGlzLl9hdG90O3RoaXMuX2FyZWFzPVtdO3RoaXMuX2xlbmd0aHM9W107dGhpcy5fYW5nbGU7dGhpcy5fZGF0YUluZGljZXM9W107dGhpcy5fdW5vcmRlcmVkRGF0YT1lLmV4dGVuZCh0cnVlLFtdLHRoaXMuZGF0YSk7dmFyIG89ZS5leHRlbmQodHJ1ZSxbXSx0aGlzLmRhdGEpO2Zvcih2YXIgcj0wO3I8by5sZW5ndGg7cisrKXtvW3JdLnB1c2gocil9dGhpcy5kYXRhLnNvcnQoZnVuY3Rpb24odix1KXtyZXR1cm4gdVsxXS12WzFdfSk7by5zb3J0KGZ1bmN0aW9uKHYsdSl7cmV0dXJuIHVbMV0tdlsxXX0pO2Zvcih2YXIgcj0wO3I8by5sZW5ndGg7cisrKXt0aGlzLl9kYXRhSW5kaWNlcy5wdXNoKG9bcl1bMl0pfWlmKHRoaXMuaGlnaGxpZ2h0Q29sb3JzLmxlbmd0aD09MCl7Zm9yKHZhciByPTA7cjx0aGlzLnNlcmllc0NvbG9ycy5sZW5ndGg7cisrKXt2YXIgcT1lLmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHModGhpcy5zZXJpZXNDb2xvcnNbcl0pO3ZhciBtPVtxWzBdLHFbMV0scVsyXV07dmFyIHM9bVswXSttWzFdK21bMl07Zm9yKHZhciBuPTA7bjwzO24rKyl7bVtuXT0ocz41NzApP21bbl0qMC44Om1bbl0rMC40KigyNTUtbVtuXSk7bVtuXT1wYXJzZUludChtW25dLDEwKX10aGlzLmhpZ2hsaWdodENvbG9ycy5wdXNoKCJyZ2IoIittWzBdKyIsIittWzFdKyIsIittWzJdKyIpIil9fXQucG9zdFBhcnNlT3B0aW9uc0hvb2tzLmFkZE9uY2Uoayk7dC5wb3N0SW5pdEhvb2tzLmFkZE9uY2UoZyk7dC5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgianFwbG90TW91c2VNb3ZlIixhKTt0LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RNb3VzZURvd24iLGIpO3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoImpxcGxvdE1vdXNlVXAiLGopO3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoImpxcGxvdENsaWNrIixmKTt0LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RSaWdodENsaWNrIixsKTt0LnBvc3REcmF3SG9va3MuYWRkT25jZShoKX07ZS5qcXBsb3QuRnVubmVsUmVuZGVyZXIucHJvdG90eXBlLnNldEdyaWREYXRhPWZ1bmN0aW9uKG8pe3ZhciBuPTA7dmFyIHA9W107Zm9yKHZhciBtPTA7bTx0aGlzLmRhdGEubGVuZ3RoO20rKyl7bis9dGhpcy5kYXRhW21dWzFdO3AucHVzaChbdGhpcy5kYXRhW21dWzBdLHRoaXMuZGF0YVttXVsxXV0pfWZvcih2YXIgbT0wO208cC5sZW5ndGg7bSsrKXtwW21dWzFdPXBbbV1bMV0vbn10aGlzLl9iYXNlcz1uZXcgQXJyYXkocC5sZW5ndGgrMSk7dGhpcy5fbGVuZ3Rocz1uZXcgQXJyYXkocC5sZW5ndGgpO3RoaXMuZ3JpZERhdGE9cH07ZS5qcXBsb3QuRnVubmVsUmVuZGVyZXIucHJvdG90eXBlLm1ha2VHcmlkRGF0YT1mdW5jdGlvbihvLHApe3ZhciBuPTA7dmFyIHE9W107Zm9yKHZhciBtPTA7bTx0aGlzLmRhdGEubGVuZ3RoO20rKyl7bis9dGhpcy5kYXRhW21dWzFdO3EucHVzaChbdGhpcy5kYXRhW21dWzBdLHRoaXMuZGF0YVttXVsxXV0pfWZvcih2YXIgbT0wO208cS5sZW5ndGg7bSsrKXtxW21dWzFdPXFbbV1bMV0vbn10aGlzLl9iYXNlcz1uZXcgQXJyYXkocS5sZW5ndGgrMSk7dGhpcy5fbGVuZ3Rocz1uZXcgQXJyYXkocS5sZW5ndGgpO3JldHVybiBxfTtlLmpxcGxvdC5GdW5uZWxSZW5kZXJlci5wcm90b3R5cGUuZHJhd1NlY3Rpb249ZnVuY3Rpb24obixwLG8scyl7dmFyIHQ9dGhpcy5maWxsO3ZhciBtPXRoaXMubGluZVdpZHRoO24uc2F2ZSgpO2lmKHMpe2Zvcih2YXIgcj0wO3I8dGhpcy5zaGFkb3dEZXB0aDtyKyspe24uc2F2ZSgpO24udHJhbnNsYXRlKHRoaXMuc2hhZG93T2Zmc2V0Kk1hdGguY29zKHRoaXMuc2hhZG93QW5nbGUvMTgwKk1hdGguUEkpLHRoaXMuc2hhZG93T2Zmc2V0Kk1hdGguc2luKHRoaXMuc2hhZG93QW5nbGUvMTgwKk1hdGguUEkpKTtxKCl9fWVsc2V7cSgpfWZ1bmN0aW9uIHEoKXtuLmJlZ2luUGF0aCgpO24uZmlsbFN0eWxlPW87bi5zdHJva2VTdHlsZT1vO24ubGluZVdpZHRoPW07bi5tb3ZlVG8ocFswXVswXSxwWzBdWzFdKTtmb3IodmFyIHU9MTt1PDQ7dSsrKXtuLmxpbmVUbyhwW3VdWzBdLHBbdV1bMV0pfW4uY2xvc2VQYXRoKCk7aWYodCl7bi5maWxsKCl9ZWxzZXtuLnN0cm9rZSgpfX1pZihzKXtmb3IodmFyIHI9MDtyPHRoaXMuc2hhZG93RGVwdGg7cisrKXtuLnJlc3RvcmUoKX19bi5yZXN0b3JlKCl9O2UuanFwbG90LkZ1bm5lbFJlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKEcsQixKLHApe3ZhciBZO3ZhciBMPShKIT11bmRlZmluZWQpP0o6e307dmFyIHc9MDt2YXIgdT0wO3ZhciBSPTE7dGhpcy5fYXJlYXM9W107aWYoSi5sZWdlbmRJbmZvJiZKLmxlZ2VuZEluZm8ucGxhY2VtZW50PT0iaW5zaWRlR3JpZCIpe3ZhciBPPUoubGVnZW5kSW5mbztzd2l0Y2goTy5sb2NhdGlvbil7Y2FzZSJudyI6dz1PLndpZHRoK08ueG9mZnNldDticmVhaztjYXNlInciOnc9Ty53aWR0aCtPLnhvZmZzZXQ7YnJlYWs7Y2FzZSJzdyI6dz1PLndpZHRoK08ueG9mZnNldDticmVhaztjYXNlIm5lIjp3PU8ud2lkdGgrTy54b2Zmc2V0O1I9LTE7YnJlYWs7Y2FzZSJlIjp3PU8ud2lkdGgrTy54b2Zmc2V0O1I9LTE7YnJlYWs7Y2FzZSJzZSI6dz1PLndpZHRoK08ueG9mZnNldDtSPS0xO2JyZWFrO2Nhc2UibiI6dT1PLmhlaWdodCtPLnlvZmZzZXQ7YnJlYWs7Y2FzZSJzIjp1PU8uaGVpZ2h0K08ueW9mZnNldDtSPS0xO2JyZWFrO2RlZmF1bHQ6YnJlYWt9fXZhciB0PShSPT0xKT90aGlzLnBhZGRpbmcubGVmdCt3OnRoaXMucGFkZGluZy5sZWZ0O3ZhciBGPShSPT0xKT90aGlzLnBhZGRpbmcudG9wK3U6dGhpcy5wYWRkaW5nLnRvcDt2YXIgTT0oUj09LTEpP3RoaXMucGFkZGluZy5yaWdodCt3OnRoaXMucGFkZGluZy5yaWdodDt2YXIgbz0oUj09LTEpP3RoaXMucGFkZGluZy5ib3R0b20rdTp0aGlzLnBhZGRpbmcuYm90dG9tO3ZhciBQPShMLnNoYWRvdyE9dW5kZWZpbmVkKT9MLnNoYWRvdzp0aGlzLnNoYWRvdzt2YXIgcT0oTC5zaG93TGluZSE9dW5kZWZpbmVkKT9MLnNob3dMaW5lOnRoaXMuc2hvd0xpbmU7dmFyIEM9KEwuZmlsbCE9dW5kZWZpbmVkKT9MLmZpbGw6dGhpcy5maWxsO3ZhciBIPUcuY2FudmFzLndpZHRoO3ZhciBOPUcuY2FudmFzLmhlaWdodDt0aGlzLl9iYXNlc1swXT1ILXQtTTt2YXIgST10aGlzLl9sZW5ndGg9Ti1GLW87dmFyIHI9dGhpcy5fYmFzZXNbMF0qdGhpcy53aWR0aFJhdGlvO3RoaXMuX2F0b3Q9SS8yKih0aGlzLl9iYXNlc1swXSt0aGlzLl9iYXNlc1swXSp0aGlzLndpZHRoUmF0aW8pO3RoaXMuX2FuZ2xlPU1hdGguYXRhbigodGhpcy5fYmFzZXNbMF0tcikvMi9JKTtmb3IoWT0wO1k8Qi5sZW5ndGg7WSsrKXt0aGlzLl9hcmVhcy5wdXNoKEJbWV1bMV0qdGhpcy5fYXRvdCl9dmFyIEUsYWEsVyxRPTA7dmFyIG49MC4wMDAxO2ZvcihZPTA7WTx0aGlzLl9hcmVhcy5sZW5ndGg7WSsrKXtFPXRoaXMuX2FyZWFzW1ldL3RoaXMuX2Jhc2VzW1ldO2FhPTk5OTk5OTt0aGlzLl9sZW5ndGhzW1ldPUU7Vz0wO3doaWxlKGFhPnRoaXMuX2xlbmd0aHNbWV0qbiYmVzwxMDApe3RoaXMuX2xlbmd0aHNbWV09dGhpcy5fYXJlYXNbWV0vKHRoaXMuX2Jhc2VzW1ldLXRoaXMuX2xlbmd0aHNbWV0qTWF0aC50YW4odGhpcy5fYW5nbGUpKTthYT1NYXRoLmFicyh0aGlzLl9sZW5ndGhzW1ldLUUpO3RoaXMuX2Jhc2VzW1krMV09dGhpcy5fYmFzZXNbWV0tKDIqdGhpcy5fbGVuZ3Roc1tZXSpNYXRoLnRhbih0aGlzLl9hbmdsZSkpO0U9dGhpcy5fbGVuZ3Roc1tZXTtXKyt9USs9dGhpcy5fbGVuZ3Roc1tZXX10aGlzLl92ZXJ0aWNlcz1uZXcgQXJyYXkoQi5sZW5ndGgpO3ZhciBhZT1bdCxGXSxhZD1bdCt0aGlzLl9iYXNlc1swXSxGXSxhYz1bdCsodGhpcy5fYmFzZXNbMF0tdGhpcy5fYmFzZXNbdGhpcy5fYmFzZXMubGVuZ3RoLTFdKS8yLEYrdGhpcy5fbGVuZ3RoXSxhYj1bYWNbMF0rdGhpcy5fYmFzZXNbdGhpcy5fYmFzZXMubGVuZ3RoLTFdLGFjWzFdXTtmdW5jdGlvbiBWKGFnKXt2YXIgeD0oYWVbMV0tYWNbMV0pLyhhZVswXS1hY1swXSk7dmFyIHY9YWVbMV0teCphZVswXTt2YXIgYWg9YWcrYWVbMV07cmV0dXJuWyhhaC12KS94LGFoXX1mdW5jdGlvbiBEKGFnKXt2YXIgeD0oYWRbMV0tYWJbMV0pLyhhZFswXS1hYlswXSk7dmFyIHY9YWRbMV0teCphZFswXTt2YXIgYWg9YWcrYWRbMV07cmV0dXJuWyhhaC12KS94LGFoXX12YXIgVD13LFM9dTt2YXIgWj0wLG09MDtmb3IoWT0wO1k8Qi5sZW5ndGg7WSsrKXt0aGlzLl92ZXJ0aWNlc1tZXT1uZXcgQXJyYXkoKTt2YXIgVT10aGlzLl92ZXJ0aWNlc1tZXTt2YXIgQT10aGlzLnNlY3Rpb25NYXJnaW47aWYoWT09MCl7bT0wfWlmKFk9PTEpe209QS8zfWVsc2V7aWYoWT4wJiZZPEIubGVuZ3RoLTEpe209QS8yfWVsc2V7aWYoWT09Qi5sZW5ndGgtMSl7bT0yKkEvM319fVUucHVzaChWKForbSkpO1UucHVzaChEKForbSkpO1orPXRoaXMuX2xlbmd0aHNbWV07aWYoWT09MCl7bT0tMipBLzN9ZWxzZXtpZihZPjAmJlk8Qi5sZW5ndGgtMSl7bT0tQS8yfWVsc2V7aWYoWT09Qi5sZW5ndGgtMSl7bT0wfX19VS5wdXNoKEQoWittKSk7VS5wdXNoKFYoWittKSl9aWYodGhpcy5zaGFkb3cpe3ZhciBhZj0icmdiYSgwLDAsMCwiK3RoaXMuc2hhZG93QWxwaGErIikiO2Zvcih2YXIgWT0wO1k8Qi5sZW5ndGg7WSsrKXt0aGlzLnJlbmRlcmVyLmRyYXdTZWN0aW9uLmNhbGwodGhpcyxHLHRoaXMuX3ZlcnRpY2VzW1ldLGFmLHRydWUpfX1mb3IodmFyIFk9MDtZPEIubGVuZ3RoO1krKyl7dmFyIFU9dGhpcy5fdmVydGljZXNbWV07dGhpcy5yZW5kZXJlci5kcmF3U2VjdGlvbi5jYWxsKHRoaXMsRyxVLHRoaXMuc2VyaWVzQ29sb3JzW1ldKTtpZih0aGlzLnNob3dEYXRhTGFiZWxzJiZCW1ldWzFdKjEwMD49dGhpcy5kYXRhTGFiZWxUaHJlc2hvbGQpe3ZhciBLLFg7aWYodGhpcy5kYXRhTGFiZWxzPT0ibGFiZWwiKXtLPXRoaXMuZGF0YUxhYmVsRm9ybWF0U3RyaW5nfHwiJXMiO1g9ZS5qcXBsb3Quc3ByaW50ZihLLEJbWV1bMF0pfWVsc2V7aWYodGhpcy5kYXRhTGFiZWxzPT0idmFsdWUiKXtLPXRoaXMuZGF0YUxhYmVsRm9ybWF0U3RyaW5nfHwiJWQiO1g9ZS5qcXBsb3Quc3ByaW50ZihLLHRoaXMuZGF0YVtZXVsxXSl9ZWxzZXtpZih0aGlzLmRhdGFMYWJlbHM9PSJwZXJjZW50Iil7Sz10aGlzLmRhdGFMYWJlbEZvcm1hdFN0cmluZ3x8IiVkJSUiO1g9ZS5qcXBsb3Quc3ByaW50ZihLLEJbWV1bMV0qMTAwKX1lbHNle2lmKHRoaXMuZGF0YUxhYmVscy5jb25zdHJ1Y3Rvcj09QXJyYXkpe0s9dGhpcy5kYXRhTGFiZWxGb3JtYXRTdHJpbmd8fCIlcyI7WD1lLmpxcGxvdC5zcHJpbnRmKEssdGhpcy5kYXRhTGFiZWxzW3RoaXMuX2RhdGFJbmRpY2VzW1ldXSl9fX19dmFyIHM9KHRoaXMuX3JhZGl1cykqdGhpcy5kYXRhTGFiZWxQb3NpdGlvbkZhY3Rvcit0aGlzLnNsaWNlTWFyZ2luK3RoaXMuZGF0YUxhYmVsTnVkZ2U7dmFyIFQ9KFVbMF1bMF0rVVsxXVswXSkvMit0aGlzLmNhbnZhcy5fb2Zmc2V0cy5sZWZ0O3ZhciBTPShVWzFdWzFdK1VbMl1bMV0pLzIrdGhpcy5jYW52YXMuX29mZnNldHMudG9wO3ZhciB6PWUoJzxzcGFuIGNsYXNzPSJqcXBsb3QtZnVubmVsLXNlcmllcyBqcXBsb3QtZGF0YS1sYWJlbCIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyI+JytYKyI8L3NwYW4+IikuaW5zZXJ0QmVmb3JlKHAuZXZlbnRDYW52YXMuX2VsZW0pO1QtPXoud2lkdGgoKS8yO1MtPXouaGVpZ2h0KCkvMjtUPU1hdGgucm91bmQoVCk7Uz1NYXRoLnJvdW5kKFMpO3ouY3NzKHtsZWZ0OlQsdG9wOlN9KX19fTtlLmpxcGxvdC5GdW5uZWxBeGlzUmVuZGVyZXI9ZnVuY3Rpb24oKXtlLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIuY2FsbCh0aGlzKX07ZS5qcXBsb3QuRnVubmVsQXhpc1JlbmRlcmVyLnByb3RvdHlwZT1uZXcgZS5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyKCk7ZS5qcXBsb3QuRnVubmVsQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLmpxcGxvdC5GdW5uZWxBeGlzUmVuZGVyZXI7ZS5qcXBsb3QuRnVubmVsQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKG0pe3RoaXMudGlja1JlbmRlcmVyPWUuanFwbG90LkZ1bm5lbFRpY2tSZW5kZXJlcjtlLmV4dGVuZCh0cnVlLHRoaXMsbSk7dGhpcy5fZGF0YUJvdW5kcz17bWluOjAsbWF4OjEwMH07dGhpcy5taW49MDt0aGlzLm1heD0xMDA7dGhpcy5zaG93VGlja3M9ZmFsc2U7dGhpcy50aWNrcz1bXTt0aGlzLnNob3dNYXJrPWZhbHNlO3RoaXMuc2hvdz1mYWxzZX07ZS5qcXBsb3QuRnVubmVsTGVnZW5kUmVuZGVyZXI9ZnVuY3Rpb24oKXtlLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyLmNhbGwodGhpcyl9O2UuanFwbG90LkZ1bm5lbExlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZT1uZXcgZS5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlcigpO2UuanFwbG90LkZ1bm5lbExlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLmpxcGxvdC5GdW5uZWxMZWdlbmRSZW5kZXJlcjtlLmpxcGxvdC5GdW5uZWxMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihtKXt0aGlzLm51bWJlclJvd3M9bnVsbDt0aGlzLm51bWJlckNvbHVtbnM9bnVsbDtlLmV4dGVuZCh0cnVlLHRoaXMsbSl9O2UuanFwbG90LkZ1bm5lbExlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7dmFyIHA9dGhpcztpZih0aGlzLnNob3cpe3ZhciB4PXRoaXMuX3Nlcmllczt2YXIgQT0icG9zaXRpb246YWJzb2x1dGU7IjtBKz0odGhpcy5iYWNrZ3JvdW5kKT8iYmFja2dyb3VuZDoiK3RoaXMuYmFja2dyb3VuZCsiOyI6IiI7QSs9KHRoaXMuYm9yZGVyKT8iYm9yZGVyOiIrdGhpcy5ib3JkZXIrIjsiOiIiO0ErPSh0aGlzLmZvbnRTaXplKT8iZm9udC1zaXplOiIrdGhpcy5mb250U2l6ZSsiOyI6IiI7QSs9KHRoaXMuZm9udEZhbWlseSk/ImZvbnQtZmFtaWx5OiIrdGhpcy5mb250RmFtaWx5KyI7IjoiIjtBKz0odGhpcy50ZXh0Q29sb3IpPyJjb2xvcjoiK3RoaXMudGV4dENvbG9yKyI7IjoiIjtBKz0odGhpcy5tYXJnaW5Ub3AhPW51bGwpPyJtYXJnaW4tdG9wOiIrdGhpcy5tYXJnaW5Ub3ArIjsiOiIiO0ErPSh0aGlzLm1hcmdpbkJvdHRvbSE9bnVsbCk/Im1hcmdpbi1ib3R0b206Iit0aGlzLm1hcmdpbkJvdHRvbSsiOyI6IiI7QSs9KHRoaXMubWFyZ2luTGVmdCE9bnVsbCk/Im1hcmdpbi1sZWZ0OiIrdGhpcy5tYXJnaW5MZWZ0KyI7IjoiIjtBKz0odGhpcy5tYXJnaW5SaWdodCE9bnVsbCk/Im1hcmdpbi1yaWdodDoiK3RoaXMubWFyZ2luUmlnaHQrIjsiOiIiO3RoaXMuX2VsZW09ZSgnPHRhYmxlIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIiBzdHlsZT0iJytBKyciPjwvdGFibGU+Jyk7dmFyIEU9ZmFsc2Usdz1mYWxzZSxtLHU7dmFyIHk9eFswXTt2YXIgbj1uZXcgZS5qcXBsb3QuQ29sb3JHZW5lcmF0b3IoeS5zZXJpZXNDb2xvcnMpO2lmKHkuc2hvdyl7dmFyIEY9eS5kYXRhO2lmKHRoaXMubnVtYmVyUm93cyl7bT10aGlzLm51bWJlclJvd3M7aWYoIXRoaXMubnVtYmVyQ29sdW1ucyl7dT1NYXRoLmNlaWwoRi5sZW5ndGgvbSl9ZWxzZXt1PXRoaXMubnVtYmVyQ29sdW1uc319ZWxzZXtpZih0aGlzLm51bWJlckNvbHVtbnMpe3U9dGhpcy5udW1iZXJDb2x1bW5zO209TWF0aC5jZWlsKEYubGVuZ3RoL3RoaXMubnVtYmVyQ29sdW1ucyl9ZWxzZXttPUYubGVuZ3RoO3U9MX19dmFyIEQsQyxvLHIscSx0LHYsQjt2YXIgej0wO2ZvcihEPTA7RDxtO0QrKyl7aWYodyl7bz1lKCc8dHIgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiPjwvdHI+JykucHJlcGVuZFRvKHRoaXMuX2VsZW0pfWVsc2V7bz1lKCc8dHIgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiPjwvdHI+JykuYXBwZW5kVG8odGhpcy5fZWxlbSl9Zm9yKEM9MDtDPHU7QysrKXtpZih6PEYubGVuZ3RoKXt0PXRoaXMubGFiZWxzW3pdfHxGW3pdWzBdLnRvU3RyaW5nKCk7Qj1uLm5leHQoKTtpZighdyl7aWYoRD4wKXtFPXRydWV9ZWxzZXtFPWZhbHNlfX1lbHNle2lmKEQ9PW0tMSl7RT1mYWxzZX1lbHNle0U9dHJ1ZX19dj0oRSk/dGhpcy5yb3dTcGFjaW5nOiIwIjtyPWUoJzx0ZCBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmctdG9wOicrdisnOyI+PGRpdj48ZGl2IGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kLXN3YXRjaCIgc3R5bGU9ImJvcmRlci1jb2xvcjonK0IrJzsiPjwvZGl2PjwvZGl2PjwvdGQ+Jyk7cT1lKCc8dGQgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiIHN0eWxlPSJwYWRkaW5nLXRvcDonK3YrJzsiPjwvdGQ+Jyk7aWYodGhpcy5lc2NhcGVIdG1sKXtxLnRleHQodCl9ZWxzZXtxLmh0bWwodCl9aWYodyl7cS5wcmVwZW5kVG8obyk7ci5wcmVwZW5kVG8obyl9ZWxzZXtyLmFwcGVuZFRvKG8pO3EuYXBwZW5kVG8obyl9RT10cnVlfXorK319fX1yZXR1cm4gdGhpcy5fZWxlbX07ZnVuY3Rpb24gYyhxLHAsbil7bj1ufHx7fTtuLmF4ZXNEZWZhdWx0cz1uLmF4ZXNEZWZhdWx0c3x8e307bi5sZWdlbmQ9bi5sZWdlbmR8fHt9O24uc2VyaWVzRGVmYXVsdHM9bi5zZXJpZXNEZWZhdWx0c3x8e307dmFyIG09ZmFsc2U7aWYobi5zZXJpZXNEZWZhdWx0cy5yZW5kZXJlcj09ZS5qcXBsb3QuRnVubmVsUmVuZGVyZXIpe209dHJ1ZX1lbHNle2lmKG4uc2VyaWVzKXtmb3IodmFyIG89MDtvPG4uc2VyaWVzLmxlbmd0aDtvKyspe2lmKG4uc2VyaWVzW29dLnJlbmRlcmVyPT1lLmpxcGxvdC5GdW5uZWxSZW5kZXJlcil7bT10cnVlfX19fWlmKG0pe24uYXhlc0RlZmF1bHRzLnJlbmRlcmVyPWUuanFwbG90LkZ1bm5lbEF4aXNSZW5kZXJlcjtuLmxlZ2VuZC5yZW5kZXJlcj1lLmpxcGxvdC5GdW5uZWxMZWdlbmRSZW5kZXJlcjtuLmxlZ2VuZC5wcmVEcmF3PXRydWU7bi5zb3J0RGF0YT1mYWxzZTtuLnNlcmllc0RlZmF1bHRzLnBvaW50TGFiZWxzPXtzaG93OmZhbHNlfX19ZnVuY3Rpb24gZyhwLG8sbSl7Zm9yKHZhciBuPTA7bjx0aGlzLnNlcmllcy5sZW5ndGg7bisrKXtpZih0aGlzLnNlcmllc1tuXS5yZW5kZXJlci5jb25zdHJ1Y3Rvcj09ZS5qcXBsb3QuRnVubmVsUmVuZGVyZXIpe2lmKHRoaXMuc2VyaWVzW25dLmhpZ2hsaWdodE1vdXNlT3Zlcil7dGhpcy5zZXJpZXNbbl0uaGlnaGxpZ2h0TW91c2VEb3duPWZhbHNlfX19fWZ1bmN0aW9uIGsobSl7Zm9yKHZhciBuPTA7bjx0aGlzLnNlcmllcy5sZW5ndGg7bisrKXt0aGlzLnNlcmllc1tuXS5zZXJpZXNDb2xvcnM9dGhpcy5zZXJpZXNDb2xvcnM7dGhpcy5zZXJpZXNbbl0uY29sb3JHZW5lcmF0b3I9ZS5qcXBsb3QuY29sb3JHZW5lcmF0b3J9fWZ1bmN0aW9uIGQocSxwLG8pe3ZhciBuPXEuc2VyaWVzW3BdO3ZhciBtPXEucGx1Z2lucy5mdW5uZWxSZW5kZXJlci5oaWdobGlnaHRDYW52YXM7bS5fY3R4LmNsZWFyUmVjdCgwLDAsbS5fY3R4LmNhbnZhcy53aWR0aCxtLl9jdHguY2FudmFzLmhlaWdodCk7bi5faGlnaGxpZ2h0ZWRQb2ludD1vO3EucGx1Z2lucy5mdW5uZWxSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4PXA7bi5yZW5kZXJlci5kcmF3U2VjdGlvbi5jYWxsKG4sbS5fY3R4LG4uX3ZlcnRpY2VzW29dLG4uaGlnaGxpZ2h0Q29sb3JzW29dLGZhbHNlKX1mdW5jdGlvbiBpKG8pe3ZhciBtPW8ucGx1Z2lucy5mdW5uZWxSZW5kZXJlci5oaWdobGlnaHRDYW52YXM7bS5fY3R4LmNsZWFyUmVjdCgwLDAsbS5fY3R4LmNhbnZhcy53aWR0aCxtLl9jdHguY2FudmFzLmhlaWdodCk7Zm9yKHZhciBuPTA7bjxvLnNlcmllcy5sZW5ndGg7bisrKXtvLnNlcmllc1tuXS5faGlnaGxpZ2h0ZWRQb2ludD1udWxsfW8ucGx1Z2lucy5mdW5uZWxSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4PW51bGw7by50YXJnZXQudHJpZ2dlcigianFwbG90RGF0YVVuaGlnaGxpZ2h0Iil9ZnVuY3Rpb24gYShxLHAsdCxzLHIpe2lmKHMpe3ZhciBvPVtzLnNlcmllc0luZGV4LHMucG9pbnRJbmRleCxzLmRhdGFdO3ZhciBuPWpRdWVyeS5FdmVudCgianFwbG90RGF0YU1vdXNlT3ZlciIpO24ucGFnZVg9cS5wYWdlWDtuLnBhZ2VZPXEucGFnZVk7ci50YXJnZXQudHJpZ2dlcihuLG8pO2lmKHIuc2VyaWVzW29bMF1dLmhpZ2hsaWdodE1vdXNlT3ZlciYmIShvWzBdPT1yLnBsdWdpbnMuZnVubmVsUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCYmb1sxXT09ci5zZXJpZXNbb1swXV0uX2hpZ2hsaWdodGVkUG9pbnQpKXt2YXIgbT1qUXVlcnkuRXZlbnQoImpxcGxvdERhdGFIaWdobGlnaHQiKTttLndoaWNoPXEud2hpY2g7bS5wYWdlWD1xLnBhZ2VYO20ucGFnZVk9cS5wYWdlWTtyLnRhcmdldC50cmlnZ2VyKG0sbyk7ZChyLG9bMF0sb1sxXSl9fWVsc2V7aWYocz09bnVsbCl7aShyKX19fWZ1bmN0aW9uIGIocCxvLHMscixxKXtpZihyKXt2YXIgbj1bci5zZXJpZXNJbmRleCxyLnBvaW50SW5kZXgsci5kYXRhXTtpZihxLnNlcmllc1tuWzBdXS5oaWdobGlnaHRNb3VzZURvd24mJiEoblswXT09cS5wbHVnaW5zLmZ1bm5lbFJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXgmJm5bMV09PXEuc2VyaWVzW25bMF1dLl9oaWdobGlnaHRlZFBvaW50KSl7dmFyIG09alF1ZXJ5LkV2ZW50KCJqcXBsb3REYXRhSGlnaGxpZ2h0Iik7bS53aGljaD1wLndoaWNoO20ucGFnZVg9cC5wYWdlWDttLnBhZ2VZPXAucGFnZVk7cS50YXJnZXQudHJpZ2dlcihtLG4pO2QocSxuWzBdLG5bMV0pfX1lbHNle2lmKHI9PW51bGwpe2kocSl9fX1mdW5jdGlvbiBqKG8sbixyLHEscCl7dmFyIG09cC5wbHVnaW5zLmZ1bm5lbFJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg7aWYobSE9bnVsbCYmcC5zZXJpZXNbbV0uaGlnaGxpZ2h0TW91c2VEb3duKXtpKHApfX1mdW5jdGlvbiBmKHAsbyxzLHIscSl7aWYocil7dmFyIG49W3Iuc2VyaWVzSW5kZXgsci5wb2ludEluZGV4LHIuZGF0YV07dmFyIG09alF1ZXJ5LkV2ZW50KCJqcXBsb3REYXRhQ2xpY2siKTttLndoaWNoPXAud2hpY2g7bS5wYWdlWD1wLnBhZ2VYO20ucGFnZVk9cC5wYWdlWTtxLnRhcmdldC50cmlnZ2VyKG0sbil9fWZ1bmN0aW9uIGwocSxwLHQscyxyKXtpZihzKXt2YXIgbz1bcy5zZXJpZXNJbmRleCxzLnBvaW50SW5kZXgscy5kYXRhXTt2YXIgbT1yLnBsdWdpbnMuZnVubmVsUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDtpZihtIT1udWxsJiZyLnNlcmllc1ttXS5oaWdobGlnaHRNb3VzZURvd24pe2kocil9dmFyIG49alF1ZXJ5LkV2ZW50KCJqcXBsb3REYXRhUmlnaHRDbGljayIpO24ud2hpY2g9cS53aGljaDtuLnBhZ2VYPXEucGFnZVg7bi5wYWdlWT1xLnBhZ2VZO3IudGFyZ2V0LnRyaWdnZXIobixvKX19ZnVuY3Rpb24gaCgpe2lmKHRoaXMucGx1Z2lucy5mdW5uZWxSZW5kZXJlciYmdGhpcy5wbHVnaW5zLmZ1bm5lbFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcyl7dGhpcy5wbHVnaW5zLmZ1bm5lbFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5yZXNldENhbnZhcygpO3RoaXMucGx1Z2lucy5mdW5uZWxSZW5kZXJlci5oaWdobGlnaHRDYW52YXM9bnVsbH10aGlzLnBsdWdpbnMuZnVubmVsUmVuZGVyZXI9e307dGhpcy5wbHVnaW5zLmZ1bm5lbFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcz1uZXcgZS5qcXBsb3QuR2VuZXJpY0NhbnZhcygpO3ZhciBuPWUodGhpcy50YXJnZXRJZCsiIC5qcXBsb3QtZGF0YS1sYWJlbCIpO2lmKG4ubGVuZ3RoKXtlKG5bMF0pLmJlZm9yZSh0aGlzLnBsdWdpbnMuZnVubmVsUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsImpxcGxvdC1mdW5uZWxSZW5kZXJlci1oaWdobGlnaHQtY2FudmFzIix0aGlzLl9wbG90RGltZW5zaW9ucyx0aGlzKSl9ZWxzZXt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZSh0aGlzLnBsdWdpbnMuZnVubmVsUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsImpxcGxvdC1mdW5uZWxSZW5kZXJlci1oaWdobGlnaHQtY2FudmFzIix0aGlzLl9wbG90RGltZW5zaW9ucyx0aGlzKSl9dmFyIG09dGhpcy5wbHVnaW5zLmZ1bm5lbFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5zZXRDb250ZXh0KCk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCJtb3VzZWxlYXZlIix7cGxvdDp0aGlzfSxmdW5jdGlvbihvKXtpKG8uZGF0YS5wbG90KX0pfWUuanFwbG90LnByZUluaXRIb29rcy5wdXNoKGMpO2UuanFwbG90LkZ1bm5lbFRpY2tSZW5kZXJlcj1mdW5jdGlvbigpe2UuanFwbG90LkF4aXNUaWNrUmVuZGVyZXIuY2FsbCh0aGlzKX07ZS5qcXBsb3QuRnVubmVsVGlja1JlbmRlcmVyLnByb3RvdHlwZT1uZXcgZS5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlcigpO2UuanFwbG90LkZ1bm5lbFRpY2tSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3I9ZS5qcXBsb3QuRnVubmVsVGlja1JlbmRlcmVyfSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.highlighter.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgJC5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLnB1c2goWydqcXBsb3RNb3VzZU1vdmUnLCBoYW5kbGVNb3ZlXSk7CiAgICAKICAgIC8qKgogICAgICogQ2xhc3M6ICQuanFwbG90LkhpZ2hsaWdodGVyCiAgICAgKiBQbHVnaW4gd2hpY2ggd2lsbCBoaWdobGlnaHQgZGF0YSBwb2ludHMgd2hlbiB0aGV5IGFyZSBtb3VzZWQgb3Zlci4KICAgICAqIAogICAgICogVG8gdXNlIHRoaXMgcGx1Z2luLCBpbmNsdWRlIHRoZSBqcwogICAgICogZmlsZSBpbiB5b3VyIHNvdXJjZToKICAgICAqIAogICAgICogPiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJwbHVnaW5zL2pxcGxvdC5oaWdobGlnaHRlci5qcyI+PC9zY3JpcHQ+CiAgICAgKiAKICAgICAqIEEgdG9vbHRpcCBwcm92aWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRhdGEgcG9pbnQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgogICAgICogVG8gZGlzYWJsZSB0aGUgdG9vbHRpcCwgc2V0ICJzaG93VG9vbHRpcCIgdG8gZmFsc2UuCiAgICAgKiAKICAgICAqIFlvdSBjYW4gY29udHJvbCB3aGF0IGRhdGEgaXMgZGlzcGxheWVkIGluIHRoZSB0b29sdGlwIHdpdGggdmFyaW91cwogICAgICogb3B0aW9ucy4gIFRoZSAidG9vbHRpcEF4ZXMiIG9wdGlvbiBjb250cm9scyB3aGV0aGVyIHRoZSB4LCB5IG9yIGJvdGgKICAgICAqIGRhdGEgdmFsdWVzIGFyZSBkaXNwbGF5ZWQuCiAgICAgKiAKICAgICAqIFNvbWUgY2hhcnQgdHlwZXMgKGUuZy4gaGktbG93LWNsb3NlKSBoYXZlIG1vcmUgdGhhbiBvbmUgeSB2YWx1ZSBwZXIKICAgICAqIGRhdGEgcG9pbnQuIFRvIGRpc3BsYXkgdGhlIGFkZGl0aW9uYWwgdmFsdWVzIGluIHRoZSB0b29sdGlwLCBzZXQgdGhlCiAgICAgKiAieXZhbHVlcyIgb3B0aW9uIHRvIHRoZSBkZXNpcmVkIG51bWJlciBvZiB5IHZhbHVlcyBwcmVzZW50ICgzIGZvciBhIGhsYyBjaGFydCkuCiAgICAgKiAKICAgICAqIEJ5IGRlZmF1bHQsIGRhdGEgdmFsdWVzIHdpbGwgYmUgZm9ybWF0dGVkIHdpdGggdGhlIHNhbWUgZm9ybWF0dGluZwogICAgICogc3BlY2lmaWVycyBhcyB1c2VkIHRvIGZvcm1hdCB0aGUgYXhpcyB0aWNrcy4gIEEgY3VzdG9tIGZvcm1hdCBjb2RlCiAgICAgKiBjYW4gYmUgc3VwcGxpZWQgd2l0aCB0aGUgdG9vbHRpcEZvcm1hdFN0cmluZyBvcHRpb24uICBUaGlzIHdpbGwgYXBwbHkgCiAgICAgKiB0byBhbGwgdmFsdWVzIGluIHRoZSB0b29sdGlwLiAgCiAgICAgKiAKICAgICAqIEZvciBtb3JlIGNvbXBsZXRlIGNvbnRyb2wsIHRoZSAiZm9ybWF0U3RyaW5nIiBvcHRpb24gY2FuIGJlIHNldC4gIFRoaXMKICAgICAqIEFsbG93cyBjb25wbGV0ZSBjb250cm9sIG92ZXIgdG9vbHRpcCBmb3JtYXR0aW5nLiAgVmFsdWVzIGFyZSBwYXNzZWQgdG8KICAgICAqIHRoZSBmb3JtYXQgc3RyaW5nIGluIGFuIG9yZGVyIGRldGVybWluZWQgYnkgdGhlICJ0b29sdGlwQXhlcyIgYW5kICJ5dmFsdWVzIgogICAgICogb3B0aW9ucy4gIFNvLCBpZiB5b3UgaGF2ZSBhIGhpLWxvdy1jbG9zZSBjaGFydCBhbmQgeW91IGp1c3Qgd2FudCB0byBkaXNwbGF5IAogICAgICogdGhlIGhpLWxvdy1jbG9zZSB2YWx1ZXMgaW4gdGhlIHRvb2x0aXAsIHlvdSBjb3VsZCBzZXQgYSBmb3JtYXRTdHJpbmcgbGlrZToKICAgICAqIAogICAgICogPiBoaWdobGlnaHRlcjogewogICAgICogPiAgICAgdG9vbHRpcEF4ZXM6ICd5JywKICAgICAqID4gICAgIHl2YWx1ZXM6IDMsCiAgICAgKiA+ICAgICBmb3JtYXRTdHJpbmc6Jzx0YWJsZSBjbGFzcz0ianFwbG90LWhpZ2hsaWdodGVyIj4KICAgICAqID4gICAgICAgICA8dHI+PHRkPmhpOjwvdGQ+PHRkPiVzPC90ZD48L3RyPgogICAgICogPiAgICAgICAgIDx0cj48dGQ+bG93OjwvdGQ+PHRkPiVzPC90ZD48L3RyPgogICAgICogPiAgICAgICAgIDx0cj48dGQ+Y2xvc2U6PC90ZD48dGQ+JXM8L3RkPjwvdHI+PC90YWJsZT4nCiAgICAgKiA+IH0KICAgICAqIAogICAgICovCiAgICAkLmpxcGxvdC5IaWdobGlnaHRlciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAvLyBHcm91cDogUHJvcGVydGllcwogICAgICAgIC8vCiAgICAgICAgLy9wcm9wOiBzaG93CiAgICAgICAgLy8gdHJ1ZSB0byBzaG93IHRoZSBoaWdobGlnaHQuCiAgICAgICAgdGhpcy5zaG93ID0gJC5qcXBsb3QuY29uZmlnLmVuYWJsZVBsdWdpbnM7CiAgICAgICAgLy8gcHJvcDogbWFya2VyUmVuZGVyZXIKICAgICAgICAvLyBSZW5kZXJlciB1c2VkIHRvIGRyYXcgdGhlIG1hcmtlciBvZiB0aGUgaGlnaGxpZ2h0ZWQgcG9pbnQuCiAgICAgICAgLy8gUmVuZGVyZXIgd2lsbCBhc3NpbWlsYXRlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgZGF0YSBwb2ludCBiZWluZyBoaWdobGlnaHRlZCwKICAgICAgICAvLyBzbyBubyBhdHRyaWJ1dGVzIG5lZWQgc2V0IG9uIHRoZSByZW5kZXJlciBkaXJlY3RseS4KICAgICAgICAvLyBEZWZhdWx0IGlzIHRvIHR1cm4gb2ZmIHNoYWRvdyBkcmF3aW5nIG9uIHRoZSBoaWdobGlnaHRlZCBwb2ludC4KICAgICAgICB0aGlzLm1hcmtlclJlbmRlcmVyID0gbmV3ICQuanFwbG90Lk1hcmtlclJlbmRlcmVyKHtzaGFkb3c6ZmFsc2V9KTsKICAgICAgICAvLyBwcm9wOiBzaG93TWFya2VyCiAgICAgICAgLy8gdHJ1ZSB0byBzaG93IHRoZSBtYXJrZXIKICAgICAgICB0aGlzLnNob3dNYXJrZXIgID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBsaW5lV2lkdGhBZGp1c3QKICAgICAgICAvLyBQaXhlbHMgdG8gYWRkIHRvIHRoZSBsaW5lV2lkdGggb2YgdGhlIGhpZ2hsaWdodC4KICAgICAgICB0aGlzLmxpbmVXaWR0aEFkanVzdCA9IDIuNTsKICAgICAgICAvLyBwcm9wOiBzaXplQWRqdXN0CiAgICAgICAgLy8gUGl4ZWxzIHRvIGFkZCB0byB0aGUgb3ZlcmFsbCBzaXplIG9mIHRoZSBoaWdobGlnaHQuCiAgICAgICAgdGhpcy5zaXplQWRqdXN0ID0gNTsKICAgICAgICAvLyBwcm9wOiBzaG93VG9vbHRpcAogICAgICAgIC8vIFNob3cgYSB0b29sdGlwIHdpdGggZGF0YSBwb2ludCB2YWx1ZXMuCiAgICAgICAgdGhpcy5zaG93VG9vbHRpcCA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogdG9vbHRpcExvY2F0aW9uCiAgICAgICAgLy8gV2hlcmUgdG8gcG9zaXRpb24gdG9vbHRpcCwgJ24nLCAnbmUnLCAnZScsICdzZScsICdzJywgJ3N3JywgJ3cnLCAnbncnCiAgICAgICAgdGhpcy50b29sdGlwTG9jYXRpb24gPSAnbncnOwogICAgICAgIC8vIHByb3A6IGZhZGVUb29sdGlwCiAgICAgICAgLy8gdHJ1ZSA9IGZhZGUgaW4vb3V0IHRvb2x0aXAsIGZsYXNlID0gc2hvdy9oaWRlIHRvb2x0aXAKICAgICAgICB0aGlzLmZhZGVUb29sdGlwID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiB0b29sdGlwRmFkZVNwZWVkCiAgICAgICAgLy8gJ3Nsb3cnLCAnZGVmJywgJ2Zhc3QnLCBvciBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLgogICAgICAgIHRoaXMudG9vbHRpcEZhZGVTcGVlZCA9ICJmYXN0IjsKICAgICAgICAvLyBwcm9wOiB0b29sdGlwT2Zmc2V0CiAgICAgICAgLy8gUGl4ZWwgb2Zmc2V0IG9mIHRvb2x0aXAgZnJvbSB0aGUgaGlnaGxpZ2h0LgogICAgICAgIHRoaXMudG9vbHRpcE9mZnNldCA9IDI7CiAgICAgICAgLy8gcHJvcDogdG9vbHRpcEF4ZXMKICAgICAgICAvLyBXaGljaCBheGVzIHRvIGRpc3BsYXkgaW4gdG9vbHRpcCwgJ3gnLCAneScgb3IgJ2JvdGgnLCAneHknIG9yICd5eCcKICAgICAgICAvLyAnYm90aCcgYW5kICd4eScgYXJlIGVxdWl2YWxlbnQsICd5eCcgcmV2ZXJzZXMgb3JkZXIgb2YgbGFiZWxzLgogICAgICAgIHRoaXMudG9vbHRpcEF4ZXMgPSAnYm90aCc7CiAgICAgICAgLy8gcHJvcDsgdG9vbHRpcFNlcGFyYXRvcgogICAgICAgIC8vIFN0cmluZyB0byB1c2UgdG8gc2VwYXJhdGUgeCBhbmQgeSBheGVzIGluIHRvb2x0aXAuCiAgICAgICAgdGhpcy50b29sdGlwU2VwYXJhdG9yID0gJywgJzsKICAgICAgICAvLyBwcm9wOyB0b29sdGlwQ29udGVudEVkaXRvcgogICAgICAgIC8vIEZ1bmN0aW9uIHVzZWQgdG8gZWRpdC9hdWdtZW50L3JlcGxhY2UgdGhlIGZvcm1hdHRlZCB0b29sdGlwIGNvbnRlbnRzLgogICAgICAgIC8vIENhbGxlZCBhcyBzdHIgPSB0b29sdGlwQ29udGVudEVkaXRvcihzdHIsIHNlcmllc0luZGV4LCBwb2ludEluZGV4KQogICAgICAgIC8vIHdoZXJlIHN0ciBpcyB0aGUgZ2VuZXJhdGVkIHRvb2x0aXAgaHRtbCBhbmQgc2VyaWVzSW5kZXggYW5kIHBvaW50SW5kZXggaWRlbnRpZnkKICAgICAgICAvLyB0aGUgZGF0YSBwb2ludCBiZWluZyBoaWdobGlnaHRlZC4gU2hvdWxkIHJldHVybiB0aGUgaHRtbCBmb3IgdGhlIHRvb2x0aXAgY29udGVudHMuCiAgICAgICAgdGhpcy50b29sdGlwQ29udGVudEVkaXRvciA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogdXNlQXhlc0Zvcm1hdHRlcnMKICAgICAgICAvLyBVc2UgdGhlIHggYW5kIHkgYXhlcyBmb3JtYXR0ZXJzIHRvIGZvcm1hdCB0aGUgdGV4dCBpbiB0aGUgdG9vbHRpcC4KICAgICAgICB0aGlzLnVzZUF4ZXNGb3JtYXR0ZXJzID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiB0b29sdGlwRm9ybWF0U3RyaW5nCiAgICAgICAgLy8gc3ByaW50ZiBmb3JtYXQgc3RyaW5nIGZvciB0aGUgdG9vbHRpcC4KICAgICAgICAvLyBVc2VzIEFzaCBTZWFybGUncyBqYXZhc2NyaXB0IHNwcmludGYgaW1wbGVtZW50YXRpb24KICAgICAgICAvLyBmb3VuZCBoZXJlOiBodHRwOi8vaGV4bWVuLmNvbS9ibG9nLzIwMDcvMDMvcHJpbnRmLXNwcmludGYvCiAgICAgICAgLy8gU2VlIGh0dHA6Ly9wZXJsZG9jLnBlcmwub3JnL2Z1bmN0aW9ucy9zcHJpbnRmLmh0bWwgZm9yIHJlZmVyZW5jZS4KICAgICAgICAvLyBBZGRpdGlvbmFsICJwIiBhbmQgIlAiIGZvcm1hdCBzcGVjaWZpZXJzIGFkZGVkIGJ5IENocmlzIExlb25lbGxvLgogICAgICAgIHRoaXMudG9vbHRpcEZvcm1hdFN0cmluZyA9ICclLjVQJzsKICAgICAgICAvLyBwcm9wOiBmb3JtYXRTdHJpbmcKICAgICAgICAvLyBhbHRlcm5hdGl2ZSB0byB0b29sdGlwRm9ybWF0U3RyaW5nCiAgICAgICAgLy8gd2lsbCBmb3JtYXQgdGhlIHdob2xlIHRvb2x0aXAgdGV4dCwgcG9wdWxhdGluZyB3aXRoIHgsIHkgdmFsdWVzIGFzCiAgICAgICAgLy8gaW5kaWNhdGVkIGJ5IHRvb2x0aXBBeGVzIG9wdGlvbi4gIFNvLCB5b3UgY291bGQgaGF2ZSBhIHRvb2x0aXAgbGlrZToKICAgICAgICAvLyAnRGF0ZTogJXMsIG51bWJlciBvZiBjYXRzOiAlZCcgdG8gZm9ybWF0IHRoZSB3aG9sZSB0b29sdGlwIGF0IG9uZSBnby4KICAgICAgICAvLyBJZiB1c2VBeGVzRm9ybWF0dGVycyBpcyB0cnVlLCB2YWx1ZXMgd2lsbCBiZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvCiAgICAgICAgLy8gQXhlcyBmb3JtYXR0ZXJzIGFuZCB5b3UgY2FuIHBvcHVsYXRlIHlvdXIgdG9vbHRpcCBzdHJpbmcgd2l0aCAKICAgICAgICAvLyAlcyBwbGFjZWhvbGRlcnMuCiAgICAgICAgdGhpcy5mb3JtYXRTdHJpbmcgPSBudWxsOwogICAgICAgIC8vIHByb3A6IHl2YWx1ZXMKICAgICAgICAvLyBOdW1iZXIgb2YgeSB2YWx1ZXMgdG8gZXhwZWN0IGluIHRoZSBkYXRhIHBvaW50IGFycmF5LgogICAgICAgIC8vIFR5cGljYWxseSB0aGlzIGlzIDEuICBDZXJ0YWluIHBsb3RzLCBsaWtlIE9ITEMsIHdpbGwKICAgICAgICAvLyBoYXZlIG1vcmUgeSB2YWx1ZXMgaW4gZWFjaCBkYXRhIHBvaW50IGFycmF5LgogICAgICAgIHRoaXMueXZhbHVlcyA9IDE7CiAgICAgICAgLy8gcHJvcDogYnJpbmdTZXJpZXNUb0Zyb250CiAgICAgICAgLy8gVGhpcyBvcHRpb24gcmVxdWlyZXMgalF1ZXJ5IDEuNCsKICAgICAgICAvLyBUcnVlIHRvIGJyaW5nIHRoZSBzZXJpZXMgb2YgdGhlIGhpZ2hsaWdodGVkIHBvaW50IHRvIHRoZSBmcm9udAogICAgICAgIC8vIG9mIG90aGVyIHNlcmllcy4KICAgICAgICB0aGlzLmJyaW5nU2VyaWVzVG9Gcm9udCA9IGZhbHNlOwogICAgICAgIHRoaXMuX3Rvb2x0aXBFbGVtOwogICAgICAgIHRoaXMuaXNIaWdobGlnaHRpbmcgPSBmYWxzZTsKICAgICAgICB0aGlzLmN1cnJlbnROZWlnaGJvciA9IG51bGw7CgogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgfTsKICAgIAogICAgdmFyIGxvY2F0aW9ucyA9IFsnbncnLCAnbicsICduZScsICdlJywgJ3NlJywgJ3MnLCAnc3cnLCAndyddOwogICAgdmFyIGxvY2F0aW9uSW5kaWNpZXMgPSB7J253JzowLCAnbic6MSwgJ25lJzoyLCAnZSc6MywgJ3NlJzo0LCAncyc6NSwgJ3N3Jzo2LCAndyc6N307CiAgICB2YXIgb3Bwb3NpdGVMb2NhdGlvbnMgPSBbJ3NlJywgJ3MnLCAnc3cnLCAndycsICdudycsICduJywgJ25lJywgJ2UnXTsKICAgIAogICAgLy8gYXhpcy5yZW5kZXJlci50aWNrcmVuZGVyZXIuZm9ybWF0dGVyCiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIHBsb3QKICAgICQuanFwbG90LkhpZ2hsaWdodGVyLmluaXQgPSBmdW5jdGlvbiAodGFyZ2V0LCBkYXRhLCBvcHRzKXsKICAgICAgICB2YXIgb3B0aW9ucyA9IG9wdHMgfHwge307CiAgICAgICAgLy8gYWRkIGEgaGlnaGxpZ2h0ZXIgYXR0cmlidXRlIHRvIHRoZSBwbG90CiAgICAgICAgdGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyID0gbmV3ICQuanFwbG90LkhpZ2hsaWdodGVyKG9wdGlvbnMuaGlnaGxpZ2h0ZXIpOwogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGhpbiBzY29wZSBvZiBzZXJpZXMKICAgICQuanFwbG90LkhpZ2hsaWdodGVyLnBhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uIChkZWZhdWx0cywgb3B0aW9ucykgewogICAgICAgIC8vIEFkZCBhIHNob3dIaWdobGlnaHQgb3B0aW9uIHRvIHRoZSBzZXJpZXMgCiAgICAgICAgLy8gYW5kIHNldCBpdCB0byB0cnVlIGJ5IGRlZmF1bHQuCiAgICAgICAgdGhpcy5zaG93SGlnaGxpZ2h0ID0gdHJ1ZTsKICAgIH07CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoaW4gY29udGV4dCBvZiBwbG90CiAgICAvLyBjcmVhdGUgYSBjYW52YXMgd2hpY2ggd2UgY2FuIGRyYXcgb24uCiAgICAvLyBpbnNlcnQgaXQgYmVmb3JlIHRoZSBldmVudENhbnZhcywgc28gZXZlbnRDYW52YXMgd2lsbCBzdGlsbCBjYXB0dXJlIGV2ZW50cy4KICAgICQuanFwbG90LkhpZ2hsaWdodGVyLnBvc3RQbG90RHJhdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIE1lbW9yeSBMZWFrcyBwYXRjaCAgICAKICAgICAgICBpZiAodGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyICYmIHRoaXMucGx1Z2lucy5oaWdobGlnaHRlci5oaWdobGlnaHRDYW52YXMpIHsKICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLmhpZ2hsaWdodENhbnZhcy5yZXNldENhbnZhcygpOwogICAgICAgICAgICB0aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0Q2FudmFzID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIGlmICh0aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIgJiYgdGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLl90b29sdGlwRWxlbSkgewogICAgICAgICAgICB0aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIuX3Rvb2x0aXBFbGVtLmVtcHR5Rm9yY2UoKTsKICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLl90b29sdGlwRWxlbSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICB0aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0Q2FudmFzID0gbmV3ICQuanFwbG90LkdlbmVyaWNDYW52YXMoKTsKICAgICAgICAKICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZSh0aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0Q2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsICdqcXBsb3QtaGlnaGxpZ2h0LWNhbnZhcycsIHRoaXMuX3Bsb3REaW1lbnNpb25zLCB0aGlzKSk7CiAgICAgICAgdGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLmhpZ2hsaWdodENhbnZhcy5zZXRDb250ZXh0KCk7CgogICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgdGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLl90b29sdGlwRWxlbSA9ICQoZWxlbSk7CiAgICAgICAgZWxlbSA9IG51bGw7CiAgICAgICAgdGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLl90b29sdGlwRWxlbS5hZGRDbGFzcygnanFwbG90LWhpZ2hsaWdodGVyLXRvb2x0aXAnKTsKICAgICAgICB0aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIuX3Rvb2x0aXBFbGVtLmNzcyh7cG9zaXRpb246J2Fic29sdXRlJywgZGlzcGxheTonbm9uZSd9KTsKICAgICAgICAKICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZSh0aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIuX3Rvb2x0aXBFbGVtKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LnByZUluaXRIb29rcy5wdXNoKCQuanFwbG90LkhpZ2hsaWdodGVyLmluaXQpOwogICAgJC5qcXBsb3QucHJlUGFyc2VTZXJpZXNPcHRpb25zSG9va3MucHVzaCgkLmpxcGxvdC5IaWdobGlnaHRlci5wYXJzZU9wdGlvbnMpOwogICAgJC5qcXBsb3QucG9zdERyYXdIb29rcy5wdXNoKCQuanFwbG90LkhpZ2hsaWdodGVyLnBvc3RQbG90RHJhdyk7CiAgICAKICAgIGZ1bmN0aW9uIGRyYXcocGxvdCwgbmVpZ2hib3IpIHsKICAgICAgICB2YXIgaGwgPSBwbG90LnBsdWdpbnMuaGlnaGxpZ2h0ZXI7CiAgICAgICAgdmFyIHMgPSBwbG90LnNlcmllc1tuZWlnaGJvci5zZXJpZXNJbmRleF07CiAgICAgICAgdmFyIHNtciA9IHMubWFya2VyUmVuZGVyZXI7CiAgICAgICAgdmFyIG1yID0gaGwubWFya2VyUmVuZGVyZXI7CiAgICAgICAgbXIuc3R5bGUgPSBzbXIuc3R5bGU7CiAgICAgICAgbXIubGluZVdpZHRoID0gc21yLmxpbmVXaWR0aCArIGhsLmxpbmVXaWR0aEFkanVzdDsKICAgICAgICBtci5zaXplID0gc21yLnNpemUgKyBobC5zaXplQWRqdXN0OwogICAgICAgIHZhciByZ2JhID0gJC5qcXBsb3QuZ2V0Q29sb3JDb21wb25lbnRzKHNtci5jb2xvcik7CiAgICAgICAgdmFyIG5ld3JnYiA9IFtyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdXTsKICAgICAgICB2YXIgYWxwaGEgPSAocmdiYVszXSA+PSAwLjYpID8gcmdiYVszXSowLjYgOiByZ2JhWzNdKigyLXJnYmFbM10pOwogICAgICAgIG1yLmNvbG9yID0gJ3JnYmEoJytuZXdyZ2JbMF0rJywnK25ld3JnYlsxXSsnLCcrbmV3cmdiWzJdKycsJythbHBoYSsnKSc7CiAgICAgICAgbXIuaW5pdCgpOwogICAgICAgIG1yLmRyYXcocy5ncmlkRGF0YVtuZWlnaGJvci5wb2ludEluZGV4XVswXSwgcy5ncmlkRGF0YVtuZWlnaGJvci5wb2ludEluZGV4XVsxXSwgaGwuaGlnaGxpZ2h0Q2FudmFzLl9jdHgpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBzaG93VG9vbHRpcChwbG90LCBzZXJpZXMsIG5laWdoYm9yKSB7CiAgICAgICAgLy8gbmVpZ2hib3IgbG9va3MgbGlrZToge3Nlcmllc0luZGV4OiBpLCBwb2ludEluZGV4OmosIGdyaWREYXRhOnAsIGRhdGE6cy5kYXRhW2pdfQogICAgICAgIC8vIGdyaWREYXRhIHNob3VsZCBiZSB4LHkgcGl4ZWwgY29vcmRzIG9uIHRoZSBncmlkLgogICAgICAgIC8vIGFkZCB0aGUgcGxvdC5fZ3JpZFBhZGRpbmcgdG8gdGhhdCB0byBnZXQgeCx5IGluIHRoZSB0YXJnZXQuCiAgICAgICAgdmFyIGhsID0gcGxvdC5wbHVnaW5zLmhpZ2hsaWdodGVyOwogICAgICAgIHZhciBlbGVtID0gaGwuX3Rvb2x0aXBFbGVtOwogICAgICAgIHZhciBzZXJpZXNobCA9IHNlcmllcy5oaWdobGlnaHRlciB8fCB7fTsKCiAgICAgICAgdmFyIG9wdHMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgaGwsIHNlcmllc2hsKTsKCiAgICAgICAgaWYgKG9wdHMudXNlQXhlc0Zvcm1hdHRlcnMpIHsKICAgICAgICAgICAgdmFyIHhmID0gc2VyaWVzLl94YXhpcy5fdGlja3NbMF0uZm9ybWF0dGVyOwogICAgICAgICAgICB2YXIgeWYgPSBzZXJpZXMuX3lheGlzLl90aWNrc1swXS5mb3JtYXR0ZXI7CiAgICAgICAgICAgIHZhciB4ZnN0ciA9IHNlcmllcy5feGF4aXMuX3RpY2tzWzBdLmZvcm1hdFN0cmluZzsKICAgICAgICAgICAgdmFyIHlmc3RyID0gc2VyaWVzLl95YXhpcy5fdGlja3NbMF0uZm9ybWF0U3RyaW5nOwogICAgICAgICAgICB2YXIgc3RyOwogICAgICAgICAgICB2YXIgeHN0ciA9IHhmKHhmc3RyLCBuZWlnaGJvci5kYXRhWzBdKTsKICAgICAgICAgICAgdmFyIHlzdHJzID0gW107CiAgICAgICAgICAgIGZvciAodmFyIGk9MTsgaTxvcHRzLnl2YWx1ZXMrMTsgaSsrKSB7CiAgICAgICAgICAgICAgICB5c3Rycy5wdXNoKHlmKHlmc3RyLCBuZWlnaGJvci5kYXRhW2ldKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmZvcm1hdFN0cmluZyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0cy50b29sdGlwQXhlcykgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JvdGgnOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3h5JzoKICAgICAgICAgICAgICAgICAgICAgICAgeXN0cnMudW5zaGlmdCh4c3RyKTsKICAgICAgICAgICAgICAgICAgICAgICAgeXN0cnMudW5zaGlmdChvcHRzLmZvcm1hdFN0cmluZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9ICQuanFwbG90LnNwcmludGYuYXBwbHkoJC5qcXBsb3Quc3ByaW50ZiwgeXN0cnMpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICd5eCc6CiAgICAgICAgICAgICAgICAgICAgICAgIHlzdHJzLnB1c2goeHN0cik7CiAgICAgICAgICAgICAgICAgICAgICAgIHlzdHJzLnVuc2hpZnQob3B0cy5mb3JtYXRTdHJpbmcpOwogICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSAkLmpxcGxvdC5zcHJpbnRmLmFwcGx5KCQuanFwbG90LnNwcmludGYsIHlzdHJzKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9ICQuanFwbG90LnNwcmludGYuYXBwbHkoJC5qcXBsb3Quc3ByaW50ZiwgW29wdHMuZm9ybWF0U3RyaW5nLCB4c3RyXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3knOgogICAgICAgICAgICAgICAgICAgICAgICB5c3Rycy51bnNoaWZ0KG9wdHMuZm9ybWF0U3RyaW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gJC5qcXBsb3Quc3ByaW50Zi5hcHBseSgkLmpxcGxvdC5zcHJpbnRmLCB5c3Rycyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNhbWUgYXMgeHkKICAgICAgICAgICAgICAgICAgICAgICAgeXN0cnMudW5zaGlmdCh4c3RyKTsKICAgICAgICAgICAgICAgICAgICAgICAgeXN0cnMudW5zaGlmdChvcHRzLmZvcm1hdFN0cmluZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9ICQuanFwbG90LnNwcmludGYuYXBwbHkoJC5qcXBsb3Quc3ByaW50ZiwgeXN0cnMpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdHMudG9vbHRpcEF4ZXMpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICdib3RoJzoKICAgICAgICAgICAgICAgICAgICBjYXNlICd4eSc6CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHhzdHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx5c3Rycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IG9wdHMudG9vbHRpcFNlcGFyYXRvciArIHlzdHJzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3l4JzoKICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx5c3Rycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHlzdHJzW2ldICsgb3B0cy50b29sdGlwU2VwYXJhdG9yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSB4c3RyOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0geHN0cjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAneSc6CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHlzdHJzLmpvaW4ob3B0cy50b29sdGlwU2VwYXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogLy8gc2FtZSBhcyAneHknCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHhzdHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx5c3Rycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IG9wdHMudG9vbHRpcFNlcGFyYXRvciArIHlzdHJzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIHN0cjsKICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmZvcm1hdFN0cmluZyA9PT0gICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICBzdHIgPSAkLmpxcGxvdC5zcHJpbnRmLmFwcGx5KCQuanFwbG90LnNwcmludGYsIFtvcHRzLmZvcm1hdFN0cmluZ10uY29uY2F0KG5laWdoYm9yLmRhdGEpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAob3B0cy50b29sdGlwQXhlcyA9PSAnYm90aCcgfHwgb3B0cy50b29sdGlwQXhlcyA9PSAneHknKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyID0gJC5qcXBsb3Quc3ByaW50ZihvcHRzLnRvb2x0aXBGb3JtYXRTdHJpbmcsIG5laWdoYm9yLmRhdGFbMF0pICsgb3B0cy50b29sdGlwU2VwYXJhdG9yICsgJC5qcXBsb3Quc3ByaW50ZihvcHRzLnRvb2x0aXBGb3JtYXRTdHJpbmcsIG5laWdoYm9yLmRhdGFbMV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0cy50b29sdGlwQXhlcyA9PSAneXgnKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyID0gJC5qcXBsb3Quc3ByaW50ZihvcHRzLnRvb2x0aXBGb3JtYXRTdHJpbmcsIG5laWdoYm9yLmRhdGFbMV0pICsgb3B0cy50b29sdGlwU2VwYXJhdG9yICsgJC5qcXBsb3Quc3ByaW50ZihvcHRzLnRvb2x0aXBGb3JtYXRTdHJpbmcsIG5laWdoYm9yLmRhdGFbMF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0cy50b29sdGlwQXhlcyA9PSAneCcpIHsKICAgICAgICAgICAgICAgICAgICBzdHIgPSAkLmpxcGxvdC5zcHJpbnRmKG9wdHMudG9vbHRpcEZvcm1hdFN0cmluZywgbmVpZ2hib3IuZGF0YVswXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChvcHRzLnRvb2x0aXBBeGVzID09ICd5JykgewogICAgICAgICAgICAgICAgICAgIHN0ciA9ICQuanFwbG90LnNwcmludGYob3B0cy50b29sdGlwRm9ybWF0U3RyaW5nLCBuZWlnaGJvci5kYXRhWzFdKTsKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihvcHRzLnRvb2x0aXBDb250ZW50RWRpdG9yKSkgewogICAgICAgICAgICAvLyBhcmdzIHN0ciwgc2VyaWVzSW5kZXgsIHBvaW50SW5kZXggYXJlIGVzc2VudGlhbCBzbyB0aGUgaG9vayBjYW4gbG9vayB1cAogICAgICAgICAgICAvLyBleHRyYSBkYXRhIGZvciB0aGUgcG9pbnQuCiAgICAgICAgICAgIHN0ciA9IG9wdHMudG9vbHRpcENvbnRlbnRFZGl0b3Ioc3RyLCBuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgcGxvdCk7CiAgICAgICAgfQogICAgICAgIGVsZW0uaHRtbChzdHIpOwogICAgICAgIHZhciBncmlkcG9zID0ge3g6bmVpZ2hib3IuZ3JpZERhdGFbMF0sIHk6bmVpZ2hib3IuZ3JpZERhdGFbMV19OwogICAgICAgIHZhciBtcyA9IDA7CiAgICAgICAgdmFyIGZhY3QgPSAwLjcwNzsKICAgICAgICBpZiAoc2VyaWVzLm1hcmtlclJlbmRlcmVyLnNob3cgPT0gdHJ1ZSkgeyAKICAgICAgICAgICAgbXMgPSAoc2VyaWVzLm1hcmtlclJlbmRlcmVyLnNpemUgKyBvcHRzLnNpemVBZGp1c3QpLzI7CiAgICAgICAgfQoKICAgICAgICB2YXIgbG9jID0gbG9jYXRpb25zOwogICAgICAgIGlmIChzZXJpZXMuZmlsbFRvWmVybyAmJiBzZXJpZXMuZmlsbCAmJiBuZWlnaGJvci5kYXRhWzFdIDwgMCkgewogICAgICAgICAgbG9jID0gb3Bwb3NpdGVMb2NhdGlvbnM7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKGxvY1tsb2NhdGlvbkluZGljaWVzW29wdHMudG9vbHRpcExvY2F0aW9uXV0pIHsKICAgICAgICAgICAgY2FzZSAnbncnOgogICAgICAgICAgICAgICAgdmFyIHggPSBncmlkcG9zLnggKyBwbG90Ll9ncmlkUGFkZGluZy5sZWZ0IC0gZWxlbS5vdXRlcldpZHRoKHRydWUpIC0gb3B0cy50b29sdGlwT2Zmc2V0IC0gZmFjdCAqIG1zOwogICAgICAgICAgICAgICAgdmFyIHkgPSBncmlkcG9zLnkgKyBwbG90Ll9ncmlkUGFkZGluZy50b3AgLSBvcHRzLnRvb2x0aXBPZmZzZXQgLSBlbGVtLm91dGVySGVpZ2h0KHRydWUpIC0gZmFjdCAqIG1zOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgdmFyIHggPSBncmlkcG9zLnggKyBwbG90Ll9ncmlkUGFkZGluZy5sZWZ0IC0gZWxlbS5vdXRlcldpZHRoKHRydWUpLzI7CiAgICAgICAgICAgICAgICB2YXIgeSA9IGdyaWRwb3MueSArIHBsb3QuX2dyaWRQYWRkaW5nLnRvcCAtIG9wdHMudG9vbHRpcE9mZnNldCAtIGVsZW0ub3V0ZXJIZWlnaHQodHJ1ZSkgLSBtczsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICduZSc6CiAgICAgICAgICAgICAgICB2YXIgeCA9IGdyaWRwb3MueCArIHBsb3QuX2dyaWRQYWRkaW5nLmxlZnQgKyBvcHRzLnRvb2x0aXBPZmZzZXQgKyBmYWN0ICogbXM7CiAgICAgICAgICAgICAgICB2YXIgeSA9IGdyaWRwb3MueSArIHBsb3QuX2dyaWRQYWRkaW5nLnRvcCAtIG9wdHMudG9vbHRpcE9mZnNldCAtIGVsZW0ub3V0ZXJIZWlnaHQodHJ1ZSkgLSBmYWN0ICogbXM7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZSc6CiAgICAgICAgICAgICAgICB2YXIgeCA9IGdyaWRwb3MueCArIHBsb3QuX2dyaWRQYWRkaW5nLmxlZnQgKyBvcHRzLnRvb2x0aXBPZmZzZXQgKyBtczsKICAgICAgICAgICAgICAgIHZhciB5ID0gZ3JpZHBvcy55ICsgcGxvdC5fZ3JpZFBhZGRpbmcudG9wIC0gZWxlbS5vdXRlckhlaWdodCh0cnVlKS8yOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3NlJzoKICAgICAgICAgICAgICAgIHZhciB4ID0gZ3JpZHBvcy54ICsgcGxvdC5fZ3JpZFBhZGRpbmcubGVmdCArIG9wdHMudG9vbHRpcE9mZnNldCArIGZhY3QgKiBtczsKICAgICAgICAgICAgICAgIHZhciB5ID0gZ3JpZHBvcy55ICsgcGxvdC5fZ3JpZFBhZGRpbmcudG9wICsgb3B0cy50b29sdGlwT2Zmc2V0ICsgZmFjdCAqIG1zOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICAgICAgdmFyIHggPSBncmlkcG9zLnggKyBwbG90Ll9ncmlkUGFkZGluZy5sZWZ0IC0gZWxlbS5vdXRlcldpZHRoKHRydWUpLzI7CiAgICAgICAgICAgICAgICB2YXIgeSA9IGdyaWRwb3MueSArIHBsb3QuX2dyaWRQYWRkaW5nLnRvcCArIG9wdHMudG9vbHRpcE9mZnNldCArIG1zOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3N3JzoKICAgICAgICAgICAgICAgIHZhciB4ID0gZ3JpZHBvcy54ICsgcGxvdC5fZ3JpZFBhZGRpbmcubGVmdCAtIGVsZW0ub3V0ZXJXaWR0aCh0cnVlKSAtIG9wdHMudG9vbHRpcE9mZnNldCAtIGZhY3QgKiBtczsKICAgICAgICAgICAgICAgIHZhciB5ID0gZ3JpZHBvcy55ICsgcGxvdC5fZ3JpZFBhZGRpbmcudG9wICsgb3B0cy50b29sdGlwT2Zmc2V0ICsgZmFjdCAqIG1zOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3cnOgogICAgICAgICAgICAgICAgdmFyIHggPSBncmlkcG9zLnggKyBwbG90Ll9ncmlkUGFkZGluZy5sZWZ0IC0gZWxlbS5vdXRlcldpZHRoKHRydWUpIC0gb3B0cy50b29sdGlwT2Zmc2V0IC0gbXM7CiAgICAgICAgICAgICAgICB2YXIgeSA9IGdyaWRwb3MueSArIHBsb3QuX2dyaWRQYWRkaW5nLnRvcCAtIGVsZW0ub3V0ZXJIZWlnaHQodHJ1ZSkvMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OiAvLyBzYW1lIGFzICdudycKICAgICAgICAgICAgICAgIHZhciB4ID0gZ3JpZHBvcy54ICsgcGxvdC5fZ3JpZFBhZGRpbmcubGVmdCAtIGVsZW0ub3V0ZXJXaWR0aCh0cnVlKSAtIG9wdHMudG9vbHRpcE9mZnNldCAtIGZhY3QgKiBtczsKICAgICAgICAgICAgICAgIHZhciB5ID0gZ3JpZHBvcy55ICsgcGxvdC5fZ3JpZFBhZGRpbmcudG9wIC0gb3B0cy50b29sdGlwT2Zmc2V0IC0gZWxlbS5vdXRlckhlaWdodCh0cnVlKSAtIGZhY3QgKiBtczsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlbGVtLmNzcygnbGVmdCcsIHgpOwogICAgICAgIGVsZW0uY3NzKCd0b3AnLCB5KTsKICAgICAgICBpZiAob3B0cy5mYWRlVG9vbHRpcCkgewogICAgICAgICAgICAvLyBGaXggZm9yIHN0YWNrZWQgdXAgYW5pbWF0aW9ucy4gIFRobmFua3MgVHJldm9yIQogICAgICAgICAgICBlbGVtLnN0b3AodHJ1ZSx0cnVlKS5mYWRlSW4ob3B0cy50b29sdGlwRmFkZVNwZWVkKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGVsZW0uc2hvdygpOwogICAgICAgIH0KICAgICAgICBlbGVtID0gbnVsbDsKICAgICAgICAKICAgIH0KICAgIAogICAgZnVuY3Rpb24gaGFuZGxlTW92ZShldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICB2YXIgaGwgPSBwbG90LnBsdWdpbnMuaGlnaGxpZ2h0ZXI7CiAgICAgICAgdmFyIGMgPSBwbG90LnBsdWdpbnMuY3Vyc29yOwogICAgICAgIGlmIChobC5zaG93KSB7CiAgICAgICAgICAgIGlmIChuZWlnaGJvciA9PSBudWxsICYmIGhsLmlzSGlnaGxpZ2h0aW5nKSB7CiAgICAgICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdqcXBsb3RIaWdobGlnaHRlclVuaGlnaGxpZ2h0Jyk7CiAgICAgICAgICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKGV2dCk7CgogICAgICAgICAgICAgICAgdmFyIGN0eCA9IGhsLmhpZ2hsaWdodENhbnZhcy5fY3R4OwogICAgICAgICAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCBjdHguY2FudmFzLndpZHRoLCBjdHguY2FudmFzLmhlaWdodCk7CiAgICAgICAgICAgICAgICBpZiAoaGwuZmFkZVRvb2x0aXApIHsKICAgICAgICAgICAgICAgICAgICBobC5fdG9vbHRpcEVsZW0uZmFkZU91dChobC50b29sdGlwRmFkZVNwZWVkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGhsLl90b29sdGlwRWxlbS5oaWRlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaGwuYnJpbmdTZXJpZXNUb0Zyb250KSB7CiAgICAgICAgICAgICAgICAgICAgcGxvdC5yZXN0b3JlUHJldmlvdXNTZXJpZXNPcmRlcigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaGwuaXNIaWdobGlnaHRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGhsLmN1cnJlbnROZWlnaGJvciA9IG51bGw7CiAgICAgICAgICAgICAgICBjdHggPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKG5laWdoYm9yICE9IG51bGwgJiYgcGxvdC5zZXJpZXNbbmVpZ2hib3Iuc2VyaWVzSW5kZXhdLnNob3dIaWdobGlnaHQgJiYgIWhsLmlzSGlnaGxpZ2h0aW5nKSB7CiAgICAgICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdqcXBsb3RIaWdobGlnaHRlckhpZ2hsaWdodCcpOwogICAgICAgICAgICAgICAgZXZ0LndoaWNoID0gZXYud2hpY2g7CiAgICAgICAgICAgICAgICBldnQucGFnZVggPSBldi5wYWdlWDsKICAgICAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICAgICAgdmFyIGlucyA9IFtuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IuZGF0YSwgcGxvdF07CiAgICAgICAgICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKGV2dCwgaW5zKTsKCiAgICAgICAgICAgICAgICBobC5pc0hpZ2hsaWdodGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICBobC5jdXJyZW50TmVpZ2hib3IgPSBuZWlnaGJvcjsKICAgICAgICAgICAgICAgIGlmIChobC5zaG93TWFya2VyKSB7CiAgICAgICAgICAgICAgICAgICAgZHJhdyhwbG90LCBuZWlnaGJvcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAocGxvdC5zZXJpZXNbbmVpZ2hib3Iuc2VyaWVzSW5kZXhdLnNob3cgJiYgaGwuc2hvd1Rvb2x0aXAgJiYgKCFjIHx8ICFjLl96b29tLnN0YXJ0ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgc2hvd1Rvb2x0aXAocGxvdCwgcGxvdC5zZXJpZXNbbmVpZ2hib3Iuc2VyaWVzSW5kZXhdLCBuZWlnaGJvcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaGwuYnJpbmdTZXJpZXNUb0Zyb250KSB7CiAgICAgICAgICAgICAgICAgICAgcGxvdC5tb3ZlU2VyaWVzVG9Gcm9udChuZWlnaGJvci5zZXJpZXNJbmRleCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIGhpZ2hsaWdodGluZyB0aGUgd3JvbmcgcG9pbnQuCiAgICAgICAgICAgIGVsc2UgaWYgKG5laWdoYm9yICE9IG51bGwgJiYgaGwuaXNIaWdobGlnaHRpbmcgJiYgaGwuY3VycmVudE5laWdoYm9yICE9IG5laWdoYm9yKSB7CiAgICAgICAgICAgICAgICAvLyBoaWdobGlnaHRpbmcgdGhlIHdyb25nIHBvaW50LgoKICAgICAgICAgICAgICAgIC8vIGlmIG5ldyBzZXJpZXMgYWxsb3dzIGhpZ2hsaWdodGluZywgaGlnaGxpZ2h0IG5ldyBwb2ludC4KICAgICAgICAgICAgICAgIGlmIChwbG90LnNlcmllc1tuZWlnaGJvci5zZXJpZXNJbmRleF0uc2hvd0hpZ2hsaWdodCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSBobC5oaWdobGlnaHRDYW52YXMuX2N0eDsKICAgICAgICAgICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGN0eC5jYW52YXMud2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICBobC5pc0hpZ2hsaWdodGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgaGwuY3VycmVudE5laWdoYm9yID0gbmVpZ2hib3I7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhsLnNob3dNYXJrZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZHJhdyhwbG90LCBuZWlnaGJvcik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChwbG90LnNlcmllc1tuZWlnaGJvci5zZXJpZXNJbmRleF0uc2hvdyAmJiBobC5zaG93VG9vbHRpcCAmJiAoIWMgfHwgIWMuX3pvb20uc3RhcnRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1Rvb2x0aXAocGxvdCwgcGxvdC5zZXJpZXNbbmVpZ2hib3Iuc2VyaWVzSW5kZXhdLCBuZWlnaGJvcik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChobC5icmluZ1Nlcmllc1RvRnJvbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGxvdC5tb3ZlU2VyaWVzVG9Gcm9udChuZWlnaGJvci5zZXJpZXNJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.highlighter.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGQpe2QuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsianFwbG90TW91c2VNb3ZlIixmXSk7ZC5qcXBsb3QuSGlnaGxpZ2h0ZXI9ZnVuY3Rpb24oaCl7dGhpcy5zaG93PWQuanFwbG90LmNvbmZpZy5lbmFibGVQbHVnaW5zO3RoaXMubWFya2VyUmVuZGVyZXI9bmV3IGQuanFwbG90Lk1hcmtlclJlbmRlcmVyKHtzaGFkb3c6ZmFsc2V9KTt0aGlzLnNob3dNYXJrZXI9dHJ1ZTt0aGlzLmxpbmVXaWR0aEFkanVzdD0yLjU7dGhpcy5zaXplQWRqdXN0PTU7dGhpcy5zaG93VG9vbHRpcD10cnVlO3RoaXMudG9vbHRpcExvY2F0aW9uPSJudyI7dGhpcy5mYWRlVG9vbHRpcD10cnVlO3RoaXMudG9vbHRpcEZhZGVTcGVlZD0iZmFzdCI7dGhpcy50b29sdGlwT2Zmc2V0PTI7dGhpcy50b29sdGlwQXhlcz0iYm90aCI7dGhpcy50b29sdGlwU2VwYXJhdG9yPSIsICI7dGhpcy50b29sdGlwQ29udGVudEVkaXRvcj1udWxsO3RoaXMudXNlQXhlc0Zvcm1hdHRlcnM9dHJ1ZTt0aGlzLnRvb2x0aXBGb3JtYXRTdHJpbmc9IiUuNVAiO3RoaXMuZm9ybWF0U3RyaW5nPW51bGw7dGhpcy55dmFsdWVzPTE7dGhpcy5icmluZ1Nlcmllc1RvRnJvbnQ9ZmFsc2U7dGhpcy5fdG9vbHRpcEVsZW07dGhpcy5pc0hpZ2hsaWdodGluZz1mYWxzZTt0aGlzLmN1cnJlbnROZWlnaGJvcj1udWxsO2QuZXh0ZW5kKHRydWUsdGhpcyxoKX07dmFyIGI9WyJudyIsIm4iLCJuZSIsImUiLCJzZSIsInMiLCJzdyIsInciXTt2YXIgZT17bnc6MCxuOjEsbmU6MixlOjMsc2U6NCxzOjUsc3c6Nix3Ojd9O3ZhciBjPVsic2UiLCJzIiwic3ciLCJ3IiwibnciLCJuIiwibmUiLCJlIl07ZC5qcXBsb3QuSGlnaGxpZ2h0ZXIuaW5pdD1mdW5jdGlvbihrLGosaSl7dmFyIGg9aXx8e307dGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyPW5ldyBkLmpxcGxvdC5IaWdobGlnaHRlcihoLmhpZ2hsaWdodGVyKX07ZC5qcXBsb3QuSGlnaGxpZ2h0ZXIucGFyc2VPcHRpb25zPWZ1bmN0aW9uKGksaCl7dGhpcy5zaG93SGlnaGxpZ2h0PXRydWV9O2QuanFwbG90LkhpZ2hsaWdodGVyLnBvc3RQbG90RHJhdz1mdW5jdGlvbigpe2lmKHRoaXMucGx1Z2lucy5oaWdobGlnaHRlciYmdGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLmhpZ2hsaWdodENhbnZhcyl7dGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLmhpZ2hsaWdodENhbnZhcy5yZXNldENhbnZhcygpO3RoaXMucGx1Z2lucy5oaWdobGlnaHRlci5oaWdobGlnaHRDYW52YXM9bnVsbH1pZih0aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXImJnRoaXMucGx1Z2lucy5oaWdobGlnaHRlci5fdG9vbHRpcEVsZW0pe3RoaXMucGx1Z2lucy5oaWdobGlnaHRlci5fdG9vbHRpcEVsZW0uZW1wdHlGb3JjZSgpO3RoaXMucGx1Z2lucy5oaWdobGlnaHRlci5fdG9vbHRpcEVsZW09bnVsbH10aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0Q2FudmFzPW5ldyBkLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZvcmUodGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLmhpZ2hsaWdodENhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCJqcXBsb3QtaGlnaGxpZ2h0LWNhbnZhcyIsdGhpcy5fcGxvdERpbWVuc2lvbnMsdGhpcykpO3RoaXMucGx1Z2lucy5oaWdobGlnaHRlci5oaWdobGlnaHRDYW52YXMuc2V0Q29udGV4dCgpO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMucGx1Z2lucy5oaWdobGlnaHRlci5fdG9vbHRpcEVsZW09ZChoKTtoPW51bGw7dGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLl90b29sdGlwRWxlbS5hZGRDbGFzcygianFwbG90LWhpZ2hsaWdodGVyLXRvb2x0aXAiKTt0aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIuX3Rvb2x0aXBFbGVtLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIn0pO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKHRoaXMucGx1Z2lucy5oaWdobGlnaHRlci5fdG9vbHRpcEVsZW0pfTtkLmpxcGxvdC5wcmVJbml0SG9va3MucHVzaChkLmpxcGxvdC5IaWdobGlnaHRlci5pbml0KTtkLmpxcGxvdC5wcmVQYXJzZVNlcmllc09wdGlvbnNIb29rcy5wdXNoKGQuanFwbG90LkhpZ2hsaWdodGVyLnBhcnNlT3B0aW9ucyk7ZC5qcXBsb3QucG9zdERyYXdIb29rcy5wdXNoKGQuanFwbG90LkhpZ2hsaWdodGVyLnBvc3RQbG90RHJhdyk7ZnVuY3Rpb24gYShtLG8pe3ZhciBqPW0ucGx1Z2lucy5oaWdobGlnaHRlcjt2YXIgcD1tLnNlcmllc1tvLnNlcmllc0luZGV4XTt2YXIgaD1wLm1hcmtlclJlbmRlcmVyO3ZhciBpPWoubWFya2VyUmVuZGVyZXI7aS5zdHlsZT1oLnN0eWxlO2kubGluZVdpZHRoPWgubGluZVdpZHRoK2oubGluZVdpZHRoQWRqdXN0O2kuc2l6ZT1oLnNpemUrai5zaXplQWRqdXN0O3ZhciBsPWQuanFwbG90LmdldENvbG9yQ29tcG9uZW50cyhoLmNvbG9yKTt2YXIgbj1bbFswXSxsWzFdLGxbMl1dO3ZhciBrPShsWzNdPj0wLjYpP2xbM10qMC42OmxbM10qKDItbFszXSk7aS5jb2xvcj0icmdiYSgiK25bMF0rIiwiK25bMV0rIiwiK25bMl0rIiwiK2srIikiO2kuaW5pdCgpO2kuZHJhdyhwLmdyaWREYXRhW28ucG9pbnRJbmRleF1bMF0scC5ncmlkRGF0YVtvLnBvaW50SW5kZXhdWzFdLGouaGlnaGxpZ2h0Q2FudmFzLl9jdHgpfWZ1bmN0aW9uIGcoQSxxLG0pe3ZhciBrPUEucGx1Z2lucy5oaWdobGlnaHRlcjt2YXIgRD1rLl90b29sdGlwRWxlbTt2YXIgcj1xLmhpZ2hsaWdodGVyfHx7fTt2YXIgdD1kLmV4dGVuZCh0cnVlLHt9LGsscik7aWYodC51c2VBeGVzRm9ybWF0dGVycyl7dmFyIHc9cS5feGF4aXMuX3RpY2tzWzBdLmZvcm1hdHRlcjt2YXIgaD1xLl95YXhpcy5fdGlja3NbMF0uZm9ybWF0dGVyO3ZhciBFPXEuX3hheGlzLl90aWNrc1swXS5mb3JtYXRTdHJpbmc7dmFyIHM9cS5feWF4aXMuX3RpY2tzWzBdLmZvcm1hdFN0cmluZzt2YXIgejt2YXIgdT13KEUsbS5kYXRhWzBdKTt2YXIgbD1bXTtmb3IodmFyIEI9MTtCPHQueXZhbHVlcysxO0IrKyl7bC5wdXNoKGgocyxtLmRhdGFbQl0pKX1pZih0eXBlb2YgdC5mb3JtYXRTdHJpbmc9PT0ic3RyaW5nIil7c3dpdGNoKHQudG9vbHRpcEF4ZXMpe2Nhc2UiYm90aCI6Y2FzZSJ4eSI6bC51bnNoaWZ0KHUpO2wudW5zaGlmdCh0LmZvcm1hdFN0cmluZyk7ej1kLmpxcGxvdC5zcHJpbnRmLmFwcGx5KGQuanFwbG90LnNwcmludGYsbCk7YnJlYWs7Y2FzZSJ5eCI6bC5wdXNoKHUpO2wudW5zaGlmdCh0LmZvcm1hdFN0cmluZyk7ej1kLmpxcGxvdC5zcHJpbnRmLmFwcGx5KGQuanFwbG90LnNwcmludGYsbCk7YnJlYWs7Y2FzZSJ4Ijp6PWQuanFwbG90LnNwcmludGYuYXBwbHkoZC5qcXBsb3Quc3ByaW50ZixbdC5mb3JtYXRTdHJpbmcsdV0pO2JyZWFrO2Nhc2UieSI6bC51bnNoaWZ0KHQuZm9ybWF0U3RyaW5nKTt6PWQuanFwbG90LnNwcmludGYuYXBwbHkoZC5qcXBsb3Quc3ByaW50ZixsKTticmVhaztkZWZhdWx0OmwudW5zaGlmdCh1KTtsLnVuc2hpZnQodC5mb3JtYXRTdHJpbmcpO3o9ZC5qcXBsb3Quc3ByaW50Zi5hcHBseShkLmpxcGxvdC5zcHJpbnRmLGwpO2JyZWFrfX1lbHNle3N3aXRjaCh0LnRvb2x0aXBBeGVzKXtjYXNlImJvdGgiOmNhc2UieHkiOno9dTtmb3IodmFyIEI9MDtCPGwubGVuZ3RoO0IrKyl7eis9dC50b29sdGlwU2VwYXJhdG9yK2xbQl19YnJlYWs7Y2FzZSJ5eCI6ej0iIjtmb3IodmFyIEI9MDtCPGwubGVuZ3RoO0IrKyl7eis9bFtCXSt0LnRvb2x0aXBTZXBhcmF0b3J9eis9dTticmVhaztjYXNlIngiOno9dTticmVhaztjYXNlInkiOno9bC5qb2luKHQudG9vbHRpcFNlcGFyYXRvcik7YnJlYWs7ZGVmYXVsdDp6PXU7Zm9yKHZhciBCPTA7QjxsLmxlbmd0aDtCKyspe3orPXQudG9vbHRpcFNlcGFyYXRvcitsW0JdfWJyZWFrfX19ZWxzZXt2YXIgejtpZih0eXBlb2YgdC5mb3JtYXRTdHJpbmc9PT0ic3RyaW5nIil7ej1kLmpxcGxvdC5zcHJpbnRmLmFwcGx5KGQuanFwbG90LnNwcmludGYsW3QuZm9ybWF0U3RyaW5nXS5jb25jYXQobS5kYXRhKSl9ZWxzZXtpZih0LnRvb2x0aXBBeGVzPT0iYm90aCJ8fHQudG9vbHRpcEF4ZXM9PSJ4eSIpe3o9ZC5qcXBsb3Quc3ByaW50Zih0LnRvb2x0aXBGb3JtYXRTdHJpbmcsbS5kYXRhWzBdKSt0LnRvb2x0aXBTZXBhcmF0b3IrZC5qcXBsb3Quc3ByaW50Zih0LnRvb2x0aXBGb3JtYXRTdHJpbmcsbS5kYXRhWzFdKX1lbHNle2lmKHQudG9vbHRpcEF4ZXM9PSJ5eCIpe3o9ZC5qcXBsb3Quc3ByaW50Zih0LnRvb2x0aXBGb3JtYXRTdHJpbmcsbS5kYXRhWzFdKSt0LnRvb2x0aXBTZXBhcmF0b3IrZC5qcXBsb3Quc3ByaW50Zih0LnRvb2x0aXBGb3JtYXRTdHJpbmcsbS5kYXRhWzBdKX1lbHNle2lmKHQudG9vbHRpcEF4ZXM9PSJ4Iil7ej1kLmpxcGxvdC5zcHJpbnRmKHQudG9vbHRpcEZvcm1hdFN0cmluZyxtLmRhdGFbMF0pfWVsc2V7aWYodC50b29sdGlwQXhlcz09InkiKXt6PWQuanFwbG90LnNwcmludGYodC50b29sdGlwRm9ybWF0U3RyaW5nLG0uZGF0YVsxXSl9fX19fX1pZihkLmlzRnVuY3Rpb24odC50b29sdGlwQ29udGVudEVkaXRvcikpe3o9dC50b29sdGlwQ29udGVudEVkaXRvcih6LG0uc2VyaWVzSW5kZXgsbS5wb2ludEluZGV4LEEpfUQuaHRtbCh6KTt2YXIgQz17eDptLmdyaWREYXRhWzBdLHk6bS5ncmlkRGF0YVsxXX07dmFyIHY9MDt2YXIgaj0wLjcwNztpZihxLm1hcmtlclJlbmRlcmVyLnNob3c9PXRydWUpe3Y9KHEubWFya2VyUmVuZGVyZXIuc2l6ZSt0LnNpemVBZGp1c3QpLzJ9dmFyIG89YjtpZihxLmZpbGxUb1plcm8mJnEuZmlsbCYmbS5kYXRhWzFdPDApe289Y31zd2l0Y2gob1tlW3QudG9vbHRpcExvY2F0aW9uXV0pe2Nhc2UibnciOnZhciBwPUMueCtBLl9ncmlkUGFkZGluZy5sZWZ0LUQub3V0ZXJXaWR0aCh0cnVlKS10LnRvb2x0aXBPZmZzZXQtaip2O3ZhciBuPUMueStBLl9ncmlkUGFkZGluZy50b3AtdC50b29sdGlwT2Zmc2V0LUQub3V0ZXJIZWlnaHQodHJ1ZSktaip2O2JyZWFrO2Nhc2UibiI6dmFyIHA9Qy54K0EuX2dyaWRQYWRkaW5nLmxlZnQtRC5vdXRlcldpZHRoKHRydWUpLzI7dmFyIG49Qy55K0EuX2dyaWRQYWRkaW5nLnRvcC10LnRvb2x0aXBPZmZzZXQtRC5vdXRlckhlaWdodCh0cnVlKS12O2JyZWFrO2Nhc2UibmUiOnZhciBwPUMueCtBLl9ncmlkUGFkZGluZy5sZWZ0K3QudG9vbHRpcE9mZnNldCtqKnY7dmFyIG49Qy55K0EuX2dyaWRQYWRkaW5nLnRvcC10LnRvb2x0aXBPZmZzZXQtRC5vdXRlckhlaWdodCh0cnVlKS1qKnY7YnJlYWs7Y2FzZSJlIjp2YXIgcD1DLngrQS5fZ3JpZFBhZGRpbmcubGVmdCt0LnRvb2x0aXBPZmZzZXQrdjt2YXIgbj1DLnkrQS5fZ3JpZFBhZGRpbmcudG9wLUQub3V0ZXJIZWlnaHQodHJ1ZSkvMjticmVhaztjYXNlInNlIjp2YXIgcD1DLngrQS5fZ3JpZFBhZGRpbmcubGVmdCt0LnRvb2x0aXBPZmZzZXQraip2O3ZhciBuPUMueStBLl9ncmlkUGFkZGluZy50b3ArdC50b29sdGlwT2Zmc2V0K2oqdjticmVhaztjYXNlInMiOnZhciBwPUMueCtBLl9ncmlkUGFkZGluZy5sZWZ0LUQub3V0ZXJXaWR0aCh0cnVlKS8yO3ZhciBuPUMueStBLl9ncmlkUGFkZGluZy50b3ArdC50b29sdGlwT2Zmc2V0K3Y7YnJlYWs7Y2FzZSJzdyI6dmFyIHA9Qy54K0EuX2dyaWRQYWRkaW5nLmxlZnQtRC5vdXRlcldpZHRoKHRydWUpLXQudG9vbHRpcE9mZnNldC1qKnY7dmFyIG49Qy55K0EuX2dyaWRQYWRkaW5nLnRvcCt0LnRvb2x0aXBPZmZzZXQraip2O2JyZWFrO2Nhc2UidyI6dmFyIHA9Qy54K0EuX2dyaWRQYWRkaW5nLmxlZnQtRC5vdXRlcldpZHRoKHRydWUpLXQudG9vbHRpcE9mZnNldC12O3ZhciBuPUMueStBLl9ncmlkUGFkZGluZy50b3AtRC5vdXRlckhlaWdodCh0cnVlKS8yO2JyZWFrO2RlZmF1bHQ6dmFyIHA9Qy54K0EuX2dyaWRQYWRkaW5nLmxlZnQtRC5vdXRlcldpZHRoKHRydWUpLXQudG9vbHRpcE9mZnNldC1qKnY7dmFyIG49Qy55K0EuX2dyaWRQYWRkaW5nLnRvcC10LnRvb2x0aXBPZmZzZXQtRC5vdXRlckhlaWdodCh0cnVlKS1qKnY7YnJlYWt9RC5jc3MoImxlZnQiLHApO0QuY3NzKCJ0b3AiLG4pO2lmKHQuZmFkZVRvb2x0aXApe0Quc3RvcCh0cnVlLHRydWUpLmZhZGVJbih0LnRvb2x0aXBGYWRlU3BlZWQpfWVsc2V7RC5zaG93KCl9RD1udWxsfWZ1bmN0aW9uIGYobixqLGkscCxsKXt2YXIgaD1sLnBsdWdpbnMuaGlnaGxpZ2h0ZXI7dmFyIG09bC5wbHVnaW5zLmN1cnNvcjtpZihoLnNob3cpe2lmKHA9PW51bGwmJmguaXNIaWdobGlnaHRpbmcpe3ZhciBvPWpRdWVyeS5FdmVudCgianFwbG90SGlnaGxpZ2h0ZXJVbmhpZ2hsaWdodCIpO2wudGFyZ2V0LnRyaWdnZXIobyk7dmFyIHE9aC5oaWdobGlnaHRDYW52YXMuX2N0eDtxLmNsZWFyUmVjdCgwLDAscS5jYW52YXMud2lkdGgscS5jYW52YXMuaGVpZ2h0KTtpZihoLmZhZGVUb29sdGlwKXtoLl90b29sdGlwRWxlbS5mYWRlT3V0KGgudG9vbHRpcEZhZGVTcGVlZCl9ZWxzZXtoLl90b29sdGlwRWxlbS5oaWRlKCl9aWYoaC5icmluZ1Nlcmllc1RvRnJvbnQpe2wucmVzdG9yZVByZXZpb3VzU2VyaWVzT3JkZXIoKX1oLmlzSGlnaGxpZ2h0aW5nPWZhbHNlO2guY3VycmVudE5laWdoYm9yPW51bGw7cT1udWxsfWVsc2V7aWYocCE9bnVsbCYmbC5zZXJpZXNbcC5zZXJpZXNJbmRleF0uc2hvd0hpZ2hsaWdodCYmIWguaXNIaWdobGlnaHRpbmcpe3ZhciBvPWpRdWVyeS5FdmVudCgianFwbG90SGlnaGxpZ2h0ZXJIaWdobGlnaHQiKTtvLndoaWNoPW4ud2hpY2g7by5wYWdlWD1uLnBhZ2VYO28ucGFnZVk9bi5wYWdlWTt2YXIgaz1bcC5zZXJpZXNJbmRleCxwLnBvaW50SW5kZXgscC5kYXRhLGxdO2wudGFyZ2V0LnRyaWdnZXIobyxrKTtoLmlzSGlnaGxpZ2h0aW5nPXRydWU7aC5jdXJyZW50TmVpZ2hib3I9cDtpZihoLnNob3dNYXJrZXIpe2EobCxwKX1pZihsLnNlcmllc1twLnNlcmllc0luZGV4XS5zaG93JiZoLnNob3dUb29sdGlwJiYoIW18fCFtLl96b29tLnN0YXJ0ZWQpKXtnKGwsbC5zZXJpZXNbcC5zZXJpZXNJbmRleF0scCl9aWYoaC5icmluZ1Nlcmllc1RvRnJvbnQpe2wubW92ZVNlcmllc1RvRnJvbnQocC5zZXJpZXNJbmRleCl9fWVsc2V7aWYocCE9bnVsbCYmaC5pc0hpZ2hsaWdodGluZyYmaC5jdXJyZW50TmVpZ2hib3IhPXApe2lmKGwuc2VyaWVzW3Auc2VyaWVzSW5kZXhdLnNob3dIaWdobGlnaHQpe3ZhciBxPWguaGlnaGxpZ2h0Q2FudmFzLl9jdHg7cS5jbGVhclJlY3QoMCwwLHEuY2FudmFzLndpZHRoLHEuY2FudmFzLmhlaWdodCk7aC5pc0hpZ2hsaWdodGluZz10cnVlO2guY3VycmVudE5laWdoYm9yPXA7aWYoaC5zaG93TWFya2VyKXthKGwscCl9aWYobC5zZXJpZXNbcC5zZXJpZXNJbmRleF0uc2hvdyYmaC5zaG93VG9vbHRpcCYmKCFtfHwhbS5fem9vbS5zdGFydGVkKSl7ZyhsLGwuc2VyaWVzW3Auc2VyaWVzSW5kZXhdLHApfWlmKGguYnJpbmdTZXJpZXNUb0Zyb250KXtsLm1vdmVTZXJpZXNUb0Zyb250KHAuc2VyaWVzSW5kZXgpfX19fX19fX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.json2.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICAgIDIwMTAtMTEtMDEgQ2hyaXMgTGVvbmVsbG8KICAgIAogICAgU2xpZ2h0bHkgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwganNvbjIuanMgdG8gcHV0IEpTT04KICAgIGZ1bmN0aW9ucyB1bmRlciB0aGUgJC5qcXBsb3QgbmFtZXNwYWNlLgogICAgCiAgICBsaWNlbnNpbmcgYW5kIG9yaWduYWwgY29tbWVudHMgZm9sbG93OgogICAgCiAgICBodHRwOi8vd3d3LkpTT04ub3JnL2pzb24yLmpzCiAgICAyMDEwLTA4LTI1CiAgICAKICAgIFB1YmxpYyBEb21haW4uCgogICAgTk8gV0FSUkFOVFkgRVhQUkVTU0VEIE9SIElNUExJRUQuIFVTRSBBVCBZT1VSIE9XTiBSSVNLLgoKICAgIFNlZSBodHRwOi8vd3d3LkpTT04ub3JnL2pzLmh0bWwKCgogICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC4KICAgIFNlZSBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2ZvcmQuY29tL2pzbWluLmh0bWwKCiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBETwogICAgTk9UIENPTlRST0wuCgoKICAgIFRoaXMgZmlsZSBjcmVhdGVzIGEgZ2xvYmFsIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdHdvIG1ldGhvZHM6IHN0cmluZ2lmeQogICAgYW5kIHBhcnNlLgoKICAgICAgICAkLmpxcGxvdC5KU09OLnN0cmluZ2lmeSh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKQogICAgICAgICAgICB2YWx1ZSAgICAgICBhbnkgSmF2YVNjcmlwdCB2YWx1ZSwgdXN1YWxseSBhbiBvYmplY3Qgb3IgYXJyYXkuCgogICAgICAgICAgICByZXBsYWNlciAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBkZXRlcm1pbmVzIGhvdyBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZSBzdHJpbmdpZmllZCBmb3Igb2JqZWN0cy4gSXQgY2FuIGJlIGEKICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy4KCiAgICAgICAgICAgIHNwYWNlICAgICAgIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgb2YgbmVzdGVkIHN0cnVjdHVyZXMuIElmIGl0IGlzIG9taXR0ZWQsIHRoZSB0ZXh0IHdpbGwKICAgICAgICAgICAgICAgICAgICAgICAgYmUgcGFja2VkIHdpdGhvdXQgZXh0cmEgd2hpdGVzcGFjZS4gSWYgaXQgaXMgYSBudW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0byBpbmRlbnQgYXQgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC4gSWYgaXQgaXMgYSBzdHJpbmcgKHN1Y2ggYXMgJ1x0JyBvciAnJm5ic3A7JyksCiAgICAgICAgICAgICAgICAgICAgICAgIGl0IGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzIHVzZWQgdG8gaW5kZW50IGF0IGVhY2ggbGV2ZWwuCgogICAgICAgICAgICBUaGlzIG1ldGhvZCBwcm9kdWNlcyBhIEpTT04gdGV4dCBmcm9tIGEgSmF2YVNjcmlwdCB2YWx1ZS4KCiAgICAgICAgICAgIFdoZW4gYW4gb2JqZWN0IHZhbHVlIGlzIGZvdW5kLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGEgdG9KU09OCiAgICAgICAgICAgIG1ldGhvZCwgaXRzIHRvSlNPTiBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYW5kIHRoZSByZXN1bHQgd2lsbCBiZQogICAgICAgICAgICBzdHJpbmdpZmllZC4gQSB0b0pTT04gbWV0aG9kIGRvZXMgbm90IHNlcmlhbGl6ZTogaXQgcmV0dXJucyB0aGUKICAgICAgICAgICAgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIG5hbWUvdmFsdWUgcGFpciB0aGF0IHNob3VsZCBiZSBzZXJpYWxpemVkLAogICAgICAgICAgICBvciB1bmRlZmluZWQgaWYgbm90aGluZyBzaG91bGQgYmUgc2VyaWFsaXplZC4gVGhlIHRvSlNPTiBtZXRob2QKICAgICAgICAgICAgd2lsbCBiZSBwYXNzZWQgdGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlLCBhbmQgdGhpcyB3aWxsIGJlCiAgICAgICAgICAgIGJvdW5kIHRvIHRoZSB2YWx1ZQoKICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgd291bGQgc2VyaWFsaXplIERhdGVzIGFzIElTTyBzdHJpbmdzLgoKICAgICAgICAgICAgICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKG4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy4KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiBuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VVRDRnVsbFllYXIoKSAgICsgJy0nICsKICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKwogICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0RhdGUoKSkgICAgICArICdUJyArCiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDSG91cnMoKSkgICAgICsgJzonICsKICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNaW51dGVzKCkpICAgKyAnOicgKwogICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ1NlY29uZHMoKSkgICArICdaJzsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwgcmVwbGFjZXIgbWV0aG9kLiBJdCB3aWxsIGJlIHBhc3NlZCB0aGUKICAgICAgICAgICAga2V5IGFuZCB2YWx1ZSBvZiBlYWNoIG1lbWJlciwgd2l0aCB0aGlzIGJvdW5kIHRvIHRoZSBjb250YWluaW5nCiAgICAgICAgICAgIG9iamVjdC4gVGhlIHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSB5b3VyIG1ldGhvZCB3aWxsIGJlCiAgICAgICAgICAgIHNlcmlhbGl6ZWQuIElmIHlvdXIgbWV0aG9kIHJldHVybnMgdW5kZWZpbmVkLCB0aGVuIHRoZSBtZW1iZXIgd2lsbAogICAgICAgICAgICBiZSBleGNsdWRlZCBmcm9tIHRoZSBzZXJpYWxpemF0aW9uLgoKICAgICAgICAgICAgSWYgdGhlIHJlcGxhY2VyIHBhcmFtZXRlciBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCB0aGVuIGl0IHdpbGwgYmUKICAgICAgICAgICAgdXNlZCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc2VyaWFsaXplZC4gSXQgZmlsdGVycyB0aGUgcmVzdWx0cwogICAgICAgICAgICBzdWNoIHRoYXQgb25seSBtZW1iZXJzIHdpdGgga2V5cyBsaXN0ZWQgaW4gdGhlIHJlcGxhY2VyIGFycmF5IGFyZQogICAgICAgICAgICBzdHJpbmdpZmllZC4KCiAgICAgICAgICAgIFZhbHVlcyB0aGF0IGRvIG5vdCBoYXZlIEpTT04gcmVwcmVzZW50YXRpb25zLCBzdWNoIGFzIHVuZGVmaW5lZCBvcgogICAgICAgICAgICBmdW5jdGlvbnMsIHdpbGwgbm90IGJlIHNlcmlhbGl6ZWQuIFN1Y2ggdmFsdWVzIGluIG9iamVjdHMgd2lsbCBiZQogICAgICAgICAgICBkcm9wcGVkOyBpbiBhcnJheXMgdGhleSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggbnVsbC4gWW91IGNhbiB1c2UKICAgICAgICAgICAgYSByZXBsYWNlciBmdW5jdGlvbiB0byByZXBsYWNlIHRob3NlIHdpdGggSlNPTiB2YWx1ZXMuCiAgICAgICAgICAgICQuanFwbG90LkpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZCkgcmV0dXJucyB1bmRlZmluZWQuCgogICAgICAgICAgICBUaGUgb3B0aW9uYWwgc3BhY2UgcGFyYW1ldGVyIHByb2R1Y2VzIGEgc3RyaW5naWZpY2F0aW9uIG9mIHRoZQogICAgICAgICAgICB2YWx1ZSB0aGF0IGlzIGZpbGxlZCB3aXRoIGxpbmUgYnJlYWtzIGFuZCBpbmRlbnRhdGlvbiB0byBtYWtlIGl0CiAgICAgICAgICAgIGVhc2llciB0byByZWFkLgoKICAgICAgICAgICAgSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHRoZW4gdGhhdCBzdHJpbmcgd2lsbAogICAgICAgICAgICBiZSB1c2VkIGZvciBpbmRlbnRhdGlvbi4gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgdGhlbgogICAgICAgICAgICB0aGUgaW5kZW50YXRpb24gd2lsbCBiZSB0aGF0IG1hbnkgc3BhY2VzLgoKICAgICAgICAgICAgRXhhbXBsZToKCiAgICAgICAgICAgIHRleHQgPSAkLmpxcGxvdC5KU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dKTsKICAgICAgICAgICAgLy8gdGV4dCBpcyAnWyJlIix7InBsdXJpYnVzIjoidW51bSJ9XScKCgogICAgICAgICAgICB0ZXh0ID0gJC5qcXBsb3QuSlNPTi5zdHJpbmdpZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSwgbnVsbCwgJ1x0Jyk7CiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcblx0ImUiLFxuXHR7XG5cdFx0InBsdXJpYnVzIjogInVudW0iXG5cdH1cbl0nCgogICAgICAgICAgICB0ZXh0ID0gJC5qcXBsb3QuSlNPTi5zdHJpbmdpZnkoW25ldyBEYXRlKCldLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNba2V5XSBpbnN0YW5jZW9mIERhdGUgPwogICAgICAgICAgICAgICAgICAgICdEYXRlKCcgKyB0aGlzW2tleV0gKyAnKScgOiB2YWx1ZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1siRGF0ZSgtLS1jdXJyZW50IHRpbWUtLS0pIl0nCgoKICAgICAgICAkLmpxcGxvdC5KU09OLnBhcnNlKHRleHQsIHJldml2ZXIpCiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04gdGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS4KICAgICAgICAgICAgSXQgY2FuIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLgoKICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZAogICAgICAgICAgICB0cmFuc2Zvcm0gdGhlIHJlc3VsdHMuIEl0IHJlY2VpdmVzIGVhY2ggb2YgdGhlIGtleXMgYW5kIHZhbHVlcywKICAgICAgICAgICAgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS4KICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLgogICAgICAgICAgICBJZiBpdCByZXR1cm5zIHVuZGVmaW5lZCB0aGVuIHRoZSBtZW1iZXIgaXMgZGVsZXRlZC4KCiAgICAgICAgICAgIEV4YW1wbGU6CgogICAgICAgICAgICAvLyBQYXJzZSB0aGUgdGV4dC4gVmFsdWVzIHRoYXQgbG9vayBsaWtlIElTTyBkYXRlIHN0cmluZ3Mgd2lsbAogICAgICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLgoKICAgICAgICAgICAgbXlEYXRhID0gJC5qcXBsb3QuSlNPTi5wYXJzZSh0ZXh0LCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewogICAgICAgICAgICAgICAgdmFyIGE7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgIGEgPQovXihcZHs0fSktKFxkezJ9KS0oXGR7Mn0pVChcZHsyfSk6KFxkezJ9KTooXGR7Mn0oPzpcLlxkKik/KVokLy5leGVjKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBpZiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0gMSwgK2FbM10sICthWzRdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgK2FbNV0sICthWzZdKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIG15RGF0YSA9ICQuanFwbG90LkpTT04ucGFyc2UoJ1siRGF0ZSgwOS8wOS8yMDAxKSJdJywgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKICAgICAgICAgICAgICAgIHZhciBkOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgNSkgPT09ICdEYXRlKCcgJiYKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoLTEpID09PSAnKScpIHsKICAgICAgICAgICAgICAgICAgICBkID0gbmV3IERhdGUodmFsdWUuc2xpY2UoNSwgLTEpKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgIH0pOwoKCiAgICBUaGlzIGlzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiBZb3UgYXJlIGZyZWUgdG8gY29weSwgbW9kaWZ5LCBvcgogICAgcmVkaXN0cmlidXRlLgoqLwoKKGZ1bmN0aW9uKCQpIHsKCiAgICAkLmpxcGxvdC5KU09OID0gd2luZG93LkpTT047CgogICAgaWYgKCF3aW5kb3cuSlNPTikgewogICAgICAgICQuanFwbG90LkpTT04gPSB7fTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gZihuKSB7CiAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy4KICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47CiAgICB9CgogICAgaWYgKHR5cGVvZiBEYXRlLnByb3RvdHlwZS50b0pTT04gIT09ICdmdW5jdGlvbicpIHsKCiAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKGtleSkgewoKICAgICAgICAgICAgcmV0dXJuIGlzRmluaXRlKHRoaXMudmFsdWVPZigpKSA/CiAgICAgICAgICAgICAgICAgICB0aGlzLmdldFVUQ0Z1bGxZZWFyKCkgICArICctJyArCiAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArCiAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0RhdGUoKSkgICAgICArICdUJyArCiAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0hvdXJzKCkpICAgICArICc6JyArCiAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01pbnV0ZXMoKSkgICArICc6JyArCiAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ1NlY29uZHMoKSkgICArICdaJyA6IG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgU3RyaW5nLnByb3RvdHlwZS50b0pTT04gPQogICAgICAgIE51bWJlci5wcm90b3R5cGUudG9KU09OID0KICAgICAgICBCb29sZWFuLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTsKICAgICAgICB9OwogICAgfQoKICAgIHZhciBjeCA9IC9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csCiAgICAgICAgZXNjYXBhYmxlID0gL1tcXFwiXHgwMC1ceDFmXHg3Zi1ceDlmXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csCiAgICAgICAgZ2FwLAogICAgICAgIGluZGVudCwKICAgICAgICBtZXRhID0geyAgICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9ucwogICAgICAgICAgICAnXGInOiAnXFxiJywKICAgICAgICAgICAgJ1x0JzogJ1xcdCcsCiAgICAgICAgICAgICdcbic6ICdcXG4nLAogICAgICAgICAgICAnXGYnOiAnXFxmJywKICAgICAgICAgICAgJ1xyJzogJ1xccicsCiAgICAgICAgICAgICciJyA6ICdcXCInLAogICAgICAgICAgICAnXFwnOiAnXFxcXCcKICAgICAgICB9LAogICAgICAgIHJlcDsKCgogICAgZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7CgovLyBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5vCi8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuCi8vIE90aGVyd2lzZSB3ZSBtdXN0IGFsc28gcmVwbGFjZSB0aGUgb2ZmZW5kaW5nIGNoYXJhY3RlcnMgd2l0aCBzYWZlIGVzY2FwZQovLyBzZXF1ZW5jZXMuCgogICAgICAgIGVzY2FwYWJsZS5sYXN0SW5kZXggPSAwOwogICAgICAgIHJldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpID8KICAgICAgICAgICAgJyInICsgc3RyaW5nLnJlcGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgdmFyIGMgPSBtZXRhW2FdOwogICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJyA/IGMgOgogICAgICAgICAgICAgICAgICAgICdcXHUnICsgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTsKICAgICAgICAgICAgfSkgKyAnIicgOgogICAgICAgICAgICAnIicgKyBzdHJpbmcgKyAnIic7CiAgICB9CgoKICAgIGZ1bmN0aW9uIHN0cihrZXksIGhvbGRlcikgewoKLy8gUHJvZHVjZSBhIHN0cmluZyBmcm9tIGhvbGRlcltrZXldLgoKICAgICAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci4KICAgICAgICAgICAgaywgICAgICAgICAgLy8gVGhlIG1lbWJlciBrZXkuCiAgICAgICAgICAgIHYsICAgICAgICAgIC8vIFRoZSBtZW1iZXIgdmFsdWUuCiAgICAgICAgICAgIGxlbmd0aCwKICAgICAgICAgICAgbWluZCA9IGdhcCwKICAgICAgICAgICAgcGFydGlhbCwKICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTsKCi8vIElmIHRoZSB2YWx1ZSBoYXMgYSB0b0pTT04gbWV0aG9kLCBjYWxsIGl0IHRvIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLgoKICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJgogICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpOwogICAgICAgIH0KCi8vIElmIHdlIHdlcmUgY2FsbGVkIHdpdGggYSByZXBsYWNlciBmdW5jdGlvbiwgdGhlbiBjYWxsIHRoZSByZXBsYWNlciB0bwovLyBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS4KCiAgICAgICAgaWYgKHR5cGVvZiByZXAgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgdmFsdWUgPSByZXAuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpOwogICAgICAgIH0KCi8vIFdoYXQgaGFwcGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIHZhbHVlJ3MgdHlwZS4KCiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHsKICAgICAgICBjYXNlICdzdHJpbmcnOgogICAgICAgICAgICByZXR1cm4gcXVvdGUodmFsdWUpOwoKICAgICAgICBjYXNlICdudW1iZXInOgoKLy8gSlNPTiBudW1iZXJzIG11c3QgYmUgZmluaXRlLiBFbmNvZGUgbm9uLWZpbml0ZSBudW1iZXJzIGFzIG51bGwuCgogICAgICAgICAgICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6ICdudWxsJzsKCiAgICAgICAgY2FzZSAnYm9vbGVhbic6CiAgICAgICAgY2FzZSAnbnVsbCc6CgovLyBJZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGwsIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuIE5vdGU6Ci8vIHR5cGVvZiBudWxsIGRvZXMgbm90IHByb2R1Y2UgJ251bGwnLiBUaGUgY2FzZSBpcyBpbmNsdWRlZCBoZXJlIGluCi8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXkuCgogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTsKCi8vIElmIHRoZSB0eXBlIGlzICdvYmplY3QnLCB3ZSBtaWdodCBiZSBkZWFsaW5nIHdpdGggYW4gb2JqZWN0IG9yIGFuIGFycmF5IG9yCi8vIG51bGwuCgogICAgICAgIGNhc2UgJ29iamVjdCc6CgovLyBEdWUgdG8gYSBzcGVjaWZpY2F0aW9uIGJsdW5kZXIgaW4gRUNNQVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsCi8vIHNvIHdhdGNoIG91dCBmb3IgdGhhdCBjYXNlLgoKICAgICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICdudWxsJzsKICAgICAgICAgICAgfQoKLy8gTWFrZSBhbiBhcnJheSB0byBob2xkIHRoZSBwYXJ0aWFsIHJlc3VsdHMgb2Ygc3RyaW5naWZ5aW5nIHRoaXMgb2JqZWN0IHZhbHVlLgoKICAgICAgICAgICAgZ2FwICs9IGluZGVudDsKICAgICAgICAgICAgcGFydGlhbCA9IFtdOwoKLy8gSXMgdGhlIHZhbHVlIGFuIGFycmF5PwoKICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nKSB7CgovLyBUaGUgdmFsdWUgaXMgYW4gYXJyYXkuIFN0cmluZ2lmeSBldmVyeSBlbGVtZW50LiBVc2UgbnVsbCBhcyBhIHBsYWNlaG9sZGVyCi8vIGZvciBub24tSlNPTiB2YWx1ZXMuCgogICAgICAgICAgICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnOwogICAgICAgICAgICAgICAgfQoKLy8gSm9pbiBhbGwgb2YgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsIGFuZCB3cmFwIHRoZW0gaW4KLy8gYnJhY2tldHMuCgogICAgICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwID8gJ1tdJyA6CiAgICAgICAgICAgICAgICAgICAgZ2FwID8gJ1tcbicgKyBnYXAgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5qb2luKCcsXG4nICsgZ2FwKSArICdcbicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmQgKyAnXScgOgogICAgICAgICAgICAgICAgICAgICAgICAgICdbJyArIHBhcnRpYWwuam9pbignLCcpICsgJ10nOwogICAgICAgICAgICAgICAgZ2FwID0gbWluZDsKICAgICAgICAgICAgICAgIHJldHVybiB2OwogICAgICAgICAgICB9CgovLyBJZiB0aGUgcmVwbGFjZXIgaXMgYW4gYXJyYXksIHVzZSBpdCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc3RyaW5naWZpZWQuCgogICAgICAgICAgICBpZiAocmVwICYmIHR5cGVvZiByZXAgPT09ICdvYmplY3QnKSB7CiAgICAgICAgICAgICAgICBsZW5ndGggPSByZXAubGVuZ3RoOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgayA9IHJlcFtpXTsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGsgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CgovLyBPdGhlcndpc2UsIGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIG9iamVjdC4KCiAgICAgICAgICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCi8vIEpvaW4gYWxsIG9mIHRoZSBtZW1iZXIgdGV4dHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywKLy8gYW5kIHdyYXAgdGhlbSBpbiBicmFjZXMuCgogICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAgPyAne30nIDoKICAgICAgICAgICAgICAgIGdhcCA/ICd7XG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXG4nICsgZ2FwKSArICdcbicgKwogICAgICAgICAgICAgICAgICAgICAgICBtaW5kICsgJ30nIDogJ3snICsgcGFydGlhbC5qb2luKCcsJykgKyAnfSc7CiAgICAgICAgICAgIGdhcCA9IG1pbmQ7CiAgICAgICAgICAgIHJldHVybiB2OwogICAgICAgIH0KICAgIH0KCi8vIElmIHRoZSBKU09OIG9iamVjdCBkb2VzIG5vdCB5ZXQgaGF2ZSBhIHN0cmluZ2lmeSBtZXRob2QsIGdpdmUgaXQgb25lLgoKICAgIGlmICh0eXBlb2YgJC5qcXBsb3QuSlNPTi5zdHJpbmdpZnkgIT09ICdmdW5jdGlvbicpIHsKICAgICAgICAkLmpxcGxvdC5KU09OLnN0cmluZ2lmeSA9IGZ1bmN0aW9uICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSB7CgovLyBUaGUgc3RyaW5naWZ5IG1ldGhvZCB0YWtlcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCByZXBsYWNlciwgYW5kIGFuIG9wdGlvbmFsCi8vIHNwYWNlIHBhcmFtZXRlciwgYW5kIHJldHVybnMgYSBKU09OIHRleHQuIFRoZSByZXBsYWNlciBjYW4gYmUgYSBmdW5jdGlvbgovLyB0aGF0IGNhbiByZXBsYWNlIHZhbHVlcywgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgc2VsZWN0IHRoZSBrZXlzLgovLyBBIGRlZmF1bHQgcmVwbGFjZXIgbWV0aG9kIGNhbiBiZSBwcm92aWRlZC4gVXNlIG9mIHRoZSBzcGFjZSBwYXJhbWV0ZXIgY2FuCi8vIHByb2R1Y2UgdGV4dCB0aGF0IGlzIG1vcmUgZWFzaWx5IHJlYWRhYmxlLgoKICAgICAgICAgICAgdmFyIGk7CiAgICAgICAgICAgIGdhcCA9ICcnOwogICAgICAgICAgICBpbmRlbnQgPSAnJzsKCi8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIG1ha2UgYW4gaW5kZW50IHN0cmluZyBjb250YWluaW5nIHRoYXQKLy8gbWFueSBzcGFjZXMuCgogICAgICAgICAgICBpZiAodHlwZW9mIHNwYWNlID09PSAnbnVtYmVyJykgewogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEpIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gJyAnOwogICAgICAgICAgICAgICAgfQoKLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbmRlbnQgc3RyaW5nLgoKICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgPSBzcGFjZTsKICAgICAgICAgICAgfQoKLy8gSWYgdGhlcmUgaXMgYSByZXBsYWNlciwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5LgovLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yLgoKICAgICAgICAgICAgcmVwID0gcmVwbGFjZXI7CiAgICAgICAgICAgIGlmIChyZXBsYWNlciAmJiB0eXBlb2YgcmVwbGFjZXIgIT09ICdmdW5jdGlvbicgJiYKICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHJlcGxhY2VyICE9PSAnb2JqZWN0JyB8fAogICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVwbGFjZXIubGVuZ3RoICE9PSAnbnVtYmVyJykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignJC5qcXBsb3QuSlNPTi5zdHJpbmdpZnknKTsKICAgICAgICAgICAgfQoKLy8gTWFrZSBhIGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBvZiAnJy4KLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS4KCiAgICAgICAgICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTsKICAgICAgICB9OwogICAgfQoKCi8vIElmIHRoZSBKU09OIG9iamVjdCBkb2VzIG5vdCB5ZXQgaGF2ZSBhIHBhcnNlIG1ldGhvZCwgZ2l2ZSBpdCBvbmUuCgogICAgaWYgKHR5cGVvZiAkLmpxcGxvdC5KU09OLnBhcnNlICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgJC5qcXBsb3QuSlNPTi5wYXJzZSA9IGZ1bmN0aW9uICh0ZXh0LCByZXZpdmVyKSB7CgovLyBUaGUgcGFyc2UgbWV0aG9kIHRha2VzIGEgdGV4dCBhbmQgYW4gb3B0aW9uYWwgcmV2aXZlciBmdW5jdGlvbiwgYW5kIHJldHVybnMKLy8gYSBKYXZhU2NyaXB0IHZhbHVlIGlmIHRoZSB0ZXh0IGlzIGEgdmFsaWQgSlNPTiB0ZXh0LgoKICAgICAgICAgICAgdmFyIGo7CgogICAgICAgICAgICBmdW5jdGlvbiB3YWxrKGhvbGRlciwga2V5KSB7CgovLyBUaGUgd2FsayBtZXRob2QgaXMgdXNlZCB0byByZWN1cnNpdmVseSB3YWxrIHRoZSByZXN1bHRpbmcgc3RydWN0dXJlIHNvCi8vIHRoYXQgbW9kaWZpY2F0aW9ucyBjYW4gYmUgbWFkZS4KCiAgICAgICAgICAgICAgICB2YXIgaywgdiwgdmFsdWUgPSBob2xkZXJba2V5XTsKICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtrXSA9IHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTsKICAgICAgICAgICAgfQoKCi8vIFBhcnNpbmcgaGFwcGVucyBpbiBmb3VyIHN0YWdlcy4gSW4gdGhlIGZpcnN0IHN0YWdlLCB3ZSByZXBsYWNlIGNlcnRhaW4KLy8gVW5pY29kZSBjaGFyYWN0ZXJzIHdpdGggZXNjYXBlIHNlcXVlbmNlcy4gSmF2YVNjcmlwdCBoYW5kbGVzIG1hbnkgY2hhcmFjdGVycwovLyBpbmNvcnJlY3RseSwgZWl0aGVyIHNpbGVudGx5IGRlbGV0aW5nIHRoZW0sIG9yIHRyZWF0aW5nIHRoZW0gYXMgbGluZSBlbmRpbmdzLgoKICAgICAgICAgICAgdGV4dCA9IFN0cmluZyh0ZXh0KTsKICAgICAgICAgICAgY3gubGFzdEluZGV4ID0gMDsKICAgICAgICAgICAgaWYgKGN4LnRlc3QodGV4dCkpIHsKICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoY3gsIGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHUnICsKICAgICAgICAgICAgICAgICAgICAgICAgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgovLyBJbiB0aGUgc2Vjb25kIHN0YWdlLCB3ZSBydW4gdGhlIHRleHQgYWdhaW5zdCByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgbG9vawovLyBmb3Igbm9uLUpTT04gcGF0dGVybnMuIFdlIGFyZSBlc3BlY2lhbGx5IGNvbmNlcm5lZCB3aXRoICcoKScgYW5kICduZXcnCi8vIGJlY2F1c2UgdGhleSBjYW4gY2F1c2UgaW52b2NhdGlvbiwgYW5kICc9JyBiZWNhdXNlIGl0IGNhbiBjYXVzZSBtdXRhdGlvbi4KLy8gQnV0IGp1c3QgdG8gYmUgc2FmZSwgd2Ugd2FudCB0byByZWplY3QgYWxsIHVuZXhwZWN0ZWQgZm9ybXMuCgovLyBXZSBzcGxpdCB0aGUgc2Vjb25kIHN0YWdlIGludG8gNCByZWdleHAgb3BlcmF0aW9ucyBpbiBvcmRlciB0byB3b3JrIGFyb3VuZAovLyBjcmlwcGxpbmcgaW5lZmZpY2llbmNpZXMgaW4gSUUncyBhbmQgU2FmYXJpJ3MgcmVnZXhwIGVuZ2luZXMuIEZpcnN0IHdlCi8vIHJlcGxhY2UgdGhlIEpTT04gYmFja3NsYXNoIHBhaXJzIHdpdGggJ0AnIChhIG5vbi1KU09OIGNoYXJhY3RlcikuIFNlY29uZCwgd2UKLy8gcmVwbGFjZSBhbGwgc2ltcGxlIHZhbHVlIHRva2VucyB3aXRoICddJyBjaGFyYWN0ZXJzLiBUaGlyZCwgd2UgZGVsZXRlIGFsbAovLyBvcGVuIGJyYWNrZXRzIHRoYXQgZm9sbG93IGEgY29sb24gb3IgY29tbWEgb3IgdGhhdCBiZWdpbiB0aGUgdGV4dC4gRmluYWxseSwKLy8gd2UgbG9vayB0byBzZWUgdGhhdCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIG9ubHkgd2hpdGVzcGFjZSBvciAnXScgb3IKLy8gJywnIG9yICc6JyBvciAneycgb3IgJ30nLiBJZiB0aGF0IGlzIHNvLCB0aGVuIHRoZSB0ZXh0IGlzIHNhZmUgZm9yIGV2YWwuCgogICAgICAgICAgICBpZiAoL15bXF0sOnt9XHNdKiQvLnRlc3QodGV4dC5yZXBsYWNlKC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csICdAJykucmVwbGFjZSgvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2csICddJykucmVwbGFjZSgvKD86Xnw6fCwpKD86XHMqXFspKy9nLCAnJykpKSB7CgovLyBJbiB0aGUgdGhpcmQgc3RhZ2Ugd2UgdXNlIHRoZSBldmFsIGZ1bmN0aW9uIHRvIGNvbXBpbGUgdGhlIHRleHQgaW50byBhCi8vIEphdmFTY3JpcHQgc3RydWN0dXJlLiBUaGUgJ3snIG9wZXJhdG9yIGlzIHN1YmplY3QgdG8gYSBzeW50YWN0aWMgYW1iaWd1aXR5Ci8vIGluIEphdmFTY3JpcHQ6IGl0IGNhbiBiZWdpbiBhIGJsb2NrIG9yIGFuIG9iamVjdCBsaXRlcmFsLiBXZSB3cmFwIHRoZSB0ZXh0Ci8vIGluIHBhcmVucyB0byBlbGltaW5hdGUgdGhlIGFtYmlndWl0eS4KCiAgICAgICAgICAgICAgICBqID0gZXZhbCgnKCcgKyB0ZXh0ICsgJyknKTsKCi8vIEluIHRoZSBvcHRpb25hbCBmb3VydGggc3RhZ2UsIHdlIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIG5ldyBzdHJ1Y3R1cmUsIHBhc3NpbmcKLy8gZWFjaCBuYW1lL3ZhbHVlIHBhaXIgdG8gYSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZSB0cmFuc2Zvcm1hdGlvbi4KCiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbicgPwogICAgICAgICAgICAgICAgICAgIHdhbGsoeycnOiBqfSwgJycpIDogajsKICAgICAgICAgICAgfQoKLy8gSWYgdGhlIHRleHQgaXMgbm90IEpTT04gcGFyc2VhYmxlLCB0aGVuIGEgU3ludGF4RXJyb3IgaXMgdGhyb3duLgoKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCckLmpxcGxvdC5KU09OLnBhcnNlJyk7CiAgICAgICAgfTsKICAgIH0KfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.json2.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKCQpeyQuanFwbG90LkpTT049d2luZG93LkpTT047aWYoIXdpbmRvdy5KU09OKXskLmpxcGxvdC5KU09OPXt9fWZ1bmN0aW9uIGYobil7cmV0dXJuIG48MTA/IjAiK246bn1pZih0eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9KU09OIT09ImZ1bmN0aW9uIil7RGF0ZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGtleSl7cmV0dXJuIGlzRmluaXRlKHRoaXMudmFsdWVPZigpKT90aGlzLmdldFVUQ0Z1bGxZZWFyKCkrIi0iK2YodGhpcy5nZXRVVENNb250aCgpKzEpKyItIitmKHRoaXMuZ2V0VVRDRGF0ZSgpKSsiVCIrZih0aGlzLmdldFVUQ0hvdXJzKCkpKyI6IitmKHRoaXMuZ2V0VVRDTWludXRlcygpKSsiOiIrZih0aGlzLmdldFVUQ1NlY29uZHMoKSkrIloiOm51bGx9O1N0cmluZy5wcm90b3R5cGUudG9KU09OPU51bWJlci5wcm90b3R5cGUudG9KU09OPUJvb2xlYW4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbihrZXkpe3JldHVybiB0aGlzLnZhbHVlT2YoKX19dmFyIGN4PS9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csZXNjYXBhYmxlPS9bXFxcIlx4MDAtXHgxZlx4N2YtXHg5Zlx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS9nLGdhcCxpbmRlbnQsbWV0YT17IlxiIjoiXFxiIiwiXHQiOiJcXHQiLCJcbiI6IlxcbiIsIlxmIjoiXFxmIiwiXHIiOiJcXHIiLCciJzonXFwiJywiXFwiOiJcXFxcIn0scmVwO2Z1bmN0aW9uIHF1b3RlKHN0cmluZyl7ZXNjYXBhYmxlLmxhc3RJbmRleD0wO3JldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpPyciJytzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsZnVuY3Rpb24oYSl7dmFyIGM9bWV0YVthXTtyZXR1cm4gdHlwZW9mIGM9PT0ic3RyaW5nIj9jOiJcXHUiKygiMDAwMCIrYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpfSkrJyInOiciJytzdHJpbmcrJyInfWZ1bmN0aW9uIHN0cihrZXksaG9sZGVyKXt2YXIgaSxrLHYsbGVuZ3RoLG1pbmQ9Z2FwLHBhcnRpYWwsdmFsdWU9aG9sZGVyW2tleV07aWYodmFsdWUmJnR5cGVvZiB2YWx1ZT09PSJvYmplY3QiJiZ0eXBlb2YgdmFsdWUudG9KU09OPT09ImZ1bmN0aW9uIil7dmFsdWU9dmFsdWUudG9KU09OKGtleSl9aWYodHlwZW9mIHJlcD09PSJmdW5jdGlvbiIpe3ZhbHVlPXJlcC5jYWxsKGhvbGRlcixrZXksdmFsdWUpfXN3aXRjaCh0eXBlb2YgdmFsdWUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gcXVvdGUodmFsdWUpO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUodmFsdWUpP1N0cmluZyh2YWx1ZSk6Im51bGwiO2Nhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpyZXR1cm4gU3RyaW5nKHZhbHVlKTtjYXNlIm9iamVjdCI6aWYoIXZhbHVlKXtyZXR1cm4ibnVsbCJ9Z2FwKz1pbmRlbnQ7cGFydGlhbD1bXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKT09PSJbb2JqZWN0IEFycmF5XSIpe2xlbmd0aD12YWx1ZS5sZW5ndGg7Zm9yKGk9MDtpPGxlbmd0aDtpKz0xKXtwYXJ0aWFsW2ldPXN0cihpLHZhbHVlKXx8Im51bGwifXY9cGFydGlhbC5sZW5ndGg9PT0wPyJbXSI6Z2FwPyJbXG4iK2dhcCtwYXJ0aWFsLmpvaW4oIixcbiIrZ2FwKSsiXG4iK21pbmQrIl0iOiJbIitwYXJ0aWFsLmpvaW4oIiwiKSsiXSI7Z2FwPW1pbmQ7cmV0dXJuIHZ9aWYocmVwJiZ0eXBlb2YgcmVwPT09Im9iamVjdCIpe2xlbmd0aD1yZXAubGVuZ3RoO2ZvcihpPTA7aTxsZW5ndGg7aSs9MSl7az1yZXBbaV07aWYodHlwZW9mIGs9PT0ic3RyaW5nIil7dj1zdHIoayx2YWx1ZSk7aWYodil7cGFydGlhbC5wdXNoKHF1b3RlKGspKyhnYXA/IjogIjoiOiIpK3YpfX19fWVsc2V7Zm9yKGsgaW4gdmFsdWUpe2lmKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLGspKXt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19dj1wYXJ0aWFsLmxlbmd0aD09PTA/Int9IjpnYXA/IntcbiIrZ2FwK3BhcnRpYWwuam9pbigiLFxuIitnYXApKyJcbiIrbWluZCsifSI6InsiK3BhcnRpYWwuam9pbigiLCIpKyJ9IjtnYXA9bWluZDtyZXR1cm4gdn19aWYodHlwZW9mICQuanFwbG90LkpTT04uc3RyaW5naWZ5IT09ImZ1bmN0aW9uIil7JC5qcXBsb3QuSlNPTi5zdHJpbmdpZnk9ZnVuY3Rpb24odmFsdWUscmVwbGFjZXIsc3BhY2Upe3ZhciBpO2dhcD0iIjtpbmRlbnQ9IiI7aWYodHlwZW9mIHNwYWNlPT09Im51bWJlciIpe2ZvcihpPTA7aTxzcGFjZTtpKz0xKXtpbmRlbnQrPSIgIn19ZWxzZXtpZih0eXBlb2Ygc3BhY2U9PT0ic3RyaW5nIil7aW5kZW50PXNwYWNlfX1yZXA9cmVwbGFjZXI7aWYocmVwbGFjZXImJnR5cGVvZiByZXBsYWNlciE9PSJmdW5jdGlvbiImJih0eXBlb2YgcmVwbGFjZXIhPT0ib2JqZWN0Inx8dHlwZW9mIHJlcGxhY2VyLmxlbmd0aCE9PSJudW1iZXIiKSl7dGhyb3cgbmV3IEVycm9yKCIkLmpxcGxvdC5KU09OLnN0cmluZ2lmeSIpfXJldHVybiBzdHIoIiIseyIiOnZhbHVlfSl9fWlmKHR5cGVvZiAkLmpxcGxvdC5KU09OLnBhcnNlIT09ImZ1bmN0aW9uIil7JC5qcXBsb3QuSlNPTi5wYXJzZT1mdW5jdGlvbih0ZXh0LHJldml2ZXIpe3ZhciBqO2Z1bmN0aW9uIHdhbGsoaG9sZGVyLGtleSl7dmFyIGssdix2YWx1ZT1ob2xkZXJba2V5XTtpZih2YWx1ZSYmdHlwZW9mIHZhbHVlPT09Im9iamVjdCIpe2ZvcihrIGluIHZhbHVlKXtpZihPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSxrKSl7dj13YWxrKHZhbHVlLGspO2lmKHYhPT11bmRlZmluZWQpe3ZhbHVlW2tdPXZ9ZWxzZXtkZWxldGUgdmFsdWVba119fX19cmV0dXJuIHJldml2ZXIuY2FsbChob2xkZXIsa2V5LHZhbHVlKX10ZXh0PVN0cmluZyh0ZXh0KTtjeC5sYXN0SW5kZXg9MDtpZihjeC50ZXN0KHRleHQpKXt0ZXh0PXRleHQucmVwbGFjZShjeCxmdW5jdGlvbihhKXtyZXR1cm4iXFx1IisoIjAwMDAiK2EuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KX0pfWlmKC9eW1xdLDp7fVxzXSokLy50ZXN0KHRleHQucmVwbGFjZSgvXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCJAIikucmVwbGFjZSgvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2csIl0iKS5yZXBsYWNlKC8oPzpefDp8LCkoPzpccypcWykrL2csIiIpKSl7aj1ldmFsKCIoIit0ZXh0KyIpIik7cmV0dXJuIHR5cGVvZiByZXZpdmVyPT09ImZ1bmN0aW9uIj93YWxrKHsiIjpqfSwiIik6an10aHJvdyBuZXcgU3ludGF4RXJyb3IoIiQuanFwbG90LkpTT04ucGFyc2UiKX19fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.logAxisRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLyoqCiAgICAqICBjbGFzczogJC5qcXBsb3QuTG9nQXhpc1JlbmRlcmVyCiAgICAqICBBIHBsdWdpbiBmb3IgYSBqcVBsb3QgdG8gcmVuZGVyIGEgbG9nYXJpdGhtaWMgYXhpcy4KICAgICogCiAgICAqICBUbyB1c2UgdGhpcyByZW5kZXJlciwgaW5jbHVkZSB0aGUgcGx1Z2luIGluIHlvdXIgc291cmNlCiAgICAqICA+IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSJwbHVnaW5zL2pxcGxvdC5sb2dBeGlzUmVuZGVyZXIuanMiPjwvc2NyaXB0PgogICAgKiAgCiAgICAqICBhbmQgc3VwcGx5IHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIHRvIHlvdXIgcGxvdAogICAgKiAgCiAgICAqICA+IHtheGVzOnt4YXhpczp7cmVuZGVyZXI6JC5qcXBsb3QuTG9nQXhpc1JlbmRlcmVyfX19CiAgICAqKi8gCiAgICAkLmpxcGxvdC5Mb2dBeGlzUmVuZGVyZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICAkLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIuY2FsbCh0aGlzKTsKICAgICAgICAvLyBwcm9wOiBheGlzRGVmYXVsdHMKICAgICAgICAvLyBEZWZhdWx0IHByb3BlcnRpZXMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIGRpcmVjdGx5IHRvIHRoZSBzZXJpZXMuCiAgICAgICAgLy8KICAgICAgICAvLyBHcm91cDogUHJvcGVydGllcwogICAgICAgIC8vCiAgICAgICAgLy8gUHJvcGVydGllcwogICAgICAgIC8vCiAgICAgICAgLy8gYmFzZSAtIHRoZSBsb2dhcml0aG1pYyBiYXNlLCBjb21tb25seSAyLCAxMCBvciBNYXRoLkUKICAgICAgICAvLyB0aWNrRGlzdHJpYnV0aW9uIC0gRGVwcmVjYXRlZC4gICJwb3dlciIgZGlzdHJpYnV0aW9uIG9mIHRpY2tzCiAgICAgICAgLy8gYWx3YXlzIHVzZWQuICBPcHRpb24gaGFzIG5vIGVmZmVjdC4KICAgICAgICB0aGlzLmF4aXNEZWZhdWx0cyA9IHsKICAgICAgICAgICAgYmFzZSA6IDEwLAogICAgICAgICAgICB0aWNrRGlzdHJpYnV0aW9uIDoncG93ZXInCiAgICAgICAgfTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkxvZ0F4aXNSZW5kZXJlci5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyKCk7CiAgICAkLmpxcGxvdC5Mb2dBeGlzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJC5qcXBsb3QuTG9nQXhpc1JlbmRlcmVyOwogICAgCiAgICAkLmpxcGxvdC5Mb2dBeGlzUmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgLy8gcHJvcDogZHJhd0Jhc2VsaW5lCiAgICAgICAgLy8gVHJ1ZSB0byBkcmF3IHRoZSBheGlzIGJhc2VsaW5lLgogICAgICAgIHRoaXMuZHJhd0Jhc2VsaW5lID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBtaW5vclRpY2tzCiAgICAgICAgLy8gTnVtYmVyIG9mIHRpY2tzIHRvIGFkZCBiZXR3ZWVuICJtYWpvciIgdGlja3MuCiAgICAgICAgLy8gTWFqb3IgdGlja3MgYXJlIHRpY2tzIHN1cHBsaWVkIGJ5IHVzZXIgb3IgYXV0byBjb21wdXRlZC4KICAgICAgICAvLyBNaW5vciB0aWNrcyBjYW5ub3QgYmUgY3JlYXRlZCBieSB1c2VyLgogICAgICAgIHRoaXMubWlub3JUaWNrcyA9ICdhdXRvJzsKICAgICAgICB0aGlzLl9zY2FsZWZhY3QgPSAxLjA7CgogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwoKICAgICAgICB0aGlzLl9hdXRvRm9ybWF0U3RyaW5nID0gJyVkJzsKICAgICAgICB0aGlzLl9vdmVycmlkZUZvcm1hdFN0cmluZyA9IGZhbHNlOwoKICAgICAgICBmb3IgKHZhciBkIGluIHRoaXMucmVuZGVyZXIuYXhpc0RlZmF1bHRzKSB7CiAgICAgICAgICAgIGlmICh0aGlzW2RdID09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXNbZF0gPSB0aGlzLnJlbmRlcmVyLmF4aXNEZWZhdWx0c1tkXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhpcy5yZXNldERhdGFCb3VuZHMoKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LkxvZ0F4aXNSZW5kZXJlci5wcm90b3R5cGUuY3JlYXRlVGlja3MgPSBmdW5jdGlvbihwbG90KSB7CiAgICAgICAgLy8gd2UncmUgYXJlIG9wZXJhdGluZyBvbiBhbiBheGlzIGhlcmUKICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl90aWNrczsKICAgICAgICB2YXIgdXNlclRpY2tzID0gdGhpcy50aWNrczsKICAgICAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTsKICAgICAgICB2YXIgZGIgPSB0aGlzLl9kYXRhQm91bmRzOwogICAgICAgIHZhciBkaW0gPSAodGhpcy5uYW1lLmNoYXJBdCgwKSA9PT0gJ3gnKSA/IHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIDogdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0OwogICAgICAgIHZhciBpbnRlcnZhbDsKICAgICAgICB2YXIgbWluLCBtYXg7CiAgICAgICAgdmFyIHBvczEsIHBvczI7CiAgICAgICAgdmFyIHR0LCBpOwoKICAgICAgICB2YXIgdGhyZXNob2xkID0gMzA7CiAgICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIHNjYWxlZmFjdG9yIGlzIHNjcmV3aW5nIHVwIHRpY2tzLgogICAgICAgIHRoaXMuX3NjYWxlZmFjdCA9ICAoTWF0aC5tYXgoZGltLCB0aHJlc2hvbGQrMSkgLSB0aHJlc2hvbGQpLzMwMDsKCiAgICAgICAgLy8gaWYgd2UgYWxyZWFkeSBoYXZlIHRpY2tzLCB1c2UgdGhlbS4KICAgICAgICAvLyB0aWNrcyBtdXN0IGJlIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdmFsdWUuCiAgICAgICAgaWYgKHVzZXJUaWNrcy5sZW5ndGgpIHsKICAgICAgICAgICAgLy8gdGlja3MgY291bGQgYmUgMUQgb3IgMkQgYXJyYXkgb2YgW3ZhbCwgdmFsLCAsLCxdIG9yIFtbdmFsLCBsYWJlbF0sIFt2YWwsIGxhYmVsXSwgLi4uXSBvciBtaXhlZAogICAgICAgICAgICBmb3IgKGk9MDsgaTx1c2VyVGlja3MubGVuZ3RoOyBpKyspewogICAgICAgICAgICAgICAgdmFyIHV0ID0gdXNlclRpY2tzW2ldOwogICAgICAgICAgICAgICAgdmFyIHQgPSBuZXcgdGhpcy50aWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7CiAgICAgICAgICAgICAgICBpZiAodXQuY29uc3RydWN0b3IgPT0gQXJyYXkpIHsKICAgICAgICAgICAgICAgICAgICB0LnZhbHVlID0gdXRbMF07CiAgICAgICAgICAgICAgICAgICAgdC5sYWJlbCA9IHV0WzFdOwogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG93VGlja3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TGFiZWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5zaG93VGlja01hcmtzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdC5zZXRUaWNrKHV0WzBdLCB0aGlzLm5hbWUpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnB1c2godCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZWxzZSBpZiAoJC5pc1BsYWluT2JqZWN0KHV0KSkgewogICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsIHQsIHV0KTsKICAgICAgICAgICAgICAgICAgICB0LmF4aXMgPSB0aGlzLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdC52YWx1ZSA9IHV0OwogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG93VGlja3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TGFiZWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5zaG93VGlja01hcmtzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdC5zZXRUaWNrKHV0LCB0aGlzLm5hbWUpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnB1c2godCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IHVzZXJUaWNrcy5sZW5ndGg7CiAgICAgICAgICAgIHRoaXMubWluID0gdGhpcy5fdGlja3NbMF0udmFsdWU7CiAgICAgICAgICAgIHRoaXMubWF4ID0gdGhpcy5fdGlja3NbdGhpcy5udW1iZXJUaWNrcy0xXS52YWx1ZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSBhbnkgdGlja3MgeWV0LCBsZXQncyBtYWtlIHNvbWUhCiAgICAgICAgZWxzZSBpZiAodGhpcy5taW4gPT0gbnVsbCAmJiB0aGlzLm1heCA9PSBudWxsKSB7CiAgICAgICAgICAgIG1pbiA9IGRiLm1pbiAqICgyIC0gdGhpcy5wYWRNaW4pOwogICAgICAgICAgICBtYXggPSBkYi5tYXggKiB0aGlzLnBhZE1heDsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGlmIG1pbiBhbmQgbWF4IGFyZSBzYW1lLCBzcGFjZSB0aGVtIG91dCBhIGJpdAogICAgICAgICAgICBpZiAobWluID09IG1heCkgewogICAgICAgICAgICAgICAgdmFyIGFkaiA9IDAuMDU7CiAgICAgICAgICAgICAgICBtaW4gPSBtaW4qKDEtYWRqKTsKICAgICAgICAgICAgICAgIG1heCA9IG1heCooMSthZGopOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBwZXJmb3JtIHNvbWUgY2hlY2tzCiAgICAgICAgICAgIGlmICh0aGlzLm1pbiAhPSBudWxsICYmIHRoaXMubWluIDw9IDApIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTG9nIGF4aXMgbWluaW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMubWF4ICE9IG51bGwgJiYgdGhpcy5tYXggPD0gMCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJMb2cgYXhpcyBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAiKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZnVuY3Rpb24gZmluZENlaWwgKHZhbCkgewogICAgICAgICAgICAgICAgdmFyIG9yZGVyID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2codmFsKS9NYXRoLkxOMTApKTsKICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwodmFsL29yZGVyKSAqIG9yZGVyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiBmaW5kRmxvb3IodmFsKSB7CiAgICAgICAgICAgICAgICB2YXIgb3JkZXIgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZyh2YWwpL01hdGguTE4xMCkpOwogICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodmFsL29yZGVyKSAqIG9yZGVyOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyB2YXIgcmFuZ2UgPSBtYXggLSBtaW47CiAgICAgICAgICAgIHZhciBybWluLCBybWF4OwoKICAgICAgICAgICAgLy8gZm9yIHBvd2VyIGRpc3RyaWJ1dGlvbiwgb3BlbiB1cCByYW5nZSB0byBnZXQgYSBuaWNlIHBvd2VyIG9mIGF4aXMucmVuZGVyZXIuYmFzZS4KICAgICAgICAgICAgLy8gcG93ZXIgZGlzdHJpYnV0aW9uIHdvbid0IHJlc3BlY3QgdGhlIHVzZXIncyBtaW4vbWF4IHNldHRpbmdzLgogICAgICAgICAgICBybWluID0gTWF0aC5wb3codGhpcy5iYXNlLCBNYXRoLmZsb29yKE1hdGgubG9nKG1pbikvTWF0aC5sb2codGhpcy5iYXNlKSkpOwogICAgICAgICAgICBybWF4ID0gTWF0aC5wb3codGhpcy5iYXNlLCBNYXRoLmNlaWwoTWF0aC5sb2cobWF4KS9NYXRoLmxvZyh0aGlzLmJhc2UpKSk7CgogICAgICAgICAgICAvLyAvLyBpZiBtaW4gYW5kIG1heCBhcmUgc2FtZSwgc3BhY2UgdGhlbSBvdXQgYSBiaXQKICAgICAgICAgICAgLy8gaWYgKHJtaW4gPT09IHJtYXgpIHsKICAgICAgICAgICAgLy8gICAgIHZhciBhZGogPSAwLjA1OwogICAgICAgICAgICAvLyAgICAgcm1pbiA9IHJtaW4qKDEtYWRqKTsKICAgICAgICAgICAgLy8gICAgIHJtYXggPSBybWF4KigxK2Fkaik7CiAgICAgICAgICAgIC8vIH0KCiAgICAgICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZXJlIGEgZGF0YSB2YWx1ZSB3YXMgemVybwogICAgICAgICAgICBpZiAocm1pbiA9PT0gMCkgewogICAgICAgICAgICAgIHJtaW4gPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgb3JkZXIgPSBNYXRoLnJvdW5kKE1hdGgubG9nKHJtaW4pL01hdGguTE4xMCk7CgogICAgICAgICAgICBpZiAodGhpcy50aWNrT3B0aW9ucyA9PSBudWxsIHx8ICF0aGlzLnRpY2tPcHRpb25zLmZvcm1hdFN0cmluZykgewogICAgICAgICAgICAgICAgdGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcgPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLm1pbiA9IHJtaW47CiAgICAgICAgICAgIHRoaXMubWF4ID0gcm1heDsKICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5tYXggLSB0aGlzLm1pbjsgICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtaW5vclRpY2tzID0gKHRoaXMubWlub3JUaWNrcyA9PT0gJ2F1dG8nKSA/IDAgOiB0aGlzLm1pbm9yVGlja3M7CiAgICAgICAgICAgIHZhciBudW1iZXJUaWNrczsKICAgICAgICAgICAgaWYgKHRoaXMubnVtYmVyVGlja3MgPT0gbnVsbCl7CiAgICAgICAgICAgICAgICBpZiAoZGltID4gMTQwKSB7CiAgICAgICAgICAgICAgICAgICAgbnVtYmVyVGlja3MgPSBNYXRoLnJvdW5kKE1hdGgubG9nKHRoaXMubWF4L3RoaXMubWluKS9NYXRoLmxvZyh0aGlzLmJhc2UpICsgMSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlclRpY2tzIDwgMikgewogICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJUaWNrcyA9IDI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChtaW5vclRpY2tzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gZGltLyhudW1iZXJUaWNrcyAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcCA8IDEwMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlub3JUaWNrcyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGVtcCA8IDE5MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlub3JUaWNrcyA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGVtcCA8IDI1MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlub3JUaWNrcyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGVtcCA8IDYwMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlub3JUaWNrcyA9IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5vclRpY2tzID0gOTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIG51bWJlclRpY2tzID0gMjsKICAgICAgICAgICAgICAgICAgICBpZiAobWlub3JUaWNrcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBtaW5vclRpY2tzID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbWlub3JUaWNrcyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBudW1iZXJUaWNrcyA9IHRoaXMubnVtYmVyVGlja3M7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChvcmRlciA+PSAwICYmIG1pbm9yVGlja3MgIT09IDMpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmcgPSAnJWQnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFkanVzdCBmb3JtYXQgc3RyaW5nIGZvciBjYXNlIHdpdGggMyB0aWNrcyB3aGVyZSB3ZSdsbCBoYXZlIGxpa2UgMSwgMi41LCA1LCA3LjUsIDEwCiAgICAgICAgICAgIGVsc2UgaWYgKG9yZGVyIDw9IDAgJiYgbWlub3JUaWNrcyA9PT0gMykgewogICAgICAgICAgICAgICAgdmFyIHRlbXAgPSAtKG9yZGVyIC0gMSk7CiAgICAgICAgICAgICAgICB0aGlzLl9hdXRvRm9ybWF0U3RyaW5nID0gJyUuJysgTWF0aC5hYnMob3JkZXItMSkgKyAnZic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEFkanVzdCBmb3JtYXQgc3RyaW5nIGZvciB2YWx1ZXMgbGVzcyB0aGFuIDEuCiAgICAgICAgICAgIGVsc2UgaWYgKG9yZGVyIDwgMCkgewogICAgICAgICAgICAgICAgdmFyIHRlbXAgPSAtb3JkZXI7CiAgICAgICAgICAgICAgICB0aGlzLl9hdXRvRm9ybWF0U3RyaW5nID0gJyUuJysgTWF0aC5hYnMob3JkZXIpICsgJ2YnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmcgPSAnJWQnOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG8sIHQsIHZhbCwgdHQxLCBzcHJlYWQsIGludGVydmFsOwogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8bnVtYmVyVGlja3M7IGkrKyl7CiAgICAgICAgICAgICAgICB0dCA9IE1hdGgucG93KHRoaXMuYmFzZSwgaSAtIG51bWJlclRpY2tzICsgMSkgKiB0aGlzLm1heDsKCiAgICAgICAgICAgICAgICB0ID0gbmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpOwogICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vdmVycmlkZUZvcm1hdFN0cmluZykgewogICAgICAgICAgICAgICAgICAgIHQuZm9ybWF0U3RyaW5nID0gdGhpcy5fYXV0b0Zvcm1hdFN0cmluZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dUaWNrcykgewogICAgICAgICAgICAgICAgICAgIHQuc2hvd0xhYmVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuc2hvd1RpY2tNYXJrcykgewogICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHQuc2V0VGljayh0dCwgdGhpcy5uYW1lKTsKICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnB1c2godCk7CgogICAgICAgICAgICAgICAgaWYgKG1pbm9yVGlja3MgJiYgaTxudW1iZXJUaWNrcy0xKSB7CiAgICAgICAgICAgICAgICAgICAgdHQxID0gTWF0aC5wb3codGhpcy5iYXNlLCBpIC0gbnVtYmVyVGlja3MgKyAyKSAqIHRoaXMubWF4OwogICAgICAgICAgICAgICAgICAgIHNwcmVhZCA9IHR0MSAtIHR0OwogICAgICAgICAgICAgICAgICAgIGludGVydmFsID0gdHQxIC8gKG1pbm9yVGlja3MrMSk7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaj1taW5vclRpY2tzLTE7IGo+PTA7IGotLSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB0dDEtaW50ZXJ2YWwqKGorMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBuZXcgdGhpcy50aWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcgJiYgdGhpcy5fYXV0b0Zvcm1hdFN0cmluZyAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5mb3JtYXRTdHJpbmcgPSB0aGlzLl9hdXRvRm9ybWF0U3RyaW5nOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG93VGlja3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd0xhYmVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuc2hvd1RpY2tNYXJrcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2V0VGljayh2YWwsIHRoaXMubmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnB1c2godCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAgICAgICAKICAgICAgICAgICAgfSAgICAgCiAgICAgICAgfQoKICAgICAgICAvLyBtaW4gYW5kIG1heCBhcmUgc2V0IGFzIHdvdWxkIGJlIHRoZSBjYXNlIHdpdGggem9vbWluZwogICAgICAgIGVsc2UgaWYgKHRoaXMubWluICE9IG51bGwgJiYgdGhpcy5tYXggIT0gbnVsbCkgewogICAgICAgICAgICB2YXIgb3B0cyA9ICQuZXh0ZW5kKHRydWUsIHt9LCB0aGlzLnRpY2tPcHRpb25zLCB7bmFtZTogdGhpcy5uYW1lLCB2YWx1ZTogbnVsbH0pOwogICAgICAgICAgICB2YXIgbnQsIHRpOwogICAgICAgICAgICAvLyBkb24ndCBoYXZlIGFuIGludGVydmFsIHlldCwgcGljayBvbmUgdGhhdCBnaXZlcyB0aGUgbW9zdAogICAgICAgICAgICAvLyAicm91bmQiIHRpY2tzIHdlIGNhbiBnZXQuCiAgICAgICAgICAgIGlmICh0aGlzLm51bWJlclRpY2tzID09IG51bGwgJiYgdGhpcy50aWNrSW50ZXJ2YWwgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgLy8gdmFyIHRocmVzaG9sZCA9IDMwOwogICAgICAgICAgICAgICAgdmFyIHRkaW0gPSBNYXRoLm1heChkaW0sIHRocmVzaG9sZCsxKTsKICAgICAgICAgICAgICAgIHZhciBudHRhcmdldCA9ICBNYXRoLmNlaWwoKHRkaW0tdGhyZXNob2xkKS8zNSArIDEpOwoKICAgICAgICAgICAgICAgIHZhciByZXQgPSAkLmpxcGxvdC5MaW5lYXJUaWNrR2VuZXJhdG9yLmJlc3RDb25zdHJhaW5lZEludGVydmFsKHRoaXMubWluLCB0aGlzLm1heCwgbnR0YXJnZXQpOwoKICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmcgPSByZXRbM107CiAgICAgICAgICAgICAgICBudCA9IHJldFsyXTsKICAgICAgICAgICAgICAgIHRpID0gcmV0WzRdOwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgb3B0cy52YWx1ZSA9IHRoaXMubWluICsgaSAqIHRpOwogICAgICAgICAgICAgICAgICAgIHQgPSBuZXcgdGhpcy50aWNrUmVuZGVyZXIob3B0cyk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX292ZXJyaWRlRm9ybWF0U3RyaW5nICYmIHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmcgIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5mb3JtYXRTdHJpbmcgPSB0aGlzLl9hdXRvRm9ybWF0U3RyaW5nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1RpY2tzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd0xhYmVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuc2hvd1RpY2tNYXJrcykgewogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnB1c2godCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGZvciBsb29zZSB6b29tLCBudW1iZXIgdGlja3MgYW5kIGludGVydmFsIGFyZSBhbHNvIHNldC4KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5udW1iZXJUaWNrcyAhPSBudWxsICYmIHRoaXMudGlja0ludGVydmFsICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIG50ID0gdGhpcy5udW1iZXJUaWNrczsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgb3B0cy52YWx1ZSA9IHRoaXMubWluICsgaSAqIHRoaXMudGlja0ludGVydmFsOwogICAgICAgICAgICAgICAgICAgIHQgPSBuZXcgdGhpcy50aWNrUmVuZGVyZXIob3B0cyk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX292ZXJyaWRlRm9ybWF0U3RyaW5nICYmIHRoaXMuX2F1dG9Gb3JtYXRTdHJpbmcgIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5mb3JtYXRTdHJpbmcgPSB0aGlzLl9hdXRvRm9ybWF0U3RyaW5nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1RpY2tzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd0xhYmVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuc2hvd1RpY2tNYXJrcykgewogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnB1c2godCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5Mb2dBeGlzUmVuZGVyZXIucHJvdG90eXBlLnBhY2sgPSBmdW5jdGlvbihwb3MsIG9mZnNldHMpIHsKICAgICAgICB2YXIgbGIgPSBwYXJzZUludCh0aGlzLmJhc2UsIDEwKTsKICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl90aWNrczsKICAgICAgICB2YXIgdHJhbnMgPSBmdW5jdGlvbiAodikgeyByZXR1cm4gTWF0aC5sb2codikvTWF0aC5sb2cobGIpOyB9OwogICAgICAgIHZhciBpbnZ0cmFucyA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIChNYXRoLmxvZyhsYikqdikpOyB9OwogICAgICAgIHZhciBtYXggPSB0cmFucyh0aGlzLm1heCk7CiAgICAgICAgdmFyIG1pbiA9IHRyYW5zKHRoaXMubWluKTsKICAgICAgICB2YXIgb2ZmbWF4ID0gb2Zmc2V0cy5tYXg7CiAgICAgICAgdmFyIG9mZm1pbiA9IG9mZnNldHMubWluOwogICAgICAgIHZhciBsc2hvdyA9ICh0aGlzLl9sYWJlbCA9PSBudWxsKSA/IGZhbHNlIDogdGhpcy5fbGFiZWwuc2hvdzsKICAgICAgICAKICAgICAgICBmb3IgKHZhciBwIGluIHBvcykgewogICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyhwLCBwb3NbcF0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLl9vZmZzZXRzID0gb2Zmc2V0czsKICAgICAgICAvLyBwaXhlbGxlbmd0aCB3aWxsIGJlICsgZm9yIHggYXhlcyBhbmQgLSBmb3IgeSBheGVzIGJlY2FzdWUgcGl4ZWxzIGFsd2F5cyBtZWFzdXJlZCBmcm9tIHRvcCBsZWZ0LgogICAgICAgIHZhciBwaXhlbGxlbmd0aCA9IG9mZm1heCAtIG9mZm1pbjsKICAgICAgICB2YXIgdW5pdGxlbmd0aCA9IG1heCAtIG1pbjsKICAgICAgICAKICAgICAgICAvLyBwb2ludCB0byB1bml0IGFuZCB1bml0IHRvIHBvaW50IGNvbnZlcnNpb25zIHJlZmVyZW5jZXMgdG8gUGxvdCBET00gZWxlbWVudCB0b3AgbGVmdCBjb3JuZXIuCiAgICAgICAgdGhpcy5wMnUgPSBmdW5jdGlvbihwKXsKICAgICAgICAgICAgcmV0dXJuIGludnRyYW5zKChwIC0gb2ZmbWluKSAqIHVuaXRsZW5ndGggLyBwaXhlbGxlbmd0aCArIG1pbik7CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICB0aGlzLnUycCA9IGZ1bmN0aW9uKHUpewogICAgICAgICAgICByZXR1cm4gKHRyYW5zKHUpIC0gbWluKSAqIHBpeGVsbGVuZ3RoIC8gdW5pdGxlbmd0aCArIG9mZm1pbjsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpewogICAgICAgICAgICB0aGlzLnNlcmllc191MnAgPSBmdW5jdGlvbih1KXsKICAgICAgICAgICAgICAgIHJldHVybiAodHJhbnModSkgLSBtaW4pICogcGl4ZWxsZW5ndGggLyB1bml0bGVuZ3RoOwogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLnNlcmllc19wMnUgPSBmdW5jdGlvbihwKXsKICAgICAgICAgICAgICAgIHJldHVybiBpbnZ0cmFucyhwICogdW5pdGxlbmd0aCAvIHBpeGVsbGVuZ3RoICsgbWluKTsKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgLy8geWF4aXMgaXMgbWF4IGF0IHRvcCBvZiBjYW52YXMuCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc2VyaWVzX3UycCA9IGZ1bmN0aW9uKHUpewogICAgICAgICAgICAgICAgcmV0dXJuICh0cmFucyh1KSAtIG1heCkgKiBwaXhlbGxlbmd0aCAvIHVuaXRsZW5ndGg7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuc2VyaWVzX3AydSA9IGZ1bmN0aW9uKHApewogICAgICAgICAgICAgICAgcmV0dXJuIGludnRyYW5zKHAgKiB1bml0bGVuZ3RoIC8gcGl4ZWxsZW5ndGggKyBtYXgpOwogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAodGhpcy5zaG93KSB7CiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aWNrcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGlja3NbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvdyAmJiB0LnNob3dMYWJlbCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpbTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LmNvbnN0cnVjdG9yID09ICQuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIgJiYgdC5hbmdsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0LmxhYmVsUG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24gYXQgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LmFuZ2xlIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldFdpZHRoKCkgKyB0Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5zaW4oLXQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIGF0IHN0YXJ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5zaW4odC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldFdpZHRoKCkgKyB0Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5zaW4oLXQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdGFydCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguc2luKHQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtaWRkbGUnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0V2lkdGgoKS8yICsgdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguc2luKC10Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldFdpZHRoKCkvMiArIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbigtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldFdpZHRoKCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyB2YXIgc2hpbSA9IHQuZ2V0V2lkdGgoKS8yOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy51MnAodC52YWx1ZSkgKyBzaGltICsgJ3B4JzsKICAgICAgICAgICAgICAgICAgICAgICAgdC5fZWxlbS5jc3MoJ2xlZnQnLCB2YWwpOwogICAgICAgICAgICAgICAgICAgICAgICB0LnBhY2soKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobHNob3cpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdyA9IHRoaXMuX2xhYmVsLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCdsZWZ0Jywgb2ZmbWluICsgcGl4ZWxsZW5ndGgvMiAtIHcvMiArICdweCcpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJykgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5fZWxlbS5jc3MoJ2JvdHRvbScsICcwcHgnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcygndG9wJywgJzBweCcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5wYWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGlja3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHRpY2tzW2ldOwogICAgICAgICAgICAgICAgICAgIGlmICh0LnNob3cgJiYgdC5zaG93TGFiZWwpIHsgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaW07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LmNvbnN0cnVjdG9yID09ICQuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIgJiYgdC5hbmdsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0LmxhYmVsUG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24gYXQgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuYW5nbGUgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLmNvcygtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkgKyB0Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5jb3ModC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RhcnQnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5hbmdsZSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguY29zKC10Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5nZXRIZWlnaHQoKSArIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLmNvcyh0Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtaWRkbGUnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAodC5hbmdsZSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHNoaW0gPSAtdC5nZXRIZWlnaHQoKS8yICsgdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguc2luKC10Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHNoaW0gPSAtdC5nZXRIZWlnaHQoKS8yIC0gdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguc2luKHQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5nZXRIZWlnaHQoKS8yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudTJwKHQudmFsdWUpICsgc2hpbSArICdweCc7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuX2VsZW0uY3NzKCd0b3AnLCB2YWwpOwogICAgICAgICAgICAgICAgICAgICAgICB0LnBhY2soKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobHNob3cpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IHRoaXMuX2xhYmVsLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcygndG9wJywgb2ZmbWF4IC0gcGl4ZWxsZW5ndGgvMiAtIGgvMiArICdweCcpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3lheGlzJykgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5fZWxlbS5jc3MoJ2xlZnQnLCAnMHB4Jyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5fZWxlbS5jc3MoJ3JpZ2h0JywgJzBweCcpOwogICAgICAgICAgICAgICAgICAgIH0gICAKICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5wYWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9ICAgICAgICAKICAgIH07Cn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.logAxisRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGEpe2EuanFwbG90LkxvZ0F4aXNSZW5kZXJlcj1mdW5jdGlvbigpe2EuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlci5jYWxsKHRoaXMpO3RoaXMuYXhpc0RlZmF1bHRzPXtiYXNlOjEwLHRpY2tEaXN0cmlidXRpb246InBvd2VyIn19O2EuanFwbG90LkxvZ0F4aXNSZW5kZXJlci5wcm90b3R5cGU9bmV3IGEuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlcigpO2EuanFwbG90LkxvZ0F4aXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3I9YS5qcXBsb3QuTG9nQXhpc1JlbmRlcmVyO2EuanFwbG90LkxvZ0F4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihiKXt0aGlzLmRyYXdCYXNlbGluZT10cnVlO3RoaXMubWlub3JUaWNrcz0iYXV0byI7dGhpcy5fc2NhbGVmYWN0PTE7YS5leHRlbmQodHJ1ZSx0aGlzLGIpO3RoaXMuX2F1dG9Gb3JtYXRTdHJpbmc9IiVkIjt0aGlzLl9vdmVycmlkZUZvcm1hdFN0cmluZz1mYWxzZTtmb3IodmFyIGMgaW4gdGhpcy5yZW5kZXJlci5heGlzRGVmYXVsdHMpe2lmKHRoaXNbY109PW51bGwpe3RoaXNbY109dGhpcy5yZW5kZXJlci5heGlzRGVmYXVsdHNbY119fXRoaXMucmVzZXREYXRhQm91bmRzKCl9O2EuanFwbG90LkxvZ0F4aXNSZW5kZXJlci5wcm90b3R5cGUuY3JlYXRlVGlja3M9ZnVuY3Rpb24oZCl7dmFyIEc9dGhpcy5fdGlja3M7dmFyIHc9dGhpcy50aWNrczt2YXIgcz10aGlzLm5hbWU7dmFyIHU9dGhpcy5fZGF0YUJvdW5kczt2YXIgYj0odGhpcy5uYW1lLmNoYXJBdCgwKT09PSJ4Iik/dGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGg6dGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0O3ZhciBrO3ZhciBOLHY7dmFyIG0sbDt2YXIgTSxLO3ZhciBnPTMwO3RoaXMuX3NjYWxlZmFjdD0oTWF0aC5tYXgoYixnKzEpLWcpLzMwMDtpZih3Lmxlbmd0aCl7Zm9yKEs9MDtLPHcubGVuZ3RoO0srKyl7dmFyIEE9d1tLXTt2YXIgSD1uZXcgdGhpcy50aWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7aWYoQS5jb25zdHJ1Y3Rvcj09QXJyYXkpe0gudmFsdWU9QVswXTtILmxhYmVsPUFbMV07aWYoIXRoaXMuc2hvd1RpY2tzKXtILnNob3dMYWJlbD1mYWxzZTtILnNob3dNYXJrPWZhbHNlfWVsc2V7aWYoIXRoaXMuc2hvd1RpY2tNYXJrcyl7SC5zaG93TWFyaz1mYWxzZX19SC5zZXRUaWNrKEFbMF0sdGhpcy5uYW1lKTt0aGlzLl90aWNrcy5wdXNoKEgpfWVsc2V7aWYoYS5pc1BsYWluT2JqZWN0KEEpKXthLmV4dGVuZCh0cnVlLEgsQSk7SC5heGlzPXRoaXMubmFtZTt0aGlzLl90aWNrcy5wdXNoKEgpfWVsc2V7SC52YWx1ZT1BO2lmKCF0aGlzLnNob3dUaWNrcyl7SC5zaG93TGFiZWw9ZmFsc2U7SC5zaG93TWFyaz1mYWxzZX1lbHNle2lmKCF0aGlzLnNob3dUaWNrTWFya3Mpe0guc2hvd01hcms9ZmFsc2V9fUguc2V0VGljayhBLHRoaXMubmFtZSk7dGhpcy5fdGlja3MucHVzaChIKX19fXRoaXMubnVtYmVyVGlja3M9dy5sZW5ndGg7dGhpcy5taW49dGhpcy5fdGlja3NbMF0udmFsdWU7dGhpcy5tYXg9dGhpcy5fdGlja3NbdGhpcy5udW1iZXJUaWNrcy0xXS52YWx1ZX1lbHNle2lmKHRoaXMubWluPT1udWxsJiZ0aGlzLm1heD09bnVsbCl7Tj11Lm1pbiooMi10aGlzLnBhZE1pbik7dj11Lm1heCp0aGlzLnBhZE1heDtpZihOPT12KXt2YXIgYz0wLjA1O049TiooMS1jKTt2PXYqKDErYyl9aWYodGhpcy5taW4hPW51bGwmJnRoaXMubWluPD0wKXt0aHJvdyBuZXcgRXJyb3IoIkxvZyBheGlzIG1pbmltdW0gbXVzdCBiZSBncmVhdGVyIHRoYW4gMCIpfWlmKHRoaXMubWF4IT1udWxsJiZ0aGlzLm1heDw9MCl7dGhyb3cgbmV3IEVycm9yKCJMb2cgYXhpcyBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAiKX1mdW5jdGlvbiBmKGope3ZhciBpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaikvTWF0aC5MTjEwKSk7cmV0dXJuIE1hdGguY2VpbChqL2kpKml9ZnVuY3Rpb24geChqKXt2YXIgaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGopL01hdGguTE4xMCkpO3JldHVybiBNYXRoLmZsb29yKGovaSkqaX12YXIgRixyO0Y9TWF0aC5wb3codGhpcy5iYXNlLE1hdGguZmxvb3IoTWF0aC5sb2coTikvTWF0aC5sb2codGhpcy5iYXNlKSkpO3I9TWF0aC5wb3codGhpcy5iYXNlLE1hdGguY2VpbChNYXRoLmxvZyh2KS9NYXRoLmxvZyh0aGlzLmJhc2UpKSk7aWYoRj09PTApe0Y9MX12YXIgRT1NYXRoLnJvdW5kKE1hdGgubG9nKEYpL01hdGguTE4xMCk7aWYodGhpcy50aWNrT3B0aW9ucz09bnVsbHx8IXRoaXMudGlja09wdGlvbnMuZm9ybWF0U3RyaW5nKXt0aGlzLl9vdmVycmlkZUZvcm1hdFN0cmluZz10cnVlfXRoaXMubWluPUY7dGhpcy5tYXg9cjt2YXIgcT10aGlzLm1heC10aGlzLm1pbjt2YXIgQz0odGhpcy5taW5vclRpY2tzPT09ImF1dG8iKT8wOnRoaXMubWlub3JUaWNrczt2YXIgaDtpZih0aGlzLm51bWJlclRpY2tzPT1udWxsKXtpZihiPjE0MCl7aD1NYXRoLnJvdW5kKE1hdGgubG9nKHRoaXMubWF4L3RoaXMubWluKS9NYXRoLmxvZyh0aGlzLmJhc2UpKzEpO2lmKGg8Mil7aD0yfWlmKEM9PT0wKXt2YXIgbz1iLyhoLTEpO2lmKG88MTAwKXtDPTB9ZWxzZXtpZihvPDE5MCl7Qz0xfWVsc2V7aWYobzwyNTApe0M9M31lbHNle2lmKG88NjAwKXtDPTR9ZWxzZXtDPTl9fX19fX1lbHNle2g9MjtpZihDPT09MCl7Qz0xfUM9MH19ZWxzZXtoPXRoaXMubnVtYmVyVGlja3N9aWYoRT49MCYmQyE9PTMpe3RoaXMuX2F1dG9Gb3JtYXRTdHJpbmc9IiVkIn1lbHNle2lmKEU8PTAmJkM9PT0zKXt2YXIgbz0tKEUtMSk7dGhpcy5fYXV0b0Zvcm1hdFN0cmluZz0iJS4iK01hdGguYWJzKEUtMSkrImYifWVsc2V7aWYoRTwwKXt2YXIgbz0tRTt0aGlzLl9hdXRvRm9ybWF0U3RyaW5nPSIlLiIrTWF0aC5hYnMoRSkrImYifWVsc2V7dGhpcy5fYXV0b0Zvcm1hdFN0cmluZz0iJWQifX19dmFyIE8sSCx6LHAsbixrO2Zvcih2YXIgSz0wO0s8aDtLKyspe009TWF0aC5wb3codGhpcy5iYXNlLEstaCsxKSp0aGlzLm1heDtIPW5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTtpZih0aGlzLl9vdmVycmlkZUZvcm1hdFN0cmluZyl7SC5mb3JtYXRTdHJpbmc9dGhpcy5fYXV0b0Zvcm1hdFN0cmluZ31pZighdGhpcy5zaG93VGlja3Mpe0guc2hvd0xhYmVsPWZhbHNlO0guc2hvd01hcms9ZmFsc2V9ZWxzZXtpZighdGhpcy5zaG93VGlja01hcmtzKXtILnNob3dNYXJrPWZhbHNlfX1ILnNldFRpY2soTSx0aGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1c2goSCk7aWYoQyYmSzxoLTEpe3A9TWF0aC5wb3codGhpcy5iYXNlLEstaCsyKSp0aGlzLm1heDtuPXAtTTtrPXAvKEMrMSk7Zm9yKHZhciBKPUMtMTtKPj0wO0otLSl7ej1wLWsqKEorMSk7SD1uZXcgdGhpcy50aWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7aWYodGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcmJnRoaXMuX2F1dG9Gb3JtYXRTdHJpbmchPSIiKXtILmZvcm1hdFN0cmluZz10aGlzLl9hdXRvRm9ybWF0U3RyaW5nfWlmKCF0aGlzLnNob3dUaWNrcyl7SC5zaG93TGFiZWw9ZmFsc2U7SC5zaG93TWFyaz1mYWxzZX1lbHNle2lmKCF0aGlzLnNob3dUaWNrTWFya3Mpe0guc2hvd01hcms9ZmFsc2V9fUguc2V0VGljayh6LHRoaXMubmFtZSk7dGhpcy5fdGlja3MucHVzaChIKX19fX1lbHNle2lmKHRoaXMubWluIT1udWxsJiZ0aGlzLm1heCE9bnVsbCl7dmFyIHk9YS5leHRlbmQodHJ1ZSx7fSx0aGlzLnRpY2tPcHRpb25zLHtuYW1lOnRoaXMubmFtZSx2YWx1ZTpudWxsfSk7dmFyIEksZTtpZih0aGlzLm51bWJlclRpY2tzPT1udWxsJiZ0aGlzLnRpY2tJbnRlcnZhbD09bnVsbCl7dmFyIEQ9TWF0aC5tYXgoYixnKzEpO3ZhciBMPU1hdGguY2VpbCgoRC1nKS8zNSsxKTt2YXIgQj1hLmpxcGxvdC5MaW5lYXJUaWNrR2VuZXJhdG9yLmJlc3RDb25zdHJhaW5lZEludGVydmFsKHRoaXMubWluLHRoaXMubWF4LEwpO3RoaXMuX2F1dG9Gb3JtYXRTdHJpbmc9QlszXTtJPUJbMl07ZT1CWzRdO2Zvcih2YXIgSz0wO0s8STtLKyspe3kudmFsdWU9dGhpcy5taW4rSyplO0g9bmV3IHRoaXMudGlja1JlbmRlcmVyKHkpO2lmKHRoaXMuX292ZXJyaWRlRm9ybWF0U3RyaW5nJiZ0aGlzLl9hdXRvRm9ybWF0U3RyaW5nIT0iIil7SC5mb3JtYXRTdHJpbmc9dGhpcy5fYXV0b0Zvcm1hdFN0cmluZ31pZighdGhpcy5zaG93VGlja3Mpe0guc2hvd0xhYmVsPWZhbHNlO0guc2hvd01hcms9ZmFsc2V9ZWxzZXtpZighdGhpcy5zaG93VGlja01hcmtzKXtILnNob3dNYXJrPWZhbHNlfX10aGlzLl90aWNrcy5wdXNoKEgpfX1lbHNle2lmKHRoaXMubnVtYmVyVGlja3MhPW51bGwmJnRoaXMudGlja0ludGVydmFsIT1udWxsKXtJPXRoaXMubnVtYmVyVGlja3M7Zm9yKHZhciBLPTA7SzxJO0srKyl7eS52YWx1ZT10aGlzLm1pbitLKnRoaXMudGlja0ludGVydmFsO0g9bmV3IHRoaXMudGlja1JlbmRlcmVyKHkpO2lmKHRoaXMuX292ZXJyaWRlRm9ybWF0U3RyaW5nJiZ0aGlzLl9hdXRvRm9ybWF0U3RyaW5nIT0iIil7SC5mb3JtYXRTdHJpbmc9dGhpcy5fYXV0b0Zvcm1hdFN0cmluZ31pZighdGhpcy5zaG93VGlja3Mpe0guc2hvd0xhYmVsPWZhbHNlO0guc2hvd01hcms9ZmFsc2V9ZWxzZXtpZighdGhpcy5zaG93VGlja01hcmtzKXtILnNob3dNYXJrPWZhbHNlfX10aGlzLl90aWNrcy5wdXNoKEgpfX19fX19fTthLmpxcGxvdC5Mb2dBeGlzUmVuZGVyZXIucHJvdG90eXBlLnBhY2s9ZnVuY3Rpb24oZixlKXt2YXIgcj1wYXJzZUludCh0aGlzLmJhc2UsMTApO3ZhciB5PXRoaXMuX3RpY2tzO3ZhciBkPWZ1bmN0aW9uKGgpe3JldHVybiBNYXRoLmxvZyhoKS9NYXRoLmxvZyhyKX07dmFyIGI9ZnVuY3Rpb24oaCl7cmV0dXJuIE1hdGgucG93KE1hdGguRSwoTWF0aC5sb2cocikqaCkpfTt2YXIgdT1kKHRoaXMubWF4KTt2YXIgcz1kKHRoaXMubWluKTt2YXIgbT1lLm1heDt2YXIgaz1lLm1pbjt2YXIgbz0odGhpcy5fbGFiZWw9PW51bGwpP2ZhbHNlOnRoaXMuX2xhYmVsLnNob3c7Zm9yKHZhciBxIGluIGYpe3RoaXMuX2VsZW0uY3NzKHEsZltxXSl9dGhpcy5fb2Zmc2V0cz1lO3ZhciBnPW0tazt2YXIgaj11LXM7dGhpcy5wMnU9ZnVuY3Rpb24oaCl7cmV0dXJuIGIoKGgtaykqai9nK3MpfTt0aGlzLnUycD1mdW5jdGlvbihoKXtyZXR1cm4oZChoKS1zKSpnL2ora307aWYodGhpcy5uYW1lPT0ieGF4aXMifHx0aGlzLm5hbWU9PSJ4MmF4aXMiKXt0aGlzLnNlcmllc191MnA9ZnVuY3Rpb24oaCl7cmV0dXJuKGQoaCktcykqZy9qfTt0aGlzLnNlcmllc19wMnU9ZnVuY3Rpb24oaCl7cmV0dXJuIGIoaCpqL2crcyl9fWVsc2V7dGhpcy5zZXJpZXNfdTJwPWZ1bmN0aW9uKGgpe3JldHVybihkKGgpLXUpKmcvan07dGhpcy5zZXJpZXNfcDJ1PWZ1bmN0aW9uKGgpe3JldHVybiBiKGgqai9nK3UpfX1pZih0aGlzLnNob3cpe2lmKHRoaXMubmFtZT09InhheGlzInx8dGhpcy5uYW1lPT0ieDJheGlzIil7Zm9yKHZhciB2PTA7djx5Lmxlbmd0aDt2Kyspe3ZhciBuPXlbdl07aWYobi5zaG93JiZuLnNob3dMYWJlbCl7dmFyIGM7aWYobi5jb25zdHJ1Y3Rvcj09YS5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlciYmbi5hbmdsZSl7c3dpdGNoKG4ubGFiZWxQb3NpdGlvbil7Y2FzZSJhdXRvIjppZihuLmFuZ2xlPDApe2M9LW4uZ2V0V2lkdGgoKStuLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguc2luKC1uLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzJ9ZWxzZXtjPS1uLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguc2luKG4uX3RleHRSZW5kZXJlci5hbmdsZSkvMn1icmVhaztjYXNlImVuZCI6Yz0tbi5nZXRXaWR0aCgpK24uX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5zaW4oLW4uX3RleHRSZW5kZXJlci5hbmdsZSkvMjticmVhaztjYXNlInN0YXJ0IjpjPS1uLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguc2luKG4uX3RleHRSZW5kZXJlci5hbmdsZSkvMjticmVhaztjYXNlIm1pZGRsZSI6Yz0tbi5nZXRXaWR0aCgpLzIrbi5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbigtbi5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yO2JyZWFrO2RlZmF1bHQ6Yz0tbi5nZXRXaWR0aCgpLzIrbi5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbigtbi5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yO2JyZWFrfX1lbHNle2M9LW4uZ2V0V2lkdGgoKS8yfXZhciB6PXRoaXMudTJwKG4udmFsdWUpK2MrInB4IjtuLl9lbGVtLmNzcygibGVmdCIseik7bi5wYWNrKCl9fWlmKG8pe3ZhciBsPXRoaXMuX2xhYmVsLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSk7dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJsZWZ0IixrK2cvMi1sLzIrInB4Iik7aWYodGhpcy5uYW1lPT0ieGF4aXMiKXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoImJvdHRvbSIsIjBweCIpfWVsc2V7dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJ0b3AiLCIwcHgiKX10aGlzLl9sYWJlbC5wYWNrKCl9fWVsc2V7Zm9yKHZhciB2PTA7djx5Lmxlbmd0aDt2Kyspe3ZhciBuPXlbdl07aWYobi5zaG93JiZuLnNob3dMYWJlbCl7dmFyIGM7aWYobi5jb25zdHJ1Y3Rvcj09YS5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlciYmbi5hbmdsZSl7c3dpdGNoKG4ubGFiZWxQb3NpdGlvbil7Y2FzZSJhdXRvIjpjYXNlImVuZCI6aWYobi5hbmdsZTwwKXtjPS1uLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguY29zKC1uLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzJ9ZWxzZXtjPS1uLmdldEhlaWdodCgpK24uX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5jb3Mobi5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWJyZWFrO2Nhc2Uic3RhcnQiOmlmKG4uYW5nbGU+MCl7Yz0tbi5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLmNvcygtbi5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWVsc2V7Yz0tbi5nZXRIZWlnaHQoKStuLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguY29zKG4uX3RleHRSZW5kZXJlci5hbmdsZSkvMn1icmVhaztjYXNlIm1pZGRsZSI6Yz0tbi5nZXRIZWlnaHQoKS8yO2JyZWFrO2RlZmF1bHQ6Yz0tbi5nZXRIZWlnaHQoKS8yO2JyZWFrfX1lbHNle2M9LW4uZ2V0SGVpZ2h0KCkvMn12YXIgej10aGlzLnUycChuLnZhbHVlKStjKyJweCI7bi5fZWxlbS5jc3MoInRvcCIseik7bi5wYWNrKCl9fWlmKG8pe3ZhciB4PXRoaXMuX2xhYmVsLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpO3RoaXMuX2xhYmVsLl9lbGVtLmNzcygidG9wIixtLWcvMi14LzIrInB4Iik7aWYodGhpcy5uYW1lPT0ieWF4aXMiKXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoImxlZnQiLCIwcHgiKX1lbHNle3RoaXMuX2xhYmVsLl9lbGVtLmNzcygicmlnaHQiLCIwcHgiKX10aGlzLl9sYWJlbC5wYWNrKCl9fX19fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.mekkoAxisRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLy8gY2xhc3M6ICQuanFwbG90Lk1la2tvQXhpc1JlbmRlcmVyCiAgICAvLyBBbiBheGlzIHJlbmRlcmVyIGZvciBhIE1la2tvIGNoYXJ0LgogICAgLy8gU2hvdWxkIGJlIHVzZWQgd2l0aCBhIE1la2tvIGNoYXJ0IHdoZXJlIHRoZSBtZWtrb1JlbmRlcmVyIGlzIHVzZWQgb24gdGhlIHNlcmllcy4KICAgIC8vIERpc3BsYXlzIHRoZSBZIGF4aXMgYXMgYSByYW5nZSBmcm9tIDAgdG8gMSAoMCB0byAxMDAlKSBhbmQgdGhlIHggYXhpcyB3aXRoIGEgdGljawogICAgLy8gZm9yIGVhY2ggc2VyaWVzIHNjYWxlZCB0byB0aGUgc3VtIG9mIGFsbCB0aGUgeSB2YWx1ZXMuCiAgICAkLmpxcGxvdC5NZWtrb0F4aXNSZW5kZXJlciA9IGZ1bmN0aW9uKCkgewogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgYXhpcyBvYmplY3QuCiAgICAkLmpxcGxvdC5NZWtrb0F4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpewogICAgICAgIC8vIHByb3A6IHRpY2tNb2RlCiAgICAgICAgLy8gSG93IHRvIHNwYWNlIHRoZSB0aWNrcyBvbiB0aGUgYXhpcy4KICAgICAgICAvLyAnYmFyJyB3aWxsIHBsYWNlIGEgdGljayBhdCB0aGUgd2lkdGggb2YgZWFjaCBiYXIuICAKICAgICAgICAvLyBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciB0aGUgeCBheGlzLgogICAgICAgIC8vICdldmVuJyB3aWxsIHBsYWNlIHRpY2tzIGF0IGV2ZW4gaW50ZXJ2YWxzLiAgVGhpcyBpcwogICAgICAgIC8vIHRoZSBkZWZhdWx0IGZvciB4MiBheGlzIGFuZCB5IGF4aXMuICB5IGF4aXMgY2Fubm90IGJlIGNoYW5nZWQuCiAgICAgICAgdGhpcy50aWNrTW9kZTsKICAgICAgICAvLyBwcm9wOiBiYXJMYWJlbFJlbmRlcmVyCiAgICAgICAgLy8gcmVuZGVyZXIgdG8gdXNlIHRvIGRyYXcgbGFiZWxzIHVuZGVyIGVhY2ggYmFyLgogICAgICAgIHRoaXMuYmFyTGFiZWxSZW5kZXJlciA9ICQuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyOwogICAgICAgIC8vIHByb3A6IGJhckxhYmVscwogICAgICAgIC8vIGFycmF5IG9mIGxhYmVscyB0byBwdXQgdW5kZXIgZWFjaCBiYXIuCiAgICAgICAgdGhpcy5iYXJMYWJlbHMgPSB0aGlzLmJhckxhYmVscyB8fCBbXTsKICAgICAgICAvLyBwcm9wOiBiYXJMYWJlbE9wdGlvbnMKICAgICAgICAvLyBvcHRpb25zIG9iamVjdCB0byBwYXNzIHRvIHRoZSBiYXIgbGFiZWwgcmVuZGVyZXIuCiAgICAgICAgdGhpcy5iYXJMYWJlbE9wdGlvbnMgPSB7fTsKICAgICAgICB0aGlzLnRpY2tPcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge3Nob3dHcmlkbGluZTpmYWxzZX0sIHRoaXMudGlja09wdGlvbnMpOwogICAgICAgIHRoaXMuX2JhckxhYmVscyA9IFtdOwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3lheGlzJykgewogICAgICAgICAgICB0aGlzLnRpY2tPcHRpb25zLmZvcm1hdFN0cmluZyA9IHRoaXMudGlja09wdGlvbnMuZm9ybWF0U3RyaW5nIHx8ICIlZFwlIjsKICAgICAgICB9CiAgICAgICAgdmFyIGRiID0gdGhpcy5fZGF0YUJvdW5kczsKICAgICAgICBkYi5taW4gPSAwOwogICAgICAgIC8vIGZvciB5IGF4ZXMsIHNjYWxlIGFsd2F5cyBnbyBmcm9tIDAgdG8gMSAoMCB0byAxMDAlKQogICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3lheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3kyYXhpcycpIHsKICAgICAgICAgICAgZGIubWF4ID0gMTAwOwogICAgICAgICAgICB0aGlzLnRpY2tNb2RlID0gJ2V2ZW4nOwogICAgICAgIH0KICAgICAgICAvLyBGb3IgeCBheGVzLCBzY2FsZSBnb2VzIGZyb20gMCB0byBzdW0gb2YgYWxsIHkgdmFsdWVzLgogICAgICAgIGVsc2UgaWYgKHRoaXMubmFtZSA9PSAneGF4aXMnKXsKICAgICAgICAgICAgdGhpcy50aWNrTW9kZSA9ICh0aGlzLnRpY2tNb2RlID09IG51bGwpID8gJ2JhcicgOiB0aGlzLnRpY2tNb2RlOwogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5fc2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBkYi5tYXggKz0gdGhpcy5fc2VyaWVzW2ldLl9zdW15OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHRoaXMubmFtZSA9PSAneDJheGlzJyl7CiAgICAgICAgICAgIHRoaXMudGlja01vZGUgPSAodGhpcy50aWNrTW9kZSA9PSBudWxsKSA/ICdldmVuJyA6IHRoaXMudGlja01vZGU7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLl9zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGRiLm1heCArPSB0aGlzLl9zZXJpZXNbaV0uX3N1bXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBheGlzCiAgICAkLmpxcGxvdC5NZWtrb0F4aXNSZW5kZXJlci5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKGN0eCwgcGxvdCkgewogICAgICAgIGlmICh0aGlzLnNob3cpIHsKICAgICAgICAgICAgLy8gcG9wdWxhdGUgdGhlIGF4aXMgbGFiZWwgYW5kIHZhbHVlIHByb3BlcnRpZXMuCiAgICAgICAgICAgIC8vIGNyZWF0ZVRpY2tzIGlzIGEgbWV0aG9kIG9uIHRoZSByZW5kZXJlciwgYnV0CiAgICAgICAgICAgIC8vIGNhbGwgaXQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgYXhpcy4KICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5jcmVhdGVUaWNrcy5jYWxsKHRoaXMpOwogICAgICAgICAgICAvLyBmaWxsIGEgZGl2IHdpdGggYXhlcyBsYWJlbHMgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4KICAgICAgICAgICAgLy8gTmVlZCB0byBwcmVnZW5lcmF0ZSBlYWNoIGF4aXMgdG8gZ2V0IGl0cyBib3VuZHMgYW5kCiAgICAgICAgICAgIC8vIHBvc2l0aW9uIGl0IGFuZCB0aGUgbGFiZWxzIGNvcnJlY3RseSBvbiB0aGUgcGxvdC4KICAgICAgICAgICAgdmFyIGRpbT0wOwogICAgICAgICAgICB2YXIgdGVtcDsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgIHRoaXMuX2VsZW0gPSAkKGVsZW0pOwogICAgICAgICAgICB0aGlzLl9lbGVtLmFkZENsYXNzKCdqcXBsb3QtYXhpcyBqcXBsb3QtJyt0aGlzLm5hbWUpOwogICAgICAgICAgICB0aGlzLl9lbGVtLmNzcygncG9zaXRpb24nLCAnYWJzb2x1dGUnKTsKICAgICAgICAgICAgZWxlbSA9IG51bGw7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAodGhpcy5uYW1lID09ICd4YXhpcycgfHwgdGhpcy5uYW1lID09ICd4MmF4aXMnKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLndpZHRoKHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uaGVpZ2h0KHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGRyYXcgdGhlIGF4aXMgbGFiZWwKICAgICAgICAgICAgLy8gY3JlYXRlIGEgX2xhYmVsIG9iamVjdC4KICAgICAgICAgICAgdGhpcy5sYWJlbE9wdGlvbnMuYXhpcyA9IHRoaXMubmFtZTsKICAgICAgICAgICAgdGhpcy5fbGFiZWwgPSBuZXcgdGhpcy5sYWJlbFJlbmRlcmVyKHRoaXMubGFiZWxPcHRpb25zKTsKICAgICAgICAgICAgaWYgKHRoaXMuX2xhYmVsLnNob3cpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uYXBwZW5kKHRoaXMuX2xhYmVsLmRyYXcoY3R4KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0LCB0aWNrLCBlbGVtOwogICAgICAgICAgICBpZiAodGhpcy5zaG93VGlja3MpIHsKICAgICAgICAgICAgICAgIHQgPSB0aGlzLl90aWNrczsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGljayA9IHRbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKHRpY2suc2hvd0xhYmVsICYmICghdGljay5pc01pbm9yVGljayB8fCB0aGlzLnNob3dNaW5vclRpY2tzKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmFwcGVuZCh0aWNrLmRyYXcoY3R4KSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBkcmF3IHRoZSBzZXJpZXMgbGFiZWxzCiAgICAgICAgICAgIGZvciAoaT0wOyBpPHRoaXMuYmFyTGFiZWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB0aGlzLmJhckxhYmVsT3B0aW9ucy5heGlzID0gdGhpcy5uYW1lOwogICAgICAgICAgICAgICAgdGhpcy5iYXJMYWJlbE9wdGlvbnMubGFiZWwgPSB0aGlzLmJhckxhYmVsc1tpXTsKICAgICAgICAgICAgICAgIHRoaXMuX2JhckxhYmVscy5wdXNoKG5ldyB0aGlzLmJhckxhYmVsUmVuZGVyZXIodGhpcy5iYXJMYWJlbE9wdGlvbnMpKTsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpY2tNb2RlICE9ICdiYXInKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFyTGFiZWxzW2ldLnNob3cgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh0aGlzLl9iYXJMYWJlbHNbaV0uc2hvdykgewogICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpcy5fYmFyTGFiZWxzW2ldLmRyYXcoY3R4LCBwbG90KTsKICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzKCdqcXBsb3QtJyt0aGlzLm5hbWUrJy1sYWJlbCcpOwogICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MoJ2pxcGxvdC0nK3RoaXMubmFtZSsnLXRpY2snKTsKICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKCdqcXBsb3QtbWVra28tYmFyTGFiZWwnKTsKICAgICAgICAgICAgICAgICAgICBlbGVtLmFwcGVuZFRvKHRoaXMuX2VsZW0pOwogICAgICAgICAgICAgICAgICAgIGVsZW0gPSBudWxsOwogICAgICAgICAgICAgICAgfSAgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fZWxlbTsKICAgIH07CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIGFuIGF4aXMKICAgICQuanFwbG90Lk1la2tvQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMubWluID0gdGhpcy5fbWluOwogICAgICAgIHRoaXMubWF4ID0gdGhpcy5fbWF4OwogICAgICAgIHRoaXMudGlja0ludGVydmFsID0gdGhpcy5fdGlja0ludGVydmFsOwogICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSB0aGlzLl9udW1iZXJUaWNrczsKICAgICAgICAvLyB0aGlzLl90aWNrcyA9IHRoaXMuX190aWNrczsKICAgIH07CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIGF4aXMKICAgICQuanFwbG90Lk1la2tvQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbigpIHsgCiAgICAgICAgdmFyIGRpbSA9IDA7CiAgICAgICAgdmFyIHRlbXA7CiAgICAgICAgdmFyIHcgPSAwOwogICAgICAgIHZhciBoID0gMDsKICAgICAgICB2YXIgbHNob3cgPSAodGhpcy5fbGFiZWwgPT0gbnVsbCkgPyBmYWxzZSA6IHRoaXMuX2xhYmVsLnNob3c7CiAgICAgICAgaWYgKHRoaXMuc2hvdyAmJiB0aGlzLnNob3dUaWNrcykgewogICAgICAgICAgICB2YXIgdCA9IHRoaXMuX3RpY2tzOwogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIHRpY2sgPSB0W2ldOwogICAgICAgICAgICAgICAgaWYgKHRpY2suc2hvd0xhYmVsICYmICghdGljay5pc01pbm9yVGljayB8fCB0aGlzLnNob3dNaW5vclRpY2tzKSkgewogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRpY2suX2VsZW0ub3V0ZXJIZWlnaHQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gdGljay5fZWxlbS5vdXRlcldpZHRoKHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodGVtcCA+IGRpbSkgewogICAgICAgICAgICAgICAgICAgICAgICBkaW0gPSB0ZW1wOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGxzaG93KSB7CiAgICAgICAgICAgICAgICB3ID0gdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTsKICAgICAgICAgICAgICAgIGggPSB0aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKTsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneGF4aXMnKSB7CiAgICAgICAgICAgICAgICBkaW0gPSBkaW0gKyBoOwogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoeydoZWlnaHQnOmRpbSsncHgnLCBsZWZ0OicwcHgnLCBib3R0b206JzBweCd9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICh0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgIGRpbSA9IGRpbSArIGg7CiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7J2hlaWdodCc6ZGltKydweCcsIGxlZnQ6JzBweCcsIHRvcDonMHB4J30pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubmFtZSA9PSAneWF4aXMnKSB7CiAgICAgICAgICAgICAgICBkaW0gPSBkaW0gKyB3OwogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moeyd3aWR0aCc6ZGltKydweCcsIGxlZnQ6JzBweCcsIHRvcDonMHB4J30pOwogICAgICAgICAgICAgICAgaWYgKGxzaG93ICYmIHRoaXMuX2xhYmVsLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCd3aWR0aCcsIHcrJ3B4Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBkaW0gPSBkaW0gKyB3OwogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moeyd3aWR0aCc6ZGltKydweCcsIHJpZ2h0OicwcHgnLCB0b3A6JzBweCd9KTsKICAgICAgICAgICAgICAgIGlmIChsc2hvdyAmJiB0aGlzLl9sYWJlbC5jb25zdHJ1Y3RvciA9PSAkLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlcikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcygnd2lkdGgnLCB3KydweCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSAgCiAgICB9OyAgICAKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgYXhpcwogICAgJC5qcXBsb3QuTWVra29BeGlzUmVuZGVyZXIucHJvdG90eXBlLmNyZWF0ZVRpY2tzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gd2UncmUgYXJlIG9wZXJhdGluZyBvbiBhbiBheGlzIGhlcmUKICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl90aWNrczsKICAgICAgICB2YXIgdXNlclRpY2tzID0gdGhpcy50aWNrczsKICAgICAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTsKICAgICAgICAvLyBkYXRhYm91bmRzIHdlcmUgc2V0IG9uIGF4aXMgaW5pdGlhbGl6YXRpb24uCiAgICAgICAgdmFyIGRiID0gdGhpcy5fZGF0YUJvdW5kczsKICAgICAgICB2YXIgZGltLCBpbnRlcnZhbDsKICAgICAgICB2YXIgbWluLCBtYXg7CiAgICAgICAgdmFyIHBvczEsIHBvczI7CiAgICAgICAgdmFyIHQsIHR0LCBpLCBqOwogICAgICAgIAogICAgICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSB0aWNrcywgdXNlIHRoZW0uCiAgICAgICAgLy8gdGlja3MgbXVzdCBiZSBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHZhbHVlLgogICAgICAgIAogICAgICAgIGlmICh1c2VyVGlja3MubGVuZ3RoKSB7CiAgICAgICAgICAgIC8vIHRpY2tzIGNvdWxkIGJlIDFEIG9yIDJEIGFycmF5IG9mIFt2YWwsIHZhbCwgLCwsXSBvciBbW3ZhbCwgbGFiZWxdLCBbdmFsLCBsYWJlbF0sIC4uLl0gb3IgbWl4ZWQKICAgICAgICAgICAgZm9yIChpPTA7IGk8dXNlclRpY2tzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgIHZhciB1dCA9IHVzZXJUaWNrc1tpXTsKICAgICAgICAgICAgICAgIHZhciB0ID0gbmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpOwogICAgICAgICAgICAgICAgaWYgKHV0LmNvbnN0cnVjdG9yID09IEFycmF5KSB7CiAgICAgICAgICAgICAgICAgICAgdC52YWx1ZSA9IHV0WzBdOwogICAgICAgICAgICAgICAgICAgIHQubGFiZWwgPSB1dFsxXTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1RpY2tzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd0xhYmVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuc2hvd1RpY2tNYXJrcykgewogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHQuc2V0VGljayh1dFswXSwgdGhpcy5uYW1lKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl90aWNrcy5wdXNoKHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0LnZhbHVlID0gdXQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dUaWNrcykgewogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dMYWJlbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnNob3dUaWNrTWFya3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0LnNldFRpY2sodXQsIHRoaXMubmFtZSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0gdXNlclRpY2tzLmxlbmd0aDsKICAgICAgICAgICAgdGhpcy5taW4gPSB0aGlzLl90aWNrc1swXS52YWx1ZTsKICAgICAgICAgICAgdGhpcy5tYXggPSB0aGlzLl90aWNrc1t0aGlzLm51bWJlclRpY2tzLTFdLnZhbHVlOwogICAgICAgICAgICB0aGlzLnRpY2tJbnRlcnZhbCA9ICh0aGlzLm1heCAtIHRoaXMubWluKSAvICh0aGlzLm51bWJlclRpY2tzIC0gMSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIHdlIGRvbid0IGhhdmUgYW55IHRpY2tzIHlldCwgbGV0J3MgbWFrZSBzb21lIQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAobmFtZSA9PSAneGF4aXMnIHx8IG5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgIGRpbSA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgZGltID0gdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBpZiBtaW4sIG1heCBhbmQgbnVtYmVyIG9mIHRpY2tzIHNwZWNpZmllZCwgdXNlciBjYW4ndCBzcGVjaWZ5IGludGVydmFsLgogICAgICAgICAgICBpZiAodGhpcy5taW4gIT0gbnVsbCAmJiB0aGlzLm1heCAhPSBudWxsICYmIHRoaXMubnVtYmVyVGlja3MgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhpcy50aWNrSW50ZXJ2YWwgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgIG1pbiA9ICh0aGlzLm1pbiAhPSBudWxsKSA/IHRoaXMubWluIDogZGIubWluOwogICAgICAgICAgICBtYXggPSAodGhpcy5tYXggIT0gbnVsbCkgPyB0aGlzLm1heCA6IGRiLm1heDsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGlmIG1pbiBhbmQgbWF4IGFyZSBzYW1lLCBzcGFjZSB0aGVtIG91dCBhIGJpdC4rCiAgICAgICAgICAgIGlmIChtaW4gPT0gbWF4KSB7CiAgICAgICAgICAgICAgICB2YXIgYWRqID0gMC4wNTsKICAgICAgICAgICAgICAgIGlmIChtaW4gPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgYWRqID0gTWF0aC5tYXgoTWF0aC5sb2cobWluKS9NYXRoLkxOMTAsIDAuMDUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbWluIC09IGFkajsKICAgICAgICAgICAgICAgIG1heCArPSBhZGo7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByYW5nZSA9IG1heCAtIG1pbjsKICAgICAgICAgICAgdmFyIHJtaW4sIHJtYXg7CiAgICAgICAgICAgIHZhciB0ZW1wLCBwcmV2LCBjdXJyOwogICAgICAgICAgICB2YXIgeW51bXRpY2tzID0gWzMsNSw2LDExLDIxXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIHlheGlzIGRpdmlkZSB0aWNrcyBpbiBuaWNlIGludGVydmFscyBmcm9tIDAgdG8gMS4KICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneWF4aXMnIHx8IHRoaXMubmFtZSA9PSAneTJheGlzJykgeyAKICAgICAgICAgICAgICAgIHRoaXMubWluID0gMDsKICAgICAgICAgICAgICAgIHRoaXMubWF4ID0gMTAwOyAKICAgICAgICAgICAgICAgIC8vIHVzZXIgZGlkbid0IHNwZWNpZnkgbnVtYmVyIG9mIHRpY2tzLgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLm51bWJlclRpY2tzKXsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aWNrSW50ZXJ2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IDMgKyBNYXRoLmNlaWwocmFuZ2UgLyB0aGlzLnRpY2tJbnRlcnZhbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gMiArIE1hdGguY2VpbCgoZGltLSh0aGlzLnRpY2tTcGFjaW5nLTEpKS90aGlzLnRpY2tTcGFjaW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8eW51bXRpY2tzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gdGVtcC95bnVtdGlja3NbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IHludW10aWNrc1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnIgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGN1cnI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyIDwgMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhcyBwcmV2IG9yIGlzIGN1cnIgY2xvc2VyIHRvIG9uZT8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMocHJldiAtIDEpIDwgTWF0aC5hYnMoY3VyciAtIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSB5bnVtdGlja3NbaS0xXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0geW51bXRpY2tzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IHludW10aWNrcy5sZW5ndGggLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0geW51bXRpY2tzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGlja0ludGVydmFsID0gcmFuZ2UgLyAodGhpcy5udW1iZXJUaWNrcyAtIDEpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gdXNlciBkaWQgc3BlY2lmeSBudW1iZXIgb2YgdGlja3MuCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRpY2tJbnRlcnZhbCA9IHJhbmdlIC8gKHRoaXMubnVtYmVyVGlja3MgLSAxKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5udW1iZXJUaWNrczsgaSsrKXsKICAgICAgICAgICAgICAgICAgICB0dCA9IHRoaXMubWluICsgaSAqIHRoaXMudGlja0ludGVydmFsOwogICAgICAgICAgICAgICAgICAgIHQgPSBuZXcgdGhpcy50aWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgLy8gdmFyIHQgPSBuZXcgJC5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1RpY2tzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd0xhYmVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuc2hvd1RpY2tNYXJrcykgewogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHQuc2V0VGljayh0dCwgdGhpcy5uYW1lKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl90aWNrcy5wdXNoKHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBmb3IgeCBheGVzLCBoYXZlIG51bWJlciBvdCB0aWNrcyBlcXVhbCB0byBudW1iZXIgb2Ygc2VyaWVzIGFuZCB0aWNrcyBwbGFjZWQKICAgICAgICAgICAgLy8gYXQgc3VtIG9mIHkgdmFsdWVzIGZvciBlYWNoIHNlcmllcy4KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50aWNrTW9kZSA9PSAnYmFyJykgewogICAgICAgICAgICAgICAgdGhpcy5taW4gPSAwOwogICAgICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IHRoaXMuX3Nlcmllcy5sZW5ndGggKyAxOwogICAgICAgICAgICAgICAgdCA9IG5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG93VGlja3MpIHsKICAgICAgICAgICAgICAgICAgICB0LnNob3dMYWJlbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnNob3dUaWNrTWFya3MpIHsKICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0LnNldFRpY2soMCwgdGhpcy5uYW1lKTsKICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnB1c2godCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRlbXAgPSAwOwoKICAgICAgICAgICAgICAgIGZvciAoaT0xOyBpPHRoaXMubnVtYmVyVGlja3M7IGkrKyl7CiAgICAgICAgICAgICAgICAgICAgdGVtcCArPSB0aGlzLl9zZXJpZXNbaS0xXS5fc3VteTsKICAgICAgICAgICAgICAgICAgICB0ID0gbmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG93VGlja3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TGFiZWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5zaG93VGlja01hcmtzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdC5zZXRUaWNrKHRlbXAsIHRoaXMubmFtZSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMubWF4ID0gdGhpcy5tYXggfHwgdGVtcDsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gaWYgdXNlciBzcGVjaWZpZWQgYSBtYXggYW5kIGl0IGlzIGdyZWF0ZXIgdGhhbiBzdW0sIGFkZCBhIHRpY2sKICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heCA+IHRlbXApIHsKICAgICAgICAgICAgICAgICAgICAgdCA9IG5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1RpY2tzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd0xhYmVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuc2hvd1RpY2tNYXJrcykgewogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHQuc2V0VGljayh0aGlzLm1heCwgdGhpcy5uYW1lKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl90aWNrcy5wdXNoKHQpOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRpY2tNb2RlID09ICdldmVuJykgewogICAgICAgICAgICAgICAgdGhpcy5taW4gPSAwOwogICAgICAgICAgICAgICAgdGhpcy5tYXggPSB0aGlzLm1heCB8fCBkYi5tYXg7CiAgICAgICAgICAgICAgICAvLyBnZXQgYSBkZXNpcmVkIG51bWJlciBvZiB0aWNrcwogICAgICAgICAgICAgICAgdmFyIG50ID0gMiArIE1hdGguY2VpbCgoZGltLSh0aGlzLnRpY2tTcGFjaW5nLTEpKS90aGlzLnRpY2tTcGFjaW5nKTsKICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5tYXggLSB0aGlzLm1pbjsKICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSBudDsKICAgICAgICAgICAgICAgIHRoaXMudGlja0ludGVydmFsID0gcmFuZ2UgLyAodGhpcy5udW1iZXJUaWNrcyAtIDEpOwoKICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHRoaXMubnVtYmVyVGlja3M7IGkrKyl7CiAgICAgICAgICAgICAgICAgICAgdHQgPSB0aGlzLm1pbiArIGkgKiB0aGlzLnRpY2tJbnRlcnZhbDsKICAgICAgICAgICAgICAgICAgICB0ID0gbmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgIC8vIHZhciB0ID0gbmV3ICQuanFwbG90LkF4aXNUaWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dUaWNrcykgewogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dMYWJlbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnNob3dUaWNrTWFya3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdC5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0LnNldFRpY2sodHQsIHRoaXMubmFtZSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgYXhpcwogICAgJC5qcXBsb3QuTWVra29BeGlzUmVuZGVyZXIucHJvdG90eXBlLnBhY2sgPSBmdW5jdGlvbihwb3MsIG9mZnNldHMpIHsKICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl90aWNrczsKICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7CiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluOwogICAgICAgIHZhciBvZmZtYXggPSBvZmZzZXRzLm1heDsKICAgICAgICB2YXIgb2ZmbWluID0gb2Zmc2V0cy5taW47CiAgICAgICAgdmFyIGxzaG93ID0gKHRoaXMuX2xhYmVsID09IG51bGwpID8gZmFsc2UgOiB0aGlzLl9sYWJlbC5zaG93OwogICAgICAgIAogICAgICAgIGZvciAodmFyIHAgaW4gcG9zKSB7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHAsIHBvc1twXSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMuX29mZnNldHMgPSBvZmZzZXRzOwogICAgICAgIC8vIHBpeGVsbGVuZ3RoIHdpbGwgYmUgKyBmb3IgeCBheGVzIGFuZCAtIGZvciB5IGF4ZXMgYmVjYXN1ZSBwaXhlbHMgYWx3YXlzIG1lYXN1cmVkIGZyb20gdG9wIGxlZnQuCiAgICAgICAgdmFyIHBpeGVsbGVuZ3RoID0gb2ZmbWF4IC0gb2ZmbWluOwogICAgICAgIHZhciB1bml0bGVuZ3RoID0gbWF4IC0gbWluOwogICAgICAgIAogICAgICAgIC8vIHBvaW50IHRvIHVuaXQgYW5kIHVuaXQgdG8gcG9pbnQgY29udmVyc2lvbnMgcmVmZXJlbmNlcyB0byBQbG90IERPTSBlbGVtZW50IHRvcCBsZWZ0IGNvcm5lci4KICAgICAgICB0aGlzLnAydSA9IGZ1bmN0aW9uKHApewogICAgICAgICAgICByZXR1cm4gKHAgLSBvZmZtaW4pICogdW5pdGxlbmd0aCAvIHBpeGVsbGVuZ3RoICsgbWluOwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy51MnAgPSBmdW5jdGlvbih1KXsKICAgICAgICAgICAgcmV0dXJuICh1IC0gbWluKSAqIHBpeGVsbGVuZ3RoIC8gdW5pdGxlbmd0aCArIG9mZm1pbjsKICAgICAgICB9OwogICAgICAgICAgICAgICAgCiAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneGF4aXMnIHx8IHRoaXMubmFtZSA9PSAneDJheGlzJyl7CiAgICAgICAgICAgIHRoaXMuc2VyaWVzX3UycCA9IGZ1bmN0aW9uKHUpewogICAgICAgICAgICAgICAgcmV0dXJuICh1IC0gbWluKSAqIHBpeGVsbGVuZ3RoIC8gdW5pdGxlbmd0aDsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5zZXJpZXNfcDJ1ID0gZnVuY3Rpb24ocCl7CiAgICAgICAgICAgICAgICByZXR1cm4gcCAqIHVuaXRsZW5ndGggLyBwaXhlbGxlbmd0aCArIG1pbjsKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc2VyaWVzX3UycCA9IGZ1bmN0aW9uKHUpewogICAgICAgICAgICAgICAgcmV0dXJuICh1IC0gbWF4KSAqIHBpeGVsbGVuZ3RoIC8gdW5pdGxlbmd0aDsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5zZXJpZXNfcDJ1ID0gZnVuY3Rpb24ocCl7CiAgICAgICAgICAgICAgICByZXR1cm4gcCAqIHVuaXRsZW5ndGggLyBwaXhlbGxlbmd0aCArIG1heDsKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc2hvdykgewogICAgICAgICAgICBpZiAodGhpcy5uYW1lID09ICd4YXhpcycgfHwgdGhpcy5uYW1lID09ICd4MmF4aXMnKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGlja3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHRpY2tzW2ldOwogICAgICAgICAgICAgICAgICAgIGlmICh0LnNob3cgJiYgdC5zaG93TGFiZWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaW07CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5jb25zdHJ1Y3RvciA9PSAkLmpxcGxvdC5DYW52YXNBeGlzVGlja1JlbmRlcmVyICYmIHQuYW5nbGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgbmVlZCB0byBhZGp1c3QgYXV0byBwb3NpdGlvbmluZyBiYXNlZCBvbiB3aGljaCBheGlzIHRoaXMgaXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9ICh0aGlzLm5hbWUgPT0gJ3hheGlzJykgPyAxIDogLTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHQubGFiZWxQb3NpdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2F1dG8nOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbiBhdCBlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgKiB0LmFuZ2xlIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldFdpZHRoKCkgKyB0Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5zaW4oLXQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIGF0IHN0YXJ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5zaW4odC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldFdpZHRoKCkgKyB0Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5zaW4oLXQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdGFydCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguc2luKHQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtaWRkbGUnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0V2lkdGgoKS8yICsgdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguc2luKC10Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldFdpZHRoKCkvMiArIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbigtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldFdpZHRoKCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy51MnAodC52YWx1ZSkgKyBzaGltICsgJ3B4JzsKICAgICAgICAgICAgICAgICAgICAgICAgdC5fZWxlbS5jc3MoJ2xlZnQnLCB2YWwpOwogICAgICAgICAgICAgICAgICAgICAgICB0LnBhY2soKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgdzsKICAgICAgICAgICAgICAgIGlmIChsc2hvdykgewogICAgICAgICAgICAgICAgICAgIHcgPSB0aGlzLl9sYWJlbC5fZWxlbS5vdXRlcldpZHRoKHRydWUpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcygnbGVmdCcsIG9mZm1pbiArIHBpeGVsbGVuZ3RoLzIgLSB3LzIgKyAncHgnKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lID09ICd4YXhpcycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCdib3R0b20nLCAnMHB4Jyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5fZWxlbS5jc3MoJ3RvcCcsICcwcHgnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwucGFjaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gbm93IHNob3cgdGhlIGxhYmVscyB1bmRlciB0aGUgYmFycy4KICAgICAgICAgICAgICAgIHZhciBiLCBsLCByOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMuYmFyTGFiZWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX2JhckxhYmVsc1tpXTsKICAgICAgICAgICAgICAgICAgICBpZiAoYi5zaG93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBiLmdldFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB0aGlzLl90aWNrc1tpXS5nZXRMZWZ0KCkgKyB0aGlzLl90aWNrc1tpXS5nZXRXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICAgICByID0gdGhpcy5fdGlja3NbaSsxXS5nZXRMZWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGIuX2VsZW0uY3NzKCdsZWZ0JywgKHIrbC13KS8yKydweCcpOwogICAgICAgICAgICAgICAgICAgICAgICBiLl9lbGVtLmNzcygndG9wJywgdGhpcy5fdGlja3NbaV0uX2VsZW0uY3NzKCd0b3AnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGIucGFjaygpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aWNrcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGlja3NbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvdyAmJiB0LnNob3dMYWJlbCkgeyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpbTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlciAmJiB0LmFuZ2xlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5lZWQgdG8gYWRqdXN0IGF1dG8gcG9zaXRpb25pbmcgYmFzZWQgb24gd2hpY2ggYXhpcyB0aGlzIGlzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSAodGhpcy5uYW1lID09ICd5YXhpcycpID8gMSA6IC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0LmxhYmVsUG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24gYXQgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgKiB0LmFuZ2xlIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5jb3MoLXQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldEhlaWdodCgpICsgdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguY29zKHQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuYW5nbGUgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLmNvcygtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkgKyB0Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5jb3ModC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWlkZGxlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldEhlaWdodCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5nZXRIZWlnaHQoKS8yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5nZXRIZWlnaHQoKS8yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy51MnAodC52YWx1ZSkgKyBzaGltICsgJ3B4JzsKICAgICAgICAgICAgICAgICAgICAgICAgdC5fZWxlbS5jc3MoJ3RvcCcsIHZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHQucGFjaygpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChsc2hvdykgewogICAgICAgICAgICAgICAgICAgIHZhciBoID0gdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJIZWlnaHQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCd0b3AnLCBvZmZtYXggLSBwaXhlbGxlbmd0aC8yIC0gaC8yICsgJ3B4Jyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneWF4aXMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcygnbGVmdCcsICcwcHgnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcygncmlnaHQnLCAnMHB4Jyk7CiAgICAgICAgICAgICAgICAgICAgfSAgIAogICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLnBhY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGEpe2EuanFwbG90Lk1la2tvQXhpc1JlbmRlcmVyPWZ1bmN0aW9uKCl7fTthLmpxcGxvdC5NZWtrb0F4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihjKXt0aGlzLnRpY2tNb2RlO3RoaXMuYmFyTGFiZWxSZW5kZXJlcj1hLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlcjt0aGlzLmJhckxhYmVscz10aGlzLmJhckxhYmVsc3x8W107dGhpcy5iYXJMYWJlbE9wdGlvbnM9e307dGhpcy50aWNrT3B0aW9ucz1hLmV4dGVuZCh0cnVlLHtzaG93R3JpZGxpbmU6ZmFsc2V9LHRoaXMudGlja09wdGlvbnMpO3RoaXMuX2JhckxhYmVscz1bXTthLmV4dGVuZCh0cnVlLHRoaXMsYyk7aWYodGhpcy5uYW1lPT0ieWF4aXMiKXt0aGlzLnRpY2tPcHRpb25zLmZvcm1hdFN0cmluZz10aGlzLnRpY2tPcHRpb25zLmZvcm1hdFN0cmluZ3x8IiVkJSJ9dmFyIGI9dGhpcy5fZGF0YUJvdW5kcztiLm1pbj0wO2lmKHRoaXMubmFtZT09InlheGlzInx8dGhpcy5uYW1lPT0ieTJheGlzIil7Yi5tYXg9MTAwO3RoaXMudGlja01vZGU9ImV2ZW4ifWVsc2V7aWYodGhpcy5uYW1lPT0ieGF4aXMiKXt0aGlzLnRpY2tNb2RlPSh0aGlzLnRpY2tNb2RlPT1udWxsKT8iYmFyIjp0aGlzLnRpY2tNb2RlO2Zvcih2YXIgZD0wO2Q8dGhpcy5fc2VyaWVzLmxlbmd0aDtkKyspe2IubWF4Kz10aGlzLl9zZXJpZXNbZF0uX3N1bXl9fWVsc2V7aWYodGhpcy5uYW1lPT0ieDJheGlzIil7dGhpcy50aWNrTW9kZT0odGhpcy50aWNrTW9kZT09bnVsbCk/ImV2ZW4iOnRoaXMudGlja01vZGU7Zm9yKHZhciBkPTA7ZDx0aGlzLl9zZXJpZXMubGVuZ3RoO2QrKyl7Yi5tYXgrPXRoaXMuX3Nlcmllc1tkXS5fc3VteX19fX19O2EuanFwbG90Lk1la2tvQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGIsail7aWYodGhpcy5zaG93KXt0aGlzLnJlbmRlcmVyLmNyZWF0ZVRpY2tzLmNhbGwodGhpcyk7dmFyIGg9MDt2YXIgYzt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLl9lbGVtPWEoZyk7dGhpcy5fZWxlbS5hZGRDbGFzcygianFwbG90LWF4aXMganFwbG90LSIrdGhpcy5uYW1lKTt0aGlzLl9lbGVtLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpO2c9bnVsbDtpZih0aGlzLm5hbWU9PSJ4YXhpcyJ8fHRoaXMubmFtZT09IngyYXhpcyIpe3RoaXMuX2VsZW0ud2lkdGgodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgpfWVsc2V7dGhpcy5fZWxlbS5oZWlnaHQodGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0KX10aGlzLmxhYmVsT3B0aW9ucy5heGlzPXRoaXMubmFtZTt0aGlzLl9sYWJlbD1uZXcgdGhpcy5sYWJlbFJlbmRlcmVyKHRoaXMubGFiZWxPcHRpb25zKTtpZih0aGlzLl9sYWJlbC5zaG93KXt0aGlzLl9lbGVtLmFwcGVuZCh0aGlzLl9sYWJlbC5kcmF3KGIpKX12YXIgZixlLGc7aWYodGhpcy5zaG93VGlja3Mpe2Y9dGhpcy5fdGlja3M7Zm9yKHZhciBkPTA7ZDxmLmxlbmd0aDtkKyspe2U9ZltkXTtpZihlLnNob3dMYWJlbCYmKCFlLmlzTWlub3JUaWNrfHx0aGlzLnNob3dNaW5vclRpY2tzKSl7dGhpcy5fZWxlbS5hcHBlbmQoZS5kcmF3KGIpKX19fWZvcihkPTA7ZDx0aGlzLmJhckxhYmVscy5sZW5ndGg7ZCsrKXt0aGlzLmJhckxhYmVsT3B0aW9ucy5heGlzPXRoaXMubmFtZTt0aGlzLmJhckxhYmVsT3B0aW9ucy5sYWJlbD10aGlzLmJhckxhYmVsc1tkXTt0aGlzLl9iYXJMYWJlbHMucHVzaChuZXcgdGhpcy5iYXJMYWJlbFJlbmRlcmVyKHRoaXMuYmFyTGFiZWxPcHRpb25zKSk7aWYodGhpcy50aWNrTW9kZSE9ImJhciIpe3RoaXMuX2JhckxhYmVsc1tkXS5zaG93PWZhbHNlfWlmKHRoaXMuX2JhckxhYmVsc1tkXS5zaG93KXt2YXIgZz10aGlzLl9iYXJMYWJlbHNbZF0uZHJhdyhiLGopO2cucmVtb3ZlQ2xhc3MoImpxcGxvdC0iK3RoaXMubmFtZSsiLWxhYmVsIik7Zy5hZGRDbGFzcygianFwbG90LSIrdGhpcy5uYW1lKyItdGljayIpO2cuYWRkQ2xhc3MoImpxcGxvdC1tZWtrby1iYXJMYWJlbCIpO2cuYXBwZW5kVG8odGhpcy5fZWxlbSk7Zz1udWxsfX19cmV0dXJuIHRoaXMuX2VsZW19O2EuanFwbG90Lk1la2tvQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMubWluPXRoaXMuX21pbjt0aGlzLm1heD10aGlzLl9tYXg7dGhpcy50aWNrSW50ZXJ2YWw9dGhpcy5fdGlja0ludGVydmFsO3RoaXMubnVtYmVyVGlja3M9dGhpcy5fbnVtYmVyVGlja3N9O2EuanFwbG90Lk1la2tvQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oKXt2YXIgaz0wO3ZhciBkO3ZhciBjPTA7dmFyIGo9MDt2YXIgYj0odGhpcy5fbGFiZWw9PW51bGwpP2ZhbHNlOnRoaXMuX2xhYmVsLnNob3c7aWYodGhpcy5zaG93JiZ0aGlzLnNob3dUaWNrcyl7dmFyIGc9dGhpcy5fdGlja3M7Zm9yKHZhciBmPTA7ZjxnLmxlbmd0aDtmKyspe3ZhciBlPWdbZl07aWYoZS5zaG93TGFiZWwmJighZS5pc01pbm9yVGlja3x8dGhpcy5zaG93TWlub3JUaWNrcykpe2lmKHRoaXMubmFtZT09InhheGlzInx8dGhpcy5uYW1lPT0ieDJheGlzIil7ZD1lLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpfWVsc2V7ZD1lLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSl9aWYoZD5rKXtrPWR9fX1pZihiKXtjPXRoaXMuX2xhYmVsLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSk7aj10aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKX1pZih0aGlzLm5hbWU9PSJ4YXhpcyIpe2s9aytqO3RoaXMuX2VsZW0uY3NzKHtoZWlnaHQ6aysicHgiLGxlZnQ6IjBweCIsYm90dG9tOiIwcHgifSl9ZWxzZXtpZih0aGlzLm5hbWU9PSJ4MmF4aXMiKXtrPWsrajt0aGlzLl9lbGVtLmNzcyh7aGVpZ2h0OmsrInB4IixsZWZ0OiIwcHgiLHRvcDoiMHB4In0pfWVsc2V7aWYodGhpcy5uYW1lPT0ieWF4aXMiKXtrPWsrYzt0aGlzLl9lbGVtLmNzcyh7d2lkdGg6aysicHgiLGxlZnQ6IjBweCIsdG9wOiIwcHgifSk7aWYoYiYmdGhpcy5fbGFiZWwuY29uc3RydWN0b3I9PWEuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyKXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoIndpZHRoIixjKyJweCIpfX1lbHNle2s9aytjO3RoaXMuX2VsZW0uY3NzKHt3aWR0aDprKyJweCIscmlnaHQ6IjBweCIsdG9wOiIwcHgifSk7aWYoYiYmdGhpcy5fbGFiZWwuY29uc3RydWN0b3I9PWEuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyKXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoIndpZHRoIixjKyJweCIpfX19fX19O2EuanFwbG90Lk1la2tvQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jcmVhdGVUaWNrcz1mdW5jdGlvbigpe3ZhciB6PXRoaXMuX3RpY2tzO3ZhciB3PXRoaXMudGlja3M7dmFyIEI9dGhpcy5uYW1lO3ZhciB5PXRoaXMuX2RhdGFCb3VuZHM7dmFyIHAseDt2YXIgbixyO3ZhciBkLGM7dmFyIGgsYixzLHE7aWYody5sZW5ndGgpe2ZvcihzPTA7czx3Lmxlbmd0aDtzKyspe3ZhciBlPXdbc107dmFyIGg9bmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpO2lmKGUuY29uc3RydWN0b3I9PUFycmF5KXtoLnZhbHVlPWVbMF07aC5sYWJlbD1lWzFdO2lmKCF0aGlzLnNob3dUaWNrcyl7aC5zaG93TGFiZWw9ZmFsc2U7aC5zaG93TWFyaz1mYWxzZX1lbHNle2lmKCF0aGlzLnNob3dUaWNrTWFya3Mpe2guc2hvd01hcms9ZmFsc2V9fWguc2V0VGljayhlWzBdLHRoaXMubmFtZSk7dGhpcy5fdGlja3MucHVzaChoKX1lbHNle2gudmFsdWU9ZTtpZighdGhpcy5zaG93VGlja3Mpe2guc2hvd0xhYmVsPWZhbHNlO2guc2hvd01hcms9ZmFsc2V9ZWxzZXtpZighdGhpcy5zaG93VGlja01hcmtzKXtoLnNob3dNYXJrPWZhbHNlfX1oLnNldFRpY2soZSx0aGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1c2goaCl9fXRoaXMubnVtYmVyVGlja3M9dy5sZW5ndGg7dGhpcy5taW49dGhpcy5fdGlja3NbMF0udmFsdWU7dGhpcy5tYXg9dGhpcy5fdGlja3NbdGhpcy5udW1iZXJUaWNrcy0xXS52YWx1ZTt0aGlzLnRpY2tJbnRlcnZhbD0odGhpcy5tYXgtdGhpcy5taW4pLyh0aGlzLm51bWJlclRpY2tzLTEpfWVsc2V7aWYoQj09InhheGlzInx8Qj09IngyYXhpcyIpe3A9dGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGh9ZWxzZXtwPXRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodH1pZih0aGlzLm1pbiE9bnVsbCYmdGhpcy5tYXghPW51bGwmJnRoaXMubnVtYmVyVGlja3MhPW51bGwpe3RoaXMudGlja0ludGVydmFsPW51bGx9bj0odGhpcy5taW4hPW51bGwpP3RoaXMubWluOnkubWluO3I9KHRoaXMubWF4IT1udWxsKT90aGlzLm1heDp5Lm1heDtpZihuPT1yKXt2YXIgZz0wLjA1O2lmKG4+MCl7Zz1NYXRoLm1heChNYXRoLmxvZyhuKS9NYXRoLkxOMTAsMC4wNSl9bi09ZztyKz1nfXZhciBrPXItbjt2YXIgbSxvO3ZhciB2LGwsdTt2YXIgZj1bMyw1LDYsMTEsMjFdO2lmKHRoaXMubmFtZT09InlheGlzInx8dGhpcy5uYW1lPT0ieTJheGlzIil7dGhpcy5taW49MDt0aGlzLm1heD0xMDA7aWYoIXRoaXMubnVtYmVyVGlja3Mpe2lmKHRoaXMudGlja0ludGVydmFsKXt0aGlzLm51bWJlclRpY2tzPTMrTWF0aC5jZWlsKGsvdGhpcy50aWNrSW50ZXJ2YWwpfWVsc2V7dj0yK01hdGguY2VpbCgocC0odGhpcy50aWNrU3BhY2luZy0xKSkvdGhpcy50aWNrU3BhY2luZyk7Zm9yKHM9MDtzPGYubGVuZ3RoO3MrKyl7dT12L2Zbc107aWYodT09MSl7dGhpcy5udW1iZXJUaWNrcz1mW3NdO2JyZWFrfWVsc2V7aWYodT4xKXtsPXU7Y29udGludWV9ZWxzZXtpZih1PDEpe2lmKE1hdGguYWJzKGwtMSk8TWF0aC5hYnModS0xKSl7dGhpcy5udW1iZXJUaWNrcz1mW3MtMV07YnJlYWt9ZWxzZXt0aGlzLm51bWJlclRpY2tzPWZbc107YnJlYWt9fWVsc2V7aWYocz09Zi5sZW5ndGgtMSl7dGhpcy5udW1iZXJUaWNrcz1mW3NdfX19fX10aGlzLnRpY2tJbnRlcnZhbD1rLyh0aGlzLm51bWJlclRpY2tzLTEpfX1lbHNle3RoaXMudGlja0ludGVydmFsPWsvKHRoaXMubnVtYmVyVGlja3MtMSl9Zm9yKHZhciBzPTA7czx0aGlzLm51bWJlclRpY2tzO3MrKyl7Yj10aGlzLm1pbitzKnRoaXMudGlja0ludGVydmFsO2g9bmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpO2lmKCF0aGlzLnNob3dUaWNrcyl7aC5zaG93TGFiZWw9ZmFsc2U7aC5zaG93TWFyaz1mYWxzZX1lbHNle2lmKCF0aGlzLnNob3dUaWNrTWFya3Mpe2guc2hvd01hcms9ZmFsc2V9fWguc2V0VGljayhiLHRoaXMubmFtZSk7dGhpcy5fdGlja3MucHVzaChoKX19ZWxzZXtpZih0aGlzLnRpY2tNb2RlPT0iYmFyIil7dGhpcy5taW49MDt0aGlzLm51bWJlclRpY2tzPXRoaXMuX3Nlcmllcy5sZW5ndGgrMTtoPW5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTtpZighdGhpcy5zaG93VGlja3Mpe2guc2hvd0xhYmVsPWZhbHNlO2guc2hvd01hcms9ZmFsc2V9ZWxzZXtpZighdGhpcy5zaG93VGlja01hcmtzKXtoLnNob3dNYXJrPWZhbHNlfX1oLnNldFRpY2soMCx0aGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1c2goaCk7dj0wO2ZvcihzPTE7czx0aGlzLm51bWJlclRpY2tzO3MrKyl7dis9dGhpcy5fc2VyaWVzW3MtMV0uX3N1bXk7aD1uZXcgdGhpcy50aWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7aWYoIXRoaXMuc2hvd1RpY2tzKXtoLnNob3dMYWJlbD1mYWxzZTtoLnNob3dNYXJrPWZhbHNlfWVsc2V7aWYoIXRoaXMuc2hvd1RpY2tNYXJrcyl7aC5zaG93TWFyaz1mYWxzZX19aC5zZXRUaWNrKHYsdGhpcy5uYW1lKTt0aGlzLl90aWNrcy5wdXNoKGgpfXRoaXMubWF4PXRoaXMubWF4fHx2O2lmKHRoaXMubWF4PnYpe2g9bmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpO2lmKCF0aGlzLnNob3dUaWNrcyl7aC5zaG93TGFiZWw9ZmFsc2U7aC5zaG93TWFyaz1mYWxzZX1lbHNle2lmKCF0aGlzLnNob3dUaWNrTWFya3Mpe2guc2hvd01hcms9ZmFsc2V9fWguc2V0VGljayh0aGlzLm1heCx0aGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1c2goaCl9fWVsc2V7aWYodGhpcy50aWNrTW9kZT09ImV2ZW4iKXt0aGlzLm1pbj0wO3RoaXMubWF4PXRoaXMubWF4fHx5Lm1heDt2YXIgQT0yK01hdGguY2VpbCgocC0odGhpcy50aWNrU3BhY2luZy0xKSkvdGhpcy50aWNrU3BhY2luZyk7az10aGlzLm1heC10aGlzLm1pbjt0aGlzLm51bWJlclRpY2tzPUE7dGhpcy50aWNrSW50ZXJ2YWw9ay8odGhpcy5udW1iZXJUaWNrcy0xKTtmb3Iocz0wO3M8dGhpcy5udW1iZXJUaWNrcztzKyspe2I9dGhpcy5taW4rcyp0aGlzLnRpY2tJbnRlcnZhbDtoPW5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTtpZighdGhpcy5zaG93VGlja3Mpe2guc2hvd0xhYmVsPWZhbHNlO2guc2hvd01hcms9ZmFsc2V9ZWxzZXtpZighdGhpcy5zaG93VGlja01hcmtzKXtoLnNob3dNYXJrPWZhbHNlfX1oLnNldFRpY2soYix0aGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1c2goaCl9fX19fX07YS5qcXBsb3QuTWVra29BeGlzUmVuZGVyZXIucHJvdG90eXBlLnBhY2s9ZnVuY3Rpb24oZSxkKXt2YXIgQz10aGlzLl90aWNrczt2YXIgeD10aGlzLm1heDt2YXIgdj10aGlzLm1pbjt2YXIgbT1kLm1heDt2YXIgaj1kLm1pbjt2YXIgbz0odGhpcy5fbGFiZWw9PW51bGwpP2ZhbHNlOnRoaXMuX2xhYmVsLnNob3c7Zm9yKHZhciBzIGluIGUpe3RoaXMuX2VsZW0uY3NzKHMsZVtzXSl9dGhpcy5fb2Zmc2V0cz1kO3ZhciBmPW0tajt2YXIgZz14LXY7dGhpcy5wMnU9ZnVuY3Rpb24oYil7cmV0dXJuKGItaikqZy9mK3Z9O3RoaXMudTJwPWZ1bmN0aW9uKGIpe3JldHVybihiLXYpKmYvZytqfTtpZih0aGlzLm5hbWU9PSJ4YXhpcyJ8fHRoaXMubmFtZT09IngyYXhpcyIpe3RoaXMuc2VyaWVzX3UycD1mdW5jdGlvbihiKXtyZXR1cm4oYi12KSpmL2d9O3RoaXMuc2VyaWVzX3AydT1mdW5jdGlvbihiKXtyZXR1cm4gYipnL2Yrdn19ZWxzZXt0aGlzLnNlcmllc191MnA9ZnVuY3Rpb24oYil7cmV0dXJuKGIteCkqZi9nfTt0aGlzLnNlcmllc19wMnU9ZnVuY3Rpb24oYil7cmV0dXJuIGIqZy9mK3h9fWlmKHRoaXMuc2hvdyl7aWYodGhpcy5uYW1lPT0ieGF4aXMifHx0aGlzLm5hbWU9PSJ4MmF4aXMiKXtmb3IodmFyIHk9MDt5PEMubGVuZ3RoO3krKyl7dmFyIG49Q1t5XTtpZihuLnNob3cmJm4uc2hvd0xhYmVsKXt2YXIgYztpZihuLmNvbnN0cnVjdG9yPT1hLmpxcGxvdC5DYW52YXNBeGlzVGlja1JlbmRlcmVyJiZuLmFuZ2xlKXt2YXIgQT0odGhpcy5uYW1lPT0ieGF4aXMiKT8xOi0xO3N3aXRjaChuLmxhYmVsUG9zaXRpb24pe2Nhc2UiYXV0byI6aWYoQSpuLmFuZ2xlPDApe2M9LW4uZ2V0V2lkdGgoKStuLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguc2luKC1uLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzJ9ZWxzZXtjPS1uLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguc2luKG4uX3RleHRSZW5kZXJlci5hbmdsZSkvMn1icmVhaztjYXNlImVuZCI6Yz0tbi5nZXRXaWR0aCgpK24uX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5zaW4oLW4uX3RleHRSZW5kZXJlci5hbmdsZSkvMjticmVhaztjYXNlInN0YXJ0IjpjPS1uLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguc2luKG4uX3RleHRSZW5kZXJlci5hbmdsZSkvMjticmVhaztjYXNlIm1pZGRsZSI6Yz0tbi5nZXRXaWR0aCgpLzIrbi5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbigtbi5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yO2JyZWFrO2RlZmF1bHQ6Yz0tbi5nZXRXaWR0aCgpLzIrbi5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbigtbi5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yO2JyZWFrfX1lbHNle2M9LW4uZ2V0V2lkdGgoKS8yfXZhciBEPXRoaXMudTJwKG4udmFsdWUpK2MrInB4IjtuLl9lbGVtLmNzcygibGVmdCIsRCk7bi5wYWNrKCl9fXZhciBrO2lmKG8pe2s9dGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoImxlZnQiLGorZi8yLWsvMisicHgiKTtpZih0aGlzLm5hbWU9PSJ4YXhpcyIpe3RoaXMuX2xhYmVsLl9lbGVtLmNzcygiYm90dG9tIiwiMHB4Iil9ZWxzZXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoInRvcCIsIjBweCIpfXRoaXMuX2xhYmVsLnBhY2soKX12YXIgQix1LHE7Zm9yKHZhciB5PTA7eTx0aGlzLmJhckxhYmVscy5sZW5ndGg7eSsrKXtCPXRoaXMuX2JhckxhYmVsc1t5XTtpZihCLnNob3cpe2s9Qi5nZXRXaWR0aCgpO3U9dGhpcy5fdGlja3NbeV0uZ2V0TGVmdCgpK3RoaXMuX3RpY2tzW3ldLmdldFdpZHRoKCk7cT10aGlzLl90aWNrc1t5KzFdLmdldExlZnQoKTtCLl9lbGVtLmNzcygibGVmdCIsKHErdS1rKS8yKyJweCIpO0IuX2VsZW0uY3NzKCJ0b3AiLHRoaXMuX3RpY2tzW3ldLl9lbGVtLmNzcygidG9wIikpO0IucGFjaygpfX19ZWxzZXtmb3IodmFyIHk9MDt5PEMubGVuZ3RoO3krKyl7dmFyIG49Q1t5XTtpZihuLnNob3cmJm4uc2hvd0xhYmVsKXt2YXIgYztpZihuLmNvbnN0cnVjdG9yPT1hLmpxcGxvdC5DYW52YXNBeGlzVGlja1JlbmRlcmVyJiZuLmFuZ2xlKXt2YXIgQT0odGhpcy5uYW1lPT0ieWF4aXMiKT8xOi0xO3N3aXRjaChuLmxhYmVsUG9zaXRpb24pe2Nhc2UiYXV0byI6Y2FzZSJlbmQiOmlmKEEqbi5hbmdsZTwwKXtjPS1uLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguY29zKC1uLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzJ9ZWxzZXtjPS1uLmdldEhlaWdodCgpK24uX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5jb3Mobi5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWJyZWFrO2Nhc2Uic3RhcnQiOmlmKG4uYW5nbGU+MCl7Yz0tbi5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLmNvcygtbi5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWVsc2V7Yz0tbi5nZXRIZWlnaHQoKStuLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguY29zKG4uX3RleHRSZW5kZXJlci5hbmdsZSkvMn1icmVhaztjYXNlIm1pZGRsZSI6Yz0tbi5nZXRIZWlnaHQoKS8yO2JyZWFrO2RlZmF1bHQ6Yz0tbi5nZXRIZWlnaHQoKS8yO2JyZWFrfX1lbHNle2M9LW4uZ2V0SGVpZ2h0KCkvMn12YXIgRD10aGlzLnUycChuLnZhbHVlKStjKyJweCI7bi5fZWxlbS5jc3MoInRvcCIsRCk7bi5wYWNrKCl9fWlmKG8pe3ZhciB6PXRoaXMuX2xhYmVsLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpO3RoaXMuX2xhYmVsLl9lbGVtLmNzcygidG9wIixtLWYvMi16LzIrInB4Iik7aWYodGhpcy5uYW1lPT0ieWF4aXMiKXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoImxlZnQiLCIwcHgiKX1lbHNle3RoaXMuX2xhYmVsLl9lbGVtLmNzcygicmlnaHQiLCIwcHgiKX10aGlzLl9sYWJlbC5wYWNrKCl9fX19fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.mekkoRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLyoqCiAgICAgKiBDbGFzczogJC5qcXBsb3QuTWVra29SZW5kZXJlcgogICAgICogRHJhd3MgYSBNZWtrbyBzdHlsZSBjaGFydCB3aGljaCBzaG93cyAzIGRpbWVuc2lvbmFsIGRhdGEgb24gYSAyIGRpbWVuc2lvbmFsIGdyYXBoLgogICAgICogdGhlIDwkLmpxcGxvdC5NZWtrb0F4aXNSZW5kZXJlcj4gc2hvdWxkIGJlIHVzZWQgd2l0aCBtZWtrbyBjaGFydHMuICBUaGUgbWVra28gcmVuZGVyZXIKICAgICAqIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBsZWdlbmQgcmVuZGVyZXIgd2l0aCBpdHMgb3duICQuanFwbG90Lk1la2tvTGVnZW5kUmVuZGVyZXIKICAgICAqIHdoaWNoIGFsbG93cyBtb3JlIGZsZXhpYmlsaXR5IHRvIHNwZWNpZnkgbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMgaW4gdGhlIGxlZ2VuZC4KICAgICAqIAogICAgICogRGF0YSBpcyBzcGVjaWZpZWQgcGVyIGJhciBpbiB0aGUgY2hhcnQuICBZb3UgY2FuIHNwZWNpZnkgZGF0YSBhcyBhbiBhcnJheSBvZiB5IHZhbHVlcywgb3IgYXMgCiAgICAgKiBhbiBhcnJheSBvZiBbbGFiZWwsIHZhbHVlXSBwYWlycy4gIE5vdGUgdGhhdCBsYWJlbHMgYXJlIHVzZWQgb25seSBvbiB0aGUgZmlyc3Qgc2VyaWVzLiAgCiAgICAgKiBMYWJlbHMgb24gc3Vic2VxdWVudCBzZXJpZXMgYXJlIGlnbm9yZWQ6CiAgICAgKiAKICAgICAqID4gYmFyMSA9IFtbJ3NoaXJ0cycsIDhdLFsnaGF0cycsIDE0XSxbJ3Nob2VzJywgNl0sWydnbG92ZXMnLCAxNl0sWydkb2xscycsIDEyXV07CiAgICAgKiA+IGJhcjIgPSBbMTUsNiw5LDEzLDZdOwogICAgICogPiBiYXIzID0gW1snZ3J1bXB5Jyw0XSxbJ3NuZWV6eScsMl0sWydoYXBweScsN10sWydzbGVlcHknLDldLFsnZG9jJyw3XV07CiAgICAgKiAKICAgICAqIElmIHlvdSB3YW50IHRvIHBsYWNlIGxhYmVscyBmb3IgZWFjaCBiYXIgdW5kZXIgdGhlIGF4aXMsIHlvdSB1c2UgdGhlIGJhckxhYmVscyBvcHRpb24gb24gCiAgICAgKiB0aGUgYXhlcy4gIFRoZSBiYXIgbGFiZWxzIGNhbiBiZSBzdHlsZWQgd2l0aCB0aGUgIi5qcXBsb3QtbWVra28tYmFyTGFiZWwiIGNzcyBjbGFzcy4KICAgICAqIAogICAgICogPiBiYXJMYWJlbHMgPSBbJ01pY2tleSBNb3VzZScsICdEb25hbGQgRHVjaycsICdHb29meSddOwogICAgICogPiBheGVzOnt4YXhpczp7YmFyTGFiZWxzOmJhckxhYmVsc319CiAgICAgKiAKICAgICAqLwogICAgCiAgICAKICAgICQuanFwbG90Lk1la2tvUmVuZGVyZXIgPSBmdW5jdGlvbigpewogICAgICAgIHRoaXMuc2hhcGVSZW5kZXJlciA9IG5ldyAkLmpxcGxvdC5TaGFwZVJlbmRlcmVyKCk7CiAgICAgICAgLy8gcHJvcDogYm9yZGVyQ29sb3IKICAgICAgICAvLyBjb2xvciBvZiB0aGUgYm9yZGVycyBiZXR3ZWVuIGFyZWFzIG9uIHRoZSBjaGFydAogICAgICAgIHRoaXMuYm9yZGVyQ29sb3IgPSBudWxsOwogICAgICAgIC8vIHByb3A6IHNob3dCb3JkZXJzCiAgICAgICAgLy8gVHJ1ZSB0byBkcmF3IGJvcmRlcnMgbGluZXMgYmV0d2VlbiBhcmVhcyBvbiB0aGUgY2hhcnQuCiAgICAgICAgLy8gRmFsc2Ugd2lsbCBkcmF3IGJvcmRlcnMgbGluZXMgd2l0aCB0aGUgc2FtZSBjb2xvciBhcyB0aGUgYXJlYS4KICAgICAgICB0aGlzLnNob3dCb3JkZXJzID0gdHJ1ZTsKICAgIH07CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIHNlcmllcy4KICAgICQuanFwbG90Lk1la2tvUmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zLCBwbG90KSB7CiAgICAgICAgdGhpcy5maWxsID0gZmFsc2U7CiAgICAgICAgdGhpcy5maWxsUmVjdCA9IHRydWU7CiAgICAgICAgdGhpcy5zdHJva2VSZWN0ID0gdHJ1ZTsKICAgICAgICB0aGlzLnNoYWRvdyA9IGZhbHNlOwogICAgICAgIC8vIHdpZHRoIG9mIGJhciBvbiB4IGF4aXMuCiAgICAgICAgdGhpcy5feHdpZHRoID0gMDsKICAgICAgICB0aGlzLl94c3RhcnQgPSAwOwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMucmVuZGVyZXIsIG9wdGlvbnMpOwogICAgICAgIC8vIHNldCB0aGUgc2hhcGUgcmVuZGVyZXIgb3B0aW9ucwogICAgICAgIHZhciBvcHRzID0ge2xpbmVKb2luOidtaXRlcicsIGxpbmVDYXA6J2J1dHQnLCBpc2FyYzpmYWxzZSwgZmlsbFJlY3Q6dGhpcy5maWxsUmVjdCwgc3Ryb2tlUmVjdDp0aGlzLnN0cm9rZVJlY3R9OwogICAgICAgIHRoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5pbml0KG9wdHMpOwogICAgICAgIHBsb3QuYXhlcy54MmF4aXMuX3Nlcmllcy5wdXNoKHRoaXMpOwogICAgICAgIHRoaXMuX3R5cGUgPSAnbWVra28nOwogICAgfTsKICAgIAogICAgLy8gTWV0aG9kOiBzZXRHcmlkRGF0YQogICAgLy8gY29udmVydHMgdGhlIHVzZXIgZGF0YSB2YWx1ZXMgdG8gZ3JpZCBjb29yZGluYXRlcyBhbmQgc3RvcmVzIHRoZW0KICAgIC8vIGluIHRoZSBncmlkRGF0YSBhcnJheS4gIFdpbGwgY29udmVydCB1c2VyIGRhdGEgaW50byBhcHByb3ByaWF0ZQogICAgLy8gcmVjdGFuZ2xlcy4KICAgIC8vIENhbGxlZCB3aXRoIHNjb3BlIG9mIGEgc2VyaWVzLgogICAgJC5qcXBsb3QuTWVra29SZW5kZXJlci5wcm90b3R5cGUuc2V0R3JpZERhdGEgPSBmdW5jdGlvbihwbG90KSB7CiAgICAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGdyaWQgZGF0YQogICAgICAgIHZhciB4cCA9IHRoaXMuX3hheGlzLnNlcmllc191MnA7CiAgICAgICAgdmFyIHlwID0gdGhpcy5feWF4aXMuc2VyaWVzX3UycDsKICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX3Bsb3REYXRhOwogICAgICAgIHRoaXMuZ3JpZERhdGEgPSBbXTsKICAgICAgICAvLyBmaWd1cmUgb3V0IHdpZHRoIG9uIHggYXhpcy4KICAgICAgICAvLyB0aGlzLl94d2lkdGggPSB0aGlzLl9zdW15IC8gcGxvdC5fc3VteSAqIHRoaXMuY2FudmFzLmdldFdpZHRoKCk7CiAgICAgICAgdGhpcy5feHdpZHRoID0geHAodGhpcy5fc3VteSkgLSB4cCgwKTsKICAgICAgICBpZiAodGhpcy5pbmRleD4wKSB7CiAgICAgICAgICAgIHRoaXMuX3hzdGFydCA9IHBsb3Quc2VyaWVzW3RoaXMuaW5kZXgtMV0uX3hzdGFydCArIHBsb3Quc2VyaWVzW3RoaXMuaW5kZXgtMV0uX3h3aWR0aDsKICAgICAgICB9CiAgICAgICAgdmFyIHRvdGhlaWdodCA9IHRoaXMuY2FudmFzLmdldEhlaWdodCgpOwogICAgICAgIHZhciBzdW15ID0gMDsKICAgICAgICB2YXIgY3VyeTsKICAgICAgICB2YXIgY3VyaGVpZ2h0OwogICAgICAgIGZvciAodmFyIGk9MDsgaTxkYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChkYXRhW2ldICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHN1bXkgKz0gZGF0YVtpXVsxXTsKICAgICAgICAgICAgICAgIGN1cnkgPSB0b3RoZWlnaHQgLSAoc3VteSAvIHRoaXMuX3N1bXkgKiB0b3RoZWlnaHQpOwogICAgICAgICAgICAgICAgY3VyaGVpZ2h0ID0gZGF0YVtpXVsxXSAvIHRoaXMuX3N1bXkgKiB0b3RoZWlnaHQ7CiAgICAgICAgICAgICAgICB0aGlzLmdyaWREYXRhLnB1c2goW3RoaXMuX3hzdGFydCwgY3VyeSwgdGhpcy5feHdpZHRoLCBjdXJoZWlnaHRdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8vIE1ldGhvZDogbWFrZUdyaWREYXRhCiAgICAvLyBjb252ZXJ0cyBhbnkgYXJiaXRyYXJ5IGRhdGEgdmFsdWVzIHRvIGdyaWQgY29vcmRpbmF0ZXMgYW5kCiAgICAvLyByZXR1cm5zIHRoZW0uICBUaGlzIG1ldGhvZCBleGlzdHMgc28gdGhhdCBwbHVnaW5zIGNhbiB1c2UgYSBzZXJpZXMnCiAgICAvLyBsaW5lcmVuZGVyZXIgdG8gZ2VuZXJhdGUgZ3JpZCBkYXRhIHBvaW50cyB3aXRob3V0IG92ZXJ3cml0aW5nIHRoZQogICAgLy8gZ3JpZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcmllcy4KICAgIC8vIENhbGxlZCB3aXRoIHNjb3BlIG9mIGEgc2VyaWVzLgogICAgJC5qcXBsb3QuTWVra29SZW5kZXJlci5wcm90b3R5cGUubWFrZUdyaWREYXRhID0gZnVuY3Rpb24oZGF0YSwgcGxvdCkgewogICAgICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBncmlkIGRhdGEKICAgICAgICAvLyBmaWd1cmUgb3V0IHdpZHRoIG9uIHggYXhpcy4KICAgICAgICB2YXIgeHAgPSB0aGlzLl94YXhpcy5zZXJpZXNfdTJwOwogICAgICAgIHZhciB0b3RoZWlnaHQgPSB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKTsKICAgICAgICB2YXIgc3VteSA9IDA7CiAgICAgICAgdmFyIGN1cnk7CiAgICAgICAgdmFyIGN1cmhlaWdodDsKICAgICAgICB2YXIgZ2QgPSBbXTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8ZGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoZGF0YVtpXSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBzdW15ICs9IGRhdGFbaV1bMV07CiAgICAgICAgICAgICAgICBjdXJ5ID0gdG90aGVpZ2h0IC0gKHN1bXkgLyB0aGlzLl9zdW15ICogdG90aGVpZ2h0KTsKICAgICAgICAgICAgICAgIGN1cmhlaWdodCA9IGRhdGFbaV1bMV0gLyB0aGlzLl9zdW15ICogdG90aGVpZ2h0OwogICAgICAgICAgICAgICAgZ2QucHVzaChbdGhpcy5feHN0YXJ0LCBjdXJ5LCB0aGlzLl94d2lkdGgsIGN1cmhlaWdodF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBnZDsKICAgIH07CiAgICAKCiAgICAvLyBjYWxsZWQgd2l0aGluIHNjb3BlIG9mIHNlcmllcy4KICAgICQuanFwbG90Lk1la2tvUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihjdHgsIGdkLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIGk7CiAgICAgICAgdmFyIG9wdHMgPSAob3B0aW9ucyAhPSB1bmRlZmluZWQpID8gb3B0aW9ucyA6IHt9OwogICAgICAgIHZhciBzaG93TGluZSA9IChvcHRzLnNob3dMaW5lICE9IHVuZGVmaW5lZCkgPyBvcHRzLnNob3dMaW5lIDogdGhpcy5zaG93TGluZTsKICAgICAgICB2YXIgY29sb3JHZW5lcmF0b3IgPSBuZXcgJC5qcXBsb3QuQ29sb3JHZW5lcmF0b3IodGhpcy5zZXJpZXNDb2xvcnMpOwogICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgaWYgKGdkLmxlbmd0aCkgewogICAgICAgICAgICBpZiAoc2hvd0xpbmUpIHsKICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPGdkLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgICAgICBvcHRzLmZpbGxTdHlsZSA9IGNvbG9yR2VuZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZW5kZXJlci5zaG93Qm9yZGVycykgewogICAgICAgICAgICAgICAgICAgICAgICBvcHRzLnN0cm9rZVN0eWxlID0gdGhpcy5yZW5kZXJlci5ib3JkZXJDb2xvcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuc3Ryb2tlU3R5bGUgPSBvcHRzLmZpbGxTdHlsZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmRyYXcoY3R4LCBnZFtpXSwgb3B0cyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgIH07ICAKICAgIAogICAgJC5qcXBsb3QuTWVra29SZW5kZXJlci5wcm90b3R5cGUuZHJhd1NoYWRvdyA9IGZ1bmN0aW9uKGN0eCwgZ2QsIG9wdGlvbnMpIHsKICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AsIG5vIHNoYWRvd3Mgb24gbWVra28gY2hhcnRzLgogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBDbGFzczogJC5qcXBsb3QuTWVra29MZWdlbmRSZW5kZXJlcgogICAgICogTGVnZW5kIHJlbmRlcmVyIHVzZWQgYnkgbWVra28gY2hhcnRzIHdpdGggb3B0aW9ucyBmb3IgCiAgICAgKiBjb250cm9sbGluZyBudW1iZXIgb3Igcm93cyBhbmQgY29sdW1ucyBhcyB3ZWxsIGFzIHBsYWNlbWVudAogICAgICogb3V0c2lkZSBvZiBwbG90IGFyZWEuCiAgICAgKiAKICAgICAqLwogICAgJC5qcXBsb3QuTWVra29MZWdlbmRSZW5kZXJlciA9IGZ1bmN0aW9uKCl7CiAgICAgICAgLy8KICAgIH07CiAgICAKICAgICQuanFwbG90Lk1la2tvTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgLy8gcHJvcDogbnVtYmVyUm93cwogICAgICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGxlZ2VuZC4gIDAgb3IgbnVsbCBmb3IgdW5saW1pdGVkLgogICAgICAgIHRoaXMubnVtYmVyUm93cyA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogbnVtYmVyQ29sdW1ucwogICAgICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGxlZ2VuZC4gIDAgb3IgbnVsbCBmb3IgdW5saW1pdGVkLgogICAgICAgIHRoaXMubnVtYmVyQ29sdW1ucyA9IG51bGw7CiAgICAgICAgLy8gdGhpcyB3aWxsIG92ZXJyaWRlIHRoZSBwbGFjZW1lbnQgb3B0aW9uIG9uIHRoZSBMZWdlbmQgb2JqZWN0CiAgICAgICAgdGhpcy5wbGFjZW1lbnQgPSAib3V0c2lkZSI7CiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBsZWdlbmQKICAgICQuanFwbG90Lk1la2tvTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgbGVnZW5kID0gdGhpczsKICAgICAgICBpZiAodGhpcy5zaG93KSB7CiAgICAgICAgICAgIHZhciBzZXJpZXMgPSB0aGlzLl9zZXJpZXM7CiAgICAgICAgICAgIHZhciBzcyA9ICdwb3NpdGlvbjphYnNvbHV0ZTsnOwogICAgICAgICAgICBzcyArPSAodGhpcy5iYWNrZ3JvdW5kKSA/ICdiYWNrZ3JvdW5kOicrdGhpcy5iYWNrZ3JvdW5kKyc7JyA6ICcnOwogICAgICAgICAgICBzcyArPSAodGhpcy5ib3JkZXIpID8gJ2JvcmRlcjonK3RoaXMuYm9yZGVyKyc7JyA6ICcnOwogICAgICAgICAgICBzcyArPSAodGhpcy5mb250U2l6ZSkgPyAnZm9udC1zaXplOicrdGhpcy5mb250U2l6ZSsnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMuZm9udEZhbWlseSkgPyAnZm9udC1mYW1pbHk6Jyt0aGlzLmZvbnRGYW1pbHkrJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLnRleHRDb2xvcikgPyAnY29sb3I6Jyt0aGlzLnRleHRDb2xvcisnOycgOiAnJzsKICAgICAgICAgICAgdGhpcy5fZWxlbSA9ICQoJzx0YWJsZSBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCIgc3R5bGU9Iicrc3MrJyI+PC90YWJsZT4nKTsKICAgICAgICAgICAgLy8gTWVra28gY2hhcnRzICBsZWdlbmRzIGRvbid0IGdvIGJ5IG51bWJlciBvZiBzZXJpZXMsIGJ1dCBieSBudW1iZXIgb2YgZGF0YSBwb2ludHMKICAgICAgICAgICAgLy8gaW4gdGhlIHNlcmllcy4gIFJlZmFjdG9yIHRoaW5ncyBoZXJlIGZvciB0aGF0LgogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBhZCA9IGZhbHNlLCAKICAgICAgICAgICAgICAgIHJldmVyc2UgPSB0cnVlLCAgICAvLyBtZWtrbyBjaGFydHMgYXJlIGFsd2F5cyBzdGFja2VkLCBzbyByZXZlcnNlCiAgICAgICAgICAgICAgICBuciwgbmM7CiAgICAgICAgICAgIHZhciBzID0gc2VyaWVzWzBdOwogICAgICAgICAgICB2YXIgY29sb3JHZW5lcmF0b3IgPSBuZXcgJC5qcXBsb3QuQ29sb3JHZW5lcmF0b3Iocy5zZXJpZXNDb2xvcnMpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHMuc2hvdykgewogICAgICAgICAgICAgICAgdmFyIHBkID0gcy5kYXRhOwogICAgICAgICAgICAgICAgaWYgKHRoaXMubnVtYmVyUm93cykgewogICAgICAgICAgICAgICAgICAgIG5yID0gdGhpcy5udW1iZXJSb3dzOwogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5udW1iZXJDb2x1bW5zKXsKICAgICAgICAgICAgICAgICAgICAgICAgbmMgPSBNYXRoLmNlaWwocGQubGVuZ3RoL25yKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgbmMgPSB0aGlzLm51bWJlckNvbHVtbnM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5udW1iZXJDb2x1bW5zKSB7CiAgICAgICAgICAgICAgICAgICAgbmMgPSB0aGlzLm51bWJlckNvbHVtbnM7CiAgICAgICAgICAgICAgICAgICAgbnIgPSBNYXRoLmNlaWwocGQubGVuZ3RoL3RoaXMubnVtYmVyQ29sdW1ucyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuciA9IHBkLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBuYyA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBpLCBqLCB0ciwgdGQxLCB0ZDIsIGx0LCBycywgY29sb3I7CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gMDsgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPG5yOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAocmV2ZXJzZSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyID0gJCgnPHRyIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIj48L3RyPicpLnByZXBlbmRUbyh0aGlzLl9lbGVtKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgdHIgPSAkKCc8dHIgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiPjwvdHI+JykuYXBwZW5kVG8odGhpcy5fZWxlbSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqPG5jOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkeCA8IHBkLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbHQgPSB0aGlzLmxhYmVsc1tpZHhdIHx8IHBkW2lkeF1bMF0udG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JHZW5lcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXZlcnNlKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaT4wKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBuciAtMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzID0gKHBhZCkgPyB0aGlzLnJvd1NwYWNpbmcgOiAnMCc7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMSA9ICQoJzx0ZCBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmctdG9wOicrcnMrJzsiPicrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXY+PGRpdiBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2giIHN0eWxlPSJib3JkZXItY29sb3I6Jytjb2xvcisnOyI+PC9kaXY+JysKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+PC90ZD4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMiA9ICQoJzx0ZCBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCIgc3R5bGU9InBhZGRpbmctdG9wOicrcnMrJzsiPjwvdGQ+Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lc2NhcGVIdG1sKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDIudGV4dChsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDIuaHRtbChsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2ZXJzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi5wcmVwZW5kVG8odHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMS5wcmVwZW5kVG8odHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQxLmFwcGVuZFRvKHRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDIuYXBwZW5kVG8odHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZHgrKzsKICAgICAgICAgICAgICAgICAgICB9ICAgCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHIgPSBudWxsOwogICAgICAgICAgICAgICAgdGQxID0gbnVsbDsKICAgICAgICAgICAgICAgIHRkMiA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW07CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5NZWtrb0xlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5wYWNrID0gZnVuY3Rpb24ob2Zmc2V0cykgewogICAgICAgIGlmICh0aGlzLnNob3cpIHsKICAgICAgICAgICAgLy8gZmFrZSBhIGdyaWQgZm9yIHBvc2l0aW9uaW5nCiAgICAgICAgICAgIHZhciBncmlkID0ge190b3A6b2Zmc2V0cy50b3AsIF9sZWZ0Om9mZnNldHMubGVmdCwgX3JpZ2h0Om9mZnNldHMucmlnaHQsIF9ib3R0b206dGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0IC0gb2Zmc2V0cy5ib3R0b219OyAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLnBsYWNlbWVudCA9PSAnaW5zaWRlR3JpZCcpIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvbikgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ253JzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBncmlkLl9sZWZ0ICsgdGhpcy54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IGdyaWQuX3RvcCArIHRoaXMueW9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoJ2xlZnQnLCBhKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoJ3RvcCcsIGIpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSAob2Zmc2V0cy5sZWZ0ICsgKHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIC0gb2Zmc2V0cy5yaWdodCkpLzIgLSB0aGlzLmdldFdpZHRoKCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBncmlkLl90b3AgKyB0aGlzLnlvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCdsZWZ0JywgYSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCd0b3AnLCBiKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmUnOgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IG9mZnNldHMucmlnaHQgKyB0aGlzLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gZ3JpZC5fdG9wICsgdGhpcy55b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6YSwgdG9wOmJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gb2Zmc2V0cy5yaWdodCArIHRoaXMueG9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSAob2Zmc2V0cy50b3AgKyAodGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0IC0gb2Zmc2V0cy5ib3R0b20pKS8yIC0gdGhpcy5nZXRIZWlnaHQoKS8yOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6YSwgdG9wOmJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2UnOgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IG9mZnNldHMucmlnaHQgKyB0aGlzLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gb2Zmc2V0cy5ib3R0b20gKyB0aGlzLnlvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtyaWdodDphLCBib3R0b206Yn0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSAob2Zmc2V0cy5sZWZ0ICsgKHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIC0gb2Zmc2V0cy5yaWdodCkpLzIgLSB0aGlzLmdldFdpZHRoKCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBvZmZzZXRzLmJvdHRvbSArIHRoaXMueW9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe2xlZnQ6YSwgYm90dG9tOmJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3cnOgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGdyaWQuX2xlZnQgKyB0aGlzLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gb2Zmc2V0cy5ib3R0b20gKyB0aGlzLnlvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtsZWZ0OmEsIGJvdHRvbTpifSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3cnOgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGdyaWQuX2xlZnQgKyB0aGlzLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gKG9mZnNldHMudG9wICsgKHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIG9mZnNldHMuYm90dG9tKSkvMiAtIHRoaXMuZ2V0SGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe2xlZnQ6YSwgdG9wOmJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogIC8vIHNhbWUgYXMgJ3NlJwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGdyaWQuX3JpZ2h0IC0gdGhpcy54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IGdyaWQuX2JvdHRvbSArIHRoaXMueW9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe3JpZ2h0OmEsIGJvdHRvbTpifSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMubG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICdudyc6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGggLSBncmlkLl9sZWZ0ICsgdGhpcy54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IGdyaWQuX3RvcCArIHRoaXMueW9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3MoJ3JpZ2h0JywgYSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCd0b3AnLCBiKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gKG9mZnNldHMubGVmdCArICh0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCAtIG9mZnNldHMucmlnaHQpKS8yIC0gdGhpcy5nZXRXaWR0aCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0IC0gZ3JpZC5fdG9wICsgdGhpcy55b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcygnbGVmdCcsIGEpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcygnYm90dG9tJywgYik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ25lJzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCAtIG9mZnNldHMucmlnaHQgKyB0aGlzLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gZ3JpZC5fdG9wICsgdGhpcy55b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7bGVmdDphLCB0b3A6Yn0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdlJzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCAtIG9mZnNldHMucmlnaHQgKyB0aGlzLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gKG9mZnNldHMudG9wICsgKHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIG9mZnNldHMuYm90dG9tKSkvMiAtIHRoaXMuZ2V0SGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe2xlZnQ6YSwgdG9wOmJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2UnOgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoIC0gb2Zmc2V0cy5yaWdodCArIHRoaXMueG9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBvZmZzZXRzLmJvdHRvbSArIHRoaXMueW9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe2xlZnQ6YSwgYm90dG9tOmJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gKG9mZnNldHMubGVmdCArICh0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCAtIG9mZnNldHMucmlnaHQpKS8yIC0gdGhpcy5nZXRXaWR0aCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0IC0gb2Zmc2V0cy5ib3R0b20gKyB0aGlzLnlvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtsZWZ0OmEsIHRvcDpifSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N3JzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCAtIGdyaWQuX2xlZnQgKyB0aGlzLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gb2Zmc2V0cy5ib3R0b20gKyB0aGlzLnlvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtyaWdodDphLCBib3R0b206Yn0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICd3JzoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCAtIGdyaWQuX2xlZnQgKyB0aGlzLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gKG9mZnNldHMudG9wICsgKHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodCAtIG9mZnNldHMuYm90dG9tKSkvMiAtIHRoaXMuZ2V0SGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moe3JpZ2h0OmEsIHRvcDpifSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAvLyBzYW1lIGFzICdzZScKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBncmlkLl9yaWdodCAtIHRoaXMueG9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBncmlkLl9ib3R0b20gKyB0aGlzLnlvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHtyaWdodDphLCBib3R0b206Yn0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gCiAgICB9OwogICAgCiAgICAvLyBzZXR1cCBkZWZhdWx0IHJlbmRlcmVycyBmb3IgYXhlcyBhbmQgbGVnZW5kIHNvIHVzZXIgZG9lc24ndCBoYXZlIHRvCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBwbG90CiAgICBmdW5jdGlvbiBwcmVJbml0KHRhcmdldCwgZGF0YSwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIG9wdGlvbnMuYXhlc0RlZmF1bHRzID0gb3B0aW9ucy5heGVzRGVmYXVsdHMgfHwge307CiAgICAgICAgb3B0aW9ucy5sZWdlbmQgPSBvcHRpb25zLmxlZ2VuZCB8fCB7fTsKICAgICAgICBvcHRpb25zLnNlcmllc0RlZmF1bHRzID0gb3B0aW9ucy5zZXJpZXNEZWZhdWx0cyB8fCB7fTsKICAgICAgICB2YXIgc2V0b3B0cyA9IGZhbHNlOwogICAgICAgIGlmIChvcHRpb25zLnNlcmllc0RlZmF1bHRzLnJlbmRlcmVyID09ICQuanFwbG90Lk1la2tvUmVuZGVyZXIpIHsKICAgICAgICAgICAgc2V0b3B0cyA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuc2VyaWVzKSB7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaSA8IG9wdGlvbnMuc2VyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zZXJpZXNbaV0ucmVuZGVyZXIgPT0gJC5qcXBsb3QuTWVra29SZW5kZXJlcikgewogICAgICAgICAgICAgICAgICAgIHNldG9wdHMgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChzZXRvcHRzKSB7CiAgICAgICAgICAgIG9wdGlvbnMuYXhlc0RlZmF1bHRzLnJlbmRlcmVyID0gJC5qcXBsb3QuTWVra29BeGlzUmVuZGVyZXI7CiAgICAgICAgICAgIG9wdGlvbnMubGVnZW5kLnJlbmRlcmVyID0gJC5qcXBsb3QuTWVra29MZWdlbmRSZW5kZXJlcjsKICAgICAgICAgICAgb3B0aW9ucy5sZWdlbmQucHJlRHJhdyA9IHRydWU7CiAgICAgICAgfQogICAgfQogICAgCiAgICAkLmpxcGxvdC5wcmVJbml0SG9va3MucHVzaChwcmVJbml0KTsKICAgIAp9KShqUXVlcnkpOyAgICAK]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.mekkoRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGIpe2IuanFwbG90Lk1la2tvUmVuZGVyZXI9ZnVuY3Rpb24oKXt0aGlzLnNoYXBlUmVuZGVyZXI9bmV3IGIuanFwbG90LlNoYXBlUmVuZGVyZXIoKTt0aGlzLmJvcmRlckNvbG9yPW51bGw7dGhpcy5zaG93Qm9yZGVycz10cnVlfTtiLmpxcGxvdC5NZWtrb1JlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGMsZSl7dGhpcy5maWxsPWZhbHNlO3RoaXMuZmlsbFJlY3Q9dHJ1ZTt0aGlzLnN0cm9rZVJlY3Q9dHJ1ZTt0aGlzLnNoYWRvdz1mYWxzZTt0aGlzLl94d2lkdGg9MDt0aGlzLl94c3RhcnQ9MDtiLmV4dGVuZCh0cnVlLHRoaXMucmVuZGVyZXIsYyk7dmFyIGQ9e2xpbmVKb2luOiJtaXRlciIsbGluZUNhcDoiYnV0dCIsaXNhcmM6ZmFsc2UsZmlsbFJlY3Q6dGhpcy5maWxsUmVjdCxzdHJva2VSZWN0OnRoaXMuc3Ryb2tlUmVjdH07dGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmluaXQoZCk7ZS5heGVzLngyYXhpcy5fc2VyaWVzLnB1c2godGhpcyk7dGhpcy5fdHlwZT0ibWVra28ifTtiLmpxcGxvdC5NZWtrb1JlbmRlcmVyLnByb3RvdHlwZS5zZXRHcmlkRGF0YT1mdW5jdGlvbihoKXt2YXIgZT10aGlzLl94YXhpcy5zZXJpZXNfdTJwO3ZhciBjPXRoaXMuX3lheGlzLnNlcmllc191MnA7dmFyIGc9dGhpcy5fcGxvdERhdGE7dGhpcy5ncmlkRGF0YT1bXTt0aGlzLl94d2lkdGg9ZSh0aGlzLl9zdW15KS1lKDApO2lmKHRoaXMuaW5kZXg+MCl7dGhpcy5feHN0YXJ0PWguc2VyaWVzW3RoaXMuaW5kZXgtMV0uX3hzdGFydCtoLnNlcmllc1t0aGlzLmluZGV4LTFdLl94d2lkdGh9dmFyIGw9dGhpcy5jYW52YXMuZ2V0SGVpZ2h0KCk7dmFyIGQ9MDt2YXIgazt2YXIgajtmb3IodmFyIGY9MDtmPGcubGVuZ3RoO2YrKyl7aWYoZ1tmXSE9bnVsbCl7ZCs9Z1tmXVsxXTtrPWwtKGQvdGhpcy5fc3VteSpsKTtqPWdbZl1bMV0vdGhpcy5fc3VteSpsO3RoaXMuZ3JpZERhdGEucHVzaChbdGhpcy5feHN0YXJ0LGssdGhpcy5feHdpZHRoLGpdKX19fTtiLmpxcGxvdC5NZWtrb1JlbmRlcmVyLnByb3RvdHlwZS5tYWtlR3JpZERhdGE9ZnVuY3Rpb24oZixnKXt2YXIgZD10aGlzLl94YXhpcy5zZXJpZXNfdTJwO3ZhciBsPXRoaXMuY2FudmFzLmdldEhlaWdodCgpO3ZhciBjPTA7dmFyIGo7dmFyIGg7dmFyIGs9W107Zm9yKHZhciBlPTA7ZTxmLmxlbmd0aDtlKyspe2lmKGZbZV0hPW51bGwpe2MrPWZbZV1bMV07aj1sLShjL3RoaXMuX3N1bXkqbCk7aD1mW2VdWzFdL3RoaXMuX3N1bXkqbDtrLnB1c2goW3RoaXMuX3hzdGFydCxqLHRoaXMuX3h3aWR0aCxoXSl9fXJldHVybiBrfTtiLmpxcGxvdC5NZWtrb1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGMsaCxkKXt2YXIgZTt2YXIgZz0oZCE9dW5kZWZpbmVkKT9kOnt9O3ZhciBmPShnLnNob3dMaW5lIT11bmRlZmluZWQpP2cuc2hvd0xpbmU6dGhpcy5zaG93TGluZTt2YXIgaj1uZXcgYi5qcXBsb3QuQ29sb3JHZW5lcmF0b3IodGhpcy5zZXJpZXNDb2xvcnMpO2Muc2F2ZSgpO2lmKGgubGVuZ3RoKXtpZihmKXtmb3IoZT0wO2U8aC5sZW5ndGg7ZSsrKXtnLmZpbGxTdHlsZT1qLm5leHQoKTtpZih0aGlzLnJlbmRlcmVyLnNob3dCb3JkZXJzKXtnLnN0cm9rZVN0eWxlPXRoaXMucmVuZGVyZXIuYm9yZGVyQ29sb3J9ZWxzZXtnLnN0cm9rZVN0eWxlPWcuZmlsbFN0eWxlfXRoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KGMsaFtlXSxnKX19fWMucmVzdG9yZSgpfTtiLmpxcGxvdC5NZWtrb1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3U2hhZG93PWZ1bmN0aW9uKGMsZSxkKXt9O2IuanFwbG90Lk1la2tvTGVnZW5kUmVuZGVyZXI9ZnVuY3Rpb24oKXt9O2IuanFwbG90Lk1la2tvTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYyl7dGhpcy5udW1iZXJSb3dzPW51bGw7dGhpcy5udW1iZXJDb2x1bW5zPW51bGw7dGhpcy5wbGFjZW1lbnQ9Im91dHNpZGUiO2IuZXh0ZW5kKHRydWUsdGhpcyxjKX07Yi5qcXBsb3QuTWVra29MZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe3ZhciBmPXRoaXM7aWYodGhpcy5zaG93KXt2YXIgbz10aGlzLl9zZXJpZXM7dmFyIHI9InBvc2l0aW9uOmFic29sdXRlOyI7cis9KHRoaXMuYmFja2dyb3VuZCk/ImJhY2tncm91bmQ6Iit0aGlzLmJhY2tncm91bmQrIjsiOiIiO3IrPSh0aGlzLmJvcmRlcik/ImJvcmRlcjoiK3RoaXMuYm9yZGVyKyI7IjoiIjtyKz0odGhpcy5mb250U2l6ZSk/ImZvbnQtc2l6ZToiK3RoaXMuZm9udFNpemUrIjsiOiIiO3IrPSh0aGlzLmZvbnRGYW1pbHkpPyJmb250LWZhbWlseToiK3RoaXMuZm9udEZhbWlseSsiOyI6IiI7cis9KHRoaXMudGV4dENvbG9yKT8iY29sb3I6Iit0aGlzLnRleHRDb2xvcisiOyI6IiI7dGhpcy5fZWxlbT1iKCc8dGFibGUgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiIHN0eWxlPSInK3IrJyI+PC90YWJsZT4nKTt2YXIgdz1mYWxzZSxuPXRydWUsYyxsO3ZhciBwPW9bMF07dmFyIGQ9bmV3IGIuanFwbG90LkNvbG9yR2VuZXJhdG9yKHAuc2VyaWVzQ29sb3JzKTtpZihwLnNob3cpe3ZhciB4PXAuZGF0YTtpZih0aGlzLm51bWJlclJvd3Mpe2M9dGhpcy5udW1iZXJSb3dzO2lmKCF0aGlzLm51bWJlckNvbHVtbnMpe2w9TWF0aC5jZWlsKHgubGVuZ3RoL2MpfWVsc2V7bD10aGlzLm51bWJlckNvbHVtbnN9fWVsc2V7aWYodGhpcy5udW1iZXJDb2x1bW5zKXtsPXRoaXMubnVtYmVyQ29sdW1ucztjPU1hdGguY2VpbCh4Lmxlbmd0aC90aGlzLm51bWJlckNvbHVtbnMpfWVsc2V7Yz14Lmxlbmd0aDtsPTF9fXZhciB2LHUsZSxoLGcsayxtLHQ7dmFyIHE9MDtmb3Iodj0wO3Y8Yzt2Kyspe2lmKG4pe2U9YignPHRyIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIj48L3RyPicpLnByZXBlbmRUbyh0aGlzLl9lbGVtKX1lbHNle2U9YignPHRyIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIj48L3RyPicpLmFwcGVuZFRvKHRoaXMuX2VsZW0pfWZvcih1PTA7dTxsO3UrKyl7aWYocTx4Lmxlbmd0aCl7az10aGlzLmxhYmVsc1txXXx8eFtxXVswXS50b1N0cmluZygpO3Q9ZC5uZXh0KCk7aWYoIW4pe2lmKHY+MCl7dz10cnVlfWVsc2V7dz1mYWxzZX19ZWxzZXtpZih2PT1jLTEpe3c9ZmFsc2V9ZWxzZXt3PXRydWV9fW09KHcpP3RoaXMucm93U3BhY2luZzoiMCI7aD1iKCc8dGQgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nLXRvcDonK20rJzsiPjxkaXY+PGRpdiBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2giIHN0eWxlPSJib3JkZXItY29sb3I6Jyt0Kyc7Ij48L2Rpdj48L2Rpdj48L3RkPicpO2c9YignPHRkIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIiBzdHlsZT0icGFkZGluZy10b3A6JyttKyc7Ij48L3RkPicpO2lmKHRoaXMuZXNjYXBlSHRtbCl7Zy50ZXh0KGspfWVsc2V7Zy5odG1sKGspfWlmKG4pe2cucHJlcGVuZFRvKGUpO2gucHJlcGVuZFRvKGUpfWVsc2V7aC5hcHBlbmRUbyhlKTtnLmFwcGVuZFRvKGUpfXc9dHJ1ZX1xKyt9fWU9bnVsbDtoPW51bGw7Zz1udWxsfX1yZXR1cm4gdGhpcy5fZWxlbX07Yi5qcXBsb3QuTWVra29MZWdlbmRSZW5kZXJlci5wcm90b3R5cGUucGFjaz1mdW5jdGlvbihmKXtpZih0aGlzLnNob3cpe3ZhciBlPXtfdG9wOmYudG9wLF9sZWZ0OmYubGVmdCxfcmlnaHQ6Zi5yaWdodCxfYm90dG9tOnRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodC1mLmJvdHRvbX07aWYodGhpcy5wbGFjZW1lbnQ9PSJpbnNpZGVHcmlkIil7c3dpdGNoKHRoaXMubG9jYXRpb24pe2Nhc2UibnciOnZhciBkPWUuX2xlZnQrdGhpcy54b2Zmc2V0O3ZhciBjPWUuX3RvcCt0aGlzLnlvZmZzZXQ7dGhpcy5fZWxlbS5jc3MoImxlZnQiLGQpO3RoaXMuX2VsZW0uY3NzKCJ0b3AiLGMpO2JyZWFrO2Nhc2UibiI6dmFyIGQ9KGYubGVmdCsodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgtZi5yaWdodCkpLzItdGhpcy5nZXRXaWR0aCgpLzI7dmFyIGM9ZS5fdG9wK3RoaXMueW9mZnNldDt0aGlzLl9lbGVtLmNzcygibGVmdCIsZCk7dGhpcy5fZWxlbS5jc3MoInRvcCIsYyk7YnJlYWs7Y2FzZSJuZSI6dmFyIGQ9Zi5yaWdodCt0aGlzLnhvZmZzZXQ7dmFyIGM9ZS5fdG9wK3RoaXMueW9mZnNldDt0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6ZCx0b3A6Y30pO2JyZWFrO2Nhc2UiZSI6dmFyIGQ9Zi5yaWdodCt0aGlzLnhvZmZzZXQ7dmFyIGM9KGYudG9wKyh0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQtZi5ib3R0b20pKS8yLXRoaXMuZ2V0SGVpZ2h0KCkvMjt0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6ZCx0b3A6Y30pO2JyZWFrO2Nhc2Uic2UiOnZhciBkPWYucmlnaHQrdGhpcy54b2Zmc2V0O3ZhciBjPWYuYm90dG9tK3RoaXMueW9mZnNldDt0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6ZCxib3R0b206Y30pO2JyZWFrO2Nhc2UicyI6dmFyIGQ9KGYubGVmdCsodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgtZi5yaWdodCkpLzItdGhpcy5nZXRXaWR0aCgpLzI7dmFyIGM9Zi5ib3R0b20rdGhpcy55b2Zmc2V0O3RoaXMuX2VsZW0uY3NzKHtsZWZ0OmQsYm90dG9tOmN9KTticmVhaztjYXNlInN3Ijp2YXIgZD1lLl9sZWZ0K3RoaXMueG9mZnNldDt2YXIgYz1mLmJvdHRvbSt0aGlzLnlvZmZzZXQ7dGhpcy5fZWxlbS5jc3Moe2xlZnQ6ZCxib3R0b206Y30pO2JyZWFrO2Nhc2UidyI6dmFyIGQ9ZS5fbGVmdCt0aGlzLnhvZmZzZXQ7dmFyIGM9KGYudG9wKyh0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQtZi5ib3R0b20pKS8yLXRoaXMuZ2V0SGVpZ2h0KCkvMjt0aGlzLl9lbGVtLmNzcyh7bGVmdDpkLHRvcDpjfSk7YnJlYWs7ZGVmYXVsdDp2YXIgZD1lLl9yaWdodC10aGlzLnhvZmZzZXQ7dmFyIGM9ZS5fYm90dG9tK3RoaXMueW9mZnNldDt0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6ZCxib3R0b206Y30pO2JyZWFrfX1lbHNle3N3aXRjaCh0aGlzLmxvY2F0aW9uKXtjYXNlIm53Ijp2YXIgZD10aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC1lLl9sZWZ0K3RoaXMueG9mZnNldDt2YXIgYz1lLl90b3ArdGhpcy55b2Zmc2V0O3RoaXMuX2VsZW0uY3NzKCJyaWdodCIsZCk7dGhpcy5fZWxlbS5jc3MoInRvcCIsYyk7YnJlYWs7Y2FzZSJuIjp2YXIgZD0oZi5sZWZ0Kyh0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC1mLnJpZ2h0KSkvMi10aGlzLmdldFdpZHRoKCkvMjt2YXIgYz10aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQtZS5fdG9wK3RoaXMueW9mZnNldDt0aGlzLl9lbGVtLmNzcygibGVmdCIsZCk7dGhpcy5fZWxlbS5jc3MoImJvdHRvbSIsYyk7YnJlYWs7Y2FzZSJuZSI6dmFyIGQ9dGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgtZi5yaWdodCt0aGlzLnhvZmZzZXQ7dmFyIGM9ZS5fdG9wK3RoaXMueW9mZnNldDt0aGlzLl9lbGVtLmNzcyh7bGVmdDpkLHRvcDpjfSk7YnJlYWs7Y2FzZSJlIjp2YXIgZD10aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC1mLnJpZ2h0K3RoaXMueG9mZnNldDt2YXIgYz0oZi50b3ArKHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodC1mLmJvdHRvbSkpLzItdGhpcy5nZXRIZWlnaHQoKS8yO3RoaXMuX2VsZW0uY3NzKHtsZWZ0OmQsdG9wOmN9KTticmVhaztjYXNlInNlIjp2YXIgZD10aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC1mLnJpZ2h0K3RoaXMueG9mZnNldDt2YXIgYz1mLmJvdHRvbSt0aGlzLnlvZmZzZXQ7dGhpcy5fZWxlbS5jc3Moe2xlZnQ6ZCxib3R0b206Y30pO2JyZWFrO2Nhc2UicyI6dmFyIGQ9KGYubGVmdCsodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgtZi5yaWdodCkpLzItdGhpcy5nZXRXaWR0aCgpLzI7dmFyIGM9dGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0LWYuYm90dG9tK3RoaXMueW9mZnNldDt0aGlzLl9lbGVtLmNzcyh7bGVmdDpkLHRvcDpjfSk7YnJlYWs7Y2FzZSJzdyI6dmFyIGQ9dGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgtZS5fbGVmdCt0aGlzLnhvZmZzZXQ7dmFyIGM9Zi5ib3R0b20rdGhpcy55b2Zmc2V0O3RoaXMuX2VsZW0uY3NzKHtyaWdodDpkLGJvdHRvbTpjfSk7YnJlYWs7Y2FzZSJ3Ijp2YXIgZD10aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC1lLl9sZWZ0K3RoaXMueG9mZnNldDt2YXIgYz0oZi50b3ArKHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodC1mLmJvdHRvbSkpLzItdGhpcy5nZXRIZWlnaHQoKS8yO3RoaXMuX2VsZW0uY3NzKHtyaWdodDpkLHRvcDpjfSk7YnJlYWs7ZGVmYXVsdDp2YXIgZD1lLl9yaWdodC10aGlzLnhvZmZzZXQ7dmFyIGM9ZS5fYm90dG9tK3RoaXMueW9mZnNldDt0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6ZCxib3R0b206Y30pO2JyZWFrfX19fTtmdW5jdGlvbiBhKGcsZixkKXtkPWR8fHt9O2QuYXhlc0RlZmF1bHRzPWQuYXhlc0RlZmF1bHRzfHx7fTtkLmxlZ2VuZD1kLmxlZ2VuZHx8e307ZC5zZXJpZXNEZWZhdWx0cz1kLnNlcmllc0RlZmF1bHRzfHx7fTt2YXIgYz1mYWxzZTtpZihkLnNlcmllc0RlZmF1bHRzLnJlbmRlcmVyPT1iLmpxcGxvdC5NZWtrb1JlbmRlcmVyKXtjPXRydWV9ZWxzZXtpZihkLnNlcmllcyl7Zm9yKHZhciBlPTA7ZTxkLnNlcmllcy5sZW5ndGg7ZSsrKXtpZihkLnNlcmllc1tlXS5yZW5kZXJlcj09Yi5qcXBsb3QuTWVra29SZW5kZXJlcil7Yz10cnVlfX19fWlmKGMpe2QuYXhlc0RlZmF1bHRzLnJlbmRlcmVyPWIuanFwbG90Lk1la2tvQXhpc1JlbmRlcmVyO2QubGVnZW5kLnJlbmRlcmVyPWIuanFwbG90Lk1la2tvTGVnZW5kUmVuZGVyZXI7ZC5sZWdlbmQucHJlRHJhdz10cnVlfX1iLmpxcGxvdC5wcmVJbml0SG9va3MucHVzaChhKX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.meterGaugeRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLyoqCiAgICAgKiBDbGFzczogJC5qcXBsb3QuTWV0ZXJHYXVnZVJlbmRlcmVyCiAgICAgKiBQbHVnaW4gcmVuZGVyZXIgdG8gZHJhdyBhIG1ldGVyIGdhdWdlIGNoYXJ0LgogICAgICogCiAgICAgKiBEYXRhIGNvbnNpc3RzIG9mIGEgc2luZ2xlIHNlcmllcyB3aXRoIDEgZGF0YSBwb2ludCB0byBwb3NpdGlvbiB0aGUgZ2F1Z2UgbmVlZGxlLgogICAgICogCiAgICAgKiBUbyB1c2UgdGhpcyByZW5kZXJlciwgeW91IG5lZWQgdG8gaW5jbHVkZSB0aGUgCiAgICAgKiBtZXRlciBnYXVnZSByZW5kZXJlciBwbHVnaW4sIGZvciBleGFtcGxlOgogICAgICogCiAgICAgKiA+IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InBsdWdpbnMvanFwbG90Lm1ldGVyR2F1Z2VSZW5kZXJlci5qcyI+PC9zY3JpcHQ+CiAgICAgKiAKICAgICAqIFByb3BlcnRpZXMgZGVzY3JpYmVkIGhlcmUgYXJlIHBhc3NlZCBpbnRvIHRoZSAkLmpxcGxvdCBmdW5jdGlvbgogICAgICogYXMgb3B0aW9ucyBvbiB0aGUgc2VyaWVzIHJlbmRlcmVyLiAgRm9yIGV4YW1wbGU6CiAgICAgKiAKICAgICAqID4gcGxvdDAgPSAkLmpxcGxvdCgnY2hhcnQwJyxbWzE4XV0sewogICAgICogPiAgICAgdGl0bGU6ICdOZXR3b3JrIFNwZWVkJywKICAgICAqID4gICAgIHNlcmllc0RlZmF1bHRzOiB7CiAgICAgKiA+ICAgICAgICAgcmVuZGVyZXI6ICQuanFwbG90Lk1ldGVyR2F1Z2VSZW5kZXJlciwKICAgICAqID4gICAgICAgICByZW5kZXJlck9wdGlvbnM6IHsKICAgICAqID4gICAgICAgICAgICAgbGFiZWw6ICdNQi9zJwogICAgICogPiAgICAgICAgIH0KICAgICAqID4gICAgIH0KICAgICAqID4gfSk7CiAgICAgKiAKICAgICAqIEEgbWV0ZXJHYXVnZSBwbG90IGRvZXMgbm90IHN1cHBvcnQgZXZlbnRzLgogICAgICovCiAgICAkLmpxcGxvdC5NZXRlckdhdWdlUmVuZGVyZXIgPSBmdW5jdGlvbigpewogICAgICAgICQuanFwbG90LkxpbmVSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuTWV0ZXJHYXVnZVJlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5MaW5lUmVuZGVyZXIoKTsKICAgICQuanFwbG90Lk1ldGVyR2F1Z2VSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5NZXRlckdhdWdlUmVuZGVyZXI7CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIGEgc2VyaWVzCiAgICAkLmpxcGxvdC5NZXRlckdhdWdlUmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAvLwogICAgICAgIC8vIHByb3A6IGRpYW1ldGVyCiAgICAgICAgLy8gT3V0ZXIgZGlhbWV0ZXIgb2YgdGhlIG1ldGVyR2F1Z2UsIGF1dG8gY29tcHV0ZWQgYnkgZGVmYXVsdAogICAgICAgIHRoaXMuZGlhbWV0ZXIgPSBudWxsOwogICAgICAgIC8vIHByb3A6IHBhZGRpbmcKICAgICAgICAvLyBwYWRkaW5nIGJldHdlZW4gdGhlIG1ldGVyR2F1Z2UgYW5kIHBsb3QgZWRnZXMsIGF1dG8KICAgICAgICAvLyBjYWxjdWxhdGVkIGJ5IGRlZmF1bHQuCiAgICAgICAgdGhpcy5wYWRkaW5nID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBzaGFkb3dPZmZzZXQKICAgICAgICAvLyBvZmZzZXQgb2YgdGhlIHNoYWRvdyBmcm9tIHRoZSBnYXVnZSByaW5nIGFuZCBvZmZzZXQgb2YgCiAgICAgICAgLy8gZWFjaCBzdWNjZXNpdmUgc3Ryb2tlIG9mIHRoZSBzaGFkb3cgZnJvbSB0aGUgbGFzdC4KICAgICAgICB0aGlzLnNoYWRvd09mZnNldCA9IDI7CiAgICAgICAgLy8gcHJvcDogc2hhZG93QWxwaGEKICAgICAgICAvLyB0cmFuc3BhcmVuY3kgb2YgdGhlIHNoYWRvdyAoMCA9IHRyYW5zcGFyZW50LCAxID0gb3BhcXVlKQogICAgICAgIHRoaXMuc2hhZG93QWxwaGEgPSAwLjA3OwogICAgICAgIC8vIHByb3A6IHNoYWRvd0RlcHRoCiAgICAgICAgLy8gbnVtYmVyIG9mIHN0cm9rZXMgdG8gYXBwbHkgdG8gdGhlIHNoYWRvdywgCiAgICAgICAgLy8gZWFjaCBzdHJva2Ugb2Zmc2V0IHNoYWRvd09mZnNldCBmcm9tIHRoZSBsYXN0LgogICAgICAgIHRoaXMuc2hhZG93RGVwdGggPSA0OwogICAgICAgIC8vIHByb3A6IGJhY2tncm91bmQKICAgICAgICAvLyBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBpbnNpZGUgb2YgdGhlIGdhdWdlLgogICAgICAgIHRoaXMuYmFja2dyb3VuZCA9ICIjZWZlZmVmIjsKICAgICAgICAvLyBwcm9wOiByaW5nQ29sb3IKICAgICAgICAvLyBjb2xvciBvZiB0aGUgb3V0ZXIgcmluZywgaHViLCBhbmQgbmVlZGxlIG9mIHRoZSBnYXVnZS4KICAgICAgICB0aGlzLnJpbmdDb2xvciA9ICIjQkJDNkQwIjsKICAgICAgICAvLyBuZWVkbGUgY29sb3Igbm90IGltcGxlbWVudGVkIHlldC4KICAgICAgICB0aGlzLm5lZWRsZUNvbG9yID0gIiNDM0QzRTUiOwogICAgICAgIC8vIHByb3A6IHRpY2tDb2xvcgogICAgICAgIC8vIGNvbG9yIG9mIHRoZSB0aWNrIG1hcmtzIGFyb3VuZCB0aGUgZ2F1Z2UuCiAgICAgICAgdGhpcy50aWNrQ29sb3IgPSAiIzk4OTg5OCI7CiAgICAgICAgLy8gcHJvcDogcmluZ1dpZHRoCiAgICAgICAgLy8gd2lkdGggb2YgdGhlIHJpbmcgYXJvdW5kIHRoZSBnYXVnZS4gIEF1dG8gY29tcHV0ZWQgYnkgZGVmYXVsdC4KICAgICAgICB0aGlzLnJpbmdXaWR0aCA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogbWluCiAgICAgICAgLy8gTWluaW11bSB2YWx1ZSBvbiB0aGUgZ2F1Z2UuICBBdXRvIGNvbXB1dGVkIGJ5IGRlZmF1bHQKICAgICAgICB0aGlzLm1pbjsKICAgICAgICAvLyBwcm9wOiBtYXgKICAgICAgICAvLyBNYXhpbXVtIHZhbHVlIG9uIHRoZSBnYXVnZS4gQXV0byBjb21wdXRlZCBieSBkZWZhdWx0CiAgICAgICAgdGhpcy5tYXg7CiAgICAgICAgLy8gcHJvcDogdGlja3MKICAgICAgICAvLyBBcnJheSBvZiB0aWNrIHZhbHVlcy4gQXV0byBjb21wdXRlZCBieSBkZWZhdWx0LgogICAgICAgIHRoaXMudGlja3MgPSBbXTsKICAgICAgICAvLyBwcm9wOiBzaG93VGlja3MKICAgICAgICAvLyB0cnVlIHRvIHNob3cgdGlja3MgYXJvdW5kIGdhdWdlLgogICAgICAgIHRoaXMuc2hvd1RpY2tzID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBzaG93VGlja0xhYmVscwogICAgICAgIC8vIHRydWUgdG8gc2hvdyB0aWNrIGxhYmVscyBuZXh0IHRvIHRpY2tzLgogICAgICAgIHRoaXMuc2hvd1RpY2tMYWJlbHMgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IGxhYmVsCiAgICAgICAgLy8gQSBnYXVnZSBsYWJlbCBsaWtlICdrcGgnIG9yICdWb2x0cycKICAgICAgICB0aGlzLmxhYmVsID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBsYWJlbEhlaWdodEFkanVzdAogICAgICAgIC8vIE51bWJlciBvZiBQaXhlbHMgdG8gb2Zmc2V0IHRoZSBsYWJlbCB1cCAoLSkgb3IgZG93biAoKykgZnJvbSBpdHMgZGVmYXVsdCBwb3NpdGlvbi4KICAgICAgICB0aGlzLmxhYmVsSGVpZ2h0QWRqdXN0ID0gMDsKICAgICAgICAvLyBwcm9wOiBsYWJlbFBvc2l0aW9uCiAgICAgICAgLy8gV2hlcmUgdG8gcG9zaXRpb24gdGhlIGxhYmVsLCBlaXRoZXIgJ2luc2lkZScgb3IgJ2JvdHRvbScuCiAgICAgICAgdGhpcy5sYWJlbFBvc2l0aW9uID0gJ2luc2lkZSc7CiAgICAgICAgLy8gcHJvcDogaW50ZXJ2YWxzCiAgICAgICAgLy8gQXJyYXkgb2YgcmFuZ2VzIHRvIGJlIGRyYXduIGFyb3VuZCB0aGUgZ2F1Z2UuCiAgICAgICAgLy8gQXJyYXkgb2YgZm9ybToKICAgICAgICAvLyA+IFt2YWx1ZTEsIHZhbHVlMiwgLi4uXQogICAgICAgIC8vIGluZGljYXRpbmcgdGhlIHZhbHVlcyBmb3IgdGhlIGZpcnN0LCBzZWNvbmQsIC4uLiBpbnRlcnZhbHMuCiAgICAgICAgdGhpcy5pbnRlcnZhbHMgPSBbXTsKICAgICAgICAvLyBwcm9wOiBpbnRlcnZhbENvbG9ycwogICAgICAgIC8vIEFycmF5IG9mIGNvbG9ycyB0byB1c2UgZm9yIHRoZSBpbnRlcnZhbHMuCiAgICAgICAgdGhpcy5pbnRlcnZhbENvbG9ycyA9IFsgIiM0YmIyYzUiLCAiI0VBQTIyOCIsICIjYzViNDdmIiwgIiM1Nzk1NzUiLCAiIzgzOTU1NyIsICIjOTU4YzEyIiwgIiM5NTM1NzkiLCAiIzRiNWRlNCIsICIjZDhiODNmIiwgIiNmZjU4MDAiLCAiIzAwODVjYyIsICIjYzc0N2EzIiwgIiNjZGRmNTQiLCAiI0ZCRDE3OCIsICIjMjZCNEUzIiwgIiNiZDcwYzciXTsKICAgICAgICAvLyBwcm9wOiBpbnRlcnZhbElubmVyUmFkaXVzCiAgICAgICAgLy8gUmFkaXVzIG9mIHRoZSBpbm5lciBjaXJjbGUgb2YgdGhlIGludGVydmFsIHJpbmcuCiAgICAgICAgdGhpcy5pbnRlcnZhbElubmVyUmFkaXVzID0gIG51bGw7CiAgICAgICAgLy8gcHJvcDogaW50ZXJ2YWxPdXRlclJhZGl1cwogICAgICAgIC8vIFJhZGl1cyBvZiB0aGUgb3V0ZXIgY2lyY2xlIG9mIHRoZSBpbnRlcnZhbCByaW5nLgogICAgICAgIHRoaXMuaW50ZXJ2YWxPdXRlclJhZGl1cyA9IG51bGw7CiAgICAgICAgdGhpcy50aWNrUmVuZGVyZXIgPSAkLmpxcGxvdC5NZXRlckdhdWdlVGlja1JlbmRlcmVyOwogICAgICAgIC8vIHRpY2tzIHNwYWNlZCBldmVyeSAxLCAyLCAyLjUsIDUsIDEwLCAyMCwgLjEsIC4yLCAuMjUsIC41LCBldGMuCiAgICAgICAgdGhpcy50aWNrUG9zaXRpb25zID0gWzEsIDIsIDIuNSwgNSwgMTBdOwogICAgICAgIC8vIHByb3A6IHRpY2tTcGFjaW5nCiAgICAgICAgLy8gRGVncmVlcyBiZXR3ZWVuIHRpY2tzLiAgVGhpcyBpcyBhIHRhcmdldCBudW1iZXIsIGlmIAogICAgICAgIC8vIGluY29tcGF0aWJsZSBzcGFuIGFuZCB0aWNrcyBhcmUgc3VwcGxpZWQsIGEgc3VpdGFibGUKICAgICAgICAvLyBzcGFjaW5nIGNsb3NlIHRvIHRoaXMgdmFsdWUgd2lsbCBiZSBjb21wdXRlZC4KICAgICAgICB0aGlzLnRpY2tTcGFjaW5nID0gMzA7CiAgICAgICAgdGhpcy5udW1iZXJNaW5vclRpY2tzID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBodWJSYWRpdXMKICAgICAgICAvLyBSYWRpdXMgb2YgdGhlIGh1YiBhdCB0aGUgYm90dG9tIGNlbnRlciBvZiBnYXVnZSB3aGljaCB0aGUgbmVlZGxlIGF0dGFjaGVzIHRvLgogICAgICAgIC8vIEF1dG8gY29tcHV0ZWQgYnkgZGVmYXVsdAogICAgICAgIHRoaXMuaHViUmFkaXVzID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiB0aWNrUGFkZGluZwogICAgICAgIC8vIHBhZGRpbmcgb2YgdGhlIHRpY2sgbWFya3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIHRoZSB0aWNrIGxhYmVscyB0byBtYXJrcy4KICAgICAgICAvLyBBdXRvIGNvbXB1dGVkIGJ5IGRlZmF1bHQuCiAgICAgICAgdGhpcy50aWNrUGFkZGluZyA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogbmVlZGxlVGhpY2tuZXNzCiAgICAgICAgLy8gTWF4aW11bSB0aGlja25lc3MgdGhlIG5lZWRsZS4gIEF1dG8gY29tcHV0ZWQgYnkgZGVmYXVsdC4KICAgICAgICB0aGlzLm5lZWRsZVRoaWNrbmVzcyA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogbmVlZGxlUGFkCiAgICAgICAgLy8gUGFkZGluZyBiZXR3ZWVuIG5lZWRsZSBhbmQgaW5uZXIgZWRnZSBvZiB0aGUgcmluZyB3aGVuIHRoZSBuZWVkbGUgaXMgYXQgdGhlIG1pbiBvciBtYXggZ2F1Z2UgdmFsdWUuCiAgICAgICAgdGhpcy5uZWVkbGVQYWQgPSA2OwogICAgICAgIC8vIHByb3A6IHBlZ05lZWRsZQogICAgICAgIC8vIFRydWUgd2lsbCBzdG9wIG5lZWRsZSBqdXN0IGJlbG93L2Fib3ZlIHRoZSAgbWluL21heCB2YWx1ZXMgaWYgZGF0YSBpcyBiZWxvdy9hYm92ZSBtaW4vbWF4LAogICAgICAgIC8vIGFzIGlmIHRoZSBtZXRlciBpcyAicGVnZ2VkIi4KICAgICAgICB0aGlzLnBlZ05lZWRsZSA9IHRydWU7CiAgICAgICAgdGhpcy5fdHlwZSA9ICdtZXRlckdhdWdlJzsKICAgICAgICAKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgICAgICB0aGlzLnR5cGUgPSBudWxsOwogICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSBudWxsOwogICAgICAgIHRoaXMudGlja0ludGVydmFsID0gbnVsbDsKICAgICAgICAvLyBzcGFuLCB0aGUgc3dlZXAgKGluIGRlZ3JlZXMpIGZyb20gbWluIHRvIG1heC4gIFRoaXMgZ2F1Z2UgaXMgCiAgICAgICAgLy8gYSBzZW1pLWNpcmNsZS4KICAgICAgICB0aGlzLnNwYW4gPSAxODA7CiAgICAgICAgLy8gZ2V0IHJpZCBvZiB0aGlzIG5vbnNlbnNlCiAgICAgICAgLy8gdGhpcy5pbm5lclNwYW4gPSB0aGlzLnNwYW47CiAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAnY2lyY3VsYXInKSB7CiAgICAgICAgICAgIHRoaXMuc2VtaUNpcmN1bGFyID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHRoaXMudHlwZSAhPSAnY2lyY3VsYXInKSB7CiAgICAgICAgICAgIHRoaXMuc2VtaUNpcmN1bGFyID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc2VtaUNpcmN1bGFyID0gKHRoaXMuc3BhbiA8PSAxODApID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIH0KICAgICAgICB0aGlzLl90aWNrUG9pbnRzID0gW107CiAgICAgICAgLy8gcmVmZXJlbmNlIHRvIGxhYmVsIGVsZW1lbnQuCiAgICAgICAgdGhpcy5fbGFiZWxFbGVtID0gbnVsbDsKICAgICAgICAKICAgICAgICAvLyBzdGFydCB0aGUgZ2F1Z2UgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3BhbgogICAgICAgIHRoaXMuc3RhcnRBbmdsZSA9ICg5MCArICgzNjAgLSB0aGlzLnNwYW4pLzIpICogTWF0aC5QSS8xODA7CiAgICAgICAgdGhpcy5lbmRBbmdsZSA9ICg5MCAtICgzNjAgLSB0aGlzLnNwYW4pLzIpICogTWF0aC5QSS8xODA7CiAgICAgICAgCiAgICAgICAgdGhpcy5zZXRtaW4gPSAhISh0aGlzLm1pbiA9PSBudWxsKTsKICAgICAgICB0aGlzLnNldG1heCA9ICEhKHRoaXMubWF4ID09IG51bGwpOwogICAgICAgIAogICAgICAgIC8vIGlmIGdpdmVuIGludGVydmFscyBhbmQgaXMgYW4gYXJyYXkgb2YgdmFsdWVzLCBjcmVhdGUgbGFiZWxzIGFuZCBjb2xvcnMuCiAgICAgICAgaWYgKHRoaXMuaW50ZXJ2YWxzLmxlbmd0aCkgewogICAgICAgICAgICBpZiAodGhpcy5pbnRlcnZhbHNbMF0ubGVuZ3RoID09IG51bGwgfHwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLmludGVydmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzW2ldID0gW3RoaXMuaW50ZXJ2YWxzW2ldLCB0aGlzLmludGVydmFsc1tpXSwgdGhpcy5pbnRlcnZhbENvbG9yc1tpXV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pbnRlcnZhbHNbMF0ubGVuZ3RoID09IDIpIHsKICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbHNbaV0gPSBbdGhpcy5pbnRlcnZhbHNbaV1bMF0sIHRoaXMuaW50ZXJ2YWxzW2ldWzFdLCB0aGlzLmludGVydmFsQ29sb3JzW2ldXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBjb21wdXRlIG1pbiwgbWF4IGFuZCB0aWNrcyBpZiBub3Qgc3VwcGxpZWQ6CiAgICAgICAgaWYgKHRoaXMudGlja3MubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnRpY2tzWzBdLmxlbmd0aCA9PSBudWxsIHx8IHRoaXMudGlja3NbMF0ubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnRpY2tzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy50aWNrc1tpXSA9IFt0aGlzLnRpY2tzW2ldLCB0aGlzLnRpY2tzW2ldXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm1pbiA9ICh0aGlzLm1pbiA9PSBudWxsKSA/IHRoaXMudGlja3NbMF1bMF0gOiB0aGlzLm1pbjsKICAgICAgICAgICAgdGhpcy5tYXggPSAodGhpcy5tYXggPT0gbnVsbCkgPyB0aGlzLnRpY2tzW3RoaXMudGlja3MubGVuZ3RoLTFdWzBdIDogdGhpcy5tYXg7CiAgICAgICAgICAgIHRoaXMuc2V0bWluID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMuc2V0bWF4ID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSB0aGlzLnRpY2tzLmxlbmd0aDsKICAgICAgICAgICAgdGhpcy50aWNrSW50ZXJ2YWwgPSB0aGlzLnRpY2tzWzFdWzBdIC0gdGhpcy50aWNrc1swXVswXTsKICAgICAgICAgICAgdGhpcy50aWNrRmFjdG9yID0gTWF0aC5mbG9vcihwYXJzZUZsb2F0KChNYXRoLmxvZyh0aGlzLnRpY2tJbnRlcnZhbCkvTWF0aC5sb2coMTApKS50b0ZpeGVkKDExKSkpOwogICAgICAgICAgICAvLyB1c2UgdGhlIGZpcnN0IGludGVyYWwgdG8gY2FsY3VsYXRlIG1pbm9yIHRpY2tzOwogICAgICAgICAgICB0aGlzLm51bWJlck1pbm9yVGlja3MgPSBnZXRubXQodGhpcy50aWNrUG9zaXRpb25zLCB0aGlzLnRpY2tJbnRlcnZhbCwgdGhpcy50aWNrRmFjdG9yKTsKICAgICAgICAgICAgaWYgKCF0aGlzLm51bWJlck1pbm9yVGlja3MpIHsKICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyTWlub3JUaWNrcyA9IGdldG5tdCh0aGlzLnRpY2tQb3NpdGlvbnMsIHRoaXMudGlja0ludGVydmFsLCB0aGlzLnRpY2tGYWN0b3ItMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCF0aGlzLm51bWJlck1pbm9yVGlja3MpIHsKICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyTWlub3JUaWNrcyA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZWxzZSBpZiAodGhpcy5pbnRlcnZhbHMubGVuZ3RoKSB7CiAgICAgICAgICAgIHRoaXMubWluID0gKHRoaXMubWluID09IG51bGwpID8gMCA6IHRoaXMubWluOwogICAgICAgICAgICB0aGlzLnNldG1pbiA9IGZhbHNlOwogICAgICAgICAgICBpZiAodGhpcy5tYXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuaW50ZXJ2YWxzW3RoaXMuaW50ZXJ2YWxzLmxlbmd0aC0xXVswXSA+PSB0aGlzLmRhdGFbMF1bMV0pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm1heCA9IHRoaXMuaW50ZXJ2YWxzW3RoaXMuaW50ZXJ2YWxzLmxlbmd0aC0xXVswXTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNldG1heCA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5zZXRtYXggPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gbm8gdGlja3MgYW5kIG5vIGludGVydmFscyBzdXBwbGllZCwgcHV0IG5lZWRsZSBpbiBtaWRkbGUKICAgICAgICAgICAgdGhpcy5taW4gPSAodGhpcy5taW4gPT0gbnVsbCkgPyAwIDogdGhpcy5taW47CiAgICAgICAgICAgIHRoaXMuc2V0bWluID0gZmFsc2U7CiAgICAgICAgICAgIGlmICh0aGlzLm1heCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aGlzLm1heCA9IHRoaXMuZGF0YVswXVsxXSAqIDEuMjU7CiAgICAgICAgICAgICAgICB0aGlzLnNldG1heCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldG1heCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgJC5qcXBsb3QuTWV0ZXJHYXVnZVJlbmRlcmVyLnByb3RvdHlwZS5zZXRHcmlkRGF0YSA9IGZ1bmN0aW9uKHBsb3QpIHsKICAgICAgICAvLyBzZXQgZ3JpZERhdGEgcHJvcGVydHkuICBUaGlzIHdpbGwgaG9sZCBhbmdsZSBpbiByYWRpYW5zIG9mIGVhY2ggZGF0YSBwb2ludC4KICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGQgPSBbXTsKICAgICAgICB2YXIgc2EgPSB0aGlzLnN0YXJ0QW5nbGU7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5kYXRhW2ldWzFdKTsKICAgICAgICAgICAgdGQucHVzaChbdGhpcy5kYXRhW2ldWzBdXSk7CiAgICAgICAgICAgIGlmIChpPjApIHsKICAgICAgICAgICAgICAgIHN0YWNrW2ldICs9IHN0YWNrW2ktMV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIGZhY3QgPSBNYXRoLlBJKjIvc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHN0YWNrLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRkW2ldWzFdID0gc3RhY2tbaV0gKiBmYWN0OwogICAgICAgIH0KICAgICAgICB0aGlzLmdyaWREYXRhID0gdGQ7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5NZXRlckdhdWdlUmVuZGVyZXIucHJvdG90eXBlLm1ha2VHcmlkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHBsb3QpIHsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGQgPSBbXTsKICAgICAgICB2YXIgc2EgPSB0aGlzLnN0YXJ0QW5nbGU7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPGRhdGEubGVuZ3RoOyBpKyspewogICAgICAgICAgICBzdGFjay5wdXNoKGRhdGFbaV1bMV0pOwogICAgICAgICAgICB0ZC5wdXNoKFtkYXRhW2ldWzBdXSk7CiAgICAgICAgICAgIGlmIChpPjApIHsKICAgICAgICAgICAgICAgIHN0YWNrW2ldICs9IHN0YWNrW2ktMV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIGZhY3QgPSBNYXRoLlBJKjIvc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHN0YWNrLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRkW2ldWzFdID0gc3RhY2tbaV0gKiBmYWN0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGQ7CiAgICB9OwoKICAgICAgICAKICAgIGZ1bmN0aW9uIGdldG5tdChwb3MsIGludGVydmFsLCBmYWN0KSB7CiAgICAgICAgdmFyIHRlbXA7CiAgICAgICAgZm9yICh2YXIgaT1wb3MubGVuZ3RoLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICB0ZW1wID0gaW50ZXJ2YWwvKHBvc1tpXSAqIE1hdGgucG93KDEwLCBmYWN0KSk7CiAgICAgICAgICAgIGlmICh0ZW1wID09IDQgfHwgdGVtcCA9PSA1KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGVtcCAtIDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIHNlcmllcwogICAgJC5qcXBsb3QuTWV0ZXJHYXVnZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKGN0eCwgZ2QsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgaTsKICAgICAgICB2YXIgb3B0cyA9IChvcHRpb25zICE9IHVuZGVmaW5lZCkgPyBvcHRpb25zIDoge307CiAgICAgICAgLy8gb2Zmc2V0IGFuZCBkaXJlY3Rpb24gb2Ygb2Zmc2V0IGR1ZSB0byBsZWdlbmQgcGxhY2VtZW50CiAgICAgICAgdmFyIG9mZnggPSAwOwogICAgICAgIHZhciBvZmZ5ID0gMDsKICAgICAgICB2YXIgdHJhbnMgPSAxOwogICAgICAgIGlmIChvcHRpb25zLmxlZ2VuZEluZm8gJiYgb3B0aW9ucy5sZWdlbmRJbmZvLnBsYWNlbWVudCA9PSAnaW5zaWRlJykgewogICAgICAgICAgICB2YXIgbGkgPSBvcHRpb25zLmxlZ2VuZEluZm87CiAgICAgICAgICAgIHN3aXRjaCAobGkubG9jYXRpb24pIHsKICAgICAgICAgICAgICAgIGNhc2UgJ253JzoKICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gbGkud2lkdGggKyBsaS54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndyc6CiAgICAgICAgICAgICAgICAgICAgb2ZmeCA9IGxpLndpZHRoICsgbGkueG9mZnNldDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3N3JzoKICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gbGkud2lkdGggKyBsaS54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbmUnOgogICAgICAgICAgICAgICAgICAgIG9mZnggPSBsaS53aWR0aCArIGxpLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAtMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2UnOgogICAgICAgICAgICAgICAgICAgIG9mZnggPSBsaS53aWR0aCArIGxpLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAtMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3NlJzoKICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gbGkud2lkdGggKyBsaS54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIHRyYW5zID0gLTE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgICAgICBvZmZ5ID0gbGkuaGVpZ2h0ICsgbGkueW9mZnNldDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICAgICAgICAgIG9mZnkgPSBsaS5oZWlnaHQgKyBsaS55b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIHRyYW5zID0gLTE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAvLyBwcmUtZHJhdyBzbyBjYW4gZ2V0IGl0cyBkaW1lbnNpb25zLgogICAgICAgIGlmICh0aGlzLmxhYmVsKSB7CiAgICAgICAgICAgIHRoaXMuX2xhYmVsRWxlbSA9ICQoJzxkaXYgY2xhc3M9ImpxcGxvdC1tZXRlckdhdWdlLWxhYmVsIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4nK3RoaXMubGFiZWwrJzwvZGl2PicpOwogICAgICAgICAgICB0aGlzLmNhbnZhcy5fZWxlbS5hZnRlcih0aGlzLl9sYWJlbEVsZW0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgc2hhZG93ID0gKG9wdHMuc2hhZG93ICE9IHVuZGVmaW5lZCkgPyBvcHRzLnNoYWRvdyA6IHRoaXMuc2hhZG93OwogICAgICAgIHZhciBzaG93TGluZSA9IChvcHRzLnNob3dMaW5lICE9IHVuZGVmaW5lZCkgPyBvcHRzLnNob3dMaW5lIDogdGhpcy5zaG93TGluZTsKICAgICAgICB2YXIgZmlsbCA9IChvcHRzLmZpbGwgIT0gdW5kZWZpbmVkKSA/IG9wdHMuZmlsbCA6IHRoaXMuZmlsbDsKICAgICAgICB2YXIgY3cgPSBjdHguY2FudmFzLndpZHRoOwogICAgICAgIHZhciBjaCA9IGN0eC5jYW52YXMuaGVpZ2h0OwogICAgICAgIGlmICh0aGlzLnBhZGRpbmcgPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLnJvdW5kKE1hdGgubWluKGN3LCBjaCkvMzApOwogICAgICAgIH0KICAgICAgICB2YXIgdyA9IGN3IC0gb2ZmeCAtIDIgKiB0aGlzLnBhZGRpbmc7CiAgICAgICAgdmFyIGggPSBjaCAtIG9mZnkgLSAyICogdGhpcy5wYWRkaW5nOwogICAgICAgIGlmICh0aGlzLmxhYmVsUG9zaXRpb24gPT0gJ2JvdHRvbScgJiYgdGhpcy5sYWJlbCkgewogICAgICAgICAgICBoIC09IHRoaXMuX2xhYmVsRWxlbS5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICB9CiAgICAgICAgdmFyIG1pbmRpbSA9IE1hdGgubWluKHcsaCk7CiAgICAgICAgdmFyIGQgPSBtaW5kaW07CiAgICAgICAgICAgIAogICAgICAgIGlmICghdGhpcy5kaWFtZXRlcikgewogICAgICAgICAgICBpZiAodGhpcy5zZW1pQ2lyY3VsYXIpIHsKICAgICAgICAgICAgICAgIGlmICggdyA+PSAyKmgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucmluZ1dpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmluZ1dpZHRoID0gMipoLzM1OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0aGlzLm5lZWRsZVRoaWNrbmVzcyA9IHRoaXMubmVlZGxlVGhpY2tuZXNzIHx8IDIrTWF0aC5wb3codGhpcy5yaW5nV2lkdGgsIDAuOCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbm5lclBhZCA9IHRoaXMucmluZ1dpZHRoLzIgKyB0aGlzLm5lZWRsZVRoaWNrbmVzcy8yICsgdGhpcy5uZWVkbGVQYWQ7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFtZXRlciA9IDIgKiAoaCAtIDIqdGhpcy5pbm5lclBhZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucmluZ1dpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmluZ1dpZHRoID0gdy8zNTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZWVkbGVUaGlja25lc3MgPSB0aGlzLm5lZWRsZVRoaWNrbmVzcyB8fCAyK01hdGgucG93KHRoaXMucmluZ1dpZHRoLCAwLjgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJQYWQgPSB0aGlzLnJpbmdXaWR0aC8yICsgdGhpcy5uZWVkbGVUaGlja25lc3MvMiArIHRoaXMubmVlZGxlUGFkOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbWV0ZXIgPSB3IC0gMip0aGlzLmlubmVyUGFkIC0gdGhpcy5yaW5nV2lkdGggLSB0aGlzLnBhZGRpbmc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBjZW50ZXIgdGFraW5nIGludG8gYWNjb3VudCBsZWdlbmQgYW5kIG92ZXIgZHJhdyBmb3IgZ2F1Z2UgYm90dG9tIGJlbG93IGh1Yi4KICAgICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBiZSBjZW50ZXIgb2YgaHViLgogICAgICAgICAgICAgICAgdGhpcy5fY2VudGVyID0gWyhjdyAtIHRyYW5zICogb2ZmeCkvMiArIHRyYW5zICogb2ZmeCwgIChjaCArIHRyYW5zKm9mZnkgLSB0aGlzLnBhZGRpbmcgLSB0aGlzLnJpbmdXaWR0aCAtIHRoaXMuaW5uZXJQYWQpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5yaW5nV2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnJpbmdXaWR0aCA9IGQvMzU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLm5lZWRsZVRoaWNrbmVzcyA9IHRoaXMubmVlZGxlVGhpY2tuZXNzIHx8IDIrTWF0aC5wb3codGhpcy5yaW5nV2lkdGgsIDAuOCk7CiAgICAgICAgICAgICAgICB0aGlzLmlubmVyUGFkID0gMDsKICAgICAgICAgICAgICAgIHRoaXMuZGlhbWV0ZXIgPSBkIC0gdGhpcy5yaW5nV2lkdGg7CiAgICAgICAgICAgICAgICAvLyBjZW50ZXIgaW4gbWlkZGxlIG9mIGNhbnZhcyB0YWtpbmcgaW50byBhY2NvdW50IGxlZ2VuZC4KICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgY2VudGVyIG9mIGh1Yi4KICAgICAgICAgICAgICAgIHRoaXMuX2NlbnRlciA9IFsoY3ctdHJhbnMqb2ZmeCkvMiArIHRyYW5zICogb2ZmeCwgKGNoLXRyYW5zKm9mZnkpLzIgKyB0cmFucyAqIG9mZnldOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLl9sYWJlbEVsZW0gJiYgdGhpcy5sYWJlbFBvc2l0aW9uID09ICdib3R0b20nKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9jZW50ZXJbMV0gLT0gdGhpcy5fbGFiZWxFbGVtLm91dGVySGVpZ2h0KHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIH0KCiAgICAgICAgdGhpcy5fcmFkaXVzID0gdGhpcy5kaWFtZXRlci8yOwogICAgICAgIAogICAgICAgIHRoaXMudGlja1NwYWNpbmcgPSA2MDAwL3RoaXMuZGlhbWV0ZXI7CiAgICAgICAgCiAgICAgICAgaWYgKCF0aGlzLmh1YlJhZGl1cykgewogICAgICAgICAgICB0aGlzLmh1YlJhZGl1cyA9IHRoaXMuZGlhbWV0ZXIvMTg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMuc2hhZG93T2Zmc2V0ID0gMC41ICsgdGhpcy5yaW5nV2lkdGgvOTsKICAgICAgICB0aGlzLnNoYWRvd1dpZHRoID0gdGhpcy5yaW5nV2lkdGgqMTsKICAgICAgICAKICAgICAgICB0aGlzLnRpY2tQYWRkaW5nID0gMyArIE1hdGgucG93KHRoaXMuZGlhbWV0ZXIvMjAsIDAuNyk7CiAgICAgICAgdGhpcy50aWNrT3V0ZXJSYWRpdXMgPSB0aGlzLl9yYWRpdXMgLSB0aGlzLnJpbmdXaWR0aC8yIC0gdGhpcy50aWNrUGFkZGluZzsKICAgICAgICB0aGlzLnRpY2tMZW5ndGggPSAodGhpcy5zaG93VGlja3MpID8gdGhpcy5fcmFkaXVzLzEzIDogMDsKICAgICAgICAKICAgICAgICBpZiAodGhpcy50aWNrcy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAvLyBubyB0aWNrcywgbGV0cyBtYWtlIHNvbWUuCiAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLm1heCwKICAgICAgICAgICAgICAgIG1pbiA9IHRoaXMubWluLAogICAgICAgICAgICAgICAgc2V0bWF4ID0gdGhpcy5zZXRtYXgsCiAgICAgICAgICAgICAgICBzZXRtaW4gPSB0aGlzLnNldG1pbiwKICAgICAgICAgICAgICAgIHRpID0gKG1heCAtIG1pbikgKiB0aGlzLnRpY2tTcGFjaW5nIC8gdGhpcy5zcGFuOwogICAgICAgICAgICB2YXIgdGYgPSBNYXRoLmZsb29yKHBhcnNlRmxvYXQoKE1hdGgubG9nKHRpKS9NYXRoLmxvZygxMCkpLnRvRml4ZWQoMTEpKSk7CiAgICAgICAgICAgIHZhciB0cCA9ICh0aS9NYXRoLnBvdygxMCwgdGYpKTsKICAgICAgICAgICAgKHRwID4gMiAmJiB0cCA8PSAyLjUpID8gdHAgPSAyLjUgOiB0cCA9IE1hdGguY2VpbCh0cCk7CiAgICAgICAgICAgIHZhciB0ID0gdGhpcy50aWNrUG9zaXRpb25zOwogICAgICAgICAgICB2YXIgdHBpbmRleCwgbnQ7CiAgICAKICAgICAgICAgICAgZm9yIChpPTA7IGk8dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKHRwID09IHRbaV0gfHwgaSAmJiB0W2ktMV0gPCB0cCAmJiB0cCA8IHRbaV0pIHsgCiAgICAgICAgICAgICAgICAgICAgdGkgPSB0W2ldKk1hdGgucG93KDEwLCB0Zik7CiAgICAgICAgICAgICAgICAgICAgdHBpbmRleCA9IGk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgZm9yIChpPTA7IGk8dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKHRwID09IHRbaV0gfHwgaSAmJiB0W2ktMV0gPCB0cCAmJiB0cCA8IHRbaV0pIHsgCiAgICAgICAgICAgICAgICAgICAgdGkgPSB0W2ldKk1hdGgucG93KDEwLCB0Zik7CiAgICAgICAgICAgICAgICAgICAgbnQgPSBNYXRoLmNlaWwoKG1heCAtIG1pbikgLyB0aSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgLy8gYm90aCBtYXggYW5kIG1pbiBhcmUgZnJlZQogICAgICAgICAgICBpZiAoc2V0bWF4ICYmIHNldG1pbikgewogICAgICAgICAgICAgICAgdmFyIHRtaW4gPSAobWluID4gMCkgPyBtaW4gLSBtaW4gJSB0aSA6IG1pbiAtIG1pbiAlIHRpIC0gdGk7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm9yY2VaZXJvKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBNYXRoLm1pbihtaW4gLSB0bWluLCAwLjgqdGkpOwogICAgICAgICAgICAgICAgICAgIHZhciBudHAgPSBNYXRoLmZsb29yKGRpZmYvdFt0cGluZGV4XSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG50cCA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG1pbiA9IHRtaW4gKyB0W3RwaW5kZXhdICogKG50cC0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KHRtaW4sIDEwKSAhPSB0bWluICYmIHBhcnNlSW50KHRtaW4tdFt0cGluZGV4XSwgMTApID09IHRtaW4tdFt0cGluZGV4XSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1pbiA9IHRtaW4gLSB0W3RwaW5kZXhdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG1pbiA9PSB0bWluKSB7CiAgICAgICAgICAgICAgICAgICAgbWluIC09IHRpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gdG1pbiBzaG91bGQgYWx3YXlzIGJlIGxvd2VyIHRoYW4gZGF0YU1pbgogICAgICAgICAgICAgICAgICAgIGlmIChtaW4gLSB0bWluID4gMC4yMyp0aSkgewogICAgICAgICAgICAgICAgICAgICAgICBtaW4gPSB0bWluOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWluID0gdG1pbiAtdGk7CiAgICAgICAgICAgICAgICAgICAgICAgIG50ICs9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbnQgKz0gMTsKICAgICAgICAgICAgICAgIHZhciB0bWF4ID0gbWluICsgKG50IC0gMSkgKiB0aTsKICAgICAgICAgICAgICAgIGlmIChtYXggPj0gdG1heCkgeyAKICAgICAgICAgICAgICAgICAgICB0bWF4ICs9IHRpOwogICAgICAgICAgICAgICAgICAgIG50ICs9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBub3cgdG1heCBzaG91bGQgYWx3YXlzIGJlIG1yb2UgdGhhbiBkYXRhTWF4CiAgICAgICAgICAgICAgICBpZiAodG1heCAtIG1heCA8IDAuMjMqdGkpIHsgCiAgICAgICAgICAgICAgICAgICAgdG1heCArPSB0aTsKICAgICAgICAgICAgICAgICAgICBudCArPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5tYXggPSBtYXggPSB0bWF4OwogICAgICAgICAgICAgICAgdGhpcy5taW4gPSBtaW47ICAgIAoKICAgICAgICAgICAgICAgIHRoaXMudGlja0ludGVydmFsID0gdGk7CiAgICAgICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0gbnQ7CiAgICAgICAgICAgICAgICB2YXIgaXQ7CiAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTxudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaXQgPSBwYXJzZUZsb2F0KChtaW4raSp0aSkudG9GaXhlZCgxMSkpOwogICAgICAgICAgICAgICAgICAgIHRoaXMudGlja3MucHVzaChbaXQsIGl0XSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLm1heCA9IHRoaXMudGlja3NbbnQtMV1bMV07CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdGhpcy50aWNrRmFjdG9yID0gdGY7ICAgICAgCiAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgbnVtYmVyIG9mIG1pbm9yIHRpY2tzCgogICAgICAgICAgICAgICAgdGhpcy5udW1iZXJNaW5vclRpY2tzID0gZ2V0bm10KHRoaXMudGlja1Bvc2l0aW9ucywgdGhpcy50aWNrSW50ZXJ2YWwsIHRoaXMudGlja0ZhY3Rvcik7ICAgICAKICAgICAgICAKICAgICAgICAgICAgICAgIGlmICghdGhpcy5udW1iZXJNaW5vclRpY2tzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJNaW5vclRpY2tzID0gZ2V0bm10KHRoaXMudGlja1Bvc2l0aW9ucywgdGhpcy50aWNrSW50ZXJ2YWwsIHRoaXMudGlja0ZhY3Rvci0xKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBtYXggaXMgZnJlZSwgbWluIGlzIGZpeGVkCiAgICAgICAgICAgIGVsc2UgaWYgKHNldG1heCkgewogICAgICAgICAgICAgICAgdmFyIHRtYXggPSBtaW4gKyAobnQgLSAxKSAqIHRpOwogICAgICAgICAgICAgICAgaWYgKG1heCA+PSB0bWF4KSB7CiAgICAgICAgICAgICAgICAgICAgbWF4ID0gdG1heCArIHRpOwogICAgICAgICAgICAgICAgICAgIG50ICs9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtYXggPSB0bWF4OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMudGlja0ludGVydmFsID0gdGhpcy50aWNrSW50ZXJ2YWwgfHwgdGk7CiAgICAgICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0gdGhpcy5udW1iZXJUaWNrcyB8fCBudDsKICAgICAgICAgICAgICAgIHZhciBpdDsKICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHRoaXMubnVtYmVyVGlja3M7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGl0ID0gcGFyc2VGbG9hdCgobWluK2kqdGhpcy50aWNrSW50ZXJ2YWwpLnRvRml4ZWQoMTEpKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRpY2tzLnB1c2goW2l0LCBpdF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5tYXggPSB0aGlzLnRpY2tzW3RoaXMubnVtYmVyVGlja3MtMV1bMV07CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdGhpcy50aWNrRmFjdG9yID0gdGY7CiAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgbnVtYmVyIG9mIG1pbm9yIHRpY2tzCiAgICAgICAgICAgICAgICB0aGlzLm51bWJlck1pbm9yVGlja3MgPSBnZXRubXQodGhpcy50aWNrUG9zaXRpb25zLCB0aGlzLnRpY2tJbnRlcnZhbCwgdGhpcy50aWNrRmFjdG9yKTsKICAgICAgICAKICAgICAgICAgICAgICAgIGlmICghdGhpcy5udW1iZXJNaW5vclRpY2tzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJNaW5vclRpY2tzID0gZ2V0bm10KHRoaXMudGlja1Bvc2l0aW9ucywgdGhpcy50aWNrSW50ZXJ2YWwsIHRoaXMudGlja0ZhY3Rvci0xKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gbm90IHNldHRpbmcgbWF4IG9yIG1pbgogICAgICAgICAgICBpZiAoIXNldG1heCAmJiAhc2V0bWluKSB7CiAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluOwogICAgICAgICAgICAgICAgdGYgPSBNYXRoLmZsb29yKHBhcnNlRmxvYXQoKE1hdGgubG9nKHJhbmdlKS9NYXRoLmxvZygxMCkpLnRvRml4ZWQoMTEpKSkgLSAxOwogICAgICAgICAgICAgICAgdmFyIG50aWNrcyA9IFs1LDYsNCw3LDMsOCw5LDEwLDJdLCByZXMsIG51bXRpY2tzLCBub25TaWdEaWdpdHM9MCwgc2lnUmFuZ2U7CiAgICAgICAgICAgICAgICAvLyBjaGVjayB0byBzZWUgaG93IG1hbnkgemVyb3MgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHJhbmdlCiAgICAgICAgICAgICAgICBpZiAocmFuZ2UgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJzdHIgPSBTdHJpbmcocmFuZ2UpOwogICAgICAgICAgICAgICAgICAgIGlmIChyc3RyLnNlYXJjaCgvXC4vKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IHJzdHIuc2VhcmNoKC8wKyQvKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vblNpZ0RpZ2l0cyA9IChwb3MgPiAwKSA/IHJzdHIubGVuZ3RoIC0gcG9zIC0gMSA6IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2lnUmFuZ2UgPSByYW5nZS9NYXRoLnBvdygxMCwgbm9uU2lnRGlnaXRzKTsKICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPG50aWNrcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHJlcyA9IHNpZ1JhbmdlLyhudGlja3NbaV0tMSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyA9PSBwYXJzZUludChyZXMsIDEwKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0gbnRpY2tzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpY2tJbnRlcnZhbCA9IHJhbmdlLyh0aGlzLm51bWJlclRpY2tzLTEpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpY2tGYWN0b3IgPSB0ZisxOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgaXQ7CiAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTx0aGlzLm51bWJlclRpY2tzOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpdCA9IHBhcnNlRmxvYXQoKHRoaXMubWluK2kqdGhpcy50aWNrSW50ZXJ2YWwpLnRvRml4ZWQoMTEpKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRpY2tzLnB1c2goW2l0LCBpdF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIG51bWJlciBvZiBtaW5vciB0aWNrcwogICAgICAgICAgICAgICAgdGhpcy5udW1iZXJNaW5vclRpY2tzID0gZ2V0bm10KHRoaXMudGlja1Bvc2l0aW9ucywgdGhpcy50aWNrSW50ZXJ2YWwsIHRoaXMudGlja0ZhY3Rvcik7CiAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubnVtYmVyTWlub3JUaWNrcykgewogICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyTWlub3JUaWNrcyA9IGdldG5tdCh0aGlzLnRpY2tQb3NpdGlvbnMsIHRoaXMudGlja0ludGVydmFsLCB0aGlzLnRpY2tGYWN0b3ItMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICghdGhpcy5udW1iZXJNaW5vclRpY2tzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJNaW5vclRpY2tzID0gMTsKICAgICAgICAgICAgICAgICAgICB2YXIgbnVtcyA9IFs0LCA1LCAzLCA2LCAyXTsKICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTw1OyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSB0aGlzLnRpY2tJbnRlcnZhbC9udW1zW2ldOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSBwYXJzZUludCh0ZW1wLCAxMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyTWlub3JUaWNrcyA9IG51bXNbaV0tMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAoKICAgICAgICB2YXIgciA9IHRoaXMuX3JhZGl1cywKICAgICAgICAgICAgc2EgPSB0aGlzLnN0YXJ0QW5nbGUsCiAgICAgICAgICAgIGVhID0gdGhpcy5lbmRBbmdsZSwgICAgICAgCiAgICAgICAgICAgIHBpID0gTWF0aC5QSSwKICAgICAgICAgICAgaHBpID0gTWF0aC5QSS8yOwogICAgICAgICAgICAKICAgICAgICBpZiAodGhpcy5zZW1pQ2lyY3VsYXIpIHsKICAgICAgICAgICAgdmFyIG92ZXJBbmdsZSA9IE1hdGguYXRhbih0aGlzLmlubmVyUGFkL3IpLAogICAgICAgICAgICAgICAgb3V0ZXJzYSA9IHRoaXMub3V0ZXJTdGFydEFuZ2xlID0gc2EgLSBvdmVyQW5nbGUsCiAgICAgICAgICAgICAgICBvdXRlcmVhID0gdGhpcy5vdXRlckVuZEFuZ2xlID0gZWEgKyBvdmVyQW5nbGUsCiAgICAgICAgICAgICAgICBodWJzYSA9IHRoaXMuaHViU3RhcnRBbmdsZSA9IHNhIC0gTWF0aC5hdGFuKHRoaXMuaW5uZXJQYWQvdGhpcy5odWJSYWRpdXMqMiksCiAgICAgICAgICAgICAgICBodWJlYSA9IHRoaXMuaHViRW5kQW5nbGUgPSBlYSArIE1hdGguYXRhbih0aGlzLmlubmVyUGFkL3RoaXMuaHViUmFkaXVzKjIpOwoKICAgICAgICAgICAgY3R4LnNhdmUoKTsgICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUodGhpcy5fY2VudGVyWzBdLCB0aGlzLl9jZW50ZXJbMV0pOwogICAgICAgICAgICBjdHgubGluZUpvaW4gPSAicm91bmQiOwogICAgICAgICAgICBjdHgubGluZUNhcCA9ICJyb3VuZCI7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBkcmF3IHRoZSBpbm5lcmJhY2tncm91bmQKICAgICAgICAgICAgY3R4LnNhdmUoKTsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOyAgCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmJhY2tncm91bmQ7CiAgICAgICAgICAgIGN0eC5hcmMoMCwgMCwgciwgb3V0ZXJzYSwgb3V0ZXJlYSwgZmFsc2UpOwogICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7CiAgICAgICAgICAgIGN0eC5maWxsKCk7CiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBkcmF3IHRoZSBzaGFkb3cKICAgICAgICAgICAgLy8gdGhlIG91dGVyIHJpbmcuCiAgICAgICAgICAgIHZhciBzaGFkb3dDb2xvciA9ICdyZ2JhKDAsMCwwLCcrdGhpcy5zaGFkb3dBbHBoYSsnKSc7CiAgICAgICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnNoYWRvd0RlcHRoOyBpKyspIHsKICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUodGhpcy5zaGFkb3dPZmZzZXQqTWF0aC5jb3ModGhpcy5zaGFkb3dBbmdsZS8xODAqTWF0aC5QSSksIHRoaXMuc2hhZG93T2Zmc2V0Kk1hdGguc2luKHRoaXMuc2hhZG93QW5nbGUvMTgwKk1hdGguUEkpKTsKICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsgIAogICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc2hhZG93Q29sb3I7CiAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gdGhpcy5zaGFkb3dXaWR0aDsKICAgICAgICAgICAgICAgIGN0eC5hcmMoMCAsMCwgciwgb3V0ZXJzYSwgb3V0ZXJlYSwgZmFsc2UpOwogICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpOwogICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyB0aGUgaW5uZXIgaHViLgogICAgICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgICAgICB2YXIgdGVtcGQgPSBwYXJzZUludCgodGhpcy5zaGFkb3dEZXB0aCsxKS8yLCAxMCk7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0ZW1wZDsgaSsrKSB7CiAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKHRoaXMuc2hhZG93T2Zmc2V0Kk1hdGguY29zKHRoaXMuc2hhZG93QW5nbGUvMTgwKk1hdGguUEkpLCB0aGlzLnNoYWRvd09mZnNldCpNYXRoLnNpbih0aGlzLnNoYWRvd0FuZ2xlLzE4MCpNYXRoLlBJKSk7CiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7ICAKICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBzaGFkb3dDb2xvcjsKICAgICAgICAgICAgICAgIGN0eC5hcmMoMCAsMCwgdGhpcy5odWJSYWRpdXMsIGh1YnNhLCBodWJlYSwgZmFsc2UpOwogICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpOwogICAgICAgICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gZHJhdyB0aGUgb3V0ZXIgcmluZy4KICAgICAgICAgICAgY3R4LnNhdmUoKTsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOyAgCiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHRoaXMucmluZ0NvbG9yOwogICAgICAgICAgICBjdHgubGluZVdpZHRoID0gdGhpcy5yaW5nV2lkdGg7CiAgICAgICAgICAgIGN0eC5hcmMoMCAsMCwgciwgb3V0ZXJzYSwgb3V0ZXJlYSwgZmFsc2UpOwogICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7CiAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGRyYXcgdGhlIGh1YgogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LnNhdmUoKTsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOyAgCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLnJpbmdDb2xvcjsKICAgICAgICAgICAgY3R4LmFyYygwICwwLCB0aGlzLmh1YlJhZGl1cyxodWJzYSwgaHViZWEsIGZhbHNlKTsKICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpOwogICAgICAgICAgICBjdHguZmlsbCgpOwogICAgICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gZHJhdyB0aGUgdGlja3MKICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1RpY2tzKSB7CiAgICAgICAgICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgICAgICAgICAgdmFyIG9yYWQgPSB0aGlzLnRpY2tPdXRlclJhZGl1cywKICAgICAgICAgICAgICAgICAgICB0bCA9IHRoaXMudGlja0xlbmd0aCwKICAgICAgICAgICAgICAgICAgICBtdGwgPSB0bC8yLAogICAgICAgICAgICAgICAgICAgIG5tdCA9IHRoaXMubnVtYmVyTWlub3JUaWNrcywKICAgICAgICAgICAgICAgICAgICB0cyA9IHRoaXMuc3BhbiAqIE1hdGguUEkgLyAxODAgLyAodGhpcy50aWNrcy5sZW5ndGgtMSksCiAgICAgICAgICAgICAgICAgICAgbXRzID0gdHMvKG5tdCArIDEpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpPHRoaXMudGlja3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDEuNSArIHRoaXMuZGlhbWV0ZXIvMzYwOwogICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHRoaXMucmluZ0NvbG9yOwogICAgICAgICAgICAgICAgICAgIHZhciB3cHMgPSB0cyppK3NhOwogICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oLW9yYWQgKiBNYXRoLmNvcyh0cyppK3NhKSwgb3JhZCAqIE1hdGguc2luKHRzKmkrc2EpKTsKICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKC0ob3JhZC10bCkgKiBNYXRoLmNvcyh0cyppK3NhKSwgKG9yYWQgLSB0bCkgKiBNYXRoLnNpbih0cyppK3NhKSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGlja1BvaW50cy5wdXNoKFsob3JhZC10bCkgKiBNYXRoLmNvcyh0cyppK3NhKSArIHRoaXMuX2NlbnRlclswXSArIHRoaXMuY2FudmFzLl9vZmZzZXRzLmxlZnQsIChvcmFkIC0gdGwpICogTWF0aC5zaW4odHMqaStzYSkgKyB0aGlzLl9jZW50ZXJbMV0gKyB0aGlzLmNhbnZhcy5fb2Zmc2V0cy50b3AsIHRzKmkrc2FdKTsKICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7CiAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDEuMCArIHRoaXMuZGlhbWV0ZXIvNDQwOwogICAgICAgICAgICAgICAgICAgIGlmIChpPHRoaXMudGlja3MubGVuZ3RoLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqPD1ubXQ7IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm1vdmVUbygtb3JhZCAqIE1hdGguY29zKHRzKmkrbXRzKmorc2EpLCBvcmFkICogTWF0aC5zaW4odHMqaSttdHMqaitzYSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbygtKG9yYWQtbXRsKSAqIE1hdGguY29zKHRzKmkrbXRzKmorc2EpLCAob3JhZC1tdGwpICogTWF0aC5zaW4odHMqaSttdHMqaitzYSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9ICAgCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gZHJhdyB0aGUgdGljayBsYWJlbHMKICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1RpY2tMYWJlbHMpIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtLCBsLCB0LCBldywgZWgsIGRpbSwgbWF4ZGltPTA7CiAgICAgICAgICAgICAgICB2YXIgdHAgPSB0aGlzLnRpY2tQYWRkaW5nICogKDEgLSAxLyh0aGlzLmRpYW1ldGVyLzgwKzEpKTsKICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHRoaXMudGlja3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBlbGVtID0gJCgnPGRpdiBjbGFzcz0ianFwbG90LW1ldGVyR2F1Z2UtdGljayIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyI+Jyt0aGlzLnRpY2tzW2ldWzFdKyc8L2Rpdj4nKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5fZWxlbS5hZnRlcihlbGVtKTsKICAgICAgICAgICAgICAgICAgICBldyA9IGVsZW0ub3V0ZXJXaWR0aCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICBlaCA9IGVsZW0ub3V0ZXJIZWlnaHQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgbCA9IHRoaXMuX3RpY2tQb2ludHNbaV1bMF0gLSBldyAqICh0aGlzLl90aWNrUG9pbnRzW2ldWzJdLU1hdGguUEkpL01hdGguUEkgLSB0cCAqIE1hdGguY29zKHRoaXMuX3RpY2tQb2ludHNbaV1bMl0pOwogICAgICAgICAgICAgICAgICAgIHQgPSB0aGlzLl90aWNrUG9pbnRzW2ldWzFdIC0gZWgvMiArIGVoLzIgKiBNYXRoLnBvdyhNYXRoLmFicygoTWF0aC5zaW4odGhpcy5fdGlja1BvaW50c1tpXVsyXSkpKSwgMC41KSArIHRwLzMgKiBNYXRoLnBvdyhNYXRoLmFicygoTWF0aC5zaW4odGhpcy5fdGlja1BvaW50c1tpXVsyXSkpKSwgMC41KSA7CiAgICAgICAgICAgICAgICAgICAgLy8gdCA9IHRoaXMuX3RpY2tQb2ludHNbaV1bMV0gLSBlaC8yIC0gZWgvMiAqIE1hdGguc2luKHRoaXMuX3RpY2tQb2ludHNbaV1bMl0pIC0gdHAvMiAqIE1hdGguc2luKHRoaXMuX3RpY2tQb2ludHNbaV1bMl0pOwogICAgICAgICAgICAgICAgICAgIGVsZW0uY3NzKHtsZWZ0OmwsIHRvcDp0LCBjb2xvcjogdGhpcy50aWNrQ29sb3J9KTsKICAgICAgICAgICAgICAgICAgICBkaW0gID0gZXcqTWF0aC5jb3ModGhpcy5fdGlja1BvaW50c1tpXVsyXSkgKyBlaCpNYXRoLnNpbihNYXRoLlBJLzIrdGhpcy5fdGlja1BvaW50c1tpXVsyXS8yKTsKICAgICAgICAgICAgICAgICAgICBtYXhkaW0gPSAoZGltID4gbWF4ZGltKSA/IGRpbSA6IG1heGRpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gZHJhdyB0aGUgZ2F1Z2UgbGFiZWwKICAgICAgICAgICAgaWYgKHRoaXMubGFiZWwgJiYgdGhpcy5sYWJlbFBvc2l0aW9uID09ICdpbnNpZGUnKSB7CiAgICAgICAgICAgICAgICB2YXIgbCA9IHRoaXMuX2NlbnRlclswXSArIHRoaXMuY2FudmFzLl9vZmZzZXRzLmxlZnQ7CiAgICAgICAgICAgICAgICB2YXIgdHAgPSB0aGlzLnRpY2tQYWRkaW5nICogKDEgLSAxLyh0aGlzLmRpYW1ldGVyLzgwKzEpKTsKICAgICAgICAgICAgICAgIHZhciB0ID0gMC41Kih0aGlzLl9jZW50ZXJbMV0gKyB0aGlzLmNhbnZhcy5fb2Zmc2V0cy50b3AgLSB0aGlzLmh1YlJhZGl1cykgKyAwLjUqKHRoaXMuX2NlbnRlclsxXSArIHRoaXMuY2FudmFzLl9vZmZzZXRzLnRvcCAtIHRoaXMudGlja091dGVyUmFkaXVzICsgdGhpcy50aWNrTGVuZ3RoICsgdHApICsgdGhpcy5sYWJlbEhlaWdodEFkanVzdDsKICAgICAgICAgICAgICAgIC8vIHRoaXMuX2xhYmVsRWxlbSA9ICQoJzxkaXYgY2xhc3M9ImpxcGxvdC1tZXRlckdhdWdlLWxhYmVsIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4nK3RoaXMubGFiZWwrJzwvZGl2PicpOwogICAgICAgICAgICAgICAgLy8gdGhpcy5jYW52YXMuX2VsZW0uYWZ0ZXIodGhpcy5fbGFiZWxFbGVtKTsKICAgICAgICAgICAgICAgIGwgLT0gdGhpcy5fbGFiZWxFbGVtLm91dGVyV2lkdGgodHJ1ZSkvMjsKICAgICAgICAgICAgICAgIHQgLT0gdGhpcy5fbGFiZWxFbGVtLm91dGVySGVpZ2h0KHRydWUpLzI7CiAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbEVsZW0uY3NzKHtsZWZ0OmwsIHRvcDp0fSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubGFiZWwgJiYgdGhpcy5sYWJlbFBvc2l0aW9uID09ICdib3R0b20nKSB7CiAgICAgICAgICAgICAgICB2YXIgbCA9IHRoaXMuX2NlbnRlclswXSArIHRoaXMuY2FudmFzLl9vZmZzZXRzLmxlZnQgLSB0aGlzLl9sYWJlbEVsZW0ub3V0ZXJXaWR0aCh0cnVlKS8yOwogICAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzLl9jZW50ZXJbMV0gKyB0aGlzLmNhbnZhcy5fb2Zmc2V0cy50b3AgKyB0aGlzLmlubmVyUGFkICsgdGhpcy5yaW5nV2lkdGggKyB0aGlzLnBhZGRpbmcgKyB0aGlzLmxhYmVsSGVpZ2h0QWRqdXN0OwogICAgICAgICAgICAgICAgdGhpcy5fbGFiZWxFbGVtLmNzcyh7bGVmdDpsLCB0b3A6dH0pOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGRyYXcgdGhlIGludGVydmFscwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LnNhdmUoKTsKICAgICAgICAgICAgdmFyIGlubmVyID0gdGhpcy5pbnRlcnZhbElubmVyUmFkaXVzIHx8IHRoaXMuaHViUmFkaXVzICogMS41OwogICAgICAgICAgICBpZiAodGhpcy5pbnRlcnZhbE91dGVyUmFkaXVzID09IG51bGwpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dUaWNrTGFiZWxzKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG91dGVyID0gKHRoaXMudGlja091dGVyUmFkaXVzIC0gdGhpcy50aWNrTGVuZ3RoIC0gdGhpcy50aWNrUGFkZGluZyAtIHRoaXMuZGlhbWV0ZXIvOCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YXIgb3V0ZXIgPSAodGhpcy50aWNrT3V0ZXJSYWRpdXMgLSB0aGlzLnRpY2tMZW5ndGggLSB0aGlzLmRpYW1ldGVyLzE2KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBvdXRlciA9IHRoaXMuaW50ZXJ2YWxPdXRlclJhZGl1czsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluOwogICAgICAgICAgICB2YXIgaW50cmFuZ2UgPSB0aGlzLmludGVydmFsc1t0aGlzLmludGVydmFscy5sZW5ndGgtMV0gLSB0aGlzLm1pbjsKICAgICAgICAgICAgdmFyIHN0YXJ0LCBlbmQsIHNwYW4gPSB0aGlzLnNwYW4qTWF0aC5QSS8xODA7CiAgICAgICAgICAgIGZvciAoaT0wOyBpPHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBzdGFydCA9IChpID09IDApID8gc2EgOiBzYSArICh0aGlzLmludGVydmFsc1tpLTFdWzBdIC0gdGhpcy5taW4pKnNwYW4vcmFuZ2U7CiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZW5kID0gc2EgKyAodGhpcy5pbnRlcnZhbHNbaV1bMF0gLSB0aGlzLm1pbikqc3Bhbi9yYW5nZTsKICAgICAgICAgICAgICAgIGlmIChlbmQgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgZW5kID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmludGVydmFsc1tpXVsyXTsKICAgICAgICAgICAgICAgIGN0eC5hcmMoMCwgMCwgaW5uZXIsIHN0YXJ0LCBlbmQsIGZhbHNlKTsKICAgICAgICAgICAgICAgIGN0eC5saW5lVG8ob3V0ZXIqTWF0aC5jb3MoZW5kKSwgb3V0ZXIqTWF0aC5zaW4oZW5kKSk7CiAgICAgICAgICAgICAgICBjdHguYXJjKDAsIDAsIG91dGVyLCBlbmQsIHN0YXJ0LCB0cnVlKTsKICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oaW5uZXIqTWF0aC5jb3Moc3RhcnQpLCBpbm5lcipNYXRoLnNpbihzdGFydCkpOwogICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpOwogICAgICAgICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gZHJhdyB0aGUgbmVlZGxlCiAgICAgICAgICAgIHZhciBkYXRhcG9pbnQgPSB0aGlzLmRhdGFbMF1bMV07CiAgICAgICAgICAgIHZhciBkYXRhc3BhbiA9IHRoaXMubWF4IC0gdGhpcy5taW47CiAgICAgICAgICAgIGlmICh0aGlzLnBlZ05lZWRsZSkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVswXVsxXSA+IHRoaXMubWF4ICsgZGF0YXNwYW4qMy90aGlzLnNwYW4pIHsKICAgICAgICAgICAgICAgICAgICBkYXRhcG9pbnQgPSB0aGlzLm1heCArIGRhdGFzcGFuKjMvdGhpcy5zcGFuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVswXVsxXSA8IHRoaXMubWluIC0gZGF0YXNwYW4qMy90aGlzLnNwYW4pIHsKICAgICAgICAgICAgICAgICAgICBkYXRhcG9pbnQgPSB0aGlzLm1pbiAtIGRhdGFzcGFuKjMvdGhpcy5zcGFuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBkYXRhYW5nID0gKGRhdGFwb2ludCAtIHRoaXMubWluKS9kYXRhc3BhbiAqIHRoaXMuc3BhbiAqIE1hdGguUEkvMTgwICsgdGhpcy5zdGFydEFuZ2xlOwogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMucmluZ0NvbG9yOwogICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLnJpbmdDb2xvcjsKICAgICAgICAgICAgdGhpcy5uZWVkbGVMZW5ndGggPSAodGhpcy50aWNrT3V0ZXJSYWRpdXMgLSB0aGlzLnRpY2tMZW5ndGgpICogMC44NTsKICAgICAgICAgICAgdGhpcy5uZWVkbGVUaGlja25lc3MgPSAodGhpcy5uZWVkbGVUaGlja25lc3MgPCAyKSA/IDIgOiB0aGlzLm5lZWRsZVRoaWNrbmVzczsKICAgICAgICAgICAgdmFyIGVuZHdpZHRoID0gdGhpcy5uZWVkbGVUaGlja25lc3MgKiAwLjQ7CgogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGRsID0gdGhpcy5uZWVkbGVMZW5ndGgvMTA7CiAgICAgICAgICAgIHZhciBkdCA9ICh0aGlzLm5lZWRsZVRoaWNrbmVzcyAtIGVuZHdpZHRoKS8xMDsKICAgICAgICAgICAgdmFyIHRlbXBsOwogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8MTA7IGkrKykgewogICAgICAgICAgICAgICAgdGVtcGwgPSB0aGlzLm5lZWRsZVRoaWNrbmVzcyAtIGkqZHQ7CiAgICAgICAgICAgICAgICBjdHgubW92ZVRvKGRsKmkqTWF0aC5jb3MoZGF0YWFuZyksIGRsKmkqTWF0aC5zaW4oZGF0YWFuZykpOwogICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IHRlbXBsOwogICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhkbCooaSsxKSpNYXRoLmNvcyhkYXRhYW5nKSwgZGwqKGkrMSkqTWF0aC5zaW4oZGF0YWFuZykpOwogICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy5fY2VudGVyID0gWyhjdyAtIHRyYW5zICogb2ZmeCkvMiArIHRyYW5zICogb2ZmeCwgKGNoIC0gdHJhbnMqb2ZmeSkvMiArIHRyYW5zICogb2ZmeV07CiAgICAgICAgfSAgICAgICAgICAgICAgIAogICAgfTsKICAgIAogICAgJC5qcXBsb3QuTWV0ZXJHYXVnZUF4aXNSZW5kZXJlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuTWV0ZXJHYXVnZUF4aXNSZW5kZXJlci5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyKCk7CiAgICAkLmpxcGxvdC5NZXRlckdhdWdlQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90Lk1ldGVyR2F1Z2VBeGlzUmVuZGVyZXI7CiAgICAgICAgCiAgICAKICAgIC8vIFRoZXJlIGFyZSBubyB0cmFkaXRpb25hbCBheGVzIG9uIGEgZ2F1Z2UgY2hhcnQuICBXZSBqdXN0IG5lZWQgdG8gcHJvdmlkZQogICAgLy8gZHVtbXkgb2JqZWN0cyB3aXRoIHByb3BlcnRpZXMgc28gdGhlIHBsb3Qgd2lsbCByZW5kZXIuCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBheGlzIG9iamVjdC4KICAgICQuanFwbG90Lk1ldGVyR2F1Z2VBeGlzUmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zKXsKICAgICAgICAvLwogICAgICAgIHRoaXMudGlja1JlbmRlcmVyID0gJC5qcXBsb3QuTWV0ZXJHYXVnZVRpY2tSZW5kZXJlcjsKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgICAgICAvLyBJIGRvbid0IHRoaW5rIEknbSBnb2luZyB0byBuZWVkIF9kYXRhQm91bmRzIGhlcmUuCiAgICAgICAgLy8gaGF2ZSB0byBnbyBBeGlzIHNjYWxpbmcgaW4gYSB3YXkgdG8gZml0IGNoYXJ0IG9udG8gcGxvdCBhcmVhCiAgICAgICAgLy8gYW5kIHByb3ZpZGUgdTJwIGFuZCBwMnUgZnVuY3Rpb25hbGl0eSBmb3IgbW91c2UgY3Vyc29yLCBldGMuCiAgICAgICAgLy8gZm9yIGNvbnZpZW5lbmNlIHNldCBfZGF0YUJvdW5kcyB0byAwIGFuZCAxMDAgYW5kCiAgICAgICAgLy8gc2V0IG1pbi9tYXggdG8gMCBhbmQgMTAwLgogICAgICAgIHRoaXMuX2RhdGFCb3VuZHMgPSB7bWluOjAsIG1heDoxMDB9OwogICAgICAgIHRoaXMubWluID0gMDsKICAgICAgICB0aGlzLm1heCA9IDEwMDsKICAgICAgICB0aGlzLnNob3dUaWNrcyA9IGZhbHNlOwogICAgICAgIHRoaXMudGlja3MgPSBbXTsKICAgICAgICB0aGlzLnNob3dNYXJrID0gZmFsc2U7CiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7IAogICAgfTsKICAgIAogICAgJC5qcXBsb3QuTWV0ZXJHYXVnZUxlZ2VuZFJlbmRlcmVyID0gZnVuY3Rpb24oKXsKICAgICAgICAkLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyLmNhbGwodGhpcyk7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5NZXRlckdhdWdlTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlID0gbmV3ICQuanFwbG90LlRhYmxlTGVnZW5kUmVuZGVyZXIoKTsKICAgICQuanFwbG90Lk1ldGVyR2F1Z2VMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5NZXRlckdhdWdlTGVnZW5kUmVuZGVyZXI7CiAgICAKICAgIC8qKgogICAgICogQ2xhc3M6ICQuanFwbG90Lk1ldGVyR2F1Z2VMZWdlbmRSZW5kZXJlcgogICAgICpNZXRlciBnYXVnZXMgZG9uJ3QgdHlwaWNhbGx5IGhhdmUgYSBsZWdlbmQsIHRoaXMgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGxlZ2VuZCByZW5kZXJlci4KICAgICAqLwogICAgJC5qcXBsb3QuTWV0ZXJHYXVnZUxlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGxlZ2VuZC4gIDAgb3IgbnVsbCBmb3IgdW5saW1pdGVkLgogICAgICAgIHRoaXMubnVtYmVyUm93cyA9IG51bGw7CiAgICAgICAgLy8gTWF4aW11bSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbGVnZW5kLiAgMCBvciBudWxsIGZvciB1bmxpbWl0ZWQuCiAgICAgICAgdGhpcy5udW1iZXJDb2x1bW5zID0gbnVsbDsKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgIH07CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIGNvbnRleHQgb2YgbGVnZW5kCiAgICAkLmpxcGxvdC5NZXRlckdhdWdlTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zaG93KSB7CiAgICAgICAgICAgIHZhciBzZXJpZXMgPSB0aGlzLl9zZXJpZXM7CiAgICAgICAgICAgIHZhciBzcyA9ICdwb3NpdGlvbjphYnNvbHV0ZTsnOwogICAgICAgICAgICBzcyArPSAodGhpcy5iYWNrZ3JvdW5kKSA/ICdiYWNrZ3JvdW5kOicrdGhpcy5iYWNrZ3JvdW5kKyc7JyA6ICcnOwogICAgICAgICAgICBzcyArPSAodGhpcy5ib3JkZXIpID8gJ2JvcmRlcjonK3RoaXMuYm9yZGVyKyc7JyA6ICcnOwogICAgICAgICAgICBzcyArPSAodGhpcy5mb250U2l6ZSkgPyAnZm9udC1zaXplOicrdGhpcy5mb250U2l6ZSsnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMuZm9udEZhbWlseSkgPyAnZm9udC1mYW1pbHk6Jyt0aGlzLmZvbnRGYW1pbHkrJzsnIDogJyc7CiAgICAgICAgICAgIHNzICs9ICh0aGlzLnRleHRDb2xvcikgPyAnY29sb3I6Jyt0aGlzLnRleHRDb2xvcisnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMubWFyZ2luVG9wICE9IG51bGwpID8gJ21hcmdpbi10b3A6Jyt0aGlzLm1hcmdpblRvcCsnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMubWFyZ2luQm90dG9tICE9IG51bGwpID8gJ21hcmdpbi1ib3R0b206Jyt0aGlzLm1hcmdpbkJvdHRvbSsnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMubWFyZ2luTGVmdCAhPSBudWxsKSA/ICdtYXJnaW4tbGVmdDonK3RoaXMubWFyZ2luTGVmdCsnOycgOiAnJzsKICAgICAgICAgICAgc3MgKz0gKHRoaXMubWFyZ2luUmlnaHQgIT0gbnVsbCkgPyAnbWFyZ2luLXJpZ2h0OicrdGhpcy5tYXJnaW5SaWdodCsnOycgOiAnJzsKICAgICAgICAgICAgdGhpcy5fZWxlbSA9ICQoJzx0YWJsZSBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCIgc3R5bGU9Iicrc3MrJyI+PC90YWJsZT4nKTsKICAgICAgICAgICAgLy8gTWV0ZXJHYXVnZSBjaGFydHMgbGVnZW5kcyBkb24ndCBnbyBieSBudW1iZXIgb2Ygc2VyaWVzLCBidXQgYnkgbnVtYmVyIG9mIGRhdGEgcG9pbnRzCiAgICAgICAgICAgIC8vIGluIHRoZSBzZXJpZXMuICBSZWZhY3RvciB0aGluZ3MgaGVyZSBmb3IgdGhhdC4KICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwYWQgPSBmYWxzZSwgCiAgICAgICAgICAgICAgICByZXZlcnNlID0gZmFsc2UsCiAgICAgICAgICAgICAgICBuciwgbmM7CiAgICAgICAgICAgIHZhciBzID0gc2VyaWVzWzBdOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHMuc2hvdykgewogICAgICAgICAgICAgICAgdmFyIHBkID0gcy5kYXRhOwogICAgICAgICAgICAgICAgaWYgKHRoaXMubnVtYmVyUm93cykgewogICAgICAgICAgICAgICAgICAgIG5yID0gdGhpcy5udW1iZXJSb3dzOwogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5udW1iZXJDb2x1bW5zKXsKICAgICAgICAgICAgICAgICAgICAgICAgbmMgPSBNYXRoLmNlaWwocGQubGVuZ3RoL25yKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgbmMgPSB0aGlzLm51bWJlckNvbHVtbnM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5udW1iZXJDb2x1bW5zKSB7CiAgICAgICAgICAgICAgICAgICAgbmMgPSB0aGlzLm51bWJlckNvbHVtbnM7CiAgICAgICAgICAgICAgICAgICAgbnIgPSBNYXRoLmNlaWwocGQubGVuZ3RoL3RoaXMubnVtYmVyQ29sdW1ucyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuciA9IHBkLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBuYyA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBpLCBqLCB0ciwgdGQxLCB0ZDIsIGx0LCBycywgY29sb3I7CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gMDsgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPG5yOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAocmV2ZXJzZSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyID0gJCgnPHRyIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIj48L3RyPicpLnByZXBlbmRUbyh0aGlzLl9lbGVtKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgdHIgPSAkKCc8dHIgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiPjwvdHI+JykuYXBwZW5kVG8odGhpcy5fZWxlbSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqPG5jOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkeCA8IHBkLmxlbmd0aCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWJ1Z2dlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbHQgPSB0aGlzLmxhYmVsc1tpZHhdIHx8IHBkW2lkeF1bMF0udG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gcy5jb2xvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV2ZXJzZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGk+MCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gbnIgLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBycyA9IChwYWQpID8gdGhpcy5yb3dTcGFjaW5nIDogJzAnOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDEgPSAkKCc8dGQgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nLXRvcDonK3JzKyc7Ij4nKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2PjxkaXYgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQtc3dhdGNoIiBzdHlsZT0iYm9yZGVyLWNvbG9yOicrY29sb3IrJzsiPjwvZGl2PicrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PjwvdGQ+Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDIgPSAkKCc8dGQgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiIHN0eWxlPSJwYWRkaW5nLXRvcDonK3JzKyc7Ij48L3RkPicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXNjYXBlSHRtbCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQyLnRleHQobHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQyLmh0bWwobHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldmVyc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDIucHJlcGVuZFRvKHRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDEucHJlcGVuZFRvKHRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMS5hcHBlbmRUbyh0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQyLmFwcGVuZFRvKHRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWR4Kys7CiAgICAgICAgICAgICAgICAgICAgfSAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9lbGVtOyAgICAgICAgICAgICAgICAKICAgIH07CiAgICAKICAgIAogICAgLy8gc2V0dXAgZGVmYXVsdCByZW5kZXJlcnMgZm9yIGF4ZXMgYW5kIGxlZ2VuZCBzbyB1c2VyIGRvZXNuJ3QgaGF2ZSB0bwogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgcGxvdAogICAgZnVuY3Rpb24gcHJlSW5pdCh0YXJnZXQsIGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICAvLyBkZWJ1Z2dlcgogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIG9wdGlvbnMuYXhlc0RlZmF1bHRzID0gb3B0aW9ucy5heGVzRGVmYXVsdHMgfHwge307CiAgICAgICAgb3B0aW9ucy5sZWdlbmQgPSBvcHRpb25zLmxlZ2VuZCB8fCB7fTsKICAgICAgICBvcHRpb25zLnNlcmllc0RlZmF1bHRzID0gb3B0aW9ucy5zZXJpZXNEZWZhdWx0cyB8fCB7fTsKICAgICAgICBvcHRpb25zLmdyaWQgPSBvcHRpb25zLmdyaWQgfHwge307CiAgICAgICAgICAgCiAgICAgICAgLy8gb25seSBzZXQgdGhlc2UgaWYgdGhlcmUgaXMgYSBnYXVnZSBzZXJpZXMKICAgICAgICB2YXIgc2V0b3B0cyA9IGZhbHNlOwogICAgICAgIGlmIChvcHRpb25zLnNlcmllc0RlZmF1bHRzLnJlbmRlcmVyID09ICQuanFwbG90Lk1ldGVyR2F1Z2VSZW5kZXJlcikgewogICAgICAgICAgICBzZXRvcHRzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5zZXJpZXMpIHsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpIDwgb3B0aW9ucy5zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNlcmllc1tpXS5yZW5kZXJlciA9PSAkLmpxcGxvdC5NZXRlckdhdWdlUmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICAgICBzZXRvcHRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc2V0b3B0cykgewogICAgICAgICAgICBvcHRpb25zLmF4ZXNEZWZhdWx0cy5yZW5kZXJlciA9ICQuanFwbG90Lk1ldGVyR2F1Z2VBeGlzUmVuZGVyZXI7CiAgICAgICAgICAgIG9wdGlvbnMubGVnZW5kLnJlbmRlcmVyID0gJC5qcXBsb3QuTWV0ZXJHYXVnZUxlZ2VuZFJlbmRlcmVyOwogICAgICAgICAgICBvcHRpb25zLmxlZ2VuZC5wcmVEcmF3ID0gdHJ1ZTsKICAgICAgICAgICAgb3B0aW9ucy5ncmlkLmJhY2tncm91bmQgPSBvcHRpb25zLmdyaWQuYmFja2dyb3VuZCB8fCAnd2hpdGUnOwogICAgICAgICAgICBvcHRpb25zLmdyaWQuZHJhd0dyaWRsaW5lcyA9IGZhbHNlOwogICAgICAgICAgICBvcHRpb25zLmdyaWQuYm9yZGVyV2lkdGggPSAob3B0aW9ucy5ncmlkLmJvcmRlcldpZHRoICE9IG51bGwpID8gb3B0aW9ucy5ncmlkLmJvcmRlcldpZHRoIDogMDsKICAgICAgICAgICAgb3B0aW9ucy5ncmlkLnNoYWRvdyA9IChvcHRpb25zLmdyaWQuc2hhZG93ICE9IG51bGwpID8gb3B0aW9ucy5ncmlkLnNoYWRvdyA6IGZhbHNlOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgcGxvdAogICAgZnVuY3Rpb24gcG9zdFBhcnNlT3B0aW9ucyhvcHRpb25zKSB7CiAgICAgICAgLy8KICAgIH0KICAgIAogICAgJC5qcXBsb3QucHJlSW5pdEhvb2tzLnB1c2gocHJlSW5pdCk7CiAgICAkLmpxcGxvdC5wb3N0UGFyc2VPcHRpb25zSG9va3MucHVzaChwb3N0UGFyc2VPcHRpb25zKTsKICAgIAogICAgJC5qcXBsb3QuTWV0ZXJHYXVnZVRpY2tSZW5kZXJlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICQuanFwbG90LkF4aXNUaWNrUmVuZGVyZXIuY2FsbCh0aGlzKTsKICAgIH07CiAgICAKICAgICQuanFwbG90Lk1ldGVyR2F1Z2VUaWNrUmVuZGVyZXIucHJvdG90eXBlID0gbmV3ICQuanFwbG90LkF4aXNUaWNrUmVuZGVyZXIoKTsKICAgICQuanFwbG90Lk1ldGVyR2F1Z2VUaWNrUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJC5qcXBsb3QuTWV0ZXJHYXVnZVRpY2tSZW5kZXJlcjsKICAgIAp9KShqUXVlcnkpOwogICAgCiAgICAK]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.meterGaugeRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGMpe2MuanFwbG90Lk1ldGVyR2F1Z2VSZW5kZXJlcj1mdW5jdGlvbigpe2MuanFwbG90LkxpbmVSZW5kZXJlci5jYWxsKHRoaXMpfTtjLmpxcGxvdC5NZXRlckdhdWdlUmVuZGVyZXIucHJvdG90eXBlPW5ldyBjLmpxcGxvdC5MaW5lUmVuZGVyZXIoKTtjLmpxcGxvdC5NZXRlckdhdWdlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWMuanFwbG90Lk1ldGVyR2F1Z2VSZW5kZXJlcjtjLmpxcGxvdC5NZXRlckdhdWdlUmVuZGVyZXIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oZSl7dGhpcy5kaWFtZXRlcj1udWxsO3RoaXMucGFkZGluZz1udWxsO3RoaXMuc2hhZG93T2Zmc2V0PTI7dGhpcy5zaGFkb3dBbHBoYT0wLjA3O3RoaXMuc2hhZG93RGVwdGg9NDt0aGlzLmJhY2tncm91bmQ9IiNlZmVmZWYiO3RoaXMucmluZ0NvbG9yPSIjQkJDNkQwIjt0aGlzLm5lZWRsZUNvbG9yPSIjQzNEM0U1Ijt0aGlzLnRpY2tDb2xvcj0iIzk4OTg5OCI7dGhpcy5yaW5nV2lkdGg9bnVsbDt0aGlzLm1pbjt0aGlzLm1heDt0aGlzLnRpY2tzPVtdO3RoaXMuc2hvd1RpY2tzPXRydWU7dGhpcy5zaG93VGlja0xhYmVscz10cnVlO3RoaXMubGFiZWw9bnVsbDt0aGlzLmxhYmVsSGVpZ2h0QWRqdXN0PTA7dGhpcy5sYWJlbFBvc2l0aW9uPSJpbnNpZGUiO3RoaXMuaW50ZXJ2YWxzPVtdO3RoaXMuaW50ZXJ2YWxDb2xvcnM9WyIjNGJiMmM1IiwiI0VBQTIyOCIsIiNjNWI0N2YiLCIjNTc5NTc1IiwiIzgzOTU1NyIsIiM5NThjMTIiLCIjOTUzNTc5IiwiIzRiNWRlNCIsIiNkOGI4M2YiLCIjZmY1ODAwIiwiIzAwODVjYyIsIiNjNzQ3YTMiLCIjY2RkZjU0IiwiI0ZCRDE3OCIsIiMyNkI0RTMiLCIjYmQ3MGM3Il07dGhpcy5pbnRlcnZhbElubmVyUmFkaXVzPW51bGw7dGhpcy5pbnRlcnZhbE91dGVyUmFkaXVzPW51bGw7dGhpcy50aWNrUmVuZGVyZXI9Yy5qcXBsb3QuTWV0ZXJHYXVnZVRpY2tSZW5kZXJlcjt0aGlzLnRpY2tQb3NpdGlvbnM9WzEsMiwyLjUsNSwxMF07dGhpcy50aWNrU3BhY2luZz0zMDt0aGlzLm51bWJlck1pbm9yVGlja3M9bnVsbDt0aGlzLmh1YlJhZGl1cz1udWxsO3RoaXMudGlja1BhZGRpbmc9bnVsbDt0aGlzLm5lZWRsZVRoaWNrbmVzcz1udWxsO3RoaXMubmVlZGxlUGFkPTY7dGhpcy5wZWdOZWVkbGU9dHJ1ZTt0aGlzLl90eXBlPSJtZXRlckdhdWdlIjtjLmV4dGVuZCh0cnVlLHRoaXMsZSk7dGhpcy50eXBlPW51bGw7dGhpcy5udW1iZXJUaWNrcz1udWxsO3RoaXMudGlja0ludGVydmFsPW51bGw7dGhpcy5zcGFuPTE4MDtpZih0aGlzLnR5cGU9PSJjaXJjdWxhciIpe3RoaXMuc2VtaUNpcmN1bGFyPWZhbHNlfWVsc2V7aWYodGhpcy50eXBlIT0iY2lyY3VsYXIiKXt0aGlzLnNlbWlDaXJjdWxhcj10cnVlfWVsc2V7dGhpcy5zZW1pQ2lyY3VsYXI9KHRoaXMuc3Bhbjw9MTgwKT90cnVlOmZhbHNlfX10aGlzLl90aWNrUG9pbnRzPVtdO3RoaXMuX2xhYmVsRWxlbT1udWxsO3RoaXMuc3RhcnRBbmdsZT0oOTArKDM2MC10aGlzLnNwYW4pLzIpKk1hdGguUEkvMTgwO3RoaXMuZW5kQW5nbGU9KDkwLSgzNjAtdGhpcy5zcGFuKS8yKSpNYXRoLlBJLzE4MDt0aGlzLnNldG1pbj0hISh0aGlzLm1pbj09bnVsbCk7dGhpcy5zZXRtYXg9ISEodGhpcy5tYXg9PW51bGwpO2lmKHRoaXMuaW50ZXJ2YWxzLmxlbmd0aCl7aWYodGhpcy5pbnRlcnZhbHNbMF0ubGVuZ3RoPT1udWxsfHx0aGlzLmludGVydmFscy5sZW5ndGg9PTEpe2Zvcih2YXIgZj0wO2Y8dGhpcy5pbnRlcnZhbHMubGVuZ3RoO2YrKyl7dGhpcy5pbnRlcnZhbHNbZl09W3RoaXMuaW50ZXJ2YWxzW2ZdLHRoaXMuaW50ZXJ2YWxzW2ZdLHRoaXMuaW50ZXJ2YWxDb2xvcnNbZl1dfX1lbHNle2lmKHRoaXMuaW50ZXJ2YWxzWzBdLmxlbmd0aD09Mil7Zm9yKGY9MDtmPHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDtmKyspe3RoaXMuaW50ZXJ2YWxzW2ZdPVt0aGlzLmludGVydmFsc1tmXVswXSx0aGlzLmludGVydmFsc1tmXVsxXSx0aGlzLmludGVydmFsQ29sb3JzW2ZdXX19fX1pZih0aGlzLnRpY2tzLmxlbmd0aCl7aWYodGhpcy50aWNrc1swXS5sZW5ndGg9PW51bGx8fHRoaXMudGlja3NbMF0ubGVuZ3RoPT0xKXtmb3IodmFyIGY9MDtmPHRoaXMudGlja3MubGVuZ3RoO2YrKyl7dGhpcy50aWNrc1tmXT1bdGhpcy50aWNrc1tmXSx0aGlzLnRpY2tzW2ZdXX19dGhpcy5taW49KHRoaXMubWluPT1udWxsKT90aGlzLnRpY2tzWzBdWzBdOnRoaXMubWluO3RoaXMubWF4PSh0aGlzLm1heD09bnVsbCk/dGhpcy50aWNrc1t0aGlzLnRpY2tzLmxlbmd0aC0xXVswXTp0aGlzLm1heDt0aGlzLnNldG1pbj1mYWxzZTt0aGlzLnNldG1heD1mYWxzZTt0aGlzLm51bWJlclRpY2tzPXRoaXMudGlja3MubGVuZ3RoO3RoaXMudGlja0ludGVydmFsPXRoaXMudGlja3NbMV1bMF0tdGhpcy50aWNrc1swXVswXTt0aGlzLnRpY2tGYWN0b3I9TWF0aC5mbG9vcihwYXJzZUZsb2F0KChNYXRoLmxvZyh0aGlzLnRpY2tJbnRlcnZhbCkvTWF0aC5sb2coMTApKS50b0ZpeGVkKDExKSkpO3RoaXMubnVtYmVyTWlub3JUaWNrcz1iKHRoaXMudGlja1Bvc2l0aW9ucyx0aGlzLnRpY2tJbnRlcnZhbCx0aGlzLnRpY2tGYWN0b3IpO2lmKCF0aGlzLm51bWJlck1pbm9yVGlja3Mpe3RoaXMubnVtYmVyTWlub3JUaWNrcz1iKHRoaXMudGlja1Bvc2l0aW9ucyx0aGlzLnRpY2tJbnRlcnZhbCx0aGlzLnRpY2tGYWN0b3ItMSl9aWYoIXRoaXMubnVtYmVyTWlub3JUaWNrcyl7dGhpcy5udW1iZXJNaW5vclRpY2tzPTF9fWVsc2V7aWYodGhpcy5pbnRlcnZhbHMubGVuZ3RoKXt0aGlzLm1pbj0odGhpcy5taW49PW51bGwpPzA6dGhpcy5taW47dGhpcy5zZXRtaW49ZmFsc2U7aWYodGhpcy5tYXg9PW51bGwpe2lmKHRoaXMuaW50ZXJ2YWxzW3RoaXMuaW50ZXJ2YWxzLmxlbmd0aC0xXVswXT49dGhpcy5kYXRhWzBdWzFdKXt0aGlzLm1heD10aGlzLmludGVydmFsc1t0aGlzLmludGVydmFscy5sZW5ndGgtMV1bMF07dGhpcy5zZXRtYXg9ZmFsc2V9fWVsc2V7dGhpcy5zZXRtYXg9ZmFsc2V9fWVsc2V7dGhpcy5taW49KHRoaXMubWluPT1udWxsKT8wOnRoaXMubWluO3RoaXMuc2V0bWluPWZhbHNlO2lmKHRoaXMubWF4PT1udWxsKXt0aGlzLm1heD10aGlzLmRhdGFbMF1bMV0qMS4yNTt0aGlzLnNldG1heD10cnVlfWVsc2V7dGhpcy5zZXRtYXg9ZmFsc2V9fX19O2MuanFwbG90Lk1ldGVyR2F1Z2VSZW5kZXJlci5wcm90b3R5cGUuc2V0R3JpZERhdGE9ZnVuY3Rpb24oail7dmFyIGY9W107dmFyIGs9W107dmFyIGU9dGhpcy5zdGFydEFuZ2xlO2Zvcih2YXIgaD0wO2g8dGhpcy5kYXRhLmxlbmd0aDtoKyspe2YucHVzaCh0aGlzLmRhdGFbaF1bMV0pO2sucHVzaChbdGhpcy5kYXRhW2hdWzBdXSk7aWYoaD4wKXtmW2hdKz1mW2gtMV19fXZhciBnPU1hdGguUEkqMi9mW2YubGVuZ3RoLTFdO2Zvcih2YXIgaD0wO2g8Zi5sZW5ndGg7aCsrKXtrW2hdWzFdPWZbaF0qZ310aGlzLmdyaWREYXRhPWt9O2MuanFwbG90Lk1ldGVyR2F1Z2VSZW5kZXJlci5wcm90b3R5cGUubWFrZUdyaWREYXRhPWZ1bmN0aW9uKGosayl7dmFyIGY9W107dmFyIGw9W107dmFyIGU9dGhpcy5zdGFydEFuZ2xlO2Zvcih2YXIgaD0wO2g8ai5sZW5ndGg7aCsrKXtmLnB1c2goaltoXVsxXSk7bC5wdXNoKFtqW2hdWzBdXSk7aWYoaD4wKXtmW2hdKz1mW2gtMV19fXZhciBnPU1hdGguUEkqMi9mW2YubGVuZ3RoLTFdO2Zvcih2YXIgaD0wO2g8Zi5sZW5ndGg7aCsrKXtsW2hdWzFdPWZbaF0qZ31yZXR1cm4gbH07ZnVuY3Rpb24gYihqLGYsZyl7dmFyIGU7Zm9yKHZhciBoPWoubGVuZ3RoLTE7aD49MDtoLS0pe2U9Zi8oaltoXSpNYXRoLnBvdygxMCxnKSk7aWYoZT09NHx8ZT09NSl7cmV0dXJuIGUtMX19cmV0dXJuIG51bGx9Yy5qcXBsb3QuTWV0ZXJHYXVnZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKFgsYUMsYXApe3ZhciBhYTt2YXIgYU09KGFwIT11bmRlZmluZWQpP2FwOnt9O3ZhciBhaT0wO3ZhciBhaD0wO3ZhciBhdD0xO2lmKGFwLmxlZ2VuZEluZm8mJmFwLmxlZ2VuZEluZm8ucGxhY2VtZW50PT0iaW5zaWRlIil7dmFyIGFJPWFwLmxlZ2VuZEluZm87c3dpdGNoKGFJLmxvY2F0aW9uKXtjYXNlIm53IjphaT1hSS53aWR0aCthSS54b2Zmc2V0O2JyZWFrO2Nhc2UidyI6YWk9YUkud2lkdGgrYUkueG9mZnNldDticmVhaztjYXNlInN3IjphaT1hSS53aWR0aCthSS54b2Zmc2V0O2JyZWFrO2Nhc2UibmUiOmFpPWFJLndpZHRoK2FJLnhvZmZzZXQ7YXQ9LTE7YnJlYWs7Y2FzZSJlIjphaT1hSS53aWR0aCthSS54b2Zmc2V0O2F0PS0xO2JyZWFrO2Nhc2Uic2UiOmFpPWFJLndpZHRoK2FJLnhvZmZzZXQ7YXQ9LTE7YnJlYWs7Y2FzZSJuIjphaD1hSS5oZWlnaHQrYUkueW9mZnNldDticmVhaztjYXNlInMiOmFoPWFJLmhlaWdodCthSS55b2Zmc2V0O2F0PS0xO2JyZWFrO2RlZmF1bHQ6YnJlYWt9fWlmKHRoaXMubGFiZWwpe3RoaXMuX2xhYmVsRWxlbT1jKCc8ZGl2IGNsYXNzPSJqcXBsb3QtbWV0ZXJHYXVnZS1sYWJlbCIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyI+Jyt0aGlzLmxhYmVsKyI8L2Rpdj4iKTt0aGlzLmNhbnZhcy5fZWxlbS5hZnRlcih0aGlzLl9sYWJlbEVsZW0pfXZhciBtPShhTS5zaGFkb3chPXVuZGVmaW5lZCk/YU0uc2hhZG93OnRoaXMuc2hhZG93O3ZhciBOPShhTS5zaG93TGluZSE9dW5kZWZpbmVkKT9hTS5zaG93TGluZTp0aGlzLnNob3dMaW5lO3ZhciBJPShhTS5maWxsIT11bmRlZmluZWQpP2FNLmZpbGw6dGhpcy5maWxsO3ZhciBLPVguY2FudmFzLndpZHRoO3ZhciBTPVguY2FudmFzLmhlaWdodDtpZih0aGlzLnBhZGRpbmc9PW51bGwpe3RoaXMucGFkZGluZz1NYXRoLnJvdW5kKE1hdGgubWluKEssUykvMzApfXZhciBRPUstYWktMip0aGlzLnBhZGRpbmc7dmFyIGFiPVMtYWgtMip0aGlzLnBhZGRpbmc7aWYodGhpcy5sYWJlbFBvc2l0aW9uPT0iYm90dG9tIiYmdGhpcy5sYWJlbCl7YWItPXRoaXMuX2xhYmVsRWxlbS5vdXRlckhlaWdodCh0cnVlKX12YXIgTD1NYXRoLm1pbihRLGFiKTt2YXIgYWQ9TDtpZighdGhpcy5kaWFtZXRlcil7aWYodGhpcy5zZW1pQ2lyY3VsYXIpe2lmKFE+PTIqYWIpe2lmKCF0aGlzLnJpbmdXaWR0aCl7dGhpcy5yaW5nV2lkdGg9MiphYi8zNX10aGlzLm5lZWRsZVRoaWNrbmVzcz10aGlzLm5lZWRsZVRoaWNrbmVzc3x8MitNYXRoLnBvdyh0aGlzLnJpbmdXaWR0aCwwLjgpO3RoaXMuaW5uZXJQYWQ9dGhpcy5yaW5nV2lkdGgvMit0aGlzLm5lZWRsZVRoaWNrbmVzcy8yK3RoaXMubmVlZGxlUGFkO3RoaXMuZGlhbWV0ZXI9MiooYWItMip0aGlzLmlubmVyUGFkKX1lbHNle2lmKCF0aGlzLnJpbmdXaWR0aCl7dGhpcy5yaW5nV2lkdGg9US8zNX10aGlzLm5lZWRsZVRoaWNrbmVzcz10aGlzLm5lZWRsZVRoaWNrbmVzc3x8MitNYXRoLnBvdyh0aGlzLnJpbmdXaWR0aCwwLjgpO3RoaXMuaW5uZXJQYWQ9dGhpcy5yaW5nV2lkdGgvMit0aGlzLm5lZWRsZVRoaWNrbmVzcy8yK3RoaXMubmVlZGxlUGFkO3RoaXMuZGlhbWV0ZXI9US0yKnRoaXMuaW5uZXJQYWQtdGhpcy5yaW5nV2lkdGgtdGhpcy5wYWRkaW5nfXRoaXMuX2NlbnRlcj1bKEstYXQqYWkpLzIrYXQqYWksKFMrYXQqYWgtdGhpcy5wYWRkaW5nLXRoaXMucmluZ1dpZHRoLXRoaXMuaW5uZXJQYWQpXX1lbHNle2lmKCF0aGlzLnJpbmdXaWR0aCl7dGhpcy5yaW5nV2lkdGg9YWQvMzV9dGhpcy5uZWVkbGVUaGlja25lc3M9dGhpcy5uZWVkbGVUaGlja25lc3N8fDIrTWF0aC5wb3codGhpcy5yaW5nV2lkdGgsMC44KTt0aGlzLmlubmVyUGFkPTA7dGhpcy5kaWFtZXRlcj1hZC10aGlzLnJpbmdXaWR0aDt0aGlzLl9jZW50ZXI9WyhLLWF0KmFpKS8yK2F0KmFpLChTLWF0KmFoKS8yK2F0KmFoXX1pZih0aGlzLl9sYWJlbEVsZW0mJnRoaXMubGFiZWxQb3NpdGlvbj09ImJvdHRvbSIpe3RoaXMuX2NlbnRlclsxXS09dGhpcy5fbGFiZWxFbGVtLm91dGVySGVpZ2h0KHRydWUpfX10aGlzLl9yYWRpdXM9dGhpcy5kaWFtZXRlci8yO3RoaXMudGlja1NwYWNpbmc9NjAwMC90aGlzLmRpYW1ldGVyO2lmKCF0aGlzLmh1YlJhZGl1cyl7dGhpcy5odWJSYWRpdXM9dGhpcy5kaWFtZXRlci8xOH10aGlzLnNoYWRvd09mZnNldD0wLjUrdGhpcy5yaW5nV2lkdGgvOTt0aGlzLnNoYWRvd1dpZHRoPXRoaXMucmluZ1dpZHRoKjE7dGhpcy50aWNrUGFkZGluZz0zK01hdGgucG93KHRoaXMuZGlhbWV0ZXIvMjAsMC43KTt0aGlzLnRpY2tPdXRlclJhZGl1cz10aGlzLl9yYWRpdXMtdGhpcy5yaW5nV2lkdGgvMi10aGlzLnRpY2tQYWRkaW5nO3RoaXMudGlja0xlbmd0aD0odGhpcy5zaG93VGlja3MpP3RoaXMuX3JhZGl1cy8xMzowO2lmKHRoaXMudGlja3MubGVuZ3RoPT0wKXt2YXIgQT10aGlzLm1heCxhTD10aGlzLm1pbixxPXRoaXMuc2V0bWF4LGFHPXRoaXMuc2V0bWluLGF1PShBLWFMKSp0aGlzLnRpY2tTcGFjaW5nL3RoaXMuc3Bhbjt2YXIgYXc9TWF0aC5mbG9vcihwYXJzZUZsb2F0KChNYXRoLmxvZyhhdSkvTWF0aC5sb2coMTApKS50b0ZpeGVkKDExKSkpO3ZhciBhbj0oYXUvTWF0aC5wb3coMTAsYXcpKTsoYW4+MiYmYW48PTIuNSk/YW49Mi41OmFuPU1hdGguY2VpbChhbik7dmFyIFQ9dGhpcy50aWNrUG9zaXRpb25zO3ZhciBhQSxhaztmb3IoYWE9MDthYTxULmxlbmd0aDthYSsrKXtpZihhbj09VFthYV18fGFhJiZUW2FhLTFdPGFuJiZhbjxUW2FhXSl7YXU9VFthYV0qTWF0aC5wb3coMTAsYXcpO2FBPWFhfX1mb3IoYWE9MDthYTxULmxlbmd0aDthYSsrKXtpZihhbj09VFthYV18fGFhJiZUW2FhLTFdPGFuJiZhbjxUW2FhXSl7YXU9VFthYV0qTWF0aC5wb3coMTAsYXcpO2FrPU1hdGguY2VpbCgoQS1hTCkvYXUpfX1pZihxJiZhRyl7dmFyIGFQPShhTD4wKT9hTC1hTCVhdTphTC1hTCVhdS1hdTtpZighdGhpcy5mb3JjZVplcm8pe3ZhciBEPU1hdGgubWluKGFMLWFQLDAuOCphdSk7dmFyIG89TWF0aC5mbG9vcihEL1RbYUFdKTtpZihvPjEpe2FQPWFQK1RbYUFdKihvLTEpO2lmKHBhcnNlSW50KGFQLDEwKSE9YVAmJnBhcnNlSW50KGFQLVRbYUFdLDEwKT09YVAtVFthQV0pe2FQPWFQLVRbYUFdfX19aWYoYUw9PWFQKXthTC09YXV9ZWxzZXtpZihhTC1hUD4wLjIzKmF1KXthTD1hUH1lbHNle2FMPWFQLWF1O2FrKz0xfX1hays9MTt2YXIgRT1hTCsoYWstMSkqYXU7aWYoQT49RSl7RSs9YXU7YWsrPTF9aWYoRS1BPDAuMjMqYXUpe0UrPWF1O2FrKz0xfXRoaXMubWF4PUE9RTt0aGlzLm1pbj1hTDt0aGlzLnRpY2tJbnRlcnZhbD1hdTt0aGlzLm51bWJlclRpY2tzPWFrO3ZhciBPO2ZvcihhYT0wO2FhPGFrO2FhKyspe089cGFyc2VGbG9hdCgoYUwrYWEqYXUpLnRvRml4ZWQoMTEpKTt0aGlzLnRpY2tzLnB1c2goW08sT10pfXRoaXMubWF4PXRoaXMudGlja3NbYWstMV1bMV07dGhpcy50aWNrRmFjdG9yPWF3O3RoaXMubnVtYmVyTWlub3JUaWNrcz1iKHRoaXMudGlja1Bvc2l0aW9ucyx0aGlzLnRpY2tJbnRlcnZhbCx0aGlzLnRpY2tGYWN0b3IpO2lmKCF0aGlzLm51bWJlck1pbm9yVGlja3Mpe3RoaXMubnVtYmVyTWlub3JUaWNrcz1iKHRoaXMudGlja1Bvc2l0aW9ucyx0aGlzLnRpY2tJbnRlcnZhbCx0aGlzLnRpY2tGYWN0b3ItMSl9fWVsc2V7aWYocSl7dmFyIEU9YUwrKGFrLTEpKmF1O2lmKEE+PUUpe0E9RSthdTthays9MX1lbHNle0E9RX10aGlzLnRpY2tJbnRlcnZhbD10aGlzLnRpY2tJbnRlcnZhbHx8YXU7dGhpcy5udW1iZXJUaWNrcz10aGlzLm51bWJlclRpY2tzfHxhazt2YXIgTztmb3IoYWE9MDthYTx0aGlzLm51bWJlclRpY2tzO2FhKyspe089cGFyc2VGbG9hdCgoYUwrYWEqdGhpcy50aWNrSW50ZXJ2YWwpLnRvRml4ZWQoMTEpKTt0aGlzLnRpY2tzLnB1c2goW08sT10pfXRoaXMubWF4PXRoaXMudGlja3NbdGhpcy5udW1iZXJUaWNrcy0xXVsxXTt0aGlzLnRpY2tGYWN0b3I9YXc7dGhpcy5udW1iZXJNaW5vclRpY2tzPWIodGhpcy50aWNrUG9zaXRpb25zLHRoaXMudGlja0ludGVydmFsLHRoaXMudGlja0ZhY3Rvcik7aWYoIXRoaXMubnVtYmVyTWlub3JUaWNrcyl7dGhpcy5udW1iZXJNaW5vclRpY2tzPWIodGhpcy50aWNrUG9zaXRpb25zLHRoaXMudGlja0ludGVydmFsLHRoaXMudGlja0ZhY3Rvci0xKX19fWlmKCFxJiYhYUcpe3ZhciBQPXRoaXMubWF4LXRoaXMubWluO2F3PU1hdGguZmxvb3IocGFyc2VGbG9hdCgoTWF0aC5sb2coUCkvTWF0aC5sb2coMTApKS50b0ZpeGVkKDExKSkpLTE7dmFyIGFOPVs1LDYsNCw3LDMsOCw5LDEwLDJdLFYsQyxhdj0wLE07aWYoUD4xKXt2YXIgYUo9U3RyaW5nKFApO2lmKGFKLnNlYXJjaCgvXC4vKT09LTEpe3ZhciBhRj1hSi5zZWFyY2goLzArJC8pO2F2PShhRj4wKT9hSi5sZW5ndGgtYUYtMTowfX1NPVAvTWF0aC5wb3coMTAsYXYpO2ZvcihhYT0wO2FhPGFOLmxlbmd0aDthYSsrKXtWPU0vKGFOW2FhXS0xKTtpZihWPT1wYXJzZUludChWLDEwKSl7dGhpcy5udW1iZXJUaWNrcz1hTlthYV07dGhpcy50aWNrSW50ZXJ2YWw9UC8odGhpcy5udW1iZXJUaWNrcy0xKTt0aGlzLnRpY2tGYWN0b3I9YXcrMTticmVha319dmFyIE87Zm9yKGFhPTA7YWE8dGhpcy5udW1iZXJUaWNrczthYSsrKXtPPXBhcnNlRmxvYXQoKHRoaXMubWluK2FhKnRoaXMudGlja0ludGVydmFsKS50b0ZpeGVkKDExKSk7dGhpcy50aWNrcy5wdXNoKFtPLE9dKX10aGlzLm51bWJlck1pbm9yVGlja3M9Yih0aGlzLnRpY2tQb3NpdGlvbnMsdGhpcy50aWNrSW50ZXJ2YWwsdGhpcy50aWNrRmFjdG9yKTtpZighdGhpcy5udW1iZXJNaW5vclRpY2tzKXt0aGlzLm51bWJlck1pbm9yVGlja3M9Yih0aGlzLnRpY2tQb3NpdGlvbnMsdGhpcy50aWNrSW50ZXJ2YWwsdGhpcy50aWNrRmFjdG9yLTEpfWlmKCF0aGlzLm51bWJlck1pbm9yVGlja3Mpe3RoaXMubnVtYmVyTWlub3JUaWNrcz0xO3ZhciBhSD1bNCw1LDMsNiwyXTtmb3IoYWE9MDthYTw1O2FhKyspe3ZhciBhbz10aGlzLnRpY2tJbnRlcnZhbC9hSFthYV07aWYoYW89PXBhcnNlSW50KGFvLDEwKSl7dGhpcy5udW1iZXJNaW5vclRpY2tzPWFIW2FhXS0xO2JyZWFrfX19fX12YXIgVT10aGlzLl9yYWRpdXMsYUU9dGhpcy5zdGFydEFuZ2xlLGs9dGhpcy5lbmRBbmdsZSxIPU1hdGguUEksZT1NYXRoLlBJLzI7aWYodGhpcy5zZW1pQ2lyY3VsYXIpe3ZhciB6PU1hdGguYXRhbih0aGlzLmlubmVyUGFkL1UpLGFjPXRoaXMub3V0ZXJTdGFydEFuZ2xlPWFFLXosYUI9dGhpcy5vdXRlckVuZEFuZ2xlPWsreixCPXRoaXMuaHViU3RhcnRBbmdsZT1hRS1NYXRoLmF0YW4odGhpcy5pbm5lclBhZC90aGlzLmh1YlJhZGl1cyoyKSxhZj10aGlzLmh1YkVuZEFuZ2xlPWsrTWF0aC5hdGFuKHRoaXMuaW5uZXJQYWQvdGhpcy5odWJSYWRpdXMqMik7WC5zYXZlKCk7WC50cmFuc2xhdGUodGhpcy5fY2VudGVyWzBdLHRoaXMuX2NlbnRlclsxXSk7WC5saW5lSm9pbj0icm91bmQiO1gubGluZUNhcD0icm91bmQiO1guc2F2ZSgpO1guYmVnaW5QYXRoKCk7WC5maWxsU3R5bGU9dGhpcy5iYWNrZ3JvdW5kO1guYXJjKDAsMCxVLGFjLGFCLGZhbHNlKTtYLmNsb3NlUGF0aCgpO1guZmlsbCgpO1gucmVzdG9yZSgpO3ZhciBhaj0icmdiYSgwLDAsMCwiK3RoaXMuc2hhZG93QWxwaGErIikiO1guc2F2ZSgpO2Zvcih2YXIgYWE9MDthYTx0aGlzLnNoYWRvd0RlcHRoO2FhKyspe1gudHJhbnNsYXRlKHRoaXMuc2hhZG93T2Zmc2V0Kk1hdGguY29zKHRoaXMuc2hhZG93QW5nbGUvMTgwKk1hdGguUEkpLHRoaXMuc2hhZG93T2Zmc2V0Kk1hdGguc2luKHRoaXMuc2hhZG93QW5nbGUvMTgwKk1hdGguUEkpKTtYLmJlZ2luUGF0aCgpO1guc3Ryb2tlU3R5bGU9YWo7WC5saW5lV2lkdGg9dGhpcy5zaGFkb3dXaWR0aDtYLmFyYygwLDAsVSxhYyxhQixmYWxzZSk7WC5jbG9zZVBhdGgoKTtYLnN0cm9rZSgpfVgucmVzdG9yZSgpO1guc2F2ZSgpO3ZhciBhej1wYXJzZUludCgodGhpcy5zaGFkb3dEZXB0aCsxKS8yLDEwKTtmb3IodmFyIGFhPTA7YWE8YXo7YWErKyl7WC50cmFuc2xhdGUodGhpcy5zaGFkb3dPZmZzZXQqTWF0aC5jb3ModGhpcy5zaGFkb3dBbmdsZS8xODAqTWF0aC5QSSksdGhpcy5zaGFkb3dPZmZzZXQqTWF0aC5zaW4odGhpcy5zaGFkb3dBbmdsZS8xODAqTWF0aC5QSSkpO1guYmVnaW5QYXRoKCk7WC5maWxsU3R5bGU9YWo7WC5hcmMoMCwwLHRoaXMuaHViUmFkaXVzLEIsYWYsZmFsc2UpO1guY2xvc2VQYXRoKCk7WC5maWxsKCl9WC5yZXN0b3JlKCk7WC5zYXZlKCk7WC5iZWdpblBhdGgoKTtYLnN0cm9rZVN0eWxlPXRoaXMucmluZ0NvbG9yO1gubGluZVdpZHRoPXRoaXMucmluZ1dpZHRoO1guYXJjKDAsMCxVLGFjLGFCLGZhbHNlKTtYLmNsb3NlUGF0aCgpO1guc3Ryb2tlKCk7WC5yZXN0b3JlKCk7WC5zYXZlKCk7WC5iZWdpblBhdGgoKTtYLmZpbGxTdHlsZT10aGlzLnJpbmdDb2xvcjtYLmFyYygwLDAsdGhpcy5odWJSYWRpdXMsQixhZixmYWxzZSk7WC5jbG9zZVBhdGgoKTtYLmZpbGwoKTtYLnJlc3RvcmUoKTtpZih0aGlzLnNob3dUaWNrcyl7WC5zYXZlKCk7dmFyIGY9dGhpcy50aWNrT3V0ZXJSYWRpdXMsYXE9dGhpcy50aWNrTGVuZ3RoLHY9YXEvMixGPXRoaXMubnVtYmVyTWlub3JUaWNrcyxhbT10aGlzLnNwYW4qTWF0aC5QSS8xODAvKHRoaXMudGlja3MubGVuZ3RoLTEpLHA9YW0vKEYrMSk7Zm9yKGFhPTA7YWE8dGhpcy50aWNrcy5sZW5ndGg7YWErKyl7WC5iZWdpblBhdGgoKTtYLmxpbmVXaWR0aD0xLjUrdGhpcy5kaWFtZXRlci8zNjA7WC5zdHJva2VTdHlsZT10aGlzLnJpbmdDb2xvcjt2YXIgYWU9YW0qYWErYUU7WC5tb3ZlVG8oLWYqTWF0aC5jb3MoYW0qYWErYUUpLGYqTWF0aC5zaW4oYW0qYWErYUUpKTtYLmxpbmVUbygtKGYtYXEpKk1hdGguY29zKGFtKmFhK2FFKSwoZi1hcSkqTWF0aC5zaW4oYW0qYWErYUUpKTt0aGlzLl90aWNrUG9pbnRzLnB1c2goWyhmLWFxKSpNYXRoLmNvcyhhbSphYSthRSkrdGhpcy5fY2VudGVyWzBdK3RoaXMuY2FudmFzLl9vZmZzZXRzLmxlZnQsKGYtYXEpKk1hdGguc2luKGFtKmFhK2FFKSt0aGlzLl9jZW50ZXJbMV0rdGhpcy5jYW52YXMuX29mZnNldHMudG9wLGFtKmFhK2FFXSk7WC5zdHJva2UoKTtYLmxpbmVXaWR0aD0xK3RoaXMuZGlhbWV0ZXIvNDQwO2lmKGFhPHRoaXMudGlja3MubGVuZ3RoLTEpe2Zvcih2YXIgWT0xO1k8PUY7WSsrKXtYLmJlZ2luUGF0aCgpO1gubW92ZVRvKC1mKk1hdGguY29zKGFtKmFhK3AqWSthRSksZipNYXRoLnNpbihhbSphYStwKlkrYUUpKTtYLmxpbmVUbygtKGYtdikqTWF0aC5jb3MoYW0qYWErcCpZK2FFKSwoZi12KSpNYXRoLnNpbihhbSphYStwKlkrYUUpKTtYLnN0cm9rZSgpfX19WC5yZXN0b3JlKCl9aWYodGhpcy5zaG93VGlja0xhYmVscyl7dmFyIEosVyxULGFPLGcsRyxuPTA7dmFyIGFuPXRoaXMudGlja1BhZGRpbmcqKDEtMS8odGhpcy5kaWFtZXRlci84MCsxKSk7Zm9yKGFhPTA7YWE8dGhpcy50aWNrcy5sZW5ndGg7YWErKyl7Sj1jKCc8ZGl2IGNsYXNzPSJqcXBsb3QtbWV0ZXJHYXVnZS10aWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4nK3RoaXMudGlja3NbYWFdWzFdKyI8L2Rpdj4iKTt0aGlzLmNhbnZhcy5fZWxlbS5hZnRlcihKKTthTz1KLm91dGVyV2lkdGgodHJ1ZSk7Zz1KLm91dGVySGVpZ2h0KHRydWUpO1c9dGhpcy5fdGlja1BvaW50c1thYV1bMF0tYU8qKHRoaXMuX3RpY2tQb2ludHNbYWFdWzJdLU1hdGguUEkpL01hdGguUEktYW4qTWF0aC5jb3ModGhpcy5fdGlja1BvaW50c1thYV1bMl0pO1Q9dGhpcy5fdGlja1BvaW50c1thYV1bMV0tZy8yK2cvMipNYXRoLnBvdyhNYXRoLmFicygoTWF0aC5zaW4odGhpcy5fdGlja1BvaW50c1thYV1bMl0pKSksMC41KSthbi8zKk1hdGgucG93KE1hdGguYWJzKChNYXRoLnNpbih0aGlzLl90aWNrUG9pbnRzW2FhXVsyXSkpKSwwLjUpO0ouY3NzKHtsZWZ0OlcsdG9wOlQsY29sb3I6dGhpcy50aWNrQ29sb3J9KTtHPWFPKk1hdGguY29zKHRoaXMuX3RpY2tQb2ludHNbYWFdWzJdKStnKk1hdGguc2luKE1hdGguUEkvMit0aGlzLl90aWNrUG9pbnRzW2FhXVsyXS8yKTtuPShHPm4pP0c6bn19aWYodGhpcy5sYWJlbCYmdGhpcy5sYWJlbFBvc2l0aW9uPT0iaW5zaWRlIil7dmFyIFc9dGhpcy5fY2VudGVyWzBdK3RoaXMuY2FudmFzLl9vZmZzZXRzLmxlZnQ7dmFyIGFuPXRoaXMudGlja1BhZGRpbmcqKDEtMS8odGhpcy5kaWFtZXRlci84MCsxKSk7dmFyIFQ9MC41Kih0aGlzLl9jZW50ZXJbMV0rdGhpcy5jYW52YXMuX29mZnNldHMudG9wLXRoaXMuaHViUmFkaXVzKSswLjUqKHRoaXMuX2NlbnRlclsxXSt0aGlzLmNhbnZhcy5fb2Zmc2V0cy50b3AtdGhpcy50aWNrT3V0ZXJSYWRpdXMrdGhpcy50aWNrTGVuZ3RoK2FuKSt0aGlzLmxhYmVsSGVpZ2h0QWRqdXN0O1ctPXRoaXMuX2xhYmVsRWxlbS5vdXRlcldpZHRoKHRydWUpLzI7VC09dGhpcy5fbGFiZWxFbGVtLm91dGVySGVpZ2h0KHRydWUpLzI7dGhpcy5fbGFiZWxFbGVtLmNzcyh7bGVmdDpXLHRvcDpUfSl9ZWxzZXtpZih0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsUG9zaXRpb249PSJib3R0b20iKXt2YXIgVz10aGlzLl9jZW50ZXJbMF0rdGhpcy5jYW52YXMuX29mZnNldHMubGVmdC10aGlzLl9sYWJlbEVsZW0ub3V0ZXJXaWR0aCh0cnVlKS8yO3ZhciBUPXRoaXMuX2NlbnRlclsxXSt0aGlzLmNhbnZhcy5fb2Zmc2V0cy50b3ArdGhpcy5pbm5lclBhZCt0aGlzLnJpbmdXaWR0aCt0aGlzLnBhZGRpbmcrdGhpcy5sYWJlbEhlaWdodEFkanVzdDt0aGlzLl9sYWJlbEVsZW0uY3NzKHtsZWZ0OlcsdG9wOlR9KX19WC5zYXZlKCk7dmFyIGF4PXRoaXMuaW50ZXJ2YWxJbm5lclJhZGl1c3x8dGhpcy5odWJSYWRpdXMqMS41O2lmKHRoaXMuaW50ZXJ2YWxPdXRlclJhZGl1cz09bnVsbCl7aWYodGhpcy5zaG93VGlja0xhYmVscyl7dmFyIGFnPSh0aGlzLnRpY2tPdXRlclJhZGl1cy10aGlzLnRpY2tMZW5ndGgtdGhpcy50aWNrUGFkZGluZy10aGlzLmRpYW1ldGVyLzgpfWVsc2V7dmFyIGFnPSh0aGlzLnRpY2tPdXRlclJhZGl1cy10aGlzLnRpY2tMZW5ndGgtdGhpcy5kaWFtZXRlci8xNil9fWVsc2V7dmFyIGFnPXRoaXMuaW50ZXJ2YWxPdXRlclJhZGl1c312YXIgUD10aGlzLm1heC10aGlzLm1pbjt2YXIgYUQ9dGhpcy5pbnRlcnZhbHNbdGhpcy5pbnRlcnZhbHMubGVuZ3RoLTFdLXRoaXMubWluO3ZhciB5LFosdT10aGlzLnNwYW4qTWF0aC5QSS8xODA7Zm9yKGFhPTA7YWE8dGhpcy5pbnRlcnZhbHMubGVuZ3RoO2FhKyspe3k9KGFhPT0wKT9hRTphRSsodGhpcy5pbnRlcnZhbHNbYWEtMV1bMF0tdGhpcy5taW4pKnUvUDtpZih5PDApe3k9MH1aPWFFKyh0aGlzLmludGVydmFsc1thYV1bMF0tdGhpcy5taW4pKnUvUDtpZihaPDApe1o9MH1YLmJlZ2luUGF0aCgpO1guZmlsbFN0eWxlPXRoaXMuaW50ZXJ2YWxzW2FhXVsyXTtYLmFyYygwLDAsYXgseSxaLGZhbHNlKTtYLmxpbmVUbyhhZypNYXRoLmNvcyhaKSxhZypNYXRoLnNpbihaKSk7WC5hcmMoMCwwLGFnLFoseSx0cnVlKTtYLmxpbmVUbyhheCpNYXRoLmNvcyh5KSxheCpNYXRoLnNpbih5KSk7WC5jbG9zZVBhdGgoKTtYLmZpbGwoKX1YLnJlc3RvcmUoKTt2YXIgYXk9dGhpcy5kYXRhWzBdWzFdO3ZhciBSPXRoaXMubWF4LXRoaXMubWluO2lmKHRoaXMucGVnTmVlZGxlKXtpZih0aGlzLmRhdGFbMF1bMV0+dGhpcy5tYXgrUiozL3RoaXMuc3Bhbil7YXk9dGhpcy5tYXgrUiozL3RoaXMuc3Bhbn1pZih0aGlzLmRhdGFbMF1bMV08dGhpcy5taW4tUiozL3RoaXMuc3Bhbil7YXk9dGhpcy5taW4tUiozL3RoaXMuc3Bhbn19dmFyIGFsPShheS10aGlzLm1pbikvUip0aGlzLnNwYW4qTWF0aC5QSS8xODArdGhpcy5zdGFydEFuZ2xlO1guc2F2ZSgpO1guYmVnaW5QYXRoKCk7WC5maWxsU3R5bGU9dGhpcy5yaW5nQ29sb3I7WC5zdHJva2VTdHlsZT10aGlzLnJpbmdDb2xvcjt0aGlzLm5lZWRsZUxlbmd0aD0odGhpcy50aWNrT3V0ZXJSYWRpdXMtdGhpcy50aWNrTGVuZ3RoKSowLjg1O3RoaXMubmVlZGxlVGhpY2tuZXNzPSh0aGlzLm5lZWRsZVRoaWNrbmVzczwyKT8yOnRoaXMubmVlZGxlVGhpY2tuZXNzO3ZhciBhSz10aGlzLm5lZWRsZVRoaWNrbmVzcyowLjQ7dmFyIHg9dGhpcy5uZWVkbGVMZW5ndGgvMTA7dmFyIHM9KHRoaXMubmVlZGxlVGhpY2tuZXNzLWFLKS8xMDt2YXIgYXI7Zm9yKHZhciBhYT0wO2FhPDEwO2FhKyspe2FyPXRoaXMubmVlZGxlVGhpY2tuZXNzLWFhKnM7WC5tb3ZlVG8oeCphYSpNYXRoLmNvcyhhbCkseCphYSpNYXRoLnNpbihhbCkpO1gubGluZVdpZHRoPWFyO1gubGluZVRvKHgqKGFhKzEpKk1hdGguY29zKGFsKSx4KihhYSsxKSpNYXRoLnNpbihhbCkpO1guc3Ryb2tlKCl9WC5yZXN0b3JlKCl9ZWxzZXt0aGlzLl9jZW50ZXI9WyhLLWF0KmFpKS8yK2F0KmFpLChTLWF0KmFoKS8yK2F0KmFoXX19O2MuanFwbG90Lk1ldGVyR2F1Z2VBeGlzUmVuZGVyZXI9ZnVuY3Rpb24oKXtjLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIuY2FsbCh0aGlzKX07Yy5qcXBsb3QuTWV0ZXJHYXVnZUF4aXNSZW5kZXJlci5wcm90b3R5cGU9bmV3IGMuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlcigpO2MuanFwbG90Lk1ldGVyR2F1Z2VBeGlzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWMuanFwbG90Lk1ldGVyR2F1Z2VBeGlzUmVuZGVyZXI7Yy5qcXBsb3QuTWV0ZXJHYXVnZUF4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihlKXt0aGlzLnRpY2tSZW5kZXJlcj1jLmpxcGxvdC5NZXRlckdhdWdlVGlja1JlbmRlcmVyO2MuZXh0ZW5kKHRydWUsdGhpcyxlKTt0aGlzLl9kYXRhQm91bmRzPXttaW46MCxtYXg6MTAwfTt0aGlzLm1pbj0wO3RoaXMubWF4PTEwMDt0aGlzLnNob3dUaWNrcz1mYWxzZTt0aGlzLnRpY2tzPVtdO3RoaXMuc2hvd01hcms9ZmFsc2U7dGhpcy5zaG93PWZhbHNlfTtjLmpxcGxvdC5NZXRlckdhdWdlTGVnZW5kUmVuZGVyZXI9ZnVuY3Rpb24oKXtjLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyLmNhbGwodGhpcyl9O2MuanFwbG90Lk1ldGVyR2F1Z2VMZWdlbmRSZW5kZXJlci5wcm90b3R5cGU9bmV3IGMuanFwbG90LlRhYmxlTGVnZW5kUmVuZGVyZXIoKTtjLmpxcGxvdC5NZXRlckdhdWdlTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWMuanFwbG90Lk1ldGVyR2F1Z2VMZWdlbmRSZW5kZXJlcjtjLmpxcGxvdC5NZXRlckdhdWdlTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oZSl7dGhpcy5udW1iZXJSb3dzPW51bGw7dGhpcy5udW1iZXJDb2x1bW5zPW51bGw7Yy5leHRlbmQodHJ1ZSx0aGlzLGUpfTtjLmpxcGxvdC5NZXRlckdhdWdlTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtpZih0aGlzLnNob3cpe3ZhciBwPXRoaXMuX3Nlcmllczt2YXIgeD0icG9zaXRpb246YWJzb2x1dGU7Ijt4Kz0odGhpcy5iYWNrZ3JvdW5kKT8iYmFja2dyb3VuZDoiK3RoaXMuYmFja2dyb3VuZCsiOyI6IiI7eCs9KHRoaXMuYm9yZGVyKT8iYm9yZGVyOiIrdGhpcy5ib3JkZXIrIjsiOiIiO3grPSh0aGlzLmZvbnRTaXplKT8iZm9udC1zaXplOiIrdGhpcy5mb250U2l6ZSsiOyI6IiI7eCs9KHRoaXMuZm9udEZhbWlseSk/ImZvbnQtZmFtaWx5OiIrdGhpcy5mb250RmFtaWx5KyI7IjoiIjt4Kz0odGhpcy50ZXh0Q29sb3IpPyJjb2xvcjoiK3RoaXMudGV4dENvbG9yKyI7IjoiIjt4Kz0odGhpcy5tYXJnaW5Ub3AhPW51bGwpPyJtYXJnaW4tdG9wOiIrdGhpcy5tYXJnaW5Ub3ArIjsiOiIiO3grPSh0aGlzLm1hcmdpbkJvdHRvbSE9bnVsbCk/Im1hcmdpbi1ib3R0b206Iit0aGlzLm1hcmdpbkJvdHRvbSsiOyI6IiI7eCs9KHRoaXMubWFyZ2luTGVmdCE9bnVsbCk/Im1hcmdpbi1sZWZ0OiIrdGhpcy5tYXJnaW5MZWZ0KyI7IjoiIjt4Kz0odGhpcy5tYXJnaW5SaWdodCE9bnVsbCk/Im1hcmdpbi1yaWdodDoiK3RoaXMubWFyZ2luUmlnaHQrIjsiOiIiO3RoaXMuX2VsZW09YygnPHRhYmxlIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIiBzdHlsZT0iJyt4KyciPjwvdGFibGU+Jyk7dmFyIGY9ZmFsc2UscT1mYWxzZSx1LG87dmFyIHc9cFswXTtpZih3LnNob3cpe3ZhciB0PXcuZGF0YTtpZih0aGlzLm51bWJlclJvd3Mpe3U9dGhpcy5udW1iZXJSb3dzO2lmKCF0aGlzLm51bWJlckNvbHVtbnMpe289TWF0aC5jZWlsKHQubGVuZ3RoL3UpfWVsc2V7bz10aGlzLm51bWJlckNvbHVtbnN9fWVsc2V7aWYodGhpcy5udW1iZXJDb2x1bW5zKXtvPXRoaXMubnVtYmVyQ29sdW1uczt1PU1hdGguY2VpbCh0Lmxlbmd0aC90aGlzLm51bWJlckNvbHVtbnMpfWVsc2V7dT10Lmxlbmd0aDtvPTF9fXZhciBuLG0scixnLGUsbCxrLGg7dmFyIHY9MDtmb3Iobj0wO248dTtuKyspe2lmKHEpe3I9YygnPHRyIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIj48L3RyPicpLnByZXBlbmRUbyh0aGlzLl9lbGVtKX1lbHNle3I9YygnPHRyIGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kIj48L3RyPicpLmFwcGVuZFRvKHRoaXMuX2VsZW0pfWZvcihtPTA7bTxvO20rKyl7aWYodjx0Lmxlbmd0aCl7bD10aGlzLmxhYmVsc1t2XXx8dFt2XVswXS50b1N0cmluZygpO2g9dy5jb2xvcjtpZighcSl7aWYobj4wKXtmPXRydWV9ZWxzZXtmPWZhbHNlfX1lbHNle2lmKG49PXUtMSl7Zj1mYWxzZX1lbHNle2Y9dHJ1ZX19az0oZik/dGhpcy5yb3dTcGFjaW5nOiIwIjtnPWMoJzx0ZCBjbGFzcz0ianFwbG90LXRhYmxlLWxlZ2VuZCIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmctdG9wOicraysnOyI+PGRpdj48ZGl2IGNsYXNzPSJqcXBsb3QtdGFibGUtbGVnZW5kLXN3YXRjaCIgc3R5bGU9ImJvcmRlci1jb2xvcjonK2grJzsiPjwvZGl2PjwvZGl2PjwvdGQ+Jyk7ZT1jKCc8dGQgY2xhc3M9ImpxcGxvdC10YWJsZS1sZWdlbmQiIHN0eWxlPSJwYWRkaW5nLXRvcDonK2srJzsiPjwvdGQ+Jyk7aWYodGhpcy5lc2NhcGVIdG1sKXtlLnRleHQobCl9ZWxzZXtlLmh0bWwobCl9aWYocSl7ZS5wcmVwZW5kVG8ocik7Zy5wcmVwZW5kVG8ocil9ZWxzZXtnLmFwcGVuZFRvKHIpO2UuYXBwZW5kVG8ocil9Zj10cnVlfXYrK319fX1yZXR1cm4gdGhpcy5fZWxlbX07ZnVuY3Rpb24gYShqLGgsZil7Zj1mfHx7fTtmLmF4ZXNEZWZhdWx0cz1mLmF4ZXNEZWZhdWx0c3x8e307Zi5sZWdlbmQ9Zi5sZWdlbmR8fHt9O2Yuc2VyaWVzRGVmYXVsdHM9Zi5zZXJpZXNEZWZhdWx0c3x8e307Zi5ncmlkPWYuZ3JpZHx8e307dmFyIGU9ZmFsc2U7aWYoZi5zZXJpZXNEZWZhdWx0cy5yZW5kZXJlcj09Yy5qcXBsb3QuTWV0ZXJHYXVnZVJlbmRlcmVyKXtlPXRydWV9ZWxzZXtpZihmLnNlcmllcyl7Zm9yKHZhciBnPTA7ZzxmLnNlcmllcy5sZW5ndGg7ZysrKXtpZihmLnNlcmllc1tnXS5yZW5kZXJlcj09Yy5qcXBsb3QuTWV0ZXJHYXVnZVJlbmRlcmVyKXtlPXRydWV9fX19aWYoZSl7Zi5heGVzRGVmYXVsdHMucmVuZGVyZXI9Yy5qcXBsb3QuTWV0ZXJHYXVnZUF4aXNSZW5kZXJlcjtmLmxlZ2VuZC5yZW5kZXJlcj1jLmpxcGxvdC5NZXRlckdhdWdlTGVnZW5kUmVuZGVyZXI7Zi5sZWdlbmQucHJlRHJhdz10cnVlO2YuZ3JpZC5iYWNrZ3JvdW5kPWYuZ3JpZC5iYWNrZ3JvdW5kfHwid2hpdGUiO2YuZ3JpZC5kcmF3R3JpZGxpbmVzPWZhbHNlO2YuZ3JpZC5ib3JkZXJXaWR0aD0oZi5ncmlkLmJvcmRlcldpZHRoIT1udWxsKT9mLmdyaWQuYm9yZGVyV2lkdGg6MDtmLmdyaWQuc2hhZG93PShmLmdyaWQuc2hhZG93IT1udWxsKT9mLmdyaWQuc2hhZG93OmZhbHNlfX1mdW5jdGlvbiBkKGUpe31jLmpxcGxvdC5wcmVJbml0SG9va3MucHVzaChhKTtjLmpxcGxvdC5wb3N0UGFyc2VPcHRpb25zSG9va3MucHVzaChkKTtjLmpxcGxvdC5NZXRlckdhdWdlVGlja1JlbmRlcmVyPWZ1bmN0aW9uKCl7Yy5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlci5jYWxsKHRoaXMpfTtjLmpxcGxvdC5NZXRlckdhdWdlVGlja1JlbmRlcmVyLnByb3RvdHlwZT1uZXcgYy5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlcigpO2MuanFwbG90Lk1ldGVyR2F1Z2VUaWNrUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWMuanFwbG90Lk1ldGVyR2F1Z2VUaWNrUmVuZGVyZXJ9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.mobile.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxcGxvdC5qcXVlcnltb2JpbGUgcGx1Z2luCiAqIGpRdWVyeSBNb2JpbGUgdmlydHVhbCBldmVudCBzdXBwb3J0LgogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGFrYXNoaSBPa2Ftb3RvCiAqIGpxUGxvdCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gYWxsIHBlcnNvbmFsIG9yIGNvbW1lcmNpYWwgcHJvamVjdHMgCiAqIHVuZGVyIGJvdGggdGhlIE1JVCAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApIGFuZCBHUEwgCiAqIHZlcnNpb24gMi4wIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sKSBsaWNlbnNlcy4gVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gCiAqIGNob29zZSB0aGUgbGljZW5zZSB0aGF0IGJlc3Qgc3VpdHMgeW91ciBwcm9qZWN0IGFuZCB1c2UgaXQgYWNjb3JkaW5nbHkuIAogKgogKiBBbHRob3VnaCBub3QgcmVxdWlyZWQsIHRoZSBhdXRob3Igd291bGQgYXBwcmVjaWF0ZSBhbiBlbWFpbCBsZXR0aW5nIGhpbSAKICoga25vdyBvZiBhbnkgc3Vic3RhbnRpYWwgdXNlIG9mIGpxUGxvdC4gIFlvdSBjYW4gcmVhY2ggdGhlIGF1dGhvciBhdDogCiAqIGNocmlzIGF0IGpxcGxvdCBkb3QgY29tIG9yIHNlZSBodHRwOi8vd3d3LmpxcGxvdC5jb20vaW5mby5waHAgLgogKgogKiBJZiB5b3UgYXJlIGZlZWxpbmcga2luZCBhbmQgZ2VuZXJvdXMsIGNvbnNpZGVyIHN1cHBvcnRpbmcgdGhlIHByb2plY3QgYnkKICogbWFraW5nIGEgZG9uYXRpb24gYXQ6IGh0dHA6Ly93d3cuanFwbG90LmNvbS9kb25hdGUucGhwIC4KICoKICovCihmdW5jdGlvbigkKSB7CiAgICBmdW5jdGlvbiBwb3N0SW5pdCh0YXJnZXQsIGRhdGEsIG9wdGlvbnMpewogICAgICAgIHRoaXMuYmluZEN1c3RvbUV2ZW50cyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoJ3ZjbGljaycsIHtwbG90OnRoaXN9LCB0aGlzLm9uQ2xpY2spOwogICAgICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoJ2RibGNsaWNrJywge3Bsb3Q6dGhpc30sIHRoaXMub25EYmxDbGljayk7CiAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgndGFwaG9sZCcsIHtwbG90OnRoaXN9LCB0aGlzLm9uRGJsQ2xpY2spOwogICAgICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoJ3Ztb3VzZWRvd24nLCB7cGxvdDp0aGlzfSwgdGhpcy5vbk1vdXNlRG93bik7CiAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgndm1vdXNlbW92ZScsIHtwbG90OnRoaXN9LCB0aGlzLm9uTW91c2VNb3ZlKTsKICAgICAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCdtb3VzZWVudGVyJywge3Bsb3Q6dGhpc30sIHRoaXMub25Nb3VzZUVudGVyKTsKICAgICAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCdtb3VzZWxlYXZlJywge3Bsb3Q6dGhpc30sIHRoaXMub25Nb3VzZUxlYXZlKTsKICAgICAgICAgICAgaWYgKHRoaXMuY2FwdHVyZVJpZ2h0Q2xpY2spIHsKICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgndm1vdXNldXAnLCB7cGxvdDp0aGlzfSwgdGhpcy5vblJpZ2h0Q2xpY2spOwogICAgICAgICAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fZWxlbS5nZXQoMCkub25jb250ZXh0bWVudSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoJ3Ztb3VzZXVwJywge3Bsb3Q6dGhpc30sIHRoaXMub25Nb3VzZVVwKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdGhpcy5wbHVnaW5zLm1vYmlsZSA9IHRydWU7CiAgICB9CiAgICAkLmpxcGxvdC5wb3N0SW5pdEhvb2tzLnB1c2gocG9zdEluaXQpOwp9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.mobile.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGEoZSxkLGMpe3RoaXMuYmluZEN1c3RvbUV2ZW50cz1mdW5jdGlvbigpe3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgidmNsaWNrIix7cGxvdDp0aGlzfSx0aGlzLm9uQ2xpY2spO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgiZGJsY2xpY2siLHtwbG90OnRoaXN9LHRoaXMub25EYmxDbGljayk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCJ0YXBob2xkIix7cGxvdDp0aGlzfSx0aGlzLm9uRGJsQ2xpY2spO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgidm1vdXNlZG93biIse3Bsb3Q6dGhpc30sdGhpcy5vbk1vdXNlRG93bik7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCJ2bW91c2Vtb3ZlIix7cGxvdDp0aGlzfSx0aGlzLm9uTW91c2VNb3ZlKTt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoIm1vdXNlZW50ZXIiLHtwbG90OnRoaXN9LHRoaXMub25Nb3VzZUVudGVyKTt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoIm1vdXNlbGVhdmUiLHtwbG90OnRoaXN9LHRoaXMub25Nb3VzZUxlYXZlKTtpZih0aGlzLmNhcHR1cmVSaWdodENsaWNrKXt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoInZtb3VzZXVwIix7cGxvdDp0aGlzfSx0aGlzLm9uUmlnaHRDbGljayk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5nZXQoMCkub25jb250ZXh0bWVudT1mdW5jdGlvbigpe3JldHVybiBmYWxzZX19ZWxzZXt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoInZtb3VzZXVwIix7cGxvdDp0aGlzfSx0aGlzLm9uTW91c2VVcCl9fTt0aGlzLnBsdWdpbnMubW9iaWxlPXRydWV9Yi5qcXBsb3QucG9zdEluaXRIb29rcy5wdXNoKGEpfSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.ohlcRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLyoqCiAgICAgKiBDbGFzczogJC5qcXBsb3QuT0hMQ1JlbmRlcmVyCiAgICAgKiBqcVBsb3QgUGx1Z2luIHRvIGRyYXcgT3BlbiBIaSBMb3cgQ2xvc2UsIENhbmRsZXN0aWNrIGFuZCBIaSBMb3cgQ2xvc2UgY2hhcnRzLgogICAgICogCiAgICAgKiBUbyB1c2UgdGhpcyBwbHVnaW4sIGluY2x1ZGUgdGhlIHJlbmRlcmVyIGpzIGZpbGUgaW4gCiAgICAgKiB5b3VyIHNvdXJjZToKICAgICAqIAogICAgICogPiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJwbHVnaW5zL2pxcGxvdC5vaGxjUmVuZGVyZXIuanMiPjwvc2NyaXB0PgogICAgICogCiAgICAgKiBZb3Ugd2lsbCBtb3N0IGxpa2VseSB3YW50IHRvIHVzZSBhIGRhdGUgYXhpcyByZW5kZXJlcgogICAgICogZm9yIHRoZSB4IGF4aXMgYWxzbywgc28gaW5jbHVkZSB0aGUgZGF0ZSBheGlzIHJlbmRlciBqcyBmaWxlIGFsc286CiAgICAgKiAKICAgICAqID4gPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0icGx1Z2lucy9qcXBsb3QuZGF0ZUF4aXNSZW5kZXJlci5qcyI+PC9zY3JpcHQ+CiAgICAgKiAKICAgICAqIFRoZW4geW91IHNldCB0aGUgcmVuZGVyZXIgaW4gdGhlIHNlcmllcyBvcHRpb25zIG9uIHlvdXIgcGxvdDoKICAgICAqIAogICAgICogPiBzZXJpZXM6IFt7cmVuZGVyZXI6JC5qcXBsb3QuT0hMQ1JlbmRlcmVyfV0KICAgICAqIAogICAgICogRm9yIE9ITEMgYW5kIGNhbmRsZXN0aWNrIGNoYXJ0cywgZGF0YSBzaG91bGQgYmUgc3BlY2lmaWVkCiAgICAgKiBsaWtlIHNvOgogICAgICogCiAgICAgKiA+IGRhdCA9IFtbJzA3LzA2LzIwMDknLDEzOC43LDEzOS42OCwxMzUuMTgsMTM1LjRdLCBbJzA2LzI5LzIwMDknLDE0My40NiwxNDQuNjYsMTM5Ljc5LDE0MC4wMl0sIC4uLl0KICAgICAqIAogICAgICogSWYgdGhlIGRhdGEgYXJyYXkgaGFzIG9ubHkgNCB2YWx1ZXMgcGVyIHBvaW50IGluc3RlYWQgb2YgNSwKICAgICAqIHRoZSByZW5kZXJlciB3aWxsIGNyZWF0ZSBhIEhpIExvdyBDbG9zZSBjaGFydCBpbnN0ZWFkLiAgSW4gdGhhdCBjYXNlLAogICAgICogZGF0YSBzaG91bGQgYmUgc3VwcGxpZWQgbGlrZToKICAgICAqIAogICAgICogPiBkYXQgPSBbWycwNy8wNi8yMDA5JywxMzkuNjgsMTM1LjE4LDEzNS40XSwgWycwNi8yOS8yMDA5JywxNDQuNjYsMTM5Ljc5LDE0MC4wMl0sIC4uLl0KICAgICAqIAogICAgICogVG8gZ2VuZXJhdGUgYSBjYW5kbGVzdGljayBjaGFydCBpbnN0ZWFkIG9mIGFuIE9ITEMgY2hhcnQsCiAgICAgKiBzZXQgdGhlICJjYW5kbGVzdGljayIgb3B0aW9uIHRvIHRydWU6CiAgICAgKiAKICAgICAqID4gc2VyaWVzOiBbe3JlbmRlcmVyOiQuanFwbG90Lk9ITENSZW5kZXJlciwgcmVuZGVyZXJPcHRpb25zOntjYW5kbGVTdGljazp0cnVlfX1dLAogICAgICogCiAgICAgKi8KICAgICQuanFwbG90Lk9ITENSZW5kZXJlciA9IGZ1bmN0aW9uKCl7CiAgICAgICAgLy8gc3ViY2xhc3MgbGluZSByZW5kZXJlciB0byBtYWtlIHVzZSBvZiBzb21lIG9mIGl0cyBtZXRob2RzLgogICAgICAgICQuanFwbG90LkxpbmVSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgICAgIC8vIHByb3A6IGNhbmRsZVN0aWNrCiAgICAgICAgLy8gdHJ1ZSB0byByZW5kZXIgY2hhcnQgYXMgY2FuZGxlU3RpY2suCiAgICAgICAgLy8gTXVzdCBoYXZlIGFuIG9wZW4gcHJpY2UsIGNhbm5vdCBiZSBhIGhsYyBjaGFydC4KICAgICAgICB0aGlzLmNhbmRsZVN0aWNrID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogdGlja0xlbmd0aAogICAgICAgIC8vIGxlbmd0aCBvZiB0aGUgbGluZSBpbiBwaXhlbHMgaW5kaWNhdGluZyBvcGVuIGFuZCBjbG9zZSBwcmljZS4KICAgICAgICAvLyBEZWZhdWx0IHdpbGwgYXV0byBjYWxjdWxhdGUgYmFzZWQgb24gcGxvdCB3aWR0aCBhbmQgCiAgICAgICAgLy8gbnVtYmVyIG9mIHBvaW50cyBkaXNwbGF5ZWQuCiAgICAgICAgdGhpcy50aWNrTGVuZ3RoID0gJ2F1dG8nOwogICAgICAgIC8vIHByb3A6IGJvZHlXaWR0aAogICAgICAgIC8vIHdpZHRoIG9mIHRoZSBjYW5kbGVzdGljayBib2R5IGluIHBpeGVscy4gIERlZmF1bHQgd2lsbCBhdXRvIGNhbGN1bGF0ZQogICAgICAgIC8vIGJhc2VkIG9uIHBsb3Qgd2lkdGggYW5kIG51bWJlciBvZiBjYW5kbGVzdGlja3MgZGlzcGxheWVkLgogICAgICAgIHRoaXMuYm9keVdpZHRoID0gJ2F1dG8nOwogICAgICAgIC8vIHByb3A6IG9wZW5Db2xvcgogICAgICAgIC8vIGNvbG9yIG9mIHRoZSBvcGVuIHByaWNlIHRpY2sgbWFyay4gIERlZmF1bHQgaXMgc2VyaWVzIGNvbG9yLgogICAgICAgIHRoaXMub3BlbkNvbG9yID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBjbG9zZUNvbG9yCiAgICAgICAgLy8gY29sb3Igb2YgdGhlIGNsb3NlIHByaWNlIHRpY2sgbWFyay4gIERlZmF1bHQgaXMgc2VyaWVzIGNvbG9yLgogICAgICAgIHRoaXMuY2xvc2VDb2xvciA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogd2lja0NvbG9yCiAgICAgICAgLy8gY29sb3Igb2YgdGhlIGhpLWxvIGxpbmUgdGhvcnVnaCB0aGUgY2FuZGxlc3RpY2sgYm9keS4KICAgICAgICAvLyBEZWZhdWx0IGlzIHRoZSBzZXJpZXMgY29sb3IuCiAgICAgICAgdGhpcy53aWNrQ29sb3IgPSBudWxsOwogICAgICAgIC8vIHByb3A6IGZpbGxVcEJvZHkKICAgICAgICAvLyB0cnVlIHRvIHJlbmRlciBhbiAidXAiIGRheSAoY2xvc2UgcHJpY2UgZ3JlYXRlciB0aGFuIG9wZW4gcHJpY2UpCiAgICAgICAgLy8gd2l0aCBhIGZpbGxlZCBjYW5kbGVzdGljayBib2R5LgogICAgICAgIHRoaXMuZmlsbFVwQm9keSA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGZpbGxEb3duQm9keQogICAgICAgIC8vIHRydWUgdG8gcmVuZGVyIGEgImRvd24iIGRheSAoY2xvc2UgcHJpY2UgbG93ZXIgdGhhbiBvcGVuIHByaWNlKQogICAgICAgIC8vIHdpdGggYSBmaWxsZWQgY2FuZGxlc3RpY2sgYm9keS4KICAgICAgICB0aGlzLmZpbGxEb3duQm9keSA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogdXBCb2R5Q29sb3IKICAgICAgICAvLyBDb2xvciBvZiBjYW5kbGVzdGljayBib2R5IG9mIGFuICJ1cCIgZGF5LiAgRGVmYXVsdCBpcyBzZXJpZXMgY29sb3IuCiAgICAgICAgdGhpcy51cEJvZHlDb2xvciA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogZG93bkJvZHlDb2xvcgogICAgICAgIC8vIENvbG9yIG9mIGNhbmRsZXN0aWNrIGJvZHkgb24gYSAiZG93biIgZGF5LiAgRGVmYXVsdCBpcyBzZXJpZXMgY29sb3IuCiAgICAgICAgdGhpcy5kb3duQm9keUNvbG9yID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBobGMKICAgICAgICAvLyB0cnVlIGlmIGlzIGEgaGktbG93LWNsb3NlIGNoYXJ0IChubyBvcGVuIHByaWNlKS4KICAgICAgICAvLyBUaGlzIGlzIGRldGVybWluZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSBzZXJpZXMgZGF0YS4KICAgICAgICB0aGlzLmhsYyA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGxpbmVXaWR0aAogICAgICAgIC8vIFdpZHRoIG9mIHRoZSBoaS1sb3cgbGluZSBhbmQgb3Blbi9jbG9zZSB0aWNrcy4KICAgICAgICAvLyBNdXN0IGJlIHNldCBpbiB0aGUgcmVuZGVyZXJPcHRpb25zIGZvciB0aGUgc2VyaWVzLgogICAgICAgIHRoaXMubGluZVdpZHRoID0gMS41OwogICAgICAgIHRoaXMuX3RpY2tMZW5ndGg7CiAgICAgICAgdGhpcy5fYm9keVdpZHRoOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuT0hMQ1JlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5MaW5lUmVuZGVyZXIoKTsKICAgICQuanFwbG90Lk9ITENSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5PSExDUmVuZGVyZXI7CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIHNlcmllcy4KICAgICQuanFwbG90Lk9ITENSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICAvLyBsaW5lV2lkdGggaGFzIHRvIGJlIHNldCBvbiB0aGUgc2VyaWVzLCBjaGFuZ2VzIGluIHJlbmRlcmVyCiAgICAgICAgLy8gY29uc3RydWN0b3IgaGF2ZSBubyBlZmZlY3QuICBzZXQgdGhlIGRlZmF1bHQgaGVyZQogICAgICAgIC8vIGlmIG5vIHJlbmRlcmVyIG9wdGlvbiBmb3IgbGluZVdpZHRoIGlzIHNwZWNpZmllZC4KICAgICAgICB0aGlzLmxpbmVXaWR0aCA9IG9wdGlvbnMubGluZVdpZHRoIHx8IDEuNTsKICAgICAgICAkLmpxcGxvdC5MaW5lUmVuZGVyZXIucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzLCBvcHRpb25zKTsKICAgICAgICB0aGlzLl90eXBlID0gJ29obGMnOwogICAgICAgIC8vIHNldCB0aGUgeWF4aXMgZGF0YSBib3VuZHMgaGVyZSB0byBhY2NvdW50IGZvciBoaSBhbmQgbG93IHZhbHVlcwogICAgICAgIHZhciBkYiA9IHRoaXMuX3lheGlzLl9kYXRhQm91bmRzOwogICAgICAgIHZhciBkID0gdGhpcy5fcGxvdERhdGE7CiAgICAgICAgLy8gaWYgZGF0YSBwb2ludHMgaGF2ZSBsZXNzIHRoYW4gNSB2YWx1ZXMsIGZvcmNlIGEgaGxjIGNoYXJ0LgogICAgICAgIGlmIChkWzBdLmxlbmd0aCA8IDUpIHsKICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5obGMgPSB0cnVlOwoKICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPGQubGVuZ3RoOyBqKyspIHsgCiAgICAgICAgICAgICAgICBpZiAoZFtqXVsyXSA8IGRiLm1pbiB8fCBkYi5taW4gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGRiLm1pbiA9IGRbal1bMl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZFtqXVsxXSA+IGRiLm1heCB8fCBkYi5tYXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGRiLm1heCA9IGRbal1bMV07CiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgIAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8ZC5sZW5ndGg7IGorKykgeyAKICAgICAgICAgICAgICAgIGlmIChkW2pdWzNdIDwgZGIubWluIHx8IGRiLm1pbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgZGIubWluID0gZFtqXVszXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChkW2pdWzJdID4gZGIubWF4IHx8IGRiLm1heCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgZGIubWF4ID0gZFtqXVsyXTsKICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aGluIHNjb3BlIG9mIHNlcmllcy4KICAgICQuanFwbG90Lk9ITENSZW5kZXJlci5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKGN0eCwgZ2QsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgZCA9IHRoaXMuZGF0YTsKICAgICAgICB2YXIgeG1pbiA9IHRoaXMuX3hheGlzLm1pbjsKICAgICAgICB2YXIgeG1heCA9IHRoaXMuX3hheGlzLm1heDsKICAgICAgICAvLyBpbmRleCBvZiBsYXN0IHZhbHVlIGJlbG93IHJhbmdlIG9mIHBsb3QuCiAgICAgICAgdmFyIHhtaW5pZHggPSAwOwogICAgICAgIC8vIGluZGV4IG9mIGZpcnN0IHZhbHVlIGFib3ZlIHJhbmdlIG9mIHBsb3QuCiAgICAgICAgdmFyIHhtYXhpZHggPSBkLmxlbmd0aDsKICAgICAgICB2YXIgeHAgPSB0aGlzLl94YXhpcy5zZXJpZXNfdTJwOwogICAgICAgIHZhciB5cCA9IHRoaXMuX3lheGlzLnNlcmllc191MnA7CiAgICAgICAgdmFyIGksIHByZXZDb2xvciwgb3BzLCBiLCBoLCB3LCBhLCBwb2ludHM7CiAgICAgICAgdmFyIG87CiAgICAgICAgdmFyIHIgPSB0aGlzLnJlbmRlcmVyOwogICAgICAgIHZhciBvcHRzID0gKG9wdGlvbnMgIT0gdW5kZWZpbmVkKSA/IG9wdGlvbnMgOiB7fTsKICAgICAgICB2YXIgc2hhZG93ID0gKG9wdHMuc2hhZG93ICE9IHVuZGVmaW5lZCkgPyBvcHRzLnNoYWRvdyA6IHRoaXMuc2hhZG93OwogICAgICAgIHZhciBmaWxsID0gKG9wdHMuZmlsbCAhPSB1bmRlZmluZWQpID8gb3B0cy5maWxsIDogdGhpcy5maWxsOwogICAgICAgIHZhciBmaWxsQW5kU3Ryb2tlID0gKG9wdHMuZmlsbEFuZFN0cm9rZSAhPSB1bmRlZmluZWQpID8gb3B0cy5maWxsQW5kU3Ryb2tlIDogdGhpcy5maWxsQW5kU3Ryb2tlOwogICAgICAgIHIuYm9keVdpZHRoID0gKG9wdHMuYm9keVdpZHRoICE9IHVuZGVmaW5lZCkgPyBvcHRzLmJvZHlXaWR0aCA6IHIuYm9keVdpZHRoOwogICAgICAgIHIudGlja0xlbmd0aCA9IChvcHRzLnRpY2tMZW5ndGggIT0gdW5kZWZpbmVkKSA/IG9wdHMudGlja0xlbmd0aCA6IHIudGlja0xlbmd0aDsKICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgIGlmICh0aGlzLnNob3cpIHsKICAgICAgICAgICAgdmFyIHgsIG9wZW4sIGhpLCBsb3csIGNsb3NlOwogICAgICAgICAgICAvLyBuZWVkIHRvIGdldCB3aWR0aHMgYmFzZWQgb24gbnVtYmVyIG9mIHBvaW50cyBzaG93biwKICAgICAgICAgICAgLy8gbm90IG9uIHRvdGFsIG51bWJlciBvZiBwb2ludHMuICBVc2UgdGhlIHJlc3VsdHMgCiAgICAgICAgICAgIC8vIHRvIHNwZWVkIHVwIGRyYXdpbmcgaW4gbmV4dCBzdGVwLgogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8ZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKGRbaV1bMF0gPCB4bWluKSB7CiAgICAgICAgICAgICAgICAgICAgeG1pbmlkeCA9IGk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChkW2ldWzBdIDwgeG1heCkgewogICAgICAgICAgICAgICAgICAgIHhtYXhpZHggPSBpKzE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBkd2lkdGggPSB0aGlzLmdyaWREYXRhW3htYXhpZHgtMV1bMF0gLSB0aGlzLmdyaWREYXRhW3htaW5pZHhdWzBdOwogICAgICAgICAgICB2YXIgbnZpc2libGVQb2ludHMgPSB4bWF4aWR4IC0geG1pbmlkeDsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHZhciBkaW50ZXJ2YWwgPSBNYXRoLmFicyh0aGlzLl94YXhpcy5zZXJpZXNfdTJwKHBhcnNlSW50KHRoaXMuX3hheGlzLl9pbnRlcnZhbFN0YXRzWzBdLnNvcnRlZEludGVydmFsc1swXS5pbnRlcnZhbCwgMTApKSAtIHRoaXMuX3hheGlzLnNlcmllc191MnAoMCkpOyAKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIHZhciBkaW50ZXJ2YWwgPSBkd2lkdGggLyBudmlzaWJsZVBvaW50czsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHIuY2FuZGxlU3RpY2spIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yoci5ib2R5V2lkdGgpID09ICdudW1iZXInKSB7CiAgICAgICAgICAgICAgICAgICAgci5fYm9keVdpZHRoID0gci5ib2R5V2lkdGg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByLl9ib2R5V2lkdGggPSBNYXRoLm1pbigyMCwgZGludGVydmFsLzEuNjUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZihyLnRpY2tMZW5ndGgpID09ICdudW1iZXInKSB7CiAgICAgICAgICAgICAgICAgICAgci5fdGlja0xlbmd0aCA9IHIudGlja0xlbmd0aDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHIuX3RpY2tMZW5ndGggPSBNYXRoLm1pbigxMCwgZGludGVydmFsLzMuNSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAodmFyIGk9eG1pbmlkeDsgaTx4bWF4aWR4OyBpKyspIHsKICAgICAgICAgICAgICAgIHggPSB4cChkW2ldWzBdKTsKICAgICAgICAgICAgICAgIGlmIChyLmhsYykgewogICAgICAgICAgICAgICAgICAgIG9wZW4gPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGhpID0geXAoZFtpXVsxXSk7CiAgICAgICAgICAgICAgICAgICAgbG93ID0geXAoZFtpXVsyXSk7CiAgICAgICAgICAgICAgICAgICAgY2xvc2UgPSB5cChkW2ldWzNdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIG9wZW4gPSB5cChkW2ldWzFdKTsKICAgICAgICAgICAgICAgICAgICBoaSA9IHlwKGRbaV1bMl0pOwogICAgICAgICAgICAgICAgICAgIGxvdyA9IHlwKGRbaV1bM10pOwogICAgICAgICAgICAgICAgICAgIGNsb3NlID0geXAoZFtpXVs0XSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBvID0ge307CiAgICAgICAgICAgICAgICBpZiAoci5jYW5kbGVTdGljayAmJiAhci5obGMpIHsKICAgICAgICAgICAgICAgICAgICB3ID0gci5fYm9keVdpZHRoOwogICAgICAgICAgICAgICAgICAgIGEgPSB4IC0gdy8yOwogICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgY2FuZGxlCiAgICAgICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIGlmIGNhbmRsZSB1cCBvciBkb3duCiAgICAgICAgICAgICAgICAgICAgLy8gdXAsIHJlbWVtYmVyIGdyaWQgY29vcmRpbmF0ZXMgaW5jcmVhc2UgZG93bndhcmQKICAgICAgICAgICAgICAgICAgICBpZiAoY2xvc2UgPCBvcGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgd2ljawogICAgICAgICAgICAgICAgICAgICAgICBpZiAoci53aWNrQ29sb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8uY29sb3IgPSByLndpY2tDb2xvcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyLmRvd25Cb2R5Q29sb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8uY29sb3IgPSByLnVwQm9keUNvbG9yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG9wcyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRzLCBvKTsKICAgICAgICAgICAgICAgICAgICAgICAgci5zaGFwZVJlbmRlcmVyLmRyYXcoY3R4LCBbW3gsIGhpXSwgW3gsIGNsb3NlXV0sIG9wcyk7IAogICAgICAgICAgICAgICAgICAgICAgICByLnNoYXBlUmVuZGVyZXIuZHJhdyhjdHgsIFtbeCwgb3Blbl0sIFt4LCBsb3ddXSwgb3BzKTsgCiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGNsb3NlOwogICAgICAgICAgICAgICAgICAgICAgICBoID0gb3BlbiAtIGNsb3NlOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBjb2xvciBzcGVjaWZpZWQsIHVzZSBpdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5maWxsVXBCb2R5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLmZpbGxSZWN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8uc3Ryb2tlUmVjdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gdyAtIHRoaXMubGluZVdpZHRoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHggLSB3LzI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIudXBCb2R5Q29sb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8uY29sb3IgPSByLnVwQm9keUNvbG9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgby5maWxsU3R5bGUgPSByLnVwQm9keUNvbG9yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IFthLCBiLCB3LCBoXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gZG93bgogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNsb3NlID4gIG9wZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB3aWNrCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLndpY2tDb2xvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgby5jb2xvciA9IHIud2lja0NvbG9yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHIuZG93bkJvZHlDb2xvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgby5jb2xvciA9IHIuZG93bkJvZHlDb2xvcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBvcHMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgb3B0cywgbyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgW1t4LCBoaV0sIFt4LCBvcGVuXV0sIG9wcyk7IAogICAgICAgICAgICAgICAgICAgICAgICByLnNoYXBlUmVuZGVyZXIuZHJhdyhjdHgsIFtbeCwgY2xvc2VdLCBbeCwgbG93XV0sIG9wcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgbyA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgYiA9IG9wZW47CiAgICAgICAgICAgICAgICAgICAgICAgIGggPSBjbG9zZSAtIG9wZW47CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGNvbG9yIHNwZWNpZmllZCwgdXNlIGl0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLmZpbGxEb3duQm9keSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgby5maWxsUmVjdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLnN0cm9rZVJlY3QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IHcgLSB0aGlzLmxpbmVXaWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSB4IC0gdy8yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLmRvd25Cb2R5Q29sb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8uY29sb3IgPSByLmRvd25Cb2R5Q29sb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLmZpbGxTdHlsZSA9IHIuZG93bkJvZHlDb2xvcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBbYSwgYiwgdywgaF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4sIG9wZW4gPSBjbG9zZQogICAgICAgICAgICAgICAgICAgIGVsc2UgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB3aWNrCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLndpY2tDb2xvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgby5jb2xvciA9IHIud2lja0NvbG9yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG9wcyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRzLCBvKTsKICAgICAgICAgICAgICAgICAgICAgICAgci5zaGFwZVJlbmRlcmVyLmRyYXcoY3R4LCBbW3gsIGhpXSwgW3gsIGxvd11dLCBvcHMpOyAKICAgICAgICAgICAgICAgICAgICAgICAgbyA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICBvLmZpbGxSZWN0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIG8uc3Ryb2tlUmVjdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBhID0gW3ggLSB3LzIsIG9wZW5dOwogICAgICAgICAgICAgICAgICAgICAgICBiID0gW3ggKyB3LzIsIGNsb3NlXTsKICAgICAgICAgICAgICAgICAgICAgICAgdyA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIGggPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBbYSwgYl07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG9wcyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRzLCBvKTsKICAgICAgICAgICAgICAgICAgICByLnNoYXBlUmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50cywgb3BzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHByZXZDb2xvciA9IG9wdHMuY29sb3I7CiAgICAgICAgICAgICAgICAgICAgaWYgKHIub3BlbkNvbG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuY29sb3IgPSByLm9wZW5Db2xvcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyBvcGVuIHRpY2sKICAgICAgICAgICAgICAgICAgICBpZiAoIXIuaGxjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2hhcGVSZW5kZXJlci5kcmF3KGN0eCwgW1t4LXIuX3RpY2tMZW5ndGgsIG9wZW5dLCBbeCwgb3Blbl1dLCBvcHRzKTsgICAgCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG9wdHMuY29sb3IgPSBwcmV2Q29sb3I7CiAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB3aWNrCiAgICAgICAgICAgICAgICAgICAgaWYgKHIud2lja0NvbG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuY29sb3IgPSByLndpY2tDb2xvcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgci5zaGFwZVJlbmRlcmVyLmRyYXcoY3R4LCBbW3gsIGhpXSwgW3gsIGxvd11dLCBvcHRzKTsgCiAgICAgICAgICAgICAgICAgICAgb3B0cy5jb2xvciAgPSBwcmV2Q29sb3I7CiAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyBjbG9zZSB0aWNrCiAgICAgICAgICAgICAgICAgICAgaWYgKHIuY2xvc2VDb2xvcikgewogICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmNvbG9yID0gci5jbG9zZUNvbG9yOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByLnNoYXBlUmVuZGVyZXIuZHJhdyhjdHgsIFtbeCwgY2xvc2VdLCBbeCtyLl90aWNrTGVuZ3RoLCBjbG9zZV1dLCBvcHRzKTsgCiAgICAgICAgICAgICAgICAgICAgb3B0cy5jb2xvciA9IHByZXZDb2xvcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgfTsgIAogICAgCiAgICAkLmpxcGxvdC5PSExDUmVuZGVyZXIucHJvdG90eXBlLmRyYXdTaGFkb3cgPSBmdW5jdGlvbihjdHgsIGdkLCBvcHRpb25zKSB7CiAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wLCBzaGFkb3dzIGRyYXduIHdpdGggbGluZXMuCiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBwbG90LgogICAgJC5qcXBsb3QuT0hMQ1JlbmRlcmVyLmNoZWNrT3B0aW9ucyA9IGZ1bmN0aW9uKHRhcmdldCwgZGF0YSwgb3B0aW9ucykgewogICAgICAgIC8vIHByb3ZpZGUgc29tZSBzZW5zaWJsZSBoaWdobGlnaHRlciBvcHRpb25zIGJ5IGRlZmF1bHQKICAgICAgICAvLyBUaGVzZSBhcmVuJ3QgZ29vZCBmb3IgaGxjLCBvbmx5IGZvciBvaGxjIG9yIGNhbmRsZXN0aWNrCiAgICAgICAgaWYgKCFvcHRpb25zLmhpZ2hsaWdodGVyKSB7CiAgICAgICAgICAgIG9wdGlvbnMuaGlnaGxpZ2h0ZXIgPSB7CiAgICAgICAgICAgICAgICBzaG93TWFya2VyOmZhbHNlLAogICAgICAgICAgICAgICAgdG9vbHRpcEF4ZXM6ICd5JywKICAgICAgICAgICAgICAgIHl2YWx1ZXM6IDQsCiAgICAgICAgICAgICAgICBmb3JtYXRTdHJpbmc6Jzx0YWJsZSBjbGFzcz0ianFwbG90LWhpZ2hsaWdodGVyIj48dHI+PHRkPmRhdGU6PC90ZD48dGQ+JXM8L3RkPjwvdHI+PHRyPjx0ZD5vcGVuOjwvdGQ+PHRkPiVzPC90ZD48L3RyPjx0cj48dGQ+aGk6PC90ZD48dGQ+JXM8L3RkPjwvdHI+PHRyPjx0ZD5sb3c6PC90ZD48dGQ+JXM8L3RkPjwvdHI+PHRyPjx0ZD5jbG9zZTo8L3RkPjx0ZD4lczwvdGQ+PC90cj48L3RhYmxlPicKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICAvLyQuanFwbG90LnByZUluaXRIb29rcy5wdXNoKCQuanFwbG90Lk9ITENSZW5kZXJlci5jaGVja09wdGlvbnMpOwogICAgCn0pKGpRdWVyeSk7ICAgIAo=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.ohlcRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGEpe2EuanFwbG90Lk9ITENSZW5kZXJlcj1mdW5jdGlvbigpe2EuanFwbG90LkxpbmVSZW5kZXJlci5jYWxsKHRoaXMpO3RoaXMuY2FuZGxlU3RpY2s9ZmFsc2U7dGhpcy50aWNrTGVuZ3RoPSJhdXRvIjt0aGlzLmJvZHlXaWR0aD0iYXV0byI7dGhpcy5vcGVuQ29sb3I9bnVsbDt0aGlzLmNsb3NlQ29sb3I9bnVsbDt0aGlzLndpY2tDb2xvcj1udWxsO3RoaXMuZmlsbFVwQm9keT1mYWxzZTt0aGlzLmZpbGxEb3duQm9keT10cnVlO3RoaXMudXBCb2R5Q29sb3I9bnVsbDt0aGlzLmRvd25Cb2R5Q29sb3I9bnVsbDt0aGlzLmhsYz1mYWxzZTt0aGlzLmxpbmVXaWR0aD0xLjU7dGhpcy5fdGlja0xlbmd0aDt0aGlzLl9ib2R5V2lkdGh9O2EuanFwbG90Lk9ITENSZW5kZXJlci5wcm90b3R5cGU9bmV3IGEuanFwbG90LkxpbmVSZW5kZXJlcigpO2EuanFwbG90Lk9ITENSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3I9YS5qcXBsb3QuT0hMQ1JlbmRlcmVyO2EuanFwbG90Lk9ITENSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihlKXtlPWV8fHt9O3RoaXMubGluZVdpZHRoPWUubGluZVdpZHRofHwxLjU7YS5qcXBsb3QuTGluZVJlbmRlcmVyLnByb3RvdHlwZS5pbml0LmNhbGwodGhpcyxlKTt0aGlzLl90eXBlPSJvaGxjIjt2YXIgYj10aGlzLl95YXhpcy5fZGF0YUJvdW5kczt2YXIgZj10aGlzLl9wbG90RGF0YTtpZihmWzBdLmxlbmd0aDw1KXt0aGlzLnJlbmRlcmVyLmhsYz10cnVlO2Zvcih2YXIgYz0wO2M8Zi5sZW5ndGg7YysrKXtpZihmW2NdWzJdPGIubWlufHxiLm1pbj09bnVsbCl7Yi5taW49ZltjXVsyXX1pZihmW2NdWzFdPmIubWF4fHxiLm1heD09bnVsbCl7Yi5tYXg9ZltjXVsxXX19fWVsc2V7Zm9yKHZhciBjPTA7YzxmLmxlbmd0aDtjKyspe2lmKGZbY11bM108Yi5taW58fGIubWluPT1udWxsKXtiLm1pbj1mW2NdWzNdfWlmKGZbY11bMl0+Yi5tYXh8fGIubWF4PT1udWxsKXtiLm1heD1mW2NdWzJdfX19fTthLmpxcGxvdC5PSExDUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oQSxOLGope3ZhciBKPXRoaXMuZGF0YTt2YXIgdj10aGlzLl94YXhpcy5taW47dmFyIHo9dGhpcy5feGF4aXMubWF4O3ZhciBsPTA7dmFyIEs9Si5sZW5ndGg7dmFyIHA9dGhpcy5feGF4aXMuc2VyaWVzX3UycDt2YXIgRz10aGlzLl95YXhpcy5zZXJpZXNfdTJwO3ZhciBELEUsZixNLEYsbixPLEM7dmFyIHk7dmFyIHU9dGhpcy5yZW5kZXJlcjt2YXIgcz0oaiE9dW5kZWZpbmVkKT9qOnt9O3ZhciBrPShzLnNoYWRvdyE9dW5kZWZpbmVkKT9zLnNoYWRvdzp0aGlzLnNoYWRvdzt2YXIgQj0ocy5maWxsIT11bmRlZmluZWQpP3MuZmlsbDp0aGlzLmZpbGw7dmFyIGM9KHMuZmlsbEFuZFN0cm9rZSE9dW5kZWZpbmVkKT9zLmZpbGxBbmRTdHJva2U6dGhpcy5maWxsQW5kU3Ryb2tlO3UuYm9keVdpZHRoPShzLmJvZHlXaWR0aCE9dW5kZWZpbmVkKT9zLmJvZHlXaWR0aDp1LmJvZHlXaWR0aDt1LnRpY2tMZW5ndGg9KHMudGlja0xlbmd0aCE9dW5kZWZpbmVkKT9zLnRpY2tMZW5ndGg6dS50aWNrTGVuZ3RoO0Euc2F2ZSgpO2lmKHRoaXMuc2hvdyl7dmFyIG0scSxnLFEsdDtmb3IodmFyIEQ9MDtEPEoubGVuZ3RoO0QrKyl7aWYoSltEXVswXTx2KXtsPUR9ZWxzZXtpZihKW0RdWzBdPHope0s9RCsxfX19dmFyIEk9dGhpcy5ncmlkRGF0YVtLLTFdWzBdLXRoaXMuZ3JpZERhdGFbbF1bMF07dmFyIEw9Sy1sO3RyeXt2YXIgUD1NYXRoLmFicyh0aGlzLl94YXhpcy5zZXJpZXNfdTJwKHBhcnNlSW50KHRoaXMuX3hheGlzLl9pbnRlcnZhbFN0YXRzWzBdLnNvcnRlZEludGVydmFsc1swXS5pbnRlcnZhbCwxMCkpLXRoaXMuX3hheGlzLnNlcmllc191MnAoMCkpfWNhdGNoKEgpe3ZhciBQPUkvTH1pZih1LmNhbmRsZVN0aWNrKXtpZih0eXBlb2YodS5ib2R5V2lkdGgpPT0ibnVtYmVyIil7dS5fYm9keVdpZHRoPXUuYm9keVdpZHRofWVsc2V7dS5fYm9keVdpZHRoPU1hdGgubWluKDIwLFAvMS42NSl9fWVsc2V7aWYodHlwZW9mKHUudGlja0xlbmd0aCk9PSJudW1iZXIiKXt1Ll90aWNrTGVuZ3RoPXUudGlja0xlbmd0aH1lbHNle3UuX3RpY2tMZW5ndGg9TWF0aC5taW4oMTAsUC8zLjUpfX1mb3IodmFyIEQ9bDtEPEs7RCsrKXttPXAoSltEXVswXSk7aWYodS5obGMpe3E9bnVsbDtnPUcoSltEXVsxXSk7UT1HKEpbRF1bMl0pO3Q9RyhKW0RdWzNdKX1lbHNle3E9RyhKW0RdWzFdKTtnPUcoSltEXVsyXSk7UT1HKEpbRF1bM10pO3Q9RyhKW0RdWzRdKX15PXt9O2lmKHUuY2FuZGxlU3RpY2smJiF1LmhsYyl7bj11Ll9ib2R5V2lkdGg7Tz1tLW4vMjtpZih0PHEpe2lmKHUud2lja0NvbG9yKXt5LmNvbG9yPXUud2lja0NvbG9yfWVsc2V7aWYodS5kb3duQm9keUNvbG9yKXt5LmNvbG9yPXUudXBCb2R5Q29sb3J9fWY9YS5leHRlbmQodHJ1ZSx7fSxzLHkpO3Uuc2hhcGVSZW5kZXJlci5kcmF3KEEsW1ttLGddLFttLHRdXSxmKTt1LnNoYXBlUmVuZGVyZXIuZHJhdyhBLFtbbSxxXSxbbSxRXV0sZik7eT17fTtNPXQ7Rj1xLXQ7aWYodS5maWxsVXBCb2R5KXt5LmZpbGxSZWN0PXRydWV9ZWxzZXt5LnN0cm9rZVJlY3Q9dHJ1ZTtuPW4tdGhpcy5saW5lV2lkdGg7Tz1tLW4vMn1pZih1LnVwQm9keUNvbG9yKXt5LmNvbG9yPXUudXBCb2R5Q29sb3I7eS5maWxsU3R5bGU9dS51cEJvZHlDb2xvcn1DPVtPLE0sbixGXX1lbHNle2lmKHQ+cSl7aWYodS53aWNrQ29sb3Ipe3kuY29sb3I9dS53aWNrQ29sb3J9ZWxzZXtpZih1LmRvd25Cb2R5Q29sb3Ipe3kuY29sb3I9dS5kb3duQm9keUNvbG9yfX1mPWEuZXh0ZW5kKHRydWUse30scyx5KTt1LnNoYXBlUmVuZGVyZXIuZHJhdyhBLFtbbSxnXSxbbSxxXV0sZik7dS5zaGFwZVJlbmRlcmVyLmRyYXcoQSxbW20sdF0sW20sUV1dLGYpO3k9e307TT1xO0Y9dC1xO2lmKHUuZmlsbERvd25Cb2R5KXt5LmZpbGxSZWN0PXRydWV9ZWxzZXt5LnN0cm9rZVJlY3Q9dHJ1ZTtuPW4tdGhpcy5saW5lV2lkdGg7Tz1tLW4vMn1pZih1LmRvd25Cb2R5Q29sb3Ipe3kuY29sb3I9dS5kb3duQm9keUNvbG9yO3kuZmlsbFN0eWxlPXUuZG93bkJvZHlDb2xvcn1DPVtPLE0sbixGXX1lbHNle2lmKHUud2lja0NvbG9yKXt5LmNvbG9yPXUud2lja0NvbG9yfWY9YS5leHRlbmQodHJ1ZSx7fSxzLHkpO3Uuc2hhcGVSZW5kZXJlci5kcmF3KEEsW1ttLGddLFttLFFdXSxmKTt5PXt9O3kuZmlsbFJlY3Q9ZmFsc2U7eS5zdHJva2VSZWN0PWZhbHNlO089W20tbi8yLHFdO009W20rbi8yLHRdO249bnVsbDtGPW51bGw7Qz1bTyxNXX19Zj1hLmV4dGVuZCh0cnVlLHt9LHMseSk7dS5zaGFwZVJlbmRlcmVyLmRyYXcoQSxDLGYpfWVsc2V7RT1zLmNvbG9yO2lmKHUub3BlbkNvbG9yKXtzLmNvbG9yPXUub3BlbkNvbG9yfWlmKCF1LmhsYyl7dS5zaGFwZVJlbmRlcmVyLmRyYXcoQSxbW20tdS5fdGlja0xlbmd0aCxxXSxbbSxxXV0scyl9cy5jb2xvcj1FO2lmKHUud2lja0NvbG9yKXtzLmNvbG9yPXUud2lja0NvbG9yfXUuc2hhcGVSZW5kZXJlci5kcmF3KEEsW1ttLGddLFttLFFdXSxzKTtzLmNvbG9yPUU7aWYodS5jbG9zZUNvbG9yKXtzLmNvbG9yPXUuY2xvc2VDb2xvcn11LnNoYXBlUmVuZGVyZXIuZHJhdyhBLFtbbSx0XSxbbSt1Ll90aWNrTGVuZ3RoLHRdXSxzKTtzLmNvbG9yPUV9fX1BLnJlc3RvcmUoKX07YS5qcXBsb3QuT0hMQ1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3U2hhZG93PWZ1bmN0aW9uKGIsZCxjKXt9O2EuanFwbG90Lk9ITENSZW5kZXJlci5jaGVja09wdGlvbnM9ZnVuY3Rpb24oZCxjLGIpe2lmKCFiLmhpZ2hsaWdodGVyKXtiLmhpZ2hsaWdodGVyPXtzaG93TWFya2VyOmZhbHNlLHRvb2x0aXBBeGVzOiJ5Iix5dmFsdWVzOjQsZm9ybWF0U3RyaW5nOic8dGFibGUgY2xhc3M9ImpxcGxvdC1oaWdobGlnaHRlciI+PHRyPjx0ZD5kYXRlOjwvdGQ+PHRkPiVzPC90ZD48L3RyPjx0cj48dGQ+b3Blbjo8L3RkPjx0ZD4lczwvdGQ+PC90cj48dHI+PHRkPmhpOjwvdGQ+PHRkPiVzPC90ZD48L3RyPjx0cj48dGQ+bG93OjwvdGQ+PHRkPiVzPC90ZD48L3RyPjx0cj48dGQ+Y2xvc2U6PC90ZD48dGQ+JXM8L3RkPjwvdHI+PC90YWJsZT4nfX19fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.pieRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgLyoqCiAgICAgKiBDbGFzczogJC5qcXBsb3QuUGllUmVuZGVyZXIKICAgICAqIFBsdWdpbiByZW5kZXJlciB0byBkcmF3IGEgcGllIGNoYXJ0LgogICAgICogeCB2YWx1ZXMsIGlmIHByZXNlbnQsIHdpbGwgYmUgdXNlZCBhcyBzbGljZSBsYWJlbHMuCiAgICAgKiB5IHZhbHVlcyBnaXZlIHNsaWNlIHNpemUuCiAgICAgKiAKICAgICAqIFRvIHVzZSB0aGlzIHJlbmRlcmVyLCB5b3UgbmVlZCB0byBpbmNsdWRlIHRoZSAKICAgICAqIHBpZSByZW5kZXJlciBwbHVnaW4sIGZvciBleGFtcGxlOgogICAgICogCiAgICAgKiA+IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InBsdWdpbnMvanFwbG90LnBpZVJlbmRlcmVyLmpzIj48L3NjcmlwdD4KICAgICAqIAogICAgICogUHJvcGVydGllcyBkZXNjcmliZWQgaGVyZSBhcmUgcGFzc2VkIGludG8gdGhlICQuanFwbG90IGZ1bmN0aW9uCiAgICAgKiBhcyBvcHRpb25zIG9uIHRoZSBzZXJpZXMgcmVuZGVyZXIuICBGb3IgZXhhbXBsZToKICAgICAqIAogICAgICogPiBwbG90MiA9ICQuanFwbG90KCdjaGFydDInLCBbczEsIHMyXSwgewogICAgICogPiAgICAgc2VyaWVzRGVmYXVsdHM6IHsKICAgICAqID4gICAgICAgICByZW5kZXJlcjokLmpxcGxvdC5QaWVSZW5kZXJlciwKICAgICAqID4gICAgICAgICByZW5kZXJlck9wdGlvbnM6ewogICAgICogPiAgICAgICAgICAgICAgc2xpY2VNYXJnaW46IDIsCiAgICAgKiA+ICAgICAgICAgICAgICBzdGFydEFuZ2xlOiAtOTAKICAgICAqID4gICAgICAgICAgfQogICAgICogPiAgICAgIH0KICAgICAqID4gfSk7CiAgICAgKiAKICAgICAqIEEgcGllIHBsb3Qgd2lsbCB0cmlnZ2VyIGV2ZW50cyBvbiB0aGUgcGxvdCB0YXJnZXQKICAgICAqIGFjY29yZGluZyB0byB1c2VyIGludGVyYWN0aW9uLiAgQWxsIGV2ZW50cyByZXR1cm4gdGhlIGV2ZW50IG9iamVjdCwKICAgICAqIHRoZSBzZXJpZXMgaW5kZXgsIHRoZSBwb2ludCAoc2xpY2UpIGluZGV4LCBhbmQgdGhlIHBvaW50IGRhdGEgZm9yIAogICAgICogdGhlIGFwcHJvcHJpYXRlIHNsaWNlLgogICAgICogCiAgICAgKiAnanFwbG90RGF0YU1vdXNlT3ZlcicgLSB0cmlnZ2VyZWQgd2hlbiB1c2VyIG1vdXNlaW5nIG92ZXIgYSBzbGljZS4KICAgICAqICdqcXBsb3REYXRhSGlnaGxpZ2h0JyAtIHRyaWdnZXJlZCB0aGUgZmlyc3QgdGltZSB1c2VyIG1vdXNlcyBvdmVyIGEgc2xpY2UsCiAgICAgKiBpZiBoaWdobGlnaHRpbmcgaXMgZW5hYmxlZC4KICAgICAqICdqcXBsb3REYXRhVW5oaWdobGlnaHQnIC0gdHJpZ2dlcmVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZSBvdXQgb2YKICAgICAqIGEgaGlnaGxpZ2h0ZWQgc2xpY2UuCiAgICAgKiAnanFwbG90RGF0YUNsaWNrJyAtIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiBhIHNsaWNlLgogICAgICogJ2pxcGxvdERhdGFSaWdodENsaWNrJyAtIHRpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgcmlnaHQgY2xpY2tzIG9uIGEgc2xpY2UgaWYKICAgICAqIHRoZSAiY2FwdHVyZVJpZ2h0Q2xpY2siIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSBvbiB0aGUgcGxvdC4KICAgICAqLwogICAgJC5qcXBsb3QuUGllUmVuZGVyZXIgPSBmdW5jdGlvbigpewogICAgICAgICQuanFwbG90LkxpbmVSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuUGllUmVuZGVyZXIucHJvdG90eXBlID0gbmV3ICQuanFwbG90LkxpbmVSZW5kZXJlcigpOwogICAgJC5qcXBsb3QuUGllUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJC5qcXBsb3QuUGllUmVuZGVyZXI7CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIGEgc2VyaWVzCiAgICAkLmpxcGxvdC5QaWVSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMsIHBsb3QpIHsKICAgICAgICAvLyBHcm91cDogUHJvcGVydGllcwogICAgICAgIC8vCiAgICAgICAgLy8gcHJvcDogZGlhbWV0ZXIKICAgICAgICAvLyBPdXRlciBkaWFtZXRlciBvZiB0aGUgcGllLCBhdXRvIGNvbXB1dGVkIGJ5IGRlZmF1bHQKICAgICAgICB0aGlzLmRpYW1ldGVyID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBwYWRkaW5nCiAgICAgICAgLy8gcGFkZGluZyBiZXR3ZWVuIHRoZSBwaWUgYW5kIHBsb3QgZWRnZXMsIGxlZ2VuZCwgZXRjLgogICAgICAgIHRoaXMucGFkZGluZyA9IDIwOwogICAgICAgIC8vIHByb3A6IHNsaWNlTWFyZ2luCiAgICAgICAgLy8gYW5ndWxhciBzcGFjaW5nIGJldHdlZW4gcGllIHNsaWNlcyBpbiBkZWdyZWVzLgogICAgICAgIHRoaXMuc2xpY2VNYXJnaW4gPSAwOwogICAgICAgIC8vIHByb3A6IGZpbGwKICAgICAgICAvLyB0cnVlIG9yIGZhbHNlLCB3aGV0aGVyIHRvIGZpbCB0aGUgc2xpY2VzLgogICAgICAgIHRoaXMuZmlsbCA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogc2hhZG93T2Zmc2V0CiAgICAgICAgLy8gb2Zmc2V0IG9mIHRoZSBzaGFkb3cgZnJvbSB0aGUgc2xpY2UgYW5kIG9mZnNldCBvZiAKICAgICAgICAvLyBlYWNoIHN1Y2Nlc2l2ZSBzdHJva2Ugb2YgdGhlIHNoYWRvdyBmcm9tIHRoZSBsYXN0LgogICAgICAgIHRoaXMuc2hhZG93T2Zmc2V0ID0gMjsKICAgICAgICAvLyBwcm9wOiBzaGFkb3dBbHBoYQogICAgICAgIC8vIHRyYW5zcGFyZW5jeSBvZiB0aGUgc2hhZG93ICgwID0gdHJhbnNwYXJlbnQsIDEgPSBvcGFxdWUpCiAgICAgICAgdGhpcy5zaGFkb3dBbHBoYSA9IDAuMDc7CiAgICAgICAgLy8gcHJvcDogc2hhZG93RGVwdGgKICAgICAgICAvLyBudW1iZXIgb2Ygc3Ryb2tlcyB0byBhcHBseSB0byB0aGUgc2hhZG93LCAKICAgICAgICAvLyBlYWNoIHN0cm9rZSBvZmZzZXQgc2hhZG93T2Zmc2V0IGZyb20gdGhlIGxhc3QuCiAgICAgICAgdGhpcy5zaGFkb3dEZXB0aCA9IDU7CiAgICAgICAgLy8gcHJvcDogaGlnaGxpZ2h0TW91c2VPdmVyCiAgICAgICAgLy8gVHJ1ZSB0byBoaWdobGlnaHQgc2xpY2Ugd2hlbiBtb3VzZWQgb3Zlci4KICAgICAgICAvLyBUaGlzIG11c3QgYmUgZmFsc2UgdG8gZW5hYmxlIGhpZ2hsaWdodE1vdXNlRG93biB0byBoaWdobGlnaHQgd2hlbiBjbGlja2luZyBvbiBhIHNsaWNlLgogICAgICAgIHRoaXMuaGlnaGxpZ2h0TW91c2VPdmVyID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBoaWdobGlnaHRNb3VzZURvd24KICAgICAgICAvLyBUcnVlIHRvIGhpZ2hsaWdodCB3aGVuIGEgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgb3ZlciBhIHNsaWNlLgogICAgICAgIC8vIFRoaXMgd2lsbCBiZSBkaXNhYmxlZCBpZiBoaWdobGlnaHRNb3VzZU92ZXIgaXMgdHJ1ZS4KICAgICAgICB0aGlzLmhpZ2hsaWdodE1vdXNlRG93biA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGhpZ2hsaWdodENvbG9ycwogICAgICAgIC8vIGFuIGFycmF5IG9mIGNvbG9ycyB0byB1c2Ugd2hlbiBoaWdobGlnaHRpbmcgYSBzbGljZS4KICAgICAgICB0aGlzLmhpZ2hsaWdodENvbG9ycyA9IFtdOwogICAgICAgIC8vIHByb3A6IGRhdGFMYWJlbHMKICAgICAgICAvLyBFaXRoZXIgJ2xhYmVsJywgJ3ZhbHVlJywgJ3BlcmNlbnQnIG9yIGFuIGFycmF5IG9mIGxhYmVscyB0byBwbGFjZSBvbiB0aGUgcGllIHNsaWNlcy4KICAgICAgICAvLyBEZWZhdWx0cyB0byBwZXJjZW50YWdlIG9mIGVhY2ggcGllIHNsaWNlLgogICAgICAgIHRoaXMuZGF0YUxhYmVscyA9ICdwZXJjZW50JzsKICAgICAgICAvLyBwcm9wOiBzaG93RGF0YUxhYmVscwogICAgICAgIC8vIHRydWUgdG8gc2hvdyBkYXRhIGxhYmVscyBvbiBzbGljZXMuCiAgICAgICAgdGhpcy5zaG93RGF0YUxhYmVscyA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGRhdGFMYWJlbEZvcm1hdFN0cmluZwogICAgICAgIC8vIEZvcm1hdCBzdHJpbmcgZm9yIGRhdGEgbGFiZWxzLiAgSWYgbm9uZSwgJyVzJyBpcyB1c2VkIGZvciAibGFiZWwiIGFuZCBmb3IgYXJyYXlzLCAnJWQnIGZvciB2YWx1ZSBhbmQgJyVkJSUnIGZvciBwZXJjZW50YWdlLgogICAgICAgIHRoaXMuZGF0YUxhYmVsRm9ybWF0U3RyaW5nID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBkYXRhTGFiZWxUaHJlc2hvbGQKICAgICAgICAvLyBUaHJlc2hob2xkIGluIHBlcmNlbnRhZ2UgKDAtMTAwKSBvZiBwaWUgYXJlYSwgYmVsb3cgd2hpY2ggbm8gbGFiZWwgd2lsbCBiZSBkaXNwbGF5ZWQuCiAgICAgICAgLy8gVGhpcyBhcHBsaWVzIHRvIGFsbCBsYWJlbCB0eXBlcywgbm90IGp1c3QgdG8gcGVyY2VudGFnZSBsYWJlbHMuCiAgICAgICAgdGhpcy5kYXRhTGFiZWxUaHJlc2hvbGQgPSAzOwogICAgICAgIC8vIHByb3A6IGRhdGFMYWJlbFBvc2l0aW9uRmFjdG9yCiAgICAgICAgLy8gQSBNdWx0aXBsaWVyICgwLTEpIG9mIHRoZSBwaWUgcmFkaXVzIHdoaWNoIGNvbnRyb2xzIHBvc2l0aW9uIG9mIGxhYmVsIG9uIHNsaWNlLgogICAgICAgIC8vIEluY3JlYXNpbmcgd2lsbCBzbGlkZSBsYWJlbCB0b3dhcmQgZWRnZSBvZiBwaWUsIGRlY3JlYXNpbmcgd2lsbCBzbGlkZSBsYWJlbCB0b3dhcmQgY2VudGVyIG9mIHBpZS4KICAgICAgICB0aGlzLmRhdGFMYWJlbFBvc2l0aW9uRmFjdG9yID0gMC41MjsKICAgICAgICAvLyBwcm9wOiBkYXRhTGFiZWxOdWRnZQogICAgICAgIC8vIE51bWJlciBvZiBwaXhlbHMgdG8gc2xpZGUgdGhlIGxhYmVsIGF3YXkgZnJvbSAoKykgb3IgdG93YXJkICgtKSB0aGUgY2VudGVyIG9mIHRoZSBwaWUuCiAgICAgICAgdGhpcy5kYXRhTGFiZWxOdWRnZSA9IDI7CiAgICAgICAgLy8gcHJvcDogZGF0YUxhYmVsQ2VudGVyT24KICAgICAgICAvLyBUcnVlIHRvIGNlbnRlciB0aGUgZGF0YSBsYWJlbCBhdCBpdHMgcG9zaXRpb24uCiAgICAgICAgLy8gRmFsc2UgdG8gc2V0IHRoZSBpbnNpZGUgZmFjaW5nIGVkZ2Ugb2YgdGhlIGxhYmVsIGF0IGl0cyBwb3NpdGlvbi4KICAgICAgICB0aGlzLmRhdGFMYWJlbENlbnRlck9uID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBzdGFydEFuZ2xlCiAgICAgICAgLy8gQW5nbGUgdG8gc3RhcnQgZHJhd2luZyBwaWUgaW4gZGVncmVlcy4gIAogICAgICAgIC8vIEFjY29yZGluZyB0byBvcmllbnRhdGlvbiBvZiBjYW52YXMgY29vcmRpbmF0ZSBzeXN0ZW06CiAgICAgICAgLy8gMCA9IG9uIHRoZSBwb3NpdGl2ZSB4IGF4aXMKICAgICAgICAvLyAtOTAgPSBvbiB0aGUgcG9zaXRpdmUgeSBheGlzLgogICAgICAgIC8vIDkwID0gb24gdGhlIG5lZ2FpdmUgeSBheGlzLgogICAgICAgIC8vIDE4MCBvciAtIDE4MCA9IG9uIHRoZSBuZWdhdGl2ZSB4IGF4aXMuCiAgICAgICAgdGhpcy5zdGFydEFuZ2xlID0gMDsKICAgICAgICB0aGlzLnRpY2tSZW5kZXJlciA9ICQuanFwbG90LlBpZVRpY2tSZW5kZXJlcjsKICAgICAgICAvLyBVc2VkIGFzIGNoZWNrIGZvciBjb25kaXRpb25zIHdoZXJlIHBpZSBzaG91bGRuJ3QgYmUgZHJhd24uCiAgICAgICAgdGhpcy5fZHJhd0RhdGEgPSB0cnVlOwogICAgICAgIHRoaXMuX3R5cGUgPSAncGllJzsKICAgICAgICAKICAgICAgICAvLyBpZiB1c2VyIGhhcyBwYXNzZWQgaW4gaGlnaGxpZ2h0TW91c2VEb3duIG9wdGlvbiBhbmQgbm90IHNldCBoaWdobGlnaHRNb3VzZU92ZXIsIGRpc2FibGUgaGlnaGxpZ2h0TW91c2VPdmVyCiAgICAgICAgaWYgKG9wdGlvbnMuaGlnaGxpZ2h0TW91c2VEb3duICYmIG9wdGlvbnMuaGlnaGxpZ2h0TW91c2VPdmVyID09IG51bGwpIHsKICAgICAgICAgICAgb3B0aW9ucy5oaWdobGlnaHRNb3VzZU92ZXIgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CgogICAgICAgIGlmICh0aGlzLnNsaWNlTWFyZ2luIDwgMCkgewogICAgICAgICAgICB0aGlzLnNsaWNlTWFyZ2luID0gMDsKICAgICAgICB9CgogICAgICAgIHRoaXMuX2RpYW1ldGVyID0gbnVsbDsKICAgICAgICB0aGlzLl9yYWRpdXMgPSBudWxsOwogICAgICAgIC8vIGFycmF5IG9mIFtzdGFydCxlbmRdIGFuZ2xlcyBhcnJheXMsIG9uZSBmb3IgZWFjaCBzbGljZS4gIEluIHJhZGlhbnMuCiAgICAgICAgdGhpcy5fc2xpY2VBbmdsZXMgPSBbXTsKICAgICAgICAvLyBpbmRleCBvZiB0aGUgY3VycmVudHkgaGlnaGxpZ2h0ZWQgcG9pbnQsIGlmIGFueQogICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkUG9pbnQgPSBudWxsOwogICAgICAgIAogICAgICAgIC8vIHNldCBoaWdobGlnaHQgY29sb3JzIGlmIG5vbmUgcHJvdmlkZWQKICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRDb2xvcnMubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMuc2VyaWVzQ29sb3JzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgIHZhciByZ2JhID0gJC5qcXBsb3QuZ2V0Q29sb3JDb21wb25lbnRzKHRoaXMuc2VyaWVzQ29sb3JzW2ldKTsKICAgICAgICAgICAgICAgIHZhciBuZXdyZ2IgPSBbcmdiYVswXSwgcmdiYVsxXSwgcmdiYVsyXV07CiAgICAgICAgICAgICAgICB2YXIgc3VtID0gbmV3cmdiWzBdICsgbmV3cmdiWzFdICsgbmV3cmdiWzJdOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPDM7IGorKykgewogICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gZGFya2VuaW5nLCBsb3dlc3QgY29sb3IgY29tcG9uZW50IGNhbiBiZSBpcyA2MC4KICAgICAgICAgICAgICAgICAgICBuZXdyZ2Jbal0gPSAoc3VtID4gNTcwKSA/ICBuZXdyZ2Jbal0gKiAwLjggOiBuZXdyZ2Jbal0gKyAwLjMgKiAoMjU1IC0gbmV3cmdiW2pdKTsKICAgICAgICAgICAgICAgICAgICBuZXdyZ2Jbal0gPSBwYXJzZUludChuZXdyZ2Jbal0sIDEwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Q29sb3JzLnB1c2goJ3JnYignK25ld3JnYlswXSsnLCcrbmV3cmdiWzFdKycsJytuZXdyZ2JbMl0rJyknKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLmhpZ2hsaWdodENvbG9yR2VuZXJhdG9yID0gbmV3ICQuanFwbG90LkNvbG9yR2VuZXJhdG9yKHRoaXMuaGlnaGxpZ2h0Q29sb3JzKTsKICAgICAgICAKICAgICAgICBwbG90LnBvc3RQYXJzZU9wdGlvbnNIb29rcy5hZGRPbmNlKHBvc3RQYXJzZU9wdGlvbnMpOwogICAgICAgIHBsb3QucG9zdEluaXRIb29rcy5hZGRPbmNlKHBvc3RJbml0KTsKICAgICAgICBwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCdqcXBsb3RNb3VzZU1vdmUnLCBoYW5kbGVNb3ZlKTsKICAgICAgICBwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCdqcXBsb3RNb3VzZURvd24nLCBoYW5kbGVNb3VzZURvd24pOwogICAgICAgIHBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoJ2pxcGxvdE1vdXNlVXAnLCBoYW5kbGVNb3VzZVVwKTsKICAgICAgICBwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCdqcXBsb3RDbGljaycsIGhhbmRsZUNsaWNrKTsKICAgICAgICBwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCdqcXBsb3RSaWdodENsaWNrJywgaGFuZGxlUmlnaHRDbGljayk7CiAgICAgICAgcGxvdC5wb3N0RHJhd0hvb2tzLmFkZE9uY2UocG9zdFBsb3REcmF3KTsKICAgIH07CiAgICAKICAgICQuanFwbG90LlBpZVJlbmRlcmVyLnByb3RvdHlwZS5zZXRHcmlkRGF0YSA9IGZ1bmN0aW9uKHBsb3QpIHsKICAgICAgICAvLyBzZXQgZ3JpZERhdGEgcHJvcGVydHkuICBUaGlzIHdpbGwgaG9sZCBhbmdsZSBpbiByYWRpYW5zIG9mIGVhY2ggZGF0YSBwb2ludC4KICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGQgPSBbXTsKICAgICAgICB2YXIgc2EgPSB0aGlzLnN0YXJ0QW5nbGUvMTgwKk1hdGguUEk7CiAgICAgICAgdmFyIHRvdCA9IDA7CiAgICAgICAgLy8gZG9uJ3Qga25vdyBpZiB3ZSBoYXZlIGFueSB2YWxpZCBkYXRhIHlldCwgc28gc2V0IHBsb3QgdG8gbm90IGRyYXcuCiAgICAgICAgdGhpcy5fZHJhd0RhdGEgPSBmYWxzZTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtpXVsxXSAhPSAwKSB7CiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGRhdGEsIE8uSy4gdG8gZHJhdy4KICAgICAgICAgICAgICAgIHRoaXMuX2RyYXdEYXRhID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMuZGF0YVtpXVsxXSk7CiAgICAgICAgICAgIHRkLnB1c2goW3RoaXMuZGF0YVtpXVswXV0pOwogICAgICAgICAgICBpZiAoaT4wKSB7CiAgICAgICAgICAgICAgICBzdGFja1tpXSArPSBzdGFja1tpLTFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRvdCArPSB0aGlzLmRhdGFbaV1bMV07CiAgICAgICAgfQogICAgICAgIHZhciBmYWN0ID0gTWF0aC5QSSoyL3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOwogICAgICAgIAogICAgICAgIGZvciAodmFyIGk9MDsgaTxzdGFjay5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0ZFtpXVsxXSA9IHN0YWNrW2ldICogZmFjdDsKICAgICAgICAgICAgdGRbaV1bMl0gPSB0aGlzLmRhdGFbaV1bMV0vdG90OwogICAgICAgIH0KICAgICAgICB0aGlzLmdyaWREYXRhID0gdGQ7CiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5QaWVSZW5kZXJlci5wcm90b3R5cGUubWFrZUdyaWREYXRhID0gZnVuY3Rpb24oZGF0YSwgcGxvdCkgewogICAgICAgIHZhciBzdGFjayA9IFtdOwogICAgICAgIHZhciB0ZCA9IFtdOwogICAgICAgIHZhciB0b3QgPSAwOwogICAgICAgIHZhciBzYSA9IHRoaXMuc3RhcnRBbmdsZS8xODAqTWF0aC5QSTsKICAgICAgICAvLyBkb24ndCBrbm93IGlmIHdlIGhhdmUgYW55IHZhbGlkIGRhdGEgeWV0LCBzbyBzZXQgcGxvdCB0byBub3QgZHJhdy4KICAgICAgICB0aGlzLl9kcmF3RGF0YSA9IGZhbHNlOwogICAgICAgIGZvciAodmFyIGk9MDsgaTxkYXRhLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtpXVsxXSAhPSAwKSB7CiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGRhdGEsIE8uSy4gdG8gZHJhdy4KICAgICAgICAgICAgICAgIHRoaXMuX2RyYXdEYXRhID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdGFjay5wdXNoKGRhdGFbaV1bMV0pOwogICAgICAgICAgICB0ZC5wdXNoKFtkYXRhW2ldWzBdXSk7CiAgICAgICAgICAgIGlmIChpPjApIHsKICAgICAgICAgICAgICAgIHN0YWNrW2ldICs9IHN0YWNrW2ktMV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdG90ICs9IGRhdGFbaV1bMV07CiAgICAgICAgfQogICAgICAgIHZhciBmYWN0ID0gTWF0aC5QSSoyL3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOwogICAgICAgIAogICAgICAgIGZvciAodmFyIGk9MDsgaTxzdGFjay5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0ZFtpXVsxXSA9IHN0YWNrW2ldICogZmFjdDsKICAgICAgICAgICAgdGRbaV1bMl0gPSBkYXRhW2ldWzFdL3RvdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRkOwogICAgfTsKCiAgICBmdW5jdGlvbiBjYWxjUmFkaXVzQWRqdXN0bWVudChhbmcpIHsKICAgICAgICByZXR1cm4gTWF0aC5zaW4oKGFuZyAtIChhbmctTWF0aC5QSSkgLyA4IC8gTWF0aC5QSSApLzIuMCk7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsY1JQcmltZShhbmcxLCBhbmcyLCBzbGljZU1hcmdpbiwgZmlsbCwgbGluZVdpZHRoKSB7CiAgICAgICAgdmFyIHJwcmltZSA9IDA7CiAgICAgICAgdmFyIGFuZyA9IGFuZzIgLSBhbmcxOwogICAgICAgIHZhciBhYnNhbmcgPSBNYXRoLmFicyhhbmcpOwogICAgICAgIHZhciBzbSA9IHNsaWNlTWFyZ2luOwogICAgICAgIGlmIChmaWxsID09IGZhbHNlKSB7CiAgICAgICAgICAgIHNtICs9IGxpbmVXaWR0aDsKICAgICAgICB9CgogICAgICAgIGlmIChzbSA+IDAgJiYgYWJzYW5nID4gMC4wMSAmJiBhYnNhbmcgPCA2LjI4MikgewogICAgICAgICAgICBycHJpbWUgPSBwYXJzZUZsb2F0KHNtKSAvIDIuMCAvIGNhbGNSYWRpdXNBZGp1c3RtZW50KGFuZyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcnByaW1lOwogICAgfQogICAgCiAgICAkLmpxcGxvdC5QaWVSZW5kZXJlci5wcm90b3R5cGUuZHJhd1NsaWNlID0gZnVuY3Rpb24gKGN0eCwgYW5nMSwgYW5nMiwgY29sb3IsIGlzU2hhZG93KSB7CiAgICAgICAgaWYgKHRoaXMuX2RyYXdEYXRhKSB7CiAgICAgICAgICAgIHZhciByID0gdGhpcy5fcmFkaXVzOwogICAgICAgICAgICB2YXIgZmlsbCA9IHRoaXMuZmlsbDsKICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoOwogICAgICAgICAgICB2YXIgc20gPSB0aGlzLnNsaWNlTWFyZ2luOwogICAgICAgICAgICBpZiAodGhpcy5maWxsID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBzbSArPSB0aGlzLmxpbmVXaWR0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgICAgICBjdHgudHJhbnNsYXRlKHRoaXMuX2NlbnRlclswXSwgdGhpcy5fY2VudGVyWzFdKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBycHJpbWUgPSBjYWxjUlByaW1lKGFuZzEsIGFuZzIsIHRoaXMuc2xpY2VNYXJnaW4sIHRoaXMuZmlsbCwgdGhpcy5saW5lV2lkdGgpOwoKICAgICAgICAgICAgdmFyIHRyYW5zeCA9IHJwcmltZSAqIE1hdGguY29zKChhbmcxICsgYW5nMikgLyAyLjApOwogICAgICAgICAgICB2YXIgdHJhbnN5ID0gcnByaW1lICogTWF0aC5zaW4oKGFuZzEgKyBhbmcyKSAvIDIuMCk7CgogICAgICAgICAgICBpZiAoKGFuZzIgLSBhbmcxKSA8PSBNYXRoLlBJKSB7CiAgICAgICAgICAgICAgICByIC09IHJwcmltZTsgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgciArPSBycHJpbWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUodHJhbnN4LCB0cmFuc3kpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGlzU2hhZG93KSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTAsIGw9dGhpcy5zaGFkb3dEZXB0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUodGhpcy5zaGFkb3dPZmZzZXQqTWF0aC5jb3ModGhpcy5zaGFkb3dBbmdsZS8xODAqTWF0aC5QSSksIHRoaXMuc2hhZG93T2Zmc2V0Kk1hdGguc2luKHRoaXMuc2hhZG93QW5nbGUvMTgwKk1hdGguUEkpKTsKICAgICAgICAgICAgICAgICAgICBkb0RyYXcocik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTAsIGw9dGhpcy5zaGFkb3dEZXB0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBkb0RyYXcocik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgICAgICB9CiAgICAKICAgICAgICBmdW5jdGlvbiBkb0RyYXcgKHJhZCkgewogICAgICAgICAgICAvLyBGaXggZm9yIElFIGFuZCBDaHJvbWUgdGhhdCBjYW4ndCBzZWVtIHRvIGRyYXcgY2lyY2xlcyBjb3JyZWN0bHkuCiAgICAgICAgICAgIC8vIGFuZzIgc2hvdWxkIGFsd2F5cyBiZSA8PSAyIHBpIHNpbmNlIHRoYXQgaXMgdGhlIHdheSB0aGUgZGF0YSBpcyBjb252ZXJ0ZWQuCiAgICAgICAgICAgIC8vIDJQaSA9IDYuMjgzMTg1MywgUGkgPSAzLjE0MTU5MjcKICAgICAgICAgICAgIGlmIChhbmcyID4gNi4yODIgKyB0aGlzLnN0YXJ0QW5nbGUpIHsKICAgICAgICAgICAgICAgIGFuZzIgPSA2LjI4MiArIHRoaXMuc3RhcnRBbmdsZTsKICAgICAgICAgICAgICAgIGlmIChhbmcxID4gYW5nMikgewogICAgICAgICAgICAgICAgICAgIGFuZzEgPSA2LjI4MSArIHRoaXMuc3RhcnRBbmdsZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBGaXggZm9yIElFLCB3aGVyZSBpdCBjYW4ndCBzZWVtIHRvIGhhbmRsZSAwIGRlZ3JlZSBhbmdsZXMuICBBbHNvIGF2b2lkcwogICAgICAgICAgICAvLyB1Z2x5IGxpbmUgb24gdW5maWxsZWQgcGllcy4KICAgICAgICAgICAgaWYgKGFuZzEgPj0gYW5nMikgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9ICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsgIAogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7CiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yOwogICAgICAgICAgICBjdHgubGluZVdpZHRoID0gbGluZVdpZHRoOwogICAgICAgICAgICBjdHguYXJjKDAsIDAsIHJhZCwgYW5nMSwgYW5nMiwgZmFsc2UpOwogICAgICAgICAgICBjdHgubGluZVRvKDAsMCk7CiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTsKICAgICAgICAKICAgICAgICAgICAgaWYgKGZpbGwpIHsKICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBzZXJpZXMKICAgICQuanFwbG90LlBpZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKGN0eCwgZ2QsIG9wdGlvbnMsIHBsb3QpIHsKICAgICAgICB2YXIgaTsKICAgICAgICB2YXIgb3B0cyA9IChvcHRpb25zICE9IHVuZGVmaW5lZCkgPyBvcHRpb25zIDoge307CiAgICAgICAgLy8gb2Zmc2V0IGFuZCBkaXJlY3Rpb24gb2Ygb2Zmc2V0IGR1ZSB0byBsZWdlbmQgcGxhY2VtZW50CiAgICAgICAgdmFyIG9mZnggPSAwOwogICAgICAgIHZhciBvZmZ5ID0gMDsKICAgICAgICB2YXIgdHJhbnMgPSAxOwogICAgICAgIHZhciBjb2xvckdlbmVyYXRvciA9IG5ldyAkLmpxcGxvdC5Db2xvckdlbmVyYXRvcih0aGlzLnNlcmllc0NvbG9ycyk7CiAgICAgICAgaWYgKG9wdGlvbnMubGVnZW5kSW5mbyAmJiBvcHRpb25zLmxlZ2VuZEluZm8ucGxhY2VtZW50ID09ICdpbnNpZGVHcmlkJykgewogICAgICAgICAgICB2YXIgbGkgPSBvcHRpb25zLmxlZ2VuZEluZm87CiAgICAgICAgICAgIHN3aXRjaCAobGkubG9jYXRpb24pIHsKICAgICAgICAgICAgICAgIGNhc2UgJ253JzoKICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gbGkud2lkdGggKyBsaS54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndyc6CiAgICAgICAgICAgICAgICAgICAgb2ZmeCA9IGxpLndpZHRoICsgbGkueG9mZnNldDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3N3JzoKICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gbGkud2lkdGggKyBsaS54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbmUnOgogICAgICAgICAgICAgICAgICAgIG9mZnggPSBsaS53aWR0aCArIGxpLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAtMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2UnOgogICAgICAgICAgICAgICAgICAgIG9mZnggPSBsaS53aWR0aCArIGxpLnhvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAtMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3NlJzoKICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gbGkud2lkdGggKyBsaS54b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIHRyYW5zID0gLTE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgICAgICBvZmZ5ID0gbGkuaGVpZ2h0ICsgbGkueW9mZnNldDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICAgICAgICAgIG9mZnkgPSBsaS5oZWlnaHQgKyBsaS55b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIHRyYW5zID0gLTE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBzaGFkb3cgPSAob3B0cy5zaGFkb3cgIT0gdW5kZWZpbmVkKSA/IG9wdHMuc2hhZG93IDogdGhpcy5zaGFkb3c7CiAgICAgICAgdmFyIGZpbGwgPSAob3B0cy5maWxsICE9IHVuZGVmaW5lZCkgPyBvcHRzLmZpbGwgOiB0aGlzLmZpbGw7CiAgICAgICAgdmFyIGN3ID0gY3R4LmNhbnZhcy53aWR0aDsKICAgICAgICB2YXIgY2ggPSBjdHguY2FudmFzLmhlaWdodDsKICAgICAgICB2YXIgdyA9IGN3IC0gb2ZmeCAtIDIgKiB0aGlzLnBhZGRpbmc7CiAgICAgICAgdmFyIGggPSBjaCAtIG9mZnkgLSAyICogdGhpcy5wYWRkaW5nOwogICAgICAgIHZhciBtaW5kaW0gPSBNYXRoLm1pbih3LGgpOwogICAgICAgIHZhciBkID0gbWluZGltOwogICAgICAgIAogICAgICAgIC8vIEZpeGVzIGlzc3VlICMyNzIuICBUaGFua3MgaHVnd2lqc3QhCiAgICAgICAgLy8gcmVzZXQgc2xpY2UgYW5nbGVzIGFycmF5LgogICAgICAgIHRoaXMuX3NsaWNlQW5nbGVzID0gW107CgogICAgICAgIHZhciBzbSA9IHRoaXMuc2xpY2VNYXJnaW47CiAgICAgICAgaWYgKHRoaXMuZmlsbCA9PSBmYWxzZSkgewogICAgICAgICAgICBzbSArPSB0aGlzLmxpbmVXaWR0aDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmFyIHJwcmltZTsKICAgICAgICB2YXIgbWF4cnByaW1lID0gMDsKCiAgICAgICAgdmFyIGFuZywgYW5nMSwgYW5nMiwgc2hhZG93Q29sb3I7CiAgICAgICAgdmFyIHNhID0gdGhpcy5zdGFydEFuZ2xlIC8gMTgwICogTWF0aC5QSTsKCiAgICAgICAgLy8gaGF2ZSB0byBwcmUtZHJhdyBzaGFkb3dzLCBzbyBsb29wIHRocm9naCBoZXJlIGFuZCBjYWxjdWxhdGUgc29tZSB2YWx1ZXMgYWxzby4KICAgICAgICBmb3IgKHZhciBpPTAsIGw9Z2QubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICBhbmcxID0gKGkgPT0gMCkgPyBzYSA6IGdkW2ktMV1bMV0gKyBzYTsKICAgICAgICAgICAgYW5nMiA9IGdkW2ldWzFdICsgc2E7CgogICAgICAgICAgICB0aGlzLl9zbGljZUFuZ2xlcy5wdXNoKFthbmcxLCBhbmcyXSk7CgogICAgICAgICAgICBycHJpbWUgPSBjYWxjUlByaW1lKGFuZzEsIGFuZzIsIHRoaXMuc2xpY2VNYXJnaW4sIHRoaXMuZmlsbCwgdGhpcy5saW5lV2lkdGgpOwoKICAgICAgICAgICAgaWYgKE1hdGguYWJzKGFuZzItYW5nMSkgPiBNYXRoLlBJKSB7CiAgICAgICAgICAgICAgICBtYXhycHJpbWUgPSBNYXRoLm1heChycHJpbWUsIG1heHJwcmltZSk7ICAKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMuZGlhbWV0ZXIgIT0gbnVsbCAmJiB0aGlzLmRpYW1ldGVyID4gMCkgewogICAgICAgICAgICB0aGlzLl9kaWFtZXRlciA9IHRoaXMuZGlhbWV0ZXIgLSAyKm1heHJwcmltZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMuX2RpYW1ldGVyID0gZCAtIDIqbWF4cnByaW1lOwogICAgICAgIH0KCiAgICAgICAgLy8gTmVlZCB0byBjaGVjayBmb3IgdW5kZXJzaXplZCBwaWUuICBUaGlzIGNhbiBoYXBwZW4gaWYKICAgICAgICAvLyBwbG90IGFyZWEgdG9vIHNtYWxsIGFuZCBsZWdlbmQgaXMgdG9vIGJpZy4KICAgICAgICBpZiAodGhpcy5fZGlhbWV0ZXIgPCA2KSB7CiAgICAgICAgICAgICQuanFwbG90LmxvZygnRGlhbWV0ZXIgb2YgcGllIHRvbyBzbWFsbCwgbm90IHJlbmRlcmluZy4nKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIHIgPSB0aGlzLl9yYWRpdXMgPSB0aGlzLl9kaWFtZXRlci8yOwoKICAgICAgICB0aGlzLl9jZW50ZXIgPSBbKGN3IC0gdHJhbnMgKiBvZmZ4KS8yICsgdHJhbnMgKiBvZmZ4ICsgbWF4cnByaW1lICogTWF0aC5jb3Moc2EpLCAoY2ggLSB0cmFucypvZmZ5KS8yICsgdHJhbnMgKiBvZmZ5ICsgbWF4cnByaW1lICogTWF0aC5zaW4oc2EpXTsKCiAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7CiAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbD1nZC5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgICAgICAgICBzaGFkb3dDb2xvciA9ICdyZ2JhKDAsMCwwLCcrdGhpcy5zaGFkb3dBbHBoYSsnKSc7CiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdTbGljZS5jYWxsICh0aGlzLCBjdHgsIHRoaXMuX3NsaWNlQW5nbGVzW2ldWzBdLCB0aGlzLl9zbGljZUFuZ2xlc1tpXVsxXSwgc2hhZG93Q29sb3IsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZvciAodmFyIGk9MDsgaTxnZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd1NsaWNlLmNhbGwgKHRoaXMsIGN0eCwgdGhpcy5fc2xpY2VBbmdsZXNbaV1bMF0sIHRoaXMuX3NsaWNlQW5nbGVzW2ldWzFdLCBjb2xvckdlbmVyYXRvci5uZXh0KCksIGZhbHNlKTsKICAgICAgICAKICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0RhdGFMYWJlbHMgJiYgZ2RbaV1bMl0qMTAwID49IHRoaXMuZGF0YUxhYmVsVGhyZXNob2xkKSB7CiAgICAgICAgICAgICAgICB2YXIgZnN0ciwgYXZnYW5nID0gKHRoaXMuX3NsaWNlQW5nbGVzW2ldWzBdICsgdGhpcy5fc2xpY2VBbmdsZXNbaV1bMV0pLzIsIGxhYmVsOwogICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFMYWJlbHMgPT0gJ2xhYmVsJykgewogICAgICAgICAgICAgICAgICAgIGZzdHIgPSB0aGlzLmRhdGFMYWJlbEZvcm1hdFN0cmluZyB8fCAnJXMnOwogICAgICAgICAgICAgICAgICAgIGxhYmVsID0gJC5qcXBsb3Quc3ByaW50Zihmc3RyLCBnZFtpXVswXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmRhdGFMYWJlbHMgPT0gJ3ZhbHVlJykgewogICAgICAgICAgICAgICAgICAgIGZzdHIgPSB0aGlzLmRhdGFMYWJlbEZvcm1hdFN0cmluZyB8fCAnJWQnOwogICAgICAgICAgICAgICAgICAgIGxhYmVsID0gJC5qcXBsb3Quc3ByaW50Zihmc3RyLCB0aGlzLmRhdGFbaV1bMV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXRhTGFiZWxzID09ICdwZXJjZW50JykgewogICAgICAgICAgICAgICAgICAgIGZzdHIgPSB0aGlzLmRhdGFMYWJlbEZvcm1hdFN0cmluZyB8fCAnJWQlJSc7CiAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAkLmpxcGxvdC5zcHJpbnRmKGZzdHIsIGdkW2ldWzJdKjEwMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmRhdGFMYWJlbHMuY29uc3RydWN0b3IgPT0gQXJyYXkpIHsKICAgICAgICAgICAgICAgICAgICBmc3RyID0gdGhpcy5kYXRhTGFiZWxGb3JtYXRTdHJpbmcgfHwgJyVzJzsKICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICQuanFwbG90LnNwcmludGYoZnN0ciwgdGhpcy5kYXRhTGFiZWxzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgZmFjdCA9ICh0aGlzLl9yYWRpdXMgKSAqIHRoaXMuZGF0YUxhYmVsUG9zaXRpb25GYWN0b3IgKyB0aGlzLnNsaWNlTWFyZ2luICsgdGhpcy5kYXRhTGFiZWxOdWRnZTsKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgeCA9IHRoaXMuX2NlbnRlclswXSArIE1hdGguY29zKGF2Z2FuZykgKiBmYWN0ICsgdGhpcy5jYW52YXMuX29mZnNldHMubGVmdDsKICAgICAgICAgICAgICAgIHZhciB5ID0gdGhpcy5fY2VudGVyWzFdICsgTWF0aC5zaW4oYXZnYW5nKSAqIGZhY3QgKyB0aGlzLmNhbnZhcy5fb2Zmc2V0cy50b3A7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGxhYmVsZWxlbSA9ICQoJzxkaXYgY2xhc3M9ImpxcGxvdC1waWUtc2VyaWVzIGpxcGxvdC1kYXRhLWxhYmVsIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4nICsgbGFiZWwgKyAnPC9kaXY+JykuaW5zZXJ0QmVmb3JlKHBsb3QuZXZlbnRDYW52YXMuX2VsZW0pOwogICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YUxhYmVsQ2VudGVyT24pIHsKICAgICAgICAgICAgICAgICAgICB4IC09IGxhYmVsZWxlbS53aWR0aCgpLzI7CiAgICAgICAgICAgICAgICAgICAgeSAtPSBsYWJlbGVsZW0uaGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHggLT0gbGFiZWxlbGVtLndpZHRoKCkgKiBNYXRoLnNpbihhdmdhbmcvMik7CiAgICAgICAgICAgICAgICAgICAgeSAtPSBsYWJlbGVsZW0uaGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHggPSBNYXRoLnJvdW5kKHgpOwogICAgICAgICAgICAgICAgeSA9IE1hdGgucm91bmQoeSk7CiAgICAgICAgICAgICAgICBsYWJlbGVsZW0uY3NzKHtsZWZ0OiB4LCB0b3A6IHl9KTsKICAgICAgICAgICAgfQogICAgICAgIH0gICAgICAgICAgICAKICAgIH07CiAgICAKICAgICQuanFwbG90LlBpZUF4aXNSZW5kZXJlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuUGllQXhpc1JlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIoKTsKICAgICQuanFwbG90LlBpZUF4aXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAkLmpxcGxvdC5QaWVBeGlzUmVuZGVyZXI7CiAgICAgICAgCiAgICAKICAgIC8vIFRoZXJlIGFyZSBubyB0cmFkaXRpb25hbCBheGVzIG9uIGEgcGllIGNoYXJ0LiAgV2UganVzdCBuZWVkIHRvIHByb3ZpZGUKICAgIC8vIGR1bW15IG9iamVjdHMgd2l0aCBwcm9wZXJ0aWVzIHNvIHRoZSBwbG90IHdpbGwgcmVuZGVyLgogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgYXhpcyBvYmplY3QuCiAgICAkLmpxcGxvdC5QaWVBeGlzUmVuZGVyZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihvcHRpb25zKXsKICAgICAgICAvLwogICAgICAgIHRoaXMudGlja1JlbmRlcmVyID0gJC5qcXBsb3QuUGllVGlja1JlbmRlcmVyOwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIC8vIEkgZG9uJ3QgdGhpbmsgSSdtIGdvaW5nIHRvIG5lZWQgX2RhdGFCb3VuZHMgaGVyZS4KICAgICAgICAvLyBoYXZlIHRvIGdvIEF4aXMgc2NhbGluZyBpbiBhIHdheSB0byBmaXQgY2hhcnQgb250byBwbG90IGFyZWEKICAgICAgICAvLyBhbmQgcHJvdmlkZSB1MnAgYW5kIHAydSBmdW5jdGlvbmFsaXR5IGZvciBtb3VzZSBjdXJzb3IsIGV0Yy4KICAgICAgICAvLyBmb3IgY29udmllbmVuY2Ugc2V0IF9kYXRhQm91bmRzIHRvIDAgYW5kIDEwMCBhbmQKICAgICAgICAvLyBzZXQgbWluL21heCB0byAwIGFuZCAxMDAuCiAgICAgICAgdGhpcy5fZGF0YUJvdW5kcyA9IHttaW46MCwgbWF4OjEwMH07CiAgICAgICAgdGhpcy5taW4gPSAwOwogICAgICAgIHRoaXMubWF4ID0gMTAwOwogICAgICAgIHRoaXMuc2hvd1RpY2tzID0gZmFsc2U7CiAgICAgICAgdGhpcy50aWNrcyA9IFtdOwogICAgICAgIHRoaXMuc2hvd01hcmsgPSBmYWxzZTsKICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTsgCiAgICB9OwogICAgCiAgICAKICAgIAogICAgCiAgICAkLmpxcGxvdC5QaWVMZWdlbmRSZW5kZXJlciA9IGZ1bmN0aW9uKCl7CiAgICAgICAgJC5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuUGllTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlID0gbmV3ICQuanFwbG90LlRhYmxlTGVnZW5kUmVuZGVyZXIoKTsKICAgICQuanFwbG90LlBpZUxlZ2VuZFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90LlBpZUxlZ2VuZFJlbmRlcmVyOwogICAgCiAgICAvKioKICAgICAqIENsYXNzOiAkLmpxcGxvdC5QaWVMZWdlbmRSZW5kZXJlcgogICAgICogTGVnZW5kIFJlbmRlcmVyIHNwZWNpZmljIHRvIHBpZSBwbG90cy4gIFNldCBieSBkZWZhdWx0CiAgICAgKiB3aGVuIHVzZXIgY3JlYXRlcyBhIHBpZSBwbG90LgogICAgICovCiAgICAkLmpxcGxvdC5QaWVMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAvLyBHcm91cDogUHJvcGVydGllcwogICAgICAgIC8vCiAgICAgICAgLy8gcHJvcDogbnVtYmVyUm93cwogICAgICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGxlZ2VuZC4gIDAgb3IgbnVsbCBmb3IgdW5saW1pdGVkLgogICAgICAgIHRoaXMubnVtYmVyUm93cyA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogbnVtYmVyQ29sdW1ucwogICAgICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGxlZ2VuZC4gIDAgb3IgbnVsbCBmb3IgdW5saW1pdGVkLgogICAgICAgIHRoaXMubnVtYmVyQ29sdW1ucyA9IG51bGw7CiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcywgb3B0aW9ucyk7CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBjb250ZXh0IG9mIGxlZ2VuZAogICAgJC5qcXBsb3QuUGllTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgbGVnZW5kID0gdGhpczsKICAgICAgICBpZiAodGhpcy5zaG93KSB7CiAgICAgICAgICAgIHZhciBzZXJpZXMgPSB0aGlzLl9zZXJpZXM7CgoKICAgICAgICAgICAgdGhpcy5fZWxlbSA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKSk7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uYWRkQ2xhc3MoJ2pxcGxvdC10YWJsZS1sZWdlbmQnKTsKCiAgICAgICAgICAgIHZhciBzcyA9IHtwb3NpdGlvbjonYWJzb2x1dGUnfTsKICAgICAgICAgICAgaWYgKHRoaXMuYmFja2dyb3VuZCkgewogICAgICAgICAgICAgICAgc3NbJ2JhY2tncm91bmQnXSA9IHRoaXMuYmFja2dyb3VuZDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5ib3JkZXIpIHsKICAgICAgICAgICAgICAgIHNzWydib3JkZXInXSA9IHRoaXMuYm9yZGVyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLmZvbnRTaXplKSB7CiAgICAgICAgICAgICAgICBzc1snZm9udFNpemUnXSA9IHRoaXMuZm9udFNpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuZm9udEZhbWlseSkgewogICAgICAgICAgICAgICAgc3NbJ2ZvbnRGYW1pbHknXSA9IHRoaXMuZm9udEZhbWlseTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy50ZXh0Q29sb3IpIHsKICAgICAgICAgICAgICAgIHNzWyd0ZXh0Q29sb3InXSA9IHRoaXMudGV4dENvbG9yOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLm1hcmdpblRvcCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBzc1snbWFyZ2luVG9wJ10gPSB0aGlzLm1hcmdpblRvcDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5tYXJnaW5Cb3R0b20gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgc3NbJ21hcmdpbkJvdHRvbSddID0gdGhpcy5tYXJnaW5Cb3R0b207CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMubWFyZ2luTGVmdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBzc1snbWFyZ2luTGVmdCddID0gdGhpcy5tYXJnaW5MZWZ0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLm1hcmdpblJpZ2h0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHNzWydtYXJnaW5SaWdodCddID0gdGhpcy5tYXJnaW5SaWdodDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy5fZWxlbS5jc3Moc3MpOwoKICAgICAgICAgICAgLy8gUGllIGNoYXJ0cyBsZWdlbmRzIGRvbid0IGdvIGJ5IG51bWJlciBvZiBzZXJpZXMsIGJ1dCBieSBudW1iZXIgb2YgZGF0YSBwb2ludHMKICAgICAgICAgICAgLy8gaW4gdGhlIHNlcmllcy4gIFJlZmFjdG9yIHRoaW5ncyBoZXJlIGZvciB0aGF0LgogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBhZCA9IGZhbHNlLCAKICAgICAgICAgICAgICAgIHJldmVyc2UgPSBmYWxzZSwKICAgICAgICAgICAgICAgIG5yLCAKICAgICAgICAgICAgICAgIG5jOwogICAgICAgICAgICB2YXIgcyA9IHNlcmllc1swXTsKICAgICAgICAgICAgdmFyIGNvbG9yR2VuZXJhdG9yID0gbmV3ICQuanFwbG90LkNvbG9yR2VuZXJhdG9yKHMuc2VyaWVzQ29sb3JzKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzLnNob3cpIHsKICAgICAgICAgICAgICAgIHZhciBwZCA9IHMuZGF0YTsKICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bWJlclJvd3MpIHsKICAgICAgICAgICAgICAgICAgICBuciA9IHRoaXMubnVtYmVyUm93czsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubnVtYmVyQ29sdW1ucyl7CiAgICAgICAgICAgICAgICAgICAgICAgIG5jID0gTWF0aC5jZWlsKHBkLmxlbmd0aC9ucik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIG5jID0gdGhpcy5udW1iZXJDb2x1bW5zOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubnVtYmVyQ29sdW1ucykgewogICAgICAgICAgICAgICAgICAgIG5jID0gdGhpcy5udW1iZXJDb2x1bW5zOwogICAgICAgICAgICAgICAgICAgIG5yID0gTWF0aC5jZWlsKHBkLmxlbmd0aC90aGlzLm51bWJlckNvbHVtbnMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbnIgPSBwZC5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgbmMgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaSwgajsKICAgICAgICAgICAgICAgIHZhciB0ciwgdGQxLCB0ZDI7IAogICAgICAgICAgICAgICAgdmFyIGx0LCBycywgY29sb3I7CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gMDsgCiAgICAgICAgICAgICAgICB2YXIgZGl2MCwgZGl2MTsgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8bnI7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRyID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpKTsKICAgICAgICAgICAgICAgICAgICB0ci5hZGRDbGFzcygnanFwbG90LXRhYmxlLWxlZ2VuZCcpOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGlmIChyZXZlcnNlKXsKICAgICAgICAgICAgICAgICAgICAgICAgdHIucHJlcGVuZFRvKHRoaXMuX2VsZW0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRUbyh0aGlzLl9lbGVtKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7IGo8bmM7IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWR4IDwgcGQubGVuZ3RoKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0ID0gdGhpcy5sYWJlbHNbaWR4XSB8fCBwZFtpZHhdWzBdLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yR2VuZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV2ZXJzZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGk+MCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gbnIgLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBycyA9IChwYWQpID8gdGhpcy5yb3dTcGFjaW5nIDogJzAnOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQxID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMS5hZGRDbGFzcygnanFwbG90LXRhYmxlLWxlZ2VuZCBqcXBsb3QtdGFibGUtbGVnZW5kLXN3YXRjaCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQxLmNzcyh7dGV4dEFsaWduOiAnY2VudGVyJywgcGFkZGluZ1RvcDogcnN9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYwID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYwLmFkZENsYXNzKCdqcXBsb3QtdGFibGUtbGVnZW5kLXN3YXRjaC1vdXRsaW5lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYxID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYxLmFkZENsYXNzKCdqcXBsb3QtdGFibGUtbGVnZW5kLXN3YXRjaCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2MS5jc3Moe2JhY2tncm91bmRDb2xvcjogY29sb3IsIGJvcmRlckNvbG9yOiBjb2xvcn0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQxLmFwcGVuZChkaXYwLmFwcGVuZChkaXYxKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQyID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi5hZGRDbGFzcygnanFwbG90LXRhYmxlLWxlZ2VuZCBqcXBsb3QtdGFibGUtbGVnZW5kLWxhYmVsJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDIuY3NzKCdwYWRkaW5nVG9wJywgcnMpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVzY2FwZUh0bWwpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi50ZXh0KGx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi5odG1sKGx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXZlcnNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQyLnByZXBlbmRUbyh0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQxLnByZXBlbmRUbyh0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZDEuYXBwZW5kVG8odHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkMi5hcHBlbmRUbyh0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlkeCsrOwogICAgICAgICAgICAgICAgICAgIH0gICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fZWxlbTsgICAgICAgICAgICAgICAgCiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5QaWVSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlTW92ZSA9IGZ1bmN0aW9uKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIGlmIChuZWlnaGJvcikgewogICAgICAgICAgICB2YXIgaW5zID0gW25laWdoYm9yLnNlcmllc0luZGV4LCBuZWlnaGJvci5wb2ludEluZGV4LCBuZWlnaGJvci5kYXRhXTsKICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcignanFwbG90RGF0YU1vdXNlT3ZlcicsIGlucyk7CiAgICAgICAgICAgIGlmIChwbG90LnNlcmllc1tpbnNbMF1dLmhpZ2hsaWdodE1vdXNlT3ZlciAmJiAhKGluc1swXSA9PSBwbG90LnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCAmJiBpbnNbMV0gPT0gcGxvdC5zZXJpZXNbaW5zWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpIHsKICAgICAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoJ2pxcGxvdERhdGFIaWdobGlnaHQnLCBpbnMpOwogICAgICAgICAgICAgICAgaGlnaGxpZ2h0IChwbG90LCBpbnNbMF0sIGluc1sxXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAobmVpZ2hib3IgPT0gbnVsbCkgewogICAgICAgICAgICB1bmhpZ2hsaWdodCAocGxvdCk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgCiAgICAvLyB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoJC5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzW2ldWzBdLCB7cGxvdDp0aGlzfSwgJC5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzW2ldWzFdKTsKICAgIAogICAgLy8gc2V0dXAgZGVmYXVsdCByZW5kZXJlcnMgZm9yIGF4ZXMgYW5kIGxlZ2VuZCBzbyB1c2VyIGRvZXNuJ3QgaGF2ZSB0bwogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgcGxvdAogICAgZnVuY3Rpb24gcHJlSW5pdCh0YXJnZXQsIGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICBvcHRpb25zLmF4ZXNEZWZhdWx0cyA9IG9wdGlvbnMuYXhlc0RlZmF1bHRzIHx8IHt9OwogICAgICAgIG9wdGlvbnMubGVnZW5kID0gb3B0aW9ucy5sZWdlbmQgfHwge307CiAgICAgICAgb3B0aW9ucy5zZXJpZXNEZWZhdWx0cyA9IG9wdGlvbnMuc2VyaWVzRGVmYXVsdHMgfHwge307CiAgICAgICAgLy8gb25seSBzZXQgdGhlc2UgaWYgdGhlcmUgaXMgYSBwaWUgc2VyaWVzCiAgICAgICAgdmFyIHNldG9wdHMgPSBmYWxzZTsKICAgICAgICBpZiAob3B0aW9ucy5zZXJpZXNEZWZhdWx0cy5yZW5kZXJlciA9PSAkLmpxcGxvdC5QaWVSZW5kZXJlcikgewogICAgICAgICAgICBzZXRvcHRzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5zZXJpZXMpIHsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpIDwgb3B0aW9ucy5zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNlcmllc1tpXS5yZW5kZXJlciA9PSAkLmpxcGxvdC5QaWVSZW5kZXJlcikgewogICAgICAgICAgICAgICAgICAgIHNldG9wdHMgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChzZXRvcHRzKSB7CiAgICAgICAgICAgIG9wdGlvbnMuYXhlc0RlZmF1bHRzLnJlbmRlcmVyID0gJC5qcXBsb3QuUGllQXhpc1JlbmRlcmVyOwogICAgICAgICAgICBvcHRpb25zLmxlZ2VuZC5yZW5kZXJlciA9ICQuanFwbG90LlBpZUxlZ2VuZFJlbmRlcmVyOwogICAgICAgICAgICBvcHRpb25zLmxlZ2VuZC5wcmVEcmF3ID0gdHJ1ZTsKICAgICAgICAgICAgb3B0aW9ucy5zZXJpZXNEZWZhdWx0cy5wb2ludExhYmVscyA9IHtzaG93OiBmYWxzZX07CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBwb3N0SW5pdCh0YXJnZXQsIGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKHRoaXMuc2VyaWVzW2ldLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09ICQuanFwbG90LlBpZVJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAvLyBkb24ndCBhbGxvdyBtb3VzZW92ZXIgYW5kIG1vdXNlZG93biBhdCBzYW1lIHRpbWUuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXJpZXNbaV0uaGlnaGxpZ2h0TW91c2VPdmVyKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNbaV0uaGlnaGxpZ2h0TW91c2VEb3duID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIHBsb3QKICAgIGZ1bmN0aW9uIHBvc3RQYXJzZU9wdGlvbnMob3B0aW9ucykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnNlcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0aGlzLnNlcmllc1tpXS5zZXJpZXNDb2xvcnMgPSB0aGlzLnNlcmllc0NvbG9yczsKICAgICAgICAgICAgdGhpcy5zZXJpZXNbaV0uY29sb3JHZW5lcmF0b3IgPSAkLmpxcGxvdC5jb2xvckdlbmVyYXRvcjsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhpZ2hsaWdodCAocGxvdCwgc2lkeCwgcGlkeCkgewogICAgICAgIHZhciBzID0gcGxvdC5zZXJpZXNbc2lkeF07CiAgICAgICAgdmFyIGNhbnZhcyA9IHBsb3QucGx1Z2lucy5waWVSZW5kZXJlci5oaWdobGlnaHRDYW52YXM7CiAgICAgICAgY2FudmFzLl9jdHguY2xlYXJSZWN0KDAsMCxjYW52YXMuX2N0eC5jYW52YXMud2lkdGgsIGNhbnZhcy5fY3R4LmNhbnZhcy5oZWlnaHQpOwogICAgICAgIHMuX2hpZ2hsaWdodGVkUG9pbnQgPSBwaWR4OwogICAgICAgIHBsb3QucGx1Z2lucy5waWVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4ID0gc2lkeDsKICAgICAgICBzLnJlbmRlcmVyLmRyYXdTbGljZS5jYWxsKHMsIGNhbnZhcy5fY3R4LCBzLl9zbGljZUFuZ2xlc1twaWR4XVswXSwgcy5fc2xpY2VBbmdsZXNbcGlkeF1bMV0sIHMuaGlnaGxpZ2h0Q29sb3JHZW5lcmF0b3IuZ2V0KHBpZHgpLCBmYWxzZSk7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIHVuaGlnaGxpZ2h0IChwbG90KSB7CiAgICAgICAgdmFyIGNhbnZhcyA9IHBsb3QucGx1Z2lucy5waWVSZW5kZXJlci5oaWdobGlnaHRDYW52YXM7CiAgICAgICAgY2FudmFzLl9jdHguY2xlYXJSZWN0KDAsMCwgY2FudmFzLl9jdHguY2FudmFzLndpZHRoLCBjYW52YXMuX2N0eC5jYW52YXMuaGVpZ2h0KTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8cGxvdC5zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgcGxvdC5zZXJpZXNbaV0uX2hpZ2hsaWdodGVkUG9pbnQgPSBudWxsOwogICAgICAgIH0KICAgICAgICBwbG90LnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCA9IG51bGw7CiAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcignanFwbG90RGF0YVVuaGlnaGxpZ2h0Jyk7CiAgICB9CiAKICAgIGZ1bmN0aW9uIGhhbmRsZU1vdmUoZXYsIGdyaWRwb3MsIGRhdGFwb3MsIG5laWdoYm9yLCBwbG90KSB7CiAgICAgICAgaWYgKG5laWdoYm9yKSB7CiAgICAgICAgICAgIHZhciBpbnMgPSBbbmVpZ2hib3Iuc2VyaWVzSW5kZXgsIG5laWdoYm9yLnBvaW50SW5kZXgsIG5laWdoYm9yLmRhdGFdOwogICAgICAgICAgICB2YXIgZXZ0MSA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YU1vdXNlT3ZlcicpOwogICAgICAgICAgICBldnQxLnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgIGV2dDEucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQxLCBpbnMpOwogICAgICAgICAgICBpZiAocGxvdC5zZXJpZXNbaW5zWzBdXS5oaWdobGlnaHRNb3VzZU92ZXIgJiYgIShpbnNbMF0gPT0gcGxvdC5wbHVnaW5zLnBpZVJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXggJiYgaW5zWzFdID09IHBsb3Quc2VyaWVzW2luc1swXV0uX2hpZ2hsaWdodGVkUG9pbnQpKSB7CiAgICAgICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdqcXBsb3REYXRhSGlnaGxpZ2h0Jyk7CiAgICAgICAgICAgICAgICBldnQud2hpY2ggPSBldi53aGljaDsKICAgICAgICAgICAgICAgIGV2dC5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICAgICAgZXZ0LnBhZ2VZID0gZXYucGFnZVk7CiAgICAgICAgICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKGV2dCwgaW5zKTsKICAgICAgICAgICAgICAgIGhpZ2hsaWdodCAocGxvdCwgaW5zWzBdLCBpbnNbMV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG5laWdoYm9yID09IG51bGwpIHsKICAgICAgICAgICAgdW5oaWdobGlnaHQgKHBsb3QpOwogICAgICAgIH0KICAgIH0gCiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICBpZiAobmVpZ2hib3IpIHsKICAgICAgICAgICAgdmFyIGlucyA9IFtuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IuZGF0YV07CiAgICAgICAgICAgIGlmIChwbG90LnNlcmllc1tpbnNbMF1dLmhpZ2hsaWdodE1vdXNlRG93biAmJiAhKGluc1swXSA9PSBwbG90LnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCAmJiBpbnNbMV0gPT0gcGxvdC5zZXJpZXNbaW5zWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpIHsKICAgICAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ2pxcGxvdERhdGFIaWdobGlnaHQnKTsKICAgICAgICAgICAgICAgIGV2dC53aGljaCA9IGV2LndoaWNoOwogICAgICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoZXZ0LCBpbnMpOwogICAgICAgICAgICAgICAgaGlnaGxpZ2h0IChwbG90LCBpbnNbMF0sIGluc1sxXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAobmVpZ2hib3IgPT0gbnVsbCkgewogICAgICAgICAgICB1bmhpZ2hsaWdodCAocGxvdCk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZVVwKGV2LCBncmlkcG9zLCBkYXRhcG9zLCBuZWlnaGJvciwgcGxvdCkgewogICAgICAgIHZhciBpZHggPSBwbG90LnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDsKICAgICAgICBpZiAoaWR4ICE9IG51bGwgJiYgcGxvdC5zZXJpZXNbaWR4XS5oaWdobGlnaHRNb3VzZURvd24pIHsKICAgICAgICAgICAgdW5oaWdobGlnaHQocGxvdCk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBoYW5kbGVDbGljayhldiwgZ3JpZHBvcywgZGF0YXBvcywgbmVpZ2hib3IsIHBsb3QpIHsKICAgICAgICBpZiAobmVpZ2hib3IpIHsKICAgICAgICAgICAgdmFyIGlucyA9IFtuZWlnaGJvci5zZXJpZXNJbmRleCwgbmVpZ2hib3IucG9pbnRJbmRleCwgbmVpZ2hib3IuZGF0YV07CiAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ2pxcGxvdERhdGFDbGljaycpOwogICAgICAgICAgICBldnQud2hpY2ggPSBldi53aGljaDsKICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICBwbG90LnRhcmdldC50cmlnZ2VyKGV2dCwgaW5zKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZVJpZ2h0Q2xpY2soZXYsIGdyaWRwb3MsIGRhdGFwb3MsIG5laWdoYm9yLCBwbG90KSB7CiAgICAgICAgaWYgKG5laWdoYm9yKSB7CiAgICAgICAgICAgIHZhciBpbnMgPSBbbmVpZ2hib3Iuc2VyaWVzSW5kZXgsIG5laWdoYm9yLnBvaW50SW5kZXgsIG5laWdoYm9yLmRhdGFdOwogICAgICAgICAgICB2YXIgaWR4ID0gcGxvdC5wbHVnaW5zLnBpZVJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg7CiAgICAgICAgICAgIGlmIChpZHggIT0gbnVsbCAmJiBwbG90LnNlcmllc1tpZHhdLmhpZ2hsaWdodE1vdXNlRG93bikgewogICAgICAgICAgICAgICAgdW5oaWdobGlnaHQocGxvdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YVJpZ2h0Q2xpY2snKTsKICAgICAgICAgICAgZXZ0LndoaWNoID0gZXYud2hpY2g7CiAgICAgICAgICAgIGV2dC5wYWdlWCA9IGV2LnBhZ2VYOwogICAgICAgICAgICBldnQucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQsIGlucyk7CiAgICAgICAgfQogICAgfSAgICAKICAgIAogICAgLy8gY2FsbGVkIHdpdGhpbiBjb250ZXh0IG9mIHBsb3QKICAgIC8vIGNyZWF0ZSBhIGNhbnZhcyB3aGljaCB3ZSBjYW4gZHJhdyBvbi4KICAgIC8vIGluc2VydCBpdCBiZWZvcmUgdGhlIGV2ZW50Q2FudmFzLCBzbyBldmVudENhbnZhcyB3aWxsIHN0aWxsIGNhcHR1cmUgZXZlbnRzLgogICAgZnVuY3Rpb24gcG9zdFBsb3REcmF3KCkgewogICAgICAgIC8vIE1lbW9yeSBMZWFrcyBwYXRjaCAgICAKICAgICAgICBpZiAodGhpcy5wbHVnaW5zLnBpZVJlbmRlcmVyICYmIHRoaXMucGx1Z2lucy5waWVSZW5kZXJlci5oaWdobGlnaHRDYW52YXMpIHsKICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnBpZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5yZXNldENhbnZhcygpOwogICAgICAgICAgICB0aGlzLnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIHRoaXMucGx1Z2lucy5waWVSZW5kZXJlciA9IHtoaWdobGlnaHRlZFNlcmllc0luZGV4Om51bGx9OwogICAgICAgIHRoaXMucGx1Z2lucy5waWVSZW5kZXJlci5oaWdobGlnaHRDYW52YXMgPSBuZXcgJC5qcXBsb3QuR2VuZXJpY0NhbnZhcygpOwogICAgICAgIAogICAgICAgIC8vIGRvIHdlIGhhdmUgYW55IGRhdGEgbGFiZWxzPyAgaWYgc28sIHB1dCBoaWdobGlnaHQgY2FudmFzIGJlZm9yZSB0aG9zZQogICAgICAgIHZhciBsYWJlbHMgPSAkKHRoaXMudGFyZ2V0SWQrJyAuanFwbG90LWRhdGEtbGFiZWwnKTsKICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCkgewogICAgICAgICAgICAkKGxhYmVsc1swXSkuYmVmb3JlKHRoaXMucGx1Z2lucy5waWVSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywgJ2pxcGxvdC1waWVSZW5kZXJlci1oaWdobGlnaHQtY2FudmFzJywgdGhpcy5fcGxvdERpbWVuc2lvbnMsIHRoaXMpKTsKICAgICAgICB9CiAgICAgICAgLy8gZWxzZSBwdXQgaGlnaGxpZ2h0IGNhbnZhcyBiZWZvcmUgZXZlbnQgY2FudmFzLgogICAgICAgIGVsc2UgewogICAgICAgICAgICB0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZSh0aGlzLnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsICdqcXBsb3QtcGllUmVuZGVyZXItaGlnaGxpZ2h0LWNhbnZhcycsIHRoaXMuX3Bsb3REaW1lbnNpb25zLCB0aGlzKSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBoY3R4ID0gdGhpcy5wbHVnaW5zLnBpZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5zZXRDb250ZXh0KCk7CiAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCdtb3VzZWxlYXZlJywge3Bsb3Q6dGhpc30sIGZ1bmN0aW9uIChldikgeyB1bmhpZ2hsaWdodChldi5kYXRhLnBsb3QpOyB9KTsKICAgIH0KICAgIAogICAgJC5qcXBsb3QucHJlSW5pdEhvb2tzLnB1c2gocHJlSW5pdCk7CiAgICAKICAgICQuanFwbG90LlBpZVRpY2tSZW5kZXJlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICQuanFwbG90LkF4aXNUaWNrUmVuZGVyZXIuY2FsbCh0aGlzKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LlBpZVRpY2tSZW5kZXJlci5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlcigpOwogICAgJC5qcXBsb3QuUGllVGlja1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90LlBpZVRpY2tSZW5kZXJlcjsKICAgIAp9KShqUXVlcnkpOwogICAgCiAgICA=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.pieRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGUpe2UuanFwbG90LlBpZVJlbmRlcmVyPWZ1bmN0aW9uKCl7ZS5qcXBsb3QuTGluZVJlbmRlcmVyLmNhbGwodGhpcyl9O2UuanFwbG90LlBpZVJlbmRlcmVyLnByb3RvdHlwZT1uZXcgZS5qcXBsb3QuTGluZVJlbmRlcmVyKCk7ZS5qcXBsb3QuUGllUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUuanFwbG90LlBpZVJlbmRlcmVyO2UuanFwbG90LlBpZVJlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKHEsdSl7dGhpcy5kaWFtZXRlcj1udWxsO3RoaXMucGFkZGluZz0yMDt0aGlzLnNsaWNlTWFyZ2luPTA7dGhpcy5maWxsPXRydWU7dGhpcy5zaGFkb3dPZmZzZXQ9Mjt0aGlzLnNoYWRvd0FscGhhPTAuMDc7dGhpcy5zaGFkb3dEZXB0aD01O3RoaXMuaGlnaGxpZ2h0TW91c2VPdmVyPXRydWU7dGhpcy5oaWdobGlnaHRNb3VzZURvd249ZmFsc2U7dGhpcy5oaWdobGlnaHRDb2xvcnM9W107dGhpcy5kYXRhTGFiZWxzPSJwZXJjZW50Ijt0aGlzLnNob3dEYXRhTGFiZWxzPWZhbHNlO3RoaXMuZGF0YUxhYmVsRm9ybWF0U3RyaW5nPW51bGw7dGhpcy5kYXRhTGFiZWxUaHJlc2hvbGQ9Mzt0aGlzLmRhdGFMYWJlbFBvc2l0aW9uRmFjdG9yPTAuNTI7dGhpcy5kYXRhTGFiZWxOdWRnZT0yO3RoaXMuZGF0YUxhYmVsQ2VudGVyT249dHJ1ZTt0aGlzLnN0YXJ0QW5nbGU9MDt0aGlzLnRpY2tSZW5kZXJlcj1lLmpxcGxvdC5QaWVUaWNrUmVuZGVyZXI7dGhpcy5fZHJhd0RhdGE9dHJ1ZTt0aGlzLl90eXBlPSJwaWUiO2lmKHEuaGlnaGxpZ2h0TW91c2VEb3duJiZxLmhpZ2hsaWdodE1vdXNlT3Zlcj09bnVsbCl7cS5oaWdobGlnaHRNb3VzZU92ZXI9ZmFsc2V9ZS5leHRlbmQodHJ1ZSx0aGlzLHEpO2lmKHRoaXMuc2xpY2VNYXJnaW48MCl7dGhpcy5zbGljZU1hcmdpbj0wfXRoaXMuX2RpYW1ldGVyPW51bGw7dGhpcy5fcmFkaXVzPW51bGw7dGhpcy5fc2xpY2VBbmdsZXM9W107dGhpcy5faGlnaGxpZ2h0ZWRQb2ludD1udWxsO2lmKHRoaXMuaGlnaGxpZ2h0Q29sb3JzLmxlbmd0aD09MCl7Zm9yKHZhciBzPTA7czx0aGlzLnNlcmllc0NvbG9ycy5sZW5ndGg7cysrKXt2YXIgcj1lLmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHModGhpcy5zZXJpZXNDb2xvcnNbc10pO3ZhciBvPVtyWzBdLHJbMV0sclsyXV07dmFyIHQ9b1swXStvWzFdK29bMl07Zm9yKHZhciBwPTA7cDwzO3ArKyl7b1twXT0odD41NzApP29bcF0qMC44Om9bcF0rMC4zKigyNTUtb1twXSk7b1twXT1wYXJzZUludChvW3BdLDEwKX10aGlzLmhpZ2hsaWdodENvbG9ycy5wdXNoKCJyZ2IoIitvWzBdKyIsIitvWzFdKyIsIitvWzJdKyIpIil9fXRoaXMuaGlnaGxpZ2h0Q29sb3JHZW5lcmF0b3I9bmV3IGUuanFwbG90LkNvbG9yR2VuZXJhdG9yKHRoaXMuaGlnaGxpZ2h0Q29sb3JzKTt1LnBvc3RQYXJzZU9wdGlvbnNIb29rcy5hZGRPbmNlKG0pO3UucG9zdEluaXRIb29rcy5hZGRPbmNlKGcpO3UuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoImpxcGxvdE1vdXNlTW92ZSIsYik7dS5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgianFwbG90TW91c2VEb3duIixhKTt1LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RNb3VzZVVwIixsKTt1LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RDbGljayIsZik7dS5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgianFwbG90UmlnaHRDbGljayIsbik7dS5wb3N0RHJhd0hvb2tzLmFkZE9uY2UoaSl9O2UuanFwbG90LlBpZVJlbmRlcmVyLnByb3RvdHlwZS5zZXRHcmlkRGF0YT1mdW5jdGlvbih0KXt2YXIgcD1bXTt2YXIgdT1bXTt2YXIgbz10aGlzLnN0YXJ0QW5nbGUvMTgwKk1hdGguUEk7dmFyIHM9MDt0aGlzLl9kcmF3RGF0YT1mYWxzZTtmb3IodmFyIHI9MDtyPHRoaXMuZGF0YS5sZW5ndGg7cisrKXtpZih0aGlzLmRhdGFbcl1bMV0hPTApe3RoaXMuX2RyYXdEYXRhPXRydWV9cC5wdXNoKHRoaXMuZGF0YVtyXVsxXSk7dS5wdXNoKFt0aGlzLmRhdGFbcl1bMF1dKTtpZihyPjApe3Bbcl0rPXBbci0xXX1zKz10aGlzLmRhdGFbcl1bMV19dmFyIHE9TWF0aC5QSSoyL3BbcC5sZW5ndGgtMV07Zm9yKHZhciByPTA7cjxwLmxlbmd0aDtyKyspe3Vbcl1bMV09cFtyXSpxO3Vbcl1bMl09dGhpcy5kYXRhW3JdWzFdL3N9dGhpcy5ncmlkRGF0YT11fTtlLmpxcGxvdC5QaWVSZW5kZXJlci5wcm90b3R5cGUubWFrZUdyaWREYXRhPWZ1bmN0aW9uKHQsdSl7dmFyIHA9W107dmFyIHY9W107dmFyIHM9MDt2YXIgbz10aGlzLnN0YXJ0QW5nbGUvMTgwKk1hdGguUEk7dGhpcy5fZHJhd0RhdGE9ZmFsc2U7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe2lmKHRoaXMuZGF0YVtyXVsxXSE9MCl7dGhpcy5fZHJhd0RhdGE9dHJ1ZX1wLnB1c2godFtyXVsxXSk7di5wdXNoKFt0W3JdWzBdXSk7aWYocj4wKXtwW3JdKz1wW3ItMV19cys9dFtyXVsxXX12YXIgcT1NYXRoLlBJKjIvcFtwLmxlbmd0aC0xXTtmb3IodmFyIHI9MDtyPHAubGVuZ3RoO3IrKyl7dltyXVsxXT1wW3JdKnE7dltyXVsyXT10W3JdWzFdL3N9cmV0dXJuIHZ9O2Z1bmN0aW9uIGgobyl7cmV0dXJuIE1hdGguc2luKChvLShvLU1hdGguUEkpLzgvTWF0aC5QSSkvMil9ZnVuY3Rpb24gaih1LHQsbyx2LHIpe3ZhciB3PTA7dmFyIHE9dC11O3ZhciBzPU1hdGguYWJzKHEpO3ZhciBwPW87aWYodj09ZmFsc2Upe3ArPXJ9aWYocD4wJiZzPjAuMDEmJnM8Ni4yODIpe3c9cGFyc2VGbG9hdChwKS8yL2gocSl9cmV0dXJuIHd9ZS5qcXBsb3QuUGllUmVuZGVyZXIucHJvdG90eXBlLmRyYXdTbGljZT1mdW5jdGlvbihCLHoseSx1LHcpe2lmKHRoaXMuX2RyYXdEYXRhKXt2YXIgcD10aGlzLl9yYWRpdXM7dmFyIEE9dGhpcy5maWxsO3ZhciB4PXRoaXMubGluZVdpZHRoO3ZhciBzPXRoaXMuc2xpY2VNYXJnaW47aWYodGhpcy5maWxsPT1mYWxzZSl7cys9dGhpcy5saW5lV2lkdGh9Qi5zYXZlKCk7Qi50cmFuc2xhdGUodGhpcy5fY2VudGVyWzBdLHRoaXMuX2NlbnRlclsxXSk7dmFyIEQ9aih6LHksdGhpcy5zbGljZU1hcmdpbix0aGlzLmZpbGwsdGhpcy5saW5lV2lkdGgpO3ZhciBvPUQqTWF0aC5jb3MoKHoreSkvMik7dmFyIEM9RCpNYXRoLnNpbigoeit5KS8yKTtpZigoeS16KTw9TWF0aC5QSSl7cC09RH1lbHNle3ArPUR9Qi50cmFuc2xhdGUobyxDKTtpZih3KXtmb3IodmFyIHY9MCx0PXRoaXMuc2hhZG93RGVwdGg7djx0O3YrKyl7Qi5zYXZlKCk7Qi50cmFuc2xhdGUodGhpcy5zaGFkb3dPZmZzZXQqTWF0aC5jb3ModGhpcy5zaGFkb3dBbmdsZS8xODAqTWF0aC5QSSksdGhpcy5zaGFkb3dPZmZzZXQqTWF0aC5zaW4odGhpcy5zaGFkb3dBbmdsZS8xODAqTWF0aC5QSSkpO3EocCl9Zm9yKHZhciB2PTAsdD10aGlzLnNoYWRvd0RlcHRoO3Y8dDt2Kyspe0IucmVzdG9yZSgpfX1lbHNle3EocCl9Qi5yZXN0b3JlKCl9ZnVuY3Rpb24gcShyKXtpZih5PjYuMjgyK3RoaXMuc3RhcnRBbmdsZSl7eT02LjI4Mit0aGlzLnN0YXJ0QW5nbGU7aWYoej55KXt6PTYuMjgxK3RoaXMuc3RhcnRBbmdsZX19aWYoej49eSl7cmV0dXJufUIuYmVnaW5QYXRoKCk7Qi5maWxsU3R5bGU9dTtCLnN0cm9rZVN0eWxlPXU7Qi5saW5lV2lkdGg9eDtCLmFyYygwLDAscix6LHksZmFsc2UpO0IubGluZVRvKDAsMCk7Qi5jbG9zZVBhdGgoKTtpZihBKXtCLmZpbGwoKX1lbHNle0Iuc3Ryb2tlKCl9fX07ZS5qcXBsb3QuUGllUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oQix6LEUsbyl7dmFyIFc7dmFyIEg9KEUhPXVuZGVmaW5lZCk/RTp7fTt2YXIgdD0wO3ZhciBzPTA7dmFyIE49MTt2YXIgTD1uZXcgZS5qcXBsb3QuQ29sb3JHZW5lcmF0b3IodGhpcy5zZXJpZXNDb2xvcnMpO2lmKEUubGVnZW5kSW5mbyYmRS5sZWdlbmRJbmZvLnBsYWNlbWVudD09Imluc2lkZUdyaWQiKXt2YXIgSj1FLmxlZ2VuZEluZm87c3dpdGNoKEoubG9jYXRpb24pe2Nhc2UibnciOnQ9Si53aWR0aCtKLnhvZmZzZXQ7YnJlYWs7Y2FzZSJ3Ijp0PUoud2lkdGgrSi54b2Zmc2V0O2JyZWFrO2Nhc2Uic3ciOnQ9Si53aWR0aCtKLnhvZmZzZXQ7YnJlYWs7Y2FzZSJuZSI6dD1KLndpZHRoK0oueG9mZnNldDtOPS0xO2JyZWFrO2Nhc2UiZSI6dD1KLndpZHRoK0oueG9mZnNldDtOPS0xO2JyZWFrO2Nhc2Uic2UiOnQ9Si53aWR0aCtKLnhvZmZzZXQ7Tj0tMTticmVhaztjYXNlIm4iOnM9Si5oZWlnaHQrSi55b2Zmc2V0O2JyZWFrO2Nhc2UicyI6cz1KLmhlaWdodCtKLnlvZmZzZXQ7Tj0tMTticmVhaztkZWZhdWx0OmJyZWFrfX12YXIgSz0oSC5zaGFkb3chPXVuZGVmaW5lZCk/SC5zaGFkb3c6dGhpcy5zaGFkb3c7dmFyIEE9KEguZmlsbCE9dW5kZWZpbmVkKT9ILmZpbGw6dGhpcy5maWxsO3ZhciBDPUIuY2FudmFzLndpZHRoO3ZhciBJPUIuY2FudmFzLmhlaWdodDt2YXIgUT1DLXQtMip0aGlzLnBhZGRpbmc7dmFyIFg9SS1zLTIqdGhpcy5wYWRkaW5nO3ZhciBNPU1hdGgubWluKFEsWCk7dmFyIFk9TTt0aGlzLl9zbGljZUFuZ2xlcz1bXTt2YXIgdj10aGlzLnNsaWNlTWFyZ2luO2lmKHRoaXMuZmlsbD09ZmFsc2Upe3YrPXRoaXMubGluZVdpZHRofXZhciBxO3ZhciBHPTA7dmFyIFIsYWEsWixhYjt2YXIgRD10aGlzLnN0YXJ0QW5nbGUvMTgwKk1hdGguUEk7Zm9yKHZhciBXPTAsVj16Lmxlbmd0aDtXPFY7VysrKXthYT0oVz09MCk/RDp6W1ctMV1bMV0rRDtaPXpbV11bMV0rRDt0aGlzLl9zbGljZUFuZ2xlcy5wdXNoKFthYSxaXSk7cT1qKGFhLFosdGhpcy5zbGljZU1hcmdpbix0aGlzLmZpbGwsdGhpcy5saW5lV2lkdGgpO2lmKE1hdGguYWJzKFotYWEpPk1hdGguUEkpe0c9TWF0aC5tYXgocSxHKX19aWYodGhpcy5kaWFtZXRlciE9bnVsbCYmdGhpcy5kaWFtZXRlcj4wKXt0aGlzLl9kaWFtZXRlcj10aGlzLmRpYW1ldGVyLTIqR31lbHNle3RoaXMuX2RpYW1ldGVyPVktMipHfWlmKHRoaXMuX2RpYW1ldGVyPDYpe2UuanFwbG90LmxvZygiRGlhbWV0ZXIgb2YgcGllIHRvbyBzbWFsbCwgbm90IHJlbmRlcmluZy4iKTtyZXR1cm59dmFyIFM9dGhpcy5fcmFkaXVzPXRoaXMuX2RpYW1ldGVyLzI7dGhpcy5fY2VudGVyPVsoQy1OKnQpLzIrTip0K0cqTWF0aC5jb3MoRCksKEktTipzKS8yK04qcytHKk1hdGguc2luKEQpXTtpZih0aGlzLnNoYWRvdyl7Zm9yKHZhciBXPTAsVj16Lmxlbmd0aDtXPFY7VysrKXthYj0icmdiYSgwLDAsMCwiK3RoaXMuc2hhZG93QWxwaGErIikiO3RoaXMucmVuZGVyZXIuZHJhd1NsaWNlLmNhbGwodGhpcyxCLHRoaXMuX3NsaWNlQW5nbGVzW1ddWzBdLHRoaXMuX3NsaWNlQW5nbGVzW1ddWzFdLGFiLHRydWUpfX1mb3IodmFyIFc9MDtXPHoubGVuZ3RoO1crKyl7dGhpcy5yZW5kZXJlci5kcmF3U2xpY2UuY2FsbCh0aGlzLEIsdGhpcy5fc2xpY2VBbmdsZXNbV11bMF0sdGhpcy5fc2xpY2VBbmdsZXNbV11bMV0sTC5uZXh0KCksZmFsc2UpO2lmKHRoaXMuc2hvd0RhdGFMYWJlbHMmJnpbV11bMl0qMTAwPj10aGlzLmRhdGFMYWJlbFRocmVzaG9sZCl7dmFyIEYsVT0odGhpcy5fc2xpY2VBbmdsZXNbV11bMF0rdGhpcy5fc2xpY2VBbmdsZXNbV11bMV0pLzIsVDtpZih0aGlzLmRhdGFMYWJlbHM9PSJsYWJlbCIpe0Y9dGhpcy5kYXRhTGFiZWxGb3JtYXRTdHJpbmd8fCIlcyI7VD1lLmpxcGxvdC5zcHJpbnRmKEYseltXXVswXSl9ZWxzZXtpZih0aGlzLmRhdGFMYWJlbHM9PSJ2YWx1ZSIpe0Y9dGhpcy5kYXRhTGFiZWxGb3JtYXRTdHJpbmd8fCIlZCI7VD1lLmpxcGxvdC5zcHJpbnRmKEYsdGhpcy5kYXRhW1ddWzFdKX1lbHNle2lmKHRoaXMuZGF0YUxhYmVscz09InBlcmNlbnQiKXtGPXRoaXMuZGF0YUxhYmVsRm9ybWF0U3RyaW5nfHwiJWQlJSI7VD1lLmpxcGxvdC5zcHJpbnRmKEYseltXXVsyXSoxMDApfWVsc2V7aWYodGhpcy5kYXRhTGFiZWxzLmNvbnN0cnVjdG9yPT1BcnJheSl7Rj10aGlzLmRhdGFMYWJlbEZvcm1hdFN0cmluZ3x8IiVzIjtUPWUuanFwbG90LnNwcmludGYoRix0aGlzLmRhdGFMYWJlbHNbV10pfX19fXZhciBwPSh0aGlzLl9yYWRpdXMpKnRoaXMuZGF0YUxhYmVsUG9zaXRpb25GYWN0b3IrdGhpcy5zbGljZU1hcmdpbit0aGlzLmRhdGFMYWJlbE51ZGdlO3ZhciBQPXRoaXMuX2NlbnRlclswXStNYXRoLmNvcyhVKSpwK3RoaXMuY2FudmFzLl9vZmZzZXRzLmxlZnQ7dmFyIE89dGhpcy5fY2VudGVyWzFdK01hdGguc2luKFUpKnArdGhpcy5jYW52YXMuX29mZnNldHMudG9wO3ZhciB1PWUoJzxkaXYgY2xhc3M9ImpxcGxvdC1waWUtc2VyaWVzIGpxcGxvdC1kYXRhLWxhYmVsIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4nK1QrIjwvZGl2PiIpLmluc2VydEJlZm9yZShvLmV2ZW50Q2FudmFzLl9lbGVtKTtpZih0aGlzLmRhdGFMYWJlbENlbnRlck9uKXtQLT11LndpZHRoKCkvMjtPLT11LmhlaWdodCgpLzJ9ZWxzZXtQLT11LndpZHRoKCkqTWF0aC5zaW4oVS8yKTtPLT11LmhlaWdodCgpLzJ9UD1NYXRoLnJvdW5kKFApO089TWF0aC5yb3VuZChPKTt1LmNzcyh7bGVmdDpQLHRvcDpPfSl9fX07ZS5qcXBsb3QuUGllQXhpc1JlbmRlcmVyPWZ1bmN0aW9uKCl7ZS5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyLmNhbGwodGhpcyl9O2UuanFwbG90LlBpZUF4aXNSZW5kZXJlci5wcm90b3R5cGU9bmV3IGUuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlcigpO2UuanFwbG90LlBpZUF4aXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3I9ZS5qcXBsb3QuUGllQXhpc1JlbmRlcmVyO2UuanFwbG90LlBpZUF4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihvKXt0aGlzLnRpY2tSZW5kZXJlcj1lLmpxcGxvdC5QaWVUaWNrUmVuZGVyZXI7ZS5leHRlbmQodHJ1ZSx0aGlzLG8pO3RoaXMuX2RhdGFCb3VuZHM9e21pbjowLG1heDoxMDB9O3RoaXMubWluPTA7dGhpcy5tYXg9MTAwO3RoaXMuc2hvd1RpY2tzPWZhbHNlO3RoaXMudGlja3M9W107dGhpcy5zaG93TWFyaz1mYWxzZTt0aGlzLnNob3c9ZmFsc2V9O2UuanFwbG90LlBpZUxlZ2VuZFJlbmRlcmVyPWZ1bmN0aW9uKCl7ZS5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlci5jYWxsKHRoaXMpfTtlLmpxcGxvdC5QaWVMZWdlbmRSZW5kZXJlci5wcm90b3R5cGU9bmV3IGUuanFwbG90LlRhYmxlTGVnZW5kUmVuZGVyZXIoKTtlLmpxcGxvdC5QaWVMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3I9ZS5qcXBsb3QuUGllTGVnZW5kUmVuZGVyZXI7ZS5qcXBsb3QuUGllTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24obyl7dGhpcy5udW1iZXJSb3dzPW51bGw7dGhpcy5udW1iZXJDb2x1bW5zPW51bGw7ZS5leHRlbmQodHJ1ZSx0aGlzLG8pfTtlLmpxcGxvdC5QaWVMZWdlbmRSZW5kZXJlci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe3ZhciByPXRoaXM7aWYodGhpcy5zaG93KXt2YXIgQj10aGlzLl9zZXJpZXM7dGhpcy5fZWxlbT1lKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIikpO3RoaXMuX2VsZW0uYWRkQ2xhc3MoImpxcGxvdC10YWJsZS1sZWdlbmQiKTt2YXIgRT17cG9zaXRpb246ImFic29sdXRlIn07aWYodGhpcy5iYWNrZ3JvdW5kKXtFLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kfWlmKHRoaXMuYm9yZGVyKXtFLmJvcmRlcj10aGlzLmJvcmRlcn1pZih0aGlzLmZvbnRTaXplKXtFLmZvbnRTaXplPXRoaXMuZm9udFNpemV9aWYodGhpcy5mb250RmFtaWx5KXtFLmZvbnRGYW1pbHk9dGhpcy5mb250RmFtaWx5fWlmKHRoaXMudGV4dENvbG9yKXtFLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcn1pZih0aGlzLm1hcmdpblRvcCE9bnVsbCl7RS5tYXJnaW5Ub3A9dGhpcy5tYXJnaW5Ub3B9aWYodGhpcy5tYXJnaW5Cb3R0b20hPW51bGwpe0UubWFyZ2luQm90dG9tPXRoaXMubWFyZ2luQm90dG9tfWlmKHRoaXMubWFyZ2luTGVmdCE9bnVsbCl7RS5tYXJnaW5MZWZ0PXRoaXMubWFyZ2luTGVmdH1pZih0aGlzLm1hcmdpblJpZ2h0IT1udWxsKXtFLm1hcmdpblJpZ2h0PXRoaXMubWFyZ2luUmlnaHR9dGhpcy5fZWxlbS5jc3MoRSk7dmFyIEk9ZmFsc2UsQT1mYWxzZSxvLHk7dmFyIEM9QlswXTt2YXIgcD1uZXcgZS5qcXBsb3QuQ29sb3JHZW5lcmF0b3IoQy5zZXJpZXNDb2xvcnMpO2lmKEMuc2hvdyl7dmFyIEo9Qy5kYXRhO2lmKHRoaXMubnVtYmVyUm93cyl7bz10aGlzLm51bWJlclJvd3M7aWYoIXRoaXMubnVtYmVyQ29sdW1ucyl7eT1NYXRoLmNlaWwoSi5sZW5ndGgvbyl9ZWxzZXt5PXRoaXMubnVtYmVyQ29sdW1uc319ZWxzZXtpZih0aGlzLm51bWJlckNvbHVtbnMpe3k9dGhpcy5udW1iZXJDb2x1bW5zO289TWF0aC5jZWlsKEoubGVuZ3RoL3RoaXMubnVtYmVyQ29sdW1ucyl9ZWxzZXtvPUoubGVuZ3RoO3k9MX19dmFyIEgsRzt2YXIgcSx3LHY7dmFyIHgseixGO3ZhciBEPTA7dmFyIHUsdDtmb3IoSD0wO0g8bztIKyspe3E9ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpKTtxLmFkZENsYXNzKCJqcXBsb3QtdGFibGUtbGVnZW5kIik7aWYoQSl7cS5wcmVwZW5kVG8odGhpcy5fZWxlbSl9ZWxzZXtxLmFwcGVuZFRvKHRoaXMuX2VsZW0pfWZvcihHPTA7Rzx5O0crKyl7aWYoRDxKLmxlbmd0aCl7eD10aGlzLmxhYmVsc1tEXXx8SltEXVswXS50b1N0cmluZygpO0Y9cC5uZXh0KCk7aWYoIUEpe2lmKEg+MCl7ST10cnVlfWVsc2V7ST1mYWxzZX19ZWxzZXtpZihIPT1vLTEpe0k9ZmFsc2V9ZWxzZXtJPXRydWV9fXo9KEkpP3RoaXMucm93U3BhY2luZzoiMCI7dz1lKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIikpO3cuYWRkQ2xhc3MoImpxcGxvdC10YWJsZS1sZWdlbmQganFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2giKTt3LmNzcyh7dGV4dEFsaWduOiJjZW50ZXIiLHBhZGRpbmdUb3A6en0pO3U9ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7dS5hZGRDbGFzcygianFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2gtb3V0bGluZSIpO3Q9ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7dC5hZGRDbGFzcygianFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2giKTt0LmNzcyh7YmFja2dyb3VuZENvbG9yOkYsYm9yZGVyQ29sb3I6Rn0pO3cuYXBwZW5kKHUuYXBwZW5kKHQpKTt2PWUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKSk7di5hZGRDbGFzcygianFwbG90LXRhYmxlLWxlZ2VuZCBqcXBsb3QtdGFibGUtbGVnZW5kLWxhYmVsIik7di5jc3MoInBhZGRpbmdUb3AiLHopO2lmKHRoaXMuZXNjYXBlSHRtbCl7di50ZXh0KHgpfWVsc2V7di5odG1sKHgpfWlmKEEpe3YucHJlcGVuZFRvKHEpO3cucHJlcGVuZFRvKHEpfWVsc2V7dy5hcHBlbmRUbyhxKTt2LmFwcGVuZFRvKHEpfUk9dHJ1ZX1EKyt9fX19cmV0dXJuIHRoaXMuX2VsZW19O2UuanFwbG90LlBpZVJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVNb3ZlPWZ1bmN0aW9uKHEscCx0LHMscil7aWYocyl7dmFyIG89W3Muc2VyaWVzSW5kZXgscy5wb2ludEluZGV4LHMuZGF0YV07ci50YXJnZXQudHJpZ2dlcigianFwbG90RGF0YU1vdXNlT3ZlciIsbyk7aWYoci5zZXJpZXNbb1swXV0uaGlnaGxpZ2h0TW91c2VPdmVyJiYhKG9bMF09PXIucGx1Z2lucy5waWVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4JiZvWzFdPT1yLnNlcmllc1tvWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpe3IudGFyZ2V0LnRyaWdnZXIoImpxcGxvdERhdGFIaWdobGlnaHQiLG8pO2QocixvWzBdLG9bMV0pfX1lbHNle2lmKHM9PW51bGwpe2socil9fX07ZnVuY3Rpb24gYyhzLHIscCl7cD1wfHx7fTtwLmF4ZXNEZWZhdWx0cz1wLmF4ZXNEZWZhdWx0c3x8e307cC5sZWdlbmQ9cC5sZWdlbmR8fHt9O3Auc2VyaWVzRGVmYXVsdHM9cC5zZXJpZXNEZWZhdWx0c3x8e307dmFyIG89ZmFsc2U7aWYocC5zZXJpZXNEZWZhdWx0cy5yZW5kZXJlcj09ZS5qcXBsb3QuUGllUmVuZGVyZXIpe289dHJ1ZX1lbHNle2lmKHAuc2VyaWVzKXtmb3IodmFyIHE9MDtxPHAuc2VyaWVzLmxlbmd0aDtxKyspe2lmKHAuc2VyaWVzW3FdLnJlbmRlcmVyPT1lLmpxcGxvdC5QaWVSZW5kZXJlcil7bz10cnVlfX19fWlmKG8pe3AuYXhlc0RlZmF1bHRzLnJlbmRlcmVyPWUuanFwbG90LlBpZUF4aXNSZW5kZXJlcjtwLmxlZ2VuZC5yZW5kZXJlcj1lLmpxcGxvdC5QaWVMZWdlbmRSZW5kZXJlcjtwLmxlZ2VuZC5wcmVEcmF3PXRydWU7cC5zZXJpZXNEZWZhdWx0cy5wb2ludExhYmVscz17c2hvdzpmYWxzZX19fWZ1bmN0aW9uIGcocixxLG8pe2Zvcih2YXIgcD0wO3A8dGhpcy5zZXJpZXMubGVuZ3RoO3ArKyl7aWYodGhpcy5zZXJpZXNbcF0ucmVuZGVyZXIuY29uc3RydWN0b3I9PWUuanFwbG90LlBpZVJlbmRlcmVyKXtpZih0aGlzLnNlcmllc1twXS5oaWdobGlnaHRNb3VzZU92ZXIpe3RoaXMuc2VyaWVzW3BdLmhpZ2hsaWdodE1vdXNlRG93bj1mYWxzZX19fX1mdW5jdGlvbiBtKG8pe2Zvcih2YXIgcD0wO3A8dGhpcy5zZXJpZXMubGVuZ3RoO3ArKyl7dGhpcy5zZXJpZXNbcF0uc2VyaWVzQ29sb3JzPXRoaXMuc2VyaWVzQ29sb3JzO3RoaXMuc2VyaWVzW3BdLmNvbG9yR2VuZXJhdG9yPWUuanFwbG90LmNvbG9yR2VuZXJhdG9yfX1mdW5jdGlvbiBkKHQscixxKXt2YXIgcD10LnNlcmllc1tyXTt2YXIgbz10LnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzO28uX2N0eC5jbGVhclJlY3QoMCwwLG8uX2N0eC5jYW52YXMud2lkdGgsby5fY3R4LmNhbnZhcy5oZWlnaHQpO3AuX2hpZ2hsaWdodGVkUG9pbnQ9cTt0LnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleD1yO3AucmVuZGVyZXIuZHJhd1NsaWNlLmNhbGwocCxvLl9jdHgscC5fc2xpY2VBbmdsZXNbcV1bMF0scC5fc2xpY2VBbmdsZXNbcV1bMV0scC5oaWdobGlnaHRDb2xvckdlbmVyYXRvci5nZXQocSksZmFsc2UpfWZ1bmN0aW9uIGsocSl7dmFyIG89cS5wbHVnaW5zLnBpZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcztvLl9jdHguY2xlYXJSZWN0KDAsMCxvLl9jdHguY2FudmFzLndpZHRoLG8uX2N0eC5jYW52YXMuaGVpZ2h0KTtmb3IodmFyIHA9MDtwPHEuc2VyaWVzLmxlbmd0aDtwKyspe3Euc2VyaWVzW3BdLl9oaWdobGlnaHRlZFBvaW50PW51bGx9cS5wbHVnaW5zLnBpZVJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg9bnVsbDtxLnRhcmdldC50cmlnZ2VyKCJqcXBsb3REYXRhVW5oaWdobGlnaHQiKX1mdW5jdGlvbiBiKHMscix2LHUsdCl7aWYodSl7dmFyIHE9W3Uuc2VyaWVzSW5kZXgsdS5wb2ludEluZGV4LHUuZGF0YV07dmFyIHA9alF1ZXJ5LkV2ZW50KCJqcXBsb3REYXRhTW91c2VPdmVyIik7cC5wYWdlWD1zLnBhZ2VYO3AucGFnZVk9cy5wYWdlWTt0LnRhcmdldC50cmlnZ2VyKHAscSk7aWYodC5zZXJpZXNbcVswXV0uaGlnaGxpZ2h0TW91c2VPdmVyJiYhKHFbMF09PXQucGx1Z2lucy5waWVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4JiZxWzFdPT10LnNlcmllc1txWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpe3ZhciBvPWpRdWVyeS5FdmVudCgianFwbG90RGF0YUhpZ2hsaWdodCIpO28ud2hpY2g9cy53aGljaDtvLnBhZ2VYPXMucGFnZVg7by5wYWdlWT1zLnBhZ2VZO3QudGFyZ2V0LnRyaWdnZXIobyxxKTtkKHQscVswXSxxWzFdKX19ZWxzZXtpZih1PT1udWxsKXtrKHQpfX19ZnVuY3Rpb24gYShyLHEsdSx0LHMpe2lmKHQpe3ZhciBwPVt0LnNlcmllc0luZGV4LHQucG9pbnRJbmRleCx0LmRhdGFdO2lmKHMuc2VyaWVzW3BbMF1dLmhpZ2hsaWdodE1vdXNlRG93biYmIShwWzBdPT1zLnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCYmcFsxXT09cy5zZXJpZXNbcFswXV0uX2hpZ2hsaWdodGVkUG9pbnQpKXt2YXIgbz1qUXVlcnkuRXZlbnQoImpxcGxvdERhdGFIaWdobGlnaHQiKTtvLndoaWNoPXIud2hpY2g7by5wYWdlWD1yLnBhZ2VYO28ucGFnZVk9ci5wYWdlWTtzLnRhcmdldC50cmlnZ2VyKG8scCk7ZChzLHBbMF0scFsxXSl9fWVsc2V7aWYodD09bnVsbCl7ayhzKX19fWZ1bmN0aW9uIGwocSxwLHQscyxyKXt2YXIgbz1yLnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDtpZihvIT1udWxsJiZyLnNlcmllc1tvXS5oaWdobGlnaHRNb3VzZURvd24pe2socil9fWZ1bmN0aW9uIGYocixxLHUsdCxzKXtpZih0KXt2YXIgcD1bdC5zZXJpZXNJbmRleCx0LnBvaW50SW5kZXgsdC5kYXRhXTt2YXIgbz1qUXVlcnkuRXZlbnQoImpxcGxvdERhdGFDbGljayIpO28ud2hpY2g9ci53aGljaDtvLnBhZ2VYPXIucGFnZVg7by5wYWdlWT1yLnBhZ2VZO3MudGFyZ2V0LnRyaWdnZXIobyxwKX19ZnVuY3Rpb24gbihzLHIsdix1LHQpe2lmKHUpe3ZhciBxPVt1LnNlcmllc0luZGV4LHUucG9pbnRJbmRleCx1LmRhdGFdO3ZhciBvPXQucGx1Z2lucy5waWVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4O2lmKG8hPW51bGwmJnQuc2VyaWVzW29dLmhpZ2hsaWdodE1vdXNlRG93bil7ayh0KX12YXIgcD1qUXVlcnkuRXZlbnQoImpxcGxvdERhdGFSaWdodENsaWNrIik7cC53aGljaD1zLndoaWNoO3AucGFnZVg9cy5wYWdlWDtwLnBhZ2VZPXMucGFnZVk7dC50YXJnZXQudHJpZ2dlcihwLHEpfX1mdW5jdGlvbiBpKCl7aWYodGhpcy5wbHVnaW5zLnBpZVJlbmRlcmVyJiZ0aGlzLnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzKXt0aGlzLnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLnJlc2V0Q2FudmFzKCk7dGhpcy5wbHVnaW5zLnBpZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcz1udWxsfXRoaXMucGx1Z2lucy5waWVSZW5kZXJlcj17aGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDpudWxsfTt0aGlzLnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzPW5ldyBlLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7dmFyIHA9ZSh0aGlzLnRhcmdldElkKyIgLmpxcGxvdC1kYXRhLWxhYmVsIik7aWYocC5sZW5ndGgpe2UocFswXSkuYmVmb3JlKHRoaXMucGx1Z2lucy5waWVSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywianFwbG90LXBpZVJlbmRlcmVyLWhpZ2hsaWdodC1jYW52YXMiLHRoaXMuX3Bsb3REaW1lbnNpb25zLHRoaXMpKX1lbHNle3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKHRoaXMucGx1Z2lucy5waWVSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywianFwbG90LXBpZVJlbmRlcmVyLWhpZ2hsaWdodC1jYW52YXMiLHRoaXMuX3Bsb3REaW1lbnNpb25zLHRoaXMpKX12YXIgbz10aGlzLnBsdWdpbnMucGllUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLnNldENvbnRleHQoKTt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoIm1vdXNlbGVhdmUiLHtwbG90OnRoaXN9LGZ1bmN0aW9uKHEpe2socS5kYXRhLnBsb3QpfSl9ZS5qcXBsb3QucHJlSW5pdEhvb2tzLnB1c2goYyk7ZS5qcXBsb3QuUGllVGlja1JlbmRlcmVyPWZ1bmN0aW9uKCl7ZS5qcXBsb3QuQXhpc1RpY2tSZW5kZXJlci5jYWxsKHRoaXMpfTtlLmpxcGxvdC5QaWVUaWNrUmVuZGVyZXIucHJvdG90eXBlPW5ldyBlLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyKCk7ZS5qcXBsb3QuUGllVGlja1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLmpxcGxvdC5QaWVUaWNrUmVuZGVyZXJ9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.pointLabels.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgCiAgICAvKioKICAgICAqIENsYXNzOiAkLmpxcGxvdC5Qb2ludExhYmVscwogICAgICogUGx1Z2luIGZvciBwdXR0aW5nIGxhYmVscyBhdCB0aGUgZGF0YSBwb2ludHMuCiAgICAgKiAKICAgICAqIFRvIHVzZSB0aGlzIHBsdWdpbiwgaW5jbHVkZSB0aGUganMKICAgICAqIGZpbGUgaW4geW91ciBzb3VyY2U6CiAgICAgKiAKICAgICAqID4gPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0icGx1Z2lucy9qcXBsb3QucG9pbnRMYWJlbHMuanMiPjwvc2NyaXB0PgogICAgICogCiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgbGFzdCB2YWx1ZSBpbiB0aGUgZGF0YSBwb25pdCBhcnJheSBpbiB0aGUgZGF0YSBzZXJpZXMgaXMgdXNlZAogICAgICogZm9yIHRoZSBsYWJlbC4gIEZvciBtb3N0IHNlcmllcyByZW5kZXJlcnMsIGV4dHJhIGRhdGEgY2FuIGJlIGFkZGVkIHRvIHRoZSAKICAgICAqIGRhdGEgcG9pbnQgYXJyYXlzIGFuZCB0aGUgbGFzdCB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIGxhYmVsLgogICAgICogCiAgICAgKiBGb3IgaW5zdGFuY2UsIAogICAgICogdGhpcyBzZXJpZXM6CiAgICAgKiAKICAgICAqID4gW1sxLDRdLCBbMyw1XSwgWzcsMl1dCiAgICAgKiAKICAgICAqIFdvdWxkLCBieSBkZWZhdWx0LCB1c2UgdGhlIHkgdmFsdWVzIGluIHRoZSBsYWJlbHMuCiAgICAgKiBFeHRyYSBkYXRhIGNhbiBiZSBhZGRlZCB0byB0aGUgc2VyaWVzIGxpa2Ugc286CiAgICAgKiAKICAgICAqID4gW1sxLDQsJ21pZCddLCBbMyA1LCdoaSddLCBbNywyLCdsb3cnXV0KICAgICAqIAogICAgICogQW5kIG5vdyB0aGUgcG9pbnQgbGFiZWxzIHdvdWxkIGJlICdtaWQnLCAnbG93JywgYW5kICdoaScuCiAgICAgKiAKICAgICAqIE9wdGlvbnMgdG8gdGhlIHBvaW50IGxhYmVscyBhbmQgYSBjdXN0b20gbGFiZWxzIGFycmF5IGNhbiBiZSBwYXNzZWQgaW50byB0aGUKICAgICAqICJwb2ludExhYmVscyIgb3B0aW9uIG9uIHRoZSBzZXJpZXMgb3B0aW9uIGxpa2Ugc286CiAgICAgKiAKICAgICAqID4gc2VyaWVzOlt7cG9pbnRMYWJlbHM6ewogICAgICogPiAgICBsYWJlbHM6WydtaWQnLCAnaGknLCAnbG93J10sCiAgICAgKiA+ICAgIGxvY2F0aW9uOidzZScsCiAgICAgKiA+ICAgIHlwYWRkaW5nOiAxMgogICAgICogPiAgICB9CiAgICAgKiA+IH1dCiAgICAgKiAKICAgICAqIEEgY3VzdG9tIGxhYmVscyBhcnJheSBpbiB0aGUgb3B0aW9ucyB0YWtlcyBwcmVjZW5kZW5jZSBvdmVyIGFueSBsYWJlbHMKICAgICAqIGluIHRoZSBzZXJpZXMgZGF0YS4gIElmIHlvdSBoYXZlIGEgY3VzdG9tIGxhYmVscyBhcnJheSBpbiB0aGUgb3B0aW9ucywKICAgICAqIGJ1dCBzdGlsbCB3YW50IHRvIHVzZSB2YWx1ZXMgZnJvbSB0aGUgc2VyaWVzIGFycmF5IGFzIGxhYmVscywgc2V0IHRoZQogICAgICogImxhYmVsc0Zyb21TZXJpZXMiIG9wdGlvbiB0byB0cnVlLgogICAgICogCiAgICAgKiBCeSBkZWZhdWx0LCBodG1sIGVudGl0aWVzICg8LCA+LCBldGMuKSBhcmUgZXNjYXBlZCBpbiBwb2ludCBsYWJlbHMuICAKICAgICAqIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgYWN0dWFsIGh0bWwgbWFya3VwIGluIHRoZSBsYWJlbHMsIAogICAgICogc2V0IHRoZSAiZXNjYXBlSFRNTCIgb3B0aW9uIHRvIGZhbHNlLgogICAgICogCiAgICAgKi8KICAgICQuanFwbG90LlBvaW50TGFiZWxzID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIC8vIEdyb3VwOiBQcm9wZXJ0aWVzCiAgICAgICAgLy8KICAgICAgICAvLyBwcm9wOiBzaG93CiAgICAgICAgLy8gc2hvdyB0aGUgbGFiZWxzIG9yIG5vdC4KICAgICAgICB0aGlzLnNob3cgPSAkLmpxcGxvdC5jb25maWcuZW5hYmxlUGx1Z2luczsKICAgICAgICAvLyBwcm9wOiBsb2NhdGlvbgogICAgICAgIC8vIGNvbXBhc3MgbG9jYXRpb24gd2hlcmUgdG8gcG9zaXRpb24gdGhlIGxhYmVsIGFyb3VuZCB0aGUgcG9pbnQuCiAgICAgICAgLy8gJ24nLCAnbmUnLCAnZScsICdzZScsICdzJywgJ3N3JywgJ3cnLCAnbncnCiAgICAgICAgdGhpcy5sb2NhdGlvbiA9ICduJzsKICAgICAgICAvLyBwcm9wOiBsYWJlbHNGcm9tU2VyaWVzCiAgICAgICAgLy8gdHJ1ZSB0byB1c2UgbGFiZWxzIHdpdGhpbiBkYXRhIHBvaW50IGFycmF5cy4KICAgICAgICB0aGlzLmxhYmVsc0Zyb21TZXJpZXMgPSBmYWxzZTsKICAgICAgICAvLyBwcm9wOiBzZXJpZXNMYWJlbEluZGV4CiAgICAgICAgLy8gYXJyYXkgaW5kZXggZm9yIGxvY2F0aW9uIG9mIGxhYmVscyB3aXRoaW4gZGF0YSBwb2ludCBhcnJheXMuCiAgICAgICAgLy8gaWYgbnVsbCwgd2lsbCB1c2UgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgZGF0YSBwb2ludCBhcnJheS4KICAgICAgICB0aGlzLnNlcmllc0xhYmVsSW5kZXggPSBudWxsOwogICAgICAgIC8vIHByb3A6IGxhYmVscwogICAgICAgIC8vIGFycmF5IG9mIGFycmF5cyBvZiBsYWJlbHMsIG9uZSBhcnJheSBmb3IgZWFjaCBzZXJpZXMuCiAgICAgICAgdGhpcy5sYWJlbHMgPSBbXTsKICAgICAgICAvLyBhY3R1YWwgbGFiZWxzIHRoYXQgd2lsbCBnZXQgZGlzcGxheWVkLgogICAgICAgIC8vIG5lZWRlZCB0byBwcmVzZXJ2ZSB1c2VyIHNwZWNpZmllZCBsYWJlbHMgaW4gbGFiZWxzIGFycmF5LgogICAgICAgIHRoaXMuX2xhYmVscyA9IFtdOwogICAgICAgIC8vIHByb3A6IHN0YWNrZWRWYWx1ZQogICAgICAgIC8vIHRydWUgdG8gZGlzcGxheSB2YWx1ZSBhcyBzdGFja2VkIGluIGEgc3RhY2tlZCBwbG90LgogICAgICAgIC8vIG5vIGVmZmVjdCBpZiBsYWJlbHMgaXMgc3BlY2lmaWVkLgogICAgICAgIHRoaXMuc3RhY2tlZFZhbHVlID0gZmFsc2U7CiAgICAgICAgLy8gcHJvcDogeXBhZGRpbmcKICAgICAgICAvLyB2ZXJ0aWNhbCBwYWRkaW5nIGluIHBpeGVscyBiZXR3ZWVuIHBvaW50IGFuZCBsYWJlbAogICAgICAgIHRoaXMueXBhZGRpbmcgPSA2OwogICAgICAgIC8vIHByb3A6IHhwYWRkaW5nCiAgICAgICAgLy8gaG9yaXpvbnRhbCBwYWRkaW5nIGluIHBpeGVscyBiZXR3ZWVuIHBvaW50IGFuZCBsYWJlbAogICAgICAgIHRoaXMueHBhZGRpbmcgPSA2OwogICAgICAgIC8vIHByb3A6IGVzY2FwZUhUTUwKICAgICAgICAvLyB0cnVlIHRvIGVzY2FwZSBodG1sIGVudGl0aWVzIGluIHRoZSBsYWJlbHMuCiAgICAgICAgLy8gSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBtYXJrdXAgaW4gdGhlIGxhYmVscywgc2V0IHRvIGZhbHNlLgogICAgICAgIHRoaXMuZXNjYXBlSFRNTCA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogZWRnZVRvbGVyYW5jZQogICAgICAgIC8vIE51bWJlciBvZiBwaXhlbHMgdGhhdCB0aGUgbGFiZWwgbXVzdCBiZSBhd2F5IGZyb20gYW4gYXhpcwogICAgICAgIC8vIGJvdW5kYXJ5IGluIG9yZGVyIHRvIGJlIGRyYXduLiAgTmVnYXRpdmUgdmFsdWVzIHdpbGwgYWxsb3cgb3ZlcmxhcAogICAgICAgIC8vIHdpdGggdGhlIGdyaWQgYm91bmRhcmllcy4KICAgICAgICB0aGlzLmVkZ2VUb2xlcmFuY2UgPSAtNTsKICAgICAgICAvLyBwcm9wOiBmb3JtYXR0ZXIKICAgICAgICAvLyBBIGNsYXNzIG9mIGEgZm9ybWF0dGVyIGZvciB0aGUgdGljayB0ZXh0LiAgc3ByaW50ZiBieSBkZWZhdWx0LgogICAgICAgIHRoaXMuZm9ybWF0dGVyID0gJC5qcXBsb3QuRGVmYXVsdFRpY2tGb3JtYXR0ZXI7CiAgICAgICAgLy8gcHJvcDogZm9ybWF0U3RyaW5nCiAgICAgICAgLy8gc3RyaW5nIHBhc3NlZCB0byB0aGUgZm9ybWF0dGVyLgogICAgICAgIHRoaXMuZm9ybWF0U3RyaW5nID0gJyc7CiAgICAgICAgLy8gcHJvcDogaGlkZVplcm9zCiAgICAgICAgLy8gdHJ1ZSB0byBub3Qgc2hvdyBhIGxhYmVsIGZvciBhIHZhbHVlIHdoaWNoIGlzIDAuCiAgICAgICAgdGhpcy5oaWRlWmVyb3MgPSBmYWxzZTsKICAgICAgICB0aGlzLl9lbGVtcyA9IFtdOwogICAgICAgIAogICAgICAgICQuZXh0ZW5kKHRydWUsIHRoaXMsIG9wdGlvbnMpOwogICAgfTsKICAgIAogICAgdmFyIGxvY2F0aW9ucyA9IFsnbncnLCAnbicsICduZScsICdlJywgJ3NlJywgJ3MnLCAnc3cnLCAndyddOwogICAgdmFyIGxvY2F0aW9uSW5kaWNpZXMgPSB7J253JzowLCAnbic6MSwgJ25lJzoyLCAnZSc6MywgJ3NlJzo0LCAncyc6NSwgJ3N3Jzo2LCAndyc6N307CiAgICB2YXIgb3Bwb3NpdGVMb2NhdGlvbnMgPSBbJ3NlJywgJ3MnLCAnc3cnLCAndycsICdudycsICduJywgJ25lJywgJ2UnXTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgYSBzZXJpZXMKICAgICQuanFwbG90LlBvaW50TGFiZWxzLmluaXQgPSBmdW5jdGlvbiAodGFyZ2V0LCBkYXRhLCBzZXJpZXNEZWZhdWx0cywgb3B0cywgcGxvdCl7CiAgICAgICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgc2VyaWVzRGVmYXVsdHMsIG9wdHMpOwogICAgICAgIG9wdGlvbnMucG9pbnRMYWJlbHMgPSBvcHRpb25zLnBvaW50TGFiZWxzIHx8IHt9OwogICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09PSAkLmpxcGxvdC5CYXJSZW5kZXJlciAmJiB0aGlzLmJhckRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmICFvcHRpb25zLnBvaW50TGFiZWxzLmxvY2F0aW9uKSB7CiAgICAgICAgICAgIG9wdGlvbnMucG9pbnRMYWJlbHMubG9jYXRpb24gPSAnZSc7CiAgICAgICAgfQogICAgICAgIC8vIGFkZCBhIHBvaW50TGFiZWxzIGF0dHJpYnV0ZSB0byB0aGUgc2VyaWVzIHBsdWdpbnMKICAgICAgICB0aGlzLnBsdWdpbnMucG9pbnRMYWJlbHMgPSBuZXcgJC5qcXBsb3QuUG9pbnRMYWJlbHMob3B0aW9ucy5wb2ludExhYmVscyk7CiAgICAgICAgdGhpcy5wbHVnaW5zLnBvaW50TGFiZWxzLnNldExhYmVscy5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2Ygc2VyaWVzCiAgICAkLmpxcGxvdC5Qb2ludExhYmVscy5wcm90b3R5cGUuc2V0TGFiZWxzID0gZnVuY3Rpb24oKSB7ICAgCiAgICAgICAgdmFyIHAgPSB0aGlzLnBsdWdpbnMucG9pbnRMYWJlbHM7IAogICAgICAgIHZhciBsYWJlbElkeDsKICAgICAgICBpZiAocC5zZXJpZXNMYWJlbEluZGV4ICE9IG51bGwpIHsKICAgICAgICAgICAgbGFiZWxJZHggPSBwLnNlcmllc0xhYmVsSW5kZXg7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHRoaXMucmVuZGVyZXIuY29uc3RydWN0b3IgPT09ICQuanFwbG90LkJhclJlbmRlcmVyICYmIHRoaXMuYmFyRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHsKICAgICAgICAgICBsYWJlbElkeCA9ICh0aGlzLl9wbG90RGF0YVswXS5sZW5ndGggPCAzKSA/IDAgOiB0aGlzLl9wbG90RGF0YVswXS5sZW5ndGggLTE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBsYWJlbElkeCA9ICh0aGlzLl9wbG90RGF0YS5sZW5ndGggPT09IDApID8gMCA6IHRoaXMuX3Bsb3REYXRhWzBdLmxlbmd0aCAtMTsKICAgICAgICB9CiAgICAgICAgcC5fbGFiZWxzID0gW107CiAgICAgICAgaWYgKHAubGFiZWxzLmxlbmd0aCA9PT0gMCB8fCBwLmxhYmVsc0Zyb21TZXJpZXMpIHsgICAgCiAgICAgICAgICAgIGlmIChwLnN0YWNrZWRWYWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Bsb3REYXRhLmxlbmd0aCAmJiB0aGlzLl9wbG90RGF0YVswXS5sZW5ndGgpewogICAgICAgICAgICAgICAgICAgIC8vIHZhciBpZHggPSBwLnNlcmllc0xhYmVsSW5kZXggfHwgdGhpcy5fcGxvdERhdGFbMF0ubGVuZ3RoIC0xOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLl9wbG90RGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBwLl9sYWJlbHMucHVzaCh0aGlzLl9wbG90RGF0YVtpXVtsYWJlbElkeF0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIHZhciBkID0gdGhpcy5fcGxvdERhdGE7CiAgICAgICAgICAgICAgICB2YXIgZCA9IHRoaXMuZGF0YTsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09PSAkLmpxcGxvdC5CYXJSZW5kZXJlciAmJiB0aGlzLndhdGVyZmFsbCkgewogICAgICAgICAgICAgICAgICAgIGQgPSB0aGlzLl9kYXRhOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGQubGVuZ3RoICYmIGRbMF0ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gdmFyIGlkeCA9IHAuc2VyaWVzTGFiZWxJbmRleCB8fCBkWzBdLmxlbmd0aCAtMTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8ZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBwLl9sYWJlbHMucHVzaChkW2ldW2xhYmVsSWR4XSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZCA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocC5sYWJlbHMubGVuZ3RoKXsKICAgICAgICAgICAgcC5fbGFiZWxzID0gcC5sYWJlbHM7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgJC5qcXBsb3QuUG9pbnRMYWJlbHMucHJvdG90eXBlLnhPZmZzZXQgPSBmdW5jdGlvbihlbGVtLCBsb2NhdGlvbiwgcGFkZGluZykgewogICAgICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgdGhpcy5sb2NhdGlvbjsKICAgICAgICBwYWRkaW5nID0gcGFkZGluZyB8fCB0aGlzLnhwYWRkaW5nOwogICAgICAgIHZhciBvZmZzZXQ7CiAgICAgICAgCiAgICAgICAgc3dpdGNoIChsb2NhdGlvbikgewogICAgICAgICAgICBjYXNlICdudyc6CiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtZWxlbS5vdXRlcldpZHRoKHRydWUpIC0gdGhpcy54cGFkZGluZzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgIG9mZnNldCA9IC1lbGVtLm91dGVyV2lkdGgodHJ1ZSkvMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICduZSc6CiAgICAgICAgICAgICAgICBvZmZzZXQgPSAgdGhpcy54cGFkZGluZzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdlJzoKICAgICAgICAgICAgICAgIG9mZnNldCA9IHRoaXMueHBhZGRpbmc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnc2UnOgogICAgICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy54cGFkZGluZzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgIG9mZnNldCA9IC1lbGVtLm91dGVyV2lkdGgodHJ1ZSkvMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdzdyc6CiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtZWxlbS5vdXRlcldpZHRoKHRydWUpIC0gdGhpcy54cGFkZGluZzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd3JzoKICAgICAgICAgICAgICAgIG9mZnNldCA9IC1lbGVtLm91dGVyV2lkdGgodHJ1ZSkgLSB0aGlzLnhwYWRkaW5nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNhbWUgYXMgJ253JwogICAgICAgICAgICAgICAgb2Zmc2V0ID0gLWVsZW0ub3V0ZXJXaWR0aCh0cnVlKSAtIHRoaXMueHBhZGRpbmc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9mZnNldDsgCiAgICB9OwogICAgCiAgICAkLmpxcGxvdC5Qb2ludExhYmVscy5wcm90b3R5cGUueU9mZnNldCA9IGZ1bmN0aW9uKGVsZW0sIGxvY2F0aW9uLCBwYWRkaW5nKSB7CiAgICAgICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCB0aGlzLmxvY2F0aW9uOwogICAgICAgIHBhZGRpbmcgPSBwYWRkaW5nIHx8IHRoaXMueHBhZGRpbmc7CiAgICAgICAgdmFyIG9mZnNldDsKICAgICAgICAKICAgICAgICBzd2l0Y2ggKGxvY2F0aW9uKSB7CiAgICAgICAgICAgIGNhc2UgJ253JzoKICAgICAgICAgICAgICAgIG9mZnNldCA9IC1lbGVtLm91dGVySGVpZ2h0KHRydWUpIC0gdGhpcy55cGFkZGluZzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgIG9mZnNldCA9IC1lbGVtLm91dGVySGVpZ2h0KHRydWUpIC0gdGhpcy55cGFkZGluZzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICduZSc6CiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtZWxlbS5vdXRlckhlaWdodCh0cnVlKSAtIHRoaXMueXBhZGRpbmc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZSc6CiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtZWxlbS5vdXRlckhlaWdodCh0cnVlKS8yOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3NlJzoKICAgICAgICAgICAgICAgIG9mZnNldCA9IHRoaXMueXBhZGRpbmc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnlwYWRkaW5nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3N3JzoKICAgICAgICAgICAgICAgIG9mZnNldCA9IHRoaXMueXBhZGRpbmc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndyc6CiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtZWxlbS5vdXRlckhlaWdodCh0cnVlKS8yOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNhbWUgYXMgJ253JwogICAgICAgICAgICAgICAgb2Zmc2V0ID0gLWVsZW0ub3V0ZXJIZWlnaHQodHJ1ZSkgLSB0aGlzLnlwYWRkaW5nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvZmZzZXQ7IAogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2Ygc2VyaWVzCiAgICAkLmpxcGxvdC5Qb2ludExhYmVscy5kcmF3ID0gZnVuY3Rpb24gKHNjdHgsIG9wdGlvbnMsIHBsb3QpIHsKICAgICAgICB2YXIgcCA9IHRoaXMucGx1Z2lucy5wb2ludExhYmVsczsKICAgICAgICAvLyBzZXQgbGFiZWxzIGFnYWluIGluIGNhc2UgdGhleSBoYXZlIGNoYW5nZWQuCiAgICAgICAgcC5zZXRMYWJlbHMuY2FsbCh0aGlzKTsKICAgICAgICAvLyByZW1vdmUgYW55IHByZXZpb3VzIGxhYmVscwogICAgICAgIGZvciAodmFyIGk9MDsgaTxwLl9lbGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAvLyBNZW1vcnkgTGVha3MgcGF0Y2gKICAgICAgICAgICAgLy8gcC5fZWxlbXNbaV0ucmVtb3ZlKCk7CiAgICAgICAgICAgIHAuX2VsZW1zW2ldLmVtcHR5Rm9yY2UoKTsKICAgICAgICB9CiAgICAgICAgcC5fZWxlbXMuc3BsaWNlKDAsIHAuX2VsZW1zLmxlbmd0aCk7CgogICAgICAgIGlmIChwLnNob3cpIHsKICAgICAgICAgICAgdmFyIGF4ID0gJ18nK3RoaXMuX3N0YWNrQXhpcysnYXhpcyc7CiAgICAgICAgCiAgICAgICAgICAgIGlmICghcC5mb3JtYXRTdHJpbmcpIHsKICAgICAgICAgICAgICAgIHAuZm9ybWF0U3RyaW5nID0gdGhpc1theF0uX3RpY2tzWzBdLmZvcm1hdFN0cmluZzsKICAgICAgICAgICAgICAgIHAuZm9ybWF0dGVyID0gdGhpc1theF0uX3RpY2tzWzBdLmZvcm1hdHRlcjsKICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICB2YXIgcGQgPSB0aGlzLl9wbG90RGF0YTsKICAgICAgICAgICAgdmFyIHBwZCA9IHRoaXMuX3ByZXZQbG90RGF0YTsKICAgICAgICAgICAgdmFyIHhheCA9IHRoaXMuX3hheGlzOwogICAgICAgICAgICB2YXIgeWF4ID0gdGhpcy5feWF4aXM7CiAgICAgICAgICAgIHZhciBlbGVtLCBoZWxlbTsKCiAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbD1wLl9sYWJlbHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgbGFiZWwgPSBwLl9sYWJlbHNbaV07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIChsYWJlbCA9PSBudWxsIHx8IChwLmhpZGVaZXJvcyAmJiBwYXJzZUludChsYWJlbCwgMTApID09IDApKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGxhYmVsID0gcC5mb3JtYXR0ZXIocC5mb3JtYXRTdHJpbmcsIGxhYmVsKTsKCiAgICAgICAgICAgICAgICBoZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICAgICAgcC5fZWxlbXNbaV0gPSAkKGhlbGVtKTsKCiAgICAgICAgICAgICAgICBlbGVtID0gcC5fZWxlbXNbaV07CgoKICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MoJ2pxcGxvdC1wb2ludC1sYWJlbCBqcXBsb3Qtc2VyaWVzLScrdGhpcy5pbmRleCsnIGpxcGxvdC1wb2ludC0nK2kpOwogICAgICAgICAgICAgICAgZWxlbS5jc3MoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7CiAgICAgICAgICAgICAgICBlbGVtLmluc2VydEFmdGVyKHNjdHguY2FudmFzKTsKCiAgICAgICAgICAgICAgICBpZiAocC5lc2NhcGVIVE1MKSB7CiAgICAgICAgICAgICAgICAgICAgZWxlbS50ZXh0KGxhYmVsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGVsZW0uaHRtbChsYWJlbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBwLmxvY2F0aW9uOwogICAgICAgICAgICAgICAgaWYgKCh0aGlzLmZpbGxUb1plcm8gJiYgcGRbaV1bMV0gPCAwKSB8fCAodGhpcy5maWxsVG9aZXJvICYmIHRoaXMuX3R5cGUgPT09ICdiYXInICYmIHRoaXMuYmFyRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgJiYgcGRbaV1bMF0gPCAwKSB8fCAodGhpcy53YXRlcmZhbGwgJiYgcGFyc2VJbnQobGFiZWwsIDEwKSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBvcHBvc2l0ZUxvY2F0aW9uc1tsb2NhdGlvbkluZGljaWVzW2xvY2F0aW9uXV07CiAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgIHZhciBlbGwgPSB4YXgudTJwKHBkW2ldWzBdKSArIHAueE9mZnNldChlbGVtLCBsb2NhdGlvbik7CiAgICAgICAgICAgICAgICB2YXIgZWx0ID0geWF4LnUycChwZFtpXVsxXSkgKyBwLnlPZmZzZXQoZWxlbSwgbG9jYXRpb24pOwoKICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgc3RhY2tlZCBjaGFydCBidXQgYXJlIG5vdCBzaG93aW5nIHN0YWNrZWQgdmFsdWVzLAogICAgICAgICAgICAgICAgLy8gcGxhY2UgbGFiZWxzIGluIGNlbnRlci4KICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdGFjayAmJiAhcC5zdGFja2VkVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5iYXJEaXJlY3Rpb24gPT09ICJ2ZXJ0aWNhbCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWx0ID0gKHRoaXMuX2JhclBvaW50c1tpXVswXVsxXSArIHRoaXMuX2JhclBvaW50c1tpXVsxXVsxXSkgLyAyICsgcGxvdC5fZ3JpZFBhZGRpbmcudG9wIC0gMC41ICogZWxlbS5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsbCA9ICh0aGlzLl9iYXJQb2ludHNbaV1bMl1bMF0gKyB0aGlzLl9iYXJQb2ludHNbaV1bMF1bMF0pIC8gMiArIHBsb3QuX2dyaWRQYWRkaW5nLmxlZnQgLSAwLjUgKiBlbGVtLm91dGVyV2lkdGgodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLmNvbnN0cnVjdG9yID09ICQuanFwbG90LkJhclJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFyRGlyZWN0aW9uID09ICJ2ZXJ0aWNhbCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxsICs9IHRoaXMuX2Jhck51ZGdlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWx0IC09IHRoaXMuX2Jhck51ZGdlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsZW0uY3NzKCdsZWZ0JywgZWxsKTsKICAgICAgICAgICAgICAgIGVsZW0uY3NzKCd0b3AnLCBlbHQpOwogICAgICAgICAgICAgICAgdmFyIGVsciA9IGVsbCArIGVsZW0ud2lkdGgoKTsKICAgICAgICAgICAgICAgIHZhciBlbGIgPSBlbHQgKyBlbGVtLmhlaWdodCgpOwogICAgICAgICAgICAgICAgdmFyIGV0ID0gcC5lZGdlVG9sZXJhbmNlOwogICAgICAgICAgICAgICAgdmFyIHNjbCA9ICQoc2N0eC5jYW52YXMpLnBvc2l0aW9uKCkubGVmdDsKICAgICAgICAgICAgICAgIHZhciBzY3QgPSAkKHNjdHguY2FudmFzKS5wb3NpdGlvbigpLnRvcDsKICAgICAgICAgICAgICAgIHZhciBzY3IgPSBzY3R4LmNhbnZhcy53aWR0aCArIHNjbDsKICAgICAgICAgICAgICAgIHZhciBzY2IgPSBzY3R4LmNhbnZhcy5oZWlnaHQgKyBzY3Q7CiAgICAgICAgICAgICAgICAvLyBpZiBsYWJlbCBpcyBvdXRzaWRlIG9mIGFsbG93ZWQgYXJlYSwgcmVtb3ZlIGl0CiAgICAgICAgICAgICAgICBpZiAoZWxsIC0gZXQgPCBzY2wgfHwgZWx0IC0gZXQgPCBzY3QgfHwgZWxyICsgZXQgPiBzY3IgfHwgZWxiICsgZXQgPiBzY2IpIHsKICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsZW0gPSBudWxsOwogICAgICAgICAgICAgICAgaGVsZW0gPSBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBmaW5hbGx5LCBhbmltYXRlIHRoZW0gaWYgdGhlIHNlcmllcyBpcyBhbmltYXRlZAogICAgICAgICAgICAvLyBpZiAodGhpcy5yZW5kZXJlci5hbmltYXRpb24gJiYgdGhpcy5yZW5kZXJlci5hbmltYXRpb24uX3N1cHBvcnRlZCAmJiB0aGlzLnJlbmRlcmVyLmFuaW1hdGlvbi5zaG93ICYmIHBsb3QuX2RyYXdDb3VudCA8IDIpIHsKICAgICAgICAgICAgLy8gICAgIHZhciBzZWwgPSAnLmpxcGxvdC1wb2ludC1sYWJlbC5qcXBsb3Qtc2VyaWVzLScrdGhpcy5pbmRleDsKICAgICAgICAgICAgLy8gICAgICQoc2VsKS5oaWRlKCk7CiAgICAgICAgICAgIC8vICAgICAkKHNlbCkuZmFkZUluKDEwMDApOwogICAgICAgICAgICAvLyB9CgogICAgICAgIH0KICAgIH07CiAgICAKICAgICQuanFwbG90LnBvc3RTZXJpZXNJbml0SG9va3MucHVzaCgkLmpxcGxvdC5Qb2ludExhYmVscy5pbml0KTsKICAgICQuanFwbG90LnBvc3REcmF3U2VyaWVzSG9va3MucHVzaCgkLmpxcGxvdC5Qb2ludExhYmVscy5kcmF3KTsKfSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.pointLabels.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGMpe2MuanFwbG90LlBvaW50TGFiZWxzPWZ1bmN0aW9uKGUpe3RoaXMuc2hvdz1jLmpxcGxvdC5jb25maWcuZW5hYmxlUGx1Z2luczt0aGlzLmxvY2F0aW9uPSJuIjt0aGlzLmxhYmVsc0Zyb21TZXJpZXM9ZmFsc2U7dGhpcy5zZXJpZXNMYWJlbEluZGV4PW51bGw7dGhpcy5sYWJlbHM9W107dGhpcy5fbGFiZWxzPVtdO3RoaXMuc3RhY2tlZFZhbHVlPWZhbHNlO3RoaXMueXBhZGRpbmc9Njt0aGlzLnhwYWRkaW5nPTY7dGhpcy5lc2NhcGVIVE1MPXRydWU7dGhpcy5lZGdlVG9sZXJhbmNlPS01O3RoaXMuZm9ybWF0dGVyPWMuanFwbG90LkRlZmF1bHRUaWNrRm9ybWF0dGVyO3RoaXMuZm9ybWF0U3RyaW5nPSIiO3RoaXMuaGlkZVplcm9zPWZhbHNlO3RoaXMuX2VsZW1zPVtdO2MuZXh0ZW5kKHRydWUsdGhpcyxlKX07dmFyIGE9WyJudyIsIm4iLCJuZSIsImUiLCJzZSIsInMiLCJzdyIsInciXTt2YXIgZD17bnc6MCxuOjEsbmU6MixlOjMsc2U6NCxzOjUsc3c6Nix3Ojd9O3ZhciBiPVsic2UiLCJzIiwic3ciLCJ3IiwibnciLCJuIiwibmUiLCJlIl07Yy5qcXBsb3QuUG9pbnRMYWJlbHMuaW5pdD1mdW5jdGlvbihqLGgsZixnLGkpe3ZhciBlPWMuZXh0ZW5kKHRydWUse30sZixnKTtlLnBvaW50TGFiZWxzPWUucG9pbnRMYWJlbHN8fHt9O2lmKHRoaXMucmVuZGVyZXIuY29uc3RydWN0b3I9PT1jLmpxcGxvdC5CYXJSZW5kZXJlciYmdGhpcy5iYXJEaXJlY3Rpb249PT0iaG9yaXpvbnRhbCImJiFlLnBvaW50TGFiZWxzLmxvY2F0aW9uKXtlLnBvaW50TGFiZWxzLmxvY2F0aW9uPSJlIn10aGlzLnBsdWdpbnMucG9pbnRMYWJlbHM9bmV3IGMuanFwbG90LlBvaW50TGFiZWxzKGUucG9pbnRMYWJlbHMpO3RoaXMucGx1Z2lucy5wb2ludExhYmVscy5zZXRMYWJlbHMuY2FsbCh0aGlzKX07Yy5qcXBsb3QuUG9pbnRMYWJlbHMucHJvdG90eXBlLnNldExhYmVscz1mdW5jdGlvbigpe3ZhciBmPXRoaXMucGx1Z2lucy5wb2ludExhYmVsczt2YXIgaDtpZihmLnNlcmllc0xhYmVsSW5kZXghPW51bGwpe2g9Zi5zZXJpZXNMYWJlbEluZGV4fWVsc2V7aWYodGhpcy5yZW5kZXJlci5jb25zdHJ1Y3Rvcj09PWMuanFwbG90LkJhclJlbmRlcmVyJiZ0aGlzLmJhckRpcmVjdGlvbj09PSJob3Jpem9udGFsIil7aD0odGhpcy5fcGxvdERhdGFbMF0ubGVuZ3RoPDMpPzA6dGhpcy5fcGxvdERhdGFbMF0ubGVuZ3RoLTF9ZWxzZXtoPSh0aGlzLl9wbG90RGF0YS5sZW5ndGg9PT0wKT8wOnRoaXMuX3Bsb3REYXRhWzBdLmxlbmd0aC0xfX1mLl9sYWJlbHM9W107aWYoZi5sYWJlbHMubGVuZ3RoPT09MHx8Zi5sYWJlbHNGcm9tU2VyaWVzKXtpZihmLnN0YWNrZWRWYWx1ZSl7aWYodGhpcy5fcGxvdERhdGEubGVuZ3RoJiZ0aGlzLl9wbG90RGF0YVswXS5sZW5ndGgpe2Zvcih2YXIgZT0wO2U8dGhpcy5fcGxvdERhdGEubGVuZ3RoO2UrKyl7Zi5fbGFiZWxzLnB1c2godGhpcy5fcGxvdERhdGFbZV1baF0pfX19ZWxzZXt2YXIgZz10aGlzLmRhdGE7aWYodGhpcy5yZW5kZXJlci5jb25zdHJ1Y3Rvcj09PWMuanFwbG90LkJhclJlbmRlcmVyJiZ0aGlzLndhdGVyZmFsbCl7Zz10aGlzLl9kYXRhfWlmKGcubGVuZ3RoJiZnWzBdLmxlbmd0aCl7Zm9yKHZhciBlPTA7ZTxnLmxlbmd0aDtlKyspe2YuX2xhYmVscy5wdXNoKGdbZV1baF0pfX1nPW51bGx9fWVsc2V7aWYoZi5sYWJlbHMubGVuZ3RoKXtmLl9sYWJlbHM9Zi5sYWJlbHN9fX07Yy5qcXBsb3QuUG9pbnRMYWJlbHMucHJvdG90eXBlLnhPZmZzZXQ9ZnVuY3Rpb24oZixlLGcpe2U9ZXx8dGhpcy5sb2NhdGlvbjtnPWd8fHRoaXMueHBhZGRpbmc7dmFyIGg7c3dpdGNoKGUpe2Nhc2UibnciOmg9LWYub3V0ZXJXaWR0aCh0cnVlKS10aGlzLnhwYWRkaW5nO2JyZWFrO2Nhc2UibiI6aD0tZi5vdXRlcldpZHRoKHRydWUpLzI7YnJlYWs7Y2FzZSJuZSI6aD10aGlzLnhwYWRkaW5nO2JyZWFrO2Nhc2UiZSI6aD10aGlzLnhwYWRkaW5nO2JyZWFrO2Nhc2Uic2UiOmg9dGhpcy54cGFkZGluZzticmVhaztjYXNlInMiOmg9LWYub3V0ZXJXaWR0aCh0cnVlKS8yO2JyZWFrO2Nhc2Uic3ciOmg9LWYub3V0ZXJXaWR0aCh0cnVlKS10aGlzLnhwYWRkaW5nO2JyZWFrO2Nhc2UidyI6aD0tZi5vdXRlcldpZHRoKHRydWUpLXRoaXMueHBhZGRpbmc7YnJlYWs7ZGVmYXVsdDpoPS1mLm91dGVyV2lkdGgodHJ1ZSktdGhpcy54cGFkZGluZzticmVha31yZXR1cm4gaH07Yy5qcXBsb3QuUG9pbnRMYWJlbHMucHJvdG90eXBlLnlPZmZzZXQ9ZnVuY3Rpb24oZixlLGcpe2U9ZXx8dGhpcy5sb2NhdGlvbjtnPWd8fHRoaXMueHBhZGRpbmc7dmFyIGg7c3dpdGNoKGUpe2Nhc2UibnciOmg9LWYub3V0ZXJIZWlnaHQodHJ1ZSktdGhpcy55cGFkZGluZzticmVhaztjYXNlIm4iOmg9LWYub3V0ZXJIZWlnaHQodHJ1ZSktdGhpcy55cGFkZGluZzticmVhaztjYXNlIm5lIjpoPS1mLm91dGVySGVpZ2h0KHRydWUpLXRoaXMueXBhZGRpbmc7YnJlYWs7Y2FzZSJlIjpoPS1mLm91dGVySGVpZ2h0KHRydWUpLzI7YnJlYWs7Y2FzZSJzZSI6aD10aGlzLnlwYWRkaW5nO2JyZWFrO2Nhc2UicyI6aD10aGlzLnlwYWRkaW5nO2JyZWFrO2Nhc2Uic3ciOmg9dGhpcy55cGFkZGluZzticmVhaztjYXNlInciOmg9LWYub3V0ZXJIZWlnaHQodHJ1ZSkvMjticmVhaztkZWZhdWx0Omg9LWYub3V0ZXJIZWlnaHQodHJ1ZSktdGhpcy55cGFkZGluZzticmVha31yZXR1cm4gaH07Yy5qcXBsb3QuUG9pbnRMYWJlbHMuZHJhdz1mdW5jdGlvbih4LGosdil7dmFyIHQ9dGhpcy5wbHVnaW5zLnBvaW50TGFiZWxzO3Quc2V0TGFiZWxzLmNhbGwodGhpcyk7Zm9yKHZhciB3PTA7dzx0Ll9lbGVtcy5sZW5ndGg7dysrKXt0Ll9lbGVtc1t3XS5lbXB0eUZvcmNlKCl9dC5fZWxlbXMuc3BsaWNlKDAsdC5fZWxlbXMubGVuZ3RoKTtpZih0LnNob3cpe3ZhciByPSJfIit0aGlzLl9zdGFja0F4aXMrImF4aXMiO2lmKCF0LmZvcm1hdFN0cmluZyl7dC5mb3JtYXRTdHJpbmc9dGhpc1tyXS5fdGlja3NbMF0uZm9ybWF0U3RyaW5nO3QuZm9ybWF0dGVyPXRoaXNbcl0uX3RpY2tzWzBdLmZvcm1hdHRlcn12YXIgRT10aGlzLl9wbG90RGF0YTt2YXIgRD10aGlzLl9wcmV2UGxvdERhdGE7dmFyIEE9dGhpcy5feGF4aXM7dmFyIHE9dGhpcy5feWF4aXM7dmFyIHosZjtmb3IodmFyIHc9MCx1PXQuX2xhYmVscy5sZW5ndGg7dzx1O3crKyl7dmFyIG89dC5fbGFiZWxzW3ddO2lmKG89PW51bGx8fCh0LmhpZGVaZXJvcyYmcGFyc2VJbnQobywxMCk9PTApKXtjb250aW51ZX1vPXQuZm9ybWF0dGVyKHQuZm9ybWF0U3RyaW5nLG8pO2Y9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5fZWxlbXNbd109YyhmKTt6PXQuX2VsZW1zW3ddO3ouYWRkQ2xhc3MoImpxcGxvdC1wb2ludC1sYWJlbCBqcXBsb3Qtc2VyaWVzLSIrdGhpcy5pbmRleCsiIGpxcGxvdC1wb2ludC0iK3cpO3ouY3NzKCJwb3NpdGlvbiIsImFic29sdXRlIik7ei5pbnNlcnRBZnRlcih4LmNhbnZhcyk7aWYodC5lc2NhcGVIVE1MKXt6LnRleHQobyl9ZWxzZXt6Lmh0bWwobyl9dmFyIGc9dC5sb2NhdGlvbjtpZigodGhpcy5maWxsVG9aZXJvJiZFW3ddWzFdPDApfHwodGhpcy5maWxsVG9aZXJvJiZ0aGlzLl90eXBlPT09ImJhciImJnRoaXMuYmFyRGlyZWN0aW9uPT09Imhvcml6b250YWwiJiZFW3ddWzBdPDApfHwodGhpcy53YXRlcmZhbGwmJnBhcnNlSW50KG8sMTApKTwwKXtnPWJbZFtnXV19dmFyIG49QS51MnAoRVt3XVswXSkrdC54T2Zmc2V0KHosZyk7dmFyIGg9cS51MnAoRVt3XVsxXSkrdC55T2Zmc2V0KHosZyk7aWYodGhpcy5fc3RhY2smJiF0LnN0YWNrZWRWYWx1ZSl7aWYodGhpcy5iYXJEaXJlY3Rpb249PT0idmVydGljYWwiKXtoPSh0aGlzLl9iYXJQb2ludHNbd11bMF1bMV0rdGhpcy5fYmFyUG9pbnRzW3ddWzFdWzFdKS8yK3YuX2dyaWRQYWRkaW5nLnRvcC0wLjUqei5vdXRlckhlaWdodCh0cnVlKX1lbHNle249KHRoaXMuX2JhclBvaW50c1t3XVsyXVswXSt0aGlzLl9iYXJQb2ludHNbd11bMF1bMF0pLzIrdi5fZ3JpZFBhZGRpbmcubGVmdC0wLjUqei5vdXRlcldpZHRoKHRydWUpfX1pZih0aGlzLnJlbmRlcmVyLmNvbnN0cnVjdG9yPT1jLmpxcGxvdC5CYXJSZW5kZXJlcil7aWYodGhpcy5iYXJEaXJlY3Rpb249PSJ2ZXJ0aWNhbCIpe24rPXRoaXMuX2Jhck51ZGdlfWVsc2V7aC09dGhpcy5fYmFyTnVkZ2V9fXouY3NzKCJsZWZ0IixuKTt6LmNzcygidG9wIixoKTt2YXIgaz1uK3oud2lkdGgoKTt2YXIgcz1oK3ouaGVpZ2h0KCk7dmFyIEM9dC5lZGdlVG9sZXJhbmNlO3ZhciBlPWMoeC5jYW52YXMpLnBvc2l0aW9uKCkubGVmdDt2YXIgeT1jKHguY2FudmFzKS5wb3NpdGlvbigpLnRvcDt2YXIgQj14LmNhbnZhcy53aWR0aCtlO3ZhciBtPXguY2FudmFzLmhlaWdodCt5O2lmKG4tQzxlfHxoLUM8eXx8aytDPkJ8fHMrQz5tKXt6LnJlbW92ZSgpfXo9bnVsbDtmPW51bGx9fX07Yy5qcXBsb3QucG9zdFNlcmllc0luaXRIb29rcy5wdXNoKGMuanFwbG90LlBvaW50TGFiZWxzLmluaXQpO2MuanFwbG90LnBvc3REcmF3U2VyaWVzSG9va3MucHVzaChjLmpxcGxvdC5Qb2ludExhYmVscy5kcmF3KX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.pyramidAxisRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgJC5qcXBsb3QuUHlyYW1pZEF4aXNSZW5kZXJlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICQuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIAogICAgJC5qcXBsb3QuUHlyYW1pZEF4aXNSZW5kZXJlci5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyKCk7CiAgICAkLmpxcGxvdC5QeXJhbWlkQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICQuanFwbG90LlB5cmFtaWRBeGlzUmVuZGVyZXI7CiAgICAgICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBheGlzCiAgICAkLmpxcGxvdC5QeXJhbWlkQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucyl7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAvLwogICAgICAgIC8vIHByb3A6IHBvc2l0aW9uCiAgICAgICAgLy8gUG9zaXRpb24gb2YgYXhpcy4gIFZhbHVlcyBhcmU6IHRvcCwgYm90dG9tICwgbGVmdCwgY2VudGVyLCByaWdodC4KICAgICAgICAvLyBCeSBkZWZhdWx0LCB4IGFuZCB4MiBheGVzIGFyZSBib3R0b20sIHkgYXhpcyBpcyBjZW50ZXIuCiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7CiAgICAgICAgLy8gcHJvcDogZHJhd0Jhc2VsaW5lCiAgICAgICAgLy8gVHJ1ZSB0byBkcmF3IHRoZSBheGlzIGJhc2VsaW5lLgogICAgICAgIHRoaXMuZHJhd0Jhc2VsaW5lID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBiYXNlbGluZVdpZHRoCiAgICAgICAgLy8gd2lkdGggb2YgdGhlIGJhc2VsaW5lIGluIHBpeGVscy4KICAgICAgICB0aGlzLmJhc2VsaW5lV2lkdGggPSBudWxsOwogICAgICAgIC8vIHByb3A6IGJhc2VsaW5lQ29sb3IKICAgICAgICAvLyBDU1MgY29sb3Igc3BlYyBmb3IgdGhlIGJhc2VsaW5lLgogICAgICAgIHRoaXMuYmFzZWxpbmVDb2xvciA9IG51bGw7CiAgICAgICAgdGhpcy50aWNrU3BhY2luZ0ZhY3RvciA9IDI1OwogICAgICAgIHRoaXMuX3R5cGUgPSAncHlyYW1pZCc7CiAgICAgICAgdGhpcy5fc3BsaXRBeGlzID0gZmFsc2U7CiAgICAgICAgdGhpcy5fc3BsaXRMZW5ndGggPSBudWxsOwogICAgICAgIHRoaXMuY2F0ZWdvcnkgPSBmYWxzZTsKICAgICAgICB0aGlzLl9hdXRvRm9ybWF0U3RyaW5nID0gJyc7CiAgICAgICAgdGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcgPSBmYWxzZTsKICAgICAgICAKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgICAgICB0aGlzLnJlbmRlcmVyLm9wdGlvbnMgPSBvcHRpb25zOwoKICAgICAgICB0aGlzLnJlc2V0RGF0YUJvdW5kcyA9IHRoaXMucmVuZGVyZXIucmVzZXREYXRhQm91bmRzOwogICAgICAgIHRoaXMucmVzZXREYXRhQm91bmRzKCk7CgogICAgfTsKCiAgICAkLmpxcGxvdC5QeXJhbWlkQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNldERhdGFCb3VuZHMgPSBmdW5jdGlvbigpIHsKICAgICAgICAvLyBHbyB0aHJvdWdoIGFsbCB0aGUgc2VyaWVzIGF0dGFjaGVkIHRvIHRoaXMgYXhpcyBhbmQgZmluZAogICAgICAgIC8vIHRoZSBtaW4vbWF4IGJvdW5kcyBmb3IgdGhpcyBheGlzLgogICAgICAgIHZhciBkYiA9IHRoaXMuX2RhdGFCb3VuZHM7CiAgICAgICAgZGIubWluID0gbnVsbDsKICAgICAgICBkYi5tYXggPSBudWxsOwogICAgICAgIHZhciB0ZW1wOwogICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLl9zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHMgPSB0aGlzLl9zZXJpZXNbaV07CiAgICAgICAgICAgIHZhciBkID0gcy5fcGxvdERhdGE7CiAgICAgICAgICAgIAogICAgICAgICAgICBmb3IgKHZhciBqPTAsIGw9ZC5sZW5ndGg7IGo8bDsgaisrKSB7IAogICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZS5jaGFyQXQoMCkgPT09ICd4JykgewogICAgICAgICAgICAgICAgICAgIHRlbXAgPSBkW2pdWzFdOwogICAgICAgICAgICAgICAgICAgIGlmICgodGVtcCAhPT0gbnVsbCAmJiB0ZW1wIDwgZGIubWluKSB8fCBkYi5taW4gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGIubWluID0gdGVtcDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCh0ZW1wICE9PSBudWxsICYmIHRlbXAgPiBkYi5tYXgpIHx8IGRiLm1heCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBkYi5tYXggPSB0ZW1wOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGRbal1bMF07CiAgICAgICAgICAgICAgICAgICAgaWYgKCh0ZW1wICE9PSBudWxsICYmIHRlbXAgPCBkYi5taW4pIHx8IGRiLm1pbiA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBkYi5taW4gPSB0ZW1wOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoKHRlbXAgIT09IG51bGwgJiYgdGVtcCA+IGRiLm1heCkgfHwgZGIubWF4ID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRiLm1heCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBheGlzCiAgICAkLmpxcGxvdC5QeXJhbWlkQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24oY3R4LCBwbG90KSB7CiAgICAgICAgaWYgKHRoaXMuc2hvdykgewogICAgICAgICAgICAvLyBwb3B1bGF0ZSB0aGUgYXhpcyBsYWJlbCBhbmQgdmFsdWUgcHJvcGVydGllcy4KICAgICAgICAgICAgLy8gY3JlYXRlVGlja3MgaXMgYSBtZXRob2Qgb24gdGhlIHJlbmRlcmVyLCBidXQKICAgICAgICAgICAgLy8gY2FsbCBpdCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBheGlzLgogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRpY2tzLmNhbGwodGhpcywgcGxvdCk7CiAgICAgICAgICAgIC8vIGZpbGwgYSBkaXYgd2l0aCBheGVzIGxhYmVscyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgogICAgICAgICAgICAvLyBOZWVkIHRvIHByZWdlbmVyYXRlIGVhY2ggYXhpcyB0byBnZXQgaXRzIGJvdW5kcyBhbmQKICAgICAgICAgICAgLy8gcG9zaXRpb24gaXQgYW5kIHRoZSBsYWJlbHMgY29ycmVjdGx5IG9uIHRoZSBwbG90LgogICAgICAgICAgICB2YXIgZGltPTA7CiAgICAgICAgICAgIHZhciB0ZW1wOwogICAgICAgICAgICAvLyBBZGRlZCBmb3IgdGhlbWluZy4KICAgICAgICAgICAgaWYgKHRoaXMuX2VsZW0pIHsKICAgICAgICAgICAgICAgIC8vIE1lbW9yeSBMZWFrcyBwYXRjaAogICAgICAgICAgICAgICAgLy90aGlzLl9lbGVtLmVtcHR5KCk7CiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKTsKICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0gPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLl9lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uYWRkQ2xhc3MoJ2pxcGxvdC1heGlzIGpxcGxvdC0nK3RoaXMubmFtZSk7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpOwoKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT0gJ3hheGlzJyB8fCB0aGlzLm5hbWUgPT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0ud2lkdGgodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5fZWxlbS5oZWlnaHQodGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gY3JlYXRlIGEgX2xhYmVsIG9iamVjdC4KICAgICAgICAgICAgdGhpcy5sYWJlbE9wdGlvbnMuYXhpcyA9IHRoaXMubmFtZTsKICAgICAgICAgICAgdGhpcy5fbGFiZWwgPSBuZXcgdGhpcy5sYWJlbFJlbmRlcmVyKHRoaXMubGFiZWxPcHRpb25zKTsKICAgICAgICAgICAgaWYgKHRoaXMuX2xhYmVsLnNob3cpIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpcy5fbGFiZWwuZHJhdyhjdHgsIHBsb3QpOwogICAgICAgICAgICAgICAgZWxlbS5hcHBlbmRUbyh0aGlzLl9lbGVtKTsKICAgICAgICAgICAgICAgIGVsZW0gPSBudWxsOwogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgdmFyIHQgPSB0aGlzLl90aWNrczsKICAgICAgICAgICAgdmFyIHRpY2s7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB0aWNrID0gdFtpXTsKICAgICAgICAgICAgICAgIGlmICh0aWNrLnNob3cgJiYgdGljay5zaG93TGFiZWwgJiYgKCF0aWNrLmlzTWlub3JUaWNrKSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uYXBwZW5kKHRpY2suZHJhdyhjdHgsIHBsb3QpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aWNrID0gbnVsbDsKICAgICAgICAgICAgdCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9lbGVtOwogICAgfTsgICAKCiAgICAvLyBOb3RlLCBwcmltZXMgY2FuIGJlIGZvdW5kIG9uIGh0dHA6Ly9wcmltZXMudXRtLmVkdS8KICAgIHZhciBfcHJpbWVzID0gWzIsIDMsIDUsIDcsIDExLCAxMywgMTcsIDE5LCAyMywgMjksIDMxLCAzNywgNDEsIDQzLCA0NywgNTMsIDU5LCA2MSwgNjcsIDcxLCA3MywgNzksIDgzLCA4OSwgOTcsIDEwMSwgMTAzLCAxMDcsIDEwOSwgMTEzLCAxMjcsIDEzMSwgMTM3LCAxMzksIDE0OSwgMTUxLCAxNTcsIDE2MywgMTY3LCAxNzMsIDE3OSwgMTgxLCAxOTEsIDE5MywgMTk3LCAxOTksIDIxMSwgMjIzLCAyMjcsIDIyOSwgMjMzLCAyMzksIDI0MSwgMjUxLCAyNTcsIDI2MywgMjY5LCAyNzEsIDI3NywgMjgxLCAyODMsIDI5MywgMzA3LCAzMTEsIDMxMywgMzE3LCAzMzEsIDMzNywgMzQ3LCAzNDksIDM1MywgMzU5LCAzNjcsIDM3MywgMzc5LCAzODMsIDM4OSwgMzk3LCA0MDEsIDQwOSwgNDE5LCA0MjEsIDQzMSwgNDMzLCA0MzksIDQ0MywgNDQ5LCA0NTcsIDQ2MSwgNDYzLCA0NjcsIDQ3OSwgNDg3LCA0OTEsIDQ5OSwgNTAzLCA1MDksIDUyMSwgNTIzLCA1NDEsIDU0NywgNTU3LCA1NjMsIDU2OSwgNTcxLCA1NzcsIDU4NywgNTkzLCA1OTksIDYwMSwgNjA3LCA2MTMsIDYxNywgNjE5LCA2MzEsIDY0MSwgNjQzLCA2NDcsIDY1MywgNjU5LCA2NjEsIDY3MywgNjc3LCA2ODMsIDY5MSwgNzAxLCA3MDksIDcxOSwgNzI3LCA3MzMsIDczOSwgNzQzLCA3NTEsIDc1NywgNzYxLCA3NjksIDc3MywgNzg3LCA3OTcsIDgwOSwgODExLCA4MjEsIDgyMywgODI3LCA4MjksIDgzOSwgODUzLCA4NTcsIDg1OSwgODYzLCA4NzcsIDg4MSwgODgzLCA4ODcsIDkwNywgOTExLCA5MTksIDkyOSwgOTM3LCA5NDEsIDk0NywgOTUzLCA5NjcsIDk3MSwgOTc3LCA5ODMsIDk5MSwgOTk3XTsKCgogICAgdmFyIF9wcmltZXNIYXNoID0ge307CgogICAgZm9yICh2YXIgaSA9MCwgbCA9IF9wcmltZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgX3ByaW1lc0hhc2hbX3ByaW1lc1tpXV0gPSBfcHJpbWVzW2ldOwogICAgfQoKICAgIC8vIGNhbGxlZCB3aXRoIHNjb3BlIG9mIGF4aXMKICAgICQuanFwbG90LlB5cmFtaWRBeGlzUmVuZGVyZXIucHJvdG90eXBlLmNyZWF0ZVRpY2tzID0gZnVuY3Rpb24ocGxvdCkgewogICAgICAgIC8vIHdlJ3JlIGFyZSBvcGVyYXRpbmcgb24gYW4gYXhpcyBoZXJlCiAgICAgICAgdmFyIHVzZXJUaWNrcyA9IHRoaXMudGlja3M7CiAgICAgICAgLy8gZGF0YWJvdW5kcyB3ZXJlIHNldCBvbiBheGlzIGluaXRpYWxpemF0aW9uLgogICAgICAgIHZhciBkYiA9IHRoaXMuX2RhdGFCb3VuZHM7CiAgICAgICAgdmFyIGRpbTsKICAgICAgICB2YXIgaW50ZXJ2YWw7CiAgICAgICAgdmFyIG1pbjsKICAgICAgICB2YXIgbWF4OwogICAgICAgIHZhciByYW5nZTsKICAgICAgICB2YXIgcG9zMTsKICAgICAgICB2YXIgcG9zMjsKICAgICAgICB2YXIgdHQ7CiAgICAgICAgdmFyIGk7CiAgICAgICAgdmFyIGw7CiAgICAgICAgdmFyIHM7CiAgICAgICAgLy8gZ2V0IGEgY29weSBvZiB1c2VyJ3Mgc2V0dGluZ3MgZm9yIG1pbi9tYXguCiAgICAgICAgdmFyIHVzZXJNaW4gPSB0aGlzLm1pbjsKICAgICAgICB2YXIgdXNlck1heCA9IHRoaXMubWF4OwogICAgICAgIHZhciB1dDsKICAgICAgICB2YXIgdDsKICAgICAgICB2YXIgdGhyZXNob2xkOwogICAgICAgIHZhciB0ZGltOwogICAgICAgIHZhciBzY2FsZWZhY3Q7CiAgICAgICAgdmFyIHJldDsKICAgICAgICB2YXIgdHVtaW47CiAgICAgICAgdmFyIHR1bWF4OwogICAgICAgIHZhciBtYXhWaXNpYmxlVGlja3M7CiAgICAgICAgdmFyIHZhbDsKICAgICAgICB2YXIgc2tpcCA9IG51bGw7CiAgICAgICAgdmFyIHRlbXA7CiAgICAgICAgCiAgICAgICAgLy8gaWYgd2UgYWxyZWFkeSBoYXZlIHRpY2tzLCB1c2UgdGhlbS4KICAgICAgICAvLyB0aWNrcyBtdXN0IGJlIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdmFsdWUuCgogICAgICAgIGlmICh1c2VyVGlja3MubGVuZ3RoKSB7CiAgICAgICAgICAgIC8vIHRpY2tzIGNvdWxkIGJlIDFEIG9yIDJEIGFycmF5IG9mIFt2YWwsIHZhbCwgLCwsXSBvciBbW3ZhbCwgbGFiZWxdLCBbdmFsLCBsYWJlbF0sIC4uLl0gb3IgbWl4ZWQKICAgICAgICAgICAgZm9yIChpPTAsIGw9dXNlclRpY2tzLmxlbmd0aDsgaTxsOyBpKyspewogICAgICAgICAgICAgICAgdXQgPSB1c2VyVGlja3NbaV07CiAgICAgICAgICAgICAgICB0ID0gbmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpOwogICAgICAgICAgICAgICAgaWYgKCQuaXNBcnJheSh1dCkpIHsKICAgICAgICAgICAgICAgICAgICB0LnZhbHVlID0gdXRbMF07CiAgICAgICAgICAgICAgICAgICAgdC5sYWJlbCA9IHV0WzFdOwogICAgICAgICAgICAgICAgICAgIHQuc2V0VGljayh1dFswXSwgdGhpcy5uYW1lKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl90aWNrcy5wdXNoKHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsc2UgaWYgKCQuaXNQbGFpbk9iamVjdCh1dCkpIHsKICAgICAgICAgICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCB0LCB1dCk7CiAgICAgICAgICAgICAgICAgICAgdC5heGlzID0gdGhpcy5uYW1lOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnB1c2godCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdXQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGkgKyBwbG90LmRlZmF1bHRBeGlzU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB1dDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdC52YWx1ZSA9IHZhbDsKICAgICAgICAgICAgICAgICAgICB0LmxhYmVsID0gdXQ7CiAgICAgICAgICAgICAgICAgICAgdC5heGlzID0gdGhpcy5uYW1lOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnB1c2godCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IHVzZXJUaWNrcy5sZW5ndGg7CiAgICAgICAgICAgIHRoaXMubWluID0gdGhpcy5fdGlja3NbMF0udmFsdWU7CiAgICAgICAgICAgIHRoaXMubWF4ID0gdGhpcy5fdGlja3NbdGhpcy5udW1iZXJUaWNrcy0xXS52YWx1ZTsKICAgICAgICAgICAgdGhpcy50aWNrSW50ZXJ2YWwgPSAodGhpcy5tYXggLSB0aGlzLm1pbikgLyAodGhpcy5udW1iZXJUaWNrcyAtIDEpOwoKICAgICAgICAgICAgLy8gdXNlIHVzZXIgc3BlY2lmaWVkIHRpY2tJbnRlcnZhbCBpZiB0aGVyZSBpcyBvbmUKICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMudGlja0ludGVydmFsKSB7CiAgICAgICAgICAgICAgICAvLyBoaWRlIGV2ZXJ5IHRpY2sgZXhjZXB0IGZvciB0aWNrcyBvbiBpbnRlcnZhbAogICAgICAgICAgICAgICAgdmFyIHRpID0gdGhpcy5fb3B0aW9ucy50aWNrSW50ZXJ2YWw7CiAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTx0aGlzLm51bWJlclRpY2tzOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaSV0aSAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLl90aWNrc1tpXS5zaG93ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzW2ldLmlzTWlub3JUaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0b28gbWFueSB0aWNrcwogICAgICAgICAgICAgICAgZGltID0gKHRoaXMubmFtZS5jaGFyQXQoMCkgPT09ICd4JykgPyB0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCA6IHRoaXMuX3Bsb3REaW1lbnNpb25zLmhlaWdodDsKICAgICAgICAgICAgICAgIG1heFZpc2libGVUaWNrcyA9IE1hdGgucm91bmQoMi4wICsgZGltL3RoaXMudGlja1NwYWNpbmdGYWN0b3IpOwoKICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bWJlclRpY2tzID4gbWF4VmlzaWJsZVRpY2tzKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG51bWJlciBvZiB0aWNrcyB3ZSBjYW4gc2tpcAogICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0aGlzLm51bWJlclRpY2tzIC0gMTsKICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MjsgaTx0ZW1wOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgJSBpID09PSAwICYmIHRlbXAvaSA8IG1heFZpc2libGVUaWNrcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCA9IGktMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoc2tpcCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MSwgbD10aGlzLl90aWNrcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPD0gc2tpcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzW2ldLnNob3cgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBpZiBjYXRlZ29yeSBzdHlsZSwgYWRkIG1pbm9yIHRpY2tzIGluIGJldHdlZW4KICAgICAgICAgICAgdGVtcCA9IFtdOwogICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yeSkgewogICAgICAgICAgICAgICAgLy8gdHVybiBvZmYgZ3JpZGxpbmUgYW5kIG1hcmsgb24gZmlyc3QgdGljawogICAgICAgICAgICAgICAgdGhpcy5fdGlja3NbMF0uc2hvd0dyaWRsaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0aGlzLl90aWNrc1swXS5zaG93TWFyayA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIGZvciAoaT10aGlzLl90aWNrcy5sZW5ndGgtMTsgaT4wOyBpLS0pIHsKICAgICAgICAgICAgICAgICAgICB0ID0gbmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgIHQudmFsdWUgPSB0aGlzLl90aWNrc1tpLTFdLnZhbHVlICsgdGhpcy50aWNrSW50ZXJ2YWwvMi4wOwogICAgICAgICAgICAgICAgICAgIHQubGFiZWwgPSAnJzsKICAgICAgICAgICAgICAgICAgICB0LnNob3dMYWJlbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHQuYXhpcyA9IHRoaXMubmFtZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl90aWNrc1tpXS5zaG93R3JpZGxpbmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl90aWNrc1tpXS5zaG93TWFyayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnNwbGljZShpLCAwLCB0KTsKICAgICAgICAgICAgICAgICAgICAvLyB0ZW1wLnB1c2godCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gbWVyZ2UgaW4gdGhlIG5ldyB0aWNrcwogICAgICAgICAgICAgICAgLy8gZm9yIChpPTEsIGw9dGVtcC5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fdGlja3Muc3BsaWNlKGksIDAsIHRlbXBbaV0pOwogICAgICAgICAgICAgICAgLy8gfQoKICAgICAgICAgICAgICAgIC8vIG5vdyBhZGQgYSB0aWNrIGF0IGJlZ2lubmluZyBhbmQgZW5kCiAgICAgICAgICAgICAgICB0ID0gbmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpOwogICAgICAgICAgICAgICAgdC52YWx1ZSA9IHRoaXMuX3RpY2tzWzBdLnZhbHVlIC0gdGhpcy50aWNrSW50ZXJ2YWwvMi4wOwogICAgICAgICAgICAgICAgdC5sYWJlbCA9ICcnOwogICAgICAgICAgICAgICAgdC5zaG93TGFiZWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHQuYXhpcyA9IHRoaXMubmFtZTsKICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tzLnVuc2hpZnQodCk7CgogICAgICAgICAgICAgICAgdCA9IG5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTsKICAgICAgICAgICAgICAgIHQudmFsdWUgPSB0aGlzLl90aWNrc1t0aGlzLl90aWNrcy5sZW5ndGgtMV0udmFsdWUgKyB0aGlzLnRpY2tJbnRlcnZhbC8yLjA7CiAgICAgICAgICAgICAgICB0LmxhYmVsID0gJyc7CiAgICAgICAgICAgICAgICB0LnNob3dMYWJlbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgdC5heGlzID0gdGhpcy5uYW1lOwogICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKCiAgICAgICAgICAgICAgICB0aGlzLnRpY2tJbnRlcnZhbCA9IHRoaXMudGlja0ludGVydmFsIC8gMi4wOwogICAgICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IHRoaXMuX3RpY2tzLmxlbmd0aDsKICAgICAgICAgICAgICAgIHRoaXMubWluID0gdGhpcy5fdGlja3NbMF0udmFsdWU7CiAgICAgICAgICAgICAgICB0aGlzLm1heCA9IHRoaXMuX3RpY2tzW3RoaXMuX3RpY2tzLmxlbmd0aC0xXS52YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSBhbnkgdGlja3MgeWV0LCBsZXQncyBtYWtlIHNvbWUhCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUuY2hhckF0KDApID09PSAneCcpIHsKICAgICAgICAgICAgICAgIGRpbSA9IHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoOwogICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHggYXhpcyBpcyBzeW1ldHJpYyBhYm91dCAwLgogICAgICAgICAgICAgICAgdmFyIHRlbXBtYXggPSBNYXRoLm1heChkYi5tYXgsIE1hdGguYWJzKGRiLm1pbikpOwogICAgICAgICAgICAgICAgdmFyIHRlbXBtaW4gPSBNYXRoLm1pbihkYi5taW4sIC10ZW1wbWF4KTsKICAgICAgICAgICAgICAgIC8vIG1pbiA9ICgodGhpcy5taW4gIT0gbnVsbCkgPyB0aGlzLm1pbiA6IHRlbXBtaW4pOwogICAgICAgICAgICAgICAgLy8gbWF4ID0gKCh0aGlzLm1heCAhPSBudWxsKSA/IHRoaXMubWF4IDogdGVtcG1heCk7CiAgICAgICAgICAgICAgICBtaW4gPSB0ZW1wbWluOwogICAgICAgICAgICAgICAgbWF4ID0gdGVtcG1heDsKICAgICAgICAgICAgICAgIHJhbmdlID0gbWF4IC0gbWluOwoKICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpY2tPcHRpb25zID09IG51bGwgfHwgIXRoaXMudGlja09wdGlvbnMuZm9ybWF0U3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IDMwOwogICAgICAgICAgICAgICAgdGRpbSA9IE1hdGgubWF4KGRpbSwgdGhyZXNob2xkKzEpOwogICAgICAgICAgICAgICAgc2NhbGVmYWN0ID0gICh0ZGltLXRocmVzaG9sZCkvMzAwLjA7CiAgICAgICAgICAgICAgICByZXQgPSAkLmpxcGxvdC5MaW5lYXJUaWNrR2VuZXJhdG9yKG1pbiwgbWF4LCBzY2FsZWZhY3QpOyAKICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBhIHBhZGRlZCBtYXggYW5kIG1pbiwgcG9pbnRzIHNob3VsZCBiZSBsZXNzIHRoYW4gdGhlc2UKICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhleSBhcmVuJ3QgdG9vIGNsb3NlIHRvIHRoZSBlZGdlcyBvZiB0aGUgcGxvdC4KICAgICAgICAgICAgICAgIC8vIFVzZXIgY2FuIGFkanVzdCBob3cgbXVjaCBwYWRkaW5nIGlzIGFsbG93ZWQgd2l0aCBwYWQsIHBhZE1pbiBhbmQgUGFkTWF4IG9wdGlvbnMuIAogICAgICAgICAgICAgICAgdHVtaW4gPSBtaW4gKyByYW5nZSoodGhpcy5wYWRNaW4gLSAxKTsKICAgICAgICAgICAgICAgIHR1bWF4ID0gbWF4IC0gcmFuZ2UqKHRoaXMucGFkTWF4IC0gMSk7CgogICAgICAgICAgICAgICAgaWYgKG1pbiA8IHR1bWluIHx8IG1heCA+IHR1bWF4KSB7CiAgICAgICAgICAgICAgICAgICAgdHVtaW4gPSBtaW4gLSByYW5nZSoodGhpcy5wYWRNaW4gLSAxKTsKICAgICAgICAgICAgICAgICAgICB0dW1heCA9IG1heCArIHJhbmdlKih0aGlzLnBhZE1heCAtIDEpOwogICAgICAgICAgICAgICAgICAgIHJldCA9ICQuanFwbG90LkxpbmVhclRpY2tHZW5lcmF0b3IodHVtaW4sIHR1bWF4LCBzY2FsZWZhY3QpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMubWluID0gcmV0WzBdOwogICAgICAgICAgICAgICAgdGhpcy5tYXggPSByZXRbMV07CiAgICAgICAgICAgICAgICB0aGlzLm51bWJlclRpY2tzID0gcmV0WzJdOwogICAgICAgICAgICAgICAgdGhpcy5fYXV0b0Zvcm1hdFN0cmluZyA9IHJldFszXTsKICAgICAgICAgICAgICAgIHRoaXMudGlja0ludGVydmFsID0gcmV0WzRdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgZGltID0gdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0OwoKICAgICAgICAgICAgICAgIC8vIHRpY2tzIHdpbGwgYmUgb24gd2hvbGUgaW50ZWdlcnMgbGlrZSAxLCAyLCAzLCAuLi4gb3IgMSwgNCwgNywgLi4uCiAgICAgICAgICAgICAgICBtaW4gPSBkYi5taW47CiAgICAgICAgICAgICAgICBtYXggPSBkYi5tYXg7CiAgICAgICAgICAgICAgICBzID0gdGhpcy5fc2VyaWVzWzBdOwogICAgICAgICAgICAgICAgdGhpcy5fdGlja3MgPSBbXTsKCiAgICAgICAgICAgICAgICByYW5nZSA9IG1heCAtIG1pbjsKCiAgICAgICAgICAgICAgICAvLyBpZiByYW5nZSBpcyBhIHByaW1lLCB3aWxsIGdldCBvbmx5IDIgdGlja3MsIGV4cGFuZCByYW5nZSBpbiB0aGF0IGNhc2UuCiAgICAgICAgICAgICAgICBpZiAoX3ByaW1lc0hhc2hbcmFuZ2VdKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgKz0gMTsKICAgICAgICAgICAgICAgICAgICBtYXggKz0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzLm1heCA9IG1heDsKICAgICAgICAgICAgICAgIHRoaXMubWluID0gbWluOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBtYXhWaXNpYmxlVGlja3MgPSBNYXRoLnJvdW5kKDIuMCArIGRpbS90aGlzLnRpY2tTcGFjaW5nRmFjdG9yKTsKCiAgICAgICAgICAgICAgICBpZiAocmFuZ2UgKyAxIDw9IG1heFZpc2libGVUaWNrcykgewogICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyVGlja3MgPSByYW5nZSArIDE7CiAgICAgICAgICAgICAgICAgICAgdGhpcy50aWNrSW50ZXJ2YWwgPSAxLjA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gZmlndXJlIG91dCBhIHJvdW5kIG51bWJlciBvZiB0aWNrcyB0byBza2lwIGluIGV2ZXJ5IGludGVydmFsCiAgICAgICAgICAgICAgICAgICAgLy8gcmFuZ2UgLyB0aSArIDEgPSBudAogICAgICAgICAgICAgICAgICAgIC8vIHRpID0gcmFuZ2UgLyAobnQgLSAxKQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGk9bWF4VmlzaWJsZVRpY2tzOyBpPjE7IGktLSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UvKGkgLSAxKSA9PT0gTWF0aC5yb3VuZChyYW5nZS8oaSAtIDEpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJUaWNrcyA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpY2tJbnRlcnZhbCA9IHJhbmdlLyhpIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLl9vdmVycmlkZUZvcm1hdFN0cmluZyAmJiB0aGlzLl9hdXRvRm9ybWF0U3RyaW5nICE9ICcnKSB7CiAgICAgICAgICAgICAgICB0aGlzLnRpY2tPcHRpb25zID0gdGhpcy50aWNrT3B0aW9ucyB8fCB7fTsKICAgICAgICAgICAgICAgIHRoaXMudGlja09wdGlvbnMuZm9ybWF0U3RyaW5nID0gdGhpcy5fYXV0b0Zvcm1hdFN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGxhYmVsdmFsOwogICAgICAgICAgICBmb3IgKGk9MDsgaTx0aGlzLm51bWJlclRpY2tzOyBpKyspIHsKICAgICAgICAgICAgICAgIHRoaXMudGlja09wdGlvbnMuYXhpcyA9IHRoaXMubmFtZTsKICAgICAgICAgICAgICAgIGxhYmVsdmFsID0gdGhpcy5taW4gKyB0aGlzLnRpY2tJbnRlcnZhbCAqIGk7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lLmNoYXJBdCgwKSA9PT0gJ3gnKSB7CiAgICAgICAgICAgICAgICAgICAgbGFiZWx2YWwgPSBNYXRoLmFicyhsYWJlbHZhbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyB0aGlzLnRpY2tPcHRpb25zLmxhYmVsID0gU3RyaW5nIChsYWJlbHZhbCk7CiAgICAgICAgICAgICAgICB0aGlzLnRpY2tPcHRpb25zLnZhbHVlID0gdGhpcy5taW4gKyB0aGlzLnRpY2tJbnRlcnZhbCAqIGk7CiAgICAgICAgICAgICAgICB0ID0gbmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpOwoKICAgICAgICAgICAgICAgIHQubGFiZWwgPSB0LnByZWZpeCArIHQuZm9ybWF0dGVyKHQuZm9ybWF0U3RyaW5nLCBsYWJlbHZhbCk7CgogICAgICAgICAgICAgICAgdGhpcy5fdGlja3MucHVzaCh0KTsKICAgICAgICAgICAgICAgIC8vIGZvciB4IGF4aXMsIGlmIHkgYXhpcyBpcyBpbiBtaWRkbGUsIGFkZCBhIHN5bWV0cmljYWwgMCB0aWNrCiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lLmNoYXJBdCgwKSA9PT0gJ3gnICYmIHBsb3QuYXhlcy55TWlkQXhpcy5zaG93ICYmIHRoaXMudGlja09wdGlvbnMudmFsdWUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zcGxpdEF4aXMgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NwbGl0TGVuZ3RoID0gcGxvdC5heGVzLnlNaWRBeGlzLmdldFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgLy8gdC52YWx1ZSA9IC10aGlzLm1heC8yMDAwLjA7CiAgICAgICAgICAgICAgICAgICAgdCA9IG5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl90aWNrcy5wdXNoKHQpOwogICAgICAgICAgICAgICAgICAgIHQudmFsdWUgPSB0aGlzLm1heC8yMDAwLjA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdCA9IG51bGw7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgYXhpcwogICAgJC5qcXBsb3QuUHlyYW1pZEF4aXNSZW5kZXJlci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oKSB7IAogICAgICAgIHZhciBkaW0gPSAwOwogICAgICAgIHZhciB0ZW1wOwogICAgICAgIHZhciB3ID0gMDsKICAgICAgICB2YXIgaCA9IDA7CiAgICAgICAgdmFyIGk7CiAgICAgICAgdmFyIHQ7CiAgICAgICAgdmFyIHRpY2s7CiAgICAgICAgdmFyIGxzaG93ID0gKHRoaXMuX2xhYmVsID09IG51bGwpID8gZmFsc2UgOiB0aGlzLl9sYWJlbC5zaG93OwogICAgICAgIGlmICh0aGlzLnNob3cpIHsKICAgICAgICAgICAgdCA9IHRoaXMuX3RpY2tzOwogICAgICAgICAgICBsID0gdC5sZW5ndGg7CiAgICAgICAgICAgIGZvciAoaT0wOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgdGljayA9IHRbaV07CiAgICAgICAgICAgICAgICBpZiAoIXRpY2suX2JyZWFrVGljayAmJiB0aWNrLnNob3cgJiYgdGljay5zaG93TGFiZWwgJiYgIXRpY2suaXNNaW5vclRpY2spIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lLmNoYXJBdCgwKSA9PT0gJ3gnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0aWNrLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRpY2suX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgPiBkaW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGltID0gdGVtcDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT09ICd5TWlkQXhpcycpIHsKICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRpY2sgPSB0W2ldOwogICAgICAgICAgICAgICAgICAgIGlmICh0aWNrLl9lbGVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSAoZGltIC0gdGljay5fZWxlbS5vdXRlcldpZHRoKHRydWUpKS8yLjA7CiAgICAgICAgICAgICAgICAgICAgICAgIHRpY2suX2VsZW0uY3NzKCdsZWZ0JywgdGVtcCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRpY2sgPSBudWxsOwogICAgICAgICAgICB0ID0gbnVsbDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChsc2hvdykgewogICAgICAgICAgICAgICAgdyA9IHRoaXMuX2xhYmVsLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSk7CiAgICAgICAgICAgICAgICBoID0gdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJIZWlnaHQodHJ1ZSk7IAogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT09ICd4YXhpcycpIHsKICAgICAgICAgICAgICAgIGRpbSA9IGRpbSArIGg7CiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7J2hlaWdodCc6ZGltKydweCcsIGxlZnQ6JzBweCcsIGJvdHRvbTonMHB4J30pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubmFtZSA9PT0gJ3gyYXhpcycpIHsKICAgICAgICAgICAgICAgIGRpbSA9IGRpbSArIGg7CiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtLmNzcyh7J2hlaWdodCc6ZGltKydweCcsIGxlZnQ6JzBweCcsIHRvcDonMHB4J30pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubmFtZSA9PT0gJ3lheGlzJykgewogICAgICAgICAgICAgICAgZGltID0gZGltICsgdzsKICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHsnd2lkdGgnOmRpbSsncHgnLCBsZWZ0OicwcHgnLCB0b3A6JzBweCd9KTsKICAgICAgICAgICAgICAgIGlmIChsc2hvdyAmJiB0aGlzLl9sYWJlbC5jb25zdHJ1Y3RvciA9PSAkLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlcikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcygnd2lkdGgnLCB3KydweCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubmFtZSA9PT0gJ3lNaWRBeGlzJykgewogICAgICAgICAgICAgICAgLy8gZG9uJ3QgaW5jbHVkZSB3aWR0aCBvZiBsYWJlbCBhdCBhbGwgaW4gd2lkdGggb2YgYXhpcz8KICAgICAgICAgICAgICAgIC8vIGRpbSA9IChkaW0gPiB3KSA/IGRpbSA6IHc7CiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IGRpbS8yLjAgLSB3LzIuMDsKICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHsnd2lkdGgnOmRpbSsncHgnLCB0b3A6JzBweCd9KTsKICAgICAgICAgICAgICAgIGlmIChsc2hvdyAmJiB0aGlzLl9sYWJlbC5jb25zdHJ1Y3RvciA9PSAkLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlcikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcyh7d2lkdGg6IHcsIGxlZnQ6IHRlbXAsIHRvcDogMH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgZGltID0gZGltICsgdzsKICAgICAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHsnd2lkdGgnOmRpbSsncHgnLCByaWdodDonMHB4JywgdG9wOicwcHgnfSk7CiAgICAgICAgICAgICAgICBpZiAobHNob3cgJiYgdGhpcy5fbGFiZWwuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5fZWxlbS5jc3MoJ3dpZHRoJywgdysncHgnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gIAogICAgfTsKICAgIAogICAgJC5qcXBsb3QuUHlyYW1pZEF4aXNSZW5kZXJlci5wcm90b3R5cGUucGFjayA9IGZ1bmN0aW9uKHBvcywgb2Zmc2V0cykgeyAKICAgICAgICAvLyBBZGQgZGVmYXVsdHMgZm9yIHJlcGFja2luZyBmcm9tIHJlc2V0VGlja1ZhbHVlcyBmdW5jdGlvbi4KICAgICAgICBwb3MgPSBwb3MgfHwge307CiAgICAgICAgb2Zmc2V0cyA9IG9mZnNldHMgfHwgdGhpcy5fb2Zmc2V0czsKICAgICAgICAKICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl90aWNrczsKICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7CiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluOwogICAgICAgIHZhciBvZmZtYXggPSBvZmZzZXRzLm1heDsKICAgICAgICB2YXIgb2ZmbWluID0gb2Zmc2V0cy5taW47CiAgICAgICAgdmFyIGxzaG93ID0gKHRoaXMuX2xhYmVsID09IG51bGwpID8gZmFsc2UgOiB0aGlzLl9sYWJlbC5zaG93OwogICAgICAgIAogICAgICAgIGZvciAodmFyIHAgaW4gcG9zKSB7CiAgICAgICAgICAgIHRoaXMuX2VsZW0uY3NzKHAsIHBvc1twXSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMuX29mZnNldHMgPSBvZmZzZXRzOwogICAgICAgIC8vIHBpeGVsbGVuZ3RoIHdpbGwgYmUgKyBmb3IgeCBheGVzIGFuZCAtIGZvciB5IGF4ZXMgYmVjYXN1ZSBwaXhlbHMgYWx3YXlzIG1lYXN1cmVkIGZyb20gdG9wIGxlZnQuCiAgICAgICAgdmFyIHBpeGVsbGVuZ3RoID0gb2ZmbWF4IC0gb2ZmbWluOwogICAgICAgIHZhciB1bml0bGVuZ3RoID0gbWF4IC0gbWluOwogICAgICAgIHZhciBzbCA9IHRoaXMuX3NwbGl0TGVuZ3RoOwogICAgICAgIAogICAgICAgIC8vIHBvaW50IHRvIHVuaXQgYW5kIHVuaXQgdG8gcG9pbnQgY29udmVyc2lvbnMgcmVmZXJlbmNlcyB0byBQbG90IERPTSBlbGVtZW50IHRvcCBsZWZ0IGNvcm5lci4KICAgICAgICBpZiAodGhpcy5fc3BsaXRBeGlzKSB7CiAgICAgICAgICAgIHBpeGVsbGVuZ3RoIC09IHRoaXMuX3NwbGl0TGVuZ3RoOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gZG9uJ3Qga25vdyB0aGF0IHRoaXMgb25lIGlzIGNvcnJlY3QuCiAgICAgICAgICAgIHRoaXMucDJ1ID0gZnVuY3Rpb24ocCl7CiAgICAgICAgICAgICAgICByZXR1cm4gKHAgLSBvZmZtaW4pICogdW5pdGxlbmd0aCAvIHBpeGVsbGVuZ3RoICsgbWluOwogICAgICAgICAgICB9OwogICAgICAgIAogICAgICAgICAgICB0aGlzLnUycCA9IGZ1bmN0aW9uKHUpewogICAgICAgICAgICAgICAgaWYgKHUgPD0gMCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAodSAtIG1pbikgKiBwaXhlbGxlbmd0aCAvIHVuaXRsZW5ndGggKyBvZmZtaW47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHUgLSBtaW4pICogcGl4ZWxsZW5ndGggLyB1bml0bGVuZ3RoICsgb2ZmbWluICsgc2w7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5zZXJpZXNfdTJwID0gZnVuY3Rpb24odSl7CiAgICAgICAgICAgICAgICBpZiAodSA8PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1IC0gbWluKSAqIHBpeGVsbGVuZ3RoIC8gdW5pdGxlbmd0aDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAodSAtIG1pbikgKiBwaXhlbGxlbmd0aCAvIHVuaXRsZW5ndGggKyBzbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIC8vIGRvbid0IGtub3cgdGhhdCB0aGlzIG9uZSBpcyBjb3JyZWN0LgogICAgICAgICAgICB0aGlzLnNlcmllc19wMnUgPSBmdW5jdGlvbihwKXsKICAgICAgICAgICAgICAgIHJldHVybiBwICogdW5pdGxlbmd0aCAvIHBpeGVsbGVuZ3RoICsgbWluOwogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy5wMnUgPSBmdW5jdGlvbihwKXsKICAgICAgICAgICAgICAgIHJldHVybiAocCAtIG9mZm1pbikgKiB1bml0bGVuZ3RoIC8gcGl4ZWxsZW5ndGggKyBtaW47CiAgICAgICAgICAgIH07CiAgICAgICAgCiAgICAgICAgICAgIHRoaXMudTJwID0gZnVuY3Rpb24odSl7CiAgICAgICAgICAgICAgICByZXR1cm4gKHUgLSBtaW4pICogcGl4ZWxsZW5ndGggLyB1bml0bGVuZ3RoICsgb2ZmbWluOwogICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUuY2hhckF0KDApID09PSAneCcpewogICAgICAgICAgICAgICAgdGhpcy5zZXJpZXNfdTJwID0gZnVuY3Rpb24odSl7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1IC0gbWluKSAqIHBpeGVsbGVuZ3RoIC8gdW5pdGxlbmd0aDsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc19wMnUgPSBmdW5jdGlvbihwKXsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcCAqIHVuaXRsZW5ndGggLyBwaXhlbGxlbmd0aCArIG1pbjsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlcmllc191MnAgPSBmdW5jdGlvbih1KXsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHUgLSBtYXgpICogcGl4ZWxsZW5ndGggLyB1bml0bGVuZ3RoOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHRoaXMuc2VyaWVzX3AydSA9IGZ1bmN0aW9uKHApewogICAgICAgICAgICAgICAgICAgIHJldHVybiBwICogdW5pdGxlbmd0aCAvIHBpeGVsbGVuZ3RoICsgbWF4OwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAodGhpcy5zaG93KSB7CiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUuY2hhckF0KDApID09PSAneCcpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aWNrcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGlja3NbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvdyAmJiB0LnNob3dMYWJlbCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpbTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LmNvbnN0cnVjdG9yID09ICQuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIgJiYgdC5hbmdsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBuZWVkIHRvIGFkanVzdCBhdXRvIHBvc2l0aW9uaW5nIGJhc2VkIG9uIHdoaWNoIGF4aXMgdGhpcyBpcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gKHRoaXMubmFtZSA9PSAneGF4aXMnKSA/IDEgOiAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodC5sYWJlbFBvc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYXV0byc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIGF0IGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcCAqIHQuYW5nbGUgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0V2lkdGgoKSArIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbigtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24gYXQgc3RhcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbih0Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0V2lkdGgoKSArIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbigtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5zaW4odC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21pZGRsZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0gPSAtdC5nZXRXaWR0aCgpLzIgKyB0Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5zaW4oLXQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0V2lkdGgoKS8yICsgdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguc2luKC10Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0V2lkdGgoKS8yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnUycCh0LnZhbHVlKSArIHNoaW0gKyAncHgnOwogICAgICAgICAgICAgICAgICAgICAgICB0Ll9lbGVtLmNzcygnbGVmdCcsIHZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHQucGFjaygpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChsc2hvdykgewogICAgICAgICAgICAgICAgICAgIHZhciB3ID0gdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbC5fZWxlbS5jc3MoJ2xlZnQnLCBvZmZtaW4gKyBwaXhlbGxlbmd0aC8yIC0gdy8yICsgJ3B4Jyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PSAneGF4aXMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcygnYm90dG9tJywgJzBweCcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCd0b3AnLCAnMHB4Jyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLnBhY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aWNrcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGlja3NbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvdyAmJiB0LnNob3dMYWJlbCAmJiAhdC5pc01pbm9yVGljaykgeyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpbTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuY29uc3RydWN0b3IgPT0gJC5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlciAmJiB0LmFuZ2xlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5lZWQgdG8gYWRqdXN0IGF1dG8gcG9zaXRpb25pbmcgYmFzZWQgb24gd2hpY2ggYXhpcyB0aGlzIGlzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSAodGhpcy5uYW1lID09ICd5YXhpcycpID8gMSA6IC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0LmxhYmVsUG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24gYXQgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgKiB0LmFuZ2xlIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5jb3MoLXQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldEhlaWdodCgpICsgdC5fdGV4dFJlbmRlcmVyLmhlaWdodCAqIE1hdGguY29zKHQuX3RleHRSZW5kZXJlci5hbmdsZSkgLyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuYW5nbGUgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLmNvcygtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkgKyB0Ll90ZXh0UmVuZGVyZXIuaGVpZ2h0ICogTWF0aC5jb3ModC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWlkZGxlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHQuYW5nbGUgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkvMiArIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbigtdC5fdGV4dFJlbmRlcmVyLmFuZ2xlKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkvMiAtIHQuX3RleHRSZW5kZXJlci5oZWlnaHQgKiBNYXRoLnNpbih0Ll90ZXh0UmVuZGVyZXIuYW5nbGUpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGltID0gLXQuZ2V0SGVpZ2h0KCkvMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldEhlaWdodCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpbSA9IC10LmdldEhlaWdodCgpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnUycCh0LnZhbHVlKSArIHNoaW0gKyAncHgnOwogICAgICAgICAgICAgICAgICAgICAgICB0Ll9lbGVtLmNzcygndG9wJywgdmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgdC5wYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGxzaG93KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGggPSB0aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lICE9PSAneU1pZEF4aXMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsLl9lbGVtLmNzcygndG9wJywgb2ZmbWF4IC0gcGl4ZWxsZW5ndGgvMiAtIGgvMiArICdweCcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lID09ICd5YXhpcycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCdsZWZ0JywgJzBweCcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm5hbWUgIT09ICd5TWlkQXhpcycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwuX2VsZW0uY3NzKCdyaWdodCcsICcwcHgnKTsKICAgICAgICAgICAgICAgICAgICB9ICAgCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwucGFjaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aWNrcyA9IG51bGw7CiAgICB9Owp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGUpe2UuanFwbG90LlB5cmFtaWRBeGlzUmVuZGVyZXI9ZnVuY3Rpb24oKXtlLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIuY2FsbCh0aGlzKX07ZS5qcXBsb3QuUHlyYW1pZEF4aXNSZW5kZXJlci5wcm90b3R5cGU9bmV3IGUuanFwbG90LkxpbmVhckF4aXNSZW5kZXJlcigpO2UuanFwbG90LlB5cmFtaWRBeGlzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUuanFwbG90LlB5cmFtaWRBeGlzUmVuZGVyZXI7ZS5qcXBsb3QuUHlyYW1pZEF4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihmKXt0aGlzLnBvc2l0aW9uPW51bGw7dGhpcy5kcmF3QmFzZWxpbmU9dHJ1ZTt0aGlzLmJhc2VsaW5lV2lkdGg9bnVsbDt0aGlzLmJhc2VsaW5lQ29sb3I9bnVsbDt0aGlzLnRpY2tTcGFjaW5nRmFjdG9yPTI1O3RoaXMuX3R5cGU9InB5cmFtaWQiO3RoaXMuX3NwbGl0QXhpcz1mYWxzZTt0aGlzLl9zcGxpdExlbmd0aD1udWxsO3RoaXMuY2F0ZWdvcnk9ZmFsc2U7dGhpcy5fYXV0b0Zvcm1hdFN0cmluZz0iIjt0aGlzLl9vdmVycmlkZUZvcm1hdFN0cmluZz1mYWxzZTtlLmV4dGVuZCh0cnVlLHRoaXMsZik7dGhpcy5yZW5kZXJlci5vcHRpb25zPWY7dGhpcy5yZXNldERhdGFCb3VuZHM9dGhpcy5yZW5kZXJlci5yZXNldERhdGFCb3VuZHM7dGhpcy5yZXNldERhdGFCb3VuZHMoKX07ZS5qcXBsb3QuUHlyYW1pZEF4aXNSZW5kZXJlci5wcm90b3R5cGUucmVzZXREYXRhQm91bmRzPWZ1bmN0aW9uKCl7dmFyIGg9dGhpcy5fZGF0YUJvdW5kcztoLm1pbj1udWxsO2gubWF4PW51bGw7dmFyIGc7Zm9yKHZhciBtPTA7bTx0aGlzLl9zZXJpZXMubGVuZ3RoO20rKyl7dmFyIG49dGhpcy5fc2VyaWVzW21dO3ZhciBvPW4uX3Bsb3REYXRhO2Zvcih2YXIgaz0wLGY9by5sZW5ndGg7azxmO2srKyl7aWYodGhpcy5uYW1lLmNoYXJBdCgwKT09PSJ4Iil7Zz1vW2tdWzFdO2lmKChnIT09bnVsbCYmZzxoLm1pbil8fGgubWluPT09bnVsbCl7aC5taW49Z31pZigoZyE9PW51bGwmJmc+aC5tYXgpfHxoLm1heD09PW51bGwpe2gubWF4PWd9fWVsc2V7Zz1vW2tdWzBdO2lmKChnIT09bnVsbCYmZzxoLm1pbil8fGgubWluPT09bnVsbCl7aC5taW49Z31pZigoZyE9PW51bGwmJmc+aC5tYXgpfHxoLm1heD09PW51bGwpe2gubWF4PWd9fX19fTtlLmpxcGxvdC5QeXJhbWlkQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGYsbil7aWYodGhpcy5zaG93KXt0aGlzLnJlbmRlcmVyLmNyZWF0ZVRpY2tzLmNhbGwodGhpcyxuKTt2YXIgbT0wO3ZhciBnO2lmKHRoaXMuX2VsZW0pe3RoaXMuX2VsZW0uZW1wdHlGb3JjZSgpO3RoaXMuX2VsZW09bnVsbH10aGlzLl9lbGVtPWUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO3RoaXMuX2VsZW0uYWRkQ2xhc3MoImpxcGxvdC1heGlzIGpxcGxvdC0iK3RoaXMubmFtZSk7dGhpcy5fZWxlbS5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKTtpZih0aGlzLm5hbWU9PSJ4YXhpcyJ8fHRoaXMubmFtZT09IngyYXhpcyIpe3RoaXMuX2VsZW0ud2lkdGgodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgpfWVsc2V7dGhpcy5fZWxlbS5oZWlnaHQodGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0KX10aGlzLmxhYmVsT3B0aW9ucy5heGlzPXRoaXMubmFtZTt0aGlzLl9sYWJlbD1uZXcgdGhpcy5sYWJlbFJlbmRlcmVyKHRoaXMubGFiZWxPcHRpb25zKTtpZih0aGlzLl9sYWJlbC5zaG93KXt2YXIgbD10aGlzLl9sYWJlbC5kcmF3KGYsbik7bC5hcHBlbmRUbyh0aGlzLl9lbGVtKTtsPW51bGx9dmFyIGs9dGhpcy5fdGlja3M7dmFyIGo7Zm9yKHZhciBoPTA7aDxrLmxlbmd0aDtoKyspe2o9a1toXTtpZihqLnNob3cmJmouc2hvd0xhYmVsJiYoIWouaXNNaW5vclRpY2spKXt0aGlzLl9lbGVtLmFwcGVuZChqLmRyYXcoZixuKSl9fWo9bnVsbDtrPW51bGx9cmV0dXJuIHRoaXMuX2VsZW19O3ZhciBiPVsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTddO3ZhciBkPXt9O2Zvcih2YXIgYz0wLGE9Yi5sZW5ndGg7YzxhO2MrKyl7ZFtiW2NdXT1iW2NdfWUuanFwbG90LlB5cmFtaWRBeGlzUmVuZGVyZXIucHJvdG90eXBlLmNyZWF0ZVRpY2tzPWZ1bmN0aW9uKEQpe3ZhciBKPXRoaXMudGlja3M7dmFyIE09dGhpcy5fZGF0YUJvdW5kczt2YXIgRTt2YXIgSzt2YXIgQjt2YXIgRzt2YXIgeTt2YXIgbjt2YXIgazt2YXIgaDt2YXIgSDt2YXIgQzt2YXIgeDt2YXIgTD10aGlzLm1pbjt2YXIgTj10aGlzLm1heDt2YXIgcTt2YXIgdjt2YXIgbTt2YXIgZzt2YXIgajt2YXIgTzt2YXIgQTt2YXIgRjt2YXIgcjt2YXIgUDt2YXIgej1udWxsO3ZhciBJO2lmKEoubGVuZ3RoKXtmb3IoSD0wLEM9Si5sZW5ndGg7SDxDO0grKyl7cT1KW0hdO3Y9bmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpO2lmKGUuaXNBcnJheShxKSl7di52YWx1ZT1xWzBdO3YubGFiZWw9cVsxXTt2LnNldFRpY2socVswXSx0aGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1c2godil9ZWxzZXtpZihlLmlzUGxhaW5PYmplY3QocSkpe2UuZXh0ZW5kKHRydWUsdixxKTt2LmF4aXM9dGhpcy5uYW1lO3RoaXMuX3RpY2tzLnB1c2godil9ZWxzZXtpZih0eXBlb2YgcT09PSJzdHJpbmciKXtQPUgrRC5kZWZhdWx0QXhpc1N0YXJ0fWVsc2V7UD1xfXYudmFsdWU9UDt2LmxhYmVsPXE7di5heGlzPXRoaXMubmFtZTt0aGlzLl90aWNrcy5wdXNoKHYpfX19dGhpcy5udW1iZXJUaWNrcz1KLmxlbmd0aDt0aGlzLm1pbj10aGlzLl90aWNrc1swXS52YWx1ZTt0aGlzLm1heD10aGlzLl90aWNrc1t0aGlzLm51bWJlclRpY2tzLTFdLnZhbHVlO3RoaXMudGlja0ludGVydmFsPSh0aGlzLm1heC10aGlzLm1pbikvKHRoaXMubnVtYmVyVGlja3MtMSk7aWYodGhpcy5fb3B0aW9ucy50aWNrSW50ZXJ2YWwpe3ZhciBvPXRoaXMuX29wdGlvbnMudGlja0ludGVydmFsO2ZvcihIPTA7SDx0aGlzLm51bWJlclRpY2tzO0grKyl7aWYoSCVvIT09MCl7dGhpcy5fdGlja3NbSF0uaXNNaW5vclRpY2s9dHJ1ZX19fWVsc2V7RT0odGhpcy5uYW1lLmNoYXJBdCgwKT09PSJ4Iik/dGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGg6dGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0O3I9TWF0aC5yb3VuZCgyK0UvdGhpcy50aWNrU3BhY2luZ0ZhY3Rvcik7aWYodGhpcy5udW1iZXJUaWNrcz5yKXtJPXRoaXMubnVtYmVyVGlja3MtMTtmb3IoSD0yO0g8STtIKyspe2lmKEklSD09PTAmJkkvSDxyKXt6PUgtMTticmVha319aWYoeiE9PW51bGwpe3ZhciBwPTE7Zm9yKEg9MSxDPXRoaXMuX3RpY2tzLmxlbmd0aDtIPEM7SCsrKXtpZihwPD16KXt0aGlzLl90aWNrc1tIXS5zaG93PWZhbHNlO3ArPTF9ZWxzZXtwPTF9fX19fUk9W107aWYodGhpcy5jYXRlZ29yeSl7dGhpcy5fdGlja3NbMF0uc2hvd0dyaWRsaW5lPWZhbHNlO3RoaXMuX3RpY2tzWzBdLnNob3dNYXJrPWZhbHNlO2ZvcihIPXRoaXMuX3RpY2tzLmxlbmd0aC0xO0g+MDtILS0pe3Y9bmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpO3YudmFsdWU9dGhpcy5fdGlja3NbSC0xXS52YWx1ZSt0aGlzLnRpY2tJbnRlcnZhbC8yO3YubGFiZWw9IiI7di5zaG93TGFiZWw9ZmFsc2U7di5heGlzPXRoaXMubmFtZTt0aGlzLl90aWNrc1tIXS5zaG93R3JpZGxpbmU9ZmFsc2U7dGhpcy5fdGlja3NbSF0uc2hvd01hcms9ZmFsc2U7dGhpcy5fdGlja3Muc3BsaWNlKEgsMCx2KX12PW5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTt2LnZhbHVlPXRoaXMuX3RpY2tzWzBdLnZhbHVlLXRoaXMudGlja0ludGVydmFsLzI7di5sYWJlbD0iIjt2LnNob3dMYWJlbD1mYWxzZTt2LmF4aXM9dGhpcy5uYW1lO3RoaXMuX3RpY2tzLnVuc2hpZnQodik7dj1uZXcgdGhpcy50aWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7di52YWx1ZT10aGlzLl90aWNrc1t0aGlzLl90aWNrcy5sZW5ndGgtMV0udmFsdWUrdGhpcy50aWNrSW50ZXJ2YWwvMjt2LmxhYmVsPSIiO3Yuc2hvd0xhYmVsPWZhbHNlO3YuYXhpcz10aGlzLm5hbWU7dGhpcy5fdGlja3MucHVzaCh2KTt0aGlzLnRpY2tJbnRlcnZhbD10aGlzLnRpY2tJbnRlcnZhbC8yO3RoaXMubnVtYmVyVGlja3M9dGhpcy5fdGlja3MubGVuZ3RoO3RoaXMubWluPXRoaXMuX3RpY2tzWzBdLnZhbHVlO3RoaXMubWF4PXRoaXMuX3RpY2tzW3RoaXMuX3RpY2tzLmxlbmd0aC0xXS52YWx1ZX19ZWxzZXtpZih0aGlzLm5hbWUuY2hhckF0KDApPT09IngiKXtFPXRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoO3ZhciB3PU1hdGgubWF4KE0ubWF4LE1hdGguYWJzKE0ubWluKSk7dmFyIHU9TWF0aC5taW4oTS5taW4sLXcpO0I9dTtHPXc7eT1HLUI7aWYodGhpcy50aWNrT3B0aW9ucz09bnVsbHx8IXRoaXMudGlja09wdGlvbnMuZm9ybWF0U3RyaW5nKXt0aGlzLl9vdmVycmlkZUZvcm1hdFN0cmluZz10cnVlfW09MzA7Zz1NYXRoLm1heChFLG0rMSk7aj0oZy1tKS8zMDA7Tz1lLmpxcGxvdC5MaW5lYXJUaWNrR2VuZXJhdG9yKEIsRyxqKTtBPUIreSoodGhpcy5wYWRNaW4tMSk7Rj1HLXkqKHRoaXMucGFkTWF4LTEpO2lmKEI8QXx8Rz5GKXtBPUIteSoodGhpcy5wYWRNaW4tMSk7Rj1HK3kqKHRoaXMucGFkTWF4LTEpO089ZS5qcXBsb3QuTGluZWFyVGlja0dlbmVyYXRvcihBLEYsail9dGhpcy5taW49T1swXTt0aGlzLm1heD1PWzFdO3RoaXMubnVtYmVyVGlja3M9T1syXTt0aGlzLl9hdXRvRm9ybWF0U3RyaW5nPU9bM107dGhpcy50aWNrSW50ZXJ2YWw9T1s0XX1lbHNle0U9dGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0O0I9TS5taW47Rz1NLm1heDt4PXRoaXMuX3Nlcmllc1swXTt0aGlzLl90aWNrcz1bXTt5PUctQjtpZihkW3ldKXt5Kz0xO0crPTF9dGhpcy5tYXg9Rzt0aGlzLm1pbj1CO3I9TWF0aC5yb3VuZCgyK0UvdGhpcy50aWNrU3BhY2luZ0ZhY3Rvcik7aWYoeSsxPD1yKXt0aGlzLm51bWJlclRpY2tzPXkrMTt0aGlzLnRpY2tJbnRlcnZhbD0xfWVsc2V7Zm9yKHZhciBIPXI7SD4xO0gtLSl7aWYoeS8oSC0xKT09PU1hdGgucm91bmQoeS8oSC0xKSkpe3RoaXMubnVtYmVyVGlja3M9SDt0aGlzLnRpY2tJbnRlcnZhbD15LyhILTEpO2JyZWFrfX19fWlmKHRoaXMuX292ZXJyaWRlRm9ybWF0U3RyaW5nJiZ0aGlzLl9hdXRvRm9ybWF0U3RyaW5nIT0iIil7dGhpcy50aWNrT3B0aW9ucz10aGlzLnRpY2tPcHRpb25zfHx7fTt0aGlzLnRpY2tPcHRpb25zLmZvcm1hdFN0cmluZz10aGlzLl9hdXRvRm9ybWF0U3RyaW5nfXZhciBmO2ZvcihIPTA7SDx0aGlzLm51bWJlclRpY2tzO0grKyl7dGhpcy50aWNrT3B0aW9ucy5heGlzPXRoaXMubmFtZTtmPXRoaXMubWluK3RoaXMudGlja0ludGVydmFsKkg7aWYodGhpcy5uYW1lLmNoYXJBdCgwKT09PSJ4Iil7Zj1NYXRoLmFicyhmKX10aGlzLnRpY2tPcHRpb25zLnZhbHVlPXRoaXMubWluK3RoaXMudGlja0ludGVydmFsKkg7dj1uZXcgdGhpcy50aWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7di5sYWJlbD12LnByZWZpeCt2LmZvcm1hdHRlcih2LmZvcm1hdFN0cmluZyxmKTt0aGlzLl90aWNrcy5wdXNoKHYpO2lmKHRoaXMubmFtZS5jaGFyQXQoMCk9PT0ieCImJkQuYXhlcy55TWlkQXhpcy5zaG93JiZ0aGlzLnRpY2tPcHRpb25zLnZhbHVlPT09MCl7dGhpcy5fc3BsaXRBeGlzPXRydWU7dGhpcy5fc3BsaXRMZW5ndGg9RC5heGVzLnlNaWRBeGlzLmdldFdpZHRoKCk7dj1uZXcgdGhpcy50aWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7dGhpcy5fdGlja3MucHVzaCh2KTt2LnZhbHVlPXRoaXMubWF4LzIwMDB9fXY9bnVsbH19O2UuanFwbG90LlB5cmFtaWRBeGlzUmVuZGVyZXIucHJvdG90eXBlLnNldD1mdW5jdGlvbigpe3ZhciBvPTA7dmFyIGo7dmFyIGc9MDt2YXIgbj0wO3ZhciBtO3ZhciBsO3ZhciBrO3ZhciBmPSh0aGlzLl9sYWJlbD09bnVsbCk/ZmFsc2U6dGhpcy5fbGFiZWwuc2hvdztpZih0aGlzLnNob3cpe2w9dGhpcy5fdGlja3M7YT1sLmxlbmd0aDtmb3IobT0wO208YTttKyspe2s9bFttXTtpZighay5fYnJlYWtUaWNrJiZrLnNob3cmJmsuc2hvd0xhYmVsJiYhay5pc01pbm9yVGljayl7aWYodGhpcy5uYW1lLmNoYXJBdCgwKT09PSJ4Iil7aj1rLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpfWVsc2V7aj1rLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSl9aWYoaj5vKXtvPWp9fX1pZih0aGlzLm5hbWU9PT0ieU1pZEF4aXMiKXtmb3IobT0wO208YTttKyspe2s9bFttXTtpZihrLl9lbGVtKXtqPShvLWsuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKSkvMjtrLl9lbGVtLmNzcygibGVmdCIsail9fX1rPW51bGw7bD1udWxsO2lmKGYpe2c9dGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTtuPXRoaXMuX2xhYmVsLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpfWlmKHRoaXMubmFtZT09PSJ4YXhpcyIpe289bytuO3RoaXMuX2VsZW0uY3NzKHtoZWlnaHQ6bysicHgiLGxlZnQ6IjBweCIsYm90dG9tOiIwcHgifSl9ZWxzZXtpZih0aGlzLm5hbWU9PT0ieDJheGlzIil7bz1vK247dGhpcy5fZWxlbS5jc3Moe2hlaWdodDpvKyJweCIsbGVmdDoiMHB4Iix0b3A6IjBweCJ9KX1lbHNle2lmKHRoaXMubmFtZT09PSJ5YXhpcyIpe289bytnO3RoaXMuX2VsZW0uY3NzKHt3aWR0aDpvKyJweCIsbGVmdDoiMHB4Iix0b3A6IjBweCJ9KTtpZihmJiZ0aGlzLl9sYWJlbC5jb25zdHJ1Y3Rvcj09ZS5qcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXIpe3RoaXMuX2xhYmVsLl9lbGVtLmNzcygid2lkdGgiLGcrInB4Iil9fWVsc2V7aWYodGhpcy5uYW1lPT09InlNaWRBeGlzIil7dmFyIGo9by8yLWcvMjt0aGlzLl9lbGVtLmNzcyh7d2lkdGg6bysicHgiLHRvcDoiMHB4In0pO2lmKGYmJnRoaXMuX2xhYmVsLmNvbnN0cnVjdG9yPT1lLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlcil7dGhpcy5fbGFiZWwuX2VsZW0uY3NzKHt3aWR0aDpnLGxlZnQ6aix0b3A6MH0pfX1lbHNle289bytnO3RoaXMuX2VsZW0uY3NzKHt3aWR0aDpvKyJweCIscmlnaHQ6IjBweCIsdG9wOiIwcHgifSk7aWYoZiYmdGhpcy5fbGFiZWwuY29uc3RydWN0b3I9PWUuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyKXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoIndpZHRoIixnKyJweCIpfX19fX19fTtlLmpxcGxvdC5QeXJhbWlkQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5wYWNrPWZ1bmN0aW9uKGosZyl7aj1qfHx7fTtnPWd8fHRoaXMuX29mZnNldHM7dmFyIEI9dGhpcy5fdGlja3M7dmFyIHY9dGhpcy5tYXg7dmFyIHU9dGhpcy5taW47dmFyIG89Zy5tYXg7dmFyIG09Zy5taW47dmFyIHI9KHRoaXMuX2xhYmVsPT1udWxsKT9mYWxzZTp0aGlzLl9sYWJlbC5zaG93O2Zvcih2YXIgcyBpbiBqKXt0aGlzLl9lbGVtLmNzcyhzLGpbc10pfXRoaXMuX29mZnNldHM9Zzt2YXIgaz1vLW07dmFyIGw9di11O3ZhciB6PXRoaXMuX3NwbGl0TGVuZ3RoO2lmKHRoaXMuX3NwbGl0QXhpcyl7ay09dGhpcy5fc3BsaXRMZW5ndGg7dGhpcy5wMnU9ZnVuY3Rpb24oaCl7cmV0dXJuKGgtbSkqbC9rK3V9O3RoaXMudTJwPWZ1bmN0aW9uKGgpe2lmKGg8PTApe3JldHVybihoLXUpKmsvbCttfWVsc2V7cmV0dXJuKGgtdSkqay9sK20ren19O3RoaXMuc2VyaWVzX3UycD1mdW5jdGlvbihoKXtpZihoPD0wKXtyZXR1cm4oaC11KSprL2x9ZWxzZXtyZXR1cm4oaC11KSprL2wren19O3RoaXMuc2VyaWVzX3AydT1mdW5jdGlvbihoKXtyZXR1cm4gaCpsL2srdX19ZWxzZXt0aGlzLnAydT1mdW5jdGlvbihoKXtyZXR1cm4oaC1tKSpsL2srdX07dGhpcy51MnA9ZnVuY3Rpb24oaCl7cmV0dXJuKGgtdSkqay9sK219O2lmKHRoaXMubmFtZS5jaGFyQXQoMCk9PT0ieCIpe3RoaXMuc2VyaWVzX3UycD1mdW5jdGlvbihoKXtyZXR1cm4oaC11KSprL2x9O3RoaXMuc2VyaWVzX3AydT1mdW5jdGlvbihoKXtyZXR1cm4gaCpsL2srdX19ZWxzZXt0aGlzLnNlcmllc191MnA9ZnVuY3Rpb24oaCl7cmV0dXJuKGgtdikqay9sfTt0aGlzLnNlcmllc19wMnU9ZnVuY3Rpb24oaCl7cmV0dXJuIGgqbC9rK3Z9fX1pZih0aGlzLnNob3cpe2lmKHRoaXMubmFtZS5jaGFyQXQoMCk9PT0ieCIpe2Zvcih2YXIgeD0wO3g8Qi5sZW5ndGg7eCsrKXt2YXIgcT1CW3hdO2lmKHEuc2hvdyYmcS5zaG93TGFiZWwpe3ZhciBmO2lmKHEuY29uc3RydWN0b3I9PWUuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXImJnEuYW5nbGUpe3ZhciBBPSh0aGlzLm5hbWU9PSJ4YXhpcyIpPzE6LTE7c3dpdGNoKHEubGFiZWxQb3NpdGlvbil7Y2FzZSJhdXRvIjppZihBKnEuYW5nbGU8MCl7Zj0tcS5nZXRXaWR0aCgpK3EuX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5zaW4oLXEuX3RleHRSZW5kZXJlci5hbmdsZSkvMn1lbHNle2Y9LXEuX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5zaW4ocS5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWJyZWFrO2Nhc2UiZW5kIjpmPS1xLmdldFdpZHRoKCkrcS5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbigtcS5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yO2JyZWFrO2Nhc2Uic3RhcnQiOmY9LXEuX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5zaW4ocS5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yO2JyZWFrO2Nhc2UibWlkZGxlIjpmPS1xLmdldFdpZHRoKCkvMitxLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguc2luKC1xLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzI7YnJlYWs7ZGVmYXVsdDpmPS1xLmdldFdpZHRoKCkvMitxLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguc2luKC1xLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzI7YnJlYWt9fWVsc2V7Zj0tcS5nZXRXaWR0aCgpLzJ9dmFyIEM9dGhpcy51MnAocS52YWx1ZSkrZisicHgiO3EuX2VsZW0uY3NzKCJsZWZ0IixDKTtxLnBhY2soKX19aWYocil7dmFyIG49dGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoImxlZnQiLG0ray8yLW4vMisicHgiKTtpZih0aGlzLm5hbWU9PSJ4YXhpcyIpe3RoaXMuX2xhYmVsLl9lbGVtLmNzcygiYm90dG9tIiwiMHB4Iil9ZWxzZXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoInRvcCIsIjBweCIpfXRoaXMuX2xhYmVsLnBhY2soKX19ZWxzZXtmb3IodmFyIHg9MDt4PEIubGVuZ3RoO3grKyl7dmFyIHE9Qlt4XTtpZihxLnNob3cmJnEuc2hvd0xhYmVsJiYhcS5pc01pbm9yVGljayl7dmFyIGY7aWYocS5jb25zdHJ1Y3Rvcj09ZS5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlciYmcS5hbmdsZSl7dmFyIEE9KHRoaXMubmFtZT09InlheGlzIik/MTotMTtzd2l0Y2gocS5sYWJlbFBvc2l0aW9uKXtjYXNlImF1dG8iOmNhc2UiZW5kIjppZihBKnEuYW5nbGU8MCl7Zj0tcS5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLmNvcygtcS5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWVsc2V7Zj0tcS5nZXRIZWlnaHQoKStxLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguY29zKHEuX3RleHRSZW5kZXJlci5hbmdsZSkvMn1icmVhaztjYXNlInN0YXJ0IjppZihxLmFuZ2xlPjApe2Y9LXEuX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5jb3MoLXEuX3RleHRSZW5kZXJlci5hbmdsZSkvMn1lbHNle2Y9LXEuZ2V0SGVpZ2h0KCkrcS5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLmNvcyhxLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzJ9YnJlYWs7Y2FzZSJtaWRkbGUiOmY9LXEuZ2V0SGVpZ2h0KCkvMjticmVhaztkZWZhdWx0OmY9LXEuZ2V0SGVpZ2h0KCkvMjticmVha319ZWxzZXtmPS1xLmdldEhlaWdodCgpLzJ9dmFyIEM9dGhpcy51MnAocS52YWx1ZSkrZisicHgiO3EuX2VsZW0uY3NzKCJ0b3AiLEMpO3EucGFjaygpfX1pZihyKXt2YXIgeT10aGlzLl9sYWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKTtpZih0aGlzLm5hbWUhPT0ieU1pZEF4aXMiKXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoInRvcCIsby1rLzIteS8yKyJweCIpfWlmKHRoaXMubmFtZT09InlheGlzIil7dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJsZWZ0IiwiMHB4Iil9ZWxzZXtpZih0aGlzLm5hbWUhPT0ieU1pZEF4aXMiKXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoInJpZ2h0IiwiMHB4Iil9fXRoaXMuX2xhYmVsLnBhY2soKX19fUI9bnVsbH19KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.pyramidGridRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgeyAgICAgCiAgICAvLyBDbGFzczogJC5qcXBsb3QuQ2FudmFzR3JpZFJlbmRlcmVyCiAgICAvLyBUaGUgZGVmYXVsdCBqcVBsb3QgZ3JpZCByZW5kZXJlciwgY3JlYXRpbmcgYSBncmlkIG9uIGEgY2FudmFzIGVsZW1lbnQuCiAgICAvLyBUaGUgcmVuZGVyZXIgaGFzIG5vIGFkZGl0aW9uYWwgb3B0aW9ucyBiZXlvbmQgdGhlIDxHcmlkPiBjbGFzcy4KICAgICQuanFwbG90LlB5cmFtaWRHcmlkUmVuZGVyZXIgPSBmdW5jdGlvbigpewogICAgICAgICQuanFwbG90LkNhbnZhc0dyaWRSZW5kZXJlci5jYWxsKHRoaXMpOwogICAgfTsKCiAgICAkLmpxcGxvdC5QeXJhbWlkR3JpZFJlbmRlcmVyLnByb3RvdHlwZSA9IG5ldyAkLmpxcGxvdC5DYW52YXNHcmlkUmVuZGVyZXIoKTsKICAgICQuanFwbG90LlB5cmFtaWRHcmlkUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJC5qcXBsb3QuUHlyYW1pZEdyaWRSZW5kZXJlcjsKICAgIAogICAgLy8gY2FsbGVkIHdpdGggY29udGV4dCBvZiBHcmlkIG9iamVjdAogICAgJC5qcXBsb3QuQ2FudmFzR3JpZFJlbmRlcmVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIHRoaXMuX2N0eDsKICAgICAgICB0aGlzLnBsb3RCYW5kcyA9IHsKICAgICAgICAgICAgc2hvdzogZmFsc2UsCiAgICAgICAgICAgIGNvbG9yOiAncmdiKDIzMCwgMjE5LCAxNzkpJywKICAgICAgICAgICAgYXhpczogJ3knLAogICAgICAgICAgICBzdGFydDogbnVsbCwKICAgICAgICAgICAgaW50ZXJ2YWw6IDEwCiAgICAgICAgfTsKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKICAgICAgICAvLyBzZXQgdGhlIHNoYWRvdyByZW5kZXJlciBvcHRpb25zCiAgICAgICAgdmFyIHNvcHRzID0ge2xpbmVKb2luOidtaXRlcicsIGxpbmVDYXA6J3JvdW5kJywgZmlsbDpmYWxzZSwgaXNhcmM6ZmFsc2UsIGFuZ2xlOnRoaXMuc2hhZG93QW5nbGUsIG9mZnNldDp0aGlzLnNoYWRvd09mZnNldCwgYWxwaGE6dGhpcy5zaGFkb3dBbHBoYSwgZGVwdGg6dGhpcy5zaGFkb3dEZXB0aCwgbGluZVdpZHRoOnRoaXMuc2hhZG93V2lkdGgsIGNsb3NlUGF0aDpmYWxzZSwgc3Ryb2tlU3R5bGU6dGhpcy5zaGFkb3dDb2xvcn07CiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5pbml0KHNvcHRzKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LlB5cmFtaWRHcmlkUmVuZGVyZXIucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLl9jdHggPSB0aGlzLl9lbGVtLmdldCgwKS5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgIHZhciBjdHggPSB0aGlzLl9jdHg7CiAgICAgICAgdmFyIGF4ZXMgPSB0aGlzLl9heGVzOwogICAgICAgIHZhciB4cCA9IGF4ZXMueGF4aXMudTJwOwogICAgICAgIHZhciB5cCA9IGF4ZXMueU1pZEF4aXMudTJwOwogICAgICAgIHZhciB4bnVkZ2UgPSBheGVzLnhheGlzLm1heC8xMDAwLjA7CiAgICAgICAgdmFyIHhwMCA9IHhwKDApOwogICAgICAgIHZhciB4cG4gPSB4cCh4bnVkZ2UpOwogICAgICAgIHZhciBheCA9IFsneGF4aXMnLCAneWF4aXMnLCAneDJheGlzJywgJ3kyYXhpcycsJ3lNaWRBeGlzJ107CiAgICAgICAgLy8gQWRkIHRoZSBncmlkIG9udG8gdGhlIGdyaWQgY2FudmFzLiAgVGhpcyBpcyB0aGUgYm90dG9tIG1vc3QgbGF5ZXIuCiAgICAgICAgY3R4LnNhdmUoKTsKICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoLCB0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQpOwogICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLmJhY2tncm91bmQ7CgogICAgICAgIGN0eC5maWxsUmVjdCh0aGlzLl9sZWZ0LCB0aGlzLl90b3AsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpOwoKICAgICAgICBpZiAodGhpcy5wbG90QmFuZHMuc2hvdykgewogICAgICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgICAgICB2YXIgcGIgPSB0aGlzLnBsb3RCYW5kczsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHBiLmNvbG9yOwogICAgICAgICAgICB2YXIgYXhpczsKICAgICAgICAgICAgdmFyIHgsIHksIHcsIGg7CiAgICAgICAgICAgIC8vIGZpbmQgYXhpcyB0byB3b3JrIHdpdGgKICAgICAgICAgICAgaWYgKHBiLmF4aXMuY2hhckF0KDApID09PSAneCcpIHsKICAgICAgICAgICAgICAgIGlmIChheGVzLnhheGlzLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICBheGlzID0gYXhlcy54YXhpczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChwYi5heGlzLmNoYXJBdCgwKSA9PT0gJ3knKSB7CiAgICAgICAgICAgICAgICBpZiAoYXhlcy55YXhpcy5zaG93KSB7CiAgICAgICAgICAgICAgICAgICAgYXhpcyA9IGF4ZXMueWF4aXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChheGVzLnkyYXhpcy5zaG93KSB7CiAgICAgICAgICAgICAgICAgICAgYXhpcyA9IGF4ZXMueTJheGlzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoYXhlcy55TWlkQXhpcy5zaG93KSB7CiAgICAgICAgICAgICAgICAgICAgYXhpcyA9IGF4ZXMueU1pZEF4aXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChheGlzICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIC8vIGRyYXcgc29tZSByZWN0YW5nbGVzCiAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBwYi5zdGFydDsKICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gYXhpcy5taW47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBheGlzLm1heDsgaSArPSAyICogcGIuaW50ZXJ2YWwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYXhpcy5uYW1lLmNoYXJBdCgwKSA9PT0gJ3knKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHggPSB0aGlzLl9sZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgKyBwYi5pbnRlcnZhbCkgPCBheGlzLm1heCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGF4aXMuc2VyaWVzX3UycChpICsgcGIuaW50ZXJ2YWwpICsgdGhpcy5fdG9wOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGF4aXMuc2VyaWVzX3UycChheGlzLm1heCkgKyB0aGlzLl90b3A7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdyA9IHRoaXMuX3JpZ2h0IC0gdGhpcy5fbGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGF4aXMuc2VyaWVzX3UycChzdGFydCkgLSBheGlzLnNlcmllc191MnAoc3RhcnQgKyBwYi5pbnRlcnZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCh4LCB5LCB3LCBoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHkgPSAwOwogICAgICAgICAgICAgICAgICAgIC8vICAgICB4ID0gYXhpcy5zZXJpZXNfdTJwKGkpOwogICAgICAgICAgICAgICAgICAgIC8vICAgICBoID0gdGhpcy5faGVpZ2h0OwogICAgICAgICAgICAgICAgICAgIC8vICAgICB3ID0gYXhpcy5zZXJpZXNfdTJwKHN0YXJ0ICsgcGIuaW50ZXJ2YWwpIC0gYXhpcy5zZXJpZXNfdTJwKHN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAvLyB9CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgY3R4LmxpbmVKb2luID0gJ21pdGVyJzsKICAgICAgICBjdHgubGluZUNhcCA9ICdidXR0JzsKICAgICAgICBjdHgubGluZVdpZHRoID0gdGhpcy5ncmlkTGluZVdpZHRoOwogICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHRoaXMuZ3JpZExpbmVDb2xvcjsKICAgICAgICB2YXIgYiwgZSwgcywgbTsKICAgICAgICBmb3IgKHZhciBpPTU7IGk+MDsgaS0tKSB7CiAgICAgICAgICAgIHZhciBuYW1lID0gYXhbaS0xXTsKICAgICAgICAgICAgdmFyIGF4aXMgPSBheGVzW25hbWVdOwogICAgICAgICAgICB2YXIgdGlja3MgPSBheGlzLl90aWNrczsKICAgICAgICAgICAgdmFyIG51bXRpY2tzID0gdGlja3MubGVuZ3RoOwogICAgICAgICAgICBpZiAoYXhpcy5zaG93KSB7CiAgICAgICAgICAgICAgICBpZiAoYXhpcy5kcmF3QmFzZWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYm9wdHMgPSB7fTsKICAgICAgICAgICAgICAgICAgICBpZiAoYXhpcy5iYXNlbGluZVdpZHRoICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJvcHRzLmxpbmVXaWR0aCA9IGF4aXMuYmFzZWxpbmVXaWR0aDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXMuYmFzZWxpbmVDb2xvciAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBib3B0cy5zdHJva2VTdHlsZSA9IGF4aXMuYmFzZWxpbmVDb2xvcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3hheGlzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChheGVzLnlNaWRBeGlzLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TGluZSAodGhpcy5fbGVmdCwgdGhpcy5fYm90dG9tLCB4cDAsIHRoaXMuX2JvdHRvbSwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lICh4cG4sIHRoaXMuX2JvdHRvbSwgdGhpcy5fcmlnaHQsIHRoaXMuX2JvdHRvbSwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUgKHRoaXMuX2xlZnQsIHRoaXMuX2JvdHRvbSwgdGhpcy5fcmlnaHQsIHRoaXMuX2JvdHRvbSwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3lheGlzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lICh0aGlzLl9sZWZ0LCB0aGlzLl9ib3R0b20sIHRoaXMuX2xlZnQsIHRoaXMuX3RvcCwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3lNaWRBeGlzJzogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lKHhwMCwgdGhpcy5fYm90dG9tLCB4cDAsIHRoaXMuX3RvcCwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUoeHBuLCB0aGlzLl9ib3R0b20sIHhwbiwgdGhpcy5fdG9wLCBib3B0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneDJheGlzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChheGVzLnlNaWRBeGlzLnNob3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TGluZSAodGhpcy5fbGVmdCwgdGhpcy5fdG9wLCB4cDAsIHRoaXMuX3RvcCwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lICh4cG4sIHRoaXMuX3RvcCwgdGhpcy5fcmlnaHQsIHRoaXMuX3RvcCwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUgKHRoaXMuX2xlZnQsIHRoaXMuX2JvdHRvbSwgdGhpcy5fcmlnaHQsIHRoaXMuX2JvdHRvbSwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3kyYXhpcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TGluZSAodGhpcy5fcmlnaHQsIHRoaXMuX2JvdHRvbSwgdGhpcy5fcmlnaHQsIHRoaXMuX3RvcCwgYm9wdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAodmFyIGo9bnVtdGlja3M7IGo+MDsgai0tKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0aWNrc1tqLTFdOwogICAgICAgICAgICAgICAgICAgIGlmICh0LnNob3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IE1hdGgucm91bmQoYXhpcy51MnAodC52YWx1ZSkpICsgMC41OwogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3hheGlzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBncmlkIGxpbmUgaWYgd2Ugc2hvdWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvd0dyaWRsaW5lICYmIHRoaXMuZHJhd0dyaWRsaW5lcyAmJiAoIXQuaXNNaW5vclRpY2sgfHwgYXhpcy5zaG93TWlub3JUaWNrcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUocG9zLCB0aGlzLl90b3AsIHBvcywgdGhpcy5fYm90dG9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgbWFyawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LnNob3dNYXJrICYmIHQubWFyayAmJiAoIXQuaXNNaW5vclRpY2sgfHwgYXhpcy5zaG93TWlub3JUaWNrcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHQubWFya1NpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSB0Lm1hcms7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSBNYXRoLnJvdW5kKGF4aXMudTJwKHQudmFsdWUpKSArIDAuNTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvdXRzaWRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdGhpcy5fYm90dG9tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl9ib3R0b20rczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2lkZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX2JvdHRvbS1zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl9ib3R0b207CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjcm9zcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX2JvdHRvbS1zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl9ib3R0b20rczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX2JvdHRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gdGhpcy5fYm90dG9tK3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgc2hhZG93CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYWRvdykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGN0eCwgW1twb3MsYl0sW3BvcyxlXV0sIHtsaW5lQ2FwOididXR0JywgbGluZVdpZHRoOnRoaXMuZ3JpZExpbmVXaWR0aCwgb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LCBkZXB0aDoyLCBmaWxsOmZhbHNlLCBjbG9zZVBhdGg6ZmFsc2V9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lKHBvcywgYiwgcG9zLCBlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd5YXhpcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgZ3JpZCBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvd0dyaWRsaW5lICYmIHRoaXMuZHJhd0dyaWRsaW5lcyAmJiAoIXQuaXNNaW5vclRpY2sgfHwgYXhpcy5zaG93TWlub3JUaWNrcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUodGhpcy5fcmlnaHQsIHBvcywgdGhpcy5fbGVmdCwgcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIG1hcmsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5zaG93TWFyayAmJiB0Lm1hcmsgJiYgKCF0LmlzTWlub3JUaWNrIHx8IGF4aXMuc2hvd01pbm9yVGlja3MpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSB0Lm1hcmtTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gdC5tYXJrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gTWF0aC5yb3VuZChheGlzLnUycCh0LnZhbHVlKSkgKyAwLjU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb3V0c2lkZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX2xlZnQtczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gdGhpcy5fbGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2lkZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX2xlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuX2xlZnQrczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nyb3NzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdGhpcy5fbGVmdC1zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl9sZWZ0K3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSB0aGlzLl9sZWZ0LXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuX2xlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBzaGFkb3cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCBbW2IsIHBvc10sIFtlLCBwb3NdXSwge2xpbmVDYXA6J2J1dHQnLCBsaW5lV2lkdGg6dGhpcy5ncmlkTGluZVdpZHRoKjEuNSwgb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LCBmaWxsOmZhbHNlLCBjbG9zZVBhdGg6ZmFsc2V9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TGluZShiLCBwb3MsIGUsIHBvcywge3N0cm9rZVN0eWxlOmF4aXMuYm9yZGVyQ29sb3J9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd5TWlkQXhpcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgZ3JpZCBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvd0dyaWRsaW5lICYmIHRoaXMuZHJhd0dyaWRsaW5lcyAmJiAoIXQuaXNNaW5vclRpY2sgfHwgYXhpcy5zaG93TWlub3JUaWNrcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUodGhpcy5fbGVmdCwgcG9zLCB4cDAsIHBvcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lKHhwbiwgcG9zLCB0aGlzLl9yaWdodCwgcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgbWFyawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LnNob3dNYXJrICYmIHQubWFyayAmJiAoIXQuaXNNaW5vclRpY2sgfHwgYXhpcy5zaG93TWlub3JUaWNrcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHQubWFya1NpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSB0Lm1hcms7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSBNYXRoLnJvdW5kKGF4aXMudTJwKHQudmFsdWUpKSArIDAuNTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSB4cDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB4cDAgKyBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBzaGFkb3cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCBbW2IsIHBvc10sIFtlLCBwb3NdXSwge2xpbmVDYXA6J2J1dHQnLCBsaW5lV2lkdGg6dGhpcy5ncmlkTGluZVdpZHRoKjEuNSwgb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LCBmaWxsOmZhbHNlLCBjbG9zZVBhdGg6ZmFsc2V9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TGluZShiLCBwb3MsIGUsIHBvcywge3N0cm9rZVN0eWxlOmF4aXMuYm9yZGVyQ29sb3J9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSB4cG4gLSBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0geHBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBzaGFkb3cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCBbW2IsIHBvc10sIFtlLCBwb3NdXSwge2xpbmVDYXA6J2J1dHQnLCBsaW5lV2lkdGg6dGhpcy5ncmlkTGluZVdpZHRoKjEuNSwgb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LCBmaWxsOmZhbHNlLCBjbG9zZVBhdGg6ZmFsc2V9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TGluZShiLCBwb3MsIGUsIHBvcywge3N0cm9rZVN0eWxlOmF4aXMuYm9yZGVyQ29sb3J9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4MmF4aXMnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIGdyaWQgbGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LnNob3dHcmlkbGluZSAmJiB0aGlzLmRyYXdHcmlkbGluZXMgJiYgKCF0LmlzTWlub3JUaWNrIHx8IGF4aXMuc2hvd01pbm9yVGlja3MpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lKHBvcywgdGhpcy5fYm90dG9tLCBwb3MsIHRoaXMuX3RvcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBtYXJrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvd01hcmsgJiYgdC5tYXJrICYmICghdC5pc01pbm9yVGljayB8fCBheGlzLnNob3dNaW5vclRpY2tzKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gdC5tYXJrU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHQubWFyazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IE1hdGgucm91bmQoYXhpcy51MnAodC52YWx1ZSkpICsgMC41OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ291dHNpZGUnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSB0aGlzLl90b3AtczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gdGhpcy5fdG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zaWRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdGhpcy5fdG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl90b3ArczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nyb3NzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdGhpcy5fdG9wLXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuX3RvcCtzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdGhpcy5fdG9wLXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuX3RvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIHNoYWRvdwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFkb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIFtbcG9zLGJdLFtwb3MsZV1dLCB7bGluZUNhcDonYnV0dCcsIGxpbmVXaWR0aDp0aGlzLmdyaWRMaW5lV2lkdGgsIG9mZnNldDp0aGlzLmdyaWRMaW5lV2lkdGgqMC43NSwgZGVwdGg6MiwgZmlsbDpmYWxzZSwgY2xvc2VQYXRoOmZhbHNlfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUocG9zLCBiLCBwb3MsIGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3kyYXhpcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgZ3JpZCBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuc2hvd0dyaWRsaW5lICYmIHRoaXMuZHJhd0dyaWRsaW5lcyAmJiAoIXQuaXNNaW5vclRpY2sgfHwgYXhpcy5zaG93TWlub3JUaWNrcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUodGhpcy5fbGVmdCwgcG9zLCB0aGlzLl9yaWdodCwgcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIG1hcmsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5zaG93TWFyayAmJiB0Lm1hcmsgJiYgKCF0LmlzTWlub3JUaWNrIHx8IGF4aXMuc2hvd01pbm9yVGlja3MpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSB0Lm1hcmtTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gdC5tYXJrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gTWF0aC5yb3VuZChheGlzLnUycCh0LnZhbHVlKSkgKyAwLjU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb3V0c2lkZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX3JpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl9yaWdodCtzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zaWRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdGhpcy5fcmlnaHQtczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gdGhpcy5fcmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjcm9zcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRoaXMuX3JpZ2h0LXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuX3JpZ2h0K3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSB0aGlzLl9yaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gdGhpcy5fcmlnaHQrczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIHNoYWRvdwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFkb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIFtbYiwgcG9zXSwgW2UsIHBvc11dLCB7bGluZUNhcDonYnV0dCcsIGxpbmVXaWR0aDp0aGlzLmdyaWRMaW5lV2lkdGgqMS41LCBvZmZzZXQ6dGhpcy5ncmlkTGluZVdpZHRoKjAuNzUsIGZpbGw6ZmFsc2UsIGNsb3NlUGF0aDpmYWxzZX0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMaW5lKGIsIHBvcywgZSwgcG9zLCB7c3Ryb2tlU3R5bGU6YXhpcy5ib3JkZXJDb2xvcn0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0ID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBheGlzID0gbnVsbDsKICAgICAgICAgICAgdGlja3MgPSBudWxsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgICAgIAogICAgICAgIGZ1bmN0aW9uIGRyYXdMaW5lKGJ4LCBieSwgZXgsIGV5LCBvcHRzKSB7CiAgICAgICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9OwogICAgICAgICAgICBpZiAob3B0cy5saW5lV2lkdGggPT0gbnVsbCB8fCBvcHRzLmxpbmVXaWR0aCAhPSAwKXsKICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsIGN0eCwgb3B0cyk7CiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgICAgICBjdHgubW92ZVRvKGJ4LCBieSk7CiAgICAgICAgICAgICAgICBjdHgubGluZVRvKGV4LCBleSk7CiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7CiAgICAgICAgICAgIGlmIChheGVzLnlNaWRBeGlzLnNob3cpIHsKICAgICAgICAgICAgICAgIHZhciBwb2ludHMgPSBbW3RoaXMuX2xlZnQsIHRoaXMuX2JvdHRvbV0sIFt4cDAsIHRoaXMuX2JvdHRvbV1dOwogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGN0eCwgcG9pbnRzKTsKICAgICAgICAgICAgICAgIHZhciBwb2ludHMgPSBbW3hwbiwgdGhpcy5fYm90dG9tXSwgW3RoaXMuX3JpZ2h0LCB0aGlzLl9ib3R0b21dLCBbdGhpcy5fcmlnaHQsIHRoaXMuX3RvcF1dOwogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGN0eCwgcG9pbnRzKTsKICAgICAgICAgICAgICAgIHZhciBwb2ludHMgPSBbW3hwMCwgdGhpcy5fYm90dG9tXSwgW3hwMCwgdGhpcy5fdG9wXV07CiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoY3R4LCBwb2ludHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IFtbdGhpcy5fbGVmdCwgdGhpcy5fYm90dG9tXSwgW3RoaXMuX3JpZ2h0LCB0aGlzLl9ib3R0b21dLCBbdGhpcy5fcmlnaHQsIHRoaXMuX3RvcF1dOwogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGN0eCwgcG9pbnRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBOb3cgZHJhdyBib3JkZXIgYXJvdW5kIGdyaWQuICBVc2UgYXhpcyBib3JkZXIgZGVmaW5pdGlvbnMuIHN0YXJ0IGF0CiAgICAgICAgLy8gdXBwZXIgbGVmdCBhbmQgZ28gY2xvY2t3aXNlLgogICAgICAgIGlmICh0aGlzLmJvcmRlcldpZHRoICE9IDAgJiYgdGhpcy5kcmF3Qm9yZGVyKSB7CiAgICAgICAgICAgIGlmIChheGVzLnlNaWRBeGlzLnNob3cpIHsKICAgICAgICAgICAgICAgIGRyYXdMaW5lICh0aGlzLl9sZWZ0LCB0aGlzLl90b3AsIHhwMCwgdGhpcy5fdG9wLCB7bGluZUNhcDoncm91bmQnLCBzdHJva2VTdHlsZTpheGVzLngyYXhpcy5ib3JkZXJDb2xvciwgbGluZVdpZHRoOmF4ZXMueDJheGlzLmJvcmRlcldpZHRofSk7CiAgICAgICAgICAgICAgICBkcmF3TGluZSAoeHBuLCB0aGlzLl90b3AsIHRoaXMuX3JpZ2h0LCB0aGlzLl90b3AsIHtsaW5lQ2FwOidyb3VuZCcsIHN0cm9rZVN0eWxlOmF4ZXMueDJheGlzLmJvcmRlckNvbG9yLCBsaW5lV2lkdGg6YXhlcy54MmF4aXMuYm9yZGVyV2lkdGh9KTsKICAgICAgICAgICAgICAgIGRyYXdMaW5lICh0aGlzLl9yaWdodCwgdGhpcy5fdG9wLCB0aGlzLl9yaWdodCwgdGhpcy5fYm90dG9tLCB7bGluZUNhcDoncm91bmQnLCBzdHJva2VTdHlsZTpheGVzLnkyYXhpcy5ib3JkZXJDb2xvciwgbGluZVdpZHRoOmF4ZXMueTJheGlzLmJvcmRlcldpZHRofSk7CiAgICAgICAgICAgICAgICBkcmF3TGluZSAodGhpcy5fcmlnaHQsIHRoaXMuX2JvdHRvbSwgeHBuLCB0aGlzLl9ib3R0b20sIHtsaW5lQ2FwOidyb3VuZCcsIHN0cm9rZVN0eWxlOmF4ZXMueGF4aXMuYm9yZGVyQ29sb3IsIGxpbmVXaWR0aDpheGVzLnhheGlzLmJvcmRlcldpZHRofSk7CiAgICAgICAgICAgICAgICBkcmF3TGluZSAoeHAwLCB0aGlzLl9ib3R0b20sIHRoaXMuX2xlZnQsIHRoaXMuX2JvdHRvbSwge2xpbmVDYXA6J3JvdW5kJywgc3Ryb2tlU3R5bGU6YXhlcy54YXhpcy5ib3JkZXJDb2xvciwgbGluZVdpZHRoOmF4ZXMueGF4aXMuYm9yZGVyV2lkdGh9KTsKICAgICAgICAgICAgICAgIGRyYXdMaW5lICh0aGlzLl9sZWZ0LCB0aGlzLl9ib3R0b20sIHRoaXMuX2xlZnQsIHRoaXMuX3RvcCwge2xpbmVDYXA6J3JvdW5kJywgc3Ryb2tlU3R5bGU6YXhlcy55YXhpcy5ib3JkZXJDb2xvciwgbGluZVdpZHRoOmF4ZXMueWF4aXMuYm9yZGVyV2lkdGh9KTsKICAgICAgICAgICAgICAgIGRyYXdMaW5lICh4cDAsIHRoaXMuX2JvdHRvbSwgeHAwLCB0aGlzLl90b3AsIHtsaW5lQ2FwOidyb3VuZCcsIHN0cm9rZVN0eWxlOmF4ZXMueWF4aXMuYm9yZGVyQ29sb3IsIGxpbmVXaWR0aDpheGVzLnlheGlzLmJvcmRlcldpZHRofSk7CiAgICAgICAgICAgICAgICBkcmF3TGluZSAoeHBuLCB0aGlzLl9ib3R0b20sIHhwbiwgdGhpcy5fdG9wLCB7bGluZUNhcDoncm91bmQnLCBzdHJva2VTdHlsZTpheGVzLnlheGlzLmJvcmRlckNvbG9yLCBsaW5lV2lkdGg6YXhlcy55YXhpcy5ib3JkZXJXaWR0aH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgZHJhd0xpbmUgKHRoaXMuX2xlZnQsIHRoaXMuX3RvcCwgdGhpcy5fcmlnaHQsIHRoaXMuX3RvcCwge2xpbmVDYXA6J3JvdW5kJywgc3Ryb2tlU3R5bGU6YXhlcy54MmF4aXMuYm9yZGVyQ29sb3IsIGxpbmVXaWR0aDpheGVzLngyYXhpcy5ib3JkZXJXaWR0aH0pOwogICAgICAgICAgICAgICAgZHJhd0xpbmUgKHRoaXMuX3JpZ2h0LCB0aGlzLl90b3AsIHRoaXMuX3JpZ2h0LCB0aGlzLl9ib3R0b20sIHtsaW5lQ2FwOidyb3VuZCcsIHN0cm9rZVN0eWxlOmF4ZXMueTJheGlzLmJvcmRlckNvbG9yLCBsaW5lV2lkdGg6YXhlcy55MmF4aXMuYm9yZGVyV2lkdGh9KTsKICAgICAgICAgICAgICAgIGRyYXdMaW5lICh0aGlzLl9yaWdodCwgdGhpcy5fYm90dG9tLCB0aGlzLl9sZWZ0LCB0aGlzLl9ib3R0b20sIHtsaW5lQ2FwOidyb3VuZCcsIHN0cm9rZVN0eWxlOmF4ZXMueGF4aXMuYm9yZGVyQ29sb3IsIGxpbmVXaWR0aDpheGVzLnhheGlzLmJvcmRlcldpZHRofSk7CiAgICAgICAgICAgICAgICBkcmF3TGluZSAodGhpcy5fbGVmdCwgdGhpcy5fYm90dG9tLCB0aGlzLl9sZWZ0LCB0aGlzLl90b3AsIHtsaW5lQ2FwOidyb3VuZCcsIHN0cm9rZVN0eWxlOmF4ZXMueWF4aXMuYm9yZGVyQ29sb3IsIGxpbmVXaWR0aDpheGVzLnlheGlzLmJvcmRlcldpZHRofSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gY3R4LmxpbmVXaWR0aCA9IHRoaXMuYm9yZGVyV2lkdGg7CiAgICAgICAgLy8gY3R4LnN0cm9rZVN0eWxlID0gdGhpcy5ib3JkZXJDb2xvcjsKICAgICAgICAvLyBjdHguc3Ryb2tlUmVjdCh0aGlzLl9sZWZ0LCB0aGlzLl90b3AsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpOwogICAgICAgIAogICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICAgICAgY3R4ID0gIG51bGw7CiAgICAgICAgYXhlcyA9IG51bGw7CiAgICB9Owp9KShqUXVlcnkpOyA=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.pyramidGridRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGEpe2EuanFwbG90LlB5cmFtaWRHcmlkUmVuZGVyZXI9ZnVuY3Rpb24oKXthLmpxcGxvdC5DYW52YXNHcmlkUmVuZGVyZXIuY2FsbCh0aGlzKX07YS5qcXBsb3QuUHlyYW1pZEdyaWRSZW5kZXJlci5wcm90b3R5cGU9bmV3IGEuanFwbG90LkNhbnZhc0dyaWRSZW5kZXJlcigpO2EuanFwbG90LlB5cmFtaWRHcmlkUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWEuanFwbG90LlB5cmFtaWRHcmlkUmVuZGVyZXI7YS5qcXBsb3QuQ2FudmFzR3JpZFJlbmRlcmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGMpe3RoaXMuX2N0eDt0aGlzLnBsb3RCYW5kcz17c2hvdzpmYWxzZSxjb2xvcjoicmdiKDIzMCwgMjE5LCAxNzkpIixheGlzOiJ5IixzdGFydDpudWxsLGludGVydmFsOjEwfTthLmV4dGVuZCh0cnVlLHRoaXMsYyk7dmFyIGI9e2xpbmVKb2luOiJtaXRlciIsbGluZUNhcDoicm91bmQiLGZpbGw6ZmFsc2UsaXNhcmM6ZmFsc2UsYW5nbGU6dGhpcy5zaGFkb3dBbmdsZSxvZmZzZXQ6dGhpcy5zaGFkb3dPZmZzZXQsYWxwaGE6dGhpcy5zaGFkb3dBbHBoYSxkZXB0aDp0aGlzLnNoYWRvd0RlcHRoLGxpbmVXaWR0aDp0aGlzLnNoYWRvd1dpZHRoLGNsb3NlUGF0aDpmYWxzZSxzdHJva2VTdHlsZTp0aGlzLnNoYWRvd0NvbG9yfTt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmluaXQoYil9O2EuanFwbG90LlB5cmFtaWRHcmlkUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXt0aGlzLl9jdHg9dGhpcy5fZWxlbS5nZXQoMCkuZ2V0Q29udGV4dCgiMmQiKTt2YXIgRD10aGlzLl9jdHg7dmFyIEc9dGhpcy5fYXhlczt2YXIgcT1HLnhheGlzLnUycDt2YXIgSj1HLnlNaWRBeGlzLnUycDt2YXIgbD1HLnhheGlzLm1heC8xMDAwO3ZhciB1PXEoMCk7dmFyIGY9cShsKTt2YXIgcj1bInhheGlzIiwieWF4aXMiLCJ4MmF4aXMiLCJ5MmF4aXMiLCJ5TWlkQXhpcyJdO0Quc2F2ZSgpO0QuY2xlYXJSZWN0KDAsMCx0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aCx0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQpO0QuZmlsbFN0eWxlPXRoaXMuYmFja2dyb3VuZENvbG9yfHx0aGlzLmJhY2tncm91bmQ7RC5maWxsUmVjdCh0aGlzLl9sZWZ0LHRoaXMuX3RvcCx0aGlzLl93aWR0aCx0aGlzLl9oZWlnaHQpO2lmKHRoaXMucGxvdEJhbmRzLnNob3cpe0Quc2F2ZSgpO3ZhciBjPXRoaXMucGxvdEJhbmRzO0QuZmlsbFN0eWxlPWMuY29sb3I7dmFyIGQ7dmFyIG8sbixwLEk7aWYoYy5heGlzLmNoYXJBdCgwKT09PSJ4Iil7aWYoRy54YXhpcy5zaG93KXtkPUcueGF4aXN9fWVsc2V7aWYoYy5heGlzLmNoYXJBdCgwKT09PSJ5Iil7aWYoRy55YXhpcy5zaG93KXtkPUcueWF4aXN9ZWxzZXtpZihHLnkyYXhpcy5zaG93KXtkPUcueTJheGlzfWVsc2V7aWYoRy55TWlkQXhpcy5zaG93KXtkPUcueU1pZEF4aXN9fX19fWlmKGQhPT11bmRlZmluZWQpe3ZhciBnPWMuc3RhcnQ7aWYoZz09PW51bGwpe2c9ZC5taW59Zm9yKHZhciBIPWc7SDxkLm1heDtIKz0yKmMuaW50ZXJ2YWwpe2lmKGQubmFtZS5jaGFyQXQoMCk9PT0ieSIpe289dGhpcy5fbGVmdDtpZigoSCtjLmludGVydmFsKTxkLm1heCl7bj1kLnNlcmllc191MnAoSCtjLmludGVydmFsKSt0aGlzLl90b3B9ZWxzZXtuPWQuc2VyaWVzX3UycChkLm1heCkrdGhpcy5fdG9wfXA9dGhpcy5fcmlnaHQtdGhpcy5fbGVmdDtJPWQuc2VyaWVzX3UycChnKS1kLnNlcmllc191MnAoZytjLmludGVydmFsKTtELmZpbGxSZWN0KG8sbixwLEkpfX19RC5yZXN0b3JlKCl9RC5zYXZlKCk7RC5saW5lSm9pbj0ibWl0ZXIiO0QubGluZUNhcD0iYnV0dCI7RC5saW5lV2lkdGg9dGhpcy5ncmlkTGluZVdpZHRoO0Quc3Ryb2tlU3R5bGU9dGhpcy5ncmlkTGluZUNvbG9yO3ZhciBMLEssQSxDO2Zvcih2YXIgSD01O0g+MDtILS0pe3ZhciBPPXJbSC0xXTt2YXIgZD1HW09dO3ZhciBNPWQuX3RpY2tzO3ZhciBCPU0ubGVuZ3RoO2lmKGQuc2hvdyl7aWYoZC5kcmF3QmFzZWxpbmUpe3ZhciBOPXt9O2lmKGQuYmFzZWxpbmVXaWR0aCE9PW51bGwpe04ubGluZVdpZHRoPWQuYmFzZWxpbmVXaWR0aH1pZihkLmJhc2VsaW5lQ29sb3IhPT1udWxsKXtOLnN0cm9rZVN0eWxlPWQuYmFzZWxpbmVDb2xvcn1zd2l0Y2goTyl7Y2FzZSJ4YXhpcyI6aWYoRy55TWlkQXhpcy5zaG93KXt6KHRoaXMuX2xlZnQsdGhpcy5fYm90dG9tLHUsdGhpcy5fYm90dG9tLE4pO3ooZix0aGlzLl9ib3R0b20sdGhpcy5fcmlnaHQsdGhpcy5fYm90dG9tLE4pfWVsc2V7eih0aGlzLl9sZWZ0LHRoaXMuX2JvdHRvbSx0aGlzLl9yaWdodCx0aGlzLl9ib3R0b20sTil9YnJlYWs7Y2FzZSJ5YXhpcyI6eih0aGlzLl9sZWZ0LHRoaXMuX2JvdHRvbSx0aGlzLl9sZWZ0LHRoaXMuX3RvcCxOKTticmVhaztjYXNlInlNaWRBeGlzIjp6KHUsdGhpcy5fYm90dG9tLHUsdGhpcy5fdG9wLE4pO3ooZix0aGlzLl9ib3R0b20sZix0aGlzLl90b3AsTik7YnJlYWs7Y2FzZSJ4MmF4aXMiOmlmKEcueU1pZEF4aXMuc2hvdyl7eih0aGlzLl9sZWZ0LHRoaXMuX3RvcCx1LHRoaXMuX3RvcCxOKTt6KGYsdGhpcy5fdG9wLHRoaXMuX3JpZ2h0LHRoaXMuX3RvcCxOKX1lbHNle3oodGhpcy5fbGVmdCx0aGlzLl9ib3R0b20sdGhpcy5fcmlnaHQsdGhpcy5fYm90dG9tLE4pfWJyZWFrO2Nhc2UieTJheGlzIjp6KHRoaXMuX3JpZ2h0LHRoaXMuX2JvdHRvbSx0aGlzLl9yaWdodCx0aGlzLl90b3AsTik7YnJlYWt9fWZvcih2YXIgRT1CO0U+MDtFLS0pe3ZhciB2PU1bRS0xXTtpZih2LnNob3cpe3ZhciBrPU1hdGgucm91bmQoZC51MnAodi52YWx1ZSkpKzAuNTtzd2l0Y2goTyl7Y2FzZSJ4YXhpcyI6aWYodi5zaG93R3JpZGxpbmUmJnRoaXMuZHJhd0dyaWRsaW5lcyYmKCF2LmlzTWlub3JUaWNrfHxkLnNob3dNaW5vclRpY2tzKSl7eihrLHRoaXMuX3RvcCxrLHRoaXMuX2JvdHRvbSl9aWYodi5zaG93TWFyayYmdi5tYXJrJiYoIXYuaXNNaW5vclRpY2t8fGQuc2hvd01pbm9yVGlja3MpKXtBPXYubWFya1NpemU7Qz12Lm1hcms7dmFyIGs9TWF0aC5yb3VuZChkLnUycCh2LnZhbHVlKSkrMC41O3N3aXRjaChDKXtjYXNlIm91dHNpZGUiOkw9dGhpcy5fYm90dG9tO0s9dGhpcy5fYm90dG9tK0E7YnJlYWs7Y2FzZSJpbnNpZGUiOkw9dGhpcy5fYm90dG9tLUE7Sz10aGlzLl9ib3R0b207YnJlYWs7Y2FzZSJjcm9zcyI6TD10aGlzLl9ib3R0b20tQTtLPXRoaXMuX2JvdHRvbStBO2JyZWFrO2RlZmF1bHQ6TD10aGlzLl9ib3R0b207Sz10aGlzLl9ib3R0b20rQTticmVha31pZih0aGlzLnNoYWRvdyl7dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KEQsW1trLExdLFtrLEtdXSx7bGluZUNhcDoiYnV0dCIsbGluZVdpZHRoOnRoaXMuZ3JpZExpbmVXaWR0aCxvZmZzZXQ6dGhpcy5ncmlkTGluZVdpZHRoKjAuNzUsZGVwdGg6MixmaWxsOmZhbHNlLGNsb3NlUGF0aDpmYWxzZX0pfXooayxMLGssSyl9YnJlYWs7Y2FzZSJ5YXhpcyI6aWYodi5zaG93R3JpZGxpbmUmJnRoaXMuZHJhd0dyaWRsaW5lcyYmKCF2LmlzTWlub3JUaWNrfHxkLnNob3dNaW5vclRpY2tzKSl7eih0aGlzLl9yaWdodCxrLHRoaXMuX2xlZnQsayl9aWYodi5zaG93TWFyayYmdi5tYXJrJiYoIXYuaXNNaW5vclRpY2t8fGQuc2hvd01pbm9yVGlja3MpKXtBPXYubWFya1NpemU7Qz12Lm1hcms7dmFyIGs9TWF0aC5yb3VuZChkLnUycCh2LnZhbHVlKSkrMC41O3N3aXRjaChDKXtjYXNlIm91dHNpZGUiOkw9dGhpcy5fbGVmdC1BO0s9dGhpcy5fbGVmdDticmVhaztjYXNlImluc2lkZSI6TD10aGlzLl9sZWZ0O0s9dGhpcy5fbGVmdCtBO2JyZWFrO2Nhc2UiY3Jvc3MiOkw9dGhpcy5fbGVmdC1BO0s9dGhpcy5fbGVmdCtBO2JyZWFrO2RlZmF1bHQ6TD10aGlzLl9sZWZ0LUE7Sz10aGlzLl9sZWZ0O2JyZWFrfWlmKHRoaXMuc2hhZG93KXt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoRCxbW0wsa10sW0ssa11dLHtsaW5lQ2FwOiJidXR0IixsaW5lV2lkdGg6dGhpcy5ncmlkTGluZVdpZHRoKjEuNSxvZmZzZXQ6dGhpcy5ncmlkTGluZVdpZHRoKjAuNzUsZmlsbDpmYWxzZSxjbG9zZVBhdGg6ZmFsc2V9KX16KEwsayxLLGsse3N0cm9rZVN0eWxlOmQuYm9yZGVyQ29sb3J9KX1icmVhaztjYXNlInlNaWRBeGlzIjppZih2LnNob3dHcmlkbGluZSYmdGhpcy5kcmF3R3JpZGxpbmVzJiYoIXYuaXNNaW5vclRpY2t8fGQuc2hvd01pbm9yVGlja3MpKXt6KHRoaXMuX2xlZnQsayx1LGspO3ooZixrLHRoaXMuX3JpZ2h0LGspfWlmKHYuc2hvd01hcmsmJnYubWFyayYmKCF2LmlzTWlub3JUaWNrfHxkLnNob3dNaW5vclRpY2tzKSl7QT12Lm1hcmtTaXplO0M9di5tYXJrO3ZhciBrPU1hdGgucm91bmQoZC51MnAodi52YWx1ZSkpKzAuNTtMPXU7Sz11K0E7aWYodGhpcy5zaGFkb3cpe3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhELFtbTCxrXSxbSyxrXV0se2xpbmVDYXA6ImJ1dHQiLGxpbmVXaWR0aDp0aGlzLmdyaWRMaW5lV2lkdGgqMS41LG9mZnNldDp0aGlzLmdyaWRMaW5lV2lkdGgqMC43NSxmaWxsOmZhbHNlLGNsb3NlUGF0aDpmYWxzZX0pfXooTCxrLEssayx7c3Ryb2tlU3R5bGU6ZC5ib3JkZXJDb2xvcn0pO0w9Zi1BO0s9ZjtpZih0aGlzLnNoYWRvdyl7dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KEQsW1tMLGtdLFtLLGtdXSx7bGluZUNhcDoiYnV0dCIsbGluZVdpZHRoOnRoaXMuZ3JpZExpbmVXaWR0aCoxLjUsb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LGZpbGw6ZmFsc2UsY2xvc2VQYXRoOmZhbHNlfSl9eihMLGssSyxrLHtzdHJva2VTdHlsZTpkLmJvcmRlckNvbG9yfSl9YnJlYWs7Y2FzZSJ4MmF4aXMiOmlmKHYuc2hvd0dyaWRsaW5lJiZ0aGlzLmRyYXdHcmlkbGluZXMmJighdi5pc01pbm9yVGlja3x8ZC5zaG93TWlub3JUaWNrcykpe3ooayx0aGlzLl9ib3R0b20sayx0aGlzLl90b3ApfWlmKHYuc2hvd01hcmsmJnYubWFyayYmKCF2LmlzTWlub3JUaWNrfHxkLnNob3dNaW5vclRpY2tzKSl7QT12Lm1hcmtTaXplO0M9di5tYXJrO3ZhciBrPU1hdGgucm91bmQoZC51MnAodi52YWx1ZSkpKzAuNTtzd2l0Y2goQyl7Y2FzZSJvdXRzaWRlIjpMPXRoaXMuX3RvcC1BO0s9dGhpcy5fdG9wO2JyZWFrO2Nhc2UiaW5zaWRlIjpMPXRoaXMuX3RvcDtLPXRoaXMuX3RvcCtBO2JyZWFrO2Nhc2UiY3Jvc3MiOkw9dGhpcy5fdG9wLUE7Sz10aGlzLl90b3ArQTticmVhaztkZWZhdWx0Okw9dGhpcy5fdG9wLUE7Sz10aGlzLl90b3A7YnJlYWt9aWYodGhpcy5zaGFkb3cpe3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhELFtbayxMXSxbayxLXV0se2xpbmVDYXA6ImJ1dHQiLGxpbmVXaWR0aDp0aGlzLmdyaWRMaW5lV2lkdGgsb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LGRlcHRoOjIsZmlsbDpmYWxzZSxjbG9zZVBhdGg6ZmFsc2V9KX16KGssTCxrLEspfWJyZWFrO2Nhc2UieTJheGlzIjppZih2LnNob3dHcmlkbGluZSYmdGhpcy5kcmF3R3JpZGxpbmVzJiYoIXYuaXNNaW5vclRpY2t8fGQuc2hvd01pbm9yVGlja3MpKXt6KHRoaXMuX2xlZnQsayx0aGlzLl9yaWdodCxrKX1pZih2LnNob3dNYXJrJiZ2Lm1hcmsmJighdi5pc01pbm9yVGlja3x8ZC5zaG93TWlub3JUaWNrcykpe0E9di5tYXJrU2l6ZTtDPXYubWFyazt2YXIgaz1NYXRoLnJvdW5kKGQudTJwKHYudmFsdWUpKSswLjU7c3dpdGNoKEMpe2Nhc2Uib3V0c2lkZSI6TD10aGlzLl9yaWdodDtLPXRoaXMuX3JpZ2h0K0E7YnJlYWs7Y2FzZSJpbnNpZGUiOkw9dGhpcy5fcmlnaHQtQTtLPXRoaXMuX3JpZ2h0O2JyZWFrO2Nhc2UiY3Jvc3MiOkw9dGhpcy5fcmlnaHQtQTtLPXRoaXMuX3JpZ2h0K0E7YnJlYWs7ZGVmYXVsdDpMPXRoaXMuX3JpZ2h0O0s9dGhpcy5fcmlnaHQrQTticmVha31pZih0aGlzLnNoYWRvdyl7dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KEQsW1tMLGtdLFtLLGtdXSx7bGluZUNhcDoiYnV0dCIsbGluZVdpZHRoOnRoaXMuZ3JpZExpbmVXaWR0aCoxLjUsb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LGZpbGw6ZmFsc2UsY2xvc2VQYXRoOmZhbHNlfSl9eihMLGssSyxrLHtzdHJva2VTdHlsZTpkLmJvcmRlckNvbG9yfSl9YnJlYWs7ZGVmYXVsdDpicmVha319fXY9bnVsbH1kPW51bGw7TT1udWxsfUQucmVzdG9yZSgpO2Z1bmN0aW9uIHooaixpLGUsYixoKXtELnNhdmUoKTtoPWh8fHt9O2lmKGgubGluZVdpZHRoPT1udWxsfHxoLmxpbmVXaWR0aCE9MCl7YS5leHRlbmQodHJ1ZSxELGgpO0QuYmVnaW5QYXRoKCk7RC5tb3ZlVG8oaixpKTtELmxpbmVUbyhlLGIpO0Quc3Ryb2tlKCl9RC5yZXN0b3JlKCl9aWYodGhpcy5zaGFkb3cpe2lmKEcueU1pZEF4aXMuc2hvdyl7dmFyIEY9W1t0aGlzLl9sZWZ0LHRoaXMuX2JvdHRvbV0sW3UsdGhpcy5fYm90dG9tXV07dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KEQsRik7dmFyIEY9W1tmLHRoaXMuX2JvdHRvbV0sW3RoaXMuX3JpZ2h0LHRoaXMuX2JvdHRvbV0sW3RoaXMuX3JpZ2h0LHRoaXMuX3RvcF1dO3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhELEYpO3ZhciBGPVtbdSx0aGlzLl9ib3R0b21dLFt1LHRoaXMuX3RvcF1dO3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhELEYpfWVsc2V7dmFyIEY9W1t0aGlzLl9sZWZ0LHRoaXMuX2JvdHRvbV0sW3RoaXMuX3JpZ2h0LHRoaXMuX2JvdHRvbV0sW3RoaXMuX3JpZ2h0LHRoaXMuX3RvcF1dO3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhELEYpfX1pZih0aGlzLmJvcmRlcldpZHRoIT0wJiZ0aGlzLmRyYXdCb3JkZXIpe2lmKEcueU1pZEF4aXMuc2hvdyl7eih0aGlzLl9sZWZ0LHRoaXMuX3RvcCx1LHRoaXMuX3RvcCx7bGluZUNhcDoicm91bmQiLHN0cm9rZVN0eWxlOkcueDJheGlzLmJvcmRlckNvbG9yLGxpbmVXaWR0aDpHLngyYXhpcy5ib3JkZXJXaWR0aH0pO3ooZix0aGlzLl90b3AsdGhpcy5fcmlnaHQsdGhpcy5fdG9wLHtsaW5lQ2FwOiJyb3VuZCIsc3Ryb2tlU3R5bGU6Ry54MmF4aXMuYm9yZGVyQ29sb3IsbGluZVdpZHRoOkcueDJheGlzLmJvcmRlcldpZHRofSk7eih0aGlzLl9yaWdodCx0aGlzLl90b3AsdGhpcy5fcmlnaHQsdGhpcy5fYm90dG9tLHtsaW5lQ2FwOiJyb3VuZCIsc3Ryb2tlU3R5bGU6Ry55MmF4aXMuYm9yZGVyQ29sb3IsbGluZVdpZHRoOkcueTJheGlzLmJvcmRlcldpZHRofSk7eih0aGlzLl9yaWdodCx0aGlzLl9ib3R0b20sZix0aGlzLl9ib3R0b20se2xpbmVDYXA6InJvdW5kIixzdHJva2VTdHlsZTpHLnhheGlzLmJvcmRlckNvbG9yLGxpbmVXaWR0aDpHLnhheGlzLmJvcmRlcldpZHRofSk7eih1LHRoaXMuX2JvdHRvbSx0aGlzLl9sZWZ0LHRoaXMuX2JvdHRvbSx7bGluZUNhcDoicm91bmQiLHN0cm9rZVN0eWxlOkcueGF4aXMuYm9yZGVyQ29sb3IsbGluZVdpZHRoOkcueGF4aXMuYm9yZGVyV2lkdGh9KTt6KHRoaXMuX2xlZnQsdGhpcy5fYm90dG9tLHRoaXMuX2xlZnQsdGhpcy5fdG9wLHtsaW5lQ2FwOiJyb3VuZCIsc3Ryb2tlU3R5bGU6Ry55YXhpcy5ib3JkZXJDb2xvcixsaW5lV2lkdGg6Ry55YXhpcy5ib3JkZXJXaWR0aH0pO3oodSx0aGlzLl9ib3R0b20sdSx0aGlzLl90b3Ase2xpbmVDYXA6InJvdW5kIixzdHJva2VTdHlsZTpHLnlheGlzLmJvcmRlckNvbG9yLGxpbmVXaWR0aDpHLnlheGlzLmJvcmRlcldpZHRofSk7eihmLHRoaXMuX2JvdHRvbSxmLHRoaXMuX3RvcCx7bGluZUNhcDoicm91bmQiLHN0cm9rZVN0eWxlOkcueWF4aXMuYm9yZGVyQ29sb3IsbGluZVdpZHRoOkcueWF4aXMuYm9yZGVyV2lkdGh9KX1lbHNle3oodGhpcy5fbGVmdCx0aGlzLl90b3AsdGhpcy5fcmlnaHQsdGhpcy5fdG9wLHtsaW5lQ2FwOiJyb3VuZCIsc3Ryb2tlU3R5bGU6Ry54MmF4aXMuYm9yZGVyQ29sb3IsbGluZVdpZHRoOkcueDJheGlzLmJvcmRlcldpZHRofSk7eih0aGlzLl9yaWdodCx0aGlzLl90b3AsdGhpcy5fcmlnaHQsdGhpcy5fYm90dG9tLHtsaW5lQ2FwOiJyb3VuZCIsc3Ryb2tlU3R5bGU6Ry55MmF4aXMuYm9yZGVyQ29sb3IsbGluZVdpZHRoOkcueTJheGlzLmJvcmRlcldpZHRofSk7eih0aGlzLl9yaWdodCx0aGlzLl9ib3R0b20sdGhpcy5fbGVmdCx0aGlzLl9ib3R0b20se2xpbmVDYXA6InJvdW5kIixzdHJva2VTdHlsZTpHLnhheGlzLmJvcmRlckNvbG9yLGxpbmVXaWR0aDpHLnhheGlzLmJvcmRlcldpZHRofSk7eih0aGlzLl9sZWZ0LHRoaXMuX2JvdHRvbSx0aGlzLl9sZWZ0LHRoaXMuX3RvcCx7bGluZUNhcDoicm91bmQiLHN0cm9rZVN0eWxlOkcueWF4aXMuYm9yZGVyQ29sb3IsbGluZVdpZHRoOkcueWF4aXMuYm9yZGVyV2lkdGh9KX19RC5yZXN0b3JlKCk7RD1udWxsO0c9bnVsbH19KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.pyramidRenderer.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewoKICAgIC8vIE5lZWQgdG8gZW5zdXJlIHB5cmFtaWQgYXhpcyBhbmQgZ3JpZCByZW5kZXJlcnMgYXJlIGxvYWRlZC4KICAgIC8vIFlvdSBzaG91bGQgbG9hZCB0aGVzZSB3aXRoIHNjcmlwdCB0YWdzIGluIHRoZSBodG1sIGhlYWQsIHRoYXQgaXMgbW9yZSBlZmZpY2llbnQKICAgIC8vIGFzIHRoZSBicm93c2VyIHdpbGwgY2FjaGUgdGhlIHJlcXVlc3QuCiAgICAvLyBOb3RlLCBoYXZlIHRvIGJsb2NrIHdpdGggc3luY2hyb25vdXMgcmVxdWVzdCBpbiBvcmRlciB0byBleGVjdXRlIGJhciByZW5kZXJlciBjb2RlLgogICAgaWYgKCQuanFwbG90LlB5cmFtaWRBeGlzUmVuZGVyZXIgPT09IHVuZGVmaW5lZCkgewogICAgICAgICQuYWpheCh7CiAgICAgICAgICAgIHVybDogJC5qcXBsb3QucGx1Z2luTG9jYXRpb24gKyAnanFwbG90LnB5cmFtaWRBeGlzUmVuZGVyZXIuanMnLAogICAgICAgICAgICBkYXRhVHlwZTogInNjcmlwdCIsCiAgICAgICAgICAgIGFzeW5jOiBmYWxzZQogICAgICAgIH0pOwogICAgfQogICAgCiAgICBpZiAoJC5qcXBsb3QuUHlyYW1pZEdyaWRSZW5kZXJlciA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgdXJsOiAkLmpxcGxvdC5wbHVnaW5Mb2NhdGlvbiArICdqcXBsb3QucHlyYW1pZEdyaWRSZW5kZXJlci5qcycsCiAgICAgICAgICAgIGRhdGFUeXBlOiAic2NyaXB0IiwKICAgICAgICAgICAgYXN5bmM6IGZhbHNlCiAgICAgICAgfSk7CiAgICB9CgogICAgJC5qcXBsb3QuUHlyYW1pZFJlbmRlcmVyID0gZnVuY3Rpb24oKXsKICAgICAgICAkLmpxcGxvdC5MaW5lUmVuZGVyZXIuY2FsbCh0aGlzKTsKICAgIH07CiAgICAKICAgICQuanFwbG90LlB5cmFtaWRSZW5kZXJlci5wcm90b3R5cGUgPSBuZXcgJC5qcXBsb3QuTGluZVJlbmRlcmVyKCk7CiAgICAkLmpxcGxvdC5QeXJhbWlkUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJC5qcXBsb3QuUHlyYW1pZFJlbmRlcmVyOwogICAgCiAgICAvLyBjYWxsZWQgd2l0aCBzY29wZSBvZiBhIHNlcmllcwogICAgJC5qcXBsb3QuUHlyYW1pZFJlbmRlcmVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucywgcGxvdCkgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIHRoaXMuX3R5cGUgPSAncHlyYW1pZCc7CiAgICAgICAgLy8gR3JvdXA6IFByb3BlcnRpZXMKICAgICAgICAvLwogICAgICAgIC8vIHByb3A6IGJhclBhZGRpbmcKICAgICAgICB0aGlzLmJhclBhZGRpbmcgPSAxMDsKICAgICAgICB0aGlzLmJhcldpZHRoID0gbnVsbDsKICAgICAgICAvLyBwcm9wOiBmaWxsCiAgICAgICAgLy8gVHJ1ZSB0byBmaWxsIHRoZSBiYXJzLgogICAgICAgIHRoaXMuZmlsbCA9IHRydWU7CiAgICAgICAgLy8gcHJvcDogaGlnaGxpZ2h0TW91c2VPdmVyCiAgICAgICAgLy8gVHJ1ZSB0byBoaWdobGlnaHQgc2xpY2Ugd2hlbiBtb3VzZWQgb3Zlci4KICAgICAgICAvLyBUaGlzIG11c3QgYmUgZmFsc2UgdG8gZW5hYmxlIGhpZ2hsaWdodE1vdXNlRG93biB0byBoaWdobGlnaHQgd2hlbiBjbGlja2luZyBvbiBhIHNsaWNlLgogICAgICAgIHRoaXMuaGlnaGxpZ2h0TW91c2VPdmVyID0gdHJ1ZTsKICAgICAgICAvLyBwcm9wOiBoaWdobGlnaHRNb3VzZURvd24KICAgICAgICAvLyBUcnVlIHRvIGhpZ2hsaWdodCB3aGVuIGEgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgb3ZlciBhIHNsaWNlLgogICAgICAgIC8vIFRoaXMgd2lsbCBiZSBkaXNhYmxlZCBpZiBoaWdobGlnaHRNb3VzZU92ZXIgaXMgdHJ1ZS4KICAgICAgICB0aGlzLmhpZ2hsaWdodE1vdXNlRG93biA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IGhpZ2hsaWdodENvbG9ycwogICAgICAgIC8vIGFuIGFycmF5IG9mIGNvbG9ycyB0byB1c2Ugd2hlbiBoaWdobGlnaHRpbmcgYSBzbGljZS4KICAgICAgICB0aGlzLmhpZ2hsaWdodENvbG9ycyA9IFtdOwogICAgICAgIC8vIHByb3AgaGlnaGxpZ2h0VGhyZXNob2xkCiAgICAgICAgLy8gRXhwYW5kIHRoZSBoaWdobGlnaHRhYmxlIHJlZ2lvbiBpbiB0aGUgeCBkaXJlY3Rpb24uCiAgICAgICAgLy8gRS5nLiBhIHZhbHVlIG9mIDMgd2lsbCBoaWdobGlnaHQgYSBiYXIgd2hlbiB0aGUgbW91c2UgaXMKICAgICAgICAvLyB3aXRoaW4gMyBwaXhlbHMgb2YgdGhlIGJhciBpbiB0aGUgeCBkaXJlY3Rpb24uCiAgICAgICAgdGhpcy5oaWdobGlnaHRUaHJlc2hvbGQgPSAyOwogICAgICAgIC8vIHByb3A6IHN5bmNocm9uaXplSGlnaGxpZ2h0CiAgICAgICAgLy8gSW5kZXggb2YgYW5vdGhlciBzZXJpZXMgdG8gaGlnaGxpZ2h0IHdoZW4gdGhpcyBzZXJpZXMgaXMgaGlnaGxpZ2h0ZWQuCiAgICAgICAgLy8gbnVsbCBvciBmYWxzZSB0byBub3Qgc3luY2hyb25pemUuCiAgICAgICAgdGhpcy5zeW5jaHJvbml6ZUhpZ2hsaWdodCA9IGZhbHNlOwogICAgICAgIC8vIHByb3A6IG9mZnNldEJhcnMKICAgICAgICAvLyBGYWxzZSB3aWxsIGNlbnRlciBiYXJzIG9uIHRoZWlyIHkgdmFsdWUuCiAgICAgICAgLy8gVHJ1ZSB3aWxsIHB1c2ggYmFycyB1cCBieSAxLzIgYmFyIHdpZHRoIHRvIGZpbGwgYmV0d2VlbiB0aGVpciB5IHZhbHVlcy4KICAgICAgICAvLyBJZiB0cnVlLCB0aGVyZSBuZWVkcyB0byBiZSAxIG1vcmUgdGljayB0aGFuIHRoZXJlIGFyZSBiYXJzLgogICAgICAgIHRoaXMub2Zmc2V0QmFycyA9IGZhbHNlOwogICAgICAgIAogICAgICAgIC8vIGlmIHVzZXIgaGFzIHBhc3NlZCBpbiBoaWdobGlnaHRNb3VzZURvd24gb3B0aW9uIGFuZCBub3Qgc2V0IGhpZ2hsaWdodE1vdXNlT3ZlciwgZGlzYWJsZSBoaWdobGlnaHRNb3VzZU92ZXIKICAgICAgICBpZiAob3B0aW9ucy5oaWdobGlnaHRNb3VzZURvd24gJiYgb3B0aW9ucy5oaWdobGlnaHRNb3VzZU92ZXIgPT0gbnVsbCkgewogICAgICAgICAgICBvcHRpb25zLmhpZ2hsaWdodE1vdXNlT3ZlciA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5zaWRlID0gJ3JpZ2h0JzsKICAgICAgICAKICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLCBvcHRpb25zKTsKCiAgICAgICAgLy8gaWYgKHRoaXMuZmlsbCA9PT0gZmFsc2UpIHsKICAgICAgICAvLyAgICAgdGhpcy5zaGFkb3cgPSBmYWxzZTsKICAgICAgICAvLyB9CgogICAgICAgIGlmICh0aGlzLnNpZGUgPT09ICdsZWZ0JykgewogICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRUaHJlc2hvbGQgPSBbWy10aGlzLmhpZ2hsaWdodFRocmVzaG9sZCwgMF0sIFstdGhpcy5oaWdobGlnaHRUaHJlc2hvbGQsIDBdLCBbMCwwXSwgWzAsMF1dOwogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodFRocmVzaG9sZCA9IFtbMCwwXSwgWzAsMF0sIFt0aGlzLmhpZ2hsaWdodFRocmVzaG9sZCwgMF0sIFt0aGlzLmhpZ2hsaWdodFRocmVzaG9sZCwgMF1dOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLnJlbmRlcmVyLm9wdGlvbnMgPSBvcHRpb25zOwogICAgICAgIC8vIGluZGV4IG9mIHRoZSBjdXJyZW50eSBoaWdobGlnaHRlZCBwb2ludCwgaWYgYW55CiAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWRQb2ludCA9IG51bGw7CiAgICAgICAgLy8gQXJyYXkgb2YgYWN0dWFsIGRhdGEgY29sb3JzIHVzZWQgZm9yIGVhY2ggZGF0YSBwb2ludC4KICAgICAgICB0aGlzLl9kYXRhQ29sb3JzID0gW107CiAgICAgICAgdGhpcy5fYmFyUG9pbnRzID0gW107CiAgICAgICAgdGhpcy5maWxsQXhpcyA9ICd5JzsKICAgICAgICB0aGlzLl9wcmltYXJ5QXhpcyA9ICdfeWF4aXMnOwogICAgICAgIHRoaXMuX3hudWRnZSA9IDA7CiAgICAgICAgCiAgICAgICAgLy8gc2V0IHRoZSBzaGFwZSByZW5kZXJlciBvcHRpb25zCiAgICAgICAgdmFyIG9wdHMgPSB7bGluZUpvaW46J21pdGVyJywgbGluZUNhcDonYnV0dCcsIGZpbGw6dGhpcy5maWxsLCBmaWxsUmVjdDp0aGlzLmZpbGwsIGlzYXJjOmZhbHNlLCBzdHJva2VTdHlsZTp0aGlzLmNvbG9yLCBmaWxsU3R5bGU6dGhpcy5jb2xvciwgY2xvc2VQYXRoOnRoaXMuZmlsbCwgbGluZVdpZHRoOiB0aGlzLmxpbmVXaWR0aH07CiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmluaXQob3B0cyk7CiAgICAgICAgLy8gc2V0IHRoZSBzaGFkb3cgcmVuZGVyZXIgb3B0aW9ucwogICAgICAgIHZhciBzaGFkb3dfb2Zmc2V0ID0gb3B0aW9ucy5zaGFkb3dPZmZzZXQ7CiAgICAgICAgLy8gc2V0IHRoZSBzaGFkb3cgcmVuZGVyZXIgb3B0aW9ucwogICAgICAgIGlmIChzaGFkb3dfb2Zmc2V0ID09IG51bGwpIHsKICAgICAgICAgICAgLy8gc2NhbGUgdGhlIHNoYWRvd09mZnNldCB0byB0aGUgd2lkdGggb2YgdGhlIGxpbmUuCiAgICAgICAgICAgIGlmICh0aGlzLmxpbmVXaWR0aCA+IDIuNSkgewogICAgICAgICAgICAgICAgc2hhZG93X29mZnNldCA9IDEuMjUgKiAoMSArIChNYXRoLmF0YW4oKHRoaXMubGluZVdpZHRoLzIuNSkpLzAuNzg1Mzk4MTYzIC0gMSkqMC42KTsKICAgICAgICAgICAgICAgIC8vIHZhciBzaGFkb3dfb2Zmc2V0ID0gdGhpcy5zaGFkb3dPZmZzZXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gZm9yIHNraW5ueSBsaW5lcywgZG9uJ3QgbWFrZSBzdWNoIGEgYmlnIHNoYWRvdy4KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzaGFkb3dfb2Zmc2V0ID0gMS4yNSAqIE1hdGguYXRhbigodGhpcy5saW5lV2lkdGgvMi41KSkvMC43ODUzOTgxNjM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIHNvcHRzID0ge2xpbmVKb2luOidtaXRlcicsIGxpbmVDYXA6J2J1dHQnLCBmaWxsOnRoaXMuZmlsbCwgZmlsbFJlY3Q6dGhpcy5maWxsLCBpc2FyYzpmYWxzZSwgYW5nbGU6dGhpcy5zaGFkb3dBbmdsZSwgb2Zmc2V0OnNoYWRvd19vZmZzZXQsIGFscGhhOnRoaXMuc2hhZG93QWxwaGEsIGRlcHRoOnRoaXMuc2hhZG93RGVwdGgsIGNsb3NlUGF0aDp0aGlzLmZpbGwsIGxpbmVXaWR0aDogdGhpcy5saW5lV2lkdGh9OwogICAgICAgIHRoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuaW5pdChzb3B0cyk7CgogICAgICAgIHBsb3QucG9zdERyYXdIb29rcy5hZGRPbmNlKHBvc3RQbG90RHJhdyk7CiAgICAgICAgcGxvdC5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgnanFwbG90TW91c2VNb3ZlJywgaGFuZGxlTW92ZSk7CgogICAgICAgIC8vIGlmIHRoaXMgaXMgdGhlIGxlZnQgc2lkZSBvZiBweXJhbWlkLCBzZXQgeSB2YWx1ZXMgdG8gbmVnYXRpdmUuCiAgICAgICAgaWYgKHRoaXMuc2lkZSA9PT0gJ2xlZnQnKSB7CiAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbD10aGlzLmRhdGEubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgICAgICAgdGhpcy5kYXRhW2ldWzFdID0gLU1hdGguYWJzKHRoaXMuZGF0YVtpXVsxXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICAvLyBzZXRHcmlkRGF0YQogICAgLy8gY29udmVydHMgdGhlIHVzZXIgZGF0YSB2YWx1ZXMgdG8gZ3JpZCBjb29yZGluYXRlcyBhbmQgc3RvcmVzIHRoZW0KICAgIC8vIGluIHRoZSBncmlkRGF0YSBhcnJheS4KICAgIC8vIENhbGxlZCB3aXRoIHNjb3BlIG9mIGEgc2VyaWVzLgogICAgJC5qcXBsb3QuUHlyYW1pZFJlbmRlcmVyLnByb3RvdHlwZS5zZXRHcmlkRGF0YSA9IGZ1bmN0aW9uKHBsb3QpIHsKICAgICAgICAvLyByZWNhbGN1bGF0ZSB0aGUgZ3JpZCBkYXRhCiAgICAgICAgdmFyIHhwID0gdGhpcy5feGF4aXMuc2VyaWVzX3UycDsKICAgICAgICB2YXIgeXAgPSB0aGlzLl95YXhpcy5zZXJpZXNfdTJwOwogICAgICAgIHZhciBkYXRhID0gdGhpcy5fcGxvdERhdGE7CiAgICAgICAgdmFyIHBkYXRhID0gdGhpcy5fcHJldlBsb3REYXRhOwogICAgICAgIHRoaXMuZ3JpZERhdGEgPSBbXTsKICAgICAgICB0aGlzLl9wcmV2R3JpZERhdGEgPSBbXTsKICAgICAgICB2YXIgbCA9IGRhdGEubGVuZ3RoOwogICAgICAgIHZhciBhZGp1c3QgPSBmYWxzZTsKICAgICAgICB2YXIgaTsKCiAgICAgICAgLy8gaWYgYW55IGRhdGEgdmFsdWVzIGFyZSA8IDAsICBjb25zaWRlciB0aGlzIGEgbmVnYXRpdmUgc2VyaWVzCiAgICAgICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICBpZiAoZGF0YVtpXVsxXSA8IDApIHsKICAgICAgICAgICAgICAgIHRoaXMuc2lkZSA9ICdsZWZ0JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMuX3lheGlzLm5hbWUgPT09ICd5TWlkQXhpcycgJiYgdGhpcy5zaWRlID09PSAncmlnaHQnKSB7CiAgICAgICAgICAgIHRoaXMuX3hudWRnZSA9IHRoaXMuX3hheGlzLm1heC8yMDAwLjA7CiAgICAgICAgICAgIGFkanVzdCA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIC8vIGlmIG5vdCBhIGxpbmUgc2VyaWVzIG9yIGlmIG5vIG51bGxzIGluIGRhdGEsIHB1c2ggdGhlIGNvbnZlcnRlZCBwb2ludCBvbnRvIHRoZSBhcnJheS4KICAgICAgICAgICAgaWYgKGRhdGFbaV1bMF0gIT0gbnVsbCAmJiBkYXRhW2ldWzFdICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGEucHVzaChbeHAoZGF0YVtpXVsxXSksIHlwKGRhdGFbaV1bMF0pXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gZWxzZSBpZiB0aGVyZSBpcyBhIG51bGwsIHByZXNlcnZlIGl0LgogICAgICAgICAgICBlbHNlIGlmIChkYXRhW2ldWzBdID09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGEucHVzaChbeHAoZGF0YVtpXVsxXSksIG51bGxdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChkYXRhW2ldWzFdID09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGEucHVzaChudWxsLCBbeXAoZGF0YVtpXVswXSldKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBmaW5hbGx5LCBhZGp1c3QgeCBncmlkIGRhdGEgaWYgaGF2ZSB0bwogICAgICAgICAgICBpZiAoZGF0YVtpXVsxXSA9PT0gMCAmJiBhZGp1c3QpIHsKICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGFbaV1bMF0gPSB4cCh0aGlzLl94bnVkZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgLy8gbWFrZUdyaWREYXRhCiAgICAvLyBjb252ZXJ0cyBhbnkgYXJiaXRyYXJ5IGRhdGEgdmFsdWVzIHRvIGdyaWQgY29vcmRpbmF0ZXMgYW5kCiAgICAvLyByZXR1cm5zIHRoZW0uICBUaGlzIG1ldGhvZCBleGlzdHMgc28gdGhhdCBwbHVnaW5zIGNhbiB1c2UgYSBzZXJpZXMnCiAgICAvLyBsaW5lcmVuZGVyZXIgdG8gZ2VuZXJhdGUgZ3JpZCBkYXRhIHBvaW50cyB3aXRob3V0IG92ZXJ3cml0aW5nIHRoZQogICAgLy8gZ3JpZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcmllcy4KICAgIC8vIENhbGxlZCB3aXRoIHNjb3BlIG9mIGEgc2VyaWVzLgogICAgJC5qcXBsb3QuUHlyYW1pZFJlbmRlcmVyLnByb3RvdHlwZS5tYWtlR3JpZERhdGEgPSBmdW5jdGlvbihkYXRhLCBwbG90KSB7CiAgICAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGdyaWQgZGF0YQogICAgICAgIHZhciB4cCA9IHRoaXMuX3hheGlzLnNlcmllc191MnA7CiAgICAgICAgdmFyIHlwID0gdGhpcy5feWF4aXMuc2VyaWVzX3UycDsKICAgICAgICB2YXIgZ2QgPSBbXTsKICAgICAgICB2YXIgbCA9IGRhdGEubGVuZ3RoOwogICAgICAgIHZhciBhZGp1c3QgPSBmYWxzZTsKICAgICAgICB2YXIgaTsKCiAgICAgICAgLy8gaWYgYW55IGRhdGEgdmFsdWVzIGFyZSA8IDAsICBjb25zaWRlciB0aGlzIGEgbmVnYXRpdmUgc2VyaWVzCiAgICAgICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICBpZiAoZGF0YVtpXVsxXSA8IDApIHsKICAgICAgICAgICAgICAgIHRoaXMuc2lkZSA9ICdsZWZ0JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMuX3lheGlzLm5hbWUgPT09ICd5TWlkQXhpcycgJiYgdGhpcy5zaWRlID09PSAncmlnaHQnKSB7CiAgICAgICAgICAgIHRoaXMuX3hudWRnZSA9IHRoaXMuX3hheGlzLm1heC8yMDAwLjA7CiAgICAgICAgICAgIGFkanVzdCA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIC8vIGlmIG5vdCBhIGxpbmUgc2VyaWVzIG9yIGlmIG5vIG51bGxzIGluIGRhdGEsIHB1c2ggdGhlIGNvbnZlcnRlZCBwb2ludCBvbnRvIHRoZSBhcnJheS4KICAgICAgICAgICAgaWYgKGRhdGFbaV1bMF0gIT0gbnVsbCAmJiBkYXRhW2ldWzFdICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIGdkLnB1c2goW3hwKGRhdGFbaV1bMV0pLCB5cChkYXRhW2ldWzBdKV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIGVsc2UgaWYgdGhlcmUgaXMgYSBudWxsLCBwcmVzZXJ2ZSBpdC4KICAgICAgICAgICAgZWxzZSBpZiAoZGF0YVtpXVswXSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBnZC5wdXNoKFt4cChkYXRhW2ldWzFdKSwgbnVsbF0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFbaV1bMV0gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgZ2QucHVzaChbbnVsbCwgeXAoZGF0YVtpXVswXSldKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBmaW5hbGx5LCBhZGp1c3QgeCBncmlkIGRhdGEgaWYgaGF2ZSB0bwogICAgICAgICAgICBpZiAoZGF0YVtpXVsxXSA9PT0gMCAmJiBhZGp1c3QpIHsKICAgICAgICAgICAgICAgIGdkW2ldWzBdID0geHAodGhpcy5feG51ZGdlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGdkOwogICAgfTsKCiAgICAkLmpxcGxvdC5QeXJhbWlkUmVuZGVyZXIucHJvdG90eXBlLnNldEJhcldpZHRoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gbmVlZCB0byBrbm93IGhvdyBtYW55IGRhdGEgdmFsdWVzIHdlIGhhdmUgb24gdGhlIGFwcHJvcHJhdGUgYXhpcyBhbmQgZmlndXJlIGl0IG91dC4KICAgICAgICB2YXIgaTsKICAgICAgICB2YXIgbnZhbHMgPSAwOwogICAgICAgIHZhciBuc2VyaWVzID0gMDsKICAgICAgICB2YXIgcGF4aXMgPSB0aGlzW3RoaXMuX3ByaW1hcnlBeGlzXTsKICAgICAgICB2YXIgcywgc2VyaWVzLCBwb3M7CiAgICAgICAgbnZhbHMgPSBwYXhpcy5tYXggLSBwYXhpcy5taW47CiAgICAgICAgdmFyIG50aWNrcyA9IHBheGlzLm51bWJlclRpY2tzOwogICAgICAgIHZhciBuYmlucyA9IChudGlja3MtMSkvMjsKICAgICAgICAvLyBzbywgbm93IHdlIGhhdmUgdG90YWwgbnVtYmVyIG9mIGF4aXMgdmFsdWVzLgogICAgICAgIHZhciB0ZW1wID0gKHRoaXMuYmFyUGFkZGluZyA9PT0gMCkgPyAxLjAgOiAwOwogICAgICAgIGlmIChwYXhpcy5uYW1lID09ICd4YXhpcycgfHwgcGF4aXMubmFtZSA9PSAneDJheGlzJykgewogICAgICAgICAgICB0aGlzLmJhcldpZHRoID0gKHBheGlzLl9vZmZzZXRzLm1heCAtIHBheGlzLl9vZmZzZXRzLm1pbikgLyBudmFscyAtIHRoaXMuYmFyUGFkZGluZyArIHRlbXA7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAodGhpcy5maWxsKSB7CiAgICAgICAgICAgICAgICB0aGlzLmJhcldpZHRoID0gKHBheGlzLl9vZmZzZXRzLm1pbiAtIHBheGlzLl9vZmZzZXRzLm1heCkgLyBudmFscyAtIHRoaXMuYmFyUGFkZGluZyArIHRlbXA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLmJhcldpZHRoID0gKHBheGlzLl9vZmZzZXRzLm1pbiAtIHBheGlzLl9vZmZzZXRzLm1heCkgLyBudmFsczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICAKICAgICQuanFwbG90LlB5cmFtaWRSZW5kZXJlci5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKGN0eCwgZ3JpZERhdGEsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgaTsKICAgICAgICAvLyBVZ2hoaCwgaGF2ZSB0byBtYWtlIGEgY29weSBvZiBvcHRpb25zIGIvYyBpdCBtYXkgYmUgbW9kaWZpZWQgbGF0ZXIuCiAgICAgICAgdmFyIG9wdHMgPSAkLmV4dGVuZCh7fSwgb3B0aW9ucyk7CiAgICAgICAgdmFyIHNoYWRvdyA9IChvcHRzLnNoYWRvdyAhPSB1bmRlZmluZWQpID8gb3B0cy5zaGFkb3cgOiB0aGlzLnNoYWRvdzsKICAgICAgICB2YXIgc2hvd0xpbmUgPSAob3B0cy5zaG93TGluZSAhPSB1bmRlZmluZWQpID8gb3B0cy5zaG93TGluZSA6IHRoaXMuc2hvd0xpbmU7CiAgICAgICAgdmFyIGZpbGwgPSAob3B0cy5maWxsICE9IHVuZGVmaW5lZCkgPyBvcHRzLmZpbGwgOiB0aGlzLmZpbGw7CiAgICAgICAgdmFyIHhwID0gdGhpcy5feGF4aXMuc2VyaWVzX3UycDsKICAgICAgICB2YXIgeXAgPSB0aGlzLl95YXhpcy5zZXJpZXNfdTJwOwogICAgICAgIHZhciBwb2ludHgsIHBvaW50eTsKICAgICAgICAvLyBjbGVhciBvdXQgZGF0YSBjb2xvcnMuCiAgICAgICAgdGhpcy5fZGF0YUNvbG9ycyA9IFtdOwogICAgICAgIHRoaXMuX2JhclBvaW50cyA9IFtdOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLm9wdGlvbnMuYmFyV2lkdGggPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEJhcldpZHRoLmNhbGwodGhpcyk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIHZhciB0ZW1wID0gdGhpcy5fcGxvdFNlcmllc0luZm8gPSB0aGlzLnJlbmRlcmVyLmNhbGNTZXJpZXNOdW1iZXJzLmNhbGwodGhpcyk7CiAgICAgICAgLy8gdmFyIG52YWxzID0gdGVtcFswXTsKICAgICAgICAvLyB2YXIgbnNlcmllcyA9IHRlbXBbMV07CiAgICAgICAgLy8gdmFyIHBvcyA9IHRlbXBbMl07CiAgICAgICAgdmFyIHBvaW50cyA9IFtdLAogICAgICAgICAgICB3LAogICAgICAgICAgICBoOwogICAgICAgIAogICAgICAgIC8vIHRoaXMuX2Jhck51ZGdlID0gMDsKCiAgICAgICAgaWYgKHNob3dMaW5lKSB7CiAgICAgICAgICAgIHZhciBuZWdhdGl2ZUNvbG9ycyA9IG5ldyAkLmpxcGxvdC5Db2xvckdlbmVyYXRvcih0aGlzLm5lZ2F0aXZlU2VyaWVzQ29sb3JzKTsKICAgICAgICAgICAgdmFyIHBvc2l0aXZlQ29sb3JzID0gbmV3ICQuanFwbG90LkNvbG9yR2VuZXJhdG9yKHRoaXMuc2VyaWVzQ29sb3JzKTsKICAgICAgICAgICAgdmFyIG5lZ2F0aXZlQ29sb3IgPSBuZWdhdGl2ZUNvbG9ycy5nZXQodGhpcy5pbmRleCk7CiAgICAgICAgICAgIGlmICghIHRoaXMudXNlTmVnYXRpdmVDb2xvcnMpIHsKICAgICAgICAgICAgICAgIG5lZ2F0aXZlQ29sb3IgPSBvcHRzLmZpbGxTdHlsZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcG9zaXRpdmVDb2xvciA9IG9wdHMuZmlsbFN0eWxlOwogICAgICAgICAgICB2YXIgYmFzZTsKICAgICAgICAgICAgdmFyIHhzdGFydCA9IHRoaXMuX3hheGlzLnNlcmllc191MnAodGhpcy5feG51ZGdlKTsKICAgICAgICAgICAgdmFyIHlzdGFydCA9IHRoaXMuX3lheGlzLnNlcmllc191MnAodGhpcy5feWF4aXMubWluKTsKICAgICAgICAgICAgdmFyIHllbmQgPSB0aGlzLl95YXhpcy5zZXJpZXNfdTJwKHRoaXMuX3lheGlzLm1heCk7CiAgICAgICAgICAgIHZhciBidyA9IHRoaXMuYmFyV2lkdGg7CiAgICAgICAgICAgIHZhciBidzIgPSBidy8yLjA7CiAgICAgICAgICAgIHZhciBwb2ludHMgPSBbXTsKICAgICAgICAgICAgdmFyIHlhZGogPSB0aGlzLm9mZnNldEJhcnMgPyBidzIgOiAwOwogICAgICAgICAgICAKICAgICAgICAgICAgZm9yICh2YXIgaT0wLCBsPWdyaWREYXRhLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV1bMF0gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYmFzZSA9IGdyaWREYXRhW2ldWzFdOwogICAgICAgICAgICAgICAgLy8gbm90IHN0YWNrZWQgYW5kIGZpcnN0IHNlcmllcyBpbiBzdGFjawoKICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wbG90RGF0YVtpXVsxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YXJ5QmFyQ29sb3IgJiYgIXRoaXMuX3N0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZU5lZ2F0aXZlQ29sb3JzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpbGxTdHlsZSA9IG5lZ2F0aXZlQ29sb3JzLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZmlsbFN0eWxlID0gcG9zaXRpdmVDb2xvcnMubmV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFyeUJhckNvbG9yICYmICF0aGlzLl9zdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpbGxTdHlsZSA9IHBvc2l0aXZlQ29sb3JzLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZmlsbFN0eWxlID0gcG9zaXRpdmVDb2xvcjsKICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsbCkgewoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGxvdERhdGFbaV1bMV0gPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB4c3RhcnQgPSB0aGlzLl94YXhpcy5zZXJpZXNfdTJwKHRoaXMuX3hudWRnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBncmlkRGF0YVtpXVswXSAtIHhzdGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgaCA9IHRoaXMuYmFyV2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IFt4c3RhcnQsIGJhc2UgLSBidzIgLSB5YWRqLCB3LCBoXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHhzdGFydCA9IHRoaXMuX3hheGlzLnNlcmllc191MnAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHcgPSB4c3RhcnQgLSBncmlkRGF0YVtpXVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgaCA9IHRoaXMuYmFyV2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IFtncmlkRGF0YVtpXVswXSwgYmFzZSAtIGJ3MiAtIHlhZGosIHcsIGhdOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFyUG9pbnRzLnB1c2goW1twb2ludHNbMF0sIHBvaW50c1sxXSArIGhdLCBbcG9pbnRzWzBdLCBwb2ludHNbMV1dLCBbcG9pbnRzWzBdICsgdywgcG9pbnRzWzFdXSwgW3BvaW50c1swXSArIHcsIHBvaW50c1sxXSArIGhdXSk7CgogICAgICAgICAgICAgICAgICAgIGlmIChzaGFkb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGN0eCwgcG9pbnRzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmFyIGNsciA9IG9wdHMuZmlsbFN0eWxlIHx8IHRoaXMuY29sb3I7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YUNvbG9ycy5wdXNoKGNscik7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmRyYXcoY3R4LCBwb2ludHMsIG9wdHMpOyAKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPVtbeHN0YXJ0LCB5c3RhcnRdLCBbZ3JpZERhdGFbaV1bMF0sIHlzdGFydF0sIFtncmlkRGF0YVtpXVswXSwgZ3JpZERhdGFbaV1bMV0gLSBidzIgLSB5YWRqXV07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpIDwgbC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHBvaW50cy5jb25jYXQoW1tncmlkRGF0YVtpLTFdWzBdLCBncmlkRGF0YVtpLTFdWzFdIC0gYncyIC0geWFkal0sIFtncmlkRGF0YVtpXVswXSwgZ3JpZERhdGFbaV1bMV0gKyBidzIgLSB5YWRqXSwgW2dyaWREYXRhW2ldWzBdLCBncmlkRGF0YVtpXVsxXSAtIGJ3MiAtIHlhZGpdXSk7CiAgICAgICAgICAgICAgICAgICAgfSAKCiAgICAgICAgICAgICAgICAgICAgLy8gZmluYWxseSwgZHJhdyB0aGUgbGluZQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBwb2ludHMuY29uY2F0KFtbZ3JpZERhdGFbaS0xXVswXSwgZ3JpZERhdGFbaS0xXVsxXSAtIGJ3MiAtIHlhZGpdLCBbZ3JpZERhdGFbaV1bMF0sIGdyaWREYXRhW2ldWzFdICsgYncyIC0geWFkal0sIFtncmlkRGF0YVtpXVswXSwgeWVuZF0sIFt4c3RhcnQsIHllbmRdXSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50cyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsciA9IG9wdHMuZmlsbFN0eWxlIHx8IHRoaXMuY29sb3I7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFDb2xvcnMucHVzaChjbHIpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhjdHgsIHBvaW50cywgb3B0cyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9ICAKICAgICAgICB9ICAgICAgICAKICAgICAgICAKICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRDb2xvcnMubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRDb2xvcnMgPSAkLmpxcGxvdC5jb21wdXRlSGlnaGxpZ2h0Q29sb3JzKHRoaXMuX2RhdGFDb2xvcnMpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBlbHNlIGlmICh0eXBlb2YodGhpcy5oaWdobGlnaHRDb2xvcnMpID09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Q29sb3JzID0gW107CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLl9kYXRhQ29sb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodENvbG9ycy5wdXNoKHRoaXMuaGlnaGxpZ2h0Q29sb3JzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07CgogICAgICAgIAogICAgLy8gc2V0dXAgZGVmYXVsdCByZW5kZXJlcnMgZm9yIGF4ZXMgYW5kIGxlZ2VuZCBzbyB1c2VyIGRvZXNuJ3QgaGF2ZSB0bwogICAgLy8gY2FsbGVkIHdpdGggc2NvcGUgb2YgcGxvdAogICAgZnVuY3Rpb24gcHJlSW5pdCh0YXJnZXQsIGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICBvcHRpb25zLmF4ZXNEZWZhdWx0cyA9IG9wdGlvbnMuYXhlc0RlZmF1bHRzIHx8IHt9OwogICAgICAgIG9wdGlvbnMuZ3JpZCA9IG9wdGlvbnMuZ3JpZCB8fCB7fTsKICAgICAgICBvcHRpb25zLmxlZ2VuZCA9IG9wdGlvbnMubGVnZW5kIHx8IHt9OwogICAgICAgIG9wdGlvbnMuc2VyaWVzRGVmYXVsdHMgPSBvcHRpb25zLnNlcmllc0RlZmF1bHRzIHx8IHt9OwogICAgICAgIC8vIG9ubHkgc2V0IHRoZXNlIGlmIHRoZXJlIGlzIGEgcGllIHNlcmllcwogICAgICAgIHZhciBzZXRvcHRzID0gZmFsc2U7CiAgICAgICAgaWYgKG9wdGlvbnMuc2VyaWVzRGVmYXVsdHMucmVuZGVyZXIgPT09ICQuanFwbG90LlB5cmFtaWRSZW5kZXJlcikgewogICAgICAgICAgICBzZXRvcHRzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5zZXJpZXMpIHsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpIDwgb3B0aW9ucy5zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNlcmllc1tpXS5yZW5kZXJlciA9PT0gJC5qcXBsb3QuUHlyYW1pZFJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgICAgc2V0b3B0cyA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHNldG9wdHMpIHsKICAgICAgICAgICAgb3B0aW9ucy5heGVzRGVmYXVsdHMucmVuZGVyZXIgPSAkLmpxcGxvdC5QeXJhbWlkQXhpc1JlbmRlcmVyOwogICAgICAgICAgICBvcHRpb25zLmdyaWQucmVuZGVyZXIgPSAkLmpxcGxvdC5QeXJhbWlkR3JpZFJlbmRlcmVyOwogICAgICAgICAgICBvcHRpb25zLnNlcmllc0RlZmF1bHRzLnBvaW50TGFiZWxzID0ge3Nob3c6IGZhbHNlfTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoaW4gY29udGV4dCBvZiBwbG90CiAgICAvLyBjcmVhdGUgYSBjYW52YXMgd2hpY2ggd2UgY2FuIGRyYXcgb24uCiAgICAvLyBpbnNlcnQgaXQgYmVmb3JlIHRoZSBldmVudENhbnZhcywgc28gZXZlbnRDYW52YXMgd2lsbCBzdGlsbCBjYXB0dXJlIGV2ZW50cy4KICAgIGZ1bmN0aW9uIHBvc3RQbG90RHJhdygpIHsKICAgICAgICAvLyBNZW1vcnkgTGVha3MgcGF0Y2ggICAgCiAgICAgICAgaWYgKHRoaXMucGx1Z2lucy5weXJhbWlkUmVuZGVyZXIgJiYgdGhpcy5wbHVnaW5zLnB5cmFtaWRSZW5kZXJlci5oaWdobGlnaHRDYW52YXMpIHsKCiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5weXJhbWlkUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLnJlc2V0Q2FudmFzKCk7CiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5weXJhbWlkUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgIAogICAgICAgIHRoaXMucGx1Z2lucy5weXJhbWlkUmVuZGVyZXIgPSB7aGlnaGxpZ2h0ZWRTZXJpZXNJbmRleDpudWxsfTsKICAgICAgICB0aGlzLnBsdWdpbnMucHlyYW1pZFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcyA9IG5ldyAkLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZvcmUodGhpcy5wbHVnaW5zLnB5cmFtaWRSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywgJ2pxcGxvdC1weXJhbWlkUmVuZGVyZXItaGlnaGxpZ2h0LWNhbnZhcycsIHRoaXMuX3Bsb3REaW1lbnNpb25zLCB0aGlzKSk7CiAgICAgICAgdGhpcy5wbHVnaW5zLnB5cmFtaWRSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuc2V0Q29udGV4dCgpOwogICAgICAgIHRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgnbW91c2VsZWF2ZScsIHtwbG90OnRoaXN9LCBmdW5jdGlvbiAoZXYpIHsgdW5oaWdobGlnaHQoZXYuZGF0YS5wbG90KTsgfSk7CiAgICB9ICAKICAgIAogICAgZnVuY3Rpb24gaGlnaGxpZ2h0IChwbG90LCBzaWR4LCBwaWR4LCBwb2ludHMpIHsKICAgICAgICB2YXIgcyA9IHBsb3Quc2VyaWVzW3NpZHhdOwogICAgICAgIHZhciBjYW52YXMgPSBwbG90LnBsdWdpbnMucHlyYW1pZFJlbmRlcmVyLmhpZ2hsaWdodENhbnZhczsKICAgICAgICBjYW52YXMuX2N0eC5jbGVhclJlY3QoMCwwLGNhbnZhcy5fY3R4LmNhbnZhcy53aWR0aCwgY2FudmFzLl9jdHguY2FudmFzLmhlaWdodCk7CiAgICAgICAgcy5faGlnaGxpZ2h0ZWRQb2ludCA9IHBpZHg7CiAgICAgICAgcGxvdC5wbHVnaW5zLnB5cmFtaWRSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4ID0gc2lkeDsKICAgICAgICB2YXIgb3B0cyA9IHtmaWxsU3R5bGU6IHMuaGlnaGxpZ2h0Q29sb3JzW3BpZHhdLCBmaWxsUmVjdDogZmFsc2V9OwogICAgICAgIHMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KGNhbnZhcy5fY3R4LCBwb2ludHMsIG9wdHMpOwogICAgICAgIGlmIChzLnN5bmNocm9uaXplSGlnaGxpZ2h0ICE9PSBmYWxzZSAmJiBwbG90LnNlcmllcy5sZW5ndGggPj0gcy5zeW5jaHJvbml6ZUhpZ2hsaWdodCAmJiBzLnN5bmNocm9uaXplSGlnaGxpZ2h0ICE9PSBzaWR4KSB7CiAgICAgICAgICAgIHMgPSBwbG90LnNlcmllc1tzLnN5bmNocm9uaXplSGlnaGxpZ2h0XTsKICAgICAgICAgICAgb3B0cyA9IHtmaWxsU3R5bGU6IHMuaGlnaGxpZ2h0Q29sb3JzW3BpZHhdLCBmaWxsUmVjdDogZmFsc2V9OwogICAgICAgICAgICBzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhjYW52YXMuX2N0eCwgcy5fYmFyUG9pbnRzW3BpZHhdLCBvcHRzKTsKICAgICAgICB9CiAgICAgICAgY2FudmFzID0gbnVsbDsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gdW5oaWdobGlnaHQgKHBsb3QpIHsKICAgICAgICB2YXIgY2FudmFzID0gcGxvdC5wbHVnaW5zLnB5cmFtaWRSZW5kZXJlci5oaWdobGlnaHRDYW52YXM7CiAgICAgICAgY2FudmFzLl9jdHguY2xlYXJSZWN0KDAsMCwgY2FudmFzLl9jdHguY2FudmFzLndpZHRoLCBjYW52YXMuX2N0eC5jYW52YXMuaGVpZ2h0KTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8cGxvdC5zZXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgcGxvdC5zZXJpZXNbaV0uX2hpZ2hsaWdodGVkUG9pbnQgPSBudWxsOwogICAgICAgIH0KICAgICAgICBwbG90LnBsdWdpbnMucHlyYW1pZFJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXggPSBudWxsOwogICAgICAgIHBsb3QudGFyZ2V0LnRyaWdnZXIoJ2pxcGxvdERhdGFVbmhpZ2hsaWdodCcpOwogICAgICAgIGNhbnZhcyA9ICBudWxsOwogICAgfQogICAgCiAgICAKICAgIGZ1bmN0aW9uIGhhbmRsZU1vdmUoZXYsIGdyaWRwb3MsIGRhdGFwb3MsIG5laWdoYm9yLCBwbG90KSB7CiAgICAgICAgaWYgKG5laWdoYm9yKSB7CiAgICAgICAgICAgIHZhciBpbnMgPSBbbmVpZ2hib3Iuc2VyaWVzSW5kZXgsIG5laWdoYm9yLnBvaW50SW5kZXgsIG5laWdoYm9yLmRhdGFdOwogICAgICAgICAgICB2YXIgZXZ0MSA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YU1vdXNlT3ZlcicpOwogICAgICAgICAgICBldnQxLnBhZ2VYID0gZXYucGFnZVg7CiAgICAgICAgICAgIGV2dDEucGFnZVkgPSBldi5wYWdlWTsKICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQxLCBpbnMpOwogICAgICAgICAgICBpZiAocGxvdC5zZXJpZXNbaW5zWzBdXS5oaWdobGlnaHRNb3VzZU92ZXIgJiYgIShpbnNbMF0gPT0gcGxvdC5wbHVnaW5zLnB5cmFtaWRSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4ICYmIGluc1sxXSA9PSBwbG90LnNlcmllc1tpbnNbMF1dLl9oaWdobGlnaHRlZFBvaW50KSkgewogICAgICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnanFwbG90RGF0YUhpZ2hsaWdodCcpOwogICAgICAgICAgICAgICAgZXZ0LndoaWNoID0gZXYud2hpY2g7CiAgICAgICAgICAgICAgICBldnQucGFnZVggPSBldi5wYWdlWDsKICAgICAgICAgICAgICAgIGV2dC5wYWdlWSA9IGV2LnBhZ2VZOwogICAgICAgICAgICAgICAgcGxvdC50YXJnZXQudHJpZ2dlcihldnQsIGlucyk7CiAgICAgICAgICAgICAgICBoaWdobGlnaHQgKHBsb3QsIG5laWdoYm9yLnNlcmllc0luZGV4LCBuZWlnaGJvci5wb2ludEluZGV4LCBuZWlnaGJvci5wb2ludHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG5laWdoYm9yID09IG51bGwpIHsKICAgICAgICAgICAgdW5oaWdobGlnaHQgKHBsb3QpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBIYXZlIHRvIGFkZCBob29rIGhlcmUsIGJlY3Vhc2UgaXQgbmVlZHMgY2FsbGVkIGJlZm9yZSBzZXJpZXMgaXMgaW5pdGVkLgogICAgJC5qcXBsb3QucHJlSW5pdEhvb2tzLnB1c2gocHJlSW5pdCk7CiAgICAKCn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.pyramidRenderer.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGMpe2lmKGMuanFwbG90LlB5cmFtaWRBeGlzUmVuZGVyZXI9PT11bmRlZmluZWQpe2MuYWpheCh7dXJsOmMuanFwbG90LnBsdWdpbkxvY2F0aW9uKyJqcXBsb3QucHlyYW1pZEF4aXNSZW5kZXJlci5qcyIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ZmFsc2V9KX1pZihjLmpxcGxvdC5QeXJhbWlkR3JpZFJlbmRlcmVyPT09dW5kZWZpbmVkKXtjLmFqYXgoe3VybDpjLmpxcGxvdC5wbHVnaW5Mb2NhdGlvbisianFwbG90LnB5cmFtaWRHcmlkUmVuZGVyZXIuanMiLGRhdGFUeXBlOiJzY3JpcHQiLGFzeW5jOmZhbHNlfSl9Yy5qcXBsb3QuUHlyYW1pZFJlbmRlcmVyPWZ1bmN0aW9uKCl7Yy5qcXBsb3QuTGluZVJlbmRlcmVyLmNhbGwodGhpcyl9O2MuanFwbG90LlB5cmFtaWRSZW5kZXJlci5wcm90b3R5cGU9bmV3IGMuanFwbG90LkxpbmVSZW5kZXJlcigpO2MuanFwbG90LlB5cmFtaWRSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3I9Yy5qcXBsb3QuUHlyYW1pZFJlbmRlcmVyO2MuanFwbG90LlB5cmFtaWRSZW5kZXJlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihqLG8pe2o9anx8e307dGhpcy5fdHlwZT0icHlyYW1pZCI7dGhpcy5iYXJQYWRkaW5nPTEwO3RoaXMuYmFyV2lkdGg9bnVsbDt0aGlzLmZpbGw9dHJ1ZTt0aGlzLmhpZ2hsaWdodE1vdXNlT3Zlcj10cnVlO3RoaXMuaGlnaGxpZ2h0TW91c2VEb3duPWZhbHNlO3RoaXMuaGlnaGxpZ2h0Q29sb3JzPVtdO3RoaXMuaGlnaGxpZ2h0VGhyZXNob2xkPTI7dGhpcy5zeW5jaHJvbml6ZUhpZ2hsaWdodD1mYWxzZTt0aGlzLm9mZnNldEJhcnM9ZmFsc2U7aWYoai5oaWdobGlnaHRNb3VzZURvd24mJmouaGlnaGxpZ2h0TW91c2VPdmVyPT1udWxsKXtqLmhpZ2hsaWdodE1vdXNlT3Zlcj1mYWxzZX10aGlzLnNpZGU9InJpZ2h0IjtjLmV4dGVuZCh0cnVlLHRoaXMsaik7aWYodGhpcy5zaWRlPT09ImxlZnQiKXt0aGlzLl9oaWdobGlnaHRUaHJlc2hvbGQ9W1stdGhpcy5oaWdobGlnaHRUaHJlc2hvbGQsMF0sWy10aGlzLmhpZ2hsaWdodFRocmVzaG9sZCwwXSxbMCwwXSxbMCwwXV19ZWxzZXt0aGlzLl9oaWdobGlnaHRUaHJlc2hvbGQ9W1swLDBdLFswLDBdLFt0aGlzLmhpZ2hsaWdodFRocmVzaG9sZCwwXSxbdGhpcy5oaWdobGlnaHRUaHJlc2hvbGQsMF1dfXRoaXMucmVuZGVyZXIub3B0aW9ucz1qO3RoaXMuX2hpZ2hsaWdodGVkUG9pbnQ9bnVsbDt0aGlzLl9kYXRhQ29sb3JzPVtdO3RoaXMuX2JhclBvaW50cz1bXTt0aGlzLmZpbGxBeGlzPSJ5Ijt0aGlzLl9wcmltYXJ5QXhpcz0iX3lheGlzIjt0aGlzLl94bnVkZ2U9MDt2YXIgbj17bGluZUpvaW46Im1pdGVyIixsaW5lQ2FwOiJidXR0IixmaWxsOnRoaXMuZmlsbCxmaWxsUmVjdDp0aGlzLmZpbGwsaXNhcmM6ZmFsc2Usc3Ryb2tlU3R5bGU6dGhpcy5jb2xvcixmaWxsU3R5bGU6dGhpcy5jb2xvcixjbG9zZVBhdGg6dGhpcy5maWxsLGxpbmVXaWR0aDp0aGlzLmxpbmVXaWR0aH07dGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmluaXQobik7dmFyIG09ai5zaGFkb3dPZmZzZXQ7aWYobT09bnVsbCl7aWYodGhpcy5saW5lV2lkdGg+Mi41KXttPTEuMjUqKDErKE1hdGguYXRhbigodGhpcy5saW5lV2lkdGgvMi41KSkvMC43ODUzOTgxNjMtMSkqMC42KX1lbHNle209MS4yNSpNYXRoLmF0YW4oKHRoaXMubGluZVdpZHRoLzIuNSkpLzAuNzg1Mzk4MTYzfX12YXIgaD17bGluZUpvaW46Im1pdGVyIixsaW5lQ2FwOiJidXR0IixmaWxsOnRoaXMuZmlsbCxmaWxsUmVjdDp0aGlzLmZpbGwsaXNhcmM6ZmFsc2UsYW5nbGU6dGhpcy5zaGFkb3dBbmdsZSxvZmZzZXQ6bSxhbHBoYTp0aGlzLnNoYWRvd0FscGhhLGRlcHRoOnRoaXMuc2hhZG93RGVwdGgsY2xvc2VQYXRoOnRoaXMuZmlsbCxsaW5lV2lkdGg6dGhpcy5saW5lV2lkdGh9O3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuaW5pdChoKTtvLnBvc3REcmF3SG9va3MuYWRkT25jZShmKTtvLmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RNb3VzZU1vdmUiLGUpO2lmKHRoaXMuc2lkZT09PSJsZWZ0Iil7Zm9yKHZhciBrPTAsZz10aGlzLmRhdGEubGVuZ3RoO2s8ZztrKyspe3RoaXMuZGF0YVtrXVsxXT0tTWF0aC5hYnModGhpcy5kYXRhW2tdWzFdKX19fTtjLmpxcGxvdC5QeXJhbWlkUmVuZGVyZXIucHJvdG90eXBlLnNldEdyaWREYXRhPWZ1bmN0aW9uKHApe3ZhciBqPXRoaXMuX3hheGlzLnNlcmllc191MnA7dmFyIG89dGhpcy5feWF4aXMuc2VyaWVzX3UycDt2YXIgaz10aGlzLl9wbG90RGF0YTt2YXIgbj10aGlzLl9wcmV2UGxvdERhdGE7dGhpcy5ncmlkRGF0YT1bXTt0aGlzLl9wcmV2R3JpZERhdGE9W107dmFyIGc9ay5sZW5ndGg7dmFyIG09ZmFsc2U7dmFyIGg7Zm9yKGg9MDtoPGc7aCsrKXtpZihrW2hdWzFdPDApe3RoaXMuc2lkZT0ibGVmdCJ9fWlmKHRoaXMuX3lheGlzLm5hbWU9PT0ieU1pZEF4aXMiJiZ0aGlzLnNpZGU9PT0icmlnaHQiKXt0aGlzLl94bnVkZ2U9dGhpcy5feGF4aXMubWF4LzIwMDA7bT10cnVlfWZvcihoPTA7aDxnO2grKyl7aWYoa1toXVswXSE9bnVsbCYma1toXVsxXSE9bnVsbCl7dGhpcy5ncmlkRGF0YS5wdXNoKFtqKGtbaF1bMV0pLG8oa1toXVswXSldKX1lbHNle2lmKGtbaF1bMF09PW51bGwpe3RoaXMuZ3JpZERhdGEucHVzaChbaihrW2hdWzFdKSxudWxsXSl9ZWxzZXtpZihrW2hdWzFdPT1udWxsKXt0aGlzLmdyaWREYXRhLnB1c2gobnVsbCxbbyhrW2hdWzBdKV0pfX19aWYoa1toXVsxXT09PTAmJm0pe3RoaXMuZ3JpZERhdGFbaF1bMF09aih0aGlzLl94bnVkZ2UpfX19O2MuanFwbG90LlB5cmFtaWRSZW5kZXJlci5wcm90b3R5cGUubWFrZUdyaWREYXRhPWZ1bmN0aW9uKG0scCl7dmFyIGs9dGhpcy5feGF4aXMuc2VyaWVzX3UycDt2YXIgbz10aGlzLl95YXhpcy5zZXJpZXNfdTJwO3ZhciBqPVtdO3ZhciBnPW0ubGVuZ3RoO3ZhciBuPWZhbHNlO3ZhciBoO2ZvcihoPTA7aDxnO2grKyl7aWYobVtoXVsxXTwwKXt0aGlzLnNpZGU9ImxlZnQifX1pZih0aGlzLl95YXhpcy5uYW1lPT09InlNaWRBeGlzIiYmdGhpcy5zaWRlPT09InJpZ2h0Iil7dGhpcy5feG51ZGdlPXRoaXMuX3hheGlzLm1heC8yMDAwO249dHJ1ZX1mb3IoaD0wO2g8ZztoKyspe2lmKG1baF1bMF0hPW51bGwmJm1baF1bMV0hPW51bGwpe2oucHVzaChbayhtW2hdWzFdKSxvKG1baF1bMF0pXSl9ZWxzZXtpZihtW2hdWzBdPT1udWxsKXtqLnB1c2goW2sobVtoXVsxXSksbnVsbF0pfWVsc2V7aWYobVtoXVsxXT09bnVsbCl7ai5wdXNoKFtudWxsLG8obVtoXVswXSldKX19fWlmKG1baF1bMV09PT0wJiZuKXtqW2hdWzBdPWsodGhpcy5feG51ZGdlKX19cmV0dXJuIGp9O2MuanFwbG90LlB5cmFtaWRSZW5kZXJlci5wcm90b3R5cGUuc2V0QmFyV2lkdGg9ZnVuY3Rpb24oKXt2YXIgazt2YXIgZz0wO3ZhciBoPTA7dmFyIG09dGhpc1t0aGlzLl9wcmltYXJ5QXhpc107dmFyIHEsbCxvO2c9bS5tYXgtbS5taW47dmFyIG49bS5udW1iZXJUaWNrczt2YXIgaj0obi0xKS8yO3ZhciBwPSh0aGlzLmJhclBhZGRpbmc9PT0wKT8xOjA7aWYobS5uYW1lPT0ieGF4aXMifHxtLm5hbWU9PSJ4MmF4aXMiKXt0aGlzLmJhcldpZHRoPShtLl9vZmZzZXRzLm1heC1tLl9vZmZzZXRzLm1pbikvZy10aGlzLmJhclBhZGRpbmcrcH1lbHNle2lmKHRoaXMuZmlsbCl7dGhpcy5iYXJXaWR0aD0obS5fb2Zmc2V0cy5taW4tbS5fb2Zmc2V0cy5tYXgpL2ctdGhpcy5iYXJQYWRkaW5nK3B9ZWxzZXt0aGlzLmJhcldpZHRoPShtLl9vZmZzZXRzLm1pbi1tLl9vZmZzZXRzLm1heCkvZ319fTtjLmpxcGxvdC5QeXJhbWlkUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oQixJLGspe3ZhciBFO3ZhciB1PWMuZXh0ZW5kKHt9LGspO3ZhciBwPSh1LnNoYWRvdyE9dW5kZWZpbmVkKT91LnNoYWRvdzp0aGlzLnNoYWRvdzt2YXIgSz0odS5zaG93TGluZSE9dW5kZWZpbmVkKT91LnNob3dMaW5lOnRoaXMuc2hvd0xpbmU7dmFyIEM9KHUuZmlsbCE9dW5kZWZpbmVkKT91LmZpbGw6dGhpcy5maWxsO3ZhciB0PXRoaXMuX3hheGlzLnNlcmllc191MnA7dmFyIEc9dGhpcy5feWF4aXMuc2VyaWVzX3UycDt2YXIgeix4O3RoaXMuX2RhdGFDb2xvcnM9W107dGhpcy5fYmFyUG9pbnRzPVtdO2lmKHRoaXMucmVuZGVyZXIub3B0aW9ucy5iYXJXaWR0aD09bnVsbCl7dGhpcy5yZW5kZXJlci5zZXRCYXJXaWR0aC5jYWxsKHRoaXMpfXZhciBEPVtdLHMsRjtpZihLKXt2YXIgcT1uZXcgYy5qcXBsb3QuQ29sb3JHZW5lcmF0b3IodGhpcy5uZWdhdGl2ZVNlcmllc0NvbG9ycyk7dmFyIHY9bmV3IGMuanFwbG90LkNvbG9yR2VuZXJhdG9yKHRoaXMuc2VyaWVzQ29sb3JzKTt2YXIgSj1xLmdldCh0aGlzLmluZGV4KTtpZighdGhpcy51c2VOZWdhdGl2ZUNvbG9ycyl7Sj11LmZpbGxTdHlsZX12YXIgbz11LmZpbGxTdHlsZTt2YXIgbjt2YXIgTD10aGlzLl94YXhpcy5zZXJpZXNfdTJwKHRoaXMuX3hudWRnZSk7dmFyIGo9dGhpcy5feWF4aXMuc2VyaWVzX3UycCh0aGlzLl95YXhpcy5taW4pO3ZhciBtPXRoaXMuX3lheGlzLnNlcmllc191MnAodGhpcy5feWF4aXMubWF4KTt2YXIgSD10aGlzLmJhcldpZHRoO3ZhciB5PUgvMjt2YXIgRD1bXTt2YXIgcj10aGlzLm9mZnNldEJhcnM/eTowO2Zvcih2YXIgRT0wLEE9SS5sZW5ndGg7RTxBO0UrKyl7aWYodGhpcy5kYXRhW0VdWzBdPT1udWxsKXtjb250aW51ZX1uPUlbRV1bMV07aWYodGhpcy5fcGxvdERhdGFbRV1bMV08MCl7aWYodGhpcy52YXJ5QmFyQ29sb3ImJiF0aGlzLl9zdGFjayl7aWYodGhpcy51c2VOZWdhdGl2ZUNvbG9ycyl7dS5maWxsU3R5bGU9cS5uZXh0KCl9ZWxzZXt1LmZpbGxTdHlsZT12Lm5leHQoKX19fWVsc2V7aWYodGhpcy52YXJ5QmFyQ29sb3ImJiF0aGlzLl9zdGFjayl7dS5maWxsU3R5bGU9di5uZXh0KCl9ZWxzZXt1LmZpbGxTdHlsZT1vfX1pZih0aGlzLmZpbGwpe2lmKHRoaXMuX3Bsb3REYXRhW0VdWzFdPj0wKXtzPUlbRV1bMF0tTDtGPXRoaXMuYmFyV2lkdGg7RD1bTCxuLXktcixzLEZdfWVsc2V7cz1MLUlbRV1bMF07Rj10aGlzLmJhcldpZHRoO0Q9W0lbRV1bMF0sbi15LXIscyxGXX10aGlzLl9iYXJQb2ludHMucHVzaChbW0RbMF0sRFsxXStGXSxbRFswXSxEWzFdXSxbRFswXStzLERbMV1dLFtEWzBdK3MsRFsxXStGXV0pO2lmKHApe3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhCLEQpfXZhciBnPXUuZmlsbFN0eWxlfHx0aGlzLmNvbG9yO3RoaXMuX2RhdGFDb2xvcnMucHVzaChnKTt0aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhCLEQsdSl9ZWxzZXtpZihFPT09MCl7RD1bW0wsal0sW0lbRV1bMF0sal0sW0lbRV1bMF0sSVtFXVsxXS15LXJdXX1lbHNle2lmKEU8QS0xKXtEPUQuY29uY2F0KFtbSVtFLTFdWzBdLElbRS0xXVsxXS15LXJdLFtJW0VdWzBdLElbRV1bMV0reS1yXSxbSVtFXVswXSxJW0VdWzFdLXktcl1dKX1lbHNle0Q9RC5jb25jYXQoW1tJW0UtMV1bMF0sSVtFLTFdWzFdLXktcl0sW0lbRV1bMF0sSVtFXVsxXSt5LXJdLFtJW0VdWzBdLG1dLFtMLG1dXSk7aWYocCl7dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KEIsRCl9dmFyIGc9dS5maWxsU3R5bGV8fHRoaXMuY29sb3I7dGhpcy5fZGF0YUNvbG9ycy5wdXNoKGcpO3RoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KEIsRCx1KX19fX19aWYodGhpcy5oaWdobGlnaHRDb2xvcnMubGVuZ3RoPT0wKXt0aGlzLmhpZ2hsaWdodENvbG9ycz1jLmpxcGxvdC5jb21wdXRlSGlnaGxpZ2h0Q29sb3JzKHRoaXMuX2RhdGFDb2xvcnMpfWVsc2V7aWYodHlwZW9mKHRoaXMuaGlnaGxpZ2h0Q29sb3JzKT09InN0cmluZyIpe3RoaXMuaGlnaGxpZ2h0Q29sb3JzPVtdO2Zvcih2YXIgRT0wO0U8dGhpcy5fZGF0YUNvbG9ycy5sZW5ndGg7RSsrKXt0aGlzLmhpZ2hsaWdodENvbG9ycy5wdXNoKHRoaXMuaGlnaGxpZ2h0Q29sb3JzKX19fX07ZnVuY3Rpb24gYihsLGssaCl7aD1ofHx7fTtoLmF4ZXNEZWZhdWx0cz1oLmF4ZXNEZWZhdWx0c3x8e307aC5ncmlkPWguZ3JpZHx8e307aC5sZWdlbmQ9aC5sZWdlbmR8fHt9O2guc2VyaWVzRGVmYXVsdHM9aC5zZXJpZXNEZWZhdWx0c3x8e307dmFyIGc9ZmFsc2U7aWYoaC5zZXJpZXNEZWZhdWx0cy5yZW5kZXJlcj09PWMuanFwbG90LlB5cmFtaWRSZW5kZXJlcil7Zz10cnVlfWVsc2V7aWYoaC5zZXJpZXMpe2Zvcih2YXIgaj0wO2o8aC5zZXJpZXMubGVuZ3RoO2orKyl7aWYoaC5zZXJpZXNbal0ucmVuZGVyZXI9PT1jLmpxcGxvdC5QeXJhbWlkUmVuZGVyZXIpe2c9dHJ1ZX19fX1pZihnKXtoLmF4ZXNEZWZhdWx0cy5yZW5kZXJlcj1jLmpxcGxvdC5QeXJhbWlkQXhpc1JlbmRlcmVyO2guZ3JpZC5yZW5kZXJlcj1jLmpxcGxvdC5QeXJhbWlkR3JpZFJlbmRlcmVyO2guc2VyaWVzRGVmYXVsdHMucG9pbnRMYWJlbHM9e3Nob3c6ZmFsc2V9fX1mdW5jdGlvbiBmKCl7aWYodGhpcy5wbHVnaW5zLnB5cmFtaWRSZW5kZXJlciYmdGhpcy5wbHVnaW5zLnB5cmFtaWRSZW5kZXJlci5oaWdobGlnaHRDYW52YXMpe3RoaXMucGx1Z2lucy5weXJhbWlkUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzLnJlc2V0Q2FudmFzKCk7dGhpcy5wbHVnaW5zLnB5cmFtaWRSZW5kZXJlci5oaWdobGlnaHRDYW52YXM9bnVsbH10aGlzLnBsdWdpbnMucHlyYW1pZFJlbmRlcmVyPXtoaWdobGlnaHRlZFNlcmllc0luZGV4Om51bGx9O3RoaXMucGx1Z2lucy5weXJhbWlkUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzPW5ldyBjLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZvcmUodGhpcy5wbHVnaW5zLnB5cmFtaWRSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywianFwbG90LXB5cmFtaWRSZW5kZXJlci1oaWdobGlnaHQtY2FudmFzIix0aGlzLl9wbG90RGltZW5zaW9ucyx0aGlzKSk7dGhpcy5wbHVnaW5zLnB5cmFtaWRSZW5kZXJlci5oaWdobGlnaHRDYW52YXMuc2V0Q29udGV4dCgpO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgibW91c2VsZWF2ZSIse3Bsb3Q6dGhpc30sZnVuY3Rpb24oZyl7ZChnLmRhdGEucGxvdCl9KX1mdW5jdGlvbiBhKG0sbCxqLGkpe3ZhciBoPW0uc2VyaWVzW2xdO3ZhciBnPW0ucGx1Z2lucy5weXJhbWlkUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzO2cuX2N0eC5jbGVhclJlY3QoMCwwLGcuX2N0eC5jYW52YXMud2lkdGgsZy5fY3R4LmNhbnZhcy5oZWlnaHQpO2guX2hpZ2hsaWdodGVkUG9pbnQ9ajttLnBsdWdpbnMucHlyYW1pZFJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg9bDt2YXIgaz17ZmlsbFN0eWxlOmguaGlnaGxpZ2h0Q29sb3JzW2pdLGZpbGxSZWN0OmZhbHNlfTtoLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhnLl9jdHgsaSxrKTtpZihoLnN5bmNocm9uaXplSGlnaGxpZ2h0IT09ZmFsc2UmJm0uc2VyaWVzLmxlbmd0aD49aC5zeW5jaHJvbml6ZUhpZ2hsaWdodCYmaC5zeW5jaHJvbml6ZUhpZ2hsaWdodCE9PWwpe2g9bS5zZXJpZXNbaC5zeW5jaHJvbml6ZUhpZ2hsaWdodF07az17ZmlsbFN0eWxlOmguaGlnaGxpZ2h0Q29sb3JzW2pdLGZpbGxSZWN0OmZhbHNlfTtoLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhnLl9jdHgsaC5fYmFyUG9pbnRzW2pdLGspfWc9bnVsbH1mdW5jdGlvbiBkKGope3ZhciBnPWoucGx1Z2lucy5weXJhbWlkUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzO2cuX2N0eC5jbGVhclJlY3QoMCwwLGcuX2N0eC5jYW52YXMud2lkdGgsZy5fY3R4LmNhbnZhcy5oZWlnaHQpO2Zvcih2YXIgaD0wO2g8ai5zZXJpZXMubGVuZ3RoO2grKyl7ai5zZXJpZXNbaF0uX2hpZ2hsaWdodGVkUG9pbnQ9bnVsbH1qLnBsdWdpbnMucHlyYW1pZFJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg9bnVsbDtqLnRhcmdldC50cmlnZ2VyKCJqcXBsb3REYXRhVW5oaWdobGlnaHQiKTtnPW51bGx9ZnVuY3Rpb24gZShrLGosbixtLGwpe2lmKG0pe3ZhciBpPVttLnNlcmllc0luZGV4LG0ucG9pbnRJbmRleCxtLmRhdGFdO3ZhciBoPWpRdWVyeS5FdmVudCgianFwbG90RGF0YU1vdXNlT3ZlciIpO2gucGFnZVg9ay5wYWdlWDtoLnBhZ2VZPWsucGFnZVk7bC50YXJnZXQudHJpZ2dlcihoLGkpO2lmKGwuc2VyaWVzW2lbMF1dLmhpZ2hsaWdodE1vdXNlT3ZlciYmIShpWzBdPT1sLnBsdWdpbnMucHlyYW1pZFJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXgmJmlbMV09PWwuc2VyaWVzW2lbMF1dLl9oaWdobGlnaHRlZFBvaW50KSl7dmFyIGc9alF1ZXJ5LkV2ZW50KCJqcXBsb3REYXRhSGlnaGxpZ2h0Iik7Zy53aGljaD1rLndoaWNoO2cucGFnZVg9ay5wYWdlWDtnLnBhZ2VZPWsucGFnZVk7bC50YXJnZXQudHJpZ2dlcihnLGkpO2EobCxtLnNlcmllc0luZGV4LG0ucG9pbnRJbmRleCxtLnBvaW50cyl9fWVsc2V7aWYobT09bnVsbCl7ZChsKX19fWMuanFwbG90LnByZUluaXRIb29rcy5wdXNoKGIpfSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.trendline.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxUGxvdAogKiBQdXJlIEphdmFTY3JpcHQgcGxvdHRpbmcgcGx1Z2luIHVzaW5nIGpRdWVyeQogKgogKiBWZXJzaW9uOiAxLjAuOAogKiBSZXZpc2lvbjogMTI1MAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbwogKiBqcVBsb3QgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIHByb2plY3RzIAogKiB1bmRlciBib3RoIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBhbmQgR1BMIAogKiB2ZXJzaW9uIDIuMCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCkgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIAogKiBjaG9vc2UgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IHN1aXRzIHlvdXIgcHJvamVjdCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LiAKICoKICogQWx0aG91Z2ggbm90IHJlcXVpcmVkLCB0aGUgYXV0aG9yIHdvdWxkIGFwcHJlY2lhdGUgYW4gZW1haWwgbGV0dGluZyBoaW0gCiAqIGtub3cgb2YgYW55IHN1YnN0YW50aWFsIHVzZSBvZiBqcVBsb3QuICBZb3UgY2FuIHJlYWNoIHRoZSBhdXRob3IgYXQ6IAogKiBjaHJpcyBhdCBqcXBsb3QgZG90IGNvbSBvciBzZWUgaHR0cDovL3d3dy5qcXBsb3QuY29tL2luZm8ucGhwIC4KICoKICogSWYgeW91IGFyZSBmZWVsaW5nIGtpbmQgYW5kIGdlbmVyb3VzLCBjb25zaWRlciBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGJ5CiAqIG1ha2luZyBhIGRvbmF0aW9uIGF0OiBodHRwOi8vd3d3LmpxcGxvdC5jb20vZG9uYXRlLnBocCAuCiAqCiAqIHNwcmludGYgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbiBqcXBsb3Quc3ByaW50Zi5qcyBieSBBc2ggU2VhcmxlOgogKgogKiAgICAgdmVyc2lvbiAyMDA3LjA0LjI3CiAqICAgICBhdXRob3IgQXNoIFNlYXJsZQogKiAgICAgaHR0cDovL2hleG1lbi5jb20vYmxvZy8yMDA3LzAzL3ByaW50Zi1zcHJpbnRmLwogKiAgICAgaHR0cDovL2hleG1lbi5jb20vanMvc3ByaW50Zi5qcwogKiAgICAgVGhlIGF1dGhvciAoQXNoIFNlYXJsZSkgaGFzIHBsYWNlZCB0aGlzIGNvZGUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAqICAgICAiVGhpcyBjb2RlIGlzIHVucmVzdHJpY3RlZDogeW91IGFyZSBmcmVlIHRvIHVzZSBpdCBob3dldmVyIHlvdSBsaWtlLiIKICogCiAqLwooZnVuY3Rpb24oJCkgewogICAgCiAgICAvKioKICAgICAqIENsYXNzOiAkLmpxcGxvdC5UcmVuZGxpbmUKICAgICAqIFBsdWdpbiB3aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkgY29tcHV0ZSBhbmQgZHJhdyB0cmVuZGxpbmVzIGZvciBwbG90dGVkIGRhdGEuCiAgICAgKi8KICAgICQuanFwbG90LlRyZW5kbGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIEdyb3VwOiBQcm9wZXJ0aWVzCiAgICAgICAgCiAgICAgICAgLy8gcHJvcDogc2hvdwogICAgICAgIC8vIFdldGhlciBvciBub3QgdG8gc2hvdyB0aGUgdHJlbmQgbGluZS4KICAgICAgICB0aGlzLnNob3cgPSAkLmpxcGxvdC5jb25maWcuZW5hYmxlUGx1Z2luczsKICAgICAgICAvLyBwcm9wOiBjb2xvcgogICAgICAgIC8vIENTUyBjb2xvciBzcGVjIGZvciB0aGUgdHJlbmQgbGluZS4KICAgICAgICAvLyBCeSBkZWZhdWx0IHRoaXMgd2lsIGJlIHRoZSBzYW1lIGNvbG9yIGFzIHRoZSBwcmltYXJ5IGxpbmUuCiAgICAgICAgdGhpcy5jb2xvciA9ICcjNjY2NjY2JzsKICAgICAgICAvLyBwcm9wOiByZW5kZXJlcgogICAgICAgIC8vIFJlbmRlcmVyIHRvIHVzZSB0byBkcmF3IHRoZSB0cmVuZCBsaW5lLgogICAgICAgIC8vIFRoZSBkYXRhIHNlcmllcyB0aGF0IGlzIHBsb3R0ZWQgbWF5IG5vdCBiZSByZW5kZXJlZCBhcyBhIGxpbmUuCiAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB1c2Ugb3VyIG93biBsaW5lIHJlbmRlcmVyIGhlcmUgdG8gZHJhdyBhIHRyZW5kIGxpbmUuCiAgICAgICAgdGhpcy5yZW5kZXJlciA9IG5ldyAkLmpxcGxvdC5MaW5lUmVuZGVyZXIoKTsKICAgICAgICAvLyBwcm9wOiByZW5kZXJlck9wdGlvbnMKICAgICAgICAvLyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGxpbmUgcmVuZGVyZXIuCiAgICAgICAgLy8gQnkgZGVmYXVsdCwgbWFya2VycyBhcmUgbm90IHNob3duIG9uIHRyZW5kIGxpbmVzLgogICAgICAgIHRoaXMucmVuZGVyZXJPcHRpb25zID0ge21hcmtlcjp7c2hvdzpmYWxzZX19OwogICAgICAgIC8vIHByb3A6IGxhYmVsCiAgICAgICAgLy8gTGFiZWwgZm9yIHRoZSB0cmVuZCBsaW5lIHRvIHVzZSBpbiB0aGUgbGVnZW5kLgogICAgICAgIHRoaXMubGFiZWwgPSAnJzsKICAgICAgICAvLyBwcm9wOiB0eXBlCiAgICAgICAgLy8gRWl0aGVyICdleHBvbmVudGlhbCcsICdleHAnLCBvciAnbGluZWFyJy4KICAgICAgICB0aGlzLnR5cGUgPSAnbGluZWFyJzsKICAgICAgICAvLyBwcm9wOiBzaGFkb3cKICAgICAgICAvLyB0cnVlIG9yIGZhbHNlLCB3aGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSBzaGFkb3cuCiAgICAgICAgdGhpcy5zaGFkb3cgPSB0cnVlOwogICAgICAgIC8vIHByb3A6IG1hcmtlclJlbmRlcmVyCiAgICAgICAgLy8gUmVuZGVyZXIgdG8gdXNlIHRvIGRyYXcgbWFya2VycyBvbiB0aGUgbGluZS4KICAgICAgICAvLyBJIHRoaW5rIHRoaXMgaXMgd3JvbmcuCiAgICAgICAgdGhpcy5tYXJrZXJSZW5kZXJlciA9IHtzaG93OmZhbHNlfTsKICAgICAgICAvLyBwcm9wOiBsaW5lV2lkdGgKICAgICAgICAvLyBXaWR0aCBvZiB0aGUgdHJlbmQgbGluZS4KICAgICAgICB0aGlzLmxpbmVXaWR0aCA9IDEuNTsKICAgICAgICAvLyBwcm9wOiBzaGFkb3dBbmdsZQogICAgICAgIC8vIEFuZ2xlIG9mIHRoZSBzaGFkb3cgb24gdGhlIHRyZW5kIGxpbmUuCiAgICAgICAgdGhpcy5zaGFkb3dBbmdsZSA9IDQ1OwogICAgICAgIC8vIHByb3A6IHNoYWRvd09mZnNldAogICAgICAgIC8vIHBpeGVsIG9mZnNldCBmb3IgZWFjaCBzdHJva2Ugb2YgdGhlIHNoYWRvdy4KICAgICAgICB0aGlzLnNoYWRvd09mZnNldCA9IDEuMDsKICAgICAgICAvLyBwcm9wOiBzaGFkb3dBbHBoYQogICAgICAgIC8vIEFscGhhIHRyYW5zcGFyZW5jeSBvZiB0aGUgc2hhZG93LgogICAgICAgIHRoaXMuc2hhZG93QWxwaGEgPSAwLjA3OwogICAgICAgIC8vIHByb3A6IHNoYWRvd0RlcHRoCiAgICAgICAgLy8gbnVtYmVyIG9mIHN0cm9rZXMgdG8gbWFrZSBvZiB0aGUgc2hhZG93LgogICAgICAgIHRoaXMuc2hhZG93RGVwdGggPSAzOwogICAgICAgIHRoaXMuaXNUcmVuZGxpbmUgPSB0cnVlOwogICAgICAgIAogICAgfTsKICAgIAogICAgJC5qcXBsb3QucG9zdFNlcmllc0luaXRIb29rcy5wdXNoKHBhcnNlVHJlbmRMaW5lT3B0aW9ucyk7CiAgICAkLmpxcGxvdC5wb3N0RHJhd1Nlcmllc0hvb2tzLnB1c2goZHJhd1RyZW5kbGluZSk7CiAgICAkLmpxcGxvdC5hZGRMZWdlbmRSb3dIb29rcy5wdXNoKGFkZFRyZW5kbGluZUxlZ2VuZCk7CiAgICAKICAgIC8vIGNhbGxlZCB3aXRpbiBzY29wZSBvZiB0aGUgbGVnZW5kIG9iamVjdAogICAgLy8gY3VycmVudCBzZXJpZXMgcGFzc2VkIGluCiAgICAvLyBtdXN0IHJldHVybiBudWxsIG9yIGFuIG9iamVjdCB7bGFiZWw6bGFiZWwsIGNvbG9yOmNvbG9yfQogICAgZnVuY3Rpb24gYWRkVHJlbmRsaW5lTGVnZW5kKHNlcmllcykgewogICAgICAgIHZhciByZXQgPSBudWxsOwogICAgICAgIGlmIChzZXJpZXMudHJlbmRsaW5lICYmIHNlcmllcy50cmVuZGxpbmUuc2hvdykgewogICAgICAgICAgICB2YXIgbHQgPSBzZXJpZXMudHJlbmRsaW5lLmxhYmVsLnRvU3RyaW5nKCk7CiAgICAgICAgICAgIGlmIChsdCkgewogICAgICAgICAgICAgICAgcmV0ID0ge2xhYmVsOmx0LCBjb2xvcjpzZXJpZXMudHJlbmRsaW5lLmNvbG9yfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgfQoKICAgIC8vIGNhbGxlZCB3aXRoaW4gc2NvcGUgb2YgYSBzZXJpZXMKICAgIGZ1bmN0aW9uIHBhcnNlVHJlbmRMaW5lT3B0aW9ucyAodGFyZ2V0LCBkYXRhLCBzZXJpZXNEZWZhdWx0cywgb3B0aW9ucywgcGxvdCkgewogICAgICAgIGlmICh0aGlzLl90eXBlICYmICh0aGlzLl90eXBlID09PSAnbGluZScgfHwgdGhpcy5fdHlwZSA9PSAnYmFyJykpIHsKICAgICAgICAgICAgdGhpcy50cmVuZGxpbmUgPSBuZXcgJC5qcXBsb3QuVHJlbmRsaW5lKCk7CiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLnRyZW5kbGluZSwge2NvbG9yOnRoaXMuY29sb3J9LCBzZXJpZXNEZWZhdWx0cy50cmVuZGxpbmUsIG9wdGlvbnMudHJlbmRsaW5lKTsKICAgICAgICAgICAgdGhpcy50cmVuZGxpbmUucmVuZGVyZXIuaW5pdC5jYWxsKHRoaXMudHJlbmRsaW5lLCBudWxsKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vIGNhbGxlZCB3aXRoaW4gc2NvcGUgb2Ygc2VyaWVzIG9iamVjdAogICAgZnVuY3Rpb24gZHJhd1RyZW5kbGluZShzY3R4LCBvcHRpb25zKSB7CiAgICAgICAgLy8gaWYgd2UgaGF2ZSBvcHRpb25zLCBtZXJnZSB0cmVuZGxpbmUgb3B0aW9ucyBpbiB3aXRoIHByZWNlZGVuY2UKICAgICAgICBvcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sIHRoaXMudHJlbmRsaW5lLCBvcHRpb25zKTsKCiAgICAgICAgaWYgKHRoaXMudHJlbmRsaW5lICYmIG9wdGlvbnMuc2hvdykgewogICAgICAgICAgICB2YXIgZml0OwogICAgICAgICAgICAvLyB0aGlzLnJlbmRlcmVyLnNldEdyaWREYXRhLmNhbGwodGhpcyk7CiAgICAgICAgICAgIHZhciBkYXRhID0gb3B0aW9ucy5kYXRhIHx8IHRoaXMuZGF0YTsKICAgICAgICAgICAgZml0ID0gZml0RGF0YShkYXRhLCB0aGlzLnRyZW5kbGluZS50eXBlKTsKICAgICAgICAgICAgdmFyIGdyaWREYXRhID0gb3B0aW9ucy5ncmlkRGF0YSB8fCB0aGlzLnJlbmRlcmVyLm1ha2VHcmlkRGF0YS5jYWxsKHRoaXMsIGZpdC5kYXRhKTsKICAgICAgICAgICAgdGhpcy50cmVuZGxpbmUucmVuZGVyZXIuZHJhdy5jYWxsKHRoaXMudHJlbmRsaW5lLCBzY3R4LCBncmlkRGF0YSwge3Nob3dMaW5lOnRydWUsIHNoYWRvdzp0aGlzLnRyZW5kbGluZS5zaGFkb3d9KTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIHJlZ3Jlc3Npb24oeCwgeSwgdHlwKSAgewogICAgICAgIHZhciB0eXBlID0gKHR5cCA9PSBudWxsKSA/ICdsaW5lYXInIDogdHlwOwogICAgICAgIHZhciBOID0geC5sZW5ndGg7CiAgICAgICAgdmFyIHNsb3BlOwogICAgICAgIHZhciBpbnRlcmNlcHQ7ICAKICAgICAgICB2YXIgU1ggPSAwOwogICAgICAgIHZhciBTWSA9IDA7CiAgICAgICAgdmFyIFNYWCA9IDA7CiAgICAgICAgdmFyIFNYWSA9IDA7CiAgICAgICAgdmFyIFNZWSA9IDA7CiAgICAgICAgdmFyIFkgPSBbXTsKICAgICAgICB2YXIgWCA9IFtdOwogICAgCiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbmVhcicpIHsKICAgICAgICAgICAgWCA9IHg7CiAgICAgICAgICAgIFkgPSB5OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0eXBlID09ICdleHAnIHx8IHR5cGUgPT0gJ2V4cG9uZW50aWFsJykgewogICAgICAgICAgICBmb3IgKCB2YXIgaT0wOyBpPHkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBwb2ludHMgPD0gMCwgbG9nIHVuZGVmaW5lZC4KICAgICAgICAgICAgICAgIGlmICh5W2ldIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICBOLS07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBYLnB1c2goeFtpXSk7CiAgICAgICAgICAgICAgICAgICAgWS5wdXNoKE1hdGgubG9nKHlbaV0pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgIFNYID0gU1ggKyBYW2ldOwogICAgICAgICAgICBTWSA9IFNZICsgWVtpXTsKICAgICAgICAgICAgU1hZID0gU1hZICsgWFtpXSogWVtpXTsKICAgICAgICAgICAgU1hYID0gU1hYICsgWFtpXSogWFtpXTsKICAgICAgICAgICAgU1lZID0gU1lZICsgWVtpXSogWVtpXTsKICAgICAgICB9CgogICAgICAgIHNsb3BlID0gKE4qU1hZIC0gU1gqU1kpLyhOKlNYWCAtIFNYKlNYKTsKICAgICAgICBpbnRlcmNlcHQgPSAoU1kgLSBzbG9wZSpTWCkvTjsKCiAgICAgICAgcmV0dXJuIFtzbG9wZSwgaW50ZXJjZXB0XTsKICAgIH0KCiAgICBmdW5jdGlvbiBsaW5lYXJSZWdyZXNzaW9uKFgsWSkgewogICAgICAgIHZhciByZXQ7CiAgICAgICAgcmV0ID0gcmVncmVzc2lvbihYLFksJ2xpbmVhcicpOwogICAgICAgIHJldHVybiBbcmV0WzBdLHJldFsxXV07CiAgICB9CgogICAgZnVuY3Rpb24gZXhwUmVncmVzc2lvbihYLFkpIHsKICAgICAgICB2YXIgcmV0OwogICAgICAgIHZhciB4ID0gWDsKICAgICAgICB2YXIgeSA9IFk7CiAgICAgICAgcmV0ID0gcmVncmVzc2lvbih4LCB5LCdleHAnKTsKICAgICAgICB2YXIgYmFzZSA9IE1hdGguZXhwKHJldFswXSk7CiAgICAgICAgdmFyIGNvZWZmID0gTWF0aC5leHAocmV0WzFdKTsKICAgICAgICByZXR1cm4gW2Jhc2UsIGNvZWZmXTsKICAgIH0KCiAgICBmdW5jdGlvbiBmaXREYXRhKGRhdGEsIHR5cCkgewogICAgICAgIHZhciB0eXBlID0gKHR5cCA9PSBudWxsKSA/ICAnbGluZWFyJyA6IHR5cDsKICAgICAgICB2YXIgcmV0OwogICAgICAgIHZhciByZXM7CiAgICAgICAgdmFyIHggPSBbXTsKICAgICAgICB2YXIgeSA9IFtdOwogICAgICAgIHZhciB5cHJlZCA9IFtdOwogICAgICAgIAogICAgICAgIGZvciAoaT0wOyBpPGRhdGEubGVuZ3RoOyBpKyspewogICAgICAgICAgICBpZiAoZGF0YVtpXSAhPSBudWxsICYmIGRhdGFbaV1bMF0gIT0gbnVsbCAmJiBkYXRhW2ldWzFdICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHgucHVzaChkYXRhW2ldWzBdKTsKICAgICAgICAgICAgICAgIHkucHVzaChkYXRhW2ldWzFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAodHlwZSA9PSAnbGluZWFyJykgewogICAgICAgICAgICByZXQgPSBsaW5lYXJSZWdyZXNzaW9uKHgseSk7CiAgICAgICAgICAgIGZvciAoIHZhciBpPTA7IGk8eC5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICByZXMgPSByZXRbMF0qeFtpXSArIHJldFsxXTsKICAgICAgICAgICAgICAgIHlwcmVkLnB1c2goW3hbaV0sIHJlc10pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gJ2V4cCcgfHwgdHlwZSA9PSAnZXhwb25lbnRpYWwnKSB7CiAgICAgICAgICAgIHJldCA9IGV4cFJlZ3Jlc3Npb24oeCx5KTsKICAgICAgICAgICAgZm9yICggdmFyIGk9MDsgaTx4Lmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgIHJlcyA9IHJldFsxXSpNYXRoLnBvdyhyZXRbMF0seFtpXSk7CiAgICAgICAgICAgICAgICB5cHJlZC5wdXNoKFt4W2ldLCByZXNdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4ge2RhdGE6IHlwcmVkLCBzbG9wZTogcmV0WzBdLCBpbnRlcmNlcHQ6IHJldFsxXX07CiAgICB9IAoKfSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/plugins/jqplot.trendline.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCiAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KICovKGZ1bmN0aW9uKGYpe2YuanFwbG90LlRyZW5kbGluZT1mdW5jdGlvbigpe3RoaXMuc2hvdz1mLmpxcGxvdC5jb25maWcuZW5hYmxlUGx1Z2luczt0aGlzLmNvbG9yPSIjNjY2NjY2Ijt0aGlzLnJlbmRlcmVyPW5ldyBmLmpxcGxvdC5MaW5lUmVuZGVyZXIoKTt0aGlzLnJlbmRlcmVyT3B0aW9ucz17bWFya2VyOntzaG93OmZhbHNlfX07dGhpcy5sYWJlbD0iIjt0aGlzLnR5cGU9ImxpbmVhciI7dGhpcy5zaGFkb3c9dHJ1ZTt0aGlzLm1hcmtlclJlbmRlcmVyPXtzaG93OmZhbHNlfTt0aGlzLmxpbmVXaWR0aD0xLjU7dGhpcy5zaGFkb3dBbmdsZT00NTt0aGlzLnNoYWRvd09mZnNldD0xO3RoaXMuc2hhZG93QWxwaGE9MC4wNzt0aGlzLnNoYWRvd0RlcHRoPTM7dGhpcy5pc1RyZW5kbGluZT10cnVlfTtmLmpxcGxvdC5wb3N0U2VyaWVzSW5pdEhvb2tzLnB1c2goZSk7Zi5qcXBsb3QucG9zdERyYXdTZXJpZXNIb29rcy5wdXNoKGcpO2YuanFwbG90LmFkZExlZ2VuZFJvd0hvb2tzLnB1c2goYSk7ZnVuY3Rpb24gYShrKXt2YXIgaj1udWxsO2lmKGsudHJlbmRsaW5lJiZrLnRyZW5kbGluZS5zaG93KXt2YXIgaT1rLnRyZW5kbGluZS5sYWJlbC50b1N0cmluZygpO2lmKGkpe2o9e2xhYmVsOmksY29sb3I6ay50cmVuZGxpbmUuY29sb3J9fX1yZXR1cm4gan1mdW5jdGlvbiBlKG0sayxqLGksbCl7aWYodGhpcy5fdHlwZSYmKHRoaXMuX3R5cGU9PT0ibGluZSJ8fHRoaXMuX3R5cGU9PSJiYXIiKSl7dGhpcy50cmVuZGxpbmU9bmV3IGYuanFwbG90LlRyZW5kbGluZSgpO2k9aXx8e307Zi5leHRlbmQodHJ1ZSx0aGlzLnRyZW5kbGluZSx7Y29sb3I6dGhpcy5jb2xvcn0sai50cmVuZGxpbmUsaS50cmVuZGxpbmUpO3RoaXMudHJlbmRsaW5lLnJlbmRlcmVyLmluaXQuY2FsbCh0aGlzLnRyZW5kbGluZSxudWxsKX19ZnVuY3Rpb24gZyhtLGkpe2k9Zi5leHRlbmQodHJ1ZSx7fSx0aGlzLnRyZW5kbGluZSxpKTtpZih0aGlzLnRyZW5kbGluZSYmaS5zaG93KXt2YXIgazt2YXIgbD1pLmRhdGF8fHRoaXMuZGF0YTtrPWMobCx0aGlzLnRyZW5kbGluZS50eXBlKTt2YXIgaj1pLmdyaWREYXRhfHx0aGlzLnJlbmRlcmVyLm1ha2VHcmlkRGF0YS5jYWxsKHRoaXMsay5kYXRhKTt0aGlzLnRyZW5kbGluZS5yZW5kZXJlci5kcmF3LmNhbGwodGhpcy50cmVuZGxpbmUsbSxqLHtzaG93TGluZTp0cnVlLHNoYWRvdzp0aGlzLnRyZW5kbGluZS5zaGFkb3d9KX19ZnVuY3Rpb24gYih3LHYsbil7dmFyIHU9KG49PW51bGwpPyJsaW5lYXIiOm47dmFyIHM9dy5sZW5ndGg7dmFyIHQ7dmFyIHo7dmFyIG89MDt2YXIgbT0wO3ZhciByPTA7dmFyIHE9MDt2YXIgbD0wO3ZhciBqPVtdO3ZhciBrPVtdO2lmKHU9PSJsaW5lYXIiKXtrPXc7aj12fWVsc2V7aWYodT09ImV4cCJ8fHU9PSJleHBvbmVudGlhbCIpe2Zvcih2YXIgcD0wO3A8di5sZW5ndGg7cCsrKXtpZih2W3BdPD0wKXtzLS19ZWxzZXtrLnB1c2god1twXSk7ai5wdXNoKE1hdGgubG9nKHZbcF0pKX19fX1mb3IodmFyIHA9MDtwPHM7cCsrKXtvPW8ra1twXTttPW0raltwXTtxPXEra1twXSpqW3BdO3I9citrW3BdKmtbcF07bD1sK2pbcF0qaltwXX10PShzKnEtbyptKS8ocypyLW8qbyk7ej0obS10Km8pL3M7cmV0dXJuW3Qsel19ZnVuY3Rpb24gaChrLGope3ZhciBpO2k9YihrLGosImxpbmVhciIpO3JldHVybltpWzBdLGlbMV1dfWZ1bmN0aW9uIGQobyxtKXt2YXIgazt2YXIgaT1vO3ZhciBuPW07az1iKGksbiwiZXhwIik7dmFyIGw9TWF0aC5leHAoa1swXSk7dmFyIGo9TWF0aC5leHAoa1sxXSk7cmV0dXJuW2wsal19ZnVuY3Rpb24gYyhsLGope3ZhciBwPShqPT1udWxsKT8ibGluZWFyIjpqO3ZhciBuO3ZhciBvO3ZhciByPVtdO3ZhciBxPVtdO3ZhciBtPVtdO2ZvcihrPTA7azxsLmxlbmd0aDtrKyspe2lmKGxba10hPW51bGwmJmxba11bMF0hPW51bGwmJmxba11bMV0hPW51bGwpe3IucHVzaChsW2tdWzBdKTtxLnB1c2gobFtrXVsxXSl9fWlmKHA9PSJsaW5lYXIiKXtuPWgocixxKTtmb3IodmFyIGs9MDtrPHIubGVuZ3RoO2srKyl7bz1uWzBdKnJba10rblsxXTttLnB1c2goW3Jba10sb10pfX1lbHNle2lmKHA9PSJleHAifHxwPT0iZXhwb25lbnRpYWwiKXtuPWQocixxKTtmb3IodmFyIGs9MDtrPHIubGVuZ3RoO2srKyl7bz1uWzFdKk1hdGgucG93KG5bMF0scltrXSk7bS5wdXNoKFtyW2tdLG9dKX19fXJldHVybntkYXRhOm0sc2xvcGU6blswXSxpbnRlcmNlcHQ6blsxXX19fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAACGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAABAAAQAABwAHQAc2RzY2xibwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAHMAYwByAGkAcAB0AHNkc2NsYm9vbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAGAAAAABAAAAwAAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABAAAAAACAAAIAAAAGAAAAAAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/LGPL-LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CQkgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNwoKIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgoKICBUaGlzIHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UsIHN1cHBsZW1lbnRlZCBieSB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBsaXN0ZWQgYmVsb3cuCgogIDAuIEFkZGl0aW9uYWwgRGVmaW5pdGlvbnMuIAoKICBBcyB1c2VkIGhlcmVpbiwgInRoaXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlICJHTlUgR1BMIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUKR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIlRoZSBMaWJyYXJ5IiByZWZlcnMgdG8gYSBjb3ZlcmVkIHdvcmsgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLApvdGhlciB0aGFuIGFuIEFwcGxpY2F0aW9uIG9yIGEgQ29tYmluZWQgV29yayBhcyBkZWZpbmVkIGJlbG93LgoKICBBbiAiQXBwbGljYXRpb24iIGlzIGFueSB3b3JrIHRoYXQgbWFrZXMgdXNlIG9mIGFuIGludGVyZmFjZSBwcm92aWRlZApieSB0aGUgTGlicmFyeSwgYnV0IHdoaWNoIGlzIG5vdCBvdGhlcndpc2UgYmFzZWQgb24gdGhlIExpYnJhcnkuCkRlZmluaW5nIGEgc3ViY2xhc3Mgb2YgYSBjbGFzcyBkZWZpbmVkIGJ5IHRoZSBMaWJyYXJ5IGlzIGRlZW1lZCBhIG1vZGUKb2YgdXNpbmcgYW4gaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBMaWJyYXJ5LgoKICBBICJDb21iaW5lZCBXb3JrIiBpcyBhIHdvcmsgcHJvZHVjZWQgYnkgY29tYmluaW5nIG9yIGxpbmtpbmcgYW4KQXBwbGljYXRpb24gd2l0aCB0aGUgTGlicmFyeS4gIFRoZSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpYnJhcnkKd2l0aCB3aGljaCB0aGUgQ29tYmluZWQgV29yayB3YXMgbWFkZSBpcyBhbHNvIGNhbGxlZCB0aGUgIkxpbmtlZApWZXJzaW9uIi4KCiAgVGhlICJNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSBDb21iaW5lZCBXb3JrIG1lYW5zIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgdGhlIENvbWJpbmVkIFdvcmssIGV4Y2x1ZGluZyBhbnkgc291cmNlIGNvZGUKZm9yIHBvcnRpb25zIG9mIHRoZSBDb21iaW5lZCBXb3JrIHRoYXQsIGNvbnNpZGVyZWQgaW4gaXNvbGF0aW9uLCBhcmUKYmFzZWQgb24gdGhlIEFwcGxpY2F0aW9uLCBhbmQgbm90IG9uIHRoZSBMaW5rZWQgVmVyc2lvbi4KCiAgVGhlICJDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGUiIGZvciBhIENvbWJpbmVkIFdvcmsgbWVhbnMgdGhlCm9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSBmb3IgdGhlIEFwcGxpY2F0aW9uLCBpbmNsdWRpbmcgYW55IGRhdGEKYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvciByZXByb2R1Y2luZyB0aGUgQ29tYmluZWQgV29yayBmcm9tIHRoZQpBcHBsaWNhdGlvbiwgYnV0IGV4Y2x1ZGluZyB0aGUgU3lzdGVtIExpYnJhcmllcyBvZiB0aGUgQ29tYmluZWQgV29yay4KCiAgMS4gRXhjZXB0aW9uIHRvIFNlY3Rpb24gMyBvZiB0aGUgR05VIEdQTC4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgdW5kZXIgc2VjdGlvbnMgMyBhbmQgNCBvZiB0aGlzIExpY2Vuc2UKd2l0aG91dCBiZWluZyBib3VuZCBieSBzZWN0aW9uIDMgb2YgdGhlIEdOVSBHUEwuCgogIDIuIENvbnZleWluZyBNb2RpZmllZCBWZXJzaW9ucy4KCiAgSWYgeW91IG1vZGlmeSBhIGNvcHkgb2YgdGhlIExpYnJhcnksIGFuZCwgaW4geW91ciBtb2RpZmljYXRpb25zLCBhCmZhY2lsaXR5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gQXBwbGljYXRpb24KdGhhdCB1c2VzIHRoZSBmYWNpbGl0eSAob3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUKZmFjaWxpdHkgaXMgaW52b2tlZCksIHRoZW4geW91IG1heSBjb252ZXkgYSBjb3B5IG9mIHRoZSBtb2RpZmllZAp2ZXJzaW9uOgoKICAgYSkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IHlvdSBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8KICAgZW5zdXJlIHRoYXQsIGluIHRoZSBldmVudCBhbiBBcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgdGhlCiAgIGZ1bmN0aW9uIG9yIGRhdGEsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zCiAgIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLCBvcgoKICAgYikgdW5kZXIgdGhlIEdOVSBHUEwsIHdpdGggbm9uZSBvZiB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvZgogICB0aGlzIExpY2Vuc2UgYXBwbGljYWJsZSB0byB0aGF0IGNvcHkuCgogIDMuIE9iamVjdCBDb2RlIEluY29ycG9yYXRpbmcgTWF0ZXJpYWwgZnJvbSBMaWJyYXJ5IEhlYWRlciBGaWxlcy4KCiAgVGhlIG9iamVjdCBjb2RlIGZvcm0gb2YgYW4gQXBwbGljYXRpb24gbWF5IGluY29ycG9yYXRlIG1hdGVyaWFsIGZyb20KYSBoZWFkZXIgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnkuICBZb3UgbWF5IGNvbnZleSBzdWNoIG9iamVjdApjb2RlIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0LCBpZiB0aGUgaW5jb3Jwb3JhdGVkCm1hdGVyaWFsIGlzIG5vdCBsaW1pdGVkIHRvIG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0cnVjdHVyZQpsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIG9yIHNtYWxsIG1hY3JvcywgaW5saW5lIGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGVzCih0ZW4gb3IgZmV3ZXIgbGluZXMgaW4gbGVuZ3RoKSwgeW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKCiAgIGEpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgb2JqZWN0IGNvZGUgdGhhdCB0aGUKICAgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZQogICBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KCiAgIGIpIEFjY29tcGFueSB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZQogICBkb2N1bWVudC4KCiAgNC4gQ29tYmluZWQgV29ya3MuCgogIFlvdSBtYXkgY29udmV5IGEgQ29tYmluZWQgV29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSB0aGF0LAp0YWtlbiB0b2dldGhlciwgZWZmZWN0aXZlbHkgZG8gbm90IHJlc3RyaWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUKcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgY29udGFpbmVkIGluIHRoZSBDb21iaW5lZCBXb3JrIGFuZCByZXZlcnNlCmVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLCBpZiB5b3UgYWxzbyBkbyBlYWNoIG9mCnRoZSBmb2xsb3dpbmc6CgogICBhKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIENvbWJpbmVkIFdvcmsgdGhhdAogICB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZQogICBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KCiAgIGIpIEFjY29tcGFueSB0aGUgQ29tYmluZWQgV29yayB3aXRoIGEgY29weSBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlCiAgIGRvY3VtZW50LgoKICAgYykgRm9yIGEgQ29tYmluZWQgV29yayB0aGF0IGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzIGR1cmluZwogICBleGVjdXRpb24sIGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nCiAgIHRoZXNlIG5vdGljZXMsIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UgZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZQogICBjb3BpZXMgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC4KCiAgIGQpIERvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgoKICAgICAgIDApIENvbnZleSB0aGUgTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcwogICAgICAgTGljZW5zZSwgYW5kIHRoZSBDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGUgaW4gYSBmb3JtCiAgICAgICBzdWl0YWJsZSBmb3IsIGFuZCB1bmRlciB0ZXJtcyB0aGF0IHBlcm1pdCwgdGhlIHVzZXIgdG8KICAgICAgIHJlY29tYmluZSBvciByZWxpbmsgdGhlIEFwcGxpY2F0aW9uIHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mCiAgICAgICB0aGUgTGlua2VkIFZlcnNpb24gdG8gcHJvZHVjZSBhIG1vZGlmaWVkIENvbWJpbmVkIFdvcmssIGluIHRoZQogICAgICAgbWFubmVyIHNwZWNpZmllZCBieSBzZWN0aW9uIDYgb2YgdGhlIEdOVSBHUEwgZm9yIGNvbnZleWluZwogICAgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuCgogICAgICAgMSkgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCiAgICAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKGEpIHVzZXMgYXQgcnVuIHRpbWUKICAgICAgIGEgY29weSBvZiB0aGUgTGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlcgogICAgICAgc3lzdGVtLCBhbmQgKGIpIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbgogICAgICAgb2YgdGhlIExpYnJhcnkgdGhhdCBpcyBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSBMaW5rZWQKICAgICAgIFZlcnNpb24uIAoKICAgZSkgUHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24sIGJ1dCBvbmx5IGlmIHlvdSB3b3VsZCBvdGhlcndpc2UKICAgYmUgcmVxdWlyZWQgdG8gcHJvdmlkZSBzdWNoIGluZm9ybWF0aW9uIHVuZGVyIHNlY3Rpb24gNiBvZiB0aGUKICAgR05VIEdQTCwgYW5kIG9ubHkgdG8gdGhlIGV4dGVudCB0aGF0IHN1Y2ggaW5mb3JtYXRpb24gaXMKICAgbmVjZXNzYXJ5IHRvIGluc3RhbGwgYW5kIGV4ZWN1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZQogICBDb21iaW5lZCBXb3JrIHByb2R1Y2VkIGJ5IHJlY29tYmluaW5nIG9yIHJlbGlua2luZyB0aGUKICAgQXBwbGljYXRpb24gd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpbmtlZCBWZXJzaW9uLiAoSWYKICAgeW91IHVzZSBvcHRpb24gNGQwLCB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIG11c3QgYWNjb21wYW55CiAgIHRoZSBNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIGFuZCBDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uCiAgIENvZGUuIElmIHlvdSB1c2Ugb3B0aW9uIDRkMSwgeW91IG11c3QgcHJvdmlkZSB0aGUgSW5zdGFsbGF0aW9uCiAgIEluZm9ybWF0aW9uIGluIHRoZSBtYW5uZXIgc3BlY2lmaWVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTAogICBmb3IgY29udmV5aW5nIENvcnJlc3BvbmRpbmcgU291cmNlLikKCiAgNS4gQ29tYmluZWQgTGlicmFyaWVzLgoKICBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCkxpYnJhcnkgc2lkZSBieSBzaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CmZhY2lsaXRpZXMgdGhhdCBhcmUgbm90IEFwcGxpY2F0aW9ucyBhbmQgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMKTGljZW5zZSwgYW5kIGNvbnZleSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSB1bmRlciB0ZXJtcyBvZiB5b3VyCmNob2ljZSwgaWYgeW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKCiAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrIGJhc2VkCiAgIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcywKICAgY29udmV5ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IHRoYXQgcGFydCBvZiBpdAogICBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nIHdoZXJlIHRvIGZpbmQgdGhlCiAgIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KCiAgNi4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucwpvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldwp2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZQpMaWJyYXJ5IGFzIHlvdSByZWNlaXZlZCBpdCBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbgpvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIKYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZApjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHB1Ymxpc2hlZCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uCnB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBhcyB5b3UKcmVjZWl2ZWQgaXQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHTlUgTGVzc2VyCkdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyCkdlbmVyYWwgUHVibGljIExpY2Vuc2UgZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KCiAgSWYgdGhlIExpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZQp3aGV0aGVyIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHNoYWxsCmFwcGx5LCB0aGF0IHByb3h5J3MgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGFueSB2ZXJzaW9uIGlzCnBlcm1hbmVudCBhdXRob3JpemF0aW9uIGZvciB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlCkxpYnJhcnku]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/MIT-LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IEppbSBXZWlyaWNoCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORApOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCkxJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCldJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/scripts/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/scripts/shAutoloader.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKiAKICogQGNvcHlyaWdodAogKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBBbGV4IEdvcmJhdGNoZXYuCiAqCiAqIEBsaWNlbnNlCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKi8KZXZhbChmdW5jdGlvbihwLGEsYyxrLGUsZCl7ZT1mdW5jdGlvbihjKXtyZXR1cm4oYzxhPycnOmUocGFyc2VJbnQoYy9hKSkpKygoYz1jJWEpPjM1P1N0cmluZy5mcm9tQ2hhckNvZGUoYysyOSk6Yy50b1N0cmluZygzNikpfTtpZighJycucmVwbGFjZSgvXi8sU3RyaW5nKSl7d2hpbGUoYy0tKXtkW2UoYyldPWtbY118fGUoYyl9az1bZnVuY3Rpb24oZSl7cmV0dXJuIGRbZV19XTtlPWZ1bmN0aW9uKCl7cmV0dXJuJ1xcdysnfTtjPTF9O3doaWxlKGMtLSl7aWYoa1tjXSl7cD1wLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxiJytlKGMpKydcXGInLCdnJyksa1tjXSl9fXJldHVybiBwfSgnKDIoKXsxIGg9NTtoLkk9MigpezIgbihjLGEpezQoMSBkPTA7ZDxjLjk7ZCsrKWlbY1tkXV09YX0yIG8oYyl7MSBhPXIuSCgiSiIpLGQ9MzthLks9YzthLk09IkwvdCI7YS5HPSJ0IjthLnU9YS52PTIoKXs2KCFkJiYoITguN3x8OC43PT0iRiJ8fDguNz09InoiKSl7ZD1xO2VbY109cTthOns0KDEgcCB5IGUpNihlW3BdPT0zKUIgYTtqJiY1LkMoayl9YS51PWEudj14O2EuRC5PKGEpfX07ci5OLlIoYSl9MSBmPVEsbD1oLlAoKSxpPXt9LGU9e30saj0zLGs9eCxiOzUuVD0yKGMpe2s9YztqPXF9OzQoYj0wO2I8Zi45O2IrKyl7MSBtPWZbYl0udz9mW2JdOmZbYl0uUygvXFxzKy8pLGc9bS53KCk7bihtLGcpfTQoYj0wO2I8bC45O2IrKyk2KGc9aVtsW2JdLkUuQV0pe2VbZ109MztvKGcpfX19KSgpOycsNTYsNTYsJ3x2YXJ8ZnVuY3Rpb258ZmFsc2V8Zm9yfFN5bnRheEhpZ2hsaWdodGVyfGlmfHJlYWR5U3RhdGV8dGhpc3xsZW5ndGh8fHx8fHx8fHx8fHx8fHx8fHRydWV8ZG9jdW1lbnR8fGphdmFzY3JpcHR8b25sb2FkfG9ucmVhZHlzdGF0ZWNoYW5nZXxwb3B8bnVsbHxpbnxjb21wbGV0ZXxicnVzaHxicmVha3xoaWdobGlnaHR8cGFyZW50Tm9kZXxwYXJhbXN8bG9hZGVkfGxhbmd1YWdlfGNyZWF0ZUVsZW1lbnR8YXV0b2xvYWRlcnxzY3JpcHR8c3JjfHRleHR8dHlwZXxib2R5fHJlbW92ZUNoaWxkfGZpbmRFbGVtZW50c3xhcmd1bWVudHN8YXBwZW5kQ2hpbGR8c3BsaXR8YWxsJy5zcGxpdCgnfCcpLDAse30pKQo=]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/scripts/shAutoloader.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZXZhbChmdW5jdGlvbihoLGIsaixmLGcsaSl7Zz1mdW5jdGlvbihhKXtyZXR1cm4oYTxiPyIiOmcocGFyc2VJbnQoYS9iKSkpKygoYT1hJWIpPjM1P1N0cmluZy5mcm9tQ2hhckNvZGUoYSsyOSk6YS50b1N0cmluZygzNikpfTtpZighIiIucmVwbGFjZSgvXi8sU3RyaW5nKSl7d2hpbGUoai0tKXtpW2coaildPWZbal18fGcoail9Zj1bZnVuY3Rpb24oYSl7cmV0dXJuIGlbYV19XTtnPWZ1bmN0aW9uKCl7cmV0dXJuIlxcdysifTtqPTF9d2hpbGUoai0tKXtpZihmW2pdKXtoPWgucmVwbGFjZShuZXcgUmVnRXhwKCJcXGIiK2coaikrIlxcYiIsImciKSxmW2pdKX19cmV0dXJuIGh9KCcoMigpezEgaD01O2guST0yKCl7MiBuKGMsYSl7NCgxIGQ9MDtkPGMuOTtkKyspaVtjW2RdXT1hfTIgbyhjKXsxIGE9ci5IKCJKIiksZD0zO2EuSz1jO2EuTT0iTC90IjthLkc9InQiO2EudT1hLnY9MigpezYoIWQmJighOC43fHw4Ljc9PSJGInx8OC43PT0ieiIpKXtkPXE7ZVtjXT1xO2E6ezQoMSBwIHkgZSk2KGVbcF09PTMpQiBhO2omJjUuQyhrKX1hLnU9YS52PXg7YS5ELk8oYSl9fTtyLk4uUihhKX0xIGY9USxsPWguUCgpLGk9e30sZT17fSxqPTMsaz14LGI7NS5UPTIoYyl7az1jO2o9cX07NChiPTA7YjxmLjk7YisrKXsxIG09ZltiXS53P2ZbYl06ZltiXS5TKC9cXHMrLyksZz1tLncoKTtuKG0sZyl9NChiPTA7YjxsLjk7YisrKTYoZz1pW2xbYl0uRS5BXSl7ZVtnXT0zO28oZyl9fX0pKCk7Jyw1Niw1NiwifHZhcnxmdW5jdGlvbnxmYWxzZXxmb3J8U3ludGF4SGlnaGxpZ2h0ZXJ8aWZ8cmVhZHlTdGF0ZXx0aGlzfGxlbmd0aHx8fHx8fHx8fHx8fHx8fHx8dHJ1ZXxkb2N1bWVudHx8amF2YXNjcmlwdHxvbmxvYWR8b25yZWFkeXN0YXRlY2hhbmdlfHBvcHxudWxsfGlufGNvbXBsZXRlfGJydXNofGJyZWFrfGhpZ2hsaWdodHxwYXJlbnROb2RlfHBhcmFtc3xsb2FkZWR8bGFuZ3VhZ2V8Y3JlYXRlRWxlbWVudHxhdXRvbG9hZGVyfHNjcmlwdHxzcmN8dGV4dHx0eXBlfGJvZHl8cmVtb3ZlQ2hpbGR8ZmluZEVsZW1lbnRzfGFyZ3VtZW50c3xhcHBlbmRDaGlsZHxzcGxpdHxhbGwiLnNwbGl0KCJ8IiksMCx7fSkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/scripts/shBrushJScript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKiAKICogQGNvcHlyaWdodAogKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBBbGV4IEdvcmJhdGNoZXYuCiAqCiAqIEBsaWNlbnNlCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKi8KOyhmdW5jdGlvbigpCnsKCS8vIENvbW1vbkpTCgl0eXBlb2YocmVxdWlyZSkgIT0gJ3VuZGVmaW5lZCcgPyBTeW50YXhIaWdobGlnaHRlciA9IHJlcXVpcmUoJ3NoQ29yZScpLlN5bnRheEhpZ2hsaWdodGVyIDogbnVsbDsKCglmdW5jdGlvbiBCcnVzaCgpCgl7CgkJdmFyIGtleXdvcmRzID0JJ2JyZWFrIGNhc2UgY2F0Y2ggY29udGludWUgJyArCgkJCQkJCSdkZWZhdWx0IGRlbGV0ZSBkbyBlbHNlIGZhbHNlICAnICsKCQkJCQkJJ2ZvciBmdW5jdGlvbiBpZiBpbiBpbnN0YW5jZW9mICcgKwoJCQkJCQknbmV3IG51bGwgcmV0dXJuIHN1cGVyIHN3aXRjaCAnICsKCQkJCQkJJ3RoaXMgdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHZhciB3aGlsZSB3aXRoJwoJCQkJCQk7CgoJCXZhciByID0gU3ludGF4SGlnaGxpZ2h0ZXIucmVnZXhMaWI7CgkJCgkJdGhpcy5yZWdleExpc3QgPSBbCgkJCXsgcmVnZXg6IHIubXVsdGlMaW5lRG91YmxlUXVvdGVkU3RyaW5nLAkJCQkJY3NzOiAnc3RyaW5nJyB9LAkJCS8vIGRvdWJsZSBxdW90ZWQgc3RyaW5ncwoJCQl7IHJlZ2V4OiByLm11bHRpTGluZVNpbmdsZVF1b3RlZFN0cmluZywJCQkJCWNzczogJ3N0cmluZycgfSwJCQkvLyBzaW5nbGUgcXVvdGVkIHN0cmluZ3MKCQkJeyByZWdleDogci5zaW5nbGVMaW5lQ0NvbW1lbnRzLAkJCQkJCQljc3M6ICdjb21tZW50cycgfSwJCQkvLyBvbmUgbGluZSBjb21tZW50cwoJCQl7IHJlZ2V4OiByLm11bHRpTGluZUNDb21tZW50cywJCQkJCQkJY3NzOiAnY29tbWVudHMnIH0sCQkJLy8gbXVsdGlsaW5lIGNvbW1lbnRzCgkJCXsgcmVnZXg6IC9ccyojLiovZ20sCQkJCQkJCQkJY3NzOiAncHJlcHJvY2Vzc29yJyB9LAkJLy8gcHJlcHJvY2Vzc29yIHRhZ3MgbGlrZSAjcmVnaW9uIGFuZCAjZW5kcmVnaW9uCgkJCXsgcmVnZXg6IG5ldyBSZWdFeHAodGhpcy5nZXRLZXl3b3JkcyhrZXl3b3JkcyksICdnbScpLAljc3M6ICdrZXl3b3JkJyB9CQkJLy8ga2V5d29yZHMKCQkJXTsKCQoJCXRoaXMuZm9ySHRtbFNjcmlwdChyLnNjcmlwdFNjcmlwdFRhZ3MpOwoJfTsKCglCcnVzaC5wcm90b3R5cGUJPSBuZXcgU3ludGF4SGlnaGxpZ2h0ZXIuSGlnaGxpZ2h0ZXIoKTsKCUJydXNoLmFsaWFzZXMJPSBbJ2pzJywgJ2pzY3JpcHQnLCAnamF2YXNjcmlwdCddOwoKCVN5bnRheEhpZ2hsaWdodGVyLmJydXNoZXMuSlNjcmlwdCA9IEJydXNoOwoKCS8vIENvbW1vbkpTCgl0eXBlb2YoZXhwb3J0cykgIT0gJ3VuZGVmaW5lZCcgPyBleHBvcnRzLkJydXNoID0gQnJ1c2ggOiBudWxsOwp9KSgpOwo=]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/scripts/shBrushJScript.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCl7dHlwZW9mKHJlcXVpcmUpIT0idW5kZWZpbmVkIj9TeW50YXhIaWdobGlnaHRlcj1yZXF1aXJlKCJzaENvcmUiKS5TeW50YXhIaWdobGlnaHRlcjpudWxsO2Z1bmN0aW9uIGEoKXt2YXIgYj0iYnJlYWsgY2FzZSBjYXRjaCBjb250aW51ZSBkZWZhdWx0IGRlbGV0ZSBkbyBlbHNlIGZhbHNlICBmb3IgZnVuY3Rpb24gaWYgaW4gaW5zdGFuY2VvZiBuZXcgbnVsbCByZXR1cm4gc3VwZXIgc3dpdGNoIHRoaXMgdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHZhciB3aGlsZSB3aXRoIjt2YXIgYz1TeW50YXhIaWdobGlnaHRlci5yZWdleExpYjt0aGlzLnJlZ2V4TGlzdD1be3JlZ2V4OmMubXVsdGlMaW5lRG91YmxlUXVvdGVkU3RyaW5nLGNzczoic3RyaW5nIn0se3JlZ2V4OmMubXVsdGlMaW5lU2luZ2xlUXVvdGVkU3RyaW5nLGNzczoic3RyaW5nIn0se3JlZ2V4OmMuc2luZ2xlTGluZUNDb21tZW50cyxjc3M6ImNvbW1lbnRzIn0se3JlZ2V4OmMubXVsdGlMaW5lQ0NvbW1lbnRzLGNzczoiY29tbWVudHMifSx7cmVnZXg6L1xzKiMuKi9nbSxjc3M6InByZXByb2Nlc3NvciJ9LHtyZWdleDpuZXcgUmVnRXhwKHRoaXMuZ2V0S2V5d29yZHMoYiksImdtIiksY3NzOiJrZXl3b3JkIn1dO3RoaXMuZm9ySHRtbFNjcmlwdChjLnNjcmlwdFNjcmlwdFRhZ3MpfWEucHJvdG90eXBlPW5ldyBTeW50YXhIaWdobGlnaHRlci5IaWdobGlnaHRlcigpO2EuYWxpYXNlcz1bImpzIiwianNjcmlwdCIsImphdmFzY3JpcHQiXTtTeW50YXhIaWdobGlnaHRlci5icnVzaGVzLkpTY3JpcHQ9YTt0eXBlb2YoZXhwb3J0cykhPSJ1bmRlZmluZWQiP2V4cG9ydHMuQnJ1c2g9YTpudWxsfSkoKTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/scripts/shBrushXml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKiAKICogQGNvcHlyaWdodAogKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBBbGV4IEdvcmJhdGNoZXYuCiAqCiAqIEBsaWNlbnNlCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKi8KOyhmdW5jdGlvbigpCnsKCS8vIENvbW1vbkpTCgl0eXBlb2YocmVxdWlyZSkgIT0gJ3VuZGVmaW5lZCcgPyBTeW50YXhIaWdobGlnaHRlciA9IHJlcXVpcmUoJ3NoQ29yZScpLlN5bnRheEhpZ2hsaWdodGVyIDogbnVsbDsKCglmdW5jdGlvbiBCcnVzaCgpCgl7CgkJZnVuY3Rpb24gcHJvY2VzcyhtYXRjaCwgcmVnZXhJbmZvKQoJCXsKCQkJdmFyIGNvbnN0cnVjdG9yID0gU3ludGF4SGlnaGxpZ2h0ZXIuTWF0Y2gsCgkJCQljb2RlID0gbWF0Y2hbMF0sCgkJCQl0YWcgPSBuZXcgWFJlZ0V4cCgnKCZsdDt8PClbXFxzXFwvXFw/XSooPzxuYW1lPls6XFx3LVxcLl0rKScsICd4ZycpLmV4ZWMoY29kZSksCgkJCQlyZXN1bHQgPSBbXQoJCQkJOwoJCQoJCQlpZiAobWF0Y2guYXR0cmlidXRlcyAhPSBudWxsKSAKCQkJewoJCQkJdmFyIGF0dHJpYnV0ZXMsCgkJCQkJcmVnZXggPSBuZXcgWFJlZ0V4cCgnKD88bmFtZT4gW1xcdzpcXC1cXC5dKyknICsKCQkJCQkJCQkJCSdcXHMqPVxccyonICsKCQkJCQkJCQkJCScoPzx2YWx1ZT4gIi4qPyJ8XCcuKj9cJ3xcXHcrKScsCgkJCQkJCQkJCQkneGcnKTsKCgkJCQl3aGlsZSAoKGF0dHJpYnV0ZXMgPSByZWdleC5leGVjKGNvZGUpKSAhPSBudWxsKSAKCQkJCXsKCQkJCQlyZXN1bHQucHVzaChuZXcgY29uc3RydWN0b3IoYXR0cmlidXRlcy5uYW1lLCBtYXRjaC5pbmRleCArIGF0dHJpYnV0ZXMuaW5kZXgsICdjb2xvcjEnKSk7CgkJCQkJcmVzdWx0LnB1c2gobmV3IGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMudmFsdWUsIG1hdGNoLmluZGV4ICsgYXR0cmlidXRlcy5pbmRleCArIGF0dHJpYnV0ZXNbMF0uaW5kZXhPZihhdHRyaWJ1dGVzLnZhbHVlKSwgJ3N0cmluZycpKTsKCQkJCX0KCQkJfQoKCQkJaWYgKHRhZyAhPSBudWxsKQoJCQkJcmVzdWx0LnB1c2goCgkJCQkJbmV3IGNvbnN0cnVjdG9yKHRhZy5uYW1lLCBtYXRjaC5pbmRleCArIHRhZ1swXS5pbmRleE9mKHRhZy5uYW1lKSwgJ2tleXdvcmQnKQoJCQkJKTsKCgkJCXJldHVybiByZXN1bHQ7CgkJfQoJCgkJdGhpcy5yZWdleExpc3QgPSBbCgkJCXsgcmVnZXg6IG5ldyBYUmVnRXhwKCcoXFwmbHQ7fDwpXFwhXFxbW1xcd1xcc10qP1xcWygufFxccykqP1xcXVxcXShcXCZndDt8PiknLCAnZ20nKSwJCQljc3M6ICdjb2xvcjInIH0sCS8vIDwhWyAuLi4gWyAuLi4gXV0+CgkJCXsgcmVnZXg6IFN5bnRheEhpZ2hsaWdodGVyLnJlZ2V4TGliLnhtbENvbW1lbnRzLAkJCQkJCQkJCQkJCWNzczogJ2NvbW1lbnRzJyB9LAkvLyA8IS0tIC4uLiAtLT4KCQkJeyByZWdleDogbmV3IFhSZWdFeHAoJygmbHQ7fDwpW1xcc1xcL1xcP10qKFxcdyspKD88YXR0cmlidXRlcz4uKj8pW1xcc1xcL1xcP10qKCZndDt8PiknLCAnc2cnKSwgZnVuYzogcHJvY2VzcyB9CgkJXTsKCX07CgoJQnJ1c2gucHJvdG90eXBlCT0gbmV3IFN5bnRheEhpZ2hsaWdodGVyLkhpZ2hsaWdodGVyKCk7CglCcnVzaC5hbGlhc2VzCT0gWyd4bWwnLCAneGh0bWwnLCAneHNsdCcsICdodG1sJ107CgoJU3ludGF4SGlnaGxpZ2h0ZXIuYnJ1c2hlcy5YbWwgPSBCcnVzaDsKCgkvLyBDb21tb25KUwoJdHlwZW9mKGV4cG9ydHMpICE9ICd1bmRlZmluZWQnID8gZXhwb3J0cy5CcnVzaCA9IEJydXNoIDogbnVsbDsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/scripts/shBrushXml.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCl7dHlwZW9mKHJlcXVpcmUpIT0idW5kZWZpbmVkIj9TeW50YXhIaWdobGlnaHRlcj1yZXF1aXJlKCJzaENvcmUiKS5TeW50YXhIaWdobGlnaHRlcjpudWxsO2Z1bmN0aW9uIGEoKXtmdW5jdGlvbiBiKGYsail7dmFyIGc9U3ludGF4SGlnaGxpZ2h0ZXIuTWF0Y2gsaT1mWzBdLGQ9bmV3IFhSZWdFeHAoIigmbHQ7fDwpW1xcc1xcL1xcP10qKD88bmFtZT5bOlxcdy1cXC5dKykiLCJ4ZyIpLmV4ZWMoaSksYz1bXTtpZihmLmF0dHJpYnV0ZXMhPW51bGwpe3ZhciBlLGg9bmV3IFhSZWdFeHAoIig/PG5hbWU+IFtcXHc6XFwtXFwuXSspXFxzKj1cXHMqKD88dmFsdWU+IFwiLio/XCJ8Jy4qPyd8XFx3KykiLCJ4ZyIpO3doaWxlKChlPWguZXhlYyhpKSkhPW51bGwpe2MucHVzaChuZXcgZyhlLm5hbWUsZi5pbmRleCtlLmluZGV4LCJjb2xvcjEiKSk7Yy5wdXNoKG5ldyBnKGUudmFsdWUsZi5pbmRleCtlLmluZGV4K2VbMF0uaW5kZXhPZihlLnZhbHVlKSwic3RyaW5nIikpfX1pZihkIT1udWxsKXtjLnB1c2gobmV3IGcoZC5uYW1lLGYuaW5kZXgrZFswXS5pbmRleE9mKGQubmFtZSksImtleXdvcmQiKSl9cmV0dXJuIGN9dGhpcy5yZWdleExpc3Q9W3tyZWdleDpuZXcgWFJlZ0V4cCgiKFxcJmx0O3w8KVxcIVxcW1tcXHdcXHNdKj9cXFsoLnxcXHMpKj9cXF1cXF0oXFwmZ3Q7fD4pIiwiZ20iKSxjc3M6ImNvbG9yMiJ9LHtyZWdleDpTeW50YXhIaWdobGlnaHRlci5yZWdleExpYi54bWxDb21tZW50cyxjc3M6ImNvbW1lbnRzIn0se3JlZ2V4Om5ldyBYUmVnRXhwKCIoJmx0O3w8KVtcXHNcXC9cXD9dKihcXHcrKSg/PGF0dHJpYnV0ZXM+Lio/KVtcXHNcXC9cXD9dKigmZ3Q7fD4pIiwic2ciKSxmdW5jOmJ9XX1hLnByb3RvdHlwZT1uZXcgU3ludGF4SGlnaGxpZ2h0ZXIuSGlnaGxpZ2h0ZXIoKTthLmFsaWFzZXM9WyJ4bWwiLCJ4aHRtbCIsInhzbHQiLCJodG1sIl07U3ludGF4SGlnaGxpZ2h0ZXIuYnJ1c2hlcy5YbWw9YTt0eXBlb2YoZXhwb3J0cykhPSJ1bmRlZmluZWQiP2V4cG9ydHMuQnJ1c2g9YTpudWxsfSkoKTs=]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/scripts/shCore.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKiAKICogQGNvcHlyaWdodAogKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBBbGV4IEdvcmJhdGNoZXYuCiAqCiAqIEBsaWNlbnNlCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKi8KZXZhbChmdW5jdGlvbihwLGEsYyxrLGUsZCl7ZT1mdW5jdGlvbihjKXtyZXR1cm4oYzxhPycnOmUocGFyc2VJbnQoYy9hKSkpKygoYz1jJWEpPjM1P1N0cmluZy5mcm9tQ2hhckNvZGUoYysyOSk6Yy50b1N0cmluZygzNikpfTtpZighJycucmVwbGFjZSgvXi8sU3RyaW5nKSl7d2hpbGUoYy0tKXtkW2UoYyldPWtbY118fGUoYyl9az1bZnVuY3Rpb24oZSl7cmV0dXJuIGRbZV19XTtlPWZ1bmN0aW9uKCl7cmV0dXJuJ1xcdysnfTtjPTF9O3doaWxlKGMtLSl7aWYoa1tjXSl7cD1wLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxiJytlKGMpKydcXGInLCdnJyksa1tjXSl9fXJldHVybiBwfSgnSyBNO0koTSkxUyAyVSgiMmFcJ3QgNGsgTSA0SyAyZyAzbCA0RyA0SCIpOyg2KCl7NiByKGYsZSl7SSghTS4xUihmKSkxUyAzbSgiM3MgMTUgNFIiKTtLIGE9Zi4xdztmPU0oZi4xbSx0KGYpKyhlfHwiIikpO0koYSlmLjF3PXsxbTphLjFtLDE5OmEuMTk/YS4xOS4xYSgwKTpOfTtIIGZ9NiB0KGYpe0goZi4xSj8iZyI6IiIpKyhmLjRzPyJpIjoiIikrKGYuNHA/Im0iOiIiKSsoZi40dj8ieCI6IiIpKyhmLjNuPyJ5IjoiIil9NiBCKGYsZSxhLGIpe0sgYz11LkwsZCxoLGc7dj1SOzVLe08oO2MtLTspe2c9dVtjXTtJKGEmZy4zciYmKCFnLjJwfHxnLjJwLlcoYikpKXtnLjJxLjEyPWU7SSgoaD1nLjJxLlgoZikpJiZoLlA9PT1lKXtkPXszazpnLjJiLlcoYixoLGEpLDFDOmh9OzFOfX19fTV2KGkpezFTIGl9NXF7dj0xMX1IIGR9NiBwKGYsZSxhKXtJKDNiLlouMWkpSCBmLjFpKGUsYSk7TyhhPWF8fDA7YTxmLkw7YSsrKUkoZlthXT09PWUpSCBhO0gtMX1NPTYoZixlKXtLIGE9W10sYj1NLjFCLGM9MCxkLGg7SShNLjFSKGYpKXtJKGUhPT0xZCkxUyAzbSgiMmFcJ3QgNXIgNUkgNUYgNUIgNUMgMTUgNUUgNXAiKTtIIHIoZil9SSh2KTFTIDJVKCIyYVwndCBXIDNsIE0gNTkgNW0gNWcgNXggNWkiKTtlPWV8fCIiO08oZD17Mk46MTEsMTk6W10sMks6NihnKXtIIGUuMWkoZyk+LTF9LDNkOjYoZyl7ZSs9Z319O2M8Zi5MOylJKGg9QihmLGMsYixkKSl7YS5VKGguM2spO2MrPWguMUNbMF0uTHx8MX1ZIEkoaD1uLlguVyh6W2JdLGYuMWEoYykpKXthLlUoaFswXSk7Yys9aFswXS5MfVl7aD1mLjNhKGMpO0koaD09PSJbIiliPU0uMkk7WSBJKGg9PT0iXSIpYj1NLjFCO2EuVShoKTtjKyt9YT0xNShhLjFLKCIiKSxuLlEuVyhlLHcsIiIpKTthLjF3PXsxbTpmLDE5OmQuMk4/ZC4xOTpOfTtIIGF9O00uM3Y9IjEuNS4wIjtNLjJJPTE7TS4xQj0yO0sgQz0vXFwkKD86KFxcZFxcZD98WyQmYFwnXSl8eyhbJFxcd10rKX0pL2csdz0vW141aF0rfChbXFxzXFxTXSkoPz1bXFxzXFxTXSpcXDEpL2csQT0vXig/Ols/KitdfHtcXGQrKD86LFxcZCopP30pXFw/Py8sdj0xMSx1PVtdLG49e1g6MTUuWi5YLDFBOjE1LlouMUEsMUM6MXIuWi4xQyxROjFyLlouUSwxZToxci5aLjFlfSx4PW4uWC5XKC8oKT8/LywiIilbMV09PT0xZCxEPTYoKXtLIGY9L14vZztuLjFBLlcoZiwiIik7SCFmLjEyfSgpLHk9Nigpe0sgZj0veC9nO24uUS5XKCJ4IixmLCIiKTtIIWYuMTJ9KCksRT0xNS5aLjNuIT09MWQsej17fTt6W00uMkldPS9eKD86XFxcXCg/OlswLTNdWzAtN117MCwyfXxbNC03XVswLTddP3x4W1xcMjktMjYtZl17Mn18dVtcXDI5LTI2LWZdezR9fGNbQS0zby16XXxbXFxzXFxTXSkpLzt6W00uMUJdPS9eKD86XFxcXCg/OjAoPzpbMC0zXVswLTddezAsMn18WzQtN11bMC03XT8pP3xbMS05XVxcZCp8eFtcXDI5LTI2LWZdezJ9fHVbXFwyOS0yNi1mXXs0fXxjW0EtM28tel18W1xcc1xcU10pfFxcKFxcP1s6PSFdfFs/KitdXFw/fHtcXGQrKD86LFxcZCopP31cXD8/KS87TS4xaD02KGYsZSxhLGIpe3UuVSh7MnE6cihmLCJnIisoRT8ieSI6IiIpKSwyYjplLDNyOmF8fE0uMUIsMnA6Ynx8Tn0pfTtNLjJuPTYoZixlKXtLIGE9ZisiLyIrKGV8fCIiKTtIIE0uMm5bYV18fChNLjJuW2FdPU0oZixlKSl9O00uM2M9NihmKXtIIHIoZiwiZyIpfTtNLjVsPTYoZil7SCBmLlEoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCJcXFxcJCYiKX07TS41ZT02KGYsZSxhLGIpe2U9cihlLCJnIisoYiYmRT8ieSI6IiIpKTtlLjEyPWE9YXx8MDtmPWUuWChmKTtIIGI/ZiYmZi5QPT09YT9mOk46Zn07TS4zcT02KCl7TS4xaD02KCl7MVMgMlUoIjJhXCd0IDU1IDFoIDU0IDNxIil9fTtNLjFSPTYoZil7SCA1My5aLjFxLlcoZik9PT0iWzJtIDE1XSJ9O00uM3A9NihmLGUsYSxiKXtPKEsgYz1yKGUsImciKSxkPS0xLGg7aD1jLlgoZik7KXthLlcoYixoLCsrZCxmLGMpO2MuMTI9PT1oLlAmJmMuMTIrK31JKGUuMUopZS4xMj0wfTtNLjU3PTYoZixlKXtIIDYgYShiLGMpe0sgZD1lW2NdLjFJP2VbY106ezFJOmVbY119LGg9cihkLjFJLCJnIiksZz1bXSxpO08oaT0wO2k8Yi5MO2krKylNLjNwKGJbaV0saCw2KGspe2cuVShkLjNqP2tbZC4zal18fCIiOmtbMF0pfSk7SCBjPT09ZS5MLTF8fCFnLkw/ZzphKGcsYysxKX0oW2ZdLDApfTsxNS5aLjFwPTYoZixlKXtIIEouWChlWzBdKX07MTUuWi5XPTYoZixlKXtIIEouWChlKX07MTUuWi5YPTYoZil7SyBlPW4uWC4xcChKLDE0KSxhO0koZSl7SSgheCYmZS5MPjEmJnAoZSwiIik+LTEpe2E9MTUoSi4xbSxuLlEuVyh0KEopLCJnIiwiIikpO24uUS5XKGYuMWEoZS5QKSxhLDYoKXtPKEsgYz0xO2M8MTQuTC0yO2MrKylJKDE0W2NdPT09MWQpZVtjXT0xZH0pfUkoSi4xdyYmSi4xdy4xOSlPKEsgYj0xO2I8ZS5MO2IrKylJKGE9Si4xdy4xOVtiLTFdKWVbYV09ZVtiXTshRCYmSi4xSiYmIWVbMF0uTCYmSi4xMj5lLlAmJkouMTItLX1IIGV9O0koIUQpMTUuWi4xQT02KGYpeyhmPW4uWC5XKEosZikpJiZKLjFKJiYhZlswXS5MJiZKLjEyPmYuUCYmSi4xMi0tO0ghIWZ9OzFyLlouMUM9NihmKXtNLjFSKGYpfHwoZj0xNShmKSk7SShmLjFKKXtLIGU9bi4xQy4xcChKLDE0KTtmLjEyPTA7SCBlfUggZi5YKEopfTsxci5aLlE9NihmLGUpe0sgYT1NLjFSKGYpLGIsYztJKGEmJjFqIGUuNTgoKT09PSIzZiImJmUuMWkoIiR7Iik9PT0tMSYmeSlIIG4uUS4xcChKLDE0KTtJKGEpe0koZi4xdyliPWYuMXcuMTl9WSBmKz0iIjtJKDFqIGU9PT0iNiIpYz1uLlEuVyhKLGYsNigpe0koYil7MTRbMF09MWYgMXIoMTRbMF0pO08oSyBkPTA7ZDxiLkw7ZCsrKUkoYltkXSkxNFswXVtiW2RdXT0xNFtkKzFdfUkoYSYmZi4xSilmLjEyPTE0WzE0LkwtMl0rMTRbMF0uTDtIIGUuMXAoTiwxNCl9KTtZe2M9SisiIjtjPW4uUS5XKGMsZiw2KCl7SyBkPTE0O0ggbi5RLlcoZSxDLDYoaCxnLGkpe0koZyk1YihnKXsyNCIkIjpIIiQiOzI0IiYiOkggZFswXTsyNCJgIjpIIGRbZC5MLTFdLjFhKDAsZFtkLkwtMl0pOzI0IlwnIjpIIGRbZC5MLTFdLjFhKGRbZC5MLTJdK2RbMF0uTCk7NWE6aT0iIjtnPStnO0koIWcpSCBoO08oO2c+ZC5MLTM7KXtpPTFyLlouMWEuVyhnLC0xKStpO2c9MVEuM2koZy8xMCl9SChnP2RbZ118fCIiOiIkIikraX1Ze2c9K2k7SShnPD1kLkwtMylIIGRbZ107Zz1iP3AoYixpKTotMTtIIGc+LTE/ZFtnKzFdOmh9fSl9KX1JKGEmJmYuMUopZi4xMj0wO0ggY307MXIuWi4xZT02KGYsZSl7SSghTS4xUihmKSlIIG4uMWUuMXAoSiwxNCk7SyBhPUorIiIsYj1bXSxjPTAsZCxoO0koZT09PTFkfHwrZTwwKWU9NUQ7WXtlPTFRLjNpKCtlKTtJKCFlKUhbXX1PKGY9TS4zYyhmKTtkPWYuWChhKTspe0koZi4xMj5jKXtiLlUoYS4xYShjLGQuUCkpO2QuTD4xJiZkLlA8YS5MJiYzYi5aLlUuMXAoYixkLjFhKDEpKTtoPWRbMF0uTDtjPWYuMTI7SShiLkw+PWUpMU59Zi4xMj09PWQuUCYmZi4xMisrfUkoYz09PWEuTCl7SSghbi4xQS5XKGYsIiIpfHxoKWIuVSgiIil9WSBiLlUoYS4xYShjKSk7SCBiLkw+ZT9iLjFhKDAsZSk6Yn07TS4xaCgvXFwoXFw/I1teKV0qXFwpLyw2KGYpe0ggbi4xQS5XKEEsZi4yUy4xYShmLlArZlswXS5MKSk/IiI6Iig/OikifSk7TS4xaCgvXFwoKD8hXFw/KS8sNigpe0ouMTkuVShOKTtIIigifSk7TS4xaCgvXFwoXFw/PChbJFxcd10rKT4vLDYoZil7Si4xOS5VKGZbMV0pO0ouMk49UjtIIigifSk7TS4xaCgvXFxcXGs8KFtcXHckXSspPi8sNihmKXtLIGU9cChKLjE5LGZbMV0pO0ggZT4tMT8iXFxcXCIrKGUrMSkrKDNSKGYuMlMuM2EoZi5QK2ZbMF0uTCkpPyIiOiIoPzopIik6ZlswXX0pO00uMWgoL1xcW1xcXj9dLyw2KGYpe0ggZlswXT09PSJbXSI/IlxcXFxiXFxcXEIiOiJbXFxcXHNcXFxcU10ifSk7TS4xaCgvXlxcKFxcPyhbNUFdKylcXCkvLDYoZil7Si4zZChmWzFdKTtIIiJ9KTtNLjFoKC8oPzpcXHMrfCMuKikrLyw2KGYpe0ggbi4xQS5XKEEsZi4yUy4xYShmLlArZlswXS5MKSk/IiI6Iig/OikifSxNLjFCLDYoKXtIIEouMksoIngiKX0pO00uMWgoL1xcLi8sNigpe0giW1xcXFxzXFxcXFNdIn0sTS4xQiw2KCl7SCBKLjJLKCJzIil9KX0pKCk7MWogMmUhPSIxZCImJigyZS5NPU0pO0sgMXY9NigpezYgcihhLGIpe2EuMWwuMWkoYikhPS0xfHwoYS4xbCs9IiAiK2IpfTYgdChhKXtIIGEuMWkoIjNlIik9PTA/YToiM2UiK2F9NiBCKGEpe0ggZS4xWS4yQVt0KGEpXX02IHAoYSxiLGMpe0koYT09TilIIE47SyBkPWMhPVI/YS4zRzpbYS4yR10saD17IiMiOiIxYyIsIi4iOiIxbCJ9W2IuMW8oMCwxKV18fCIzaCIsZyxpO2c9aCE9IjNoIj9iLjFvKDEpOmIuNXUoKTtJKChhW2hdfHwiIikuMWkoZykhPS0xKUggYTtPKGE9MDtkJiZhPGQuTCYmaT09TjthKyspaT1wKGRbYV0sYixjKTtIIGl9NiBDKGEsYil7SyBjPXt9LGQ7TyhkIDJnIGEpY1tkXT1hW2RdO08oZCAyZyBiKWNbZF09YltkXTtIIGN9NiB3KGEsYixjLGQpezYgaChnKXtnPWd8fDFQLjV5O0koIWcuMUYpe2cuMUY9Zy41MjtnLjNOPTYoKXtKLjV3PTExfX1jLlcoZHx8MVAsZyl9YS4zZz9hLjNnKCI0VSIrYixoKTphLjR5KGIsaCwxMSl9NiBBKGEsYil7SyBjPWUuMVkuMmosZD1OO0koYz09Til7Yz17fTtPKEsgaCAyZyBlLjFVKXtLIGc9ZS4xVVtoXTtkPWcuNHg7SShkIT1OKXtnLjFWPWguNHcoKTtPKGc9MDtnPGQuTDtnKyspY1tkW2ddXT1ofX1lLjFZLjJqPWN9ZD1lLjFVW2NbYV1dO2Q9PU4mJmIhPTExJiYxUC4xWChlLjEzLjF4LjFYKyhlLjEzLjF4LjNFK2EpKTtIIGR9NiB2KGEsYil7TyhLIGM9YS4xZSgiXFxuIiksZD0wO2Q8Yy5MO2QrKyljW2RdPWIoY1tkXSxkKTtIIGMuMUsoIlxcbiIpfTYgdShhLGIpe0koYT09Tnx8YS5MPT0wfHxhPT0iXFxuIilIIGE7YT1hLlEoLzwvZywiJjF5OyIpO2E9YS5RKC8gezIsfS9nLDYoYyl7TyhLIGQ9IiIsaD0wO2g8Yy5MLTE7aCsrKWQrPWUuMTMuMVc7SCBkKyIgIn0pO0koYiE9TilhPXYoYSw2KGMpe0koYy5MPT0wKUgiIjtLIGQ9IiI7Yz1jLlEoL14oJjJzO3wgKSsvLDYoaCl7ZD1oO0giIn0pO0koYy5MPT0wKUggZDtIIGQrXCc8MTcgMWc9IlwnK2IrXCciPlwnK2MrIjwvMTc+In0pO0ggYX02IG4oYSxiKXthLjFlKCJcXG4iKTtPKEsgYz0iIixkPTA7ZDw1MDtkKyspYys9IiAgICAgICAgICAgICAgICAgICAgIjtIIGE9dihhLDYoaCl7SShoLjFpKCJcXHQiKT09LTEpSCBoO08oSyBnPTA7KGc9aC4xaSgiXFx0IikpIT0tMTspaD1oLjFvKDAsZykrYy4xbygwLGItZyViKStoLjFvKGcrMSxoLkwpO0ggaH0pfTYgeChhKXtIIGEuUSgvXlxccyt8XFxzKyQvZywiIil9NiBEKGEsYil7SShhLlA8Yi5QKUgtMTtZIEkoYS5QPmIuUClIIDE7WSBJKGEuTDxiLkwpSC0xO1kgSShhLkw+Yi5MKUggMTtIIDB9NiB5KGEsYil7NiBjKGspe0gga1swXX1PKEsgZD1OLGg9W10sZz1iLjJEP2IuMkQ6YzsoZD1iLjFJLlgoYSkpIT1OOyl7SyBpPWcoZCxiKTtJKDFqIGk9PSIzZiIpaT1bMWYgZS4yTChpLGQuUCxiLjIzKV07aD1oLjFPKGkpfUggaH02IEUoYSl7SyBiPS8oLiopKCgmMUc7fCYxeTspLiopLztIIGEuUShlLjNBLjNNLDYoYyl7SyBkPSIiLGg9TjtJKGg9Yi5YKGMpKXtjPWhbMV07ZD1oWzJdfUhcJzxhIDJoPSJcJytjK1wnIj5cJytjKyI8L2E+IitkfSl9NiB6KCl7TyhLIGE9MUUuMzYoIjFrIiksYj1bXSxjPTA7YzxhLkw7YysrKWFbY10uM3M9PSIyMCImJmIuVShhW2NdKTtIIGJ9NiBmKGEpe2E9YS4xRjtLIGI9cChhLCIuMjAiLFIpO2E9cChhLCIuM08iLFIpO0sgYz0xRS40aSgiM3QiKTtJKCEoIWF8fCFifHxwKGEsIjN0IikpKXtCKGIuMWMpO3IoYiwiMW0iKTtPKEsgZD1hLjNHLGg9W10sZz0wO2c8ZC5MO2crKyloLlUoZFtnXS40enx8ZFtnXS40QSk7aD1oLjFLKCJcXHIiKTtjLjM5KDFFLjREKGgpKTthLjM5KGMpO2MuMkMoKTtjLjRDKCk7dyhjLCI0dSIsNigpe2MuMkcuNEUoYyk7Yi4xbD1iLjFsLlEoIjFtIiwiIil9KX19SSgxaiAzRiE9IjFkIiYmMWogTT09IjFkIilNPTNGKCJNIikuTTtLIGU9ezJ2OnsiMWctMjciOiIiLCIyaS0xcyI6MSwiMnotMXMtMnQiOjExLDFNOk4sMXQ6TiwiNDItNDUiOlIsIjQzLTIyIjo0LDF1OlIsMTY6UiwiM1YtMTciOlIsMmw6MTEsIjQxLTQwIjpSLDJrOjExLCIxei0xayI6MTF9LDEzOnsxVzoiJjJzOyIsMk06Uiw0NjoxMSw0NDoxMSwzNDoiNG4iLDF4OnsyMToiNG8gMW0iLDJQOiI/IiwxWDoiMXZcXG5cXG4iLDNFOiI0clwndCA0dCAxRCBPOiAiLDRnOiI0bSA0QlwndCA1MSBPIDF6LTFrIDRGOiAiLDM3OlwnPCE0VCAxeiA0UyAiLS8vNFYvLzNIIDRXIDEuMCA0Wi8vNFkiICIxWjovLzJ5LjNMLjNLLzRYLzNJLzNILzNJLTRQLjRKIj48MXogNEk9IjFaOi8vMnkuM0wuM0svNEwvNUwiPjwzSj48NE4gMVotNE09IjVHLTVNIiA2Sz0iMk8vMXo7IDZKPTZJLTgiIC8+PDF0PjZMIDF2PC8xdD48LzNKPjwzQiAxTD0iMjUtNk06NlEsNlAsNk8sNk4tNkY7NnktMmY6IzZ4OzJmOiM2dzsyNS0yMjo2djsyTy0zRDozQzsiPjxUIDFMPSIyTy0zRDozQzszdy0zMjoxLjZ6OyI+PFQgMUw9IjI1LTIyOjZBLTZFOyI+MXY8L1Q+PFQgMUw9IjI1LTIyOi42Qzszdy02Qjo2UjsiPjxUPjN2IDMuMC43NiAoNzIgNzMgM3gpPC9UPjxUPjxhIDJoPSIxWjovLzN1LjJ3LzF2IiAxRj0iMzgiIDFMPSIyZjojM3kiPjFaOi8vM3UuMncvMXY8L2E+PC9UPjxUPjcwIDE3IDZVIDcxLjwvVD48VD42VCA2WC0zeCA2WSA2RC48L1Q+PC9UPjxUPjZ0IDYxIDYwIEogMWssIDVaIDxhIDJoPSI2dTovLzJ5LjYyLjJ3LzYzLTY2LzY1PzY0PTVYLTVXJjVQPTVPIiAxTD0iMmY6IzN5Ij41UjwvYT4gNVYgPDJSLz41VSA1VCA1UyE8L1Q+PC9UPjwvM0I+PC8xej5cJ319LDFZOnsyajpOLDJBOnt9fSwxVTp7fSwzQTp7Nm46L1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vMmMsNm06L1xcL1xcLy4qJC8yYyw2bDovIy4qJC8yYyw2azovIihbXlxcXFwiXFxuXXxcXFxcLikqIi9nLDZvOi9cJyhbXlxcXFxcJ1xcbl18XFxcXC4pKlwnL2csNnA6MWYgTShcJyIoW15cXFxcXFxcXCJdfFxcXFxcXFxcLikqIlwnLCIzeiIpLDZzOjFmIE0oIlwnKFteXFxcXFxcXFxcJ118XFxcXFxcXFwuKSpcJyIsIjN6IiksNnE6LygmMXk7fDwpIS0tW1xcc1xcU10qPy0tKCYxRzt8PikvMmMsM006L1xcdys6XFwvXFwvW1xcdy0uXFwvPyUmPTpAO10qL2csNmE6ezE4Oi8oJjF5O3w8KVxcPz0/L2csMWI6L1xcPygmMUc7fD4pL2d9LDY5OnsxODovKCYxeTt8PCklPT8vZywxYjovJSgmMUc7fD4pL2d9LDZkOnsxODovKCYxeTt8PClcXHMqMWsuKj8oJjFHO3w+KS8yVCwxYjovKCYxeTt8PClcXC9cXHMqMWtcXHMqKCYxRzt8PikvMlR9fSwxNjp7MUg6NihhKXs2IGIoaSxrKXtIIGUuMTYuMm8oaSxrLGUuMTMuMXhba10pfU8oSyBjPVwnPFQgMWc9IjE2Ij5cJyxkPWUuMTYuMngsaD1kLjJYLGc9MDtnPGguTDtnKyspYys9KGRbaFtnXV0uMUh8fGIpKGEsaFtnXSk7Yys9IjwvVD4iO0ggY30sMm86NihhLGIsYyl7SFwnPDJXPjxhIDJoPSIjIiAxZz0iNmUgNmhcJytiKyIgIitiK1wnIj5cJytjKyI8L2E+PC8yVz4ifSwyYjo2KGEpe0sgYj1hLjFGLGM9Yi4xbHx8IiI7Yj1CKHAoYiwiLjIwIixSKS4xYyk7SyBkPTYoaCl7SChoPTE1KGgrIjZmKFxcXFx3KykiKS5YKGMpKT9oWzFdOk59KCI2ZyIpO2ImJmQmJmUuMTYuMnhbZF0uMkIoYik7YS4zTigpfSwyeDp7Mlg6WyIyMSIsIjJQIl0sMjE6ezFIOjYoYSl7SShhLlYoIjJsIikhPVIpSCIiO0sgYj1hLlYoIjF0Iik7SCBlLjE2LjJvKGEsIjIxIixiP2I6ZS4xMy4xeC4yMSl9LDJCOjYoYSl7YT0xRS42aih0KGEuMWMpKTthLjFsPWEuMWwuUSgiNDciLCIiKX19LDJQOnsyQjo2KCl7SyBhPSI2OD0wIjthKz0iLCAxOD0iKygzMS4zMC0zMykvMisiLCAzMj0iKygzMS4yWi0yWSkvMisiLCAzMD0zMywgMlo9MlkiO2E9YS5RKC9eLC8sIiIpO2E9MVAuNlooIiIsIjM4IixhKTthLjJDKCk7SyBiPWEuMUU7Yi42VyhlLjEzLjF4LjM3KTtiLjZWKCk7YS4yQygpfX19fSwzNTo2KGEsYil7SyBjO0koYiljPVtiXTtZe2M9MUUuMzYoZS4xMy4zNCk7TyhLIGQ9W10saD0wO2g8Yy5MO2grKylkLlUoY1toXSk7Yz1kfWM9YztkPVtdO0koZS4xMy4yTSljPWMuMU8oeigpKTtJKGMuTD09PTApSCBkO08oaD0wO2g8Yy5MO2grKyl7TyhLIGc9Y1toXSxpPWEsaz1jW2hdLjFsLGo9M1cgMCxsPXt9LG09MWYgTSgiXlxcXFxbKD88MlY+KC4qPykpXFxcXF0kIikscz0xZiBNKCIoPzwyNz5bXFxcXHctXSspXFxcXHMqOlxcXFxzKig/PDFUPltcXFxcdy0lI10rfFxcXFxbLio/XFxcXF18XFwiLio/XFwifFwnLio/XCcpXFxcXHMqOz8iLCJnIik7KGo9cy5YKGspKSE9Tjspe0sgbz1qLjFULlEoL15bXCciXXxbXCciXSQvZywiIik7SShvIT1OJiZtLjFBKG8pKXtvPW0uWChvKTtvPW8uMlYuTD4wP28uMlYuMWUoL1xccyosXFxzKi8pOltdfWxbai4yN109b31nPXsxRjpnLDFuOkMoaSxsKX07Zy4xbi4xRCE9TiYmZC5VKGcpfUggZH0sMU06NihhLGIpe0sgYz1KLjM1KGEsYiksZD1OLGg9ZS4xMztJKGMuTCE9PTApTyhLIGc9MDtnPGMuTDtnKyspe2I9Y1tnXTtLIGk9Yi4xRixrPWIuMW4saj1rLjFELGw7SShqIT1OKXtJKGtbIjF6LTFrIl09PSJSInx8ZS4ydlsiMXotMWsiXT09Uil7ZD0xZiBlLjRsKGopO2o9IjRPIn1ZIEkoZD1BKGopKWQ9MWYgZDtZIDZIO2w9aS4zWDtJKGguMk0pe2w9bDtLIG09eChsKSxzPTExO0kobS4xaSgiPCFbNkdbIik9PTApe209bS40aCg5KTtzPVJ9SyBvPW0uTDtJKG0uMWkoIl1dXFw+Iik9PW8tMyl7bT1tLjRoKDAsby0zKTtzPVJ9bD1zP206bH1JKChpLjF0fHwiIikhPSIiKWsuMXQ9aS4xdDtrLjFEPWo7ZC4yUShrKTtiPWQuMkYobCk7SSgoaS4xY3x8IiIpIT0iIiliLjFjPWkuMWM7aS4yRy43NChiLGkpfX19LDJFOjYoYSl7dygxUCwiNGsiLDYoKXtlLjFNKGEpfSl9fTtlLjJFPWUuMkU7ZS4xTT1lLjFNO2UuMkw9NihhLGIsYyl7Si4xVD1hO0ouUD1iO0ouTD1hLkw7Si4yMz1jO0ouMVY9Tn07ZS4yTC5aLjFxPTYoKXtIIEouMVR9O2UuNGw9NihhKXs2IGIoaixsKXtPKEsgbT0wO208ai5MO20rKylqW21dLlArPWx9SyBjPUEoYSksZCxoPTFmIGUuMVUuNVksZz1KLGk9IjJGIDFIIDJRIi4xZSgiICIpO0koYyE9Til7ZD0xZiBjO08oSyBrPTA7azxpLkw7aysrKSg2KCl7SyBqPWlba107Z1tqXT02KCl7SCBoW2pdLjFwKGgsMTQpfX0pKCk7ZC4yOD09Tj8xUC4xWChlLjEzLjF4LjFYKyhlLjEzLjF4LjRnK2EpKTpoLjJKLlUoezFJOmQuMjguMTcsMkQ6NihqKXtPKEsgbD1qLjE3LG09W10scz1kLjJKLG89ai5QK2ouMTguTCxGPWQuMjgscSxHPTA7RzxzLkw7RysrKXtxPXkobCxzW0ddKTtiKHEsbyk7bT1tLjFPKHEpfUkoRi4xOCE9TiYmai4xOCE9Til7cT15KGouMTgsRi4xOCk7YihxLGouUCk7bT1tLjFPKHEpfUkoRi4xYiE9TiYmai4xYiE9Til7cT15KGouMWIsRi4xYik7YihxLGouUCtqWzBdLjVRKGouMWIpKTttPW0uMU8ocSl9TyhqPTA7ajxtLkw7aisrKW1bal0uMVY9Yy4xVjtIIG19fSl9fTtlLjRqPTYoKXt9O2UuNGouWj17Vjo2KGEsYil7SyBjPUouMW5bYV07Yz1jPT1OP2I6YztLIGQ9eyJSIjpSLCIxMSI6MTF9W2NdO0ggZD09Tj9jOmR9LDNZOjYoYSl7SCAxRS40aShhKX0sNGM6NihhLGIpe0sgYz1bXTtJKGEhPU4pTyhLIGQ9MDtkPGEuTDtkKyspSSgxaiBhW2RdPT0iMm0iKWM9Yy4xTyh5KGIsYVtkXSkpO0ggSi40ZShjLjZiKEQpKX0sNGU6NihhKXtPKEsgYj0wO2I8YS5MO2IrKylJKGFbYl0hPT1OKU8oSyBjPWFbYl0sZD1jLlArYy5MLGg9YisxO2g8YS5MJiZhW2JdIT09TjtoKyspe0sgZz1hW2hdO0koZyE9PU4pSShnLlA+ZCkxTjtZIEkoZy5QPT1jLlAmJmcuTD5jLkwpYVtiXT1OO1kgSShnLlA+PWMuUCYmZy5QPGQpYVtoXT1OfUggYX0sNGQ6NihhKXtLIGI9W10sYz0ydShKLlYoIjJpLTFzIikpO3YoYSw2KGQsaCl7Yi5VKGgrYyl9KTtIIGJ9LDNVOjYoYSl7SyBiPUouVigiMU0iLFtdKTtJKDFqIGIhPSIybSImJmIuVT09TiliPVtiXTthOnthPWEuMXEoKTtLIGM9M1cgMDtPKGM9Yz0xUS42YyhjfHwwLDApO2M8Yi5MO2MrKylJKGJbY109PWEpe2I9YzsxTiBhfWI9LTF9SCBiIT0tMX0sMnI6NihhLGIsYyl7YT1bIjFzIiwiNmkiK2IsIlAiK2EsIjZyIisoYiUyPT0wPzE6MikuMXEoKV07Si4zVShiKSYmYS5VKCI2NyIpO2I9PTAmJmEuVSgiMU4iKTtIXCc8VCAxZz0iXCcrYS4xSygiICIpK1wnIj5cJytjKyI8L1Q+In0sM1E6NihhLGIpe0sgYz0iIixkPWEuMWUoIlxcbiIpLkwsaD0ydShKLlYoIjJpLTFzIikpLGc9Si5WKCIyei0xcy0ydCIpO0koZz09UilnPShoK2QtMSkuMXEoKS5MO1kgSSgzUihnKT09UilnPTA7TyhLIGk9MDtpPGQ7aSsrKXtLIGs9Yj9iW2ldOmgraSxqO0koaz09MClqPWUuMTMuMVc7WXtqPWc7TyhLIGw9ay4xcSgpO2wuTDxqOylsPSIwIitsO2o9bH1hPWo7Yys9Si4ycihpLGssYSl9SCBjfSw0OTo2KGEsYil7YT14KGEpO0sgYz1hLjFlKCJcXG4iKTtKLlYoIjJ6LTFzLTJ0Iik7SyBkPTJ1KEouVigiMmktMXMiKSk7YT0iIjtPKEsgaD1KLlYoIjFEIiksZz0wO2c8Yy5MO2crKyl7SyBpPWNbZ10saz0vXigmMnM7fFxccykrLy5YKGkpLGo9TixsPWI/YltnXTpkK2c7SShrIT1OKXtqPWtbMF0uMXEoKTtpPWkuMW8oai5MKTtqPWouUSgiICIsZS4xMy4xVyl9aT14KGkpO0koaS5MPT0wKWk9ZS4xMy4xVzthKz1KLjJyKGcsbCwoaiE9Tj9cJzwxNyAxZz0iXCcraCtcJyA1TiI+XCcraisiPC8xNz4iOiIiKStpKX1IIGF9LDRmOjYoYSl7SCBhPyI8NGE+IithKyI8LzRhPiI6IiJ9LDRiOjYoYSxiKXs2IGMobCl7SChsPWw/bC4xVnx8ZzpnKT9sKyIgIjoiIn1PKEsgZD0wLGg9IiIsZz1KLlYoIjFEIiwiIiksaT0wO2k8Yi5MO2krKyl7SyBrPWJbaV0sajtJKCEoaz09PU58fGsuTD09PTApKXtqPWMoayk7aCs9dShhLjFvKGQsay5QLWQpLGorIjQ4IikrdShrLjFULGoray4yMyk7ZD1rLlAray5MKyhrLjc1fHwwKX19aCs9dShhLjFvKGQpLGMoKSsiNDgiKTtIIGh9LDFIOjYoYSl7SyBiPSIiLGM9WyIyMCJdLGQ7SShKLlYoIjJrIik9PVIpSi4xbi4xNj1KLjFuLjF1PTExOzFsPSIyMCI7Si5WKCIybCIpPT1SJiZjLlUoIjQ3Iik7SSgoMXU9Si5WKCIxdSIpKT09MTEpYy5VKCI2UyIpO2MuVShKLlYoIjFnLTI3IikpO2MuVShKLlYoIjFEIikpO2E9YS5RKC9eWyBdKltcXG5dK3xbXFxuXSpbIF0qJC9nLCIiKS5RKC9cXHIvZywiICIpO2I9Si5WKCI0My0yMiIpO0koSi5WKCI0Mi00NSIpPT1SKWE9bihhLGIpO1l7TyhLIGg9IiIsZz0wO2c8YjtnKyspaCs9IiAiO2E9YS5RKC9cXHQvZyxoKX1hPWE7YTp7Yj1hPWE7aD0vPDJSXFxzKlxcLz8+fCYxeTsyUlxccypcXC8/JjFHOy8yVDtJKGUuMTMuNDY9PVIpYj1iLlEoaCwiXFxuIik7SShlLjEzLjQ0PT1SKWI9Yi5RKGgsIiIpO2I9Yi4xZSgiXFxuIik7aD0vXlxccyovO2c9NFE7TyhLIGk9MDtpPGIuTCYmZz4wO2krKyl7SyBrPWJbaV07SSh4KGspLkwhPTApe2s9aC5YKGspO0koaz09Til7YT1hOzFOIGF9Zz0xUS40cShrWzBdLkwsZyl9fUkoZz4wKU8oaT0wO2k8Yi5MO2krKyliW2ldPWJbaV0uMW8oZyk7YT1iLjFLKCJcXG4iKX1JKDF1KWQ9Si40ZChhKTtiPUouNGMoSi4ySixhKTtiPUouNGIoYSxiKTtiPUouNDkoYixkKTtJKEouVigiNDEtNDAiKSliPUUoYik7MWogMkghPSIxZCImJjJILjNTJiYySC4zUy4xQygvNXMvKSYmYy5VKCI1dCIpO0ggYj1cJzxUIDFjPSJcJyt0KEouMWMpK1wnIiAxZz0iXCcrYy4xSygiICIpK1wnIj5cJysoSi5WKCIxNiIpP2UuMTYuMUgoSik6IiIpK1wnPDNaIDV6PSIwIiA1SD0iMCIgNUo9IjAiPlwnK0ouNGYoSi5WKCIxdCIpKSsiPDNUPjwzUD4iKygxdT9cJzwyZCAxZz0iMXUiPlwnK0ouM1EoYSkrIjwvMmQ+IjoiIikrXCc8MmQgMWc9IjE3Ij48VCAxZz0iM08iPlwnK2IrIjwvVD48LzJkPjwvM1A+PC8zVD48LzNaPjwvVD4ifSwyRjo2KGEpe0koYT09PU4pYT0iIjtKLjE3PWE7SyBiPUouM1koIlQiKTtiLjNYPUouMUgoYSk7Si5WKCIxNiIpJiZ3KHAoYiwiLjE2IiksIjVjIixlLjE2LjJiKTtKLlYoIjNWLTE3IikmJncocChiLCIuMTciKSwiNTYiLGYpO0ggYn0sMlE6NihhKXtKLjFjPSIiKzFRLjVkKDFRLjVuKCkqNWspLjFxKCk7ZS4xWS4yQVt0KEouMWMpXT1KO0ouMW49QyhlLjJ2LGF8fHt9KTtJKEouVigiMmsiKT09UilKLjFuLjE2PUouMW4uMXU9MTF9LDVqOjYoYSl7YT1hLlEoL15cXHMrfFxccyskL2csIiIpLlEoL1xccysvZywifCIpO0giXFxcXGIoPzoiK2ErIilcXFxcYiJ9LDVmOjYoYSl7Si4yOD17MTg6ezFJOmEuMTgsMjM6IjFrIn0sMWI6ezFJOmEuMWIsMjM6IjFrIn0sMTc6MWYgTSgiKD88MTg+IithLjE4LjFtKyIpKD88MTc+Lio/KSg/PDFiPiIrYS4xYi4xbSsiKSIsIjVvIil9fX07SCBlfSgpOzFqIDJlIT0iMWQiJiYoMmUuMXY9MXYpOycsNjIsNDQxLCd8fHx8fHxmdW5jdGlvbnx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHxyZXR1cm58aWZ8dGhpc3x2YXJ8bGVuZ3RofFhSZWdFeHB8bnVsbHxmb3J8aW5kZXh8cmVwbGFjZXx0cnVlfHxkaXZ8cHVzaHxnZXRQYXJhbXxjYWxsfGV4ZWN8ZWxzZXxwcm90b3R5cGV8fGZhbHNlfGxhc3RJbmRleHxjb25maWd8YXJndW1lbnRzfFJlZ0V4cHx0b29sYmFyfGNvZGV8bGVmdHxjYXB0dXJlTmFtZXN8c2xpY2V8cmlnaHR8aWR8dW5kZWZpbmVkfHNwbGl0fG5ld3xjbGFzc3xhZGRUb2tlbnxpbmRleE9mfHR5cGVvZnxzY3JpcHR8Y2xhc3NOYW1lfHNvdXJjZXxwYXJhbXN8c3Vic3RyfGFwcGx5fHRvU3RyaW5nfFN0cmluZ3xsaW5lfHRpdGxlfGd1dHRlcnxTeW50YXhIaWdobGlnaHRlcnxfeHJlZ2V4cHxzdHJpbmdzfGx0fGh0bWx8dGVzdHxPVVRTSURFX0NMQVNTfG1hdGNofGJydXNofGRvY3VtZW50fHRhcmdldHxndHxnZXRIdG1sfHJlZ2V4fGdsb2JhbHxqb2lufHN0eWxlfGhpZ2hsaWdodHxicmVha3xjb25jYXR8d2luZG93fE1hdGh8aXNSZWdFeHB8dGhyb3d8dmFsdWV8YnJ1c2hlc3xicnVzaE5hbWV8c3BhY2V8YWxlcnR8dmFyc3xodHRwfHN5bnRheGhpZ2hsaWdodGVyfGV4cGFuZFNvdXJjZXxzaXplfGNzc3xjYXNlfGZvbnR8RmF8bmFtZXxodG1sU2NyaXB0fGRBfGNhbnxoYW5kbGVyfGdtfHRkfGV4cG9ydHN8Y29sb3J8aW58aHJlZnxmaXJzdHxkaXNjb3ZlcmVkQnJ1c2hlc3xsaWdodHxjb2xsYXBzZXxvYmplY3R8Y2FjaGV8Z2V0QnV0dG9uSHRtbHx0cmlnZ2VyfHBhdHRlcm58Z2V0TGluZUh0bWx8bmJzcHxudW1iZXJzfHBhcnNlSW50fGRlZmF1bHRzfGNvbXxpdGVtc3x3d3d8cGFkfGhpZ2hsaWdodGVyc3xleGVjdXRlfGZvY3VzfGZ1bmN8YWxsfGdldERpdnxwYXJlbnROb2RlfG5hdmlnYXRvcnxJTlNJREVfQ0xBU1N8cmVnZXhMaXN0fGhhc0ZsYWd8TWF0Y2h8dXNlU2NyaXB0VGFnc3xoYXNOYW1lZENhcHR1cmV8dGV4dHxoZWxwfGluaXR8YnJ8aW5wdXR8Z2l8RXJyb3J8dmFsdWVzfHNwYW58bGlzdHwyNTB8aGVpZ2h0fHdpZHRofHNjcmVlbnx0b3B8NTAwfHRhZ05hbWV8ZmluZEVsZW1lbnRzfGdldEVsZW1lbnRzQnlUYWdOYW1lfGFib3V0RGlhbG9nfF9ibGFua3xhcHBlbmRDaGlsZHxjaGFyQXR8QXJyYXl8Y29weUFzR2xvYmFsfHNldEZsYWd8aGlnaGxpZ2h0ZXJffHN0cmluZ3xhdHRhY2hFdmVudHxub2RlTmFtZXxmbG9vcnxiYWNrcmVmfG91dHB1dHx0aGV8VHlwZUVycm9yfHN0aWNreXxaYXxpdGVyYXRlfGZyZWV6ZVRva2Vuc3xzY29wZXx0eXBlfHRleHRhcmVhfGFsZXhnb3JiYXRjaGV2fHZlcnNpb258bWFyZ2lufDIwMTB8MDA1ODk2fGdzfHJlZ2V4TGlifGJvZHl8Y2VudGVyfGFsaWdufG5vQnJ1c2h8cmVxdWlyZXxjaGlsZE5vZGVzfERURHx4aHRtbDF8aGVhZHxvcmd8dzN8dXJsfHByZXZlbnREZWZhdWx0fGNvbnRhaW5lcnx0cnxnZXRMaW5lTnVtYmVyc0h0bWx8aXNOYU58dXNlckFnZW50fHRib2R5fGlzTGluZUhpZ2hsaWdodGVkfHF1aWNrfHZvaWR8aW5uZXJIVE1MfGNyZWF0ZXx0YWJsZXxsaW5rc3xhdXRvfHNtYXJ0fHRhYnxzdHJpcEJyc3x0YWJzfGJsb2dnZXJNb2RlfGNvbGxhcHNlZHxwbGFpbnxnZXRDb2RlTGluZXNIdG1sfGNhcHRpb258Z2V0TWF0Y2hlc0h0bWx8ZmluZE1hdGNoZXN8ZmlndXJlT3V0TGluZU51bWJlcnN8cmVtb3ZlTmVzdGVkTWF0Y2hlc3xnZXRUaXRsZUh0bWx8YnJ1c2hOb3RIdG1sU2NyaXB0fHN1YnN0cmluZ3xjcmVhdGVFbGVtZW50fEhpZ2hsaWdodGVyfGxvYWR8SHRtbFNjcmlwdHxCcnVzaHxwcmV8ZXhwYW5kfG11bHRpbGluZXxtaW58Q2FufGlnbm9yZUNhc2V8ZmluZHxibHVyfGV4dGVuZGVkfHRvTG93ZXJDYXNlfGFsaWFzZXN8YWRkRXZlbnRMaXN0ZW5lcnxpbm5lclRleHR8dGV4dENvbnRlbnR8d2FzbnxzZWxlY3R8Y3JlYXRlVGV4dE5vZGV8cmVtb3ZlQ2hpbGR8b3B0aW9ufHNhbWV8ZnJhbWV8eG1sbnN8ZHRkfHR3aWNlfDE5OTl8ZXF1aXZ8bWV0YXxodG1sc2NyaXB0fHRyYW5zaXRpb25hbHwxRTN8ZXhwZWN0ZWR8UFVCTElDfERPQ1RZUEV8b258VzNDfFhIVE1MfFRSfEVOfFRyYW5zaXRpb25hbHx8Y29uZmlndXJlZHxzcmNFbGVtZW50fE9iamVjdHxhZnRlcnxydW58ZGJsY2xpY2t8bWF0Y2hDaGFpbnx2YWx1ZU9mfGNvbnN0cnVjdG9yfGRlZmF1bHR8c3dpdGNofGNsaWNrfHJvdW5kfGV4ZWNBdHxmb3JIdG1sU2NyaXB0fHRva2VufGdpbXl8ZnVuY3Rpb25zfGdldEtleXdvcmRzfDFFNnxlc2NhcGV8d2l0aGlufHJhbmRvbXxzZ2l8YW5vdGhlcnxmaW5hbGx5fHN1cHBseXxNU0lFfGllfHRvVXBwZXJDYXNlfGNhdGNofHJldHVyblZhbHVlfGRlZmluaXRpb258ZXZlbnR8Ym9yZGVyfGltc3h8Y29uc3RydWN0aW5nfG9uZXxJbmZpbml0eXxmcm9tfHdoZW58Q29udGVudHxjZWxscGFkZGluZ3xmbGFnc3xjZWxsc3BhY2luZ3x0cnl8eGh0bWx8VHlwZXxzcGFjZXN8MjkzMDQwMnxob3N0ZWRfYnV0dG9uX2lkfGxhc3RJbmRleE9mfGRvbmF0ZXxhY3RpdmV8ZGV2ZWxvcG1lbnR8a2VlcHx0b3x4Y2xpY2t8X3N8WG1sfHBsZWFzZXxsaWtlfHlvdXxwYXlwYWx8Y2dpfGNtZHx3ZWJzY3J8YmlufGhpZ2hsaWdodGVkfHNjcm9sbGJhcnN8YXNwU2NyaXB0VGFnc3xwaHBTY3JpcHRUYWdzfHNvcnR8bWF4fHNjcmlwdFNjcmlwdFRhZ3N8dG9vbGJhcl9pdGVtfF98Y29tbWFuZHxjb21tYW5kX3xudW1iZXJ8Z2V0RWxlbWVudEJ5SWR8ZG91YmxlUXVvdGVkU3RyaW5nfHNpbmdsZUxpbmVQZXJsQ29tbWVudHN8c2luZ2xlTGluZUNDb21tZW50c3xtdWx0aUxpbmVDQ29tbWVudHN8c2luZ2xlUXVvdGVkU3RyaW5nfG11bHRpTGluZURvdWJsZVF1b3RlZFN0cmluZ3x4bWxDb21tZW50c3xhbHR8bXVsdGlMaW5lU2luZ2xlUXVvdGVkU3RyaW5nfElmfGh0dHBzfDFlbXwwMDB8ZmZmfGJhY2tncm91bmR8NWVtfHh4fGJvdHRvbXw3NWVtfEdvcmJhdGNoZXZ8bGFyZ2V8c2VyaWZ8Q0RBVEF8Y29udGludWV8dXRmfGNoYXJzZXR8Y29udGVudHxBYm91dHxmYW1pbHl8c2Fuc3xIZWx2ZXRpY2F8QXJpYWx8R2VuZXZhfDNlbXxub2d1dHRlcnxDb3B5cmlnaHR8c3ludGF4fGNsb3NlfHdyaXRlfDIwMDR8QWxleHxvcGVufEphdmFTY3JpcHR8aGlnaGxpZ2h0ZXJ8SnVseXwwMnxyZXBsYWNlQ2hpbGR8b2Zmc2V0fDgzJy5zcGxpdCgnfCcpLDAse30pKQo=]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/scripts/shCore.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZXZhbChmdW5jdGlvbihoLGIsaixmLGcsaSl7Zz1mdW5jdGlvbihhKXtyZXR1cm4oYTxiPyIiOmcocGFyc2VJbnQoYS9iKSkpKygoYT1hJWIpPjM1P1N0cmluZy5mcm9tQ2hhckNvZGUoYSsyOSk6YS50b1N0cmluZygzNikpfTtpZighIiIucmVwbGFjZSgvXi8sU3RyaW5nKSl7d2hpbGUoai0tKXtpW2coaildPWZbal18fGcoail9Zj1bZnVuY3Rpb24oYSl7cmV0dXJuIGlbYV19XTtnPWZ1bmN0aW9uKCl7cmV0dXJuIlxcdysifTtqPTF9d2hpbGUoai0tKXtpZihmW2pdKXtoPWgucmVwbGFjZShuZXcgUmVnRXhwKCJcXGIiK2coaikrIlxcYiIsImciKSxmW2pdKX19cmV0dXJuIGh9KCdLIE07SShNKTFTIDJVKCIyYVwndCA0ayBNIDRLIDJnIDNsIDRHIDRIIik7KDYoKXs2IHIoZixlKXtJKCFNLjFSKGYpKTFTIDNtKCIzcyAxNSA0UiIpO0sgYT1mLjF3O2Y9TShmLjFtLHQoZikrKGV8fCIiKSk7SShhKWYuMXc9ezFtOmEuMW0sMTk6YS4xOT9hLjE5LjFhKDApOk59O0ggZn02IHQoZil7SChmLjFKPyJnIjoiIikrKGYuNHM/ImkiOiIiKSsoZi40cD8ibSI6IiIpKyhmLjR2PyJ4IjoiIikrKGYuM24/InkiOiIiKX02IEIoZixlLGEsYil7SyBjPXUuTCxkLGgsZzt2PVI7NUt7Tyg7Yy0tOyl7Zz11W2NdO0koYSZnLjNyJiYoIWcuMnB8fGcuMnAuVyhiKSkpe2cuMnEuMTI9ZTtJKChoPWcuMnEuWChmKSkmJmguUD09PWUpe2Q9ezNrOmcuMmIuVyhiLGgsYSksMUM6aH07MU59fX19NXYoaSl7MVMgaX01cXt2PTExfUggZH02IHAoZixlLGEpe0koM2IuWi4xaSlIIGYuMWkoZSxhKTtPKGE9YXx8MDthPGYuTDthKyspSShmW2FdPT09ZSlIIGE7SC0xfU09NihmLGUpe0sgYT1bXSxiPU0uMUIsYz0wLGQsaDtJKE0uMVIoZikpe0koZSE9PTFkKTFTIDNtKCIyYVwndCA1ciA1SSA1RiA1QiA1QyAxNSA1RSA1cCIpO0ggcihmKX1JKHYpMVMgMlUoIjJhXCd0IFcgM2wgTSA1OSA1bSA1ZyA1eCA1aSIpO2U9ZXx8IiI7TyhkPXsyTjoxMSwxOTpbXSwySzo2KGcpe0ggZS4xaShnKT4tMX0sM2Q6NihnKXtlKz1nfX07YzxmLkw7KUkoaD1CKGYsYyxiLGQpKXthLlUoaC4zayk7Yys9aC4xQ1swXS5MfHwxfVkgSShoPW4uWC5XKHpbYl0sZi4xYShjKSkpe2EuVShoWzBdKTtjKz1oWzBdLkx9WXtoPWYuM2EoYyk7SShoPT09IlsiKWI9TS4ySTtZIEkoaD09PSJdIiliPU0uMUI7YS5VKGgpO2MrK31hPTE1KGEuMUsoIiIpLG4uUS5XKGUsdywiIikpO2EuMXc9ezFtOmYsMTk6ZC4yTj9kLjE5Ok59O0ggYX07TS4zdj0iMS41LjAiO00uMkk9MTtNLjFCPTI7SyBDPS9cXCQoPzooXFxkXFxkP3xbJCZgXCddKXx7KFskXFx3XSspfSkvZyx3PS9bXjVoXSt8KFtcXHNcXFNdKSg/PVtcXHNcXFNdKlxcMSkvZyxBPS9eKD86Wz8qK118e1xcZCsoPzosXFxkKik/fSlcXD8/Lyx2PTExLHU9W10sbj17WDoxNS5aLlgsMUE6MTUuWi4xQSwxQzoxci5aLjFDLFE6MXIuWi5RLDFlOjFyLlouMWV9LHg9bi5YLlcoLygpPz8vLCIiKVsxXT09PTFkLEQ9Nigpe0sgZj0vXi9nO24uMUEuVyhmLCIiKTtIIWYuMTJ9KCkseT02KCl7SyBmPS94L2c7bi5RLlcoIngiLGYsIiIpO0ghZi4xMn0oKSxFPTE1LlouM24hPT0xZCx6PXt9O3pbTS4ySV09L14oPzpcXFxcKD86WzAtM11bMC03XXswLDJ9fFs0LTddWzAtN10/fHhbXFwyOS0yNi1mXXsyfXx1W1xcMjktMjYtZl17NH18Y1tBLTNvLXpdfFtcXHNcXFNdKSkvO3pbTS4xQl09L14oPzpcXFxcKD86MCg/OlswLTNdWzAtN117MCwyfXxbNC03XVswLTddPyk/fFsxLTldXFxkKnx4W1xcMjktMjYtZl17Mn18dVtcXDI5LTI2LWZdezR9fGNbQS0zby16XXxbXFxzXFxTXSl8XFwoXFw/Wzo9IV18Wz8qK11cXD98e1xcZCsoPzosXFxkKik/fVxcPz8pLztNLjFoPTYoZixlLGEsYil7dS5VKHsycTpyKGYsImciKyhFPyJ5IjoiIikpLDJiOmUsM3I6YXx8TS4xQiwycDpifHxOfSl9O00uMm49NihmLGUpe0sgYT1mKyIvIisoZXx8IiIpO0ggTS4yblthXXx8KE0uMm5bYV09TShmLGUpKX07TS4zYz02KGYpe0ggcihmLCJnIil9O00uNWw9NihmKXtIIGYuUSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csIlxcXFwkJiIpfTtNLjVlPTYoZixlLGEsYil7ZT1yKGUsImciKyhiJiZFPyJ5IjoiIikpO2UuMTI9YT1hfHwwO2Y9ZS5YKGYpO0ggYj9mJiZmLlA9PT1hP2Y6TjpmfTtNLjNxPTYoKXtNLjFoPTYoKXsxUyAyVSgiMmFcJ3QgNTUgMWggNTQgM3EiKX19O00uMVI9NihmKXtIIDUzLlouMXEuVyhmKT09PSJbMm0gMTVdIn07TS4zcD02KGYsZSxhLGIpe08oSyBjPXIoZSwiZyIpLGQ9LTEsaDtoPWMuWChmKTspe2EuVyhiLGgsKytkLGYsYyk7Yy4xMj09PWguUCYmYy4xMisrfUkoZS4xSillLjEyPTB9O00uNTc9NihmLGUpe0ggNiBhKGIsYyl7SyBkPWVbY10uMUk/ZVtjXTp7MUk6ZVtjXX0saD1yKGQuMUksImciKSxnPVtdLGk7TyhpPTA7aTxiLkw7aSsrKU0uM3AoYltpXSxoLDYoayl7Zy5VKGQuM2o/a1tkLjNqXXx8IiI6a1swXSl9KTtIIGM9PT1lLkwtMXx8IWcuTD9nOmEoZyxjKzEpfShbZl0sMCl9OzE1LlouMXA9NihmLGUpe0ggSi5YKGVbMF0pfTsxNS5aLlc9NihmLGUpe0ggSi5YKGUpfTsxNS5aLlg9NihmKXtLIGU9bi5YLjFwKEosMTQpLGE7SShlKXtJKCF4JiZlLkw+MSYmcChlLCIiKT4tMSl7YT0xNShKLjFtLG4uUS5XKHQoSiksImciLCIiKSk7bi5RLlcoZi4xYShlLlApLGEsNigpe08oSyBjPTE7YzwxNC5MLTI7YysrKUkoMTRbY109PT0xZCllW2NdPTFkfSl9SShKLjF3JiZKLjF3LjE5KU8oSyBiPTE7YjxlLkw7YisrKUkoYT1KLjF3LjE5W2ItMV0pZVthXT1lW2JdOyFEJiZKLjFKJiYhZVswXS5MJiZKLjEyPmUuUCYmSi4xMi0tfUggZX07SSghRCkxNS5aLjFBPTYoZil7KGY9bi5YLlcoSixmKSkmJkouMUomJiFmWzBdLkwmJkouMTI+Zi5QJiZKLjEyLS07SCEhZn07MXIuWi4xQz02KGYpe00uMVIoZil8fChmPTE1KGYpKTtJKGYuMUope0sgZT1uLjFDLjFwKEosMTQpO2YuMTI9MDtIIGV9SCBmLlgoSil9OzFyLlouUT02KGYsZSl7SyBhPU0uMVIoZiksYixjO0koYSYmMWogZS41OCgpPT09IjNmIiYmZS4xaSgiJHsiKT09PS0xJiZ5KUggbi5RLjFwKEosMTQpO0koYSl7SShmLjF3KWI9Zi4xdy4xOX1ZIGYrPSIiO0koMWogZT09PSI2IiljPW4uUS5XKEosZiw2KCl7SShiKXsxNFswXT0xZiAxcigxNFswXSk7TyhLIGQ9MDtkPGIuTDtkKyspSShiW2RdKTE0WzBdW2JbZF1dPTE0W2QrMV19SShhJiZmLjFKKWYuMTI9MTRbMTQuTC0yXSsxNFswXS5MO0ggZS4xcChOLDE0KX0pO1l7Yz1KKyIiO2M9bi5RLlcoYyxmLDYoKXtLIGQ9MTQ7SCBuLlEuVyhlLEMsNihoLGcsaSl7SShnKTViKGcpezI0IiQiOkgiJCI7MjQiJiI6SCBkWzBdOzI0ImAiOkggZFtkLkwtMV0uMWEoMCxkW2QuTC0yXSk7MjQiXCciOkggZFtkLkwtMV0uMWEoZFtkLkwtMl0rZFswXS5MKTs1YTppPSIiO2c9K2c7SSghZylIIGg7Tyg7Zz5kLkwtMzspe2k9MXIuWi4xYS5XKGcsLTEpK2k7Zz0xUS4zaShnLzEwKX1IKGc/ZFtnXXx8IiI6IiQiKStpfVl7Zz0raTtJKGc8PWQuTC0zKUggZFtnXTtnPWI/cChiLGkpOi0xO0ggZz4tMT9kW2crMV06aH19KX0pfUkoYSYmZi4xSilmLjEyPTA7SCBjfTsxci5aLjFlPTYoZixlKXtJKCFNLjFSKGYpKUggbi4xZS4xcChKLDE0KTtLIGE9SisiIixiPVtdLGM9MCxkLGg7SShlPT09MWR8fCtlPDApZT01RDtZe2U9MVEuM2koK2UpO0koIWUpSFtdfU8oZj1NLjNjKGYpO2Q9Zi5YKGEpOyl7SShmLjEyPmMpe2IuVShhLjFhKGMsZC5QKSk7ZC5MPjEmJmQuUDxhLkwmJjNiLlouVS4xcChiLGQuMWEoMSkpO2g9ZFswXS5MO2M9Zi4xMjtJKGIuTD49ZSkxTn1mLjEyPT09ZC5QJiZmLjEyKyt9SShjPT09YS5MKXtJKCFuLjFBLlcoZiwiIil8fGgpYi5VKCIiKX1ZIGIuVShhLjFhKGMpKTtIIGIuTD5lP2IuMWEoMCxlKTpifTtNLjFoKC9cXChcXD8jW14pXSpcXCkvLDYoZil7SCBuLjFBLlcoQSxmLjJTLjFhKGYuUCtmWzBdLkwpKT8iIjoiKD86KSJ9KTtNLjFoKC9cXCgoPyFcXD8pLyw2KCl7Si4xOS5VKE4pO0giKCJ9KTtNLjFoKC9cXChcXD88KFskXFx3XSspPi8sNihmKXtKLjE5LlUoZlsxXSk7Si4yTj1SO0giKCJ9KTtNLjFoKC9cXFxcazwoW1xcdyRdKyk+Lyw2KGYpe0sgZT1wKEouMTksZlsxXSk7SCBlPi0xPyJcXFxcIisoZSsxKSsoM1IoZi4yUy4zYShmLlArZlswXS5MKSk/IiI6Iig/OikiKTpmWzBdfSk7TS4xaCgvXFxbXFxeP10vLDYoZil7SCBmWzBdPT09IltdIj8iXFxcXGJcXFxcQiI6IltcXFxcc1xcXFxTXSJ9KTtNLjFoKC9eXFwoXFw/KFs1QV0rKVxcKS8sNihmKXtKLjNkKGZbMV0pO0giIn0pO00uMWgoLyg/Olxccyt8Iy4qKSsvLDYoZil7SCBuLjFBLlcoQSxmLjJTLjFhKGYuUCtmWzBdLkwpKT8iIjoiKD86KSJ9LE0uMUIsNigpe0ggSi4ySygieCIpfSk7TS4xaCgvXFwuLyw2KCl7SCJbXFxcXHNcXFxcU10ifSxNLjFCLDYoKXtIIEouMksoInMiKX0pfSkoKTsxaiAyZSE9IjFkIiYmKDJlLk09TSk7SyAxdj02KCl7NiByKGEsYil7YS4xbC4xaShiKSE9LTF8fChhLjFsKz0iICIrYil9NiB0KGEpe0ggYS4xaSgiM2UiKT09MD9hOiIzZSIrYX02IEIoYSl7SCBlLjFZLjJBW3QoYSldfTYgcChhLGIsYyl7SShhPT1OKUggTjtLIGQ9YyE9Uj9hLjNHOlthLjJHXSxoPXsiIyI6IjFjIiwiLiI6IjFsIn1bYi4xbygwLDEpXXx8IjNoIixnLGk7Zz1oIT0iM2giP2IuMW8oMSk6Yi41dSgpO0koKGFbaF18fCIiKS4xaShnKSE9LTEpSCBhO08oYT0wO2QmJmE8ZC5MJiZpPT1OO2ErKylpPXAoZFthXSxiLGMpO0ggaX02IEMoYSxiKXtLIGM9e30sZDtPKGQgMmcgYSljW2RdPWFbZF07TyhkIDJnIGIpY1tkXT1iW2RdO0ggY302IHcoYSxiLGMsZCl7NiBoKGcpe2c9Z3x8MVAuNXk7SSghZy4xRil7Zy4xRj1nLjUyO2cuM049Nigpe0ouNXc9MTF9fWMuVyhkfHwxUCxnKX1hLjNnP2EuM2coIjRVIitiLGgpOmEuNHkoYixoLDExKX02IEEoYSxiKXtLIGM9ZS4xWS4yaixkPU47SShjPT1OKXtjPXt9O08oSyBoIDJnIGUuMVUpe0sgZz1lLjFVW2hdO2Q9Zy40eDtJKGQhPU4pe2cuMVY9aC40dygpO08oZz0wO2c8ZC5MO2crKyljW2RbZ11dPWh9fWUuMVkuMmo9Y31kPWUuMVVbY1thXV07ZD09TiYmYiE9MTEmJjFQLjFYKGUuMTMuMXguMVgrKGUuMTMuMXguM0UrYSkpO0ggZH02IHYoYSxiKXtPKEsgYz1hLjFlKCJcXG4iKSxkPTA7ZDxjLkw7ZCsrKWNbZF09YihjW2RdLGQpO0ggYy4xSygiXFxuIil9NiB1KGEsYil7SShhPT1OfHxhLkw9PTB8fGE9PSJcXG4iKUggYTthPWEuUSgvPC9nLCImMXk7Iik7YT1hLlEoLyB7Mix9L2csNihjKXtPKEsgZD0iIixoPTA7aDxjLkwtMTtoKyspZCs9ZS4xMy4xVztIIGQrIiAifSk7SShiIT1OKWE9dihhLDYoYyl7SShjLkw9PTApSCIiO0sgZD0iIjtjPWMuUSgvXigmMnM7fCApKy8sNihoKXtkPWg7SCIifSk7SShjLkw9PTApSCBkO0ggZCtcJzwxNyAxZz0iXCcrYitcJyI+XCcrYysiPC8xNz4ifSk7SCBhfTYgbihhLGIpe2EuMWUoIlxcbiIpO08oSyBjPSIiLGQ9MDtkPDUwO2QrKyljKz0iICAgICAgICAgICAgICAgICAgICAiO0ggYT12KGEsNihoKXtJKGguMWkoIlxcdCIpPT0tMSlIIGg7TyhLIGc9MDsoZz1oLjFpKCJcXHQiKSkhPS0xOyloPWguMW8oMCxnKStjLjFvKDAsYi1nJWIpK2guMW8oZysxLGguTCk7SCBofSl9NiB4KGEpe0ggYS5RKC9eXFxzK3xcXHMrJC9nLCIiKX02IEQoYSxiKXtJKGEuUDxiLlApSC0xO1kgSShhLlA+Yi5QKUggMTtZIEkoYS5MPGIuTClILTE7WSBJKGEuTD5iLkwpSCAxO0ggMH02IHkoYSxiKXs2IGMoayl7SCBrWzBdfU8oSyBkPU4saD1bXSxnPWIuMkQ/Yi4yRDpjOyhkPWIuMUkuWChhKSkhPU47KXtLIGk9ZyhkLGIpO0koMWogaT09IjNmIilpPVsxZiBlLjJMKGksZC5QLGIuMjMpXTtoPWguMU8oaSl9SCBofTYgRShhKXtLIGI9LyguKikoKCYxRzt8JjF5OykuKikvO0ggYS5RKGUuM0EuM00sNihjKXtLIGQ9IiIsaD1OO0koaD1iLlgoYykpe2M9aFsxXTtkPWhbMl19SFwnPGEgMmg9IlwnK2MrXCciPlwnK2MrIjwvYT4iK2R9KX02IHooKXtPKEsgYT0xRS4zNigiMWsiKSxiPVtdLGM9MDtjPGEuTDtjKyspYVtjXS4zcz09IjIwIiYmYi5VKGFbY10pO0ggYn02IGYoYSl7YT1hLjFGO0sgYj1wKGEsIi4yMCIsUik7YT1wKGEsIi4zTyIsUik7SyBjPTFFLjRpKCIzdCIpO0koISghYXx8IWJ8fHAoYSwiM3QiKSkpe0IoYi4xYyk7cihiLCIxbSIpO08oSyBkPWEuM0csaD1bXSxnPTA7ZzxkLkw7ZysrKWguVShkW2ddLjR6fHxkW2ddLjRBKTtoPWguMUsoIlxcciIpO2MuMzkoMUUuNEQoaCkpO2EuMzkoYyk7Yy4yQygpO2MuNEMoKTt3KGMsIjR1Iiw2KCl7Yy4yRy40RShjKTtiLjFsPWIuMWwuUSgiMW0iLCIiKX0pfX1JKDFqIDNGIT0iMWQiJiYxaiBNPT0iMWQiKU09M0YoIk0iKS5NO0sgZT17MnY6eyIxZy0yNyI6IiIsIjJpLTFzIjoxLCIyei0xcy0ydCI6MTEsMU06TiwxdDpOLCI0Mi00NSI6UiwiNDMtMjIiOjQsMXU6UiwxNjpSLCIzVi0xNyI6UiwybDoxMSwiNDEtNDAiOlIsMms6MTEsIjF6LTFrIjoxMX0sMTM6ezFXOiImMnM7IiwyTTpSLDQ2OjExLDQ0OjExLDM0OiI0biIsMXg6ezIxOiI0byAxbSIsMlA6Ij8iLDFYOiIxdlxcblxcbiIsM0U6IjRyXCd0IDR0IDFEIE86ICIsNGc6IjRtIDRCXCd0IDUxIE8gMXotMWsgNEY6ICIsMzc6XCc8ITRUIDF6IDRTICItLy80Vi8vM0ggNFcgMS4wIDRaLy80WSIgIjFaOi8vMnkuM0wuM0svNFgvM0kvM0gvM0ktNFAuNEoiPjwxeiA0ST0iMVo6Ly8yeS4zTC4zSy80TC81TCI+PDNKPjw0TiAxWi00TT0iNUctNU0iIDZLPSIyTy8xejsgNko9NkktOCIgLz48MXQ+NkwgMXY8LzF0PjwvM0o+PDNCIDFMPSIyNS02TTo2USw2UCw2Tyw2Ti02Rjs2eS0yZjojNng7MmY6IzZ3OzI1LTIyOjZ2OzJPLTNEOjNDOyI+PFQgMUw9IjJPLTNEOjNDOzN3LTMyOjEuNno7Ij48VCAxTD0iMjUtMjI6NkEtNkU7Ij4xdjwvVD48VCAxTD0iMjUtMjI6LjZDOzN3LTZCOjZSOyI+PFQ+M3YgMy4wLjc2ICg3MiA3MyAzeCk8L1Q+PFQ+PGEgMmg9IjFaOi8vM3UuMncvMXYiIDFGPSIzOCIgMUw9IjJmOiMzeSI+MVo6Ly8zdS4ydy8xdjwvYT48L1Q+PFQ+NzAgMTcgNlUgNzEuPC9UPjxUPjZUIDZYLTN4IDZZIDZELjwvVD48L1Q+PFQ+NnQgNjEgNjAgSiAxaywgNVogPGEgMmg9IjZ1Oi8vMnkuNjIuMncvNjMtNjYvNjU/NjQ9NVgtNVcmNVA9NU8iIDFMPSIyZjojM3kiPjVSPC9hPiA1ViA8MlIvPjVVIDVUIDVTITwvVD48L1Q+PC8zQj48LzF6PlwnfX0sMVk6ezJqOk4sMkE6e319LDFVOnt9LDNBOns2bjovXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8yYyw2bTovXFwvXFwvLiokLzJjLDZsOi8jLiokLzJjLDZrOi8iKFteXFxcXCJcXG5dfFxcXFwuKSoiL2csNm86L1wnKFteXFxcXFwnXFxuXXxcXFxcLikqXCcvZyw2cDoxZiBNKFwnIihbXlxcXFxcXFxcIl18XFxcXFxcXFwuKSoiXCcsIjN6IiksNnM6MWYgTSgiXCcoW15cXFxcXFxcXFwnXXxcXFxcXFxcXC4pKlwnIiwiM3oiKSw2cTovKCYxeTt8PCkhLS1bXFxzXFxTXSo/LS0oJjFHO3w+KS8yYywzTTovXFx3KzpcXC9cXC9bXFx3LS5cXC8/JSY9OkA7XSovZyw2YTp7MTg6LygmMXk7fDwpXFw/PT8vZywxYjovXFw/KCYxRzt8PikvZ30sNjk6ezE4Oi8oJjF5O3w8KSU9Py9nLDFiOi8lKCYxRzt8PikvZ30sNmQ6ezE4Oi8oJjF5O3w8KVxccyoxay4qPygmMUc7fD4pLzJULDFiOi8oJjF5O3w8KVxcL1xccyoxa1xccyooJjFHO3w+KS8yVH19LDE2OnsxSDo2KGEpezYgYihpLGspe0ggZS4xNi4ybyhpLGssZS4xMy4xeFtrXSl9TyhLIGM9XCc8VCAxZz0iMTYiPlwnLGQ9ZS4xNi4yeCxoPWQuMlgsZz0wO2c8aC5MO2crKyljKz0oZFtoW2ddXS4xSHx8YikoYSxoW2ddKTtjKz0iPC9UPiI7SCBjfSwybzo2KGEsYixjKXtIXCc8Mlc+PGEgMmg9IiMiIDFnPSI2ZSA2aFwnK2IrIiAiK2IrXCciPlwnK2MrIjwvYT48LzJXPiJ9LDJiOjYoYSl7SyBiPWEuMUYsYz1iLjFsfHwiIjtiPUIocChiLCIuMjAiLFIpLjFjKTtLIGQ9NihoKXtIKGg9MTUoaCsiNmYoXFxcXHcrKSIpLlgoYykpP2hbMV06Tn0oIjZnIik7YiYmZCYmZS4xNi4yeFtkXS4yQihiKTthLjNOKCl9LDJ4OnsyWDpbIjIxIiwiMlAiXSwyMTp7MUg6NihhKXtJKGEuVigiMmwiKSE9UilIIiI7SyBiPWEuVigiMXQiKTtIIGUuMTYuMm8oYSwiMjEiLGI/YjplLjEzLjF4LjIxKX0sMkI6NihhKXthPTFFLjZqKHQoYS4xYykpO2EuMWw9YS4xbC5RKCI0NyIsIiIpfX0sMlA6ezJCOjYoKXtLIGE9IjY4PTAiO2ErPSIsIDE4PSIrKDMxLjMwLTMzKS8yKyIsIDMyPSIrKDMxLjJaLTJZKS8yKyIsIDMwPTMzLCAyWj0yWSI7YT1hLlEoL14sLywiIik7YT0xUC42WigiIiwiMzgiLGEpO2EuMkMoKTtLIGI9YS4xRTtiLjZXKGUuMTMuMXguMzcpO2IuNlYoKTthLjJDKCl9fX19LDM1OjYoYSxiKXtLIGM7SShiKWM9W2JdO1l7Yz0xRS4zNihlLjEzLjM0KTtPKEsgZD1bXSxoPTA7aDxjLkw7aCsrKWQuVShjW2hdKTtjPWR9Yz1jO2Q9W107SShlLjEzLjJNKWM9Yy4xTyh6KCkpO0koYy5MPT09MClIIGQ7TyhoPTA7aDxjLkw7aCsrKXtPKEsgZz1jW2hdLGk9YSxrPWNbaF0uMWwsaj0zVyAwLGw9e30sbT0xZiBNKCJeXFxcXFsoPzwyVj4oLio/KSlcXFxcXSQiKSxzPTFmIE0oIig/PDI3PltcXFxcdy1dKylcXFxccyo6XFxcXHMqKD88MVQ+W1xcXFx3LSUjXSt8XFxcXFsuKj9cXFxcXXxcXCIuKj9cXCJ8XCcuKj9cJylcXFxccyo7PyIsImciKTsoaj1zLlgoaykpIT1OOyl7SyBvPWouMVQuUSgvXltcJyJdfFtcJyJdJC9nLCIiKTtJKG8hPU4mJm0uMUEobykpe289bS5YKG8pO289by4yVi5MPjA/by4yVi4xZSgvXFxzKixcXHMqLyk6W119bFtqLjI3XT1vfWc9ezFGOmcsMW46QyhpLGwpfTtnLjFuLjFEIT1OJiZkLlUoZyl9SCBkfSwxTTo2KGEsYil7SyBjPUouMzUoYSxiKSxkPU4saD1lLjEzO0koYy5MIT09MClPKEsgZz0wO2c8Yy5MO2crKyl7Yj1jW2ddO0sgaT1iLjFGLGs9Yi4xbixqPWsuMUQsbDtJKGohPU4pe0koa1siMXotMWsiXT09IlIifHxlLjJ2WyIxei0xayJdPT1SKXtkPTFmIGUuNGwoaik7aj0iNE8ifVkgSShkPUEoaikpZD0xZiBkO1kgNkg7bD1pLjNYO0koaC4yTSl7bD1sO0sgbT14KGwpLHM9MTE7SShtLjFpKCI8IVs2R1siKT09MCl7bT1tLjRoKDkpO3M9Un1LIG89bS5MO0kobS4xaSgiXV1cXD4iKT09by0zKXttPW0uNGgoMCxvLTMpO3M9Un1sPXM/bTpsfUkoKGkuMXR8fCIiKSE9IiIpay4xdD1pLjF0O2suMUQ9ajtkLjJRKGspO2I9ZC4yRihsKTtJKChpLjFjfHwiIikhPSIiKWIuMWM9aS4xYztpLjJHLjc0KGIsaSl9fX0sMkU6NihhKXt3KDFQLCI0ayIsNigpe2UuMU0oYSl9KX19O2UuMkU9ZS4yRTtlLjFNPWUuMU07ZS4yTD02KGEsYixjKXtKLjFUPWE7Si5QPWI7Si5MPWEuTDtKLjIzPWM7Si4xVj1OfTtlLjJMLlouMXE9Nigpe0ggSi4xVH07ZS40bD02KGEpezYgYihqLGwpe08oSyBtPTA7bTxqLkw7bSsrKWpbbV0uUCs9bH1LIGM9QShhKSxkLGg9MWYgZS4xVS41WSxnPUosaT0iMkYgMUggMlEiLjFlKCIgIik7SShjIT1OKXtkPTFmIGM7TyhLIGs9MDtrPGkuTDtrKyspKDYoKXtLIGo9aVtrXTtnW2pdPTYoKXtIIGhbal0uMXAoaCwxNCl9fSkoKTtkLjI4PT1OPzFQLjFYKGUuMTMuMXguMVgrKGUuMTMuMXguNGcrYSkpOmguMkouVSh7MUk6ZC4yOC4xNywyRDo2KGope08oSyBsPWouMTcsbT1bXSxzPWQuMkosbz1qLlArai4xOC5MLEY9ZC4yOCxxLEc9MDtHPHMuTDtHKyspe3E9eShsLHNbR10pO2IocSxvKTttPW0uMU8ocSl9SShGLjE4IT1OJiZqLjE4IT1OKXtxPXkoai4xOCxGLjE4KTtiKHEsai5QKTttPW0uMU8ocSl9SShGLjFiIT1OJiZqLjFiIT1OKXtxPXkoai4xYixGLjFiKTtiKHEsai5QK2pbMF0uNVEoai4xYikpO209bS4xTyhxKX1PKGo9MDtqPG0uTDtqKyspbVtqXS4xVj1jLjFWO0ggbX19KX19O2UuNGo9Nigpe307ZS40ai5aPXtWOjYoYSxiKXtLIGM9Si4xblthXTtjPWM9PU4/YjpjO0sgZD17IlIiOlIsIjExIjoxMX1bY107SCBkPT1OP2M6ZH0sM1k6NihhKXtIIDFFLjRpKGEpfSw0Yzo2KGEsYil7SyBjPVtdO0koYSE9TilPKEsgZD0wO2Q8YS5MO2QrKylJKDFqIGFbZF09PSIybSIpYz1jLjFPKHkoYixhW2RdKSk7SCBKLjRlKGMuNmIoRCkpfSw0ZTo2KGEpe08oSyBiPTA7YjxhLkw7YisrKUkoYVtiXSE9PU4pTyhLIGM9YVtiXSxkPWMuUCtjLkwsaD1iKzE7aDxhLkwmJmFbYl0hPT1OO2grKyl7SyBnPWFbaF07SShnIT09TilJKGcuUD5kKTFOO1kgSShnLlA9PWMuUCYmZy5MPmMuTClhW2JdPU47WSBJKGcuUD49Yy5QJiZnLlA8ZClhW2hdPU59SCBhfSw0ZDo2KGEpe0sgYj1bXSxjPTJ1KEouVigiMmktMXMiKSk7dihhLDYoZCxoKXtiLlUoaCtjKX0pO0ggYn0sM1U6NihhKXtLIGI9Si5WKCIxTSIsW10pO0koMWogYiE9IjJtIiYmYi5VPT1OKWI9W2JdO2E6e2E9YS4xcSgpO0sgYz0zVyAwO08oYz1jPTFRLjZjKGN8fDAsMCk7YzxiLkw7YysrKUkoYltjXT09YSl7Yj1jOzFOIGF9Yj0tMX1IIGIhPS0xfSwycjo2KGEsYixjKXthPVsiMXMiLCI2aSIrYiwiUCIrYSwiNnIiKyhiJTI9PTA/MToyKS4xcSgpXTtKLjNVKGIpJiZhLlUoIjY3Iik7Yj09MCYmYS5VKCIxTiIpO0hcJzxUIDFnPSJcJythLjFLKCIgIikrXCciPlwnK2MrIjwvVD4ifSwzUTo2KGEsYil7SyBjPSIiLGQ9YS4xZSgiXFxuIikuTCxoPTJ1KEouVigiMmktMXMiKSksZz1KLlYoIjJ6LTFzLTJ0Iik7SShnPT1SKWc9KGgrZC0xKS4xcSgpLkw7WSBJKDNSKGcpPT1SKWc9MDtPKEsgaT0wO2k8ZDtpKyspe0sgaz1iP2JbaV06aCtpLGo7SShrPT0wKWo9ZS4xMy4xVztZe2o9ZztPKEsgbD1rLjFxKCk7bC5MPGo7KWw9IjAiK2w7aj1sfWE9ajtjKz1KLjJyKGksayxhKX1IIGN9LDQ5OjYoYSxiKXthPXgoYSk7SyBjPWEuMWUoIlxcbiIpO0ouVigiMnotMXMtMnQiKTtLIGQ9MnUoSi5WKCIyaS0xcyIpKTthPSIiO08oSyBoPUouVigiMUQiKSxnPTA7ZzxjLkw7ZysrKXtLIGk9Y1tnXSxrPS9eKCYyczt8XFxzKSsvLlgoaSksaj1OLGw9Yj9iW2ddOmQrZztJKGshPU4pe2o9a1swXS4xcSgpO2k9aS4xbyhqLkwpO2o9ai5RKCIgIixlLjEzLjFXKX1pPXgoaSk7SShpLkw9PTApaT1lLjEzLjFXO2ErPUouMnIoZyxsLChqIT1OP1wnPDE3IDFnPSJcJytoK1wnIDVOIj5cJytqKyI8LzE3PiI6IiIpK2kpfUggYX0sNGY6NihhKXtIIGE/Ijw0YT4iK2ErIjwvNGE+IjoiIn0sNGI6NihhLGIpezYgYyhsKXtIKGw9bD9sLjFWfHxnOmcpP2wrIiAiOiIifU8oSyBkPTAsaD0iIixnPUouVigiMUQiLCIiKSxpPTA7aTxiLkw7aSsrKXtLIGs9YltpXSxqO0koIShrPT09Tnx8ay5MPT09MCkpe2o9YyhrKTtoKz11KGEuMW8oZCxrLlAtZCksaisiNDgiKSt1KGsuMVQsaitrLjIzKTtkPWsuUCtrLkwrKGsuNzV8fDApfX1oKz11KGEuMW8oZCksYygpKyI0OCIpO0ggaH0sMUg6NihhKXtLIGI9IiIsYz1bIjIwIl0sZDtJKEouVigiMmsiKT09UilKLjFuLjE2PUouMW4uMXU9MTE7MWw9IjIwIjtKLlYoIjJsIik9PVImJmMuVSgiNDciKTtJKCgxdT1KLlYoIjF1IikpPT0xMSljLlUoIjZTIik7Yy5VKEouVigiMWctMjciKSk7Yy5VKEouVigiMUQiKSk7YT1hLlEoL15bIF0qW1xcbl0rfFtcXG5dKlsgXSokL2csIiIpLlEoL1xcci9nLCIgIik7Yj1KLlYoIjQzLTIyIik7SShKLlYoIjQyLTQ1Iik9PVIpYT1uKGEsYik7WXtPKEsgaD0iIixnPTA7ZzxiO2crKyloKz0iICI7YT1hLlEoL1xcdC9nLGgpfWE9YTthOntiPWE9YTtoPS88MlJcXHMqXFwvPz58JjF5OzJSXFxzKlxcLz8mMUc7LzJUO0koZS4xMy40Nj09UiliPWIuUShoLCJcXG4iKTtJKGUuMTMuNDQ9PVIpYj1iLlEoaCwiIik7Yj1iLjFlKCJcXG4iKTtoPS9eXFxzKi87Zz00UTtPKEsgaT0wO2k8Yi5MJiZnPjA7aSsrKXtLIGs9YltpXTtJKHgoaykuTCE9MCl7az1oLlgoayk7SShrPT1OKXthPWE7MU4gYX1nPTFRLjRxKGtbMF0uTCxnKX19SShnPjApTyhpPTA7aTxiLkw7aSsrKWJbaV09YltpXS4xbyhnKTthPWIuMUsoIlxcbiIpfUkoMXUpZD1KLjRkKGEpO2I9Si40YyhKLjJKLGEpO2I9Si40YihhLGIpO2I9Si40OShiLGQpO0koSi5WKCI0MS00MCIpKWI9RShiKTsxaiAySCE9IjFkIiYmMkguM1MmJjJILjNTLjFDKC81cy8pJiZjLlUoIjV0Iik7SCBiPVwnPFQgMWM9IlwnK3QoSi4xYykrXCciIDFnPSJcJytjLjFLKCIgIikrXCciPlwnKyhKLlYoIjE2Iik/ZS4xNi4xSChKKToiIikrXCc8M1ogNXo9IjAiIDVIPSIwIiA1Sj0iMCI+XCcrSi40ZihKLlYoIjF0IikpKyI8M1Q+PDNQPiIrKDF1P1wnPDJkIDFnPSIxdSI+XCcrSi4zUShhKSsiPC8yZD4iOiIiKStcJzwyZCAxZz0iMTciPjxUIDFnPSIzTyI+XCcrYisiPC9UPjwvMmQ+PC8zUD48LzNUPjwvM1o+PC9UPiJ9LDJGOjYoYSl7SShhPT09TilhPSIiO0ouMTc9YTtLIGI9Si4zWSgiVCIpO2IuM1g9Si4xSChhKTtKLlYoIjE2IikmJncocChiLCIuMTYiKSwiNWMiLGUuMTYuMmIpO0ouVigiM1YtMTciKSYmdyhwKGIsIi4xNyIpLCI1NiIsZik7SCBifSwyUTo2KGEpe0ouMWM9IiIrMVEuNWQoMVEuNW4oKSo1aykuMXEoKTtlLjFZLjJBW3QoSi4xYyldPUo7Si4xbj1DKGUuMnYsYXx8e30pO0koSi5WKCIyayIpPT1SKUouMW4uMTY9Si4xbi4xdT0xMX0sNWo6NihhKXthPWEuUSgvXlxccyt8XFxzKyQvZywiIikuUSgvXFxzKy9nLCJ8Iik7SCJcXFxcYig/OiIrYSsiKVxcXFxiIn0sNWY6NihhKXtKLjI4PXsxODp7MUk6YS4xOCwyMzoiMWsifSwxYjp7MUk6YS4xYiwyMzoiMWsifSwxNzoxZiBNKCIoPzwxOD4iK2EuMTguMW0rIikoPzwxNz4uKj8pKD88MWI+IithLjFiLjFtKyIpIiwiNW8iKX19fTtIIGV9KCk7MWogMmUhPSIxZCImJigyZS4xdj0xdik7Jyw2Miw0NDEsInx8fHx8fGZ1bmN0aW9ufHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHJldHVybnxpZnx0aGlzfHZhcnxsZW5ndGh8WFJlZ0V4cHxudWxsfGZvcnxpbmRleHxyZXBsYWNlfHRydWV8fGRpdnxwdXNofGdldFBhcmFtfGNhbGx8ZXhlY3xlbHNlfHByb3RvdHlwZXx8ZmFsc2V8bGFzdEluZGV4fGNvbmZpZ3xhcmd1bWVudHN8UmVnRXhwfHRvb2xiYXJ8Y29kZXxsZWZ0fGNhcHR1cmVOYW1lc3xzbGljZXxyaWdodHxpZHx1bmRlZmluZWR8c3BsaXR8bmV3fGNsYXNzfGFkZFRva2VufGluZGV4T2Z8dHlwZW9mfHNjcmlwdHxjbGFzc05hbWV8c291cmNlfHBhcmFtc3xzdWJzdHJ8YXBwbHl8dG9TdHJpbmd8U3RyaW5nfGxpbmV8dGl0bGV8Z3V0dGVyfFN5bnRheEhpZ2hsaWdodGVyfF94cmVnZXhwfHN0cmluZ3N8bHR8aHRtbHx0ZXN0fE9VVFNJREVfQ0xBU1N8bWF0Y2h8YnJ1c2h8ZG9jdW1lbnR8dGFyZ2V0fGd0fGdldEh0bWx8cmVnZXh8Z2xvYmFsfGpvaW58c3R5bGV8aGlnaGxpZ2h0fGJyZWFrfGNvbmNhdHx3aW5kb3d8TWF0aHxpc1JlZ0V4cHx0aHJvd3x2YWx1ZXxicnVzaGVzfGJydXNoTmFtZXxzcGFjZXxhbGVydHx2YXJzfGh0dHB8c3ludGF4aGlnaGxpZ2h0ZXJ8ZXhwYW5kU291cmNlfHNpemV8Y3NzfGNhc2V8Zm9udHxGYXxuYW1lfGh0bWxTY3JpcHR8ZEF8Y2FufGhhbmRsZXJ8Z218dGR8ZXhwb3J0c3xjb2xvcnxpbnxocmVmfGZpcnN0fGRpc2NvdmVyZWRCcnVzaGVzfGxpZ2h0fGNvbGxhcHNlfG9iamVjdHxjYWNoZXxnZXRCdXR0b25IdG1sfHRyaWdnZXJ8cGF0dGVybnxnZXRMaW5lSHRtbHxuYnNwfG51bWJlcnN8cGFyc2VJbnR8ZGVmYXVsdHN8Y29tfGl0ZW1zfHd3d3xwYWR8aGlnaGxpZ2h0ZXJzfGV4ZWN1dGV8Zm9jdXN8ZnVuY3xhbGx8Z2V0RGl2fHBhcmVudE5vZGV8bmF2aWdhdG9yfElOU0lERV9DTEFTU3xyZWdleExpc3R8aGFzRmxhZ3xNYXRjaHx1c2VTY3JpcHRUYWdzfGhhc05hbWVkQ2FwdHVyZXx0ZXh0fGhlbHB8aW5pdHxicnxpbnB1dHxnaXxFcnJvcnx2YWx1ZXN8c3BhbnxsaXN0fDI1MHxoZWlnaHR8d2lkdGh8c2NyZWVufHRvcHw1MDB8dGFnTmFtZXxmaW5kRWxlbWVudHN8Z2V0RWxlbWVudHNCeVRhZ05hbWV8YWJvdXREaWFsb2d8X2JsYW5rfGFwcGVuZENoaWxkfGNoYXJBdHxBcnJheXxjb3B5QXNHbG9iYWx8c2V0RmxhZ3xoaWdobGlnaHRlcl98c3RyaW5nfGF0dGFjaEV2ZW50fG5vZGVOYW1lfGZsb29yfGJhY2tyZWZ8b3V0cHV0fHRoZXxUeXBlRXJyb3J8c3RpY2t5fFphfGl0ZXJhdGV8ZnJlZXplVG9rZW5zfHNjb3BlfHR5cGV8dGV4dGFyZWF8YWxleGdvcmJhdGNoZXZ8dmVyc2lvbnxtYXJnaW58MjAxMHwwMDU4OTZ8Z3N8cmVnZXhMaWJ8Ym9keXxjZW50ZXJ8YWxpZ258bm9CcnVzaHxyZXF1aXJlfGNoaWxkTm9kZXN8RFREfHhodG1sMXxoZWFkfG9yZ3x3M3x1cmx8cHJldmVudERlZmF1bHR8Y29udGFpbmVyfHRyfGdldExpbmVOdW1iZXJzSHRtbHxpc05hTnx1c2VyQWdlbnR8dGJvZHl8aXNMaW5lSGlnaGxpZ2h0ZWR8cXVpY2t8dm9pZHxpbm5lckhUTUx8Y3JlYXRlfHRhYmxlfGxpbmtzfGF1dG98c21hcnR8dGFifHN0cmlwQnJzfHRhYnN8YmxvZ2dlck1vZGV8Y29sbGFwc2VkfHBsYWlufGdldENvZGVMaW5lc0h0bWx8Y2FwdGlvbnxnZXRNYXRjaGVzSHRtbHxmaW5kTWF0Y2hlc3xmaWd1cmVPdXRMaW5lTnVtYmVyc3xyZW1vdmVOZXN0ZWRNYXRjaGVzfGdldFRpdGxlSHRtbHxicnVzaE5vdEh0bWxTY3JpcHR8c3Vic3RyaW5nfGNyZWF0ZUVsZW1lbnR8SGlnaGxpZ2h0ZXJ8bG9hZHxIdG1sU2NyaXB0fEJydXNofHByZXxleHBhbmR8bXVsdGlsaW5lfG1pbnxDYW58aWdub3JlQ2FzZXxmaW5kfGJsdXJ8ZXh0ZW5kZWR8dG9Mb3dlckNhc2V8YWxpYXNlc3xhZGRFdmVudExpc3RlbmVyfGlubmVyVGV4dHx0ZXh0Q29udGVudHx3YXNufHNlbGVjdHxjcmVhdGVUZXh0Tm9kZXxyZW1vdmVDaGlsZHxvcHRpb258c2FtZXxmcmFtZXx4bWxuc3xkdGR8dHdpY2V8MTk5OXxlcXVpdnxtZXRhfGh0bWxzY3JpcHR8dHJhbnNpdGlvbmFsfDFFM3xleHBlY3RlZHxQVUJMSUN8RE9DVFlQRXxvbnxXM0N8WEhUTUx8VFJ8RU58VHJhbnNpdGlvbmFsfHxjb25maWd1cmVkfHNyY0VsZW1lbnR8T2JqZWN0fGFmdGVyfHJ1bnxkYmxjbGlja3xtYXRjaENoYWlufHZhbHVlT2Z8Y29uc3RydWN0b3J8ZGVmYXVsdHxzd2l0Y2h8Y2xpY2t8cm91bmR8ZXhlY0F0fGZvckh0bWxTY3JpcHR8dG9rZW58Z2lteXxmdW5jdGlvbnN8Z2V0S2V5d29yZHN8MUU2fGVzY2FwZXx3aXRoaW58cmFuZG9tfHNnaXxhbm90aGVyfGZpbmFsbHl8c3VwcGx5fE1TSUV8aWV8dG9VcHBlckNhc2V8Y2F0Y2h8cmV0dXJuVmFsdWV8ZGVmaW5pdGlvbnxldmVudHxib3JkZXJ8aW1zeHxjb25zdHJ1Y3Rpbmd8b25lfEluZmluaXR5fGZyb218d2hlbnxDb250ZW50fGNlbGxwYWRkaW5nfGZsYWdzfGNlbGxzcGFjaW5nfHRyeXx4aHRtbHxUeXBlfHNwYWNlc3wyOTMwNDAyfGhvc3RlZF9idXR0b25faWR8bGFzdEluZGV4T2Z8ZG9uYXRlfGFjdGl2ZXxkZXZlbG9wbWVudHxrZWVwfHRvfHhjbGlja3xfc3xYbWx8cGxlYXNlfGxpa2V8eW91fHBheXBhbHxjZ2l8Y21kfHdlYnNjcnxiaW58aGlnaGxpZ2h0ZWR8c2Nyb2xsYmFyc3xhc3BTY3JpcHRUYWdzfHBocFNjcmlwdFRhZ3N8c29ydHxtYXh8c2NyaXB0U2NyaXB0VGFnc3x0b29sYmFyX2l0ZW18X3xjb21tYW5kfGNvbW1hbmRffG51bWJlcnxnZXRFbGVtZW50QnlJZHxkb3VibGVRdW90ZWRTdHJpbmd8c2luZ2xlTGluZVBlcmxDb21tZW50c3xzaW5nbGVMaW5lQ0NvbW1lbnRzfG11bHRpTGluZUNDb21tZW50c3xzaW5nbGVRdW90ZWRTdHJpbmd8bXVsdGlMaW5lRG91YmxlUXVvdGVkU3RyaW5nfHhtbENvbW1lbnRzfGFsdHxtdWx0aUxpbmVTaW5nbGVRdW90ZWRTdHJpbmd8SWZ8aHR0cHN8MWVtfDAwMHxmZmZ8YmFja2dyb3VuZHw1ZW18eHh8Ym90dG9tfDc1ZW18R29yYmF0Y2hldnxsYXJnZXxzZXJpZnxDREFUQXxjb250aW51ZXx1dGZ8Y2hhcnNldHxjb250ZW50fEFib3V0fGZhbWlseXxzYW5zfEhlbHZldGljYXxBcmlhbHxHZW5ldmF8M2VtfG5vZ3V0dGVyfENvcHlyaWdodHxzeW50YXh8Y2xvc2V8d3JpdGV8MjAwNHxBbGV4fG9wZW58SmF2YVNjcmlwdHxoaWdobGlnaHRlcnxKdWx5fDAyfHJlcGxhY2VDaGlsZHxvZmZzZXR8ODMiLnNwbGl0KCJ8IiksMCx7fSkpOw==]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/styles/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/styles/shCore.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKiAKICogQGNvcHlyaWdodAogKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBBbGV4IEdvcmJhdGNoZXYuCiAqCiAqIEBsaWNlbnNlCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKi8KLnN5bnRheGhpZ2hsaWdodGVyIGEsCi5zeW50YXhoaWdobGlnaHRlciBkaXYsCi5zeW50YXhoaWdobGlnaHRlciBjb2RlLAouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUsCi5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZCwKLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRyLAouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGJvZHksCi5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0aGVhZCwKLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIGNhcHRpb24sCi5zeW50YXhoaWdobGlnaHRlciB0ZXh0YXJlYSB7CiAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDAgMCAwICFpbXBvcnRhbnQ7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDAgMCAwICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50OwogIGJvcmRlcjogMCAhaW1wb3J0YW50OwogIGJvdHRvbTogYXV0byAhaW1wb3J0YW50OwogIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgbGVmdDogYXV0byAhaW1wb3J0YW50OwogIGxpbmUtaGVpZ2h0OiAxLjFlbSAhaW1wb3J0YW50OwogIG1hcmdpbjogMCAhaW1wb3J0YW50OwogIG91dGxpbmU6IDAgIWltcG9ydGFudDsKICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7CiAgcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7CiAgdG9wOiBhdXRvICFpbXBvcnRhbnQ7CiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7CiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICBib3gtc2l6aW5nOiBjb250ZW50LWJveCAhaW1wb3J0YW50OwogIGZvbnQtZmFtaWx5OiAiQ29uc29sYXMiLCAiQml0c3RyZWFtIFZlcmEgU2FucyBNb25vIiwgIkNvdXJpZXIgTmV3IiwgQ291cmllciwgbW9ub3NwYWNlICFpbXBvcnRhbnQ7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbCAhaW1wb3J0YW50OwogIGZvbnQtc3R5bGU6IG5vcm1hbCAhaW1wb3J0YW50OwogIGZvbnQtc2l6ZTogMWVtICFpbXBvcnRhbnQ7CiAgbWluLWhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50OwogIG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKfQoKLnN5bnRheGhpZ2hsaWdodGVyIHsKICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogIG1hcmdpbjogMWVtIDAgMWVtIDAgIWltcG9ydGFudDsKICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDsKICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50OwogIGZvbnQtc2l6ZTogMWVtICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnNvdXJjZSB7CiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuYm9sZCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLml0YWxpYyB7CiAgZm9udC1zdHlsZTogaXRhbGljICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5saW5lIHsKICB3aGl0ZS1zcGFjZTogcHJlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHsKICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSBjYXB0aW9uIHsKICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7CiAgcGFkZGluZzogLjVlbSAwIDAuNWVtIDFlbSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5jb2RlIHsKICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5jb2RlIC5jb250YWluZXIgewogIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5jb2RlIC5jb250YWluZXIgdGV4dGFyZWEgewogIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICBsZWZ0OiAwICFpbXBvcnRhbnQ7CiAgdG9wOiAwICFpbXBvcnRhbnQ7CiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kOiB3aGl0ZSAhaW1wb3J0YW50OwogIHBhZGRpbmctbGVmdDogMWVtICFpbXBvcnRhbnQ7CiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogIHdoaXRlLXNwYWNlOiBwcmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGQuZ3V0dGVyIC5saW5lIHsKICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDAgMC41ZW0gMCAxZW0gIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGQuY29kZSAubGluZSB7CiAgcGFkZGluZzogMCAxZW0gIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIubm9ndXR0ZXIgdGQuY29kZSAuY29udGFpbmVyIHRleHRhcmVhLCAuc3ludGF4aGlnaGxpZ2h0ZXIubm9ndXR0ZXIgdGQuY29kZSAubGluZSB7CiAgcGFkZGluZy1sZWZ0OiAwZW0gIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuc2hvdyB7CiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIHRhYmxlIHsKICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciB7CiAgcGFkZGluZzogMC4xZW0gMC44ZW0gMGVtIDAuOGVtICFpbXBvcnRhbnQ7CiAgZm9udC1zaXplOiAxZW0gIWltcG9ydGFudDsKICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7CiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIHNwYW4gewogIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OwogIG1hcmdpbi1yaWdodDogMWVtICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciBzcGFuIGEgewogIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciBzcGFuIGEuZXhwYW5kU291cmNlIHsKICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogIHJpZ2h0OiAxcHggIWltcG9ydGFudDsKICB0b3A6IDFweCAhaW1wb3J0YW50OwogIHdpZHRoOiAxMXB4ICFpbXBvcnRhbnQ7CiAgaGVpZ2h0OiAxMXB4ICFpbXBvcnRhbnQ7CiAgZm9udC1zaXplOiAxMHB4ICFpbXBvcnRhbnQ7CiAgei1pbmRleDogMTAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgc3Bhbi50aXRsZSB7CiAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFyIGEgewogIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgcGFkZGluZy10b3A6IDFweCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciBhLmV4cGFuZFNvdXJjZSB7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5pZSB7CiAgZm9udC1zaXplOiAuOWVtICFpbXBvcnRhbnQ7CiAgcGFkZGluZzogMXB4IDAgMXB4IDAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuaWUgLnRvb2xiYXIgewogIGxpbmUtaGVpZ2h0OiA4cHggIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuaWUgLnRvb2xiYXIgYSB7CiAgcGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZS5hbHQxIC5jb250ZW50LAouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuYWx0MiAuY29udGVudCwKLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lLmhpZ2hsaWdodGVkIC5udW1iZXIsCi5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZS5oaWdobGlnaHRlZC5hbHQxIC5jb250ZW50LAouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuaGlnaGxpZ2h0ZWQuYWx0MiAuY29udGVudCB7CiAgYmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZSAubnVtYmVyIHsKICBjb2xvcjogI2JiYmJiYiAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZSAuY29udGVudCB7CiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC50b29sYmFyIHsKICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIGEgewogIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAucGxhaW4sIC5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAucGxhaW4gYSB7CiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb21tZW50cywgLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb21tZW50cyBhIHsKICBjb2xvcjogIzAwODIwMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuc3RyaW5nLCAuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnN0cmluZyBhIHsKICBjb2xvcjogYmx1ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAua2V5d29yZCB7CiAgY29sb3I6ICMwMDY2OTkgIWltcG9ydGFudDsKICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAucHJlcHJvY2Vzc29yIHsKICBjb2xvcjogZ3JheSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAudmFyaWFibGUgewogIGNvbG9yOiAjYWE3NzAwICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC52YWx1ZSB7CiAgY29sb3I6ICMwMDk5MDAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmZ1bmN0aW9ucyB7CiAgY29sb3I6ICNmZjE0OTMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbnN0YW50cyB7CiAgY29sb3I6ICMwMDY2Y2MgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnNjcmlwdCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbG9yMSwgLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjEgYSB7CiAgY29sb3I6IGdyYXkgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbG9yMiwgLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjIgYSB7CiAgY29sb3I6ICNmZjE0OTMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbG9yMywgLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjMgYSB7CiAgY29sb3I6IHJlZCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuYnJlYWssIC5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuYnJlYWsgYSB7CiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/styles/shCore.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnN5bnRheGhpZ2hsaWdodGVyIGEsLnN5bnRheGhpZ2hsaWdodGVyIGRpdiwuc3ludGF4aGlnaGxpZ2h0ZXIgY29kZSwuc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUsLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLC5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ciwuc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGJvZHksLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRoZWFkLC5zeW50YXhoaWdobGlnaHRlciB0YWJsZSBjYXB0aW9uLC5zeW50YXhoaWdobGlnaHRlciB0ZXh0YXJlYXstbW96LWJvcmRlci1yYWRpdXM6MCAwIDAgMCFpbXBvcnRhbnQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMCAwIDAhaW1wb3J0YW50O2JhY2tncm91bmQ6bm9uZSFpbXBvcnRhbnQ7Ym9yZGVyOjAhaW1wb3J0YW50O2JvdHRvbTphdXRvIWltcG9ydGFudDtmbG9hdDpub25lIWltcG9ydGFudDtoZWlnaHQ6YXV0byFpbXBvcnRhbnQ7bGVmdDphdXRvIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjFlbSFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50O291dGxpbmU6MCFpbXBvcnRhbnQ7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDtwb3NpdGlvbjpzdGF0aWMhaW1wb3J0YW50O3JpZ2h0OmF1dG8haW1wb3J0YW50O3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnQ7dG9wOmF1dG8haW1wb3J0YW50O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lIWltcG9ydGFudDt3aWR0aDphdXRvIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94IWltcG9ydGFudDtmb250LWZhbWlseToiQ29uc29sYXMiLCJCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8iLCJDb3VyaWVyIE5ldyIsQ291cmllcixtb25vc3BhY2UhaW1wb3J0YW50O2ZvbnQtd2VpZ2h0Om5vcm1hbCFpbXBvcnRhbnQ7Zm9udC1zdHlsZTpub3JtYWwhaW1wb3J0YW50O2ZvbnQtc2l6ZToxZW0haW1wb3J0YW50O21pbi1oZWlnaHQ6aW5oZXJpdCFpbXBvcnRhbnQ7bWluLWhlaWdodDphdXRvIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVye3dpZHRoOjEwMCUhaW1wb3J0YW50O21hcmdpbjoxZW0gMCAxZW0gMCFpbXBvcnRhbnQ7cG9zaXRpb246cmVsYXRpdmUhaW1wb3J0YW50O292ZXJmbG93OmF1dG8haW1wb3J0YW50O2ZvbnQtc2l6ZToxZW0haW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIuc291cmNle292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAuYm9sZHtmb250LXdlaWdodDpib2xkIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmV7d2hpdGUtc3BhY2U6cHJlIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIHRhYmxle3dpZHRoOjEwMCUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgY2FwdGlvbnt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50O3BhZGRpbmc6LjVlbSAwIC41ZW0gMWVtIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLmNvZGV7d2lkdGg6MTAwJSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5jb2RlIC5jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGQuY29kZSAuY29udGFpbmVyIHRleHRhcmVhe2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7cG9zaXRpb246YWJzb2x1dGUhaW1wb3J0YW50O2xlZnQ6MCFpbXBvcnRhbnQ7dG9wOjAhaW1wb3J0YW50O3dpZHRoOjEwMCUhaW1wb3J0YW50O2hlaWdodDoxMDAlIWltcG9ydGFudDtib3JkZXI6bm9uZSFpbXBvcnRhbnQ7YmFja2dyb3VuZDp3aGl0ZSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0OjFlbSFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDt3aGl0ZS1zcGFjZTpwcmUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGQuZ3V0dGVyIC5saW5le3RleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50O3BhZGRpbmc6MCAuNWVtIDAgMWVtIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLmNvZGUgLmxpbmV7cGFkZGluZzowIDFlbSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5ub2d1dHRlciB0ZC5jb2RlIC5jb250YWluZXIgdGV4dGFyZWEsLnN5bnRheGhpZ2hsaWdodGVyLm5vZ3V0dGVyIHRkLmNvZGUgLmxpbmV7cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIuc2hvd3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCB0YWJsZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFye3BhZGRpbmc6LjFlbSAuOGVtIDAgLjhlbSFpbXBvcnRhbnQ7Zm9udC1zaXplOjFlbSFpbXBvcnRhbnQ7cG9zaXRpb246c3RhdGljIWltcG9ydGFudDt3aWR0aDphdXRvIWltcG9ydGFudDtoZWlnaHQ6YXV0byFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgc3BhbntkaXNwbGF5OmlubGluZSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjFlbSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgc3BhbiBhe3BhZGRpbmc6MCFpbXBvcnRhbnQ7ZGlzcGxheTpub25lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciBzcGFuIGEuZXhwYW5kU291cmNle2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFye3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDtyaWdodDoxcHghaW1wb3J0YW50O3RvcDoxcHghaW1wb3J0YW50O3dpZHRoOjExcHghaW1wb3J0YW50O2hlaWdodDoxMXB4IWltcG9ydGFudDtmb250LXNpemU6MTBweCFpbXBvcnRhbnQ7ei1pbmRleDoxMCFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciBzcGFuLnRpdGxle2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFyIGF7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjpub25lIWltcG9ydGFudDtwYWRkaW5nLXRvcDoxcHghaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgYS5leHBhbmRTb3VyY2V7ZGlzcGxheTpub25lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmlle2ZvbnQtc2l6ZTouOWVtIWltcG9ydGFudDtwYWRkaW5nOjFweCAwIDFweCAwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmllIC50b29sYmFye2xpbmUtaGVpZ2h0OjhweCFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5pZSAudG9vbGJhciBhe3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuYWx0MSAuY29udGVudCwuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuYWx0MiAuY29udGVudCwuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuaGlnaGxpZ2h0ZWQgLm51bWJlciwuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuaGlnaGxpZ2h0ZWQuYWx0MSAuY29udGVudCwuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuaGlnaGxpZ2h0ZWQuYWx0MiAuY29udGVudHtiYWNrZ3JvdW5kOm5vbmUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUgLm51bWJlcntjb2xvcjojYmJiIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lIC5jb250ZW50e2NvbG9yOmJsYWNrIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC50b29sYmFye2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyBhe3RleHQtZGVjb3JhdGlvbjpub25lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5wbGFpbiwuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnBsYWluIGF7Y29sb3I6YmxhY2shaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbW1lbnRzLC5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuY29tbWVudHMgYXtjb2xvcjojMDA4MjAwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5zdHJpbmcsLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5zdHJpbmcgYXtjb2xvcjpibHVlIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5rZXl3b3Jke2NvbG9yOiMwNjkhaW1wb3J0YW50O2ZvbnQtd2VpZ2h0OmJvbGQhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnByZXByb2Nlc3Nvcntjb2xvcjpncmF5IWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC52YXJpYWJsZXtjb2xvcjojYTcwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC52YWx1ZXtjb2xvcjojMDkwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5mdW5jdGlvbnN7Y29sb3I6I2ZmMTQ5MyFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuY29uc3RhbnRze2NvbG9yOiMwNmMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnNjcmlwdHtmb250LXdlaWdodDpib2xkIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjEsLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjEgYXtjb2xvcjpncmF5IWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjIsLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjIgYXtjb2xvcjojZmYxNDkzIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjMsLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjMgYXtjb2xvcjpyZWQhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmJyZWFrLC5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuYnJlYWsgYXtjb2xvcjpibGFjayFpbXBvcnRhbnQ7fQ==]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/styles/shCoreDefault.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKiAKICogQGNvcHlyaWdodAogKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBBbGV4IEdvcmJhdGNoZXYuCiAqCiAqIEBsaWNlbnNlCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKi8KLnN5bnRheGhpZ2hsaWdodGVyIGEsCi5zeW50YXhoaWdobGlnaHRlciBkaXYsCi5zeW50YXhoaWdobGlnaHRlciBjb2RlLAouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUsCi5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZCwKLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRyLAouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGJvZHksCi5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0aGVhZCwKLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIGNhcHRpb24sCi5zeW50YXhoaWdobGlnaHRlciB0ZXh0YXJlYSB7CiAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDAgMCAwICFpbXBvcnRhbnQ7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDAgMCAwICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50OwogIGJvcmRlcjogMCAhaW1wb3J0YW50OwogIGJvdHRvbTogYXV0byAhaW1wb3J0YW50OwogIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgbGVmdDogYXV0byAhaW1wb3J0YW50OwogIGxpbmUtaGVpZ2h0OiAxLjFlbSAhaW1wb3J0YW50OwogIG1hcmdpbjogMCAhaW1wb3J0YW50OwogIG91dGxpbmU6IDAgIWltcG9ydGFudDsKICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7CiAgcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7CiAgdG9wOiBhdXRvICFpbXBvcnRhbnQ7CiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7CiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICBib3gtc2l6aW5nOiBjb250ZW50LWJveCAhaW1wb3J0YW50OwogIGZvbnQtZmFtaWx5OiAiQ29uc29sYXMiLCAiQml0c3RyZWFtIFZlcmEgU2FucyBNb25vIiwgIkNvdXJpZXIgTmV3IiwgQ291cmllciwgbW9ub3NwYWNlICFpbXBvcnRhbnQ7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbCAhaW1wb3J0YW50OwogIGZvbnQtc3R5bGU6IG5vcm1hbCAhaW1wb3J0YW50OwogIGZvbnQtc2l6ZTogMWVtICFpbXBvcnRhbnQ7CiAgbWluLWhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50OwogIG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKfQoKLnN5bnRheGhpZ2hsaWdodGVyIHsKICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogIG1hcmdpbjogMWVtIDAgMWVtIDAgIWltcG9ydGFudDsKICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDsKICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50OwogIGZvbnQtc2l6ZTogMWVtICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnNvdXJjZSB7CiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuYm9sZCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLml0YWxpYyB7CiAgZm9udC1zdHlsZTogaXRhbGljICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5saW5lIHsKICB3aGl0ZS1zcGFjZTogcHJlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHsKICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSBjYXB0aW9uIHsKICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7CiAgcGFkZGluZzogLjVlbSAwIDAuNWVtIDFlbSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5jb2RlIHsKICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5jb2RlIC5jb250YWluZXIgewogIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5jb2RlIC5jb250YWluZXIgdGV4dGFyZWEgewogIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICBsZWZ0OiAwICFpbXBvcnRhbnQ7CiAgdG9wOiAwICFpbXBvcnRhbnQ7CiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kOiB3aGl0ZSAhaW1wb3J0YW50OwogIHBhZGRpbmctbGVmdDogMWVtICFpbXBvcnRhbnQ7CiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogIHdoaXRlLXNwYWNlOiBwcmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGQuZ3V0dGVyIC5saW5lIHsKICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDAgMC41ZW0gMCAxZW0gIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGQuY29kZSAubGluZSB7CiAgcGFkZGluZzogMCAxZW0gIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIubm9ndXR0ZXIgdGQuY29kZSAuY29udGFpbmVyIHRleHRhcmVhLCAuc3ludGF4aGlnaGxpZ2h0ZXIubm9ndXR0ZXIgdGQuY29kZSAubGluZSB7CiAgcGFkZGluZy1sZWZ0OiAwZW0gIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuc2hvdyB7CiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIHRhYmxlIHsKICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciB7CiAgcGFkZGluZzogMC4xZW0gMC44ZW0gMGVtIDAuOGVtICFpbXBvcnRhbnQ7CiAgZm9udC1zaXplOiAxZW0gIWltcG9ydGFudDsKICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7CiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIHNwYW4gewogIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OwogIG1hcmdpbi1yaWdodDogMWVtICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciBzcGFuIGEgewogIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciBzcGFuIGEuZXhwYW5kU291cmNlIHsKICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogIHJpZ2h0OiAxcHggIWltcG9ydGFudDsKICB0b3A6IDFweCAhaW1wb3J0YW50OwogIHdpZHRoOiAxMXB4ICFpbXBvcnRhbnQ7CiAgaGVpZ2h0OiAxMXB4ICFpbXBvcnRhbnQ7CiAgZm9udC1zaXplOiAxMHB4ICFpbXBvcnRhbnQ7CiAgei1pbmRleDogMTAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgc3Bhbi50aXRsZSB7CiAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFyIGEgewogIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgcGFkZGluZy10b3A6IDFweCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciBhLmV4cGFuZFNvdXJjZSB7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5pZSB7CiAgZm9udC1zaXplOiAuOWVtICFpbXBvcnRhbnQ7CiAgcGFkZGluZzogMXB4IDAgMXB4IDAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuaWUgLnRvb2xiYXIgewogIGxpbmUtaGVpZ2h0OiA4cHggIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuaWUgLnRvb2xiYXIgYSB7CiAgcGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZS5hbHQxIC5jb250ZW50LAouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuYWx0MiAuY29udGVudCwKLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lLmhpZ2hsaWdodGVkIC5udW1iZXIsCi5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZS5oaWdobGlnaHRlZC5hbHQxIC5jb250ZW50LAouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuaGlnaGxpZ2h0ZWQuYWx0MiAuY29udGVudCB7CiAgYmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZSAubnVtYmVyIHsKICBjb2xvcjogI2JiYmJiYiAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZSAuY29udGVudCB7CiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC50b29sYmFyIHsKICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIGEgewogIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAucGxhaW4sIC5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAucGxhaW4gYSB7CiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb21tZW50cywgLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb21tZW50cyBhIHsKICBjb2xvcjogIzAwODIwMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuc3RyaW5nLCAuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnN0cmluZyBhIHsKICBjb2xvcjogYmx1ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAua2V5d29yZCB7CiAgY29sb3I6ICMwMDY2OTkgIWltcG9ydGFudDsKICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAucHJlcHJvY2Vzc29yIHsKICBjb2xvcjogZ3JheSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAudmFyaWFibGUgewogIGNvbG9yOiAjYWE3NzAwICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC52YWx1ZSB7CiAgY29sb3I6ICMwMDk5MDAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmZ1bmN0aW9ucyB7CiAgY29sb3I6ICNmZjE0OTMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbnN0YW50cyB7CiAgY29sb3I6ICMwMDY2Y2MgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnNjcmlwdCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbG9yMSwgLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjEgYSB7CiAgY29sb3I6IGdyYXkgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbG9yMiwgLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjIgYSB7CiAgY29sb3I6ICNmZjE0OTMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbG9yMywgLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjMgYSB7CiAgY29sb3I6IHJlZCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuYnJlYWssIC5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuYnJlYWsgYSB7CiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0KCi5zeW50YXhoaWdobGlnaHRlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUuYWx0MSB7CiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUuYWx0MiB7CiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUuaGlnaGxpZ2h0ZWQuYWx0MSwgLnN5bnRheGhpZ2hsaWdodGVyIC5saW5lLmhpZ2hsaWdodGVkLmFsdDIgewogIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUuaGlnaGxpZ2h0ZWQubnVtYmVyIHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgY2FwdGlvbiB7CiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5ndXR0ZXIgewogIGNvbG9yOiAjYWZhZmFmICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5ndXR0ZXIgLmxpbmUgewogIGJvcmRlci1yaWdodDogM3B4IHNvbGlkICM2Y2UyNmMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmd1dHRlciAubGluZS5oaWdobGlnaHRlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzZjZTI2YyAhaW1wb3J0YW50OwogIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZSAuY29udGVudCB7CiAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCB7CiAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIHsKICBjb2xvcjogYmx1ZSAhaW1wb3J0YW50OwogIGJhY2tncm91bmQ6IHdoaXRlICFpbXBvcnRhbnQ7CiAgYm9yZGVyOiAxcHggc29saWQgIzZjZTI2YyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgYSB7CiAgY29sb3I6IGJsdWUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIGE6aG92ZXIgewogIGNvbG9yOiByZWQgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgewogIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogIGJhY2tncm91bmQ6ICM2Y2UyNmMgIWltcG9ydGFudDsKICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgYSB7CiAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFyIGE6aG92ZXIgewogIGNvbG9yOiBibGFjayAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAucGxhaW4sIC5zeW50YXhoaWdobGlnaHRlciAucGxhaW4gYSB7CiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5jb21tZW50cywgLnN5bnRheGhpZ2hsaWdodGVyIC5jb21tZW50cyBhIHsKICBjb2xvcjogIzAwODIwMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuc3RyaW5nLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLnN0cmluZyBhIHsKICBjb2xvcjogYmx1ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAua2V5d29yZCB7CiAgY29sb3I6ICMwMDY2OTkgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnByZXByb2Nlc3NvciB7CiAgY29sb3I6IGdyYXkgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnZhcmlhYmxlIHsKICBjb2xvcjogI2FhNzcwMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudmFsdWUgewogIGNvbG9yOiAjMDA5OTAwICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5mdW5jdGlvbnMgewogIGNvbG9yOiAjZmYxNDkzICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5jb25zdGFudHMgewogIGNvbG9yOiAjMDA2NmNjICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5zY3JpcHQgewogIGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7CiAgY29sb3I6ICMwMDY2OTkgIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kLWNvbG9yOiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjEsIC5zeW50YXhoaWdobGlnaHRlciAuY29sb3IxIGEgewogIGNvbG9yOiBncmF5ICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjIsIC5zeW50YXhoaWdobGlnaHRlciAuY29sb3IyIGEgewogIGNvbG9yOiAjZmYxNDkzICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjMsIC5zeW50YXhoaWdobGlnaHRlciAuY29sb3IzIGEgewogIGNvbG9yOiByZWQgIWltcG9ydGFudDsKfQoKLnN5bnRheGhpZ2hsaWdodGVyIC5rZXl3b3JkIHsKICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/styles/shCoreDefault.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnN5bnRheGhpZ2hsaWdodGVyIGEsLnN5bnRheGhpZ2hsaWdodGVyIGRpdiwuc3ludGF4aGlnaGxpZ2h0ZXIgY29kZSwuc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUsLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLC5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ciwuc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGJvZHksLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRoZWFkLC5zeW50YXhoaWdobGlnaHRlciB0YWJsZSBjYXB0aW9uLC5zeW50YXhoaWdobGlnaHRlciB0ZXh0YXJlYXstbW96LWJvcmRlci1yYWRpdXM6MCAwIDAgMCFpbXBvcnRhbnQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMCAwIDAhaW1wb3J0YW50O2JhY2tncm91bmQ6bm9uZSFpbXBvcnRhbnQ7Ym9yZGVyOjAhaW1wb3J0YW50O2JvdHRvbTphdXRvIWltcG9ydGFudDtmbG9hdDpub25lIWltcG9ydGFudDtoZWlnaHQ6YXV0byFpbXBvcnRhbnQ7bGVmdDphdXRvIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjFlbSFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50O291dGxpbmU6MCFpbXBvcnRhbnQ7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDtwb3NpdGlvbjpzdGF0aWMhaW1wb3J0YW50O3JpZ2h0OmF1dG8haW1wb3J0YW50O3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnQ7dG9wOmF1dG8haW1wb3J0YW50O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lIWltcG9ydGFudDt3aWR0aDphdXRvIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94IWltcG9ydGFudDtmb250LWZhbWlseToiQ29uc29sYXMiLCJCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8iLCJDb3VyaWVyIE5ldyIsQ291cmllcixtb25vc3BhY2UhaW1wb3J0YW50O2ZvbnQtd2VpZ2h0Om5vcm1hbCFpbXBvcnRhbnQ7Zm9udC1zdHlsZTpub3JtYWwhaW1wb3J0YW50O2ZvbnQtc2l6ZToxZW0haW1wb3J0YW50O21pbi1oZWlnaHQ6aW5oZXJpdCFpbXBvcnRhbnQ7bWluLWhlaWdodDphdXRvIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVye3dpZHRoOjEwMCUhaW1wb3J0YW50O21hcmdpbjoxZW0gMCAxZW0gMCFpbXBvcnRhbnQ7cG9zaXRpb246cmVsYXRpdmUhaW1wb3J0YW50O292ZXJmbG93OmF1dG8haW1wb3J0YW50O2ZvbnQtc2l6ZToxZW0haW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIuc291cmNle292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAuYm9sZHtmb250LXdlaWdodDpib2xkIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmV7d2hpdGUtc3BhY2U6cHJlIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIHRhYmxle3dpZHRoOjEwMCUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgY2FwdGlvbnt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50O3BhZGRpbmc6LjVlbSAwIC41ZW0gMWVtIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLmNvZGV7d2lkdGg6MTAwJSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5jb2RlIC5jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGQuY29kZSAuY29udGFpbmVyIHRleHRhcmVhe2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7cG9zaXRpb246YWJzb2x1dGUhaW1wb3J0YW50O2xlZnQ6MCFpbXBvcnRhbnQ7dG9wOjAhaW1wb3J0YW50O3dpZHRoOjEwMCUhaW1wb3J0YW50O2hlaWdodDoxMDAlIWltcG9ydGFudDtib3JkZXI6bm9uZSFpbXBvcnRhbnQ7YmFja2dyb3VuZDp3aGl0ZSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0OjFlbSFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDt3aGl0ZS1zcGFjZTpwcmUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGQuZ3V0dGVyIC5saW5le3RleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50O3BhZGRpbmc6MCAuNWVtIDAgMWVtIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLmNvZGUgLmxpbmV7cGFkZGluZzowIDFlbSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5ub2d1dHRlciB0ZC5jb2RlIC5jb250YWluZXIgdGV4dGFyZWEsLnN5bnRheGhpZ2hsaWdodGVyLm5vZ3V0dGVyIHRkLmNvZGUgLmxpbmV7cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIuc2hvd3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCB0YWJsZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFye3BhZGRpbmc6LjFlbSAuOGVtIDAgLjhlbSFpbXBvcnRhbnQ7Zm9udC1zaXplOjFlbSFpbXBvcnRhbnQ7cG9zaXRpb246c3RhdGljIWltcG9ydGFudDt3aWR0aDphdXRvIWltcG9ydGFudDtoZWlnaHQ6YXV0byFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgc3BhbntkaXNwbGF5OmlubGluZSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjFlbSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgc3BhbiBhe3BhZGRpbmc6MCFpbXBvcnRhbnQ7ZGlzcGxheTpub25lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciBzcGFuIGEuZXhwYW5kU291cmNle2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFye3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDtyaWdodDoxcHghaW1wb3J0YW50O3RvcDoxcHghaW1wb3J0YW50O3dpZHRoOjExcHghaW1wb3J0YW50O2hlaWdodDoxMXB4IWltcG9ydGFudDtmb250LXNpemU6MTBweCFpbXBvcnRhbnQ7ei1pbmRleDoxMCFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciBzcGFuLnRpdGxle2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFyIGF7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjpub25lIWltcG9ydGFudDtwYWRkaW5nLXRvcDoxcHghaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgYS5leHBhbmRTb3VyY2V7ZGlzcGxheTpub25lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmlle2ZvbnQtc2l6ZTouOWVtIWltcG9ydGFudDtwYWRkaW5nOjFweCAwIDFweCAwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmllIC50b29sYmFye2xpbmUtaGVpZ2h0OjhweCFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5pZSAudG9vbGJhciBhe3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuYWx0MSAuY29udGVudCwuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuYWx0MiAuY29udGVudCwuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuaGlnaGxpZ2h0ZWQgLm51bWJlciwuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuaGlnaGxpZ2h0ZWQuYWx0MSAuY29udGVudCwuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuaGlnaGxpZ2h0ZWQuYWx0MiAuY29udGVudHtiYWNrZ3JvdW5kOm5vbmUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUgLm51bWJlcntjb2xvcjojYmJiIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lIC5jb250ZW50e2NvbG9yOmJsYWNrIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC50b29sYmFye2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyBhe3RleHQtZGVjb3JhdGlvbjpub25lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5wbGFpbiwuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnBsYWluIGF7Y29sb3I6YmxhY2shaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbW1lbnRzLC5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuY29tbWVudHMgYXtjb2xvcjojMDA4MjAwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5zdHJpbmcsLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5zdHJpbmcgYXtjb2xvcjpibHVlIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5rZXl3b3Jke2NvbG9yOiMwNjkhaW1wb3J0YW50O2ZvbnQtd2VpZ2h0OmJvbGQhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnByZXByb2Nlc3Nvcntjb2xvcjpncmF5IWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC52YXJpYWJsZXtjb2xvcjojYTcwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC52YWx1ZXtjb2xvcjojMDkwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5mdW5jdGlvbnN7Y29sb3I6I2ZmMTQ5MyFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuY29uc3RhbnRze2NvbG9yOiMwNmMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnNjcmlwdHtmb250LXdlaWdodDpib2xkIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjEsLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjEgYXtjb2xvcjpncmF5IWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjIsLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjIgYXtjb2xvcjojZmYxNDkzIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjMsLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5jb2xvcjMgYXtjb2xvcjpyZWQhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmJyZWFrLC5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuYnJlYWsgYXtjb2xvcjpibGFjayFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlcntiYWNrZ3JvdW5kLWNvbG9yOndoaXRlIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5saW5lLmFsdDF7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAubGluZS5hbHQye2JhY2tncm91bmQtY29sb3I6d2hpdGUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUuaGlnaGxpZ2h0ZWQuYWx0MSwuc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUuaGlnaGxpZ2h0ZWQuYWx0MntiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTAhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUuaGlnaGxpZ2h0ZWQubnVtYmVye2NvbG9yOmJsYWNrIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIGNhcHRpb257Y29sb3I6YmxhY2shaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmd1dHRlcntjb2xvcjojYWZhZmFmIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5ndXR0ZXIgLmxpbmV7Ym9yZGVyLXJpZ2h0OjNweCBzb2xpZCAjNmNlMjZjIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5ndXR0ZXIgLmxpbmUuaGlnaGxpZ2h0ZWR7YmFja2dyb3VuZC1jb2xvcjojNmNlMjZjIWltcG9ydGFudDtjb2xvcjp3aGl0ZSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZSAuY29udGVudHtib3JkZXI6bm9uZSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWR7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXJ7Y29sb3I6Ymx1ZSFpbXBvcnRhbnQ7YmFja2dyb3VuZDp3aGl0ZSFpbXBvcnRhbnQ7Ym9yZGVyOjFweCBzb2xpZCAjNmNlMjZjIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciBhe2NvbG9yOmJsdWUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIGE6aG92ZXJ7Y29sb3I6cmVkIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFye2NvbG9yOndoaXRlIWltcG9ydGFudDtiYWNrZ3JvdW5kOiM2Y2UyNmMhaW1wb3J0YW50O2JvcmRlcjpub25lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFyIGF7Y29sb3I6d2hpdGUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgYTpob3Zlcntjb2xvcjpibGFjayFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAucGxhaW4sLnN5bnRheGhpZ2hsaWdodGVyIC5wbGFpbiBhe2NvbG9yOmJsYWNrIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5jb21tZW50cywuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbW1lbnRzIGF7Y29sb3I6IzAwODIwMCFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAuc3RyaW5nLC5zeW50YXhoaWdobGlnaHRlciAuc3RyaW5nIGF7Y29sb3I6Ymx1ZSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAua2V5d29yZHtjb2xvcjojMDY5IWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5wcmVwcm9jZXNzb3J7Y29sb3I6Z3JheSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAudmFyaWFibGV7Y29sb3I6I2E3MCFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAudmFsdWV7Y29sb3I6IzA5MCFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAuZnVuY3Rpb25ze2NvbG9yOiNmZjE0OTMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbnN0YW50c3tjb2xvcjojMDZjIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5zY3JpcHR7Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7Y29sb3I6IzA2OSFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjpub25lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjEsLnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjEgYXtjb2xvcjpncmF5IWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjIsLnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjIgYXtjb2xvcjojZmYxNDkzIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjMsLnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjMgYXtjb2xvcjpyZWQhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmtleXdvcmR7Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7fQ==]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/styles/shThemeDefault.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKiAKICogQGNvcHlyaWdodAogKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBBbGV4IEdvcmJhdGNoZXYuCiAqCiAqIEBsaWNlbnNlCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKi8KLnN5bnRheGhpZ2hsaWdodGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAubGluZS5hbHQxIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAubGluZS5hbHQyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAubGluZS5oaWdobGlnaHRlZC5hbHQxLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUuaGlnaGxpZ2h0ZWQuYWx0MiB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAubGluZS5oaWdobGlnaHRlZC5udW1iZXIgewogIGNvbG9yOiBibGFjayAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSBjYXB0aW9uIHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmd1dHRlciB7CiAgY29sb3I6ICNhZmFmYWYgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmd1dHRlciAubGluZSB7CiAgYm9yZGVyLXJpZ2h0OiAzcHggc29saWQgIzZjZTI2YyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuZ3V0dGVyIC5saW5lLmhpZ2hsaWdodGVkIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmNlMjZjICFpbXBvcnRhbnQ7CiAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lIC5jb250ZW50IHsKICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIHsKICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgewogIGNvbG9yOiBibHVlICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZDogd2hpdGUgIWltcG9ydGFudDsKICBib3JkZXI6IDFweCBzb2xpZCAjNmNlMjZjICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciBhIHsKICBjb2xvcjogYmx1ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgYTpob3ZlciB7CiAgY29sb3I6IHJlZCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciB7CiAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZDogIzZjZTI2YyAhaW1wb3J0YW50OwogIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciBhIHsKICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgYTpob3ZlciB7CiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5wbGFpbiwgLnN5bnRheGhpZ2hsaWdodGVyIC5wbGFpbiBhIHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbW1lbnRzLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbW1lbnRzIGEgewogIGNvbG9yOiAjMDA4MjAwICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5zdHJpbmcsIC5zeW50YXhoaWdobGlnaHRlciAuc3RyaW5nIGEgewogIGNvbG9yOiBibHVlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5rZXl3b3JkIHsKICBjb2xvcjogIzAwNjY5OSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAucHJlcHJvY2Vzc29yIHsKICBjb2xvcjogZ3JheSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudmFyaWFibGUgewogIGNvbG9yOiAjYWE3NzAwICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC52YWx1ZSB7CiAgY29sb3I6ICMwMDk5MDAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmZ1bmN0aW9ucyB7CiAgY29sb3I6ICNmZjE0OTMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbnN0YW50cyB7CiAgY29sb3I6ICMwMDY2Y2MgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnNjcmlwdCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKICBjb2xvcjogIzAwNjY5OSAhaW1wb3J0YW50OwogIGJhY2tncm91bmQtY29sb3I6IG5vbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMSwgLnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjEgYSB7CiAgY29sb3I6IGdyYXkgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMiwgLnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjIgYSB7CiAgY29sb3I6ICNmZjE0OTMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMywgLnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjMgYSB7CiAgY29sb3I6IHJlZCAhaW1wb3J0YW50Owp9Cgouc3ludGF4aGlnaGxpZ2h0ZXIgLmtleXdvcmQgewogIGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/styles/shThemeDefault.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnN5bnRheGhpZ2hsaWdodGVye2JhY2tncm91bmQtY29sb3I6d2hpdGUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUuYWx0MXtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5saW5lLmFsdDJ7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAubGluZS5oaWdobGlnaHRlZC5hbHQxLC5zeW50YXhoaWdobGlnaHRlciAubGluZS5oaWdobGlnaHRlZC5hbHQye2JhY2tncm91bmQtY29sb3I6I2UwZTBlMCFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAubGluZS5oaWdobGlnaHRlZC5udW1iZXJ7Y29sb3I6YmxhY2shaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgY2FwdGlvbntjb2xvcjpibGFjayFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAuZ3V0dGVye2NvbG9yOiNhZmFmYWYhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmd1dHRlciAubGluZXtib3JkZXItcmlnaHQ6M3B4IHNvbGlkICM2Y2UyNmMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmd1dHRlciAubGluZS5oaWdobGlnaHRlZHtiYWNrZ3JvdW5kLWNvbG9yOiM2Y2UyNmMhaW1wb3J0YW50O2NvbG9yOndoaXRlIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lIC5jb250ZW50e2JvcmRlcjpub25lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZHtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhcntjb2xvcjpibHVlIWltcG9ydGFudDtiYWNrZ3JvdW5kOndoaXRlIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkICM2Y2UyNmMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIGF7Y29sb3I6Ymx1ZSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgYTpob3Zlcntjb2xvcjpyZWQhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXJ7Y29sb3I6d2hpdGUhaW1wb3J0YW50O2JhY2tncm91bmQ6IzZjZTI2YyFpbXBvcnRhbnQ7Ym9yZGVyOm5vbmUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgYXtjb2xvcjp3aGl0ZSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciBhOmhvdmVye2NvbG9yOmJsYWNrIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5wbGFpbiwuc3ludGF4aGlnaGxpZ2h0ZXIgLnBsYWluIGF7Y29sb3I6YmxhY2shaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbW1lbnRzLC5zeW50YXhoaWdobGlnaHRlciAuY29tbWVudHMgYXtjb2xvcjojMDA4MjAwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5zdHJpbmcsLnN5bnRheGhpZ2hsaWdodGVyIC5zdHJpbmcgYXtjb2xvcjpibHVlIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5rZXl3b3Jke2NvbG9yOiMwNjkhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLnByZXByb2Nlc3Nvcntjb2xvcjpncmF5IWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC52YXJpYWJsZXtjb2xvcjojYTcwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC52YWx1ZXtjb2xvcjojMDkwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5mdW5jdGlvbnN7Y29sb3I6I2ZmMTQ5MyFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAuY29uc3RhbnRze2NvbG9yOiMwNmMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLnNjcmlwdHtmb250LXdlaWdodDpib2xkIWltcG9ydGFudDtjb2xvcjojMDY5IWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOm5vbmUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMSwuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMSBhe2NvbG9yOmdyYXkhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMiwuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMiBhe2NvbG9yOiNmZjE0OTMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMywuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMyBhe2NvbG9yOnJlZCFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAua2V5d29yZHtmb250LXdlaWdodDpib2xkIWltcG9ydGFudDt9]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/styles/shThemejqPlot.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKiAKICogQGNvcHlyaWdodAogKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBBbGV4IEdvcmJhdGNoZXYuCiAqCiAqIEBsaWNlbnNlCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKi8KLnN5bnRheGhpZ2hsaWdodGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAubGluZS5hbHQxIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAubGluZS5hbHQyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAubGluZS5oaWdobGlnaHRlZC5hbHQxLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUuaGlnaGxpZ2h0ZWQuYWx0MiB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAubGluZS5oaWdobGlnaHRlZC5udW1iZXIgewogIGNvbG9yOiBibGFjayAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSBjYXB0aW9uIHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmd1dHRlciB7CiAgY29sb3I6ICNhZmFmYWYgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmd1dHRlciAubGluZSB7CiAgYm9yZGVyLXJpZ2h0OiAzcHggc29saWQgIzZjZTI2YyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuZ3V0dGVyIC5saW5lLmhpZ2hsaWdodGVkIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmNlMjZjICFpbXBvcnRhbnQ7CiAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lIC5jb250ZW50IHsKICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIHsKICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgewogIGNvbG9yOiBibHVlICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZDogd2hpdGUgIWltcG9ydGFudDsKICBib3JkZXI6IDFweCBzb2xpZCAjNmNlMjZjICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciBhIHsKICBjb2xvcjogYmx1ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgYTpob3ZlciB7CiAgY29sb3I6IHJlZCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciB7CiAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZDogIzZjZTI2YyAhaW1wb3J0YW50OwogIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciBhIHsKICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgYTpob3ZlciB7CiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5wbGFpbiwgLnN5bnRheGhpZ2hsaWdodGVyIC5wbGFpbiBhIHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbW1lbnRzLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbW1lbnRzIGEgewogIGNvbG9yOiAjMDA4MjAwICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5zdHJpbmcsIC5zeW50YXhoaWdobGlnaHRlciAuc3RyaW5nIGEgewogIGNvbG9yOiBibHVlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5rZXl3b3JkIHsKICBjb2xvcjogIzAwNjY5OSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAucHJlcHJvY2Vzc29yIHsKICBjb2xvcjogZ3JheSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudmFyaWFibGUgewogIGNvbG9yOiAjYWE3NzAwICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC52YWx1ZSB7CiAgY29sb3I6ICMwMDk5MDAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmZ1bmN0aW9ucyB7CiAgY29sb3I6ICNmZjE0OTMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbnN0YW50cyB7CiAgY29sb3I6ICMwMDY2Y2MgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnNjcmlwdCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKICBjb2xvcjogIzAwNjY5OSAhaW1wb3J0YW50OwogIGJhY2tncm91bmQtY29sb3I6IG5vbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMSwgLnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjEgYSB7CiAgY29sb3I6IGdyYXkgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMiwgLnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjIgYSB7CiAgY29sb3I6ICNmZjE0OTMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMywgLnN5bnRheGhpZ2hsaWdodGVyIC5jb2xvcjMgYSB7CiAgY29sb3I6IHJlZCAhaW1wb3J0YW50Owp9Cgouc3ludGF4aGlnaGxpZ2h0ZXIgLmtleXdvcmQgewogIGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7Cn0KCi5zeW50YXhoaWdobGlnaHRlciBhLAouc3ludGF4aGlnaGxpZ2h0ZXIgZGl2LAouc3ludGF4aGlnaGxpZ2h0ZXIgY29kZSwKLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlLAouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGQsCi5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ciwKLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRib2R5LAouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGhlYWQsCi5zeW50YXhoaWdobGlnaHRlciB0YWJsZSBjYXB0aW9uLAouc3ludGF4aGlnaGxpZ2h0ZXIgdGV4dGFyZWEgewogIGxpbmUtaGVpZ2h0OiAxLjNlbSAhaW1wb3J0YW50Owp9CgpkaXYuc3ludGF4aGlnaGxpZ2h0ZXIgewogIGZvbnQtc2l6ZTogMC44NWVtICFpbXBvcnRhbnQ7Cn0KCmRpdi5pbmNsdWRlIGRpdi5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5jb2RlIC5saW5lIHsKICBtYXJnaW4tdG9wOiAwLjFlbSAhaW1wb3J0YW50Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/jqplot/syntaxhighlighter/styles/shThemejqPlot.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnN5bnRheGhpZ2hsaWdodGVye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUuYWx0MXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5saW5lLmFsdDJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAubGluZS5oaWdobGlnaHRlZC5hbHQxLC5zeW50YXhoaWdobGlnaHRlciAubGluZS5oaWdobGlnaHRlZC5hbHQye2JhY2tncm91bmQtY29sb3I6I2UwZTBlMCFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAubGluZS5oaWdobGlnaHRlZC5udW1iZXJ7Y29sb3I6YmxhY2shaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgY2FwdGlvbntjb2xvcjpibGFjayFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAuZ3V0dGVye2NvbG9yOiNhZmFmYWYhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmd1dHRlciAubGluZXtib3JkZXItcmlnaHQ6M3B4IHNvbGlkICM2Y2UyNmMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmd1dHRlciAubGluZS5oaWdobGlnaHRlZHtiYWNrZ3JvdW5kLWNvbG9yOiM2Y2UyNmMhaW1wb3J0YW50O2NvbG9yOndoaXRlIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lIC5jb250ZW50e2JvcmRlcjpub25lIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZHtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhcntjb2xvcjpibHVlIWltcG9ydGFudDtiYWNrZ3JvdW5kOndoaXRlIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkICM2Y2UyNmMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIGF7Y29sb3I6Ymx1ZSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgYTpob3Zlcntjb2xvcjpyZWQhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXJ7Y29sb3I6d2hpdGUhaW1wb3J0YW50O2JhY2tncm91bmQ6IzZjZTI2YyFpbXBvcnRhbnQ7Ym9yZGVyOm5vbmUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgYXtjb2xvcjp3aGl0ZSFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciBhOmhvdmVye2NvbG9yOmJsYWNrIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5wbGFpbiwuc3ludGF4aGlnaGxpZ2h0ZXIgLnBsYWluIGF7Y29sb3I6YmxhY2shaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbW1lbnRzLC5zeW50YXhoaWdobGlnaHRlciAuY29tbWVudHMgYXtjb2xvcjojMDA4MjAwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5zdHJpbmcsLnN5bnRheGhpZ2hsaWdodGVyIC5zdHJpbmcgYXtjb2xvcjpibHVlIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5rZXl3b3Jke2NvbG9yOiMwNjkhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLnByZXByb2Nlc3Nvcntjb2xvcjpncmF5IWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC52YXJpYWJsZXtjb2xvcjojYTcwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC52YWx1ZXtjb2xvcjojMDkwIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIC5mdW5jdGlvbnN7Y29sb3I6I2ZmMTQ5MyFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAuY29uc3RhbnRze2NvbG9yOiMwNmMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLnNjcmlwdHtmb250LXdlaWdodDpib2xkIWltcG9ydGFudDtjb2xvcjojMDY5IWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOm5vbmUhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMSwuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMSBhe2NvbG9yOmdyYXkhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMiwuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMiBhe2NvbG9yOiNmZjE0OTMhaW1wb3J0YW50O30uc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMywuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMyBhe2NvbG9yOnJlZCFpbXBvcnRhbnQ7fS5zeW50YXhoaWdobGlnaHRlciAua2V5d29yZHtmb250LXdlaWdodDpib2xkIWltcG9ydGFudDt9LnN5bnRheGhpZ2hsaWdodGVyIGEsLnN5bnRheGhpZ2hsaWdodGVyIGRpdiwuc3ludGF4aGlnaGxpZ2h0ZXIgY29kZSwuc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUsLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLC5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ciwuc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGJvZHksLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRoZWFkLC5zeW50YXhoaWdobGlnaHRlciB0YWJsZSBjYXB0aW9uLC5zeW50YXhoaWdobGlnaHRlciB0ZXh0YXJlYXtsaW5lLWhlaWdodDoxLjNlbSFpbXBvcnRhbnQ7fWRpdi5zeW50YXhoaWdobGlnaHRlcntmb250LXNpemU6Ljg1ZW0haW1wb3J0YW50O31kaXYuaW5jbHVkZSBkaXYuc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdGQuY29kZSAubGluZXttYXJnaW4tdG9wOi4xZW0haW1wb3J0YW50O30=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAAIJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAMAAAABAAAQAHNwYmxvYgAAANxicAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAGUAeAB0YndzcGJsb2IAAADcYnBsaXN0MDDYAQIDBAUGBwgJCQsJCw4PC11TaG93U3RhdHVzQmFyW1Nob3dQYXRoYmFyW1Nob3dUb29sYmFyW1Nob3dUYWJWaWV3XxAUQ29udGFpbmVyU2hvd1NpZGViYXJcV2luZG93Qm91bmRzXFNpZGViYXJXaWR0aFtTaG93U2lkZWJhcggICQgJXxAYe3szNTEsIDYzMX0sIHs3NzAsIDQ2MH19EIEJCBknMz9LYm98iImKi4yNqKoAAAAAAAABAQAAAAAAAAARAAAAAAAAAAAAAAAAAAAAqwAAAAMAZQB4AHRkc2NsYm9vbAEAAAADAGUAeAB0dlNybmxvbmcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAACCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAGAAAAAAAAAAAQAAAIAAAAABAAABAAAAAAAAAAABAAAEAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1RhYmxlIFRlbm5pcyc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1Bvc3QgSW5zdGFsbCBNZXNzYWdlLCBlLmcuLCBCZSBzdXJlIHRvIHNldCAiVXNlIFNrZWxldG9ucyIgcGVybWlzc2lvbnMgdG8gdXNlIHRoaXMgbW9kdWxlISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnUG9zdCBVbmluc3RhbGwgTWVzc2FnZSwgZS5nLiwgIkN1cnNlcyEgRm9pbGVkIEFnYWluISInOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1JlYWxseT8gWW91XCdyZSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCB0aGlzIGZpbmUgbW9kdWxlPyc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdNb2R1bGUgcHJlZmVyZW5jZXMgdXBkYXRlZC4nOwokbGFuZ1snc3VibWl0J10gPSAnRW52b3llcic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBY2Nlc3MgRGVuaWVkLiBQbGVhc2UgY2hlY2sgeW91ciBwZXJtaXNzaW9ucy4nOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvciEnOwokbGFuZ1sncmVzdWx0c2ZvdW5kdGV4dCddID0gJ3JlY29yZHMgZm91bmQnOwokbGFuZ1snbGlua192aWV3J10gPSAnVmlldyBSZWNvcmQnOwokbGFuZ1snZWRpdCddID0gJ0VkaXQgUmVjb3JkJzsKJGxhbmdbJ3RpdGxlX251bV9yZWNvcmRzJ10gPSAnJXMgcmVjb3JkcyBmb3VuZC4nOwokbGFuZ1snYWRkX3JlY29yZCddID0gJ0FkZCBhIFJlY29yZCc7CiRsYW5nWydzYXZlZF9yZWNvcmQnXSA9ICdBZGQgYSBSZWNvcmQnOwokbGFuZ1snYWRkZWRfcmVjb3JkJ10gPSAnQWRkZWQgcmVjb3JkLic7CiRsYW5nWyd1cGRhdGVkX3JlY29yZCddID0gJ1JlY29yZCB1cGRhdGVkLic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWyd0aXRsZV9hbGxvd19hZGQnXSA9ICdVc2VycyBtYXkgYWRkIHJlY29yZHM/JzsKJGxhbmdbJ3RpdGxlX2FsbG93X2FkZF9oZWxwJ10gPSAnQ2xpY2sgaGVyZSB0byBhbGxvdyB1c2VycyB0byBhZGQgcmVjb3Jkcy4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTW9kdWxlIFByZWZlcmVuY2VzJzsKJGxhbmdbJ3RpdGxlX2dlbmVyYWwnXSA9ICdHZW5lcmFsIEluZm8nOwokbGFuZ1sndGl0bGVfZGVzY3JpcHRpb24nXSA9ICdEZXNjcmlwdGlvbic7CiRsYW5nWyd0aXRsZV9leHBsYW5hdGlvbiddID0gJ0xvbmcgRGVzY3JpcHRpb24nOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnTW9kdWxlIEFkbWluIFBhbmVsJzsKJGxhbmdbJ2Rhc2hfcmVjb3JkX2NvdW50J10gPSAnVGhpcyBtb2R1bGUgaGFuZGxlcyAlcyByZWNvcmRzJzsKJGxhbmdbJ2FsZXJ0X25vX3JlY29yZHMnXSA9ICdUaGVyZSBoYXZlIG5vdCBiZWVuIGFueSByZWNvcmRzIGFkZGVkIGluIHRoZSBTa2VsZXRvbiBtb2R1bGUhJzsKJGxhbmdbJ2hlbHBfc2tlbGV0b25faWQnXSA9ICdJbnRlcm5hbGx5IGlkZW50aWZpZXIgZm9yIHNlbGVjdGluZyByZWNvcmRzJzsKJGxhbmdbJ2hlbHBfY29kZV9jb21wZXQnXSA9ICdDZSBjb2RlIHNlIHRyb3V2ZSBkYW5zIGxlcyByw6lzdWx0YXRzIEZGVFQnOwokbGFuZ1snaGVscF9kZXNjcmlwdGlvbiddID0gJ0ludGVybmFsIHBhcmFtZXRlciB1c2VkIHRvIHBhc3MgZGVzY3JpcHRpb24gaW5mbyB3aGVuIGNyZWF0aW5nIG9yIGVkaXRpbmcgYSByZWNvcmQnOwokbGFuZ1snaGVscF9leHBsYW5hdGlvbiddID0gJ0ludGVybmFsIHBhcmFtZXRlciB1c2VkIHRvIHBhc3MgZXhwbGFuYXRpb24gaW5mbyB3aGVuIGNyZWF0aW5nIG9yIGVkaXRpbmcgYSByZWNvcmQnOwokbGFuZ1snaGVscF9tb2R1bGVfbWVzc2FnZSddID0gJ0ludGVybmFsbHkgdXNlZCBwYXJhbWV0ZXIgZm9yIHBhc3NpbmcgbWVzc2FnZXMgdG8gdXNlcic7CiRsYW5nWydldmVudF9pbmZvX09uU2tlbGV0b25QcmVmZXJlbmNlQ2hhbmdlJ10gPSAnQW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gIHRoZSBwcmVmZXJlbmNlcyB0byB0aGUgU2tlbGV0b24gTW9kdWxlIGdldCBjaGFuZ2VkJzsKJGxhbmdbJ2V2ZW50X2hlbHBfT25Ta2VsZXRvblByZWZlcmVuY2VDaGFuZ2UnXSA9ICc8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiB0aGUgcHJlZmVyZW5jZXMgdG8gdGhlIFNrZWxldG9uIE1vZHVsZSBnZXQgY2hhbmdlZDwvcD4KPGg0PlBhcmFtZXRlcnM8L2g0Pgo8dWw+CjxsaT48ZW0+YWxsb3dfYWRkPC9lbT4gLSBUaGUgbmV3IHNldHRpbmcgb2YgdGhlICJBbGxvdyBBZGQiIHByZWZlcmVuY2U7IGJvb2xlYW48L2xpPgo8L3VsPiAKJzsKCiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0NlIG1vZHVsZSBjYWxjdWxlIHZvcyBwb2ludHMgRkZUVC4nOwokbGFuZ1snd2VsY29tZV90ZXh0J10gPSAnPHA+QmllbnZlbnVlIGRhbnMgbGUgbW9kdWxlIFBpbmc8L3A+JzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4KPGxpPlZlcnNpb24gMC4xYmV0YTMsIE5vdiAyMDE0IFNjIEFtw6lsaW9yYXRpb25zIGR1IGZyb250LW9mZmljZSBldCBkw6lib2d1YWdlIGR1IGJhY2s8L2xpPgo8dWw+CiAgIDxsaT5NaXNlIG5lIHBsYWNlIGR1IGZyb250LW9mZmljZS48L2xpPgogICA8bGk+QW3DqWxpb3JhdGlvbnMgZHUgYmFjay1vZmZpY2UgZXQgY29ycmVjdGlvbnMgZGUgYnVncy48L2xpPgo8L3VsPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPlF1ZSBmYWl0IGNlIG1vZHVsZSA/PC9oMz4KPHA+Q2UgbW9kdWxlIHLDqWN1cMOocmUgbGVzIHLDqXN1bHRhdHMgZGUgdm90cmUgY2x1YiBldCByw6lhbGlzZSBkZXMgdHJhaXRlbWVudHMgYWZpbiBkZSBsZXMgZGlzcG9zZXIgc3VyIHZvdHJlIHNpdGUgaW50ZXJuZXQuPC9wPgo8aDM+Q29tbWVudCBsXCd1dGlsaXNlciA/PC9oMz4KPHA+TGUgdGFnIHBhciBkw6lmYXV0IGVzdCBjZWx1aS1jaSB7Y21zX21vZHVsZSBtb2R1bGU9XCdQaW5nXCd9PC9wPgo8aDM+U3VwcG9ydDwvaDM+Cjx1bD4KPGxpPlBvdXIgb2J0ZW5pciBsYSBkZXJuacOocmUgdmVyc2lvbiBvZmZpY2llbGxlLCBGQVFzLCBvdSBwb3VyIHNpZ25hbGVyIHVuIGJ1ZywgZmFpcmUgdW5lIGRlbWFuZGUgZFwnYW3DqWxpb3JhdGlvbnMsIG1lcmNpIGRlIGNvbnN1bHRlciBsYSBmb3JnZSBkdSBtb2R1bGUgw6AgY2V0dGUgYWRyZXNzZSA6IAo8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3BpbmcvIj5QaW5nPC9hPi48L2xpPgo8L3VsPgo8cD5DZSBtb2R1bGUgZXN0IGZvdXJuaSBzb3VzIGxpY2VuY2UgR1BMIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi5Qb3VyIHV0aWxpc2VyIGxlIGxvZ2ljaWVsLCB2b3VzIGRldmV6IGVuICBhY2NlcHRlciBsZXMgdGVybWVzPC9wPgoKPGgzPkNvcHlyaWdodCBldCBMaWNlbmNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDE0LCBDbGF1ZGUgU2lvaGFuIDxhIGhyZWY9Im1haWx0bzpjbGF1ZGVAYWdpLXdlYmNvbnNlaWwuZnIiPmNsYXVkZUBhZ2ktd2ViY29uc2VpbC5mcjwvYT4uIFRvdXMgZHJvaXRzIHLDqXNlcnbDqXMuPC9wPgonOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2FjdGl2ZSddID0gJ0FjdGlmJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjYyZlYWN1dGU7cyBJbnRlcmRpdC4gViZlYWN1dGU7cmlmaWVyIHZvcyBwZXJtaXNzaW9ucy4nOwokbGFuZ1snYWRkX3VzZXInXSA9ICdBam91dGVyIHVuIGpvdWV1cihldXNlKSc7CiRsYW5nWydhZGQtbWFudWFsbHknXSA9ICdBam91dGVyIG1hbnVlbGxlbWVudCc7CiRsYW5nWydhZGQnXSA9ICJBam91dGVyIjsKJGxhbmdbJ2FkcmVzc2UnXSA9ICdBZHJlc3NlJzsKJGxhbmdbJ2FsbHNlYXNvbnMnXSA9ICdUb3V0ZXMgbGVzIHNhaXNvbnMnOwokbGFuZ1snYWxsc3RhdHVzJ10gPSAiVG91cyBsZXMgc3RhdHV0cyI7CiRsYW5nWydhbGxkYXRlcyddID0gIlRvdXRlcyBsZXMgZGF0ZXMiOwokbGFuZ1snYWxsZXF1aXBlcyddID0gJ1RvdXRlcyBsZXMgZXF1aXBlcyc7CiRsYW5nWydhbGx0b3VycyddID0gJ1RvdXMnOwokbGFuZ1snYWxscG91bGVzJ10gPSAnVG91dGVzIGxlcyBwb3VsZXMnOwokbGFuZ1snYWxsbW9udGhzJ10gPSAnVG91cyBsZXMgbW9pcyc7CiRsYW5nWydhbGxjb21wZXQnXSA9ICdUb3V0ZXMgbGVzIGNvbXDDqXRpdGlvbnMnOwokbGFuZ1snYWRkX2NvbXBldCddID0gJ0Fqb3V0ZXIgdW5lIG5vdXZlbGxlIGNvbXDDqXRpdGlvbic7CiRsYW5nWydhZGRfdHlwZV9jb21wZXQnXSA9ICdBam91dGVyIHVuZSBub3V2ZWxsZSBjb21ww6l0aXRpb24nOwokbGFuZ1snYWRkbWFudWFsbHknXSA9ICJham91dGVyIG1hbnVlbGxlbWVudCI7CiRsYW5nWydhbGxwbGF5ZXJzJ10gPSAnVG91cyBsZXMgam91ZXVycyc7CiRsYW5nWydhZGRfY29udGFjdCddID0gJ0Fqb3V0ZXIgdW4gY29udGFjdCc7CiRsYW5nWydhZGRuZXdzaGVldCddID0gJ0Fqb3V0ZXIgdW5lIHJlbmNvbnRyZSc7CiRsYW5nWydhZHZlcnNhaXJlJ10gPSAnQWR2ZXJzYWlyZSc7CiRsYW5nWydhZHZlcnNhaXJlcyddID0gJ0FkdmVyc2FpcmVzJzsKJGxhbmdbJ2FyZXlvdXN1cmVfZGVsZXRlbXVsdGlwbGUnXSA9ICdFdGVzIHZvdXMgY2VydGFpbiBkZSBzdXBwcmltZXIgdG91dGUgbGEgc8OpbGVjdGlvbiA/JzsKJGxhbmdbJ2FyZXlvdXN1cmVfYWN0aW9ubXVsdGlwbGUnXSA9ICdFdGVzIHZvdXMgY2VydGFpbiBkZSBmYWlyZSBjZXR0ZSBhY3Rpb24gcG91ciB0b3V0ZSBsYSBzw6lsZWN0aW9uID8nOwokbGFuZ1snYXBwbHlfdG9fc2VsZWN0aW9uJ10gPSAnQXBwbGlxdWVyIMOgIGxhIHPDqWxlY3Rpb24gPyc7CiRsYW5nWydhZGRfcmVjb3JkJ10gPSAnQWpvdXRlciB1biBlbnJlZ2lzdHJlbWVudCc7CiRsYW5nWydhZGRlZF9yZWNvcmQnXSA9ICdFbnJlZ2lzdHJlbWVudCBham91dCZlYWN1dGU7JzsKJGxhbmdbJ2FsZXJ0X25vX3JlY29yZHMnXSA9ICdJbCBuJiMwMzk7eSBhIHBhcyBldSBkJiMwMzk7ZW5yZWdpc3RyZW1lbnRzIGFqb3V0JmVhY3V0ZTtzIGRhbnMgbGUgbW9kdWxlISc7CiRsYW5nWydiYWNrJ10gPSAnUmV0b3VyJzsKJGxhbmdbJ2NyZWF0ZV9jb250YWN0J10gPSAnQWpvdXRlciB1biBjb250YWN0JzsKJGxhbmdbJ2NyZWF0ZV9uZXdfdXNlciddID0gJ0Nyw6llciB1biBub3V2ZWwgdXRpbGlzYXRldXInOwokbGFuZ1snY3JlYXRlX25ld19saXN0J10gPSAnQ3ImZWFjdXRlO2VyIHVuZSBub3V2ZWxsZSBsaXN0ZSc7CiRsYW5nWydjb21tdW5lJ10gPSAnY29tbXVuZSc7CiRsYW5nWydjYW5jZWwnXSA9ICdBbm51bGVyJzsKJGxhbmdbJ2NvbmZpcm1fZW1haWwnXSA9ICdDb25maXJtZXogdm90cmUgZW1haWwnOwokbGFuZ1snZGFzaF9yZWNvcmRfY291bnQnXSA9ICdDZSBtb2R1bGUgZyZlZ3JhdmU7cmUgJXMgZW5yZWdpc3RyZW1lbnRzJzsKJGxhbmdbJ2RvX25vdF9kaXNwbGF5J10gPSAnTmUgcGx1cyBhZmZpY2hlciBzdXIgbGUgc2l0ZSc7CiRsYW5nWydkaXNwbGF5X29uX2Zyb250ZW5kJ10gPSAnQWZmaWNoZXIgc3VyIGxlIHNpdGUnOwokbGFuZ1snZGVsZXRlJ10gPSAnU3VwcHJpbWVyJzsKJGxhbmdbJ2RlbGV0ZV9hbGxfZGl2J10gPSAnQ2VjaSBzdXBwcmltZXJhIGxhIGRpdmlzaW9uLCBsZXMgdG91cnMsIHBhcnRpZXMgZXQgY2xhc3NlbWVudHMgbGnDqXMnOwokbGFuZ1snZGVsZXRlX3NlbGVjdGVkJ10gPSAnU3VwcHJpbWVyIGxhIHPDqWxlY3Rpb24nOwokbGFuZ1snZGVsZXRlX3Jlc3VsdF9jb25maXJtJ10gPSAnVm91bGV6LXZvdXMgdnJhaW1lbnQgc3VwcHJpbWVyIGNlIHLDqXN1bHRhdCA/IFRvdXMgbGVzIHLDqXN1bHRhdHMgaW5kaXZpZHVlbHMgbGnDqXMgc2Vyb250IMOpZ2FsZW1lbnQgc3VwcHJpbcOpcyc7CiRsYW5nWydkZWxldGVfY29uZmlybSddID0gJ1ZvdWxleiB2b3VzIHN1cHByaW1lciBjZXQgZW5yZWdpc3RyZW1lbnQgPyc7CiRsYW5nWydkZWxldGVfdXNlcl9jb25maXJtJ10gPSAnVm91bGV6LXZvdXMgdnJhaW1lbnQgc3VwcHJpbWVyIGNldCB1dGlsaXNhdGV1ciA/JzsKJGxhbmdbJ2Rvd25sb2FkX3BvdWxlX3Jlc3VsdHMnXSA9ICdUw6lsw6ljaGFyZ2VyIGxlcyByw6lzdWx0YXRzIGRlIGxhIHBvdWxlJzsKJGxhbmdbJ2Rvd25sb2FkX2FsbF9wb3VsZV9yZXN1bHRzJ10gPSAnVMOpbMOpY2hhcmdlciBsZXMgcsOpc3VsdGF0cyBkZSB0b3V0ZXMgbGVzIHBvdWxlcyc7CiRsYW5nWydkdXBsaWNhdGUnXSA9ICdEdXBsaXF1ZXInOwokbGFuZ1snZWRpdCddID0gJ0VkaXRlciBsJiMwMzk7ZW5yZWdpc3RyZW1lbnQnOwokbGFuZ1snZW5hYmxlJ10gPSAnYWN0aXZlcic7CiRsYW5nWydlbWFpbCddID0gJ2VtYWlsJzsKJGxhbmdbJ2VxdWlwZSddID0gJ0VxdWlwZSc7CiRsYW5nWydlcnJvciddID0gJ0VycmV1ciAhJzsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcyddID0gJ1BhcmFtZXRyZXMgbWFucXVhbnRzJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRudW1iZXInXSA9ICdFcnJldXIgOiBwYXMgZGUgbnVtJmVhY3V0ZTtybyBmb3VybmkgISc7CiRsYW5nWydlcnJvcl9udW1iZXJleGlzdHMnXSA9ICdDZSBudW0mZWFjdXRlO3JvIGV4aXN0ZSBkJmVhY3V0ZTtqJmFncmF2ZTsnOwokbGFuZ1snZmlsdHJlcyddID0gJ0FwcGxpcXVlciBsZSBmaWx0cmUnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnVGVubmlzIGRlIHRhYmxlJzsKJGxhbmdbJ2lkJ10gPSAnSWQnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIGluc3RhbGwmZWFjdXRlOyBlbiB2ZXJzaW9uICVzLic7CiRsYW5nWydqb3VldXInXSA9ICdKb3VldXInOwokbGFuZ1snbG9uZ19pbXBvcnQnXSA9ICJDZXR0ZSBvcMOpcmF0aW9uIHBldXQgZHVyZXIgcGx1c2lldXJzIG1pbnV0ZXMgISI7CiRsYW5nWydsaW5rX3ZpZXcnXSA9ICdWb2lyIGwmIzAzOTtlbnJlZ2lzdHJlbWVudCc7CiRsYW5nWydsaXN0cyddID0gJ0xpc3Rlcyc7CiRsYW5nWydsaXN0c2ZvdW5kdGV4dCddID0gJ2xpc3RlKHMpIHRyb3V2JmVhY3V0ZTtlKHMpJzsKJGxhbmdbJ21lc3NhZ2VzJ10gPSAnbWVzc2FnZXMnOwokbGFuZ1snbWlzc2luZ19zaXRfbWVucyddID0gJ1NpdHVhdGlvbiBtZW5zdWVsbGUgbWFucXVhbnRlJzsKJGxhbmdbJ21pc3NpbmdfcGFyYW1ldGVycyddID0gJ1BhcmFtw6h0cmUocykgbWFucXVhbnQocyknOwokbGFuZ1snbmFtZSddID0gJ05vbSc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ1ZvdXMgblwnYXZleiBwYXMgbGEgcGVybWlzc2lvbiBkXCdhY2PDqWRlcic7CiRsYW5nWydubyddID0gJ05vbic7CiRsYW5nWydub19mYW1pbHlfbmFtZSddID0gJ1ZvdXMgZGV2ZXogc2Fpc2lyIHZvdHJlIG5vbSBkZSBmYW1pbGxlJzsKJGxhbmdbJ25vX2FkcmVzc2UnXSA9ICdWb3VzIGRldmV6IHNhaXNpciB2b3RyZSBhZHJlc3NlJzsKJGxhbmdbJ29wdGlvbnMnXSA9ICdPcHRpb25zJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ1ByJmVhY3V0ZTtmZXJlbmNlcyBkdSBtb2R1bGUgbWlzZSAmYWdyYXZlOyBqb3VyLic7CiRsYW5nWydwb2ludHMnXSA9ICdQb2ludHMnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdDb25zZWlsIDogc295ZXogc3VyIGQmIzAzOTthdHRyaWJ1ZXIgbGVzIHBlcm1pc3Npb25zICZxdW90UGluZyZxdW90OyBwb3VyIHV0aWxpc2VyIGNlIG1vZHVsZSAhJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdEaWFudHJlICEgbW9kdWxlIGTDqXNpbnN0YWxsw6knOwokbGFuZ1sncHJvbXB0X2FkdmVyc2FpcmVzJ10gPSAnQWR2ZXJzYWlyZXMnOwokbGFuZ1sncHJvbXB0X2VxdWlwZSddID0gJ0VxdWlwZSc7CiRsYW5nWydwcm9tcHRfam91ZXVyJ10gPSAnTm9tIGR1IGpvdWV1cic7CiRsYW5nWydwcm9tcHRfdHlwZUNvbXBldGl0aW9uJ10gPSAnVHlwZSBkZSBjb21ww6l0aXRpb24nOwokbGFuZ1sncHJvbXB0X2NvbXBldGl0aW9uRnJpZW5kbHlOYW1lJ10gPSAnTm9tIGRlIGxhIGNvbXDDqXRpdGlvbic7CiRsYW5nWydwcm9tcHRfZGF0ZUNvbXBldCddID0gJ0RhdGUgZGUgbGEgY29tcMOpdGl0aW9uJzsKJGxhbmdbJ3Byb21wdF9ub21icmVSZW5jb250cmVzJ10gPSAnTmIgZGUgcGFydGllcyBkaXNwdXTDqWVzJzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdcMzEydGVzLXZvdXMgc1wzNzNyIGRlIHZvdWxvaXIgZFwzNTFzaW5zdGFsbGVyIGNlIHN1cGVyIG1vZHVsZSA/JzsKJGxhbmdbJ3Jlc3VsdHNmb3VuZCddID0gJ3LDqXN1bHRhdChzKSc7CiRsYW5nWydyZXN1bHRzZm91bmR0ZXh0J10gPSAnciZlYWN1dGU7c3VsdGF0KHMpIHRyb3V2JmVhY3V0ZTsocyknOwokbGFuZ1sncmVzdWx0Zm91bmR0ZXh0J10gPSAnciZlYWN1dGU7c3VsdGF0KHMpIHRyb3V2JmVhY3V0ZTsocyknOwokbGFuZ1sncmV0cmlldmVhbGxwYXJ0aWVzc3BpZCddID0gJ1LDqWN1cMOpcmVyIHRvdXRlcyBsZXMgcGFydGllcyBTcGlkJzsKJGxhbmdbJ3JldHJpZXZlX3BhcnRpZXMnXSA9ICdQYXJ0aWVzIEZGVFQnOwokbGFuZ1sncmV0cmlldmVfcGFydGllc19zcGlkJ10gPSAnUGFydGllcyBTUElEJzsKJGxhbmdbJ3JldHJpZXZlX3NpdF9tZW5zJ10gPSAnU2l0IG1lbnN1ZWxsZSc7CiRsYW5nWydyZXRyaWV2ZV91c2VycyddID0gIlLDqWN1cMOpcmVyIGxlcyBqb3VldXJzIjsKJGxhbmdbJ3JldHJpZXZlX3VzZXJzX2NvbmZpcm0nXSA9ICdDb25maXJtZXogdm90cmUgZGVtYW5kZSAhJzsKJGxhbmdbJ3NhdmVkX3JlY29yZCddID0gJ0VucmVnaXN0cmVtZW50cyBPayc7CiRsYW5nWydzY29yZV9lcXVpcGUnXSA9ICdTY29yZSBFcXVpcGUnOwokbGFuZ1snc2NvcmVfYWR2J10gPSAnU2NvcmUgQWR2ZXJzYWlyZXMnOwokbGFuZ1snc2hlZXRzZm91bmR0ZXh0J10gPSAncmVuY29udHJlKHMpIHRyb3V2JmVhY3V0ZTtlKHMpJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1NhdXZlZ2FyZGVyJzsKJGxhbmdbJ3N1Ym1pdGFzbmV3J10gPSAnQWpvdXRlciBjb21tZSBub3V2ZWF1JzsKJGxhbmdbJ3RpdGxlX2FsbG93X2FkZCddID0gJ0xlcyB1dGlsaXNhdGV1cnMgcGV1dmVudCBham91dGVyIGRlcyBlbnJlZ2lzdHJlbWVudHMgPyc7CiRsYW5nWyd0aXRsZV9hbGxvd19hZGRfaGVscCddID0gJ0NsaXF1ZXogaWNpIHBvdXIgcGVybWV0dHJlIGF1eCB1dGlsaXNhdGV1cnMgZCYjMDM5O2Fqb3V0ZXIgZGVzIGVucmVnaXN0cmVtZW50cy4nOwokbGFuZ1sndGl0bGVfY2x1Yl9udW1iZXInXSA9ICJOdW3DqXJvIGRlIHZvdHJlIGNsdWIiOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnUHImZWFjdXRlO2ZlcmVuY2VzIGR1IG1vZHVsZSc7CiRsYW5nWyd0aXRsZV9nZW5lcmFsJ10gPSAnSW5mb3JtYXRpb24gZyZlYWN1dGU7biZlYWN1dGU7cmFsZXMnOwokbGFuZ1sndGl0bGVfZGVzY3JpcHRpb24nXSA9ICdEZXNjcmlwdGlvbiAnOwokbGFuZ1sndGl0bGVfZXhwbGFuYXRpb24nXSA9ICdMb25ndWUgRGVzY3JpcHRpb24nOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnUGFubmVhdSBkJiMwMzk7YWRtaW5pc3RyYXRpb24gZHUgbW9kdWxlJzsKJGxhbmdbJ3RpdGxlX251bV9yZWNvcmRzJ10gPSAnJXMgZW5yZWdpc3RyZW1lbnRzIHRyb3V2JmVhY3V0ZTtzLic7CiRsYW5nWyd0b3VyJ10gPSAnVG91cic7CiRsYW5nWyd1bmFibGUnXSA9ICdEw6lzYWN0aXZlcic7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ0xlIG1vZHVsZSBhICZlYWN1dGU7dCZlYWN1dGU7IGQmZWFjdXRlO3NpbnN0YWxsJmVhY3V0ZTsgYXZlYyBzdWNjJmVncmF2ZTtzLic7CiRsYW5nWyd1cGRhdGVkX3JlY29yZCddID0gJ0VucmVnaXN0cmVtZW50IG1pcyAmYWdyYXZlOyBqb3VyLic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ2xlIG1vZHVsZSBhICZlYWN1dGU7dCZlYWN1dGU7IG1pcyAmYWdyYXZlOyBqb3VyICZhZ3JhdmU7IGxhICVzLic7CiRsYW5nWyd1cGxvYWRfcmVzdWx0J10gPSAnVMOpbMOpY2hhcmdlciBsZSByw6lzdWx0YXQnOwokbGFuZ1sndXNlcnMnXSA9ICd1dGlsaXNhdGV1cnMnOwokbGFuZ1sndXNlcnNmb3VuZHRleHQnXSA9ICd1dGlsaXNhdGV1cihzKSB0cm91diZlYWN1dGU7KHMpJzsKJGxhbmdbJ3VzZXJfZGVsZXRlZCddID0gJ1V0aWxpc2F0ZXVyIHN1cHByaW3DqSc7CiRsYW5nWyd1c2VyX3VwZGF0ZWQnXSA9ICdVdGlsaXNhdGV1ciBtb2RpZmkmZWFjdXRlOyc7CiRsYW5nWyd2aWNfZGVmJ10gPSAnVmljdG9pcmUgb3UgZMOpZmFpdGUnOwokbGFuZ1sndmlld19jb250YWN0cyddID0gJ1ZvaXIgbGVzIGNvbnRhY3RzJzsKJGxhbmdbJ3llcyddID0gJ091aSc7CiRsYW5nWydoZWxwX3RvdXInXSA9ICdVdGlsZXogbGUgTsKwIGRlIGpvdXJuw6llIHBvdXIgb2J0ZW5pciBzZXMgcsOpc3VsdGF0cyB1bmlxdWVtZW50JzsKJGxhbmdbJ2hlbHBfbGliZWxsZV9lcXVpcGUnXSA9ICdFeCA6IFJQIEZPVUVTTkFOVCAxJzsKJGxhbmdbJ2hlbHBfbGliZGl2aXNpb24nXSA9ICdFeCA6TmF0aW9uYWxlIDEgTWVzc2lldXJzIFBvdWxlIEMnOwokbGFuZ1snaGVscF9mcmllbmRseW5hbWUnXSA9ICdDZSBub20gc2VydmlyYSDDoCBpbmRlbnRpZmllciBwbHVzIGZhY2lsZW1lbnQgdm9zIMOpcXVpcGVzIGV4IDogTmF0aW9uYWxlIDEgTWVzc2lldXJzIFBvdWxlIEMgZGV2aWVudCBOMSBvdSBOMShDKSc7CiRsYW5nWydoZWxwX2lkZGl2J10gPSAnQ29uc3VsdGV6IGxcJ2FpZGUgc3VyIGxlIG1vZHVsZSc7CiRsYW5nWydoZWxwX2lkcG91bGUnXSA9ICdDb25zdWx0ZXogbFwnYWlkZSBzdXIgbGUgbW9kdWxlJzsKLy8kbGFuZ1snJ10gPSAnJzsKLy8kbGFuZ1snJ10gPSAnJzsKLy8kbGFuZ1snJ10gPSAnJzsKJGxhbmdbJ2hlbHBfdHlwZV9jb21wZXQnXSA9ICdGaWx0cmV6IGxlcyByw6lzdWx0YXRzIGVuIHByw6ljaXNhbnQgbGUgdHlwZSBkZSBjb21ww6l0aXRpb24nOwokbGFuZ1snaGVscF9kYXRlX2RlYnV0J10gPSAnVXRpbGlzZXogbGEgZGF0ZSBkZSBkw6lidXQgZGUgY29tcMOpdGl0aW9uIGF1IGZvcm1hdCAoYWFhYS1tbS1qaiknOwokbGFuZ1snaGVscF9kYXRlX2ZpbiddID0gJ1V0aWxpc2V6IGxhIGRhdGUgZGUgZmluIGF2ZWMgbGEgZGF0ZSBkZSBkw6lidXQgYXUgbcOqbWUgZm9ybWF0JzsKJGxhbmdbJ2hlbHBfbGltaXQnXSA9ICdQb3VyIGxpbWl0ZXIgbGUgbmIgw6AgeCByw6lzdWx0YXRzJzsKJGxhbmdbJ2hlbHBfY29kZV9jb21wZXQnXSA9ICdDZSBjb2RlIHNlIHRyb3V2ZSBkYW5zIGxlcyByw6lzdWx0YXRzIEZGVFQnOwokbGFuZ1snaGVscF9jb2VmZmljaWVudCddID0gJ1V0aWxpc2V6IGxlIHBvaW50ICguKSBldCBub24gbGEgdmlyZ3VsZSBleCAxLjI1IGV0IG5vbiBwYXMgMSwyNSc7CiRsYW5nWydoZWxwX2Rlc2NyaXB0aW9uJ10gPSAnUGFyYW0mZWdyYXZlO3RyZXMgaW50ZXJuZXMgdXRpbGlzJmVhY3V0ZTtzIGxvcnMgZGUgbGEgY3ImZWFjdXRlO2F0aW9uIGQmIzAzOTt1biBub3V2ZWwgZW5yZWdpc3RyZW1lbnQnOwokbGFuZ1snaGVscF9leHBsYW5hdGlvbiddID0gJ1BhcmFtJmVncmF2ZTt0cmUgaW50ZXJuZSB1dGlsaXMmZWFjdXRlOyBwb3VyIHBhc3NlciBkZXMgaW5mb3JtYXRpb25zIGV4cGxpY2F0aXZlcyBsb3JzcXVlIGwmIzAzOTtvbiBjciZlYWN1dGU7JmVhY3V0ZTsgb3UgbCYjMDM5O29uIG1ldCAmYWdyYXZlOyBqb3VyIHVuIGVucmVnaXN0cmVtZW50JzsKJGxhbmdbJ2hlbHBfbW9kdWxlX21lc3NhZ2UnXSA9ICdQYXJhbSZlZ3JhdmU7dHJlIGludGVybmUgdXRpbGlzJmVhY3V0ZTsgcG91ciBsYSB0cmFuc21pc3Npb24gZGVzIG1lc3NhZ2VzICZhZ3JhdmU7IGwmIzAzOTt1dGlsaXNhdGV1cic7CiRsYW5nWydldmVudF9pbmZvX09uU2tlbGV0b25QcmVmZXJlbmNlQ2hhbmdlJ10gPSAnVW4gJmVhY3V0ZTt2JmVhY3V0ZTtuZW1lbnQgZyZlYWN1dGU7biZlYWN1dGU7ciZlYWN1dGU7IGxvcnNxdWUgbGVzIHByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXMgZHUgbW9kdWxlICBzb250IGNoYW5nJmVhY3V0ZTtlcyc7CiRsYW5nWydldmVudF9oZWxwX09uU2tlbGV0b25QcmVmZXJlbmNlQ2hhbmdlJ10gPSAnPHA+QW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gdGhlIHByZWZlcmVuY2VzIHRvIHRoZSBTa2VsZXRvbiBNb2R1bGUgZ2V0IGNoYW5nZWQ8L3A+CjxoND5QYXJhbWV0ZXJzPC9oND4KPHVsPgo8bGk+PGVtPmFsbG93X2FkZDwvZW0+IC0gVGhlIG5ldyBzZXR0aW5nIG9mIHRoZSAmcXVvdDtBbGxvdyBBZGQmcXVvdDsgcHJlZmVyZW5jZTsgYm9vbGVhbjwvbGk+CjwvdWw+IAonOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdFbnRyZXogdG91cyB2b3MgcsOpc3VsdGF0cyBkZSBwaW5nIHBvdXIgYW5hbHlzZSByYXBpZGUuJzsKJGxhbmdbJ3dlbGNvbWVfdGV4dCddID0gJzxwPkJpZW52ZW51ZSBkYW5zIGxlIG1vZHVsZSBkZSBnZXN0aW9uIGRlcyByw6lzdWx0YXRzIGRlIHZvdHJlIGNsdWIgZGUgcGluZzwvcD4nOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnPHVsPgo8bGk+QmV0YSAzCjx1bD4KPGxpPkFqb3V0cyBkZSBsYSBwcmVtacOocmUgdmVyc2lvbiBkdSBmcm9udC1vZmZpY2U8L2xpPgo8bGk+QWpvdXRzIGRlIHBhcmFtw6h0cmVzIHBvdXIgcmVxdWV0ZXIgcGx1cyBmYWNpbGVtZW50IHN1ciBsZSBmcm9udC1vZmZpY2U8L2xpPgo8bGk+UG9zc2liaWxpdMOpIGRcJ2Fqb3V0ZXIgbWFudWVsbGVtZW50IGRlcyBzaXR1YXRpb25zIG1lbnN1ZWxsZXMgYW50w6lyaWV1cmVzPC9saT4KPGxpPlLDqWN1cMOpcmF0aW9uIGR1IHNwaWQgZGVwdWlzIGxlcyByw6lzdWx0YXRzIGRlcyDDqXF1aXBlczwvbGk+CjxsaT5DcsOpYXRpb24gZFwndW5lIHNpdHVhdGlvbiBtZW5zdWVsbGUgInByb3Zpc29pcmUiIHJlY2FsY3Vsw6llIMOgIGNoYXF1ZSBub3V2ZWF1IHLDqXN1bHRhdDwvbGk+CjxsaT5Qb3NzaWJpbGl0w6kgZGUgdsOpcmlmaWVyIGxlIHNwaWQgYXZlYyBsZXMgcGFydGllcyBGRlRUIHF1YW5kIGRpc3BvbmlibGVzPC9saT4KPGxpPkFqb3V0LCBzdXBwcmVzc2lvbiwgbW9kaWZpY2F0aW9ucyBkZSB0eXBlIGRlIGNvbXDDqXRpdGlvbnM8L2xpPgo8bGk+UsOpY3Vww6lyYXRpb24gImVuIG1hc3NlIiBkdSBzcGlkLCBkZXMgcGFydGllcyBGRlRUIGV0IGRlcyBzaXR1YXRpb25zIG1lbnN1ZWxsZXM8L2xpPgo8bGk+UsOpY3Vww6lyYXRpb24gZGUgdG91cyBsZXMgbWF0Y2hzIHBvdXIgcmVtcGxpciBsZSBjYWxlbmRyaWVyPC9saT4KPGxpPkNvcnJlY3Rpb25zIGRlIGJvZ3VlcyBldCBhbcOpbGlvcmF0aW9ucyBkaXZlcnNlczwvbGk+CjwvdWw+CjxsaT5WZXJzaW9uIDAuMjwvbGk+Cjx1bD48bGk+SW1wbMOpbWVudGF0aW9uIGRlcyB0w6JjaGVzIHBzZXVkby1jcm9uIChzY3JpcHRzIHNlbWktYXV0b21hdGlxdWVzKTwvbGk+CjwvdWw+CjxsaT5WZXJzaW9uIDAuMWJldGEyCjx1bD48bGk+TWlzZSDDoCBqb3VyIGVzc2VudGllbGxlbWVudCBjb3JyZWN0aXZlPC9saT4KPC91bD48L2xpPgo8bGk+VmVyc2lvbiAwLjFiZXRhMSBBZ2kKPHVsPgo8bGk+UHJlbWnDqHJlIHJlbGVhc2UgZHUgbW9kdWxlLjwvbGk+CjwvdWw+JzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+UXVlIGZhaXQgY2UgbW9kdWxlID88L2gzPgo8cD5DZSBtb2R1bGUgdm91cyBwZXJtZXQgZGUgcsOpY3Vww6lyZXIgbGVzIHLDqXN1bHRhdHMgZGUgdG91dGVzIGxlcyBjb21ww6l0aXRpb25zIGRlIHZvdHJlIGNsdWIgZXQgZGUgdm9zIGpvdWV1cnMgZXQgcHJvY8OoZGUgw6AgZGVzIGNhbGN1bHMgZGVzIHBlcmZvcm1hbmNlcyAoVm9pciBmZXVpbGxlIGRlIHJvdXRlIHBsdXMgYmFzKS48L3A+CjxoMz5Db21tZW50IGxcJ3V0aWxpc2VyID88L2gzPgo8aDI+UHJlbWnDqHJlIHV0aWxpc2F0aW9uPC9oMj4KPG9sPjxsaT5SZW5zZWlnbmV6IGxcJ29uZ2xldCAiQ29uZmlndXJhdGlvbiIgYXZlYyBsZSBOwrAgZGUgdm90cmUgY2x1YiwgbGEgc2Fpc29uLCBsYSBwaGFzZSBlbiBjb3VycyBhaW5zaSBxdWUgbGUgbm9tIGfDqW7DqXJpcXVlIGRlIHZvcyDDqXF1aXBlcyAobGUgcGx1cyBzb3V2ZW50IGxlIG5vbSBkZSB2b3RyZSB2aWxsZSk8L2xpPgo8bGk+RGFucyBsXCdvbmdsZXQgIkVxdWlwZXMiICwgY2xpcXVleiBzdXIgbGVzIGxpZW5zICJSw6ljdXDDqXJhdGlvbiBkZXMgw6lxdWlwZXMiLjxiciAvPgpVbiBsaWVuIHBvdXIgbGVzIMOpcXVpcGVzIGR1IGNoYW1waW9ubmF0IGRlIEZyYW5jZSBwYXIgw6lxdWlwZXMsIGxcJ2F1dHJlIHBvdXIgbGVzIGF1dHJlcyBjb21ww6l0aXRpb25zIGV0IGluZGlxdWV6IGxlIHR5cGUgZGUgY29tcMOpdGl0aW9ucyBhdXhxdWVsbGVzIGVsbGVzIHBhcnRpY2lwZW50Lgo8YnIgLz48YnIgLz5Qb3VyIHVuZSByw6ljdXDDqXJhdGlvbiBtYW51ZWxsZSwgcmVuZGV6LXZvdXMgc3VyIGxlIHNpdGUgRkZUVC5jb20gc3VyIGxhIHBhZ2UgZGUgcsOpc3VsdGF0cyBkZSB2b3Mgw6lxdWlwZXMuIEVuIG1ldHRhbnQgdm90cmUgc291cmlzIHN1ciBsYSBwb3VsZSB2b3VzIG9idGllbmRyZXogZW4gYmFzIMOgIGdhdWNoZSBsXCd1cmwgY29tcGxldGUgc291cyBjZXR0ZSBmb3JtZSA6IHd3dy5mZnR0LmNvbS9zcG9ydGlmL2NocHRfZXF1aXBlL2NocF9kaXYucGhwP29yZ2FuaXNtZV9wZXJlPVgxJmN4X3BvdWxlPVgyJkQxPVgzLjxiciAvPlgxIHJlcHLDqXNlbnRlIGxcJ29yZ2FuaXNtZSBkb250IGTDqXBlbmQgbGEgY29tcMOpdGl0aW9uICgxMDAwMDEgcG91ciBuYXRpb25hbCwgMTAgKyBuwrAgZGUgbGEgbGlndWUgZXggOiAxMDA3IHBvdXIgbGEgYnJldGFnbmUgcG91ciBsZSBuaXZlYXUgcsOpZ2lvbmFsIGV0IGTDqXBhcnRlbWVudGFsIGV4IDI5IHBvdXIgbGUgZmluaXN0w6hyZSk8YnIgLz5YMiBwb3VyIGxlICBOwrAgZGUgcG91bGUgZXQgWDMgcG91ciBsZSBOwrAgZGUgZGl2aXNpb24gPC9saT4KPGxpPkRhbnMgbFwnb25nbGV0ICJKb3VldXJzIiwgcsOpY3Vww6lyZXogbGVzIGpvdWV1cnMgZ3LDomNlIGF1IGxpZW4gZHUgbcOqbWUgbm9tLiBEw6lzYWN0aXZleiBsZXMgam91ZXVycyBuZSBmYWlzYW50IHBhcyBsXCdvYmpldCBkXCd1bmUgc2l0dWF0aW9uIG1lbnN1ZWxsZTwvbGk+CjxsaT5EYW5zIGxcJ29uZ2xldCAiU2l0dWF0aW9uIG1lbnN1ZWxsZSIgcsOpY3Vww6lyZXogbGEgc2l0dWF0aW9uIG1lbnN1ZWxsZSBkdSBtb2lzIGVuIGNvdXJzICh2b2lyIGTDqXRhaWxzIGNpLWRlc3NvdXMpLjwvbGk+PC9vbD4KPGgzPlNwaWQ8L2gzPgo8cD5Sw6ljdXDDqXJleiBsZXMgcsOpc3VsdGF0cyBkdSBzcGlkIGRlIGRpZmbDqXJlbnRlcyBtYW5pw6hyZXMuIExhIHLDqWN1cMOpcmF0aW9uIGRlIHRvdXMgbGVzIHLDqXN1bHRhdHMgZW4gdW5lIHNldWxlIGZvaXMgcGV1dCBzXCdhdsOpcmVyIHRyw6hzIGxvbmd1ZSAocGx1c2lldXJzIG1pbnV0ZXMpLjxiciAvPgpDb25zZWlsIDogTmUgdMOpbMOpY2hhcmdleiBwYXMgbGVzIHLDqXN1bHRhdHMgZFwndW4gam91ZXVyIHNpIHNhIHNpdHVhdGlvbiBtZW5zdWVsbGUgZHUgbW9pcyBjb25jZXJuw6kgblwnZXN0IHBhcyByZW5zZWlnbsOpZS48L3A+CjxoMz5TaXR1YXRpb24gbWVuc3VlbGxlPC9oMz4KPHA+TG9ycyBkdSBwcmVtaWVyIGltcG9ydCBkZXMgam91ZXVycywgbGEgc2l0dWF0aW9uIG1lbnN1ZWxsZSBwYXIgZMOpZmF1dCBlc3QgSmFudmllciAyMDAwLiBMb3JzcXVlIGxcJ2FjY8OocyBlc3QgbGlicmUsIHZvdXMgcG91dmV6IHLDqWN1cMOpcmVyIGxhIHNpdHVhdGlvbiBtZW5zdWVsbGUgZW4gY291cnMgZGUgdG91cyBsZXMgam91ZXVycyBkZSB2b3RyZSBjbHViPC9wPgo8cD5BVFRFTlRJT04gISEgTGEgRkZUVCBsaW1pdGUgbGEgc2l0dWF0aW9uIG1lbnN1ZWxsZSDDoCAxMDAgYWNjw6hzIHBhciBqb3VyIGV0IHBhciBJUC48L3A+CjxoMj5JbXBsw6ltZW50YXRpb24gc3VyIGxlcyBwYWdlcyBkZSB2b3RyZSBzaXRlPC9oMj4KPHA+VXRpbGlzZXogbGEgYmFsaXNlIHN1aXZhbnRlIDoge2Ntc19tb2R1bGUgbW9kdWxlPVwnUGluZ1wnfS4gQ2VjaSBhZmZpY2hlcmEgcGFyIGTDqWZhdXQgbGVzIHLDqXN1bHRhdHMgZGVzIMOpcXVpcGVzLjwvcD4KPGg0PlBhcmFtw6h0cmVzIGRpc3BvbmlibGVzIDogPC9oND4KPHVsPgo8bGk+YWN0aW9uIC0gSW5kaXF1ZSBsXCdhY3Rpb24gYSBhZmZpY2hlcgo8dWw+CjxsaT5wYXItZXF1aXBlcyAtIEluZGlxdWUgdG91dGVzIGxlcyBjb21ww6l0aXRpb25zIHBhciDDqXF1aXBlcyBleCA6e2Ntc19tb2R1bGUgbW9kdWxlPVwnUGluZ1wnIGFjdGlvbj1cJ3Bhci1lcXVpcGVzXCd9PC9saT4KPGxpPmluZGl2aWR1ZWxsZXMgLSBsZXMgY29tcMOpdGl0aW9ucyBpbmRpdmlkdWVsbGVzPC9saT4KPGxpPnNpdF9tZW5zIC0gcG91ciBsYSBzaXR1YXRpb24gbWVuc3VlbGxlIG9mZmljaWVsbGU8L2xpPgo8bGk+c2l0X21lbnNfcHJvdmlzb2lyZSAtIHBvdXIgdW5lIHNpdHVhdGlvbiBtZW5zdWVsbGUgcsOpw6l2YWx1w6llIGFwcsOocyBjaGFxdWUgY29tcMOpdGl0aW9uIHLDqWN1cMOpcsOpZS48L2xpPgo8L3VsPgo8L2xpPgo8bGk+InR5cGVfY29tcGV0IiAtIGxlIHR5cGUgZGUgY29tcMOpdGl0aW9uIMOgIGFmZmljaGVyIGV4IDoge2Ntc19tb2R1bGUgbW9kdWxlPVwnUGluZ1wnIGFjdGlvbj1cJ3Bhci1lcXVpcGVzXCcgdHlwZV9jb21wZXQ9XCcxXCd9IChkaXNwb25pYmxlcyBkcyBsXCdvbmdsZXQgIkNvbXDDqXRpdGlvbnMiKTwvbGk+CjxsaT4idG91ciIgLSBJbmRpcXVlIGxlIE7CsCBkZSBqb3VybsOpZSBvZmZpY2llbCBleCA6IHtjbXNfbW9kdWxlIG1vZHVsZT1cJ1BpbmdcJyBhY3Rpb249XCdwYXItZXF1aXBlc1wnIHR5cGVfY29tcGV0PVwnMVwnIHRvdXI9XCcxXCd9PC9saT48L3VsPgo8aDM+RmV1aWxsZSBkZSByb3V0ZTwvaDM+Cjx1bD4KPGxpPlVuIGZyb250LW9mZmljZSBhdmVjIGRlcyBncmFwaGlxdWVzIGR5bmFtaXF1ZXMuPC9saT4KPGxpPkRlcyB0ZW1wbGF0ZXMgcG91ciB2b3VzIGFpZGVyIMOgIGLDonRpciB2b3MgcHJvcHJlcyBnYWJhcml0cyBkZXB1aXMgY2UgbW9kdWxlPC9saT4KPC91bD4KPGgzPlNjcmlwdHMgYXV0b21hdGlxdWVzIChwc2V1ZG8tY3Jvbik8L2gzPgo8cD5MZXMgdMOiY2hlcyBwc2V1ZG8tY3JvbiBzXCfDqXjDqWN1dGVudCBhdXRvbWF0aXF1ZW1lbnQgZW4gZm9uY3Rpb24gZGVzIHZpc2l0ZXMgc3VyIHZvdHJlIHNpdGUoaW50ZXJuYXV0ZXMgZXQgYWRtaW5zIGR1IHNpdGUpPGJyIC8+CkRhbnMgbGEgdmVyc2lvbiAwLjIsIGxlcyBzY3JpcHRzIGF1dG9tYXRpcXVlcyBjb25jZXJuZW50IGxlcyByw6lzdWx0YXRzIGR1IFNwaWQgZXQgZGUgbGEgRkZUVC4gSWxzIHNcJ8OpeMOpY3V0ZW50IHRvdXMgbGVzIGpvdXJzIChzaSB2aXNpdGVzIGR1IHNpdGUpLiBJbHMgcsOpY3Vww6hyZW50IGxlcyByw6lzdWx0YXRzIGRlIHggam91ZXVycyBkb250IGxhIG1pc2Ugw6Agam91ciBkYXRlIGRlIHggam91cnMuIElsIGVzdCBkb25jIHBvc3NpYmxlIGRlIGNvbmZpZ3VyZXIgY2VzIHguPC9wPjxwPkF0dGVudGlvbiwgZGVzIHRlbXBzIGRlIGxhdGVuY2UgcGV1dmVudCDDqnRyZSBvYnNlcnbDqXMgZMO7cyDDoCBsXCfDqXjDqWN1dGlvbiBkZXMgc2NyaXB0cy48L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHVsPgo8bGk+UG91ciBvYnRlbmlyIGxhIGRlcm5pw6hyZSB2ZXJzaW9uIGVuIGNvdXJzIChhdmFudCByZWxlYXNlIG9mZmljaWVsbGUpCjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zaW9oYW4vcGluZyI+VmVyc2lvbiBnaXRodWI8L2E+LjwvbGk+CjxsaT5MXCdhdXRldXIgcGV1dCBhdXNzaSDDqnRyZSBjb250YWN0w6kgdmlhIHNreXBlIHNvdXMgbGUgcHNldWRvIGFnaXdlYmNvbnNlaWwuPC9saT4KPGxpPkVuZmluLCB2b3VzIHBvdXZleiBhdXNzaSBtXCdlbnZveWVyIHVuIG1haWwuPC9saT4gIAo8L3VsPgo8cD5FbiB0YW50IHF1ZSBsaWNlbmNlIEdQTCwgY2UgbW9kdWxlIGVzdCBsaXZyw6kgdGVsIHF1ZWwuIE1lcmNpIGRlIGxpcmUgbGUgdGV4dGUgY29tcGxldCBkZSBsYSBsaWNlbnNlIHBvdXIgdW5lIGluZm9ybWF0aW9uIGNvbXBsw6p0ZS48L3A+CjxoMz5SZW1lcmNpZW1lbnRzPC9oMz4KPHA+TWVyY2kgw6AgbWEgZmVtbWUgZXQgw6AgbWVzIGVuZmFudHMgcG91ciBsZXVyIHNvdXRpZW4gdG91am91cnMgaW5kw6lmZWN0aWJsZS48L3A+CjxwPlVuIHJlbWVyY2llbWVudCB0b3V0IHBhcnRpY3VsaWVyIMOgIG1vbiBhbWkgRXJpYyBQb25jaGFudChlcmljZnJlZWxhbmNlKSBwb3VyIHNvbiBzb3V0aWVuLCBzYSBiaWVudmVpbGxhbmNlLCBzYSBwYXRpZW5jZSwgc2VzIGNvbnNlaWxzIHRvdWpvdXJzIGF2aXPDqXMgZXQgc29uIGV4cGVydGlzZSBwb3VyIG1cJ2FpZGVyIMOgIGNoYXF1ZSBmb2lzIMOgIG1lIHNvcnRpciBkZSBsXCdvcm5pw6hyZS4uPC9wPgo8aDM+Q29weXJpZ2h0IGV0IExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmFtcDtjb3B5OyAyMDE0LCBDbGF1ZGUgU2lvaGFuIDxhIGhyZWY9Im1haWx0bzpjbGF1ZGVAYWdpLXdlYmNvbnNlaWwuZnIiPmNsYXVkZUBhZ2ktd2ViY29uc2VpbC5mcjwvYT4uIFRvdXMgZHJvaXRzIHLDqXNlcnbDqXMuPC9wPgo8cD5DZSBtb2R1bGUgZXN0IHNvdXMgbGljZW5jZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFZvdXMgZGV2ZXogYWNjZXB0ZXIgbGEgbGljZW5jZSBhdmFudCBkXCd1dGlsaXNlciBjZSBtb2R1bGUuPC9wPgo8cD5DZSBtb2R1bGUgYSDDqXTDqSBkaXN0cmlidcOpIGRhbnMgbFwnZXNwb2lyIGRcJ8OqdHJlIHV0aWxlLCBtYWlzIHNhbnMKQVVDVU5FIEdBUkFOVElFLiBJbCB2b3VzIGFwcGFydGllbnQgZGUgbGUgdGVzdGVyIGF2YW50IHRvdXRlIG1pc2UgZW4KcHJvZHVjdGlvbiwgcXVlIGNlIHNvaXQgZGFucyBsZSBjYWRyZSBkXCd1bmUgbm91dmVsbGUgaW5zdGFsbGF0aW9uIG91CmRcJ3VuZSBtaXNlIMOgIGpvdXIgZHUgbW9kdWxlLiBMXCdhdXRldXIgZHUgbW9kdWxlIG5lIHBvdXJyYWl0IMOqdHJlIHRlbnUKcG91ciByZXNwb25zYWJsZSBkZSB0b3V0IGR5c2ZvbmN0aW9ubmVtZW50IGR1IHNpdGUgcHJvdmVuYW50IGRlIGNlCm1vZHVsZS4gUG91ciBwbHVzIGRcJ2luZm9ybWF0aW9ucywgPGEKaHJlZj1cImh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTFwiIHRhcmdldD1cIl9ibGFua1wiPmNvbnN1bHRlegpsYSBsaWNlbmNlIEdOVSBHUEw8L2E+LjwvcD4KJzsKCj8+]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/lib/class.PingRecupCalResultsTask.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKY2xhc3MgUGluZ1JlY3VwU3BpZFRhc2sgaW1wbGVtZW50cyBDbXNSZWd1bGFyVGFzawp7CgogICBwdWJsaWMgZnVuY3Rpb24gZ2V0X25hbWUoKQogICB7CiAgICAgIHJldHVybiBnZXRfY2xhc3MoKTsKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIGdldF9kZXNjcmlwdGlvbigpCiAgIHsKICAgICAgcmV0dXJuICdEZXNjcmlwdGlvbiBkZSBsYSB0w6JjaGUuJzsKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIHRlc3QoJHRpbWUgPSAnJykKICAgewoKICAgICAgLy8gSW5zdGFudGlhdGlvbiBkdSBtb2R1bGUKICAgICAgJHBpbmcgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1BpbmcnKTsKCiAgICAgIC8vIFLDqWN1cMOpcmF0aW9uIGRlIGxhIGRlcm5pw6hyZSBkYXRlIGQnZXjDqWN1dGlvbiBkZSBsYSB0w6JjaGUKICAgICAgaWYgKCEkdGltZSkKICAgICAgewogICAgICAgICAkdGltZSA9IHRpbWUoKTsKICAgICAgfQoKICAgICAgJGxhc3RfZXhlY3V0ZSA9ICRwaW5nLT5HZXRQcmVmZXJlbmNlKCdMYXN0UmVjdXBTcGlkJyk7CiAgICAgIAogICAgICAvLyBEw6lmaW5pdGlvbiBkZSBsYSBww6lyaW9kaWNpdMOpIGRlIGxhIHTDomNoZSAoMjRoIGljaSkKICAgICAgaWYgKCAoJHRpbWUgLSAyNCo2MCo2MCApID49ICRsYXN0X2V4ZWN1dGUgKS8vdG91dGVzIGxlcyAyNCBoZXVyZXMgICEhCgogICAgICB7CiAgICAgICAgIHJldHVybiBUUlVFOwogICAgICB9CiAgICAgIAogICAgICByZXR1cm4gRkFMU0U7CiAgICAgIAogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgkdGltZSA9ICcnKQogICB7CgogICAgICBpZiAoISR0aW1lKQogICAgICB7CiAgICAgICAgICR0aW1lID0gdGltZSgpOwogICAgICB9CgogICAgICAkcGluZyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnUGluZycpOwogICAgICAKICAgICAgLy8gQ2UgcXUnaWwgeSBhIMOgIGV4w6ljdXRlciBpY2kKCSRkYiA9ICRwaW5nLT5HZXREYigpOwoJJHNhaXNvbl9jb3VyYW50ZSA9ICRwaW5nLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKCSRub3cgPSB0cmltKCRkYi0+REJUaW1lU3RhbXAodGltZSgpKSwgIiciKTsKCSRxdWVyeSA9ICJTRUxFQ1QgZGF0ZV9ldmVudCwgaWRwb3VsZSxpZGRpdiwgYWZmaWNoZSwgdXBsb2FkZWQsc2NvcmVhLCBzY29yZWIgIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzICBXSEVSRSBjYWwudHlwZV9jb21wID0gdGMuY29kZV9jb21wZXQgQU5EIGBkYXRlX2V2ZW50YCA8PSBOT1coKSBBTkQgYGRhdGVfZXZlbnRgID4gTk9XKCkgLSBJTlRFUlZBTCA3IERBWSAgQU5EIHNjb3JlYSA9IDAgQU5EIHNjb3JlQiA9IDBPUkRFUiBCWSBkYXRlX2V2ZW50IERFU0MgIjsKCSRpbnRlcnZhbCA9ICRwaW5nLT5HZXRQcmVmZXJlbmNlKCdzcGlkX2ludGVydmFsJyk7CgkKCS8vJHF1ZXJ5ID0gIlNFTEVDVCBDT05DQVRfV1MoJyAnLG5vbSxwcmVub20pIGFzIHBsYXllciwgbGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIGFjdGlmPScxJyBMSU1JVCAyIjsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHNhaXNvbl9jb3VyYW50ZSkpOwoJaWYoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApCgl7CgoJCS8vb24gYSBkZXV4IGNhcwoJCS8vIDEgLSBpbCBzJ2FnaXQgZGUgY29tcMOpdGl0b25zIGluZGl2aWR1ZWxsZXMKCQkvLyAyIC0gSWwgcydhZ2l0IGRlIGNvbXDDqXRpdG9ucyBwYXIgw6lxdWlwZXMKCQkKCQkkc2VydmljZSA9IG5ldyBTZXJ2aWNlKCk7CgoJCXdoaWxlICgkcm93PSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJewoJCQkkaW5kaXZzID0gJHJvd1snaW5kaXZzJ107CgkJCSR0eXBlX2NvbXBldCA9ICRyb3dbJ2NvZGVfY29tcGV0J107CgkJCQoJCQlpZigkaW5kaXZzID09IDEpCgkJCXsKCQkJCS8vaWwgcydhZ2l0IGQndW5lIGNvbXDDqXRpdGlvbiBpbmRpdmlkdWVsbGUKCQkJCS8vb24gcsOpY3Vww6hyZSBsYSBsaXN0ZSBkZXMgcGFydGljaXBhbnQgcyDDoCBjZXR0ZSDDqXByZXV2ZQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLy9pbCBzJ2FnaXQgZCd1bmUgY29tcMOpdGl0aW9uIHBhciDDqXF1aXBlcwoJCQl9CQkKCQkJLy8kcGxheWVyID0gJHJvd1sncGxheWVyJ107CgoKCQkJcGluZ19hZG1pbl9vcHM6OnJldHJpZXZlX3BhcnRpZXNfc3BpZCgkbGljZW5jZSk7CgoKCQl9Ly9maW4gZHUgd2hpbGUKCgl9CgkKLy9lY2hvICJjb3Vjb3UiOwogICAgICAKICAgICAgcmV0dXJuIHRydWU7IC8vIE91IGZhbHNlIHNpIMOnYSBwbGFudGUKCiAgIH0KCiAgIHB1YmxpYyBmdW5jdGlvbiBvbl9zdWNjZXNzKCR0aW1lID0gJycpCiAgIHsKCiAgICAgIGlmICghJHRpbWUpCiAgICAgIHsKICAgICAgICAgJHRpbWUgPSB0aW1lKCk7CiAgICAgIH0KICAgICAgCiAgICAgICRwaW5nID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdQaW5nJyk7CiAgICAgICRwaW5nLT5TZXRQcmVmZXJlbmNlKCdMYXN0UmVjdXBTcGlkJywgJHRpbWUpOwogICAgICAkcGluZy0+QXVkaXQoJycsJ1BpbmcnLCdSw6ljdXAgU3BpZCBPaycpOwogICAgICAvLyRwb25nID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlCiAgICAgIAogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gb25fZmFpbHVyZSgkdGltZSA9ICcnKQogICB7CiAgICAgICRwaW5nLT5BdWRpdCgnJywnUGluZycsJ1BhcyBkZSByw6ljdXAgU1BJRCcpOwogICB9Cgp9Cj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.PingRecupFfttTask.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKY2xhc3MgUGluZ1JlY3VwRmZ0dFRhc2sgaW1wbGVtZW50cyBDbXNSZWd1bGFyVGFzawp7CgogICBwdWJsaWMgZnVuY3Rpb24gZ2V0X25hbWUoKQogICB7CiAgICAgIHJldHVybiBnZXRfY2xhc3MoKTsKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIGdldF9kZXNjcmlwdGlvbigpCiAgIHsKICAgICAgcmV0dXJuICdSw6ljdXDDqXJhdGlvbiBkZXMgcGFydGllcyBGRlRULic7CiAgIH0KCiAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0KCR0aW1lID0gJycpCiAgIHsKCiAgICAgIC8vIEluc3RhbnRpYXRpb24gZHUgbW9kdWxlCiAgICAgICRwaW5nID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdQaW5nJyk7CgogICAgICAvLyBSw6ljdXDDqXJhdGlvbiBkZSBsYSBkZXJuacOocmUgZGF0ZSBkJ2V4w6ljdXRpb24gZGUgbGEgdMOiY2hlCiAgICAgIGlmICghJHRpbWUpCiAgICAgIHsKICAgICAgICAgJHRpbWUgPSB0aW1lKCk7CiAgICAgIH0KCiAgICAgICRsYXN0X2V4ZWN1dGUgPSAkcGluZy0+R2V0UHJlZmVyZW5jZSgnTGFzdFJlY3VwRmZ0dCcpOwogICAgICAKICAgICAgLy8gRMOpZmluaXRpb24gZGUgbGEgcMOpcmlvZGljaXTDqSBkZSBsYSB0w6JjaGUgKDI0aCBpY2kpCiAgICAgIGlmICggKCR0aW1lIC0gMzAqNjAgKSA+PSAkbGFzdF9leGVjdXRlICkvL3RvdXRlcyBsZXMgZGl4IG1pbnV0ZXMKICAgICAgewogICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgfQogICAgICAKICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoJHRpbWUgPSAnJykKICAgewoKICAgICAgCWlmICghJHRpbWUpCiAgICAgIAl7CiAgICAgICAgIAkkdGltZSA9IHRpbWUoKTsKICAgICAgCX0KCiAgICAgIAkkcGluZyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnUGluZycpOwogICAgICAKICAgICAgCS8vIENlIHF1J2lsIHkgYSDDoCBleMOpY3V0ZXIgaWNpCgkvL2VjaG8gImNvdWNvdSI7CgkvL29uIHLDqWN1cMOocmUgbGEgc2Fpc29uIGVuIGNvdXJzCgkkZGIgPSAkcGluZy0+R2V0RGIoKTsKCSRzYWlzb24gPSAkcGluZy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7CgkkcXVlcnkgPSAiU0VMRUNUIGoubGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZWN1cF9wYXJ0aWVzIEFTIHJwLCIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIEFTIGogV0hFUkUgai5saWNlbmNlID0gcnAubGljZW5jZSBBTkQgai5hY3RpZj0nMScgQU5EIHJwLm1hal9mZnR0IDwgTk9XKCktSU5URVJWQUwgMyBEQVkgQU5EIHJwLnNhaXNvbiA9ID8gT1JERVIgQlkgcnAubWFqX2ZmdHQgREVTQyBMSU1JVCAyNSAiOwogICAgICAJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHNhaXNvbikpOwoJLy9vbiBhIGRvbmMgbGVzIG4gbGljZW5jZXMgcG91ciBmYWlyZSBsYSBkZXV4acOobWUgcmVxdWV0ZQoJLy9vbiBjb21tZW5jZSDDoCBib3VjbGVyCglpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApICAvL2xhIHJlcXVldGUgZXN0IG9rIGV0IGlsIHkgYSBkZXMgcsOpc3VsdGF0cwoJewoJCS8vb24gaW5zdGFuY2llIGxhIGNsYXNzZSBTZXJ2aWNlCgkJCgkJCgkJJHNlcnZpY2UgPSBuZXcgcmV0cmlldmVfb3BzKCk7CgoJCXdoaWxlKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJewoJCQkkbGljZW5jZSA9ICRyb3dbJ2xpY2VuY2UnXTsKCQkJJHJldHJpZXZlID0gJHNlcnZpY2UtPnJldHJpZXZlX3BhcnRpZXNfZmZ0dCgkbGljZW5jZSk7CgkJfQoJCQoJfQoJcmV0dXJuIHRydWU7IC8vIE91IGZhbHNlIHNpIMOnYSBwbGFudGUKCQoJCgkKCiAgICAgIAoKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIG9uX3N1Y2Nlc3MoJHRpbWUgPSAnJykKICAgewoKICAgICAgaWYgKCEkdGltZSkKICAgICAgewogICAgICAgICAkdGltZSA9IHRpbWUoKTsKICAgICAgfQogICAgICAKICAgICAgJHBpbmcgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1BpbmcnKTsKICAgICAgJHBpbmctPlNldFByZWZlcmVuY2UoJ0xhc3RSZWN1cEZmdHQnLCAkdGltZSk7CiAgICAgICRwaW5nLT5BdWRpdCgnJywnUGluZycsJ1LDqWN1cCBGRlRUIE9rJyk7CiAgICAgIAogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gb25fZmFpbHVyZSgkdGltZSA9ICcnKQogICB7CiAgICAgICRwaW5nLT5BdWRpdCgnJywnUGluZycsJ1BhcyBkZSByw6ljdXAgRkZUVCcpOwogICB9Cgp9Cj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.PingRecupSpid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKY2xhc3MgUGluZ1JlY3VwU3BpZCBpbXBsZW1lbnRzIENtc1JlZ3VsYXJUYXNrCnsKCiAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfbmFtZSgpCiAgIHsKICAgICAgcmV0dXJuIGdldF9jbGFzcygpOwogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Rlc2NyaXB0aW9uKCkKICAgewogICAgICByZXR1cm4gJ0Rlc2NyaXB0aW9uIGRlIGxhIHTDomNoZS4nOwogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gdGVzdCgkdGltZSA9ICcnKQogICB7CgogICAgICAvLyBJbnN0YW50aWF0aW9uIGR1IG1vZHVsZQogICAgICAkdGVzdCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnVGVzdCcpOwoKICAgICAgLy8gUsOpY3Vww6lyYXRpb24gZGUgbGEgZGVybmnDqHJlIGRhdGUgZCdleMOpY3V0aW9uIGRlIGxhIHTDomNoZQogICAgICBpZiAoISR0aW1lKQogICAgICB7CiAgICAgICAgICR0aW1lID0gdGltZSgpOwogICAgICB9CgogICAgICAkbGFzdF9leGVjdXRlID0gJHRlc3QtPkdldFByZWZlcmVuY2UoJ01hVmFyaWFibGVEZVRlc3REZURlcm5pZXJlRXhlY3V0aW9uJyk7CiAgICAgIAogICAgICAvLyBEw6lmaW5pdGlvbiBkZSBsYSBww6lyaW9kaWNpdMOpIGRlIGxhIHTDomNoZSAoMjRoIGljaSkKICAgICAgaWYgKCAoJHRpbWUgLSAyNCo2MCo2MCApID49ICRsYXN0X2V4ZWN1dGUgKQogICAgICB7CiAgICAgICAgIHJldHVybiBUUlVFOwogICAgICB9CiAgICAgIAogICAgICByZXR1cm4gRkFMU0U7CiAgICAgIAogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgkdGltZSA9ICcnKQogICB7CgogICAgICBpZiAoISR0aW1lKQogICAgICB7CiAgICAgICAgICR0aW1lID0gdGltZSgpOwogICAgICB9CgogICAgICAkdGVzdCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnUGluZycpOwogICAgICAKICAgICAgLy8gQ2UgcXUnaWwgeSBhIMOgIGV4w6ljdXRlciBpY2kKICAgICAgCiAgICAgIHJldHVybiB0cnVlOyAvLyBPdSBmYWxzZSBzaSDDp2EgcGxhbnRlCgogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gb25fc3VjY2VzcygkdGltZSA9ICcnKQogICB7CgogICAgICBpZiAoISR0aW1lKQogICAgICB7CiAgICAgICAgICR0aW1lID0gdGltZSgpOwogICAgICB9CiAgICAgIAogICAgICAkdGVzdCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnUGluZycpOwogICAgICAkdGVzdC0+U2V0UHJlZmVyZW5jZSgnTWFWYXJpYWJsZURlVGVzdERlRGVybmllcmVFeGVjdXRpb24nLCAkdGltZSk7CiAgICAgICR0ZXN0LT5BdWRpdCgnJywnUGluZycsJ1LDqWN1cCBTcGlkIE9rJyk7CiAgICAgIAogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gb25fZmFpbHVyZSgkdGltZSA9ICcnKQogICB7CiAgICAgICR0ZXN0LT5BdWRpdCgnJywnUGluZycsJ1BhcyBkZSByw6ljdXAgU1BJRCcpOwogICB9Cgp9Cj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.PingRecupSpidTask.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKY2xhc3MgUGluZ1JlY3VwU3BpZFRhc2sgaW1wbGVtZW50cyBDbXNSZWd1bGFyVGFzawp7CgogICBwdWJsaWMgZnVuY3Rpb24gZ2V0X25hbWUoKQogICB7CiAgICAgIHJldHVybiBnZXRfY2xhc3MoKTsKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIGdldF9kZXNjcmlwdGlvbigpCiAgIHsKICAgICAgcmV0dXJuICdEZXNjcmlwdGlvbiBkZSBsYSB0w6JjaGUuJzsKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIHRlc3QoJHRpbWUgPSAnJykKICAgewoKICAgICAgLy8gSW5zdGFudGlhdGlvbiBkdSBtb2R1bGUKICAgICAgJHBpbmcgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1BpbmcnKTsKCiAgICAgIC8vIFLDqWN1cMOpcmF0aW9uIGRlIGxhIGRlcm5pw6hyZSBkYXRlIGQnZXjDqWN1dGlvbiBkZSBsYSB0w6JjaGUKICAgICAgaWYgKCEkdGltZSkKICAgICAgewogICAgICAgICAkdGltZSA9IHRpbWUoKTsKICAgICAgfQoKICAgICAgJGxhc3RfZXhlY3V0ZSA9ICRwaW5nLT5HZXRQcmVmZXJlbmNlKCdMYXN0UmVjdXBTcGlkJyk7CiAgICAgIAogICAgICAvLyBEw6lmaW5pdGlvbiBkZSBsYSBww6lyaW9kaWNpdMOpIGRlIGxhIHTDomNoZSAoMjRoIGljaSkKICAgICAgaWYgKCAoJHRpbWUgLSAzMCo2MCApID49ICRsYXN0X2V4ZWN1dGUgKS8vdG91dGVzIGxlcyAyNCBoZXVyZXMgICEhCgogICAgICB7CiAgICAgICAgIHJldHVybiBUUlVFOwogICAgICB9CiAgICAgIAogICAgICByZXR1cm4gRkFMU0U7CiAgICAgIAogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgkdGltZSA9ICcnKQogICB7CgogICAgICBpZiAoISR0aW1lKQogICAgICB7CiAgICAgICAgICR0aW1lID0gdGltZSgpOwogICAgICB9CgogICAgICAkcGluZyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnUGluZycpOwogICAgICAKICAgICAgLy8gQ2UgcXUnaWwgeSBhIMOgIGV4w6ljdXRlciBpY2kKCSRkYiA9ICRwaW5nLT5HZXREYigpOwoJJHNhaXNvbl9jb3VyYW50ZSA9ICRwaW5nLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKCSRub3cgPSB0cmltKCRkYi0+REJUaW1lU3RhbXAodGltZSgpKSwgIiciKTsKCSRxdWVyeSA9ICJTRUxFQ1Qgai5saWNlbmNlIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgQVMgcnAsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIEFTIGogIFdIRVJFIGoubGljZW5jZSA9IHJwLmxpY2VuY2UgQU5EIGouYWN0aWYgPSAnMScgIjsKCSRpbnRlcnZhbCA9ICRwaW5nLT5HZXRQcmVmZXJlbmNlKCdzcGlkX2ludGVydmFsJyk7CgkkcXVlcnkuPSIgQU5EIG1hal9zcGlkIDwgTk9XKCktSU5URVJWQUwgIi4kaW50ZXJ2YWwuIiBEQVkgQU5EIHNhaXNvbiA9ID8gT1JERVIgQlkgbWFqX3NwaWQgREVTQyAiOwoJJGxpbWl0ID0gJHBpbmctPkdldFByZWZlcmVuY2UoJ3NwaWRfbm9tYnJlcycpOwoJJHF1ZXJ5Lj0gIkxJTUlUICIuJGxpbWl0OwoJLy8kcXVlcnkgPSAiU0VMRUNUIENPTkNBVF9XUygnICcsbm9tLHByZW5vbSkgYXMgcGxheWVyLCBsaWNlbmNlIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgV0hFUkUgYWN0aWY9JzEnIExJTUlUIDIiOwoJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkc2Fpc29uX2NvdXJhbnRlKSk7CglpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkKCXsKCgkJLy9vbiBpbnN0YW5jaWUgbGEgY2xhc3NlIGV0IG9uIHZhIGNvbW1lbmNlciDDoCBib3VjbGVyCgkJJHNlcnZpY2UgPSBuZXcgU2VydmljZSgpOwoKCQl3aGlsZSAoJHJvdz0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJCXsKCQkJJGxpY2VuY2UgPSAkcm93WydsaWNlbmNlJ107CQkKCQkJLy8kcGxheWVyID0gJHJvd1sncGxheWVyJ107CgoKCQkJcmV0cmlldmVfb3BzOjpyZXRyaWV2ZV9wYXJ0aWVzX3NwaWQoJGxpY2VuY2UpOwoKCgkJfS8vZmluIGR1IHdoaWxlCgoJfQoJCi8vZWNobyAiY291Y291IjsKICAgICAgCiAgICAgIHJldHVybiB0cnVlOyAvLyBPdSBmYWxzZSBzaSDDp2EgcGxhbnRlCgogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gb25fc3VjY2VzcygkdGltZSA9ICcnKQogICB7CgogICAgICBpZiAoISR0aW1lKQogICAgICB7CiAgICAgICAgICR0aW1lID0gdGltZSgpOwogICAgICB9CiAgICAgIAogICAgICAkcGluZyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnUGluZycpOwogICAgICAkcGluZy0+U2V0UHJlZmVyZW5jZSgnTGFzdFJlY3VwU3BpZCcsICR0aW1lKTsKICAgICAgJHBpbmctPkF1ZGl0KCcnLCdQaW5nJywnUsOpY3VwIFNwaWQgT2snKTsKICAgICAgLy8kcG9uZyA9IGNtc191dGlsczo6Z2V0X21vZHVsZQogICAgICAKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIG9uX2ZhaWx1cmUoJHRpbWUgPSAnJykKICAgewogICAgICAkcGluZy0+QXVkaXQoJycsJ1BpbmcnLCdQYXMgZGUgcsOpY3VwIFNQSUQnKTsKICAgfQoKfQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ping_admin_ops.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0NNUyAtIENNUyBNYWRlIFNpbXBsZQojKGMpMjAwNCBieSBUZWQgS3VscCAod2lzaHlAdXNlcnMuc2YubmV0KQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKI2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiN0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiNidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KI1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiNhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQojCiMkSWQ6IE5ld3MubW9kdWxlLnBocCAyMTE0IDIwMDUtMTEtMDQgMjE6NTE6MTNaIHdpc2h5ICQKCmNsYXNzIHBpbmdfYWRtaW5fb3BzCnsKICBwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCAkZGVzaWduYXRpb24sJGFjdGlvbikKICB7CiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCiAgICAvL05vdyByZW1vdmUgdGhlIGFydGljbGUKICAgICRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXAgKGlkLCBkYXRlY3JlYXRlZCwgc3RhdHVzLGRlc2lnbmF0aW9uLCBhY3Rpb24pIFZBTFVFUyAoJycsID8sID8sID8sID8pIjsKICAgICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRub3csICRzdGF0dXMsICRkZXNpZ25hdGlvbiwkYWN0aW9uKSk7CiAgICAKICAgIAogIH0KZnVuY3Rpb24gcmFuZG9tKCRjYXIpIHsKJHN0cmluZyA9ICIiOwokY2hhaW5lID0gImFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eSI7CnNyYW5kKChkb3VibGUpbWljcm90aW1lKCkqMTAwMDAwMCk7CmZvcigkaT0wOyAkaTwkY2FyOyAkaSsrKSB7CiRzdHJpbmcgLj0gJGNoYWluZVtyYW5kKCklc3RybGVuKCRjaGFpbmUpXTsKfQpyZXR1cm4gJHN0cmluZzsKfQpmdW5jdGlvbiByYW5kb21fc2VyaWUoJGNhcikgewokc3RyaW5nID0gIiI7CiRjaGFpbmUgPSAiQUJDREVGR0hJSktMTU9QUVJTVFVWV1hZWjAxMjM0NTY3ODkiOwpzcmFuZCgoZG91YmxlKW1pY3JvdGltZSgpKjEwMDAwMDApOwpmb3IoJGk9MDsgJGk8JGNhcjsgJGkrKykgewokc3RyaW5nIC49ICRjaGFpbmVbcmFuZCgpJXN0cmxlbigkY2hhaW5lKV07Cn0KcmV0dXJuICRzdHJpbmc7Cn0KcHVibGljIGZ1bmN0aW9uIENhbGN1bFBvaW50c0luZGl2cygkZWNhcnQsJHZpY3RvaXJlKSB7CgoKCQlpZigkZWNhcnQgPT0xKQoJewoJCWlmKCAkdmljdG9pcmUgPT0gMSkKCQl7CgoJCQkkcmVzdWx0ID0gNjsJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCgkJfQoJCWVsc2UKCQl7CgoJCQkkcmVzdWx0ID0gLTU7CgoKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PTIpCgl7CgkJaWYoICR2aWN0b2lyZSA9PTEpCgkJewoKCQkJJHJlc3VsdCA9IDUuNTsKCgoJCQlyZXR1cm4gJHJlc3VsdDsKCgkJfQoJCWVsc2UKCQl7CgoJCQkkcmVzdWx0ID0gLTY7CgoKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PTMpCgl7CgkJaWYoJHZpY3RvaXJlID09MSkKCQl7CgoJCQkkcmVzdWx0ID0gNTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgoJCQkkcmVzdWx0ID0gLTc7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT00KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCgkJCSRyZXN1bHQgPSA0OwoKCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoKCQkJJHJlc3VsdCA9IC04OwoKCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT01KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCgkJCSRyZXN1bHQgPSAzOwoKCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoKCQkJJHJlc3VsdCA9IC0xMDsKCgoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09NikKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgoJCQkkcmVzdWx0ID0gMjsKCgoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCgkJCSRyZXN1bHQgPSAtMTIuNTsKCgoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09NykKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgoJCQkkcmVzdWx0ID0gMTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgoJCQkkcmVzdWx0ID0gLTE2OwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09OCkKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgoJCQkkcmVzdWx0ID0gMC41OwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCgkJCSRyZXN1bHQgPSAtMjA7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT05KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCgkJCSRyZXN1bHQgPSAwOwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCgkJCSRyZXN1bHQgPSAtMjk7CQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS0xKQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCgkJCSRyZXN1bHQgPSA2OwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCgkJCSRyZXN1bHQgPSAtNTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydD09LTIpCgl7CgkJaWYoICR2aWN0b2lyZSA9PTEpCgkJewoKCQkJJHJlc3VsdCA9IDc7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoKCQl9CgkJZWxzZQoJCXsKCgkJCSRyZXN1bHQgPSAtNC41OwkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tMykKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgoJCQkkcmVzdWx0ID0gODsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgoJCQkkcmVzdWx0ID0gLTQ7CgoKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS00KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCgkJCSRyZXN1bHQgPSAxMDsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgoJCQkkcmVzdWx0ID0gLTM7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tNSkKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgoJCQkkcmVzdWx0ID0gMTM7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoKCQkJJHJlc3VsdCA9IC0yOwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09LTYpCgl7CgkJaWYoICR2aWN0b2lyZSA9PTEpCgkJewoKCQkJJHJlc3VsdCA9IDE3OwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCgkJCSRyZXN1bHQgPSAtMTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS03KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCgkJCSRyZXN1bHQgPSAyMjsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgoJCQkkcmVzdWx0ID0gLTAuNTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS04KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCgkJCSRyZXN1bHQgPSAyODsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgoJCQkkcmVzdWx0ID0gMDsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS05KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCgkJCSRyZXN1bHQgPSA0MDsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgoJCQkkcmVzdWx0ID0gMDsKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoKfQoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1bmFibGVfcGxheWVyKCRsaWNlbmNlKQogIHsKICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CgogICAgLy9Ob3cgcmVtb3ZlIHRoZSBlbnRyeQogICAgJHF1ZXJ5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBTRVQgYWN0aWYgPScwJyAgV0hFUkUgbGljZW5jZSA9ID8iOwogICAgJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGxpY2VuY2UpKTsKCgogIH0KCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcF9zcGlkKCRyZWNvcmRfaWQpCiAgewogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCSRwaW5nID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdQaW5nJyk7Cgkkc2Fpc29uID0gJHBpbmctPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwogICAgCS8vb24gZmFpdCBsYSBtYWogZGFucyBsYSB0YWJsZSByZWN1cF9wYXJ0aWVzLCBkb25jIG9uIHLDqWN1cMOocmUgbGUgTsKwIGRlIGxpY2VuY2UKCSRxdWVyeTIgPSAiU0VMRUNUIGxpY2VuY2UgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllc19zcGlkIFdIRVJFIGlkID0gPyI7CgkkZGJyZXN1bHQyID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsYXJyYXkoJHJlY29yZF9pZCkpOwoJJHJvdzIgPSAkZGJyZXN1bHQyLT5GZXRjaFJvdygpOwoJJGxpY2VuY2UyID0gJHJvdzJbJ2xpY2VuY2UnXTsKICAgIAkvL05vdyByZW1vdmUgdGhlIGVudHJ5CiAgICAJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQgV0hFUkUgaWQgPSA/IjsKICAgIAkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHJlY29yZF9pZCkpOwoJCS8vc2kgbGEgcmVxdWV0ZSBmb25jdGlvbm5lIG9uIG1ldCBsYSB0YWJsZSByZWN1cF9wYXJ0aWVzIMOgIGpvdXIKCQlpZigkcmVzdWx0KQoJCXsKCQkJJHF1ZXJ5MyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgU0VUIHNwaWQgPSBzcGlkLTEgV0hFUkUgbGljZW5jZSA9ID8gQU5EIHNhaXNvbiA9ID8iOwoJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5MywgYXJyYXkoJGxpY2VuY2UyLCAkc2Fpc29uKSk7CgkJfQogICAgCgoKCiAgfQoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXNjdWxpbigkbGljZW5jZSkKICB7CiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwoKICAgIC8vTm93IHJlbW92ZSB0aGUgZW50cnkKICAgICRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2pvdWV1cnMgU0VUIHNleGUgPSdNJyAgV0hFUkUgbGljZW5jZSA9ID8iOwogICAgJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGxpY2VuY2UpKTsKCgogIH0KCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVtaW5pbigkbGljZW5jZSkKICB7CiAgICAJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgCQogICAgLy9Ob3cgcmVtb3ZlIHRoZSBlbnRyeQogICAgJHF1ZXJ5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBTRVQgc2V4ZSA9J0YnICBXSEVSRSBsaWNlbmNlID0gPyI7CiAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGljZW5jZSkpOwoKCiAgfQpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXB0ZV9zcGlkKCRsaWNlbmNlKQp7CglnbG9iYWwgJGdDbXM7CgkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJJHBpbmcgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1BpbmcnKTsKCSRzYWlzb24gPSAkcGluZy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7CgkkcXVlcnkgPSAiU0VMRUNUIGNvdW50KCopIEFTIHNwaWQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllc19zcGlkIFdIRVJFIGxpY2VuY2UgPSA/IEFORCBzYWlzb24gPSA/IjsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRsaWNlbmNlLCRzYWlzb24pKTsKCSRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7Cgkkc3BpZCA9ICRyb3dbJ3NwaWQnXTsKCXJldHVybiAkc3BpZDsKCn0KIyMKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21wdGVfZmZ0dCgkbGljZW5jZSkKewoJZ2xvYmFsICRnQ21zOwoJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCSRwaW5nID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdQaW5nJyk7Cgkkc2Fpc29uID0gJHBpbmctPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwoJJHF1ZXJ5ID0gIlNFTEVDVCBjb3VudCgqKSBBUyBmZnR0IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXMgV0hFUkUgbGljZW5jZSA9ID8gQU5EIHNhaXNvbiA9ID8iOwoJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGxpY2VuY2UsJHNhaXNvbikpOwoJJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKCSRmZnR0ID0gJHJvd1snZmZ0dCddOwoJcmV0dXJuICRmZnR0OwoKfQojIwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYWpfcmVjdXBfcGFydGllcygkbGljZW5jZSwkdGFibGUpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJJHBpbmcgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1BpbmcnKTsKCQkkc2Fpc29uID0gJHBpbmctPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwoJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgU0VUIG1hal9zcGlkID0gPyBXSEVSRSBsaWNlbmNlPSA/IEFORCBzYWlzb24gPSA/IjsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGljZW5jZSwkc2Fpc29uKSk7CgkJJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKCQkkZmZ0dCA9ICRyb3dbJ2ZmdHQnXTsKCQlyZXR1cm4gJGZmdHQ7CgoJfQojIwpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlYXJjaF9wbGF5ZXJfbGljZW5jZSgkbmFtZSkKewoJCi8vZW5kIG9mIGZ1bmN0aW9uCn0KCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X25hbWUoJG5vbSkKewoJCgkkZXhwbG9zaW9uID0gZXhwbG9kZSgnICcsJG5vbSk7CgkkY29tcHRldXIgPSBjb3VudCgkZXhwbG9zaW9uKTsKCSRuYW1lID0gYXJyYXkoKTsKCSRwcmVub20gPSBhcnJheSgpOwoJLy9vbiBmYWl0IHFxcyB0cmFpdGVtZW50cyBwb3VyIGxlcyBjYXJhY3TDqHJlcyBhY2NlbnR1w6lzCgkKCQoJJGkgPTA7Cglmb3JlYWNoICgkZXhwbG9zaW9uIGFzICR0ZXN0Y2FzZSkgewoJJGkrKzsKCS8vb24gbmV0dG9pZSBsZXMgY2FyYWN0w6hyZXMgcXVpIHBvc2VudCBwcm9ibMOobWUKCSR0ZXN0Y2FzZSA9IHN0cnRyKCR0ZXN0Y2FzZSwgYXJyYXkoCgkgICAgICAgICfFoCc9PidTJywgJ8WhJz0+J3MnLCAnxJAnPT4nRGonLCAnxJEnPT4nZGonLCAnxb0nPT4nWicsICfFvic9Pid6JywgJ8SMJz0+J0MnLCAnxI0nPT4nYycsICfEhic9PidDJywgJ8SHJz0+J2MnLAoJICAgICAgICAnw4AnPT4nQScsICfDgSc9PidBJywgJ8OCJz0+J0EnLCAnw4MnPT4nQScsICfDhCc9PidBJywgJ8OFJz0+J0EnLCAnw4YnPT4nQScsICfDhyc9PidDJywgJ8OIJz0+J0UnLCAnw4knPT4nRScsCgkgICAgICAgICfDiic9PidFJywgJ8OLJz0+J0UnLCAnw4wnPT4nSScsICfDjSc9PidJJywgJ8OOJz0+J0knLCAnw48nPT4nSScsICfDkSc9PidOJywgJ8OSJz0+J08nLCAnw5MnPT4nTycsICfDlCc9PidPJywKCSAgICAgICAgJ8OVJz0+J08nLCAnw5YnPT4nTycsICfDmCc9PidPJywgJ8OZJz0+J1UnLCAnw5onPT4nVScsICfDmyc9PidVJywgJ8OcJz0+J1UnLCAnw50nPT4nWScsICfDnic9PidCJywgJ8OfJz0+J1NzJywKCSAgICAgICAgJ8OgJz0+J2EnLCAnw6EnPT4nYScsICfDoic9PidhJywgJ8OjJz0+J2EnLCAnw6QnPT4nYScsICfDpSc9PidhJywgJ8OmJz0+J2EnLCAnw6cnPT4nYycsICfDqCc9PidlJywgJ8OpJz0+J2UnLAoJICAgICAgICAnw6onPT4nZScsICfDqyc9PidlJywgJ8OsJz0+J2knLCAnw60nPT4naScsICfDric9PidpJywgJ8OvJz0+J2knLCAnw7AnPT4nbycsICfDsSc9PiduJywgJ8OyJz0+J28nLCAnw7MnPT4nbycsCgkgICAgICAgICfDtCc9PidvJywgJ8O1Jz0+J28nLCAnw7YnPT4nbycsICfDuCc9PidvJywgJ8O5Jz0+J3UnLCAnw7onPT4ndScsICfDuyc9Pid1JywgJ8O9Jz0+J3knLCAnw70nPT4neScsICfDvic9PidiJywKCSAgICAgICAgJ8O/Jz0+J3knLCAnxZQnPT4nUicsICfFlSc9PidyJywKCSAgICApKTsJCgkgIGlmIChjdHlwZV91cHBlcihzdHJfcmVwbGFjZSgiJyIsIiIsJHRlc3RjYXNlKSkgfHwgJHRlc3RjYXNlID09Ii0iIHx8ICR0ZXN0Y2FzZSA9PSInIikgewoJICAgICRuYW1lWyRpXSA9ICR0ZXN0Y2FzZTsKCQkvL2VjaG8gIkxhIGNoYcOubmUiLiRpLiIgJHRlc3RjYXNlIG5lIGNvbnRpZW50IHF1ZSBkZXMgbWFqdXNjdWxlcy5cbiI7CgkgIH0gZWxzZSB7CgkgICAvLyBlY2hvICJMYSBjaGHDrm5lIi4kaS4iICR0ZXN0Y2FzZSBuZSBjb250aWVudCBwYXMgcXVlIGRlcyBtYWp1c2N1bGVzLlxuIjsKCQkkcHJlbm9tWyRpXSA9ICR0ZXN0Y2FzZTsKCSAgfQoJfQoJCgkkbm9tX2ZpbmFsID0gaW1wbG9kZSgnICcsJG5hbWUpOwoJLyoKCSRub21fZmluYWwgPSBzdHJ0cigkbm9tX2ZpbmFsLCBhcnJheSgKCSAgICAgICAgJ8WgJz0+J1MnLCAnxaEnPT4ncycsICfEkCc9PidEaicsICfEkSc9PidkaicsICfFvSc9PidaJywgJ8W+Jz0+J3onLCAnxIwnPT4nQycsICfEjSc9PidjJywgJ8SGJz0+J0MnLCAnxIcnPT4nYycsCgkgICAgICAgICfDgCc9PidBJywgJ8OBJz0+J0EnLCAnw4InPT4nQScsICfDgyc9PidBJywgJ8OEJz0+J0EnLCAnw4UnPT4nQScsICfDhic9PidBJywgJ8OHJz0+J0MnLCAnw4gnPT4nRScsICfDiSc9PidFJywKCSAgICAgICAgJ8OKJz0+J0UnLCAnw4snPT4nRScsICfDjCc9PidJJywgJ8ONJz0+J0knLCAnw44nPT4nSScsICfDjyc9PidJJywgJ8ORJz0+J04nLCAnw5InPT4nTycsICfDkyc9PidPJywgJ8OUJz0+J08nLAoJICAgICAgICAnw5UnPT4nTycsICfDlic9PidPJywgJ8OYJz0+J08nLCAnw5knPT4nVScsICfDmic9PidVJywgJ8ObJz0+J1UnLCAnw5wnPT4nVScsICfDnSc9PidZJywgJ8OeJz0+J0InLCAnw58nPT4nU3MnLAoJICAgICAgICAnw6AnPT4nYScsICfDoSc9PidhJywgJ8OiJz0+J2EnLCAnw6MnPT4nYScsICfDpCc9PidhJywgJ8OlJz0+J2EnLCAnw6YnPT4nYScsICfDpyc9PidjJywgJ8OoJz0+J2UnLCAnw6knPT4nZScsCgkgICAgICAgICfDqic9PidlJywgJ8OrJz0+J2UnLCAnw6wnPT4naScsICfDrSc9PidpJywgJ8OuJz0+J2knLCAnw68nPT4naScsICfDsCc9PidvJywgJ8OxJz0+J24nLCAnw7InPT4nbycsICfDsyc9PidvJywKCSAgICAgICAgJ8O0Jz0+J28nLCAnw7UnPT4nbycsICfDtic9PidvJywgJ8O4Jz0+J28nLCAnw7knPT4ndScsICfDuic9Pid1JywgJ8O7Jz0+J3UnLCAnw70nPT4neScsICfDvSc9Pid5JywgJ8O+Jz0+J2InLAoJICAgICAgICAnw78nPT4neScsICfFlCc9PidSJywgJ8WVJz0+J3InLAoJICAgICkpOwoJKi8KCSRwcmVub21fZmluYWwgPSBpbXBsb2RlKCcgJywkcHJlbm9tKTsKCS8qCgkkcHJlbm9tX2ZpbmFsID0gc3RydHIoJHByZW5vbV9maW5hbCwgYXJyYXkoCgkgICAgICAgICfFoCc9PidTJywgJ8WhJz0+J3MnLCAnxJAnPT4nRGonLCAnxJEnPT4nZGonLCAnxb0nPT4nWicsICfFvic9Pid6JywgJ8SMJz0+J0MnLCAnxI0nPT4nYycsICfEhic9PidDJywgJ8SHJz0+J2MnLAoJICAgICAgICAnw4AnPT4nQScsICfDgSc9PidBJywgJ8OCJz0+J0EnLCAnw4MnPT4nQScsICfDhCc9PidBJywgJ8OFJz0+J0EnLCAnw4YnPT4nQScsICfDhyc9PidDJywgJ8OIJz0+J0UnLCAnw4knPT4nRScsCgkgICAgICAgICfDiic9PidFJywgJ8OLJz0+J0UnLCAnw4wnPT4nSScsICfDjSc9PidJJywgJ8OOJz0+J0knLCAnw48nPT4nSScsICfDkSc9PidOJywgJ8OSJz0+J08nLCAnw5MnPT4nTycsICfDlCc9PidPJywKCSAgICAgICAgJ8OVJz0+J08nLCAnw5YnPT4nTycsICfDmCc9PidPJywgJ8OZJz0+J1UnLCAnw5onPT4nVScsICfDmyc9PidVJywgJ8OcJz0+J1UnLCAnw50nPT4nWScsICfDnic9PidCJywgJ8OfJz0+J1NzJywKCSAgICAgICAgJ8OgJz0+J2EnLCAnw6EnPT4nYScsICfDoic9PidhJywgJ8OjJz0+J2EnLCAnw6QnPT4nYScsICfDpSc9PidhJywgJ8OmJz0+J2EnLCAnw6cnPT4nYycsICfDqCc9PidlJywgJ8OpJz0+J2UnLAoJICAgICAgICAnw6onPT4nZScsICfDqyc9PidlJywgJ8OsJz0+J2knLCAnw60nPT4naScsICfDric9PidpJywgJ8OvJz0+J2knLCAnw7AnPT4nbycsICfDsSc9PiduJywgJ8OyJz0+J28nLCAnw7MnPT4nbycsCgkgICAgICAgICfDtCc9PidvJywgJ8O1Jz0+J28nLCAnw7YnPT4nbycsICfDuCc9PidvJywgJ8O5Jz0+J3UnLCAnw7onPT4ndScsICfDuyc9Pid1JywgJ8O9Jz0+J3knLCAnw70nPT4neScsICfDvic9PidiJywKCSAgICAgICAgJ8O/Jz0+J3knLCAnxZQnPT4nUicsICfFlSc9PidyJywKCSAgICApKTsKCSovCgkkcmVzdWx0WzBdID0gJG5vbV9maW5hbDsKCSRyZXN1bHRbMV0gPSAkcHJlbm9tX2ZpbmFsOwoJcmV0dXJuICRyZXN1bHQ7CQovL2VuZCBvZiBmdW5jdGlvbgp9Ci8vIGNldHRlIGZvbmN0aW9uIHJlY2hlcmNoZSBsYSBzaXR1YXRpb24gbWVuc3VlbGxlIGQndW4gam91ZXVyIGR1IGNsdWIgZHMgbGEgYmRkCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3NpdF9tZW5zKCRsaWNlbmNlLCAkbW9pc19ldmVudCwgJHNhaXNvbikKewoJZ2xvYmFsICRnQ21zOwoJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCSRwaW5nID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdQaW5nJyk7Cgkkc2Fpc29uID0gJHBpbmctPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwoJJHF1ZXJ5ID0gIlNFTEVDVCBwb2ludHMgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfc2l0X21lbnMgV0hFUkUgbGljZW5jZSA9ID8gQU5EIG1vaXMgPSA/IEFORCBzYWlzb24gPSA/IjsKCSRkYi0+ZGVidWc9dHJ1ZTsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRsaWNlbmNlLCRtb2lzX2V2ZW50LCRzYWlzb24pKTsKCS8vc2kgbGEgc2l0dWF0aW9uIG1lbnN1ZWxsZSBkdSBqb3VldXIgZHUgY2x1YiBuJ2V4aXN0ZSBwYXMgPwoJLy9hbG9ycyBvbiBuJ2VucmVnaXN0cmUgcGFzIGxlIHLDqXN1bHRhdCBldCBvbiBsZSBzaWduYWxlCgkJaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPT0gMCkKCQl7CgkJCS8vJGRlc2lnbmF0aW9uLj0iRWNhcnQgbm9uIGNhbGN1bMOpIjsKCQkJJHJldG91cl9zaXRfbWVucyA9IDA7CgkJfQoJCWVsc2UKCQl7CgkJCSRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CgkJCSRyZXRvdXJfc2l0X21lbnMgPSAkcm93Wydwb2ludHMnXTsKCQl9CglyZXR1cm4gJHJldG91cl9zaXRfbWVuczsKLy9lbmQgb2YgZnVuY3Rpb24KfQoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhcnJheV9jb2RlX2NvbXBldCgkY29kZSwkZGF0ZV9kZWJ1dCwkZGF0ZV9maW4pCnsKCWdsb2JhbCAkZ0NtczsKCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkkcGluZyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnUGluZycpOwoJCgkJJHF1ZXJ5NCA9ICJTRUxFQ1QgbGljZW5jZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWNpcGUgV0hFUkUgdHlwZV9jb21wZXQgPSA/IEFORCBkYXRlX2RlYnV0IEJFVFdFRU4gID8gQU5EID8iOwoJCSRkYnJlc3VsdGF0NCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnk0LGFycmF5KCRjb2RlLCAkZGF0ZV9kZWJ1dCwkZGF0ZV9maW4pKTsKCQoJCgkkcm93NCA9ICRkYnJlc3VsdGF0NC0+R2V0Um93cygpOwoJJGxpZ25lcyA9ICRkYnJlc3VsdGF0NC0+UmVjb3JkQ291bnQoKTsKCWlmKCRsaWduZXMgPjApCgl7CgkJCgkKCQkvL2VjaG8gJGxpZ25lcy4iPGJyIC8+IjsKCQkvL2VjaG8gJHJvdzRbMV1bbGljZW5jZV07CgkJJGxpYyA9IGFycmF5KCk7CgkJJGk9MDsKCgkJZm9yKCRpPTA7JGk8PSRsaWduZXM7JGkrKykKCQl7CgkJCSR0YWJbJGldID0gJHJvdzRbJGldWydsaWNlbmNlJ107CgkJCgkJCWFycmF5X3B1c2goJGxpYywkdGFiWyRpXSk7CgkJCS8vJGxpY2VuID0gYXJyYXkoKTsKCQkJLy8kbGljZW4gPSBzdWJzdHIoaW1wbG9kZSgiLCAiLCAkbGljKSwgMCwgLTMpOwoJCQkvLyRsaWNlbiA9IGltcGxvZGUoIiwgIiwgJGxpYyk7CgkJfQoJCXJldHVybiAkbGljOwoJfQovL2VuZCBvZiBmdW5jdGlvbgp9CgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlbGV0ZV90ZWFtcmVzdWx0KCRyZWNvcmRfaWQpCiAgewogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCiAgICAvL05vdyByZW1vdmUgdGhlIGVudHJ5CiAgICAJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wb3VsZXNfcmVuY29udHJlcyBXSEVSRSBpZCA9ID8iOwoJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHJlY29yZF9pZCkpOwoKCiAgfQoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkaXNwbGF5X29uX2Zyb250ZW5kKCRpZCkKICB7CiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwoKICAgIC8vTm93IHJlbW92ZSB0aGUgZW50cnkKICAgIAkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wb3VsZXNfcmVuY29udHJlcyBTRVQgYWZmaWNoZSA9ICcxJyBXSEVSRSBpZCA9ID8iOwoJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGlkKSk7CgoKICB9CgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRvX25vdF9kaXNwbGF5KCRyZWNvcmRfaWQpCiAgewogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCiAgICAvL05vdyByZW1vdmUgdGhlIGVudHJ5CiAgICAJJHF1ZXJ5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcG91bGVzX3JlbmNvbnRyZXMgU0VUIGFmZmljaGUgPSAnMCcgV0hFUkUgaWQgPSA/IjsKCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRyZWNvcmRfaWQpKTsKCgogIH0KCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gQ2FsY3VsRWNhcnQoJGVjYXJ0KQp7CglpZigkZWNhcnQgPj0wICYmICRlY2FydCA8IDI1KSB7ICRlY2FydCA9IDE7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPj0yNSAmJiAkZWNhcnQgPCA1MCl7ICRlY2FydCA9IDI7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPj01MCAmJiAkZWNhcnQgPCAxMDApeyAkZWNhcnQgPSAzOyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0ID49MTAwICYmICRlY2FydCA8IDE1MCl7ICRlY2FydCA9IDQ7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPj0xNTAgJiYgJGVjYXJ0IDwgMjAwKXsgJGVjYXJ0ID0gNTsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA+PTIwMCAmJiAkZWNhcnQgPCAzMDApeyAkZWNhcnQgPSA2OyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0ID49MzAwICYmICRlY2FydCA8IDQwMCl7ICRlY2FydCA9IDc7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPj00MDAgJiYgJGVjYXJ0IDwgNTAwKXsgJGVjYXJ0ID0gODsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA+PTUwMCl7ICRlY2FydCA9IDk7IHJldHVybiAkZWNhcnQ7IH0KCgllbHNlaWYoJGVjYXJ0ID4gLTI1ICYmICRlY2FydCA8IDApeyRlY2FydCA9IC0xOyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0IDw9IC0yNSAmJiAkZWNhcnQgPiAtNTApeyRlY2FydCA9IC0yOyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0IDw9IC01MCAmJiAkZWNhcnQgPiAtMTAwKXskZWNhcnQgPSAtMzsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA8PSAtMTAwICYmICRlY2FydCA+IC0xNTApeyRlY2FydCA9IC00OyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0IDw9IC0xNTAgJiYgJGVjYXJ0ID4gLTIwMCl7JGVjYXJ0ID0gLTU7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPD0gLTIwMCAmJiAkZWNhcnQgPiAtMzAwKXskZWNhcnQgPSAtNjsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA8PSAtMzAwICYmICRlY2FydCA+IC00MDApeyRlY2FydCA9IC03OyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0IDw9IC00MDAgJiYgJGVjYXJ0ID4gLTUwMCl7JGVjYXJ0ID0gLTg7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPD0gLTUwMCl7JGVjYXJ0ID0gLTk7IHJldHVybiAkZWNhcnQ7IH0KfQpmdW5jdGlvbiB0YWcoJGlkLCRpZGVwcmV1dmUsJGluZGl2cywkZGF0ZV9kZWJ1dCA9JycsJGRhdGVfZmluPScnKQp7CgkKCQkJJGRiICA9IGNtc21zKCktPkdldERiKCk7CgkJCSR0YWcgPSAie1BpbmcgYWN0aW9uPSciOwoJCQkKCQkJaWYoJGluZGl2cyA9PScxJykKCQkJewoJCQkJJHRhZy49ImluZGl2aWR1ZWxsZXMnIjsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0YWcuPSJwYXItZXF1aXBlcyciOwoJCQl9CgkJCSR0YWcuPSIgaWRlcHJldXZlPSckaWRlcHJldXZlJyI7CgkJCQoJCQkJaWYoaXNzZXQoJGRhdGVfZGVidXQpICYmICRkYXRlX2RlYnV0ICE9JycpCgkJCQl7CgkJCQkJJHRhZy49ICIgZGF0ZV9kZWJ1dD0nJGRhdGVfZGVidXQnIjsKCQkJCX0KCQkJCWlmKGlzc2V0KCRkYXRlX2ZpbikgJiYgJGRhdGVfZmluICE9JycpCgkJCQl7CgkJCQkJJHRhZy49ICIgZGF0ZV9maW49JyRkYXRlX2ZpbiciOwoJCQkJfQoJCQkkdGFnLj0ifSI7CgkJCQoJCQkkc3FsYXJyYXkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyBTRVQgdGFnID0gPyBXSEVSRSBpZCA9ID8iOwoJCQkkZGItPkV4ZWN1dGUoJHNxbGFycmF5LCBhcnJheSgkdGFnLCRpZCkpOwoJCQkvL3Vuc2V0KCR0YWcpOwoJCQlyZXR1cm4gJHRhZzsKCQkKCgkJCgkKfQpmdW5jdGlvbiBjcmVhdGVfdGFnKCRjb2RlX2NvbXBldCwkaW5kaXZzLCRkYXRlX2RlYnV0LCRkYXRlX2ZpbikKewoJCgkJCSRkYiAgPSBjbXNtcygpLT5HZXREYigpOwoJCQkkdGFnID0gIntQaW5nIGFjdGlvbj0nIjsKCQkJCgkJCWlmKCRpbmRpdnMgPT0nMScpCgkJCXsKCQkJCSR0YWcuPSJpbmRpdmlkdWVsbGVzJyI7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdGFnLj0icGFyLWVxdWlwZXMnIjsKCQkJfQoJCQkkdGFnLj0iIHR5cGVfY29tcGV0PSckY29kZV9jb21wZXQnIjsKCQkJCgkJCQlpZihpc3NldCgkZGF0ZV9kZWJ1dCkgJiYgJGRhdGVfZGVidXQgIT0nJykKCQkJCXsKCQkJCQkkdGFnLj0gIiBkYXRlX2RlYnV0PSckZGF0ZV9kZWJ1dCciOwoJCQkJfQoJCQkJaWYoaXNzZXQoJGRhdGVfZmluKSAmJiAkZGF0ZV9maW4gIT0nJykKCQkJCXsKCQkJCQkkdGFnLj0gIiBkYXRlX2Zpbj0nJGRhdGVfZmluJyI7CgkJCQl9CgkJCSR0YWcuPSJ9IjsKCQkJCgkJCXJldHVybiAkdGFnOwoJCQoKCQkKCQp9CgpmdW5jdGlvbiB0YWdfZXF1aXBlKCRyZWNvcmRfaWQpCnsKCQoJCQkkZGIgID0gY21zbXMoKS0+R2V0RGIoKTsKCQkJJHRhZyA9ICJ7UGluZyBhY3Rpb249J2VxdWlwZSciOwkJCQoJCQkkdGFnLj0iIHJlY29yZF9pZD0nJHJlY29yZF9pZCciOwkJCQkKCQkJJHRhZy49In0iOwoJCQkKCQkJcmV0dXJuICR0YWc7CQkKCQp9CgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvZWZmICgkdHlwZUNvbXBldGl0aW9uLCRsaWNlbmNlKQp7CgkkZGIgID0gY21zbXMoKS0+R2V0RGIoKTsKCS8vYXR0ZW50aW9uIGF1IGNyaXTDqXJpdW0gZsOpZMOpcmFsICEhCgkvL23Dqm1lIG5vbSBkJ8OpcHJldXZlIG1haXMgY29lZmYgZGlmZsOpcmVudAoJLy9pbCBmYXV0IGF1c3NpIHLDqWN1cMOpcmVyIGxhIGxpY2VuY2UgCgkkY29lZmYgPSBhcnJheSgpOwoJaWYoJHR5cGVDb21wZXRpdGlvbiA9PSdDcml0w6lyaXVtIGbDqWTDqXJhbCcpCgl7CgkJJHF1ZXJ5NCA9ICJTRUxFQ1QgdHAuY29lZmZpY2llbnQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGljaXBlIEFTIHAsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyBBUyB0cCBXSEVSRSB0cC5jb2RlX2NvbXBldCA9IHAudHlwZV9jb21wZXQgQU5EIHAubGljZW5jZSA9ID8iOwoJCSRkYnJlc3VsdGF0NCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnk0LGFycmF5KCRsaWNlbmNlKSk7CgkJJHJvdzQgPSAkZGJyZXN1bHRhdDQtPkZldGNoUm93KCk7CgkJJGNvZWZmWzBdID0gJHJvdzRbJ2NvZWZmaWNpZW50J107CgkJcmV0dXJuICRjb2VmZjsKCX0KCWVsc2UKCXsKCQkKCQkkcXVlcnkgPSJTRUxFQ1QgY29lZmZpY2llbnQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMgV0hFUkUgbmFtZSA9ID8iOwoJCSRkYnJldG91ciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR0eXBlQ29tcGV0aXRpb24pKTsKCgkJCWlmICgkZGJyZXRvdXIgJiYgJGRicmV0b3VyLT5SZWNvcmRDb3VudCgpID4gMCkKCQkgIAl7CgkJICAgIAkJd2hpbGUgKCRyb3c9ICRkYnJldG91ci0+RmV0Y2hSb3coKSkKCQkgICAgICAJCXsKCQkJCQkkY29lZmZbMF0gPSAkcm93Wydjb2VmZmljaWVudCddOwoJCQkJCXJldHVybiAkY29lZmY7CgkJCQl9CgkKCQkJfQoJCQkvKgoJCQllbHNlaWYoJGRicmV0b3VyLT5SZWNvcmRDb3VudCgpID09IDApICAgIC8vbGEgY29tcMOpdGl0b24gbidleGlzdGUgcGFzICEKCQkJewoJCQkJJGNvZWZmWzBdID0gJzAuMDAnOwoJCQkJLy9vbiBjcsOpw6kgdW4gY29kZSBjb21wZXQgdGVtcG9yYWlyZQoJCQkJJGNvZGVfY29tcGV0X3RlbXAgPSBwaW5nX2FkbWluX29wczo6cmFuZG9tKDMpOwoJCQkJJGNvZWZmWzFdID0gJGNvZGVfY29tcGV0X3RlbXA7CgkJCQkkY29lZmZfcHJvdmlzb2lyZSA9ICcwLjAwJzsKCQkJCS8vb24gZmFpdCBxZCBtw6ptZSBsJ2luY2x1c2lvbiBkJ3VuZSBub3V2ZWxsZSBjb21wZXQKCQkJCSRpbmRpdnMgPSAxOwoJCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyAoaWQsIG5hbWUsY29kZV9jb21wZXQsY29lZmZpY2llbnQsaW5kaXZzKSBWQUxVRVMgKCcnLD8sID8sID8sID8pIjsKCQkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR0eXBlQ29tcGV0aXRpb24sJGNvZGVfY29tcGV0X3RlbXAsJGNvZWZmX3Byb3Zpc29pcmUsICRpbmRpdnMpKTsKCQkJCS8vZWNobyAiY29lZmZpY2llbnQgaW50cm91dmFibGUgISI7CgkJCQlyZXR1cm4gJGNvZWZmOwoJCQl9CgkJCSovCgl9Cn0KCnB1YmxpYyBmdW5jdGlvbiBjb2VmZl9vcHMoJHJlY29yZF9pZCwgJGNvZWZmKQogIHsKCS8vZGVidWdfZGlzcGxheSgkcGFyYW1zLCAnUGFyYW1ldGVycycpOwoJCglnbG9iYWwgJGdDbXM7CiAgICAJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgIAkvLyRwaW5nID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdQaW5nJyk7CgkvL3JlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmNhbGN1bHMucGhwJyk7CgkvL2VjaG8gJHJlY29yZF9pZDsKCS8vZWNobyAkY29lZmY7CiAgICAJLy9PbiByw6ljdXDDqHJlIGxlcyBpbmZvcyBkZSBsJ2VucmVnaXN0cmVtZW50CiAgICAJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCBXSEVSRSBpZCA9ID8iOwoJLy9lY2hvICRxdWVyeTsKICAgIAkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcmVjb3JkX2lkKSk7CgoJCQoJCgkJd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJCXsKCQkJCgkJCSR2aWN0b2lyZSA9ICRyb3dbJ3ZpY3RvaXJlJ107CgkJCSRlY2FydCA9ICRyb3dbJ3R5cGVfZWNhcnQnXTsKCQkJZWNobyAkdmljdG9pcmU7CgkJCWVjaG8gJGVjYXJ0OwoJCQkkcG9pbnRzMSA9IHBpbmdfYWRtaW5fb3BzOjpDYWxjdWxQb2ludHNJbmRpdnMoJGVjYXJ0LCR2aWN0b2lyZSk7CgkJCS8vJGNvZWZmID0gJzEuMDAnOwoJCQkkcG9pbnRyZXMgPSAkcG9pbnRzMSokY29lZmY7CgkJCWVjaG8gJGNvZWZmOwoJCQllY2hvICRwb2ludHJlczsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgIAkJCSRxdWVyeTMgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQgU0VUIGNvZWZmID0gPywgcG9pbnRyZXMgPSA/IFdIRVJFIGlkID0gPyI7CiAgICAJCQkkZGJyZXN1bHQyID0gJGRiLT5FeGVjdXRlKCRxdWVyeTMsIGFycmF5KCRjb2VmZiwgJHBvaW50cmVzLCAkcmVjb3JkX2lkKSk7CgkgICAgICAgIAoJCQkJaWYoISRkYnJlc3VsdDIpCgkJCQl7CgkJCQkJJGRlc2lnbmF0aW9uID0gJGRiLT5FcnJvck1zZygpOwoJCQkJCSRzdGF0dXMgPSAnRWNoZWMnOwoJCQkJCSRhY3Rpb24gPSAnbWFzc19kZWxldGUgdXBkYXRlIHJlY3VwJzsKCQkJCQkkcXVlcnk0ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZWN1cCAoaWQsIHN0YXR1cywgZGVzaWduYXRpb24sIGFjdGlvbikgVkFMVUVTICgnJywgPywgPywgPykiOwoJCQkJCSRkYnJlc3VsdDMgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5NCwgYXJyYXkoJHN0YXR1cywgJGRlc2lnbmF0aW9uLCAkYWN0aW9uKSk7CgkJCQl9CiAgICAgICAgICAgICAgICAKCQl9Ly9maW4gZHUgd2hpbGUKICAJCgoKICB9Ly9maW4gZGUgbGEgZm9uY3Rpb24KCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZHVwbGljYXRlKCRyZWNvcmRfaWQpCnsKCWdsb2JhbCAkZ0NtczsKCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllc19zcGlkIFdIRVJFIGlkID0gPyI7CgkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcmVjb3JkX2lkKSk7CgkKfQoKcHVibGljIGZ1bmN0aW9uIHJldHJpZXZlX3NpdF9tZW5zKCRsaWNlbmNlKQogIHsKCS8vb24gdsOpcmlmaWUgc2kgbGEgc2l0dWF0aW9uIG1lbnN1ZWxsZSBhIGTDqWrDoCDDqXTDqSBwcmlzZSBlbiBjb21wdGUKCWdsb2JhbCAkZ0NtczsKCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkkcGluZyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnUGluZycpOwoJJG5vdyA9IHRyaW0oJGRiLT5EQlRpbWVTdGFtcCh0aW1lKCkpLCAiJyIpOwoKCSRtb2lzX2NvdXJhbnQgPSBkYXRlKCduJyk7Ly9Nb2lzIGF1IGZvcm1hdCAxLCAyLCAzIGV0Yy4uLi4KCgkkYW5uZWVfY291cmFudGUgPSBkYXRlKCdZJyk7CgkkbW9pc19mcmFuY2FpcyA9IGFycmF5KCdKYW52aWVyJywgJ0bDqXZyaWVyJywnTWFycycsICdBdnJpbCcsICdNYWknLCAnSnVpbicsICdKdWlsbGV0JywnQW/Du3QnLCAnU2VwdGVtYnJlJywgJ09jdG9icmUnLCdOb3ZlbWJyZScsJ0TDqWNlbWJyZScpOwoJJG5vdyA9IHRyaW0oJGRiLT5EQlRpbWVTdGFtcCh0aW1lKCkpLCAiJyIpOwoJJG1vaXNfcmVlbCA9ICRtb2lzX2NvdXJhbnQgLSAxOwoJJG1vaXNfc20gPSAkbW9pc19mcmFuY2Fpc1siJG1vaXNfcmVlbCJdOwoJJG1vaXNfc2l0X21lbnMgPSAkbW9pc19zbS4iICIuJGFubmVlX2NvdXJhbnRlOwkKCSRzYWlzb24gPSAkcGluZy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7CgkKCSRxdWVyeSA9ICJTRUxFQ1QgbGljZW5jZSwgbW9pcyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19zaXRfbWVucyBXSEVSRSBsaWNlbmNlID0gPyBBTkQgbW9pcyA9ID8gQU5EIHNhaXNvbiA9ID8iOwoJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGxpY2VuY2UsJG1vaXNfY291cmFudCwkc2Fpc29uKSk7CgoJaWYoJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID09IDApCgl7CgkJLy9MYSBzaXR1YXRpb24gbWVuc3VlbGxlIGR1IG1vaXMgZW4gY291cnMgbidleGlzdGUgcGFzLCBvbiBsJ2Fqb3V0ZS4KCQkkc2VydmljZSA9IG5ldyBTZXJ2aWNlKCk7CgkJJHJlc3VsdCA9ICRzZXJ2aWNlLT5nZXRKb3VldXIoIiRsaWNlbmNlIik7CgkJLy92YXJfZHVtcCgkcmVzdWx0KTsKCgkJCWlmKCFpc19hcnJheSgkcmVzdWx0KSkKCQkJewoJCQkJLy9sZSBzZXJ2aWNlIGVzdCBjb3Vww6kgb3UgbGEgbGljZW5jZSBlc3QgaW5hY3RpdmUKCQkJCS8vJHJvdz0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwoJCQkJLy8kbm9tID0gJHJvd1snbm9tJ107CgkJCQkvLyRwcmVub20gPSAkcm93WydwcmVub20nXTsKCQkJCSRtZXNzYWdlLj0iTGljZW5jZSBpbnRyb3V2YWJsZSBvdSBzZXJ2aWNlIGNvdXDDqSBwb3VyICIuJG5vbS4iICIuJHByZW5vbTsKCQkJCSRzdGF0dXMgPSAnRWNoZWMnOwoJCQkJJGRlc2lnbmF0aW9uID0gJG1lc3NhZ2U7CgkJCQkkYWN0aW9uID0gIm1hc3NfYWN0aW9uIjsKCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywgJGRlc2lnbmF0aW9uLCRhY3Rpb24pOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLy90b3V0IHZhIGJpZW4gb24gcGV1dCBjb250aW51ZXIKCQkJCSRsaWNlbmNlMiA9ICRyZXN1bHRbJ2xpY2VuY2UnXTsKCQkJCS8vCWVjaG8gImxhIGxpY2VuY2UgZXN0ICRsaWNlbmNlIDxiciAvPiI7CgkJCQkkbm9tID0gJHJlc3VsdFsnbm9tJ107CgkJCQkkcHJlbm9tID0gJHJlc3VsdFsncHJlbm9tJ107CgkJCQkvL2VjaG8gImxlIGRldXhpw6htZSBhcHBlbCBlc3QgOiAiLiRub20uIiAiLiRwcmVub20uICI8YnIgLz4iOwoJCQkJJG5hdGlvID0gJHJlc3VsdFsnbmF0aW8nXTsKCQkJCSRjbGdsb2IgPSAkcmVzdWx0WydjbGdsb2InXTsKCQkJCSRwb2ludHMgPSAkcmVzdWx0Wydwb2ludCddOwoJCQkJJGFjbGdsb2IgPSAkcmVzdWx0WydhY2xnbG9iJ107CgkJCQkkYXBvaW50ID0gJHJlc3VsdFsnYXBvaW50J107CgkJCQkkY2xuYXQgPSAkcmVzdWx0WydjbG5hdCddOwoJCQkJJGNhdGVnID0gJHJlc3VsdFsnY2F0ZWcnXTsKCQkJCSRyYW5ncmVnID0gJHJlc3VsdFsncmFuZ3JlZyddOwoJCQkJJHJhbmdkZXAgPSAkcmVzdWx0WydyYW5nZGVwJ107CgkJCQkkdmFsY2xhID0gJHJlc3VsdFsndmFsY2xhJ107CgkJCQkkY2xwcm8gPSAkcmVzdWx0WydjbHBybyddOwoJCQkJJHZhbGluaXQgPSAkcmVzdWx0Wyd2YWxpbml0J107CgkJCQkkcHJvZ21vaXMgPSAkcmVzdWx0Wydwcm9nbW9pcyddOwoJCQkJJHByb2dhbm4gPSAkcmVzdWx0Wydwcm9nYW5uJ107CgoJCQkJJHF1ZXJ5MiA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfc2l0X21lbnMgKGlkLGRhdGVjcmVhdGVkLCBkYXRlbWFqLCBtb2lzLCBhbm5lZSwgcGhhc2UsIGxpY2VuY2UsIG5vbSwgcHJlbm9tLCBwb2ludHMsIGNsbmF0LCByYW5ncmVnLHJhbmdkZXAsIHByb2dtb2lzLHNhaXNvbikgVkFMVUVTICgnJywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykiOwoJCQkJLy9lY2hvICRxdWVyeTsKCQkJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTIsYXJyYXkoJG5vdywkbm93LCRtb2lzX2NvdXJhbnQsICRhbm5lZV9jb3VyYW50ZSwgJHBoYXNlLCAkbGljZW5jZTIsICRub20sICRwcmVub20sICRwb2ludHMsICRjbG5hdCwgJHJhbmdyZWcsICRyYW5nZGVwLCAkcHJvZ21vaXMsICRzYWlzb24pKTsKCgkJCQkJaWYoISRkYnJlc3VsdGF0KQoJCQkJCXsKCQkJCQkJJG1lc3NhZ2UgPSAkZGItPkVycm9yTXNnKCk7IAoJCQkJCQkkc3RhdHVzID0gJ0VjaGVjJzsKCQkJCQkJJGRlc2lnbmF0aW9uID0gJG1lc3NhZ2U7CgkJCQkJCSRhY3Rpb24gPSAibWFzc19hY3Rpb24iOwoJCQkJCQlwaW5nX2FkbWluX29wczo6ZWNyaXJlam91cm5hbCgkbm93LCRzdGF0dXMsICRkZXNpZ25hdGlvbiwkYWN0aW9uKTsKCgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRzdGF0dXMgPSAnT2snOwoJCQkJCQkkZGVzaWduYXRpb24gPSAiU2l0dWF0aW9uIG9rIHBvdXIgIi4kbm9tLiIgIi4kcHJlbm9tOwoJCQkJCQkkYWN0aW9uID0gJ21hc3NfYWN0aW9uJzsKCQkJCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCAkZGVzaWduYXRpb24sJGFjdGlvbik7CgkJCQkJCS8vb24gbWV0IGxhIHRhYmxlIHJlY3VwIMOgIGpvdXIgcG91ciBsZSBqb3VldXIKCQkJCQkJJHF1ZXJ5MyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgU0VUIGRhdGVtYWogPSA/ICwgc2l0X21lbnMgPSA/IFdIRVJFIGxpY2VuY2UgPSA/IjsKCQkJCQkJJGRicmVzdWx0MyA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkzLCBhcnJheSgkbm93LCAkbW9pc19zaXRfbWVucywgJGxpY2VuY2UyKSk7CgkJCQkJfQoKCgkJCQkvLyRtZXNzYWdlLj0iPGxpPkxhIGxpY2VuY2UgZXN0IG9rPC9saT4iOwoJCQl9Ly9maW4gZHUgZWxzZQkhaXNfYXJyYXkKCgl9CgllbHNlCgl7CgkJLy9MYSBzaXR1YXRpb24gbWVuc3VlbGxlIGV4aXN0ZSBkw6lqw6AgIQoJfQoJCgkKCQogIH0KCnB1YmxpYyBmdW5jdGlvbiByZXRyaWV2ZV9wYXJ0aWVzX3NwaWQoICRsaWNlbmNlICkKICB7CglnbG9iYWwgJGdDbXM7CgkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJLy9lY2hvICJjb29sICEiOwoJJHBpbmcgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1BpbmcnKTsKCS8vcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uY2FsY3Vscy5waHAnKTsKCS8vZWNobyAiZ2xvcDIiOwoJJHNhaXNvbl9jb3VyYW50ZSA9ICRwaW5nLT5HZXRQcmVmZXJlbmNlKCdzYWlzb25fZW5fY291cnMnKTsKCSRub3cgPSB0cmltKCRkYi0+REJUaW1lU3RhbXAodGltZSgpKSwgIiciKTsKCSRhdWpvdXJkaHVpID0gZGF0ZSgnWS1tLWQnKTsKCSRxdWVyeSA9ICJTRUxFQ1QgQ09OQ0FUX1dTKCcgJywgbm9tLCBwcmVub20pIEFTIHBsYXllciBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIGxpY2VuY2UgPSA/IjsKCSRkYnJldG91ciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRsaWNlbmNlKSk7CglpZiAoJGRicmV0b3VyICYmICRkYnJldG91ci0+UmVjb3JkQ291bnQoKSA+IDApCgl7CgkgICAgd2hpbGUgKCRyb3c9ICRkYnJldG91ci0+RmV0Y2hSb3coKSkKCQl7CgkJJHBsYXllciA9ICRyb3dbJ3BsYXllciddOwoJCSRzZXJ2aWNlID0gbmV3IFNlcnZpY2UoKTsKCQkkcmVzdWx0ID0gJHNlcnZpY2UtPmdldEpvdWV1clBhcnRpZXNTcGlkKCIkbGljZW5jZSIpOwoJCS8vZWNobyAiZ2xvcDMiOwoJCS8vdmFyX2R1bXAoJHJlc3VsdCk7CgkJLy9sZSBzZXJ2aWNlIGVzdC1pbCBvdXZlcnQgPwoJCS8qKi8KCQkvL29uIHRlc3RlIGxlIHJlc3VsdGF0IHJldG91cm7DqSAgICAgCgkJLy9vbiBjb250cm9sZSBsZSBuYiBkJ2VudHLDqWVzIGR1IHRhYmxlYXUgcmV0b3VybsOpCgkJLy9vbiBsZSBjb21wYXJlIGF2ZWMgbGUgY2hpZmZyZSBkcyBsYSBiYXNlIGRlIGRvbm7DqWVzCgkJJGxpZ25lcyA9IGNvdW50KCRyZXN1bHQpOy8vb24gY29tcHRlIGxlIG5iIGQnw6lsw6ltZW50cyBkdSB0YWJsZWF1CgkJLy9vbiBjb21wdGUgbGUgbmIgZGUgcsOpc3VsdGF0cyBkdSBzcGlkIHByw6lzZW50IGRzIGxhIGJkZCBwb3VyIGxlIGpvdWV1cgoJCSRzcGlkID0gcGluZ19hZG1pbl9vcHM6OmNvbXB0ZV9zcGlkKCRsaWNlbmNlKTsKCQkKCQkJaWYoIWlzX2FycmF5KCRyZXN1bHQpKQoJCQl7CgoJCQkJJG1lc3NhZ2UgPSAiU2VydmljZSBjb3Vww6kiOyAKCQkJCSRzdGF0dXMgPSAnRWNoZWMnOwoJCQkJJGRlc2lnbmF0aW9uID0gJG1lc3NhZ2U7CgkJCQkkYWN0aW9uID0gIm1hc3NfYWN0aW9uIjsKCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywgJGRlc2lnbmF0aW9uLCRhY3Rpb24pOwoJCQkJCgkJCX0KCQkJZWxzZWlmKCRsaWduZXMgPD0gJHNwaWQpCgkJCXsKCQkJCSRtZXNzYWdlID0gIlLDqXN1bHRhdHMgU1BJRCDDoCBqb3VyIHBvdXIgIi4kcGxheWVyLiIgOiAiLiRzcGlkLiIgZW4gYmFzZSBkZSBkb25uw6llcyAiLiRsaWduZXMuIiBlbiBsaWduZS4iOyAKCQkJCSRzdGF0dXMgPSAnRWNoZWMnOwoJCQkJJGRlc2lnbmF0aW9uID0gJG1lc3NhZ2U7CgkJCQkkYWN0aW9uID0gIm1hc3NfYWN0aW9uIjsKCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywgJGRlc2lnbmF0aW9uLCRhY3Rpb24pOwoJCQkJCgkJCQkJaWYoJGxpZ25lcyA9PSAkc3BpZCkKCQkJCQl7CgkJCQkJCSRxdWVyeTQgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZWN1cF9wYXJ0aWVzIFNFVCBtYWpfc3BpZCA9ID8gV0hFUkUgbGljZW5jZSA9ID8gQU5EIHNhaXNvbiA9ID8iOwoJCQkJCQkkZGJyZXN1bHQ0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTQsYXJyYXkoJGF1am91cmRodWksJGxpY2VuY2UsJHNhaXNvbl9jb3VyYW50ZSkpOwoJCQkJCX0KCQkJCQoJCQkJCgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkaSA9IDA7CgkJCQkkY29tcHRldXIgPSAwOwoJCQkJJGEgPSAwOy8vY2UgY29tcHRldXIgc2VydCBhdSBwYXJ0aWVzIG5vbiByw6ljdXDDqXLDqWVzIHBhciBzaXQgbWVucyB2aWRlCgkJCQkvL29uIHZhIGNvbXB0ZXIgbGVzIGVycmV1cnMKCQkJCSRlcnJvciA9IDA7Ly9sZSBjb21wdGV1ciBkJ2VycmV1cnMKCQkJCSRxdWVyeTEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCBXSEVSRSBzYWlzb24gPSA/IEFORCBsaWNlbmNlID0gPyI7CgkJCQkkZGJyZXN1bHQxID0gJGRiLT5FeGVjdXRlKCRxdWVyeTEsIGFycmF5KCRzYWlzb25fY291cmFudGUsICRsaWNlbmNlKSk7CgkJCQkKCQkJCWZvcmVhY2goJHJlc3VsdCBhcyAkY2xlID0+JHRhYikKCQkJCXsKCgkJCQkJJGNvbXB0ZXVyKys7CgkJCQkJJGRhdGVldmVudCA9ICR0YWJbJ2RhdGUnXTsKCQkJCQkJJGNoZ3QgPSBleHBsb2RlKCIvIiwkZGF0ZWV2ZW50KTsKCQkJCQkJJGRhdGVfZXZlbnQgPSAkY2hndFsyXS4iLSIuJGNoZ3RbMV0uIi0iLiRjaGd0WzBdOwoJCQkJCQkkYW5uZWUgPSAnMjAnLiRjaGd0WzJdOwoJCQkJCQoJCQkJCQkJaWYgKHN1YnN0cigkY2hndFsxXSwgMCwxKT09MCkKCQkJCQkJCXsKCQkJCQkJCQkkbW9pc19ldmVudCA9IHN1YnN0cigkY2hndFsxXSwgMSwxKTsKCQkJCQkJCQkvL2VjaG8gImxhIGRhdGUgZXN0Ii4kZGF0ZV9ldmVudDsKCQkJCQkJCX0KCQkJCQkJCWVsc2UKCQkJCQkJCXsKCQkJCQkJCQkkbW9pc19ldmVudCA9ICRjaGd0WzFdOwoJCQkJCQkJfQoJCQkJCQkvL29uIHZhIHbDqXJpZmllciBzaSBvbiBhIGxhIHNpdHVhdGlvbiBtZW5zdWVsbGUgZHUgam91ZXVyIGR1IGNsdWIgw6Agam91ciBwb3VyIGxlIG1vaXMgZW4gcXVlc3Rpb24KCQkJCQkJJHJldG91cl9zaXRfbWVucyA9IHBpbmdfYWRtaW5fb3BzOjpnZXRfc2l0X21lbnMoJGxpY2VuY2UsJG1vaXNfZXZlbnQsJGFubmVlKTsKCQkJCQkJaWYoJHJldG91cl9zaXRfbWVucz09MCkKCQkJCQkJewoJCQkJCQkJJGRlc2lnbmF0aW9uLj0iU2l0dWF0aW9uIGR1IG1vaXMgIi4kbW9pc19ldmVudC4iIG1hbnF1YW50ZSBwb3VyICIuJHBsYXllcjsKCQkJCQkJCSRhKys7CgkJCQkJCQkkZXJyb3IrKzsKCQkJCQkJfQoJCQkJCQoJCQkJCQoJCQkJCQkKCQkJCQkkbm9tID0gJHRhYlsnbm9tJ107CgkJCQkJCgkJCQkJCS8vb24gYWRhcHRlIHNvbiBub20gZCdhYm9yZAoJCQkJCQkkbm9tX2dsb2JhbCA9IHBpbmdfYWRtaW5fb3BzOjpnZXRfbmFtZSgkbm9tKTsvL3VuZSBmb25jdGlvbiBxdWkgcGVybWV0IGQnZXh0cmFpcmUgbGUgbm9tIGV0IGxlIHByw6lub20KCQkJCQkJJG5vbV9yZWVsMSA9ICRub21fZ2xvYmFsWzBdOwoJCQkJCQkkbm9tX3JlZWwgPSBhZGRzbGFzaGVzKCRub21fZ2xvYmFsWzBdKTsvL2xlIG5vbQkJCQkJCgkJCQkJCSRwcmVub21fcmVlbCA9ICRub21fZ2xvYmFsWzFdOy8vbGUgcHLDqW5vbQoJCQkJCQkkYW5uZWVfY291cmFudGUgPSBkYXRlKCdZJyk7CgkJCQkJCgkJCQkJJGNsYXNzZW1lbnQgPSAkdGFiWydjbGFzc2VtZW50J107Ly9jbGFzc2VtZW50IGZvdXJuaSBwYXIgbGUgc3BpZAoJCQkJCQoJCQkJCQkkY2xhID0gc3Vic3RyKCRjbGFzc2VtZW50LCAwLDEpOwoJCQkJCQkvL0F2ZWMgbGUgbm9tIG9uIHZhIGFsbGVyIGNoZXJjaGVyIGxhIHNpdHVhdGlvbiBtZW5zdWVsbGUgZGUgbCdhZHZlcnNhaXJlCgkJCQkJCS8vb24gcG91cnJhIGxhIHN0b2NrZXIgcG91ciBxdSdlbGxlIHJlLXNlcnZlIGV0IGwndXRpbGlzZXIgcG91ciBhZmZpbmVyIGxlIGNhbGN1bCBkZXMgcG9pbnRzCgkJCQkJCS8vZCdhYm9yZCBvbiB2YSBjaGVyY2hlciBkcyBsYSBiZGQgc2kgbCdhZHZlcnNhaXJlIHkgZXN0IGTDqWrDoCBwb3VyIGxlIG1vaXMgZXQgbGEgc2Fpc29uIGVuIHF1ZXN0aW9uCgkJCQkJCSRxdWVyeTQgPSAiU0VMRUNUIHBvaW50cyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19hZHZlcnNhaXJlcyBXSEVSRSBub20gPSA/IEFORCBwcmVub20gPSA/IEFORCBtb2lzID0gPyBBTkQgYW5uZWUgPSA/IjsKCQkJCQkJLy9lY2hvICRxdWVyeTQuJzxiciAvPic7CgkJCQkJCSRkYnJlc3VsdDQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5NCwgYXJyYXkoJG5vbV9yZWVsMSwgJHByZW5vbV9yZWVsLCRtb2lzX2V2ZW50LCRhbm5lZV9jb3VyYW50ZSkpOwoKCQkJCQkJCWlmKCRkYnJlc3VsdDQgJiYgJGRicmVzdWx0NC0+UmVjb3JkQ291bnQoKT4wICYmICRkYnJlc3VsdDQtPlJlY29yZENvdW50KCkgPDIpLy9vayBvbiBhIHVuIGVucmVnaXN0cmVtZW50IHF1aSBjb3JyZXNwb25kCgkJCQkJCQl7CgkJCQkJCQkJJHJvdzQgPSAkZGJyZXN1bHQ0LT5GZXRjaFJvdygpOwoJCQkJCQkJCSRuZXdjbGFzcyA9ICRyb3c0Wydwb2ludHMnXTsKCQkJCQkJCX0KCQkJCQkJCS8vZGV1eGnDqG1lIGNhcyA6IAoJCQkJCQkJLy9vbiBuJ2EgcGFzIGQnZW5yZWdpc3RyZW1lbnQgZXQgb24gZXN0IGRhbnMgbGUgbW9pcyBjb3VyYW50IGV0IGwnYW5uw6llIGNvdXJhbnRlIDogb24gdmEgY2hlcmNoZXIgbGVzIHBvaW50cyBhdmVjIGxhIGNsYXNzZSBwb3VyIGVuc3VpdGUgbCdpbnPDqXJlciBkcyBsYSBiZGQKCQkJCQkJCWVsc2VpZigkZGJyZXN1bHQ0LT5SZWNvcmRDb3VudCgpPT0wICYmICRtb2lzX2V2ZW50ID09IGRhdGUoJ24nKSAmJiAkYW5uZWUgPT0gZGF0ZSgnWScpKQoJCQkJCQkJewoJCQkJCQkJCS8vb24gdmEgY2hlcmNoZXIgbGEgc2l0IG1lbnMgZHUgcG9uZ2lzdGUKCQkJCQkJCQkKCgkJCQkJCQkJJHNlcnZpY2UgPSBuZXcgU2VydmljZSgpOwoJCQkJCQkJCSRyZXN1bHRhdCA9ICRzZXJ2aWNlLT5nZXRKb3VldXJzQnlOYW1lKCIkbm9tX3JlZWwiLCAkcHJlbm9tID0iJHByZW5vbV9yZWVsIik7CgkJCQkJCQkJLy92YXJfZHVtcCgkcmVzdWx0YXQpOwoJCQkJCQkJCWlmKGlzX2FycmF5KCRyZXN1bHRhdCkgJiYgY291bnQoJHJlc3VsdGF0KT4wICYmIGNvdW50KCRyZXN1bHRhdCk8MikKCQkJCQkJCQl7Ly9vbiBhIGJpZW4gdW4gdGFibGVhdSBhdmVjIGF1IG1vaW5zIHVuIMOpbMOpbWVudCA6IGMnZXN0IG9rICEKCgkJCQkJCQkJCQkvL29uIGEgdW4gcsOpc3VsdGF0ID8KCQkJCQkJCQkJCS8vZWNobyAiR2xvcCI7CgkJCQkJCQkJCQkvLyRjb21wdGV1cisrOwoJCQkJCQkJCQkJJGxpY2VuID0gJHJlc3VsdGF0WzBdWydsaWNlbmNlJ107Ly9vbiBhIGJpZW4gdW4gbnVtw6lybyBkZSBsaWNlbmNlLCBvbiBwZXV0IGRvbmMgcsOpY3Vww6lyZXIgbGEgc2l0dWF0aW9uIG1lbnN1ZWxsZSBlbiBjb3VycwoJCQkJCQkJCQkJLy9lY2hvICRsaWNlbi4nPGJyIC8+JzsKCQkJCQkJCQkJCSRzZXJ2aWNlID0gbmV3IFNlcnZpY2UoKTsKCQkJCQkJCQkJCSRyZXN1bHRhdDIgPSAkc2VydmljZS0+Z2V0Sm91ZXVyKCIkbGljZW4iKTsKCgkJCQkJCQkJCQlpZihpc19hcnJheSgkcmVzdWx0YXQyKSAmJiBjb3VudCgkcmVzdWx0YXQyKT4wKQoJCQkJCQkJCQkJewoJCQkJCQkJCQkJCSRsaWNlbmNlMiA9ICRyZXN1bHRhdDJbJ2xpY2VuY2UnXTsKCQkJCQkJCQkJCQkkbm9tID0gJHJlc3VsdGF0Mlsnbm9tJ107CgkJCQkJCQkJCQkJLy9lY2hvICdhdXRyZSBub20gOiAnLiRub20gLicgJy4kcHJlbm9tOwoJCQkJCQkJCQkJCSRwcmVub20gPSAkcmVzdWx0YXQyWydwcmVub20nXTsKCQkJCQkJCQkJCQkkbmF0aW8gPSAkcmVzdWx0YXQyWyduYXRpbyddOwoJCQkJCQkJCQkJCSRjbGdsb2IgPSAkcmVzdWx0YXQyWydjbGdsb2InXTsKCQkJCQkJCQkJCQkkcG9pbnQgPSAkcmVzdWx0YXQyWydwb2ludCddOwoJCQkJCQkJCQkJCSRhY2xnbG9iID0gJHJlc3VsdGF0MlsnYWNsZ2xvYiddOwoJCQkJCQkJCQkJCSRhcG9pbnQgPSAkcmVzdWx0YXQyWydhcG9pbnQnXTsKCQkJCQkJCQkJCQkkY2xuYXQgPSAkcmVzdWx0YXQyWydjbG5hdCddOwoJCQkJCQkJCQkJCSRjYXRlZyA9ICRyZXN1bHRhdDJbJ2NhdGVnJ107CgkJCQkJCQkJCQkJJHJhbmdyZWcgPSAkcmVzdWx0YXQyWydyYW5ncmVnJ107CgkJCQkJCQkJCQkJJHJhbmdkZXAgPSAkcmVzdWx0YXQyWydyYW5nZGVwJ107CgkJCQkJCQkJCQkJJHZhbGNsYSA9ICRyZXN1bHRhdDJbJ3ZhbGNsYSddOwoJCQkJCQkJCQkJCSRjbHBybyA9ICRyZXN1bHRhdDJbJ2NscHJvJ107CgkJCQkJCQkJCQkJJHZhbGluaXQgPSAkcmVzdWx0YXQyWyd2YWxpbml0J107CgkJCQkJCQkJCQkJJHByb2dtb2lzID0gJHJlc3VsdGF0MlsncHJvZ21vaXMnXTsKCQkJCQkJCQkJCQkkcHJvZ2FubiA9ICRyZXN1bHRhdDJbJ3Byb2dhbm4nXTsKCQkJCQkJCQkJCQkkYW5uZWVfY291cmFudGUgPSBkYXRlKCdZJyk7CgkJCQkJCQkJCQkJLy9vbiBpbnPDqHJlIGxlIHRvdXQgZGFucyBsYSBiZGQKCQkJCQkJCQkJCQkkcXVlcnk1ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19hZHZlcnNhaXJlcyAoaWQsZGF0ZWNyZWF0ZWQsIGRhdGVtYWosIG1vaXMsIGFubmVlLCBwaGFzZSwgbGljZW5jZSwgbm9tLCBwcmVub20sIHBvaW50cywgY2xuYXQsIHJhbmdyZWcscmFuZ2RlcCwgcHJvZ21vaXMpIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIjsKCQkJCQkJCQkJCQkvL2VjaG8gJHF1ZXJ5NTsKCQkJCQkJCQkJCQkkZGJyZXN1bHRhdDUgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5NSxhcnJheSgkbm93LCRub3csJG1vaXNfZXZlbnQsICRhbm5lZV9jb3VyYW50ZSwgJHBoYXNlLCAkbGljZW5jZTIsICRub20sICRwcmVub20sICRwb2ludCwgJGNsbmF0LCAkcmFuZ3JlZywgJHJhbmdkZXAsICRwcm9nbW9pcykpOwoJCQkJCQkJCQkJCQkvL09uIHbDqXJpZmllIHF1ZSBsJ2luc2VydGlvbiBzZSBwYXNzZSBiaWVuCgkJCQkJCQkJCQkJJG5ld2NsYXNzID0gJHBvaW50OwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJZWxzZQoJCQkJCQkJCQkJewoJCQkJCQkJCQkJCWlmKCRjbGEgPT0gJ04nKXsKCQkJCQkJCQkJCQkJJG5ld2NsYXNzZW1lbnQgPSBleHBsb2RlKCctJywgJGNsYXNzZW1lbnQpOwoJCQkJCQkJCQkJCQkkbmV3Y2xhc3MgPSAkbmV3Y2xhc3NlbWVudFsxXTsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJZWxzZSAKCQkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJCSRuZXdjbGFzcyA9ICRjbGFzc2VtZW50OwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCX0KCgoJCQkJCQkJCX0KCQkJCQkJCQllbHNlCgkJCQkJCQkJewoJCQkJCQkJCQlpZihjb3VudCgkcmVzdWx0YXQpPjEpLy9ob21vbnltaWUsIGV0Yy4uLgoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkZGVzaWduYXRpb24uPSJIb21vbnltaWUgcG91ciAiLiRwbGF5ZXI7CgkJCQkJCQkJCQkkZXJyb3IrKzsKCQkJCQkJCQkJfQoJCQkJCQkJCQkvL2VjaG8gIlBhcyBHbG9wIjsKCQkJCQkJCQkJaWYoJGNsYSA9PSAnTicpewoJCQkJCQkJCQkJJG5ld2NsYXNzZW1lbnQgPSBleHBsb2RlKCctJywgJGNsYXNzZW1lbnQpOwoJCQkJCQkJCQkJJG5ld2NsYXNzID0gJG5ld2NsYXNzZW1lbnRbMV07CgkJCQkJCQkJCX0KCQkJCQkJCQkJZWxzZSAKCQkJCQkJCQkJewoJCQkJCQkJCQkJJG5ld2NsYXNzID0gJGNsYXNzZW1lbnQ7CgkJCQkJCQkJCX0KCQkJCQkJCQl9Ly9maW4gZHUgaWYgaXNfYXJyYXkoJHJlc3VsdGF0KQoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCS8vdHJvaXNpw6htZSBjYXMgOiAKCQkJCQkJCQkvL29uIG4nYSBwYXMgbGVzIHBvaW50cyBldCBvbiBuJ2VzdCBwYXMgZGFucyBsZSBtb2lzIGNvdXJhbnQsIG9uIG4naW5zw6hyZSBwYXMgZXQgb24gdXRpbGlzZSBsZSBjbGFzc2VtZW50IGZvdXJuaQoJCQkJCQkJCWlmKCRjbGEgPT0gJ04nKXsKCQkJCQkJCQkJJG5ld2NsYXNzZW1lbnQgPSBleHBsb2RlKCctJywgJGNsYXNzZW1lbnQpOwoJCQkJCQkJCQkkbmV3Y2xhc3MgPSAkbmV3Y2xhc3NlbWVudFsxXTsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZSAKCQkJCQkJCQl7CgkJCQkJCQkJCSRuZXdjbGFzcyA9ICRjbGFzc2VtZW50OwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJLy9vbiB2YSBjYWxjdWxlciBsYSBkaWZmw6lyZW5jZSBlbnRyZSBsZSBjbGFzc2VtZW50IGRlIGwnYWR2ZXJzYWlyZSBldCBsZSBjbGFzc2VtZW50IGR1IGpvdWV1ciBkdSBjbHViCgkJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgcG9pbnRzIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3NpdF9tZW5zIFdIRVJFIGxpY2VuY2UgPSA/IEFORCBtb2lzID0gPyBBTkQgYW5uZWUgPSA/IjsKCQkJCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGxpY2VuY2UsJG1vaXNfZXZlbnQsJGFubmVlKSk7CgkJCQkJCS8vc2kgbGEgc2l0dWF0aW9uIG1lbnN1ZWxsZSBkdSBqb3VldXIgZHUgY2x1YiBuJ2V4aXN0ZSBwYXMgPwoJCQkJCQkvL2Fsb3JzIG9uIG4nZW5yZWdpc3RyZSBwYXMgbGUgcsOpc3VsdGF0IGV0IG9uIGxlIHNpZ25hbGUKCQkJCQkJCWlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID09IDApCgkJCQkJCQl7CgkJCQkJCQkJLy8kZGVzaWduYXRpb24uPSJFY2FydCBub24gY2FsY3Vsw6kiOwoJCQkJCQkJCSRlY2FydCA9IDA7CgkJCQkJCQkJJGVycm9yKys7CgkJCQkJCQl9CgkJCQkJCQoKCQkJCQkJJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKCQkJCQkJJHBvaW50cyA9ICRyb3dbJ3BvaW50cyddOwoJCQkJCQkkZWNhcnRfcmVlbCA9ICRwb2ludHMgLSAkbmV3Y2xhc3M7CgkJCQkJCgkJCQkJCS8vb24gY2FsY3VsZSBsJ8OpY2FydCBzZWxvbiBsYSBncmlsbGUgZGUgcG9pbnRzIGRlIGxhIEZGVFQKCQkJCQkJJHR5cGVfZWNhcnQgPSBwaW5nX2FkbWluX29wczo6Q2FsY3VsRWNhcnQoJGVjYXJ0X3JlZWwpOwoJCQkJCQkKCQkJCQkkZXByZXV2ZSA9ICR0YWJbJ2VwcmV1dmUnXTsKCQkJCQkKCQkJCQkJLy8gbGUgam91ZXVyIHBhcnRpY2lwZSDDoCBjZXR0ZSBjb21ww6l0aXRpb24gPyAocG91ciBsZXMgZXByZXV2ZXMgaW5kaXZpZHVlbGxlcyB1bmlxdWVtZW50KQoJCQkJCQkkcXVlcnlfZXByZXV2ZSA9ICJTRUxFQ1QgaW5kaXZzLCBjb2RlX2NvbXBldCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyBBUyB0YyBXSEVSRSB0Yy5uYW1lID0gPyI7CgkJCQkJCSRkYmVwcmV1dmUgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5X2VwcmV1dmUsYXJyYXkoJGVwcmV1dmUpKTsKCQkJCQkKCQkJCQkJaWYoJGRiZXByZXV2ZSAmJiAkZGJlcHJldXZlLT5SZWNvcmRDb3VudCgpPjApCgkJCQkJCXsKCQkJCQkJCSRyb3cgPSAkZGJlcHJldXZlLT5GZXRjaFJvdygpOwoJCQkJCQkJJGluZGl2cyA9ICRyb3dbJ2luZGl2cyddOwoJCQkJCQkJJHR5cGVfY29tcGV0X3RtcCA9ICRyb3dbJ2NvZGVfY29tcGV0J107CgkJCQkJCQoJCQkJCQkJaWYoJGluZGl2cyA9PSAxKSAvL28gbmUgc3QgYmllbiBkYW5zIHVuZSBjb21wZXQgaW5kaXZpZHVlbGxlcwoJCQkJCQkJewoJCQkJCQkJCS8vb24gZXN0IGJpZW4gZGFucyBsZSBjYWRyZSBkJ3VuZSBjb21wZXQgaW5kaXZpZHVlbGxlCgkJCQkJCQkJJHF1ZXJ5X3BhcnRpY2lwZSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWNpcGUgV0hFUkUgbGljZW5jZSA9ID8gQU5EIHR5cGVfY29tcGV0ID0gPyI7CgkJCQkJCQkJJGRicGFydGljaXBlID0gJGRiLT5FeGVjdXRlKCRxdWVyeV9wYXJ0aWNpcGUsYXJyYXkoJGxpY2VuY2UsJHR5cGVfY29tcGV0X3RtcCkpOwoJCQkJCQkJCgkJCQkJCQkJaWYoJGRicGFydGljaXBlLT5SZWNvcmRDb3VudCgpPT0wKS8vbGUgam91ZXVyIG4nZXN0IHBhcyBpbnNjcml0LCBvbiBsZSBmYWl0CgkJCQkJCQkJewoJCQkJCQkJCQkkcXVlcnlfcGFydGljaXBlMiA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGljaXBlIChsaWNlbmNlLHR5cGVfY29tcGV0KSBWQUxVRVMgKD8sPykiOwoJCQkJCQkJCQkkZGJwYXJ0aWNpcGUyID0gJGRiLT5FeGVjdXRlKCRxdWVyeV9wYXJ0aWNpcGUyLCBhcnJheSgkbGljZW5jZSwkdHlwZV9jb21wZXRfdG1wKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2UgLy9sYSBjb21wZXQgbidleGlzdGUgcGFzICwgb24gbCdham91dGUgYXUgdHlwZSBkZSBjb21ww6l0aXRvbgoJCQkJCQl7CgkJCQkJCQlpZigkZXByZXV2ZSAhPSAnQ3JpdMOpcml1bSBmw6lkw6lyYWwnKQoJCQkJCQkJewkKCQkJCQkJCQkvLyRjb2VmZlswXSA9ICcwLjAwJzsKCQkJCQkJCQkvL29uIGNyw6nDqSB1biBjb2RlIGNvbXBldCB0ZW1wb3JhaXJlCgkJCQkJCQkJJGNvZGVfY29tcGV0X3RlbXAgPSBwaW5nX2FkbWluX29wczo6cmFuZG9tKDMpOwoJCQkJCQkJCS8vJGNvZWZmWzFdID0gJGNvZGVfY29tcGV0X3RlbXA7CgkJCQkJCQkJJGNvZWZmX3Byb3Zpc29pcmUgPSAnMC4wMCc7CgkJCQkJCQkJLy9vbiBmYWl0IHFkIG3Dqm1lIGwnaW5jbHVzaW9uIGQndW5lIG5vdXZlbGxlIGNvbXBldAoJCQkJCQkJCSRpbmRpdnMgPSAxOwoJCQkJCQkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMgKGlkLCBuYW1lLGNvZGVfY29tcGV0LGNvZWZmaWNpZW50LGluZGl2cyx0YWcpIFZBTFVFUyAoJycsPywgPywgPywgPywgPykiOwoJCQkJCQkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRlcHJldXZlLCRjb2RlX2NvbXBldF90ZW1wLCRjb2VmZl9wcm92aXNvaXJlLCAkaW5kaXZzKSk7CgkJCQkJCQkJLy9lY2hvICJjb2VmZmljaWVudCBpbnRyb3V2YWJsZSAhIjsKCQkJCQkJCX0KCQkJCQkJCgkJCQkJCX0KCQkJCQkKCQkJCQkJLy8gZGUgcXVlbGxlIGNvbXDDqXRpdGlvbiBzJ2FnaXQtaWwgPyAKCQkJCQkJLy9PbiBhIGxhIGRhdGUgZXQgbGUgdHlwZSBkJ8OpcHJldXZlCgkJCQkJCS8vb24gcGV1dCBkb25jIGVuIGTDqWR1aXJlIGxlIHRvdXIgdmlhIGxlIGNhbGVuZHJpZXIKCQkJCQkJLy9ldCBsZSBjb2VmZmljaWVudCBwb3VyIGNhbGN1bGVyIGxlcyBwb2ludHMgdmlhIGxhIHRhYmxlIHR5cGVfY29tcGV0aXRvbnMKCQkJCQkJLy8xIC0gb24gcsOpY3Vww6hyZSBsZSBjb2VmZmljaWVudCBkZSBsYSBjb21ww6l0aXRpb24KCQkJCQkJJGNvZWZmID0gcGluZ19hZG1pbl9vcHM6OmNvZWZmKCRlcHJldXZlLCRsaWNlbmNlKTsvLyBsYSBsaWNlbmNlIGVuIGNhcyBkZSBjcml0w6lyaXVtIGbDqWTDqXJhbCgyIGNvZWZmcyBkaXN0aW5jdHMpCgkJCQkJCS8vdmFyX2R1bXAoJGNvZWZmKTsKCQkJCQkJJGNvZWZmX3JlZWxfdG1wID0gJGNvZWZmWzBdOwoJCQkJCQkvL2VjaG8gJ2xlIGNvZWZmIGVzdCA6ICcuJGNvZWZmX3JlZWxfdG1wOwoJCQkJCQkvKiRlcnJvcl9jb2VmZiA9ICcnOwoJCQkJCQkJaWYoaXNzZXQoJGNvZWZmWzFdKSkKCQkJCQkJCXsKCQkJCQkJCQkkY29kZV9jb21wZXRfdG1wID0gJGNvZWZmWzFdOwoJCQkJCQkJfQoJCQkJCQkJaWYoJGNvZWZmX3JlZWxfdG1wID09JzAuMDAnIHx8ICFpc3NldCgkY29lZmZfcmVlbF90bXApKQoJCQkJCQkJewoJCQkJCQkJCSRlcnJvcl9jb2VmZiA9IDE7CgkJCQkJCQl9CgkJCQkJCSovCgkJCQkJCS8vMiAtIG9uIHLDqWN1cMOpcmUgbGUgdG91ciBzJ2lsIGV4aXN0ZQoJCQkJCQkvL29uIHZhIGZkb25jIGNoZXJjaGVyIGRhbnMgbGEgdGFibGUgY2FsZW5kcmllcgoJCQkJCQkkcXVlcnkgPSAiU0VMRUNUIG51bWpvdXJuIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NhbGVuZHJpZXIgV0hFUkUgdHlwZV9jb21wZXQgPT8gQU5EIGRhdGVfZGVidXQgPSA/IE9SIGRhdGVfZmluID0gPyI7CgkJCQkJCSRyZXN1bHRhdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR0eXBlX2NvbXBldF90bXAsICRkYXRlX2V2ZW50LCRkYXRlX2V2ZW50KSk7CgoJCQkJCQkJaWYgKCRyZXN1bHRhdCAmJiAkcmVzdWx0YXQtPlJlY29yZENvdW50KCk+MCl7CgkJCQkJCQkJJHJvdyA9ICRyZXN1bHRhdC0+RmV0Y2hSb3coKTsKCQkJCQkJCQkkbnVtam91cm4gPSAkcm93WydudW1qb3VybiddOwoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSRudW1qb3VybiA9IDA7Ly9vbiBpbnPDqHJlIGRhbnMgbGUgY2FsZW5kcmllciA/IEJlbiBvdWkgIQkJCQkJCQoJCQkJCQkJCSR0eXBlX2NvbXBldCA9ICRjb2RlX2NvbXBldF90ZW1wOwoJCQkJCQkJCSRxdWVyeWNhbCA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2FsZW5kcmllciAoaWQsdHlwZV9jb21wZXQsZGF0ZV9kZWJ1dCxkYXRlX2ZpbixudW1qb3VybikgVkFMVUVTICgnJywgPywgPywgPywgPykiOwoJCQkJCQkJCSRyZXEgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5Y2FsLGFycmF5KCR0eXBlX2NvbXBldF90bXAsJGRhdGVfZXZlbnQsJGRhdGVfZXZlbnQsJG51bWpvdXJuKSk7CgkJCQkJCQkJCgkJCQkJCQkJCQkJCQkKCQkJCQkJCQoJCQkJCQkJfQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQkvL2ZpbiBkdSBwb2ludCAyCgoJCQkJCSR2aWN0b2lyZSA9ICR0YWJbJ3ZpY3RvaXJlJ107CgoJCQkJCQlpZiAoJHZpY3RvaXJlID09J1YnKXsKCQkJCQkJCSR2aWN0b2lyZSA9IDE7CgkJCQkJCX0KCQkJCQkJZWxzZSAKCQkJCQkJewoJCQkJCQkJJHZpY3RvaXJlID0gMDsKCQkJCQkJfQoKCQkJCQkJLy9vbiBwZXV0IGTDqXNvcm1haXMgY2FsY3VsZXIgbGVzIHBvaW50cyAKCQkJCQkJJHBvaW50czEgPSBwaW5nX2FkbWluX29wczo6Q2FsY3VsUG9pbnRzSW5kaXZzKCR0eXBlX2VjYXJ0LCAkdmljdG9pcmUpOwoJCQkJCQkkcG9pbnRyZXMgPSAkcG9pbnRzMSokY29lZmZfcmVlbF90bXA7CgkJCQkJCSRmb3JmYWl0ID0gJHRhYlsnZm9yZmFpdCddOwoKCQkJCQkKCQkJCQkJCSRxdWVyeTMgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCAoaWQsIHNhaXNvbiwgZGF0ZW1haiwgbGljZW5jZSwgZGF0ZV9ldmVudCwgZXByZXV2ZSwgbm9tLCBudW1qb3VybixjbGFzc2VtZW50LCB2aWN0b2lyZSxlY2FydCx0eXBlX2VjYXJ0LCBjb2VmZiwgcG9pbnRyZXMsIGZvcmZhaXQpIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIjsKCQkJCQkJCSRpKys7CgkJCQkJCQkvL2VjaG8gJHF1ZXJ5OwoJCQkJCQkJJGRicmVzdWx0YXQzID0gJGRiLT5FeGVjdXRlKCRxdWVyeTMsYXJyYXkoJHNhaXNvbl9jb3VyYW50ZSwkbm93LCAkbGljZW5jZSwgJGRhdGVfZXZlbnQsICRlcHJldXZlLCAkbm9tLCAkbnVtam91cm4sICRuZXdjbGFzcywgJHZpY3RvaXJlLCRlY2FydF9yZWVsLCR0eXBlX2VjYXJ0LCAkY29lZmZfcmVlbF90bXAsJHBvaW50cmVzLCAkZm9yZmFpdCkpOwoKCQkJCQkJCWlmKCEkZGJyZXN1bHRhdDMpCgkJCQkJCQkJewoJCQkJCQkJCQkkbWVzc2FnZSA9ICRkYi0+RXJyb3JNc2coKTsgCgkJCQkJCQkJCSRzdGF0dXMgPSAnRWNoZWMnOwoJCQkJCQkJCQkkZGVzaWduYXRpb24gPSAkbWVzc2FnZTsKCQkJCQkJCQkJJGFjdGlvbiA9ICJtYXNzX2FjdGlvbiI7CgkJCQkJCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywgJGRlc2lnbmF0aW9uLCRhY3Rpb24pOwoJCQkJCQkJCX0KCQkJCQkKCQkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgoJCQkJCQkvL29uIG1ldCDDoCBqb3VyIGxhIGRhdGUgZGUgbWFqIGRlcyByw6lzdWx0YXRzIFNQSUQKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJLy9vbiBkw6l0cnVpdCBsZSBuYiBkJ2VycmV1cgoJCQkJCQl1bnNldCgkZXJyb3IpOwoJCQkJfS8vZmluIGR1IGZvcmVhY2gKCQkJCQoJCQkJJGNvbXB0YWdlID0gJGk7CgkJCQkkcXVlcnk0ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXBfcGFydGllcyBTRVQgbWFqX3NwaWQgPSA/LCBzcGlkID0gPyxzcGlkX3RvdGFsID0gPyBXSEVSRSBsaWNlbmNlID0gPyBBTkQgc2Fpc29uID0gPyI7CgkJCQkkZGJyZXN1bHQ0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTQsYXJyYXkoJGF1am91cmRodWksJGNvbXB0YWdlLCRjb21wdGV1ciwkbGljZW5jZSwkc2Fpc29uX2NvdXJhbnRlKSk7CgkJCQkKCQkJCSRzdGF0dXMgPSAnUGFydGllcyBTUElEJzsKCQkJCSRkZXNpZ25hdGlvbiAuPSAkY29tcHRhZ2UuIiBwYXJ0aWVzIFNwaWQgc3VyICIuJGNvbXB0ZXVyLiIgIGRlICIuJHBsYXllcjsKCQkJCWlmKCRhID4wKQoJCQkJewoJCQkJCSRkZXNpZ25hdGlvbi49ICIgIi4kYS4iIHBhcnRpZXMgU3BpZCBub24gcsOpY3Vww6lyw6llcyAoc2l0dWF0aW9uIG1lbnN1ZWxsZSBtYW5xdWFudGUpIjsKCQkJCX0KCQkJCSRhY3Rpb24gPSAibWFzc19hY3Rpb24iOwoJCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCAkZGVzaWduYXRpb24sJGFjdGlvbik7CgoJCQl9Ly9maW4gZHUgaWYgIWlzX2FycmF5CgkJfS8vZmluIGR1IHdoaWxlCgl9Ly9maW4gZHUgaWYgZGJyZXRvdXIgPjAKCgoKCgoKCgoKICB9Ly9maW4gZGUgbGEgZm9uY3Rpb24KIyMKIyMKIyMKIyMKIyAgIFJldHJpZXZlIHBhcnRpZXMgRkZUVAoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXRyaWV2ZV9wYXJ0aWVzX2ZmdHQoICRsaWNlbmNlICkKICB7CglnbG9iYWwgJGdDbXM7CgkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJJHBpbmcgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1BpbmcnKTsKCS8vcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uY2FsY3Vscy5waHAnKTsKCSRzYWlzb25fY291cmFudGUgPSAkcGluZy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7Cgkkbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CgkkYXVqb3VyZGh1aSA9IGRhdGUoJ1ktbS1kJyk7CgkkcXVlcnkgPSAiU0VMRUNUIENPTkNBVF9XUygnICcsIG5vbSwgcHJlbm9tKSBBUyBwbGF5ZXIgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBXSEVSRSBsaWNlbmNlID0gPyI7CgkkZGJyZXRvdXIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGljZW5jZSkpOwoJJGRlc2lnbmF0aW9uID0gJyc7CglpZiAoJGRicmV0b3VyICYmICRkYnJldG91ci0+UmVjb3JkQ291bnQoKSA+IDApCgl7CgkgICAgd2hpbGUgKCRyb3c9ICRkYnJldG91ci0+RmV0Y2hSb3coKSkKCQl7CgkJJHBsYXllciA9ICRyb3dbJ3BsYXllciddOwoJCSRzZXJ2aWNlID0gbmV3IFNlcnZpY2UoKTsKCQkkcmVzdWx0ID0gJHNlcnZpY2UtPmdldEpvdWV1clBhcnRpZXMoIiRsaWNlbmNlIik7CgkJJGxpZ25lcyA9IGNvdW50KCRyZXN1bHQpOwoJCSRmZnR0ID0gcGluZ19hZG1pbl9vcHM6OmNvbXB0ZV9mZnR0KCRsaWNlbmNlKTsKCQkvL3Zhcl9kdW1wKCRyZXN1bHQpOwoJCS8vbGUgc2VydmljZSBlc3QtaWwgb3V2ZXJ0ID8KCQkvKiovCgkJLy9vbiB0ZXN0ZSBsZSByZXN1bHRhdCByZXRvdXJuw6kgICAgIAoKCQkJaWYoIWlzX2FycmF5KCRyZXN1bHQpKQoJCQl7CgkJCQkkbWVzc2FnZSA9ICJTZXJ2aWNlIGNvdXDDqSI7IAoJCQkJJHN0YXR1cyA9ICdFY2hlYyc7CgkJCQkkZGVzaWduYXRpb24gPSAkbWVzc2FnZTsKCQkJCSRhY3Rpb24gPSAibWFzc19hY3Rpb24iOwoJCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCAkZGVzaWduYXRpb24sJGFjdGlvbik7CgkJCX0KCQkJZWxzZWlmKCRsaWduZXMgPD0gJGZmdHQpCgkJCXsKCQkJCSRtZXNzYWdlID0gIlBhcnRpZXMgRkZUVCDDoCBqb3VyIHBvdXIgIi4kcGxheWVyLiIgOiAiLiRmZnR0LiIgZW4gYmFzZSBkZSBkb25uw6llcyAiLiRsaWduZXMuIiBlbiBsaWduZS4iOyAKCQkJCSRzdGF0dXMgPSAnRWNoZWMnOwoJCQkJJGRlc2lnbmF0aW9uID0gJG1lc3NhZ2U7CgkJCQkkYWN0aW9uID0gIm1hc3NfYWN0aW9uIjsKCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywgJGRlc2lnbmF0aW9uLCRhY3Rpb24pOwoJCQkJJGF1am91cmRodWkgPSBkYXRlKCdZLW0tZCcpOwoJCQkJJHF1ZXJ5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXBfcGFydGllcyBTRVQgbWFqX2ZmdHQgPSA/IFdIRVJFIGxpY2VuY2UgPSA/IEFORCBzYWlzb24gPSA/IjsKCQkJCSRkYnJlc3VsdDQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkYXVqb3VyZGh1aSwkbGljZW5jZSwkc2Fpc29uX2NvdXJhbnRlKSk7CgkJCQkKCQkJCQoJCQl9CgkJCWVsc2UKCQkJewkKCQkJCSRpID0gMDsKCQkJCSRjb21wdGV1ciA9IDA7CgkJCQlmb3JlYWNoKCRyZXN1bHQgYXMgJGNsZSA9PiR0YWIpCgkJCQl7CgoJCQkJCSRjb21wdGV1cisrOwoKCQkJCQkKCQkJCQkkbGljZW5jZSA9ICR0YWJbJ2xpY2VuY2UnXTsKCQkJCQkkYWR2bGljID0gJHRhYlsnYWR2bGljJ107CgkJCQkJJHZkID0gJHRhYlsndmQnXTsKCgkJCQkJCWlmICgkdmQgPT0nVicpewoJCQkJCQkJJHZkID0gMTsKCQkJCQkJfQoJCQkJCQllbHNlIAoJCQkJCQl7CgkJCQkJCQkkdmQgPSAwOwoJCQkJCQl9CgkJCQkJJG51bWpvdXJuID0gJHRhYlsnbnVtam91cm4nXTsKCQkJCQkKCQkJCQkJaWYoaXNfYXJyYXkoJG51bWpvdXJuKSkKCQkJCQkJewoJCQkJCQkJJG51bWpvdXJuID0gJzAnOwoJCQkJCQl9CgkJCQkJCQoJCQkJCSRjb2RlY2hhbXAgPSAkdGFiWydjb2RlY2hhbXAnXTsKCQkJCQkkZGF0ZWV2ZW50ID0gJHRhYlsnZGF0ZSddOwoJCQkJCSRjaGd0ID0gZXhwbG9kZSgiLyIsJGRhdGVldmVudCk7CgkJCQkJJGRhdGVfZXZlbnQgPSAkY2hndFsyXS4iLSIuJGNoZ3RbMV0uIi0iLiRjaGd0WzBdOwoJCQkJCS8qCgkJCQkJCWlmIChzdWJzdHIoJGNoZ3RbMV0sIDAsMSk9PTApCgkJCQkJCXsKCQkJCQkJCSRtb2lzX2V2ZW50ID0gc3Vic3RyKCRjaGd0WzFdLCAxLDEpOwoJCQkJCQkJCS8vZWNobyAibGEgZGF0ZSBlc3QiLiRkYXRlX2V2ZW50OwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJJG1vaXNfZXZlbnQgPSAkY2hndFsxXTsKCQkJCQkJfQoJCQkJCSovCQoJCQkJCSRhZHZzZXhlID0gJHRhYlsnYWR2c2V4ZSddOwoJCQkJCSRhZHZub21wcmUgPSAkdGFiWydhZHZub21wcmUnXTsKCQkJCQkkcG9pbnRyZXMgPSAkdGFiWydwb2ludHJlcyddOwoJCQkJCSRjb2VmY2hhbXAgPSAkdGFiWydjb2VmY2hhbXAnXTsJCQkJCQoJCQkJCSRhZHZjbGFvZiA9ICR0YWJbJ2FkdmNsYW9mJ107CQkJCQkKCQkJCQkKCQkJCQkkcXVlcnkgPSAiU0VMRUNUIGxpY2VuY2UsYWR2bGljLCBudW1qb3VybiwgY29kZWNoYW1wLCBkYXRlX2V2ZW50LCBjb2VmY2hhbXAgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyBXSEVSRSBsaWNlbmNlID0gPyBBTkQgYWR2bGljID0gPyBBTkQgbnVtam91cm4gPSA/IEFORCBjb2RlY2hhbXAgPSA/IEFORCBkYXRlX2V2ZW50ID0gPyBBTkQgY29lZmNoYW1wID0gPyI7CgkJCQkJLy9lY2hvICRxdWVyeTsKCQkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGljZW5jZSwgJGFkdmxpYywgJG51bWpvdXJuLCAkY29kZWNoYW1wLCAkZGF0ZV9ldmVudCwgJGNvZWZjaGFtcCkpOwoKCQkJCQlpZigkZGJyZXN1bHQgICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA9PSAwKSB7CgkJCQkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyAoaWQsIHNhaXNvbiwgbGljZW5jZSwgYWR2bGljLCB2ZCwgbnVtam91cm4sIGNvZGVjaGFtcCwgZGF0ZV9ldmVudCwgYWR2c2V4ZSwgYWR2bm9tcHJlLCBwb2ludHJlcywgY29lZmNoYW1wLCBhZHZjbGFvZikgVkFMVUVTICgnJywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykiOwoJCQkJCQkkaSsrOwoJCQkJCQkvL2VjaG8gJHF1ZXJ5OwoJCQkJCQkkZGJyZXN1bHRhdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHNhaXNvbl9jb3VyYW50ZSwkbGljZW5jZSwgJGFkdmxpYywgJHZkLCAkbnVtam91cm4sICRjb2RlY2hhbXAsICRkYXRlX2V2ZW50LCAkYWR2c2V4ZSwgJGFkdm5vbXByZSwgJHBvaW50cmVzLCAkY29lZmNoYW1wLCAkYWR2Y2xhb2YpKTsKCgkJCQkJCWlmKCEkZGJyZXN1bHRhdCkKCQkJCQkJCXsKCQkJCQkJCQkkbWVzc2FnZSA9ICRkYi0+RXJyb3JNc2coKTsgCgkJCQkJCQkJJHN0YXR1cyA9ICdFY2hlYyc7CgkJCQkJCQkJJGRlc2lnbmF0aW9uID0gJG1lc3NhZ2U7CgkJCQkJCQkJJGFjdGlvbiA9ICJtYXNzX2FjdGlvbiI7CgkJCQkJCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCAkZGVzaWduYXRpb24sJGFjdGlvbik7CgkJCQkJCQl9CgoKCQkJCQl9Ly9maW4gZHUgaWYgcmVjb3JkQ291bnQoKSBsaWduZSAyNDQKCgkJCQl9Ly9maW4gZHUgZm9yZWFjaAoJCQkJCgkJCQkkY29tcHRhZ2UgPSAkaTsKCQkJCSRxdWVyeTQgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZWN1cF9wYXJ0aWVzIFNFVCBtYWpfZmZ0dCA9ID8sZmZ0dCA9ID8gV0hFUkUgbGljZW5jZSA9ID8gQU5EIHNhaXNvbiA9ID8iOwoJCQkJJGRicmVzdWx0NCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnk0LCBhcnJheSgkYXVqb3VyZGh1aSwkY29tcHRhZ2UsJGxpY2VuY2UsJHNhaXNvbl9jb3VyYW50ZSkpOwoJCQkJCgkJCQkkc3RhdHVzID0gJ1BhcnRpZXMgRkZUVCc7CgkJCQkkZGVzaWduYXRpb24gLj0gIlLDqWN1cMOpcmF0aW9uIEZGVFQgZGUgIi4kY29tcHRhZ2UuIiBwYXJ0aWVzIHN1ciAiLiRjb21wdGV1ci4iICBkZSAiLiRwbGF5ZXI7CgkJCQkkYWN0aW9uID0gIm1hc3NfYWN0aW9uIjsKCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywgJGRlc2lnbmF0aW9uLCRhY3Rpb24pOwoKCQkJfS8vZmluIGR1IGlmICFpc19hcnJheQoJCX0vL2ZpbiBkdSB3aGlsZQoKCX0vL2ZpbiBkdSBpZiBkYnJldG91ciA+MAoKCgoKCgoKCgogIH0vL2ZpbiBkZSBsYSBmb25jdGlvbgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlcmFzZV9zcGlkICggJGlkLCAkY29lZmZfZmZ0dCwgJG51bWpvdXJuX2ZmdHQsICRwb2ludHNfZmZ0dCkKewoJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCBTRVQgbnVtam91cm4gPSA/LCBjb2VmZiA9ID8sIHBvaW50cmVzID0gPyBXSEVSRSBpZCA9ID8iOwoJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG51bWpvdXJuX2ZmdHQsICRjb2VmZl9mZnR0LCRwb2ludHJlc19mZnR0KSk7Cn0KCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVsZXRlX2pvdXJuYWwoJGpvdXJuYWxpZCkKICB7CiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwoKICAgIC8vTm93IHJlbW92ZSB0aGUgZW50cnkKICAgICRxdWVyeSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXAgV0hFUkUgaWQgPSA/IjsKICAgICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRqb3VybmFsaWQpKTsKCiAgICAKICB9CgpmdW5jdGlvbiBwYWdpbmF0aW9uMigkcGFnZSwgJHRvdGFscm93cywgJGxpbWl0LCRhY3Rpb25pZCkKIHsKICAgJHVybGV4dD0nP21hY3Q9UGluZywnLiRhY3Rpb25pZC4nLCcuQ01TX1NFQ1VSRV9QQVJBTV9OQU1FLic9Jy4kX1NFU1NJT05bQ01TX1VTRVJfS0VZXTsKCSRwYWdlX3N0cmluZyA9ICIiOwoJJGZyb20gPSAoJHBhZ2UgKiAkbGltaXQpIC0gJGxpbWl0OwoJJG51bW9mcGFnZXMgPSAoaW50KSgkdG90YWxyb3dzIC8gJGxpbWl0KTsKCWlmKCAoJHRvdGFscm93cyAlICRsaW1pdCkgIT0gMCApICsrJG51bW9mcGFnZXM7CglpZiAoJG51bW9mcGFnZXMgPiAxKQoJewoJCWlmKCRwYWdlICE9IDEpCgkJewoJCQkkcGFnZXByZXYgPSAkcGFnZS0xOwoJCQkkcGFnZV9zdHJpbmcgLj0gJzxhIGhyZWY9IicuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uJHVybGV4dC4nJmFtcDtwYWdlPTEiPicubGFuZygnZmlyc3QnKS4nPC9hPiZuYnNwOyc7CgkJCSRwYWdlX3N0cmluZyAuPSAiPGEgaHJlZj1cIiIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uJHVybGV4dC4iJmFtcDtwYWdlPSRwYWdlcHJldlwiPiIubGFuZygncHJldmlvdXMnKS4iPC9hPiZuYnNwOyI7CgkJfQoJCWVsc2UKCQl7CgkJCSRwYWdlX3N0cmluZyAuPSBsYW5nKCdmaXJzdCcpLiIgIjsKCQkJJHBhZ2Vfc3RyaW5nIC49IGxhbmcoJ3ByZXZpb3VzJykuIiAiOwoJCX0KCgkJJHBhZ2Vfc3RyaW5nIC49ICcmbmJzcDsnLmxhbmcoJ3BhZ2UnKS4iJm5ic3A7JHBhZ2UmbmJzcDsiLmxhbmcoJ29mJykuIiZuYnNwOyRudW1vZnBhZ2VzJm5ic3A7IjsKCgkJaWYoKCR0b3RhbHJvd3MgLSAoJGxpbWl0ICogJHBhZ2UpKSA+IDApCgkJewoJCQkkcGFnZW5leHQgPSAkcGFnZSsxOwoJCQkkcGFnZV9zdHJpbmcgLj0gIjxhIGhyZWY9XCIiLiRfU0VSVkVSWydQSFBfU0VMRiddLiR1cmxleHQuIiZhbXA7cGFnZT0kcGFnZW5leHRcIj4iLmxhbmcoJ25leHQnKS4iPC9hPiZuYnNwOyI7CgkJCSRwYWdlX3N0cmluZyAuPSAnPGEgaHJlZj0iJy4kX1NFUlZFUlsnUEhQX1NFTEYnXS4kdXJsZXh0LicmYW1wO3BhZ2U9Jy4kbnVtb2ZwYWdlcy4nIj4nLmxhbmcoJ2xhc3QnKS4nPC9hPic7CgkJfQoJCWVsc2UKCQl7CgkJCSRwYWdlX3N0cmluZyAuPSBsYW5nKCduZXh0JykuIiAiOwoJCQkkcGFnZV9zdHJpbmcgLj0gbGFuZygnbGFzdCcpLiIgIjsKCQl9Cgl9CglyZXR1cm4gJHBhZ2Vfc3RyaW5nOwogfQp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.retrieve_ops.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0NNUyAtIENNUyBNYWRlIFNpbXBsZQojKGMpMjAwNCBieSBUZWQgS3VscCAod2lzaHlAdXNlcnMuc2YubmV0KQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKCgpjbGFzcyByZXRyaWV2ZV9vcHMKewogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCgpwdWJsaWMgZnVuY3Rpb24gcmV0cmlldmVfcGFydGllc19zcGlkKCAkbGljZW5jZSApCiAgewoJZ2xvYmFsICRnQ21zOwoJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCS8vZWNobyAiY29vbCAhIjsKCSRwaW5nID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdQaW5nJyk7CgkvL3JlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmNhbGN1bHMucGhwJyk7CgkvL2VjaG8gImdsb3AyIjsKCSRzYWlzb25fY291cmFudGUgPSAkcGluZy0+R2V0UHJlZmVyZW5jZSgnc2Fpc29uX2VuX2NvdXJzJyk7Cgkkbm93ID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CgkkYXVqb3VyZGh1aSA9IGRhdGUoJ1ktbS1kJyk7CgkkcXVlcnkgPSAiU0VMRUNUIENPTkNBVF9XUygnICcsIG5vbSwgcHJlbm9tKSBBUyBwbGF5ZXIgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBXSEVSRSBsaWNlbmNlID0gPyI7CgkkZGJyZXRvdXIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGljZW5jZSkpOwoJaWYgKCRkYnJldG91ciAmJiAkZGJyZXRvdXItPlJlY29yZENvdW50KCkgPiAwKQoJewoJICAgIHdoaWxlICgkcm93PSAkZGJyZXRvdXItPkZldGNoUm93KCkpCgkJewoJCSRwbGF5ZXIgPSAkcm93WydwbGF5ZXInXTsKCQkkc2VydmljZSA9IG5ldyBTZXJ2aWNlbigpOwoJCSRwYWdlID0gInhtbF9wYXJ0aWUiOwoJCSR2YXIgPSAibGljZW5jZT0iLiRsaWNlbmNlOwoJCSRsaWVuID0gJHNlcnZpY2UtPkdldExpbmsoJHBhZ2UsICR2YXIpOwoJCSR4bWwgICA9IHNpbXBsZXhtbF9sb2FkX3N0cmluZygkbGllbiwgJ1NpbXBsZVhNTEVsZW1lbnQnLCBMSUJYTUxfTk9DREFUQSk7CgkJLy92YXJfZHVtcCgkeG1sKTsKCQkKCQlpZigkeG1sID09PSBGQUxTRSkKCQl7CgkJCS8vZWNobyAibGUgdGFibGVhdSByZW52b2l0IHVuZSBlcnJldXIiOwoJCQkkYXJyYXkgPSAwOwoJCQkkbGlnbmVzID0gMDsKCQl9CgkJZWxzZQoJCXsKCQkJJGFycmF5ID0ganNvbl9kZWNvZGUoanNvbl9lbmNvZGUoKGFycmF5KSR4bWwpLCBUUlVFKTsKCQkJJGxpZ25lcyA9IGNvdW50KCRhcnJheVsncmVzdWx0YXQnXSk7CgkJLy8JZWNobyAibGUgbmIgZGUgbGlnbmVzIGVzdCAgOiIuJGxpZ25lczsKCQl9CgoJCS8vb24gY29tcHRlIGxlIG5iIGRlIHLDqXN1bHRhdHMgZHUgc3BpZCBwcsOpc2VudCBkcyBsYSBiZGQgcG91ciBsZSBqb3VldXIKCQkkc3BpZCA9IHBpbmdfYWRtaW5fb3BzOjpjb21wdGVfc3BpZCgkbGljZW5jZSk7CgkJCgkJCWlmKCFpc19hcnJheSgkYXJyYXkpKQoJCQl7CgoJCQkJJG1lc3NhZ2UgPSAiU2VydmljZSBjb3Vww6kgcG91ciAiLiRwbGF5ZXI7IAoJCQkJJHN0YXR1cyA9ICdFY2hlYyc7CgkJCQkkZGVzaWduYXRpb24gPSAkbWVzc2FnZTsKCQkJCSRhY3Rpb24gPSAibWFzc19hY3Rpb24iOwoJCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCAkZGVzaWduYXRpb24sJGFjdGlvbik7CgkJCQkKCQkJfQoJCQllbHNlaWYoJGxpZ25lcyA8PSAkc3BpZCkKCQkJewoJCQkJJG1lc3NhZ2UgPSAiUsOpc3VsdGF0cyBTUElEIMOgIGpvdXIgcG91ciAiLiRwbGF5ZXIuIiA6ICIuJHNwaWQuIiBlbiBiYXNlIGRlIGRvbm7DqWVzICIuJGxpZ25lcy4iIGVuIGxpZ25lLiI7IAoJCQkJJHN0YXR1cyA9ICdFY2hlYyc7CgkJCQkkZGVzaWduYXRpb24gPSAkbWVzc2FnZTsKCQkJCSRhY3Rpb24gPSAibWFzc19hY3Rpb24iOwoJCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCAkZGVzaWduYXRpb24sJGFjdGlvbik7CgkJCQkKCQkJCWlmKCRsaWduZXMgPT0gJHNwaWQpCgkJCQl7CgkJCQkJJHF1ZXJ5NCA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgU0VUIG1hal9zcGlkID0gPyBXSEVSRSBsaWNlbmNlID0gPyBBTkQgc2Fpc29uID0gPyI7CgkJCQkJJGRicmVzdWx0NCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnk0LGFycmF5KCRhdWpvdXJkaHVpLCRsaWNlbmNlLCRzYWlzb25fY291cmFudGUpKTsKCQkJCX0KCQkJCQoJCQkJCgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkaSA9IDA7CgkJCQkkY29tcHRldXIgPSAwOwoJCQkJJGEgPSAwOy8vY2UgY29tcHRldXIgc2VydCBhdSBwYXJ0aWVzIG5vbiByw6ljdXDDqXLDqWVzIHBhciBzaXQgbWVucyB2aWRlCgkJCQkvL29uIHZhIGNvbXB0ZXIgbGVzIGVycmV1cnMKCQkJCSRlcnJvciA9IDA7Ly9sZSBjb21wdGV1ciBkJ2VycmV1cnMKCQkJCSRxdWVyeTEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCBXSEVSRSBzYWlzb24gPSA/IEFORCBsaWNlbmNlID0gPyI7CgkJCQkkZGJyZXN1bHQxID0gJGRiLT5FeGVjdXRlKCRxdWVyeTEsIGFycmF5KCRzYWlzb25fY291cmFudGUsICRsaWNlbmNlKSk7CgkJCQlmb3JlYWNoKCRyZXN1bHQgYXMgJGNsZSA9PiR0YWIpCgkJCQl7CgoJCQkJCSRjb21wdGV1cisrOwoKCQkJCQkkZGF0ZWV2ZW50ID0gJHRhYlsnZGF0ZSddOwoJCQkJCSRjaGd0ID0gZXhwbG9kZSgiLyIsJGRhdGVldmVudCk7CgkJCQkJJGRhdGVfZXZlbnQgPSAkY2hndFsyXS4iLSIuJGNoZ3RbMV0uIi0iLiRjaGd0WzBdOwoJCQkJCSRhbm5lZSA9ICcyMCcuJGNoZ3RbMl07CgkJCQkJJGRhdGVfbXlzcWwgPSAkYW5uZWUuJy0nLiRjaGd0WzFdLictJy4kY2hndFswXTsKCQkJCQkKCQkJCQkJaWYgKHN1YnN0cigkY2hndFsxXSwgMCwxKT09MCkKCQkJCQkJewoJCQkJCQkJJG1vaXNfZXZlbnQgPSBzdWJzdHIoJGNoZ3RbMV0sIDEsMSk7CgkJCQkJCQkvL2VjaG8gImxhIGRhdGUgZXN0Ii4kZGF0ZV9ldmVudDsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSRtb2lzX2V2ZW50ID0gJGNoZ3RbMV07CgkJCQkJCX0KCQkJCQkvL29uIHZhIHbDqXJpZmllciBzaSBvbiBhIGxhIHNpdHVhdGlvbiBtZW5zdWVsbGUgZHUgam91ZXVyIGR1IGNsdWIgw6Agam91ciBwb3VyIGxlIG1vaXMgZW4gcXVlc3Rpb24KCQkJCQkkcmV0b3VyX3NpdF9tZW5zID0gcGluZ19hZG1pbl9vcHM6OmdldF9zaXRfbWVucygkbGljZW5jZSwkbW9pc19ldmVudCwkc2Fpc29uX2NvdXJhbnRlKTsKCQkJCQkKCQkJCQlpZigkcmV0b3VyX3NpdF9tZW5zPT0wKQoJCQkJCXsKCQkJCQkJJGRlc2lnbmF0aW9uLj0iU2l0dWF0aW9uIGR1IG1vaXMgIi4kbW9pc19ldmVudC4iIG1hbnF1YW50ZSBwb3VyICIuJHBsYXllcjsKCQkJCQkJJGErKzsKCQkJCQkJJGVycm9yKys7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCQoJCQkJCQkkbm9tID0gJHRhYlsnbm9tJ107CgkJCQkJCS8vb24gYWRhcHRlIHNvbiBub20gZCdhYm9yZAoJCQkJCQkkbm9tX2dsb2JhbCA9IHBpbmdfYWRtaW5fb3BzOjpnZXRfbmFtZSgkbm9tKTsvL3VuZSBmb25jdGlvbiBxdWkgcGVybWV0IGQnZXh0cmFpcmUgbGUgbm9tIGV0IGxlIHByw6lub20KCQkJCQkJJG5vbV9yZWVsMSA9ICRub21fZ2xvYmFsWzBdOwoJCQkJCQkkbm9tX3JlZWwgPSBhZGRzbGFzaGVzKCRub21fZ2xvYmFsWzBdKTsvL2xlIG5vbQkJCQkJCgkJCQkJCSRwcmVub21fcmVlbCA9ICRub21fZ2xvYmFsWzFdOy8vbGUgcHLDqW5vbQoJCQkJCQkkYW5uZWVfY291cmFudGUgPSBkYXRlKCdZJyk7CgkJCQkJCgkJCQkJCSRjbGFzc2VtZW50ID0gJHRhYlsnY2xhc3NlbWVudCddOy8vY2xhc3NlbWVudCBmb3VybmkgcGFyIGxlIHNwaWQKCQkJCQkJJGNsYSA9IHN1YnN0cigkY2xhc3NlbWVudCwgMCwxKTsKCQkJCQkJCS8vQXZlYyBsZSBub20gb24gdmEgYWxsZXIgY2hlcmNoZXIgbGEgc2l0dWF0aW9uIG1lbnN1ZWxsZSBkZSBsJ2FkdmVyc2FpcmUKCQkJCQkJCS8vb24gcG91cnJhIGxhIHN0b2NrZXIgcG91ciBxdSdlbGxlIHJlLXNlcnZlIGV0IGwndXRpbGlzZXIgcG91ciBhZmZpbmVyIGxlIGNhbGN1bCBkZXMgcG9pbnRzCgkJCQkJCQkvL2QnYWJvcmQgb24gdmEgY2hlcmNoZXIgZHMgbGEgYmRkIHNpIGwnYWR2ZXJzYWlyZSB5IGVzdCBkw6lqw6AgcG91ciBsZSBtb2lzIGV0IGxhIHNhaXNvbiBlbiBxdWVzdGlvbgoJCQkJCQkJJHF1ZXJ5NCA9ICJTRUxFQ1QgcG9pbnRzIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2FkdmVyc2FpcmVzIFdIRVJFIG5vbSA9ID8gQU5EIHByZW5vbSA9ID8gQU5EIG1vaXMgPSA/IEFORCBhbm5lZSA9ID8iOwoJCQkJCQkJLy9lY2hvICRxdWVyeTQuJzxiciAvPic7CgkJCQkJCQkkZGJyZXN1bHQ0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTQsIGFycmF5KCRub21fcmVlbDEsICRwcmVub21fcmVlbCwkbW9pc19ldmVudCwkYW5uZWVfY291cmFudGUpKTsKCgkJCQkJCQkJaWYoJGRicmVzdWx0NCAmJiAkZGJyZXN1bHQ0LT5SZWNvcmRDb3VudCgpPjAgJiYgJGRicmVzdWx0NC0+UmVjb3JkQ291bnQoKSA8MikvL29rIG9uIGEgdW4gZW5yZWdpc3RyZW1lbnQgcXVpIGNvcnJlc3BvbmQKCQkJCQkJCQl7CgkJCQkJCQkJCSRyb3c0ID0gJGRicmVzdWx0NC0+RmV0Y2hSb3coKTsKCQkJCQkJCQkJJG5ld2NsYXNzID0gJHJvdzRbJ3BvaW50cyddOwoJCQkJCQkJCX0KCQkJCQkJCQkvL2RldXhpw6htZSBjYXMgOiAKCQkJCQkJCQkvL29uIG4nYSBwYXMgZCdlbnJlZ2lzdHJlbWVudCBldCBvbiBlc3QgZGFucyBsZSBtb2lzIGNvdXJhbnQgZXQgbCdhbm7DqWUgY291cmFudGUgOiBvbiB2YSBjaGVyY2hlciBsZXMgcG9pbnRzIGF2ZWMgbGEgY2xhc3NlIHBvdXIgZW5zdWl0ZSBsJ2luc8OpcmVyIGRzIGxhIGJkZAoJCQkJCQkJCWVsc2VpZigkZGJyZXN1bHQ0LT5SZWNvcmRDb3VudCgpPT0wICYmICRtb2lzX2V2ZW50ID09IGRhdGUoJ24nKSAmJiAkYW5uZWUgPT0gZGF0ZSgnWScpKQoJCQkJCQkJCXsKCQkJCQkJCQkJLy9vbiB2YSBjaGVyY2hlciBsYSBzaXQgbWVucyBkdSBwb25naXN0ZQoJCQkJCQkJCQoKCQkJCQkJCQkJJHNlcnZpY2UgPSBuZXcgU2VydmljZSgpOwoJCQkJCQkJCQkkcmVzdWx0YXQgPSAkc2VydmljZS0+Z2V0Sm91ZXVyc0J5TmFtZSgiJG5vbV9yZWVsIiwgJHByZW5vbSA9IiRwcmVub21fcmVlbCIpOwoJCQkJCQkJCQkvL3Zhcl9kdW1wKCRyZXN1bHRhdCk7CgkJCQkJCQkJCWlmKGlzX2FycmF5KCRyZXN1bHRhdCkgJiYgY291bnQoJHJlc3VsdGF0KT4wICYmIGNvdW50KCRyZXN1bHRhdCk8MikKCQkJCQkJCQkJey8vb24gYSBiaWVuIHVuIHRhYmxlYXUgYXZlYyBhdSBtb2lucyB1biDDqWzDqW1lbnQgOiBjJ2VzdCBvayAhCgoJCQkJCQkJCQkJLy9vbiBhIHVuIHLDqXN1bHRhdCA/CgkJCQkJCQkJCQkvL2VjaG8gIkdsb3AiOwoJCQkJCQkJCQkJLy8kY29tcHRldXIrKzsKCQkJCQkJCQkJCSRsaWNlbiA9ICRyZXN1bHRhdFswXVsnbGljZW5jZSddOy8vb24gYSBiaWVuIHVuIG51bcOpcm8gZGUgbGljZW5jZSwgb24gcGV1dCBkb25jIHLDqWN1cMOpcmVyIGxhIHNpdHVhdGlvbiBtZW5zdWVsbGUgZW4gY291cnMKCQkJCQkJCQkJCS8vZWNobyAkbGljZW4uJzxiciAvPic7CgkJCQkJCQkJCQkkc2VydmljZSA9IG5ldyBTZXJ2aWNlKCk7CgkJCQkJCQkJCQkkcmVzdWx0YXQyID0gJHNlcnZpY2UtPmdldEpvdWV1cigiJGxpY2VuIik7CgoJCQkJCQkJCQkJaWYoaXNfYXJyYXkoJHJlc3VsdGF0MikgJiYgY291bnQoJHJlc3VsdGF0Mik+MCkKCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkkbGljZW5jZTIgPSAkcmVzdWx0YXQyWydsaWNlbmNlJ107CgkJCQkJCQkJCQkJJG5vbSA9ICRyZXN1bHRhdDJbJ25vbSddOwoJCQkJCQkJCQkJCS8vZWNobyAnYXV0cmUgbm9tIDogJy4kbm9tIC4nICcuJHByZW5vbTsKCQkJCQkJCQkJCQkkcHJlbm9tID0gJHJlc3VsdGF0MlsncHJlbm9tJ107CgkJCQkJCQkJCQkJJG5hdGlvID0gJHJlc3VsdGF0MlsnbmF0aW8nXTsKCQkJCQkJCQkJCQkkY2xnbG9iID0gJHJlc3VsdGF0MlsnY2xnbG9iJ107CgkJCQkJCQkJCQkJJHBvaW50ID0gJHJlc3VsdGF0MlsncG9pbnQnXTsKCQkJCQkJCQkJCQkkYWNsZ2xvYiA9ICRyZXN1bHRhdDJbJ2FjbGdsb2InXTsKCQkJCQkJCQkJCQkkYXBvaW50ID0gJHJlc3VsdGF0MlsnYXBvaW50J107CgkJCQkJCQkJCQkJJGNsbmF0ID0gJHJlc3VsdGF0MlsnY2xuYXQnXTsKCQkJCQkJCQkJCQkkY2F0ZWcgPSAkcmVzdWx0YXQyWydjYXRlZyddOwoJCQkJCQkJCQkJCSRyYW5ncmVnID0gJHJlc3VsdGF0MlsncmFuZ3JlZyddOwoJCQkJCQkJCQkJCSRyYW5nZGVwID0gJHJlc3VsdGF0MlsncmFuZ2RlcCddOwoJCQkJCQkJCQkJCSR2YWxjbGEgPSAkcmVzdWx0YXQyWyd2YWxjbGEnXTsKCQkJCQkJCQkJCQkkY2xwcm8gPSAkcmVzdWx0YXQyWydjbHBybyddOwoJCQkJCQkJCQkJCSR2YWxpbml0ID0gJHJlc3VsdGF0MlsndmFsaW5pdCddOwoJCQkJCQkJCQkJCSRwcm9nbW9pcyA9ICRyZXN1bHRhdDJbJ3Byb2dtb2lzJ107CgkJCQkJCQkJCQkJJHByb2dhbm4gPSAkcmVzdWx0YXQyWydwcm9nYW5uJ107CgkJCQkJCQkJCQkJJGFubmVlX2NvdXJhbnRlID0gZGF0ZSgnWScpOwoJCQkJCQkJCQkJCS8vb24gaW5zw6hyZSBsZSB0b3V0IGRhbnMgbGEgYmRkCgkJCQkJCQkJCQkJJHF1ZXJ5NSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfYWR2ZXJzYWlyZXMgKGlkLGRhdGVjcmVhdGVkLCBkYXRlbWFqLCBtb2lzLCBhbm5lZSwgcGhhc2UsIGxpY2VuY2UsIG5vbSwgcHJlbm9tLCBwb2ludHMsIGNsbmF0LCByYW5ncmVnLHJhbmdkZXAsIHByb2dtb2lzKSBWQUxVRVMgKCcnLCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSI7CgkJCQkJCQkJCQkJLy9lY2hvICRxdWVyeTU7CgkJCQkJCQkJCQkJJGRicmVzdWx0YXQ1ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTUsYXJyYXkoJG5vdywkbm93LCRtb2lzX2V2ZW50LCAkYW5uZWVfY291cmFudGUsICRwaGFzZSwgJGxpY2VuY2UyLCAkbm9tLCAkcHJlbm9tLCAkcG9pbnQsICRjbG5hdCwgJHJhbmdyZWcsICRyYW5nZGVwLCAkcHJvZ21vaXMpKTsKCQkJCQkJCQkJCQkJLy9PbiB2w6lyaWZpZSBxdWUgbCdpbnNlcnRpb24gc2UgcGFzc2UgYmllbgoJCQkJCQkJCQkJCSRuZXdjbGFzcyA9ICRwb2ludDsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJCWVsc2UKCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQlpZigkY2xhID09ICdOJyl7CgkJCQkJCQkJCQkJCSRuZXdjbGFzc2VtZW50ID0gZXhwbG9kZSgnLScsICRjbGFzc2VtZW50KTsKCQkJCQkJCQkJCQkJJG5ld2NsYXNzID0gJG5ld2NsYXNzZW1lbnRbMV07CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCWVsc2UgCgkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkkbmV3Y2xhc3MgPSAkY2xhc3NlbWVudDsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQl9CgoKCQkJCQkJCQkJfQoJCQkJCQkJCQllbHNlCgkJCQkJCQkJCXsKCQkJCQkJCQkJCWlmKGNvdW50KCRyZXN1bHRhdCk+MSkvL2hvbW9ueW1pZSwgZXRjLi4uCgkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJJGRlc2lnbmF0aW9uLj0iSG9tb255bWllIHBvdXIgIi4kcGxheWVyOwoJCQkJCQkJCQkJCSRlcnJvcisrOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJLy9lY2hvICJQYXMgR2xvcCI7CgkJCQkJCQkJCQlpZigkY2xhID09ICdOJyl7CgkJCQkJCQkJCQkkbmV3Y2xhc3NlbWVudCA9IGV4cGxvZGUoJy0nLCAkY2xhc3NlbWVudCk7CgkJCQkJCQkJCQkkbmV3Y2xhc3MgPSAkbmV3Y2xhc3NlbWVudFsxXTsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJCWVsc2UgCgkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJJG5ld2NsYXNzID0gJGNsYXNzZW1lbnQ7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCX0vL2ZpbiBkdSBpZiBpc19hcnJheSgkcmVzdWx0YXQpCgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCS8vdHJvaXNpw6htZSBjYXMgOiAKCQkJCQkJCQkJLy9vbiBuJ2EgcGFzIGxlcyBwb2ludHMgZXQgb24gbidlc3QgcGFzIGRhbnMgbGUgbW9pcyBjb3VyYW50LCBvbiBuJ2luc8OocmUgcGFzIGV0IG9uIHV0aWxpc2UgbGUgY2xhc3NlbWVudCBmb3VybmkKCQkJCQkJCQkJaWYoJGNsYSA9PSAnTicpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRuZXdjbGFzc2VtZW50ID0gZXhwbG9kZSgnLScsICRjbGFzc2VtZW50KTsKCQkJCQkJCQkJCSRuZXdjbGFzcyA9ICRuZXdjbGFzc2VtZW50WzFdOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWVsc2UgCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRuZXdjbGFzcyA9ICRjbGFzc2VtZW50OwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkvL29uIHZhIGNhbGN1bGVyIGxhIGRpZmbDqXJlbmNlIGVudHJlIGxlIGNsYXNzZW1lbnQgZGUgbCdhZHZlcnNhaXJlIGV0IGxlIGNsYXNzZW1lbnQgZHUgam91ZXVyIGR1IGNsdWIKCQkJCQkJJHF1ZXJ5ID0gIlNFTEVDVCBwb2ludHMgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfc2l0X21lbnMgV0hFUkUgbGljZW5jZSA9ID8gQU5EIG1vaXMgPSA/IEFORCBzYWlzb24gPSA/IjsKCQkJCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGxpY2VuY2UsJG1vaXNfZXZlbnQsJHNhaXNvbl9jb3VyYW50ZSkpOwoJCQkJCQkvL3NpIGxhIHNpdHVhdGlvbiBtZW5zdWVsbGUgZHUgam91ZXVyIGR1IGNsdWIgbidleGlzdGUgcGFzID8KCQkJCQkJLy9hbG9ycyBvbiBuJ2VucmVnaXN0cmUgcGFzIGxlIHLDqXN1bHRhdCBldCBvbiBsZSBzaWduYWxlCgkJCQkJCQoJCQkJCQkJaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPT0gMCkKCQkJCQkJCXsKCQkJCQkJCQkvLyRkZXNpZ25hdGlvbi49IkVjYXJ0IG5vbiBjYWxjdWzDqSI7CgkJCQkJCQkJJGVjYXJ0ID0gMDsKCQkJCQkJCQkkZXJyb3IrKzsKCQkJCQkJCX0KCQkJCQkJCgoJCQkJCQkkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwoJCQkJCQkkcG9pbnRzID0gJHJvd1sncG9pbnRzJ107CgkJCQkJCSRlY2FydF9yZWVsID0gJHBvaW50cyAtICRuZXdjbGFzczsKCQkJCQkKCQkJCQkJLy9vbiBjYWxjdWxlIGwnw6ljYXJ0IHNlbG9uIGxhIGdyaWxsZSBkZSBwb2ludHMgZGUgbGEgRkZUVAoJCQkJCQkkdHlwZV9lY2FydCA9IHBpbmdfYWRtaW5fb3BzOjpDYWxjdWxFY2FydCgkZWNhcnRfcmVlbCk7CgkJCQkJCgkJCQkJCSRlcHJldXZlID0gJHRhYlsnZXByZXV2ZSddOwoJCQkJCS8vIGxlIGpvdWV1ciBwYXJ0aWNpcGUgw6AgY2V0dGUgY29tcMOpdGl0aW9uID8gKHBvdXIgbGVzIGVwcmV1dmVzIGluZGl2aWR1ZWxsZXMgdW5pcXVlbWVudCkKCQkJCQkJJHF1ZXJ5X2VwcmV1dmUgPSAiU0VMRUNUIGluZGl2cywgY29kZV9jb21wZXQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMgQVMgdGMgV0hFUkUgdGMubmFtZSA9ID8iOwoJCQkJCQkkZGJlcHJldXZlID0gJGRiLT5FeGVjdXRlKCRxdWVyeV9lcHJldXZlLGFycmF5KCRlcHJldXZlKSk7CgkJCQkKCQkJCQkJaWYoJGRiZXByZXV2ZSAmJiAkZGJlcHJldXZlLT5SZWNvcmRDb3VudCgpPjApCgkJCQkJCXsKCQkJCQkJCSRyb3cgPSAkZGJlcHJldXZlLT5GZXRjaFJvdygpOwoJCQkJCQkJJGluZGl2cyA9ICRyb3dbJ2luZGl2cyddOwoJCQkJCQkJJGluZGl2czMgPSAkcm93WydpbmRpdnMnXTsKCQkJCQkJCSR0eXBlX2NvbXBldF90ZW1wID0gJHJvd1snY29kZV9jb21wZXQnXTsKCQkJCQkKCQkJCQkJCWlmKCRpbmRpdnMgPT0gMSkgLy9vbiBlc3QgYmllbiBkYW5zIHVuZSBjb21wZXQgaW5kaXZpZHVlbGxlcwoJCQkJCQkJewoJCQkJCQkJCS8vb24gZXN0IGJpZW4gZGFucyBsZSBjYWRyZSBkJ3VuZSBjb21wZXQgaW5kaXZpZHVlbGxlCgkJCQkJCQkJJHF1ZXJ5X3BhcnRpY2lwZSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWNpcGUgV0hFUkUgbGljZW5jZSA9ID8gQU5EIHR5cGVfY29tcGV0ID0gPyBBTkQgZGF0ZV9kZWJ1dCA9ID8iOwoJCQkJCQkJCSRkYnBhcnRpY2lwZSA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlfcGFydGljaXBlLGFycmF5KCRsaWNlbmNlLCR0eXBlX2NvbXBldF90ZW1wLCRkYXRlX215c3FsKSk7CgkJCQkJCQoJCQkJCQkJCWlmKCRkYnBhcnRpY2lwZS0+UmVjb3JkQ291bnQoKT09MCkvL2xlIGpvdWV1ciBuJ2VzdCBwYXMgaW5zY3JpdCwgb24gbGUgZmFpdAoJCQkJCQkJCXsKCQkJCQkJCQkJJHF1ZXJ5X3BhcnRpY2lwZTIgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpY2lwZSAobGljZW5jZSx0eXBlX2NvbXBldCxkYXRlX2RlYnV0KSBWQUxVRVMgKD8sID8sID8pIjsKCQkJCQkJCQkJJGRicGFydGljaXBlMiA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlfcGFydGljaXBlMiwgYXJyYXkoJGxpY2VuY2UsJHR5cGVfY29tcGV0X3RlbXAsJGRhdGVfbXlzcWwpKTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJZWxzZSAvL2xhIGNvbXBldCBuJ2V4aXN0ZSBwYXMgLCBvbiBsJ2Fqb3V0ZSBhdSB0eXBlIGRlIGNvbXDDqXRpdG9uCgkJCQkJCXsKCQkJCQkJCWlmKCRlcHJldXZlICE9ICdDcml0w6lyaXVtIGbDqWTDqXJhbCcpCgkJCQkJCQl7CgkJCQkJCQkJLy9vbiBjcsOpw6kgdW4gY29kZSBjb21wZXQgdGVtcG9yYWlyZQoJCQkJCQkJCSR0eXBlX2NvbXBldF90ZW1wID0gcGluZ19hZG1pbl9vcHM6OnJhbmRvbSgzKTsKCQkJCQkJCQkvLyRjb2VmZlsxXSA9ICR0eXBlX2NvbXBldF90bXA7CgkJCQkJCQkJJGNvZWZmX3Byb3Zpc29pcmUgPSAnMC4wMCc7CgkJCQkJCQkJLy9vbiBmYWl0IHFkIG3Dqm1lIGwnaW5jbHVzaW9uIGQndW5lIG5vdXZlbGxlIGNvbXBldAoJCQkJCQkJCSRpbmRpdnMyID0gMTsKCQkJCQkJCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIChpZCwgbmFtZSxjb2RlX2NvbXBldCxjb2VmZmljaWVudCxpbmRpdnMpIFZBTFVFUyAoJycsPywgPywgPywgPykiOwoJCQkJCQkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRlcHJldXZlLCR0eXBlX2NvbXBldF90ZW1wLCRjb2VmZl9wcm92aXNvaXJlLCAkaW5kaXZzMikpOwoJCQkJCQkJCS8vZWNobyAiY29lZmZpY2llbnQgaW50cm91dmFibGUgISI7CgkJCQkJCQl9CgkJCQkKCQkJCQkJfQoJCQkJCgkJCQkJCS8vIGRlIHF1ZWxsZSBjb21ww6l0aXRpb24gcydhZ2l0LWlsID8gCgkJCQkJCS8vT24gYSBsYSBkYXRlIGV0IGxlIHR5cGUgZCfDqXByZXV2ZQoJCQkJCQkvL29uIHBldXQgZG9uYyBlbiBkw6lkdWlyZSBsZSB0b3VyIHZpYSBsZSBjYWxlbmRyaWVyCgkJCQkJCS8vZXQgbGUgY29lZmZpY2llbnQgcG91ciBjYWxjdWxlciBsZXMgcG9pbnRzIHZpYSBsYSB0YWJsZSB0eXBlX2NvbXBldGl0b25zCgkJCQkJCS8vMSAtIG9uIHLDqWN1cMOocmUgbGUgY29lZmZpY2llbnQgZGUgbGEgY29tcMOpdGl0aW9uCgkJCQkJCSRjb2VmZiA9IHBpbmdfYWRtaW5fb3BzOjpjb2VmZigkZXByZXV2ZSwkbGljZW5jZSk7Ly8gbGEgbGljZW5jZSBlbiBjYXMgZGUgY3JpdMOpcml1bSBmw6lkw6lyYWwoMiBjb2VmZnMgZGlzdGluY3RzKQoJCQkJCQkvL3Zhcl9kdW1wKCRjb2VmZik7CgkJCQkJCSRjb2VmZl9yZWVsX3RtcCA9ICRjb2VmZlswXTsKCQkJCQkJLy9lY2hvICdsZSBjb2VmZiBlc3QgOiAnLiRjb2VmZl9yZWVsX3RtcDsKCQkJCQkJLyokZXJyb3JfY29lZmYgPSAnJzsKCQkJCQkJCWlmKGlzc2V0KCRjb2VmZlsxXSkpCgkJCQkJCQl7CgkJCQkJCQkJJGNvZGVfY29tcGV0X3RtcCA9ICRjb2VmZlsxXTsKCQkJCQkJCX0KCQkJCQkJCWlmKCRjb2VmZl9yZWVsX3RtcCA9PScwLjAwJyB8fCAhaXNzZXQoJGNvZWZmX3JlZWxfdG1wKSkKCQkJCQkJCXsKCQkJCQkJCQkkZXJyb3JfY29lZmYgPSAxOwoJCQkJCQkJfQoJCQkJCQkqLwoJCQkJCQkvLzIgLSBvbiByw6ljdXDDqXJlIGxlIHRvdXIgcydpbCBleGlzdGUKCQkJCQkJLy9vbiB2YSBmZG9uYyBjaGVyY2hlciBkYW5zIGxhIHRhYmxlIGNhbGVuZHJpZXIKCQkJCQkJJHF1ZXJ5ID0gIlNFTEVDVCBudW1qb3VybiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jYWxlbmRyaWVyIFdIRVJFIHR5cGVfY29tcGV0ID0gPyBBTkQgKGRhdGVfZGVidXQgPSA/IE9SIGRhdGVfZmluID0gPykiOwoJCQkJCQkkcmVzdWx0YXQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkdHlwZV9jb21wZXRfdGVtcCwgJGRhdGVfbXlzcWwsJGRhdGVfbXlzcWwpKTsKCgkJCQkJCWlmICgkcmVzdWx0YXQgJiYgJHJlc3VsdGF0LT5SZWNvcmRDb3VudCgpPjApewoJCQkJCQkJJHJvdyA9ICRyZXN1bHRhdC0+RmV0Y2hSb3coKTsKCQkJCQkJCSRudW1qb3VybiA9ICRyb3dbJ251bWpvdXJuJ107CgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQkkbnVtam91cm4gPSAwOy8vb24gaW5zw6hyZSBkYW5zIGxlIGNhbGVuZHJpZXIgPyBCZW4gb3VpICEJCQkJCQkKCQkJCQkJCS8vbGUgY29kZSBleGlzdGUgZMOpasOgIG91IHBhcyA/CgkJCQkJCQkkdHlwZV9jb21wZXQgPSAkdHlwZV9jb21wZXRfdGVtcDsKCQkJCQkJCS8vb24gb3VibGllIHBhcyBsZSB0YWcgIQoJCQkJCQkJJHRhZyA9IHBpbmdfYWRtaW5fb3BzOjpjcmVhdGVfdGFnKCR0eXBlX2NvbXBldF90ZW1wLCRpbmRpdnMsICRkYXRlX215c3FsLCAkZGF0ZV9teXNxbCk7CgkJCQkJCQkkcXVlcnljYWwgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NhbGVuZHJpZXIgKGlkLHR5cGVfY29tcGV0LGRhdGVfZGVidXQsZGF0ZV9maW4sbnVtam91cm4sdGFnLCBzYWlzb24pIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8pIjsKCQkJCQkJCSRyZXEgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5Y2FsLGFycmF5KCR0eXBlX2NvbXBldF90ZW1wLCRkYXRlX215c3FsLCRkYXRlX215c3FsLCRudW1qb3VybiwkdGFnLCAkc2Fpc29uX2NvdXJhbnRlKSk7CQkJCQkJCQoJCQkJCQl9CgkJCQkKCQkJCQoJCQkJCgkJCQkJCS8vZmluIGR1IHBvaW50IDIKCgkJCQkJCSR2aWN0b2lyZSA9ICR0YWJbJ3ZpY3RvaXJlJ107CgoJCQkJCQkJaWYgKCR2aWN0b2lyZSA9PSdWJykKCQkJCQkJCXsKCQkJCQkJCQkkdmljdG9pcmUgPSAxOwoJCQkJCQkJfQoJCQkJCQkJZWxzZSAKCQkJCQkJCXsKCQkJCQkJCQkkdmljdG9pcmUgPSAwOwoJCQkJCQkJfQoKCQkJCQkJLy9vbiBwZXV0IGTDqXNvcm1haXMgY2FsY3VsZXIgbGVzIHBvaW50cyAKCQkJCQkJJHBvaW50czEgPSBwaW5nX2FkbWluX29wczo6Q2FsY3VsUG9pbnRzSW5kaXZzKCR0eXBlX2VjYXJ0LCAkdmljdG9pcmUpOwoJCQkJCQkkcG9pbnRyZXMgPSAkcG9pbnRzMSokY29lZmZfcmVlbF90bXA7CgkJCQkJCSRmb3JmYWl0ID0gJHRhYlsnZm9yZmFpdCddOwoKCQkJCQoJCQkJCQkkcXVlcnkzID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQgKGlkLCBzYWlzb24sIGRhdGVtYWosIGxpY2VuY2UsIGRhdGVfZXZlbnQsIGVwcmV1dmUsIG5vbSwgbnVtam91cm4sY2xhc3NlbWVudCwgdmljdG9pcmUsZWNhcnQsdHlwZV9lY2FydCwgY29lZmYsIHBvaW50cmVzLCBmb3JmYWl0KSBWQUxVRVMgKCcnLCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSI7CgkJCQkJCSRpKys7CgkJCQkJCS8vZWNobyAkcXVlcnk7CgkJCQkJCSRkYnJlc3VsdGF0MyA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkzLGFycmF5KCRzYWlzb25fY291cmFudGUsJG5vdywgJGxpY2VuY2UsICRkYXRlX2V2ZW50LCAkZXByZXV2ZSwgJG5vbSwgJG51bWpvdXJuLCAkbmV3Y2xhc3MsICR2aWN0b2lyZSwkZWNhcnRfcmVlbCwkdHlwZV9lY2FydCwgJGNvZWZmX3JlZWxfdG1wLCRwb2ludHJlcywgJGZvcmZhaXQpKTsKCgkJCQkJCWlmKCEkZGJyZXN1bHRhdDMpCgkJCQkJCQl7CgkJCQkJCQkJJG1lc3NhZ2UgPSAkZGItPkVycm9yTXNnKCk7IAoJCQkJCQkJCSRzdGF0dXMgPSAnRWNoZWMnOwoJCQkJCQkJCSRkZXNpZ25hdGlvbiA9ICRtZXNzYWdlOwoJCQkJCQkJCSRhY3Rpb24gPSAibWFzc19hY3Rpb24iOwoJCQkJCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywgJGRlc2lnbmF0aW9uLCRhY3Rpb24pOwoJCQkJCQkJfQkJCQkKCgkJCQkJCQkvL29uIG1ldCDDoCBqb3VyIGxhIGRhdGUgZGUgbWFqIGRlcyByw6lzdWx0YXRzIFNQSUQKCQkJCQkKCQkJCQkKCQkJCQl9Ly9maW4gZHUgaWYgc2kgbGEgc2l0IG1lbnMgZHUgam91ZXVyIGR1IGNsdWIgZXN0IGTDu21lbnQgcmVuc2VpZ27DqWUKCQkJCQkvL29uIGTDqXRydWl0IGxlIG5iIGQnZXJyZXVyCgkJCQkJdW5zZXQoJGVycm9yKTsKCQkJCX0vL2ZpbiBkdSBmb3JlYWNoCgkJCQkKCQkJCSRjb21wdGFnZSA9ICRpOwoJCQkJJHF1ZXJ5NCA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgU0VUIG1hal9zcGlkID0gPywgc3BpZCA9ID8sc3BpZF90b3RhbCA9ID8gV0hFUkUgbGljZW5jZSA9ID8gQU5EIHNhaXNvbiA9ID8iOwoJCQkJJGRicmVzdWx0NCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnk0LGFycmF5KCRhdWpvdXJkaHVpLCRjb21wdGFnZSwkY29tcHRldXIsJGxpY2VuY2UsJHNhaXNvbl9jb3VyYW50ZSkpOwoJCQkJCgkJCQkkc3RhdHVzID0gJ1BhcnRpZXMgU1BJRCc7CgkJCQkkZGVzaWduYXRpb24gLj0gJGNvbXB0YWdlLiIgcGFydGllcyBTcGlkIHN1ciAiLiRjb21wdGV1ci4iICBkZSAiLiRwbGF5ZXI7CgkJCQlpZigkYSA+MCkKCQkJCXsKCQkJCQkkZGVzaWduYXRpb24uPSAiICIuJGEuIiBwYXJ0aWVzIFNwaWQgbm9uIHLDqWN1cMOpcsOpZXMgKHNpdHVhdGlvbiBtZW5zdWVsbGUgbWFucXVhbnRlKSI7CgkJCQl9CgkJCQkkYWN0aW9uID0gIm1hc3NfYWN0aW9uIjsKCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywgJGRlc2lnbmF0aW9uLCRhY3Rpb24pOwoKCQkJfS8vZmluIGR1IGlmICFpc19hcnJheQoJCX0vL2ZpbiBkdSB3aGlsZQoJfS8vZmluIGR1IGlmIGRicmV0b3VyID4wCgoKCgoKCgoKCiAgfS8vZmluIGRlIGxhIGZvbmN0aW9uCiMjCiMjCiMjCiMjCiMgICBSZXRyaWV2ZSBwYXJ0aWVzIEZGVFQKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmV0cmlldmVfcGFydGllc19mZnR0KCAkbGljZW5jZSApCiAgewoJZ2xvYmFsICRnQ21zOwoJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCSRwaW5nID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdQaW5nJyk7CgkvL3JlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmNhbGN1bHMucGhwJyk7Cgkkc2Fpc29uX2NvdXJhbnRlID0gJHBpbmctPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwoJJG5vdyA9IHRyaW0oJGRiLT5EQlRpbWVTdGFtcCh0aW1lKCkpLCAiJyIpOwoJJGF1am91cmRodWkgPSBkYXRlKCdZLW0tZCcpOwoJJGRlc2lnbmF0aW9uID0gIiI7CgkkYW5uZWVfY291cmFudGUgPSBkYXRlKCdZJyk7CgkkcXVlcnkgPSAiU0VMRUNUIENPTkNBVF9XUygnICcsIG5vbSwgcHJlbm9tKSBBUyBwbGF5ZXIgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyBXSEVSRSBsaWNlbmNlID0gPyI7CgkkZGJyZXRvdXIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGljZW5jZSkpOwoJaWYgKCRkYnJldG91ciAmJiAkZGJyZXRvdXItPlJlY29yZENvdW50KCkgPiAwKQoJewoJICAgIHdoaWxlICgkcm93PSAkZGJyZXRvdXItPkZldGNoUm93KCkpCgkJewoJCSRwbGF5ZXIgPSAkcm93WydwbGF5ZXInXTsKCQkkc2VydmljZSA9IG5ldyBTZXJ2aWNlbigpOwoJCSRwYWdlID0gInhtbF9wYXJ0aWVfbXlzcWwiOwoJCSR2YXIgPSAibGljZW5jZT0iLiRsaWNlbmNlOwoJCSRsaWVuID0gJHNlcnZpY2UtPkdldExpbmsoJHBhZ2UsICR2YXIpOwoJCSR4bWwgPSBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGxpZW4sJ1NpbXBsZVhNTEVsZW1lbnQnLCBMSUJYTUxfTk9DREFUQSk7CgkJaWYoJHhtbCA9PT0gRkFMU0UpCgkJewoJCQkkYXJyYXkgPSAwOwoJCQkkbGlnbmVzID0gMDsKCQkJJG1lc3NhZ2UgPSAiU2VydmljZSBjb3Vww6kiOyAKCQkJJHN0YXR1cyA9ICdFY2hlYyc7CgkJCSRkZXNpZ25hdGlvbi49ICRtZXNzYWdlOwoJCQkkYWN0aW9uID0gIm1hc3NfYWN0aW9uIjsKCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCAkZGVzaWduYXRpb24sJGFjdGlvbik7CgkJfQoJCWVsc2UKCQl7CgkJCSRhcnJheSA9IGpzb25fZGVjb2RlKGpzb25fZW5jb2RlKChhcnJheSkkeG1sKSwgVFJVRSk7CgkJCSRsaWduZXMgPSBjb3VudCgkYXJyYXlbJ3BhcnRpZSddKTsKCQl9CgkJCgkJJGZmdHQgPSBwaW5nX2FkbWluX29wczo6Y29tcHRlX2ZmdHQoJGxpY2VuY2UpOwoJCS8vdmFyX2R1bXAoJHJlc3VsdCk7CgkJLy9sZSBzZXJ2aWNlIGVzdC1pbCBvdXZlcnQgPwoJCS8qKi8KCQkvL29uIHRlc3RlIGxlIHJlc3VsdGF0IHJldG91cm7DqSAgICAgCgoJCQkKCQkJaWYoJGxpZ25lcyA8PSAkZmZ0dCkKCQkJewoJCQkJJG1lc3NhZ2UgPSAiUGFydGllcyBGRlRUIMOgIGpvdXIgcG91ciAiLiRwbGF5ZXIuIiA6ICIuJGZmdHQuIiBlbiBiYXNlIGRlIGRvbm7DqWVzICIuJGxpZ25lcy4iIGVuIGxpZ25lLiI7IAoJCQkJJHN0YXR1cyA9ICdFY2hlYyc7CgkJCQkkZGVzaWduYXRpb24uPSAkbWVzc2FnZTsKCQkJCSRhY3Rpb24gPSAibWFzc19hY3Rpb24iOwoJCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCAkZGVzaWduYXRpb24sJGFjdGlvbik7CgkJCQkkYXVqb3VyZGh1aSA9IGRhdGUoJ1ktbS1kJyk7CgkJCQkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZWN1cF9wYXJ0aWVzIFNFVCBtYWpfZmZ0dCA9ID8gV0hFUkUgbGljZW5jZSA9ID8gQU5EIHNhaXNvbiA9ID8iOwoJCQkJJGRicmVzdWx0NCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRhdWpvdXJkaHVpLCRsaWNlbmNlLCRzYWlzb25fY291cmFudGUpKTsKCQkJCQoJCQkJCgkJCX0KCQkJZWxzZQoJCQl7CQoJCQkJJGkgPSAwOwoJCQkJJGNvbXB0ZXVyID0gMDsKCQkJCWZvcmVhY2goJHhtbCBhcyAkY2xlID0+JHRhYikKCQkJCXsKCQkJCQkkY29tcHRldXIrKzsKCgkJCQkJJGxpY2VuY2UgPSAoaXNzZXQoJHRhYi0+bGljZW5jZSk/IiR0YWItPmxpY2VuY2UiOiIiKTsKCQkJCQkkYWR2bGljID0gKGlzc2V0KCR0YWItPmFkdmxpYyk/IiR0YWItPmFkdmxpYyI6IiIpOwoJCQkJCSR2ZCA9IChpc3NldCgkdGFiLT52ZCk/IiR0YWItPnZkIjoiIik7CgoJCQkJCQlpZiAoJHZkID09J1YnKQoJCQkJCQl7CgkJCQkJCQkkdmQgPSAxOwoJCQkJCQl9CgkJCQkJCWVsc2UgCgkJCQkJCXsKCQkJCQkJCSR2ZCA9IDA7CgkJCQkJCX0KCgkJCQkJJG51bWpvdXJuID0gKGlzc2V0KCR0YWItPm51bWpvdXJuKT8iJHRhYi0+bnVtam91cm4iOiIiKTsKCgkJCQkJCWlmKGlzX2FycmF5KCRudW1qb3VybikpCgkJCQkJCXsKCQkJCQkJCSRudW1qb3VybiA9ICcwJzsKCQkJCQkJfQoKCQkJCQkkY29kZWNoYW1wID0gKGlzc2V0KCR0YWItPmNvZGVjaGFtcCk/IiR0YWItPmNvZGVjaGFtcCI6IiIpOwoKCQkJCQkvL29uIGVzc2FpZSBkZSBkw6l0ZXJtaW5lciBsZSBub20gZGUgY2V0dGUgY29tcGV0ID8KCQkJCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbiBXSEVSRSBjb2RlX2NvbXBldCA9ID8iOwoKCQkJCQkkZGF0ZWV2ZW50ID0gKGlzc2V0KCR0YWItPmRhdGUpPyIkdGFiLT5kYXRlIjoiIik7CgkJCQkJJGNoZ3QgPSBleHBsb2RlKCIvIiwkZGF0ZWV2ZW50KTsKCQkJCQkvL29uIHZhIGVuIGTDqWR1aXJlIGxhIHNhaXNvbgoJCQkJCWlmKCRjaGd0WzFdIDwgNykKCQkJCQl7CgkJCQkJCS8vb24gZXN0IGVuIGRldXhpw6htZSBwaGFzZQoJCQkJCQkvL29uIHNhaXQgZG9uYyBxdWUgbCdhbm7DqWUgZXN0IGxhIGRldXhpw6htZSBhbm7DqWUKCQkJCQkJJGFubmVlX2RlYnV0ID0gJzIwJy4kY2hndFsyXS0xOwoJCQkJCQkkYW5uZWVfZmluID0gJzIwJy4kY2hndFsyXTsKCgkJCQkJfQoJCQkJCWVsc2VpZigkY2hndFsxXT49NykKCQkJCQl7CgkJCQkJCS8vb24gZXN0IGVuIHByZW1pw6hyZSBwaGFzZQoJCQkJCQkkYW5uZWVfZGVidXQgPSAnMjAnLiRjaGd0WzJdOwoJCQkJCQkkYW5uZWVfZmluID0gJzIwJy4kY2hndFsyXSsxOwoJCQkJCX0KCQkJCQkkc2Fpc29uID0gJGFubmVlX2RlYnV0LiItIi4kYW5uZWVfZmluOwoJCQkJCSRkYXRlX2V2ZW50ID0gJGNoZ3RbMl0uIi0iLiRjaGd0WzFdLiItIi4kY2hndFswXTsKCQkJCQkvL2VjaG8gImxhIGRhdGUgZXN0Ii4kZGF0ZV9ldmVudDsKCgkJCQkvLwkkZGF0ZV9ldmVudCA9IGNvbnZfZGF0ZV92ZXJzX215c3FsKCRkYXRlZXZlbnQpOwoJCQkJCSRhZHZzZXhlID0gKGlzc2V0KCR0YWItPmFkdnNleGUpPyIkdGFiLT5hZHZzZXhlIjoiIik7CgkJCQkJJGFkdm5vbXByZSA9IChpc3NldCgkdGFiLT5hZHZub21wcmUpPyIkdGFiLT5hZHZub21wcmUiOiIiKTsKCQkJCQkkcG9pbnRyZXMgPSAoaXNzZXQoJHRhYi0+cG9pbnRyZXMpPyIkdGFiLT5wb2ludHJlcyI6IiIpOwoJCQkJCSRjb2VmY2hhbXAgPSAoaXNzZXQoJHRhYi0+Y29lZmNoYW1wKT8iJHRhYi0+Y29lZmNoYW1wIjoiIik7CgkJCQkJJGFkdmNsYW9mID0gKGlzc2V0KCR0YWItPmFkdmNsYW9mKT8iJHRhYi0+YWR2Y2xhb2YiOiIiKTsKCgkJCQkvKiovCSRxdWVyeSA9ICJTRUxFQ1QgbGljZW5jZSxhZHZsaWMsIG51bWpvdXJuLCBjb2RlY2hhbXAsIGRhdGVfZXZlbnQsIGNvZWZjaGFtcCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzIFdIRVJFIGxpY2VuY2UgPSA/IEFORCBhZHZsaWMgPSA/IEFORCBudW1qb3VybiA9ID8gQU5EIGNvZGVjaGFtcCA9ID8gQU5EIGRhdGVfZXZlbnQgPSA/IEFORCBjb2VmY2hhbXAgPSA/IjsKCQkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbGljZW5jZSwgJGFkdmxpYywgJG51bWpvdXJuLCAkY29kZWNoYW1wLCAkZGF0ZV9ldmVudCwgJGNvZWZjaGFtcCkpOwoKCQkJCQlpZigkZGJyZXN1bHQgICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA9PSAwKSAKCQkJCQl7CgkJCQkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyAoaWQsIHNhaXNvbiwgbGljZW5jZSwgYWR2bGljLCB2ZCwgbnVtam91cm4sIGNvZGVjaGFtcCwgZGF0ZV9ldmVudCwgYWR2c2V4ZSwgYWR2bm9tcHJlLCBwb2ludHJlcywgY29lZmNoYW1wLCBhZHZjbGFvZikgVkFMVUVTICgnJywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykiOwoJCQkJCQkkaSsrOwoJCQkJCQkvL2VjaG8gJHF1ZXJ5OwoJCQkJCQkkZGJyZXN1bHRhdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHNhaXNvbiwkbGljZW5jZSwgJGFkdmxpYywgJHZkLCAkbnVtam91cm4sICRjb2RlY2hhbXAsICRkYXRlX2V2ZW50LCAkYWR2c2V4ZSwgJGFkdm5vbXByZSwgJHBvaW50cmVzLCAkY29lZmNoYW1wLCAkYWR2Y2xhb2YpKTsKCgkJCQkJCQlpZighJGRicmVzdWx0YXQpCgkJCQkJCQl7CgkJCQkJCQkJJGRlc2lnbmF0aW9uLj0kZGItPkVycm9yTXNnKCk7IAoJCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJJGNvbXB0YWdlID0gJGk7CgkJCQkkcXVlcnk0ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXBfcGFydGllcyBTRVQgbWFqX2ZmdHQgPSA/LGZmdHQgPSA/IFdIRVJFIGxpY2VuY2UgPSA/IEFORCBzYWlzb24gPSA/IjsKCQkJCSRkYnJlc3VsdDQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5NCwgYXJyYXkoJGF1am91cmRodWksJGNvbXB0YWdlLCRsaWNlbmNlLCRzYWlzb24pKTsKCQkJCQoJCQkJJHN0YXR1cyA9ICdQYXJ0aWVzIEZGVFQnOwoJCQkJJGRlc2lnbmF0aW9uLj0gIlLDqWN1cMOpcmF0aW9uIEZGVFQgZGUgIi4kY29tcHRhZ2UuIiBwYXJ0aWVzIHN1ciAiLiRjb21wdGV1ci4iICBkZSAiLiRwbGF5ZXI7CgkJCQkkYWN0aW9uID0gIm1hc3NfYWN0aW9uIjsKCQkJCXBpbmdfYWRtaW5fb3BzOjplY3JpcmVqb3VybmFsKCRub3csJHN0YXR1cywgJGRlc2lnbmF0aW9uLCRhY3Rpb24pOwoKCQkJfS8vZmluIGR1IGlmICFpc19hcnJheQoJCX0vL2ZpbiBkdSB3aGlsZQoJCS8vdW5zZXQoKTsKCgl9Ly9maW4gZHUgaWYgZGJyZXRvdXIgPjAKCgoKCgoKCgoKICB9Ly9maW4gZGUgbGEgZm9uY3Rpb24KCi8vbGEgZm9uY3Rpb24gY2ktZGVzc291cyByw6ljdXDDqHJlIGxhIHNpdHVhdGlvbiBtZW5zdWVsbGUgcG91ciB1bmUgb3UgcGx1c2lldXJzIHBlcnNvbm5lcwovL0F0dGVudGlvbiBkZSBuZSBwYXMgbWV0dHJlIGRlIG1lc3NhZ2VzIGRlIHNvcnRpZSBhdXRyZSBxdWUgZHMgbGUgam91cm5hbApwdWJsaWMgZnVuY3Rpb24gcmV0cmlldmVfc2l0X21lbnMoJGxpY2VuY2UpCiAgewoJLy9vbiB2w6lyaWZpZSBzaSBsYSBzaXR1YXRpb24gbWVuc3VlbGxlIGEgZMOpasOgIMOpdMOpIHByaXNlIGVuIGNvbXB0ZQoJZ2xvYmFsICRnQ21zOwoJJHBpbmcgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1BpbmcnKTsgCgkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJJG5vdyA9IHRyaW0oJGRiLT5EQlRpbWVTdGFtcCh0aW1lKCkpLCAiJyIpOwoJJG1vaXNfY291cmFudCA9IGRhdGUoJ24nKTsvL01vaXMgYXUgZm9ybWF0IDEsIDIsIDMgZXRjLi4uLgoJJGFubmVlX2NvdXJhbnRlID0gZGF0ZSgnWScpOwoJJG1vaXNfZnJhbmNhaXMgPSBhcnJheSgnSmFudmllcicsICdGw6l2cmllcicsJ01hcnMnLCAnQXZyaWwnLCAnTWFpJywgJ0p1aW4nLCAnSnVpbGxldCcsJ0Fvw7t0JywgJ1NlcHRlbWJyZScsICdPY3RvYnJlJywnTm92ZW1icmUnLCdEw6ljZW1icmUnKTsKCSRtb2lzX3JlZWwgPSAkbW9pc19jb3VyYW50IC0gMTsKCSRtb2lzX3NtID0gJG1vaXNfZnJhbmNhaXNbIiRtb2lzX3JlZWwiXTsKCSRtb2lzX3NpdF9tZW5zID0gJG1vaXNfc20uIiAiLiRhbm5lZV9jb3VyYW50ZTsKCSRtZXNzYWdlID0gIiI7Cgkkc2Fpc29uID0gJHBpbmctPkdldFByZWZlcmVuY2UoJ3NhaXNvbl9lbl9jb3VycycpOwoJJHBoYXNlID0gJHBpbmctPkdldFByZWZlcmVuY2UoJ3BoYXNlX2VuX2NvdXJzJyk7CgkkcXVlcnkgPSAiU0VMRUNUIGxpY2VuY2UsIG1vaXMgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfc2l0X21lbnMgV0hFUkUgbGljZW5jZSA9ID8gQU5EIG1vaXMgPSA/IEFORCBzYWlzb24gPSA/IjsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRsaWNlbmNlLCRtb2lzX2NvdXJhbnQsJHNhaXNvbikpOwoJCglpZigkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPT0gMCkKCXsKCQkvL0xhIHNpdHVhdGlvbiBtZW5zdWVsbGUgZHUgbW9pcyBlbiBjb3VycyBuJ2V4aXN0ZSBwYXMsIG9uIGwnYWpvdXRlLgoJCSRzZXJ2aWNlID0gbmV3IFNlcnZpY2VuKCk7CgkJJHBhZ2UgPSAieG1sX2pvdWV1ciI7CgkJJHZhciA9ICJsaWNlbmNlPSIuJGxpY2VuY2U7CgkJJGxpZW4gPSAkc2VydmljZS0+R2V0TGluaygkcGFnZSwgJHZhcik7CgkJJHhtbCA9IHNpbXBsZXhtbF9sb2FkX3N0cmluZygkbGllbiwnU2ltcGxlWE1MRWxlbWVudCcsIExJQlhNTF9OT0NEQVRBKTsKCQlpZigkeG1sID09PSBGQUxTRSkKCQl7CgkJCSRsaWduZXMgPSAwOwoJCQkkYXJyYXkgPSAwOwoJCQkkcmVzdWx0ID0gMDsKCQl9CgkJZWxzZQoJCXsKCQkJJGFycmF5ID0ganNvbl9kZWNvZGUoanNvbl9lbmNvZGUoKGFycmF5KSR4bWwpLCBUUlVFKTsKCQkJLy92YXJfZHVtcCgkYXJyYXkpOwoJCQkvLyRsaWduZXMgPSBjb3VudCgkYXJyYXlbJ2pvdWV1ciddKTsKCQl9CgkJLy8kcmVzdWx0ID0gJHNlcnZpY2UtPmdldEpvdWV1cigiJGxpY2VuY2UiKTsKCQkvL3Zhcl9kdW1wKCRyZXN1bHQpOwoKCQkJaWYoIWlzX2FycmF5KCRhcnJheSkpCgkJCXsKCQkJCS8vbGUgc2VydmljZSBlc3QgY291cMOpIG91IGxhIGxpY2VuY2UgZXN0IGluYWN0aXZlCgkJCQkkcm93PSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CgkJCQkkbm9tID0gJHJvd1snbm9tJ107CgkJCQkkcHJlbm9tID0gJHJvd1sncHJlbm9tJ107CgkJCQkkbWVzc2FnZS49IkxpY2VuY2UgaW50cm91dmFibGUgb3Ugc2VydmljZSBjb3Vww6kgcG91ciAiLiRub20uIiAiLiRwcmVub207CgkJCQkkc3RhdHVzID0gJ0VjaGVjJzsKCQkJCSRkZXNpZ25hdGlvbiA9ICRtZXNzYWdlOwoJCQkJJGFjdGlvbiA9ICJtYXNzX2FjdGlvbiI7CgkJCQlwaW5nX2FkbWluX29wczo6ZWNyaXJlam91cm5hbCgkbm93LCRzdGF0dXMsICRkZXNpZ25hdGlvbiwkYWN0aW9uKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWZvcmVhY2goJHhtbCBhcyAkcmVzdWx0KQoJCQkJewoJCQkJCSRsaWNlbmNlMiA9IChpc3NldCgkcmVzdWx0LT5saWNlbmNlKT8iJHJlc3VsdC0+bGljZW5jZSI6IiIpOwoJCQkJCSRub20gPSAoaXNzZXQoJHJlc3VsdC0+bGljZW5jZSk/IiRyZXN1bHQtPm5vbSI6IiIpOwoJCQkJCSRwcmVub20gPSAoaXNzZXQoJHJlc3VsdC0+bGljZW5jZSk/IiRyZXN1bHQtPnByZW5vbSI6IiIpOwoJCQkJCSRuYXRpbyA9IChpc3NldCgkcmVzdWx0LT5saWNlbmNlKT8iJHJlc3VsdC0+bmF0aW8iOiIiKTsKCQkJCQkkY2xnbG9iID0gKGlzc2V0KCRyZXN1bHQtPmxpY2VuY2UpPyIkcmVzdWx0LT5jbGdsb2IiOiIiKTsKCQkJCQkkcG9pbnQgPSAoaXNzZXQoJHJlc3VsdC0+bGljZW5jZSk/IiRyZXN1bHQtPnBvaW50IjoiIik7CgkJCQkJJGFjbGdsb2IgPSAoaXNzZXQoJHJlc3VsdC0+bGljZW5jZSk/IiRyZXN1bHQtPmFjbGdsb2IiOiIiKTsKCQkJCQkkYXBvaW50ID0gKGlzc2V0KCRyZXN1bHQtPmxpY2VuY2UpPyIkcmVzdWx0LT5hcG9pbnQiOiIiKTsKCQkJCQkkY2xuYXQgPSAoaXNzZXQoJHJlc3VsdC0+bGljZW5jZSk/IiRyZXN1bHQtPmNsbmF0IjoiIik7CgkJCQkJJGNhdGVnID0gKGlzc2V0KCRyZXN1bHQtPmxpY2VuY2UpPyIkcmVzdWx0LT5jYXRlZyI6IiIpOwoJCQkJCSRyYW5ncmVnID0gKGlzc2V0KCRyZXN1bHQtPmxpY2VuY2UpPyIkcmVzdWx0LT5yYW5ncmVnIjoiIik7CgkJCQkJJHJhbmdkZXAgPSAoaXNzZXQoJHJlc3VsdC0+bGljZW5jZSk/IiRyZXN1bHQtPnJhbmdkZXAiOiIiKTsKCQkJCQkkdmFsY2xhID0gKGlzc2V0KCRyZXN1bHQtPmxpY2VuY2UpPyIkcmVzdWx0LT52YWxjbGEiOiIiKTsKCQkJCQkkY2xwcm8gPSAoaXNzZXQoJHJlc3VsdC0+bGljZW5jZSk/IiRyZXN1bHQtPmNscHJvIjoiIik7CgkJCQkJJHZhbGluaXQgPSAoaXNzZXQoJHJlc3VsdC0+bGljZW5jZSk/IiRyZXN1bHQtPnZhbGluaXQiOiIiKTsKCQkJCQkkcHJvZ21vaXMgPSAoaXNzZXQoJHJlc3VsdC0+bGljZW5jZSk/IiRyZXN1bHQtPnByb2dtb2lzIjoiIik7CgkJCQkJJHByb2dhbm4gPSAoaXNzZXQoJHJlc3VsdC0+bGljZW5jZSk/IiRyZXN1bHQtPnByb2dhbm4iOiIiKTsKCQkJCX0KCQkJCSRxdWVyeTIgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3NpdF9tZW5zIChpZCxkYXRlY3JlYXRlZCwgZGF0ZW1haiwgbW9pcywgYW5uZWUsIHBoYXNlLCBsaWNlbmNlLCBub20sIHByZW5vbSwgcG9pbnRzLCBjbG5hdCwgcmFuZ3JlZyxyYW5nZGVwLCBwcm9nbW9pcyxzYWlzb24pIFZBTFVFUyAoJycsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIjsKCQkJCS8vZWNobyAkcXVlcnk7CgkJCQkkZGJyZXN1bHRhdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkyLGFycmF5KCRub3csJG5vdywkbW9pc19jb3VyYW50LCAkYW5uZWVfY291cmFudGUsICRwaGFzZSwgJGxpY2VuY2UyLCAkbm9tLCAkcHJlbm9tLCAkcG9pbnQsICRjbG5hdCwgJHJhbmdyZWcsICRyYW5nZGVwLCAkcHJvZ21vaXMsICRzYWlzb24pKTsKCgkJCQkJaWYoISRkYnJlc3VsdGF0KQoJCQkJCXsKCQkJCQkJJG1lc3NhZ2UgPSAkZGItPkVycm9yTXNnKCk7IAoJCQkJCQkkc3RhdHVzID0gJ0VjaGVjJzsKCQkJCQkJJGRlc2lnbmF0aW9uID0gJG1lc3NhZ2U7CgkJCQkJCSRhY3Rpb24gPSAibWFzc19hY3Rpb24iOwoJCQkJCQlwaW5nX2FkbWluX29wczo6ZWNyaXJlam91cm5hbCgkbm93LCRzdGF0dXMsICRkZXNpZ25hdGlvbiwkYWN0aW9uKTsKCgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRzdGF0dXMgPSAnT2snOwoJCQkJCQkkZGVzaWduYXRpb24gPSAiU2l0dWF0aW9uIG9rIHBvdXIgIi4kbm9tLiIgIi4kcHJlbm9tOwoJCQkJCQkkYWN0aW9uID0gJ21hc3NfYWN0aW9uJzsKCQkJCQkJcGluZ19hZG1pbl9vcHM6OmVjcmlyZWpvdXJuYWwoJG5vdywkc3RhdHVzLCAkZGVzaWduYXRpb24sJGFjdGlvbik7CgkJCQkJCS8vb24gbWV0IGxhIHRhYmxlIHJlY3VwIMOgIGpvdXIgcG91ciBsZSBqb3VldXIKCQkJCQkJJHF1ZXJ5MyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMgU0VUIGRhdGVtYWogPSA/ICwgc2l0X21lbnMgPSA/IFdIRVJFIGxpY2VuY2UgPSA/IjsKCQkJCQkJJGRicmVzdWx0MyA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkzLCBhcnJheSgkbm93LCAkbW9pc19zaXRfbWVucywgJGxpY2VuY2UyKSk7CgkJCQkJfQoKCgkJCQkvLyRtZXNzYWdlLj0iPGxpPkxhIGxpY2VuY2UgZXN0IG9rPC9saT4iOwoJCQl9Ly9maW4gZHUgZWxzZQkhaXNfYXJyYXkKCQkKCX0KCWVsc2UKCXsKCQkvL0xhIHNpdHVhdGlvbiBtZW5zdWVsbGUgZXhpc3RlIGTDqWrDoCAhCgl9CgkKCgoKICB9CgoKfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.Service.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIAovL25hbWVzcGFjZSBNcGluZ1xDb3JlQnVuZGxlXEZmdHQ7CiAKLy91c2UgRG9jdHJpbmVcQ29tbW9uXENhY2hlXENhY2hlOwogCmNsYXNzIFNlcnZpY2UKewogICAgcHJpdmF0ZSAkY2FjaGU7CiAgICBwcml2YXRlICRsb2dnZXI7CiAgICBwcml2YXRlICRpcHNvdXJjZTsKICAgIHByaXZhdGUgJHNlcmlhbHM7CiAgICBwcml2YXRlICRhdXRvSW5pdGlhbGl6YXRpb247CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDYWNoZSAkY2FjaGUgPSBudWxsLCAkbG9nZ2VyID0gbnVsbCwgJHNlcmlhbHMgPSBhcnJheSgpLCAkaXBzb3VyY2UgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5jYWNoZSA9ICRjYWNoZTsKICAgICAgICAkdGhpcy0+bG9nZ2VyID0gJGxvZ2dlcjsgLy8gTXVzdCBoYXZlIGEgbWV0aG9kIGxvZygkdXJsLCAkZGF0YSkKICAgICAgICAkdGhpcy0+aXBzb3VyY2UgPSAkaXBzb3VyY2U7CiAKICAgICAgICAkdGhpcy0+c2VyaWFscyA9ICRzZXJpYWxzOwogCiAgICAgICAgLy8gR8OpbsOpcmF0aW9uIGQndW4gc2VyaWFsIHBhciBkw6lmYXV0ICgxNSBsZXR0cmVzIG1hanVzY3VsZXMpCiAgICAgICAgaWYgKGVtcHR5KCR0aGlzLT5zZXJpYWxzKSkgewogICAgICAgICAgICAkdGhpcy0+c2VyaWFscyA9IGFycmF5KCcnKTsKICAgICAgICAgICAgZm9yKCRpPTA7ICRpPDE1OyAkaSsrKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2VyaWFsc1swXSAuPSBjaHIobXRfcmFuZCg2NSwgOTApKTsgLy8oQS1aKQogICAgICAgICAgICB9CiAgICAgICAgfQogCiAgICAgICAgJHRoaXMtPmF1dG9Jbml0aWFsaXphdGlvbiA9IHRydWU7CiAKICAgICAgICBsaWJ4bWxfdXNlX2ludGVybmFsX2Vycm9ycyh0cnVlKTsKICAgIH0KIAogICAgcHVibGljIGZ1bmN0aW9uIHNldEF1dG9Jbml0aWFsaXNhdGlvbigkZmxhZykKICAgIHsKICAgICAgICAkdGhpcy0+YXV0b0luaXRpYWxpemF0aW9uID0gKGJvb2wpJGZsYWc7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBpbml0aWFsaXphdGlvbigpCiAgICB7CiAgICAgICAgJHNlcmlhbCA9ICR0aGlzLT5zZXJpYWxzW210X3JhbmQoMCwgY291bnQoJHRoaXMtPnNlcmlhbHMpIC0gMSldOwogCiAgICAgICAgJHRoaXMtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3htbC94bWxfaW5pdGlhbGlzYXRpb24ucGhwJywgYXJyYXkoJ3NlcmllJyA9PiAkc2VyaWFsLCAnb3MnID0+ICdBbmRyb2lkJywgJ3ZlcnNpb24nID0+ICcwMDcnKSk7CiAgICAgICAgJGV2ZW50ID0gc2VsZjo6Z2V0T2JqZWN0KCR0aGlzLT5nZXREYXRhKCdodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS94bWwvZXZlbmVtZW50L3htbF9ldmVuZW1lbnQucGhwJyksICdldmVuZW1lbnQnKTsKICAgICAgICBpZiAoIWVtcHR5KCRldmVudFsnbG9nbyddKSkgewogICAgICAgICAgICAkdGhpcy0+Z2V0RGF0YSgkZXZlbnRbJ2xvZ28nXSk7CiAgICAgICAgfQogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2x1YnNCeURlcGFydGVtZW50KCRkZXBhcnRlbWVudCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENhY2hlZERhdGEoImNsdWJzeyRkZXBhcnRlbWVudH0iLCAzNjAwKjI0KjMwLCBmdW5jdGlvbigkc2VydmljZSkgdXNlICgkZGVwYXJ0ZW1lbnQpIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldENvbGxlY3Rpb24oJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3htbC94bWxfY2x1Yl9kZXAyLnBocCcsIGFycmF5KCdkZXAnID0+ICRkZXBhcnRlbWVudCkpLCAnY2x1YicpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2x1YigkbnVtZXJvKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgiY2x1Yl97JG51bWVyb30iLCAzNjAwKjI0KjIsIGZ1bmN0aW9uKCRzZXJ2aWNlKSB1c2UgKCRudW1lcm8pIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldE9iamVjdCgkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUveG1sL3htbF9jbHViX2RldGFpbC5waHAnLCBhcnJheSgnY2x1YicgPT4gJG51bWVybykpLCAnY2x1YicpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Sm91ZXVyKCRsaWNlbmNlKQogICAgewogICAgICAgICRqb3VldXIgPSAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgiam91ZXVyX3skbGljZW5jZX0iLCAzNjAwKjI0KjEsIGZ1bmN0aW9uKCRzZXJ2aWNlKSB1c2UgKCRsaWNlbmNlKSB7CiAgICAgICAgICAgIHJldHVybiBTZXJ2aWNlOjpnZXRPYmplY3QoJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3htbC94bWxfam91ZXVyLnBocCcsIGFycmF5KCdsaWNlbmNlJyA9PiAkbGljZW5jZSwgJ2F1dG8nID0+IDEpKSwgJ2pvdWV1cicpOwogICAgICAgIH0pOwogCiAgICAgICAgaWYgKCFpc3NldCgkam91ZXVyWydsaWNlbmNlJ10pKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KIAogICAgICAgIGlmIChlbXB0eSgkam91ZXVyWyduYXRpbyddKSkgewogICAgICAgICAgICAkam91ZXVyWyduYXRpbyddID0gJ0YnOwogICAgICAgIH0KIAogICAgICAgICRqb3VldXJbJ3Bob3RvJ10gPSAiaHR0cDovL3d3dy5mZnR0LmNvbS9lc3BhY2VsaWNlbmNpZS9waG90b2xpY2VuY2llL3skam91ZXVyWydsaWNlbmNlJ119Xy5qcGciOwogICAgICAgICRqb3VldXJbJ3Byb2dtb2lzJ10gPSByb3VuZCgkam91ZXVyWydwb2ludCddIC0gJGpvdWV1clsnYXBvaW50J10sIDIpOyAvLyBQcm9ncmVzc2lvbiBtZW5zdWVsbGUKICAgICAgICAkam91ZXVyWydwcm9nYW5uJ10gPSByb3VuZCgkam91ZXVyWydwb2ludCddIC0gJGpvdWV1clsndmFsaW5pdCddLCAyKTsgLy8gUHJvZ3Jlc3Npb24gYW5udWVsbGUKIAogICAgICAgIHJldHVybiAkam91ZXVyOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Sm91ZXVyUGFydGllcygkbGljZW5jZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENhY2hlZERhdGEoImpvdWV1cl9wYXJ0aWVzX3skbGljZW5jZX0iLCAzNjAwKjI0KjEsIGZ1bmN0aW9uKCRzZXJ2aWNlKSB1c2UgKCRsaWNlbmNlKSB7CiAgICAgICAgICAgIHJldHVybiBTZXJ2aWNlOjpnZXRDb2xsZWN0aW9uKCRzZXJ2aWNlLT5nZXREYXRhKCdodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS94bWwveG1sX3BhcnRpZV9teXNxbC5waHAnLCBhcnJheSgnbGljZW5jZScgPT4gJGxpY2VuY2UsICdhdXRvJyA9PiAxKSksICdwYXJ0aWUnKTsKICAgICAgICB9KTsKICAgIH0KIAogICAgcHVibGljIGZ1bmN0aW9uIGdldEpvdWV1clBhcnRpZXNTcGlkKCRsaWNlbmNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgiam91ZXVyX3NwaWRfeyRsaWNlbmNlfSIsIDM2MDAqMjQqMSwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJGxpY2VuY2UpIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldENvbGxlY3Rpb24oJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3htbC94bWxfcGFydGllLnBocCcsIGFycmF5KCdudW1saWMnID0+ICRsaWNlbmNlKSksICdyZXN1bHRhdCcpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Sm91ZXVyc0J5TmFtZSgkbm9tLCAkcHJlbm9tPSAnJykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENhY2hlZERhdGEoImpvdWV1cnNfeyRub219X3skcHJlbm9tfSIsIDM2MDAqMjQqMSwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJG5vbSwgJHByZW5vbSkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0Q29sbGVjdGlvbigkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUveG1sL3htbF9saXN0ZV9qb3VldXIucGhwJywgYXJyYXkoJ25vbScgPT4gJG5vbSwgJ3ByZW5vbScgPT4gJHByZW5vbSkpLCAnam91ZXVyJyk7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRKb3VldXJzQnlDbHViKCRjbHViKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgiam91ZXVyc2NsdWJ7JGNsdWJ9IiwgMzYwMCoyNCoxLCBmdW5jdGlvbigkc2VydmljZSkgdXNlICgkY2x1YikgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0Q29sbGVjdGlvbigkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUveG1sL3htbF9saXN0ZV9qb3VldXIucGhwJywgYXJyYXkoJ2NsdWInID0+ICRjbHViKSksICdqb3VldXInKTsKICAgICAgICB9KTsKICAgIH0KIAogICAgcHVibGljIGZ1bmN0aW9uIGdldEVxdWlwZXNCeUNsdWIoJGNsdWIsICR0eXBlID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJHR5cGUgJiYgIWluX2FycmF5KCR0eXBlLCBhcnJheSgnTScsICdGJykpKSB7CiAgICAgICAgICAgICR0eXBlID0gJ00nOwogICAgICAgIH0KIAogICAgICAgICR0ZWFtcyA9ICR0aGlzLT5nZXRDYWNoZWREYXRhKCJjbHViZXF1aXBlc197JGNsdWJ9X3skdHlwZX0iLCAzNjAwKjI0KjMsIGZ1bmN0aW9uKCRzZXJ2aWNlKSB1c2UgKCRjbHViLCAkdHlwZSkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0Q29sbGVjdGlvbigkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUveG1sL3htbF9lcXVpcGUucGhwJywgYXJyYXkoJ251bWNsdScgPT4gJGNsdWIsICd0eXBlJyA9PiAkdHlwZSkpLCAnZXF1aXBlJyk7CiAgICAgICAgfSk7CiAKICAgICAgICBmb3JlYWNoKCR0ZWFtcyBhcyAmJHRlYW0pIHsKICAgICAgICAgICAgJHBhcmFtcyA9IGFycmF5KCk7CiAgICAgICAgICAgIHBhcnNlX3N0cigkdGVhbVsnbGllbmRpdmlzaW9uJ10sICRwYXJhbXMpOwogCiAgICAgICAgICAgICR0ZWFtWydpZHBvdWxlJ10gPSAkcGFyYW1zWydjeF9wb3VsZSddOwogICAgICAgICAgICAkdGVhbVsnaWRkaXYnXSA9ICRwYXJhbXNbJ0QxJ107CgogICAgICAgIH0KIAogICAgICAgIHJldHVybiAkdGVhbXM7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQb3VsZXMoJGRpdmlzaW9uKQogICAgewogICAgICAgICRwb3VsZXMgPSAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgicG91bGVzX3skZGl2aXNpb259IiwgMzYwMCoyNCozMCwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJGRpdmlzaW9uKSB7CiAgICAgICAgICAgIHJldHVybiBTZXJ2aWNlOjpnZXRDb2xsZWN0aW9uKCRzZXJ2aWNlLT5nZXREYXRhKCdodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS94bWwveG1sX3Jlc3VsdF9lcXUucGhwJywgYXJyYXkoJ2FjdGlvbicgPT4gJ3BvdWxlJywgJ0QxJyA9PiAkZGl2aXNpb24pKSwgJ3BvdWxlJyk7CiAgICAgICAgfSk7CiAKICAgICAgICBmb3JlYWNoKCRwb3VsZXMgYXMgJiRwb3VsZSkgewogICAgICAgICAgICAkcGFyYW1zID0gYXJyYXkoKTsKICAgICAgICAgICAgcGFyc2Vfc3RyKCRwb3VsZVsnbGllbiddLCAkcGFyYW1zKTsKIAogICAgICAgICAgICAkcG91bGVbJ2lkcG91bGUnXSA9ICRwYXJhbXNbJ2N4X3BvdWxlJ107CiAgICAgICAgICAgICRwb3VsZVsnaWRkaXYnXSA9ICRwYXJhbXNbJ0QxJ107CiAgICAgICAgfQogCiAgICAgICAgcmV0dXJuICRwb3VsZXM7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQb3VsZUNsYXNzZW1lbnQoJGRpdmlzaW9uLCAkcG91bGUgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgicG91bGVjbGFzc2VtZW50X3skZGl2aXNpb259X3skcG91bGV9IiwgMzYwMCoyNCoxLCBmdW5jdGlvbigkc2VydmljZSkgdXNlICgkZGl2aXNpb24sICRwb3VsZSkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0Q29sbGVjdGlvbigkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUveG1sL3htbF9yZXN1bHRfZXF1LnBocCcsIGFycmF5KCdhdXRvJyA9PiAxLCAnYWN0aW9uJyA9PiAnY2xhc3NlbWVudCcsICdEMScgPT4gJGRpdmlzaW9uLCAnY3hfcG91bGUnID0+ICRwb3VsZSkpLCAnY2xhc3NlbWVudCcpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UG91bGVSZW5jb250cmVzKCRkaXZpc2lvbiwgJHBvdWxlID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENhY2hlZERhdGEoInBvdWxlcmVuY29udHJlc197JGRpdmlzaW9ufV97JHBvdWxlfSIsIDM2MDAqMjQqMSwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJGRpdmlzaW9uLCAkcG91bGUpIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldENvbGxlY3Rpb24oJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3htbC94bWxfcmVzdWx0X2VxdS5waHAnLCBhcnJheSgnYXV0bycgPT4gMSwgJ0QxJyA9PiAkZGl2aXNpb24sICdjeF9wb3VsZScgPT4gJHBvdWxlKSksICd0b3VyJyk7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcmdhbmlzbWVzKCR0eXBlKQogICAgewogICAgICAgIC8vIFpvbmUgLyBMaWd1ZSAvIERlcGFydGVtZW50CiAgICAgICAgaWYgKCFpbl9hcnJheSgkdHlwZSwgYXJyYXkoJ1onLCAnTCcsICdEJykpKSB7CiAgICAgICAgICAgICR0eXBlID0gJ0wnOwogICAgICAgIH0KIAogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgib3JnYW5pc21lc197JHR5cGV9IiwgMzYwMCoyNCozMCwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJHR5cGUpIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldENvbGxlY3Rpb24oJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3htbC94bWxfb3JnYW5pc21lLnBocCcsIGFycmF5KCd0eXBlJyA9PiAkdHlwZSkpLCAnb3JnYW5pc21lJyk7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcHJldXZlcygkb3JnYW5pc21lLCAkdHlwZSkKICAgIHsKICAgICAgICAvLyBFcXVpcGUgLyBJbmRpdmlkdWVsbGUKICAgICAgICBpZiAoIWluX2FycmF5KCR0eXBlLCBhcnJheSgnRScsICdJJykpKSB7CiAgICAgICAgICAgICR0eXBlID0gJ0UnOwogICAgICAgIH0KIAogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgiZXByZXV2ZXNfeyRvcmdhbmlzbWV9X3skdHlwZX0iLCAzNjAwKjI0KjMwLCBmdW5jdGlvbigkc2VydmljZSkgdXNlICgkb3JnYW5pc21lLCAkdHlwZSkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0Q29sbGVjdGlvbigkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUveG1sL3htbF9lcHJldXZlLnBocCcsIGFycmF5KCd0eXBlJyA9PiAkdHlwZSwgJ29yZ2FuaXNtZScgPT4gJG9yZ2FuaXNtZSkpLCAnZXByZXV2ZScpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGl2aXNpb25zKCRvcmdhbmlzbWUsICRlcHJldXZlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgiZGl2aXNpb25zX3skb3JnYW5pc21lfV97JGVwcmV1dmV9IiwgMzYwMCoyNCozMCwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJG9yZ2FuaXNtZSwgJGVwcmV1dmUpIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldENvbGxlY3Rpb24oJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3htbC94bWxfZGl2aXNpb24ucGhwJywgYXJyYXkoJ29yZ2FuaXNtZScgPT4gJG9yZ2FuaXNtZSwgJ2VwcmV1dmUnID0+ICRlcHJldXZlLCApKSwgJ2RpdmlzaW9uJyk7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZW5jb250cmUoJGxpbmspCiAgICB7CiAgICAgICAgJHBhcmFtcyA9IGFycmF5KCk7CiAgICAgICAgcGFyc2Vfc3RyKCRsaW5rLCAkcGFyYW1zKTsKIAogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgicmVuY29udHJlXyIuc2hhMSgkbGluayksIDM2MDAqMjQqMSwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJHBhcmFtcykgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0T2JqZWN0KCRzZXJ2aWNlLT5nZXREYXRhKCdodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS94bWwveG1sX2NocF9yZW5jLnBocCcsICRwYXJhbXMpLCBudWxsKTsKICAgICAgICB9KTsKICAgIH0KIAogICAgcHVibGljIGZ1bmN0aW9uIGdldExpY2VuY2VzQnlOYW1lKCRub20sICRwcmVub209ICcnKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgibGljZW5jZXNfeyRub219X3skcHJlbm9tfSIsIDM2MDAqMjQqMiwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJG5vbSwgJHByZW5vbSkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0Q29sbGVjdGlvbigkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUveG1sL3htbF9saXN0ZV9qb3VldXJfby5waHAnLCBhcnJheSgnbm9tJyA9PiBzdHJ0b3VwcGVyKCRub20pLCAncHJlbm9tJyA9PiB1Y2ZpcnN0KCRwcmVub20pKSksICdqb3VldXInKTsKICAgICAgICB9KTsKICAgIH0KIAogICAgcHVibGljIGZ1bmN0aW9uIGdldExpY2VuY2VzQnlDbHViKCRjbHViKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgibGljZW5jZXNjbHViX3skY2x1Yn0iLCAzNjAwKjI0KjIsIGZ1bmN0aW9uKCRzZXJ2aWNlKSB1c2UgKCRjbHViKSB7CiAgICAgICAgICAgIHJldHVybiBTZXJ2aWNlOjpnZXRDb2xsZWN0aW9uKCRzZXJ2aWNlLT5nZXREYXRhKCdodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS94bWwveG1sX2xpc3RlX2pvdWV1cl9vLnBocCcsIGFycmF5KCdjbHViJyA9PiAkY2x1YikpLCAnam91ZXVyJyk7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMaWNlbmNlKCRsaWNlbmNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgibGljZW5jZV97JGxpY2VuY2V9IiwgMzYwMCoyNCoxLCBmdW5jdGlvbigkc2VydmljZSkgdXNlICgkbGljZW5jZSkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0T2JqZWN0KCRzZXJ2aWNlLT5nZXREYXRhKCdodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS94bWwveG1sX2xpY2VuY2UucGhwJywgYXJyYXkoJ2xpY2VuY2UnID0+ICRsaWNlbmNlKSksICdsaWNlbmNlJyk7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0Q2FjaGVkRGF0YSgka2V5LCAkbGlmZVRpbWUsICRjYWxsYmFjaykKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5jYWNoZSkgewogICAgICAgICAgICByZXR1cm4gJGNhbGxiYWNrKCR0aGlzKTsKICAgICAgICB9CiAKICAgICAgICBpZiAoZmFsc2UgPT09ICgkZGF0YSA9ICR0aGlzLT5jYWNoZS0+ZmV0Y2goJGtleSkpKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+YXV0b0luaXRpYWxpemF0aW9uICYmIGZhbHNlID09ICR0aGlzLT5jYWNoZS0+ZmV0Y2goJGluaXRLZXkgPSAneG1sX2luaXRpYWxpc2F0aW9uJykpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5pbml0aWFsaXphdGlvbigpOwogICAgICAgICAgICAgICAgJHRoaXMtPmNhY2hlLT5zYXZlKCRpbml0S2V5LCAnaW5pdCcsIDM2MDAqNCArIG10X3JhbmQoMCwgMzYwMCo0KSk7IC8vIEVudHJlIDQgZXQgOGgKICAgICAgICAgICAgfQogCiAgICAgICAgICAgICRkYXRhID0gJGNhbGxiYWNrKCR0aGlzKTsKICAgICAgICAgICAgJHRoaXMtPmNhY2hlLT5zYXZlKCRrZXksICRkYXRhLCAkbGlmZVRpbWUpOwogICAgICAgIH0KIAogICAgICAgIHJldHVybiAkZGF0YTsKICAgIH0KIAogICAgcHVibGljIGZ1bmN0aW9uIGdldERhdGEoJHVybCwgJHBhcmFtcyA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkcGFyYW1zKSkgewogICAgICAgICAgICAkdXJsIC49ICc/JyAuIGh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtcyk7CiAgICAgICAgfQogCiAgICAgICAgLyokY29udGV4dCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZShhcnJheSgKICAgICAgICAgICAgJ3NvY2tldCcgPT4gYXJyYXkoJ2JpbmR0bycgPT4gKCR0aGlzLT5pcHNvdXJjZSA/OiAnMCcpLic6MCcpLAogICAgICAgICAgICAnaHR0cCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAncHJvdG9jb2xfdmVyc2lvbicgPT4gMS4xLAogICAgICAgICAgICAgICAgJ2hlYWRlcicgPT4gYXJyYXkoIlVzZXItYWdlbnQ6IE1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luMzIpIiwKICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLAogICAgICAgICAgICAgICAgICAgICJBY2NlcHQtRW5jb2Rpbmc6IGd6aXAiLAogICAgICAgICAgICAgICAgICAgICJDb25uZWN0aW9uOiBDbG9zZSIsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICApCiAgICAgICAgKSk7CiAKICAgICAgICAvLyRkYXRhID0gZmlsZV9nZXRfY29udGVudHMoJHVybCwgZmFsc2UsICRjb250ZXh0KTsKICAgICAgICAkc3RyZWFtID0gZm9wZW4oJHVybCwgJ3InLCBmYWxzZSwgJGNvbnRleHQpOwogICAgICAgICRkYXRhID0gc3RyZWFtX2dldF9jb250ZW50cygkc3RyZWFtKTsKICAgICAgICBmY2xvc2UoJHN0cmVhbSk7Ki8KIAogICAgICAgICRjdXJsID0gY3VybF9pbml0KCk7CiAgICAgICAgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVJMLCAkdXJsKTsKICAgICAgICBpZiAoJHRoaXMtPmlwc291cmNlKSB7CiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0lOVEVSRkFDRSwgJHRoaXMtPmlwc291cmNlKTsKICAgICAgICB9CiAgICAgICAgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgLCB0cnVlKTsKICAgICAgICBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBhcnJheSgKICAgICAgICAgICAgIkFjY2VwdDoiLCAvLyBTdXByaW1lIGxlIGhlYWRlciBwYXIgZGVmYXVsdCBkZSBjVXJsIChBY2NlcHQ6ICovKikKICAgICAgICAgICAgIlVzZXItYWdlbnQ6IE1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luMzIpIiwKICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwKICAgICAgICAgICAgIkFjY2VwdC1FbmNvZGluZzogZ3ppcCIsCiAgICAgICAgICAgICJDb25uZWN0aW9uOiBLZWVwLUFsaXZlIiwKICAgICAgICApKTsKICAgICAgICAkZGF0YSA9IGN1cmxfZXhlYygkY3VybCk7CiAgICAgICAgY3VybF9jbG9zZSgkY3VybCk7CiAKICAgICAgICBpZiAoJHRoaXMtPmxvZ2dlcikgewogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5sb2coJHVybCwgJGRhdGEpOwogICAgICAgIH0KIAogICAgICAgICR4bWwgPSBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGRhdGEpOwogCiAgICAgICAgaWYgKCEkeG1sKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAKICAgICAgICAvLyBQZXRpdGUgYXN0dWNlIHBvdXIgdHJhbnNmb3JtZXIgc2ltcGxlbWVudCBsZSBYTUwgZW4gdGFibGVhdQogICAgICAgIHJldHVybiBqc29uX2RlY29kZShqc29uX2VuY29kZSgkeG1sKSwgdHJ1ZSk7CiAgICB9CiAKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29sbGVjdGlvbigkZGF0YSwgJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCRkYXRhKSkgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgICAgICB9CiAKICAgICAgICBpZiAoJGtleSkgewogICAgICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJGRhdGEpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZGF0YSA9ICRkYXRhWyRrZXldOwogICAgICAgIH0KIAogICAgICAgIHJldHVybiBpc3NldCgkZGF0YVswXSkgPyAkZGF0YSA6IGFycmF5KCRkYXRhKTsKICAgIH0KIAogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRPYmplY3QoJGRhdGEsICRrZXkgPSBudWxsKQogICAgewogICAgICAgIGlmICgka2V5KSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheV9rZXlfZXhpc3RzKCRrZXksICRkYXRhKSA/ICRkYXRhWyRrZXldIDogbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZW1wdHkoJGRhdGEpID8gbnVsbCA6ICRkYXRhOwogICAgICAgIH0KICAgIH0KIAp9]]></data>
	</file>
	<file>
	  <filename>/lib/class.Servicen.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIAovL25hbWVzcGFjZSBNcGluZ1xDb3JlQnVuZGxlXEZmdHQ7CiAKLy91c2UgRG9jdHJpbmVcQ29tbW9uXENhY2hlXENhY2hlOwogCmNsYXNzIFNlcnZpY2VuCnsKICAgIHByaXZhdGUgJGNhY2hlOwogICAgcHJpdmF0ZSAkbG9nZ2VyOwogICAgcHJpdmF0ZSAkaXBzb3VyY2U7CiAgICBwcml2YXRlICRzZXJpYWxzOwogICAgcHJpdmF0ZSAkYXV0b0luaXRpYWxpemF0aW9uOwogICAgcHJpdmF0ZSAkaWQ7CiAgICBwcml2YXRlICRzZXJpZTsKICAgIHByaXZhdGUgJHRtOwogICAgcHJpdmF0ZSAkdG1jOwogICAgCiAgICAKCiAKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDYWNoZSAkY2FjaGUgPSBudWxsLCAkbG9nZ2VyID0gbnVsbCwgJHNlcmlhbHMgPSBhcnJheSgpLCAkaXBzb3VyY2UgPSBudWxsLCAkcGluZyA9IG51bGwsICRjb2RlID0gbnVsbCwgJGlkID0gbnVsbCwgJHNlcmlhbCA9IG51bGwsICR0bSA9IG51bGwsICR0bWMgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5jYWNoZSA9ICRjYWNoZTsKICAgICAgICAkdGhpcy0+bG9nZ2VyID0gJGxvZ2dlcjsgLy8gTXVzdCBoYXZlIGEgbWV0aG9kIGxvZygkdXJsLCAkZGF0YSkKICAgICAgICAkdGhpcy0+aXBzb3VyY2UgPSAkaXBzb3VyY2U7CiAJCgkkdGhpcy0+cGluZyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnUGluZycpOwoJCiAgICAgICAgLy8kdGhpcy0+c2VyaWFscyA9ICRzZXJpYWxzOwogCQogICAgICAgIC8qCiAgICAgICAgLy8gR8OpbsOpcmF0aW9uIGQndW4gc2VyaWFsIHBhciBkw6lmYXV0ICgxNSBsZXR0cmVzIG1hanVzY3VsZXMpCiAgICAgICAgaWYgKGVtcHR5KCR0aGlzLT5zZXJpYWxzKSkgewogICAgICAgICAgICAkdGhpcy0+c2VyaWFscyA9IGFycmF5KCcnKTsKICAgICAgICAgICAgZm9yKCRpPTA7ICRpPDE1OyAkaSsrKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2VyaWFsc1swXSAuPSBjaHIobXRfcmFuZCg2NSwgOTApKTsgLy8oQS1aKQogICAgICAgICAgICB9CiAgICAgICAgfQogCSovCiAgICAgICAgJHRoaXMtPmF1dG9Jbml0aWFsaXphdGlvbiA9IHRydWU7CiAKICAgICAgICBsaWJ4bWxfdXNlX2ludGVybmFsX2Vycm9ycyh0cnVlKTsKICAgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRQYXNzd29yZCgpCiAgICB7CgkkcGluZyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnUGluZycpOwoJJHRoaXMtPmNvZGUgPSAkcGluZy0+R2V0UHJlZmVyZW5jZSgnbW90ZGVwYXNzZScpOwoJcmV0dXJuICR0aGlzLT5jb2RlOwoJLy9lY2hvICJsZSBjb2RlIGVzdCA6ICIuJGNvZGU7CiAgICB9CiAgICAKICAgcHVibGljIGZ1bmN0aW9uIEdldFNlcmllKCkKICAgIHsKCSRwaW5nID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdQaW5nJyk7CgkkdGhpcy0+c2VyaWUgPSAkcGluZy0+R2V0UHJlZmVyZW5jZSgnc2VyaWUnKTsKCXJldHVybiAkdGhpcy0+c2VyaWU7CgkvL2VjaG8gImxlIGNvZGUgZXN0IDogIi4kY29kZTsKICAgIH0KCiAgIHB1YmxpYyBmdW5jdGlvbiBHZXRJZEFwcGxpKCkKICAgIHsKCSRwaW5nID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdQaW5nJyk7CgkkdGhpcy0+aWQgPSAkcGluZy0+R2V0UHJlZmVyZW5jZSgnaWRBcHBsaScpOwoJcmV0dXJuICR0aGlzLT5pZDsKCS8vZWNobyAibGUgY29kZSBlc3QgOiAiLiRjb2RlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRUaW1lc3RhbXAoKQogICB7CgkkdGhpcy0+dG0gPSBzdWJzdHIoZGF0ZSgnWW1kSGlzdScpLDAsMTcpOwoJcmV0dXJuICR0aGlzLT50bTsKCQogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gR2V0RW5jcnlwdGVkVGltZXN0YW1wKCkKICAgewoJJHRoaXMtPmNvZGUgPSBzZXJ2aWNlbjo6R2V0UGFzc3dvcmQoKTsKCSR0aGlzLT50bSA9IHNlcnZpY2VuOjpHZXRUaW1lc3RhbXAoKTsKCSR0aGlzLT50bWMgPSBoYXNoX2htYWMoInNoYTEiLCR0aGlzLT50bSwkdGhpcy0+Y29kZSk7CglyZXR1cm4gJHRoaXMtPnRtYzsKCiAgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBpbml0aWFsaXNhdGlvbkFQSSgpIAogICAgewoJJGNoYWluZSA9ICdodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS9weG1sL3htbF9pbml0aWFsaXNhdGlvbi5waHA/c2VyaWU9Jy4kdGhpcy0+c2VyaWUuJyZ0bT0nLiR0aGlzLT50bS4nJnRtYz0nLiR0aGlzLT50bWMuJyZpZD0nLiR0aGlzLT5pZDsgCgkkcmVzdWx0ID0gZmlsZV9nZXRfY29udGVudHMoJGNoYWluZSk7CgoJJGRvbSA9IG5ldyBEb21Eb2N1bWVudCgpOwoJJGRvbS0+bG9hZFhNTCgkcmVzdWx0KTsgCgkkcmVwb25zZSA9ICRkb20tPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhcHBsaScpLT5pdGVtKDApLT5ub2RlVmFsdWU7CglyZXR1cm4gJHJlcG9uc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldExpbmsoJHBhZ2UsJHZhciA9ICIiKQogICAgewogICAgICAgICRzZXJpZSA9IHNlcnZpY2VuOjpHZXRTZXJpZSgpOwoJJHRtID0gc2VydmljZW46OkdldFRpbWVzdGFtcCgpOwoJJHRtYyA9IHNlcnZpY2VuOjpHZXRFbmNyeXB0ZWRUaW1lc3RhbXAoKTsKCSRpZCA9IHNlcnZpY2VuOjpHZXRJZEFwcGxpKCk7CgkkY2hhaW5lID0gJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3B4bWwvJy4kcGFnZS4nLnBocD9zZXJpZT0nLiR0aGlzLT5zZXJpZS4nJnRtPScuJHRoaXMtPnRtLicmdG1jPScuJHRoaXMtPnRtYy4nJmlkPScuJHRoaXMtPmlkLicmJy4kdmFyOyAKCXJldHVybiBmaWxlX2dldF9jb250ZW50cygkY2hhaW5lKTsKCS8vcmV0dXJuICRjaGFpbmU7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBpbml0aWFsaXphdGlvbigpCiAgICB7CiAgICAgICAgCgkvLyRzZXJpYWwgPSAkcGluZy0+R2V0UHJlZmVyZW5jZSgnc2VyaWUnKTsKCS8vJHNlcmlhbCA9ICR0aGlzLT5zZXJpYWxzW210X3JhbmQoMCwgY291bnQoJHRoaXMtPnNlcmlhbHMpIC0gMSldOwogCiAgICAgICAgJHRoaXMtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3B4bWwveG1sX2luaXRpYWxpc2F0aW9uLnBocCcsIGFycmF5KCdzZXJpZScgPT4gJHRoaXMtPnNlcmllLCAndG0nID0+ICR0aGlzLT50bSwgJ3RtYycgPT4gJHRoaXMtPnRtYywgJ2lkJyA9PiR0aGlzLT5pZCkpOwogICAgICAgICRldmVudCA9IHNlbGY6OmdldE9iamVjdCgkdGhpcy0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUvcHhtbC9ldmVuZW1lbnQveG1sX2V2ZW5lbWVudC5waHAnKSwgJ2V2ZW5lbWVudCcpOwogICAgICAgIGlmICghZW1wdHkoJGV2ZW50Wydsb2dvJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5nZXREYXRhKCRldmVudFsnbG9nbyddKTsKICAgICAgICB9CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbHVic0J5RGVwYXJ0ZW1lbnQoJGRlcGFydGVtZW50KQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgiY2x1YnN7JGRlcGFydGVtZW50fSIsIDM2MDAqMjQqMzAsIGZ1bmN0aW9uKCRzZXJ2aWNlKSB1c2UgKCRkZXBhcnRlbWVudCkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0Q29sbGVjdGlvbigkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUvcHhtbC94bWxfY2x1Yl9kZXAyLnBocCcsIGFycmF5KCdkZXAnID0+ICRkZXBhcnRlbWVudCkpLCAnY2x1YicpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2x1YigkbnVtZXJvKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgiY2x1Yl97JG51bWVyb30iLCAzNjAwKjI0KjIsIGZ1bmN0aW9uKCRzZXJ2aWNlKSB1c2UgKCRudW1lcm8pIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldE9iamVjdCgkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUvcHhtbC94bWxfY2x1Yl9kZXRhaWwucGhwJywgYXJyYXkoJ3NlcmllJyA9PiAkdGhpcy0+c2VyaWUsICd0bScgPT4gJHRoaXMtPnRtLCAndG1jJyA9PiAkdGhpcy0+dG1jLCAnaWQnID0+ICR0aGlzLT5pZCwnY2x1YicgPT4gJG51bWVybykpLGFycmF5KCdzZXJpZScsJ3RtJywndG1jJywnaWQnLCdjbHViJykpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Sm91ZXVyKCRsaWNlbmNlKQogICAgewogICAgICAgICRqb3VldXIgPSAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgiam91ZXVyX3skbGljZW5jZX0iLCAzNjAwKjI0KjEsIGZ1bmN0aW9uKCRzZXJ2aWNlKSB1c2UgKCRsaWNlbmNlKSB7CiAgICAgICAgICAgIHJldHVybiBTZXJ2aWNlOjpnZXRPYmplY3QoJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3B4bWwveG1sX2pvdWV1ci5waHAnLCBhcnJheSgnbGljZW5jZScgPT4gJGxpY2VuY2UsICdhdXRvJyA9PiAxKSksICdqb3VldXInKTsKICAgICAgICB9KTsKIAogICAgICAgIGlmICghaXNzZXQoJGpvdWV1clsnbGljZW5jZSddKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAKICAgICAgICBpZiAoZW1wdHkoJGpvdWV1clsnbmF0aW8nXSkpIHsKICAgICAgICAgICAgJGpvdWV1clsnbmF0aW8nXSA9ICdGJzsKICAgICAgICB9CiAKICAgICAgICAkam91ZXVyWydwaG90byddID0gImh0dHA6Ly93d3cuZmZ0dC5jb20vZXNwYWNlbGljZW5jaWUvcGhvdG9saWNlbmNpZS97JGpvdWV1clsnbGljZW5jZSddfV8uanBnIjsKICAgICAgICAkam91ZXVyWydwcm9nbW9pcyddID0gcm91bmQoJGpvdWV1clsncG9pbnQnXSAtICRqb3VldXJbJ2Fwb2ludCddLCAyKTsgLy8gUHJvZ3Jlc3Npb24gbWVuc3VlbGxlCiAgICAgICAgJGpvdWV1clsncHJvZ2FubiddID0gcm91bmQoJGpvdWV1clsncG9pbnQnXSAtICRqb3VldXJbJ3ZhbGluaXQnXSwgMik7IC8vIFByb2dyZXNzaW9uIGFubnVlbGxlCiAKICAgICAgICByZXR1cm4gJGpvdWV1cjsKICAgIH0KIAogICAgcHVibGljIGZ1bmN0aW9uIGdldEpvdWV1clBhcnRpZXMoJGxpY2VuY2UpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDYWNoZWREYXRhKCJqb3VldXJfcGFydGllc197JGxpY2VuY2V9IiwgMzYwMCoyNCoxLCBmdW5jdGlvbigkc2VydmljZSkgdXNlICgkbGljZW5jZSkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0Q29sbGVjdGlvbigkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUvcHhtbC94bWxfcGFydGllX215c3FsLnBocCcsIGFycmF5KCdsaWNlbmNlJyA9PiAkbGljZW5jZSwgJ2F1dG8nID0+IDEpKSwgJ3BhcnRpZScpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Sm91ZXVyUGFydGllc1NwaWQoJGxpY2VuY2UpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDYWNoZWREYXRhKCJqb3VldXJfc3BpZF97JGxpY2VuY2V9IiwgMzYwMCoyNCoxLCBmdW5jdGlvbigkc2VydmljZSkgdXNlICgkbGljZW5jZSkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0Q29sbGVjdGlvbigkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUvcHhtbC94bWxfcGFydGllLnBocCcsIGFycmF5KCdudW1saWMnID0+ICRsaWNlbmNlKSksICdyZXN1bHRhdCcpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Sm91ZXVyc0J5TmFtZSgkbm9tLCAkcHJlbm9tPSAnJykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENhY2hlZERhdGEoImpvdWV1cnNfeyRub219X3skcHJlbm9tfSIsIDM2MDAqMjQqMSwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJG5vbSwgJHByZW5vbSkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0Q29sbGVjdGlvbigkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUvcHhtbC94bWxfbGlzdGVfam91ZXVyLnBocCcsIGFycmF5KCdub20nID0+ICRub20sICdwcmVub20nID0+ICRwcmVub20pKSwgJ2pvdWV1cicpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Sm91ZXVyc0J5Q2x1YigkY2x1YikKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENhY2hlZERhdGEoImpvdWV1cnNjbHVieyRjbHVifSIsIDM2MDAqMjQqMSwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJGNsdWIpIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldENvbGxlY3Rpb24oJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3B4bWwveG1sX2xpc3RlX2pvdWV1ci5waHAnLCBhcnJheSgnY2x1YicgPT4gJGNsdWIpKSwgJ2pvdWV1cicpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXF1aXBlc0J5Q2x1YigkY2x1YiwgJHR5cGUgPSBudWxsKQogICAgewogICAgICAgIGlmICgkdHlwZSAmJiAhaW5fYXJyYXkoJHR5cGUsIGFycmF5KCdNJywgJ0YnKSkpIHsKICAgICAgICAgICAgJHR5cGUgPSAnTSc7CiAgICAgICAgfQogCiAgICAgICAgJHRlYW1zID0gJHRoaXMtPmdldENhY2hlZERhdGEoImNsdWJlcXVpcGVzX3skY2x1Yn1feyR0eXBlfSIsIDM2MDAqMjQqMywgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJGNsdWIsICR0eXBlKSB7CiAgICAgICAgICAgIHJldHVybiBTZXJ2aWNlOjpnZXRDb2xsZWN0aW9uKCRzZXJ2aWNlLT5nZXREYXRhKCdodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS9weG1sL3htbF9lcXVpcGUucGhwJywgYXJyYXkoJ251bWNsdScgPT4gJGNsdWIsICd0eXBlJyA9PiAkdHlwZSkpLCAnZXF1aXBlJyk7CiAgICAgICAgfSk7CiAKICAgICAgICBmb3JlYWNoKCR0ZWFtcyBhcyAmJHRlYW0pIHsKICAgICAgICAgICAgJHBhcmFtcyA9IGFycmF5KCk7CiAgICAgICAgICAgIHBhcnNlX3N0cigkdGVhbVsnbGllbmRpdmlzaW9uJ10sICRwYXJhbXMpOwogCiAgICAgICAgICAgICR0ZWFtWydpZHBvdWxlJ10gPSAkcGFyYW1zWydjeF9wb3VsZSddOwogICAgICAgICAgICAkdGVhbVsnaWRkaXYnXSA9ICRwYXJhbXNbJ0QxJ107CgogICAgICAgIH0KIAogICAgICAgIHJldHVybiAkdGVhbXM7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQb3VsZXMoJGRpdmlzaW9uKQogICAgewogICAgICAgICRwb3VsZXMgPSAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgicG91bGVzX3skZGl2aXNpb259IiwgMzYwMCoyNCozMCwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJGRpdmlzaW9uKSB7CiAgICAgICAgICAgIHJldHVybiBTZXJ2aWNlOjpnZXRDb2xsZWN0aW9uKCRzZXJ2aWNlLT5nZXREYXRhKCdodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS9weG1sL3htbF9yZXN1bHRfZXF1LnBocCcsIGFycmF5KCdhY3Rpb24nID0+ICdwb3VsZScsICdEMScgPT4gJGRpdmlzaW9uKSksICdwb3VsZScpOwogICAgICAgIH0pOwogCiAgICAgICAgZm9yZWFjaCgkcG91bGVzIGFzICYkcG91bGUpIHsKICAgICAgICAgICAgJHBhcmFtcyA9IGFycmF5KCk7CiAgICAgICAgICAgIHBhcnNlX3N0cigkcG91bGVbJ2xpZW4nXSwgJHBhcmFtcyk7CiAKICAgICAgICAgICAgJHBvdWxlWydpZHBvdWxlJ10gPSAkcGFyYW1zWydjeF9wb3VsZSddOwogICAgICAgICAgICAkcG91bGVbJ2lkZGl2J10gPSAkcGFyYW1zWydEMSddOwogICAgICAgIH0KIAogICAgICAgIHJldHVybiAkcG91bGVzOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UG91bGVDbGFzc2VtZW50KCRkaXZpc2lvbiwgJHBvdWxlID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENhY2hlZERhdGEoInBvdWxlY2xhc3NlbWVudF97JGRpdmlzaW9ufV97JHBvdWxlfSIsIDM2MDAqMjQqMSwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJGRpdmlzaW9uLCAkcG91bGUpIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldENvbGxlY3Rpb24oJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3B4bWwveG1sX3Jlc3VsdF9lcXUucGhwJywgYXJyYXkoJ2F1dG8nID0+IDEsICdhY3Rpb24nID0+ICdjbGFzc2VtZW50JywgJ0QxJyA9PiAkZGl2aXNpb24sICdjeF9wb3VsZScgPT4gJHBvdWxlKSksICdjbGFzc2VtZW50Jyk7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQb3VsZVJlbmNvbnRyZXMoJGRpdmlzaW9uLCAkcG91bGUgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgicG91bGVyZW5jb250cmVzX3skZGl2aXNpb259X3skcG91bGV9IiwgMzYwMCoyNCoxLCBmdW5jdGlvbigkc2VydmljZSkgdXNlICgkZGl2aXNpb24sICRwb3VsZSkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0Q29sbGVjdGlvbigkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUvcHhtbC94bWxfcmVzdWx0X2VxdS5waHAnLCBhcnJheSgnYXV0bycgPT4gMSwgJ0QxJyA9PiAkZGl2aXNpb24sICdjeF9wb3VsZScgPT4gJHBvdWxlKSksICd0b3VyJyk7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcmdhbmlzbWVzKCR0eXBlKQogICAgewogICAgICAgIC8vIFpvbmUgLyBMaWd1ZSAvIERlcGFydGVtZW50CiAgICAgICAgaWYgKCFpbl9hcnJheSgkdHlwZSwgYXJyYXkoJ1onLCAnTCcsICdEJykpKSB7CiAgICAgICAgICAgICR0eXBlID0gJ0wnOwogICAgICAgIH0KIAogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgib3JnYW5pc21lc197JHR5cGV9IiwgMzYwMCoyNCozMCwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJHR5cGUpIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldENvbGxlY3Rpb24oJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3B4bWwveG1sX29yZ2FuaXNtZS5waHAnLCBhcnJheSgndHlwZScgPT4gJHR5cGUpKSwgJ29yZ2FuaXNtZScpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXByZXV2ZXMoJG9yZ2FuaXNtZSwgJHR5cGUpCiAgICB7CiAgICAgICAgLy8gRXF1aXBlIC8gSW5kaXZpZHVlbGxlCiAgICAgICAgaWYgKCFpbl9hcnJheSgkdHlwZSwgYXJyYXkoJ0UnLCAnSScpKSkgewogICAgICAgICAgICAkdHlwZSA9ICdFJzsKICAgICAgICB9CiAKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENhY2hlZERhdGEoImVwcmV1dmVzX3skb3JnYW5pc21lfV97JHR5cGV9IiwgMzYwMCoyNCozMCwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJG9yZ2FuaXNtZSwgJHR5cGUpIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldENvbGxlY3Rpb24oJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3B4bWwveG1sX2VwcmV1dmUucGhwJywgYXJyYXkoJ3R5cGUnID0+ICR0eXBlLCAnb3JnYW5pc21lJyA9PiAkb3JnYW5pc21lKSksICdlcHJldXZlJyk7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREaXZpc2lvbnMoJG9yZ2FuaXNtZSwgJGVwcmV1dmUpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDYWNoZWREYXRhKCJkaXZpc2lvbnNfeyRvcmdhbmlzbWV9X3skZXByZXV2ZX0iLCAzNjAwKjI0KjMwLCBmdW5jdGlvbigkc2VydmljZSkgdXNlICgkb3JnYW5pc21lLCAkZXByZXV2ZSkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0Q29sbGVjdGlvbigkc2VydmljZS0+Z2V0RGF0YSgnaHR0cDovL3d3dy5mZnR0LmNvbS9tb2JpbGUvcHhtbC94bWxfZGl2aXNpb24ucGhwJywgYXJyYXkoJ29yZ2FuaXNtZScgPT4gJG9yZ2FuaXNtZSwgJ2VwcmV1dmUnID0+ICRlcHJldXZlLCApKSwgJ2RpdmlzaW9uJyk7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZW5jb250cmUoJGxpbmspCiAgICB7CiAgICAgICAgJHBhcmFtcyA9IGFycmF5KCk7CiAgICAgICAgcGFyc2Vfc3RyKCRsaW5rLCAkcGFyYW1zKTsKIAogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgicmVuY29udHJlXyIuc2hhMSgkbGluayksIDM2MDAqMjQqMSwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJHBhcmFtcykgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0T2JqZWN0KCRzZXJ2aWNlLT5nZXREYXRhKCdodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS9weG1sL3htbF9jaHBfcmVuYy5waHAnLCAkcGFyYW1zKSwgbnVsbCk7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMaWNlbmNlc0J5TmFtZSgkbm9tLCAkcHJlbm9tPSAnJykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENhY2hlZERhdGEoImxpY2VuY2VzX3skbm9tfV97JHByZW5vbX0iLCAzNjAwKjI0KjIsIGZ1bmN0aW9uKCRzZXJ2aWNlKSB1c2UgKCRub20sICRwcmVub20pIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldENvbGxlY3Rpb24oJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3B4bWwveG1sX2xpc3RlX2pvdWV1cl9vLnBocCcsIGFycmF5KCdub20nID0+IHN0cnRvdXBwZXIoJG5vbSksICdwcmVub20nID0+IHVjZmlyc3QoJHByZW5vbSkpKSwgJ2pvdWV1cicpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGljZW5jZXNCeUNsdWIoJGNsdWIpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDYWNoZWREYXRhKCJsaWNlbmNlc2NsdWJfeyRjbHVifSIsIDM2MDAqMjQqMiwgZnVuY3Rpb24oJHNlcnZpY2UpIHVzZSAoJGNsdWIpIHsKICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2U6OmdldENvbGxlY3Rpb24oJHNlcnZpY2UtPmdldERhdGEoJ2h0dHA6Ly93d3cuZmZ0dC5jb20vbW9iaWxlL3B4bWwveG1sX2xpc3RlX2pvdWV1cl9vLnBocCcsIGFycmF5KCdjbHViJyA9PiAkY2x1YikpLCAnam91ZXVyJyk7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMaWNlbmNlKCRsaWNlbmNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q2FjaGVkRGF0YSgibGljZW5jZV97JGxpY2VuY2V9IiwgMzYwMCoyNCoxLCBmdW5jdGlvbigkc2VydmljZSkgdXNlICgkbGljZW5jZSkgewogICAgICAgICAgICByZXR1cm4gU2VydmljZTo6Z2V0T2JqZWN0KCRzZXJ2aWNlLT5nZXREYXRhKCdodHRwOi8vd3d3LmZmdHQuY29tL21vYmlsZS9weG1sL3htbF9saWNlbmNlLnBocCcsIGFycmF5KCdsaWNlbmNlJyA9PiAkbGljZW5jZSkpLCAnbGljZW5jZScpOwogICAgICAgIH0pOwogICAgfQogCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldENhY2hlZERhdGEoJGtleSwgJGxpZmVUaW1lLCAkY2FsbGJhY2spCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+Y2FjaGUpIHsKICAgICAgICAgICAgcmV0dXJuICRjYWxsYmFjaygkdGhpcyk7CiAgICAgICAgfQogCiAgICAgICAgaWYgKGZhbHNlID09PSAoJGRhdGEgPSAkdGhpcy0+Y2FjaGUtPmZldGNoKCRrZXkpKSkgewogICAgICAgICAgICBpZiAoJHRoaXMtPmF1dG9Jbml0aWFsaXphdGlvbiAmJiBmYWxzZSA9PSAkdGhpcy0+Y2FjaGUtPmZldGNoKCRpbml0S2V5ID0gJ3htbF9pbml0aWFsaXNhdGlvbicpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+aW5pdGlhbGl6YXRpb24oKTsKICAgICAgICAgICAgICAgICR0aGlzLT5jYWNoZS0+c2F2ZSgkaW5pdEtleSwgJ2luaXQnLCAzNjAwKjQgKyBtdF9yYW5kKDAsIDM2MDAqNCkpOyAvLyBFbnRyZSA0IGV0IDhoCiAgICAgICAgICAgIH0KIAogICAgICAgICAgICAkZGF0YSA9ICRjYWxsYmFjaygkdGhpcyk7CiAgICAgICAgICAgICR0aGlzLT5jYWNoZS0+c2F2ZSgka2V5LCAkZGF0YSwgJGxpZmVUaW1lKTsKICAgICAgICB9CiAKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREYXRhKCR1cmwsICRwYXJhbXMgPSBudWxsKQogICAgewogICAgICAgIGlmICghZW1wdHkoJHBhcmFtcykpIHsKICAgICAgICAgICAgJHVybCAuPSAnPycgLiBodHRwX2J1aWxkX3F1ZXJ5KCRwYXJhbXMpOwogICAgICAgIH0KIAogICAgICAgIC8qJGNvbnRleHQgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoYXJyYXkoCiAgICAgICAgICAgICdzb2NrZXQnID0+IGFycmF5KCdiaW5kdG8nID0+ICgkdGhpcy0+aXBzb3VyY2UgPzogJzAnKS4nOjAnKSwKICAgICAgICAgICAgJ2h0dHAnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ3Byb3RvY29sX3ZlcnNpb24nID0+IDEuMSwKICAgICAgICAgICAgICAgICdoZWFkZXInID0+IGFycmF5KCJVc2VyLWFnZW50OiBNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbjMyKSIsCiAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwKICAgICAgICAgICAgICAgICAgICAiQWNjZXB0LUVuY29kaW5nOiBnemlwIiwKICAgICAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbjogQ2xvc2UiLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKQogICAgICAgICkpOwogCiAgICAgICAgLy8kZGF0YSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwsIGZhbHNlLCAkY29udGV4dCk7CiAgICAgICAgJHN0cmVhbSA9IGZvcGVuKCR1cmwsICdyJywgZmFsc2UsICRjb250ZXh0KTsKICAgICAgICAkZGF0YSA9IHN0cmVhbV9nZXRfY29udGVudHMoJHN0cmVhbSk7CiAgICAgICAgZmNsb3NlKCRzdHJlYW0pOyovCiAKICAgICAgICAkY3VybCA9IGN1cmxfaW5pdCgpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VSTCwgJHVybCk7CiAgICAgICAgaWYgKCR0aGlzLT5pcHNvdXJjZSkgewogICAgICAgICAgICBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9JTlRFUkZBQ0UsICR0aGlzLT5pcHNvdXJjZSk7CiAgICAgICAgfQogICAgICAgIGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSICwgdHJ1ZSk7CiAgICAgICAgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgYXJyYXkoCiAgICAgICAgICAgICJBY2NlcHQ6IiwgLy8gU3VwcmltZSBsZSBoZWFkZXIgcGFyIGRlZmF1bHQgZGUgY1VybCAoQWNjZXB0OiAqLyopCiAgICAgICAgICAgICJVc2VyLWFnZW50OiBNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbjMyKSIsCiAgICAgICAgICAgICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsCiAgICAgICAgICAgICJBY2NlcHQtRW5jb2Rpbmc6IGd6aXAiLAogICAgICAgICAgICAiQ29ubmVjdGlvbjogS2VlcC1BbGl2ZSIsCiAgICAgICAgKSk7CiAgICAgICAgJGRhdGEgPSBjdXJsX2V4ZWMoJGN1cmwpOwogICAgICAgIGN1cmxfY2xvc2UoJGN1cmwpOwogCiAgICAgICAgaWYgKCR0aGlzLT5sb2dnZXIpIHsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+bG9nKCR1cmwsICRkYXRhKTsKICAgICAgICB9CiAKICAgICAgICAkeG1sID0gc2ltcGxleG1sX2xvYWRfc3RyaW5nKCRkYXRhKTsKIAogICAgICAgIGlmICghJHhtbCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogCiAgICAgICAgLy8gUGV0aXRlIGFzdHVjZSBwb3VyIHRyYW5zZm9ybWVyIHNpbXBsZW1lbnQgbGUgWE1MIGVuIHRhYmxlYXUKICAgICAgICByZXR1cm4ganNvbl9kZWNvZGUoanNvbl9lbmNvZGUoJHhtbCksIHRydWUpOwogICAgfQogCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldENvbGxlY3Rpb24oJGRhdGEsICRrZXkgPSBudWxsKQogICAgewogICAgICAgIGlmIChlbXB0eSgkZGF0YSkpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICAgICAgfQogCiAgICAgICAgaWYgKCRrZXkpIHsKICAgICAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRkYXRhKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGRhdGEgPSAkZGF0YVska2V5XTsKICAgICAgICB9CiAKICAgICAgICByZXR1cm4gaXNzZXQoJGRhdGFbMF0pID8gJGRhdGEgOiBhcnJheSgkZGF0YSk7CiAgICB9CiAKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0T2JqZWN0KCRkYXRhLCAka2V5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJGtleSkgewogICAgICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkZGF0YSkgPyAkZGF0YVska2V5XSA6IG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCRkYXRhKSA/IG51bGwgOiAkZGF0YTsKICAgICAgICB9CiAgICB9CiAKfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/function.calculs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNrZWxldG9uIChjKSAyMDA4IAojICAgICAgYnkgUm9iZXJ0IEFsbGVuIChha3JhYmF0KSBhbmQKIyAgICAgICAgIFJvYmVydCBDYW1wYmVsbCAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgZGlzcGxheWluZyBjYWxlbmRhcnMsCiMgIGFuZCBtYW5hZ2VtZW50IGFuZCBkaXNwbGF5IG9mIHRpbWUgYmFzZWQgZXZlbnRzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgpmdW5jdGlvbiBDYWxjdWxFY2FydCgkZWNhcnQpCnsKCWlmKCRlY2FydCA+PTAgJiYgJGVjYXJ0IDwgMjUpIHsgJGVjYXJ0ID0gMTsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA+PTI1ICYmICRlY2FydCA8IDUwKXsgJGVjYXJ0ID0gMjsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA+PTUwICYmICRlY2FydCA8IDEwMCl7ICRlY2FydCA9IDM7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPj0xMDAgJiYgJGVjYXJ0IDwgMTUwKXsgJGVjYXJ0ID0gNDsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA+PTE1MCAmJiAkZWNhcnQgPCAyMDApeyAkZWNhcnQgPSA1OyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0ID49MjAwICYmICRlY2FydCA8IDMwMCl7ICRlY2FydCA9IDY7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPj0zMDAgJiYgJGVjYXJ0IDwgNDAwKXsgJGVjYXJ0ID0gNzsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA+PTQwMCAmJiAkZWNhcnQgPCA1MDApeyAkZWNhcnQgPSA4OyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0ID49NTAwKXsgJGVjYXJ0ID0gOTsgcmV0dXJuICRlY2FydDsgfQoJCQoJZWxzZWlmKCRlY2FydCA+IC0yNSAmJiAkZWNhcnQgPCAwKXskZWNhcnQgPSAtMTsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA8PSAtMjUgJiYgJGVjYXJ0ID4gLTUwKXskZWNhcnQgPSAtMjsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA8PSAtNTAgJiYgJGVjYXJ0ID4gLTEwMCl7JGVjYXJ0ID0gLTM7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPD0gLTEwMCAmJiAkZWNhcnQgPiAtMTUwKXskZWNhcnQgPSAtNDsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA8PSAtMTUwICYmICRlY2FydCA+IC0yMDApeyRlY2FydCA9IC01OyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0IDw9IC0yMDAgJiYgJGVjYXJ0ID4gLTMwMCl7JGVjYXJ0ID0gLTY7IHJldHVybiAkZWNhcnQ7IH0KCWVsc2VpZigkZWNhcnQgPD0gLTMwMCAmJiAkZWNhcnQgPiAtNDAwKXskZWNhcnQgPSAtNzsgcmV0dXJuICRlY2FydDsgfQoJZWxzZWlmKCRlY2FydCA8PSAtNDAwICYmICRlY2FydCA+IC01MDApeyRlY2FydCA9IC04OyByZXR1cm4gJGVjYXJ0OyB9CgllbHNlaWYoJGVjYXJ0IDw9IC01MDApeyRlY2FydCA9IC05OyByZXR1cm4gJGVjYXJ0OyB9Cn0KCmZ1bmN0aW9uIENhbGN1bFBvaW50cygkZWNhcnQsJHZpY3RvaXJlLCRsb2NhdXgpIHsKJGdDbXMgPSBjbXNtcygpOwkKaWYoJGxvY2F1eD09J0EnKSB7CgkKCWlmKCRlY2FydCA9PTEpCgl7CgkJaWYoJHZpY3RvaXJlID09ICdBQkNEJykKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkkcmVzdWx0WzBdID0gNjsKCQkgICAgICAgIC8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ3ZpY05vcm0wXzI0Jyk7CgkJCSRyZXN1bHRbMV0gPSAxOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJCSAKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCS8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ2RlZkFub3JtMF8yNCcpOwoJCQkkcmVzdWx0WzBdID0gLTU7CgkJCSRyZXN1bHRbMV0gPSAwOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PTIpCgl7CgkJaWYoJHZpY3RvaXJlID09ICdBQkNEJykKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkvLyRyZXN1bHRbMF0gPSBHZXRQcmVmZXJlbmNlKCd2aWNOb3JtMjVfNDknKTsKCQkJJHJlc3VsdFswXSA9IDUuNTsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQkJCgkJfQoJCWVsc2UKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkvLyRyZXN1bHRbMF0gPSBHZXRQcmVmZXJlbmNlKCdkZWZBbm9ybTI1XzQ5Jyk7CgkJCSRyZXN1bHRbMF0gPSAtNjsKCQkJJHJlc3VsdFsxXSA9IDA7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09MykKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCS8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ3ZpY05vcm01MF85OScpOwoJCQkkcmVzdWx0WzBdID0gNTsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCS8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ2RlZkFub3JtNTBfOTknKTsKCQkJJHJlc3VsdFswXSA9IC03OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT00KQoJewoJCWlmKCR2aWN0b2lyZSA9PSAnQUJDRCcpCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkvLwkkcmVzdWx0WzBdID0gR2V0UHJlZmVyZW5jZSgndmljTm9ybTEwMF8xNDknKTsKCQkJJHJlc3VsdFswXSA9IDQ7CgkJCSRyZXN1bHRbMV0gPSAxOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkvLyRyZXN1bHRbMF0gPSBHZXRQcmVmZXJlbmNlKCdkZWZBbm9ybTEwMF8xNDknKTsKCQkJJHJlc3VsdFswXSA9IC04OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT01KQoJewoJCWlmKCR2aWN0b2lyZSA9PSAnQUJDRCcpCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJLy8kcmVzdWx0WzBdID0gR2V0UHJlZmVyZW5jZSgndmljTm9ybTE1MF8xOTknKTsKCQkJJHJlc3VsdFswXSA9IDM7CgkJCSRyZXN1bHRbMV0gPSAxOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkvLyRyZXN1bHRbMF0gPSBHZXRQcmVmZXJlbmNlKCdkZWZBbm9ybTE1MF8xOTknKTsKCQkJJHJlc3VsdFswXSA9IC0xMDsKCQkJJHJlc3VsdFsxXSA9IDA7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09NikKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCS8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ3ZpY05vcm0yMDBfMjk5Jyk7CgkJCSRyZXN1bHRbMF0gPSAyOwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJLy8kcmVzdWx0WzBdID0gR2V0UHJlZmVyZW5jZSgnZGVmQW5vcm0yMDBfMjk5Jyk7CgkJCSRyZXN1bHRbMF0gPSAtMTIuNTsKCQkJJHJlc3VsdFsxXSA9IDA7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09NykKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCS8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ3ZpY05vcm0zMDBfMzk5Jyk7CgkJCSRyZXN1bHRbMF0gPSAxOwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJLy8kcmVzdWx0WzBdID0gR2V0UHJlZmVyZW5jZSgnZGVmQW5vcm0zMDBfMzk5Jyk7CgkJCSRyZXN1bHRbMF0gPSAtMTY7CgkJCSRyZXN1bHRbMV0gPSAwOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PTgpCgl7CgkJaWYoJHZpY3RvaXJlID09ICdBQkNEJykKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkvLyRyZXN1bHRbMF0gPSBHZXRQcmVmZXJlbmNlKCd2aWNOb3JtNDAwXzQ5OScpOwoJCQkkcmVzdWx0WzBdID0gMC41OwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJLy8kcmVzdWx0WzBdID0gR2V0UHJlZmVyZW5jZSgnZGVmQW5vcm00MDBfNDk5Jyk7CgkJCSRyZXN1bHRbMF0gPSAtMjA7CgkJCSRyZXN1bHRbMV0gPSAwOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PTkpCgl7CgkJaWYoJHZpY3RvaXJlID09ICdBQkNEJykKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkvLyRyZXN1bHRbMF0gPSBHZXRQcmVmZXJlbmNlKCd2aWNOb3JtUGx1czUwMCcpOwoJCQkkcmVzdWx0WzBdID0gMDsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCS8vJHJlc3VsdFswXSA9IEdldFByZWZlcmVuY2UoJ2RlZkFub3JtUGx1czUwMCcpOwoJCQkkcmVzdWx0WzBdID0gLTI5OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tMSkKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSA2OwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJJHJlc3VsdFswXSA9IC01OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tMikKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSA3OwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCQkKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAtNC41OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tMykKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSA4OwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJJHJlc3VsdFswXSA9IC00OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tNCkKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAxMDsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAtMzsKCQkJJHJlc3VsdFsxXSA9IDA7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09LTUpCgl7CgkJaWYoJHZpY3RvaXJlID09ICdBQkNEJykKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkkcmVzdWx0WzBdID0gMTM7CgkJCSRyZXN1bHRbMV0gPSAxOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQkkcmVzdWx0WzBdID0gLTI7CgkJCSRyZXN1bHRbMV0gPSAwOwoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS02KQoJewoJCWlmKCR2aWN0b2lyZSA9PSAnQUJDRCcpCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJJHJlc3VsdFswXSA9IDE3OwoJCQkkcmVzdWx0WzFdID0gMTsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkJJHJlc3VsdFswXSA9IC0xOwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tNykKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAyMjsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAtMC41OwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tOCkKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAyODsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAwOwoJCQkkcmVzdWx0WzFdID0gMDsKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tOSkKCXsKCQlpZigkdmljdG9pcmUgPT0gJ0FCQ0QnKQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSA0MDsKCQkJJHJlc3VsdFsxXSA9IDE7CgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCA9IGFycmF5KCk7CgkJCSRyZXN1bHRbMF0gPSAwOwoJCQkkcmVzdWx0WzFdID0gMDsKCQl9Cgl9Cn0KZWxzZWlmKCRsb2NhdXg9PSdCJyl7CglpZigkZWNhcnQgPT0xKQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSA2OwoJCSRyZXN1bHRbMV0gPSAxOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJCSAKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTU7CgkJJHJlc3VsdFsxXSA9IDE7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PTIpCnsKCWlmKCR2aWN0b2lyZSA9PSAnV1hZWicpCgl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHJlc3VsdFswXSA9IDUuNTsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCQkKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTY7CgkJJHJlc3VsdFsxXSA9IDA7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PTMpCnsKCWlmKCR2aWN0b2lyZSA9PSAnV1hZWicpCgl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHJlc3VsdFswXSA9IDU7CgkJJHJlc3VsdFsxXSA9IDE7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgllbHNlCgl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHJlc3VsdFswXSA9IC03OwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CmVsc2VpZigkZWNhcnQgPT00KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSA0OwoJCSRyZXN1bHRbMV0gPSAxOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQoJZWxzZQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAtODsKCQkkcmVzdWx0WzFdID0gMDsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQplbHNlaWYoJGVjYXJ0ID09NSkKewoJaWYoJHZpY3RvaXJlID09ICdXWFlaJykKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gMzsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTEwOwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CmVsc2VpZigkZWNhcnQgPT02KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAyOwoJCSRyZXN1bHRbMV0gPSAxOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQoJZWxzZQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAtMTIuNTsKCQkkcmVzdWx0WzFdID0gMDsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQplbHNlaWYoJGVjYXJ0ID09NykKewoJaWYoJHZpY3RvaXJlID09ICdXWFlaJykKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gMTsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTE2OwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CmVsc2VpZigkZWNhcnQgPT04KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAwLjU7CgkJJHJlc3VsdFsxXSA9IDE7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgllbHNlCgl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHJlc3VsdFswXSA9IC0yMDsKCQkkcmVzdWx0WzFdID0gMDsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQplbHNlaWYoJGVjYXJ0ID09OSkKewoJaWYoJHZpY3RvaXJlID09ICdXWFlaJykKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gMDsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCQkKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTI5OwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CmVsc2VpZigkZWNhcnQgPT0tMSkKewoJaWYoJHZpY3RvaXJlID09ICdXWFlaJykKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gNjsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTU7CgkJJHJlc3VsdFsxXSA9IDA7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PS0yKQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSA3OwoJCSRyZXN1bHRbMV0gPSAxOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJCQoJfQoJZWxzZQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAtNC41OwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CmVsc2VpZigkZWNhcnQgPT0tMykKewoJaWYoJHZpY3RvaXJlID09ICdXWFlaJykKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gODsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTQ7CgkJJHJlc3VsdFsxXSA9IDA7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PS00KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAxMDsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTM7CgkJJHJlc3VsdFsxXSA9IDA7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PS01KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAxMzsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTI7CgkJJHJlc3VsdFsxXSA9IDA7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PS02KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAxNzsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTE7CgkJJHJlc3VsdFsxXSA9IDA7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KZWxzZWlmKCRlY2FydCA9PS03KQp7CglpZigkdmljdG9pcmUgPT0gJ1dYWVonKQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAyMjsKCQkkcmVzdWx0WzFdID0gMTsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCWVsc2UKCXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkcmVzdWx0WzBdID0gLTAuNTsKCQkkcmVzdWx0WzFdID0gMDsKCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQplbHNlaWYoJGVjYXJ0ID09LTgpCnsKCWlmKCR2aWN0b2lyZSA9PSAnV1hZWicpCgl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHJlc3VsdFswXSA9IDI4OwoJCSRyZXN1bHRbMV0gPSAxOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQoJZWxzZQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAwOwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CmVsc2VpZigkZWNhcnQgPT0tOSkKewoJaWYoJHZpY3RvaXJlID09ICdXWFladycpCgl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHJlc3VsdFswXSA9IDQwOwoJCSRyZXN1bHRbMV0gPSAxOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQoJZWxzZQoJewoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN1bHRbMF0gPSAwOwoJCSRyZXN1bHRbMV0gPSAwOwoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CgkKfQp9CQoKCgpmdW5jdGlvbiBDYWxjdWxQb2ludHNJbmRpdnMoJGVjYXJ0LCR2aWN0b2lyZSkgewoKCQoJCWlmKCRlY2FydCA9PTEpCgl7CgkJaWYoICR2aWN0b2lyZSA9PSAxKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSA2OwkJCgkJCXJldHVybiAkcmVzdWx0OwoJCQkgCgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTU7CgkJCQoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PTIpCgl7CgkJaWYoICR2aWN0b2lyZSA9PTEpCgkJewoJCQkKCQkJJHJlc3VsdCA9IDUuNTsKCQkJCgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQkJCgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTY7CgkJCQoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PTMpCgl7CgkJaWYoJHZpY3RvaXJlID09MSkKCQl7CgkJCQoJCQkkcmVzdWx0ID0gNTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTc7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT00KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSA0OwoJCQkKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkKCQkJJHJlc3VsdCA9IC04OwoJCQkKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT01KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAzOwoJCQkKCQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkKCQkJJHJlc3VsdCA9IC0xMDsKCQkJCgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09NikKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgkJCQoJCQkkcmVzdWx0ID0gMjsKCQkJCgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAtMTIuNTsKCQkJCgkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09NykKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgkJCQoJCQkkcmVzdWx0ID0gMTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTE2OwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09OCkKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgkJCQoJCQkkcmVzdWx0ID0gMC41OwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAtMjA7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT05KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAwOwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAtMjk7CQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS0xKQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSA2OwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAtNTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydD09LTIpCgl7CgkJaWYoICR2aWN0b2lyZSA9PTEpCgkJewoJCQkKCQkJJHJlc3VsdCA9IDc7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCQkKCQl9CgkJZWxzZQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAtNC41OwkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tMykKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgkJCQoJCQkkcmVzdWx0ID0gODsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTQ7CgkJCQoJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS00KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAxMDsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTM7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCWVsc2VpZigkZWNhcnQgPT0tNSkKCXsKCQlpZiggJHZpY3RvaXJlID09MSkKCQl7CgkJCQoJCQkkcmVzdWx0ID0gMTM7CQkJCgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlCgkJewoJCQkKCQkJJHJlc3VsdCA9IC0yOwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CgllbHNlaWYoJGVjYXJ0ID09LTYpCgl7CgkJaWYoICR2aWN0b2lyZSA9PTEpCgkJewoJCQkKCQkJJHJlc3VsdCA9IDE3OwkJCQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAtMTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS03KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAyMjsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gLTAuNTsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS04KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSAyODsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gMDsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJZWxzZWlmKCRlY2FydCA9PS05KQoJewoJCWlmKCAkdmljdG9pcmUgPT0xKQoJCXsKCQkJCgkJCSRyZXN1bHQgPSA0MDsJCQkKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCWVsc2UKCQl7CgkJCQoJCQkkcmVzdWx0ID0gMDsKCQkJCgkJfQoJfQoKfQpmdW5jdGlvbiBwbGF5ZXJFeGlzdHMgKCR1c2VybmFtZSwkcHRzKXsKCSAkZGIgID0gY21zbXMoKS0+R2V0RGIoKTsKCSRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLgoJJ21vZHVsZV9waW5nX2pvdWV1cnMgV0hFUkUgdXNlcm5hbWUgPSA/JzsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoICR1c2VybmFtZSApKTsKCQoJLy8xZXJlIGNvbmRpdGlvbiA6IHBhcyBkZSBjb3JyZXNwb25kYW5jZSA6IGxlIGpvdWV1ciBuJ2V4aXN0ZSBwYXMgOiBvbiBsJ2luc8OocmUgCglpZigkZGJyZXN1bHQgICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA9PSAwKSB7CgkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIChpZCwgdXNlcm5hbWUsIHB0cykgVkFMVUVTICgnJywgPywgPykiOwoJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdXNlcm5hbWUsJHB0cykpOwoJfQoJLyogTGUgam91ZXVyIGV4aXN0ZSBkw6lqw6AgKi8KCS8qIG9uIHZhIHbDqXJpZmllciBzaSBsZSBub21icmUgZGUgcG9pbnRzIGNvcnJlc3BvbmQgb3UgcGFzICovCglpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkgewoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIHVzZXJuYW1lID0gPyBBTkQgcHRzID0/IjsKCQkkZGJyZXRvdXIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkdXNlcm5hbWUsJHB0cykpOwoJLyogTGUgam91ZXVyIGV4aXN0ZSBldCBsZXMgcG9pbnRzIGNvcnJlc3BvbmRlbnQgb24gbmUgZmFpdCByaWVuKi8JCgkJaWYoJGRicmV0b3VyICYmICRkYnJldG91ci0+UmVjb3JkQ291bnQoKSA+IDApewoJCQl9CgkJCWVsc2V7CgkJCQkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFNFVCBwdHMgPSA/IFdIRVJFIHVzZXJuYW1lID0gPyI7CgkJCQkkcmVzdWx0MiA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwdHMsICR1c2VybmFtZSkpOwoJCQl9CgkJCS8vIGluc2NyaXB0aW9uIGRzIGxhIHRhYmxlIGRlcyBjbGFzc2VtZW50cyAKCQkJJG1vaXNfY291cmFudCA9IGRhdGUoIm4iKTsKCQkJJHNhaXNvbiA9ICcyMDEzLTIwMTQnOwoJCS8vCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2x0cyAoaWQsIHVzZXJuYW1lLCBwdHMsIG1vaXMsc2Fpc29uKSBWQUxVRVMgKCcnLD8sPyw/LD8pIjsKCQkvLwkkcmVzdWx0MyA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR1c2VybmFtZSwkcHRzLCRtb2lzX2NvdXJhbnQsICRzYWlzb24pKTsKCQl9Cgl9CgoKZnVuY3Rpb24gY29tcGV0ICgkY29tcGV0aXRpb24pewoJJGRiICA9IGNtc21zKCktPkdldERiKCk7CiRxdWVyeSA9IlNFTEVDVCBjb2VmZmljaWVudCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jb21wZXRpdGlvbnMgV0hFUkUgY29kZV9jb21wZXQgPSA/IjsKJGRicmV0b3VyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGNvbXBldGl0aW9uKSk7CmlmICgkZGJyZXRvdXIgJiYgJGRicmV0b3VyLT5SZWNvcmRDb3VudCgpID4gMCkKICB7CiAgICB3aGlsZSAoJHJvdz0gJGRicmV0b3VyLT5GZXRjaFJvdygpKQogICAgICB7CgkkY29lZmYgPSAkcm93Wydjb2VmZmljaWVudCddOwoJcmV0dXJuICRjb2VmZjsKCX0KCQp9Cn0KCmZ1bmN0aW9uIENoZXJjaGVQdHMgKCRqb3VldXIpewoJJGRiICA9IGNtc21zKCktPkdldERiKCk7CgkkcXVlcnkgPSAiU0VMRUNUIHB0cyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIFdIRVJFIHVzZXJuYW1lID0gPyI7CQoJJGRicmV0b3VyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGpvdWV1cikpOwoJaWYgKCRkYnJldG91ciAmJiAkZGJyZXRvdXItPlJlY29yZENvdW50KCkgPiAwKQogIAkJewogICAgCQkJd2hpbGUgKCRyb3c9ICRkYnJldG91ci0+RmV0Y2hSb3coKSkKICAgICAgCQkJewoJCQkJJHB0cyA9ICRyb3dbJ3B0cyddOwoJCQkJcmV0dXJuICRwdHM7CgkJCX0KCQoJCX0KfQoKZnVuY3Rpb24gbmJqb3VldXJzICgkY29tcGV0aXRpb24pewoJJGRiICA9IGNtc21zKCktPkdldERiKCk7CiRxdWVyeSA9IlNFTEVDVCBqb3VldXJzLCBwYXJ0aWVzIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NvbXBldGl0aW9ucyBXSEVSRSBjb2RlX2NvbXBldCA9ID8iOwokZGJyZXRvdXIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkY29tcGV0aXRpb24pKTsKaWYgKCRkYnJldG91ciAmJiAkZGJyZXRvdXItPlJlY29yZENvdW50KCkgPiAwKQogIHsKICAgIHdoaWxlICgkcm93PSAkZGJyZXRvdXItPkZldGNoUm93KCkpCiAgICAgIHsKCSRyZXN1bHRbXSA9ICRyb3dbJ2pvdWV1cnMnXTsKCSRyZXN1bHRbXSA9ICRyb3dbJ3BhcnRpZXMnXTsKCXJldHVybiAkcmVzdWx0OwoJCgl9CgkKfQp9CgpmdW5jdGlvbiBkcm9wZG93biAoJGNvbXBldGl0aW9uKXsKCSRkYiAgPSBjbXNtcygpLT5HZXREYigpOwokcXVlcnkgPSJTRUxFQ1Qgam91ZXVycyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jb21wZXRpdGlvbnMgV0hFUkUgY29kZV9jb21wZXQgPSA/IjsKJGRicmV0b3VyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGNvbXBldGl0aW9uKSk7CmlmICgkZGJyZXRvdXIgJiYgJGRicmV0b3VyLT5SZWNvcmRDb3VudCgpID4gMCkKICB7CiAgICB3aGlsZSAoJHJvdz0gJGRicmV0b3VyLT5GZXRjaFJvdygpKQogICAgICB7Cgkkam91ZXVycyA9ICRyb3dbJ2pvdWV1cnMnXTsKCXJldHVybiAkam91ZXVyczsKCX0KCQp9Cn0KCmZ1bmN0aW9uIHJhbmRvbSgkY2FyKSB7CiRzdHJpbmcgPSAiIjsKJGNoYWluZSA9ICJhYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHkiOwpzcmFuZCgoZG91YmxlKW1pY3JvdGltZSgpKjEwMDAwMDApOwpmb3IoJGk9MDsgJGk8JGNhcjsgJGkrKykgewokc3RyaW5nIC49ICRjaGFpbmVbcmFuZCgpJXN0cmxlbigkY2hhaW5lKV07Cn0KcmV0dXJuICRzdHJpbmc7Cn0KCmZ1bmN0aW9uIGNvZWZmICgkdHlwZUNvbXBldGl0aW9uKXsKCSRkYiAgPSBjbXNtcygpLT5HZXREYigpOwovKgkKCWlmKHN1YnN0cl9jb3VudCgkdHlwZUNvbXBldGl0aW9uLCctJyk+MCl7CgkJJHR5cGVfaW50ZXIgPSBleHBsb2RlKCctJywkdHlwZUNvbXBldGl0aW9uLDIpOwoJCSR0eXBlID0gJHR5cGVfaW50ZXJbMF07Cgl9CgllbHNlIHsKCQkkdHlwZSA9ICR0eXBlQ29tcGV0aXRpb247Cgl9CiovCiRxdWVyeSA9IlNFTEVDVCBjb2VmZmljaWVudCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyBXSEVSRSBuYW1lID0gPyI7CiRkYnJldG91ciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR0eXBlQ29tcGV0aXRpb24pKTsKaWYgKCRkYnJldG91ciAmJiAkZGJyZXRvdXItPlJlY29yZENvdW50KCkgPiAwKQogIHsKICAgIHdoaWxlICgkcm93PSAkZGJyZXRvdXItPkZldGNoUm93KCkpCiAgICAgIHsKCSRjb2VmZiA9ICRyb3dbJ2NvZWZmaWNpZW50J107CglyZXR1cm4gJGNvZWZmOwoJfQoJCn0KZWxzZXsKCSRjb2VmZiA9IDA7CglyZXR1cm4gY29lZmY7CgkvL2VjaG8gImNvZWZmaWNpZW50IGludHJvdXZhYmxlICEiOwp9Cn0KCmZ1bmN0aW9uIGNvZWZmX29sZCAoJGNsZSl7CgkkZGIgID0gY21zbXMoKS0+R2V0RGIoKTsKJHF1ZXJ5ID0iU0VMRUNUIGNvZWZmaWNpZW50IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NvbXBldGl0aW9ucyBBUyBjb21wLCAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVuY29udHJlcyBBUyByZW4gV0hFUkUgY29tcC5jb2RlX2NvbXBldCA9IHJlbi50eXBlX2NvbXBldCBBTkQgcmVuLmNsZSA9ICA/IjsKJGRicmV0b3VyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGNsZSkpOwppZiAoJGRicmV0b3VyICYmICRkYnJldG91ci0+UmVjb3JkQ291bnQoKSA+IDApCiAgewogICAgd2hpbGUgKCRyb3c9ICRkYnJldG91ci0+RmV0Y2hSb3coKSkKICAgICAgewoJJGNvZWZmID0gJHJvd1snY29lZmZpY2llbnQnXTsKCXJldHVybiAkY29lZmY7Cgl9CgkKfQplbHNlewoJZWNobyAiY29lZmZpY2llbnQgaW50cm91dmFibGUgISI7Cn0JCQpmdW5jdGlvbiBkYXRldmVyc2ZyICgkZGF0ZSl7CSAgIAoJJGRhdGVhcnIgPSBleHBsb2RlKCcvJywgJGRhdGUpOwoJJGRhdGVmciA9ICRkYXRlYXJyWzJdIC4gJy0nIC4gJGRhdGVhcnJbMV0gLiAnLScgLiAkZGF0ZWFyclswXTsKCXJldHVybiAkZGF0ZWZyOwoJfQp9CmZ1bmN0aW9uIG1vaXNfZnJhbmNhaXMoJG1vaXMsJGxvbmd1ZXVyKXsKCWlmKCFpc3NldCgkbG9uZ3VldXIpIHx8ICRsb25ndWV1ciA9PScnKXsKCQkkbW9udGhzID0gYXJyYXkoIkphbnZpZXIiLCAiRsOpdnJpZXIiLCAiTWFycyIsICJBdnJpbCIsICJNYWkiLCAiSnVpbiIsICJqdWlsbGV0IiwgIkFvdXQiLCAiU2VwdGVtYnJlIiwgIk9jdG9icmUiLCAiTm92ZW1icmUiLCAiZMOpY2VtYnJlIik7Cgl9CgllbHNlCgl7CgkJJG1vbnRocyA9IGFycmF5KCJKYW4iLCAiRsOpdiIsICJNYXIiLCAiQXZyIiwgIk1haSIsICJKdWluIiwgImp1aWwiLCAiQW91IiwgIlNlcCIsICJPY3QiLCAiTm92IiwgImTDqWMiKTsKCX0KCSRtb250aF90b19kaXNwbGF5ID0gJG1vaXMtMTsKCSRtb250aF9mcmFuY2FpcyA9ICRtb250aHNbIiRtb250aF90b19kaXNwbGF5Il07CglyZXR1cm4gJG1vbnRoX2ZyYW5jYWlzOwp9CgpmdW5jdGlvbiBnZXRfbmFtZSgkbm9tKXsKCSRleHBsb3Npb24gPSBleHBsb2RlKCcgJywkbm9tKTsKCSRjb21wdGV1ciA9IGNvdW50KCRleHBsb3Npb24pOwoJJG5hbWUgPSBhcnJheSgpOwoJJHByZW5vbSA9IGFycmF5KCk7CgkKCSRpID0wOwoJZm9yZWFjaCAoJGV4cGxvc2lvbiBhcyAkdGVzdGNhc2UpIHsKCSRpKys7CQoJICBpZiAoY3R5cGVfdXBwZXIoJHRlc3RjYXNlKSkgewoJICAgICRuYW1lWyRpXSA9ICR0ZXN0Y2FzZTsKCQkvL2VjaG8gIkxhIGNoYcOubmUiLiRpLiIgJHRlc3RjYXNlIG5lIGNvbnRpZW50IHF1ZSBkZXMgbWFqdXNjdWxlcy5cbiI7CgkgIH0gZWxzZSB7CgkgICAvLyBlY2hvICJMYSBjaGHDrm5lIi4kaS4iICR0ZXN0Y2FzZSBuZSBjb250aWVudCBwYXMgcXVlIGRlcyBtYWp1c2N1bGVzLlxuIjsKCQkkcHJlbm9tWyRpXSA9ICR0ZXN0Y2FzZTsKCSAgfQoJfQoJCgkkbm9tX2ZpbmFsID0gaW1wbG9kZSggJyAnLCRuYW1lKTsKCSRwcmVub21fZmluYWwgPSBpbXBsb2RlKCcgJywkcHJlbm9tKTsKCSRyZXN1bHRbMF0gPSAkbm9tX2ZpbmFsOwoJJHJlc3VsdFsxXSA9ICRwcmVub21fZmluYWw7CglyZXR1cm4gJHJlc3VsdDsKCQp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFBpbmcKIyBWZXJzaW9uOiAwLjIsIENsYXVkZSBTSU9IQU4gQWdpIHdlYmNvbnNlaWwKIyBNZXRob2Q6IEluc3RhbGwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDggYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3NrZWxldG9uLwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovKioKICogRm9yIHNlcGFyYXRlZCBtZXRob2RzLCB5b3UnbGwgYWx3YXlzIHdhbnQgdG8gc3RhcnQgd2l0aCB0aGUgZm9sbG93aW5nCiAqIGxpbmUgd2hpY2ggY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgbWV0aG9kIHdhcyBjYWxsZWQgZnJvbSB0aGUgbW9kdWxlCiAqIEFQSSwgYW5kIHRoYXQgZXZlcnl0aGluZydzIHNhZmUgdG8gY29udGludWU6CiAqLyAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKLyoqIAogKiBBZnRlciB0aGlzLCB0aGUgY29kZSBpcyBpZGVudGljYWwgdG8gdGhlIGNvZGUgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUKICogd3JhcHBlZCBpbiB0aGUgSW5zdGFsbCgpIG1ldGhvZCBpbiB0aGUgbW9kdWxlIGJvZHkuCiAqLwoKJGRiID0gJGdDbXMtPkdldERiKCk7CgovLyBteXNxbC1zcGVjaWZpYywgYnV0IGlnbm9yZWQgYnkgb3RoZXIgZGF0YWJhc2UKJHRhYm9wdGFycmF5ID0gYXJyYXkoICdteXNxbCcgPT4gJ0VOR0lORT1NeUlTQU0nICk7CgokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCi8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgokZmxkcyA9ICIKCWlkIEkoMTEpIEFVVE8gS0VZLAoJYWN0aWYgSSgxKSwKCWxpY2VuY2UgSSgxMSksCglub20gQygyNTUpLAoJcHJlbm9tIEMoMjU1KSwKCXB0cyBJKDExKSwKCWJpcnRoZGF5IEQsCglzZXhlIEMoMSksCgl0eXBlIEMoMSksCgljZXJ0aWYgQygyNTUpLAoJdmFsaWRhdGlvbiBELAoJZWNoZWxvbiBDKDEpLAoJcGxhY2UgSSg0KSwKCXBvaW50IEkoNCksCgljYXQgQyg1KSwKCWFkcmVzc2UgQygyNTUpLAoJdmlsbGUgQygyNTUpLAoJY29kZXBvc3RhbCBDKDUpICI7CgkJCQovLyBjcmVhdGUgaXQuIAokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyIsCgkJCQkgICAkZmxkcywgCgkJCQkgICAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiMKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CiRmbGRzPSAiaWQgSSgxMSkgS0VZIEFVVE8sCiAgICAgICAgc2Fpc29uIEMoMTAwKSwKCXBoYXNlIEkoMSksCglsaWJlcXVpcGUgQygyNTUpLAoJbGliZGl2aXNpb24gQygyNTUpLAoJZnJpZW5kbHluYW1lIEMoMjU1KSwKCWxpZW5kaXZpc2lvbiBDKDI1NSksCglpZHBvdWxlIEkoMTEpLAoJaWRkaXYgSSgxMSksCgl0eXBlX2NvbXBldCBDKDMpIERFRkFVTFQgJ1UnLAoJdGFnIEMoMjU1KSwKCWlkZXByZXV2ZSBDKDExKSI7Cgokc3FsYXJyYXk9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19lcXVpcGVzIiwKCQkJCSAgJGZsZHMsCgkJCQkgICR0YWJvcHRhcnJheSk7CgkJCQkKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwovL29uIGNyw6nDqSB1biBpbmRleCBwb3VyIMOpdml0ZXIgbGVzIGRvdWJsb25zCiRpZHhmbGRzID0gJ3NhaXNvbiwgbGliZXF1aXBlLCBsaWVuZGl2aXNpb24nOwokdGFibmFtZSA9IGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZXF1aXBlcyI7CiRpZHhuYW1lID0gJ3VuaWNpdGUnOwovLyRpZHhvcHRhcnJheSA9ICdVbmlxdWUnOwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoJ3VuaWNpdGUnLCAnZGVtb19tb2R1bGVfcGluZ19lcXVpcGVzJywgJ3NhaXNvbiwgbGliZXF1aXBlLCBsaWVuZGl2aXNpb24nKTsvLywgYXJyYXkoJ1VOSVFVRScpKTsKICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Ci8vdW5lIG5vdXZlbGxlIHRhYmxlIHBvdXIgbGVzIHZpY3RvaXJlcyBicnV0ZXMgKHBhcyBkZSB2aWN0b2lyZXMgZMOpdGFpbGzDqWVzIHBvdXIgbCdpbnN0YW50KQokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCi8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgokZmxkcyA9ICIKCWlkIEkoMTEpIEFVVE8gS0VZLAoJc2Fpc29uIEMoMjU1KSwKCWRhdGVtYWogIi4gQ01TX0FET0RCX0RUIC4iLAoJbGljZW5jZSBJKDExKSwKCWRhdGVfZXZlbnQgRCwKCWVwcmV1dmUgQygyNTUpLAoJbm9tIEMoMjU1KSwKCW51bWpvdXJuIEkoMTEpLAoJY2xhc3NlbWVudCBJKDQpLAoJdmljdG9pcmUgSSgxKSwKCWVjYXJ0IE4oNi4yKSwKCXR5cGVfZWNhcnQgSSgxMSksCgljb2VmZiBOKDMuMiksCglwb2ludHJlcyBOKDUuMyksCglmb3JmYWl0IEkoMSkgIjsKCQkJCi8vIGNyZWF0ZSBpdC4gCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQiLAoJCQkJICAgJGZsZHMsIAoJCQkJICAgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy91bmUgbm91dmVsbGUgdGFibGUgcG91ciBsZXMgcG9pbnRzCgokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCi8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgokZmxkcyA9ICIKCWlkIEkoMTEpICBBVVRPIEtFWSwKCXNhaXNvbiBDKDI1NSksCglsaWNlbmNlIEkoMTEpLAoJYWR2bGljIEkoMTEpLAoJdmQgSSwKCW51bWpvdXJuIEkoMiksCgljb2RlY2hhbXAgQygzKSwKCWRhdGVfZXZlbnQgRCwKCWFkdnNleGUgQygzKSwKCWFkdm5vbXByZSBDKDI1NSksCglwb2ludHJlcyBOKDYuMyksCgljb2VmY2hhbXAgTigzLjIpLAoJYWR2Y2xhb2YgQyg0KSI7CgkJCQovLyAKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXMiLAoJCQkJICAgJGZsZHMsIAoJCQkJICAgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy8KJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CgovLyB0YWJsZSBzY2hlbWEgZGVzY3JpcHRpb24KJGZsZHMgPSAiCglpZCBJKDExKSBBVVRPIEtFWSwKCXNhaXNvbiBDKDI1NSksCglkYXRlbWFqICIuIENNU19BRE9EQl9EVCAuIiwKCWxpY2VuY2UgSSgxMSksCglzaXRfbWVucyBDKDIwMCksCglmZnR0IEkoMTEpLAoJbWFqX2ZmdHQgRCwKCXNwaWQgSSgxMSksCglzcGlkX3RvdGFsIEkoMTEpLAoJbWFqX3NwaWQgRCwKCW1hal90b3RhbCBJKDExKSI7CgkJCQovLyBjcmVhdGUgaXQuIAokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXBfcGFydGllcyIsCgkJCQkgICAkZmxkcywgCgkJCQkgICAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CgovLyB0YWJsZSBzY2hlbWEgZGVzY3JpcHRpb24KJGZsZHMgPSAiCiAgICAgaWQgSSgxMSkgQVVUTyBLRVksCglzYWlzb24gQygyNTUpLAoJaWRwb3VsZSBJKDExKSwKCWlkZGl2IEkoMTEpLAoJY2x1YiBJKDEpLAoJdG91ciBJKDIpLAoJZGF0ZV9ldmVudCBELAoJYWZmaWNoZSBMLCAKCXVwbG9hZGVkIEkoMSksCglsaWJlbGxlIEMoMjU1KSwKCWVxdWEgQygyNTUpLAoJZXF1YiBDKDI1NSksCglzY29yZWEgSSgyKSwKCXNjb3JlYiBJKDIpLAoJbGllbiBDKDI1NSkiOwoJCQkKLy8gY3JlYXRlIGl0LiAKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIiwKCQkJCSAgICRmbGRzLCAKCQkJCSAgICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCiR0YWJvcHRhcnJheSA9IGFycmF5KCAnbXlzcWwnID0+ICdFTkdJTkU9TXlJU0FNJyApOwoKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CgovLyB0YWJsZSBzY2hlbWEgZGVzY3JpcHRpb24KJGZsZHMgPSAiCglpZCBJKDExKSBBVVRPIEtFWSwKCWRhdGVjcmVhdGVkICIuIENNU19BRE9EQl9EVCAuIiwKCWRhdGVtYWogIi4gQ01TX0FET0RCX0RUIC4iLAoJc2Fpc29uIEMoMjU1KSwKCW1vaXMgSSgyKSwKCWFubmVlIEkoNCksCglwaGFzZSBJKDEpLAoJbGljZW5jZSBJKDExKSwKCWNhdGVnIEMoMTApLAoJbm9tIEMoMjU1KSwKCXByZW5vbSBDKDI1NSksCglwb2ludHMgTig2LjIpLAoJY2xuYXQgSSgxMSksCglyYW5ncmVnIEkoMTEpLAoJcmFuZ2RlcCBJKDExKSwKCXByb2dtb2lzIE4oNi4yKSI7CgkJCQovLyBjcmVhdGUgaXQuIAokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfc2l0X21lbnMiLAoJCQkJICAgJGZsZHMsIAoJCQkJICAgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy8KJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CgovLyB0YWJsZSBzY2hlbWEgZGVzY3JpcHRpb24KJGZsZHMgPSAiCglpZCBJKDExKSBBVVRPIEtFWSwKCWRhdGVjcmVhdGVkICIuIENNU19BRE9EQl9EVCAuIiwKCWRhdGVtYWogIi4gQ01TX0FET0RCX0RUIC4iLAoJbW9pcyBJKDIpLAoJYW5uZWUgSSg0KSwKCXBoYXNlIEkoMSksCglsaWNlbmNlIEkoMTEpLAoJY2F0ZWcgQygxMCksCglub20gQygyNTUpLAoJcHJlbm9tIEMoMjU1KSwKCXBvaW50cyBOKDYuMiksCgljbG5hdCBJKDExKSwKCXJhbmdyZWcgSSgxMSksCglyYW5nZGVwIEkoMTEpLAoJcHJvZ21vaXMgTig2LjIpIjsKCQkJCi8vIGNyZWF0ZSBpdC4gCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19hZHZlcnNhaXJlcyIsCgkJCQkgICAkZmxkcywgCgkJCQkgICAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCi8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgokZmxkcyA9ICIKCWlkIEkoMTEpIEFVVE8gS0VZLAoJc2Fpc29uIEMoMjU1KSwKCXR5cGVfY29tcGV0IEMoMyksCglkYXRlX2RlYnV0IEQsCglkYXRlX2ZpbiBELAoJaWRkaXYgSSgxMSksCglpZHBvdWxlIEkoMTEpLAoJbnVtam91cm4gSSgxMSksCgl0YWcgQygyNTUpLAoJaWRlcHJldXZlIEkoMTEpIjsKCQkJCi8vIGNyZWF0ZSBpdC4gCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jYWxlbmRyaWVyIiwKCQkJCSAgICRmbGRzLCAKCQkJCSAgICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCgovL2Nyw6lhdGlvbiBkJ3VuIGluZGV4IHVuaXF1ZSA6IAovL0NSRUFURSBVTklRVUUgSU5ERVggbm9kb3VibG9ucyBPTiBwaW5nX21vZHVsZV9waW5nX3NpdF9tZW5zIChsaWNlbmNlLCBtb2lzLCBhbm5lZSk7CgovLyB0YWJsZSBzY2hlbWEgZGVzY3JpcHRpb24KJGZsZHMgPSAiCglpZCBJKDExKSBBVVRPIEtFWSwKCWRhdGVjcmVhdGVkICIuIENNU19BRE9EQl9EVCAuIiwKCWRhdGVtYWogIi4gQ01TX0FET0RCX0RUIC4iLAoJbGljZW5jZSBJKDExKSwKCXR5cGVfY29udGFjdCBDKDI1NSksCgljb250YWN0IEMoMjU1KSwKCWRlc2NyaXB0aW9uIEMoMjU1KSI7CgkJCQovLyBjcmVhdGUgaXQuIAokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY29tbSIsCgkJCQkgICAkZmxkcywgCgkJCQkgICAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovLyB0YWJsZSBzY2hlbWEgZGVzY3JpcHRpb24KJGZsZHMgPSAiCglpZCBJKDExKSBBVVRPIEtFWSwKCWRhdGVjcmVhdGVkICIuIENNU19BRE9EQl9EVCAuIiwKCXN0YXR1cyBDKDI1NSksCglkZXNpZ25hdGlvbiBDKDI1NSksCglhY3Rpb24gQygyNTUpIjsKCQkJCi8vIGNyZWF0ZSBpdC4gCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZWN1cCIsCgkJCQkgICAkZmxkcywgCgkJCQkgICAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovL3RhYmxlIHR5cGVfY29tcGV0aXRpb25zCiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwokZmxkcyA9ICIKCWlkIEkoMTEpIEFVVE8gS0VZLAoJbmFtZSBDKDI1NSksCgljb2RlX2NvbXBldCBDKDMpIFVOSVFVRSwKCWNvZWZmaWNpZW50IE4oMy4yKSwKCWluZGl2cyBMLAoJdGFnIEMoMjU1KSwKCWlkZXByZXV2ZSBJKDExKSwKCWlkb3JnYSBJKDExKSI7CgkJCQovLyBjcmVhdGUgaXQuIAokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMiLAoJCQkJICAgJGZsZHMsIAoJCQkJICAgJHRhYm9wdGFycmF5KTsKLy9jcsOpw6kgdW4gaW5kZXggc3VyIGxhIHRhYmxlCiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKIwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCi8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgokZmxkcyA9ICIKCWlkIEkoMTEpIEFVVE8gS0VZLAoJbGliZWxsZSBDKDI1NSksCglpZG9yZ2EgSSgxMSksCgljb2RlIEMoNSksCglzY29wZSBDKDEpIjsKCi8vIGNyZWF0ZSBpdC4gCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19vcmdhbmlzbWVzIiwKCQkJCSAgICRmbGRzLCAKCQkJCSAgICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKIwojIGNyZWF0ZSB0YWJsZSBkaXZpc2lvbnMKLy8gdGFibGUgc2NoZW1hIGRlc2NyaXB0aW9uCiRmbGRzID0gIgoJaWQgSSgxMSkgQVVUTyBLRVksCglpZG9yZ2EgSSgxMSksCglpZGVwcmV1dmUgSSgxMSksCglpZGRpdmlzaW9uIEkoMTEpLAoJbGliZWxsZSBDKDI1NSksCglzYWlzb24gQygyNTUpLAoJaW5kaXZzIEkoMSksCglzY29wZSBDKDEpLAoJdXBsb2FkZWQgQygxKSI7CgovLyBjcmVhdGUgaXQuIAokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZGl2aXNpb25zIiwKCQkJCSAgICRmbGRzLCAKCQkJCSAgICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKIwojIGNyZWF0ZSB0YWJsZSBkaXZfcG91bGVzLy9kZWJ1dCBkZSBsYSBjcsOpYXRpb24KLy8gdGFibGUgc2NoZW1hIGRlc2NyaXB0aW9uCiRmbGRzID0gIgoJaWQgSSgxMSkgQVVUTyBLRVksCglpZGVwcmV1dmUgSSgxMSksCglpZGRpdmlzaW9uIEkoMTEpLAoJbGliZWxsZSBDKDI1NSksCgl0b3VyIEkoMyksCgl0YWJsZWF1IEkoMTEpLAkKCWxpZW4gQygyNTUpLAoJc2Fpc29uIEMoMjU1KSwKCXVwbG9hZGVkIEkoMSkiOwoKLy8gY3JlYXRlIGl0LiAKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2Rpdl90b3VycyIsCgkJCQkkZmxkcywgCgkJCQkkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Ci8vb24gY3LDqcOpIHVuIGluZGV4IHN1ciBsYSB0YWJsZSBkaXZfcG91bGVzCiRpZHhvcHRhcnJheSA9IGFycmF5KCdVTklRVUUnKTsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZUluZGV4U1FMKGNtc19kYl9wcmVmaXgoKS4nZGl2X3RvdXJzJywKCSAgICBjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9waW5nX2Rpdl9wb3VsZXMnLCAnaWRlcHJldXZlLCBpZGRpdmlzaW9uLCB0YWJsZWF1JywkaWR4b3B0YXJyYXkpOwoJICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKIwojIGNyZWF0ZSB0YWJsZSBkaXZfY2xhc3NlbWVudC8vZGVidXQgZGUgbGEgY3LDqWF0aW9uCi8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgokZmxkcyA9ICIKCWlkIEkoMTEpIEFVVE8gS0VZLAoJaWRlcHJldXZlIEkoMTEpLAoJaWRkaXZpc2lvbiBJKDExKSwKCXRhYmxlYXUgSSgxMSksCgl0b3VyIEkoMTEpLAoJcmFuZyBJKDExKSwKCW5vbSBDKDI1NSksCgljbHQgQygyNTUpLAoJY2x1YiBDKDI1NSksCglwb2ludHMgTig2LDMpLAoJc2Fpc29uIEMoMjU1KSwKCXVwbG9hZGVkIEkoMSkiOwoKLy8gY3JlYXRlIGl0LiAKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2Rpdl9jbGFzc2VtZW50IiwKCQkJCSAkZmxkcywgCgkJCQkkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiMKIwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKJGZsZHMgPSAiCglsaWNlbmNlIEkoMTEpLAoJdHlwZV9jb21wZXQgQygzKSwKCWRhdGVfZGVidXQgRCwKCWRhdGVfZmluIEQiOwoJCQkKLy8gY3JlYXRlIGl0LiAKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpY2lwZSIsCgkJCQkgICAkZmxkcywgCgkJCQkgICAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Ci8vdW5lIHRhYmxlIHBvdXIgbGVzIGNsYXNzZW1lbnRzIGRlcyBwb3VsZXMKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CgovLyB0YWJsZSBzY2hlbWEgZGVzY3JpcHRpb24KJGZsZHMgPSAiCglpZCBJKDExKSBBVVRPIEtFWSwKCWlkZXF1aXBlIEkoMTEpLAoJc2Fpc29uIEMoMjU1KSwKCWNvZGVfY29tcGV0IEMoMyksCglpZGRpdiBJKDExKSwKCWlkcG91bGUgSSgxMSksCglwb3VsZSBDKDI1NSksCgljbHQgSSgyKSwKCWVxdWlwZSBDKDI1NSksCglqb3VlIEkoNCksCglwdHMgSSgzKSAiOwoJCQkKLy8gY3JlYXRlIGl0LiAKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NsYXNzZW1lbnQiLAoJCQkJICAgJGZsZHMsIAoJCQkJICAgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy9DcsOpYXRpb24gZGUgbGEgdGFibGUgZmV1aWxsZSBkZSByZW5jb250cmUKJGZsZHMgPSAiCglpZCBJKDExKSBBVVRPIEtFWSwKCWZrX2lkIEkoMTEpLAoJeGphIEMoMjU1KSwKCXhjYSBDKDI1NSksCgl4amIgQygyNTUpLAoJeGNiIEMoMjU1KSI7CiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19mZXVpbGxlc19yZW5jb250cmVzIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCi8vQ3LDqWF0aW9uIGRlIGxhIHRhYmxlIHBhcnRpZXMgZGVzIHJlbmNvbnRyZXMgcGFyIMOpcXVpcGVzCiRmbGRzID0gIgoJaWQgSSgxMSkgQVVUTyBLRVksCglma19pZCBJKDExKSwKCWpvdWV1ckEgQygyNTUpLAoJc2NvcmVBIEkoMSksCglqb3VldXJCIEMoMjU1KSwKCXNjb3JlQiBJKDEpIjsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlbmNvbnRyZXNfcGFydGllcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiMKCi8vbWlldXggdmF1dCBjcsOpZXIgdW4gaW5kZXggc3VyIGxhIGNsw6kgw6l0cmFuZ8OocmUgZmtfaWQKLy8kZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMnKTsKIwojCi8vIGNyZWF0ZSBhIHBlcm1pc3Npb24KJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ1BpbmcgVXNlJywgJ1BpbmcgVXNlJyk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdQaW5nIFNldCBQcmVmcycsJ1BpbmcgU2V0IFByZWZzJyk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdQaW5nIE1hbmFnZSB1c2VyJywgJ1BpbmcgTWFuYWdlIHVzZXInKTsKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ1BpbmcgRGVsZXRlJywgJ1BpbmcgRGVsZXRlJyk7CiMKLy8gY3JlYXRlIGEgcHJlZmVyZW5jZQovLyR0aGlzLT5TZXRQcmVmZXJlbmNlKCJtaW5pX3RyYW5jaGVBJywgJzAnKTsKLyogbGVzIHZpY3RvaXJlcyBub3JtYWxlcyAqLwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndmljTm9ybTBfMjQnLCAnNicpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndmljTm9ybTI1XzQ5JywgJzUsNScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndmljTm9ybTUwXzk5JywgJzUnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3ZpY05vcm0xMDBfMTQ5JywgJzQnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3ZpY05vcm0xNTBfMTk5JywgJzMnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3ZpY05vcm0yMDBfMjk5JywgJzInKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3ZpY05vcm0zMDBfMzk5JywgJzEnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3ZpY05vcm00MDBfNDk5JywgJzAsNScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndmljTm9ybVBsdXM1MDAnLCAnMCcpOwojCiMgICAgUG91ciBsZXMgdMOiY2hlcyBDUk9OCiMKJHRoaXMtPlNldFByZWZlcmVuY2UoJ0xhc3RSZWN1cFNwaWQnLCAnJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdMYXN0UmVjdXBGZnR0JywgJycpOwojCi8qKgoqIENzcwoqLwoKJGNzc19maWxlID0gZGlybmFtZShfX0ZJTEVfXykgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2NzcycuIERJUkVDVE9SWV9TRVBBUkFUT1IgLidib290c3RyYXAtdGFibGUuY3NzJzsKaWYgKGZpbGVfZXhpc3RzKCRjc3NfZmlsZSkpCnsKICRjc3MgPSBAZmlsZV9nZXRfY29udGVudHMoJGNzc19maWxlKTsKICRjc3NfaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4nY3NzX3NlcScpOwogJGRiLT5FeGVjdXRlKCdpbnNlcnQgaW50byAnLmNtc19kYl9wcmVmaXgoKS4nY3NzIChjc3NfaWQsIGNzc19uYW1lLCBjc3NfdGV4dCwgbWVkaWFfdHlwZSwgY3JlYXRlX2RhdGUpIHZhbHVlcyAoPyw/LD8sPyw/KScsCiAgIGFycmF5KCRjc3NfaWQsICdQaW5nIHRhYmxlJywgJGNzcywgJ3NjcmVlbicsIGRhdGUoJ1ktbS1kJykpKTsKfQoKCi8qIGxlcyB2aWN0b2lyZXMgYW5vcm1hbGVzICovCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd2aWNBbm9ybTBfMjQnLCAnNicpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndmljQW5vcm0yNV80OScsICc3Jyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd2aWNBbm9ybTUwXzk5JywgJzgnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3ZpY0Fub3JtMTAwXzE0OScsICcxMCcpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndmljQW5vcm0xNTBfMTk5JywgJzEzJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd2aWNBbm9ybTIwMF8yOTknLCAnMTcnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3ZpY0Fub3JtMzAwXzM5OScsICcyMicpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndmljQW5vcm00MDBfNDk5JywgJzI4Jyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd2aWNBbm9ybVBsdXM1MDAnLCAnNDAnKTsKIwovKiBkw6lmYWl0ZXMgbm9ybWFsZXMgKi8KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZk5vcm0wXzI0JywgJy01Jyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZOb3JtMjVfNDknLCAnLTQsNScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmTm9ybTUwXzk5JywgJy00Jyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZOb3JtMTAwXzE0OScsICctMycpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmTm9ybTE1MF8xOTknLCAnLTInKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZk5vcm0yMDBfMjk5JywgJy0xJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZOb3JtMzAwXzM5OScsICctMCw1Jyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZOb3JtNDAwXzQ5OScsICcwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZOb3JtUGx1czUwMCcsICcwJyk7CiMKLyogZMOpZmFpdGVzIEFub3JtYWxlcyAqLwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmQW5vcm0wXzI0JywgJy01Jyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZBbm9ybTI1XzQ5JywgJy02Jyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZBbm9ybTUwXzk5JywgJy03Jyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZBbm9ybTEwMF8xNDknLCAnLTgnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZkFub3JtMTUwXzE5OScsICctMTAnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZkFub3JtMjAwXzI5OScsICctMTIsNScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmQW5vcm0zMDBfMzk5JywgJy0xNicpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmQW5vcm00MDBfNDk5JywgJy0yMCcpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmQW5vcm1QbHVzNTAwJywgJy0yOScpOwoKCi8vIGNyZWF0ZSBhIHByZWZlcmVuY2UKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZmF1bHRNb250aFNpdE1lbnMnLCAnNScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgncGhhc2UnLCAnMScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgncG9wdWxhdGVfY2FsZW5kYXInLCAnT3VpJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdhZmZpY2hlX2NsdWJfdW5pcXVlbWVudCcsICdPdWknKTsKIwojUHLDqWbDqXJlbmNlcyBkZSBsJ2FwcGxpY2F0aW9uCiMKIwojU2V0dXAgZXZlbnRzCiR0aGlzLT5DcmVhdGVFdmVudCgnT25Vc2VyQWRkZWQnKTsKJHRoaXMtPkNyZWF0ZUV2ZW50KCdPblVzZXJEZWxldGVkJyk7CiMKLy9vbiBpbnPDqHJlIGxlcyDDqWzDqW1lbnRzIHBhciBkw6lmYXV0CiNpbmRleGVzCgokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoY21zX2RiX3ByZWZpeCgpLidma19pZCcsCgkJICAgIAkJCQljbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9waW5nX2ZldWlsbGVzX3JlbmNvbnRyZXMnLCAnZmtfaWQnKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoY21zX2RiX3ByZWZpeCgpLidma19pZCcsCgkgICAgY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfcGluZ19yZW5jb250cmVzX3BhcnRpZXMnLCAnZmtfaWQnKTsKCSAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiMKLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiR0aGlzLT5BdWRpdCggMCwgCgkgICAgICAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksIAoJICAgICAgJHRoaXMtPkxhbmcoJ2luc3RhbGxlZCcsICR0aGlzLT5HZXRWZXJzaW9uKCkpICk7CgoJCgkgICAgICAKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE5ld3NsZXR0ZXIgTWFkZSBTaW1wbGUgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgZmxleGlibGUKIyAgbWFpbGluZyBsaXN0IHNvbHV0aW9uLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFZpc2l0IHRoZSBDTVNNUyBIb21lcGFnZSBhdDogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKJGRiID0gJHRoaXMtPkdldERiKCk7CgovLyByZW1vdmUgdGhlIGRhdGFiYXNlIHRhYmxlcwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfam91ZXVycyIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWNpcGUiICk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoICBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMiICk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoICBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllcyIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXBfcGFydGllcyIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcG91bGVzX3JlbmNvbnRyZXMiICk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoICBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3NpdF9tZW5zIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cgokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCAgY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jYWxlbmRyaWVyIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cgokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCAgY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jb21tIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cgokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cgokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cgokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2FkdmVyc2FpcmVzIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cgokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NsYXNzZW1lbnQiICk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCgovLyByZW1vdmUgdGhlIHNlcXVlbmNlCiRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3NlcSIgKTsKCi8vIHJlbW92ZSB0aGUgcGVybWlzc2lvbnMKJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ1BpbmcgVXNlJyk7CiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdQaW5nIFNldCBQcmVmcycpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignUGluZyBNYW5hZ2UgdXNlcicpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignUGluZyBEZWxldGUnKTsKCi8vIHJlbW92ZSB0aGUgcHJlZmVyZW5jZQokdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwoKCi8vIEV2ZW50cwokdGhpcy0+UmVtb3ZlRXZlbnQoICdPblVzZXJBZGRlZCcgKTsKJHRoaXMtPlJlbW92ZUV2ZW50KCAnT25Vc2VyRGVsZXRlZCcgKTsKCgoKLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndW5pbnN0YWxsZWQnKSk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNrZWxldG9uIC0gYSBwZWRhbnRpYyAic3RhcnRpbmcgcG9pbnQiIG1vZHVsZQojIFZlcnNpb246IDEuNSwgU2pHCiMgTWV0aG9kOiBVcGdyYWRlCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA4IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLyoqCiAqIEZvciBzZXBhcmF0ZWQgbWV0aG9kcywgeW91J2xsIGFsd2F5cyB3YW50IHRvIHN0YXJ0IHdpdGggdGhlIGZvbGxvd2luZwogKiBsaW5lIHdoaWNoIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG1ldGhvZCB3YXMgY2FsbGVkIGZyb20gdGhlIG1vZHVsZQogKiBBUEksIGFuZCB0aGF0IGV2ZXJ5dGhpbmcncyBzYWZlIHRvIGNvbnRpbnVlOgoqLyAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKLyoqCiAqIEFmdGVyIHRoaXMsIHRoZSBjb2RlIGlzIGlkZW50aWNhbCB0byB0aGUgY29kZSB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZQogKiB3cmFwcGVkIGluIHRoZSBVcGdyYWRlKCkgbWV0aG9kIGluIHRoZSBtb2R1bGUgYm9keS4KICovCgokY3VycmVudF92ZXJzaW9uID0gJG9sZHZlcnNpb247CnN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQp7CiAgLy8gd2UgYXJlIG5vdyAxLjAgYW5kIHdhbnQgdG8gdXBncmFkZSB0byBsYXRlc3QKIGNhc2UgIjAuMWJldGExIjoKCXsKCQkvL2RvIG1hZ2ljCgl9CiAgIAogY2FzZSAiMC4xYmV0YTIiOgoJewogICAJCS8vYW5kIHRoaXMgaXMgaGVyZSBmb3IgdGhlIG5leHQgdmVyc2lvbgoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19lcXVpcGVzIiwKCQkJCQkJICAgICAgInR5cGVfY29tcGV0IEMoMykgREVGQVVMVCAnVSciKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCQkkc3FsID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZXF1aXBlcyBTRVQgdHlwZV9jb21wZXQgPSAnVSciOwoJCSRkYi0+RXhlY3V0ZSgkc3FsKTsKCQoJCgkJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BvdWxlc19yZW5jb250cmVzIiwKCQkJCQkJICAgICAgImFmZmljaGUgTCIpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoJCgkKCQkkc3FsYXJyYXkgPSAkZGljdC0+RHJvcENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NvbXBldGl0aW9ucyIsCgkJCQkJCSAgICAgICJpbmRpdnMiKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCQoJCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWVzX3NwaWQiLAoJCQkJCQkgICAgICAidHlwZV9lY2FydCBJKDExKSIpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5BbHRlckNvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpZXNfc3BpZCIsCgkJCQkJCSAgICAgICJkYXRlbWFqICIuIENNU19BRE9EQl9EVC4gIiIpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoJCS8vcXFzIGNoYW5nZW1lbnRzIGRhbnMgbGEgdGFibGUgY2FsZW5kcmllcgoJCSRzcWxhcnJheSA9ICRkaWN0LT5SZW5hbWVDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jYWxlbmRyaWVyIiwKCQkJCQkJICAgICAgImRhdGVfY29tcGV0IiwgImRhdGVfZGVidXQiLCAiZGF0ZV9kZWJ1dCAiLiBDTVNfQURPREJfRFQgLiIiKTsKCSAJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgoJCSRzcWxhcnJheSA9ICRkaWN0LT5BbHRlckNvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NhbGVuZHJpZXIiLAoJCQkJCQkgICAgICJkYXRlX2RlYnV0IEQiKTsKCSAJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgkJJHNxbGFycmF5ID0gJGRpY3QtPkFkZGNvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NhbGVuZHJpZXIiLAoJCQkJCQkgICAgICAiZGF0ZV9maW4gRCIpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoJCgkJJHNxbGFycmF5ID0gJGRpY3QtPkFsdGVyQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXBfcGFydGllcyIsCgkJCQkJCSAgICAgImRhdGVtYWogIi4gQ01TX0FET0RCX0RULiAiIik7CgkgCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoKCQkkc3FsYXJyYXkgPSAkZGljdC0+QWx0ZXJDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19zaXRfbWVucyIsCgkJCQkJCSAgICAgImRhdGVjcmVhdGVkICIuIENNU19BRE9EQl9EVC4gIiIpOwoJIAkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCgkJJHNxbGFycmF5ID0gJGRpY3QtPkFsdGVyQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Bpbmdfc2l0X21lbnMiLAoJCQkJCQkgICAgICJkYXRlbWFqICIuIENNU19BRE9EQl9EVC4gIiIpOwoJIAkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCgoJCSRzcWxhcnJheSA9ICRkaWN0LT5BbHRlckNvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NvbW0iLAoJCQkJCQkgICAgICJkYXRlY3JlYXRlZCAiLiBDTVNfQURPREJfRFQuICIiKTsKCSAJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgoJCSRzcWxhcnJheSA9ICRkaWN0LT5BbHRlckNvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NvbW0iLAoJCQkJCQkgICAgICJkYXRlbWFqICIuIENNU19BRE9EQl9EVC4gIiIpOwoJIAkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCgkJJHNxbGFycmF5ID0gJGRpY3QtPkFsdGVyQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXAiLAoJCQkJCQkgICAgICJkYXRlY3JlYXRlZCAiLiBDTVNfQURPREJfRFQuICIiKTsKCSAJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgkKCQkkc3FsID0gIkFMVEVSIFRBQkxFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyBBREQgVU5JUVVFIGBpbmRfY29kZV9jb21wZXRgIChgY29kZV9jb21wZXRgKSI7CgkJJGRiLT5FeGVjdXRlKCRzcWwpOwoKCQkkc3FsID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyAoaWQsIG5hbWUsIGNvZGVfY29tcGV0LCBjb2VmZmljaWVudCkgVkFMVUVTICgnJywgPywgPywgPykiOwoJCSRkYi0+RXhlY3V0ZSgkc3FsLCBhcnJheSgnSW5kw6l0ZXJtaW7DqScsICdVJywgJzAuMDAnKSk7CgoJCWJyZWFrOwoJfQoKCgogY2FzZSAiMC4xYmV0YTMiIDogCiBjYXNlICIwLjFiZXRhMy4xIiA6CiBjYXNlICIwLjFiZXRhMy4yIiA6IAogY2FzZSAiMC4xcmMxIiA6CiBjYXNlICIwLjEiIDoKCgl7CgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CgkJJGZsZHMgPSAiCgkJCWxpY2VuY2UgSSgxMSksCgkJCXR5cGVfY29tcGV0IEMoMykiOwoKCQkvLyBjcmVhdGUgaXQuIAoJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWNpcGUiLAoJCQkJCQkgICAkZmxkcywgCgkJCQkJCSAgICR0YWJvcHRhcnJheSk7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CgoJCS8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgoJCSRmbGRzID0gIgoJCQlpZCBJKDExKSBBVVRPIEtFWSwKCQkJaWRlcXVpcGUgSSgxMSksCgkJCXNhaXNvbiBDKDI1NSksCgkJCWNvZGVfY29tcGV0IEMoMyksCgkJCWlkZGl2IEkoMTEpLAoJCQlpZHBvdWxlIEkoMTEpLAoJCQlwb3VsZSBDKDI1NSksCgkJCWNsdCBJKDIpLAoJCQllcXVpcGUgQygyNTUpLAoJCQlqb3VlIEkoNCksCgkJCXB0cyBJKDMpICI7CgoJCS8vIGNyZWF0ZSBpdC4gCgkJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NsYXNzZW1lbnQiLAoJCQkJCQkgICAkZmxkcywgCgkJCQkJCSAgICR0YWJvcHRhcnJheSk7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCgkJJHNxbGFycmF5ID0gJGRpY3QtPkFsdGVyQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllc19zcGlkIiwKCQkJCQkJICAgICAicG9pbnRyZXMgTig2LjMpICIpOwoJIAkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCQkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMiLAoJCQkJCQkiaW5kaXZzIEwiKTsKCQkkc3FsYXJyYXkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9uc2AgU0VUIGBpbmRpdnNgID0gJzEnIFdIRVJFIGBpZGAgPSAxIjsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJJHNxbGFycmF5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnNgIFNFVCBgaW5kaXZzYCA9ICcxJyBXSEVSRSBgaWRgID0gMiI7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCSRzcWxhcnJheSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zYCBTRVQgYGluZGl2c2AgPSAnMScgV0hFUkUgYGlkYCA9IDYiOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkkc3FsYXJyYXkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9uc2AgU0VUIGBpbmRpdnNgID0gJzEnIFdIRVJFIGBpZGAgPSA3IjsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJJHNxbGFycmF5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnNgIFNFVCBgaW5kaXZzYCA9ICcxJyBXSEVSRSBgaWRgID0gOCI7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCSRzcWxhcnJheSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zYCBTRVQgYGluZGl2c2AgPSAnMScgV0hFUkUgYGlkYCA9IDEwIjsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJJHNxbGFycmF5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnNgIFNFVCBgaW5kaXZzYCA9ICcxJyBXSEVSRSBgaWRgID0gMTEiOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkkc3FsYXJyYXkgPSAiQUxURVIgVEFCTEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIEFERCBVTklRVUUgYGluZF9jb2RlX2NvbXBldGAgKGBjb2RlX2NvbXBldGApIjsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJCgl9CgkKY2FzZSAiMC4xLjEiIDogCQoJCgl7CgkJCgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CgoJCS8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgoJCSRmbGRzID0gIgoJCQlpZCBJKDExKSBBVVRPIEtFWSwKCQkJZGF0ZWNyZWF0ZWQgIi4gQ01TX0FET0RCX0RUIC4iLAoJCQlkYXRlbWFqICIuIENNU19BRE9EQl9EVCAuIiwKCQkJbW9pcyBJKDIpLAoJCQlhbm5lZSBJKDQpLAoJCQlwaGFzZSBJKDEpLAoJCQlsaWNlbmNlIEkoMTEpLAoJCQljYXRlZyBDKDEwKSwKCQkJbm9tIEMoMjU1KSwKCQkJcHJlbm9tIEMoMjU1KSwKCQkJcG9pbnRzIE4oNi4yKSwKCQkJY2xuYXQgSSgxMSksCgkJCXJhbmdyZWcgSSgxMSksCgkJCXJhbmdkZXAgSSgxMSksCgkJCXByb2dtb2lzIE4oNi4yKSI7CgoJCS8vIGNyZWF0ZSBpdC4gCgkJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2FkdmVyc2FpcmVzIiwKCQkJCQkJICAgJGZsZHMsIAoJCQkJCQkgICAkdGFib3B0YXJyYXkpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkKCX0KCQpjYXNlICIwLjIiIDoKY2FzZSAiMC4yLjEiIDoKY2FzZSAiMC4yLjIiIDoKCXsKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgkJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlY3VwX3BhcnRpZXMiLCAibWFqX2ZmdHQgRCIpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVjdXBfcGFydGllcyIsICJtYWpfc3BpZCBEIik7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19yZWN1cF9wYXJ0aWVzIiwgInNwaWRfdG90YWwgSSgxMSkiKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZUluZGV4U1FMKGNtc19kYl9wcmVmaXgoKS4naW5kX2NvZGVfY29tcGV0JywKCQkgICAgICAgICBjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zJywgJ2NvZGVfY29tcGV0JywgJ1VOSVFVRScpOwoJCSAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cgl9CmNhc2UgIjAuMi4zIiA6IApjYXNlICIwLjIuMy4xIiA6Cgl7CgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyIsICJ0YWcgQygyNTUpIik7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgkJCgkJJGRiX3ByZWZpeCA9IGNtc19kYl9wcmVmaXgoKTsKCQkvL29uIGZhaXQgdW4gdXBkYXRlIHN1ciBsYSB0YWJsZSBleGlzdGFudGUgcG91ciBtZXR0cmUgbGUgdGFnIMOgIGpvdXIKCQkkcXVlcnkgPSAiU0VMRUNUIGlkLCBjb2RlX2NvbXBldCwgaW5kaXZzIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIjsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCQkKCQlpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApCgkJewoJCQl3aGlsZSgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJCQl7CgkJCQkkdGFnID0gIntQaW5nIGFjdGlvbj0nIjsKCQkJCSRpZCA9ICRyb3dbJ2lkJ107CgkJCQkkY29kZSA9ICRyb3dbJ2NvZGVfY29tcGV0J107CgkJCQkkaW5kaXZzID0gJHJvd1snaW5kaXZzJ107CgkJCQkKCQkJCWlmKCRpbmRpdnMgPT0nMScpCgkJCQl7CgkJCQkJJHRhZy49ImluZGl2aWR1ZWxsZXMnIjsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkdGFnLj0icGFyLWVxdWlwZXMnIjsKCQkJCX0KCQkJCSR0YWcuPSIgdHlwZV9jb21wZXQ9JyRjb2RlJyI7CgkJCQkkdGFnLj0ifSI7CgkJCQkKCQkJCSRzcWxhcnJheSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3R5cGVfY29tcGV0aXRpb25zIFNFVCB0YWcgPSA/IFdIRVJFIGlkID0gPyI7CgkJCQkkZGItPkV4ZWN1dGUoJHNxbGFycmF5LCBhcnJheSgkdGFnLCRpZCkpOwoJCQkJLy91bnNldCgkdGFnKTsKCQkJfQoJCQoJCQoJCX0KCQkKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgkJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NhbGVuZHJpZXIiLCAidGFnIEMoMjU1KSIpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoJCQoJCS8vb24gZmFpdCB1biB1cGRhdGUgc3VyIGxhIHRhYmxlIGV4aXN0YW50ZSBwb3VyIG1ldHRyZSBsZSB0YWcgw6Agam91cgoJCSRxdWVyeSA9ICJTRUxFQ1QgY2FsLmlkLGNhbC5kYXRlX2RlYnV0LGNhbC5kYXRlX2ZpbixjYWwubnVtam91cm4sIHRjLmNvZGVfY29tcGV0LCB0Yy5pbmRpdnMgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMgQVMgdGMsICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19jYWxlbmRyaWVyIEFTIGNhbCBXSEVSRSBjYWwudHlwZV9jb21wZXQgPSB0Yy5jb2RlX2NvbXBldCI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgkJCgkJaWYoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKT4wKQoJCXsKCQkJd2hpbGUoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQkJewoJCQkJJHRhZyA9ICJ7UGluZyBhY3Rpb249JyI7CgkJCQkkaWQgPSAkcm93WydpZCddOwoJCQkJJGNvZGUgPSAkcm93Wydjb2RlX2NvbXBldCddOwoJCQkJJGluZGl2cyA9ICRyb3dbJ2luZGl2cyddOwoJCQkJJGRhdGVfZGVidXQgPSAkcm93WydkYXRlX2RlYnV0J107CgkJCQkkZGF0ZV9maW4gPSAkcm93WydkYXRlX2ZpbiddOwoJCQkJCgkJCQlpZigkaW5kaXZzID09JzEnKQoJCQkJewoJCQkJCSR0YWcuPSJpbmRpdmlkdWVsbGVzJyI7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHRhZy49InBhci1lcXVpcGVzJyI7CgkJCQl9CgkJCQkkdGFnLj0iIHR5cGVfY29tcGV0PSckY29kZScgIjsKCQkJCSR0YWcuPSIgZGF0ZV9kZWJ1dD0nJGRhdGVfZGVidXQnIGRhdGVfZmluPSckZGF0ZV9maW4nIjsKCQkJCSR0YWcuPSJ9IjsKCQkJCQoJCQkJJHNxbGFycmF5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2FsZW5kcmllciBTRVQgdGFnID0gPyBXSEVSRSBpZCA9ID8iOwoJCQkJJGRiLT5FeGVjdXRlKCRzcWxhcnJheSwgYXJyYXkoJHRhZywkaWQpKTsKCQkJCS8vdW5zZXQoJHRhZyk7CgkJCX0KCQkKCQkKCQl9CgkJCgkJLy8kaW5zZXJ0X3NxbCA9ICJVUERBVEUgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMgKGlkLCBuYW1lLCBjb2RlX2NvbXBldCwgY29lZmZpY2llbnQsaW5kaXZzKSBWQUxVRVMgKCcnLCA/LCA/LCA/LCA/KSI7CgkJCgkJJGNzc19maWxlID0gZGlybmFtZShfX0ZJTEVfXykgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2NzcycuIERJUkVDVE9SWV9TRVBBUkFUT1IgLidib290c3RyYXAtdGFibGUuY3NzJzsKCQlpZiAoZmlsZV9leGlzdHMoJGNzc19maWxlKSkKCQl7CgkJICRjc3MgPSBAZmlsZV9nZXRfY29udGVudHMoJGNzc19maWxlKTsKCQkgLy8kY3NzX2lkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuJ2Nzc19zZXEnKTsKCQkvL3BvdXIgbGEgdmVyc2lvbiAyLjAgZGUgY21zbXMKCQkvLyRkYi0+RXhlY3V0ZSgnaW5zZXJ0IGludG8gJy5jbXNfZGJfcHJlZml4KCkuJ2xheW91dF9zdHlsZXNoZWV0cyAoaWQsIG5hbWUsIGNvbnRlbnQsIGRlc2NyaXB0aW9uLG1lZGlhX3R5cGUsIG1lZGlhX3F1ZXJ5KSB2YWx1ZXMgKCIiLD8sPyw/LD8sPyknLAoJCS8vICAgYXJyYXkoJ1BpbmcgdGFibGUnLCAkY3NzLCAnQ3NzIHBvdXIgbGVzIHRhYmxlYXV4IGR1IG1vZHVsZSBQaW5nJywnc2NyZWVuJywnJykpOwoJCSRkYi0+RXhlY3V0ZSgnaW5zZXJ0IGludG8gJy5jbXNfZGJfcHJlZml4KCkuJ2NzcyAoY3NzX2lkLCBjc3NfbmFtZSwgY3NzX3RleHQsIG1lZGlhX3R5cGUsIG1lZGlhX3F1ZXJ5KSB2YWx1ZXMgKCIiLD8sPyw/LD8pJywKCQkgICBhcnJheSgnUGluZyB0YWJsZScsICRjc3MsICdzY3JlZW4nLCcnKSk7CgkJfQoJCSRkYl9wcmVmaXggPSBjbXNfZGJfcHJlZml4KCk7CgkJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZUluZGV4U1FMKCdjb2RlX2NvbXBldCcsJGRiX3ByZWZpeC4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMiLCdjb2RlX2NvbXBldCcsYXJyYXkoJ1VOSVFVRSc9PjEpKTsKCQkKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgkJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3NpdF9tZW5zIiwgInNhaXNvbiBDKDI1NSkiKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCQkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19zaXRfbWVucyBTRVQgc2Fpc29uPSAnMjAxNC0yMDE1JyBXSEVSRSBtb2lzPj05IEFORCBhbm5lZSA9ICcyMDE0JyBPUiBhbm5lZSA9ICcyMDE1JyI7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgkJCgkJCgl9CmNhc2UgIjAuMi40IiA6IAoJewoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCQkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2FsZW5kcmllciIsICJzYWlzb24gQygyNTUpIik7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgkJJHF1ZXJ5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2FsZW5kcmllciBTRVQgc2Fpc29uPSAnMjAxNC0yMDE1JyBXSEVSRSBNT05USChkYXRlX2RlYnV0KT49OSBBTkQgWUVBUihkYXRlX2RlYnV0KSA9ICcyMDE0JyBPUiAoTU9OVEgoZGF0ZV9kZWJ1dCk8PTcgQU5EIFlFQVIoZGF0ZV9kZWJ1dCkgPSAnMjAxNScpIjsKCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCQkKCQkvL21vZGlmaWNhdGlvbiBkZSBsYSB0YWJsZSBwYXJ0aWNpcGUKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgkJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3BhcnRpY2lwZSIsICJkYXRlX2RlYnV0IEQsIGRhdGVfZmluIEQiKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCQkKCQkvL29uIHN1cHByaW1lIHRvdXMgbGVzIGVucmVnaXN0cmVtZW50cyBkZSBsYSB0YWJsZSBwYXJ0aWNpcGUgISEKCQkvL2R1IGNvdXAgLCBvbiBmYWl0IHVuaXF1ZW1lbnQgZGVzIGluc2VydCAhCgkJCgkJJHF1ZXJ5ID0gIlRSVU5DQVRFIFRBQkxFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWNpcGUiOwoJCSRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoJCQoJCS8vb24gbWV0IMOgIGpvdXIgbGEgdGFibGUgYXZlYyBsZXMgw6lsw6ltZW50cyBleGlzdGFudHMgZGVwdWlzIGxhIHRhYmxlIHNwaWQKCQkKCQkkcXVlcnkgPSAiU0VMRUNUIERJU1RJTkNUIHNwLmxpY2VuY2Usc3AuZGF0ZV9ldmVudCxzcC5lcHJldXZlLCB0Yy5pbmRpdnMsdGMuY29kZV9jb21wZXQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcGFydGllc19zcGlkIEFTIHNwLCAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMgQVMgdGMgV0hFUkUgc3AuZXByZXV2ZSA9IHRjLm5hbWUgQU5EIHNhaXNvbiA9ICcyMDE0LTIwMTUnIEFORCB0Yy5pbmRpdnMgPSAxIE9SREVSIEJZIHNwLmxpY2VuY2UgQVNDIjsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCQlpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPjApCgkJewoJCQl3aGlsZSgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJCQl7CgkJCQkkcXVlcnkxID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19wYXJ0aWNpcGUgKGxpY2VuY2UsIHR5cGVfY29tcGV0LCBkYXRlX2RlYnV0KSBWQUxVRVMgKD8sID8sID8pIjsKCQkJCSRkYnJlc3VsdGF0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeTEsIGFycmF5KCRyb3dbJ2xpY2VuY2UnXSwkcm93Wydjb2RlX2NvbXBldCddLCAkcm93WydkYXRlX2V2ZW50J10pKTsKCgkJCX0KCQl9CgkJCgkJCgl9CmNhc2UgIjAuMi41IiA6CmNhc2UgIjAuMyIgOiAKCXsKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgkJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2VxdWlwZXMiLCAidGFnIEMoMjU1KSIpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoJCQoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCQkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfdHlwZV9jb21wZXRpdGlvbnMiLCAiaWRlcHJldXZlIEkoMTEpIik7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ190eXBlX2NvbXBldGl0aW9ucyIsICJpZG9yZ2EgSSgxMSkiKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCQkKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCgkJLy8gdGFibGUgc2NoZW1hIGRlc2NyaXB0aW9uCgkJJGZsZHMgPSAiCgkJCWlkIEkoMTEpIEFVVE8gS0VZLAoJCQlsaWJlbGxlIEMoMjU1KSwKCQkJaWRvcmdhIEkoMTEpLAoJCQljb2RlIEMoNSksCgkJCXNjb3BlIEMoMSkiOwoKCQkvLyBjcmVhdGUgaXQuIAoJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19vcmdhbmlzbWVzIiwKCQkJCQkJICAgJGZsZHMsICR0YWJvcHRhcnJheSk7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCQoJCSMgY3JlYXRlIHRhYmxlIGRpdmlzaW9ucwoJCS8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgoJCSRmbGRzID0gIgoJCQlpZCBJKDExKSBBVVRPIEtFWSwKCQkJaWRvcmdhIEkoMTEpLAoJCQlpZGVwcmV1dmUgSSgxMSksCgkJCWlkZGl2aXNpb24gSSgxMSksCgkJCWxpYmVsbGUgQygyNTUpLAoJCQlzYWlzb24gQygyNTUpLAoJCQlpbmRpdnMgSSgxKSwKCQkJc2NvcGUgQygxKSwKCQkJdXBsb2FkZWQgQygxKSI7CgoJCS8vIGNyZWF0ZSBpdC4gCgkJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2RpdmlzaW9ucyIsCgkJCQkJCSAgICRmbGRzLCAkdGFib3B0YXJyYXkpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkjCgkJIyBjcmVhdGUgdGFibGUgZGl2X2NsYXNzZW1lbnQvL2RlYnV0IGRlIGxhIGNyw6lhdGlvbgoJCS8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgoJCSRmbGRzID0gIgoJCQlpZCBJKDExKSBBVVRPIEtFWSwKCQkJaWRlcHJldXZlIEkoMTEpLAoJCQlpZGRpdmlzaW9uIEkoMTEpLAoJCQl0YWJsZWF1IEkoMTEpLAoJCQl0b3VyIEkoMTEpLAoJCQlyYW5nIEkoMTEpLAoJCQlub20gQygyNTUpLAoJCQljbHQgQygyNTUpLAoJCQljbHViIEMoMjU1KSwKCQkJcG9pbnRzIE4oNiwzKSwKCQkJc2Fpc29uIEMoMjU1KSwKCQkJdXBsb2FkZWQgSSgxKSI7CgoJCS8vIGNyZWF0ZSBpdC4gCgkJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2Rpdl9jbGFzc2VtZW50IiwKCQkJCQkJICRmbGRzLCAkdGFib3B0YXJyYXkpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkjCgkJCSMgY3JlYXRlIHRhYmxlIGRpdl9wb3VsZXMvL2RlYnV0IGRlIGxhIGNyw6lhdGlvbgoJCQkvLyB0YWJsZSBzY2hlbWEgZGVzY3JpcHRpb24KCQkJJGZsZHMgPSAiCgkJCQlpZCBJKDExKSBBVVRPIEtFWSwKCQkJCWlkZXByZXV2ZSBJKDExKSwKCQkJCWlkZGl2aXNpb24gSSgxMSksCgkJCQlsaWJlbGxlIEMoMjU1KSwKCQkJCXRvdXIgSSgzKSwKCQkJCXRhYmxlYXUgSSgxMSksCgkJCQlsaWVuIEMoMjU1KSwKCQkJCXNhaXNvbiBDKDI1NSksCgkJCQl1cGxvYWRlZCBJKDEpIjsKCgkJCS8vIGNyZWF0ZSBpdC4gCgkJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19kaXZfdG91cnMiLAoJCQkJCQkJJGZsZHMsIAoJCQkJCQkJJHRhYm9wdGFycmF5KTsKCQkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCQkvL29uIGNyw6nDqSB1biBpbmRleCBwb3VyIGNldHRlIHRhYmxlCgkJCSRpZHhvcHRhcnJheSA9IGFycmF5KCdVTklRVUUnKTsKCQkJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZUluZGV4U1FMKGNtc19kYl9wcmVmaXgoKS4nZGl2X3RvdXJzJywKCQkJCSAgICBjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9waW5nX2Rpdl90b3VycycsICdpZGVwcmV1dmUsIGlkZGl2aXNpb24sIHRhYmxlYXUnLCRpZHhvcHRhcnJheSk7CgkJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkJLy8KCQkJLy91biBub3V2ZWwgaW5kZXgKCQkJJGlkeG9wdGFycmF5ID0gYXJyYXkoJ1VOSVFVRScpOwoJCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoY21zX2RiX3ByZWZpeCgpLidzaXRfbWVucycsCgkJCQkgICAgY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfcGluZ19zaXRfbWVucycsICdsaWNlbmNlLCBtb2lzLCBhbm5lZScsJGlkeG9wdGFycmF5KTsKCQkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCQkvLwoJCQkkaWR4b3B0YXJyYXkgPSBhcnJheSgnVU5JUVVFJyk7CgkJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVJbmRleFNRTCgndW5pY2l0ZScsCgkJCQkgICAgICAgICBjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9waW5nX2VxdWlwZXMnLCAnc2Fpc29uLCBsaWJlcXVpcGUsIGxpZW5kaXZpc2lvbicsJGlkeG9wdGFycmF5KTsKCQkJCSAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJCgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19qb3VldXJzIiwgInR5cGUgQygxKSwgY2VydGlmIEMoMjU1KSwgdmFsaWRhdGlvbiBELCBlY2hlbG9uIEMoMSksIHBsYWNlIEkoNCksIHBvaW50IEkoNCksIGNhdCBDKDUpIik7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgkJCgkJCgkJLy9DcsOpYXRpb24gZGUgbGEgdGFibGUgZmV1aWxsZSBkZSByZW5jb250cmUKCQkkZmxkcyA9ICIKCQkJaWQgSSgxMSkgQVVUTyBLRVksCgkJCWZrX2lkIEkoMTEpLAoJCQl4amEgQygyNTUpLAoJCQl4Y2EgQygyNTUpLAoJCQl4amIgQygyNTUpLAoJCQl4Y2IgQygyNTUpIjsKCQkkcXNsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfZmV1aWxsZXNfcmVuY29udHJlcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCgkJLy9DcsOpYXRpb24gZGUgbGEgdGFibGUgcGFydGllcyBkZXMgcmVuY29udHJlcyBwYXIgw6lxdWlwZXMKCQkkZmxkcyA9ICIKCQkJaWQgSSgxMSkgQVVUTyBLRVksCgkJCWZrX2lkIEkoMTEpLAoJCQlqb3VldXJBIEMoMjU1KSwKCQkJY2x0QSBDKDI1NSksCgkJCWpvdWV1ckIgQygyNTUpLAoJCQljbHRCIEMoMjU1KSI7CgkJJHFzbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX3JlbmNvbnRyZXNfcGFydGllcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkKCQkjaW5kZXhlcwoKCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoY21zX2RiX3ByZWZpeCgpLidma19pZCcsCgkJCQkgICAgCQkJCWNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BpbmdfZmV1aWxsZXNfcmVuY29udHJlcycsICdma19pZCcpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoY21zX2RiX3ByZWZpeCgpLidma19pZCcsCgkJCSAgICBjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9waW5nX3JlbmNvbnRyZXNfcGFydGllcycsICdma19pZCcpOwoJCQkgICAgICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCQkKCQkJCgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGluZ19lcXVpcGVzIiwgImlkZXByZXV2ZSBDKDExKSIpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoJCQoJCS8vYWRkIGEgbmV3IGNvbHVtbiB0byBjYWxlbmRhcgoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCQkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfY2FsZW5kcmllciIsICJpZGVwcmV1dmUgQygxMSkiKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCX0KCQpjYXNlICAiMC4zLjAuMSIgOgoJewoJCS8vQ3LDqWF0aW9uIGRlIGxhIHRhYmxlIGZldWlsbGUgZGUgcmVuY29udHJlCgkJJGZsZHMgPSAiCgkJCWlkIEkoMTEpIEFVVE8gS0VZLAoJCQlma19pZCBJKDExKSwKCQkJeGphIEMoMjU1KSwKCQkJeGNhIEMoMjU1KSwKCQkJeGpiIEMoMjU1KSwKCQkJeGNiIEMoMjU1KSI7CgkJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2ZldWlsbGVzX3JlbmNvbnRyZXMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoJCS8vQ3LDqWF0aW9uIGRlIGxhIHRhYmxlIHBhcnRpZXMgZGVzIHJlbmNvbnRyZXMgcGFyIMOpcXVpcGVzCgkJJGZsZHMgPSAiCgkJCWlkIEkoMTEpIEFVVE8gS0VZLAoJCQlma19pZCBJKDExKSwKCQkJam91ZXVyQSBDKDI1NSksCgkJCXNjb3JlQSBDKDI1NSksCgkJCWpvdWV1ckIgQygyNTUpLAoJCQlzY29yZUIgQygyNTUpIjsKCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BpbmdfcmVuY29udHJlc19wYXJ0aWVzIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCQoJCSNpbmRleGVzCgoJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVJbmRleFNRTChjbXNfZGJfcHJlZml4KCkuJ2ZrX2lkJywKCQkJCSAgICAJCQkJY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfcGluZ19mZXVpbGxlc19yZW5jb250cmVzJywgJ2ZrX2lkJyk7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVJbmRleFNRTChjbXNfZGJfcHJlZml4KCkuJ2ZrX2lkJywKCQkJICAgIGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BpbmdfcmVuY29udHJlc19wYXJ0aWVzJywgJ2ZrX2lkJyk7CgkJCSAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cgl9CgkKfQoKCi8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwokdGhpcy0+QXVkaXQoIDAsIAoJICAgICAgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAKCSAgICAgICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsICR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCi8vbm90ZTogbW9kdWxlIGFwaSBoYW5kbGVzIHNlbmRpbmcgZ2VuZXJpYyBldmVudCBvZiBtb2R1bGUgdXBncmFkZWQgaGVyZQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9IFBpbmcKdmVyc2lvbiA9IDAuMy4wLjEKZGVzY3JpcHRpb24gPSAKYXV0aG9yID0gYWdpLXdlYmNvbnNlaWwKYXV0aG9yZW1haWwgPSBjbGF1ZGVAYWdpLXdlYmNvbnNlaWwuZnIKbWluY21zdmVyc2lvbiA9IDIuMAoxMQ==]]></data>
	</file>
	<file>
	  <filename>/Ping.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlIDogUGluZyAtIAojIFZlcnNpb24gOiAwLjIuNSwgU2MKIyBBdXRldXIgOiBDbGF1ZGUgU0lPSEFOCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8qKgogKgogKiBAYXV0aG9yIENsYXVkZSBTSU9IQU4KICogQHNpbmNlIDAuMwogKiBAdmVyc2lvbiAkUmV2aXNpb246IDM4MjcgJAogKiBAbW9kaWZpZWRieSAkTGFzdENoYW5nZWRCeTogQ2xhdWRlCiAqIEBsYXN0bW9kaWZpZWQgJERhdGU6IDIwMDctMDMtMTIgMTE6NTY6MTYgKzAyMDAgKE1vbiwgMjggSnVpbCAyMDE1KSAkCiAqIEBsaWNlbnNlIEdQTAogKiovCmNsYXNzIFBpbmcgZXh0ZW5kcyBDTVNNb2R1bGUKewogIAogIGZ1bmN0aW9uIEdldE5hbWUoKSB7IHJldHVybiAnUGluZyc7IH0gICAKICBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7IHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7IH0gICAKICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkgeyByZXR1cm4gJzAuMy4wLjEnOyB9ICAKICBmdW5jdGlvbiBHZXRIZWxwKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsgfSAgIAogIGZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdhZ2ktd2ViY29uc2VpbCc7IH0gCiAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7IHJldHVybiAnY2xhdWRlQGFnaS13ZWJjb25zZWlsLmZyJzsgfQogIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTsgfQogICAgCiAgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7IHJldHVybiB0cnVlOyB9CiAgZnVuY3Rpb24gSGFzQWRtaW4oKSB7IHJldHVybiB0cnVlOyB9ICAgCiAgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkgeyByZXR1cm4gJ2NvbnRlbnQnOyB9CiAgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOyB9CiAKICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogIHsKICAgIAlyZXR1cm4gCgkJJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUGluZyBVc2UnKTsKCQogIH0KICAKICAKICBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQogIHsKICAgIC8vcmV0dXJuIGFycmF5KCdOTVMnPT4nMi45JywgJ0Zyb250RW5kVXNlcnMnPT4nMS4yNCcpOwogIH0KCiAgCgogIGZ1bmN0aW9uIE1heGltdW1DTVNWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gIjIuMCI7CiAgfQoKICAKICBmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkKICB7IAogIAkkdGhpcy0+UmVnaXN0ZXJNb2R1bGVQbHVnaW4oKTsKCSR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXMoKTsKCQoJLy9mb3JtIHBhcmFtZXRlcnMKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzdWJtaXQnLENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndG91cmxpc3QnLENMRUFOX0lOVCk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZXF1aXBlbGlzdCcsQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd0eXBlX2NvbXBldCcsQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdyZWNvcmRfam91ZXVyJywgQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdjYW5jZWwnLENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaWRfdXNlcicsQ0xFQU5fSU5UKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdub21fY29tcGxldCcsQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdhZHJlc3NlJyxDTEVBTl9TVFJJTkcpOwoJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2NvZGVwb3N0YWwnLENMRUFOX0lOVCk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY29tbXVuZScsQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdlbWFpbCcsQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdjb25maXJtX2VtYWlsJyxDTEVBTl9TVFJJTkcpOwoJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3JlY29yZF9pZCcsIENMRUFOX0lOVCk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndHlwZV9jb21wZXRpdGlvbicsIENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGF0ZV9jb21wZXQnLCBDTEVBTl9OT05FKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdhZHZlcnNhaXJlcycsIENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndG91cicsIENMRUFOX0lOVCk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZXF1aXBlJywgQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdsb2NhdXgnLCBDTEVBTl9TVFJJTkcpOwoJJHRoaXMtPlNFdFBhcmFtZXRlclR5cGUoJ2pvdWV1cicsIENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaWQnLCBDTEVBTl9JTlQpOwoJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ251bWVybycsIENMRUFOX0lOVCk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbGljZW5jZScsIENMRUFOX0lOVCk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnYWR2bGljJywgQ0xFQU5fSU5UKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd2ZCcsIENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbnVtam91cm4nLCBDTEVBTl9JTlQpOwoJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2NvZGVjaGFtcCcsIENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGF0ZScsIENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnYWR2c2V4ZScsIENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnYWR2bm9tcHJlJywgQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdwb2ludHJlcycsIENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY29lZmNoYW1wJywgQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdhZHZjbGFvZicsIENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY2x1Yl91bmlxdWVtZW50JywgQ0xFQU5fSU5UKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd0ZW1wbGF0ZScsIENMRUFOX0lOVCk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZWRpdCcsIENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbGltaXQnLCBDTEVBTl9JTlQpOwoJLy8KCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkYXRlY3JlYXRlZCcsIENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGF0ZW1haicsIENMRUFOX1NUUklORyk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbW9pcycsIENMRUFOX0lOVCk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbW9udGgnLCBDTEVBTl9TVFJJTkcpOwoJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ21vbnRoc2xpc3QnLENMRUFOX0lOVCk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnYW5uZWUnLCBDTEVBTl9JTlQpOwoJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3BoYXNlJywgQ0xFQU5fSU5UKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdhbm5lZScsIENMRUFOX0lOVCk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbm9tJywgQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdwcmVub20nLCBDTEVBTl9TVFJJTkcpOwoJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2FjdGlmJywgQ0xFQU5fSU5UKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdwb2ludCcsIENMRUFOX0lOVCk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY2xuYXQnLCBDTEVBTl9JTlQpOwoJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3JhbmdyZWcnLCBDTEVBTl9JTlQpOwoJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3JhbmdkZXAnLCBDTEVBTl9JTlQpOwoJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3Byb2dtb2lzJywgQ0xFQU5fSU5UKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzYWlzb24nLCBDTEVBTl9TVFJJTkcpOwoJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2RhdGVfZGVidXQnLCBDTEVBTl9TVFJJTkcpOwoJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2RhdGVfZmluJywgQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd0eXBlJywgQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdpZHBvdWxlJywgQ0xFQU5fSU5UKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdpZGRpdicsIENMRUFOX0lOVCk7CgkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaWRlcHJldXZlJywgQ0xFQU5fSU5UKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd0YWJsZWF1JywgQ0xFQU5fSU5UKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdsaWVuJywgQ0xFQU5fU1RSSU5HKTsKCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdtZXNzYWdlJywgQ0xFQU5fU1RSSU5HKTsKCn0KCmZ1bmN0aW9uIEluaXRpYWxpemVBZG1pbigpCnsKICAJJHRoaXMtPlNldFBhcmFtZXRlcnMoKTsKCS8vJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigncGFnZWxpbWl0JywgMTAwMDAwLCAkdGhpcy0+TGFuZygnaGVscF9wYWdlbGltaXQnKSk7CgkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0b3VyJywgMSwgJHRoaXMtPkxhbmcoJ2hlbHBfdG91cicpKTsKCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3R5cGVfY29tcGV0JywgMSwgJHRoaXMtPkxhbmcoJ2hlbHBfdHlwZV9jb21wZXQnKSk7CgkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdkYXRlX2RlYnV0JywgJycsICR0aGlzLT5MYW5nKCdoZWxwX2RhdGVfZGVidXQnKSApOwoJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignZGF0ZV9maW4nLCAnJywgJHRoaXMtPkxhbmcoJ2hlbHBfZGF0ZV9maW4nKSApOwoJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignbGltaXQnLCAxMDAwMCwgJHRoaXMtPkxhbmcoJ2hlbHBfbGltaXQnKSk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBIYXNDYXBhYmlsaXR5KCRjYXBhYmlsaXR5LCAkcGFyYW1zID0gYXJyYXkoKSkKewogICBpZiggJGNhcGFiaWxpdHkgPT0gJ3Rhc2tzJyApIHJldHVybiBUUlVFOwogICByZXR1cm4gRkFMU0U7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRfdGFza3MoKQp7CiAgICRvYmogPSBhcnJheSgpOwoJJG9ialswXSA9IG5ldyBQaW5nUmVjdXBGZnR0VGFzaygpOwogICAJJG9ialsxXSA9IG5ldyBQaW5nUmVjdXBTcGlkVGFzaygpOyAgCnJldHVybiAkb2JqOyAKfQoKICBmdW5jdGlvbiBHZXRFdmVudERlc2NyaXB0aW9uICggJGV2ZW50bmFtZSApCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdldmVudF9pbmZvXycuJGV2ZW50bmFtZSApOwogIH0KICAgICAKICBmdW5jdGlvbiBHZXRFdmVudEhlbHAgKCAkZXZlbnRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2hlbHBfJy4kZXZlbnRuYW1lICk7CiAgfQoKICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsgfQogIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsgfQogIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOyB9CiAgCiAgCiAgZnVuY3Rpb24gX1NldFN0YXR1cygkb2lkLCAkc3RhdHVzKSB7CiAgICAvLy4uLgogIH0KCgpmdW5jdGlvbiBkcm9wZG93biAoJGNvbXBldGl0aW9uKQp7CgkkZGIgID0gY21zbXMoKS0+R2V0RGIoKTsKCSRxdWVyeSA9IlNFTEVDVCBqb3VldXJzIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9waW5nX2NvbXBldGl0aW9ucyBXSEVSRSBjb2RlX2NvbXBldCA9ID8iOwoJJGRicmV0b3VyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGNvbXBldGl0aW9uKSk7CgkKCWlmICgkZGJyZXRvdXIgJiYgJGRicmV0b3VyLT5SZWNvcmRDb3VudCgpID4gMCkKICAJewogICAgCQl3aGlsZSAoJHJvdz0gJGRicmV0b3VyLT5GZXRjaFJvdygpKQogICAgICAJCXsKCQkJJGpvdWV1cnMgPSAkcm93Wydqb3VldXJzJ107CgkJCXJldHVybiAkam91ZXVyczsKCQl9CgoJfQp9CgpmdW5jdGlvbiByYW5kb20oJGNhcikgewokc3RyaW5nID0gIiI7CiRjaGFpbmUgPSAiYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5IjsKc3JhbmQoKGRvdWJsZSltaWNyb3RpbWUoKSoxMDAwMDAwKTsKZm9yKCRpPTA7ICRpPCRjYXI7ICRpKyspIHsKJHN0cmluZyAuPSAkY2hhaW5lW3JhbmQoKSVzdHJsZW4oJGNoYWluZSldOwp9CnJldHVybiAkc3RyaW5nOwp9CgpmdW5jdGlvbiBWZXJpZmllckVtYWlsKCRtb25lbWFpbCl7CiAgaWYgKHByZWdfbWF0Y2goIiNeW2EtejAtOS5fLV0rQFthLXowLTkuXy1dezIsfVwuW2Etel17Miw0fSQjIiwgJG1vbmVtYWlsKSkKICAgIHsgcmV0dXJuIHRydWU7fQp9CgpmdW5jdGlvbiBkYXRldmVyc2ZyICgkZGF0ZSl7CSAgIAoJJGRhdGVhcnIgPSBleHBsb2RlKCcvJywgJGRhdGUpOwoJJGRhdGVmciA9ICRkYXRlYXJyWzJdIC4gJy0nIC4gJGRhdGVhcnJbMV0gLiAnLScgLiAkZGF0ZWFyclswXTsKCXJldHVybiAkZGF0ZWZyOwoJfQoKZnVuY3Rpb24gY29udl9kYXRlX3ZlcnNfbXlzcWwoJHN0cl9kYXRlKSB7CgkkY2hndCA9IGV4cGxvZGUoIi8iLCRzdHJfZGF0ZSk7CgkkZGF5ID0gc3Vic3RyKCRjaGd0LDAsMik7CgkkbW9udGggPSBzdWJzdHIoJGNoZ3QsMiwyKTsKCSR5ZWFyID0gc3Vic3RyKCRjaGd0LDQsMik7CgkkZGF0ZSA9ICIkeWVhciIuIi0iLiIkbW9udGgiLiItIi4iJGRheSI7CgoKCSAvLyAkcmV0b3VyPWRhdGUoInktbS1kIiwgbWt0aW1lKDAsIDAsIDAsICRtb250aCwgJGRheSwgJHllYXIpKTsKCSByZXR1cm4gJGRhdGU7Cn0KZnVuY3Rpb24gbW9pc19mcmFuY2FpcygkbW9pcyl7CgkkbW9udGhzID0gYXJyYXkoIkphbnZpZXIiLCAiRsOpdnJpZXIiLCAiTWFycyIsICJBdnJpbCIsICJNYWkiLCAiSnVpbiIsICJqdWlsbGV0IiwgIkFvdXQiLCAiU2VwdGVtYnJlIiwgIk9jdG9icmUiLCAiTm92ZW1icmUiLCAiZMOpY2VtYnJlIik7CgkkbW9udGhfdG9fZGlzcGxheSA9ICRtb2lzLTE7CgkkbW9udGhfZnJhbmNhaXMgPSAkbW9udGhzWyIkbW9udGhfdG9fZGlzcGxheSJdOwoJcmV0dXJuICRtb250aF9mcmFuY2FpczsKfQoKfSAvL2VuZCBjbGFzcwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/add_all_sit_mens.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyo8cHJlPnskcm93YXJyYXl8dmFyX2R1bXB9PC9wcmU+Kn0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxwPlNldWxlcyBsZXMgc2l0dWF0aW9ucyByZW5zZWlnbsOpZXMgc2Vyb250IHByaXNlcyBlbiBjb21wdGUgKD4wKTwvcD4KeyRmb3Jtc3RhcnR9CnskbW9pc19jb3VyYW50fQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Nb2lzIDo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGNob2l4X21vaXN9IDwvcD4KICA8L2Rpdj4KCgp7Zm9yZWFjaCBmcm9tPSRyb3dhcnJheSBrZXk9a2V5IGl0ZW09ZW50cnl9CiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXskY250fSI+CiAgICAgICAgCiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4geyRlbnRyeX0gOjwvcD4KCSAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImNtc190ZXh0ZmllbGQiIG5hbWU9InskYWN0aW9uaWR9bGljZW5jZVt7JGtleX1dIiBpZD0ieyRhY3Rpb25pZH17JGtleX0iIHZhbHVlPSIiPjwvcD4KICAgICAgICAKICAgIDwvZGl2PgogICAgey9mb3JlYWNofQoKCQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fXskY2FuY2VsfTwvcD4KICA8L2Rpdj4KeyRmb3JtZW5kfQo8L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/add_compet.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQ+CiAkKGZ1bmN0aW9uKCkgewogICAkKCAiI20xX2RhdGVfZGVidXQiICkuZGF0ZXBpY2tlcih7IGRhdGVGb3JtYXQ6ICJ5eS1tbS1kZCIgfSk7CiB9KTsKIDwvc2NyaXB0Pgp7L2xpdGVyYWx9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CnskZm9ybXN0YXJ0fQp7JHJlY29yZF9pZH0KeyRpbmRpdnN9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPkNvbXDDqXRpdGlvbiA6PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpZGVwcmV1dmV9IHsqJHRvb2x0aXAqfTwvcD4KICA8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPkRhdGUgZMOpYnV0OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZGF0ZV9kZWJ1dH08L3A+CiAgPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+RGF0ZSBmaW46PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZGF0ZV9maW59PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Ub3VyIG91IE7CsCBKb3VybsOpZTo8L3A+CjxwIGNsYXNzPSJwYWdlaW5wdXQiPnskbnVtam91cm59PC9wPgo8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH17JGNhbmNlbH08L3A+CiAgPC9kaXY+CnskZm9ybWVuZH0KPC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/add_sit_mens.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyo8cHJlPnskcm93YXJyYXl8dmFyX2R1bXB9PC9wcmU+Kn0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KPHA+TGVzIG1vaXMgbm9uIHJlbnNlaWduw6lzIG5lIHNlcm9udCBwYXMgcHJpcyBlbiBjb21wdGUuIExlIG5vbSBldCBsZSBwcsOpbm9tIHNvbnQgZmFjdWx0YXRpZnMuPC9wPgkKeyRmb3Jtc3RhcnR9CnsqJG1vbnRoKn0KeyokbW9pc19jb3VyYW50Kn0Ke2lmICRwaGFzZSA9PScxJ30Ke2Fzc2lnbiB2YXI9Y250IHZhbHVlPTl9CntlbHNlfQp7YXNzaWduIHZhcj1jbnQgdmFsdWU9MX0Key9pZn0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Sm91ZXVyIDo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JG5vbX0geyRwcmVub219PC9wPgogIDwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5MaWNlbmNlIDo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGxpY2VuY2V9PC9wPgogIDwvZGl2Pgp7aWYgJHBoYXNlPT0yfQo8ZGl2IGNsYXNzPSJzZWN0aW9uLTkiPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Nb2lzIDkgOiA8L3A+Cgk8cCBjbGFzcz0icGFnZWlucHV0Ij48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImNtc190ZXh0ZmllbGQiIG5hbWU9InskYWN0aW9uaWR9bW9udGhbOV0iIGlkPSJ7JGFjdGlvbmlkfW1vbnRoW10iIHZhbHVlPSJ7aWYgaXNzZXQoJHJvd2FycmF5WzldKX17JHJvd2FycmF5WzldfXtlbHNlfXsvaWZ9Ij48L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uLTEwIj4KCTxwIGNsYXNzPSJwYWdldGV4dCI+TW9pcyAxMCA6IDwvcD4KCTxwIGNsYXNzPSJwYWdlaW5wdXQiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iY21zX3RleHRmaWVsZCIgbmFtZT0ieyRhY3Rpb25pZH1tb250aFsxMF0iIGlkPSJ7JGFjdGlvbmlkfW1vbnRoWzEwXSIgdmFsdWU9IntpZiBpc3NldCgkcm93YXJyYXlbMTBdKX17JHJvd2FycmF5WzEwXX17ZWxzZX17L2lmfSI+PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbi0xMSI+Cgk8cCBjbGFzcz0icGFnZXRleHQiPk1vaXMgMTEgOiA8L3A+Cgk8cCBjbGFzcz0icGFnZWlucHV0Ij48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImNtc190ZXh0ZmllbGQiIG5hbWU9InskYWN0aW9uaWR9bW9udGhbMTFdIiBpZD0ieyRhY3Rpb25pZH1tb250aFsxMV0iIHZhbHVlPSJ7aWYgaXNzZXQoJHJvd2FycmF5WzExXSl9eyRyb3dhcnJheVsxMV19e2Vsc2V9ey9pZn0iPjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24tMTIiPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Nb2lzIDEyIDogPC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJjbXNfdGV4dGZpZWxkIiBuYW1lPSJ7JGFjdGlvbmlkfW1vbnRoWzEyXSIgaWQ9InskYWN0aW9uaWR9bW9udGhbMTJdIiB2YWx1ZT0ie2lmIGlzc2V0KCRyb3dhcnJheVsxMl0pfXskcm93YXJyYXlbMTJdfXtlbHNlfXsvaWZ9Ij48L3A+CjwvZGl2PgoKCnsvaWZ9Cnt3aGlsZSAkY250IDw9ICRtb2lzX2NvdXJhbnR9Cgp7KmZvcmVhY2ggZnJvbT0kcm93YXJyYXlbJGNudF0gaXRlbT1lbnRyeSp9CiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXskY250fSI+CiAgICAgICAgCiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Nb2lzIHskY250fTo8L3A+CgkgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJjbXNfdGV4dGZpZWxkIiBuYW1lPSJ7JGFjdGlvbmlkfW1vbnRoW3skY250fV0iIGlkPSJ7JGFjdGlvbmlkfW1vbnRoW3skY250fV0iIHZhbHVlPSJ7aWYgaXNzZXQoJHJvd2FycmF5WyRjbnRdKX17JHJvd2FycmF5WyRjbnRdfXtlbHNlfXsvaWZ9Ij48L3A+CiAgICAgICAgCiAgICA8L2Rpdj4KICAgIHsqL2ZvcmVhY2gqfQp7YXNzaWduIHZhcj1jbnQgdmFsdWU9JGNudCsxfQp7L3doaWxlfQoJCiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgogIDwvZGl2Pgp7JGZvcm1lbmR9CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/add_type_compet.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGxhYmVsPnskdGV4dH08L2xhYmVsPgp7aWYgJGVycm9yfQo8Zm9udCBjb2xvcj0icmVkIj4Key9pZn0Ke2lmICRtZXNzYWdlIG5lICIifQo8c3Ryb25nPnskbWVzc2FnZX08L3N0cm9uZz4Key9pZn0Ke2lmICRlcnJvcn0KPC9mb250Pgp7L2lmfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgp7JGZvcm1zdGFydH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Tm9tIDo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JG5hbWV9PC9wPgogIDwvZGl2PiAgCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5jb2VmZmljaWVudDo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGNvZWZmaWNpZW50fTwvcD4KICA8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Db21ww6l0aXRpb24gaW5kaXZpZHVlbGxlczo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbmRpdnN9PC9wPgo8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH17JGNhbmNlbH08L3A+CiAgPC9kaXY+CnskZm9ybWVuZH0KPC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/adminprefs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iYWxlcnQgIGFsZXJ0LWluZm8iPgogICAgPHAgY2xhc3M9ImFsZXJ0LWluZm8iPkxlcyBvcmdhbmlzbWVzIG4nYXBwcmFpc3NlbnQgcGFzID8oIExpZ3VlcywgWm9uZXMsIGTDqXApIHskcmVjdXBfb3JnYX08L3A+CjwvZGl2Pgp7JHN0YXJ0Zm9ybX0KPGZpZWxkc2V0Pgo8bGVnZW5kPkNvbmZpZ3VyYXRpb24gcHJpbmNpcGFsZTwvbGVnZW5kPgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPkxlIG51bcOpcm8gZGUgdm90cmUgY2x1YjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NsdWJfbnVtYmVyfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPlZvdHJlIHpvbmU8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF96b25lfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPlZvdHJlIGxpZ3VlPC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfbGlndWV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Vm90cmUgZMOpcGFydGVtZW50PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfZGVwfTwvcD4KCTwvZGl2PgoKCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5QaGFzZSBlbiBjb3Vyczo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9waGFzZX08L3A+Cgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+U2Fpc29uIGVuIGNvdXJzIDo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9zYWlzb25fZW5fY291cnN9PC9wPgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJCTxwIGNsYXNzPSJwYWdldGV4dCI+Tm9tIGfDqW7DqXJpcXVlIGRlIHZvcyDDqXF1aXBlcyA6PC9wPgoJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X25vbV9lcXVpcGVzfTwvcD4KCQkJPC9kaXY+Cgo8L2ZpZWxkc2V0Pgo8ZmllbGRzZXQ+Cgk8bGVnZW5kPkF1dHJlcyBvcHRpb25zPC9sZWdlbmQ+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+TGUgY2FsZW5kcmllciBzZSByZW1wbGl0IGF2ZWMgbGUgcsOpc3VsdGF0cyBkZXMgcG91bGVzIChyZWNvbW1hbmTDqSk8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9wb3B1bGF0ZV9jYWxlbmRhcn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5BZmZpY2hlciBsZXMgcsOpc3VsdGF0cyBkZSBtZXMgw6lxdWlwZXMgdW5pcXVlbWVudDwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2FmZmljaGVfY2x1Yl91bmlxdWVtZW50fTwvcD4KCTwvZGl2PgoJPCEtLQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPlLDqWN1cMOpcmF0aW9uIHNpIHNpdHVhdGlvbiBtZW5zdWVsbGUgw6Agam91ciA/PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc2l0bWVuc19va19vbmx5fTwvcD4KCTwvZGl2PgoJLS0+Cgk8L2ZpZWxkc2V0PgoJPGZpZWxkc2V0PgoJCTxsZWdlbmQ+U2NyaXB0cyBhdXRvbWF0aXF1ZXM8L2xlZ2VuZD4KCQk8ZmllbGRzZXQ+CgkJCTxsZWdlbmQ+U3BpZDwvbGVnZW5kPgoJCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Sw6ljdXDDqXJhdGlvbiB0b3VzIGxlcyB4IGpvdXJzPC9wPgoJCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9zcGlkX2ludGVydmFsfTwvcD4KCQkJPC9kaXY+CgkJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJCQk8cCBjbGFzcz0icGFnZXRleHQiPlLDqXN1bHRhdHMgZGUgeCBqb3VldXJzPC9wPgoJCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9zcGlkX25vbWJyZXN9PC9wPgoJCQk8L2Rpdj4KCQk8L2ZpZWxkc2V0PgoJCTxmaWVsZHNldD4KCQkJPGxlZ2VuZD5GRlRUPC9sZWdlbmQ+CgkJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJCQk8cCBjbGFzcz0icGFnZXRleHQiPlLDqWN1cMOpcmF0aW9uIHRvdXMgbGVzIHggam91cnM8L3A+CgkJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2ZmdHRfaW50ZXJ2YWx9PC9wPgoJCQk8L2Rpdj4KCQkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCTxwIGNsYXNzPSJwYWdldGV4dCI+UsOpc3VsdGF0cyBkZSB4IGpvdWV1cnM8L3A+CgkJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2ZmdHRfbm9tYnJlc308L3A+CgkJCTwvZGl2PgoJCTwvZmllbGRzZXQ+Cgk8L2ZpZWxkc2V0PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH08L3A+Cgk8L2Rpdj4KeyRlbmRmb3JtfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/allsitmens.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyo8cHJlPnskaXRlbXN8dmFyX2R1bXB9PC9wcmU+Kn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgp7aWYgJGpvdXIgPDEwfQo8cCBjbGFzcz0id2FybmluZyI+QXR0ZW50aW9uICEgTCdhY2PDqHMgbidlc3QgcGFzIGVuY29yZSBsaWJyZSAhIFZvdXMgbmUgcG91dmV6IHBhcyByw6ljdXDDqXJlciBsZXMgc2l0dWF0aW9ucyBtZW5zdWVsbGVzIGF1dG9tYXRpcXVlbWVudDwvcD57ZWxzZX08cCBjbGFzcz0ic3VjY2VzcyI+TCdhY2PDqHMgZXN0IGTDqXNvcm1haXMgbGlicmUsIHZvdXMgcG91dmV6ICByw6ljdXDDqXJlciBsZXMgc2l0dWF0aW9ucyBtZW5zdWVsbGVzLjwvcD57L2lmfTwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGl0ZW1jb3VudH0mbmJzcDt7JGl0ZW1zZm91bmR9IHwgeyRyZXRyaWV2ZWFsbHNpdG1lbnN9IHwgeyRhZGRhbGxzaXRtZW5zbGlua308L3A+PC9kaXY+CntpZiBpc3NldCgkZm9ybXN0YXJ0KSB9CjxmaWVsZHNldD4KICA8bGVnZW5kPkZpbHRyZXM8L2xlZ2VuZD4KICB7JGZvcm1zdGFydH0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Nb2lzOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfbW9udGh9IDwvcD4KCTxwIGNsYXNzPSJwYWdldGV4dCI+Sm91ZXVyIDo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3BsYXllcn0gPC9wPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdGZpbHRlcn17JGhpZGRlbnxkZWZhdWx0OicnfTwvcD4KICA8L2Rpdj4KICB7JGZvcm1lbmR9CjwvZmllbGRzZXQ+CnsvaWZ9CntpZiAkaXRlbWNvdW50ID4gMH0KeyRmb3JtMnN0YXJ0fQo8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgogPHRoZWFkPgoJPHRyPgoJCTx0aD5JRDwvdGg+CgkJPHRoPkxpY2VuY2U8L3RoPgoJCTx0aD5Nb2lzPC90aD4KCQk8dGg+Sm91ZXVyPC90aD4KCQk8dGg+UG9pbnRzPC90aD4KCQk8dGg+UmFuZyBuYXQ8L3RoPgoJCTx0aD5SYW5nIHJlZzwvdGg+CgkJPHRoPlJhbmcgZMOpcDwvdGg+CgkJPHRoPlByb2dyZXNzaW9uIG1lbnM8L3RoPgoJCTx0aCBjb2xzcGFuPSIyIj5BY3Rpb25zPC90aD4KCQk8dGg+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0ic2VsZWN0YWxsIiBuYW1lPSJzZWxlY3RhbGwiPjwvdGg+Cgk8L3RyPgogPC90aGVhZD4KIDx0Ym9keT4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KICA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+Cgk8dGQ+eyRlbnRyeS0+aWR9PC90ZD4KCTx0ZD57JGVudHJ5LT5saWNlbmNlfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+bW9pc308L3RkPgogICAgPHRkPnskZW50cnktPmpvdWV1cn08L3RkPgogICAgPHRkPnskZW50cnktPnBvaW50c308L3RkPgoJPHRkPnskZW50cnktPmNsbmF0fTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+cmFuZ3JlZ308L3RkPgoJPHRkPnskZW50cnktPnJhbmdkZXB9PC90ZD4KCTx0ZD57JGVudHJ5LT5wcm9nbW9pc308L3RkPgoJPHRkPnskZW50cnktPmVkaXRsaW5rfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPgoJPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1zZWxbXSIgdmFsdWU9InskZW50cnktPmxpY2VuY2V9IiBjbGFzcz0ic2VsZWN0Ij48L3RkPgogIDwvdHI+CnsvZm9yZWFjaH0KIDwvdGJvZHk+CjwvdGFibGU+CjwhLS0gU0VMRUNUIERST1BET1dOIC0tPgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyIgc3R5bGU9ImZsb2F0OiByaWdodDsiPgo8YnIvPnskYWN0aW9uZGVtYXNzZX17JHN1Ym1pdF9tYXNzYWN0aW9ufQogIDwvZGl2Pgp7JGZvcm0yZW5kfQp7L2lmfQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57KiRjcmVhdGVsaW5rKn08L3A+PC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/avenir.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyo8cHJlPnskaXRlbXN8dmFyX2R1bXB9PC9wcmU+Kn0Ke2Fzc2lnbiB2YXI9Y29tcHRldXIgdmFsdWUgPSAwfQoKPHVsPgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQp7KjxwPjxwcmU+eyRwcm9kc197JGNvbXB0ZXVyKyt9fHZhcl9kdW1wfTwvcHJlPjwvcD4qfQo8bGk+eyokZW50cnktPnZhbGV1cip9e2lmICRlbnRyeS0+aW5kaXZzPT0wfXskZW50cnktPmRhdGV8ZGF0ZV9mb3JtYXQ6IiVkLyVtLyVZIn0geyRlbnRyeS0+Y29tcGV0fQoJPHVsPgoJCXtmb3JlYWNoIGZyb209JHByb2RzX3skZW50cnktPnZhbGV1cn0gaXRlbT1kb25uZWV9CgkJCTxsaT4geyRkb25uZWUtPmVxdWF9IC0geyRkb25uZWUtPmVxdWJ9PC9saT4KCQl7L2ZvcmVhY2h9Cgk8L3VsPgp7ZWxzZX17JGVudHJ5LT5kYXRlfGRhdGVfZm9ybWF0OiIlZC8lbS8lWSJ9IHskZW50cnktPmNvbXBldH17L2lmfTwvbGk+CnsvZm9yZWFjaH0KPC91bD4=]]></data>
	</file>
	<file>
	  <filename>/templates/bar-charts2.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHByZT57JGRhdGFkb25uZWVzfHZhcl9kdW1wfTwvcHJlPgo8c2NyaXB0IHNyYz0iaHR0cDovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Imh0dHA6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LW1pZ3JhdGUtMS4xLjAuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IGNsYXNzPSJpbmNsdWRlIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibW9kdWxlcy9QaW5nL2pxcGxvdC9qcXVlcnkuanFwbG90Lm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Im1vZHVsZXMvUGluZy9qcXBsb3QvcGx1Z2lucy9qcXBsb3QuYmFyUmVuZGVyZXIubWluLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibW9kdWxlcy9QaW5nL2pxcGxvdC9wbHVnaW5zL2pxcGxvdC5jYXRlZ29yeUF4aXNSZW5kZXJlci5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJtb2R1bGVzL1BpbmcvanFwbG90L3BsdWdpbnMvanFwbG90LnBvaW50TGFiZWxzLm1pbi5qcyI+PC9zY3JpcHQ+Cgo8c2NyaXB0IGNsYXNzPSJpbmNsdWRlIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibW9kdWxlcy9QaW5nL2pxcGxvdC9wbHVnaW5zL2pxcGxvdC5waWVSZW5kZXJlci5taW4uanMiPjwvc2NyaXB0Pgp7KjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Im1vZHVsZXMvUGluZy9qcXBsb3QvZXhhbXBsZS5taW4uanMiPjwvc2NyaXB0Pip9Cgo8ZGl2IGlkPSJjaGFydDQiIHN0eWxlPSJoZWlnaHQ6MzAwcHg7IHdpZHRoOjUwMHB4OyI+PC9kaXY+Cgp7bGl0ZXJhbH0KPHNjcmlwdCBjbGFzcz0iY29kZSIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCSQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CgkJdmFyIGxpbmUxID0gey9saXRlcmFsfXskZGF0YWRvbm5lZXN9O3tsaXRlcmFsfQoJCQoJCQoJIAoJICB2YXIgcGxvdDQgPSAkLmpxcGxvdCgnY2hhcnQ0JywgW2xpbmUxXSwgewoJICAgICAgdGl0bGU6ICdTdGFja2VkIEJhciBDaGFydCB3aXRoIEN1bXVsYXRpdmUgUG9pbnQgTGFiZWxzJywgCgkgICAgICBzdGFja1NlcmllczogdHJ1ZSwgCgkgICAgICBzZXJpZXNEZWZhdWx0czogewoJICAgICAgICAgIHJlbmRlcmVyOiAkLmpxcGxvdC5CYXJSZW5kZXJlciwKCSAgICAgICAgICByZW5kZXJlck9wdGlvbnM6e2Jhck1hcmdpbjogMjV9LCAKCSAgICAgICAgICBwb2ludExhYmVsczp7c2hvdzp0cnVlLCBzdGFja2VkVmFsdWU6IHRydWV9CgkgICAgICB9LAoJICAgICAgYXhlczogewoJICAgICAgICAgIHhheGlzOntyZW5kZXJlcjokLmpxcGxvdC5DYXRlZ29yeUF4aXNSZW5kZXJlcn0KCSAgICAgIH0KCSAgfSk7Cgl9KTsKPC9zY3JpcHQ+CnsvbGl0ZXJhbH0KCgo8IS0tIERvbid0IHRvdWNoIHRoaXMhIC0tPgoKCiAgICAKCjwhLS0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjkuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibW9kdWxlcy9QaW5nL2pxcGxvdC9qcXVlcnkuanFwbG90Lm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Im1vZHVsZXMvUGluZy9qcXBsb3QvcGx1Z2lucy9qcXBsb3QucGllUmVuZGVyZXIubWluLmpzIj48L3NjcmlwdD4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJmPSJtb2R1bGVzL1BpbmcvanFwbG90L2pxdWVyeS5qcXBsb3QubWluLmNzcyIgLz4KLS0+]]></data>
	</file>
	<file>
	  <filename>/templates/calendar.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyo8cHJlPnskaXRlbXN8dmFyX2R1bXB9PC9wcmU+eypkZWJ1Zyp9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLy88IVtDREFUQVsKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICAkKCcjc2VsZWN0YWxsJykuY2xpY2soZnVuY3Rpb24oKXsKICAgIHZhciB2ID0gJCh0aGlzKS5hdHRyKCdjaGVja2VkJyk7CiAgICBpZiggdiA9PSAnY2hlY2tlZCcgKSB7CiAgICAgICQoJy5zZWxlY3QnKS5hdHRyKCdjaGVja2VkJywnY2hlY2tlZCcpOwogICAgfSBlbHNlIHsKICAgICAgJCgnLnNlbGVjdCcpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKICAgIH0KICB9KTsKICAkKCcuc2VsZWN0JykuY2xpY2soZnVuY3Rpb24oKXsKICAgICQoJyNzZWxlY3RhbGwnKS5yZW1vdmVBdHRyKCdjaGVja2VkJyk7CiAgfSk7CiAgJCgnI3RvZ2dsZV9maWx0ZXInKS5jbGljayhmdW5jdGlvbigpewogICAgJCgnI2ZpbHRlcl9mb3JtJykudG9nZ2xlKCk7CiAgfSk7CiAge2lmIGlzc2V0KCR0YWJsZXNvcnRlcil9CiAgJCgnI2FydGljbGVsaXN0JykudGFibGVzb3J0ZXIoeyBzb3J0TGlzdDp7JHRhYmxlc29ydGVyfSB9KTsKICB7L2lmfQp9KTsKLy9dXT4KPC9zY3JpcHQ+CnsqCntpZiBpc3NldCgkZm9ybXN0YXJ0KSB9CjxmaWVsZHNldD4KICA8bGVnZW5kPkZpbHRyZXM8L2xlZ2VuZD4KICB7JGZvcm1zdGFydH0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPCEtLTxwIGNsYXNzPSJwYWdldGV4dCI+VHlwZSBDb21ww6l0aXRpb246PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jb21wZXR9IDwvcD4tLT4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+RGF0ZTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2RhdGV9IDwvcD4KCTxwIGNsYXNzPSJwYWdldGV4dCI+U3RhdHV0OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfc3RhdHVzfSA8L3A+Cgk8IS0tPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Kb3VldXIgOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcGxheWVyfSA8L3A+LS0+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0ZmlsdGVyfXskaGlkZGVufGRlZmF1bHQ6Jyd9PC9wPgogIDwvZGl2PgogIHskZm9ybWVuZH0KPC9maWVsZHNldD4Key9pZn0KKn0KPHAgc3R5bGU9IndpZHRoOiAxMDAlIj48c3BhbiBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+e2lmICRwaGFzZSA9PTF9eyRTZXB9IHwgeyRPY3R9IHwgeyROb3Z9IHwgeyREZWN9IHskbW9pc19zdWl2YW50fXtlbHNlfXskbW9pc19wcmVjZWRlbnR9ICB7JEphbn0gfCB7JEZldn0gfCB7JE1hcn0gfCB7JEF2cn0gfCB7JE1haX0gfCB7JEp1aW59IHwgeyRKdWlsfXsvaWZ9PC9zcGFuPjwvcD4Keyo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JHJldHJpZXZlX3VzZXJzfSB8IHskcmV0cmlldmVfdGVhbXN9IHwgeyRyZXRyaWV2ZV90ZWFtc19hdXRyZXN9IHwgeyRyZXRyaWV2ZV9hbGxfcGFydGllc30gfCB7JHJldHJpZXZlX2FsbF9zcGlkfSB8IHskcmV0cmlldmVfZGV0YWlsc19yZW5jb250cmVzfTwvcD48L2Rpdj4qfQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGl0ZW1jb3VudH0mbmJzcDt7JGl0ZW1zZm91bmR9ICB8IHskY3JlYXRlbGlua30geyokbWFpbnRlbmFudCp9PC9wPjwvZGl2Pgp7aWYgJGl0ZW1jb3VudCA+IDAgJiYgaXNfYXJyYXkoJGl0ZW1zKSAmJiBjb3VudCgkaXRlbXMpPjB9Cgp7JGZvcm0yc3RhcnR9Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CiA8dGhlYWQ+Cgk8dHI+CgkJPHRoPklkPC90aD4KCQk8dGg+Tm9tX2NvbXBldDwvdGg+CgkJPHRoPkRhdGU8L3RoPgoJCTx0aD5OwrAgVG91cjwvdGg+CgkJPHRoPlRhZyBwb3VyIGFmZmljaGFnZTwvdGg+CgkJPHRoIGNvbHNwYW49IjIiPkFjdGlvbnM8L3RoPgogICAgPC90cj4KIDwvdGhlYWQ+CiA8dGJvZHk+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9Cnsqe2lmICRlbnRyeS0+ZGF0ZV9maW4gPCAkbWFpbnRlbmFudH08dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSBwYXN0IiBzdHlsZT0iYmFja2dyb3VuZDogZ3JleTsgZm9udC1jb2xvcjogd2hpdGU7Ij57ZWxzZX0KICA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+ey9pZn0qfQogICA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+CiAgICA8dGQ+eyRlbnRyeS0+aWR9PC90ZD4KCTx0ZD57JGVudHJ5LT5uYW1lfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+ZGF0ZV9kZWJ1dHxkYXRlX2Zvcm1hdDoiJWQtJW0tJVkifS0+eyRlbnRyeS0+ZGF0ZV9maW58ZGF0ZV9mb3JtYXQ6IiVkLSVtLSVZIn08L3RkPgoJPHRkPnskZW50cnktPm51bWpvdXJufTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+dGFnfQoJe2lmICRlbnRyeS0+aW5kaXZzID09IDF9Cgl8IHskZW50cnktPnBhcnRpY2lwZX17L2lmfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+cmV0cmlldmVsaW5rfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4KCTx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+Cgk8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQo8ZGl2IHN0eWxlPSJ3aWR0aDogMTAwJTsiPgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyIgc3R5bGU9ImZsb2F0OiBsZWZ0OyI+Cgk8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnsqJGFkZGxpbmsqfTwvcD4KPC9kaXY+CntpZiAkaXRlbWNvdW50ID4gMH0KICA8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyIgc3R5bGU9ImZsb2F0OiByaWdodDsgdGV4dC1hbGlnbjogcmlnaHQ7Ij4KICAgIHskc3VibWl0X21hc3NkZWxldGV9CiAgPC9kaXY+CnsvaWZ9CjxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+CjwvZGl2Pgp7JGZvcm0yZW5kfQoKCgoKCgoK]]></data>
	</file>
	<file>
	  <filename>/templates/classement.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyoKCXtpZiBpc3NldCgkZm9ybXN0YXJ0KSB9CjxmaWVsZHNldD4KICA8bGVnZW5kPkZpbHRyZXM8L2xlZ2VuZD4KICB7JGZvcm1zdGFydH0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5UeXBlIENvbXDDqXRpdGlvbjo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NvbXBldH0gPC9wPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF90b3VyfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3RvdXJ9IDwvcD4KCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfZXF1aXBlfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2VxdWlwZX0gPC9wPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdGZpbHRlcn17JGhpZGRlbnxkZWZhdWx0OicnfTwvcD4KICA8L2Rpdj4KICB7JGZvcm1lbmR9CjwvZmllbGRzZXQ+CnsvaWZ9Cip9CntpZiAkaXRlbWNvdW50ID4gMH0KPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JHBoYXNlMX0gfCB7JHBoYXNlMn08L3A+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CiA8dGhlYWQ+Cgk8dHI+CgkJPHRoPnskaWR9PC90aD4KCQk8dGg+eyRlcXVpcGV9PC90aD4KCQk8dGg+Tml2ZWF1PC90aD4KCQk8dGg+Q29tcMOpdGl0aW9uPC90aD4KCQk8dGg+Tm9tIGNvdXJ0PC90aD4KCQk8dGggY29sc3Bhbj0iNCI+QWN0aW9uczwvdGg+Cgk8L3RyPgogPC90aGVhZD4KIDx0Ym9keT4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KICA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+Cgk8dGQ+eyRlbnRyeS0+ZnJpZW5kbHluYW1lfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+bGliZXF1aXBlfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+Y2x0fTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+ZXF1aXBlfTwvdGQ+CgogIDwvdHI+CnsvZm9yZWFjaH0KIDwvdGJvZHk+CjwvdGFibGU+CntlbHNlfQo8cD5ObyByZXN1bHRzIHlldDwvcD4Key9pZn0KCg==]]></data>
	</file>
	<file>
	  <filename>/templates/compte.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CjxmaWVsZHNldD4KPGxlZ2VuZD5Eb25uw6llcyBkZSB2b3RyZSBjb21wdGUgKGZvdXJuaWVzIHBhciBsYSBGRlRUKTwvbGVnZW5kPgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPklkIGRlIHZvdHJlIGFwcGxpY2F0aW9uPC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaWRBcHBsaX08L3A+Cgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+TW90IGRlIHBhc3NlOjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JG1vdGRlcGFzc2V9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9PC9wPgoJCTwvZGl2PgoKPC9maWVsZHNldD4KeyRlbmRmb3JtfQp7aWYgJHNlcmlhbCAhPSIifTxwPlZvdHJlIG51bcOpcm8gZGUgc8OpcmllIHVuaXF1ZSBlc3QgOiB7JHNlcmlhbH08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/contacts.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskaXRlbWNvdW50fSZuYnNwO3skaXRlbXNmb3VuZH08L3A+PC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskY3JlYXRlX25ld19jb250YWN0fTwvcD48L2Rpdj4Ke2lmICRpdGVtY291bnQgPiAwfQo8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgogPHRoZWFkPgoJPHRyPgoJCTx0aD57JGlkfTwvdGg+CgkJPHRoPlR5cGUgZGUgY29udGFjdDwvdGg+CgkJPHRoPmNvbnRhY3Q8L3RoPgoJCTx0aD5kZXNjcmlwdGlvbjwvdGg+CgkJPHRoIGNvbHNwYW49JzMnPkFjdGlvbnM8L3RoPgoJPC90cj4KPC90aGVhZD4KIDx0Ym9keT4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KICA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+Cgk8dGQ+eyRlbnRyeS0+aWR9PC90ZD4KCTx0ZD57JGVudHJ5LT50eXBlX2NvbnRhY3R9PC90ZD4KICAgIDx0ZD57JGVudHJ5LT5jb250YWN0fTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+ZGVzY3JpcHRpb259PC90ZD4KCTx0ZD57JGVudHJ5LT5jcmVhdGVfY29udGFjdH08L3RkPgoJCTx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+CiAgICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgp7ZWxzZX0KPHA+eyRjcmVhdGVfbmV3X2NvbnRhY3R9PC9wPgp7L2lmfQoK]]></data>
	</file>
	<file>
	  <filename>/templates/create_contact.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KeyRmb3Jtc3RhcnR9CgogeyRsaWNlbmNlfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5UeXBlIGRlIGNvbnRhY3Q6PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0eXBlX2NvbnRhY3R9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPkNvbnRhY3Q8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGNvbnRhY3R9PC9wPgogIDwvZGl2PiAKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5EZXNjcmlwdGlvbjo8L3A+CiAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZGVzY3JpcHRpb259PC9wPgogPC9kaXY+ICAKIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fXskYmFja317JGNhbmNlbH08L3A+CiAgPC9kaXY+CnskZm9ybWVuZH0KPC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/dater.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQ+CiAkKGZ1bmN0aW9uKCkgewogICAkKCAiI20xX2RhdGVfZGVidXQiICkuZGF0ZXBpY2tlcih7IGRhdGVGb3JtYXQ6ICJ5eS1tbS1kZCIgfSk7CiB9KTsKIDwvc2NyaXB0Pgp7L2xpdGVyYWx9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CnskZm9ybXN0YXJ0fQp7JHJlY29yZF9pZH0KCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5EYXRlIGTDqWJ1dDo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGRhdGVfZGVidXR9PC9wPgogIDwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPkRhdGUgZmluOjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGRhdGVfZmlufTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CjxwIGNsYXNzPSJwYWdldGV4dCI+VG91ciBvdSBOwrAgSm91cm7DqWU6PC9wPgo8cCBjbGFzcz0icGFnZWlucHV0Ij57JG51bWpvdXJufTwvcD4KPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgogIDwvZGl2Pgp7JGZvcm1lbmR9CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/details_rencontre.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyo8cHJlPnskaXRlbXN8dmFyX2R1bXB9PC9wcmU+Kn0Keyo8cHJlPnskcHJvZHNfMnx2YXJfZHVtcH08L3ByZT4qfQp7aWYgJHBhcmFtZXRlcnMgPT0gMX0KPGgzPkxlcyByw6lzdWx0YXRzIGR1IHskZGF0ZV9ldmVudH08L2gzPgoJPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCI+Cntmb3JlYWNoIGZyb209JGl0ZW1zICBpdGVtPWVudHJ5fQoKCQoJCQkJCQkJPHRyPjx0ZD57JGVudHJ5LT5lcXVhfTwvdGQ+PHRkPnskZW50cnktPnNjb3JlYX08L3RkPjx0ZD57JGVudHJ5LT5zY29yZWJ9PC90ZD48dGQ+eyRlbnRyeS0+ZXF1Yn08L3RkPjx0ZD57JGVudHJ5LT5kZXRhaWxzfSB7KiRlbnRyeS0+Y2xhc3MqfTwvdGQ+PC90cj4KCQkJey9mb3JlYWNofQoJCTwvdGFibGU+CgkKe2Vsc2V9CjwhLS0gZMOpYnV0IGR1IGRldXhpw6htZSBnYWJhcml0LS0+CnsqIGNlY2kgZXN0IGxlIGdhYmFyaXQgcG91ciBsZXMgYXV0cmVzIGNvbmRpdGlvbnMgKn0Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgIGl0ZW09ZW50cnl9CgoJPGgzPkxlcyByw6lzdWx0YXRzIGR1IHskZW50cnktPmRhdGVfZXZlbnR8ZGF0ZV9mb3JtYXQ6IiVkLyVtLyVZIn08L2gzPgoJCTx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQiPgoJCQl7Zm9yZWFjaCBmcm9tPSRwcm9kc197JGVudHJ5LT52YWxldXJ9IGl0ZW09ZG9ubmVlfQoJCQkJPHRyPjx0ZD57JGRvbm5lZS0+ZXF1YX08L3RkPjx0ZD57JGRvbm5lZS0+c2NvcmVhfTwvdGQ+PHRkPnskZG9ubmVlLT5zY29yZWJ9PC90ZD48dGQ+eyRkb25uZWUtPmVxdWJ9PC90ZD48dGQ+eyRkb25uZWUtPmRldGFpbHN9IHsqJGRvbm5lZS0+Y2xhc3MqfTwvdGQ+PC90cj4KCQkJey9mb3JlYWNofQoJCTwvdGFibGU+CgkKey9mb3JlYWNofQp7L2lmfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/divisions.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICQoJyNzZWxlY3RhbGwnKS5jbGljayhmdW5jdGlvbigpewogICAgdmFyIHYgPSAkKHRoaXMpLmF0dHIoJ2NoZWNrZWQnKTsKICAgIGlmKCB2ID09ICdjaGVja2VkJyApIHsKICAgICAgJCgnLnNlbGVjdCcpLmF0dHIoJ2NoZWNrZWQnLCdjaGVja2VkJyk7CiAgICB9IGVsc2UgewogICAgICAkKCcuc2VsZWN0JykucmVtb3ZlQXR0cignY2hlY2tlZCcpOwogICAgfQogIH0pOwogICQoJy5zZWxlY3QnKS5jbGljayhmdW5jdGlvbigpewogICAgJCgnI3NlbGVjdGFsbCcpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKICB9KTsKICAkKCcjdG9nZ2xlX2ZpbHRlcicpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAkKCcjZmlsdGVyX2Zvcm0nKS50b2dnbGUoKTsKICB9KTsKICB7aWYgaXNzZXQoJHRhYmxlc29ydGVyKX0KICAkKCcjYXJ0aWNsZWxpc3QnKS50YWJsZXNvcnRlcih7IHNvcnRMaXN0OnskdGFibGVzb3J0ZXJ9IH0pOwogIHsvaWZ9Cn0pOwovL11dPgo8L3NjcmlwdD4KCntpZiBpc3NldCgkZm9ybXN0YXJ0KSB9CjxmaWVsZHNldD4KICA8bGVnZW5kPkZpbHRyZXM8L2xlZ2VuZD4KICB7JGZvcm1zdGFydH0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5UeXBlIENvbXDDqXRpdGlvbjo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NvbXBldH0gPC9wPgoKICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0ZmlsdGVyfXskaGlkZGVufGRlZmF1bHQ6Jyd9PC9wPgogIDwvZGl2PgogIHskZm9ybWVuZH0KPC9maWVsZHNldD4Key9pZn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfTwvcD48L2Rpdj4Ke2lmICRpdGVtY291bnQgPiAwfQp7JGZvcm0yc3RhcnR9Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CiA8dGhlYWQ+CiAgPHRyPgoJPHRoPklkPC90aD4KCTx0aD5FcHJldXZlIChOwrApPC90aD4KCTx0aD5OaXZlYXU8L3RoPgoJPHRoPkRpdmlzaW9uIChOwrApPC90aD4KCTx0aCBjb2xzcGFuPSIyIj5BY3Rpb25zPC90aD4KICA8dGg+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0ic2VsZWN0YWxsIiBuYW1lPSJzZWxlY3RhbGwiPjwvdGg+CiAgPC90cj4KIDwvdGhlYWQ+CiA8dGJvZHk+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CiAgPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30gIj4KICAgIDx0ZD57JGVudHJ5LT5pZH08L3RkPgoJPHRkPnskZW50cnktPm5hbWV9ICh7JGVudHJ5LT5pZGVwcmV1dmV9KTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+c2NvcGV9PC90ZD4KCTwhLS08dGQ+eyRlbnRyeS0+ZGF0ZV9ldmVudHxkYXRlX2Zvcm1hdDoiJWQvJW0ifTwvdGQ+LS0+CiAgICA8dGQ+eyRlbnRyeS0+bGliZWxsZX0gKHskZW50cnktPmlkZGl2aXNpb259KTwvdGQ+CiAJPHRkPnskZW50cnktPnVwbG9hZGVkfTwvdGQ+Cgk8dGQ+IHskZW50cnktPnBvdWxlfSA8L3RkPgogICAgPHRkPnskZW50cnktPmRlbGV0ZWxpbmt9PC90ZD4KCTx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9c2VsW10iIHZhbHVlPSJ7JGVudHJ5LT5pZH0iIGNsYXNzPSJzZWxlY3QiPjwvdGQ+CiAgPC90cj4Key9mb3JlYWNofQogPC90Ym9keT4KPC90YWJsZT4KPCEtLSBTRUxFQ1QgRFJPUERPV04gLS0+CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIiBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyI+Cjxici8+eyRhY3Rpb25kZW1hc3NlfXskc3VibWl0X21hc3NhY3Rpb259CiAgPC9kaXY+CnskZm9ybTJlbmR9CnsvaWZ9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/editresult.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGxhYmVsPnskdGV4dH08L2xhYmVsPgp7aWYgJGVycm9yfQo8Zm9udCBjb2xvcj0icmVkIj4Key9pZn0Ke2lmICRtZXNzYWdlIG5lICIifQo8c3Ryb25nPnskbWVzc2FnZX08L3N0cm9uZz4Key9pZn0Ke2lmICRlcnJvcn0KPC9mb250Pgp7L2lmfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgp7JGZvcm1zdGFydH0KeyRyZWNvcmRfaWR9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPlR5cGUgQ29tcMOpdGl0aW9uOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZXByZXV2ZX08L3A+CiAgPC9kaXY+ICAKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+TsKwIEpvdXJuw6llIDo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JG51bWpvdXJufTwvcD4KICA8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPkFkdmVyc2FpcmU6PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRub219IC0geyRwdHNfam91ZXVyfTwvcD4KICA8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Q2xhc3NlbWVudCBhZHZlcnNhaXJlOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskY2xhc3NlbWVudH08L3A+CiAgPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPlZpY3RvaXJlIG91IGTDqWZhaXRlOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdmljdG9pcmV9PC9wPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5FY2FydDo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGVjYXJ0fTwvcD4KICA8L2Rpdj4KIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPkNvZWZmaWNpZW50IGRlIGwnw6lwcmV1dmU6PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjb2VmZn08L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9eyRkdXBsaXF1ZXJ9eyRjYW5jZWx9PC9wPgogIDwvZGl2Pgp7JGZvcm1lbmR9CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/editteam.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KeyRmb3Jtc3RhcnR9CnskcmVjb3JkX2lkfQogIAo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICA8cCBjbGFzcz0icGFnZXRleHQiPlNhaXNvbjo8L3A+CiAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc2Fpc29ufTwvcD4KIDwvZGl2PgogPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+UGhhc2U6PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRwaGFzZX08L3A+CiAgPC9kaXY+IAo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5FcXVpcGU6IChFeCA6IFJQIEZPVUVTTkFOVDEpPC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRsaWJlcXVpcGV9IHsqJGhlbHBfbGliZWxsZV9lcXVpcGUqfXsqY21zX2hlbHAga2V5PSdoZWxwX2xpYmVsbGVfZXF1aXBlJyp9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPkRpdmlzaW9uIChFeCA6IE5hdGlvbmFsZSAxIE1lc3NpZXVycyBQb3VsZSBDKTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskbGliZGl2aXNpb259IHsqY21zX2hlbHAga2V5PSdoZWxwX2xpYmRpdmlzaW9uJyp9PC9wPgogIDwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Eb25uZXogdW4gbm9tIGNvdXJ0IDogKEV4IDogTjEgb3UgTjEoQSkpPC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRmcmllbmRseW5hbWV9IHsqY21zX2hlbHAga2V5PSdoZWxwX2ZyaWVuZGx5bmFtZScqfTwvcD4KICA8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+SWQgZGUgbGEgZGl2aXNpb24gOiAoVm9pciBhaWRlIGR1IG1vZHVsZSk8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlkZGl2fSB7KmNtc19oZWxwIGtleT0naGVscF9pZGRpdicqfTwvcD4KICA8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+SWQgZGUgbGEgcG91bGUgOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaWRwb3VsZX0geypjbXNfaGVscCBrZXk9J2hlbHBfaWRwb3VsZScqfTwvcD4KICA8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+T3JnYW5pc2F0ZXVyOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskb3JnYW5pc21lfTwvcD4KICA8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Q29tcMOpdGl0aW9uOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaWRlcHJldXZlfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JEFqb3V0ZXJ9eyRzdWJtaXR9eyRjYW5jZWx9eyRiYWNrfTwvcD4KICA8L2Rpdj4KeyRmb3JtZW5kfQo8L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/editteamresult.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQ+CiAkKGZ1bmN0aW9uKCkgewogICAkKCAiI20xX2RhdGVfY29tcGV0IiApLmRhdGVwaWNrZXIoeyBkYXRlRm9ybWF0OiAieXktbW0tZGQiIH0pOwogfSk7CiA8L3NjcmlwdD4Key9saXRlcmFsfQo8bGFiZWw+eyR0ZXh0fTwvbGFiZWw+CntpZiAkZXJyb3J9Cjxmb250IGNvbG9yPSJyZWQiPgp7L2lmfQp7aWYgJG1lc3NhZ2UgbmUgIiJ9CjxzdHJvbmc+eyRtZXNzYWdlfTwvc3Ryb25nPgp7L2lmfQp7aWYgJGVycm9yfQo8L2ZvbnQ+CnsvaWZ9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CnskZm9ybXN0YXJ0fQp7JHJlY29yZF9pZH0KICAKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5DbMOpOjwvcD4KICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjbGV9PC9wPgogPC9kaXY+CiA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5UeXBlIGNvbXDDqXRpdGlvbjo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHR5cGVfY29tcGV0fTwvcD4KICA8L2Rpdj4gCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPkRhdGUgY29tcMOpdGl0aW9uOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZGF0ZV9jb21wZXR9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2VxdWlwZX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRlcXVpcGV9PC9wPgogIDwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9hZHZlcnNhaXJlc306PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRhZHZlcnNhaXJlc308L3A+CiAgPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3RvdXJ9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdG91cn08L3A+CiAgPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3Njb3JlX2VxdWlwZX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzY29yZV9lcXVpcGV9PC9wPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9zY29yZV9hZHZ9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc2NvcmVfYWR2fTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH17JGNhbmNlbH08L3A+CiAgPC9kaXY+CnskZm9ybWVuZH0KPC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/edit_contact.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KeyRmb3Jtc3RhcnR9CgogeyRsaWNlbmNlfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5UeXBlIGRlIGNvbnRhY3Q6PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0eXBlX2NvbnRhY3R9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPkNvbnRhY3Q8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGNvbnRhY3R9PC9wPgogIDwvZGl2PiAKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5EZXNjcmlwdGlvbjo8L3A+CiAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZGVzY3JpcHRpb259PC9wPgogPC9kaXY+ICAKIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0ZWRpdH17JGJhY2t9eyRjYW5jZWx9PC9wPgogIDwvZGl2Pgp7JGZvcm1lbmR9CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/edit_joueur.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQ+CiAkKGZ1bmN0aW9uKCkgewogICAkKCAiI20xX2JpcnRoZGF5IiApLmRhdGVwaWNrZXIoeyBkYXRlRm9ybWF0OiAieXktbW0tZGQiIH0pOwogfSk7CiA8L3NjcmlwdD4Key9saXRlcmFsfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgp7JGZvcm1zdGFydH0KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPkFjdGlmOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskYWN0aWZ9e2Ntc19oZWxwIGtleT0naGVscF9leHBsYW5hdGlvbicgdGl0bGU9JGFjdGlmdGV4dH08L3A+CiAgPC9kaXY+CiA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Ob206PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRub219PC9wPgogIDwvZGl2PiAKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+UHLDqW5vbTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHByZW5vbX08L3A+CiAgPC9kaXY+CntpZiAkbGljZW5jZSAhPSIifQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPkxpY2VuY2U8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGxpY2VuY2V9PC9wPgogIDwvZGl2PiAKe2Vsc2V9CnskbGljZW5jZX0Key9pZn0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5EYXRlIE5haXNzYW5jZTo8L3A+CiAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskYmlydGhkYXl9PC9wPgogPC9kaXY+ICAKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5TZXhlOjwvcD4KICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzZXhlfTwvcD4KIDwvZGl2PgogPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+YWRyZXNzZTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGFkcmVzc2V9PC9wPgogIDwvZGl2PiAKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+VmlsbGU6PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR2aWxsZX08L3A+CiAgPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPkNvZGUgcG9zdGFsOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskY29kZXBvc3RhbH08L3A+CiAgPC9kaXY+CiA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH17JGNhbmNlbH08L3A+CiAgPC9kaXY+CnskZm9ybWVuZH0KPC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/edit_type_compet.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGxhYmVsPnskdGV4dH08L2xhYmVsPgp7aWYgJGVycm9yfQo8Zm9udCBjb2xvcj0icmVkIj4Key9pZn0Ke2lmICRtZXNzYWdlIG5lICIifQo8c3Ryb25nPnskbWVzc2FnZX08L3N0cm9uZz4Key9pZn0Ke2lmICRlcnJvcn0KPC9mb250Pgp7L2lmfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgp7JGZvcm1zdGFydH0KeyRyZWNvcmRfaWR9CnskZWRpdH0KeyRpZGVwcmV1dmV9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPlR5cGUgQ29tcMOpdGl0aW9uOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskbmFtZX08L3A+CiAgPC9kaXY+ICAKCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Db2VmZmljaWVudDogeypjbXNfaGVscCBrZXk9ImhlbHBfY29lZmZpY2llbnQiKn08L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGNvZWZmaWNpZW50fTwvcD4KICA8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Q29tcMOpdGlvbiBpbmRpdmlkdWVsbGUgPzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5kaXZzfTwvcD4KICA8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+T3JnYW5pc2F0ZXVyID88L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JG9yZ2F9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fXskZHVwbGlxdWVyfXskY2FuY2VsfTwvcD4KICA8L2Rpdj4KeyRmb3JtZW5kfQo8L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/equipe.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfTwvcD48L2Rpdj4Ke2lmICRpdGVtY291bnQgPiAwfQo8aDM+Q2xhc3NlbWVudCBnw6luw6lyYWwgeyRsaWJlcXVpcGV9PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQiPgogPHRoZWFkPgoJPHRyPgoJCTx0aD5DbHQ8L3RoPgoJCTx0aD5FcXVpcGU8L3RoPgoJCTx0aD5Kb3VlPC90aD4KCQk8dGg+UHRzPC90aD4KCTwvdHI+CiA8L3RoZWFkPgogPHRib2R5Pgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQogIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4KCTx0ZD57JGVudHJ5LT5jbHR9PC90ZD4KICAgIDx0ZD57JGVudHJ5LT5lcXVpcGV9PC90ZD4KICAgIDx0ZD57JGVudHJ5LT5qb3VlfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+cHRzfTwvdGQ+CiAgICAKICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQp7aWYgJGl0ZW1jb3VudDIgPiAwfQp7Zm9yZWFjaCBmcm9tPSRpdGVtczIgaXRlbT1lbnRyeX0Keyo8cHJlPnskaXRlbXMyfHZhcl9kdW1wfTwvcHJlPip9CjxoMz5Sw6lzdWx0YXRzIGR1IHskZW50cnktPmRhdGVfZXZlbnR8ZGF0ZV9mb3JtYXQ6IiVkLyVtIn08L2gzPgkKe2lmICRpdGVtc2NvdW50X3skZW50cnktPnZhbGV1cn0gPjAgfQogIAk8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIj4KCQk8dHI+PHRoPkVxdWlwZSBBPC90aD48dGg+U2NvcmUgQTwvdGg+PHRoPlNjb3JlIEI8L3RoPjx0aD5FcXVpcGUgQjwvdGg+PC90cj4KCQl7Zm9yZWFjaCBmcm9tPSRwcm9kc197JGVudHJ5LT52YWxldXJ9IGl0ZW09ZG9ubmVlfQoJCXsqPHByZT57JHByb2RzX3skZW50cnktPnZhbGV1cn18dmFyX2R1bXB9PC9wcmU+Kn0JPHRyPjx0ZD57JGRvbm5lZS0+ZXF1YX08L3RkPjx0ZD57JGRvbm5lZS0+c2NvcmVhfTwvdGQ+PHRkPnskZG9ubmVlLT5zY29yZWJ9PC90ZD48dGQ+eyRkb25uZWUtPmVxdWJ9PC90ZD48L3RyPgoJCXsvZm9yZWFjaH0KCQk8L3RhYmxlPgoJCQoJCXtlbHNlfQoJCTxwPlBhcyBlbmNvcmUgZGUgcsOpc3VsdGF0cyAhPC9wPgoJCXsvaWZ9CnsvZm9yZWFjaH0KIDwvdGJvZHk+CjwvdGFibGU+CnsvaWZ9Cgo=]]></data>
	</file>
	<file>
	  <filename>/templates/equipes.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyoKCXtpZiBpc3NldCgkZm9ybXN0YXJ0KSB9CjxmaWVsZHNldD4KICA8bGVnZW5kPkZpbHRyZXM8L2xlZ2VuZD4KICB7JGZvcm1zdGFydH0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5UeXBlIENvbXDDqXRpdGlvbjo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NvbXBldH0gPC9wPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF90b3VyfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3RvdXJ9IDwvcD4KCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfZXF1aXBlfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2VxdWlwZX0gPC9wPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdGZpbHRlcn17JGhpZGRlbnxkZWZhdWx0OicnfTwvcD4KICA8L2Rpdj4KICB7JGZvcm1lbmR9CjwvZmllbGRzZXQ+CnsvaWZ9Cip9CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskcmV0cmlldmVfdGVhbXN9IHwgeyRyZXRyaWV2ZV90ZWFtc19hdXRyZXN9PC9wPjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGl0ZW1jb3VudH0mbmJzcDt7JGl0ZW1zZm91bmR9PC9wPjwvZGl2Pgp7aWYgJGl0ZW1jb3VudCA+IDB9Cgo8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgogPHRoZWFkPgoJPHRyPgoJCTx0aD57JGlkfTwvdGg+CgkJPHRoPnskZXF1aXBlfTwvdGg+CgkJPHRoPk5pdmVhdTwvdGg+CgkJPHRoPkNvbXDDqXRpdGlvbjwvdGg+CgkJPHRoPk5vbSBjb3VydDwvdGg+CgkJPHRoIGNvbHNwYW49IjQiPkFjdGlvbnM8L3RoPgoJPC90cj4KIDwvdGhlYWQ+CiA8dGJvZHk+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CiAgPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgoJPHRkPnskZW50cnktPmlkfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+bGliZXF1aXBlfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+bGliZGl2aXNpb259PC90ZD4KCTx0ZD57JGVudHJ5LT5uYW1lfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+ZnJpZW5kbHluYW1lfTwvdGQ+CjwhLS0JPHRkPnskZW50cnktPnZpZXd9PC90ZD4tLT4KCTx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPgogICAgPHRkPnskZW50cnktPnJldHJpZXZlX3BvdWxlX3JlbmNvbnRyZXN9PC90ZD4KICAgIDx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+CiAgPC90cj4Key9mb3JlYWNofQogPC90Ym9keT4KPC90YWJsZT4Key9pZn0KCg==]]></data>
	</file>
	<file>
	  <filename>/templates/fepoulesRencontres.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyo8cHJlPnskaXRlbXN8dmFyX2R1bXB9PC9wcmU+Kn0KPHRhYmxlIGNsYXNzPSJ0YWJsZSI+CiA8dGhlYWQ+Cgk8dHI+CQoJCTx0aD5EYXRlPC90aD4KCQk8dGg+RXF1aXBlIEE8L3RoPgoJCTx0aD5TY29yZSBBPC90aD4KCQk8dGg+U2NvcmUgQjwvdGg+CgkJPHRoPkVxdWlwZSBCPC90aD4KICA8L3RyPgogPC90aGVhZD4KIDx0Ym9keT4KCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9Cjx0cj4KCTx0ZD57JGVudHJ5LT5kYXRlX2V2ZW50fGRhdGVfZm9ybWF0OiIlZC8lbS8lWSJ9PC90ZD4KCTx0ZD57JGVudHJ5LT5lcXVhfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+c2NvcmVhfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+c2NvcmVifTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+ZXF1Yn08L3RkPgoJPHRkPnskZW50cnktPmRldGFpbHN9PC90ZD4KPC90cj4KCXsvZm9yZWFjaH0KCiA8L3Rib2R5Pgo8L3RhYmxlPg==]]></data>
	</file>
	<file>
	  <filename>/templates/fe_allsitmens.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyo8cHJlPnskbW9udGhzbGlzdHx2YXJfZHVtcH08L3ByZT4qfQp7KjxwcmU+eyRpdGVtc3x2YXJfZHVtcH08L3ByZT4qfQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JHJldHVybmxpbmt9PC9wPjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGl0ZW1jb3VudH0mbmJzcDt7JGl0ZW1zZm91bmR9PC9wPjwvZGl2Pgp7aWYgJGl0ZW1jb3VudCA+IDB9Cjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQiPgoJPHRoZWFkPgoJCTx0aD5Kb3VldXI8L3RoPgoJCXtmb3JlYWNoIGZyb209JG1vbnRoc2xpc3QgaXRlbT1lbnRyZWV9CgkJCTx0aD57JG1vaXNbJGVudHJlZV19PC90aD4KCQl7L2ZvcmVhY2h9CgkJPCEtLTx0aD5Qcm9nIG1vaXM8L3RoPi0tPgoJCTx0aD5OYXQ8L3RoPgoJCTx0aD5SZWc8L3RoPgoJCTx0aD5Ew6lwPC90aD4KCTwvdGhlYWQ+CiA8dGJvZHk+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CiAgPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgogICAgPHRkPnskZW50cnktPmpvdWV1cn08L3RkPgogICAge2lmICRlbnRyeS0+c2VwdCAhPSBOVUxMfTx0ZD57JGVudHJ5LT5zZXB0fTwvdGQ+ey9pZn0KCXtpZiAkZW50cnktPm9jdCAhPSBOVUxMfTx0ZD57JGVudHJ5LT5vY3R9PC90ZD57L2lmfQoJe2lmICRlbnRyeS0+bm92ICE9IE5VTEx9PHRkPnskZW50cnktPm5vdn08L3RkPnsvaWZ9Cgl7aWYgJGVudHJ5LT5kZWMgIT0gTlVMTH08dGQ+eyRlbnRyeS0+ZGVjfTwvdGQ+ey9pZn0KCXtpZiAkZW50cnktPmphbiAhPSBOVUxMfTx0ZD57JGVudHJ5LT5qYW59PC90ZD57L2lmfQoJe2lmICRlbnRyeS0+ZmV2ICE9IE5VTEx9PHRkPnskZW50cnktPmZldn08L3RkPnsvaWZ9Cgl7aWYgJGVudHJ5LT5tYXIgIT0gTlVMTH08dGQ+eyRlbnRyeS0+bWFyfTwvdGQ+ey9pZn0KCXtpZiAkZW50cnktPmF2ciAhPSBOVUxMfTx0ZD57JGVudHJ5LT5hdnJ9PC90ZD57L2lmfQoJe2lmICRlbnRyeS0+bWFpICE9IE5VTEx9PHRkPnskZW50cnktPm1haX08L3RkPnsvaWZ9Cgl7aWYgJGVudHJ5LT5qdWluICE9IE5VTEx9PHRkPnskZW50cnktPmp1aW59PC90ZD57L2lmfQoJe2lmICRlbnRyeS0+anVpbCAhPSBOVUxMfTx0ZD57JGVudHJ5LT5qdWlsfTwvdGQ+ey9pZn0KCXsqPHRkPnskZW50cnktPnByb2dtb2lzfTwvdGQ+Kn0KCTx0ZD57JGVudHJ5LT5jbG5hdH08L3RkPgoJPHRkPnskZW50cnktPnJhbmdyZWd9PC90ZD4KCTx0ZD57JGVudHJ5LT5yYW5nZGVwfTwvdGQ+CiAgPC90cj4Key9mb3JlYWNofQogPC90Ym9keT4KPC90YWJsZT4Ke2Vsc2V9CjxwPkxlcyBzaXR1YXRpb25zIG1lbnN1ZWxsZXMgc29udCDDoCBqb3VyPC9wPgp7L2lmfQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGNyZWF0ZWxpbmt9PC9wPjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/fftt.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICQoJyNzZWxlY3RhbGwnKS5jbGljayhmdW5jdGlvbigpewogICAgdmFyIHYgPSAkKHRoaXMpLmF0dHIoJ2NoZWNrZWQnKTsKICAgIGlmKCB2ID09ICdjaGVja2VkJyApIHsKICAgICAgJCgnLnNlbGVjdCcpLmF0dHIoJ2NoZWNrZWQnLCdjaGVja2VkJyk7CiAgICB9IGVsc2UgewogICAgICAkKCcuc2VsZWN0JykucmVtb3ZlQXR0cignY2hlY2tlZCcpOwogICAgfQogIH0pOwogICQoJy5zZWxlY3QnKS5jbGljayhmdW5jdGlvbigpewogICAgJCgnI3NlbGVjdGFsbCcpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKICB9KTsKICAkKCcjdG9nZ2xlX2ZpbHRlcicpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAkKCcjZmlsdGVyX2Zvcm0nKS50b2dnbGUoKTsKICB9KTsKICB7aWYgaXNzZXQoJHRhYmxlc29ydGVyKX0KICAkKCcjYXJ0aWNsZWxpc3QnKS50YWJsZXNvcnRlcih7IHNvcnRMaXN0OnskdGFibGVzb3J0ZXJ9IH0pOwogIHsvaWZ9Cn0pOwovL11dPgo8L3NjcmlwdD4KCntpZiBpc3NldCgkZm9ybXN0YXJ0KSB9CjxmaWVsZHNldD4KICA8bGVnZW5kPkZpbHRyZXM8L2xlZ2VuZD4KICB7JGZvcm1zdGFydH0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5UeXBlIENvbXDDqXRpdGlvbjo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NvbXBldH0gPC9wPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5EYXRlOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfZGF0ZX0gPC9wPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Kb3VldXIgOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcGxheWVyfSA8L3A+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0ZmlsdGVyfXskaGlkZGVufGRlZmF1bHQ6Jyd9PC9wPgogIDwvZGl2PgogIHskZm9ybWVuZH0KPC9maWVsZHNldD4Key9pZn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRyZXRyaWV2ZV9hbGxfcGFydGllc308L3A+PC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskaXRlbWNvdW50fSZuYnNwO3skaXRlbXNmb3VuZH08L3A+PC9kaXY+CntpZiAkaXRlbWNvdW50ID4gMH0KeyRmb3JtMnN0YXJ0fQo8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgogPHRoZWFkPgogIDx0cj4KCTx0aD5JZDwvdGg+Cgk8dGg+TsKwIEpvdXJuw6llPC90aD4KCTx0aD5EYXRlPC90aD4KCTx0aD5Kb3VldXI8L3RoPgoJPHRoPlZpYy9kZWY8L3RoPgoJPHRoPkFkdmVyc2FpcmU8L3RoPgoJPHRoPlBvaW50czwvdGg+Cgk8dGggY29sc3Bhbj0iMiI+QWN0aW9uczwvdGg+CiAgPHRoPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InNlbGVjdGFsbCIgbmFtZT0ic2VsZWN0YWxsIj48L3RoPgogIDwvdHI+CiA8L3RoZWFkPgogPHRib2R5Pgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQogIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4KICAgIDx0ZD57JGVudHJ5LT5pZH08L3RkPgoJPHRkPnskZW50cnktPm51bWpvdXJufTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+ZGF0ZV9ldmVudHxkYXRlX2Zvcm1hdDoiJWQvJW0ifQogICAgPHRkPnskZW50cnktPmpvdWV1cn08L3RkPgogICAgPHRkPnskZW50cnktPnZkfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+YWR2bm9tcHJlfSA8L3RkPgoJPHRkPnskZW50cnktPnBvaW50cmVzfSA8L3RkPgogICAgPHRkPnskZW50cnktPmVkaXRsaW5rfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPgoJPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1zZWxbXSIgdmFsdWU9InskZW50cnktPmlkfSIgY2xhc3M9InNlbGVjdCI+PC90ZD4KICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgo8IS0tIFNFTEVDVCBEUk9QRE9XTiAtLT4KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiIHN0eWxlPSJmbG9hdDogcmlnaHQ7Ij4KPGJyLz57JGFjdGlvbmRlbWFzc2V9eyRzdWJtaXRfbWFzc2FjdGlvbn0KICA8L2Rpdj4KeyRmb3JtMmVuZH0Key9pZn0K]]></data>
	</file>
	<file>
	  <filename>/templates/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/templates/individuelles.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eypkZWJ1Zyp9CnsqCntpZiBpc3NldCgkbWVzc2FnZSl9CiAge2lmICRlcnJvciAhPSAnJ30KICAgIDxwPjxmb250IGNvbG9yPSJyZWQiPnskbWVzc2FnZX08L2ZvbnQ+PC9wPgogIHtlbHNlfQogICAgPHA+eyRtZXNzYWdlfTwvcD4KICB7L2lmfQp7L2lmfQoqfQoKCTxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskcmV0dXJubGlua308L3A+PC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskaXRlbWNvdW50fSZuYnNwO3skaXRlbXNmb3VuZH08L3A+PC9kaXY+CntpZiAkaXRlbWNvdW50ID4gMH0KPHRhYmxlIGNsYXNzPSJwYWdldGFibGUgdGFibGUgdGFibGUtYm9yZGVyZWQiPgogPHRoZWFkPgoJPHRyPgkKCQk8dGg+Sm91ZXVyPC90aD4KCQk8dGg+VmljPC90aD4KCQk8dGg+U3VyPC90aD4KCQk8dGg+UG9pbnRzPC90aD4KICA8L3RyPgogPC90aGVhZD4KIDx0Ym9keT4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KICB7aWYgJGVudHJ5LT52aWN0b2lyZSA9PScxJ308dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSB2aWMiPntlbHNlfTx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9IGRlZiI+ey9pZn0KCTx0ZD57JGVudHJ5LT5kYXRlX2V2ZW50fGRhdGVfZm9ybWF0OiIlZC8lbSJ9PC90ZD4JCiAgICA8dGQ+eyRlbnRyeS0+am91ZXVyfTwvdGQ+CQogICAgPHRkPnskZW50cnktPm5vbX0oeyRlbnRyeS0+Y2xhc3NlbWVudH0pPC90ZD4KICAgIDx0ZD57JGVudHJ5LT52aWN0b2lyZX08L3RkPgoJPHRkPnskZW50cnktPnBvaW50cmVzfTwvdGQ+Cgk8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgooU291cmNlIFNwaWQpCnsvaWZ9Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57KiRjcmVhdGVsaW5rKn08L3A+PC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/individuelles3.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyo8cHJlPnskaXRlbXN8dmFyX2R1bXB9PC9wcmU+Kn0KCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskcmV0dXJubGlua308L3A+PC9kaXY+CnsqPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyIgc3R5bGU9ImZsb2F0OiByaWdodCI+eyRpbmRpdnNfY291cmFudH08L3A+PC9kaXY+Kn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfTwvcD48L2Rpdj4Ke2lmICRpdGVtY291bnQgPiAwfQoKe2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KICAKCTxoMz57JGVudHJ5LT5uYW1lfSBkdSB7JGVudHJ5LT5kYXRlX2V2ZW50fGRhdGVfZm9ybWF0OiIlZC8lbSJ9PC9oMz4JCgl7aWYgJGl0ZW1zY291bnRfeyRlbnRyeS0+dmFsZXVyfSA+MCB9CiAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIj4KCQk8dHI+PHRoPkpvdWV1cjwvdGg+PHRoPlZpY3RvaXJlczwvdGg+PHRoPlNVUjwvdGg+PHRoPlBvaW50czwvdGg+PC90cj4KCQl7Zm9yZWFjaCBmcm9tPSRwcm9kc197JGVudHJ5LT52YWxldXJ9IGl0ZW09ZG9ubmVlfQoJCXsqPHByZT57JHByb2RzX3skZW50cnktPnZhbGV1cn18dmFyX2R1bXB9PC9wcmU+Kn0JPHRyPjx0ZD57JGRvbm5lZS0+am91ZXVyfTwvdGQ+PHRkPnskZG9ubmVlLT52aWN9PC90ZD48dGQ+eyRkb25uZWUtPnN1cn08L3RkPjx0ZD57JGRvbm5lZS0+cHRzfTwvdGQ+PHRkPnskZG9ubmVlLT5kZXRhaWxzfTwvdGQ+PC90cj4KCQl7L2ZvcmVhY2h9CgkJPC90YWJsZT4KCQl7aWYgJGVudHJ5LT5zcGlkID09IDF9KCogRXN0aW1hdGlvbnMgU3BpZCl7L2lmfQoJCXtlbHNlfQoJCTxwPlBhcyBlbmNvcmUgZGUgcsOpc3VsdGF0cyAhPC9wPgoJCXsvaWZ9CnsvZm9yZWFjaH0KIAoKey9pZn0KCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnsqJGNyZWF0ZWxpbmsqfTwvcD48L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/joueurs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICQoJyNzZWxlY3RhbGwnKS5jbGljayhmdW5jdGlvbigpewogICAgdmFyIHYgPSAkKHRoaXMpLmF0dHIoJ2NoZWNrZWQnKTsKICAgIGlmKCB2ID09ICdjaGVja2VkJyApIHsKICAgICAgJCgnLnNlbGVjdCcpLmF0dHIoJ2NoZWNrZWQnLCdjaGVja2VkJyk7CiAgICB9IGVsc2UgewogICAgICAkKCcuc2VsZWN0JykucmVtb3ZlQXR0cignY2hlY2tlZCcpOwogICAgfQogIH0pOwogICQoJy5zZWxlY3QnKS5jbGljayhmdW5jdGlvbigpewogICAgJCgnI3NlbGVjdGFsbCcpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKICB9KTsKICAkKCcjdG9nZ2xlX2ZpbHRlcicpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAkKCcjZmlsdGVyX2Zvcm0nKS50b2dnbGUoKTsKICB9KTsKICB7aWYgaXNzZXQoJHRhYmxlc29ydGVyKX0KICAkKCcjYXJ0aWNsZWxpc3QnKS50YWJsZXNvcnRlcih7IHNvcnRMaXN0OnskdGFibGVzb3J0ZXJ9IH0pOwogIHsvaWZ9Cn0pOwovL11dPgo8L3NjcmlwdD4KeyogbGVzIG1lc3NhZ2VzIGNpLWRlc3NvdXMgcHJvdmllbm5lbnQgZGUgbGEgcGFnZSBhY3Rpb24udXBkYXRlb3B0aW9ucy5waHAqfQp7aWYgJG1zZyA9PSdGdWxsJ30KPHAgY2xhc3M9Indhcm5pbmciPkNsaXF1ZXogY2ktYXByw6hzIHBvdXIgZmluYWxpc2VyIGxlIGNoYW5nZW1lbnQgZGUgc2Fpc29uIHskZGVsZXRlX2FsbH08L3A+CnsvaWZ9Cgp7aWYgJHNhaXNvbl9lbl9jb3VycyAhPSAkc2Fpc29ufQo8cCBjbGFzcz0id2FybmluZyI+QXR0ZW50aW9uICEhIFZvdXMgZGV2ZXogY2hhbmdlciB2b3MgcGFyYW3DqHRyZXMgZGFucyBsJ29uZ2xldCAiQ29uZmlndXJhdGlvbiI8L3A+ey9pZn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfSZuYnNwO3wmbmJzcDt7JHJldHJpZXZlX3VzZXJzfSZuYnNwO3wmbmJzcDt7JGNyZWF0ZWxpbmt9Jm5ic3A7eyp8ICZuYnNwO3wgeyRkaXNwbGF5X3VuYWJsZV9wbGF5ZXJzfSZuYnNwOyp9PC9wPjwvZGl2Pgp7aWYgJGl0ZW1jb3VudCA+IDB9CnskZm9ybTJzdGFydH0KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KIDx0aGVhZD4KCTx0cj4KCQk8dGg+eyRpZH08L3RoPgoJCTx0aD5Kb3VldXI8L3RoPgoJCTx0aD5MaWNlbmNlPC90aD4KCQk8dGg+QWN0aWY8L3RoPgoJCTx0aD5TZXhlPC90aD4KCQk8dGg+RGF0ZSBuYWlzc2FuY2U8L3RoPgoJCTx0aCBjb2xzcGFuPScyJz5BY3Rpb25zPC90aD4KCQk8dGg+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0ic2VsZWN0YWxsIiBuYW1lPSJzZWxlY3RhbGwiPjwvdGg+Cgk8L3RyPgo8L3RoZWFkPgogPHRib2R5Pgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQogIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4KCTx0ZD57JGVudHJ5LT5pZH08L3RkPgoJPHRkPnskZW50cnktPmpvdWV1cn08L3RkPgoJPHRkPnskZW50cnktPmxpY2VuY2V9PC90ZD4KICAgIDx0ZHtpZiAkZW50cnktPmFjdGlmID09IjAifSBjbGFzcz0id2FybmluZyJ7ZWxzZX0gY2xhc3M9ImluZm8iey9pZn0+eyRlbnRyeS0+YWN0aWZ9PC90ZD4KCTx0ZD57JGVudHJ5LT5zZXhlfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+YmlydGhkYXl9PC90ZD4KCTx0ZD57JGVudHJ5LT5kb2VkaXR9PC90ZD4KCTx0ZD57JGVudHJ5LT52aWV3X2NvbnRhY3RzfTwvdGQ+Cgk8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ7JGFjdGlvbmlkfXNlbFtdIiB2YWx1ZT0ieyRlbnRyeS0+bGljZW5jZX0iIGNsYXNzPSJzZWxlY3QiPjwvdGQ+CiAgICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgo8IS0tIFNFTEVDVCBEUk9QRE9XTiAtLT4KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiIHN0eWxlPSJmbG9hdDogcmlnaHQ7Ij4KPGJyLz57JGFjdGlvbmRlbWFzc2V9eyRzdWJtaXRfbWFzc2FjdGlvbn0KICA8L2Rpdj4KeyRmb3JtMmVuZH0Ke2Vsc2V9CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskcmV0cmlldmVfdXNlcnN9PC9wPjwvZGl2Pgp7L2lmfQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGNyZWF0ZWxpbmt9PC9wPjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/journal.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICQoJyNzZWxlY3RhbGwnKS5jbGljayhmdW5jdGlvbigpewogICAgdmFyIHYgPSAkKHRoaXMpLmF0dHIoJ2NoZWNrZWQnKTsKICAgIGlmKCB2ID09ICdjaGVja2VkJyApIHsKICAgICAgJCgnLnNlbGVjdCcpLmF0dHIoJ2NoZWNrZWQnLCdjaGVja2VkJyk7CiAgICB9IGVsc2UgewogICAgICAkKCcuc2VsZWN0JykucmVtb3ZlQXR0cignY2hlY2tlZCcpOwogICAgfQogIH0pOwogICQoJy5zZWxlY3QnKS5jbGljayhmdW5jdGlvbigpewogICAgJCgnI3NlbGVjdGFsbCcpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKICB9KTsKICAkKCcjdG9nZ2xlX2ZpbHRlcicpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAkKCcjZmlsdGVyX2Zvcm0nKS50b2dnbGUoKTsKICB9KTsKICB7aWYgaXNzZXQoJHRhYmxlc29ydGVyKX0KICAkKCcjYXJ0aWNsZWxpc3QnKS50YWJsZXNvcnRlcih7IHNvcnRMaXN0OnskdGFibGVzb3J0ZXJ9IH0pOwogIHsvaWZ9Cn0pOwovL11dPgo8L3NjcmlwdD4KCntpZiBpc3NldCgkZm9ybXN0YXJ0KSB9CjxmaWVsZHNldD4KICA8bGVnZW5kPkZpbHRyZXM8L2xlZ2VuZD4KICB7JGZvcm1zdGFydH0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPCEtLTxwIGNsYXNzPSJwYWdldGV4dCI+VHlwZSBDb21ww6l0aXRpb246PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jb21wZXR9IDwvcD4tLT4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+RGF0ZTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2RhdGV9IDwvcD4KCTxwIGNsYXNzPSJwYWdldGV4dCI+U3RhdHV0OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfc3RhdHVzfSA8L3A+Cgk8IS0tPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Kb3VldXIgOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcGxheWVyfSA8L3A+LS0+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0ZmlsdGVyfXskaGlkZGVufGRlZmF1bHQ6Jyd9PC9wPgogIDwvZGl2PgogIHskZm9ybWVuZH0KPC9maWVsZHNldD4Key9pZn0KeyokdG90YWxjb3VudCp9CntpZiBpc3NldCgkcGFnaW5hdGlvbil9PGRpdiBjbGFzcz0iZ3JpZF82IiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij57JHBhZ2luYXRpb259PC9kaXY+ey9pZn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfTwvcD48L2Rpdj4Ke2lmICRpdGVtY291bnQgPiAwICYmIGlzX2FycmF5KCRpdGVtcykgJiYgY291bnQoJGl0ZW1zKT4wfQp7JGZvcm0yc3RhcnR9Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CiA8dGhlYWQ+Cgk8dHI+CgkJPHRoPklkPC90aD4KCQk8dGg+RGF0ZSBkZSBtaXNlIMOgIGpvdXI8L3RoPgoJCTx0aD5kZXNpZ25hdGlvbjwvdGg+CgkJPCEtLTx0aCBjb2xzcGFuPSIyIj5BY3Rpb25zPC90aD4tLT4KCQk8dGg+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0ic2VsZWN0YWxsIiBuYW1lPSJzZWxlY3RhbGwiLz48L3RoPgogICAgPC90cj4KIDwvdGhlYWQ+CiA8dGJvZHk+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CiAgPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgogICAgPHRkPnskZW50cnktPmlkfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+ZGF0ZWNyZWF0ZWR8ZGF0ZV9mb3JtYXQ6IiVBICVlICVCICVZIMOgICVIOiVNOiVTIn08L3RkPgogICAgPHRkPnskZW50cnktPmRlc2lnbmF0aW9ufTwvdGQ+Cgk8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ7JGFjdGlvbmlkfXNlbFtdIiB2YWx1ZT0ieyRlbnRyeS0+aWR9IiBjbGFzcz0ic2VsZWN0Ij48L3RkPgoJPC90cj4Key9mb3JlYWNofQogPC90Ym9keT4KPC90YWJsZT4Key9pZn0KPGRpdiBzdHlsZT0id2lkdGg6IDEwMCU7Ij4KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiIHN0eWxlPSJmbG9hdDogbGVmdDsiPgoJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57KiRhZGRsaW5rKn08L3A+CjwvZGl2Pgp7aWYgJGl0ZW1jb3VudCA+IDB9CiAgPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiIHN0eWxlPSJmbG9hdDogcmlnaHQ7IHRleHQtYWxpZ246IHJpZ2h0OyI+CiAgICB7JHN1Ym1pdF9tYXNzZGVsZXRlfQogIDwvZGl2Pgp7L2lmfQo8ZGl2IGNsYXNzPSJjbGVhcmIiPjwvZGl2Pgo8L2Rpdj4KeyRmb3JtMmVuZH0KCnsqZ2V0X3RlbXBsYXRlX3ZhcnMqfQoKCgoKCg==]]></data>
	</file>
	<file>
	  <filename>/templates/list_compet.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLQp7aWYgaXNzZXQoJGZvcm1zdGFydCkgfQo8ZmllbGRzZXQ+CiAgPGxlZ2VuZD5GaWx0cmVzPC9sZWdlbmQ+CiAgeyRmb3Jtc3RhcnR9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxwIGNsYXNzPSJwYWdldGV4dCI+SWQ6PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+Tm9tIDwvcD4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfdG91cn06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90b3VyfSA8L3A+Cgk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2VxdWlwZX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9lcXVpcGV9IDwvcD4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXRmaWx0ZXJ9eyRoaWRkZW58ZGVmYXVsdDonJ308L3A+CiAgPC9kaXY+CiAgeyRmb3JtZW5kfQo8L2ZpZWxkc2V0Pgp7L2lmfQotLT4KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRkaXZpc2lvbnN9PC9wPjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGl0ZW1jb3VudH0mbmJzcDt7JGl0ZW1zZm91bmR9PC9wPjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JE5hdF9lcXVpcGVzfSAtIHskTmF0X2luZGl2c30gLSB7JHpvbmVfZXF1aXBlc31gLSB7JHpvbmVfaW5kaXZzfSAtIHskbGlndWVfZXF1aXBlc30gLSB7JGxpZ3VlX2luZGl2c30gLSB7JGRlcF9lcXVpcGVzfSAtIHskZGVwX2luZGl2c308L3A+PC9kaXY+CntpZiAkaXRlbWNvdW50ID4gMH0KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KIDx0aGVhZD4KICA8dHI+CQogIAk8dGg+eyRpZH08L3RoPgogIAk8dGg+Tm9tPC90aD4KICAJPHRoPkNvZWZmaWNpZW50PC90aD4KCTx0aD5JbmRpdnM8L3RoPgoJPHRoPkVjaGVsb248L3RoPgoJPHRoPlRhZyBwb3VyIGFmZmljaGFnZTwvdGg+Cgk8dGggY29sc3Bhbj0iMyI+QWN0aW9uczwvdGg+CiAgPC90cj4KIDwvdGhlYWQ+CiA8dGJvZHk+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CiAgPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgogICAgPHRkPnskZW50cnktPmlkfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+bmFtZX0gKHskZW50cnktPmlkZXByZXV2ZX0pPC90ZD4KICAgCTx0ZD57JGVudHJ5LT5jb2VmZmljaWVudH08L3RkPgoJPHRkPntpZiAkZW50cnktPmluZGl2cyA9PScxJ31PdWl7ZWxzZX1Ob257L2lmfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+b3JnYX08L3RkPgoJPHRkPnskZW50cnktPnRhZ308L3RkPgoJPHRkPnskZW50cnktPm5hdGlvbmFsfS17JGVudHJ5LT56b25lfS17JGVudHJ5LT5saWd1ZX0teyRlbnRyeS0+ZGVwfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4KCTx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+CiAgPC90cj4Key9mb3JlYWNofQogPC90Ym9keT4KPC90YWJsZT4Key9pZn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRjcmVhdGVsaW5rfTwvcD48L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/list_poules.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLQp7aWYgaXNzZXQoJGZvcm1zdGFydCkgfQo8ZmllbGRzZXQ+CiAgPGxlZ2VuZD5GaWx0cmVzPC9sZWdlbmQ+CiAgeyRmb3Jtc3RhcnR9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxwIGNsYXNzPSJwYWdldGV4dCI+SWQ6PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+Tm9tIDwvcD4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfdG91cn06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90b3VyfSA8L3A+Cgk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2VxdWlwZX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9lcXVpcGV9IDwvcD4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXRmaWx0ZXJ9eyRoaWRkZW58ZGVmYXVsdDonJ308L3A+CiAgPC9kaXY+CiAgeyRmb3JtZW5kfQo8L2ZpZWxkc2V0Pgp7L2lmfQotLT4KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfTwvcD48L2Rpdj4KCntpZiAkaXRlbWNvdW50ID4gMH0KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KIDx0aGVhZD4KICA8dHI+CQoJPHRoPkVwcmV1dmU8L3RoPgoJPHRoPlRvdXI8L3RoPgoJPHRoIGNvbHNwYW49IjMiPkFjdGlvbnM8L3RoPgogIDwvdHI+CiA8L3RoZWFkPgogPHRib2R5Pgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQogIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4KICAgCQk8dGQ+eyRlbnRyeS0+bGliZWxsZX08L3RkPgoJCTx0ZD57JGVudHJ5LT50b3VyfTwvdGQ+CgkJPHRkPnskZW50cnktPnBvdWxlfSAtIHskZW50cnktPnBhcnRpZX0gLSB7JGVudHJ5LT5jbGFzc2VtZW50fTwvdGQ+CgkJPHRkPnskZW50cnktPmVkaXRsaW5rfTwvdGQ+CgkJPHRkPnskZW50cnktPmRlbGV0ZWxpbmt9PC90ZD4KICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQoK]]></data>
	</file>
	<file>
	  <filename>/templates/participe.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHByZT57KiRyb3dhcnJheXx2YXJfZHVtcCp9PC9wcmU+CnsqKn08ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgp7JGZvcm1zdGFydH0KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPlR5cGUgQ29tcMOpdGl0aW9uOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdHlwZV9jb21wZXR9PC9wPgogIDwvZGl2Pgp7Zm9yZWFjaCBmcm9tPSRyb3dhcnJheSBrZXk9a2V5IGl0ZW09ZW50cnl9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSJtMV9saWNlbmNlW3ska2V5fV0iIGlkPSJtMV9saWNlbmNlW3ska2V5fV0iIHtpZiAkZW50cnlbJ3BhcnRpY2lwZSddID09MX1jaGVja2VkPSdjaGVja2VkJyB7L2lmfSB2YWx1ZSA9ICcxJz57JGVudHJ5WyduYW1lJ119PC9wPgogIDwvZGl2Pgp7L2ZvcmVhY2h9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgogIDwvZGl2Pgp7JGZvcm1lbmR9CjwvZGl2Pgp7Kip9]]></data>
	</file>
	<file>
	  <filename>/templates/poulesRencontres.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICQoJyNzZWxlY3RhbGwnKS5jbGljayhmdW5jdGlvbigpewogICAgdmFyIHYgPSAkKHRoaXMpLmF0dHIoJ2NoZWNrZWQnKTsKICAgIGlmKCB2ID09ICdjaGVja2VkJyApIHsKICAgICAgJCgnLnNlbGVjdCcpLmF0dHIoJ2NoZWNrZWQnLCdjaGVja2VkJyk7CiAgICB9IGVsc2UgewogICAgICAkKCcuc2VsZWN0JykucmVtb3ZlQXR0cignY2hlY2tlZCcpOwogICAgfQogIH0pOwogICQoJy5zZWxlY3QnKS5jbGljayhmdW5jdGlvbigpewogICAgJCgnI3NlbGVjdGFsbCcpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKICB9KTsKICAkKCcjdG9nZ2xlX2ZpbHRlcicpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAkKCcjZmlsdGVyX2Zvcm0nKS50b2dnbGUoKTsKICB9KTsKICB7aWYgaXNzZXQoJHRhYmxlc29ydGVyKX0KICAkKCcjYXJ0aWNsZWxpc3QnKS50YWJsZXNvcnRlcih7IHNvcnRMaXN0OnskdGFibGVzb3J0ZXJ9IH0pOwogIHsvaWZ9Cn0pOwovL11dPgo8L3NjcmlwdD4KeyoqfQoJe2lmIGlzc2V0KCRmb3Jtc3RhcnQpIH0KPGZpZWxkc2V0PgogIDxsZWdlbmQ+RmlsdHJlczwvbGVnZW5kPgogIHskZm9ybXN0YXJ0fQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CnsqCTxwIGNsYXNzPSJwYWdldGV4dCI+VHlwZSBDb21ww6l0aXRpb246PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jb21wZXR9IDwvcD4qfQogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Qb3VsZTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdG91cn0gPC9wPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Nb24gY2x1YiB1bmlxdWVtZW50OjwvcD4KCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY2x1Yl91bmlxdWVtZW50fSA8L3A+Cgk8cCBjbGFzcz0icGFnZXRleHQiPkTDqWrDoCBqb3XDqXMgdW5pcXVlbWVudDo8L3A+Cgk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2RlamFfam91ZXNfdW5pcXVlbWVudH0gPC9wPgp7Kgk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2VxdWlwZX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9lcXVpcGV9IDwvcD4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPip9CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdGZpbHRlcn17JGhpZGRlbnxkZWZhdWx0OicnfTwvcD4KICA8L2Rpdj4KICB7JGZvcm1lbmR9CjwvZmllbGRzZXQ+CnsvaWZ9Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGNyZWF0ZWxpbmt9PC9wPjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGl0ZW1jb3VudH0mbmJzcDt7JGl0ZW1zZm91bmR9PC9wPjwvZGl2Pgp7aWYgJGl0ZW1jb3VudCA+IDB9Cgp7JGZvcm0yc3RhcnR9Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CiA8dGhlYWQ+CiAgPHRyPgkKICA8dGg+SWQ8L3RoPgogIDx0aD5Qb3VsZTwvdGg+CiAgPHRoPkVxdWlwZSBBPC90aD4KICA8dGggY29sc3Bhbj0iMiI+U2NvcmU8L3RoPgogIDx0aD5FcXVpcGUgQjwvdGg+Cjx0aCBjb2xzcGFuPSIzIj5BY3Rpb25zPC90aD4KPHRoPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InNlbGVjdGFsbCIgbmFtZT0ic2VsZWN0YWxsIi8+PC90aD4JCiAKICA8L3RyPgogPC90aGVhZD4KIDx0Ym9keT4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KICA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+CiAgICA8dGQ+eyRlbnRyeS0+aWR9PC90ZD4KICAgIDx0ZD57JGVudHJ5LT5saWJlbGxlfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+ZXF1YX08L3RkPgogICAgPHRkPnskZW50cnktPnNjb3JlYX08L3RkPgoJPHRkPnskZW50cnktPnNjb3JlYn08L3RkPgoJPHRkPnskZW50cnktPmVxdWJ9PC90ZD4KICAgPHRkPnskZW50cnktPnJldHJpZXZlX2RldGFpbHN9PC90ZD4KCTx0ZD57JGVudHJ5LT5kaXNwbGF5fTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPgoJPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1zZWxbXSIgdmFsdWU9InskZW50cnktPmlkfSIgY2xhc3M9InNlbGVjdCI+PC90ZD4KICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgo8IS0tIFNFTEVDVCBEUk9QRE9XTiAtLT4KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiIHN0eWxlPSJmbG9hdDogcmlnaHQ7Ij4KPGJyLz57JGFjdGlvbmRlbWFzc2V9eyRzdWJtaXRfbWFzc2FjdGlvbn0KICA8L2Rpdj4KeyRmb3JtMmVuZH0Key9pZn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRjcmVhdGVsaW5rfTwvcD48L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/recupJoueurs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eypkZWJ1Zyp9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLy88IVtDREFUQVsKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICAkKCcjc2VsZWN0YWxsJykuY2xpY2soZnVuY3Rpb24oKXsKICAgIHZhciB2ID0gJCh0aGlzKS5hdHRyKCdjaGVja2VkJyk7CiAgICBpZiggdiA9PSAnY2hlY2tlZCcgKSB7CiAgICAgICQoJy5zZWxlY3QnKS5hdHRyKCdjaGVja2VkJywnY2hlY2tlZCcpOwogICAgfSBlbHNlIHsKICAgICAgJCgnLnNlbGVjdCcpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKICAgIH0KICB9KTsKICAkKCcuc2VsZWN0JykuY2xpY2soZnVuY3Rpb24oKXsKICAgICQoJyNzZWxlY3RhbGwnKS5yZW1vdmVBdHRyKCdjaGVja2VkJyk7CiAgfSk7CiAgJCgnI3RvZ2dsZV9maWx0ZXInKS5jbGljayhmdW5jdGlvbigpewogICAgJCgnI2ZpbHRlcl9mb3JtJykudG9nZ2xlKCk7CiAgfSk7CiAge2lmIGlzc2V0KCR0YWJsZXNvcnRlcil9CiAgJCgnI2FydGljbGVsaXN0JykudGFibGVzb3J0ZXIoeyBzb3J0TGlzdDp7JHRhYmxlc29ydGVyfSB9KTsKICB7L2lmfQp9KTsKLy9dXT4KPC9zY3JpcHQ+CntpZiBpc3NldCgkbWVzc2FnZSl9CiAge2lmICRlcnJvciAhPSAnJ30KICAgIDxwPjxmb250IGNvbG9yPSJyZWQiPnskbWVzc2FnZX08L2ZvbnQ+PC9wPgogIHtlbHNlfQogICAgPHA+eyRtZXNzYWdlfTwvcD4KICB7L2lmfQp7L2lmfQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JHJldHJpZXZlX3VzZXJzfSB8IHskcmV0cmlldmVfdGVhbXN9IHwgeyRyZXRyaWV2ZV90ZWFtc19hdXRyZXN9IHwgeyRyZXRyaWV2ZV9hbGxfcGFydGllc30gfCB7JHJldHJpZXZlX2FsbF9zcGlkfSB8IHskcmV0cmlldmVfZGV0YWlsc19yZW5jb250cmVzfTwvcD48L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfTwvcD48L2Rpdj4Ke2lmICRpdGVtY291bnQgPiAwfQp7JGZvcm0yc3RhcnR9Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CiA8dGhlYWQ+CiAgPHRyPgkKICA8dGg+SWQ8L3RoPgogIDx0aD5EYXRlIGRlIG1pc2Ugw6Agam91cjwvdGg+CiAgPHRoPmRlc2lnbmF0aW9uPC90aD4KICA8dGggY29sc3Bhbj0iMyI+QWN0aW9uczwvdGg+Cgk8dGg+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0ic2VsZWN0YWxsIiBuYW1lPSJzZWxlY3RhbGwiLz48L3RoPgogICAgPC90cj4KIDwvdGhlYWQ+CiA8dGJvZHk+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CiAgPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgogICAgPHRkPnskZW50cnktPmlkfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+ZGF0ZW1han08L3RkPgogICAgPHRkPnskZW50cnktPmRlc2lnbmF0aW9ufTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4KCTx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+c2VsZWN0fTwvdGQ+CiAgICAKICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgoKICA8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyIgc3R5bGU9ImZsb2F0OiByaWdodDsiPgp7aWYgaXNzZXQoJHN1Ym1pdF9tYXNzZGVsZXRlKX08YnIvPnskc3VibWl0X21hc3NkZWxldGV9ey9pZn0KICA8L2Rpdj4KeyRmb3JtMmVuZH0Key9pZn0KCgoKCgoK]]></data>
	</file>
	<file>
	  <filename>/templates/recupparties.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICQoJyNzZWxlY3RhbGwnKS5jbGljayhmdW5jdGlvbigpewogICAgdmFyIHYgPSAkKHRoaXMpLmF0dHIoJ2NoZWNrZWQnKTsKICAgIGlmKCB2ID09ICdjaGVja2VkJyApIHsKICAgICAgJCgnLnNlbGVjdCcpLmF0dHIoJ2NoZWNrZWQnLCdjaGVja2VkJyk7CiAgICB9IGVsc2UgewogICAgICAkKCcuc2VsZWN0JykucmVtb3ZlQXR0cignY2hlY2tlZCcpOwogICAgfQogIH0pOwogICQoJy5zZWxlY3QnKS5jbGljayhmdW5jdGlvbigpewogICAgJCgnI3NlbGVjdGFsbCcpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKICB9KTsKICAkKCcjdG9nZ2xlX2ZpbHRlcicpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAkKCcjZmlsdGVyX2Zvcm0nKS50b2dnbGUoKTsKICB9KTsKICB7aWYgaXNzZXQoJHRhYmxlc29ydGVyKX0KICAkKCcjYXJ0aWNsZWxpc3QnKS50YWJsZXNvcnRlcih7IHNvcnRMaXN0OnskdGFibGVzb3J0ZXJ9IH0pOwogIHsvaWZ9Cn0pOwovL11dPgo8L3NjcmlwdD4KPGgyPkV0YXQgZGVzIHLDqWN1cMOpcmF0aW9ucyBkZXMgam91ZXVycyBhY3RpZnM8L2gyPgo8cD5Mw6lnZW5kZSA6IDxiciAvPgoJeyRhdHRlbnRpb25faW1nfSA6IFBhcnRpZXMgbm9uIHLDqWN1cMOpcsOpZXMgcGFyIHNpdHVhdGlvbihzKSBtZW5zdWVsbGUocykgbWFucXVhbnRlKHMpPC9wPgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGl0ZW1jb3VudH0mbmJzcDt7JGl0ZW1zZm91bmR9ICB7KiRiYXJjaGFydHMqfTwvcD48L2Rpdj4Ke2lmICRpdGVtY291bnQgPiAwfQp7JGZvcm0yc3RhcnR9Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CiA8dGhlYWQ+Cgk8dHI+CgkJPHRoPklkPC90aD4KCQk8dGg+Sm91ZXVyPC90aD4KCQk8dGg+RGVybmnDqHJlIFNpdHVhdGlvbjwvdGg+CgkJPHRoPlBhcnRpZXMgRkZUVDwvdGg+CgkJPHRoPlBhcnRpZXMgU3BpZDwvdGg+CgkJPHRoIGNvbHNwYW49JzMnPkFjdGlvbnM8L3RoPgoJCTx0aD48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJzZWxlY3RhbGwiIG5hbWU9InNlbGVjdGFsbCI+PC90aD4KCTwvdHI+CiA8L3RoZWFkPgogPHRib2R5Pgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQogIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4KCTx0ZD57JGVudHJ5LT5pZH08L3RkPgoJPHRkPnskZW50cnktPmpvdWV1cn0gKHskZW50cnktPmxpY2VuY2V9KTwvdGQ+Cgk8dGQ+e2lmICRlbnRyeS0+c2l0X21lbnMgPT0nJ317JGVudHJ5LT5wdXNoX3BsYXllcn17ZWxzZX17JGVudHJ5LT5zaXRfbWVuc317L2lmfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+ZmZ0dH08YnIgLz4obWFqIGxlIHskZW50cnktPm1hal9mZnR0fGRhdGVfZm9ybWF0OiIlQSAlZSAlQiJ9KTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+c3BpZH0veyRlbnRyeS0+c3BpZF90b3RhbH17aWYgJGVudHJ5LT5zcGlkICE9ICRlbnRyeS0+c3BpZF90b3RhbH17JGF0dGVudGlvbl9pbWd9eyRlbnRyeS0+Y29ycmVjdGlvbn17L2lmfTxiciAvPihtYWogbGUgeyRlbnRyeS0+bWFqX3NwaWR8ZGF0ZV9mb3JtYXQ6IiVBICVlICVCIn0pPC90ZD4KICAgIDx0ZD57JGVudHJ5LT5zaXRtZW5zbGlua308L3RkPgoJPHRkPnskZW50cnktPmdldHBhcnRpZXNsaW5rfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+Z2V0cGFydGllc3NwaWR9PC90ZD4KCTx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9c2VsW10iIHZhbHVlPSJ7JGVudHJ5LT5saWNlbmNlfSIgY2xhc3M9InNlbGVjdCI+PC90ZD4KICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgo8IS0tIFNFTEVDVCBEUk9QRE9XTiAtLT4KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiIHN0eWxlPSJmbG9hdDogcmlnaHQ7Ij4KPGJyLz57JGFjdGlvbmRlbWFzc2V9eyRzdWJtaXRfbWFzc2FjdGlvbn0KICA8L2Rpdj4KeyRmb3JtMmVuZH0Key9pZn0K]]></data>
	</file>
	<file>
	  <filename>/templates/resultats.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyo8cHJlPnskaXRlbXN8dmFyX2R1bXB9PC9wcmU+Kn0Ke2Fzc2lnbiB2YXI9Y29tcHRldXIgdmFsdWUgPSAwfQo8cCBzdHlsZT0id2lkdGg6IDEwMCUiPjxzcGFuIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij57aWYgJHBoYXNlID09MX17JFNlcH0gfCB7JE9jdH0gfCB7JE5vdn0gfCB7JERlY30geyRtb2lzX3N1aXZhbnR9e2Vsc2V9eyRtb2lzX3ByZWNlZGVudH0gIHskSmFufSB8IHskRmV2fSB8IHskTWFyfSB8IHskQXZyfSB8IHskTWFpfSB8IHskSnVpbn0gfCB7JEp1aWx9ey9pZn08L3NwYW4+PHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0Ij57JGFsbF9yZXN1bHRzfTwvc3Bhbj48L3A+Cgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQp7KjxwPjxwcmU+eyRwcm9kc197JGNvbXB0ZXVyKyt9fHZhcl9kdW1wfTwvcHJlPjwvcD4qfQoKCXsqJGVudHJ5LT52YWxldXIqfXsqe2lmICRlbnRyeS0+YXR0ZW50aW9uID09MX17JGF0dGVudGlvbl9pbWd9IEFUVEVOVElPTiAhISAgey9pZn0qfQoJe2lmICRlbnRyeS0+aW5kaXZzPT0wfQoJPGgzPnskZW50cnktPmRhdGV8ZGF0ZV9mb3JtYXQ6IiVkLyVtLyVZIn0geyRlbnRyeS0+Y29tcGV0fTwvaDM+CgkKCQoJCTx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CgkJCXtmb3JlYWNoIGZyb209JHByb2RzX3skZW50cnktPnZhbGV1cn0gaXRlbT1kb25uZWV9CgkJCQk8dHI+CgkJCQkJPHRkPnskZG9ubmVlLT5lcXVhfTwvdGQ+CgkJCQkJPHRkPnskZG9ubmVlLT5lcXVifTwvdGQ+CgkJCQkJPHRkPnskZG9ubmVlLT5zY29yZWF9PC90ZD4KCQkJCQk8dGQ+eyRkb25uZWUtPnNjb3JlYn08L3RkPgoJCQkJCTx0ZD57JGRvbm5lZS0+ZGlzcGxheX08L3RkPgoJCQkJCTx0ZD57JGRvbm5lZS0+cmV0cmlldmVfcG91bGVfcmVuY29udHJlc308L3RkPgoJCQkJCTx0ZD57JGRvbm5lZS0+cmV0cmlldmVfZGV0YWlsc308L3RkPgoJCQkJCTx0ZD57JGRvbm5lZS0+ZGVsZXRlbGlua308L3RkPgoJCQkJPC90cj4KCQkJCXsvZm9yZWFjaH0KCQkJPC90YWJsZT4KCQp7ZWxzZX0KPGgzPnskZW50cnktPmRhdGV8ZGF0ZV9mb3JtYXQ6IiVkLyVtLyVZIn0geyRlbnRyeS0+Y29tcGV0fTwvaDM+CgoJPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KCQk8dHI+CgkJCTx0ZD57JGVudHJ5LT5kb3dubG9hZH08L3RkPgoJCTwvdHI+Cgk8L3RhYmxlPgoKey9pZn0Key9mb3JlYWNofQoK]]></data>
	</file>
	<file>
	  <filename>/templates/sitmens.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyo8cHJlPnskaXRlbXN8dmFyX2R1bXB9PC9wcmU+Kn0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CntsaXRlcmFsfQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFbQ0RBVEFbCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyAKICAgICAgICAkKCd0YWJsZScpLnRhYmxlc29ydGVyKCB7IHNvcnRMaXN0OltbMCwwXSxbMSwwXV0gfSApOyAKICAgIH0gCik7Ci8vXV0+Cjwvc2NyaXB0Pgp7L2xpdGVyYWx9Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JG1vaXNfcHJlY2VkZW50fSZuYnNwO3skbW9pc19zdWl2YW50fSA8L3A+PC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskaXRlbWNvdW50fSZuYnNwO3skaXRlbXNmb3VuZH0gPC9wPjwvZGl2Pgp7aWYgJGl0ZW1jb3VudCA+IDB9CjxoMz4gU2l0dWF0aW9uIG9mZmljaWVsbGUgZHUgbW9pcyBkZSB7JG1vaXNfY2hvaXNpfTwvaDM+Cjx0YWJsZSBjbGFzcz0idGFibGVzb3J0ZXIgdGFibGUgdGFibGUtYm9yZGVyZWQiIGlkPSJ0YWJsZXNvcnRlciI+CiA8dGhlYWQ+Cgk8dHIgY2xhc3M9ImhlYWRlciI+CgkJPHRoPkpvdWV1cjwvdGg+CgkJPHRoPlBvaW50czwvdGg+CgkJPHRoPlJhbmcgbmF0PC90aD4KCQk8dGg+UmFuZyByZWc8L3RoPgoJCTx0aD5SYW5nIGTDqXA8L3RoPgoJCTx0aD5Qcm9ncmVzc2lvbiBtZW5zPC90aD4KCTwvdHI+CiA8L3RoZWFkPgogPHRib2R5Pgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQogIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9IGhlYWRlciI+CiAgICA8dGQ+eyRlbnRyeS0+am91ZXVyfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+cG9pbnRzfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+Y2xuYXR9PC90ZD4KCTx0ZD57JGVudHJ5LT5yYW5ncmVnfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+cmFuZ2RlcH08L3RkPgoJPHRkPnskZW50cnktPnByb2dtb2lzfTwvdGQ+CiAgPC90cj4Key9mb3JlYWNofQogPC90Ym9keT4KPC90YWJsZT4Key9pZn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyokY3JlYXRlbGluayp9PC9wPjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/sitmens_prov.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCBzcmM9Imh0dHA6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CntsaXRlcmFsfQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFbQ0RBVEFbCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyAKICAgICAgICAkKCd0YWJsZScpLnRhYmxlc29ydGVyKCB7IHNvcnRMaXN0OltbMCwwXSxbMSwwXV0gfSApOyAKICAgIH0gCik7Ci8vXV0+Cjwvc2NyaXB0Pgp7L2xpdGVyYWx9CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskcmV0dXJubGlua308L3A+PC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskaXRlbWNvdW50fSZuYnNwO3skaXRlbXNmb3VuZH08L3A+PC9kaXY+CntpZiAkaXRlbWNvdW50ID4gMH0KPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZXNvcnRlciIgaWQ9InRhYmxlc29ydGVyIj4KCTx0aGVhZD4KCQk8dGg+Sm91ZXVyPC90aD4KCQk8IS0tPHRoPlByb2cgbW9pczwvdGg+LS0+CgkJPHRoPkNsdCByw6lmw6lyZW5jZTwvdGg+CgkJPHRoPlBvaW50cyBlbiBjb3VyczwvdGg+CgkJPHRoPkJpbGFuPC90aD4KCQkKCTwvdGhlYWQ+CiA8dGJvZHk+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CiAgPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgogICAgPHRkPnskZW50cnktPmpvdWV1cn08L3RkPgoJPHRkPnskZW50cnktPmNsdH08L3RkPgoJPHRkPnskZW50cnktPnNvbW1lfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+YmlsYW59PC90ZD4KCTx0ZD57JGVudHJ5LT5kZXRhaWxzfTwvdGQ+CiAgPC90cj4Key9mb3JlYWNofQogPC90Ym9keT4KPC90YWJsZT4Ke2Vsc2V9CjxwPkxlcyBzaXR1YXRpb25zIG1lbnN1ZWxsZXMgc29udCDDoCBqb3VyPC9wPgp7L2lmfQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGNyZWF0ZWxpbmt9PC9wPjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/spid.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICQoJyNzZWxlY3RhbGwnKS5jbGljayhmdW5jdGlvbigpewogICAgdmFyIHYgPSAkKHRoaXMpLmF0dHIoJ2NoZWNrZWQnKTsKICAgIGlmKCB2ID09ICdjaGVja2VkJyApIHsKICAgICAgJCgnLnNlbGVjdCcpLmF0dHIoJ2NoZWNrZWQnLCdjaGVja2VkJyk7CiAgICB9IGVsc2UgewogICAgICAkKCcuc2VsZWN0JykucmVtb3ZlQXR0cignY2hlY2tlZCcpOwogICAgfQogIH0pOwogICQoJy5zZWxlY3QnKS5jbGljayhmdW5jdGlvbigpewogICAgJCgnI3NlbGVjdGFsbCcpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKICB9KTsKICAkKCcjdG9nZ2xlX2ZpbHRlcicpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAkKCcjZmlsdGVyX2Zvcm0nKS50b2dnbGUoKTsKICB9KTsKICB7aWYgaXNzZXQoJHRhYmxlc29ydGVyKX0KICAkKCcjYXJ0aWNsZWxpc3QnKS50YWJsZXNvcnRlcih7IHNvcnRMaXN0OnskdGFibGVzb3J0ZXJ9IH0pOwogIHsvaWZ9Cn0pOwovL11dPgo8L3NjcmlwdD4Ke2lmIGlzc2V0KCRmb3Jtc3RhcnQpIH0KPGZpZWxkc2V0PgogIDxsZWdlbmQ+RmlsdHJlczwvbGVnZW5kPgogIHskZm9ybXN0YXJ0fQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8cCBjbGFzcz0icGFnZXRleHQiPlR5cGUgQ29tcMOpdGl0aW9uOjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY29tcGV0fSA8L3A+CiAgICA8IS0tPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF90b3VyfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3RvdXJ9IDwvcD4tLT4KCTxwIGNsYXNzPSJwYWdldGV4dCI+RGF0ZTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2RhdGV9IDwvcD4KCTxwIGNsYXNzPSJwYWdldGV4dCI+Sm91ZXVyIDo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3BsYXllcn0gPC9wPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5FcnJldXJzIHVuaXF1ZW1lbnQ6PC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9lcnJvcl9vbmx5fSA8L3A+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0ZmlsdGVyfXskaGlkZGVufGRlZmF1bHQ6Jyd9PC9wPgogIDwvZGl2PgogIHskZm9ybWVuZH0KPC9maWVsZHNldD4Key9pZn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfSB8IHskcmV0cmlldmVfYWxsfTwvcD48L2Rpdj4Ke2lmICRpdGVtY291bnQgPiAwfQp7JGZvcm0yc3RhcnR9Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CiA8dGhlYWQ+Cgk8dHI+CQoJCTx0aD5JZDwvdGg+CgkJPHRoPkpvdWV1cjwvdGg+CgkJPHRoPkRhdGU8L3RoPgoJCTx0aD5FcHJldXZlPC90aD4KCQk8dGg+Tm9tIGFkdmVyc2FpcmU8L3RoPgoJCTx0aD5DbGFzc2VtZW50PC90aD4KCQk8dGg+VmljdG9pcmU8L3RoPgoJCTx0aD5FY2FydDwvdGg+CgkJPHRoPkNvZWZmPC90aD4KCQk8dGg+UG9pbnRzPC90aD4KCQk8dGg+Rm9yZmFpdDwvdGg+CgkJPHRoIGNvbHNwYW49IjMiPkFjdGlvbnM8L3RoPgoJCTx0aD48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJzZWxlY3RhbGwiIG5hbWU9InNlbGVjdGFsbCI+PC90aD4KICA8L3RyPgogPC90aGVhZD4KIDx0Ym9keT4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KICA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+CiAgICA8dGQ+eyRlbnRyeS0+cmVjb3JkX2lkfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+am91ZXVyfTwvdGQ+CQogICAgPHRkPnskZW50cnktPmRhdGVfZXZlbnR8ZGF0ZV9mb3JtYXQ6IiVBICVlICVCICVZIn08L3RkPgogICAgPHRkPnskZW50cnktPmVwcmV1dmV9PC90ZD4KCTx0ZD57JGVudHJ5LT5uYW1lfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+Y2xhc3NlbWVudH08L3RkPgoJPHRkPnskZW50cnktPnZpY3RvaXJlfTwvdGQ+Cgl7aWYgJGVudHJ5LT5lY2FydCBlcSAiMC4wMCIgfHwgJGVudHJ5LT5lY2FydD09LSRlbnRyeS0+Y2xhc3NlbWVudH08dGQgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IG9yYW5nZTsiPntlbHNlfTx0ZD57L2lmfXskZW50cnktPmVjYXJ0fTwvdGQ+Cgl7aWYgJGVudHJ5LT5jb2VmZiAgZXEgIjAuMDAifTx0ZCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmVkOyI+e2Vsc2V9PHRkPnsvaWZ9eyRlbnRyeS0+Y29lZmZ9PC90ZD4KCTx0ZD57JGVudHJ5LT5wb2ludHJlc308L3RkPgoJPHRkPnskZW50cnktPmZvcmZhaXR9PC90ZD4KCTx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPgoJPHRkPnskZW50cnktPmR1cGxpY2F0ZWxpbmt9PC90ZD4KCTx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+Cgk8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ7JGFjdGlvbmlkfXNlbFtdIiB2YWx1ZT0ieyRlbnRyeS0+cmVjb3JkX2lkfSIgY2xhc3M9InNlbGVjdCI+PC90ZD4KICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgo8IS0tIFNFTEVDVCBEUk9QRE9XTiAtLT4KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiIHN0eWxlPSJmbG9hdDogcmlnaHQ7Ij4KPGJyLz57JGFjdGlvbmRlbWFzc2V9eyRzdWJtaXRfbWFzc2FjdGlvbn0KICA8L2Rpdj4KeyRmb3JtMmVuZH0Key9pZn0KCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnsqJGNyZWF0ZWxpbmsqfTwvcD48L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/teamscores.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyoKCXtpZiBpc3NldCgkZm9ybXN0YXJ0KSB9CjxmaWVsZHNldD4KICA8bGVnZW5kPkZpbHRyZXM8L2xlZ2VuZD4KICB7JGZvcm1zdGFydH0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5UeXBlIENvbXDDqXRpdGlvbjo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NvbXBldH0gPC9wPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF90b3VyfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3RvdXJ9IDwvcD4KCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfZXF1aXBlfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2VxdWlwZX0gPC9wPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdGZpbHRlcn17JGhpZGRlbnxkZWZhdWx0OicnfTwvcD4KICA8L2Rpdj4KICB7JGZvcm1lbmR9CjwvZmllbGRzZXQ+CnsvaWZ9Cip9CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskcmV0cmlldmVfdGVhbXN9IHx7JHJldHJpZXZlX3RlYW1zX2ZlbX0gfCB7JHJldHJpZXZlX3RlYW1zX2F1dHJlc30gfCB7JGVkaXRfdGVhbX08L3A+PC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskaXRlbWNvdW50fSZuYnNwO3skaXRlbXNmb3VuZH08L3A+PC9kaXY+CntpZiAkaXRlbWNvdW50ID4gMH0KPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JHBoYXNlMX0gfCB7JHBoYXNlMn08L3A+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CiA8dGhlYWQ+Cgk8dHI+CgkJPHRoPnskaWR9PC90aD4KCQk8dGg+eyRlcXVpcGV9PC90aD4KCQk8dGg+Tml2ZWF1PC90aD4KCQk8dGg+Q29tcMOpdGl0aW9uPC90aD4KCQk8dGg+Tm9tIGNvdXJ0PC90aD4KCQk8dGg+VGFnIHBvdXIgYWZmaWNoYWdlPC90aD4KCQk8dGggY29sc3Bhbj0iNCI+QWN0aW9uczwvdGg+Cgk8L3RyPgogPC90aGVhZD4KIDx0Ym9keT4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KICA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+Cgk8dGQ+eyRlbnRyeS0+aWR9PC90ZD4KICAgIDx0ZD57JGVudHJ5LT5saWJlcXVpcGV9PC90ZD4KICAgIDx0ZD57JGVudHJ5LT5saWJkaXZpc2lvbn08L3RkPgoJPHRkPnskZW50cnktPm5hbWV9PC90ZD4KICAgIDx0ZD57JGVudHJ5LT5mcmllbmRseW5hbWV9PC90ZD4KCTx0ZD57JGVudHJ5LT50YWd9PC90ZD4KCTx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPgoJPHRkPnskZW50cnktPmFkZG5ld2xpbmt9PC90ZD4KICAgIDx0ZD57JGVudHJ5LT5yZXRyaWV2ZV9wb3VsZV9yZW5jb250cmVzfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+Y2xhc3NlbWVudH08L3RkPgogICAgPHRkPnskZW50cnktPmRlbGV0ZWxpbmt9PC90ZD4KICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQoK]]></data>
	</file>
	<file>
	  <filename>/templates/topflop.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRpdGVtY291bnQgPiAwfQo8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSwgdGFibGUtYm9yZGVyZWQiPgogPHRoZWFkPgoJPHRyPgoJCTx0aD5Kb3VldXI8L3RoPgoJCTx0aD5FY2FydDwvdGg+CgkJPHRoPlBvaW50czwvdGg+Cgk8L3RyPgo8L3RoZWFkPgogPHRib2R5Pgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQogIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4KCTx0ZD57JGVudHJ5LT5qb3VldXJ9PC90ZD4KCTx0ZD57JGVudHJ5LT5hZHZ9KHskZW50cnktPmFkdmNsYW9mfSk8L3RkPgogICAgPHRkPnskZW50cnktPnBvaW50cmVzfTwvdGQ+CiAgICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgp7ZWxzZX0KPHA+UGFzIGRlIHLDqXN1bHRhdHM8L3A+CnsvaWZ9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/unable_players.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPkxpc3RlIGRlcyBqb3VldXJzIGluYWN0aWZzPC9oMj4KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfSAgeyRkaXNwbGF5X2VuYWJsZV9wbGF5ZXJzfTwvcD48L2Rpdj4Ke2lmICRpdGVtY291bnQgPiAwfQo8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgogPHRoZWFkPgogIDx0cj4JCiAgPHRoPnskaWR9PC90aD4KICA8dGg+Sm91ZXVyPC90aD4KPHRoPkFjdGlvbnM8L3RoPgogIDwvdHI+CiA8L3RoZWFkPgogPHRib2R5Pgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQoKICA8dHIgIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgogICAgPHRkPnskZW50cnktPmlkfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+am91ZXVyfTwvdGQ+Cgk8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4KICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQoK]]></data>
	</file>
	<file>
	  <filename>/templates/user_results.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfTwvcD48L2Rpdj4KPHA+eyRyZXRvdXJ9PC9wPgp7aWYgJGFmZmljaGU9PScxJ30KPGgzPlLDqXN1bcOpIGRlcyByw6lzdWx0YXRzPC9oMz4KPHA+eyRwaGFzZTF9IHwgeyRwaGFzZTJ9PC9wPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgogPHRib2R5PgoJPHRoZWFkPgoJCTx0cj4KCQkJPHRoPlZpYzwvdGg+CgkJCTx0aD5Ub3RhbDwvdGg+CgkJCTx0aD5QdHM8L3RoPgoJCTwvdHI+Cgk8L3RoZWFkPgogPC90Ym9keT4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMxIGl0ZW09ZW50cmVlfQogIDx0ciBjbGFzcz0ieyRlbnRyZWUtPnJvd2NsYXNzfSI+CiAgICA8dGQ+eyRlbnRyZWUtPnZpY308L3RkPgoJPHRkPnskZW50cmVlLT50b3RhbH08L3RkPgoJPHRkPnskZW50cmVlLT5wdHN9PC90ZD4KICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQp7aWYgJGl0ZW1jb3VudCA+MH0KCXtpZiAkYWZmaWNoZT09JzAnfQoJCgkJPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCI+CgkJIDx0aGVhZD4KCQkgIDx0cj4KCQkJPHRoPkFkdjwvdGg+CgkJCTx0aD5WaWMvRGVmPC90aD4KCQkJPHRoPkNvZWZmPC90aD4KCQkJPHRoPlB0czwvdGg+CgkJICA8L3RyPgoJCSA8L3RoZWFkPgoJCSA8dGJvZHk+CgkJe2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KCQkgIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4KCQkJPHRkPnskZW50cnktPmRhdGVfZXZlbnR8ZGF0ZV9mb3JtYXQ6IiVkLyVtIn08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+YWR2bm9tcHJlfSh7JGVudHJ5LT5hZHZjbGFvZn0pPC90ZD4KCQkgICAgPHRkPnskZW50cnktPnZkfTwvdGQ+CQkKCQkJPHRkPnskZW50cnktPnBvaW50cmVzfTwvdGQ+CgkJICA8L3RyPgoJCXsvZm9yZWFjaH0KCQkgPC90Ym9keT4KCQk8L3RhYmxlPgoJPHA+eyRyZXN1bHRhdHN9PC9wPgoJe2Vsc2V9CgkJPGgzPkxlIGTDqXRhaWwgZGVzIHLDqXN1bHRhdHMgb2ZmaWNpZWxzIGRlIHskam91ZXVyfTwvaDM+CgkJPHRhYmxlICBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQiPgoJCSA8dGhlYWQ+CgkJICA8dHI+CgkJCTx0aD5EYXRlPC90aD4KCQkJPHRoPkFkdjwvdGg+CgkJCTx0aD5WaWMvRGVmPC90aD4KCQkJPHRoPlB0czwvdGg+CgkJICA8L3RyPgoJCSA8L3RoZWFkPgoJCSA8dGJvZHk+CgkJe2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KCQkgIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4KCQkgICAgPHRkPnskZW50cnktPmRhdGVfZXZlbnR8ZGF0ZV9mb3JtYXQ6IiVkLyVtIn08L3RkPgoJCSAgICA8dGQgY2xhc3M9Im5hbWUiPnskZW50cnktPmFkdm5vbXByZX0oeyRlbnRyeS0+YWR2Y2xhb2Z9KTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT52ZH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+cG9pbnRyZXN9PC90ZD4KCQkgIDwvdHI+CgkJey9mb3JlYWNofQoJCSA8L3Rib2R5PgoJCTwvdGFibGU+Cgl7L2lmfQkKe2Vsc2V9CgkJCTxwPkF1Y3VuIHLDqXN1bHRhdDwvcD4Key9pZn0KCQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGNyZWF0ZWxpbmt9PC9wPjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/user_results_prov.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfTwvcD48L2Rpdj4KPHA+eyRyZXRvdXJ9PC9wPgp7aWYgJGFmZmljaGU9PScxJ30KPGgzPlLDqXN1bcOpIGRlcyByw6lzdWx0YXRzPC9oMz4KPHA+eyRwaGFzZTF9IHwgeyRwaGFzZTJ9PC9wPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgogPHRib2R5PgoJPHRoZWFkPgoJCTx0cj4KCQkJPHRoPlZpYzwvdGg+CgkJCTx0aD5Ub3RhbDwvdGg+CgkJCTx0aD5QdHM8L3RoPgoJCTwvdHI+Cgk8L3RoZWFkPgogPC90Ym9keT4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMxIGl0ZW09ZW50cmVlfQogIDx0ciBjbGFzcz0ieyRlbnRyZWUtPnJvd2NsYXNzfSI+CiAgICA8dGQ+eyRlbnRyZWUtPnZpY308L3RkPgoJPHRkPnskZW50cmVlLT50b3RhbH08L3RkPgoJPHRkPnskZW50cmVlLT5wdHN9PC90ZD4KICA8L3RyPgp7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQp7aWYgJGl0ZW1jb3VudCA+MH0KCXtpZiAkYWZmaWNoZT09JzAnfQoJPGgzPkxlcyByw6lzdWx0YXRzIGRlIHskam91ZXVyfTwvaDM+CgkJPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCI+CgkJIDx0aGVhZD4KCQkgIDx0cj4KCQkJPHRoPkRhdGU8L3RoPgoJCQk8dGg+RXByZXV2ZTwvdGg+CgkJCTx0aD5BZHY8L3RoPgoJCQk8dGg+VmljL0RlZjwvdGg+CgkJCQoJCQk8dGg+UHRzPC90aD4KCQkgIDwvdHI+CgkJIDwvdGhlYWQ+CgkJIDx0Ym9keT4KCQl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQoJCSAgPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgoJCQk8dGQ+eyRlbnRyeS0+ZGF0ZV9ldmVudHxkYXRlX2Zvcm1hdDoiJWQvJW0ifTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5lcHJldXZlfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5ub219KHskZW50cnktPmNsYXNzZW1lbnR9KTwvdGQ+CgkJICAgIDx0ZD57JGVudHJ5LT52aWN0b2lyZX08L3RkPgkJCgkJCTx0ZD57JGVudHJ5LT5wb2ludHJlc308L3RkPgoJCSAgPC90cj4KCQl7L2ZvcmVhY2h9CgkJIDwvdGJvZHk+CgkJPC90YWJsZT4KCTxwPnskcmVzdWx0YXRzfTwvcD4KCXtlbHNlfQoJCTxoMz5MZSBkw6l0YWlsIGRlcyByw6lzdWx0YXRzIHNwaWQgZGUgeyRqb3VldXJ9PC9oMz4KCQk8dGFibGUgIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCI+CgkJIDx0aGVhZD4KCQkgIDx0cj4KCQkJPHRoPkRhdGU8L3RoPgoJCQk8dGg+RXByZXV2ZTwvdGg+CgkJCTx0aD5BZHY8L3RoPgoJCQk8dGg+VmljL0RlZjwvdGg+CgkJCTx0aD5Db2VmZjwvdGg+CgkJCTx0aD5QdHM8L3RoPgoJCSAgPC90cj4KCQkgPC90aGVhZD4KCQkgPHRib2R5PgoJCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CgkJICA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+CgkJICAgIDx0ZD57JGVudHJ5LT5kYXRlX2V2ZW50fGRhdGVfZm9ybWF0OiIlZC8lbSJ9PC90ZD4KCQkJPHRkPnskZW50cnktPmVwcmV1dmV9PC90ZD4KCQkgICAgPHRkIGNsYXNzPSJuYW1lIj57JGVudHJ5LT5ub219KHskZW50cnktPmNsYXNzZW1lbnR9KTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT52aWN0b2lyZX08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+Y29lZmZ9PC90ZD4KCQkJPHRkPnskZW50cnktPnBvaW50cmVzfTwvdGQ+CgkJICA8L3RyPgoJCXsvZm9yZWFjaH0KCQkgPC90Ym9keT4KCQk8L3RhYmxlPgoJey9pZn0JCntlbHNlfQoJCQk8cD5BdWN1biByw6lzdWx0YXQ8L3A+CnsvaWZ9CgkKPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRjcmVhdGVsaW5rfTwvcD48L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/verif.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHA+eyRpdGVtc2NvdW50fSByw6lzdWx0YXQocykgdHJvdXbDqShzKTwvcD4Ke2lmICRpdGVtc2NvdW50PjB9CjxwPkxhIHByZW1pw6hyZSBjb2xvbm5lIGVzdCBjZWxsZSBkdSBzcGlkLCBsYSBkZXV4acOobWUgRkZUVCB8IHskQ29ycmlnZXJ9PC9wPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgoJPHRoZWFkPgoJCTx0cj4KCQkJPHRoPklkPC90aD4KCQkJPHRoPkRhdGU8L3RoPgoJCQk8dGg+RGF0ZTwvdGg+CgkJCTx0aD5MaWNlbmNlIDwvdGg+CgkJCTx0aD5MaWNlbmNlPC90aD4KCQkJPHRoPk5vbTwvdGg+CgkJCTx0aD5Ob208L3RoPgoJCQk8dGg+TsKwIEpvdXJuw6llPC90aD4KCQkJPHRoPk7CsCBKb3VybsOpZTwvdGg+CgkJCTx0aD5WaWN0b2lyZTwvdGg+CgkJCTx0aD5WaWN0b2lyZTwvdGg+CgkJCTx0aD5Db2VmZjwvdGg+CgkJCTx0aD5Db2VmZjwvdGg+CgkJCTx0aD5Qb2ludHM8L3RoPgoJCQk8dGg+UG9pbnRzPC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CgkJPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgoJCQk8dGQ+eyRlbnRyeS0+cmVjb3JkX2lkfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5kYXRlX3NwaWR8ZGF0ZV9mb3JtYXQ6IiVkLyVtIn08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZGF0ZV9mZnR0fGRhdGVfZm9ybWF0OiIlZC8lbSJ9PC90ZD4KCQkJPHRkPnskZW50cnktPmxpY2VuY2Vfc3BpZH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+bGljZW5jZV9mZnR0fTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5ub21fc3BpZH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+bm9tX2ZmdHR9PC90ZD4KCQkJPHRkPnskZW50cnktPm51bWpvdXJuX3NwaWR9PC90ZD4KCQkJPHRkPnskZW50cnktPm51bWpvdXJuX2ZmdHR9PC90ZD4KCQkJPHRke2lmICRlbnRyeS0+dmljdG9pcmVfc3BpZCAhPSAkZW50cnktPnZpY3RvaXJlX2ZmdHR9IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7In17L2lmfT4gCQkJCXskZW50cnktPnZpY3RvaXJlX3NwaWR9PC90ZD4KCQkJPHRkPnskZW50cnktPnZpY3RvaXJlX2ZmdHR9PC90ZD4KCQkJPHRke2lmICRlbnRyeS0+Y29lZmZfc3BpZCAhPSAkZW50cnktPmNvZWZmX2ZmdHR9IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7In17L2lmfT57JGVudHJ5LT5jb2VmZl9zcGlkfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5jb2VmZl9mZnR0fTwvdGQ+CgkJCTx0ZHtpZiAkZW50cnktPnBvaW50c19zcGlkICE9ICRlbnRyeS0+cG9pbnRzX2ZmdHR9IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7In17L2lmfT57JGVudHJ5LT5wb2ludHNfc3BpZH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+cG9pbnRzX2ZmdHR9PC90ZD4KCQkJPCEtLTx0ZD57JGVudHJ5LT5lcmFzZWxpbmt9PC90ZD4tLT4KCQkJCgkJPC90cj4KCXsvZm9yZWFjaH0KCTwvdGJvZHk+CgkJCQoJCQkKPC90YWJsZT4Ke2Vsc2V9CjxwPkF1Y3VuZSBlcnJldXIgPC9wPgp7L2lmfQo8cD57JHJldHVybmxpbmt9PC9wPg==]]></data>
	</file>
</module>
