<?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>GoogleMaps</name>
	<version>0.1.9</version>
  <mincmsversion>1.8</mincmsversion>
	<help><![CDATA[CjxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBpbnRlbnRlZCBmb3IgaW50ZWdyYXRpbmcgR29vZ2xlTWFwcyBhcyBhIHBhcnQgb2YgeW91ciBzaXRlLjwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPkZpcnN0IHlvdSBtdXN0IHVwZGF0ZSB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgbW9kdWxlLCB0byBoYXZlIGRlZmF1bHRzIHNldCBmb3IgbmV3IG1hcHMuPC9wPgo8cD5UaGVuIHlvdSBjYW4gY2FsbCB0aGlzIG1vZHVsZSBpbiB5b3VyIHRlbXBsYXRlIHdpdGgge2Ntc19tb2R1bGUgbW9kdWxlPSdHb29nbGVNYXBzJyBtYXA9J3Rlc3QnfSA8L3A+CjxwPlVzZXIgZGVmaW5lZCBtYXJrZXJzIGNhbiBiZSBsb2FkZWQgaW50byB1cGxvYWRzL0dvb2dsZU1hcHMvbWFya2Vycy4gVGhlIGNvbm5lY3RlZCBzaGFkb3cgaW1hZ2VzIHNob3VsZCBiZSBsb2FkZWQgaW4gCgl1cGxvYWRzL0dvb2dsZU1hcHMvbWFya2Vyc2hhZG93cy48YnI+CglOYW1pbmcgY29udmVudGlvbiBpcyBbbWFya2VyaWNvbl1zLnBuZyAoaWUuIG1hcmtlciBpcyBiaWdibHVlLnBuZywgbWFya2Vyc2hhZG93IGlzIGJpZ2JsdWVzLnBuZykuPGJyPgoJSWYgYSBzaGFkb3cgaXMgbm90IGZvdW5kLCB0aGUgZGVmYXVsdCB2ZXJzaW9uIHdpbGwgYmUgdXNlZCAod2hpY2ggbWF5IG5vdCBiZSB0aGUgY29ycmVjdCBzaGFkb3cgb2YgdGhlIG1hcmtlciBhdCBhbGwpLjxicj4KCUluIHRoZSBzZXR0aW5ncyB1c2UgdGhlIHByZWZlcmVuY2UgJ1VzZSBtYXJrZXIgc2hhZG93cycgdG8gc2hvdy9oaWRlIHRoZW0uIFNob3dpbmcgdGhlIHNoYWRvd3Mgc2xvd3MgZG93biB0aGUgYnVpbGR1cCBvZiB0aGUKCW1hcCwgZHVlIHRvIG1vcmUgaW50ZXJuYWwgY2hlY2tzLjxicj4KCU9ubHkgaW1hZ2VzIHdpdGggZXh0ZW5zaW9uIC5wbmcgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuPC9wPgo8cD5Qb2x5bGluZXMgYWxsb3dzIHlvdSB0byBkcmF3IGxpbmVzIGZyb20gYSBjZXJ0YWluIGNvb3JkaW5hdGlvbiB0byB0aGUgbmV4dC4gTXVsdGlwbGUgbGluZXMgYXJlIHBvc3NpYmxlIApwZXIgbWFwLiBUaGlzIGFsbG93cyB5b3UgdG8gcHJlcGFyZSB2aXN1YWwgb25lIGxpbmUgdGhhdCBpcyBhIGNvbWJpbmF0aW9uIG9mIG11bHRpcGxlIGNvbG9yZWQgCnNlcGFyYXRlIHBvbHlsaW5lIHNldHVwcy48L3A+CjxwPlRoaXMgbW9kdWxlIGlzIGV2ZW4gbW9yZSBmbGV4aWJsZSB0aHJvdWdoIHRoZSB1c2FnZSBvZiB0aGUgcGFyYW1ldGVycyAoc2VlIHRoZSBwYXJhbWV0ZXIgbGlzdCkuIEVhY2ggcGFyYW1ldGVyIGFzIGF2YWlsYWJsZSBkdXJpbmcgdGhlIHByZXBhcmF0aW9uIG9mIGEgbWFwLCBjYW4gYmUgCglvdmVycmlkZW4gZm9yIHRoZSBmcm9udCBlbmQuIFNvIHlvdSBhcmUgYWJsZSB0byBwcmVwYXJlIG9uZSBtYXAgYW5kIGRpc3BsYXkgaXQgaW4gdmFyaW91cyB3YXlzIGJ5IHVzaW5nIG9uZSBvciBtb3JlIHBhcmFtZXRlcnMuPC9wPgo8cD5JbiB0aGUgc2V0dGluZ3MgdGFiIGl0IGlzIHBvc3NpYmxlIHRvIHByZXBhcmUgYSBudW1iZXIgb2YgZGVmYXVsdCBzZXR0aW5ncyBmb3Igd2hhdCBpcyBjYWxsZWQgdGhlIDxzdHJvbmc+J0Vhc3kgTG9jYXRvcic8L3N0cm9uZz4uIFdoZW4gYWRkaW5nIGEgbmV3IG1hcCwKYSBtYXAgaXMgc2hvd24gYmFzZWQgdXBvbiB0aGVzZSBkZWZhdWx0IHNldHRpbmdzLjxiciAvPgpXaGVuIGVkaXRpbmcgYSBtYXAgb3IgYSBtYXJrZXIsIHRoZSBzaG93biBtYXAgaXMgYWx3YXlzIGNlbnRlcmVkIGF0IHRoZSBjb29yZGluYXRlcyBzaG93biBqdXN0IGJlbG93IHRoZSBtYXAuPGJyIC8+CldoZW4geW91IGVkaXQgYSBtYXAsIHRoZSBtYXAgc2V0dGluZ3MgKGNlbnRlciBjb29yZGluYXRlcyBhbmQgem9vbSBsZXZlbCkgYXJlIHVzZWQgdG8gcHJlcGFyZSB0aGUgRWFzeSBMb2NhdG9yLjxiciAvPgpUdXJuaW5nIG9uIHRoZSBzZXR0aW5nICdTYXZlIGxhc3QgdXNlZCB2YWx1ZXMnLCB3aWxsIHNhdmUgdGhlIGNvb3JkaW5hdGVzLCB6b29tIGxldmVsIHdoZW4gdXNlZCBvbiBhIG1hcC4gVGhlIG5leHQgdGltZSB5b3UgYWRkCmEgbWFwLCB0aGUgbGFzdCBzYXZlZCBjb29yZGluYXRlcyBhcmUgdXNlZCB0byBzaG93IHRoZSBFYXN5IExvY2F0b3IuIE5vdGU6IFRoaXMgc2F2aW5nIGlzIG9ubHkgZG9uZSBvbiBlZGl0aW5nIGEgbWFwIG9yIG1hcmtlcgooem9vbSBsZXZlbCBub3Qgc2F2ZWQgd2hlbiBlZGl0aW5nIGEgbWFya2VyKS4gPGJyIC8+CkhvdyBkbyBJIGNoYW5nZSB0aGUgc2hvd24gbWFwcz8gQnkgY2hhbmdpbmcgdGhlIHRlbXBsYXRlIGluIHRoZSBzZXR0aW5ncyB0YWIuIElmIHlvdSBhcmUgbm90IGZhbWlsaWFyIHdpdGggaW50ZXJuYWwgc2V0dGluZ3MgZm9yIGEgbWFwLCAKbGVhdmUgdGhlIHRlbXBsYXRlIGFzIGl0IGlzLiBFYXN5IGNoYW5nYWJsZSBhcmU6Cjx1bD4KIDxsaT50aGUgdHlwZSBvZiBjdXJzb3I6IGNoYW5nZSB0aGUgdmFsdWUgb2YgJ2RyYWdnYWJsZUN1cnNvcicgZnJvbSBjcm9zc2hhaXIgaW50bzogYXV0bywgZGVmYXVsdCwgaGVscCwgbW92ZSwgcG9pbnRlciwgdGV4dCwgd2FpdCwKICBoYW5kLCBwcm9ncmVzcyBvciBuby48L2xpPgogPGxpPnRoZSBzaXplIG9mIHRoZSBtYXA6IGF0IHRoZSBib3R0b20geW91IHdpbGwgZmluZCBzdHlsZT0id2lkdGg6IDUwMHB4OyBoZWlnaHQ6IDMwMHB4Ii4gQ2hhbmdlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHlvdSB3YW50LjwvbGk+CjwvdWw+CkFsbCBvdGhlciBzZXR0aW5ncyBjYW4gYmUgb2J0YWluZWQgdmlhOiA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL2ludGwvZW4tVVMvYXBpcy9tYXBzL2RvY3VtZW50YXRpb24vIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9pbnRsL2VuLVVTL2FwaXMvbWFwcy9kb2N1bWVudGF0aW9uLzwvYT4KPC9wPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0Ojxicj4KPHVsPgoJPGxpPlRoZSBDTVMgTWFkZSBTaW1wbGUgZm9ydW07PC9saT4KPC91bD4KPC9wPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQKb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgoKPGgzPlNlY3VyaXR5PC9oMz4KPHA+VXNlciBtdXN0IGhhdmUgIlVzZSBHb29nbGVNYXBzIiBwZXJtaXNzaW9ucyBzZXQgdG8gZWRpdCBtYXBzPC9wPgo8aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48bGk+Ym91bmRzX2Z1ZGdlPSIiIC0gVGhpcyB3aWxsIGFkanVzdCBob3cgbXVjaCBtYXAgYm91bmRhcnkgZW5jb21wYXNzZXMgdGhlIG1hcCBtYXJrZXJzLjwvbGk+PGxpPmNlbnRlcmxhdD0iIiAtIFRoZSBsYXRpdHVkZSB0byB3aGljaCB0aGUgbWFwIHNob3VsZCBiZSBjZW50ZXJlZC48L2xpPjxsaT5jZW50ZXJsb249IiIgLSBUaGUgbG9uZ2l0dWRlIHRvIHdoaWNoIHRoZSBtYXAgc2hvdWxkIGJlIGNlbnRlcmVkLjwvbGk+PGxpPmNvbnRyb2xzPSIiIC0gSWYgc2V0IHRvIDAgKHplcm8pLCB0aGVyZSB3aWxsIGJlIG5vIGNvbnRyb2xzIHRvIHpvb20vbW92ZSBhcm91bmQgdGhlIG1hcC48L2xpPjxsaT5jb250cm9sc19zaXplPSIiIC0gVGhpcyBzZXRzIHRoZSBtYXAgY29udHJvbCBzaXplLiBSZWxldmFudCBvbmx5IGlmIG1hcCBjb250cm9scyBhcmUKZW5hYmxlZC4gbGFyZ2UgPSBtYXAgem9vbS9tb3ZlIHdpdGggc2xpZGVyLiBzbWFsbCA9IHpvb20vbW92ZSB3aXRob3V0IHNsaWRlci4gTGFyZ2UgaXMgZGVmYXVsdC48L2xpPjxsaT5kaXJlY3Rpb25zPSIiIC0gVGhpcyBlbmFibGVzIG1hcCBkaXJlY3Rpb25zIGluIHRoZSBib3R0b20gb2YgdGhlIHBvcC11cCBpbmZvIHdpbmRvdy4gRGVmYXVsdCBpcyBkaXNhYmxlZC4KJzEnIFdpbGwgZW5hYmxlIHRoZSBkaXJlY3Rpb25zLjwvbGk+PGxpPmhlaWdodD0iIiAtIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgbWFwIHdpbmRvdy4gVGhpcyBjYW4gYmUgZWl0aGVyIHB4IG9yICUuPC9saT48bGk+aW5mb190cmlnZ2VyPSIiIC0gVGhpcyBzZXRzIHRoZSBpbmZvIHdpbmRvdyB0cmlnZ2VyIGJlaGF2aW9yLiBjbGljayA9IGluZm8gd2luZG93IGNvbWVzIHVwCiAgICAgICAgd2hlbiBjbGlja2luZyBvbiBhIG1hcmtlci4gbW91c2VvdmVyID0gaW5mbyB3aW5kb3cgY29tZXMgdXAgd2hlbiBtb3VzaW5nIG92ZXIgYSBtYXJrZXIuPC9saT48bGk+aW5mb193aW5kb3c9IiIgLSBFbmFibGVzIGluZm8gd2luZG93cyBvbiBtYXAgbWFya2Vycy48L2xpPjxsaT5tYXA9InRlc3QiIC0gU2V0IHdoaWNoIG1hcCB0byBzaG93PC9saT48bGk+bGFuZ3VhZ2U9IiIgLSBTZWU6IDxhIGhyZWY9Imh0dHA6Ly9zcHJlYWRzaGVldHMuZ29vZ2xlLmNvbS9wdWI/a2V5PXA5cGR3c2FpMmhETXNMa1hzb00wNUtRJmdpZD0xIiB0YXJnZXQ9Il9ibGFuayI+CnRoZSBsaXN0IG9mIGxhbmd1YWdlczwvYT48L2xpPjxsaT5zY2FsZV9jb250cm9sPSIiIC0gVXNlICcxJyBvciB0cnVlIHRvIHNob3cgc2NhbGUuPC9saT48bGk+c2lkZWJhcj0iIiAtIFVzZSAnMScgdG8gZW5hYmxlIHRoZSBtYXAgc2lkZWJhci48L2xpPjxsaT50eXBlPSIiIC0gVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1hcCB0eXBlLiBSZWxldmFudCBvbmx5IGlmIG1hcCB0eXBlIGNvbnRyb2xzIGFyZSBlbmFibGVkLiAKCW1hcCA9IGRlZmF1bHQgbWFwLiBzYXRlbGxpdGUgPSBzYXRlbGxpdGUgdmlldy4gaHlicmlkID0gaHlicmlkIHZpZXcuIHRlcnJhaW4gPSBwaHlzaWNhbCB2aWV3IHdpdGggcm9hZHM8L2xpPjxsaT50eXBlX2NvbnRyb2xzPSIiIC0gVXNlICcxJyBlbmFibGUgdGhlIG1hcCB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZC90ZXJyYWluKTwvbGk+PGxpPndpZHRoPSIiIC0gU2V0cyB0aGUgd2lkdGggb2YgdGhlIG1hcCB3aW5kb3cuIFRoaXMgY2FuIGJlIGVpdGhlciBweCBvciAlLjwvbGk+PGxpPnpvb209IiIgLSBUaGlzIHNldHMgdGhlIG1hcCB6b29tIGxldmVsLjwvbGk+PGxpPnpvb21fZW5jb21wYXNzPSIiIC0gVXNlICcxJyB0byBlbmFibGUgdGhlIHpvb20gZW5jb21wYXNzIHNvIG1hcCB6b29tIGlzIGFzIHNtYWxsIGFzIHBvc3NpYmxlCiAgICAgICAgYW5kIGluY2x1ZGUgYWxsIG1hcCBtYXJrZXJzLjwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiB0c3cgJmx0O3RhdHUud2lrbWFuIFthdF0gZ21haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDAuMS45PGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgoJPGxpPlZlcnNpb24gMC4xLjkgMjkgT2N0b2JlciAyMDExIEJ5IER1a2V0b3duPGJyIC8+CgkJPHVsPgoJCQk8bGk+VHVybmVkIG1haW50ZW5hbmNlIG9mIG1hcmtlcnMgaW50byBzdGFuZGFyZCB1cGRhdGUgZm9yIGJldHRlciBtYWludGVuYW5jZTs8L2xpPgoJCQk8bGk+RHVyaW5nIGluc3RhbGxhdGlvbiB0aGUgbWFya2VyIHNoYWRvd3Mgd2VyZSBub3QgY29waWVkOzwvbGk+CgkJCTxsaT5OZXcgdGFiIGZvciBwb2x5bGluZSBtYWludGVuYW5jZSAoRmVhdHVyZSBSZXF1ZXN0IDQxNjApOzwvbGk+CgkJCTxsaT5Ud28gbmV3IG9wdGlvbnMgdG8gc2V0IGluY3JlbWVudCBzdGVwIGFuZCBwcmVjaXNpb24gb2YgbWFya2VyL3BvbHlsaW5lIGxvY2F0aW9uOzwvbGk+CgkJCTxsaT5FYXN5bG9jYXRvciBzaG93cyBtYXAgdHlwZS96b29tIGxldmVsIG9mIGNvbm5lY3RlZCBtYXAgb24gbWFya2VyIG1haW50ZW5hbmNlOzwvbGk+CgkJCTxsaT5OdW1iZXIgb2YgbWFya2Vycy9wb2x5bGluZXMgaW4gYmFja2VuZCBmb2xsb3dzIHRoZSBOdW1iZXIgb2Ygcm93cyBwZXIgcGFnZSB3aGVuIHZpZXdpbmcgR2xvYmFsIENvbnRlbnQgQmxvY2tzIGZyb20gdGhlIHVzZXIgcHJlZmVyZW5jZXM7PC9saT4KCQkJPGxpPkxpc3Qgb2YgbWFwcyBhbmQgbWFya2VycyBhcmUgc29ydGFibGUgaWYgbW9kdWxlIGpRdWVyeVRvb2xzIGlzIGluc3RhbGxlZDs8L2xpPgoJCQk8bGk+VXBncmFkZWQgR29vZ2xlTWFwcyBBUEkgZnJvbSB2ZXJzaW9uIDIuNSB0byAzLjA7PC9saT4KCQkJPGxpPlpvb20gc2Nyb2xsIHdoZWVsIGNhbiBub3QgYmUgbWFpbnRhaW5lZCBhbnltb3JlLCBzaW5jZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGluIHZlcnNpb24gMy4wOzwvbGk+CgkJCTxsaT5Tb2x2ZWQgaXNzdWUgKEdvb2dsZU1hcEFQSS5jbGFzcy5waHApIGluIHRoYXQgYWRkcmVzcyBsb29rdXAgY2FtZSBiYWNrIHdpdGggd2FybmluZywgZHVlIHRvIGZldGNoVVJMIGZ1bmN0aW9uOzwvbGk+CgkJCTxsaT5Tb2x2ZWQgaXNzdWUgKEdvb2dsZU1hcEFQSS5jbGFzcy5waHApIGNhdXNpbmcgbWFwIG5vdCB0byBiZSBzaG93biB3aGVuIHdpbmRvdyBvbmxvYWQgaXMgdXNlZCAKCQkJKHdoaWNoIGlzIGluIG1vc3QgY2FzZXMgdGhlIHNpdHVhdGlvbiB3aXRoaW4gQ01TTVMpOzwvbGk+CgkJCTxsaT5EdXJpbmcgdXBkYXRlIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBBUEkgaXMgcmVtb3ZlZCAobGliL0dvb2dsZU1hcEFQSS0yLjUpLiBZb3UgbWF5IGZpbmQgaXQgaXMgc3RpbGwgdGhlcmUgYWZ0ZXIgdGhpcyB1cGdyYWRlLgoJCQlUaGF0IGlzIHRoZW4gZHVlIHRvIHNlY3VyaXR5IHNldHRpbmdzLiBZb3UgbWF5IGRlbGV0ZSBkaXJlY3RvcnkgR29vZ2xlTWFwQVBJLTIuNSB3aXRob3V0IGFueSBwcm9ibGVtLjwvbGk+CgkJCTxsaT5NYWtlIHN1cmUgdGhhdCBkYXRhYmFzZSBjYWxscyBhcmUgQ01TTVMgdmVyc2lvbiAxLjggdGhydSAxLjEwLjkgcHJvb2YuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS44IDI5IERlY2VtYmVyIDIwMDkgQnkgRHVrZXRvd248YnIgLz4KCQk8dWw+CgkJCTxsaT5QZXIgbWFwL21hcmtlciBFYXN5IExvY2F0b3IgaW50cm9kdWNlZCwgdG8gcXVpY2tseSByZXRyaWV2ZSBjb29yZGluYXRlcyBmb3IgbWFwL21hcmtlcjs8L2xpPgoJCQk8bGk+TmV3IHNldHRpbmdzIHRvIHN1cHBvcnQgRWFzeSBMb2NhdG9yOzwvbGk+CgkJCTxsaT5ObyB0aGluZ3MgbGVmdCBiZWhpbmQgd2hlbiBwZXJmb3JtaW5nIGFuIHVuaXN0YWxsLjwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+VmVyc2lvbiAwLjEuNyA1IERlY2VtYmVyIDIwMDkgQnkgRHVrZXRvd248YnI+CgkJPHVsPgoJCQk8bGk+VXBncmFkZWQgR29vZ2xlTWFwcyBBUEkgZnJvbSB2ZXJzaW9uIDIuMCB0byAyLjUgKEZlYXR1cmUgUmVxdWVzdCA0MjQ5KTs8L2xpPgoJCQk8bGk+UGVyIG1hcCBvcHRpb24gdG8gYWxsb3cgem9vbWluZyB1c2luZyB0aGUgc2Nyb2xsIHdoZWVsOzwvbGk+CgkJCTxsaT5QZXIgbWFwIG9wdGlvbiB0byBzaG93L2hpZGUgdGhlIHNjYWxlLiBBbHNvIGF2YWlsYWJsZSBhcyBwYXJhbWV0ZXI7PC9saT4KCQkJPGxpPk5vIGxvbmdlciBuZWVkIHRvIHJlbG9naW4gYWZ0ZXIgYWRkcmVzcyBsb29rdXAgKEJ1ZyMzMTkzKS4gRm91bmQgbGF0L2xvbiByZW1haW5zIHNob3duIGZvciBlYXN5IGNvcHlpbmc7PC9saT4KCQkJPGxpPkxhbmd1YWdlIGZvciB0aGUgY29udHJvbGVzIGlzIG5vdyBhdmFpbGFibGUgYXMgcGFyYW1ldGVyOzwvbGk+CgkJCTxsaT5DaGVja2VkL3NvbHZlZCB2YWxpZGF0aW9uIFhIVE1MIHVzaW5nIFczQyAoQnVnIzIwMTQpOzwvbGk+CgkJCTxsaT5Ob3cgbXVsdGlwbGUgbWFwcyBvbiBvbmUgcGFnZSBwb3NzaWJsZSAoQnVnIyA0MjQ4KTs8L2xpPgoJCQk8bGk+QmV0dGVyIHVzYWdlIG9mIGRpcmVjdG9yeSBzZXBhcmF0b3IgdG8gYXZvaWQgbm90IGZvdW5kIGZpbGVzIChCdWcjMzM0Nik7PC9saT4KCQkJPGxpPk5ldyBtYXAgdHlwZSAnVGVycmFpbicgaW1wbGVtZW50ZWQuPC9saT4KCQkJPGxpPkR1cmluZyB1cGRhdGUgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIEFQSSBpcyByZW1vdmVkIChsaWIvR29vZ2xlTWFwQVBJLTIuMCkuIFlvdSBtYXkgZmluZCBpdCBpcyBzdGlsbCB0aGVyZSBhZnRlciB0aGlzIHVwZ3JhZGUuCgkJCVRoYXQgaXMgdGhlbiBkdWUgdG8gc2VjdXJpdHkgc2V0dGluZ3MuIFlvdSBtYXkgZGVsZXRlIGRpcmVjdG9yeSBHb29nbGVNYXBBUEktMi4wIHdpdGhvdXQgYW55IHByb2JsZW0uPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS42IDE1IEphbnVhcnkgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPkluY2x1ZGVkIHRoZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGFsc28gdXNlZCBieSBHb29nbGUncyBBUEkuIFBhcmFtZXRlcnMgYXJlIGRpc2N1c3NlZCBpbiBoZWxwIHRleHQuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS41IDEwIEphbnVhcnkgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlVzZXIgZGVmaW5lZCBtYXJrZXJzIG5vdyB3b3JrLiBTZWFyY2ggPGEgaHJlZj0iaHR0cDovL3d3dy5nb29nbGUubmwvc2VhcmNoP3Jscz1lbiZxPWdvb2dsZSttYXBzK2ljb24rbWFrZXIiIHRhcmdldD0iX2JsYW5rIj5Hb29nbGU8L2E+IGZvciBtYXAgaWNvbiBtYWtlcnM8YnIgLz48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLiAyOCBBdWd1c3QgMjAwNi48YnI+CgkJPHVsPgoJCQk8bGk+SW5pdGlhbCBSZWxlYXNlLjwvbGk+CgkJPC91bD4KCTwvbGk+CjwvdWw+CjxoMz5UaGFua3MgZ28gdG88L2gzPgo8cD5Sb2JlcnQgQnJvd24gZm9yIFJDUlVEIENsYXNzIHVzZWQgaW4gYWRtaW4gZXh0ZW5zaXZlbHk8L3A+CjxwPmFuZDwvcD4KPHA+TW9udGUgT2hydCBmb3IgR29vZ2xlTWFwQVBJPC9wPjxiciAvPg==]]></about>
	<description><![CDATA[Prepare multiple Google maps, multiple coordinates with custom markers. 
Includes EasyLocator to quickly set coordinates. Paths (aka polylines) are also possible.]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.addmap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGFkZGluZyBhIG1hcAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9nb29nbGVtYXBzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwokZGIgPSBjbXNtcygpLT5HZXREYigpOwoKJHVzZXJfaWQgPSAwOwppZiAoZ2V0X3VzZXJpZCgpICkgewoJJHVzZXJfaWQgPSBnZXRfdXNlcmlkKCk7Cn0KJG93bmVyX2lkID0gJHVzZXJfaWQ7CgppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBHb29nbGVNYXBzJykpCnsKCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcsIGFycmF5KCdVc2UgR29vZ2xlTWFwcycpKSk7CglyZXR1cm47Cn0KCmlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpCnsKCSRwYXJhbXMgPSBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ21hcHMnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwp9CgokZGVzY3JpcHRpb24gPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2Rlc2NyaXB0aW9uJ10pKSB7CgkkZGVzY3JpcHRpb24gPSAkcGFyYW1zWydkZXNjcmlwdGlvbiddOwp9CgokY2VudGVyX2xhdCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snY2VudGVyX2xhdCddKSkgewoJJGNlbnRlcl9sYXQgPSAkcGFyYW1zWydjZW50ZXJfbGF0J107Cn0KCiRjZW50ZXJfbG9uID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydjZW50ZXJfbG9uJ10pKSB7CgkkY2VudGVyX2xvbiA9ICRwYXJhbXNbJ2NlbnRlcl9sb24nXTsKfQoKJHR5cGUgPSAnbWFwJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3R5cGUnXSkpIHsKCSR0eXBlID0gJHBhcmFtc1sndHlwZSddOwp9Cgokd2lkdGggPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3dpZHRoJ10pKSB7Cgkkd2lkdGggPSAkcGFyYW1zWyd3aWR0aCddOwp9CgokaGVpZ2h0ID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydoZWlnaHQnXSkpIHsKCSRoZWlnaHQgPSAkcGFyYW1zWydoZWlnaHQnXTsKfQoKJGNvbnRyb2xzID0gMDsKaWYgKGlzc2V0KCRwYXJhbXNbJ2NvbnRyb2xzJ10pKSB7CgkkY29udHJvbHMgPSAkcGFyYW1zWydjb250cm9scyddOwp9CgokY29udHJvbHNfc2l6ZSA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snY29udHJvbHNfc2l6ZSddKSkgewoJJGNvbnRyb2xzX3NpemUgPSAkcGFyYW1zWydjb250cm9sc19zaXplJ107Cn0KCiR0eXBlX2NvbnRyb2xzID0gMDsKaWYgKGlzc2V0KCRwYXJhbXNbJ3R5cGVfY29udHJvbHMnXSkpIHsKCSR0eXBlX2NvbnRyb2xzID0gJHBhcmFtc1sndHlwZV9jb250cm9scyddOwp9Cgokc2lkZWJhciA9IDA7CmlmIChpc3NldCgkcGFyYW1zWydzaWRlYmFyJ10pKSB7Cgkkc2lkZWJhciA9ICRwYXJhbXNbJ3NpZGViYXInXTsKfQoKJGRpcmVjdGlvbnMgPSAwOwppZiAoaXNzZXQoJHBhcmFtc1snZGlyZWN0aW9ucyddKSkgewoJJGRpcmVjdGlvbnMgPSAkcGFyYW1zWydkaXJlY3Rpb25zJ107Cn0KCiR1c2Vkem9vbSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJywgMTApOwppZiAoaXNzZXQoJHBhcmFtc1snem9vbSddKSkgewoJJHVzZWR6b29tID0gJHBhcmFtc1snem9vbSddOwp9Cgokem9vbXNjcm9sbHdoZWVsID0gMDsKCiR6b29tX2VuY29tcGFzcyA9IDA7CmlmIChpc3NldCgkcGFyYW1zWyd6b29tX2VuY29tcGFzcyddKSkgewoJJHpvb21fZW5jb21wYXNzID0gJHBhcmFtc1snem9vbV9lbmNvbXBhc3MnXTsKfQoKJHNjYWxlX2NvbnRyb2wgPSAwOwppZiAoaXNzZXQoJHBhcmFtc1snc2NhbGVfY29udHJvbCddKSkgewoJJHNjYWxlX2NvbnRyb2wgPSAkcGFyYW1zWydzY2FsZV9jb250cm9sJ107Cn0KCiRib3VuZHNfZnVkZ2UgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2JvdW5kc19mdWRnZSddKSkgewoJJGJvdW5kc19mdWRnZSA9ICRwYXJhbXNbJ2JvdW5kc19mdWRnZSddOwp9CgokaW5mb193aW5kb3cgPSAwOwppZiAoaXNzZXQoJHBhcmFtc1snaW5mb193aW5kb3cnXSkpIHsKCSRpbmZvX3dpbmRvdyA9ICRwYXJhbXNbJ2luZm9fd2luZG93J107Cn0KCiRpbmZvX3RyaWdnZXIgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2luZm9fdHJpZ2dlciddKSkgewoJJGluZm9fdHJpZ2dlciA9ICRwYXJhbXNbJ2luZm9fdHJpZ2dlciddOwp9CgokbmFtZSA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbmFtZSddKSkKewoJJG5hbWUgPSAkcGFyYW1zWyduYW1lJ107CglpZiAoJG5hbWUgIT0gJycpIHsKCQkkbWFwX2lkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHNfc2VxJyk7CgkJJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXBzIAoJCQkobWFwX2lkLCBuYW1lLCBkZXNjcmlwdGlvbiwgY2VudGVyX2xhdCwgY2VudGVyX2xvbiwgb3duZXJfaWQsIAoJCQl0eXBlLCB3aWR0aCwgaGVpZ2h0LCBjb250cm9scywgY29udHJvbHNfc2l6ZSwgdHlwZV9jb250cm9scywgCgkJCXNpZGViYXIsIGRpcmVjdGlvbnMsIHpvb20sIHpvb21zY3JvbGx3aGVlbCwgem9vbV9lbmNvbXBhc3MsCgkJCXNjYWxlX2NvbnRyb2wsIGJvdW5kc19mdWRnZSwgaW5mb193aW5kb3csIGluZm9fdHJpZ2dlcikgCgkJCVZBTFVFUyAoPyw/LD8sPyw/LD8sCgkJCQk/LD8sPyw/LD8sPywKCQkJCT8sPyw/LD8sPywKCQkJCT8sPyw/LD8pJzsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbWFwX2lkLCAkbmFtZSwgJGRlc2NyaXB0aW9uLCAkY2VudGVyX2xhdCwgCgkJCSRjZW50ZXJfbG9uLCAkb3duZXJfaWQsICR0eXBlLCAkd2lkdGgsICRoZWlnaHQsICRjb250cm9scywgJGNvbnRyb2xzX3NpemUsIAoJCQkkdHlwZV9jb250cm9scywgJHNpZGViYXIsICRkaXJlY3Rpb25zLCAkdXNlZHpvb20sICR6b29tc2Nyb2xsd2hlZWwsCQoJCQkkem9vbV9lbmNvbXBhc3MsICRzY2FsZV9jb250cm9sLCAkYm91bmRzX2Z1ZGdlLCAkaW5mb193aW5kb3csCgkJCSRpbmZvX3RyaWdnZXIpKTsKCQkkdGhpcy0+U2F2ZUVhc3lMb2NhdG9yKCRjZW50ZXJfbGF0LCAkY2VudGVyX2xvbiwgJHVzZWR6b29tKTsKCgkJJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZSc9PiAnbWFwYWRkZWQnLCAnYWN0aXZlX3RhYicgPT4gJ21hcHMnKTsKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKCX0KCWVsc2UgewoJCQllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdub25hbWVnaXZlbicpKTsKCX0KfQoKLy8gQ2hlY2sgd2hhdCB1c2VyIHNldHRpbmcgaXMgZm9yIEdsb2JhbCBDb250ZW50IEJsb2NrIHd5c2l3eWcKJGFsbG93X3d5c2l3eWcgPSBnZXRfcHJlZmVyZW5jZSggJHVzZXJfaWQsICdnY2Jfd3lzaXd5ZycgKTsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIG1hcCB0eXBlcwokdHlwZWxpc3QgPSBhcnJheSgpOwokdHlwZWxpc3QgPSAkdGhpcy0+R2V0TWFwVHlwZXMoKTsKc3dpdGNoICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdG1hcHR5cGUnKSkgewoJY2FzZSAnaHlicmlkJzoKCQkkc21hcnR5LT5hc3NpZ24oJ21hcHR5cGUnLCAnSFlCUklEJyk7CgkJYnJlYWs7CgljYXNlICdzYXRlbGxpdGUnOgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdTQVRFTExJVEUnKTsKCQlicmVhazsKCWNhc2UgJ3RlcnJhaW4nOgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdURVJSQUlOJyk7CgkJYnJlYWs7CglkZWZhdWx0OgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdST0FETUFQJyk7CgkJYnJlYWs7Cn0KLy8gUHJlcGFyZSBhIGxpc3Qgb2YgY29udHJvbCBzaXplcwokY29udHJvbHNfc2l6ZWxpc3QgPSBhcnJheSgpOwokY29udHJvbHNfc2l6ZWxpc3RbJHRoaXMtPkxhbmcoJ2NvbnRyb2xzaXplbGFyZ2UnKV0gPSAnbGFyZ2UnOwokY29udHJvbHNfc2l6ZWxpc3RbJHRoaXMtPkxhbmcoJ2NvbnRyb2xzaXplc21hbGwnKV0gPSAnc21hbGwnOwoKLy8gUHJlcGFyZSBhIGxpc3Qgb2Ygem9vbSBsZXZlbHMKJHpvb21saXN0ID0gYXJyYXkoKTsKZm9yICgkaSA9IDE7ICRpIDwgMjA7ICRpKyspIHsKCSR6b29tbGlzdFskaSAtIDFdID0gJGk7Cn0KCi8vIFByZXBhcmUgYSBsaXN0IG9mIHdpbmRvdyB0cmlnZ2VycwokaW5mb190cmlnZ2VybGlzdCA9IGFycmF5KCk7CiRpbmZvX3RyaWdnZXJsaXN0WyR0aGlzLT5MYW5nKCdpbmZvX3RyaWdnZXJjbGljaycpXSA9ICdjbGljayc7CiRpbmZvX3RyaWdnZXJsaXN0WyR0aGlzLT5MYW5nKCdpbmZvX3RyaWdnZXJtb3VzZW92ZXInKV0gPSAnbW91c2VvdmVyJzsKCiNEaXNwbGF5IHRlbXBsYXRlCiRzbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdhZGRtYXAnLCAkcmV0dXJuaWQpKTsKJHNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfbmFtZScsICR0aGlzLT5MYW5nKCd0aXRsZV9uYW1lJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X25hbWUnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ25hbWUnLCAkbmFtZSwgNDAsIDgwLCAnY2xhc3M9ImRlZmF1bHRmb2N1cyInKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfZGVzY3JpcHRpb24nLCAkdGhpcy0+TGFuZygndGl0bGVfZGVzY3JpcHRpb24nKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfZGVzY3JpcHRpb24nLCAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoJGFsbG93X3d5c2l3eWcsICRpZCwgJGRlc2NyaXB0aW9uLCAnZGVzY3JpcHRpb24nLCAnJywgJycsICcnLCAnJywgJzgwJywgJzMnKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfY2VudGVyX2xhdCcsICR0aGlzLT5MYW5nKCd0aXRsZV9jZW50ZXJfbGF0JykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2NlbnRlcl9sYXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2NlbnRlcl9sYXQnLCAkY2VudGVyX2xhdCwgNDAsIDEwMCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2NlbnRlcl9sb24nLCAkdGhpcy0+TGFuZygndGl0bGVfY2VudGVyX2xvbicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jZW50ZXJfbG9uJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdjZW50ZXJfbG9uJywgJGNlbnRlcl9sb24sIDQwLCAxMDApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV90eXBlJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3R5cGUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfdHlwZScsICR0aGlzLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAgKCRpZCwgJ3R5cGUnLCAkdHlwZWxpc3QsICR0eXBlLCAnJywgJyZuYnNwOycpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV93aWR0aCcsICR0aGlzLT5MYW5nKCd0aXRsZV93aWR0aCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF93aWR0aCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnd2lkdGgnLCAkd2lkdGgsIDQwLCA1MCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2hlaWdodCcsICR0aGlzLT5MYW5nKCd0aXRsZV9oZWlnaHQnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfaGVpZ2h0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdoZWlnaHQnLCAkaGVpZ2h0LCA0MCwgNTApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jb250cm9scycsJHRoaXMtPkxhbmcoJ3RpdGxlX2NvbnRyb2xzJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2NvbnRyb2xzJywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnY29udHJvbHMnLCB0cnVlLCAkY29udHJvbHMpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jb250cm9sc19zaXplJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2NvbnRyb2xzX3NpemUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfY29udHJvbHNfc2l6ZScsICR0aGlzLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAgKCRpZCwgJ2NvbnRyb2xzX3NpemUnLCAkY29udHJvbHNfc2l6ZWxpc3QsICRjb250cm9sc19zaXplLCAnJywgJyZuYnNwOycpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV90eXBlX2NvbnRyb2xzJywkdGhpcy0+TGFuZygndGl0bGVfdHlwZV9jb250cm9scycpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF90eXBlX2NvbnRyb2xzJywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAndHlwZV9jb250cm9scycsIHRydWUsICR0eXBlX2NvbnRyb2xzKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfc2lkZWJhcicsJHRoaXMtPkxhbmcoJ3RpdGxlX3NpZGViYXInKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfc2lkZWJhcicsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3NpZGViYXInLCB0cnVlLCAkc2lkZWJhcikpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2RpcmVjdGlvbnMnLCR0aGlzLT5MYW5nKCd0aXRsZV9kaXJlY3Rpb25zJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2RpcmVjdGlvbnMnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdkaXJlY3Rpb25zJywgdHJ1ZSwgJGRpcmVjdGlvbnMpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV96b29tJywkdGhpcy0+TGFuZygndGl0bGVfem9vbScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF96b29tJywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnem9vbScsICR6b29tbGlzdCwgLTEsICR1c2Vkem9vbSkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3pvb21fZW5jb21wYXNzJywkdGhpcy0+TGFuZygndGl0bGVfem9vbV9lbmNvbXBhc3MnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfem9vbV9lbmNvbXBhc3MnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICd6b29tX2VuY29tcGFzcycsIHRydWUsICR6b29tX2VuY29tcGFzcykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3NjYWxlX2NvbnRyb2wnLCR0aGlzLT5MYW5nKCd0aXRsZV9zY2FsZV9jb250cm9sJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3NjYWxlX2NvbnRyb2wnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdzY2FsZV9jb250cm9sJywgdHJ1ZSwgJHNjYWxlX2NvbnRyb2wpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9ib3VuZHNfZnVkZ2UnLCAkdGhpcy0+TGFuZygndGl0bGVfYm91bmRzX2Z1ZGdlJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2JvdW5kc19mdWRnZScsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnYm91bmRzX2Z1ZGdlJywgJGJvdW5kc19mdWRnZSwgNDAsIDUwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfaW5mb193aW5kb3cnLCR0aGlzLT5MYW5nKCd0aXRsZV9pbmZvX3dpbmRvdycpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pbmZvX3dpbmRvdycsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2luZm9fd2luZG93JywgdHJ1ZSwgJGluZm9fd2luZG93KSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfaW5mb190cmlnZ2VyJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2luZm9fdHJpZ2dlcicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pbmZvX3RyaWdnZXInLCAkdGhpcy0+Q3JlYXRlSW5wdXRSYWRpb0dyb3VwICgkaWQsICdpbmZvX3RyaWdnZXInLCAkaW5mb190cmlnZ2VybGlzdCwgJGluZm9fdHJpZ2dlciwgJycsICcmbmJzcDsnKSk7CgovLyBQYXNzIHRoZSBpZCwgc28gaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGphdmEgc2NyaXB0IG9mIHRoZSBlYXN5bG9jYXRvciAKJHNtYXJ0eS0+YXNzaWduKCdpZCcsJGlkKTsKCi8vIFByZXBhcmUgdGhlIHNldHRpbmdzIGZvciB0aGUgZWFzeWxvY2F0b3IKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lYXN5bG9jYXRvcicsICR0aGlzLT5MYW5nKCd0aXRsZV9lYXN5bG9jYXRvcicpKTsKJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxhdCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDQ0KSk7CiRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3Jsb24nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3Jsb24nLCAtNjMpKTsKJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxldmVsJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGV2ZWwnKSwgMSk7Cgokc21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdtYXBfaWQnLCAkbWFwX2lkKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsIGxhbmcoJ3N1Ym1pdCcpKSk7CiRzbWFydHktPmFzc2lnbignY2FuY2VsJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2NhbmNlbCcsIGxhbmcoJ2NhbmNlbCcpKSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdG1hcC50cGwnKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.addmarker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGFkZGluZyBhIG1hcmtlcgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9nb29nbGVtYXBzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwokZGIgPSBjbXNtcygpLT5HZXREYigpOwoKJHVzZXJfaWQgPSAnJzsKaWYgKGdldF91c2VyaWQoKSApIHsKCSR1c2VyX2lkID0gZ2V0X3VzZXJpZCgpOwp9CgppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBHb29nbGVNYXBzJykpCnsKCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcsIGFycmF5KCdVc2UgR29vZ2xlTWFwcycpKSk7CglyZXR1cm47Cn0KCiR1c2VkbWFwID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydtYXAnXSkpIHsKCSR1c2VkbWFwID0gJHBhcmFtc1snbWFwJ107Cn0KCiRpbmZvID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydpbmZvJ10pKSB7CgkkaW5mbyA9ICRwYXJhbXNbJ2luZm8nXTsKfQoKJGFkZHJlc3MgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2FkZHJlc3MnXSkpIHsKCSRhZGRyZXNzID0gJHBhcmFtc1snYWRkcmVzcyddOwp9CgokbGF0ID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydsYXQnXSkpIHsKCSRsYXQgPSAkcGFyYW1zWydsYXQnXTsKfQplbHNlIHsKCSRlYXN5bG9jYXRvcmxhdCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDQ0KTsKfQoKJGxvbiA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbG9uJ10pKSB7CgkkbG9uID0gJHBhcmFtc1snbG9uJ107Cn0KZWxzZSB7CgkkZWFzeWxvY2F0b3Jsb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3Jsb24nLCAtNjMpOwp9CgoKJGljb24gPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2ljb24nXSkpIHsKCSRpY29uID0gJHBhcmFtc1snaWNvbiddOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKQp7CgkkcGFyYW1zID0gYXJyYXkoJ2FjdGl2ZV90YWInID0+ICdtYXJrZXJzJyk7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKfQoKJG5hbWUgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ25hbWUnXSkpCnsKCSRuYW1lID0gJHBhcmFtc1snbmFtZSddOwoJaWYgKCRuYW1lICE9ICcnKQoJewoJCSRtYXJrZXJfaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfbWFya2Vyc19zZXEnKTsKCQkkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMKCQkJKG1hcmtlcl9pZCwgbWFwLCBuYW1lLCBpbmZvLCBhZGRyZXNzLCBsYXQsIGxvbiwgaWNvbikKCQkJVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8pJzsKCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbWFya2VyX2lkLCAkdXNlZG1hcCwgJG5hbWUsICRpbmZvLCAkYWRkcmVzcywgJGxhdCwgJGxvbiwgJGljb24pKTsKCQkkdGhpcy0+U2F2ZUVhc3lMb2NhdG9yKCRjZW50ZXJfbGF0LCAkY2VudGVyX2xvbik7CgoJCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnPT4gJ21hcmtlcmFkZGVkJywgJ2FjdGl2ZV90YWInID0+ICdtYXJrZXJzJyk7CgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cgl9CgllbHNlCgl7CgkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbm9uYW1lZ2l2ZW4nKSk7Cgl9Cn0KCi8vIFByZXBhcmUgZGVmYXVsdCBzZXR0aW5ncwpzd2l0Y2ggKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0bWFwdHlwZScpKSB7CgljYXNlICdoeWJyaWQnOgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdIWUJSSUQnKTsKCQlicmVhazsKCWNhc2UgJ3NhdGVsbGl0ZSc6CgkJJHNtYXJ0eS0+YXNzaWduKCdtYXB0eXBlJywgJ1NBVEVMTElURScpOwoJCWJyZWFrOwoJY2FzZSAndGVycmFpbic6CgkJJHNtYXJ0eS0+YXNzaWduKCdtYXB0eXBlJywgJ1RFUlJBSU4nKTsKCQlicmVhazsKCWRlZmF1bHQ6CgkJJHNtYXJ0eS0+YXNzaWduKCdtYXB0eXBlJywgJ1JPQURNQVAnKTsKCQlicmVhazsKfQokc21hcnR5LT5hc3NpZ24oJ3VzZWRfbGF0JywgMCk7CiRzbWFydHktPmFzc2lnbigndXNlZF9sb24nLCAwKTsKJHNtYXJ0eS0+YXNzaWduKCd1c2VkX2ljb24nLCAwKTsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIG1hcHMKJG1hcGxpc3QgPSBhcnJheSgpOwokbWFwbGlzdCA9IGdvb2dsZW1hcHNfdXRpbHM6OmdldF9saXN0X21hcHMoKTsKCi8vIENoZWNrIHdoYXQgdXNlciBzZXR0aW5nIGlzIGZvciBHbG9iYWwgQ29udGVudCBCbG9jayB3eXNpd3lnCiRhbGxvd193eXNpd3lnID0gZ2V0X3ByZWZlcmVuY2UoICR1c2VyX2lkLCAnZ2NiX3d5c2l3eWcnICk7CgovLyBQcmVwYXJlIGEgbGlzdCBvZiBpY29ucwovLyBSZWFkIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWluIHRoZSBpbWFnZXMgb2YgdGhlIG1hcmtlcnMKJHBhdGggPSAnLi4nLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3VwbG9hZHMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHRoaXMtPmdldE5hbWUoKS5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzJzsKLy8gT3BlbiB0aGlzIGRpcmVjdG9yeSAKJG1hcmtlcmRpcmVjdG9yeSA9IG9wZW5kaXIoJHBhdGgpOwokaWNvbmxpc3QgPSBhcnJheSgpOwoKLy8gR2V0IGVhY2ggZW50cnkKd2hpbGUoJGZpbGUgPSByZWFkZGlyKCRtYXJrZXJkaXJlY3RvcnkpKSB7CgkkcGF0dGVybj0iKGpwZ3xwbmd8anBlZ3xnaWYpIjsKCWlmIChwcmVnX21hdGNoKCRwYXR0ZXJuLCAkZmlsZSkpIHsKCS8vaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7CgkJJGljb25saXN0Wyc8aW1nIHNyYz0iJy4kcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlLiciIGFsdD0iJy4kZmlsZS4nIj4nXSA9ICRmaWxlOwoJfQp9CgovLyBDbG9zZSB0aGUgZGlyZWN0b3J5CmNsb3NlZGlyKCRtYXJrZXJkaXJlY3RvcnkpOwoKI0Rpc3BsYXkgdGVtcGxhdGUKJHNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2FkZG1hcmtlcicsICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9uYW1lJywgJHRoaXMtPkxhbmcoJ3RpdGxlX25hbWUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfbmFtZScsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbmFtZScsICRuYW1lLCA0MCwgODAsICdjbGFzcz0iZGVmYXVsdGZvY3VzIicpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9iZWxvbmdzdG9tYXAnLCAkdGhpcy0+TGFuZygnYmVsb25nc3RvbWFwJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2JlbG9uZ3N0b21hcCcsICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ21hcCcsICRtYXBsaXN0LCAtMSwgJHVzZWRtYXApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pbmZvJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2luZm8nKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfaW5mbycsICR0aGlzLT5DcmVhdGVUZXh0QXJlYSgkYWxsb3dfd3lzaXd5ZywgJGlkLCAkaW5mbywgJ2luZm8nLCAnJywgJycsICcnLCAnJywgJzgwJywgJzMnKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfYWRkcmVzcycsICR0aGlzLT5MYW5nKCdhZGRyZXNzJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2FkZHJlc3MnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2FkZHJlc3MnLCAkYWRkcmVzcywgNDAsIDI1NSkpOwovLyBQYXNzIHRoZSBpZCwgc28gaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGphdmEgc2NyaXB0IG9mIHRoZSBlYXN5bG9jYXRvciAKJHNtYXJ0eS0+YXNzaWduKCdpZCcsJGlkKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sYXQnLCAkdGhpcy0+TGFuZygnbGF0aXR1ZGUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfbGF0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdsYXQnLCAkbGF0LCA0MCwgMTAwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfbG9uJywgJHRoaXMtPkxhbmcoJ2xvbmdpdHVkZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9sb24nLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2xvbicsICRsb24sIDQwLCAxMDApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pY29uJywgJHRoaXMtPkxhbmcoJ21hcmtlcmljb24nKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfaWNvbicsICR0aGlzLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAgKCRpZCwgJ2ljb24nLCAkaWNvbmxpc3QsIC0xLCAnJywgJyZuYnNwOycpKTsKJHNtYXJ0eS0+YXNzaWduKCdsb2NhdGlvbnByZWNpc2lvbicsICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9jYXRpb25wcmVjaXNpb24nLCA3KSk7CgovLyBQcmVwYXJlIHRoZSBzZXR0aW5ncyBmb3IgdGhlIGVhc3lsb2NhdG9yCiRzbWFydHktPmFzc2lnbigndGl0bGVfZWFzeWxvY2F0b3InLCAkdGhpcy0+TGFuZygndGl0bGVfZWFzeWxvY2F0b3InKSk7CiRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsYXQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsYXQnLCA0NCkpOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybG9uJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybG9uJywgLTYzKSk7CiRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsZXZlbCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJyksIDEpOwoKJHNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLCAnJyk7CiRzbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsIGxhbmcoJ3N1Ym1pdCcpKSk7CiRzbWFydHktPmFzc2lnbignY2FuY2VsJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2NhbmNlbCcsIGxhbmcoJ2NhbmNlbCcpKSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdG1hcmtlci50cGwnKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.addpolyline.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTEgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGFkZGluZyBhIHBvbHlsaW5lCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2dvb2dsZW1hcHMKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgokZ0NtcyA9IGNtc21zKCk7IGlmKCAhaXNfb2JqZWN0KCRnQ21zKSApIGV4aXQ7CiRkYiA9IGNtc21zKCktPkdldERiKCk7CgokdXNlcl9pZCA9ICcnOwppZiAoZ2V0X3VzZXJpZCgpICkgewoJJHVzZXJfaWQgPSBnZXRfdXNlcmlkKCk7Cn0KCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnKSkKewoJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJywgYXJyYXkoJ1VzZSBHb29nbGVNYXBzJykpKTsKCXJldHVybjsKfQoKJG5hbWUgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ25hbWUnXSkpCnsKCSRuYW1lID0gJHBhcmFtc1snbmFtZSddOwp9CiR1c2VkbWFwID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydtYXAnXSkpIHsKCSR1c2VkbWFwID0gJHBhcmFtc1snbWFwJ107Cn0KCiRzdHJva2Vjb2xvciA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snc3Ryb2tlY29sb3InXSkpIHsKCSRzdHJva2Vjb2xvciA9ICRwYXJhbXNbJ3N0cm9rZWNvbG9yJ107Cn0KCiRzdHJva2VvcGFjaXR5ID0gJzEuMCc7CmlmIChpc3NldCgkcGFyYW1zWydzdHJva2VvcGFjaXR5J10pKSB7Cgkkc3Ryb2tlb3BhY2l0eSA9ICRwYXJhbXNbJ3N0cm9rZW9wYWNpdHknXTsKfQokc3Ryb2tld2VpZ2h0ID0gJzInOwppZiAoaXNzZXQoJHBhcmFtc1snc3Ryb2tld2VpZ2h0J10pKSB7Cgkkc3Ryb2tld2VpZ2h0ID0gJHBhcmFtc1snc3Ryb2tld2VpZ2h0J107Cn0KCiRsYXQgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2xhdCddKSkgewoJJGxhdCA9ICRwYXJhbXNbJ2xhdCddOwp9CmVsc2UgewoJJGVhc3lsb2NhdG9ybGF0ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGF0JywgNDQpOwp9CgokbG9uID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydsb24nXSkpIHsKCSRsb24gPSAkcGFyYW1zWydsb24nXTsKfQplbHNlIHsKCSRlYXN5bG9jYXRvcmxvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxvbicsIC02Myk7Cn0KCgokaWNvbiA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snaWNvbiddKSkgewoJJGljb24gPSAkcGFyYW1zWydpY29uJ107Cn0KCmlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpCnsKCSRwYXJhbXMgPSBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ3BvbHlsaW5lcycpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cn0KCi8vIEVycm9yIGNoZWNraW5nCiRlcnJmbmQgPSBmYWxzZTsKJGVycm9yZm91bmQgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSkgewoJaWYgKCRuYW1lID09ICcnKSB7CgkJJGVycmZuZCA9IHRydWU7CgkJJGVycm9yZm91bmQgLj0gJHRoaXMtPkxhbmcoJ25vbmFtZWdpdmVuJyk7Cgl9CglpZiAoJHN0cm9rZW9wYWNpdHkgPCAwIHx8ICRzdHJva2VvcGFjaXR5ID4gMSkgewoJCSRlcnJmbmQgPSB0cnVlOwoJCWlmICgkZXJyb3Jmb3VuZCAhPSAnJykgeyRlcnJvcmZvdW5kIC49ICc8YnIgLz4nO30KCQkkZXJyb3Jmb3VuZCAuPSAkdGhpcy0+TGFuZygnaW52YWxpZG9wYWNpdHknKTsKCX0KfQppZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0J10pICYmICRlcnJmbmQgPT0gZmFsc2UpIHsKCSRwb2x5bGluZV9pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXNfc2VxJyk7CgkkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcwoJCShwb2x5bGluZV9pZCwgbWFwX2lkLCBuYW1lLCBzdHJva2Vjb2xvciwgc3Ryb2tlb3BhY2l0eSwgc3Ryb2tld2VpZ2h0KQoJCVZBTFVFUyAoPyw/LD8sPyw/LD8pJzsKCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwb2x5bGluZV9pZCwgJHVzZWRtYXAsICRuYW1lLCBzdHJ0b3VwcGVyKCRzdHJva2Vjb2xvciksIAoJCSRzdHJva2VvcGFjaXR5LCAkc3Ryb2tld2VpZ2h0KSk7CgoJJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZSc9PiAncG9seWxpbmVhZGRlZCcsICdhY3RpdmVfdGFiJyA9PiAncG9seWxpbmVzJyk7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKfQplbHNlIHsKCWlmICgkZXJyZm5kKSB7CgkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkZXJyb3Jmb3VuZCk7Cgl9Cn0KCgovLyBQcmVwYXJlIGRlZmF1bHQgc2V0dGluZ3MKc3dpdGNoICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdG1hcHR5cGUnKSkgewoJY2FzZSAnaHlicmlkJzoKCQkkc21hcnR5LT5hc3NpZ24oJ21hcHR5cGUnLCAnSFlCUklEJyk7CgkJYnJlYWs7CgljYXNlICdzYXRlbGxpdGUnOgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdTQVRFTExJVEUnKTsKCQlicmVhazsKCWNhc2UgJ3RlcnJhaW4nOgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdURVJSQUlOJyk7CgkJYnJlYWs7CglkZWZhdWx0OgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdST0FETUFQJyk7CgkJYnJlYWs7Cn0KJHNtYXJ0eS0+YXNzaWduKCd1c2VkX2xhdCcsIDApOwokc21hcnR5LT5hc3NpZ24oJ3VzZWRfbG9uJywgMCk7CiRzbWFydHktPmFzc2lnbigndXNlZF9pY29uJywgMCk7CgovLyBQcmVwYXJlIGEgbGlzdCBvZiBtYXBzCiRtYXBsaXN0ID0gYXJyYXkoKTsKJG1hcGxpc3QgPSBnb29nbGVtYXBzX3V0aWxzOjpnZXRfbGlzdF9tYXBzKCk7CgojRGlzcGxheSB0ZW1wbGF0ZQokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnYWRkcG9seWxpbmUnLCAkcmV0dXJuaWQpKTsKJHNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfbmFtZScsICR0aGlzLT5MYW5nKCd0aXRsZV9uYW1lJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X25hbWUnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ25hbWUnLCAkbmFtZSwgNDAsIDgwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfYmVsb25nc3RvbWFwJywgJHRoaXMtPkxhbmcoJ2JlbG9uZ3N0b21hcCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9iZWxvbmdzdG9tYXAnLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdtYXAnLCAkbWFwbGlzdCwgLTEsICR1c2VkbWFwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfY29sb3InLCAkdGhpcy0+TGFuZygndGl0bGVfY29sb3InKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfY29sb3InLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3N0cm9rZWNvbG9yJywgJHN0cm9rZWNvbG9yLCA3LCA3KSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfc2FtcGxlY29sb3InLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3NhbXBsZWNvbG9yJywgJycsIDEsIDEsICdzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogJy4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnc3Ryb2tlY29sb3InLCAnI0ZGRkZGRicpLiciJykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX29wYWNpdHknLCAkdGhpcy0+TGFuZygndGl0bGVfb3BhY2l0eScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9vcGFjaXR5JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdzdHJva2VvcGFjaXR5JywgJHN0cm9rZW9wYWNpdHksIDMsIDMpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV93ZWlnaHQnLCAkdGhpcy0+TGFuZygndGl0bGVfd2VpZ2h0JykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3dlaWdodCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnc3Ryb2tld2VpZ2h0JywgJHN0cm9rZXdlaWdodCwgMiwgMikpOwovLyBQYXNzIHRoZSBpZCwgc28gaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGphdmEgc2NyaXB0IG9mIHRoZSBlYXN5bG9jYXRvciAKJHNtYXJ0eS0+YXNzaWduKCdpZCcsJGlkKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sYXQnLCAkdGhpcy0+TGFuZygnbGF0aXR1ZGUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfbGF0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdsYXQnLCAkbGF0LCA0MCwgMTAwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfbG9uJywgJHRoaXMtPkxhbmcoJ2xvbmdpdHVkZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9sb24nLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2xvbicsICRsb24sIDQwLCAxMDApKTsKCi8vIFByZXBhcmUgdGhlIHNldHRpbmdzIGZvciB0aGUgZWFzeWxvY2F0b3IKJHNtYXJ0eS0+YXNzaWduKCdlZGl0cG9seWxpbmUnLCAnMCcpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2xvY2F0aW9ucycsICR0aGlzLT5MYW5nKCd0aXRsZV9sb2NhdGlvbnMnKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfZWFzeWxvY2F0b3InLCAkdGhpcy0+TGFuZygndGl0bGVfZWFzeWxvY2F0b3InKSk7CiRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsYXQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsYXQnLCA0NCkpOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybG9uJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybG9uJywgLTYzKSk7CiRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsZXZlbCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJyksIDEpOwokc21hcnR5LT5hc3NpZ24oJ2FkZGxvY2F0aW9uJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2FkZGxvY2F0aW9uJywgJHRoaXMtPkxhbmcoJ2FkZGxvY2F0aW9uJykpKTsKCiRzbWFydHktPmFzc2lnbignaGlkZGVuJywgJycpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdGxvY2F0aW9ucycsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRsb2NhdGlvbnMnLCBsYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjYW5jZWwnLCBsYW5nKCdjYW5jZWwnKSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2VkaXRwb2x5bGluZS50cGwnKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERpc3BsYXlNb2R1bGVPdXRwdXQoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgbWV0aG9kIHRvIGRpc3BsYXkKICAgc29tZXRoaW5nIHdoZXJlIGEgcGFnZSBvciB0ZW1wbGF0ZSBoYXMgYSB0YWcgY2FsbGluZwogICB0aGlzIG1vZHVsZS4KICAgCiAgIE5vdGUgdGhhdCBpdCB1c2VzIGEgdGVtcGxhdGUsIGFuZCBpcyB0aHVzIHZlcnkgcG93ZXJmdWwsCiAgIGV2ZW4gaWYgaXQncyBzaW1wbGUuCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiRnQ21zID0gY21zbXMoKTsgaWYoICFpc19vYmplY3QoJGdDbXMpICkgZXhpdDsKCiNBdm9pZCBmbG9hdCBwcm9ibGVtIGluIGxvY2FsZQokY3VycmVudExvY2FsZSA9IHNldGxvY2FsZShMQ19BTEwsIDApOwpzZXRsb2NhbGUoTENfQUxMLCAnZW5fVVMnKTsKCiRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuIGNtc19kYl9wcmVmaXgoKSAuIm1vZHVsZV9nb29nbGVtYXBzX21hcHMgCglXSEVSRSBuYW1lIExJS0UgJyIuICRwYXJhbXNbJ21hcCddLiAiJyBMSU1JVCAxIjsKJG1hcF9kYXRhID0gYXJyYXkoKTsKJG1hcF9kYXRhID0mICRkYi0+R2V0Um93KCRxdWVyeSk7CgppZighaXNzZXQoJG1hcF9kYXRhWydtYXBfaWQnXSkpIHsKICAkc21hcnR5LT5hc3NpZ24oJ2Vycm9yJywgJHRoaXMtPkxhbmcoJ25vbWFwJykpOwogICRzbWFydHktPmFzc2lnbigndGl0bGUnLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CiAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICByZXR1cm47Cn0KCi8vIE5vdyB0aGF0IGEgY2hlY2sgaXMgZG9uZSBpZiBhbGwgc2VlbXMgb2ssIGhhbmRsZSB0aGUgb3ZlcnJpZGVzIHRoYXQgYXJlIHBhc3NlZAppZiAoaXNzZXQoJHBhcmFtc1snd2lkdGgnXSkpICRtYXBfZGF0YVsnd2lkdGgnXSA9ICRwYXJhbXNbJ3dpZHRoJ107CmlmIChpc3NldCgkcGFyYW1zWydoZWlnaHQnXSkpICRtYXBfZGF0YVsnaGVpZ2h0J10gPSAkcGFyYW1zWydoZWlnaHQnXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2NvbnRyb2xzJ10pKSB7CS8vIFRyaWVkIHRvIHVzZSBpbnR2YWwoJHBhcmFtc1snY29udHJvbHMnXSksIGJ1dCBzbWFydHkgc3RpbGwgZmVsbCBvdmVyIHRoYXQKCSRwYXJhbXNbJ2NvbnRyb2xzJ10gPT0gJzEnID8gJG1hcF9kYXRhWydjb250cm9scyddID0gMSA6ICRtYXBfZGF0YVsnY29udHJvbHMnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3R5cGVfY29udHJvbHMnXSkpIHsKCSRwYXJhbXNbJ3R5cGVfY29udHJvbHMnXSA9PSAnMScgPyAkbWFwX2RhdGFbJ3R5cGVfY29udHJvbHMnXSA9IDEgOiAkbWFwX2RhdGFbJ3R5cGVfY29udHJvbHMnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3pvb20nXSkpICRtYXBfZGF0YVsnem9vbSddID0gJHBhcmFtc1snem9vbSddOwppZiAoaXNzZXQoJHBhcmFtc1snY29udHJvbHNfc2l6ZSddKSkgJG1hcF9kYXRhWydjb250cm9sc19zaXplJ10gPSAkcGFyYW1zWydjb250cm9sc19zaXplJ107CmlmIChpc3NldCgkcGFyYW1zWyd0eXBlJ10pKSAkbWFwX2RhdGFbJ3R5cGUnXSA9ICRwYXJhbXNbJ3R5cGUnXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ3NpZGViYXInXSkpIHsKCSRwYXJhbXNbJ3NpZGViYXInXSA9PSAnMScgPyAkbWFwX2RhdGFbJ3NpZGViYXInXSA9IDEgOiAkbWFwX2RhdGFbJ3NpZGViYXInXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ2RpcmVjdGlvbnMnXSkpIHsKCSRwYXJhbXNbJ2RpcmVjdGlvbnMnXSA9PSAnMScgPyAkbWFwX2RhdGFbJ2RpcmVjdGlvbnMnXSA9IDEgOiAkbWFwX2RhdGFbJ2RpcmVjdGlvbnMnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3pvb21fc2Nyb2xsd2hlZWwnXSkpIHsKCSRwYXJhbXNbJ3pvb21fc2Nyb2xsd2hlZWwnXSA9PSAnMScgPyAkbWFwX2RhdGFbJ3pvb21fc2Nyb2xsd2hlZWwnXSA9IDEgOiAkbWFwX2RhdGFbJ3pvb21fc2Nyb2xsd2hlZWwnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3pvb21fZW5jb21wYXNzJ10pKSB7CgkkcGFyYW1zWyd6b29tX2VuY29tcGFzcyddID09ICcxJyA/ICRtYXBfZGF0YVsnem9vbV9lbmNvbXBhc3MnXSA9IDEgOiAkbWFwX2RhdGFbJ3pvb21fZW5jb21wYXNzJ10gPSAwOwp9CmlmIChpc3NldCgkcGFyYW1zWydzY2FsZV9jb250cm9sJ10pKSB7CgkkcGFyYW1zWydzY2FsZV9jb250cm9sJ10gPT0gJzEnID8gJG1hcF9kYXRhWydzY2FsZV9jb250cm9sJ10gPSAxIDogJG1hcF9kYXRhWydzY2FsZV9jb250cm9sJ10gPSAwOwp9CmlmIChpc3NldCgkcGFyYW1zWydib3VuZHNfZnVkZ2UnXSkpICRtYXBfZGF0YVsnYm91bmRzX2Z1ZGdlJ10gPSAkcGFyYW1zWydib3VuZHNfZnVkZ2UnXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2luZm9fd2luZG93J10pKSB7CgkkcGFyYW1zWydpbmZvX3dpbmRvdyddID09ICcxJyA/ICRtYXBfZGF0YVsnaW5mb193aW5kb3cnXSA9IDEgOiAkbWFwX2RhdGFbJ2luZm9fd2luZG93J10gPSAwOwp9CmlmIChpc3NldCgkcGFyYW1zWydjZW50ZXJsb24nXSkpICRtYXBfZGF0YVsnY2VudGVyX2xvbiddID0gJHBhcmFtc1snY2VudGVybG9uJ107CmlmIChpc3NldCgkcGFyYW1zWydjZW50ZXJsYXQnXSkpICRtYXBfZGF0YVsnY2VudGVyX2xhdCddID0gJHBhcmFtc1snY2VudGVybGF0J107CmlmIChpc3NldCgkcGFyYW1zWydpbmZvX3RyaWdnZXInXSkpICRtYXBfZGF0YVsnaW5mb190cmlnZ2VyJ10gPSAkcGFyYW1zWydpbmZvX3RyaWdnZXInXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2xhbmd1YWdlJ10pKSAkbWFwX2RhdGFbJ2xhbmd1YWdlJ10gPSAkcGFyYW1zWydsYW5ndWFnZSddOwoJCnJlcXVpcmVfb25jZSgnbGliL0dvb2dsZU1hcEFQSS0nLiR0aGlzLT5fZ29vZ2xlYXBpX3ZlcnNpb24uJy9Hb29nbGVNYXBBUEkuY2xhc3MucGhwJyk7Ci8vJG1hcCA9IG5ldyBHb29nbGVNYXBBUEkoJG1hcF9kYXRhWydtYXBfaWQnXSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3lhaG9vYXBwaWQnLCAnMTIzNCcpKTsKJG1hcCA9IG5ldyBHb29nbGVNYXBBUEkoJHRoaXMtPkdldE5hbWUoKS4kbWFwX2RhdGFbJ21hcF9pZCddLCAkdGhpcy0+R2V0TmFtZSgpKTsKCi8vIHNldCB2YWx1ZXMgZm9yIGRpc3BsYXlpbmcKJG1hcC0+c2V0TG9va3VwU2VydmljZSggJHRoaXMtPkdldFByZWZlcmVuY2UoJ2xvb2t1cHNlcnZpY2UnLCAnR09PR0xFJykgKTsKCiRtYXAtPnNldFdpZHRoKCRtYXBfZGF0YVsnd2lkdGgnXSk7CiRtYXAtPnNldEhlaWdodCgkbWFwX2RhdGFbJ2hlaWdodCddKTsKCmlmICgkbWFwX2RhdGFbJ2NvbnRyb2xzJ10gPT0gMCkgewogICRtYXAtPmRpc2FibGVNYXBDb250cm9scygpOwp9CmlmICgkbWFwX2RhdGFbJ3R5cGVfY29udHJvbHMnXSA9PSAwKSB7CiAgJG1hcC0+ZGlzYWJsZVR5cGVDb250cm9scygkbWFwX2RhdGFbJ3R5cGVfY29udHJvbHMnXSk7Cn0KCiRtYXAtPnNldFpvb21MZXZlbCgkbWFwX2RhdGFbJ3pvb20nXSk7CiRtYXAtPnNldENvbnRyb2xTaXplKCRtYXBfZGF0YVsnY29udHJvbHNfc2l6ZSddKTsKCiRtYXAtPnNldE1hcFR5cGUoJG1hcF9kYXRhWyd0eXBlJ10pOwoKLy8gbm90IGluIHZzIDMuMCAkbWFwLT5zZXRMYW5ndWFnZSgkbWFwX2RhdGFbJ2xhbmd1YWdlJ10pOwoKaWYgKCRtYXBfZGF0YVsnc2lkZWJhciddID09IDApIHsKICAkbWFwLT5kaXNhYmxlU2lkZWJhcigpOwp9CgppZiAoJG1hcF9kYXRhWydkaXJlY3Rpb25zJ10gPT0gMCkgewogICRtYXAtPmRpc2FibGVEaXJlY3Rpb25zKCk7Cn0KCi8qIG5vdCBpbiB2cyAzLjAKaWYoJG1hcF9kYXRhWyd6b29tc2Nyb2xsd2hlZWwnXSA9PSAwKSB7CiAgJG1hcC0+ZGlzYWJsZVpvb21TY3JvbGxXaGVlbCgpOwp9CmVsc2UKewogICRtYXAtPmVuYWJsZVpvb21TY3JvbGxXaGVlbCgpOwp9CiovCgppZigkbWFwX2RhdGFbJ3pvb21fZW5jb21wYXNzJ10gPT0gMCkgewogICRtYXAtPmRpc2FibGVab29tRW5jb21wYXNzKCk7Cn0KCmlmICgkbWFwX2RhdGFbJ3NjYWxlX2NvbnRyb2wnXSA9PSAwKSB7CiAgJG1hcC0+ZGlzYWJsZVNjYWxlQ29udHJvbCgpOwp9CgokbWFwLT5zZXRCb3VuZHNGdWRnZSgkbWFwX2RhdGFbJ2JvdW5kc19mdWRnZSddKTsKCmlmKCRtYXBfZGF0YVsnaW5mb193aW5kb3cnXSA9PSAwKSB7CiAgJG1hcC0+ZGlzYWJsZUluZm9XaW5kb3coKTsKfQoKJG1hcC0+c2V0SW5mb1dpbmRvd1RyaWdnZXIoJG1hcF9kYXRhWydpbmZvX3RyaWdnZXInXSk7CgovLyBnZXQgbWFya2VycyBmb3IgdGhpcyBtYXAKJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi4gY21zX2RiX3ByZWZpeCgpIC4ibW9kdWxlX2dvb2dsZW1hcHNfbWFya2VycyAKCVdIRVJFIG1hcCA9ICciLiAkbWFwX2RhdGFbJ21hcF9pZCddIC4iJyI7CiRkYnJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCiRlcnJvciA9ICcnOwp3aGlsZSAoJGRicmVzdWx0ICYmICRtYXBfbWFya2VyID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CiAgCiAgJGxhdCA9ICcnOwogICRsb24gPSAnJzsKICAKICBpZigkbWFwX21hcmtlclsnbGF0J10gPT0gJycgJiYgJG1hcF9tYXJrZXJbJ2xhdCddID09ICcnKSB7CiAgICAvL2ZpbmQgYWRkcmVzcwogICAgJGdlb2NvZGUgPSAnJzsKICAgIGlmKCRtYXBfbWFya2VyWydhZGRyZXNzJ10gIT0gJycpIHsKICAgICAgJGdlb2NvZGUgPSAkbWFwLT5nZXRHZW9jb2RlKCRtYXBfbWFya2VyWydhZGRyZXNzJ10pOwogICAgfQogICAgJGxhdCA9ICRnZW9jb2RlWydsYXQnXTsKICAgICRsb24gPSAkZ2VvY29kZVsnbG9uJ107CiAgfSBlbHNlIHsKICAgIC8vIHVzZSBwcm92aWRlZCBsYXQgbG9uCiAgICAkbGF0ID0gJG1hcF9tYXJrZXJbJ2xhdCddOwogICAgJGxvbiA9ICRtYXBfbWFya2VyWydsb24nXTsKICB9CiAgCiAgaWYoJGxhdCAhPSAnJyAmJiAkbG9uICE9ICcnKSB7CgkvLyBBZGQgdGhlIGNvcnJlY3QgaWNvbgoJJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKICAgIC8vIHVzZSByZWxhdGl2ZSBwYXRocyBmb3IgbWFya2VycwogICAgLy8gdGhpcyB3aWxsIGhlbHAgd2l0aCBob3N0cyB0aGF0IGRvbnQgYWxsb3cgZ2V0aW1hZ2VzaXplIHRvIHVzZSBhYnNvbHV0ZSB1cmxzCiAgICAvLyAyMDEwMDEyMyAtIHRzdwoJaWYgKCRtYXBfbWFya2VyWydpY29uJ10gIT0gJycpIHsKIAkJLy8gUHJlcGFyZSB0aGUgdXJsIHRvIHRoZSBtYXJrZXIKICAJCSRpY29udG91c2UgPSBjbXNfam9pbl9wYXRoKCd1cGxvYWRzJywkdGhpcy0+Z2V0TmFtZSgpLCdtYXJrZXJzJywkbWFwX21hcmtlclsnaWNvbiddKTsKICAJCQoJfSBlbHNlIHsKICAJCSRpY29udG91c2UgPSBjbXNfam9pbl9wYXRoKCd1cGxvYWRzJywkdGhpcy0+Z2V0TmFtZSgpLCdtYXJrZXJzJywnZGVmYXVsdC5wbmcnKTsKCX0KCS8vIE5vdyBjaGVjayBpZiBhIHNoYWRvdyBpcyB0byBiZSBpbmNsdWRlZAoJaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCd1c2VtYXJrZXJzaGFkb3dzJywgMCkgPT0gMCkgewoJCSRtYXAtPmFkZEljb24oJGljb250b3VzZSk7CgkJJHNoYWRvd3RvdXNlID0gJyc7Cgl9CgllbHNlIHsKCQkvLyBCdWlsZCB0aGUgbmFtZSBvZiB0aGUgc2hhZG93IGljb24uIFNwbGl0IG5hbWUgaW4gZmlyc3QgcGFydCBhbmQgZXh0ZW5zaW9uCgkJJGZpbGVuYW1lc3BsaXQgPSBhcnJheSgpOwoJCSRmaWxlbmFtZXNwbGl0ID0gc3RydG9rKCRtYXBfbWFya2VyWydpY29uJ10sICcuJyk7CgkJJHNoYWRvd3RvdXNlID0gY21zX2pvaW5fcGF0aCgndXBsb2FkcycsJHRoaXMtPmdldE5hbWUoKSwnbWFya2Vyc2hhZG93cycsJGZpbGVuYW1lc3BsaXQuJ3MucG5nJyk7CiAgCQkvLyBDaGVjayBpZiB0aGUgc2hhZG93IGljb24gZXhpc3RzCiAgCQlpZiAoIWZpbGVfZXhpc3RzKCRzaGFkb3d0b3VzZSkpIHsKCQkJJHNoYWRvd3RvdXNlID0gY21zX2pvaW5fcGF0aCgndXBsb2FkcycsJHRoaXMtPmdldE5hbWUoKSwnbWFya2Vyc2hhZG93cycsJ2RlZmF1bHRzLnBuZycpOwoJCX0KCQkkbWFwLT5hZGRJY29uKCRpY29udG91c2UsICRzaGFkb3d0b3VzZSk7Cgl9CgkkbWFwLT5hZGRNYXJrZXJCeUNvb3JkcygKCQkJc3RyX3JlcGxhY2UoJywnLCAnLicsICRsb24pLCAKCQkJc3RyX3JlcGxhY2UoJywnLCAnLicsICRsYXQpLCAKCQkJJG1hcF9tYXJrZXJbJ25hbWUnXSwgCgkJCSRtYXBfbWFya2VyWydpbmZvJ10sCgkJCScnLCAgIC8vIE5vIHRvb2x0aXAgKHlldCkKCQkJJGljb250b3VzZSwKCQkJJHNoYWRvd3RvdXNlCgkJCSk7CgogIH0gCn0KCi8vIEdldCBwb2x5bGluZXMgZm9yIHRoaXMgbWFwCiRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuIGNtc19kYl9wcmVmaXgoKSAuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcyAKCVdIRVJFIG1hcF9pZCA9ID8nOwokZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG1hcF9kYXRhWydtYXBfaWQnXSkpOwoKd2hpbGUgKCRkYnJlc3VsdCAmJiAkcGwgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCnsKCSRwb2x5bGluZV9hcnJheSA9IGFycmF5KCk7CgkvLyBPbmUgb3IgbW9yZSBwb2x5bGluZXMgYXJlIGF2YWlsYWJsZQoJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHMgCgkJV0hFUkUgcG9seWxpbmVfaWQgPSA/CgkJT1JERVIgQlkgc2VxJzsKCSRkYnJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcGxbJ3BvbHlsaW5lX2lkJ10pKTsKCSRlbnRyeWFycmF5ID0gYXJyYXkoKTsKCXdoaWxlICgkZGJyZXN1bHQyICYmICRwbHBhcnQgPSAkZGJyZXN1bHQyLT5GZXRjaFJvdygpKQoJewoJCSRwb2x5bGluZV9hcnJheVtdID0gYXJyYXkoJ2xhdCc9PiRwbHBhcnRbJ2xhdCddLCAnbG9uZyc9PiRwbHBhcnRbJ2xvbiddKTsKCX0KCSRtYXAtPmFkZFBvbHlsaW5lQnlDb29yZHNBcnJheSgKCQkJJHBvbHlsaW5lX2FycmF5LCAKCQkJZmFsc2UsCgkJCSRwbFsnc3Ryb2tlY29sb3InXSwKCQkJJHBsWydzdHJva2V3ZWlnaHQnXSwKCQkJJHBsWydzdHJva2VvcGFjaXR5J10KCQkpOwp9CgovLyBDZW50ZXIgdGhlIG1hcCBpZiBjZW50ZXIgY29vcmRpbmF0ZXMgYXJlIHNldCEKaWYgKCAkbWFwX2RhdGFbJ2NlbnRlcl9sYXQnXSAmJiAkbWFwX2RhdGFbJ2NlbnRlcl9sb24nXSApIHsKICAkbWFwLT5zZXRDZW50ZXJDb29yZHMoCgkJCXN0cl9yZXBsYWNlKCcsJywgJy4nLCAkbWFwX2RhdGFbJ2NlbnRlcl9sb24nXSksIAoJCQlzdHJfcmVwbGFjZSgnLCcsICcuJywgJG1hcF9kYXRhWydjZW50ZXJfbGF0J10pCgkJCSk7Cn0KCi8vIGFzc2lnbiBTbWFydHkgdmFyaWFibGVzOwokc21hcnR5LT5hc3NpZ24oJ2dvb2dsZV9tYXBfaGVhZGVyJywkbWFwLT5nZXRIZWFkZXJKUygpKTsKJHNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX2pzJywkbWFwLT5nZXRNYXBKUygpKTsKJHNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX3NpZGViYXInLCRtYXAtPmdldFNpZGViYXIoKSk7CiRzbWFydHktPmFzc2lnbignZ29vZ2xlX21hcCcsJG1hcC0+Z2V0TWFwKCkpOwokc21hcnR5LT5hc3NpZ24oJ21hcF9kZXNjcmlwdGlvbicsICRtYXBfZGF0YVsnZGVzY3JpcHRpb24nXSk7CgovLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdtYXAudHBsJyk7CgojU2V0IGJhY2sgbG9jYWxlIGFnYWluCnNldGxvY2FsZShMQ19BTEwsICRjdXJyZW50TG9jYWxlKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRnQ21zID0gY21zbXMoKTsgaWYoICFpc19vYmplY3QoJGdDbXMpICkgZXhpdDsKCiR0aGlzLT5BZG1pblN0eWxlKCdoMyB7Y29sb3I6cmVkfScpOwoKLy8gVGFicwppZiAoRkFMU0UgPT0gZW1wdHkoJHBhcmFtc1snYWN0aXZlX3RhYiddKSkKewogICR0YWIgPSAkcGFyYW1zWydhY3RpdmVfdGFiJ107Cn0gZWxzZSB7CiAgJHRhYiA9ICcnOwp9CmlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR29vZ2xlTWFwcycpKQp7CgogIGlmIChpc3NldCgkcGFyYW1zWydzdWJtaXRfYWRkcmVzc19xdWVyeSddKSkgewogICAgcmVxdWlyZV9vbmNlKCdsaWInLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ0dvb2dsZU1hcEFQSS0nLiR0aGlzLT5fZ29vZ2xlYXBpX3ZlcnNpb24uRElSRUNUT1JZX1NFUEFSQVRPUi4nR29vZ2xlTWFwQVBJLmNsYXNzLnBocCcpOwogICAgJHF1ZXJ5X21hcCA9IG5ldyBHb29nbGVNYXBBUEkoMCwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3lhaG9vYXBwaWQnLCAnMTIzNCcpKTsKICAgICRxdWVyeV9tYXAtPnNldExvb2t1cFNlcnZpY2UoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdsb29rdXBzZXJ2aWNlJywgJ0dPT0dMRScpICk7CiAgICAkZ2VvY29kZSA9ICRxdWVyeV9tYXAtPmdldEdlb2NvZGUoJHBhcmFtc1snYWRkcmVzcyddKTsKCiAgICBpZiggJGdlb2NvZGUgPT09IGZhbHNlICkKICAgIHsKCQllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlX2JhZGFkZHJlc3MnKSk7CiAgICB9CiAgICBlbHNlCiAgICB7CgkJZWNobyAkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoJ2xvY2F0aW9uX2ZvcicpLicgPGI+Jy4gJHBhcmFtc1snYWRkcmVzcyddIC4nPC9iPiAnLiAkdGhpcy0+TGFuZygnaXMnKS4nOjxici8+CgkJPGRsPgoJCQk8ZHQ+Jy4kdGhpcy0+TGFuZygndF9sYW4nKS4nOiZuYnNwOycuJGdlb2NvZGVbJ2xhdCddIC4nPC9kdD4KCQkJPGR0PicuJHRoaXMtPkxhbmcoJ3RfbG9uJykuJzombmJzcDsnLiRnZW9jb2RlWydsb24nXSAuJzwvZGQ+CgkJPC9kbD4nKTsKCX0KICB9CgogIC8vdGFicyAgCiAgZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CgkgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignbWFwcycsJHRoaXMtPkxhbmcoJ21hcHMnKSwgKCdtYXBzJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKCSAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdtYXJrZXJzJywkdGhpcy0+TGFuZygnbWFya2VycycpLCAoJ21hcmtlcnMnID09ICR0YWIpP3RydWU6ZmFsc2UpOwoJICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3BvbHlsaW5lcycsJHRoaXMtPkxhbmcoJ3BvbHlsaW5lcycpLCAoJ3BvbHlsaW5lcycgPT0gJHRhYik/dHJ1ZTpmYWxzZSk7CgkgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignYWRkcmVzcycsJHRoaXMtPkxhbmcoJ3F1ZXJ5X2FkZHJlc3MnKSwgKCdhZGRyZXNzJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKCSAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdzZXR0aW5ncycsJHRoaXMtPkxhbmcoJ3NldHRpbmdzJyksICgnc2V0dGluZ3MnID09ICR0YWIpP3RydWU6ZmFsc2UpOwogIGVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKICAvL2VuZCB0YWJzCgogIC8vVGhlIGNvbnRlbnQgb2YgdGhlIHRhYnMKICBlY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsKICAKICAvLyBtYXBzIHRhYgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdtYXBzJywgJHBhcmFtcyk7CglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uYWRtaW5fbWFwc3RhYi5waHAnKTsKICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKICAvL2VuZCBtYXBzIHRhYgoKICAvLyBTdGFydCBtYXJrZXJzIHRhYgoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ21hcmtlcnMnLCAkcGFyYW1zKTsKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9tYXJrZXJzdGFiLnBocCcpOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgLy8gZW5kIG1hcmtlcnMgdGFiCgogIC8vIFN0YXJ0IHBvbHlsaW5lcyB0YWIKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdwb2x5bGluZXMnLCAkcGFyYW1zKTsKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9wb2x5bGluZXN0YWIucGhwJyk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKICAvLyBlbmQgcG9seWxpbmVzIHRhYgoKICAvLyBTdGFydCBhZGRyZXNzIHRhYgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdhZGRyZXNzJywgJHBhcmFtcyk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwnJywnJyx0cnVlKTsKICBlY2hvICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KCRpZCwgJ0FkZHJlc3MgcXVlcmllcycsICdBZGRyZXNzIHF1ZXJpZXMnICk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0V2l0aExhYmVsKCRpZCwgJ2FkZHJlc3MnLCAnJywgMTAwLCAxMDI0LCAgJycsICR0aGlzLT5MYW5nKCdhZGRyZXNzX2xvb2t1cCcpLic6Jm5ic3A7JyApOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0RW5kKCk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAnbW9kdWxlJywgJ2dvb2dsZW1hcHMnKTsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRfYWRkcmVzc19xdWVyeScsICR0aGlzLT5MYW5nKCdTdWJtaXQnKSk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKICAvL2VuZCBhZGRyZXNzIHRhYgoKICAvL1NldHRpbmdzIHRhYgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdzZXR0aW5ncycsICRwYXJhbXMpOwoKICBlY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnc2F2ZXNldHRpbmdzJywgJHJldHVybmlkKTsKICBlY2hvICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KCRpZCwgJ2dlbmVyYWwnLCAnR2VuZXJhbCBzZXR0aW5ncycgKTsKICBlY2hvICI8cD4iOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUxhYmVsRm9ySW5wdXQoJGlkLCAndXNlY2FjaGUnLCAkdGhpcy0+TGFuZygndXNlY2FjaGUnKSk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICd1c2VjYWNoZScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ1c2VjYWNoZSIsIDApICwgJzEnKTsKICBlY2hvICI8L3A+IjsKICBlY2hvICc8cD4nOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUxhYmVsRm9ySW5wdXQoJGlkLCAndXNlbWFya2Vyc2hhZG93cycsICR0aGlzLT5MYW5nKCd1c2VtYXJrZXJzaGFkb3dzJykpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAndXNlbWFya2Vyc2hhZG93cycsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd1c2VtYXJrZXJzaGFkb3dzJywgMCkgLCAnMScpOwogIGVjaG8gIjwvcD4iOyAKCiAgZWNobyAiPHA+IjsgCiAgZWNobyAkdGhpcy0+Q3JlYXRlTGFiZWxGb3JJbnB1dCgkaWQsICdsb29rdXBzZXJ2aWNlJywgJHRoaXMtPkxhbmcoJ2xvb2t1cHNlcnZpY2UnKSk7CiAgJGxvb2t1cHNlcnZpY2VzID0gYXJyYXkoKTsKICAkbG9va3Vwc2VydmljZXNbIllBSE9PIl0gPSAiWUFIT08iOwogICRsb29rdXBzZXJ2aWNlc1siR09PR0xFIl0gPSAiR09PR0xFIjsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2xvb2t1cHNlcnZpY2UnLCAkbG9va3Vwc2VydmljZXMsIC0xLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgibG9va3Vwc2VydmljZSIpKTsKICBlY2hvICI8L3A+IjsgCgogIGVjaG8gIjxwPiI7IAogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dFdpdGhMYWJlbCgkaWQsICd5YWhvb2FwaWQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgieWFob29hcGlkIiwgJycpICwgMTAwLCAxMDI0LCAnJywgJHRoaXMtPkxhbmcoJ3lhaG9vYXBwaWQnKSApOwogIGVjaG8gIjwvcD4iOyAKICBlY2hvICR0aGlzLT5DcmVhdGVGaWVsZHNldEVuZCgpOwoKICAvLyBQcmVwYXJlIHRoZSBzZXR0aW5ncyBmb3IgZWFzeSBsb2NhdG9yCiAgZWNobyAkdGhpcy0+Q3JlYXRlRmllbGRzZXRTdGFydCgkaWQsICdlYXN5bG9jYXRvcicsICR0aGlzLT5MYW5nKCdlYXN5bG9jYXRvcnNldHRpbmdzJykgKTsKICBlY2hvICc8cD4nOwogICRlYXN5bG9jYXRvcmRyb3Bkb3duID0gYXJyYXkoKTsKICBmb3IgKCRpPSAxOyAkaTw9MjA7JGkrKykgewoJCSRlYXN5bG9jYXRvcmRyb3Bkb3duWyRpXSA9ICRpOwkJCgl9CiAgZWNobyAkdGhpcy0+Q3JlYXRlTGFiZWxGb3JJbnB1dCgkaWQsICdlYXN5bG9jYXRvcmxldmVsJywgJHRoaXMtPkxhbmcoJ2Vhc3lsb2NhdG9ybGV2ZWwnKSk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdlYXN5bG9jYXRvcmxldmVsJywgJGVhc3lsb2NhdG9yZHJvcGRvd24sIDIsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJykpOwogIGVjaG8gJzwvcD4nOwogIGVjaG8gJzxwPic7CgkvLyBQcmVwYXJlIGEgbGlzdCBvZiBtYXAgdHlwZXMKCSR0eXBlbGlzdCA9IGFycmF5KCk7CgkkdHlwZWxpc3QgPSAkdGhpcy0+R2V0TWFwVHlwZXMoKTsKICBlY2hvICR0aGlzLT5DcmVhdGVMYWJlbEZvcklucHV0KCRpZCwgJ2RlZmF1bHRtYXB0eXBlJywgJHRoaXMtPkxhbmcoJ2RlZmF1bHRtYXB0eXBlJykpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnZGVmYXVsdG1hcHR5cGUnLCAkdHlwZWxpc3QsIDAsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0bWFwdHlwZScpKTsKICBlY2hvICc8L3A+JzsKICBlY2hvICc8cD4nOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dFdpdGhMYWJlbCgkaWQsICdlYXN5bG9jYXRvcmxhdCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDM3KSAsIDE1LCAxNSwgJycsICR0aGlzLT5MYW5nKCdlYXN5bG9jYXRvcmxhdCcpICk7CiAgZWNobyAnPC9wPic7CiAgZWNobyAnPHA+JzsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFRleHRXaXRoTGFiZWwoJGlkLCAnZWFzeWxvY2F0b3Jsb24nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3Jsb24nLCAtNzQpICwgMTUsIDE1LCAnJywgJHRoaXMtPkxhbmcoJ2Vhc3lsb2NhdG9ybG9uJykgKTsKICBlY2hvICc8L3A+JzsKICBlY2hvICc8cD4nOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUxhYmVsRm9ySW5wdXQoJGlkLCAnZWFzeWxvY2F0b3JzYXZlbGFzdCcsICR0aGlzLT5MYW5nKCdlYXN5bG9jYXRvcnNhdmVsYXN0JykpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnZWFzeWxvY2F0b3JzYXZlbGFzdCcsICcxJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9yc2F2ZWxhc3QnLCAwKSk7CiAgZWNobyAnPC9wPic7CiAgZWNobyAnPHA+JzsKICAkdGVtcGxhdGUgPSAkdGhpcy0+R2V0VGVtcGxhdGUoICdnb29nbGVtYXBzX2Vhc3lsb2NhdG9yJyk7CiAgaWYgKCR0ZW1wbGF0ZSA9PSAnJykgewoJCSRmbiA9IGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuCgkJICAndGVtcGxhdGVzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidlYXN5bG9jYXRvci50cGwnOwoJCWlmKCBmaWxlX2V4aXN0cyggJGZuICkgKQoJCXsKCQkJJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CgkJfQoJfQogIGVjaG8gJHRoaXMtPkNyZWF0ZUxhYmVsRm9ySW5wdXQoJGlkLCAnZWFzeWxvY2F0b3J0ZW1wbGF0ZScsICR0aGlzLT5MYW5nKCdlYXN5bG9jYXRvcnRlbXBsYXRlJykpOwogIGVjaG8gJzxiciAvPic7CiAgZWNobyAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsICRpZCwgJHRlbXBsYXRlLCAndGVtcGxhdGUnKTsKICBlY2hvICc8L3A+JzsKICBlY2hvICR0aGlzLT5DcmVhdGVGaWVsZHNldEVuZCgpOwogIGVjaG8gJzxwPic7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0V2l0aExhYmVsKCRpZCwgJ3NlcWluY3JlbWVudCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZXFpbmNyZW1lbnQnLCAxMCkgLCA1LCA1LCAnJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3NlcWluY3JlbWVudCcpICk7CiAgZWNobyAnPC9wPic7CiAgZWNobyAnPHA+JzsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFRleHRXaXRoTGFiZWwoJGlkLCAnbG9jYXRpb25wcmVjaXNpb24nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9jYXRpb25wcmVjaXNpb24nLCA3KSAsIDIsIDIsICcnLCAkdGhpcy0+TGFuZygndGl0bGVfbG9jYXRpb25wcmVjaXNpb24nKSApOwogIGVjaG8gJzwvcD4nOwoKCWVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdF9nZW5lcmFsJywgJHRoaXMtPkxhbmcoJ1N1Ym1pdCcpICk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKICAvL0VORCBTZXR0aW5ncyB0YWIKCiAgZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOyAgCn0gIAo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.deleterow.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGRlbGV0aW5nIGEgcm93IGZyb20gdGhlIHZhcmlvdXMgdGFibGVzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3NlcnZpY2VkZXNrCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwoKc3dpdGNoICgkcGFyYW1zWyd0YWJsZSddKQp7CgljYXNlICdNYXBzJzoKCQkvLyBSZW1vdmUgdGhlIHBvbHlsaW5lIHBhcnRzCgkJJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzIAoJCQlXSEVSRSBwb2x5bGluZV9pZCBpbiAoCgkJCQlTRUxFQ1QgcG9seWxpbmVfaWQgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVzIAoJCQkJV0hFUkUgbWFwX2lkPSA/KSc7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBhcmFtc1snbWFwX2lkJ10pICk7CgkJLy8gUmVtb3ZlIHRoZSBwb2x5bGluZQoJCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVzIAoJCQlXSEVSRSBtYXBfaWQgPSA/JzsKCQkkcm93ID0gJGRiLT5HZXRSb3coICRxdWVyeSwgYXJyYXkoJHBhcmFtc1snbWFwX2lkJ10pICk7CgkJLy8gUmVtb3ZlIHRoZSBtYXJrZXJzIGNvbm5lY3RlZCB0byB0aGUgbWFwIChubyByZWZlcmVuY2lhbCBjaGVjayEpCgkJJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzIFdIRVJFIG1hcF9pZCA9ID8nOwoJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwYXJhbXNbJ21hcF9pZCddKSApOwoJCS8vIFJlbW92ZSB0aGUgbWFwIChubyByZWZlcmVuY2lhbCBjaGVjayEpCgkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgV0hFUkUgbWFwX2lkID0gPyc7CgkJJHJvdyA9ICRkYi0+R2V0Um93KCAkcXVlcnksIGFycmF5KCRwYXJhbXNbJ21hcF9pZCddKSApOwoJCWlmICgkcm93KSB7CgkJCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfbWFwcyBXSEVSRSBtYXBfaWQgPSA/JzsKCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBhcmFtc1snbWFwX2lkJ10pICk7CgkJCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnPT4gJ21hcGRlbGV0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ21hcHMnKTsKCQl9CgkJYnJlYWs7CgljYXNlICdNYXJrZXJzJzoKCQkvLyBSZW1vdmUgdGhlIG1hcmtlciAobm8gcmVmZXJlbmNpYWwgY2hlY2shKQoJCSRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzIFdIRVJFIG1hcmtlcl9pZCA9ID8nOwoJCSRyb3cgPSAkZGItPkdldFJvdyggJHF1ZXJ5LCBhcnJheSgkcGFyYW1zWydtYXJrZXJfaWQnXSkgKTsKCQlpZiAoJHJvdykgewoJCQkkcXVlcnkgPSAnREVMRVRFIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMgV0hFUkUgbWFya2VyX2lkID0gPyc7CgkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwYXJhbXNbJ21hcmtlcl9pZCddKSApOwoJCQkkcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICdtYXJrZXJkZWxldGVkJywgJ2FjdGl2ZV90YWInID0+ICdtYXJrZXJzJyk7CgkJfQoJCWJyZWFrOwoJY2FzZSAnUG9seWxpbmVzJzoKCQkvLyBSZW1vdmUgdGhlIHBvbHlsaW5lIHBhcnRzCgkJJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzIFdIRVJFIHBvbHlsaW5lX2lkID0gPyc7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBhcmFtc1sncG9seWxpbmVfaWQnXSkgKTsKCQkvLyBSZW1vdmUgdGhlIHBvbHlsaW5lCgkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcyBXSEVSRSBwb2x5bGluZV9pZCA9ID8nOwoJCSRyb3cgPSAkZGItPkdldFJvdyggJHF1ZXJ5LCBhcnJheSgkcGFyYW1zWydwb2x5bGluZV9pZCddKSApOwoJCWlmICgkcm93KSB7CgkJCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVzIFdIRVJFIHBvbHlsaW5lX2lkID0gPyc7CgkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwYXJhbXNbJ3BvbHlsaW5lX2lkJ10pICk7CgkJCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnPT4gJ3BvbHlsaW5lZGVsZXRlZCcsICdhY3RpdmVfdGFiJyA9PiAncG9seWxpbmVzJyk7CgkJfQoJCWJyZWFrOwoJY2FzZSAnUG9seWxpbmVwYXJ0cyc6CgkJLy8gUmVtb3ZlIHRoZSBwb2x5bGluZSBwYXJ0CgkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHMgV0hFUkUgcG9seWxpbmVwYXJ0X2lkID0gPyc7CgkJJHJvdyA9ICRkYi0+R2V0Um93KCAkcXVlcnksIGFycmF5KCRwYXJhbXNbJ3BvbHlsaW5lcGFydF9pZCddKSApOwoJCSRwYXJhbXNbJ3BvbHlsaW5lX2lkJ10gPSAkcm93Wydwb2x5bGluZV9pZCddOwoJCWlmICgkcm93KSB7CgkJCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVwYXJ0cyBXSEVSRSBwb2x5bGluZXBhcnRfaWQgPSA/JzsKCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBhcmFtc1sncG9seWxpbmVwYXJ0X2lkJ10pICk7CgkJfQoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdlZGl0cG9seWxpbmUnLCAkcmV0dXJuaWQsICRwYXJhbXMpOwoJCWJyZWFrOwoKCWRlZmF1bHQ6CgkJYnJlYWs7Cn0KCi8vIHJlZGlyZWN0IHRoZSB1c2VyIHRvIHRoZSBkZWZhdWx0IGFkbWluIHNjcmVlbgokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.editmap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGNoYW5naW5nIGEgbWFwCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2dvb2dsZW1hcHMKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgokZ0NtcyA9IGNtc21zKCk7IGlmKCAhaXNfb2JqZWN0KCRnQ21zKSApIGV4aXQ7CiRkYiA9IGNtc21zKCktPkdldERiKCk7CgokdXNlcl9pZCA9ICcnOwppZiAoZ2V0X3VzZXJpZCgpICkgewoJJHVzZXJfaWQgPSBnZXRfdXNlcmlkKCk7Cn0KJG93bmVyX2lkID0gJHVzZXJfaWQ7CgppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBHb29nbGVNYXBzJykpCnsKCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcsIGFycmF5KCdVc2UgR29vZ2xlTWFwcycpKSk7CglyZXR1cm47Cn0KCmlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpCnsKCSRwYXJhbXMgPSBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ21hcHMnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwp9CgokbWFwX2lkID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydtYXBfaWQnXSkpIHsKCSRtYXBfaWQgPSAkcGFyYW1zWydtYXBfaWQnXTsKfQoKJGRlc2NyaXB0aW9uID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydkZXNjcmlwdGlvbiddKSkgewoJJGRlc2NyaXB0aW9uID0gJHBhcmFtc1snZGVzY3JpcHRpb24nXTsKfQoKJGNlbnRlcl9sYXQgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2NlbnRlcl9sYXQnXSkpIHsKCSRjZW50ZXJfbGF0ID0gJHBhcmFtc1snY2VudGVyX2xhdCddOwp9CgokY2VudGVyX2xvbiA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snY2VudGVyX2xvbiddKSkgewoJJGNlbnRlcl9sb24gPSAkcGFyYW1zWydjZW50ZXJfbG9uJ107Cn0KCiR0eXBlID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWyd0eXBlJ10pKSB7CgkkdHlwZSA9ICRwYXJhbXNbJ3R5cGUnXTsKfQoKJHdpZHRoID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWyd3aWR0aCddKSkgewoJJHdpZHRoID0gJHBhcmFtc1snd2lkdGgnXTsKfQoKJGhlaWdodCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snaGVpZ2h0J10pKSB7CgkkaGVpZ2h0ID0gJHBhcmFtc1snaGVpZ2h0J107Cn0KCiRjb250cm9scyA9IDA7CmlmIChpc3NldCgkcGFyYW1zWydjb250cm9scyddKSkgewoJJGNvbnRyb2xzID0gJHBhcmFtc1snY29udHJvbHMnXTsKfQoKJGNvbnRyb2xzX3NpemUgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2NvbnRyb2xzX3NpemUnXSkpIHsKCSRjb250cm9sc19zaXplID0gJHBhcmFtc1snY29udHJvbHNfc2l6ZSddOwp9CgokdHlwZV9jb250cm9scyA9IDA7CmlmIChpc3NldCgkcGFyYW1zWyd0eXBlX2NvbnRyb2xzJ10pKSB7CgkkdHlwZV9jb250cm9scyA9ICRwYXJhbXNbJ3R5cGVfY29udHJvbHMnXTsKfQoKJHNpZGViYXIgPSAwOwppZiAoaXNzZXQoJHBhcmFtc1snc2lkZWJhciddKSkgewoJJHNpZGViYXIgPSAkcGFyYW1zWydzaWRlYmFyJ107Cn0KCiRkaXJlY3Rpb25zID0gMDsKaWYgKGlzc2V0KCRwYXJhbXNbJ2RpcmVjdGlvbnMnXSkpIHsKCSRkaXJlY3Rpb25zID0gJHBhcmFtc1snZGlyZWN0aW9ucyddOwp9CgokdXNlZHpvb20gPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3pvb20nXSkpIHsKCSR1c2Vkem9vbSA9ICRwYXJhbXNbJ3pvb20nXTsKfQoKJHpvb21fZW5jb21wYXNzID0gMDsKaWYgKGlzc2V0KCRwYXJhbXNbJ3pvb21fZW5jb21wYXNzJ10pKSB7Cgkkem9vbV9lbmNvbXBhc3MgPSAkcGFyYW1zWyd6b29tX2VuY29tcGFzcyddOwp9Cgokc2NhbGVfY29udHJvbCA9IDA7CmlmIChpc3NldCgkcGFyYW1zWydzY2FsZV9jb250cm9sJ10pKSB7Cgkkc2NhbGVfY29udHJvbCA9ICRwYXJhbXNbJ3NjYWxlX2NvbnRyb2wnXTsKfQoKJGJvdW5kc19mdWRnZSA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snYm91bmRzX2Z1ZGdlJ10pKSB7CgkkYm91bmRzX2Z1ZGdlID0gJHBhcmFtc1snYm91bmRzX2Z1ZGdlJ107Cn0KCiRpbmZvX3dpbmRvdyA9IDA7CmlmIChpc3NldCgkcGFyYW1zWydpbmZvX3dpbmRvdyddKSkgewoJJGluZm9fd2luZG93ID0gJHBhcmFtc1snaW5mb193aW5kb3cnXTsKfQoKJGluZm9fdHJpZ2dlciA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snaW5mb190cmlnZ2VyJ10pKSB7CgkkaW5mb190cmlnZ2VyID0gJHBhcmFtc1snaW5mb190cmlnZ2VyJ107Cn0KCiRuYW1lID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWyduYW1lJ10pKQp7CgkkbmFtZSA9ICRwYXJhbXNbJ25hbWUnXTsKCWlmICgkbmFtZSAhPSAnJykgewoJCSRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgU0VUCgkJCW5hbWUgPSA/LCBkZXNjcmlwdGlvbiA9ID8sIGNlbnRlcl9sYXQgPSA/LCBjZW50ZXJfbG9uID0gPywgb3duZXJfaWQgPSA/LCAKCQkJdHlwZSA9ID8sIHdpZHRoID0gPywgaGVpZ2h0ID0gPywgY29udHJvbHMgPSA/LCBjb250cm9sc19zaXplID0gPywgCgkJCXR5cGVfY29udHJvbHMgPSA/LCBzaWRlYmFyID0gPywgem9vbXNjcm9sbHdoZWVsID0gPywgZGlyZWN0aW9ucyA9ID8sIAoJCQl6b29tID0gPywgem9vbV9lbmNvbXBhc3MgPSA/LCBzY2FsZV9jb250cm9sID0gPywgYm91bmRzX2Z1ZGdlID0gPywgCgkJCWluZm9fd2luZG93ID0gPywgaW5mb190cmlnZ2VyID0gPyAKCQkJV0hFUkUgbWFwX2lkID0gPyc7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG5hbWUsICRkZXNjcmlwdGlvbiwgJGNlbnRlcl9sYXQsICRjZW50ZXJfbG9uLCAKCQkJJG93bmVyX2lkLCAkdHlwZSwgJHdpZHRoLCAkaGVpZ2h0LCAkY29udHJvbHMsICRjb250cm9sc19zaXplLCAKCQkJJHR5cGVfY29udHJvbHMsICRzaWRlYmFyLCAkem9vbXNjcm9sbHdoZWVsLAkkZGlyZWN0aW9ucywgJHVzZWR6b29tLCAKCQkJJHpvb21fZW5jb21wYXNzLCAkc2NhbGVfY29udHJvbCwgJGJvdW5kc19mdWRnZSwgJGluZm9fd2luZG93LAoJCQkkaW5mb190cmlnZ2VyLAoJCQkkbWFwX2lkKSk7CgkJJHRoaXMtPlNhdmVFYXN5TG9jYXRvcigkY2VudGVyX2xhdCwgJGNlbnRlcl9sb24sICR1c2Vkem9vbSk7CgkJCQoJCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnPT4gJ21hcHVwZGF0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ21hcHMnKTsKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKCX0KfQplbHNlIHsKCSRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXBzIFdIRVJFIG1hcF9pZCA9ID8nOwoJJHJvdyA9ICRkYi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJG1hcF9pZCkpOwoJaWYgKCRyb3cpCgl7CgkJJG5hbWUgPSAkcm93WyduYW1lJ107CgkJJGRlc2NyaXB0aW9uID0gJHJvd1snZGVzY3JpcHRpb24nXTsKCQkkY2VudGVyX2xhdCA9ICRyb3dbJ2NlbnRlcl9sYXQnXTsKCQkkY2VudGVyX2xvbiA9ICRyb3dbJ2NlbnRlcl9sb24nXTsKCQkkdHlwZSA9ICRyb3dbJ3R5cGUnXTsKCQlzd2l0Y2ggKCR0eXBlKSB7CgkJCWNhc2UgJ2h5YnJpZCc6CgkJCQkkc21hcnR5LT5hc3NpZ24oJ21hcHR5cGUnLCAnSFlCUklEJyk7CgkJCQlicmVhazsKCQkJY2FzZSAnc2F0ZWxsaXRlJzoKCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdTQVRFTExJVEUnKTsKCQkJCWJyZWFrOwoJCQljYXNlICd0ZXJyYWluJzoKCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdURVJSQUlOJyk7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdST0FETUFQJyk7CgkJCQlicmVhazsKCQl9CgkJJHdpZHRoID0gJHJvd1snd2lkdGgnXTsKCQkkaGVpZ2h0ID0gJHJvd1snaGVpZ2h0J107CgkJJGNvbnRyb2xzID0gJHJvd1snY29udHJvbHMnXTsKCQkkY29udHJvbHNfc2l6ZSA9ICRyb3dbJ2NvbnRyb2xzX3NpemUnXTsKCQkkdHlwZV9jb250cm9scyA9ICRyb3dbJ3R5cGVfY29udHJvbHMnXTsKCQkkc2lkZWJhciA9ICRyb3dbJ3NpZGViYXInXTsKCQkkZGlyZWN0aW9ucyA9ICRyb3dbJ2RpcmVjdGlvbnMnXTsKCQkkdXNlZHpvb20gPSAkcm93Wyd6b29tJ107CgkJJHpvb21zY3JvbGx3aGVlbCA9ICRyb3dbJ3pvb21zY3JvbGx3aGVlbCddOwoJCSR6b29tX2VuY29tcGFzcyA9ICRyb3dbJ3pvb21fZW5jb21wYXNzJ107CgkJJHNjYWxlX2NvbnRyb2wgPSAkcm93WydzY2FsZV9jb250cm9sJ107CgkJJGJvdW5kc19mdWRnZSA9ICRyb3dbJ2JvdW5kc19mdWRnZSddOwoJCSRpbmZvX3dpbmRvdyA9ICRyb3dbJ2luZm9fd2luZG93J107CgkJJGluZm9fdHJpZ2dlciA9ICRyb3dbJ2luZm9fdHJpZ2dlciddOwoJfQp9CgovLyBQcmVwYXJlIGEgbGlzdCBvZiBtYXBzCiRtYXBsaXN0ID0gYXJyYXkoKTsKJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgT1JERVIgQlkgbmFtZSc7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwp3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCnsKCSRtYXBsaXN0WyRyb3dbJ25hbWUnXV0gPSAkcm93WydtYXBfaWQnXTsKfQoKLy8gQ2hlY2sgd2hhdCB1c2VyIHNldHRpbmcgaXMgZm9yIEdsb2JhbCBDb250ZW50IEJsb2NrIHd5c2l3eWcKJGFsbG93X3d5c2l3eWcgPSBnZXRfcHJlZmVyZW5jZSggJHVzZXJfaWQsICdnY2Jfd3lzaXd5ZycgKTsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIG1hcCB0eXBlcwokdHlwZWxpc3QgPSBhcnJheSgpOwokdHlwZWxpc3QgPSAkdGhpcy0+R2V0TWFwVHlwZXMoKTsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIGNvbnRyb2wgc2l6ZXMKJGNvbnRyb2xzX3NpemVsaXN0ID0gYXJyYXkoKTsKJGNvbnRyb2xzX3NpemVsaXN0WyR0aGlzLT5MYW5nKCdjb250cm9sc2l6ZWxhcmdlJyldID0gJ2xhcmdlJzsKJGNvbnRyb2xzX3NpemVsaXN0WyR0aGlzLT5MYW5nKCdjb250cm9sc2l6ZXNtYWxsJyldID0gJ3NtYWxsJzsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIHpvb20gbGV2ZWxzCiR6b29tbGlzdCA9IGFycmF5KCk7CmZvciAoJGkgPSAxOyAkaSA8IDIwOyAkaSsrKSB7Cgkkem9vbWxpc3RbJGkgLSAxXSA9ICRpOwp9CgovLyBQcmVwYXJlIGEgbGlzdCBvZiB3aW5kb3cgdHJpZ2dlcnMKJGluZm9fdHJpZ2dlcmxpc3QgPSBhcnJheSgpOwokaW5mb190cmlnZ2VybGlzdFskdGhpcy0+TGFuZygnaW5mb190cmlnZ2VyY2xpY2snKV0gPSAnY2xpY2snOwokaW5mb190cmlnZ2VybGlzdFskdGhpcy0+TGFuZygnaW5mb190cmlnZ2VybW91c2VvdmVyJyldID0gJ21vdXNlb3Zlcic7CgojRGlzcGxheSB0ZW1wbGF0ZQokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZWRpdG1hcCcsICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9uYW1lJywgJHRoaXMtPkxhbmcoJ3RpdGxlX25hbWUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfbmFtZScsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbmFtZScsICRuYW1lLCA0MCwgODAsICdjbGFzcz0iZGVmYXVsdGZvY3VzIicpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9kZXNjcmlwdGlvbicsICR0aGlzLT5MYW5nKCd0aXRsZV9kZXNjcmlwdGlvbicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9kZXNjcmlwdGlvbicsICR0aGlzLT5DcmVhdGVUZXh0QXJlYSgkYWxsb3dfd3lzaXd5ZywgJGlkLCAkZGVzY3JpcHRpb24sICdkZXNjcmlwdGlvbicsICcnLCAnJywgJycsICcnLCAnODAnLCAnMycpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jZW50ZXJfbGF0JywgJHRoaXMtPkxhbmcoJ3RpdGxlX2NlbnRlcl9sYXQnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfY2VudGVyX2xhdCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnY2VudGVyX2xhdCcsICRjZW50ZXJfbGF0LCA0MCwgMTAwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfY2VudGVyX2xvbicsICR0aGlzLT5MYW5nKCd0aXRsZV9jZW50ZXJfbG9uJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2NlbnRlcl9sb24nLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2NlbnRlcl9sb24nLCAkY2VudGVyX2xvbiwgNDAsIDEwMCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3R5cGUnLCAkdGhpcy0+TGFuZygndGl0bGVfdHlwZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF90eXBlJywgJHRoaXMtPkNyZWF0ZUlucHV0UmFkaW9Hcm91cCAoJGlkLCAndHlwZScsICR0eXBlbGlzdCwgJHR5cGUsICcnLCAnJm5ic3A7JykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3dpZHRoJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3dpZHRoJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3dpZHRoJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd3aWR0aCcsICR3aWR0aCwgNDAsIDUwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfaGVpZ2h0JywgJHRoaXMtPkxhbmcoJ3RpdGxlX2hlaWdodCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9oZWlnaHQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2hlaWdodCcsICRoZWlnaHQsIDQwLCA1MCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2NvbnRyb2xzJywkdGhpcy0+TGFuZygndGl0bGVfY29udHJvbHMnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfY29udHJvbHMnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdjb250cm9scycsIHRydWUsICRjb250cm9scykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2NvbnRyb2xzX3NpemUnLCAkdGhpcy0+TGFuZygndGl0bGVfY29udHJvbHNfc2l6ZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jb250cm9sc19zaXplJywgJHRoaXMtPkNyZWF0ZUlucHV0UmFkaW9Hcm91cCAoJGlkLCAnY29udHJvbHNfc2l6ZScsICRjb250cm9sc19zaXplbGlzdCwgJGNvbnRyb2xzX3NpemUsICcnLCAnJm5ic3A7JykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3R5cGVfY29udHJvbHMnLCR0aGlzLT5MYW5nKCd0aXRsZV90eXBlX2NvbnRyb2xzJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3R5cGVfY29udHJvbHMnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICd0eXBlX2NvbnRyb2xzJywgdHJ1ZSwgJHR5cGVfY29udHJvbHMpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9zaWRlYmFyJywkdGhpcy0+TGFuZygndGl0bGVfc2lkZWJhcicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9zaWRlYmFyJywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnc2lkZWJhcicsIHRydWUsICRzaWRlYmFyKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfZGlyZWN0aW9ucycsJHRoaXMtPkxhbmcoJ3RpdGxlX2RpcmVjdGlvbnMnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfZGlyZWN0aW9ucycsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2RpcmVjdGlvbnMnLCB0cnVlLCAkZGlyZWN0aW9ucykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3pvb20nLCR0aGlzLT5MYW5nKCd0aXRsZV96b29tJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3pvb20nLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICd6b29tJywgJHpvb21saXN0LCAtMSwgJHVzZWR6b29tKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfem9vbV9lbmNvbXBhc3MnLCR0aGlzLT5MYW5nKCd0aXRsZV96b29tX2VuY29tcGFzcycpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF96b29tX2VuY29tcGFzcycsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3pvb21fZW5jb21wYXNzJywgdHJ1ZSwgJHpvb21fZW5jb21wYXNzKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfc2NhbGVfY29udHJvbCcsJHRoaXMtPkxhbmcoJ3RpdGxlX3NjYWxlX2NvbnRyb2wnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfc2NhbGVfY29udHJvbCcsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3NjYWxlX2NvbnRyb2wnLCB0cnVlLCAkc2NhbGVfY29udHJvbCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2JvdW5kc19mdWRnZScsICR0aGlzLT5MYW5nKCd0aXRsZV9ib3VuZHNfZnVkZ2UnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfYm91bmRzX2Z1ZGdlJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdib3VuZHNfZnVkZ2UnLCAkYm91bmRzX2Z1ZGdlLCA0MCwgNTApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pbmZvX3dpbmRvdycsJHRoaXMtPkxhbmcoJ3RpdGxlX2luZm9fd2luZG93JykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2luZm9fd2luZG93JywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnaW5mb193aW5kb3cnLCB0cnVlLCAkaW5mb193aW5kb3cpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pbmZvX3RyaWdnZXInLCAkdGhpcy0+TGFuZygndGl0bGVfaW5mb190cmlnZ2VyJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2luZm9fdHJpZ2dlcicsICR0aGlzLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAgKCRpZCwgJ2luZm9fdHJpZ2dlcicsICRpbmZvX3RyaWdnZXJsaXN0LCAkaW5mb190cmlnZ2VyLCAnJywgJyZuYnNwOycpKTsKCi8vIFBhc3MgdGhlIGlkLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiB0aGUgamF2YSBzY3JpcHQgb2YgdGhlIGVhc3lsb2NhdG9yIAokc21hcnR5LT5hc3NpZ24oJ2lkJywkaWQpOwoKLy8gUHJlcGFyZSB0aGUgc2V0dGluZ3MgZm9yIHRoZSBlYXN5bG9jYXRvcgokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2Vhc3lsb2NhdG9yJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2Vhc3lsb2NhdG9yJykpOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGF0JywgJGNlbnRlcl9sYXQpOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybG9uJywgJGNlbnRlcl9sb24pOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAkdXNlZHpvb20pOwoKJHNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLCAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAnbWFwX2lkJywgJG1hcF9pZCkpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjYW5jZWwnLCBsYW5nKCdjYW5jZWwnKSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2VkaXRtYXAudHBsJyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/action.editmarker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGNoYW5naW5nIGEgbWFya2VyCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2dvb2dsZW1hcHMKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgokZ0NtcyA9IGNtc21zKCk7IGlmKCAhaXNfb2JqZWN0KCRnQ21zKSApIGV4aXQ7CiRkYiA9IGNtc21zKCktPkdldERiKCk7CgokdXNlcl9pZCA9ICcnOwppZiAoZ2V0X3VzZXJpZCgpICkgewoJJHVzZXJfaWQgPSBnZXRfdXNlcmlkKCk7Cn0KCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnKSkKewoJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJywgYXJyYXkoJ1VzZSBHb29nbGVNYXBzJykpKTsKCXJldHVybjsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSkKewoJJHBhcmFtcyA9IGFycmF5KCdhY3RpdmVfdGFiJyA9PiAnbWFya2VycycpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cn0KCiRtYXJrZXJfaWQgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ21hcmtlcl9pZCddKSkgewoJJG1hcmtlcl9pZCA9ICRwYXJhbXNbJ21hcmtlcl9pZCddOwp9CgokdXNlZG1hcCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbWFwJ10pKSB7CgkkdXNlZG1hcCA9ICRwYXJhbXNbJ21hcCddOwp9CgokaW5mbyA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snaW5mbyddKSkgewoJJGluZm8gPSAkcGFyYW1zWydpbmZvJ107Cn0KCiRhZGRyZXNzID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydhZGRyZXNzJ10pKSB7CgkkYWRkcmVzcyA9ICRwYXJhbXNbJ2FkZHJlc3MnXTsKfQoKJGxhdCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbGF0J10pKSB7CgkkbGF0ID0gJHBhcmFtc1snbGF0J107Cn0KCiRsb24gPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2xvbiddKSkgewoJJGxvbiA9ICRwYXJhbXNbJ2xvbiddOwp9CgokaWNvbiA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snaWNvbiddKSkgewoJJGljb24gPSAkcGFyYW1zWydpY29uJ107Cn0KCiRuYW1lID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWyduYW1lJ10pKQp7CgkkbmFtZSA9ICRwYXJhbXNbJ25hbWUnXTsKCWlmICgkbmFtZSAhPSAnJykgewoJCSRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMgU0VUCgkJCW1hcCA9ID8sIG5hbWUgPSA/LCBpbmZvID0gPywgYWRkcmVzcyA9ID8sIGxhdCA9ID8sIGxvbiA9ID8sIGljb24gPSA/CgkJCVdIRVJFIG1hcmtlcl9pZCA9ID8nOwoJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR1c2VkbWFwLCAkbmFtZSwgJGluZm8sICRhZGRyZXNzLCAkbGF0LCAkbG9uLCAkaWNvbiwgJG1hcmtlcl9pZCkpOwoJCSR0aGlzLT5TYXZlRWFzeUxvY2F0b3IoJGxhdCwgJGxvbik7CgkJCgkJJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZSc9PiAnbWFya2VydXBkYXRlZCcsICdhY3RpdmVfdGFiJyA9PiAnbWFya2VycycpOwoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwoJfQp9CmVsc2UgewoJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxhdCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDQ0KSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybG9uJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybG9uJywgLTYzKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsZXZlbCcpLCAxKTsKCSRwYXRoID0gY21zX2pvaW5fcGF0aCgkdGhpcy0+Y29uZmlnWydyb290X3VybCddLCd1cGxvYWRzJywkdGhpcy0+Z2V0TmFtZSgpLCdtYXJrZXJzJyk7CgkkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfbWFya2VycyBXSEVSRSBtYXJrZXJfaWQgPSA/JzsKCSRyb3cgPSAkZGItPkdldFJvdygkcXVlcnksIGFycmF5KCRtYXJrZXJfaWQpKTsKCWlmICgkcm93KQoJewoJCSRuYW1lID0gJHJvd1snbmFtZSddOwoJCSR1c2VkbWFwID0gJHJvd1snbWFwJ107CgkJLy8gUmV0cmlldmUgbWFwIHR5cGUgdXNlZCBvZiBjb25uZWN0ZWQgbWFwCgkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgCgkJCVdIRVJFIG1hcF9pZCA9ID8nOwoJCSRyb3dtYXAgPSAkZGItPkdldFJvdygkcXVlcnksIGFycmF5KCR1c2VkbWFwKSk7CgkJaWYgKCRyb3dtYXApIHsKCQkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxhdCcsICRyb3dtYXBbJ2NlbnRlcl9sYXQnXSk7CgkJCSRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3Jsb24nLCAkcm93bWFwWydjZW50ZXJfbG9uJ10pOwoJCQkkc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAkcm93bWFwWyd6b29tJ10pOwoJCQlzd2l0Y2ggKCRyb3dtYXBbJ3R5cGUnXSkgewoJCQkJY2FzZSAnaHlicmlkJzoKCQkJCQkkc21hcnR5LT5hc3NpZ24oJ21hcHR5cGUnLCAnSFlCUklEJyk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICdzYXRlbGxpdGUnOgoJCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdTQVRFTExJVEUnKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ3RlcnJhaW4nOgoJCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdURVJSQUlOJyk7CgkJCQkJYnJlYWs7CgkJCQlkZWZhdWx0OgoJCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdST0FETUFQJyk7CgkJCQkJYnJlYWs7CgkJCX0KCQl9CgoJCSRpbmZvID0gJHJvd1snaW5mbyddOwoJCSRhZGRyZXNzID0gJHJvd1snYWRkcmVzcyddOwoJCSRsYXQgPSAkcm93WydsYXQnXTsKCQkkbG9uID0gJHJvd1snbG9uJ107CgkJJGljb24gPSAkcm93WydpY29uJ107CgkJJHNtYXJ0eS0+YXNzaWduKCd1c2VkX2xhdCcsICRsYXQpOwoJCSRzbWFydHktPmFzc2lnbigndXNlZF9sb24nLCAkbG9uKTsKCQkkc21hcnR5LT5hc3NpZ24oJ3VzZWRfaWNvbicsICRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGljb24pOwoJfQp9CgovLyBQcmVwYXJlIGEgbGlzdCBvZiBtYXBzCiRtYXBsaXN0ID0gYXJyYXkoKTsKJG1hcGxpc3QgPSBnb29nbGVtYXBzX3V0aWxzOjpnZXRfbGlzdF9tYXBzKCk7CgovLyBDaGVjayB3aGF0IHVzZXIgc2V0dGluZyBpcyBmb3IgR2xvYmFsIENvbnRlbnQgQmxvY2sgd3lzaXd5ZwokYWxsb3dfd3lzaXd5ZyA9IGdldF9wcmVmZXJlbmNlKCAkdXNlcl9pZCwgJ2djYl93eXNpd3lnJyApOwoKLy8gUHJlcGFyZSBhIGxpc3Qgb2YgaWNvbnMKLy8gUmVhZCB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbiB0aGUgaW1hZ2VzIG9mIHRoZSBtYXJrZXJzCiRwYXRoID0gJy4uJy5ESVJFQ1RPUllfU0VQQVJBVE9SLid1cGxvYWRzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLiR0aGlzLT5nZXROYW1lKCkuRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFya2Vycyc7Ci8vIE9wZW4gdGhpcyBkaXJlY3RvcnkgCiRtYXJrZXJkaXJlY3RvcnkgPSBvcGVuZGlyKCRwYXRoKTsKJGljb25saXN0ID0gYXJyYXkoKTsKCi8vIEdldCBlYWNoIGVudHJ5CndoaWxlKCRmaWxlID0gcmVhZGRpcigkbWFya2VyZGlyZWN0b3J5KSkgewoJJHBhdHRlcm49IihqcGd8cG5nfGpwZWd8Z2lmKSI7CglpZiAocHJlZ19tYXRjaCgkcGF0dGVybiwgJGZpbGUpKSB7CgkvL2lmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykgewoJCSRpY29ubGlzdFsnPGltZyBzcmM9IicuJHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZS4nIiBhbHQ9IicuJGZpbGUuJyI+J10gPSAkZmlsZTsKCX0KfQoKLy8gQ2xvc2UgdGhlIGRpcmVjdG9yeQpjbG9zZWRpcigkbWFya2VyZGlyZWN0b3J5KTsKCiNEaXNwbGF5IHRlbXBsYXRlCiRzbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdlZGl0bWFya2VyJywgJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX25hbWUnLCAkdGhpcy0+TGFuZygndGl0bGVfbmFtZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9uYW1lJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICduYW1lJywgJG5hbWUsIDQwLCA4MCwgJ2NsYXNzPSJkZWZhdWx0Zm9jdXMiJykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2JlbG9uZ3N0b21hcCcsICR0aGlzLT5MYW5nKCdiZWxvbmdzdG9tYXAnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfYmVsb25nc3RvbWFwJywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnbWFwJywgJG1hcGxpc3QsIC0xLCAkdXNlZG1hcCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2luZm8nLCAkdGhpcy0+TGFuZygndGl0bGVfaW5mbycpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pbmZvJywgJHRoaXMtPkNyZWF0ZVRleHRBcmVhKCRhbGxvd193eXNpd3lnLCAkaWQsICRpbmZvLCAnaW5mbycsICcnLCAnJywgJycsICcnLCAnODAnLCAnMycpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9hZGRyZXNzJywgJHRoaXMtPkxhbmcoJ2FkZHJlc3MnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfYWRkcmVzcycsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnYWRkcmVzcycsICRhZGRyZXNzLCA0MCwgMjU1KSk7Ci8vIFBhc3MgdGhlIGlkLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiB0aGUgamF2YSBzY3JpcHQgb2YgdGhlIGVhc3lsb2NhdG9yIAokc21hcnR5LT5hc3NpZ24oJ2lkJywkaWQpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2xhdCcsICR0aGlzLT5MYW5nKCdsYXRpdHVkZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9sYXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2xhdCcsICRsYXQsIDQwLCAxMDApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sb24nLCAkdGhpcy0+TGFuZygnbG9uZ2l0dWRlJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2xvbicsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbG9uJywgJGxvbiwgNDAsIDEwMCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2ljb24nLCAkdGhpcy0+TGFuZygnbWFya2VyaWNvbicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pY29uJywgJHRoaXMtPkNyZWF0ZUlucHV0UmFkaW9Hcm91cCAoJGlkLCAnaWNvbicsICRpY29ubGlzdCwgJGljb24sICcnLCAnJm5ic3A7JykpOwokc21hcnR5LT5hc3NpZ24oJ2xvY2F0aW9ucHJlY2lzaW9uJywgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdsb2NhdGlvbnByZWNpc2lvbicsIDcpKTsKCi8vIFByZXBhcmUgdGhlIHNldHRpbmdzIGZvciB0aGUgZWFzeWxvY2F0b3IKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lYXN5bG9jYXRvcicsICR0aGlzLT5MYW5nKCd0aXRsZV9lYXN5bG9jYXRvcicpKTsKCiRzbWFydHktPmFzc2lnbignaGlkZGVuJywgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJ21hcmtlcl9pZCcsICRtYXJrZXJfaWQpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgbGFuZygnc3VibWl0JykpKTsKJHNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnY2FuY2VsJywgbGFuZygnY2FuY2VsJykpKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlZGl0bWFya2VyLnRwbCcpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.editpolyline.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTEgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGNoYW5naW5nIGEgcG9seWxpbmUKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvZ29vZ2xlbWFwcwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiRnQ21zID0gY21zbXMoKTsgaWYoICFpc19vYmplY3QoJGdDbXMpICkgZXhpdDsKJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCiR1c2VyX2lkID0gJyc7CmlmIChnZXRfdXNlcmlkKCkgKSB7CgkkdXNlcl9pZCA9IGdldF91c2VyaWQoKTsKfQoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR29vZ2xlTWFwcycpKQp7CgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnLCBhcnJheSgnVXNlIEdvb2dsZU1hcHMnKSkpOwoJcmV0dXJuOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKQp7CgkkcGFyYW1zID0gYXJyYXkoJ2FjdGl2ZV90YWInID0+ICdwb2x5bGluZXMnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwp9CgokcG9seWxpbmVfaWQgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3BvbHlsaW5lX2lkJ10pKSB7CgkkcG9seWxpbmVfaWQgPSAkcGFyYW1zWydwb2x5bGluZV9pZCddOwp9CiRuYW1lID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWyduYW1lJ10pKQp7CgkkbmFtZSA9ICRwYXJhbXNbJ25hbWUnXTsKfQokdXNlZG1hcCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbWFwJ10pKSB7CgkkdXNlZG1hcCA9ICRwYXJhbXNbJ21hcCddOwp9Cgokc3Ryb2tlY29sb3IgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3N0cm9rZWNvbG9yJ10pKSB7Cgkkc3Ryb2tlY29sb3IgPSAkcGFyYW1zWydzdHJva2Vjb2xvciddOwp9Cgokc3Ryb2tlb3BhY2l0eSA9ICcxLjAnOwppZiAoaXNzZXQoJHBhcmFtc1snc3Ryb2tlb3BhY2l0eSddKSkgewoJJHN0cm9rZW9wYWNpdHkgPSAkcGFyYW1zWydzdHJva2VvcGFjaXR5J107Cn0KJHN0cm9rZXdlaWdodCA9ICcyJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3N0cm9rZXdlaWdodCddKSkgewoJJHN0cm9rZXdlaWdodCA9ICRwYXJhbXNbJ3N0cm9rZXdlaWdodCddOwp9Cgokc2VxID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydzZXEnXSkpIHskc2VxID0gJHBhcmFtc1snc2VxJ107fQokbGF0ID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydsYXQnXSkpIHsKCSRsYXQgPSAkcGFyYW1zWydsYXQnXTsKfQplbHNlIHsKCSRlYXN5bG9jYXRvcmxhdCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDQ0KTsKfQoKJGxvbiA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbG9uJ10pKSB7CgkkbG9uID0gJHBhcmFtc1snbG9uJ107Cn0KZWxzZSB7CgkkZWFzeWxvY2F0b3Jsb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3Jsb24nLCAtNjMpOwp9CgovLyBFcnJvciBjaGVja2luZwokZXJyZm5kID0gZmFsc2U7CiRlcnJvcmZvdW5kID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkpIHsKCWlmICgkbmFtZSA9PSAnJykgewoJCSRlcnJmbmQgPSB0cnVlOwoJCSRlcnJvcmZvdW5kIC49ICR0aGlzLT5MYW5nKCdub25hbWVnaXZlbicpOwoJfQoJaWYgKCRzdHJva2VvcGFjaXR5IDwgMCB8fCAkc3Ryb2tlb3BhY2l0eSA+IDEpIHsKCQkkZXJyZm5kID0gdHJ1ZTsKCQlpZiAoJGVycm9yZm91bmQgIT0gJycpIHskZXJyb3Jmb3VuZCAuPSAnPGJyIC8+Jzt9CgkJJGVycm9yZm91bmQgLj0gJHRoaXMtPkxhbmcoJ2ludmFsaWRvcGFjaXR5Jyk7Cgl9Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSAmJiAkZXJyZm5kID09IGZhbHNlKSB7CgkkcXVlcnkgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMgU0VUCgkJbWFwX2lkID0gPywgbmFtZSA9ID8sIHN0cm9rZWNvbG9yID0gPywgc3Ryb2tlb3BhY2l0eSA9ID8sIHN0cm9rZXdlaWdodCA9ID8KCQlXSEVSRSBwb2x5bGluZV9pZCA9ID8nOwoJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHVzZWRtYXAsICRuYW1lLCBzdHJ0b3VwcGVyKCRzdHJva2Vjb2xvciksICRzdHJva2VvcGFjaXR5LCAKCQkkc3Ryb2tld2VpZ2h0LCAkcG9seWxpbmVfaWQpKTsKCgkkcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICdwb2x5bGluZXVwZGF0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ3BvbHlsaW5lcycpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cn0KZWxzZSB7CglpZiAoJGVycmZuZCkgewoJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJGVycm9yZm91bmQpOwoJfQoJZWxzZSB7CgkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxhdCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDQ0KSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxvbicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxvbicsIC02MykpOwoJCSRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsZXZlbCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJyksIDEpOwoJCSRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMgV0hFUkUgcG9seWxpbmVfaWQgPSA/JzsKCQkkcm93ID0gJGRiLT5HZXRSb3coJHF1ZXJ5LCBhcnJheSgkcG9seWxpbmVfaWQpKTsKCQlpZiAoJHJvdykKCQl7CgkJCSRuYW1lID0gJHJvd1snbmFtZSddOwoJCQkkdXNlZG1hcCA9ICRyb3dbJ21hcF9pZCddOwoJCQkvLyBSZXRyaWV2ZSBtYXAgdHlwZSB1c2VkIG9mIGNvbm5lY3RlZCBtYXAKCQkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgCgkJCQlXSEVSRSBtYXBfaWQgPSA/JzsKCQkJJHJvd21hcCA9ICRkYi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJHVzZWRtYXApKTsKCQkJaWYgKCRyb3dtYXApIHsKCQkJCSRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsYXQnLCAkcm93bWFwWydjZW50ZXJfbGF0J10pOwoJCQkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxvbicsICRyb3dtYXBbJ2NlbnRlcl9sb24nXSk7CgkJCQkkc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAkcm93bWFwWyd6b29tJ10pOwoJCQkJc3dpdGNoICgkcm93bWFwWyd0eXBlJ10pIHsKCQkJCQljYXNlICdoeWJyaWQnOgoJCQkJCQkkc21hcnR5LT5hc3NpZ24oJ21hcHR5cGUnLCAnSFlCUklEJyk7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgJ3NhdGVsbGl0ZSc6CgkJCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdTQVRFTExJVEUnKTsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAndGVycmFpbic6CgkJCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdURVJSQUlOJyk7CgkJCQkJCWJyZWFrOwoJCQkJCWRlZmF1bHQ6CgkJCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdST0FETUFQJyk7CgkJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkKCQkJJHN0cm9rZWNvbG9yID0gJHJvd1snc3Ryb2tlY29sb3InXTsKCQkJJHN0cm9rZW9wYWNpdHkgPSAkcm93WydzdHJva2VvcGFjaXR5J107CgkJCSRzdHJva2V3ZWlnaHQgPSAkcm93WydzdHJva2V3ZWlnaHQnXTsKCQl9Cgl9Cn0KLy8gQWRkIHRoZSBsb2NhdGlvbiB0byB0aGUgcGF0aAppZiAoaXNzZXQoJHBhcmFtc1snYWRkbG9jYXRpb24nXSkgJiYgJGxhdCAhPSAnJyAmJiAkbG9uICE9ICcnICkgewoJaWYgKCRzZXEgIT0gJycgJiYgJHNlcSA+IDAgJiYgJHNlcSA8IDk5OTk5OSkgewoJCS8vIFNlcXVlbmNlIGhhcyBiZWVuIHByb3ZpZGVkIGJ5IHVzZXIKCX0KCWVsc2UgewoJCSRzZXFpbmNyZW1lbnQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2VxaW5jcmVtZW50JywgMTApOwoJCSRxdWVyeSA9ICdTRUxFQ1QgTUFYKHNlcSkgQVMgbWF4c2VxIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHMgCgkJCVdIRVJFIHBvbHlsaW5lX2lkID0gPyc7CgkJJHJvdyA9ICRkYi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJHBvbHlsaW5lX2lkKSk7CgkJaWYgKCRyb3cpCgkJewoJCQkkc2VxID0gJHJvd1snbWF4c2VxJ10gKyAkc2VxaW5jcmVtZW50OwoJCX0KCQllbHNlIHsKCQkJJHNlcSA9ICRzZXFpbmNyZW1lbnQ7CgkJfQoJfQoJJHBvbHlsaW5lcGFydF9pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzX3NlcScpOwoJJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzCgkJKHBvbHlsaW5lcGFydF9pZCwgcG9seWxpbmVfaWQsIHNlcSwgZGVzY3JpcHRpb24sIGxhdCwgbG9uKQoJCVZBTFVFUyAoPyw/LD8sPyw/LD8pJzsKCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwb2x5bGluZXBhcnRfaWQsICRwb2x5bGluZV9pZCwgJHNlcSwgJGRlc2NyaXB0aW9uLCAKCQkkbGF0LCAkbG9uKSk7Cgp9CgovLyBSZWJ1aWxkIHRoZSBsaXN0IG9mIGxvY2F0aW9ucyBhdmFpbGFibGUgZm9yIHRoaXMgcG9seWxpbmUKJHBhdGhvbm1hcCA9ICcnOwokbWFwc3BvdHMgPSAwOwokcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVwYXJ0cyAKCVdIRVJFIHBvbHlsaW5lX2lkID0gPwoJT1JERVIgQlkgc2VxJzsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBvbHlsaW5lX2lkKSk7CiRlbnRyeWFycmF5ID0gYXJyYXkoKTsKd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQp7Cgkkb25lcm93ID0gbmV3IHN0ZENsYXNzKCk7CgoJJG9uZXJvdy0+cG9seWxpbmVfaWQgPSAkcm93Wydwb2x5bGluZV9pZCddOwoJJG9uZXJvdy0+cG9seWxpbmVwYXJ0X2lkID0gJHJvd1sncG9seWxpbmVwYXJ0X2lkJ107Cgkkb25lcm93LT5zZXEgPSAkcm93WydzZXEnXTsKCSRvbmVyb3ctPmRlc2NyaXB0aW9uID0gJHJvd1snZGVzY3JpcHRpb24nXTsKCSRvbmVyb3ctPmxhdCA9ICRyb3dbJ2xhdCddOwoJJG9uZXJvdy0+bG9uID0gJHJvd1snbG9uJ107Cgkkb25lcm93LT5kZWxldGVsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVsZXRlcm93JywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAkdGhpcy0+TGFuZygnZGVsZXRlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3RhYmxlJz0+J1BvbHlsaW5lcGFydHMnLCdwb2x5bGluZXBhcnRfaWQnPT4kcm93Wydwb2x5bGluZXBhcnRfaWQnXSkpOwoKCSRlbnRyeWFycmF5W10gPSAkb25lcm93OwoJLy8gVXBkYXRlIHRoZSBsaXN0IG9mIGxvY2F0aW9ucyBmb3IgdGhlIG1hcAoJaWYgKCRtYXBzcG90cyA9PSAwKSB7CgkJJG1hcHNwb3RzKys7Cgl9CgllbHNlIHsKCQkkcGF0aG9ubWFwIC49ICcsICc7Cgl9CgkkcGF0aG9ubWFwIC49ICduZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKCcuJHJvd1snbGF0J10gLiAnLCAnIC4gJHJvd1snbG9uJ10gLiAnKSc7Cgp9Cgokc21hcnR5LT5hc3NpZ25fYnlfcmVmKCdsb2NhdGlvbnMnLCAkZW50cnlhcnJheSk7CiRzbWFydHktPmFzc2lnbignbG9jYXRpb25jb3VudCcsIGNvdW50KCRlbnRyeWFycmF5KSk7CiRzbWFydHktPmFzc2lnbigncGF0aCcsICRwYXRob25tYXApOwoKJHNtYXJ0eS0+YXNzaWduKCd1c2VkX2xhdCcsIDApOwokc21hcnR5LT5hc3NpZ24oJ3VzZWRfbG9uJywgMCk7CiRzbWFydHktPmFzc2lnbigndXNlZF9pY29uJywgMCk7CgovLyBQcmVwYXJlIGEgbGlzdCBvZiBtYXBzCiRtYXBsaXN0ID0gYXJyYXkoKTsKJG1hcGxpc3QgPSBnb29nbGVtYXBzX3V0aWxzOjpnZXRfbGlzdF9tYXBzKCk7CgojRGlzcGxheSB0ZW1wbGF0ZQokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZWRpdHBvbHlsaW5lJywgJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX25hbWUnLCAkdGhpcy0+TGFuZygndGl0bGVfbmFtZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9uYW1lJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICduYW1lJywgJG5hbWUsIDQwLCA4MCwgJ2NsYXNzPSJkZWZhdWx0Zm9jdXMiJykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2JlbG9uZ3N0b21hcCcsICR0aGlzLT5MYW5nKCdiZWxvbmdzdG9tYXAnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfYmVsb25nc3RvbWFwJywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnbWFwJywgJG1hcGxpc3QsIC0xLCAkdXNlZG1hcCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2NvbG9yJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2NvbG9yJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2NvbG9yJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdzdHJva2Vjb2xvcicsICRzdHJva2Vjb2xvciwgNywgNykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3NhbXBsZWNvbG9yJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdzYW1wbGVjb2xvcicsICcnLCAxLCAxLCAnc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICcuJHN0cm9rZWNvbG9yLiciJykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX29wYWNpdHknLCAkdGhpcy0+TGFuZygndGl0bGVfb3BhY2l0eScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9vcGFjaXR5JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdzdHJva2VvcGFjaXR5JywgJHN0cm9rZW9wYWNpdHksIDMsIDMpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV93ZWlnaHQnLCAkdGhpcy0+TGFuZygndGl0bGVfd2VpZ2h0JykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3dlaWdodCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnc3Ryb2tld2VpZ2h0JywgJHN0cm9rZXdlaWdodCwgMiwgMikpOwovLyBQYXNzIHRoZSBpZCwgc28gaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGphdmEgc2NyaXB0IG9mIHRoZSBlYXN5bG9jYXRvciAKJHNtYXJ0eS0+YXNzaWduKCdpZCcsJGlkKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9zZXEnLCAkdGhpcy0+TGFuZygndGl0bGVfc2VxJykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2RlbCcsICR0aGlzLT5MYW5nKCd0aXRsZV9kZWwnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfc2VxJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdzZXEnLCAnJywgNCwgNikpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2xhdCcsICR0aGlzLT5MYW5nKCdsYXRpdHVkZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9sYXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2xhdCcsICRsYXQsIDE1LCAxMDApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sb24nLCAkdGhpcy0+TGFuZygnbG9uZ2l0dWRlJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2xvbicsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbG9uJywgJGxvbiwgMTUsIDEwMCkpOwokc21hcnR5LT5hc3NpZ24oJ2xvY2F0aW9ucHJlY2lzaW9uJywgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdsb2NhdGlvbnByZWNpc2lvbicsIDcpKTsKCi8vIFByZXBhcmUgdGhlIHNldHRpbmdzIGZvciB0aGUgZWFzeWxvY2F0b3IKJHNtYXJ0eS0+YXNzaWduKCdlZGl0cG9seWxpbmUnLCAnMScpOwokc21hcnR5LT5hc3NpZ24oJ3BhdGhfY29sb3InLCAnIicuJHN0cm9rZWNvbG9yLiciJyk7CiRzbWFydHktPmFzc2lnbigncGF0aF9vcGFjaXR5JywgJHN0cm9rZW9wYWNpdHkpOwokc21hcnR5LT5hc3NpZ24oJ3BhdGhfd2VpZ2h0JywgJHN0cm9rZXdlaWdodCk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfbG9jYXRpb25zJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2xvY2F0aW9ucycpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lYXN5bG9jYXRvcicsICR0aGlzLT5MYW5nKCd0aXRsZV9lYXN5bG9jYXRvcicpKTsKJHNtYXJ0eS0+YXNzaWduKCdhZGRsb2NhdGlvbicsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdhZGRsb2NhdGlvbicsICR0aGlzLT5MYW5nKCdhZGRsb2NhdGlvbicpKSk7Cgokc21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdwb2x5bGluZV9pZCcsICRwb2x5bGluZV9pZCkpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdGxvY2F0aW9ucycsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRsb2NhdGlvbnMnLCBsYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjYW5jZWwnLCBsYW5nKCdjYW5jZWwnKSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2VkaXRwb2x5bGluZS50cGwnKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzLiBBIG1vZHVsZSBmb3IgQ01TIC0gQ01TIE1hZGUgU2ltcGxlCiMgVGhpcyBtb2R1bGUgaGFzIHNwZWNpYWxseSB3cml0dGVuIGZvciB0aGUgZmlyc3QgRHV0Y2ggV29ya3Nob3Agb24gQ01TTVMgaGVsZCBKYW51YXJpIDI0dGggMjAwOQojIENvcHlyaWdodCAoYykgMjAwOSBieSBEdWtldG93biA8ZHVrZXRvd25AbWFudG94Lm5sPgojCiMgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGFkbWluaXN0cmF0b3IgdG8gdXBkYXRlIHRoZSBwcmVmZXJlbmNlcwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9nb29nbGVtYXBzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwoKaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnVXNlIEdvb2dsZU1hcHMnICkgKQp7CiAgcmV0dXJuOwp9CgokdGhpcy0+U2V0UHJlZmVyZW5jZSgndXNlY2FjaGUnLCBpc3NldCgkcGFyYW1zWyd1c2VjYWNoZSddKSA/ICcxJyA6ICcwJyApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbG9va3Vwc2VydmljZScsIGlzc2V0KCRwYXJhbXNbJ2xvb2t1cHNlcnZpY2UnXSkgPyAkcGFyYW1zWydsb29rdXBzZXJ2aWNlJ10gOiAnWUFIT08nKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3lhaG9vYXBpZCcsIGlzc2V0KCRwYXJhbXNbJ3lhaG9vYXBpZCddKSA/ICRwYXJhbXNbJ3lhaG9vYXBpZCddIDogJGlkKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZW1hcmtlcnNoYWRvd3MnLCBpc3NldCgkcGFyYW1zWyd1c2VtYXJrZXJzaGFkb3dzJ10pID8gJzEnIDogJzAnICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJywgaXNzZXQoJHBhcmFtc1snZWFzeWxvY2F0b3JsZXZlbCddKSA/ICRwYXJhbXNbJ2Vhc3lsb2NhdG9ybGV2ZWwnXSA6IDEwICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZhdWx0bWFwdHlwZScsIGlzc2V0KCRwYXJhbXNbJ2RlZmF1bHRtYXB0eXBlJ10pID8gJHBhcmFtc1snZGVmYXVsdG1hcHR5cGUnXSA6ICdtYXAnICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIGlzc2V0KCRwYXJhbXNbJ2Vhc3lsb2NhdG9ybGF0J10pID8gJHBhcmFtc1snZWFzeWxvY2F0b3JsYXQnXSA6IDM3ICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxvbicsIGlzc2V0KCRwYXJhbXNbJ2Vhc3lsb2NhdG9ybG9uJ10pID8gJHBhcmFtc1snZWFzeWxvY2F0b3Jsb24nXSA6IC03NCApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JzYXZlbGFzdCcsIGlzc2V0KCRwYXJhbXNbJ2Vhc3lsb2NhdG9yc2F2ZWxhc3QnXSkgPyAnMScgOiAnMCcgICk7CiR0ZW1wbGF0ZSA9ICRwYXJhbXNbJ3RlbXBsYXRlJ107CmlmICgkdGVtcGxhdGUgIT0gJycpCnsKICAkdGhpcy0+U2V0VGVtcGxhdGUoICdnb29nbGVtYXBzX2Vhc3lsb2NhdG9yJywgJHRlbXBsYXRlLCAkdGhpcy0+R2V0TmFtZSgpKTsKfQokdGhpcy0+U2V0UHJlZmVyZW5jZSgnc2VxaW5jcmVtZW50JywgaXNzZXQoJHBhcmFtc1snc2VxaW5jcmVtZW50J10pID8gJHBhcmFtc1snc2VxaW5jcmVtZW50J10gOiAxMCApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbG9jYXRpb25wcmVjaXNpb24nLCBpc3NldCgkcGFyYW1zWydsb2NhdGlvbnByZWNpc2lvbiddKSA/ICRwYXJhbXNbJ2xvY2F0aW9ucHJlY2lzaW9uJ10gOiA3ICk7CgokcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICdzZXR0aW5nc19zYXZlZCcsICdhY3RpdmVfdGFiJyA9PiAnbWFwcycpOwokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJycsICRwYXJhbXMpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgoJPGxpPlZlcnNpb24gMC4xLjkgMjkgT2N0b2JlciAyMDExIEJ5IER1a2V0b3duPGJyIC8+CgkJPHVsPgoJCQk8bGk+VHVybmVkIG1haW50ZW5hbmNlIG9mIG1hcmtlcnMgaW50byBzdGFuZGFyZCB1cGRhdGUgZm9yIGJldHRlciBtYWludGVuYW5jZTs8L2xpPgoJCQk8bGk+RHVyaW5nIGluc3RhbGxhdGlvbiB0aGUgbWFya2VyIHNoYWRvd3Mgd2VyZSBub3QgY29waWVkOzwvbGk+CgkJCTxsaT5OZXcgdGFiIGZvciBwb2x5bGluZSBtYWludGVuYW5jZSAoRmVhdHVyZSBSZXF1ZXN0IDQxNjApOzwvbGk+CgkJCTxsaT5Ud28gbmV3IG9wdGlvbnMgdG8gc2V0IGluY3JlbWVudCBzdGVwIGFuZCBwcmVjaXNpb24gb2YgbWFya2VyL3BvbHlsaW5lIGxvY2F0aW9uOzwvbGk+CgkJCTxsaT5FYXN5bG9jYXRvciBzaG93cyBtYXAgdHlwZS96b29tIGxldmVsIG9mIGNvbm5lY3RlZCBtYXAgb24gbWFya2VyIG1haW50ZW5hbmNlOzwvbGk+CgkJCTxsaT5OdW1iZXIgb2YgbWFya2Vycy9wb2x5bGluZXMgaW4gYmFja2VuZCBmb2xsb3dzIHRoZSBOdW1iZXIgb2Ygcm93cyBwZXIgcGFnZSB3aGVuIHZpZXdpbmcgR2xvYmFsIENvbnRlbnQgQmxvY2tzIGZyb20gdGhlIHVzZXIgcHJlZmVyZW5jZXM7PC9saT4KCQkJPGxpPkxpc3Qgb2YgbWFwcyBhbmQgbWFya2VycyBhcmUgc29ydGFibGUgaWYgbW9kdWxlIGpRdWVyeVRvb2xzIGlzIGluc3RhbGxlZDs8L2xpPgoJCQk8bGk+VXBncmFkZWQgR29vZ2xlTWFwcyBBUEkgZnJvbSB2ZXJzaW9uIDIuNSB0byAzLjA7PC9saT4KCQkJPGxpPlpvb20gc2Nyb2xsIHdoZWVsIGNhbiBub3QgYmUgbWFpbnRhaW5lZCBhbnltb3JlLCBzaW5jZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGluIHZlcnNpb24gMy4wOzwvbGk+CgkJCTxsaT5Tb2x2ZWQgaXNzdWUgKEdvb2dsZU1hcEFQSS5jbGFzcy5waHApIGluIHRoYXQgYWRkcmVzcyBsb29rdXAgY2FtZSBiYWNrIHdpdGggd2FybmluZywgZHVlIHRvIGZldGNoVVJMIGZ1bmN0aW9uOzwvbGk+CgkJCTxsaT5Tb2x2ZWQgaXNzdWUgKEdvb2dsZU1hcEFQSS5jbGFzcy5waHApIGNhdXNpbmcgbWFwIG5vdCB0byBiZSBzaG93biB3aGVuIHdpbmRvdyBvbmxvYWQgaXMgdXNlZCAKCQkJKHdoaWNoIGlzIGluIG1vc3QgY2FzZXMgdGhlIHNpdHVhdGlvbiB3aXRoaW4gQ01TTVMpOzwvbGk+CgkJCTxsaT5EdXJpbmcgdXBkYXRlIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBBUEkgaXMgcmVtb3ZlZCAobGliL0dvb2dsZU1hcEFQSS0yLjUpLiBZb3UgbWF5IGZpbmQgaXQgaXMgc3RpbGwgdGhlcmUgYWZ0ZXIgdGhpcyB1cGdyYWRlLgoJCQlUaGF0IGlzIHRoZW4gZHVlIHRvIHNlY3VyaXR5IHNldHRpbmdzLiBZb3UgbWF5IGRlbGV0ZSBkaXJlY3RvcnkgR29vZ2xlTWFwQVBJLTIuNSB3aXRob3V0IGFueSBwcm9ibGVtLjwvbGk+CgkJCTxsaT5NYWtlIHN1cmUgdGhhdCBkYXRhYmFzZSBjYWxscyBhcmUgQ01TTVMgdmVyc2lvbiAxLjggdGhydSAxLjEwLjkgcHJvb2YuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS44IDI5IERlY2VtYmVyIDIwMDkgQnkgRHVrZXRvd248YnIgLz4KCQk8dWw+CgkJCTxsaT5QZXIgbWFwL21hcmtlciBFYXN5IExvY2F0b3IgaW50cm9kdWNlZCwgdG8gcXVpY2tseSByZXRyaWV2ZSBjb29yZGluYXRlcyBmb3IgbWFwL21hcmtlcjs8L2xpPgoJCQk8bGk+TmV3IHNldHRpbmdzIHRvIHN1cHBvcnQgRWFzeSBMb2NhdG9yOzwvbGk+CgkJCTxsaT5ObyB0aGluZ3MgbGVmdCBiZWhpbmQgd2hlbiBwZXJmb3JtaW5nIGFuIHVuaXN0YWxsLjwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+VmVyc2lvbiAwLjEuNyA1IERlY2VtYmVyIDIwMDkgQnkgRHVrZXRvd248YnI+CgkJPHVsPgoJCQk8bGk+VXBncmFkZWQgR29vZ2xlTWFwcyBBUEkgZnJvbSB2ZXJzaW9uIDIuMCB0byAyLjUgKEZlYXR1cmUgUmVxdWVzdCA0MjQ5KTs8L2xpPgoJCQk8bGk+UGVyIG1hcCBvcHRpb24gdG8gYWxsb3cgem9vbWluZyB1c2luZyB0aGUgc2Nyb2xsIHdoZWVsOzwvbGk+CgkJCTxsaT5QZXIgbWFwIG9wdGlvbiB0byBzaG93L2hpZGUgdGhlIHNjYWxlLiBBbHNvIGF2YWlsYWJsZSBhcyBwYXJhbWV0ZXI7PC9saT4KCQkJPGxpPk5vIGxvbmdlciBuZWVkIHRvIHJlbG9naW4gYWZ0ZXIgYWRkcmVzcyBsb29rdXAgKEJ1ZyMzMTkzKS4gRm91bmQgbGF0L2xvbiByZW1haW5zIHNob3duIGZvciBlYXN5IGNvcHlpbmc7PC9saT4KCQkJPGxpPkxhbmd1YWdlIGZvciB0aGUgY29udHJvbGVzIGlzIG5vdyBhdmFpbGFibGUgYXMgcGFyYW1ldGVyOzwvbGk+CgkJCTxsaT5DaGVja2VkL3NvbHZlZCB2YWxpZGF0aW9uIFhIVE1MIHVzaW5nIFczQyAoQnVnIzIwMTQpOzwvbGk+CgkJCTxsaT5Ob3cgbXVsdGlwbGUgbWFwcyBvbiBvbmUgcGFnZSBwb3NzaWJsZSAoQnVnIyA0MjQ4KTs8L2xpPgoJCQk8bGk+QmV0dGVyIHVzYWdlIG9mIGRpcmVjdG9yeSBzZXBhcmF0b3IgdG8gYXZvaWQgbm90IGZvdW5kIGZpbGVzIChCdWcjMzM0Nik7PC9saT4KCQkJPGxpPk5ldyBtYXAgdHlwZSAnVGVycmFpbicgaW1wbGVtZW50ZWQuPC9saT4KCQkJPGxpPkR1cmluZyB1cGRhdGUgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIEFQSSBpcyByZW1vdmVkIChsaWIvR29vZ2xlTWFwQVBJLTIuMCkuIFlvdSBtYXkgZmluZCBpdCBpcyBzdGlsbCB0aGVyZSBhZnRlciB0aGlzIHVwZ3JhZGUuCgkJCVRoYXQgaXMgdGhlbiBkdWUgdG8gc2VjdXJpdHkgc2V0dGluZ3MuIFlvdSBtYXkgZGVsZXRlIGRpcmVjdG9yeSBHb29nbGVNYXBBUEktMi4wIHdpdGhvdXQgYW55IHByb2JsZW0uPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS42IDE1IEphbnVhcnkgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPkluY2x1ZGVkIHRoZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGFsc28gdXNlZCBieSBHb29nbGUncyBBUEkuIFBhcmFtZXRlcnMgYXJlIGRpc2N1c3NlZCBpbiBoZWxwIHRleHQuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS41IDEwIEphbnVhcnkgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlVzZXIgZGVmaW5lZCBtYXJrZXJzIG5vdyB3b3JrLiBTZWFyY2ggPGEgaHJlZj0iaHR0cDovL3d3dy5nb29nbGUubmwvc2VhcmNoP3Jscz1lbiZxPWdvb2dsZSttYXBzK2ljb24rbWFrZXIiIHRhcmdldD0iX2JsYW5rIj5Hb29nbGU8L2E+IGZvciBtYXAgaWNvbiBtYWtlcnM8YnIgLz48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLiAyOCBBdWd1c3QgMjAwNi48YnI+CgkJPHVsPgoJCQk8bGk+SW5pdGlhbCBSZWxlYXNlLjwvbGk+CgkJPC91bD4KCTwvbGk+CjwvdWw+CjxoMz5UaGFua3MgZ28gdG88L2gzPgo8cD5Sb2JlcnQgQnJvd24gZm9yIFJDUlVEIENsYXNzIHVzZWQgaW4gYWRtaW4gZXh0ZW5zaXZlbHk8L3A+CjxwPmFuZDwvcD4KPHA+TW9udGUgT2hydCBmb3IgR29vZ2xlTWFwQVBJPC9wPg==]]></data>
	</file>
	<file>
	  <filename>/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2VfYmFkYWRkcmVzcyddID0gJ1RoZSBhZGRyZXNzIHNwZWNpZmllZCB3YXMgaW52YWxpZCBvciBjb3VsZCBub3QgYmUgZm91bmQnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnR29vZ2xlTWFwcyc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1ByZXBhcmUgbXVsdGlwbGUgR29vZ2xlIG1hcHMsIG11bHRpcGxlIGNvb3JkaW5hdGVzIHdpdGggY3VzdG9tIG1hcmtlcnMuIEluY2x1ZGVzIEVhc3lMb2NhdG9yIHRvIHF1aWNrbHkgc2V0IGNvb3JkaW5hdGVzLic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1BsZWFzZSBwcm92aWRlIEdvb2dsZU1hcHMgQVBJIGtleSEgVXNpbmcgR29vZ2xlTWFwcyByZXF1aXJlcyAiVXNlIEdvb2dsZU1hcHMiIHJpZ2h0cyc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnQSBwaXR0eSB0byBub3RpY2UgeW91IHJlbW92ZWQgbW9kdWxlIEdvb2dsZU1hcHMuIEhvcGUgeW91IHdpbGwgdHJ5IGFuZCB1c2UgaXQgbGF0ZXIuPGJyIC8+CjxzdHJvbmc+RGlyZWN0b3J5IHVwbG9hZHMvR29vZ2xlTWFwcyBpcyBub3QgcmVtb3ZlZCE8L3N0cm9uZz4nOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1JlYWxseSB1bmluc3RhbGwsIGFsbCBkYXRhIHdpbGwgYmUgbG9zdCc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdNb2R1bGUgcHJlZmVyZW5jZXMgdXBkYXRlZC4nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNzIERlbmllZC4gUGxlYXNlIGNoZWNrIHlvdXIgcGVybWlzc2lvbnMuJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyb3IhJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWxlIHVwZ3JhZGVkIHRvIHZlcnNpb24gJXMuJzsKJGxhbmdbJ2VkaXQnXSA9ICdFZGl0JzsKJGxhbmdbJ2RlbGV0ZSddID0gJ0RlbGV0ZSc7CiRsYW5nWydhcmV5b3VzdXJlJ10gPSAnQXJlIHlvdSBzdXJlPyc7CgokbGFuZ1snYWRkbWFwJ10gPSAnQWRkIG1hcCc7CiRsYW5nWydhZGRtYXJrZXInXSA9ICdBZGQgbWFya2VyJzsKJGxhbmdbJ2FkZHBvbHlsaW5lJ10gPSAnQWRkIHBvbHlsaW5lJzsKJGxhbmdbJ2FkZHJlc3MnXSA9ICdBZGRyZXNzJzsKJGxhbmdbJ2FkZHJlc3NfbG9va3VwJ10gPSAnU2VhcmNoIGxvY2F0aW9uIGZvciBhZGRyZXNzJzsKJGxhbmdbJ2JlbG9uZ3N0b21hcCddID0gJ0JlbG9uZ3MgdG8gbWFwJzsKJGxhbmdbJ2NvbnRyb2xzaXplbGFyZ2UnXSA9ICdMYXJnZSc7CiRsYW5nWydjb250cm9sc2l6ZXNtYWxsJ10gPSAnU21hbGwnOwokbGFuZ1snZGVmYXVsdG1hcHR5cGUnXSA9ICdEZWZhdWx0IG1hcCB0eXBlJzsKJGxhbmdbJ2Vhc3lsb2NhdG9ybGF0J10gPSAnTGF0aXR1ZGUgb2YgY2VudGVyIG1hcCc7CiRsYW5nWydlYXN5bG9jYXRvcmxldmVsJ10gPSAnRWFzeSBMb2NhdG9yIHpvb20gbGV2ZWwnOwokbGFuZ1snZWFzeWxvY2F0b3Jsb24nXSA9ICdMb25naXR1ZGUgb2YgY2VudGVyIG1hcCc7CiRsYW5nWydlYXN5bG9jYXRvcnNhdmVsYXN0J10gPSAnU2F2ZSBsYXN0IHVzZWQgdmFsdWVzJzsKJGxhbmdbJ2Vhc3lsb2NhdG9yc2V0dGluZ3MnXSA9ICdFYXN5IExvY2F0b3Igc2V0dGluZ3MsIHRvIGJlIHVzZWQgd2hlbiBhZGRpbmcgbWFwL21hcmtlcic7CiRsYW5nWydlYXN5bG9jYXRvcnRlbXBsYXRlJ10gPSAnVGVtcGxhdGUgZm9yIG1hcCB0byBzaG93JzsKJGxhbmdbJ2luZm9fdHJpZ2dlcmNsaWNrJ10gPSAnT24gY2xpY2snOwokbGFuZ1snaW5mb190cmlnZ2VybW91c2VvdmVyJ10gPSAnT24gbW91c2Ugb3Zlcic7CiRsYW5nWydpbnZhbGlkb3BhY3knXSA9ICdJbnZhbGlkIG9wYWN5IChtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSknOwokbGFuZ1snaXMnXSA9ICdpcyc7CiRsYW5nWydsYXRpdHVkZSddID0gJ0xhdGl0dWRlJzsKJGxhbmdbJ2xvY2F0aW9uX2ZvciddID0gJ0xvY2F0aW9uIGZvcic7CiRsYW5nWydsb25naXR1ZGUnXSA9ICdMb25naXR1ZGUnOwokbGFuZ1snbG9va3Vwc2VydmljZSddID0gJ1doaWNoIGxvb2t1cCBzZXJ2aWNlIHRvIHVzZSc7CiRsYW5nWydtYXBfaWQnXSA9ICdNYXAgSUQnOwokbGFuZ1snbWFwYWRkZWQnXSA9ICdNYXAgaGFzIGJlZW4gYWRkZWQnOwokbGFuZ1snbWFwZGVsZXRlZCddID0gJ01hcCAoYW5kIGFsbCBpdHMgbWFya2VycykgaGFzIGJlZW4gZGVsZXRlZCc7CiRsYW5nWydtYXBzJ10gPSAnTWFwcyc7CiRsYW5nWydtYXB0eXBlaHlicmlkJ10gPSAnSHlicmlkJzsKJGxhbmdbJ21hcHR5cGVtYXAnXSA9ICdSb2FkbWFwJzsKJGxhbmdbJ21hcHR5cGVzYXRlbGxpdGUnXSA9ICdTYXRlbGxpdGUnOwokbGFuZ1snbWFwdHlwZXRlcnJhaW4nXSA9ICdUZXJyYWluJzsKJGxhbmdbJ21hcHVwZGF0ZWQnXSA9ICdNYXAgaGFzIGJlZW4gdXBkYXRlZCc7CiRsYW5nWydtYXJrZXInXSA9ICdNYXJrZXInOwokbGFuZ1snbWFya2VyYWRkZWQnXSA9ICdNYXJrZXIgaGFzIGJlZW4gc2F2ZWQnOwokbGFuZ1snbWFya2VyZGVsZXRlZCddID0gJ01hcmtlciBoYXMgYmVlbiBkZWxldGVkJzsKJGxhbmdbJ21hcmtlcmVycm9yJ10gPSAnTm8gbWFya2VycyBmb3VuZCBpbiBkaXJlY3RvcnkgXCd1cGxvYWRzL0dvb2dsZU1hcHMvbWFya2Vyc1wnJzsKJGxhbmdbJ21hcmtlcmljb24nXSA9ICdNYXJrZXIgaWNvbic7CiRsYW5nWydtYXJrZXJzJ10gPSAnTWFya2Vycyc7CiRsYW5nWydtYXJrZXJ1cGRhdGVkJ10gPSAnTWFya2VyIGhhcyBiZWVuIHVwZGF0ZWQnOwokbGFuZ1snbm9rZXknXSA9ICdHb29nbGVNYXBzIEFQSSBrZXkgbWlzc2luZyBpbiBjb25maWd1cmF0aW9uJzsKJGxhbmdbJ25vbWFwJ10gPSAnTm8gbWFwIHByb3ZpZGVkJzsKJGxhbmdbJ25vbmFtZWdpdmVuJ10gPSAnTm8gbmFtZSBnaXZlbiwgd2hpbGUgdGhpcyBpcyBtYW5kYXRvcnknOwokbGFuZ1sncGF0aGVycm9yJ10gPSAnUGF0aCB0byBtYXJrZXIgZGlyZWN0b3J5IFwndXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNcJyBkb2VzblwndCBleGlzdCc7CiRsYW5nWydwb2x5bGluZWFkZGVkJ10gPSAnUG9seWxpbmUgaGFzIGJlZW4gYWRkZWQnOwokbGFuZ1sncG9seWxpbmVkZWxldGVkJ10gPSAnUG9seWxpbmUgaGFzIGJlZW4gZGVsZXRlZCc7CiRsYW5nWydwb2x5bGluZXBhcnRkZWxldGVkJ10gPSAnUG9seWxpbmUgcGFydCBoYXMgYmVlbiBkZWxldGVkJzsKJGxhbmdbJ3BvbHlsaW5lcyddID0gJ1BvbHlsaW5lcyc7CiRsYW5nWydwb2x5bGluZXVwZGF0ZWQnXSA9ICdQb2x5bGluZSBoYXMgYmVlbiB1cGRhdGVkJzsKJGxhbmdbJ3F1ZXJ5X2FkZHJlc3MnXSA9ICdBZGRyZXNzIGxvb2t1cCc7CiRsYW5nWydyZXR1cm50b2xpc3QnXSA9ICdSZXR1cm4gdG8gbGlzdCc7CiRsYW5nWydzZXR0aW5ncyddID0gJ1NldHRpbmdzJzsKJGxhbmdbJ3NldHRpbmdzX3NhdmVkJ10gPSAnU2V0dGluZ3Mgc2F2ZWQnOwokbGFuZ1snU3VibWl0J10gPSAnU3VibWl0JzsKJGxhbmdbJ3RpdGxlX2FkbWluX3BhbmVsJ10gPSAnR29vZ2xlTWFwcyBNb2R1bGUnOwokbGFuZ1sndGl0bGVfYm91bmRzX2Z1ZGdlJ10gPSAnRnVkZ2UgZmFjdG9yIG9uIGVkZ2VzJzsKJGxhbmdbJ3RpdGxlX2NlbnRlcl9sYXQnXSA9ICdEZWZhdWx0IGNlbnRlciBsYXRpdHVkZSc7CiRsYW5nWyd0aXRsZV9jZW50ZXJfbG9uJ10gPSAnRGVmYXVsdCBjZW50ZXIgbG9uZ2l0dWRlJzsKJGxhbmdbJ3RpdGxlX2NvbG9yJ10gPSAnQ29sb3InOwokbGFuZ1sndGl0bGVfY29udHJvbHMnXSA9ICdFbmFibGUgY29udHJvbHMnOwokbGFuZ1sndGl0bGVfY29udHJvbHNfc2l6ZSddID0gJ0NvbnRyb2xzIHNpemUnOwokbGFuZ1sndGl0bGVfZGlyZWN0aW9ucyddID0gJ1Nob3cgZGlyZWN0aW9ucyc7CiRsYW5nWyd0aXRsZV9kZXNjcmlwdGlvbiddID0gJ0Rlc2NyaXB0aW9uJzsKJGxhbmdbJ3RpdGxlX2Vhc3lsb2NhdG9yJ10gPSAnRWFzeSBsb2NhdG9yJzsKJGxhbmdbJ3RpdGxlX2V4YW1wbGUnXSA9ICdFeGFtcGxlJzsKJGxhbmdbJ3RpdGxlX2hlaWdodCddID0gJ0hlaWdodCBvZiBtYXAnOwokbGFuZ1sndGl0bGVfaW5mbyddID0gJ01hcmtlciBpbmZvIChodG1sIGFsbG93ZWQpJzsKJGxhbmdbJ3RpdGxlX2luZm9fdHJpZ2dlciddID0gJ0luZm8gd2luZG93IHRyaWdnZXInOwokbGFuZ1sndGl0bGVfaW5mb193aW5kb3cnXSA9ICdFbmFibGUgbWFya2VyIGluZm8gd2luZG93cyc7CiRsYW5nWyd0aXRsZV9tYXB0eXBlJ10gPSAnTWFwIHR5cGUnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnTW9kdWxlIEFkbWluIFBhbmVsJzsKJGxhbmdbJ3RpdGxlX21vZF9wcmVmcyddID0gJ01vZHVsZSBQcmVmZXJlbmNlcyc7CiRsYW5nWyd0aXRsZV9uYW1lJ10gPSAnTmFtZSc7CiRsYW5nWyd0aXRsZV9vcGFjeSddID0gJ09wYWN5JzsKJGxhbmdbJ3RpdGxlX3NjYWxlX2NvbnRyb2wnXSA9ICdTaG93IHNjYWxlJzsKJGxhbmdbJ3RpdGxlX3NpZGViYXInXSA9ICdTaWRlYmFyIGZvciBtYXJrZXJzJzsKJGxhbmdbJ3RpdGxlX3R5cGUnXSA9ICdUeXBlJzsKJGxhbmdbJ3RpdGxlX3R5cGVfY29udHJvbHMnXSA9ICdEaXNwbGF5IHR5cGUgY29udHJvbHMgZW5hYmxlZCc7CiRsYW5nWyd0aXRsZV93ZWlnaHQnXSA9ICdMaW5lIHdlaWdodCAoaW4gcGl4ZWxzKSc7CiRsYW5nWyd0aXRsZV93aWR0aCddID0gJ1dpZHRoIG9mIG1hcCBvbiBmcm9udCBlbmQnOwokbGFuZ1sndGl0bGVfem9vbSddID0gJ1pvb20gbGV2ZWwnOwokbGFuZ1sndGl0bGVfem9vbV9lbmNvbXBhc3MnXSA9ICdUcnkgdG8gZml0IGFsbCBtYXJrZXJzJzsKJGxhbmdbJ3RpdGxlX3pvb21zY3JvbGx3aGVlbCddID0gJ0FsbG93IHdoZWVsIHNjcm9sbCB6b29taW5nJzsKJGxhbmdbJ3VzZWNhY2hlJ10gPSAnVXNlIGNhY2hpbmcgZm9yIGdlb2NvZGVzIChub3Qgd29ya2luZyB5ZXQpJzsKJGxhbmdbJ3VzZW1hcmtlcnNoYWRvd3MnXSA9ICdVc2UgbWFya2VyIHNoYWRvd3M/JzsKJGxhbmdbJ3lhaG9vYXBwaWQnXSA9ICdBcHBsaWNhdGlvbiBJRCBmb3IgeWFob28nOyAKJGxhbmdbJ3lvdXJtYXBzJ10gPSAnWW91ciBNYXBzJzsKJGxhbmdbJ3lvdXJtYXJrZXJzJ10gPSAnWW91ciBNYXJrZXJzJzsKCiRsYW5nWydoZWxwJ10gPSAnCjxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBpbnRlbnRlZCBmb3IgaW50ZWdyYXRpbmcgR29vZ2xlTWFwcyBhcyBhIHBhcnQgb2YgeW91ciBzaXRlLjwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPkZpcnN0IHlvdSBtdXN0IHVwZGF0ZSB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgbW9kdWxlLCB0byBoYXZlIGRlZmF1bHRzIHNldCBmb3IgbmV3IG1hcHMuPC9wPgo8cD5UaGVuIHlvdSBjYW4gY2FsbCB0aGlzIG1vZHVsZSBpbiB5b3VyIHRlbXBsYXRlIHdpdGgge2Ntc19tb2R1bGUgbW9kdWxlPVwnR29vZ2xlTWFwc1wnIG1hcD1cJ3Rlc3RcJ30gPC9wPgo8cD5Vc2VyIGRlZmluZWQgbWFya2VycyBjYW4gYmUgbG9hZGVkIGludG8gdXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnMuIFRoZSBjb25uZWN0ZWQgc2hhZG93IGltYWdlcyBzaG91bGQgYmUgbG9hZGVkIGluIAoJdXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNoYWRvd3MuPGJyPgoJTmFtaW5nIGNvbnZlbnRpb24gaXMgW21hcmtlcmljb25dcy5wbmcgKGllLiBtYXJrZXIgaXMgYmlnYmx1ZS5wbmcsIG1hcmtlcnNoYWRvdyBpcyBiaWdibHVlcy5wbmcpLjxicj4KCUlmIGEgc2hhZG93IGlzIG5vdCBmb3VuZCwgdGhlIGRlZmF1bHQgdmVyc2lvbiB3aWxsIGJlIHVzZWQgKHdoaWNoIG1heSBub3QgYmUgdGhlIGNvcnJlY3Qgc2hhZG93IG9mIHRoZSBtYXJrZXIgYXQgYWxsKS48YnI+CglJbiB0aGUgc2V0dGluZ3MgdXNlIHRoZSBwcmVmZXJlbmNlIFwnVXNlIG1hcmtlciBzaGFkb3dzXCcgdG8gc2hvdy9oaWRlIHRoZW0uIFNob3dpbmcgdGhlIHNoYWRvd3Mgc2xvd3MgZG93biB0aGUgYnVpbGR1cCBvZiB0aGUKCW1hcCwgZHVlIHRvIG1vcmUgaW50ZXJuYWwgY2hlY2tzLjxicj4KCU9ubHkgaW1hZ2VzIHdpdGggZXh0ZW5zaW9uIC5wbmcgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuPC9wPgo8cD5Qb2x5bGluZXMgYWxsb3dzIHlvdSB0byBkcmF3IGxpbmVzIGZyb20gYSBjZXJ0YWluIGNvb3JkaW5hdGlvbiB0byB0aGUgbmV4dC4gTXVsdGlwbGUgbGluZXMgYXJlIHBvc3NpYmxlIApwZXIgbWFwLiBUaGlzIGFsbG93cyB5b3UgdG8gcHJlcGFyZSB2aXN1YWwgb25lIGxpbmUgdGhhdCBpcyBhIGNvbWJpbmF0aW9uIG9mIG11bHRpcGxlIGNvbG9yZWQgCnNlcGFyYXRlIHBvbHlsaW5lIHNldHVwcy48L3A+CjxwPlRoaXMgbW9kdWxlIGlzIGV2ZW4gbW9yZSBmbGV4aWJsZSB0aHJvdWdoIHRoZSB1c2FnZSBvZiB0aGUgcGFyYW1ldGVycyAoc2VlIHRoZSBwYXJhbWV0ZXIgbGlzdCkuIEVhY2ggcGFyYW1ldGVyIGFzIGF2YWlsYWJsZSBkdXJpbmcgdGhlIHByZXBhcmF0aW9uIG9mIGEgbWFwLCBjYW4gYmUgCglvdmVycmlkZW4gZm9yIHRoZSBmcm9udCBlbmQuIFNvIHlvdSBhcmUgYWJsZSB0byBwcmVwYXJlIG9uZSBtYXAgYW5kIGRpc3BsYXkgaXQgaW4gdmFyaW91cyB3YXlzIGJ5IHVzaW5nIG9uZSBvciBtb3JlIHBhcmFtZXRlcnMuPC9wPgo8cD5JbiB0aGUgc2V0dGluZ3MgdGFiIGl0IGlzIHBvc3NpYmxlIHRvIHByZXBhcmUgYSBudW1iZXIgb2YgZGVmYXVsdCBzZXR0aW5ncyBmb3Igd2hhdCBpcyBjYWxsZWQgdGhlIDxzdHJvbmc+XCdFYXN5IExvY2F0b3JcJzwvc3Ryb25nPi4gV2hlbiBhZGRpbmcgYSBuZXcgbWFwLAphIG1hcCBpcyBzaG93biBiYXNlZCB1cG9uIHRoZXNlIGRlZmF1bHQgc2V0dGluZ3MuPGJyIC8+CldoZW4gZWRpdGluZyBhIG1hcCBvciBhIG1hcmtlciwgdGhlIHNob3duIG1hcCBpcyBhbHdheXMgY2VudGVyZWQgYXQgdGhlIGNvb3JkaW5hdGVzIHNob3duIGp1c3QgYmVsb3cgdGhlIG1hcC48YnIgLz4KV2hlbiB5b3UgZWRpdCBhIG1hcCwgdGhlIG1hcCBzZXR0aW5ncyAoY2VudGVyIGNvb3JkaW5hdGVzIGFuZCB6b29tIGxldmVsKSBhcmUgdXNlZCB0byBwcmVwYXJlIHRoZSBFYXN5IExvY2F0b3IuPGJyIC8+ClR1cm5pbmcgb24gdGhlIHNldHRpbmcgXCdTYXZlIGxhc3QgdXNlZCB2YWx1ZXNcJywgd2lsbCBzYXZlIHRoZSBjb29yZGluYXRlcywgem9vbSBsZXZlbCB3aGVuIHVzZWQgb24gYSBtYXAuIFRoZSBuZXh0IHRpbWUgeW91IGFkZAphIG1hcCwgdGhlIGxhc3Qgc2F2ZWQgY29vcmRpbmF0ZXMgYXJlIHVzZWQgdG8gc2hvdyB0aGUgRWFzeSBMb2NhdG9yLiBOb3RlOiBUaGlzIHNhdmluZyBpcyBvbmx5IGRvbmUgb24gZWRpdGluZyBhIG1hcCBvciBtYXJrZXIKKHpvb20gbGV2ZWwgbm90IHNhdmVkIHdoZW4gZWRpdGluZyBhIG1hcmtlcikuIDxiciAvPgpIb3cgZG8gSSBjaGFuZ2UgdGhlIHNob3duIG1hcHM/IEJ5IGNoYW5naW5nIHRoZSB0ZW1wbGF0ZSBpbiB0aGUgc2V0dGluZ3MgdGFiLiBJZiB5b3UgYXJlIG5vdCBmYW1pbGlhciB3aXRoIGludGVybmFsIHNldHRpbmdzIGZvciBhIG1hcCwgCmxlYXZlIHRoZSB0ZW1wbGF0ZSBhcyBpdCBpcy4gRWFzeSBjaGFuZ2FibGUgYXJlOgo8dWw+CiA8bGk+dGhlIHR5cGUgb2YgY3Vyc29yOiBjaGFuZ2UgdGhlIHZhbHVlIG9mIFwnZHJhZ2dhYmxlQ3Vyc29yXCcgZnJvbSBjcm9zc2hhaXIgaW50bzogYXV0bywgZGVmYXVsdCwgaGVscCwgbW92ZSwgcG9pbnRlciwgdGV4dCwgd2FpdCwKICBoYW5kLCBwcm9ncmVzcyBvciBuby48L2xpPgogPGxpPnRoZSBzaXplIG9mIHRoZSBtYXA6IGF0IHRoZSBib3R0b20geW91IHdpbGwgZmluZCBzdHlsZT0id2lkdGg6IDUwMHB4OyBoZWlnaHQ6IDMwMHB4Ii4gQ2hhbmdlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHlvdSB3YW50LjwvbGk+CjwvdWw+CkFsbCBvdGhlciBzZXR0aW5ncyBjYW4gYmUgb2J0YWluZWQgdmlhOiA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL2ludGwvZW4tVVMvYXBpcy9tYXBzL2RvY3VtZW50YXRpb24vIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9pbnRsL2VuLVVTL2FwaXMvbWFwcy9kb2N1bWVudGF0aW9uLzwvYT4KPC9wPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0Ojxicj4KPHVsPgoJPGxpPlRoZSBDTVMgTWFkZSBTaW1wbGUgZm9ydW07PC9saT4KPC91bD4KPC9wPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQKb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgoKPGgzPlNlY3VyaXR5PC9oMz4KPHA+VXNlciBtdXN0IGhhdmUgIlVzZSBHb29nbGVNYXBzIiBwZXJtaXNzaW9ucyBzZXQgdG8gZWRpdCBtYXBzPC9wPgonOwoKLy8gcGFyYW0gaGVscAokbGFuZ1snaGVscF9wYXJhbV9ib3VuZHNfZnVkZ2UnXSA9ICdUaGlzIHdpbGwgYWRqdXN0IGhvdyBtdWNoIG1hcCBib3VuZGFyeSBlbmNvbXBhc3NlcyB0aGUgbWFwIG1hcmtlcnMuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fY2VudGVybGF0J10gPSAnVGhlIGxhdGl0dWRlIHRvIHdoaWNoIHRoZSBtYXAgc2hvdWxkIGJlIGNlbnRlcmVkLic7CiRsYW5nWydoZWxwX3BhcmFtX2NlbnRlcmxvbiddID0gJ1RoZSBsb25naXR1ZGUgdG8gd2hpY2ggdGhlIG1hcCBzaG91bGQgYmUgY2VudGVyZWQuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fY29udHJvbHMnXSA9ICdJZiBzZXQgdG8gMCAoemVybyksIHRoZXJlIHdpbGwgYmUgbm8gY29udHJvbHMgdG8gem9vbS9tb3ZlIGFyb3VuZCB0aGUgbWFwLic7CiRsYW5nWydoZWxwX3BhcmFtX2NvbnRyb2xzX3NpemUnXSA9ICdUaGlzIHNldHMgdGhlIG1hcCBjb250cm9sIHNpemUuIFJlbGV2YW50IG9ubHkgaWYgbWFwIGNvbnRyb2xzIGFyZQplbmFibGVkLiBsYXJnZSA9IG1hcCB6b29tL21vdmUgd2l0aCBzbGlkZXIuIHNtYWxsID0gem9vbS9tb3ZlIHdpdGhvdXQgc2xpZGVyLiBMYXJnZSBpcyBkZWZhdWx0Lic7CiRsYW5nWydoZWxwX3BhcmFtX2RpcmVjdGlvbnMnXSA9ICdUaGlzIGVuYWJsZXMgbWFwIGRpcmVjdGlvbnMgaW4gdGhlIGJvdHRvbSBvZiB0aGUgcG9wLXVwIGluZm8gd2luZG93LiBEZWZhdWx0IGlzIGRpc2FibGVkLgpcJzFcJyBXaWxsIGVuYWJsZSB0aGUgZGlyZWN0aW9ucy4nOwokbGFuZ1snaGVscF9wYXJhbV9oZWlnaHQnXSA9ICdTZXRzIHRoZSBoZWlnaHQgb2YgdGhlIG1hcCB3aW5kb3cuIFRoaXMgY2FuIGJlIGVpdGhlciBweCBvciAlLic7CiRsYW5nWydoZWxwX3BhcmFtX2luZm9fdHJpZ2dlciddID0gJ1RoaXMgc2V0cyB0aGUgaW5mbyB3aW5kb3cgdHJpZ2dlciBiZWhhdmlvci4gY2xpY2sgPSBpbmZvIHdpbmRvdyBjb21lcyB1cAogICAgICAgIHdoZW4gY2xpY2tpbmcgb24gYSBtYXJrZXIuIG1vdXNlb3ZlciA9IGluZm8gd2luZG93IGNvbWVzIHVwIHdoZW4gbW91c2luZyBvdmVyIGEgbWFya2VyLic7CiRsYW5nWydoZWxwX3BhcmFtX2luZm9fd2luZG93J10gPSAnRW5hYmxlcyBpbmZvIHdpbmRvd3Mgb24gbWFwIG1hcmtlcnMuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fbGFuZ3VhZ2UnXSA9ICdTZWU6IDxhIGhyZWY9Imh0dHA6Ly9zcHJlYWRzaGVldHMuZ29vZ2xlLmNvbS9wdWI/a2V5PXA5cGR3c2FpMmhETXNMa1hzb00wNUtRJmdpZD0xIiB0YXJnZXQ9Il9ibGFuayI+CnRoZSBsaXN0IG9mIGxhbmd1YWdlczwvYT4nOwokbGFuZ1snaGVscF9wYXJhbV9tYXAnXSA9ICdTZXQgd2hpY2ggbWFwIHRvIHNob3cnOwokbGFuZ1snaGVscF9wYXJhbV9zY2FsZSddID0gJ1VzZSBcJzFcJyBvciB0cnVlIHRvIHNob3cgc2NhbGUuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fc2lkZWJhciddID0gJ1VzZSBcJzFcJyB0byBlbmFibGUgdGhlIG1hcCBzaWRlYmFyLic7CiRsYW5nWydoZWxwX3BhcmFtX3R5cGUnXSA9ICdUaGlzIHNldHMgdGhlIGRlZmF1bHQgbWFwIHR5cGUuIFJlbGV2YW50IG9ubHkgaWYgbWFwIHR5cGUgY29udHJvbHMgYXJlIGVuYWJsZWQuIAoJbWFwID0gZGVmYXVsdCBtYXAuIHNhdGVsbGl0ZSA9IHNhdGVsbGl0ZSB2aWV3LiBoeWJyaWQgPSBoeWJyaWQgdmlldy4gdGVycmFpbiA9IHBoeXNpY2FsIHZpZXcgd2l0aCByb2Fkcyc7CiRsYW5nWydoZWxwX3BhcmFtX3R5cGVfY29udHJvbHMnXSA9ICdVc2UgXCcxXCcgZW5hYmxlIHRoZSBtYXAgdHlwZSBjb250cm9scyAobWFwL3NhdGVsbGl0ZS9oeWJyaWQvdGVycmFpbiknOwokbGFuZ1snaGVscF9wYXJhbV93aWR0aCddID0gJ1NldHMgdGhlIHdpZHRoIG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS4nOwokbGFuZ1snaGVscF9wYXJhbV96b29tJ10gPSAnVGhpcyBzZXRzIHRoZSBtYXAgem9vbSBsZXZlbC4nOwokbGFuZ1snaGVscF9wYXJhbV96b29tX2VuY29tcGFzcyddID0gJ1VzZSBcJzFcJyB0byBlbmFibGUgdGhlIHpvb20gZW5jb21wYXNzIHNvIG1hcCB6b29tIGlzIGFzIHNtYWxsIGFzIHBvc3NpYmxlCiAgICAgICAgYW5kIGluY2x1ZGUgYWxsIG1hcCBtYXJrZXJzLic7CgovL3RhYmxlIGZpZWxkcwokbGFuZ1sndF9uYW1lJ10gPSAnTmFtZSc7CiRsYW5nWyd0X2JlbG9uZ3NfdG8nXSA9ICdCZWxvbmdzIHRvIG1hcCc7CiRsYW5nWyd0X2Rlc2NyaXB0aW9uJ10gPSAnRGVzY3JpcHRpb24nOwokbGFuZ1snY2VudGVyX2xhdCddID0gJ0RlZmF1bHQgY2VudGVyIGxhdGl0dWRlJzsKJGxhbmdbJ2NlbnRlcl9sb24nXSA9ICdEZWZhdWx0IGNlbnRlciBsb25naXR1ZGUnOwokbGFuZ1sndF90eXBlJ10gPSAnRGlzcGxheSB0eXBlJzsKJGxhbmdbJ3Rfd2lkdGgnXSA9ICdXaWR0aCc7CiRsYW5nWyd0X2hlaWdodCddID0gJ0hlaWdodCc7CiRsYW5nWyd0X2NvbnRyb2xzJ10gPSAnRW5hYmxlIGNvbnRyb2xzJzsKJGxhbmdbJ3RfY29udHJvbHNfc2l6ZSddID0gJ0NvbnRyb2xzIHNpemUnOwokbGFuZ1sndF9zaWRlYmFyJ10gPSAnU2lkZWJhciBmb3IgbWFya2Vycyc7CiRsYW5nWyd0X3R5cGVfY29udHJvbHMnXSA9ICdEaXNwbGF5IHR5cGUgY29udHJvbHMgZW5hYmxlZCc7CiRsYW5nWyd0X2RpcmVjdGlvbnMnXSA9ICdTaG93IGRpcmVjdGlvbnMnOwokbGFuZ1sndF96b29tJ10gPSAnWm9vbSBsZXZlbCc7CiRsYW5nWyd0X3pvb21fZW5jb21wYXNzJ10gPSAnVHJ5IHRvIGZpdCBhbGwgbWFya2Vycyc7CiRsYW5nWyd0X3pvb21zY3JvbGx3aGVlbCddID0gJ0FsbG93IHdoZWVsIHNjcm9sbCB6b29taW5nJzsKJGxhbmdbJ3Rfc2NhbGVfY29udHJvbCddID0gJ1Nob3cgc2NhbGUnOwokbGFuZ1sndF9ib3VuZHNfZnVkZ2UnXSA9ICdCb3VuZHNfZnVkZ2UnOwokbGFuZ1sndF9pbmZvX3dpbmRvdyddID0gJ0VuYWJsZSBtYXJrZXIgaW5mbyB3aW5kb3dzJzsKJGxhbmdbJ3RfaW5mb190cmlnZ2VyJ10gPSAnSW5mbyB3aW5kb3cgdHJpZ2dlcic7CgokbGFuZ1sndF9pbmZvJ10gPSAnTWFya2VyIGluZm8gKGh0bWwgYWxsb3dlZCknOwokbGFuZ1sndF9sYW4nXSA9ICdMYXRpdHVkZSc7CiRsYW5nWyd0X2xvbiddID0gJ0xvbmdpdHVkZSc7CiRsYW5nWyd0X2ljb24nXSA9ICdNYXJrZXIgaWNvbic7CiRsYW5nWyd0X2FkZHJlc3MnXSA9ICdNYXJrZXIgYWRkcmVzcyc7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_mapstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCQojIFByZXBhcmUgbGlzdCBvZiBtYXBzLi4uCiRlbnRyeWFycmF5ID0gYXJyYXkoKTsKCiR1c2VyX2lkID0gJyc7CmlmIChnZXRfdXNlcmlkKCkgKSB7CgkkdXNlcl9pZCA9IGdldF91c2VyaWQoKTsKfQoKJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgT1JERVIgQlkgbmFtZSc7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKJHJvd2NsYXNzID0gJ3JvdzEnOwoKd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQp7Cgkkb25lcm93ID0gbmV3IHN0ZENsYXNzKCk7CgoJJG9uZXJvdy0+aWQgPSAkcm93WydtYXBfaWQnXTsKCSRvbmVyb3ctPm5hbWUgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0bWFwJywgJHJldHVybmlkLCAkcm93WyduYW1lJ10sIGFycmF5KCdtYXBfaWQnPT4kcm93WydtYXBfaWQnXSkpOwoJJG9uZXJvdy0+Y2VudGVyX2xhdCA9ICRyb3dbJ2NlbnRlcl9sYXQnXTsgCgkkb25lcm93LT5jZW50ZXJfbG9uID0gJHJvd1snY2VudGVyX2xvbiddOwoJJG9uZXJvdy0+dHlwZSA9ICR0aGlzLT5MYW5nKCdtYXB0eXBlJy4kcm93Wyd0eXBlJ10pOwoKCSRvbmVyb3ctPmVkaXRsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdG1hcCcsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsICR0aGlzLT5MYW5nKCdlZGl0JyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ21hcF9pZCc9PiRyb3dbJ21hcF9pZCddKSk7Cgkkb25lcm93LT5kZWxldGVsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVsZXRlcm93JywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAkdGhpcy0+TGFuZygnZGVsZXRlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3RhYmxlJz0+J01hcHMnLCdtYXBfaWQnPT4kcm93WydtYXBfaWQnXSksICR0aGlzLT5MYW5nKCdhcmV5b3VzdXJlJykpOwoKCSRvbmVyb3ctPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoKCSRlbnRyeWFycmF5W10gPSAkb25lcm93OwoKCSgkcm93Y2xhc3M9PSJyb3cxIj8kcm93Y2xhc3M9InJvdzIiOiRyb3djbGFzcz0icm93MSIpOwp9CgokdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdpdGVtcycsICRlbnRyeWFycmF5KTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkZW50cnlhcnJheSkpOwovLyBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIEdsb2JhbCBDb250ZW50IEJsb2NrcyBmcm9tIHVzZXIgcHJlZmVyZW5jZXMgKHNvcnJ5IHRoaXMgaXMgYSBiaXQgdHJpY2t5KQokbGlzdGdjYnNfcGFnZWxpbWl0ID0gZ2V0X3ByZWZlcmVuY2UoICR1c2VyX2lkLCAnbGlzdGdjYnNfcGFnZWxpbWl0JyApOwppZiAoJGxpc3RnY2JzX3BhZ2VsaW1pdCA9PSAwIHx8ICRsaXN0Z2Nic19wYWdlbGltaXQgPT0gTlVMTCkgJGxpc3RnY2JzX3BhZ2VsaW1pdCA9IDIwOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhZ2VsaW1pdCcsICRsaXN0Z2Nic19wYWdlbGltaXQpOwojU2V0dXAgbGlua3MKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkbWFwJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWRkbWFwJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICdjbGFzcz0icGFnZW9wdGlvbnMiJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRtYXAnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3Zm9sZGVyLmdpZicsICR0aGlzLT5MYW5nKCdhZGRtYXAnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgpLCAnJywgZmFsc2UsIGZhbHNlLCAnJykgLicgJy4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkbWFwJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWRkbWFwJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICdjbGFzcz0icGFnZW9wdGlvbnMiJykpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9uYW1lJywgJHRoaXMtPkxhbmcoJ3RpdGxlX25hbWUnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfY2VudGVybGF0aXR1ZGUnLCAkdGhpcy0+TGFuZygndGl0bGVfY2VudGVyX2xhdCcpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jZW50ZXJsb25naXR1ZGUnLCAkdGhpcy0+TGFuZygndGl0bGVfY2VudGVyX2xvbicpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9tYXB0eXBlJywgJHRoaXMtPkxhbmcoJ3RpdGxlX21hcHR5cGUnKSk7CgojRGlzcGxheSB0ZW1wbGF0ZQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2xpc3RtYXBzLnRwbCcpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/function.admin_markerstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCQojIFByZXBhcmUgbGlzdCBvZiBtYXJrZXJzLi4uCiRlbnRyeWFycmF5ID0gYXJyYXkoKTsKCiR1c2VyX2lkID0gJyc7CmlmIChnZXRfdXNlcmlkKCkgKSB7CgkkdXNlcl9pZCA9IGdldF91c2VyaWQoKTsKfQokY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwovLyBSZWFkIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWluIHRoZSBpbWFnZXMgb2YgdGhlIG1hcmtlcnMKJHBhdGggPSAnLi4nLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3VwbG9hZHMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHRoaXMtPmdldE5hbWUoKS5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzJzsKCiRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzIE9SREVSIEJZIG5hbWUnOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCiRyb3djbGFzcyA9ICdyb3cxJzsKCndoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKewoJJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOwoKCSRvbmVyb3ctPmlkID0gJHJvd1snbWFya2VyX2lkJ107CgkkbWFwaW5mbyA9IGFycmF5KCk7CgkkbWFwaW5mbyA9ICR0aGlzLT5HZXRNYXBJbmZvcm1hdGlvbigkcm93WydtYXAnXSk7Cgkkb25lcm93LT5tYXAgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0bWFwJywgJHJldHVybmlkLCAkbWFwaW5mb1snbmFtZSddLCBhcnJheSgnbWFwX2lkJz0+JHJvd1snbWFwJ10pKTsKCS8vJG9uZXJvdy0+bWFwID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdG1hcCcsICRyZXR1cm5pZCwgJG1hcGluZm9bJ25hbWUnXSwgYXJyYXkoJ21hcF9pZCc9PiRyb3dbJ21hcF9pZCddKSk7Cgkkb25lcm93LT5hZGRyZXNzID0gJHJvd1snYWRkcmVzcyddOwoJJG9uZXJvdy0+bGF0ID0gJHJvd1snbGF0J107IAoJJG9uZXJvdy0+bG9uID0gJHJvd1snbG9uJ107CglpZiAoJHJvd1snaWNvbiddICE9ICcnKSB7CgkJJG9uZXJvdy0+aWNvbiA9ICc8aW1nIHNyYz0iJy4kcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRyb3dbJ2ljb24nXS4nIiBhbHQ9IicuJHJvd1snaWNvbiddLiciIGhlaWdodD0iMTgiPiAoJy4kcm93WydpY29uJ10uJyknOwoJfQoJJG9uZXJvdy0+bmFtZSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRtYXJrZXInLCAkcmV0dXJuaWQsICRyb3dbJ25hbWUnXSwgYXJyYXkoJ21hcmtlcl9pZCc9PiRyb3dbJ21hcmtlcl9pZCddKSk7CgoJJG9uZXJvdy0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0bWFya2VyJywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgnbWFya2VyX2lkJz0+JHJvd1snbWFya2VyX2lkJ10pKTsKCSRvbmVyb3ctPmRlbGV0ZWxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGVyb3cnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndGFibGUnPT4nTWFya2VycycsJ21hcmtlcl9pZCc9PiRyb3dbJ21hcmtlcl9pZCddKSwgJHRoaXMtPkxhbmcoJ2FyZXlvdXN1cmUnKSk7CgoJJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgoJJGVudHJ5YXJyYXlbXSA9ICRvbmVyb3c7CgoJKCRyb3djbGFzcz09InJvdzEiPyRyb3djbGFzcz0icm93MiI6JHJvd2NsYXNzPSJyb3cxIik7Cn0KCiR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2l0ZW1zJywgJGVudHJ5YXJyYXkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRlbnRyeWFycmF5KSk7Ci8vIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgR2xvYmFsIENvbnRlbnQgQmxvY2tzIGZyb20gdXNlciBwcmVmZXJlbmNlcyAoc29ycnkgdGhpcyBpcyBhIGJpdCB0cmlja3kpCiRsaXN0Z2Nic19wYWdlbGltaXQgPSBnZXRfcHJlZmVyZW5jZSggJHVzZXJfaWQsICdsaXN0Z2Nic19wYWdlbGltaXQnICk7CmlmICgkbGlzdGdjYnNfcGFnZWxpbWl0ID09IDAgfHwgJGxpc3RnY2JzX3BhZ2VsaW1pdCA9PSBOVUxMKSAkbGlzdGdjYnNfcGFnZWxpbWl0ID0gMjA7CiR0aGlzLT5zbWFydHktPmFzc2lnbigncGFnZWxpbWl0JywgJGxpc3RnY2JzX3BhZ2VsaW1pdCk7CiNTZXR1cCBsaW5rcwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRtYXJrZXInLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhZGRtYXJrZXInKSwgYXJyYXkoKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignYWRkbGluaycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZG1hcmtlcicsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdmb2xkZXIuZ2lmJywgJHRoaXMtPkxhbmcoJ2FkZG1hcmtlcicpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICcnKSAuJyAnLiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRtYXJrZXInLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhZGRtYXJrZXInKSwgYXJyYXkoKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX25hbWUnLCAkdGhpcy0+TGFuZygndGl0bGVfbmFtZScpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9iZWxvbmdzdG9tYXAnLCAkdGhpcy0+TGFuZygnYmVsb25nc3RvbWFwJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2FkZHJlc3MnLCAkdGhpcy0+TGFuZygnYWRkcmVzcycpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sYXRpdHVkZScsICR0aGlzLT5MYW5nKCdsYXRpdHVkZScpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sb25naXR1ZGUnLCAkdGhpcy0+TGFuZygnbG9uZ2l0dWRlJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2ljb24nLCAkdGhpcy0+TGFuZygnbWFya2VyaWNvbicpKTsKCiNEaXNwbGF5IHRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnbGlzdG1hcmtlcnMudHBsJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_polylinestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMgT1JERVIgQlkgbmFtZSc7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKJGVudHJ5YXJyYXkgPSBhcnJheSgpOwokcm93Y2xhc3MgPSAncm93MSc7Cgp3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCnsKCSRvbmVyb3cgPSBuZXcgc3RkQ2xhc3MoKTsKCgkkb25lcm93LT5pZCA9ICRyb3dbJ3BvbHlsaW5lX2lkJ107Cgkkb25lcm93LT5uYW1lID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdHBvbHlsaW5lJywgJHJldHVybmlkLCAkcm93WyduYW1lJ10sIGFycmF5KCdwb2x5bGluZV9pZCc9PiRyb3dbJ3BvbHlsaW5lX2lkJ10pKTsKCSRtYXBpbmZvID0gYXJyYXkoKTsKCSRtYXBpbmZvID0gJHRoaXMtPkdldE1hcEluZm9ybWF0aW9uKCRyb3dbJ21hcF9pZCddKTsKCSRvbmVyb3ctPm1hcCA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRtYXAnLCAkcmV0dXJuaWQsICRtYXBpbmZvWyduYW1lJ10sIGFycmF5KCdtYXBfaWQnPT4kcm93WydtYXAnXSkpOwoJaWYgKHN0cnN0cigkcm93WydzdHJva2Vjb2xvciddLCAnIycpICkgewoJCSRvbmVyb3ctPnN0cm9rZWNvbG9yID0gJHJvd1snc3Ryb2tlY29sb3InXTsKCX0KCWVsc2UgewoJCSRvbmVyb3ctPnN0cm9rZWNvbG9yID0gJyMnLiRyb3dbJ3N0cm9rZWNvbG9yJ107Cgl9Cgkkb25lcm93LT5zdHJva2VvcGFjaXR5ID0gJHJvd1snc3Ryb2tlb3BhY2l0eSddOyAKCSRvbmVyb3ctPnN0cm9rZXdlaWdodCA9ICRyb3dbJ3N0cm9rZXdlaWdodCddOwoJJG9uZXJvdy0+ZXhhbXBsZSA9ICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOyB3aWR0aDogMTEwcHg7IGhlaWdodCI+Jm5ic3A7CgkJPGRpdiBzdHlsZT0id2lkdGg6IDEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAnLiRyb3dbJ3N0cm9rZWNvbG9yJ10uJzsKCQloZWlnaHQ6Jy4kcm93WydzdHJva2V3ZWlnaHQnXS4ncHg7IHZlcnRpY2FsLWFsaWduOiAtNXB4OyAKCQlwYWRkaW5nOiAwIDAgMCAzcHgiPiZuYnNwOwoJCTwvZGl2PgoJCTwvZGl2Pic7CgoJJG9uZXJvdy0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0cG9seWxpbmUnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCAkdGhpcy0+TGFuZygnZWRpdCcpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCdwb2x5bGluZV9pZCc9PiRyb3dbJ3BvbHlsaW5lX2lkJ10pKTsKCSRvbmVyb3ctPmRlbGV0ZWxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGVyb3cnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndGFibGUnPT4nUG9seWxpbmVzJywncG9seWxpbmVfaWQnPT4kcm93Wydwb2x5bGluZV9pZCddKSwgJHRoaXMtPkxhbmcoJ2FyZXlvdXN1cmUnKSk7CgoJJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgoJJGVudHJ5YXJyYXlbXSA9ICRvbmVyb3c7CgoJKCRyb3djbGFzcz09InJvdzEiPyRyb3djbGFzcz0icm93MiI6JHJvd2NsYXNzPSJyb3cxIik7Cn0KCiRzbWFydHktPmFzc2lnbl9ieV9yZWYoJ2l0ZW1zJywgJGVudHJ5YXJyYXkpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRlbnRyeWFycmF5KSk7Ci8vIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgR2xvYmFsIENvbnRlbnQgQmxvY2tzIGZyb20gdXNlciBwcmVmZXJlbmNlcyAoc29ycnkgdGhpcyBpcyBhIGJpdCB0cmlja3kpCiRsaXN0Z2Nic19wYWdlbGltaXQgPSBnZXRfcHJlZmVyZW5jZSggJHVzZXJfaWQsICdsaXN0Z2Nic19wYWdlbGltaXQnICk7CmlmICgkbGlzdGdjYnNfcGFnZWxpbWl0ID09IDAgfHwgJGxpc3RnY2JzX3BhZ2VsaW1pdCA9PSBOVUxMKSAkbGlzdGdjYnNfcGFnZWxpbWl0ID0gMjA7CiRzbWFydHktPmFzc2lnbigncGFnZWxpbWl0JywgJGxpc3RnY2JzX3BhZ2VsaW1pdCk7CiNTZXR1cCBsaW5rcwokc21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRwb2x5bGluZScsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FkZHBvbHlsaW5lJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICdjbGFzcz0icGFnZW9wdGlvbnMiJykpOwokc21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRwb2x5bGluZScsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdmb2xkZXIuZ2lmJywgJHRoaXMtPkxhbmcoJ2FkZHBvbHlsaW5lJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoKSwgJycsIGZhbHNlLCBmYWxzZSwgJycpIC4nICcuICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZHBvbHlsaW5lJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWRkcG9seWxpbmUnKSwgYXJyYXkoKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7Cgokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX25hbWUnLCAkdGhpcy0+TGFuZygndGl0bGVfbmFtZScpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9iZWxvbmdzdG9tYXAnLCAkdGhpcy0+TGFuZygnYmVsb25nc3RvbWFwJykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2V4YW1wbGUnLCAkdGhpcy0+TGFuZygndGl0bGVfZXhhbXBsZScpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jb2xvcicsICR0aGlzLT5MYW5nKCd0aXRsZV9jb2xvcicpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9vcGFjaXR5JywgJHRoaXMtPkxhbmcoJ3RpdGxlX29wYWNpdHknKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfd2VpZ2h0JywgJHRoaXMtPkxhbmcoJ3RpdGxlX3dlaWdodCcpKTsKCiNEaXNwbGF5IHRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnbGlzdHBvbHlsaW5lcy50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/GoogleMaps.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEdvb2dsZU1hcHMgLSBNb2R1bGUgZm9yIEdvb2dsZU1hcHMKIyBWZXJzaW9uOiAwLjEsIHRzdwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKY2xhc3MgR29vZ2xlTWFwcyBleHRlbmRzIENNU01vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIAp7Cgl2YXIgJF9nb29nbGVhcGlfdmVyc2lvbiA9ICczLjAnOwoKCWZ1bmN0aW9uIEdldE5hbWUoKQoJewoJCXJldHVybiAnR29vZ2xlTWFwcyc7Cgl9CglmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7Cgl9CglmdW5jdGlvbiBHZXRWZXJzaW9uKCkKCXsKCQlyZXR1cm4gJzAuMS45JzsKCX0KCWZ1bmN0aW9uIEdldEhlbHAoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOwoJfQoJZnVuY3Rpb24gR2V0QXV0aG9yKCkKCXsKCQlyZXR1cm4gJ3Rzdyc7Cgl9CglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCgl7CgkJcmV0dXJuICd0YXR1Lndpa21hbiBbYXRdIGdtYWlsLmNvbSc7Cgl9CglmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQoJewoJCXJldHVybiBmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKF9fRklMRV9fKS4nL2NoYW5nZWxvZy5pbmMnKTsKCX0KCWZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWZ1bmN0aW9uIEhhc0FkbWluKCkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KICAvKglmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKQoJewoJCXJldHVybiAnRXh0ZW5zaW9ucyc7Cgl9Ki8KCWZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsKCX0KCglmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQoJewoJICByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnKTsKCX0KCglmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQoJewoJCXJldHVybiBhcnJheSgpOwoJfQoKCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkKCXsKCQlyZXR1cm4gJzEuOCc7Cgl9CgoJZnVuY3Rpb24gTWF4aW11bUNNU1ZlcnNpb24oKQoJewoJCXJldHVybiAnMS4xMC45JzsKCX0JCgkKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBTZXRQYXJhbWV0ZXJzKCkKCSAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gY3JlYXRlIG1hcHBpbmdzIGZvcgoJICAgeW91ciBtb2R1bGUgd2hlbiB1c2luZyAiUHJldHR5IFVybHMiLgoJICAgCgkgICBUeXBpY2FsbHksIG1vZHVsZXMgY3JlYXRlIGludGVybmFsIGxpbmtzIHRoYXQgaGF2ZQoJICAgYmlnIHVnbHkgc3RyaW5ncyBhbG9uZyB0aGUgbGluZXMgb2Y6CgkgICBpbmRleC5waHA/bWFjdD1Nb2ROYW1lLGNudG50MDEsYWN0aW9uTmFtZSwwJmNudG50MDFwYXJhbTE9MSZjbnRudDAxcGFyYW0yPTImY250bnQwMXJldHVybmlkPTMKCSAgIAoJICAgWW91IG1pZ2h0IHByZWZlciB0aGVzZSB0byBsb29rIGxpa2U6CgkgICAvTW9kdWxlRnVuY3Rpb24vMi8zCgkgICAKCSAgIFRvIGRvIHRoaXMsIHlvdSBoYXZlIHRvIHJlZ2lzdGVyIHJvdXRlcyBhbmQgbWFwCgkgICB5b3VyIHBhcmFtZXRlcnMgaW4gYSB3YXkgdGhhdCB0aGUgQVBJIHdpbGwgYmUgYWJsZQoJICAgdG8gdW5kZXJzdGFuZC4KCgkgICBBbHNvIG5vdGUgdGhhdCBhbnkgY2FsbHMgdG8gQ3JlYXRlTGluayB3aWxsIG5lZWQgdG8KCSAgIGJlIHVwZGF0ZWQgdG8gcGFzcyB0aGUgcHJldHR5IHVybCBwYXJhbWV0ZXIuCgkgICAKCSAgIFNpbmNlIHRoZSBTa2VsZXRvbiBkb2Vzbid0IHJlYWxseSBjcmVhdGUgYW55IGxpbmtzLAoJICAgdGhlIHNlY3Rpb24gYmVsb3cgaXMgY29tbWVudGVkIG91dCwgYnV0IHlvdSBjYW4KCSAgIHVzZSBpdCB0byBmaWd1cmUgb3V0IHByZXR0eSB1cmxzLgoJICAgCgkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gU2V0UGFyYW1ldGVycygpCgl7CgkJJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcygpOwoKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdib3VuZHNfZnVkZ2UnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fYm91bmRzX2Z1ZGdlJyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjZW50ZXJsYXQnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fY2VudGVybGF0JyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjZW50ZXJsb24nLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fY2VudGVybG9uJyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjb250cm9scycsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9jb250cm9scycpLCBmYWxzZSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignY29udHJvbHNfc2l6ZScsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9jb250cm9sc19zaXplJyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdkaXJlY3Rpb25zJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2RpcmVjdGlvbnMnKSwgZmFsc2UpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2hlaWdodCcsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9oZWlnaHQnKSwgZmFsc2UpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2luZm9fdHJpZ2dlcicsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9pbmZvX3RyaWdnZXInKSwgZmFsc2UpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2luZm9fd2luZG93JywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2luZm9fd2luZG93JyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdtYXAnLCAndGVzdCcsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX21hcCcpLCBmYWxzZSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignbGFuZ3VhZ2UnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fbGFuZ3VhZ2UnKSwgZmFsc2UpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3NjYWxlX2NvbnRyb2wnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fc2NhbGUnKSwgZmFsc2UpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3NpZGViYXInLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fc2lkZWJhcicpLCBmYWxzZSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigndHlwZScsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV90eXBlJyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0eXBlX2NvbnRyb2xzJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3R5cGVfY29udHJvbHMnKSwgZmFsc2UpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3dpZHRoJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3dpZHRoJyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd6b29tJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3pvb20nKSwgZmFsc2UpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3pvb21fZW5jb21wYXNzJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3pvb21fZW5jb21wYXNzJyksIGZhbHNlKTsKCQkKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnYm91bmRzX2Z1ZGdlJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdjZW50ZXJsYXQnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2NlbnRlcmxvbicsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY29udHJvbHMnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2NvbnRyb2xzX3NpemUnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2RpcmVjdGlvbnMnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2hlaWdodCcsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaW5mb190cmlnZ2VyJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdpbmZvX3dpbmRvdycsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbWFwJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdsYW5ndWFnZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc2NhbGVfY29udHJvbCcsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc2lkZWJhcicsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndHlwZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndHlwZV9jb250cm9scycsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnd2lkdGgnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3pvb20nLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3pvb21fZW5jb21wYXNzJyxDTEVBTl9TVFJJTkcpOwoJfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RXZlbnREZXNjcmlwdGlvbigpCiAgIElmIHlvdXIgbW9kdWxlIGNhbiBjcmVhdGUgZXZlbnRzLCB5b3Ugd2lsbCBuZWVkCiAgIHRvIHByb3ZpZGUgdGhlIEFQSSB3aXRoIGRvY3VtZW50YXRpb24gb2Ygd2hhdAogICB0aGF0IGV2ZW50IGRvZXMuIFRoaXMgbWV0aG9kIHdyYXBzIHVwIGEgc2ltcGxlCiAgIHJldHVybiBvZiB0aGUgbG9jYWxpemVkIGRlc2NyaXB0aW9uLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIC8qICBmdW5jdGlvbiBHZXRFdmVudERlc2NyaXB0aW9uICggJGV2ZW50bmFtZSApCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdldmVudF9pbmZvXycuJGV2ZW50bmFtZSApOwogIH0qLwoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RXZlbnRIZWxwKCkKICAgSWYgeW91ciBtb2R1bGUgY2FuIGNyZWF0ZSBldmVudHMsIHlvdSB3aWxsIG5lZWQKICAgdG8gcHJvdmlkZSB0aGUgQVBJIHdpdGggZG9jdW1lbnRhdGlvbiBvZiBob3cgdG8KICAgdXNlIHRoZSBldmVudC4gVGhpcyBtZXRob2Qgd3JhcHMgdXAgYSBzaW1wbGUKICAgcmV0dXJuIG9mIHRoZSBsb2NhbGl6ZWQgZGVzY3JpcHRpb24uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgLyogIGZ1bmN0aW9uIEdldEV2ZW50SGVscCAoICRldmVudG5hbWUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnZXZlbnRfaGVscF8nLiRldmVudG5hbWUgKTsKICB9Ki8KCgkKCglmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKCX0KCWZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsKCX0KCWZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOwoJfQoJCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIERpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlKQoJICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCgkgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgbWV0aG9kIHRvIGRpc3BsYXkKCSAgIGVycm9yIGluZm9ybWF0aW9uIG9uIHRoZSBhZG1pbiBzaWRlLgoJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgIGZ1bmN0aW9uIERpc3BsYXlFcnJvclBhZ2UoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZT0nJykKICAgIHsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2Vycm9yJywgJHRoaXMtPkxhbmcoJ2Vycm9yJykpOwoJCWlmICgkbWVzc2FnZSAhPSAnJykKCQkJewoJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdtZXNzYWdlJywgJG1lc3NhZ2UpOwoJCQl9CgogICAgICAgIC8vIERpc3BsYXkgdGhlIHBvcHVsYXRlZCB0ZW1wbGF0ZQogICAgICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZXJyb3IudHBsJyk7CiAgICB9CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIERpc3BsYXlBZG1pbk5hdigkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UpCgkgICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKCSAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBtZXRob2QgdG8gcHJlc2VudCBhCgkgICBjb21tb24gYWRtaW4gbWVudS4KCSAgIAkgICAKCSAgIEl0IHNpbXBseSBzZXRzIGEgY29sbGVjdGlvbiBzbWFydHkgdGFnIHZhbHVlcy4gICAKCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgIGZ1bmN0aW9uIERpc3BsYXlBZG1pbk5hdigkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQpCiAgICAgICAgewoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignYWRtaW5fbmF2JywKCQkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygndGl0bGVfbW9kX2FkbWluJyksIGFycmF5KCkpIC4KCQkJJyA6ICcgLgoJCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZG1pbl9wcmVmcycsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ3RpdGxlX21vZF9wcmVmcycpLCBhcnJheSgpKSk7CiAgICAgICAgfQoKCgogIGZ1bmN0aW9uIFByaW50TWFwV2l0aE1hcmtlcnMoJG1hcG5hbWUsICRtYXJrZXJzKSB7CiAgICByZXF1aXJlX29uY2UoJ2xpYi9Hb29nbGVNYXBBUEktJy4kdGhpcy0+X2dvb2dsZWFwaV92ZXJzaW9uLicvR29vZ2xlTWFwQVBJLmNsYXNzLnBocCcpOwogICAgJG1hcCA9IG5ldyBHb29nbGVNYXBBUEkoJG1hcG5hbWUsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd5YWhvb2FwcGlkJywgJzEyMzQnKSk7CiAgICB3aGlsZSAoICRtYXJrZXIgPSBhcnJheV9wb3AoJG1hcmtlcnMpICkgewogICAgICAkbWFwLT5hZGRNYXJrZXJCeUNvb3JkcygkbWFya2VyWydsYXQnXSwkbWFya2VyWydsb24nXSwgJG1hcmtlclsnbmFtZSddLCAkbWFya2VyWydpbmZvJ10pOwogICAgfQogIH0KICAKICBmdW5jdGlvbiBHZXRBZGRyZXNzTG9jYXRpb24oJGFkZHJlc3MpIHsKICAgIHJlcXVpcmVfb25jZSgnbGliL0dvb2dsZU1hcEFQSS0nLiR0aGlzLT5fZ29vZ2xlYXBpX3ZlcnNpb24uJy9Hb29nbGVNYXBBUEkuY2xhc3MucGhwJyk7CiAgICAkbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgkbWFwbmFtZSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3lhaG9vYXBwaWQnLCAnMTIzNCcpKTsKICAgICRnZW9jb2RlID0gJG1hcC0+Z2V0R2VvY29kZSgkYWRkcmVzcyk7CiAgICByZXR1cm4gJGdlb2NvZGU7CiAgfQoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBHZXRIZWFkZXJIVE1MKCkKCSAgIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBqYXZhc2NyaXB0IChhbmQgbGlua3MpIGludG8gaGVhZGVyIG9mIEhUTUwKCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIEdldEhlYWRlckhUTUwoKQoJewoJCSRqYXZhc2NyaXB0ID0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL21vZHVsZXMvSlF1ZXJ5VG9vbHMvbGliL2pxdWVyeS50YWJsZXNvcnRlci5qcyI+PC9zY3JpcHQ+Jy4iXG4iOwoJCSRqYXZhc2NyaXB0IC49ICc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9tb2R1bGVzL0pRdWVyeVRvb2xzL2xpYi9jc3MvSlF1ZXJ5VG9vbHMuY3NzIiBtZWRpYT0ic2NyZWVuIiAvPicuIlxuIjsKCQkkamF2YXNjcmlwdCAuPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcyI+alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIAoJCXsgCgkJCWpRdWVyeSgiLmNtc19zb3J0YWJsZSIpCgkJCQkudGFibGVzb3J0ZXIoIAoJCQkJKTsgCgkJfSAKCQkpOyAKCQk8L3NjcmlwdD4nOwoJCSRqYXZhc2NyaXB0IC49ICc8YnIgLz48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJCWZ1bmN0aW9uIHNob3dWYWx1ZShudW0pewoJCQkJdmFyIHJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKTsgICAgIAoJCQkJcmVzdWx0LmlubmVySFRNTCA9IG51bTsKCQkJfQoJCTwvc2NyaXB0Pic7CgkJcmV0dXJuICRqYXZhc2NyaXB0OwoJfQoKCWZ1bmN0aW9uIEdldE1hcEluZm9ybWF0aW9uKCRtYXBfaWQpIHsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCQoJCSRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuIGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfZ29vZ2xlbWFwc19tYXBzIFdIRVJFIG1hcF9pZCA9ID8nOwoJCSRxciA9ICRkYi0+RXhlY3V0ZSggJHF1ZXJ5LCBhcnJheSgkbWFwX2lkKSApOwoJCSRyb3cgPSAkcXItPkZldGNoUm93KCk7CgkJaWYoICRxci0+UmVjb3JkQ291bnQoKSA9PSAwICkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWVsc2UgewoJCQlyZXR1cm4gJHJvdzsKCQl9CQkKCX0KCQoJZnVuY3Rpb24gU2F2ZUVhc3lMb2NhdG9yKCRsYXQgPSAwLCAkbG9uID0gMCwgJHpvb20gPSAwKSB7CgkJLy8gSWYgYSB2YWx1ZSB3YXMgc2V0IHVzaW5nIGVhc3kgbG9jYXRvciwgdXNlIGl0IG5leHQgdGltZSBpZiByZXF1ZXN0ZWQKCQlpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9yc2F2ZWxhc3QnKSkgewoJCQlpZiAoJGxhdCAhPSAwKSAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsYXQnLCAkbGF0KTsKCQkJaWYgKCRsb24gIT0gMCkgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybG9uJywgJGxvbik7CgkJCWlmICgkem9vbSAhPSAwKSAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsZXZlbCcsICR6b29tKTsKCQl9Cgl9CgoJZnVuY3Rpb24gR2V0TWFwVHlwZXMoKSB7CgkJLy8gUHJlcGFyZSBhIGxpc3Qgb2YgbWFwIHR5cGVzCgkJJHR5cGVsaXN0ID0gYXJyYXkoKTsKCQkkdHlwZWxpc3RbJHRoaXMtPkxhbmcoJ21hcHR5cGVtYXAnKV0gPSAnbWFwJzsKCQkkdHlwZWxpc3RbJHRoaXMtPkxhbmcoJ21hcHR5cGVzYXRlbGxpdGUnKV0gPSAnc2F0ZWxsaXRlJzsKCQkkdHlwZWxpc3RbJHRoaXMtPkxhbmcoJ21hcHR5cGVoeWJyaWQnKV0gPSAnaHlicmlkJzsKCQkkdHlwZWxpc3RbJHRoaXMtPkxhbmcoJ21hcHR5cGV0ZXJyYWluJyldID0gJ3RlcnJhaW4nOwoJCQoJCXJldHVybiAkdHlwZWxpc3Q7Cgl9Cn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAPcAAAAAAAQCAQcFAwYHBgcHBwgEAgoGAwoJBgoIBw4IBAsLCg0ODBAJBBIKBRAPCxgOBx4RCBQVExgYFCITCSYWCykXCysYDCwZDDohED4jESIlICotKTA1Ljk+Njw7Oj8+PUElEkgpFEwrFVEuF1UwGFcyGVw0GkE/O2Y6HWk8Hm8/H3ZDIXlFIkZFQ0dGRUZJQ09NSV9dRl5dW15oWWtoXWRjYGdmY3Jxbnp/dIhNJpBSKZNUKpVVKptYLJ1aLaFcLqVeL6phMK1iMbBkMrRnM7hpNLtqNbxrNcNvN8ZxOM92O9F3O9t9Ptx9Ptx+P6+MHbOPHbeSHrORKbaXNLeZOoSUfa6WTLqcQL2iTKm8d6m8eMCZH9GmIdGmItmsIeGyIuq5I+68JPK/JPK/JcytT8GnV+KBQOWCQeeEQumFQuuGQ+2HQ+2IRM/Mf9DGf9XMftrSfeDYe+Xdeurjee/pd/Xvdvr0dP/6c4iTgYucg42ahY+bh5CPipeTjJqYk6GZjaueia+ijqaglqSinaakn6C1laixn6i0mKm7kbCkiLaqhruvhbOnk7avk7armLqvna+qobCuqLKvqr60ormzqb+4q6fMlarNma7Mn6/PnbPQorXRpbfSpr/VrsC1hMW7gsK4p8vBgdDGgMrBsc3FtczEtsjYt9rNqdHJutXNv9Dav+Xegvfzgv/9uc/U1NXOwtTcw9nSxNrTx93Wydjdx93Z0d/b09/f0d7d1+HYweDazuLe1eTf0+Dg0OPg1+Tg1+Xh2Ojj2Ojj2fzvyO3p4fLv6fTx7PXz7vn49QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAIAAgAAAI/wCD8QoWbJcfDwQUtBgEjKDDYMSMHTNWjKAxZMaIBWs1LBisTXgEjPAxZAiPEAokPVzJMpanO3KCCZtBIcmamziLPODDkuCslalezjGlp0ITNkiTIlXyANKkQICiRlUkVeqbO28wHbCJs+tNIRJW2blDtqxZs3X2mFDKNmmGNnXmyJ1LV27ZF0DYEjnCNgcNRo8CCx7sCBBZQAuQ3GSzJgQAACgWrwHioudDl3foBBqgJOmSxwAKnEk65INlh6RCYZ20YUhSJwEeN1CTdEeN0wRHXX0DCkeKriwCGNDRlQQh3MFQfVpdiYGZrmbOdDWC4BdyzHMciYqhom1SMxMiIf8Php3RHVYOhHhnU8LGeIKG7wAKlegPBOlIFw+JcGslrE6ccLKSI3PcsQgqugQjwwpspWGBIb2sxIklFNLy0CiqueGQLQkwoVQPHAjDEoUUmnLZS3Q8dAMLSa1xQSE9kWiJhQ7xAshYD9Xi3FcaXNKTJiSa+NAjBbryEAw6IEVCHpaYQqNDqsj4ZDCgxHHHSoKIwAYaBmBCYoQE+YKLKSQK6JBuVz5UigFOBNGBlA/5komMvQyUnGosnfADClVw0gmFqrA0IYWXmIkZS32gcMEhvfTiZ6AP8XKJjJYIiNkTT0hRxinBUAICAK9ESgsvvdBiIpCUmoLhHWKIAYYXUWCM0QgGAMjy0KR0kkkpJ4zQcccYwALbhRUW1JrLKchqoUUWWVAoIKWWXJIIWa1WKwYZj1EBxRbcdhvFE1NkMSeliCwnh7XWgvEFutbCOgUilDICB1bcchEGu/hay4UU8JJ4o4GnZHFFFOvmm68XUpCIyCKZMUILhVlAYS+66n5RMLpcXEEhIm7cEccUAQEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/markers/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/markers/default.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAD8UlEQVQokYVTb0xbVRT/3XdfX0vbRAPKiMaJFUoHGZBaCWkIKsNmMTOyD0YDlWzZ0mH0A8aASAiJH8g0YowGNWqNEbcP2xKC0UysCYH9gWaDMVg7KpZCcGQIC5Xtwejzvl4/0D4o0HmSX97LPb9zzzm/cw8YY8JWjIyM2D0ez9cWi2VaFMV/JUmK2Wy2ycbGxk9DoZB1Ox+cc3DOIcuysaGh4StJFNTDxXv4d7X7ee9xO+89budfvFrID+57hEuSFGtvb/9AURQxGUc451hdXTXW1NT8NDcxXP1D3X5Ys00AAAKAY9Ouzq3gyOkbcNW81u31eo/pdDomqKoqtLW1dczfGK4+f+IZFOwxgxACQgiQ+CZR9uTD+LXBAV/vmfqurq63AYAEAoFCh710vP8th1iQyPx/NhhexpFz03fD4fDTVJKk1tzYrPONssdTsj0IuVlGDIQW9MyYNU9lWe48WmzOznt0Z/bhmSiWZAU5Dxl2+O6tMwxEVlQxHA7n7T1QAvCEXIQAnKOuexx9k3cAAB7nEzj5sjXFvzczA5GrEYvAGBPNenGzRAC3/lnXggGg+8o8Yiyu+QkhMEkUiqJIQnZ29uJc9L42Lg7ApBchCkS7wChR6Kig+TmAueg6cnJyFgSn0znUN3kHhHNg42EgM0NE04GnoKMbmdoP5oESaH7COQbDyygrK7tC+vr6XK8fPvTbREsFTBJNEWpNUSEQAoNOSDm/9tddHPp2jI2OXS8Rqqqq+m0lDv8n/TM7xmXSi8iQaMrZmqLixJkAmt5r+dBms4UI5xzBYLDwWYdj9FTdPsML+VkPfERvng3itjn/gs/ne1Gv1ysCABQVFd38uLPz3Xd6JrGmqBsLlhQssTQcwMXpZZyfuid7vd5jer1eAQBBVVVBVVXB4/F881hBqf/zwdnNcSVGRggBU+No/XkK77e2dlgslkgyjjDGNIX8fn/5S9XPXx5tciLTJG28m0QlPdcX0OGXZwOBQJHBYFhPxgiU0ngS5eXl/vLKKt/3/ltaBUi08dngLJqbmz8ymUxrW2NS5kMpjbe0tJz88tIcVmNM63/gz2UsqsZFt9t9aruomgZJVFZWXsgrKh3pmfhb6//c2G3U19d3G43Gte38lBaSqK2tPf17aGMXYiyOX4JLcLvdP+7G3RzTFoTDYYtBR9Xp9uf42aOl3Gq1/sEYE3bjiqqqCtv7ys3NnbXkF4QuRaKFlyNRuFyv+ABgN+6Og6S5XC7fUCSKoZkoKioqLqbj7aoBpTReXFw8PrW0ipsLMux2+7V0vLQVGAyG9RiLI84Bs9ksp+PtqkHSVu4z7T8dT6SUxtNdEFzYTJyO9x8AWR3pU2l8CAAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_dblue.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAC+0lEQVQokZWUUWhTZxiGn/zn9KRLgzdjseDFQoY1M5BJCCWUEKTUXPdmN7UEVktW2C4KY1VKKXhRplD0pjA2403FCxVEkd2EEtBhCVK3qcmMI3YyGdTeCCHV5vj//XfRnBLTnM6+8MJ/zvd+532/8x0OUkrRypWVlVg2m/0pFAo9N03znWVZjXA4/HRycvJipVLpa9ejtUZrTb1e901MTPwohKkgqmFEw3iTX2r4XFuW1ZidnT1r27bp9Hm01mxsbPiGh4dvLy09HoKTQIDO+Ae4SiYzvJjL5U51dXVJoZQSMzMzc0tLT4bga+Ag4HHhp8AEi4u3MgsLC98CeEql0tFjx2KPpPzGdHduR5UDB27UqtXqZ4ZlWdPLy40B6N/DuZ0f02hUvIcO+f416vX6/Pp6NACffKC7g01Mc1UZtVrtgpRJE/zNggfQezQ69Q1MsyxNKaUJ3mahVbQXPICFbduWCAQC6/B6n/EBXtPb27smBgYGluFpM9Z+WKW/v/+BGB8fvwQPAXsf7i8xzbIcGxu7LAYHBwuJxBdFKPBhK7SBa5w5c/pcOByueLTWlMvlo/F4/OHm5sluOPw/7tdJpfz38vn8Ca/XawuASCTy5/z8/Hdws+nQukbdcv0cv/+vei6XO+X1em0AoZQSSimRzWZ/TiSOFOEuu1fqARRwh+np6blQKLTq9HmklMKRFovFRDI5dB++B3raov9BMFh8USqVIt3d3ZvOXWEYxpbDRCJRTKdTeSi2NWvgLlNTU+d7enretPbs/FAcFgqF4/CRhrMafmhyTAcCgVe1Ws3frt95Bw5TqdS9eDyyAo9b5v+dTCaz6PP53rTr3xvB4cjIyFWoNONLoMzo6OiVTtpdI2itqVarISG6FMxq+Er39fU9k1KKTtpdIyilRDAYfBEOH67AKvCMdDqdB+ikFbhgu2kV+JtkMvmrm840DGOrUyEajT6CX4A1YrHYb2461wTbH4sENH6/v+6aQCnl+hB4u3Ny07mOsI21nZOb7j+g2r1aU9FEigAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_green.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAACpElEQVQokZWUQUhUURSGv948npNO4iIGQZBhkGGycCEiMoi0kEeLNq1aJbQRadMsJEJEiMBNMRKYEdEi2kVF7SYNUZIRSsrgVWajhRXlkIL6IOd5n6dFM+M4zhO98MO53P+c89/z3n9RSmnFmJmZae7u7r4bDocXdF3fMgwjG41GP8Xj8aG5ublIKR8RQUSwbbuyp6fnjmZoLucQ7iM8y+E2whnEMIzswMDANcdx9HxeIbmzs3OMCMI0wkoOq0XxCkISoRbp6up6kC+CUkqLx+NDnEBI55L2w7v/RRKJRFxEwLKsRt2vb5Eq6bYfniLV1dVrmUzmuM8wjL5UKBXjAnDkgAhBdiJbUafqfvps276ZuZgJ0sDh1gboE7qrpdPpBuoPmQxQD4uLi2FdKaUTyEk7zKoCx3EMLRgMZlgCJHcgJcAjXoLa2trfWiwWS5EsUlA6MDziSWhtbX1NMpk0qUFYOsRnHEP0Cn3LsqxGHMfR29raprl8gJ9oFeE7Qhjp7++/XvCCZVmN/qP+vzw5QIHzSEdHx+Tm5qZR8IKIMDw8fIl6hB/7SH+OBI4FNubn5xsKZsrbsnCVKx6dlxFOIoODg1d32bl4MzU1FaMa4UsZR95DQqHQV9u2K8u+ByKCUkozTfMFfSXd/yCcQkZGRnqK+btmkMf4+PhpanLTzqt4jASDweX19fXAngKlT5RSSmtpaXnDrd2T7+3tvVGOu0eBiJBIJOKczSX/QqhCZmdnm8pxyxZIp9Nhza+5LCA8QiKRyGellFaOq7muuwehUOhbNBydYwp4CaZpjgKU42pebjVNc5QUkIL29vZXXjzd5/Ntlztoamp6z0PgIzQ3N7/14nkq8Pv9m2SBbQgEAranAtd1PYuwthN68TyvAMCHndCL9w/vEZwQMSw5eAAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_lblue.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAC7ElEQVQokZVUS0gbURQ9ToZxjDG4KCFQCMMQgj9cSBEJErqQwYUbV64MuJHQjVlJERFKwVWJG7UUcdEu/aG7VEG0jRFKqBZGa2O0JVqsQQV1aM34JreLkJjExM+FA3fenHvfmfveGTDGuFxEIpGm3t7ed7Is7/E8fy0IQrKmpua73+8f2dnZcRXyQUQgImiaZvb5fG85QTDQ2UmYnCTMz6cxNkZobydBEJJDQ0OvdF3nM3XZ4ra2tiW4XIT1dcLpaRpnZzf56SkhGCTY7eT1et9nmoAxxvn9/hHU1hJisXTRXdjYINjtFAgE/EQEqKpax4viNcLh/N3uwtwcWa3W80Qi8cQkCMJAWJLc6O4GysoeBklCcmWl/Cljv02apr1J9PTY4HTiUXF5CX5lxeBisZgTDsfjigHA4cD+/r7MM8Z4WCxpaY+Jykroui5wNpstgXgcIEq/SJ/tDXLXcvN4HHa7/Q/ndrvDCAZvFBQOLHctN19dRXNz8xcEg0EF1dWEePzhx7i0RHx5+bWqqnXQdZ1vaWlZR1/f/Zfo7IxwcECQZRocHHyd9YKqqnViRcU/zM7e36Crizwez+rV1ZWQ9QIRYXR09AUcDsLhYWnpCwtkqaq6jEajzqyZMrbMfkp/f/Gdj48J9fU0PDz8Ms/OuQ+hUMgNq5Wwu3vbkRMTJEnST03TzEX/B0QExhinKMpHDAzk735yQmhooPHxcV8uP28GGSwvLz9HdXV62hkVMzNks9mOLy4uLIV8zjCMPHg8nk/PnM4I5uZuLs30NLxe7wez2fy3kH9LAREhEAj40dGRln90RKispM3NzcZi3KINYrGYzImigb09wtQUuVyuH4wxrhiXNwyDKzSaJEm/amR5ZzsUqsPaGhRFWQSAYtxbC5lQFGUR4TAQDqO1tfVzKR5nMplSxdDY2PgN0SiwvY2mpqavpXglFYiieIVkEkilYLFYtFK8ojPIxvl5Ni3F400mU6pkg62tbFqK9x/SYvkb2LkzxAAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_orange.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAADXElEQVQokY1Ub2gTZxx+7s31EpMg/sFb2aALt5rGBqKELoRSwixdGH6qH/al1qC1xA79UBGrK6XQD0VlHUPpGG4pY3UyplIU/xJLsP4pQdtNXVKjXKNUxCqIrF5rc77X1w/JNWnNlT7wwO/ufX78nuf3HgdKKSnkyMiINxwOn5AkaZzn+feCIGRcLtfD1tbWn1KplHOxHowxMMagKIq1paXlF4En2lYPWF8D2LnmLH/+FuybDWCCIGQ6Ozu7VFXl9T6OMYbp6WlrfX39+YkHg3V/bAOcIgAAHACGPO5OADtOAcH6UH8kEtlVUlJCiaZppKOjo/v5f4N1l3cDFZ8AHJcluHzNcYDvc+BKCxA91x/q7e3dCwBcIpGorPJuuh/bQ/kKEcvCkAzsOLNySpblL0yCILQ7MsPV230Lpy1Fx1rgeipjptbPnpsURenZ6Xkllq9b3nQdb2eB62leI7Isl5etzm1L3xhbgrnzsjVAOp2WeEopbzfnlqajsC4GDrAJgKqqAhFF8dXEG+PhMKgn3gClpaWTpLq6evjqQ4DLnXCLCIN6SAZ8Pt8d0tzc/Ntfo4CiLh29kKPPgAtJnjY1NfWR2tramGujP/5jbHlXOKMCu/8GDhw8dMTlcqU4xhiSyWTll1VVo39um7VsXr/0/r47DbywB25Eo9GvzWazSgDA7XaP/dDTs3/fQHYCYwWWWf755jhw+bFdiUQiu8xmswoARNM0omkaCYfDv35a4Y8fH8rZzd2mbp1qQPsF4Pv29m5JktJ6H0cpJbq9eDzu31JXc3v0ALDGlv8kGICBe0B33PE0kUi4LRbLrN5DTCbTnE6/3x/3B4LR3+N5B8jFODYEtLW1HbXZbDOFPfM/FJ2xWOyrVSvAnnWBvT6c5dkmMFEUX05NTdkX6+d3oDMQCNwod1eNDDzI5z/zLxAKhfqtVuvMYv2CCDobGhpOXUtl7WcocDEJNDY2niym/SgCYwyyLEuWEqKNd4Kd3gnmdDofUUpJMS2vadr8LehwOBxPpfWu1K30WOXtNBAMBqMAUEz70QsdwWAwOpwGhp8ANTU1N410vMlkmit24PF47p+8BIxNAl6v9x8jnaEDi8Uym6HAHAPsdrti6KBYLh3/v8vXRjrDCACQnMzXRroPdVP0GwrIn3kAAAAASUVORK5CYIIgCgo=]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_red.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAADMklEQVQokY1UXWgTWRg988MkpoMIaiwIErM1ja3WGmMJoWTdNDv4UBDffDEoQq3gQ0WUIqXgg0Ww1pdaEeuDsi+6y7JPbswuwZ/aitQapalRp1UUqRWbYhy1He/08yGJSdMZ6YHDnHvvufd83Dv3gjHGl3J4eNjX0tJy0e12j4ui+E2SpDmv1/u0ra3tXDqd9pT7QUQgImia5mhtbb0g8byxew3o8mbQP74cz9eAdq4CSZI019nZeVLXdbEw78fkSCTyn6cCNBQATTflmGkq6ukmUMwPqrSBotHolcIivGEYfEdHx6m3Q/9HbmwDqmWA43IEV9QcBzSsAP71A/FrV6O9vb2HAYAbHR2t8dfXP074mVhdgSXhdgbYN748q6rqL4IkSSdcrwaDe9cuTPsZXQ7g1rs5G1u59q2gaVr3fvm9s2qJ6QV8YsCtj6LBq6patc4OgPJEiTZjfnzdMmBiYsItMsZEWcxvWgGl2gwcUCEA+mdd4p1O5/vXX63DYaFfzwKVlZXv+GAwOBj7AHD5Ea6MsNC3M0BDQ8MDLhaLKXuad9580pgraykYyQLNj0T2MJncwofD4YTXH7h/9uXSjvCLARwcBY61t5/2er1pjoiQSqVqtvv9D//YOGv/beXP0w+lgMkNoTvxePx3m82m8wBQW1s7dqa7++iRp7kEopKNpGL7bga48UnW+vv7D9hsNh0AULiWuq6LgUBg6Ph6UCaymFNhUK0M6urqal9wnUsbAwMDweUi6EUINB3JMZP/XtoEcrlcLzVNc5i+B0QExhivKMrNE+6F6R+aQJtkUF9fX2up/8d7UMpEIrFjhQh6s6P4Dvy1FeR0Oqey2axc7ucNw1jAUCh0p6reP/z3VPHo/pwEotHoVYfD8aXcv6gCIkJPT09b8+pc+ZNhUIUASiaTdWZe0wVUVXXbBd4Y/xV0vR7k8XieMcZ4M69oGAZf/rO4XK5X7mpvemBmrObeDKDsUuIAYOZd1FGAoijxwRlgcAZobGy8a+XjBUGYN2NdXd3j55+BMQ3w+XwjVj7LCux2++zcPDAPQJZlzcpnugcFfGRFbeUTBUGYt1ogVZJr5fsOUMpRssTzyyoAAAAASUVORK5CYIIgCgo=]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_yellow.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAADkUlEQVQokY1Ub2gTZxh/3rvjkuWCFHRZcFCOW5Zkreu6LIYQSqdpFvwQGH7zi0ERYoV9qAzLLKWwD8KG2qFUxmZFNvwyFemnmmUQWhvTIm1XpamxXmupK1HxUpqemc3u8uxDcue1JtIHftzv3vs9f97ned8DRVEoIyYnJz2xWOwXQRAWGIb5j2XZDbfb/bCrq+unbDbr3KoHRAREBFmWLZ2dnT+zLKUePPgBXrnyKQ4NeXBoyIOXLjXhgQO7kGXZjb6+vu9LpRKj+enOoVDoL6eTw/FxP0pSB0pSB+bzHTqXpA6Mx71ot5swGo3+pgWhVFWlent7z6ysjIeGh78Al8sKhBAghAAA0TkhBHy+Brh92wuJxB/RgYGBbwAAyOzsbJPX23o/mfQyLhcH27HR0TwcObJQEEXxI5pl2R6eXwocPvzhpmzvAs9bYGTkmUlRdq7QsiyfO3rUanM4tpdds/V1BUZG1lRKFEVHY6MZALAKMPBaqHxvbHwPFhcXBUZRFMZqZapN08zIaxkBjqOhVHrFUjab7cXy8r+A1eCV0b6Bcc3Il5dfg91uf0YFAoF0PP4SCKmUSMhmGNeMfHQ0Dz6f7x6Jx+PhQ4cifz540AYcR2+rgdPTBYhE/lampmY+o4LBYNLt9k6cP/9kWyMsFlU4fnwWTp367ge3250liAiZTKZp717v1LVrn5j379/5zuwnTmQgl/v4TiKR+MpkMpUoAIDm5ua5s2fPfXvy5EMoFtXqBdMahvr72FgehofX5cHBwWMmk6kEAJW7oKoqFYvFft29u3Xi4sWlarlQRaV0RSlDT888nD7dc0YQhEXND4x3O5VKBXbsYPDx43aUpBBKUgjz+crz8uU9yPP8E1mWLUYfiqbpsga/3z/h9wcTV6/+o1dQmT3ChQtL0N3d/SPHcUWjj2GPFSSTyX0NDQw+fbpP/w/cvPk52my254VCwbpVr/dAQ3t7+x2Ho3Xy1q3n+v5v3MhBNBr93WKxFLfq36oAEaG/v78rEnkf8/kQ5nJB5DgaZ2ZmWmppawYQRVEwm2l1YeFLvH69FZ1O5yNFUahaWkZVVWrrYeF5fkkQXNlUarXp7t1VCIe/TgAA1NK+taBZOBxOpNOrkE6vQltb21g93aYxGtHS0nJ/fv4VzM3J4PF4puvp6lZgNptfb2yUoVwGsFqtcj1dzR5otram6LyejqFpulwvQCbzJnE93f9Yc3B0u5KYlwAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/markershadows/defaults.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_dblues.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_greens.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_lblues.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_oranges.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_reds.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_yellows.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2VfYmFkYWRkcmVzcyddID0gJ1RoZSBhZGRyZXNzIHNwZWNpZmllZCB3YXMgaW52YWxpZCBvciBjb3VsZCBub3QgYmUgZm91bmQnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnR29vZ2xlTWFwcyc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1ByZXBhcmUgbXVsdGlwbGUgR29vZ2xlIG1hcHMsIG11bHRpcGxlIGNvb3JkaW5hdGVzIHdpdGggY3VzdG9tIG1hcmtlcnMuIApJbmNsdWRlcyBFYXN5TG9jYXRvciB0byBxdWlja2x5IHNldCBjb29yZGluYXRlcy4gUGF0aHMgKGFrYSBwb2x5bGluZXMpIGFyZSBhbHNvIHBvc3NpYmxlLic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1VzaW5nIEdvb2dsZU1hcHMgcmVxdWlyZXMgIlVzZSBHb29nbGVNYXBzIiByaWdodHMnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0EgcGl0dHkgdG8gbm90aWNlIHlvdSByZW1vdmVkIG1vZHVsZSBHb29nbGVNYXBzLiBIb3BlIHlvdSB3aWxsIHRyeSBhbmQgdXNlIGl0IGxhdGVyLjxiciAvPgo8c3Ryb25nPkRpcmVjdG9yeSB1cGxvYWRzL0dvb2dsZU1hcHMgaXMgbm90IHJlbW92ZWQhPC9zdHJvbmc+JzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdSZWFsbHkgdW5pbnN0YWxsLCBhbGwgZGF0YSB3aWxsIGJlIGxvc3QnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWydlZGl0J10gPSAnRWRpdCc7CiRsYW5nWydkZWxldGUnXSA9ICdEZWxldGUnOwokbGFuZ1snYXJleW91c3VyZSddID0gJ0FyZSB5b3Ugc3VyZT8nOwoKJGxhbmdbJ2FkZGxvY2F0aW9uJ10gPSAnQWRkIGxvY2F0aW9uJzsKJGxhbmdbJ2FkZG1hcCddID0gJ0FkZCBtYXAnOwokbGFuZ1snYWRkbWFya2VyJ10gPSAnQWRkIG1hcmtlcic7CiRsYW5nWydhZGRwb2x5bGluZSddID0gJ0FkZCBwb2x5bGluZSc7CiRsYW5nWydhZGRyZXNzJ10gPSAnQWRkcmVzcyc7CiRsYW5nWydhZGRyZXNzX2xvb2t1cCddID0gJ1NlYXJjaCBsb2NhdGlvbiBmb3IgYWRkcmVzcyc7CiRsYW5nWydiZWxvbmdzdG9tYXAnXSA9ICdCZWxvbmdzIHRvIG1hcCc7CiRsYW5nWydjb250cm9sc2l6ZWxhcmdlJ10gPSAnTGFyZ2UnOwokbGFuZ1snY29udHJvbHNpemVzbWFsbCddID0gJ1NtYWxsJzsKJGxhbmdbJ2RlZmF1bHRtYXB0eXBlJ10gPSAnRGVmYXVsdCBtYXAgdHlwZSc7CiRsYW5nWydlYXN5bG9jYXRvcmxhdCddID0gJ0xhdGl0dWRlIG9mIGNlbnRlciBtYXAnOwokbGFuZ1snZWFzeWxvY2F0b3JsZXZlbCddID0gJ0Vhc3kgTG9jYXRvciB6b29tIGxldmVsJzsKJGxhbmdbJ2Vhc3lsb2NhdG9ybG9uJ10gPSAnTG9uZ2l0dWRlIG9mIGNlbnRlciBtYXAnOwokbGFuZ1snZWFzeWxvY2F0b3JzYXZlbGFzdCddID0gJ1NhdmUgbGFzdCB1c2VkIHZhbHVlcyc7CiRsYW5nWydlYXN5bG9jYXRvcnNldHRpbmdzJ10gPSAnRWFzeSBMb2NhdG9yIHNldHRpbmdzLCB0byBiZSB1c2VkIHdoZW4gYWRkaW5nIG1hcC9tYXJrZXInOwokbGFuZ1snZWFzeWxvY2F0b3J0ZW1wbGF0ZSddID0gJ1RlbXBsYXRlIGZvciBtYXAgdG8gc2hvdyc7CiRsYW5nWydpbmZvX3RyaWdnZXJjbGljayddID0gJ09uIGNsaWNrJzsKJGxhbmdbJ2luZm9fdHJpZ2dlcm1vdXNlb3ZlciddID0gJ09uIG1vdXNlIG92ZXInOwokbGFuZ1snaW52YWxpZG9wYWNpdHknXSA9ICdJbnZhbGlkIG9wYWNpdHkgKG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxKSc7CiRsYW5nWydpcyddID0gJ2lzJzsKJGxhbmdbJ2xhdGl0dWRlJ10gPSAnTGF0aXR1ZGUnOwokbGFuZ1snbG9jYXRpb25fZm9yJ10gPSAnTG9jYXRpb24gZm9yJzsKJGxhbmdbJ2xvbmdpdHVkZSddID0gJ0xvbmdpdHVkZSc7CiRsYW5nWydsb29rdXBzZXJ2aWNlJ10gPSAnV2hpY2ggbG9va3VwIHNlcnZpY2UgdG8gdXNlJzsKJGxhbmdbJ21hcF9pZCddID0gJ01hcCBJRCc7CiRsYW5nWydtYXBhZGRlZCddID0gJ01hcCBoYXMgYmVlbiBhZGRlZCc7CiRsYW5nWydtYXBkZWxldGVkJ10gPSAnTWFwIChhbmQgYWxsIGl0cyBtYXJrZXJzKSBoYXMgYmVlbiBkZWxldGVkJzsKJGxhbmdbJ21hcHMnXSA9ICdNYXBzJzsKJGxhbmdbJ21hcHR5cGVoeWJyaWQnXSA9ICdIeWJyaWQnOwokbGFuZ1snbWFwdHlwZW1hcCddID0gJ1JvYWRtYXAnOwokbGFuZ1snbWFwdHlwZXNhdGVsbGl0ZSddID0gJ1NhdGVsbGl0ZSc7CiRsYW5nWydtYXB0eXBldGVycmFpbiddID0gJ1RlcnJhaW4nOwokbGFuZ1snbWFwdXBkYXRlZCddID0gJ01hcCBoYXMgYmVlbiB1cGRhdGVkJzsKJGxhbmdbJ21hcmtlciddID0gJ01hcmtlcic7CiRsYW5nWydtYXJrZXJhZGRlZCddID0gJ01hcmtlciBoYXMgYmVlbiBzYXZlZCc7CiRsYW5nWydtYXJrZXJkZWxldGVkJ10gPSAnTWFya2VyIGhhcyBiZWVuIGRlbGV0ZWQnOwokbGFuZ1snbWFya2VyZXJyb3InXSA9ICdObyBtYXJrZXJzIGZvdW5kIGluIGRpcmVjdG9yeSBcJ3VwbG9hZHMvR29vZ2xlTWFwcy9tYXJrZXJzXCcnOwokbGFuZ1snbWFya2VyaWNvbiddID0gJ01hcmtlciBpY29uJzsKJGxhbmdbJ21hcmtlcnMnXSA9ICdNYXJrZXJzJzsKJGxhbmdbJ21hcmtlcnVwZGF0ZWQnXSA9ICdNYXJrZXIgaGFzIGJlZW4gdXBkYXRlZCc7CiRsYW5nWydub2tleSddID0gJ0dvb2dsZU1hcHMgQVBJIGtleSBtaXNzaW5nIGluIGNvbmZpZ3VyYXRpb24nOwokbGFuZ1snbm9tYXAnXSA9ICdObyBtYXAgcHJvdmlkZWQnOwokbGFuZ1snbm9uYW1lZ2l2ZW4nXSA9ICdObyBuYW1lIGdpdmVuLCB3aGlsZSB0aGlzIGlzIG1hbmRhdG9yeSc7CiRsYW5nWydwYXRoZXJyb3InXSA9ICdQYXRoIHRvIG1hcmtlciBkaXJlY3RvcnkgXCd1cGxvYWRzL0dvb2dsZU1hcHMvbWFya2Vyc1wnIGRvZXNuXCd0IGV4aXN0JzsKJGxhbmdbJ3BvbHlsaW5lYWRkZWQnXSA9ICdQb2x5bGluZSBoYXMgYmVlbiBhZGRlZCc7CiRsYW5nWydwb2x5bGluZWRlbGV0ZWQnXSA9ICdQb2x5bGluZSBoYXMgYmVlbiBkZWxldGVkJzsKJGxhbmdbJ3BvbHlsaW5lcGFydGRlbGV0ZWQnXSA9ICdQb2x5bGluZSBwYXJ0IGhhcyBiZWVuIGRlbGV0ZWQnOwokbGFuZ1sncG9seWxpbmVzJ10gPSAnUG9seWxpbmVzJzsKJGxhbmdbJ3BvbHlsaW5ldXBkYXRlZCddID0gJ1BvbHlsaW5lIGhhcyBiZWVuIHVwZGF0ZWQnOwokbGFuZ1sncXVlcnlfYWRkcmVzcyddID0gJ0FkZHJlc3MgbG9va3VwJzsKJGxhbmdbJ3JldHVybnRvbGlzdCddID0gJ1JldHVybiB0byBsaXN0JzsKJGxhbmdbJ3NldHRpbmdzJ10gPSAnU2V0dGluZ3MnOwokbGFuZ1snc2V0dGluZ3Nfc2F2ZWQnXSA9ICdTZXR0aW5ncyBzYXZlZCc7CiRsYW5nWydTdWJtaXQnXSA9ICdTdWJtaXQnOwokbGFuZ1sndGl0bGVfYWRtaW5fcGFuZWwnXSA9ICdHb29nbGVNYXBzIE1vZHVsZSc7CiRsYW5nWyd0aXRsZV9ib3VuZHNfZnVkZ2UnXSA9ICdGdWRnZSBmYWN0b3Igb24gZWRnZXMnOwokbGFuZ1sndGl0bGVfY2VudGVyX2xhdCddID0gJ0RlZmF1bHQgY2VudGVyIGxhdGl0dWRlJzsKJGxhbmdbJ3RpdGxlX2NlbnRlcl9sb24nXSA9ICdEZWZhdWx0IGNlbnRlciBsb25naXR1ZGUnOwokbGFuZ1sndGl0bGVfY29sb3InXSA9ICdDb2xvcic7CiRsYW5nWyd0aXRsZV9jb250cm9scyddID0gJ0VuYWJsZSBjb250cm9scyc7CiRsYW5nWyd0aXRsZV9jb250cm9sc19zaXplJ10gPSAnQ29udHJvbHMgc2l6ZSc7CiRsYW5nWyd0aXRsZV9kZWwnXSA9ICdEZWwnOwokbGFuZ1sndGl0bGVfZGlyZWN0aW9ucyddID0gJ1Nob3cgZGlyZWN0aW9ucyc7CiRsYW5nWyd0aXRsZV9kZXNjcmlwdGlvbiddID0gJ0Rlc2NyaXB0aW9uJzsKJGxhbmdbJ3RpdGxlX2Vhc3lsb2NhdG9yJ10gPSAnRWFzeSBsb2NhdG9yJzsKJGxhbmdbJ3RpdGxlX2V4YW1wbGUnXSA9ICdFeGFtcGxlJzsKJGxhbmdbJ3RpdGxlX2hlaWdodCddID0gJ0hlaWdodCBvZiBtYXAnOwokbGFuZ1sndGl0bGVfaW5mbyddID0gJ01hcmtlciBpbmZvIChodG1sIGFsbG93ZWQpJzsKJGxhbmdbJ3RpdGxlX2luZm9fdHJpZ2dlciddID0gJ0luZm8gd2luZG93IHRyaWdnZXInOwokbGFuZ1sndGl0bGVfaW5mb193aW5kb3cnXSA9ICdFbmFibGUgbWFya2VyIGluZm8gd2luZG93cyc7CiRsYW5nWyd0aXRsZV9sb2NhdGlvbnByZWNpc2lvbiddID0gJ0xvY2F0aW9uIHByZWNpc2lvbiAobnVtYmVyIG9mIGRlY2ltYWxzKTonOwokbGFuZ1sndGl0bGVfbG9jYXRpb25zJ10gPSAnTG9jYXRpb25zJzsKJGxhbmdbJ3RpdGxlX21hcHR5cGUnXSA9ICdNYXAgdHlwZSc7CiRsYW5nWyd0aXRsZV9tb2RfYWRtaW4nXSA9ICdNb2R1bGUgQWRtaW4gUGFuZWwnOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTW9kdWxlIFByZWZlcmVuY2VzJzsKJGxhbmdbJ3RpdGxlX25hbWUnXSA9ICdOYW1lJzsKJGxhbmdbJ3RpdGxlX29wYWNpdHknXSA9ICdPcGFjaXR5JzsKJGxhbmdbJ3RpdGxlX3NjYWxlX2NvbnRyb2wnXSA9ICdTaG93IHNjYWxlJzsKJGxhbmdbJ3RpdGxlX3NlcSddID0gJ1NlcSc7CiRsYW5nWyd0aXRsZV9zZXFpbmNyZW1lbnQnXSA9ICdTZXF1ZW5jZSBmb3IgcG9seWxpbmUgaW5jcmVtZW50cyB3aXRoOic7CiRsYW5nWyd0aXRsZV9zaWRlYmFyJ10gPSAnU2lkZWJhciBmb3IgbWFya2Vycyc7CiRsYW5nWyd0aXRsZV90eXBlJ10gPSAnVHlwZSc7CiRsYW5nWyd0aXRsZV90eXBlX2NvbnRyb2xzJ10gPSAnRGlzcGxheSB0eXBlIGNvbnRyb2xzIGVuYWJsZWQnOwokbGFuZ1sndGl0bGVfd2VpZ2h0J10gPSAnTGluZSB3ZWlnaHQgKGluIHBpeGVscyknOwokbGFuZ1sndGl0bGVfd2lkdGgnXSA9ICdXaWR0aCBvZiBtYXAgb24gZnJvbnQgZW5kJzsKJGxhbmdbJ3RpdGxlX3pvb20nXSA9ICdab29tIGxldmVsJzsKJGxhbmdbJ3RpdGxlX3pvb21fZW5jb21wYXNzJ10gPSAnVHJ5IHRvIGZpdCBhbGwgbWFya2Vycyc7CiRsYW5nWyd0aXRsZV96b29tc2Nyb2xsd2hlZWwnXSA9ICdBbGxvdyB3aGVlbCBzY3JvbGwgem9vbWluZyc7CiRsYW5nWyd1c2VjYWNoZSddID0gJ1VzZSBjYWNoaW5nIGZvciBnZW9jb2RlcyAobm90IHdvcmtpbmcgeWV0KSc7CiRsYW5nWyd1c2VtYXJrZXJzaGFkb3dzJ10gPSAnVXNlIG1hcmtlciBzaGFkb3dzPyc7CiRsYW5nWyd5YWhvb2FwcGlkJ10gPSAnQXBwbGljYXRpb24gSUQgZm9yIHlhaG9vJzsgCiRsYW5nWyd5b3VybWFwcyddID0gJ1lvdXIgTWFwcyc7CiRsYW5nWyd5b3VybWFya2VycyddID0gJ1lvdXIgTWFya2Vycyc7CgokbGFuZ1snaGVscCddID0gJwo8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+VGhpcyBtb2R1bGUgaXMgaW50ZW50ZWQgZm9yIGludGVncmF0aW5nIEdvb2dsZU1hcHMgYXMgYSBwYXJ0IG9mIHlvdXIgc2l0ZS48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5GaXJzdCB5b3UgbXVzdCB1cGRhdGUgdGhlIHNldHRpbmdzIGZvciB0aGlzIG1vZHVsZSwgdG8gaGF2ZSBkZWZhdWx0cyBzZXQgZm9yIG5ldyBtYXBzLjwvcD4KPHA+VGhlbiB5b3UgY2FuIGNhbGwgdGhpcyBtb2R1bGUgaW4geW91ciB0ZW1wbGF0ZSB3aXRoIHtjbXNfbW9kdWxlIG1vZHVsZT1cJ0dvb2dsZU1hcHNcJyBtYXA9XCd0ZXN0XCd9IDwvcD4KPHA+VXNlciBkZWZpbmVkIG1hcmtlcnMgY2FuIGJlIGxvYWRlZCBpbnRvIHVwbG9hZHMvR29vZ2xlTWFwcy9tYXJrZXJzLiBUaGUgY29ubmVjdGVkIHNoYWRvdyBpbWFnZXMgc2hvdWxkIGJlIGxvYWRlZCBpbiAKCXVwbG9hZHMvR29vZ2xlTWFwcy9tYXJrZXJzaGFkb3dzLjxicj4KCU5hbWluZyBjb252ZW50aW9uIGlzIFttYXJrZXJpY29uXXMucG5nIChpZS4gbWFya2VyIGlzIGJpZ2JsdWUucG5nLCBtYXJrZXJzaGFkb3cgaXMgYmlnYmx1ZXMucG5nKS48YnI+CglJZiBhIHNoYWRvdyBpcyBub3QgZm91bmQsIHRoZSBkZWZhdWx0IHZlcnNpb24gd2lsbCBiZSB1c2VkICh3aGljaCBtYXkgbm90IGJlIHRoZSBjb3JyZWN0IHNoYWRvdyBvZiB0aGUgbWFya2VyIGF0IGFsbCkuPGJyPgoJSW4gdGhlIHNldHRpbmdzIHVzZSB0aGUgcHJlZmVyZW5jZSBcJ1VzZSBtYXJrZXIgc2hhZG93c1wnIHRvIHNob3cvaGlkZSB0aGVtLiBTaG93aW5nIHRoZSBzaGFkb3dzIHNsb3dzIGRvd24gdGhlIGJ1aWxkdXAgb2YgdGhlCgltYXAsIGR1ZSB0byBtb3JlIGludGVybmFsIGNoZWNrcy48YnI+CglPbmx5IGltYWdlcyB3aXRoIGV4dGVuc2lvbiAucG5nIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLjwvcD4KPHA+UG9seWxpbmVzIGFsbG93cyB5b3UgdG8gZHJhdyBsaW5lcyBmcm9tIGEgY2VydGFpbiBjb29yZGluYXRpb24gdG8gdGhlIG5leHQuIE11bHRpcGxlIGxpbmVzIGFyZSBwb3NzaWJsZSAKcGVyIG1hcC4gVGhpcyBhbGxvd3MgeW91IHRvIHByZXBhcmUgdmlzdWFsIG9uZSBsaW5lIHRoYXQgaXMgYSBjb21iaW5hdGlvbiBvZiBtdWx0aXBsZSBjb2xvcmVkIApzZXBhcmF0ZSBwb2x5bGluZSBzZXR1cHMuPC9wPgo8cD5UaGlzIG1vZHVsZSBpcyBldmVuIG1vcmUgZmxleGlibGUgdGhyb3VnaCB0aGUgdXNhZ2Ugb2YgdGhlIHBhcmFtZXRlcnMgKHNlZSB0aGUgcGFyYW1ldGVyIGxpc3QpLiBFYWNoIHBhcmFtZXRlciBhcyBhdmFpbGFibGUgZHVyaW5nIHRoZSBwcmVwYXJhdGlvbiBvZiBhIG1hcCwgY2FuIGJlIAoJb3ZlcnJpZGVuIGZvciB0aGUgZnJvbnQgZW5kLiBTbyB5b3UgYXJlIGFibGUgdG8gcHJlcGFyZSBvbmUgbWFwIGFuZCBkaXNwbGF5IGl0IGluIHZhcmlvdXMgd2F5cyBieSB1c2luZyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzLjwvcD4KPHA+SW4gdGhlIHNldHRpbmdzIHRhYiBpdCBpcyBwb3NzaWJsZSB0byBwcmVwYXJlIGEgbnVtYmVyIG9mIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHdoYXQgaXMgY2FsbGVkIHRoZSA8c3Ryb25nPlwnRWFzeSBMb2NhdG9yXCc8L3N0cm9uZz4uIFdoZW4gYWRkaW5nIGEgbmV3IG1hcCwKYSBtYXAgaXMgc2hvd24gYmFzZWQgdXBvbiB0aGVzZSBkZWZhdWx0IHNldHRpbmdzLjxiciAvPgpXaGVuIGVkaXRpbmcgYSBtYXAgb3IgYSBtYXJrZXIsIHRoZSBzaG93biBtYXAgaXMgYWx3YXlzIGNlbnRlcmVkIGF0IHRoZSBjb29yZGluYXRlcyBzaG93biBqdXN0IGJlbG93IHRoZSBtYXAuPGJyIC8+CldoZW4geW91IGVkaXQgYSBtYXAsIHRoZSBtYXAgc2V0dGluZ3MgKGNlbnRlciBjb29yZGluYXRlcyBhbmQgem9vbSBsZXZlbCkgYXJlIHVzZWQgdG8gcHJlcGFyZSB0aGUgRWFzeSBMb2NhdG9yLjxiciAvPgpUdXJuaW5nIG9uIHRoZSBzZXR0aW5nIFwnU2F2ZSBsYXN0IHVzZWQgdmFsdWVzXCcsIHdpbGwgc2F2ZSB0aGUgY29vcmRpbmF0ZXMsIHpvb20gbGV2ZWwgd2hlbiB1c2VkIG9uIGEgbWFwLiBUaGUgbmV4dCB0aW1lIHlvdSBhZGQKYSBtYXAsIHRoZSBsYXN0IHNhdmVkIGNvb3JkaW5hdGVzIGFyZSB1c2VkIHRvIHNob3cgdGhlIEVhc3kgTG9jYXRvci4gTm90ZTogVGhpcyBzYXZpbmcgaXMgb25seSBkb25lIG9uIGVkaXRpbmcgYSBtYXAgb3IgbWFya2VyCih6b29tIGxldmVsIG5vdCBzYXZlZCB3aGVuIGVkaXRpbmcgYSBtYXJrZXIpLiA8YnIgLz4KSG93IGRvIEkgY2hhbmdlIHRoZSBzaG93biBtYXBzPyBCeSBjaGFuZ2luZyB0aGUgdGVtcGxhdGUgaW4gdGhlIHNldHRpbmdzIHRhYi4gSWYgeW91IGFyZSBub3QgZmFtaWxpYXIgd2l0aCBpbnRlcm5hbCBzZXR0aW5ncyBmb3IgYSBtYXAsIApsZWF2ZSB0aGUgdGVtcGxhdGUgYXMgaXQgaXMuIEVhc3kgY2hhbmdhYmxlIGFyZToKPHVsPgogPGxpPnRoZSB0eXBlIG9mIGN1cnNvcjogY2hhbmdlIHRoZSB2YWx1ZSBvZiBcJ2RyYWdnYWJsZUN1cnNvclwnIGZyb20gY3Jvc3NoYWlyIGludG86IGF1dG8sIGRlZmF1bHQsIGhlbHAsIG1vdmUsIHBvaW50ZXIsIHRleHQsIHdhaXQsCiAgaGFuZCwgcHJvZ3Jlc3Mgb3Igbm8uPC9saT4KIDxsaT50aGUgc2l6ZSBvZiB0aGUgbWFwOiBhdCB0aGUgYm90dG9tIHlvdSB3aWxsIGZpbmQgc3R5bGU9IndpZHRoOiA1MDBweDsgaGVpZ2h0OiAzMDBweCIuIENoYW5nZSB0aGUgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgbnVtYmVyIG9mIHBpeGVscyB5b3Ugd2FudC48L2xpPgo8L3VsPgpBbGwgb3RoZXIgc2V0dGluZ3MgY2FuIGJlIG9idGFpbmVkIHZpYTogPGEgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9pbnRsL2VuLVVTL2FwaXMvbWFwcy9kb2N1bWVudGF0aW9uLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vaW50bC9lbi1VUy9hcGlzL21hcHMvZG9jdW1lbnRhdGlvbi88L2E+CjwvcD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8YnI+Cjx1bD4KCTxsaT5UaGUgQ01TIE1hZGUgU2ltcGxlIGZvcnVtOzwvbGk+CjwvdWw+CjwvcD4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0Cm9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KCjxoMz5TZWN1cml0eTwvaDM+CjxwPlVzZXIgbXVzdCBoYXZlICJVc2UgR29vZ2xlTWFwcyIgcGVybWlzc2lvbnMgc2V0IHRvIGVkaXQgbWFwczwvcD4KJzsKCi8vIHBhcmFtIGhlbHAKJGxhbmdbJ2hlbHBfcGFyYW1fYm91bmRzX2Z1ZGdlJ10gPSAnVGhpcyB3aWxsIGFkanVzdCBob3cgbXVjaCBtYXAgYm91bmRhcnkgZW5jb21wYXNzZXMgdGhlIG1hcCBtYXJrZXJzLic7CiRsYW5nWydoZWxwX3BhcmFtX2NlbnRlcmxhdCddID0gJ1RoZSBsYXRpdHVkZSB0byB3aGljaCB0aGUgbWFwIHNob3VsZCBiZSBjZW50ZXJlZC4nOwokbGFuZ1snaGVscF9wYXJhbV9jZW50ZXJsb24nXSA9ICdUaGUgbG9uZ2l0dWRlIHRvIHdoaWNoIHRoZSBtYXAgc2hvdWxkIGJlIGNlbnRlcmVkLic7CiRsYW5nWydoZWxwX3BhcmFtX2NvbnRyb2xzJ10gPSAnSWYgc2V0IHRvIDAgKHplcm8pLCB0aGVyZSB3aWxsIGJlIG5vIGNvbnRyb2xzIHRvIHpvb20vbW92ZSBhcm91bmQgdGhlIG1hcC4nOwokbGFuZ1snaGVscF9wYXJhbV9jb250cm9sc19zaXplJ10gPSAnVGhpcyBzZXRzIHRoZSBtYXAgY29udHJvbCBzaXplLiBSZWxldmFudCBvbmx5IGlmIG1hcCBjb250cm9scyBhcmUKZW5hYmxlZC4gbGFyZ2UgPSBtYXAgem9vbS9tb3ZlIHdpdGggc2xpZGVyLiBzbWFsbCA9IHpvb20vbW92ZSB3aXRob3V0IHNsaWRlci4gTGFyZ2UgaXMgZGVmYXVsdC4nOwokbGFuZ1snaGVscF9wYXJhbV9kaXJlY3Rpb25zJ10gPSAnVGhpcyBlbmFibGVzIG1hcCBkaXJlY3Rpb25zIGluIHRoZSBib3R0b20gb2YgdGhlIHBvcC11cCBpbmZvIHdpbmRvdy4gRGVmYXVsdCBpcyBkaXNhYmxlZC4KXCcxXCcgV2lsbCBlbmFibGUgdGhlIGRpcmVjdGlvbnMuJzsKJGxhbmdbJ2hlbHBfcGFyYW1faGVpZ2h0J10gPSAnU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS4nOwokbGFuZ1snaGVscF9wYXJhbV9pbmZvX3RyaWdnZXInXSA9ICdUaGlzIHNldHMgdGhlIGluZm8gd2luZG93IHRyaWdnZXIgYmVoYXZpb3IuIGNsaWNrID0gaW5mbyB3aW5kb3cgY29tZXMgdXAKICAgICAgICB3aGVuIGNsaWNraW5nIG9uIGEgbWFya2VyLiBtb3VzZW92ZXIgPSBpbmZvIHdpbmRvdyBjb21lcyB1cCB3aGVuIG1vdXNpbmcgb3ZlciBhIG1hcmtlci4nOwokbGFuZ1snaGVscF9wYXJhbV9pbmZvX3dpbmRvdyddID0gJ0VuYWJsZXMgaW5mbyB3aW5kb3dzIG9uIG1hcCBtYXJrZXJzLic7CiRsYW5nWydoZWxwX3BhcmFtX2xhbmd1YWdlJ10gPSAnU2VlOiA8YSBocmVmPSJodHRwOi8vc3ByZWFkc2hlZXRzLmdvb2dsZS5jb20vcHViP2tleT1wOXBkd3NhaTJoRE1zTGtYc29NMDVLUSZnaWQ9MSIgdGFyZ2V0PSJfYmxhbmsiPgp0aGUgbGlzdCBvZiBsYW5ndWFnZXM8L2E+JzsKJGxhbmdbJ2hlbHBfcGFyYW1fbWFwJ10gPSAnU2V0IHdoaWNoIG1hcCB0byBzaG93JzsKJGxhbmdbJ2hlbHBfcGFyYW1fc2NhbGUnXSA9ICdVc2UgXCcxXCcgb3IgdHJ1ZSB0byBzaG93IHNjYWxlLic7CiRsYW5nWydoZWxwX3BhcmFtX3NpZGViYXInXSA9ICdVc2UgXCcxXCcgdG8gZW5hYmxlIHRoZSBtYXAgc2lkZWJhci4nOwokbGFuZ1snaGVscF9wYXJhbV90eXBlJ10gPSAnVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1hcCB0eXBlLiBSZWxldmFudCBvbmx5IGlmIG1hcCB0eXBlIGNvbnRyb2xzIGFyZSBlbmFibGVkLiAKCW1hcCA9IGRlZmF1bHQgbWFwLiBzYXRlbGxpdGUgPSBzYXRlbGxpdGUgdmlldy4gaHlicmlkID0gaHlicmlkIHZpZXcuIHRlcnJhaW4gPSBwaHlzaWNhbCB2aWV3IHdpdGggcm9hZHMnOwokbGFuZ1snaGVscF9wYXJhbV90eXBlX2NvbnRyb2xzJ10gPSAnVXNlIFwnMVwnIGVuYWJsZSB0aGUgbWFwIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkL3RlcnJhaW4pJzsKJGxhbmdbJ2hlbHBfcGFyYW1fd2lkdGgnXSA9ICdTZXRzIHRoZSB3aWR0aCBvZiB0aGUgbWFwIHdpbmRvdy4gVGhpcyBjYW4gYmUgZWl0aGVyIHB4IG9yICUuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fem9vbSddID0gJ1RoaXMgc2V0cyB0aGUgbWFwIHpvb20gbGV2ZWwuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fem9vbV9lbmNvbXBhc3MnXSA9ICdVc2UgXCcxXCcgdG8gZW5hYmxlIHRoZSB6b29tIGVuY29tcGFzcyBzbyBtYXAgem9vbSBpcyBhcyBzbWFsbCBhcyBwb3NzaWJsZQogICAgICAgIGFuZCBpbmNsdWRlIGFsbCBtYXAgbWFya2Vycy4nOwoKLy90YWJsZSBmaWVsZHMKJGxhbmdbJ3RfbmFtZSddID0gJ05hbWUnOwokbGFuZ1sndF9iZWxvbmdzX3RvJ10gPSAnQmVsb25ncyB0byBtYXAnOwokbGFuZ1sndF9kZXNjcmlwdGlvbiddID0gJ0Rlc2NyaXB0aW9uJzsKJGxhbmdbJ2NlbnRlcl9sYXQnXSA9ICdEZWZhdWx0IGNlbnRlciBsYXRpdHVkZSc7CiRsYW5nWydjZW50ZXJfbG9uJ10gPSAnRGVmYXVsdCBjZW50ZXIgbG9uZ2l0dWRlJzsKJGxhbmdbJ3RfdHlwZSddID0gJ0Rpc3BsYXkgdHlwZSc7CiRsYW5nWyd0X3dpZHRoJ10gPSAnV2lkdGgnOwokbGFuZ1sndF9oZWlnaHQnXSA9ICdIZWlnaHQnOwokbGFuZ1sndF9jb250cm9scyddID0gJ0VuYWJsZSBjb250cm9scyc7CiRsYW5nWyd0X2NvbnRyb2xzX3NpemUnXSA9ICdDb250cm9scyBzaXplJzsKJGxhbmdbJ3Rfc2lkZWJhciddID0gJ1NpZGViYXIgZm9yIG1hcmtlcnMnOwokbGFuZ1sndF90eXBlX2NvbnRyb2xzJ10gPSAnRGlzcGxheSB0eXBlIGNvbnRyb2xzIGVuYWJsZWQnOwokbGFuZ1sndF9kaXJlY3Rpb25zJ10gPSAnU2hvdyBkaXJlY3Rpb25zJzsKJGxhbmdbJ3Rfem9vbSddID0gJ1pvb20gbGV2ZWwnOwokbGFuZ1sndF96b29tX2VuY29tcGFzcyddID0gJ1RyeSB0byBmaXQgYWxsIG1hcmtlcnMnOwokbGFuZ1sndF96b29tc2Nyb2xsd2hlZWwnXSA9ICdBbGxvdyB3aGVlbCBzY3JvbGwgem9vbWluZyc7CiRsYW5nWyd0X3NjYWxlX2NvbnRyb2wnXSA9ICdTaG93IHNjYWxlJzsKJGxhbmdbJ3RfYm91bmRzX2Z1ZGdlJ10gPSAnQm91bmRzX2Z1ZGdlJzsKJGxhbmdbJ3RfaW5mb193aW5kb3cnXSA9ICdFbmFibGUgbWFya2VyIGluZm8gd2luZG93cyc7CiRsYW5nWyd0X2luZm9fdHJpZ2dlciddID0gJ0luZm8gd2luZG93IHRyaWdnZXInOwoKJGxhbmdbJ3RfaW5mbyddID0gJ01hcmtlciBpbmZvIChodG1sIGFsbG93ZWQpJzsKJGxhbmdbJ3RfbGFuJ10gPSAnTGF0aXR1ZGUnOwokbGFuZ1sndF9sb24nXSA9ICdMb25naXR1ZGUnOwokbGFuZ1sndF9pY29uJ10gPSAnTWFya2VyIGljb24nOwokbGFuZ1sndF9hZGRyZXNzJ10gPSAnTWFya2VyIGFkZHJlc3MnOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.googlemaps_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTEgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGFkZGluZyBhIHBvbHlsaW5lCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2dvb2dsZW1hcHMKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjbGFzcyBnb29nbGVtYXBzX3V0aWxzCnsKCWZ1bmN0aW9uIGdldF9saXN0X21hcHMoKSB7CgkJaWYgKCRpdGVtbnVtYmVyID09IC0xKSByZXR1cm4gZmFsc2U7CgkJCgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQkkbWFwbGlzdCA9IGFycmF5KCk7CgkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgCgkJCU9SREVSIEJZIG5hbWUnOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoJCXdoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQl7CgkJCSRtYXBsaXN0WyRyb3dbJ25hbWUnXV0gPSAkcm93WydtYXBfaWQnXTsKCQl9CgkJcmV0dXJuICRtYXBsaXN0OwkKCgl9Cn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-3.0/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-3.0/Changelog.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VXBkYXRlZCBNYXkgMTksIDIwMTAgYnkgYi4uLkBteWNubC5jb20KTGFiZWxzOglGZWF0dXJlZCwgUGhhc2UtSW1wbGVtZW50YXRpb24KCiAgQ2hhbmdlTG9nMyAgCgpDaGFuZ2VzIGZyb20gMi41ClVwZGF0ZWQgdG8gdXNlIEdvb2dsZSBNYXBzIEFQSSB2MwpBZGRlZCBLTUwgT3ZlcmxheSBzdXBwb3J0IC0gYWRkIEtNTC9HZW9SU1MgZmlsZXMgdXRpbGl6aW5nIHRoZSBjbGllbnQgc2lkZSBKUyBjYWxscy4KU2ltcGx5IHBhc3MgaW4gYSBmaWxlbmFtZSB0byBhbnkgS01MIG9yIEdlb1JTUyBmaWxlIGFuZCB5b3UgYXJlIG9uIHlvdXIgd2F5IQpBZGRlZCBhYmlsaXR5IHRvIGNyZWF0ZSBtYXBzIGZvciBtb2JpbGUgZGV2aWNlcwpTZXQgJHRoaXMtPm1vYmlsZT10cnVlIHRvIGhhdmUgbWV0YSB0YWcgcmVuZGVyZWQgaW4gdGhlIGdldCBoZWFkZXIganMgY2FsbC4KRnV0dXJlIHVwZGF0ZXMgd2lsbCBpbmNsdWRlIGFiaWxpdHkgdG8gZ2V0IHVzZXIncyBsb2NhdGlvbiBmcm9tIEdQUy4KTm90ZTogVGhlIG5ldyB2MyBHb29nbGUgTWFwcyBKUyBBUEkgaXMgYWxyZWFkeSBjYXRlcmVkIHRvd2FyZHMgbW9iaWxlIGRldmljZXMuIEp1c3QgYnkgc2V0dGluZyB3aWR0aCBhbmQgaGVpZ2h0ID0gMTAwJSwgYW55IG9mIHRoZSBkZW1vcyBmcm9tIHRoZSBtYWluIHBhZ2UgY2FuIGJlIGRpc3BsYXllZCBvbiB0aGUgbW9zdCBwb3B1bGFyIG5ld2VyIGRldmljZXMgd2l0aCBKUyBzdXBwb3J0LgpVcGRhdGUgUG9seWxpbmUgaGFuZGxpbmcgd2l0aCBuZXcgQVBJIHYzIG1ldGhvZHMuCkEgbmV3IHBhcmFtdGVyICgkaWQpIHdhcyBhZGRlZCBpbiBib3RoIG9mIHRoZSBwb2x5bGluZSAiYWRkIiBtZXRob2RzLgpQbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSB5b3VyIGFwcHMgdGhhdCBhcmUgdXNpbmcgdGhlIGFkZCBtZXRob2RzIChtb3JlIHNwZWNpZmljYWxseSB0aGUgdmFyaWFibGUgb3JkZXIpLgpUaGlzIGNoYW5nZSB3YXMgbmVjZXNzYXJ5IHRvIG1ha2UgcG9seWxpbmUgaGFuZGxpbmcgYSBiaXQgbW9yZSBhZHZhbmNlZC4KQWRkZWQgYWRkUG9seWxpbmVCeUNvb3Jkc0FycmF5IGFuZCBhZGRQb2x5bGluZUJ5QWRkcmVzc0FycmF5IG1ldGhvZHMKQWRkZWQgRWxldmF0aW9uIENoYXJ0IGRpc3BsYXkgc3VwcG9ydC4KRGlzcGxheSBtdWx0aXBsZSBlbGV2YXRpb24gY2hhcnRzIGZvciBhIG1hcCAoYW5kIGV2ZW4gbXVsdGlwbGUgbWFwcy9jaGFydHMgcGVyIHBhZ2UpCkNob29zZSB3aGV0aGVyIG9yIG5vdCB0byBkaXNwbGF5IGEgY29ycmVzcG9uZGluZ2x5IGxvY2F0ZWQgbWFya2VyIG9uIHRoZSBsaW5lIChkaXJlY3Rpb25zIG9yIHBvbHlsaW5lKSB3aGVuIGhvdmVyaW5nIG92ZXIgYSBsb2NhdGlvbiBvbiB0aGUgZWxldmF0aW9uIGNoYXJ0LgpSZW1vdmVkIHJlZmVyZW5jZXMgYW5kIGV2ZXJ5dGhpbmcgZGVhbGluZyB3aXRoIEdvb2dsZSBNYXBzIEFQSSBrZXkgc2luY2Uga2V5cyBhcmUgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBpbiBWMyBvZiB0aGUgQVBJIQpSZW1vdmVkIHRhYnMgc3VwcG9ydCBmb3Igbm93IChub3QgcGFydCBvZiBvZmZpY2lhbCBWMyBHb29nbGUgTWFwcyBKUyBBUEkgYW55bW9yZSA6KCApClBvdGVudGlhbCB0byByZWluY29ycG9yYXRlIHdpdGggalF1ZXJ5IFVJIHRhYnM/ClVwZGF0ZWQgbWFwIHR5cGUgbmFtZXMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIFYzIGFwaS4KVXBkYXRlZCBpY29uL21hcmtlciBjcmVhdGlvbiB0byB1c2UgbmV3IG1ldGhvZHMvd29ya2Zsb3dzLgpBZGRlZCBhZGRNYXJrZXJPcGVuZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGN1c3RvbSBtYXJrZXIgb3BlbmVycwpUaGUgZnVuY3Rpb24gdGFrZXMgYSBtYXJrZXIgaWQgKHJldHVybmVkIGZyb20gYWRkIG1hcmtlcikgYW5kIGRvbSBvYmplY3QgaWQgYW5kIHRoZW4gYXR0YWNoZXMgYW4gb25jbGljayAob3Igb25tb3VzZW92ZXIgaWYgeW91J3ZlIHN3aXRjaGVkIHRoZSBkZWZhdWx0IGFjdGlvbikgdG8gdGhlIGdpdmVuIG9iamVjdCBhbmQgb3BlbnMgdGhlIG1hcmtlcidzIGluZm8gd2luZG93LgpVcGRhdGUgZ2VvY2FjaGluZyB0byB1c2UgbmV3IEdvb2dsZSBNYXBzIFYzIGdlb2NvZGVyLgpVcGRhdGVkIHRvIHVzZSBKU09OIGVuY29kaW5nIHZzLiBjc3YKTmV3IEFQSSBubyBsb25nZXIgcmVxdWlyZXMgQVBJIGtleSAtIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vYXBpcy9tYXBzL2RvY3VtZW50YXRpb24vZ2VvY29kaW5nLwpBZGRlZCBnZW9HZXRDb29yZHNGdWxsIG1ldGhvZCB0byByZXR1cm4gZW50aXJlIGdlb2NvZGUgcmVzcG9uc2UuCk5PVEUgVGhpcyBuZXcgbWV0aG9kIGRvZXMgbm90IHVzZSBjYWNoaW5nLiBUaGlzIGNhbiBjaGFuZ2UgaWYgbmVlZCBiZSwgYnV0IGZvciBub3cgaXQgYWx3YXlzIHF1ZXJpZXMgdGhlIEFQSS4KVXBkYXRlZCBhdXRvbWF0aWMgem9vbSBmaXR0aW5nIHRvIHVzZSBuZXcgbWFwLmZpdEJvdW5kcygpIEFQSSBtZXRob2QuClVwZGF0ZWQgb3JkZXIvcmVuZGVyaW5nIG9mIGphdmFzY3JpcHQgdG8gY29pbmNpZGUgd2l0aCB0aGUgbGF0ZXN0IG1ldGhvZHMgdXNpbmcgb3B0aW9ucyBpbnN0ZWFkIG9mIG11bHRpcGxlIGNhbGxzLgoKTW9kaWZpZWQgZGlyZWN0aW9ucyBzdXBwb3J0CihjaGFuZ2VkIHRvIGRpcmVjdGlvbnMgIm9iamVjdCIgdG8gYWxsb3cgaW5zdGFudGlhdGlvbiBvZiBhIG1hcCB3aXRoIGRpcmVjdGlvbnMgcGFyYW1ldGVycyBwYXNzZWQpLgokdGhpcy0+ZGlyZWN0aW9ucyBwYXJhbSBpcyBkZXByZWNhdGVkLiBZb3Ugc2hvdWxkIG5vdyBqdXN0IHVzZSAkdGhpcy0+YWRkRGlyZWN0aW9ucygpCkFkZGluZyAiZ2V0IGRpcmVjdGlvbnMgdG8vZnJvbSBoZXJlIiB0byBhbiBpbmZvd2luZG93IHNob3VsZCBiZSBmYWlybHkgc2ltcGxlIHVzaW5nIHRoZSBzdXBwbGllZCBtZXRob2RzLiBTZWUgZGVtbwpJIGNhbiBhZGQgdGhpcyBzdXBwb3J0IGJhY2sgaW4gaWYgbmVlZCBiZS9lbm91Z2ggcGVvcGxlIHJlcXVlc3QgaXQuCgpNb2RpZmllZCBjdXN0b20gaWNvbiBzdXBwb3J0CnJlcGxhY2VkICJhZGRNYXJrZXJJY29uIiB3aXRoIGFkZEljb24gYW5kIHVwZGF0ZU1hcmtlckljb25LZXkKSWNvbnMgd2lsbCBub3cgYmUgZXhwbGljaXRseSBkZWZpbmVkIHdoZW4gY3JlYXRpbmcgYSBtYXJrZXIgdXNpbmcgdGhlIGljb24gKGFuZCBzaGFkb3cpIGZpbGUgbG9jYXRpb25zCllvdSBjYW4gYWxzbyBzZXQgYSBkZWZhdWx0IGljb24gZmlsZSB0byB1c2UgYnkgc2V0dGluZyAkdGhpcy0+ZGVmYXVsdF9pY29uIChhbmQgZGVmYXVsdF9pY29uX3NoYWRvdykKVE9ETzpBZGQgbW9yZSBzdXBwb3J0IGZvciBjcmVhdGluZyBjdXN0b20gbWFya2VycyAod2lsbCB3YWl0IGFuZCBzZWUgd2hhdCBwZW9wbGUgdGhpbmspCkluIG9yZGVyIHRvIHBhc3MgYWxsIHZhbHVlcyBmb3IgYW4gaWNvbiBpbnN0ZWFkIG9mIGp1c3QgdGhlIGZpbGVuYW1lLHlvdSB3b3VsZCBoYXZlIHRvbyBjYWxsIGFkZEljb24gbWFudWFsbHkgYW5kIHBhc3MgdGhlIHggcGFyYW1ldGVycy4gVGhlbiB3aGVuIHlvdSBjcmVhdGUgdGhlIG1hcmtlcnMsIHlvdSBjYW4gc2ltcGx5IHBhc3MgdGhlIGZpbGVuYW1lIGFuZCB0aGUgaWNvbiB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHdpdGggdGhlIGN1c3RvbSB2cy4gY2FsY3VsYXRlZCB2YWx1ZXMuCgpBZGRlZCB3YWxraW5nIGFuZCBiaWtpbmcgZGlyZWN0aW9ucyBzdXBwb3J0CgpBZGRlZCBUcmFmZmljIE92ZXJsYXkgYW5kIEJpa2UgTWFwIE92ZXJsYXkgc3VwcG9ydC4KCkFkZGVkIEN1c3RvbSBPdmVybGF5IHN1cHBvcnQgd2l0aCBvcGFjaXR5IG9wdGlvbgoKQWRkZWQgSlNNaW4gbWluaWZpY2F0aW9uIHN1cHBvcnQuIE5vdGUtIHRoaXMgbWVhbnMgdGhhdCBpbiBvcmRlciB0byBsZWF2ZSAkX21pbmlmeV9qcyBzZXQgdG8gdHJ1ZSAoZGVmYXVsdCksIHlvdSBtdXN0IGluY2x1ZGUgSlNNaW4ucGhwIGFzIHdlbGwuIEkgaGF2ZSBpbmNsdWRlZCBhIGNvcHkgb2YgdGhpcyBsaWJyYXJ5IGluIHRoZSByZXBvc2l0b3J5LgoKQWRkZWQgbXVsdGlwbGUgbWFwcyBzdXBwb3J0IQoKQWRkZWQgJF9kaXNwbGF5X2pzX2Z1bmN0aW9ucyBjbGFzcyB2YXJpYWJsZSBzbyB0aGF0IHlvdSBjYW4gY29udHJvbCB3aGVuIHRoZSAiaGVscGVyIiBKUyBmdW5jdGlvbiBkZWZpbml0aW9ucyBhcmUgZGlzcGxheWVkIGFuZCB3aGVuIHRoZXkgc2hvdWxkbid0IGJlLiBJZiB5b3UgaGF2ZSBOIG1hcHMsIHRoZSBldmVyeSBtYXAgb2JqZWN0IGV4Y2VwdCB0aGUgTnRoIG1hcCBzaG91bGQgc2V0IHRoaXMgdmFyaWFibGUgdG8gZmFsc2UuClVwZGF0ZWQgSlMgZnVuY3Rpb24gcmVuZGVyaW5nIHRvIGluY2x1ZGUgdGhlIG1hcCBpZCBpbiB2YXJpYWJsZSBuYW1lIGRlZmluaXRpb25zIHRvIGF2b2lkIG5hbWVzcGFjaW5nIGNvbmZsaWN0cyB3aXRoIG11bHRpcGxlIG1hcHMuCk5PVEUgQmUgc3VyZSBlYWNoIG1hcCBpbnN0YW5jZSBoYXMgYSB1bmlxdWUgbWFwX2lkLCB3aGljaCBpcyBhc3NpZ25lZCBkdXJpbmcgb2JqZWN0IGluc3RhbnRpYXRpb24uCkJlIEF3YXJlCkZvciBzaW5nbGUgbWFwcywgeW91IHdpbGwgd2FudCB0byBiZSBzdXJlIHRvIGFsd2F5cyB1c2UgdGhlIGdldE9uTG9hZCgpIGZ1bmN0aW9uIGlmIHlvdSBhcmVuJ3QgYWxyZWFkeSAoaS5lLiA8Pz0kb2JqLT5nZXRPbkxvYWQoKTs/PiB2cyA8Ym9keSBvbkxvYWQ9Im9ubG9hZCgpOyI+IC0gSSBrbm93IEknbSBndWlsdHkgb2YgZG9pbmcgdGhpcywgYnV0IGluIG9yZGVyIHRvIHN1cHBvcnQgbXVsdGlwbGUgbWFwcywgdGhpcyBoYWQgdG8gYmUgZG9uZS4KRm9yIG11bHRpcGxlIG1hcHMsIHlvdSdsbCB3YW50IHRvIGRlZmluZSB5b3VyIG93biBvbmxvYWQgZnVuY3Rpb24gdXNpbmcgdGhlIG5ldyBnZXRPbkxvYWRGdW5jdGlvbiBjYWxsLCB3aGljaCByZXR1cm5zIHRoZSBKUyBmdW5jdGlvbiBuYW1lcyBvZiB0aGUgb25sb2FkIGZ1bmN0aW9ucyBmb3IgZWFjaCBtYXAuCgpBZGRlZCBNYXJrZXJDbHVzdGVyZXIgc3VwcG9ydC4KSSBoYXZlIGFsc28gYWRkZWQgdGhlIEpTIGNvZGUgZm9yIE1hcmtlckNsdXN0ZXJlciB0byB0aGUgU1ZOIHJlcG8gYXMgYW4gc3ZuOmV4dGVybmFscyBwcm9wZXJ0eSBsaW5raW5nIHRvIHRoZWlyIFNWTiByZXBvLiBUaGlzIGluIHRoZSAiZXh0ZXJuYWwiIGZvbGRlciAoaXQgZG9lc24ndCBzaG93IHVwIGluIHRoZSBzb3VyY2UgdGFiLCBidXQgaWYgeW91IGNoZWNrb3V0IGh0dHA6Ly9waHAtZ29vZ2xlLW1hcC1hcGkuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rL2V4dGVybmFsLyAsIHlvdSB3aWxsIGdldCB0aGUgZmlsZXMpClNlZSB0aGUgZXhhbXBsZSBmb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCkFkZCBhYmlsaXR5IHRvIGNob29zZSBiZXR3ZWVuIGJ1dHRvbnMgb3IgZHJvcGRvd24gZm9yIG1hcCB0eXBlIG5hdmlnYXRpb24uCgpBZGRlZCBzdHJlZXQgdmlldyBjb250cm9scyBzdXBwb3J0ISBDaGVjayBvdXQgdGhlIGRlbW8gdG8gc2VlIGhvdyBlYXN5IGl0IGlzIQ==]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-3.0/COPYING.lib</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQoJCSAgICAgICBWZXJzaW9uIDIuMSwgRmVicnVhcnkgMTk5OQoKIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgoKW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIExlc3NlciBHUEwuICBJdCBhbHNvIGNvdW50cwogYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQoKCQkJICAgIFByZWFtYmxlCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQpmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCgogIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKc3BlY2lhbGx5IGRlc2lnbmF0ZWQgc29mdHdhcmUgcGFja2FnZXMtLXR5cGljYWxseSBsaWJyYXJpZXMtLW9mIHRoZQpGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuICBZb3UKY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgp0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlcgpzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucyBiZWxvdy4KCiAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLApub3QgcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0CnlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldAppdCBpZiB5b3Ugd2FudCBpdDsgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgYW5kIHVzZSBwaWVjZXMgb2YKaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCnRoZXNlIHRoaW5ncy4KCiAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZApkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlCnJpZ2h0cy4gIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvcgp5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCgogIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCm9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKeW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQpjb2RlLiAgSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlCmNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQp3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZwppdC4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KCiAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQpsaWJyYXJ5LCBhbmQgKDIpIHdlIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2UsIHdoaWNoIGdpdmVzIHlvdSBsZWdhbApwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KCiAgVG8gcHJvdGVjdCBlYWNoIGRpc3RyaWJ1dG9yLCB3ZSB3YW50IHRvIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0CnRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93CnRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbAphdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKaW50cm9kdWNlZCBieSBvdGhlcnMuCgwKICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgphbnkgZnJlZSBwcm9ncmFtLiAgV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90CmVmZmVjdGl2ZWx5IHJlc3RyaWN0IHRoZSB1c2VycyBvZiBhIGZyZWUgcHJvZ3JhbSBieSBvYnRhaW5pbmcgYQpyZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAphbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlCmNvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgoKICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIKR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXZSB1c2UKdGhpcyBsaWNlbnNlIGZvciBjZXJ0YWluIGxpYnJhcmllcyBpbiBvcmRlciB0byBwZXJtaXQgbGlua2luZyB0aG9zZQpsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KCiAgV2hlbiBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggYSBsaWJyYXJ5LCB3aGV0aGVyIHN0YXRpY2FsbHkgb3IgdXNpbmcKYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCmNvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gIFRoZSBvcmRpbmFyeQpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZQplbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbApQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aAp0aGUgbGlicmFyeS4KCiAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdApkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbApQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiAgVGhlc2UgZGlzYWR2YW50YWdlcwphcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkKbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgpzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCgogIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCmVuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdCBiZWNvbWVzCmEgZGUtZmFjdG8gc3RhbmRhcmQuICBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUKYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQpsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gIEluIHRoaXMKY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlCnNvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCgogIEluIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZQpwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKZnJlZSBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbgpub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIG1hbnkgbW9yZSBwZW9wbGUgdG8gdXNlIHRoZSB3aG9sZSBHTlUKb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKc3lzdGVtLgoKICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQp1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcwpsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4KdGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KCiAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCiJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCmZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hlcmVhcyB0aGUgbGF0dGVyIG11c3QKYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCgwKCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KCiAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCnByb2dyYW0gd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yCm90aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKdGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgpFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KCiAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQpwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMKKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KCiAgVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsKd2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgpjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYQpwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCnN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKCiAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucwphbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAppbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KCiAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgpydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCnN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvcgp3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCmFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgogIAogIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncwpjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAp5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgphcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAphbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQp3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQpMaWJyYXJ5LgoKICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAphbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCmZlZS4KDAogIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24Kb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZApkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKCiAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCgogICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgoKICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubwogICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCgogICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCiAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCiAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CiAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgogICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KCiAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcwogICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQogICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CiAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQogICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKClRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCnRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CmRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZApvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCml0LgoKVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CnlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bwpleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KCkluIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKd2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCmEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCnRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KdGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwp0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCmluc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQp0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCnRoZXNlIG5vdGljZXMuCgwKICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCnRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCnN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCgogIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgp0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCgogIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCmRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCnVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueQppdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCm11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQptZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCgogIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CmZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCnNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bwpkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CmNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCgogIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCkxpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IKbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAp0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgoKICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CmNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdApjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQpsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCgogIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCnRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQpkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KCiAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCmZ1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQp3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQpMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQoKICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQpkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCndoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KDAogIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21iaW5lIG9yCmxpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCndvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCnVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCmVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgoKICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5CnRoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQpkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCm9mIHRoZXNlIHRoaW5nczoKCiAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZwogICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCiAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgogICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAogICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCiAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAogICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCiAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgogICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCgogICAgYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCiAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQogICAgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sCiAgICByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikKICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKICAgIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcwogICAgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCgogICAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQKICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscwogICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQogICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgoKICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CiAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKICAgIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KCiAgICBlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgoKICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCnRoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzCm5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgpjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCndoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKdGhlIGV4ZWN1dGFibGUuCgogIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCnJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAp1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CmRpc3RyaWJ1dGUuCgwKICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCkxpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CmZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCnRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQpwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCiAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CiAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKICAgIFNlY3Rpb25zIGFib3ZlLgoKICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CiAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZwogICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgoKICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQp0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQphdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCnJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwp0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCgogIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQpzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAp0aGlzIExpY2Vuc2UuCgwKICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAppbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLApjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCm90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91Cm1heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieQphbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwpyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgoKSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQpwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksCmFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCgpJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CnBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CnN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMKaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCmdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwp0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKaW1wb3NlIHRoYXQgY2hvaWNlLgoKVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCmJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgoKICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4KY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCm9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAphbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywKc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzCmV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCndyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgoKICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKdmVyc2lvbnMgb2YgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgpTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCmJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCiJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQKY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCmxpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgwKICAxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlCnByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUKU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgpkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCm9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nCmFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCgoJCQkgICAgTk8gV0FSUkFOVFkKCiAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCldBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuCkVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCk9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCkxJQlJBUlkgSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FClRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KCiAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgpDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQpMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HClJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBCkZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSApEQU1BR0VTLgoKCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwo=]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-3.0/GoogleMapAPI.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogUHJvamVjdDogICAgIEdvb2dsZU1hcEFQSSBWMzogYSBQSFAgbGlicmFyeSBpbnRlZmFjZSB0byB0aGUgR29vZ2xlIE1hcCBBUEkgdjMKICogRmlsZTogICAgICAgIEdvb2dsZU1hcFYzLnBocAogKiAKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqCiAqIE9SSUdJTkFMIElORk8KICogbGluayBodHRwOi8vd3d3LnBocGluc2lkZXIuY29tL3BocC9jb2RlL0dvb2dsZU1hcEFQSS8KICogY29weXJpZ2h0IDIwMDUgTmV3IERpZ2l0YWwgR3JvdXAsIEluYy4KICogYXV0aG9yIE1vbnRlIE9ocnQgPG1vbnRlIGF0IG9ocnQgZG90IGNvbT4KICogcGFja2FnZSBHb29nbGVNYXBBUEkKICogdmVyc2lvbiAyLjUKICogCiAqIFJFVklTSU9OIE5PVElGSUNBVElPTgogKiBOT1RFOiBUaGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgbGlzdGVkIGFib3ZlLiAgVGhpcyB2ZXJzaW9uCiAqIG1haW50YWlucyBhbGwgb3JpZ2luYWwgR05VIHNvZnR3YXJlIGxpY2Vuc2VzLgogKi8KLyoqCiAqIEBsaW5rIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9waHBnb29nbGVtYXBhcGl2My8KICogQGNvcHlyaWdodCAyMDEwIEJyYWQgd2VkZWxsCiAqIEBhdXRob3IgQnJhZCBXZWRlbGwKICogQHBhY2thZ2UgR29vZ2xlTWFwQVBJICh2ZXJzaW9uIDMpCiAqIEB2ZXJzaW9uIDMuMGJldGEKKi8KLyoKICogVG8gdmlldyB0aGUgZnVsbCBDSEFOR0VMT0csIHZpc2l0IAogKiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcGhwLWdvb2dsZS1tYXAtYXBpL3dpa2kvQ2hhbmdlTG9nMwovKgpGb3IgZGF0YWJhc2UgY2FjaGluZywgeW91IHdpbGwgd2FudCB0byB1c2UgdGhpcyBzY2hlbWE6CgpDUkVBVEUgVEFCTEUgR0VPQ09ERVMgKAogIGFkZHJlc3MgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgbG9uIGZsb2F0IGRlZmF1bHQgTlVMTCwKICBsYXQgZmxvYXQgZGVmYXVsdCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYWRkcmVzcykKKTsKCiovCgovKioKICogUEhQIEdvb2dsZSBNYXBzIEFQSSBjbGFzcwogKiBAcGFja2FnZSBHb29nbGVNYXBBUEkKICogQHZlcnNpb24gMy4wYmV0YQogKi8KY2xhc3MgR29vZ2xlTWFwQVBJIHsKCiAgICAvKioKICAgICAqIFBFQVI6OkRCIERTTiBmb3IgZ2VvY29kZSBjYWNoaW5nLiBleGFtcGxlOgogICAgICogJGRzbiA9ICdteXNxbDovL3VzZXI6cGFzc0Bsb2NhbGhvc3QvZGJuYW1lJzsKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGRzbiA9IG51bGw7CiAgICAKICAgIC8qKgogICAgICogY3VycmVudCBtYXAgaWQsIHNldCB3aGVuIHlvdSBpbnN0YW50aWF0ZQogICAgICogdGhlIEdvb2dsZU1hcEFQSSBvYmplY3QuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRtYXBfaWQgPSBudWxsOwoJCgkvKioKCSAqIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdG8gZGlzcGxheSB0aGUgbWFwIGFuZCBhc3NvY2lhdGVkIEpTIG9uIHRoZSBwYWdlCgkgKiB0aGlzIGlzIHVzZWQgaWYgeW91IGp1c3Qgd2FudCB0byBkaXNwbGF5IGEgc3RyZWV0dmlldyB3aXRoIG5vIG1hcAoJICovCgl2YXIgJGRpc3BsYXlfbWFwID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIHNpZGViYXIgPGRpdj4gdXNlZCBhbG9uZyB3aXRoIHRoaXMgbWFwLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkc2lkZWJhcl9pZCA9IG51bGw7ICAgIAogICAgCiAgICAvKioKICAgICAqIFdoZXRoZXIgdG8gdXNlIG5ldyBWMyBtb2JpbGUgZnVuY3Rpb25hbGl0eQogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJG1vYmlsZT1mYWxzZTsKICAgIAogICAgLyoqCiAgICAgKiBERVBSRUNBVEVEOiBHb29nbGUgbm93IGhhcyBnZW9jb2Rpbmcgc2VydmljZS4gIAogICAgICogTk9URTogTm90ZSBldmVuIHN1cmUgaWYgdGhpcyBzdGlsbCB3b3JrcwogICAgICogR29vZ2xlTWFwQVBJIHVzZWQgdG8gdXNlIHRoZSBZYWhvbyBnZW9jb2RlIGxvb2t1cCBBUEkuCiAgICAgKiBUaGlzIGlzIHRoZSBhcHBsaWNhdGlvbiBJRCBmb3IgWU9VUiBhcHBsaWNhdGlvbi4KICAgICAqIFRoaXMgaXMgc2V0IHVwb24gaW5zdGFudGlhdGluZyB0aGUgR29vZ2xlTWFwQVBJIG9iamVjdC4KICAgICAqIChodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLm5ldC9mYXEvaW5kZXguaHRtbCNhcHBpZCkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGFwcF9pZCA9IG51bGw7CgogICAgLyoqCiAgICAgKiB1c2Ugb25Mb2FkKCkgdG8gbG9hZCB0aGUgbWFwIGphdmFzY3JpcHQuCiAgICAgKiBpZiBlbmFibGVkLCBiZSBzdXJlIHRvIGluY2x1ZGUgb24geW91ciB3ZWJwYWdlOgogICAgICogPD89JG1hcG9iai0+cHJpbnRPbkxvYWQ/PiBvciBtYW51YWxseSBjcmVhdGUgYW4gb25sb2FkIGZ1bmN0aW9uIAogICAgICogdGhhdCBjYWxscyB0aGUgbWFwJ3Mgb25sb2FkIGZ1bmN0aW9uIHVzaW5nICR0aGlzLT5wcmludE9uTG9hZEZ1bmN0aW9uCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKiBAZGVmYXVsdCB0cnVlCiAgICAgKi8KICAgIHZhciAkb25sb2FkID0gdHJ1ZTsKICAgIAogICAgLyoqCiAgICAgKiBtYXAgY2VudGVyIGxhdGl0dWRlIChob3Jpem9udGFsKQogICAgICogY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IGFzIG1hcmtlcnMKICAgICAqIGFyZSBhZGRlZCB0byB0aGUgbWFwLgogICAgICoKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgdmFyICRjZW50ZXJfbGF0ID0gbnVsbDsKCiAgICAvKioKICAgICAqIG1hcCBjZW50ZXIgbG9uZ2l0dWRlICh2ZXJ0aWNhbCkKICAgICAqIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBhcyBtYXJrZXJzCiAgICAgKiBhcmUgYWRkZWQgdG8gdGhlIG1hcC4KICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkY2VudGVyX2xvbiA9IG51bGw7CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyBtYXAgY29udHJvbHMgKHpvb20vbW92ZS9jZW50ZXIpCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHZhciAkbWFwX2NvbnRyb2xzID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIGRldGVybWluZXMgdGhlIG1hcCBjb250cm9sIHR5cGUKICAgICAqIHNtYWxsIC0+IHNob3cgbW92ZS9jZW50ZXIgY29udHJvbHMKICAgICAqIGxhcmdlIC0+IHNob3cgbW92ZS9jZW50ZXIvem9vbSBjb250cm9scwogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkY29udHJvbF9zaXplID0gJ2xhcmdlJzsKICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIG1hcCB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZC90ZXJyYWluKQogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJHR5cGVfY29udHJvbHMgPSB0cnVlOwoJCgkvKioKCSAqIHNldHMgZGVmYXVsdCBvcHRpb24gZm9yIHR5cGUgY29udHJvbHMoREVGQVVMVCwgSE9SSVpPTlRBTF9CQVIsIERST1BET1dOX01FTlUpCgkgKgoJICogQHZhciBzdHJpbmcKCSAqLwoJIHZhciAkdHlwZV9jb250cm9sc19zdHlsZSA9ICJERUZBVUxUIjsKCiAgICAvKioKICAgICAqIGRlZmF1bHQgbWFwIHR5cGUgZ29vZ2xlLm1hcHMuTWFwVHlwZUlkLihST0FETUFQLCBTQVRFTExJVEUsIEhZQlJJRCwgVEVSUkFJTikKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJG1hcF90eXBlID0gJ0hZQlJJRCc7CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyBzY2FsZSBtYXAgY29udHJvbAogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJHNjYWxlX2NvbnRyb2wgPSB0cnVlOwogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgb3ZlcnZpZXcgbWFwIGNvbnRyb2wKICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgdmFyICRvdmVydmlld19jb250cm9sID0gZmFsc2U7CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyBHb29nbGUgQWRzZW5zZSBBZHNtYW5hZ2VyIG9uIHBhZ2UsIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIGJldGEKICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgdmFyICRhZHNfbWFuYWdlciA9IGZhbHNlOwogICAgCiAgICAvKioKICAgICAqIEdvb2dsZSBBZHNlbnNlIFB1Ymxpc2hlciBJRAogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkYWRzX3B1Yl9pZCA9ICIiOyAgCiAgICAKICAgIC8qKgogICAgICogR29vZ2xlIEFkc2Vuc2UgQ2hhbm5lbCBJRAogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkYWRzX2NoYW5uZWwgPSAiIjsKICAgIAogICAgLyoqCiAgICAgKiBUaGUgTWF4IG51bWJlciBvZiBBZHNtYW5hZ2VyIGFkcyB0byBzaG93IG9uIGEgbWFwCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgdmFyICRhZHNfbWF4ID0gMTA7CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcy9kaXNhYmxlcyBsb2NhbCBzZWFyY2ggb24gcGFnZQogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJGxvY2FsX3NlYXJjaCA9IGZhbHNlOwogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgbG9jYWwgc2VhcmNoIGFkcyBvbiBwYWdlIE5PVEU6IHdpbGwgb25seSBkaXNwbGF5IGFkcyBpZiBsb2NhbF9zZWFyY2ggPT0gdHJ1ZSwgb3RoZXJ3aXNlIGp1c3QgdXNlIGFkX21hbmFnZXIgYW5kIHNldHRpbmdzLgogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJGxvY2FsX3NlYXJjaF9hZHMgPSBmYWxzZTsKICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzL2Rpc2FibGVzIHdhbGtpbmcgZGlyZWN0aW9ucyBvcHRpb24KICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgdmFyICR3YWxraW5nX2RpcmVjdGlvbnMgPSBmYWxzZTsKICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzL2Rpc2FibGVzIGJpa2luZyBkaXJlY3Rpb25zIG9uIGRpcmVjdGlvbnMKICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgdmFyICRiaWtpbmdfZGlyZWN0aW9ucyA9IGZhbHNlOwogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMvZGlzYWJsZXMgYXZvaWQgaGlnaHdheXMgb24gZGlyZWN0aW9ucwogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJGF2b2lkX2hpZ2h3YXlzID0gZmFsc2U7CiAgICAKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyBpZiBhdm9pZCB0b2xsd2F5cyBpcyB1c2VkIGluIGRpcmVjdGlvbnMKICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgdmFyICRhdm9pZF90b2xsd2F5cyA9IGZhbHNlOyAgICAKICAgICAKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCB6b29tIGxldmVsCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgdmFyICR6b29tID0gMTY7CgogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIHRoZSBtYXAgd2lkdGgKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJHdpZHRoID0gJzUwMHB4JzsKICAgIAogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIHRoZSBtYXAgaGVpZ2h0CiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRoZWlnaHQgPSAnNTAwcHgnOwoKICAgIC8qKgogICAgICogbWVzc2FnZSB0aGF0IHBvcHMgdXAgd2hlbiB0aGUgYnJvd3NlciBpcyBpbmNvbXBhdGlibGUgd2l0aCBHb29nbGUgTWFwcy4KICAgICAqIHNldCB0byBlbXB0eSBzdHJpbmcgdG8gZGlzYWJsZS4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGJyb3dzZXJfYWxlcnQgPSAnU29ycnksIHRoZSBHb29nbGUgTWFwcyBBUEkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIGJyb3dzZXIuJzsKICAgIAogICAgLyoqCiAgICAgKiBtZXNzYWdlIHRoYXQgYXBwZWFycyB3aGVuIGphdmFzY3JpcHQgaXMgZGlzYWJsZWQuCiAgICAgKiBzZXQgdG8gZW1wdHkgc3RyaW5nIHRvIGRpc2FibGUuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRqc19hbGVydCA9ICc8Yj5KYXZhc2NyaXB0IG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UgR29vZ2xlIE1hcHMuPC9iPic7CgogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIGlmIHNpZGViYXIgaXMgZW5hYmxlZAogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJHNpZGViYXIgPSB0cnVlOyAgICAKCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgdG8vZnJvbSBkaXJlY3Rpb25zIGFyZSBpbmNsdWRlZCBpbnNpZGUgaW5mbyB3aW5kb3cKICAgICAqIAogICAgICogQHZhciBib29sCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICB2YXIgJGRpcmVjdGlvbnMgPSB0cnVlOwoKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyBpZiBtYXAgbWFya2VycyBicmluZyB1cCBhbiBpbmZvIHdpbmRvdwogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJGluZm9fd2luZG93ID0gdHJ1ZTsgICAgCiAgICAKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyBpZiBpbmZvIHdpbmRvdyBhcHBlYXJzIHdpdGggYSBjbGljayBvciBtb3VzZW92ZXIKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZyBjbGljay9tb3VzZW92ZXIKICAgICAqLwogICAgdmFyICR3aW5kb3dfdHJpZ2dlciA9ICdjbGljayc7ICAgIAoJCgkvKioKCSAqIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdG8gdXNlIHRoZSBNYXJrZXJDbHVzdGVyZXIgcGx1Z2luCgkgKi8KCSB2YXIgJG1hcmtlcl9jbHVzdGVyZXIgPSBmYWxzZTsKCSAKCSAvKioKCSAqIHNldCBkZWZhdWx0IG1hcmtlciBjbHVzdGVyZXIgKndlYnNlcnZlciogZmlsZSBsb2NhdGlvbgoJICovCgkgdmFyICRtYXJrZXJfY2x1c3RlcmVyX2xvY2F0aW9uID0gIi9NYXJrZXJDbHVzdGVyZXItMS4wL21hcmtlcmNsdXN0ZXJlcl9jb21waWxlZC5qcyI7CgkgCgkgLyoqCgkgKiBzZXQgZGVmYXVsdCBtYXJrZXIgY2x1c3RlcmVyIG9wdGlvbnMKCSAqLwoJIHZhciAkbWFya2VyX2NsdXN0ZXJlcl9vcHRpb25zID0gYXJyYXkoCgkgCSJtYXhab29tIj0+Im51bGwiLAoJCSJncmlkU2l6ZSI9PiJudWxsIiwKCQkic3R5bGVzIj0+Im51bGwiCgkgKTsKICAgIAogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIGlmIHRyYWZmaWMgb3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gbWFwCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHZhciAkdHJhZmZpY19vdmVybGF5ID0gZmFsc2U7CgkKCS8qKgogICAgICogZGV0ZXJtaW5lcyBpZiBiaWtpbmcgb3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gbWFwCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHZhciAkYmlraW5nX292ZXJsYXkgPSBmYWxzZTsgICAKCQoJLyoqCgkgKiBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIGRpc3BsYXkgc3RyZWV0IHZpZXcgY29udHJvbHMKCSAqLwoJdmFyICRzdHJlZXRfdmlld19jb250cm9scyA9IGZhbHNlOwoJCgkvKioKCSAqIElEIG9mIHRoZSBjb250YWluZXIgdGhhdCB3aWxsIGhvbGQgYSBzdHJlZXQgdmlldyBpZiBzdHJlZXR2aWV3IGNvbnRyb2xzID0gdHJ1ZS4KCSAqLwoJdmFyICRzdHJlZXRfdmlld19kb21faWQgPSAiIjsKICAgIAogICAgLyoqCiAgICAgKiB3aGF0IHNlcnZlciBnZW9jb2RlIGxvb2t1cHMgY29tZSBmcm9tCiAgICAgKgogICAgICogYXZhaWxhYmxlOiBZQUhPTyAgWWFob28hIEFQSS4gVVMgZ2VvY29kZSBsb29rdXBzIG9ubHkuCiAgICAgKiAgICAgICAgICAgIEdPT0dMRSBHb29nbGUgTWFwcy4gVGhpcyBjYW4gZG8gaW50ZXJuYXRpb25hbCBsb29rdXBzLAogICAgICogICAgICAgICAgICAgICAgICAgYnV0IG5vdCBhbiBvZmZpY2lhbCBBUEkgc2VydmljZSBzbyBubyBndWFyYW50ZWVzLgogICAgICogICAgICAgICAgICBOb3RlOiBHT09HTEUgaXMgdGhlIGRlZmF1bHQgbG9va3VwIHNlcnZpY2UsIHBsZWFzZSByZWFkCiAgICAgKiAgICAgICAgICAgICAgICAgIHRoZSBZYWhvbyEgdGVybXMgb2Ygc2VydmljZSBiZWZvcmUgdXNpbmcgdGhlaXIgQVBJLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nIHNlcnZpY2UgbmFtZQogICAgICovCiAgICB2YXIgJGxvb2t1cF9zZXJ2aWNlID0gJ0dPT0dMRSc7CiAgICB2YXIgJGxvb2t1cF9zZXJ2ZXIgPSBhcnJheSgnR09PR0xFJyA9PiAnbWFwcy5nb29nbGUuY29tJywgJ1lBSE9PJyA9PiAnYXBpLmxvY2FsLnlhaG9vLmNvbScpOwogICAgCiAgICAvKioKICAgICAqIAogICAgICogQHZhciBhcnJheQogICAgICogQGRlcHJlY2F0ZWQKICAgICAqLwogICAgdmFyICRkcml2aW5nX2Rpcl90ZXh0ID0gYXJyYXkoCiAgICAgICAgICAgICdkaXJfdG8nID0+ICdTdGFydCBhZGRyZXNzOiAoaW5jbHVkZSBhZGRyLCBjaXR5IHN0L3JlZ2lvbiknLAogICAgICAgICAgICAndG9fYnV0dG9uX3ZhbHVlJyA9PiAnR2V0IERpcmVjdGlvbnMnLAogICAgICAgICAgICAndG9fYnV0dG9uX3R5cGUnID0+ICdzdWJtaXQnLAogICAgICAgICAgICAnZGlyX2Zyb20nID0+ICdFbmQgYWRkcmVzczogKGluY2x1ZGUgYWRkciwgY2l0eSBzdC9yZWdpb24pJywKICAgICAgICAgICAgJ2Zyb21fYnV0dG9uX3ZhbHVlJyA9PiAnR2V0IERpcmVjdGlvbnMnLAogICAgICAgICAgICAnZnJvbV9idXR0b25fdHlwZScgPT4gJ3N1Ym1pdCcsCiAgICAgICAgICAgICdkaXJfdGV4dCcgPT4gJ0RpcmVjdGlvbnM6ICcsCiAgICAgICAgICAgICdkaXJfdG9oZXJlJyA9PiAnVG8gaGVyZScsCiAgICAgICAgICAgICdkaXJfZnJvbWhlcmUnID0+ICdGcm9tIGhlcmUnCiAgICAgICAgICAgICk7ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAKICAgIAogICAgLyoqCiAgICAgKiB2ZXJzaW9uIG51bWJlcgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkX3ZlcnNpb24gPSAnMy4wYmV0YSc7CgogICAgLyoqCiAgICAgKiBsaXN0IG9mIGFkZGVkIG1hcmtlcnMKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHZhciAkX21hcmtlcnMgPSBhcnJheSgpOwogICAgCiAgICAvKioKICAgICAqIG1heGltdW0gbG9uZ2l0dWRlIG9mIGFsbCBtYXJrZXJzCiAgICAgKiAKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgdmFyICRfbWF4X2xvbiA9IC0xMDAwMDAwOwogICAgCiAgICAvKioKICAgICAqIG1pbmltdW0gbG9uZ2l0dWRlIG9mIGFsbCBtYXJrZXJzCiAgICAgKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICB2YXIgJF9taW5fbG9uID0gMTAwMDAwMDsKICAgIAogICAgLyoqCiAgICAgKiBtYXggbGF0aXR1ZGUKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkX21heF9sYXQgPSAtMTAwMDAwMDsKICAgIAogICAgLyoqCiAgICAgKiBtaW4gbGF0aXR1ZGUKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkX21pbl9sYXQgPSAxMDAwMDAwOwogICAgCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgd2Ugc2hvdWxkIHpvb20gdG8gbWluaW11bSBsZXZlbCAoYWJvdmUgdGhpcy0+em9vbSB2YWx1ZSkgdGhhdCB3aWxsIGVuY29tcGFzcyBhbGwgbWFya2VycwogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJHpvb21fZW5jb21wYXNzID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIGZhY3RvciBieSB3aGljaCB0byBmdWRnZSB0aGUgYm91bmRhcmllcyBzbyB0aGF0IHdoZW4gd2Ugem9vbSBlbmNvbXBhc3MsIHRoZSBtYXJrZXJzIGFyZW4ndCB0b28gY2xvc2UgdG8gdGhlIGVkZ2UKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkYm91bmRzX2Z1ZGdlID0gMC4wMTsKCiAgICAvKioKICAgICAqIHVzZSB0aGUgZmlyc3Qgc3VnZ2VzdGlvbiBieSBhIGdvb2dsZSBsb29rdXAgaWYgZXhhY3QgbWF0Y2ggbm90IGZvdW5kCiAgICAgKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICB2YXIgJHVzZV9zdWdnZXN0ID0gZmFsc2U7CgogICAgCiAgICAvKioKICAgICAqIGxpc3Qgb2YgYWRkZWQgcG9seWxpbmVzCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICB2YXIgJF9wb2x5bGluZXMgPSBhcnJheSgpOwoJCgkvKioKCSAqIGxpc3Qgb2YgcG9seWxpbmVzIHRoYXQgc2hvdWxkIGhhdmUgYW4gZWxldmF0aW9uIHByb2ZpbGUgcmVuZGVyZWQuCgkgKi8KCXZhciAkX2VsZXZhdGlvbl9wb2x5bGluZXMgPSBhcnJheSgpOwoJCgkvKioKCSAqIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdG8gZGlzcGxheSBhIG1hcmtlciBvbiB0aGUgImxpbmUiIHdoZW4gCgkgKiBtb3VzaW5nIG92ZXIgdGhlIGVsZXZhdGlvbiBjaGFydAoJICovCgl2YXIgJGVsZXZhdGlvbl9tYXJrZXJzID0gdHJ1ZTsKCQoJLyoqCgkgKiBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIGRpc3BsYXkgYW4gZWxldmF0aW9uIGNoYXJ0IAoJICogZm9yIGRpcmVjdGlvbnMgdGhhdCBhcmUgYWRkZWQgdG8gdGhlIG1hcC4gIAoJICovCgl2YXIgJGVsZXZhdGlvbl9kaXJlY3Rpb25zID0gZmFsc2U7CiAgICAgICAgCiAgICAvKioKICAgICAqIGljb24gaW5mbyBhcnJheQogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAdmVyc2lvbiAyLjUgIAogICAgICovCiAgICB2YXIgJF9pY29ucyA9IGFycmF5KCk7ICAKICAgICAgIAogICAgLyoqCiAgICAgKiBtYXJrZXIgaWNvbiBpbmZvIGFycmF5CiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICogQHZlcnNpb24gMy4wCiAgICAgKi8KICAgIHZhciAkX21hcmtlcl9pY29ucyA9IGFycmF5KCk7CiAgICAKICAgIC8qKgogICAgICogRGVmYXVsdCBpY29uIGltYWdlIGxvY2F0aW9uLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkZGVmYXVsdF9pY29uID0gIiI7CiAgICAKICAgIC8qKgogICAgICogRGVmYXVsdCBpY29uIHNoYWRvdyBpbWFnZSBsb2NhdGlvbi4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGRlZmF1bHRfaWNvbl9zaGFkb3cgPSAiIjsKCQoJLyoqCiAgICAgKiBsaXN0IG9mIGFkZGVkIG92ZXJsYXlzCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICB2YXIgJF9vdmVybGF5cyA9IGFycmF5KCk7CiAgICAKICAgIC8qKgogICAgICogbGlzdCBvZiBhZGRlZCBrbWwgb3ZlcmxheXMKICAgICAqLwogICAgdmFyICRfa21sX292ZXJsYXlzID0gYXJyYXkoKTsKICAgICAgICAKCiAgICAvKioKICAgICAqIGRhdGFiYXNlIGNhY2hlIHRhYmxlIG5hbWUKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJF9kYl9jYWNoZV90YWJsZSA9ICdHRU9DT0RFUyc7CiAgICAKICAgIC8qKgogICAgICogQ2xhc3MgdmFyaWFibGUgdGhhdCB3aWxsIHN0b3JlIGdlbmVyYXRlZCBoZWFkZXIgY29kZSBmb3IgSlMgdG8gZGlzcGxheSBkaXJlY3Rpb25zCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRfZGlyZWN0aW9uc19oZWFkZXIgPSAnJzsKCQoJLyoqCgkgKiBDbGFzcyB2YXJpYWJsZSB0aGF0IHdpbGwgc3RvcmUgaW5mb3JtYXRpb24gdG8gcmVuZGVyIGRpcmVjdGlvbnMKCSAqLwoJdmFyICRfZGlyZWN0aW9ucyA9IGFycmF5KCk7CiAgICAKICAgIC8qKgogICAgICogQ2xhc3MgdmFyaWFibGUgdG8gc3RvcmUgd2hldGhlciBvciBub3QgdG8gZGlzcGxheSBKUyBmdW5jdGlvbnMgaW4gdGhlIGhlYWRlcgogICAgICovCiAgICB2YXIgJF9kaXNwbGF5X2pzX2Z1bmN0aW9ucyA9IHRydWU7CiAgICAKICAgIC8qKgogICAgICogQ2xhc3MgdmFyaWFibGUgdGhhdCB3aWxsIHN0b3JlIGZsYWcgdG8gbWluaWZ5IGpzIC0gdGhpcyBjYW4gYmUgb3ZlcndyaXR0ZW4gYWZ0ZXIgb2JqZWN0IGlzIGluc3RhbnRpYXRlZC4gIEluY2x1ZGUgSlNNaW4ucGhwIGlmIAoJICogeW91IHdhbnQgdG8gdXNlIEpTIE1pbmlmaWNhdGlvbi4KICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwoJIHZhciAkX21pbmlmeV9qcyA9IHRydWU7CiAgICAgICAgCiAgICAvKioKICAgICAqIGNsYXNzIGNvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWFwX2lkIHRoZSBET00gZWxlbWVudCBJRCBmb3IgdGhlIG1hcAogICAgICogQHBhcmFtIHN0cmluZyAkYXBwX2lkIFlPVVIgWWFob28gQXBwIElECiAgICAgKi8KICAgIGZ1bmN0aW9uIEdvb2dsZU1hcEFQSSgkbWFwX2lkID0gJ21hcCcsICRhcHBfaWQgPSAnTXlNYXBBcHAnKSB7CiAgICAgICAgJHRoaXMtPm1hcF9pZCA9ICRtYXBfaWQ7CiAgICAgICAgJHRoaXMtPnNpZGViYXJfaWQgPSAnc2lkZWJhcl8nIC4gJG1hcF9pZDsKICAgICAgICAkdGhpcy0+YXBwX2lkID0gJGFwcF9pZDsKICAgIH0KCQoJLyoqCgkgKiBmdW5jdGlvbiB0byBlbmFibGUgbWFwIGRpc3BsYXkKCSAqLwoJZnVuY3Rpb24gZW5hYmxlTWFwRGlzcGxheSgpewoJCSR0aGlzLT5kaXNwbGF5X21hcCA9IHRydWU7Cgl9CgkKCS8qKgoJICogZnVuY3Rpb24gdG8gZGlzYWJsZSBtYXAgZGlzcGxheSAodXNlZCB0byBkaXNwbGF5IHN0cmVldCB2aWV3IG9ubHkpCgkgKi8KCWZ1bmN0aW9uIGRpc2FibGVNYXBEaXNwbGF5KCl7CgkJJHRoaXMtPmRpc3BsYXlfbWFwID0gdHJ1ZTsKCX0KICAgIAogICAgLyoqCiAgICAgKiBzZXRzIHRoZSBQRUFSOjpEQiBkc24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkc24gVGFrZXMgdGhlIGZvcm0gb2YgIm15c3FsOi8vdXNlcjpwYXNzQGxvY2FsaG9zdC9kYl9uYW1lIgogICAgICovCiAgICBmdW5jdGlvbiBzZXREU04oJGRzbikgewogICAgICAgICR0aGlzLT5kc24gPSAkZHNuOyAgIAogICAgfQogICAgCiAgICAvKioKICAgICAqIHNldHMgdGhlIHdpZHRoIG9mIHRoZSBtYXAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3aWR0aAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgV2lkdGggb3IgZmFsc2UgaWYgbm90IGEgdmFsaWQgdmFsdWUKICAgICAqLwogICAgZnVuY3Rpb24gc2V0V2lkdGgoJHdpZHRoKSB7CiAgICAgICAgaWYoIXByZWdfbWF0Y2goJyFeKFxkKykoLiopJCEnLCR3aWR0aCwkX21hdGNoKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAkX3dpZHRoID0gJF9tYXRjaFsxXTsKICAgICAgICAkX3R5cGUgPSAkX21hdGNoWzJdOwogICAgICAgIGlmKCRfdHlwZSA9PSAnJScpCiAgICAgICAgICAgICR0aGlzLT53aWR0aCA9ICRfd2lkdGggLiAnJSc7CiAgICAgICAgZWxzZQogICAgICAgICAgICAkdGhpcy0+d2lkdGggPSAkX3dpZHRoIC4gJ3B4JzsKICAgICAgICAKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldHMgdGhlIGhlaWdodCBvZiB0aGUgbWFwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaGVpZ2h0CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBIZWlnaHQgb3IgZmFsc2UgaWYgbm90IGEgdmFsaWQgdmFsdWUKICAgICAqLwogICAgZnVuY3Rpb24gc2V0SGVpZ2h0KCRoZWlnaHQpIHsKICAgICAgICBpZighcHJlZ19tYXRjaCgnIV4oXGQrKSguKikkIScsJGhlaWdodCwkX21hdGNoKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAkX2hlaWdodCA9ICRfbWF0Y2hbMV07CiAgICAgICAgJF90eXBlID0gJF9tYXRjaFsyXTsKICAgICAgICBpZigkX3R5cGUgPT0gJyUnKQogICAgICAgICAgICAkdGhpcy0+aGVpZ2h0ID0gJF9oZWlnaHQgLiAnJSc7CiAgICAgICAgZWxzZQogICAgICAgICAgICAkdGhpcy0+aGVpZ2h0ID0gJF9oZWlnaHQgLiAncHgnOwogICAgICAgIAogICAgICAgIHJldHVybiB0cnVlOwogICAgfSAgCiAgICAgICAgICAKCiAgICAvKioKICAgICAqIHNldHMgdGhlIGRlZmF1bHQgbWFwIHpvb20gbGV2ZWwKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsZXZlbCBJbml0aWFsIHpvb20gbGV2ZWwgdmFsdWUKICAgICAqLwogICAgZnVuY3Rpb24gc2V0Wm9vbUxldmVsKCRsZXZlbCkgewogICAgICAgICR0aGlzLT56b29tID0gKGludCkgJGxldmVsOwogICAgfSAgICAKICAgICAgICAgICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgdGhlIG1hcCBjb250cm9scyAoem9vbS9tb3ZlKQogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlTWFwQ29udHJvbHMoKSB7CiAgICAgICAgJHRoaXMtPm1hcF9jb250cm9scyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyB0aGUgbWFwIGNvbnRyb2xzICh6b29tL21vdmUpCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlTWFwQ29udHJvbHMoKSB7CiAgICAgICAgJHRoaXMtPm1hcF9jb250cm9scyA9IGZhbHNlOwogICAgfSAKICAgIAogICAgLyoqCiAgICAgKiBzZXRzIHRoZSBtYXAgY29udHJvbCBzaXplIChsYXJnZS9zbWFsbCkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaXplIExhcmdlL1NtYWxsCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENvbnRyb2xTaXplKCRzaXplKSB7CiAgICAgICAgaWYoaW5fYXJyYXkoJHNpemUsYXJyYXkoJ2xhcmdlJywnc21hbGwnKSkpCiAgICAgICAgICAgICR0aGlzLT5jb250cm9sX3NpemUgPSAkc2l6ZTsKICAgIH0gICAgICAgICAgICAKCiAgICAgLyoqCiAgICAgKiBlbmFibGVzIHRoZSB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZUxvY2FsU2VhcmNoKCkgewogICAgICAgICR0aGlzLT5sb2NhbF9zZWFyY2ggPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogZGlzYWJsZXMgdGhlIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkKQogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZUxvY2FsU2VhcmNoKCkgewogICAgICAgICR0aGlzLT5sb2NhbF9zZWFyY2ggPSBmYWxzZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIHRoZSB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZUxvY2FsU2VhcmNoQWRzKCkgewogICAgICAgICR0aGlzLT5sb2NhbF9zZWFyY2hfYWRzID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIGRpc2FibGVzIHRoZSB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVMb2NhbFNlYXJjaEFkcygpIHsKICAgICAgICAkdGhpcy0+bG9jYWxfc2VhcmNoX2FkcyA9IGZhbHNlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgd2Fsa2luZyBkaXJlY3Rpb25zCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlV2Fsa2luZ0RpcmVjdGlvbnMoKSB7CiAgICAgICAgJHRoaXMtPndhbGtpbmdfZGlyZWN0aW9ucyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyB3YWxraW5nIGRpcmVjdGlvbnMKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlV2Fsa2luZ0RpcmVjdGlvbnMoKSB7CiAgICAgICAgJHRoaXMtPndhbGtpbmdfZGlyZWN0aW9ucyA9IGZhbHNlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgYmlraW5nIGRpcmVjdGlvbnMKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVCaWtpbmdEaXJlY3Rpb25zKCkgewogICAgICAgICR0aGlzLT5iaWtpbmdfZGlyZWN0aW9ucyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyBiaWtpbmcgZGlyZWN0aW9ucwogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVCaWtpbmdEaXJlY3Rpb25zKCkgewogICAgICAgICR0aGlzLT5iaWtpbmdfZGlyZWN0aW9ucyA9IGZhbHNlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgYXZvaWQgaGlnaHdheXMgaW4gZGlyZWN0aW9ucwogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZUF2b2lkSGlnaHdheXMoKSB7CiAgICAgICAgJHRoaXMtPmF2b2lkX2hpZ2h3YXlzID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIGRpc2FibGVzIGF2b2lkIGhpZ2h3YXlzIGluIGRpcmVjdGlvbnMKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlQXZvaWRIaWdod2F5cygpIHsKICAgICAgICAkdGhpcy0+YXZvaWRfaGlnaHdheXMgPSBmYWxzZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIGF2b2lkIHRvbGxzIGluIGRpcmVjdGlvbnMKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVBdm9pZFRvbGxzKCkgewogICAgICAgICR0aGlzLT5hdm9pZF90b2xscyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyBhdm9pZCB0b2xscyBpbiBkaXJlY3Rpb25zCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZUF2b2lkVG9sbHMoKSB7CiAgICAgICAgJHRoaXMtPmF2b2lkX3RvbGxzID0gZmFsc2U7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogQWRkIGRpcmVjdGlvbnMgcm91dGUgdG8gdGhlIG1hcCBhbmQgYWRkcyB0ZXh0IGRpcmVjdGlvbnMgY29udGFpbmVyIHdpdGggaWQ9JGRvbV9pZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YXJ0X2FkZHJlc3MKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc3RfYWRkcmVzcwogICAgICogQHBhcmFtIHN0cmluZyAkZG9tX2lkIERPTSBFbGVtZW50IElEIGZvciBkaXJlY3Rpb25zIGNvbnRhaW5lci4KICAgICAqIEBwYXJhbSBib29sICRhZGRfbWFya2VycyBBZGQgYSBtYXJrZXIgYXQgc3RhcnQgYW5kIGRlc3QgbG9jYXRpb25zLgogICAgICovCiAgICBmdW5jdGlvbiBhZGREaXJlY3Rpb25zKCRzdGFydF9hZGRyZXNzPScnLCRkZXN0X2FkZHJlc3M9JycsJGRvbV9pZD0nJywgJGFkZF9tYXJrZXJzPXRydWUsICRlbGV2YXRpb25fc2FtcGxlcz0yNTYsICRlbGV2YXRpb25fd2lkdGg9IiIsICRlbGV2YXRpb25faGVpZ2h0PSIiLCAkZWxldmF0aW9uX2RvbV9pZD0nJyl7CgkJaWYoJGVsZXZhdGlvbl9kb21faWQ9PSIiKQoJCQkkZWxldmF0aW9uX2RvbV9pZCA9ICJlbGV2YXRpb24iLiRkb21faWQ7CgkJCiAgICAgICAgaWYoJHN0YXJ0X2FkZHJlc3MgIT0gJycgJiYgJGRlc3RfYWRkcmVzcyAhPSAnJyAmJiAkZG9tX2lkICE9ICcnKXsKCQkJJHRoaXMtPl9kaXJlY3Rpb25zWyRkb21faWRdID0gYXJyYXkoCgkJCQkiZG9tX2lkIj0+JGRvbV9pZCwKCQkJCSJzdGFydCI9PiRzdGFydF9hZGRyZXNzLAoJCQkJImRlc3QiPT4kZGVzdF9hZGRyZXNzLAoJCQkJIm1hcmtlcnMiPT50cnVlLAoJCQkJImVsZXZhdGlvbl9zYW1wbGVzIj0+JGVsZXZhdGlvbl9zYW1wbGVzLAoJCQkJIndpZHRoIj0+KCRlbGV2YXRpb25fd2lkdGghPSIiPyRlbGV2YXRpb25fd2lkdGg6c3RyX3JlcGxhY2UoInB4IiwiIiwkdGhpcy0+d2lkdGgpKSwKCQkJCSJoZWlnaHQiPT4oJGVsZXZhdGlvbl9oZWlnaHQhPSIiPyRlbGV2YXRpb25faGVpZ2h0OnN0cl9yZXBsYWNlKCJweCIsIiIsJHRoaXMtPmhlaWdodCkvMiksCgkJCQkiZWxldmF0aW9uX2RvbV9pZCI9PiRlbGV2YXRpb25fZG9tX2lkCgkJCSk7CQkJCgkJCWlmKCRhZGRfbWFya2Vycz09dHJ1ZSl7CgkJCQkkdGhpcy0+YWRkTWFya2VyQnlBZGRyZXNzKCRzdGFydF9hZGRyZXNzLCRzdGFydF9hZGRyZXNzLCAkc3RhcnRfYWRkcmVzcyk7CgkJCQkkdGhpcy0+YWRkTWFya2VyQnlBZGRyZXNzKCRkZXN0X2FkZHJlc3MsJGRlc3RfYWRkcmVzcywgJGRlc3RfYWRkcmVzcyk7CgkJCX0gCiAgICAgICAgfQogICAgfQogICAgICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIHRoZSB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVR5cGVDb250cm9scygpIHsKICAgICAgICAkdGhpcy0+dHlwZV9jb250cm9scyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyB0aGUgdHlwZSBjb250cm9scyAobWFwL3NhdGVsbGl0ZS9oeWJyaWQpCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlVHlwZUNvbnRyb2xzKCkgewogICAgICAgICR0aGlzLT50eXBlX2NvbnRyb2xzID0gZmFsc2U7CiAgICB9CgkKCS8qKgoJICogc2V0cyBtYXAgY29udHJvbCBzdHlsZQoJICovCglmdW5jdGlvbiBzZXRUeXBlQ29udHJvbHNTdHlsZSgkdHlwZSl7CgkJc3dpdGNoKCR0eXBlKXsKCQkJY2FzZSAiZHJvcGRvd24iOgoJCQkJJHRoaXMtPnR5cGVfY29udHJvbHNfc3R5bGUgPSAiRFJPUERPV05fTUVOVSI7CgkJCQlicmVhazsKCQkJY2FzZSAiaG9yaXpvbnRhbCI6CgkJCQkkdGhpcy0+dHlwZV9jb250cm9sc19zdHlsZSA9ICJIT1JJWk9OVEFMX0JBUiI7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCSR0aGlzLT50eXBlX2NvbnRyb2xzX3N0eWxlID0gIkRFRkFVTFQiOwoJCQkJYnJlYWs7CgkJfQoJfQoJCiAgICAvKioKICAgICAqIHNldCBkZWZhdWx0IG1hcCB0eXBlIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlIE5ldyBWMyBNYXAgVHlwZXMsIG9ubHkgaW5jbHVkZSBlbmRpbmcgd29yZCAoSFlCUklELFNBVEVMTElURSxURVJSQUlOLFJPQURNQVApCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldE1hcFR5cGUoJHR5cGUpIHsKICAgICAgICBzd2l0Y2goJHR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnaHlicmlkJzoKICAgICAgICAgICAgICAgICR0aGlzLT5tYXBfdHlwZSA9ICdIWUJSSUQnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3NhdGVsbGl0ZSc6CiAgICAgICAgICAgICAgICAkdGhpcy0+bWFwX3R5cGUgPSAnU0FURUxMSVRFJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd0ZXJyYWluJzoKICAgICAgICAgICAgICAgICR0aGlzLT5tYXBfdHlwZSA9ICdURVJSQUlOJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdtYXAnOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJHRoaXMtPm1hcF90eXBlID0gJ1JPQURNQVAnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSAgICAgICAKICAgIH0JICAgCgkgICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgb25sb2FkCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVPbkxvYWQoKSB7CiAgICAgICAgJHRoaXMtPm9ubG9hZCA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyBvbmxvYWQKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVPbkxvYWQoKSB7CiAgICAgICAgJHRoaXMtPm9ubG9hZCA9IGZhbHNlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgc2lkZWJhcgogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlU2lkZWJhcigpIHsKICAgICAgICAkdGhpcy0+c2lkZWJhciA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyBzaWRlYmFyCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlU2lkZWJhcigpIHsKICAgICAgICAkdGhpcy0+c2lkZWJhciA9IGZhbHNlOwogICAgfSAgICAKCiAgICAvKioKICAgICAqIGVuYWJsZXMgbWFwIGRpcmVjdGlvbnMgaW5zaWRlIGluZm8gd2luZG93CiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVEaXJlY3Rpb25zKCkgewogICAgICAgICR0aGlzLT5kaXJlY3Rpb25zID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIGRpc2FibGVzIG1hcCBkaXJlY3Rpb25zIGluc2lkZSBpbmZvIHdpbmRvdwogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZURpcmVjdGlvbnMoKSB7CiAgICAgICAgJHRoaXMtPmRpcmVjdGlvbnMgPSBmYWxzZTsKICAgIH0gICAgCiAgICAgICAgCiAgICAvKioKICAgICAqIHNldCBicm93c2VyIGFsZXJ0IG1lc3NhZ2UgZm9yIGluY29tcGF0aWJsZSBicm93c2VycwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqLwogICAgZnVuY3Rpb24gc2V0QnJvd3NlckFsZXJ0KCRtZXNzYWdlKSB7CiAgICAgICAgJHRoaXMtPmJyb3dzZXJfYWxlcnQgPSAkbWVzc2FnZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCA8bm9zY3JpcHQ+IG1lc3NhZ2Ugd2hlbiBqYXZhc2NyaXB0IGlzIGRpc2FibGVkCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICovCiAgICBmdW5jdGlvbiBzZXRKU0FsZXJ0KCRtZXNzYWdlKSB7CiAgICAgICAgJHRoaXMtPmpzX2FsZXJ0ID0gJG1lc3NhZ2U7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlIHRyYWZmaWMgb3ZlcmxheSAKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlVHJhZmZpY092ZXJsYXkoKSB7CiAgICAgICAgJHRoaXMtPnRyYWZmaWNfb3ZlcmxheT0gdHJ1ZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBkaXNhYmxlIHRyYWZmaWMgb3ZlcmxheSAoZGVmYXVsdCkKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZVRyYWZmaWNPdmVybGF5KCkgewogICAgICAgICR0aGlzLT50cmFmZmljX292ZXJsYXk9IGZhbHNlOwogICAgfQoJCgkvKioKICAgICAqIGVuYWJsZSBiaWtpbmcgb3ZlcmxheSAKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlQmlraW5nT3ZlcmxheSgpIHsKICAgICAgICAkdGhpcy0+YmlraW5nX292ZXJsYXk9IHRydWU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZGlzYWJsZSBiaWtpbmcgb3ZlcmxheSAoZGVmYXVsdCkKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZUJpa2luZ092ZXJsYXkoKSB7CiAgICAgICAgJHRoaXMtPmJpa2luZ19vdmVybGF5PSBmYWxzZTsKICAgIH0KCQoJLyoqCiAgICAgKiBlbmFibGUgYmlraW5nIG92ZXJsYXkgCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVN0cmVldFZpZXdDb250cm9scygpIHsKICAgICAgICAkdGhpcy0+c3RyZWV0X3ZpZXdfY29udHJvbHM9IHRydWU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZGlzYWJsZSBiaWtpbmcgb3ZlcmxheSAoZGVmYXVsdCkKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZVN0cmVldFZpZXdDb250cm9scygpIHsKICAgICAgICAkdGhpcy0+c3RyZWV0X3ZpZXdfY29udHJvbHM9IGZhbHNlOwogICAgfQoJCgkvKioKCSAqIGF0dGFjaCBhIGRvbSBpZCBvYmplY3QgYXMgYSBzdHJlZXR2aWV3IGNvbnRhaW5lciB0byB0aGUgbWFwCgkgKiBOT1RFOiBPbmx5IG9uZSBjb250YWluZXIgY2FuIGJlIGF0dGFjaGVkIHRvIGEgbWFwLgoJICoqLwoJZnVuY3Rpb24gYXR0YWNoU3RyZWV0Vmlld0NvbnRhaW5lcigkZG9tX2lkKXsKCQkkdGhpcy0+c3RyZWV0X3ZpZXdfZG9tX2lkID0gJGRvbV9pZDsKCX0KICAgIAogICAgLyoqCiAgICAgKiBlbmFibGUgR29vZ2xlIEFkc2Vuc2UgYWRtYW5hZ2VyIG9uIE1hcCAobm90IHN1cHBvcnRlZCBpbiBWMyBBUEkpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZUFkcygpewogICAgICAgICR0aGlzLT5hZHNfbWFuYWdlciA9IHRydWU7IAogICAgfQogICAgCiAgICAvKioKICAgICAqIGRpc2FibGUgR29vZ2xlIEFkc2Vuc2UgYWRtYW5hZ2VyIG9uIE1hcCAobm90IHN1cHBvcnRlZCBpbiBWMyBBUEkpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVBZHMoKXsKICAgICAgICAkdGhpcy0+YWRzX21hbmFnZXIgPSBmYWxzZTsgCiAgICB9CiAgICAKCiAgICAvKioKICAgICAqIGVuYWJsZSBtYXAgbWFya2VyIGluZm8gd2luZG93cwogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVJbmZvV2luZG93KCkgewogICAgICAgICR0aGlzLT5pbmZvX3dpbmRvdyA9IHRydWU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZGlzYWJsZSBtYXAgbWFya2VyIGluZm8gd2luZG93cwogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlSW5mb1dpbmRvdygpIHsKICAgICAgICAkdGhpcy0+aW5mb193aW5kb3cgPSBmYWxzZTsKICAgIH0KCQoJLyoqCgkgKiBlbmFibGUgZWxldmF0aW9uIG1hcmtlciB0byBiZSBkaXNwbGF5ZWQKCSAqLwoJIGZ1bmN0aW9uIGVuYWJsZUVsZXZhdGlvbk1hcmtlcigpewoJCSAkdGhpcy0+ZWxldmF0aW9uX21hcmtlcnMgPSB0cnVlOwoJIH0KCSAKCSAvKioKCSAqIGRpc2FibGUgZWxldmF0aW9uIG1hcmtlcgoJICovCgkgZnVuY3Rpb24gZGlzYWJsZUVsZXZhdGlvbk1hcmtlcigpewoJCSAkdGhpcy0+ZWxldmF0aW9uX21hcmtlcnMgPSBmYWxzZTsKCSB9CgkgCgkgLyoqCgkgKiBlbmFibGUgZWxldmF0aW9uIHRvIGJlIGRpc3BsYXllZCBmb3IgZGlyZWN0aW9ucwoJICovCgkgZnVuY3Rpb24gZW5hYmxlRWxldmF0aW9uRGlyZWN0aW9ucygpewoJCSAkdGhpcy0+ZWxldmF0aW9uX2RpcmVjdGlvbnMgPSB0cnVlOwoJIH0KCSAKCSAvKioKCSAqIGRpc2FibGUgZWxldmF0aW9uIHRvIGJlIGRpc3BsYXllZCBmb3IgZGlyZWN0aW9ucwoJICovCgkgZnVuY3Rpb24gZGlzYWJsZUVsZXZhdGlvbkRpcmVjdGlvbnMoKXsKCQkgJHRoaXMtPmVsZXZhdGlvbl9kaXJlY3Rpb25zID0gZmFsc2U7CgkgfQogICAgCiAgICAvKioKICAgICAqIGVuYWJsZSBtYXAgbWFya2VyIGNsdXN0ZXJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlQ2x1c3RlcmluZygpIHsKICAgICAgICAkdGhpcy0+bWFya2VyX2NsdXN0ZXJlciA9IHRydWU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZGlzYWJsZSBtYXAgbWFya2VyIGNsdXN0ZXJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZUNsdXN0ZXJpbmcoKSB7CiAgICAgICAgJHRoaXMtPm1hcmtlcl9jbHVzdGVyZXIgPSBmYWxzZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBzZXQgY2x1c3RlcmluZyBvcHRpb25zCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENsdXN0ZXJPcHRpb25zKCR6b29tPSJudWxsIiwgJGdyaWRzaXplPSJudWxsIiwgJHN0eWxlcz0ibnVsbCIpewogICAgCSR0aGlzLT5tYXJrZXJfY2x1c3RlcmVyX29wdGlvbnNbIm1heFpvb20iXT0kem9vbTsKICAgIAkkdGhpcy0+bWFya2VyX2NsdXN0ZXJlcl9vcHRpb25zWyJncmlkU2l6ZSJdPSRncmlkc2l6ZTsKICAgIAkkdGhpcy0+bWFya2VyX2NsdXN0ZXJlcl9vcHRpb25zWyJzdHlsZXMiXT0kc3R5bGVzOwogICAgfSAgIAoKICAgIC8qKgogICAgICogU2V0IGNsdXN0ZXJpbmcgbGlicmFyeSBmaWxlIGxvY2F0aW9uCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENsdXN0ZXJMb2NhdGlvbigkZmlsZSl7CiAgICAJJHRoaXMtPm1hcmtlcl9jbHVzdGVyZXJfbG9jYXRpb249JGZpbGU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogc2V0IHRoZSBpbmZvIHdpbmRvdyB0cmlnZ2VyIGFjdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgY2xpY2svbW91c2VvdmVyCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldEluZm9XaW5kb3dUcmlnZ2VyKCR0eXBlKSB7CiAgICAgICAgc3dpdGNoKCR0eXBlKSB7CiAgICAgICAgICAgIGNhc2UgJ21vdXNlb3Zlcic6CiAgICAgICAgICAgICAgICAkdGhpcy0+d2luZG93X3RyaWdnZXIgPSAnbW91c2VvdmVyJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJHRoaXMtPndpbmRvd190cmlnZ2VyID0gJ2NsaWNrJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBlbmFibGUgem9vbSB0byBlbmNvbXBhc3MgbWFrZXJzCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVpvb21FbmNvbXBhc3MoKSB7CiAgICAgICAgJHRoaXMtPnpvb21fZW5jb21wYXNzID0gdHJ1ZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBkaXNhYmxlIHpvb20gdG8gZW5jb21wYXNzIG1ha2VycwogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlWm9vbUVuY29tcGFzcygpIHsKICAgICAgICAkdGhpcy0+em9vbV9lbmNvbXBhc3MgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCB0aGUgYm91bmRhcnkgZnVkZ2UgZmFjdG9yCiAgICAgKiBAcGFyYW0gZmxvYXQKICAgICAqLwogICAgZnVuY3Rpb24gc2V0Qm91bmRzRnVkZ2UoJHZhbCkgewogICAgICAgICR0aGlzLT5ib3VuZHNfZnVkZ2UgPSAkdmFsOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgdGhlIHNjYWxlIG1hcCBjb250cm9sCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVTY2FsZUNvbnRyb2woKSB7CiAgICAgICAgJHRoaXMtPnNjYWxlX2NvbnRyb2wgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogZGlzYWJsZXMgdGhlIHNjYWxlIG1hcCBjb250cm9sCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlU2NhbGVDb250cm9sKCkgewogICAgICAgICR0aGlzLT5zY2FsZV9jb250cm9sID0gZmFsc2U7CiAgICB9ICAgIAogICAgICAgICAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyB0aGUgb3ZlcnZpZXcgbWFwIGNvbnRyb2wKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZU92ZXJ2aWV3Q29udHJvbCgpIHsKICAgICAgICAkdGhpcy0+b3ZlcnZpZXdfY29udHJvbCA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyB0aGUgb3ZlcnZpZXcgbWFwIGNvbnRyb2wKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVPdmVydmlld0NvbnRyb2woKSB7CiAgICAgICAgJHRoaXMtPm92ZXJ2aWV3X2NvbnRyb2wgPSBmYWxzZTsKICAgICB9ICAgIAogICAgCiAgICAKICAgIC8qKgogICAgICogc2V0IHRoZSBsb29rdXAgc2VydmljZSB0byB1c2UgZm9yIGdlb2NvZGUgbG9va3VwcwogICAgICogZGVmYXVsdCBpcyBZQUhPTywgeW91IGNhbiBhbHNvIHVzZSBHT09HTEUuCiAgICAgKiBOT1RFOiBHT09HTEUgY2FuIHRvIGludGwgbG9va3VwcywgYnV0IGlzIG5vdCBhbgogICAgICogb2ZmaWNpYWwgQVBJLCBzbyB1c2UgYXQgeW91ciBvd24gcmlzay4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJ2aWNlCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICBmdW5jdGlvbiBzZXRMb29rdXBTZXJ2aWNlKCRzZXJ2aWNlKSB7CiAgICAgICAgc3dpdGNoKCRzZXJ2aWNlKSB7CiAgICAgICAgICAgIGNhc2UgJ0dPT0dMRSc6CiAgICAgICAgICAgICAgICAkdGhpcy0+bG9va3VwX3NlcnZpY2UgPSAnR09PR0xFJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdZQUhPTyc6CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAkdGhpcy0+bG9va3VwX3NlcnZpY2UgPSAnWUFIT08nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSAgICAgICAKICAgIH0KICAgIAogICAgICAgIAogICAgLyoqCiAgICAgKiBhZGRzIGEgbWFwIG1hcmtlciBieSBhZGRyZXNzIC0gREVQUkVDQVRJT04gV0FSTklORzogVGFicyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiBWMywgaWYgdGhpcyBjaGFuZ2VzIHRoaXMgY2FuIGJlIGVhc2lseSB1cGRhdGVkLgogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzIHRoZSBtYXAgYWRkcmVzcyB0byBtYXJrIChzdHJlZXQvY2l0eS9zdGF0ZS96aXApCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0aXRsZSB0aGUgdGl0bGUgZGlzcGxheSBpbiB0aGUgc2lkZWJhcgogICAgICogQHBhcmFtIHN0cmluZyAkaHRtbCB0aGUgSFRNTCBibG9jayB0byBkaXNwbGF5IGluIHRoZSBpbmZvIGJ1YmJsZSAoaWYgZW1wdHksIHRpdGxlIGlzIHVzZWQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0b29sdGlwIFRvb2x0aXAgdG8gZGlzcGxheSAoZGVwcmVjYXRlZD8pCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uX2ZpbGVuYW1lIFdlYiBmaWxlIGxvY2F0aW9uIChlZyBodHRwOi8vc29tZXNpdGUvc29tZWljb24uZ2lmKSB0byB1c2UgZm9yIGljb24KICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25fc2hhZG93X2ZpbGVuYW1lIFdlYiBmaWxlIGxvY2F0aW9uIChlZyBodHRwOi8vc29tZXNpdGUvc29tZWljb24uZ2lmKSB0byB1c2UgZm9yIGljb24gc2hhZG93CiAgICAgKiBAcmV0dXJuIGludHxib29sCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZE1hcmtlckJ5QWRkcmVzcygkYWRkcmVzcywkdGl0bGUgPSAnJywkaHRtbCA9ICcnLCR0b29sdGlwID0gJycsICRpY29uX2ZpbGVuYW1lID0gJycsICRpY29uX3NoYWRvd19maWxlbmFtZT0nJykgewogICAgICAgIGlmKCgkX2dlb2NvZGUgPSAkdGhpcy0+Z2V0R2VvY29kZSgkYWRkcmVzcykpID09PSBmYWxzZSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiAkdGhpcy0+YWRkTWFya2VyQnlDb29yZHMoJF9nZW9jb2RlWydsb24nXSwkX2dlb2NvZGVbJ2xhdCddLCR0aXRsZSwkaHRtbCwkdG9vbHRpcCwgJGljb25fZmlsZW5hbWUsICRpY29uX3NoYWRvd19maWxlbmFtZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBhZGRzIGEgbWFwIG1hcmtlciBieSBsYXQvbG5nIGNvb3JkaW5hdGVzIC0gREVQUkVDQVRJT04gV0FSTklORzogVGFicyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiBWMywgaWYgdGhpcyBjaGFuZ2VzIHRoaXMgY2FuIGJlIGVhc2lseSB1cGRhdGVkLgogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb24gdGhlIG1hcCBsb25naXR1ZGUgKGhvcml6b250YWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQgdGhlIG1hcCBsYXRpdHVkZSAodmVydGljYWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0aXRsZSB0aGUgdGl0bGUgZGlzcGxheSBpbiB0aGUgc2lkZWJhcgogICAgICogQHBhcmFtIHN0cmluZyAkaHRtbCB0aGUgSFRNTCBibG9jayB0byBkaXNwbGF5IGluIHRoZSBpbmZvIGJ1YmJsZSAoaWYgZW1wdHksIHRpdGxlIGlzIHVzZWQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0b29sdGlwIFRvb2x0aXAgdG8gZGlzcGxheSAoZGVwcmVjYXRlZD8pCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uX2ZpbGVuYW1lIFdlYiBmaWxlIGxvY2F0aW9uIChlZyBodHRwOi8vc29tZXNpdGUvc29tZWljb24uZ2lmKSB0byB1c2UgZm9yIGljb24KICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25fc2hhZG93X2ZpbGVuYW1lIFdlYiBmaWxlIGxvY2F0aW9uIChlZyBodHRwOi8vc29tZXNpdGUvc29tZWljb24uZ2lmKSB0byB1c2UgZm9yIGljb24gc2hhZG93CiAgICAgKiBAcmV0dXJuIGludHxib29sICAgIAogICAgICovCiAgICBmdW5jdGlvbiBhZGRNYXJrZXJCeUNvb3JkcygkbG9uLCRsYXQsJHRpdGxlID0gJycsJGh0bWwgPSAnJywkdG9vbHRpcCA9ICcnLCAkaWNvbl9maWxlbmFtZSA9ICcnLCAkaWNvbl9zaGFkb3dfZmlsZW5hbWU9JycpIHsKICAgICAgICAkX21hcmtlclsnbG9uJ10gPSAkbG9uOwogICAgICAgICRfbWFya2VyWydsYXQnXSA9ICRsYXQ7CiAgICAgICAgJF9tYXJrZXJbJ2h0bWwnXSA9IChpc19hcnJheSgkaHRtbCkgfHwgc3RybGVuKCRodG1sKSA+IDApID8gJGh0bWwgOiAkdGl0bGU7CiAgICAgICAgJF9tYXJrZXJbJ3RpdGxlJ10gPSAkdGl0bGU7CiAgICAgICAgJF9tYXJrZXJbJ3Rvb2x0aXAnXSA9ICR0b29sdGlwOwogICAgICAgIAogICAgICAgIGlmKCRpY29uX2ZpbGVuYW1lIT0iIil7CiAgICAgICAgICAgICRfbWFya2VyWydpY29uX2tleSddID0gJHRoaXMtPnNldE1hcmtlckljb25LZXkoJGljb25fZmlsZW5hbWUsICRpY29uX3NoYWRvd19maWxlbmFtZSk7CiAgICAgICAgICAgIGlmKCRpY29uX3NoYWRvd19maWxlbmFtZSE9IiIpewogICAgICAgICAgICAgICAkX21hcmtlclsnc2hhZG93X2ljb24nXT0xOwogICAgICAgICAgICB9ICAgCiAgICAgICAgfWVsc2UgaWYoICR0aGlzLT5kZWZhdWx0X2ljb24gIT0gJycpewogICAgICAgIAkkX21hcmtlclsnaWNvbl9rZXknXSA9ICR0aGlzLT5zZXRNYXJrZXJJY29uS2V5KCR0aGlzLT5kZWZhdWx0X2ljb24sICR0aGlzLT5kZWZhdWx0X2ljb25fc2hhZG93KTsKICAgICAgICAJaWYoJHRoaXMtPmRlZmF1bHRfaWNvbl9zaGFkb3chPSIiKXsKICAgICAgICAJICAgJF9tYXJrZXJbJ3NoYWRvd19pY29uJ109MTsKICAgICAgICAJfQogICAgICAgIH0gICAgICAgIAogICAgICAgICR0aGlzLT5fbWFya2Vyc1tdID0gJF9tYXJrZXI7CiAgICAgICAgJHRoaXMtPmFkanVzdENlbnRlckNvb3JkcygkX21hcmtlclsnbG9uJ10sJF9tYXJrZXJbJ2xhdCddKTsKICAgICAgICAvLyByZXR1cm4gaW5kZXggb2YgbWFya2VyCiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5fbWFya2VycykgLSAxOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGFkZHMgYSBET00gb2JqZWN0IElEIHRvIHNwZWNpZmllZCBtYXJrZXIgdG8gb3BlbiB0aGUgbWFya2VyJ3MgaW5mbyB3aW5kb3cuCiAgICAgKiAgIERvZXMgbm90aGluZyBpZiB0aGUgaW5mbyB3aW5kb3dzIGlzIGRpc2FibGVkLgogICAgICogQHBhcmFtIHN0cmluZyAkbWFya2VyX2lkIElEIG9mIHRoZSBtYXJrZXIgdG8gYXNzb2NpYXRlIHRvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkb21faWQgSUQgb2YgdGhlIERPTSBvYmplY3QgdG8gdXNlIHRvIG9wZW4gbWFya2VyIGluZm8gd2luZG93CiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZS9mYWxzZSBzdGF0dXMKICAgICAqLwogICAgZnVuY3Rpb24gYWRkTWFya2VyT3BlbmVyKCRtYXJrZXJfaWQsICRkb21faWQpewogICAgCWlmKCR0aGlzLT5pbmZvX3dpbmRvdyA9PT0gZmFsc2UgfHwgIWlzc2V0KCR0aGlzLT5fbWFya2Vyc1skbWFya2VyX2lkXSkpCiAgICAJICAgcmV0dXJuIGZhbHNlOwogICAgCWlmKCFpc3NldCgkdGhpcy0+X21hcmtlcnNbJG1hcmtlcl9pZF1bIm9wZW5lcnMiXSkpCiAgICAJICAgJHRoaXMtPl9tYXJrZXJzWyRtYXJrZXJfaWRdWyJvcGVuZXJzIl0gPSBhcnJheSgpOwogICAgICAgICR0aGlzLT5fbWFya2Vyc1skbWFya2VyX2lkXVsib3BlbmVycyJdW10gPSAkZG9tX2lkOyAgICAJICAgCiAgICB9CiAgICAKICAgIC8qKgogICAgICogYWRkcyBwb2x5bGluZSBieSBwYXNzZWQgYXJyYXkKICAgICAqIGlmIGNvbG9yLCB3ZWlnaHQgYW5kIG9wYWNpdHkgYXJlIG5vdCBkZWZpbmVkLCB1c2UgdGhlIGdvb2dsZSBtYXBzIGRlZmF1bHRzCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBvbHlsaW5lX2FycmF5IGFycmF5IG9mIGxhdC9sb25nIGNvb3JkcwogICAgICogQHBhcmFtIHN0cmluZyAkaWQgQW4gYXJyYXkgaWQgdG8gdXNlIHRvIGFwcGVuZCBjb29yZGluYXRlcyB0byBhIGxpbmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbG9yIHRoZSBjb2xvciBvZiB0aGUgbGluZSAoZm9ybWF0OiAjMDAwMDAwKQogICAgICogQHBhcmFtIHN0cmluZyAkd2VpZ2h0IHRoZSB3ZWlnaHQgb2YgdGhlIGxpbmUgaW4gcGl4ZWxzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcGFjaXR5IHRoZSBsaW5lIG9wYWNpdHkgKHBlcmNlbnRhZ2UpCiAgICAgKiBAcmV0dXJuIGJvb2x8aW50IEFycmF5IGlkIG9mIG5ld2x5IGFkZGVkIHBvaW50IG9yIGZhbHNlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZFBvbHlsaW5lQnlDb29yZHNBcnJheSgkcG9seWxpbmVfYXJyYXksJGlkPWZhbHNlLCRjb2xvcj0nJywkd2VpZ2h0PTAsJG9wYWNpdHk9MCl7CiAgICAJaWYoIWlzX2FycmF5KCRwb2x5bGluZV9hcnJheSkgfHwgc2l6ZW9mKCRwb2x5bGluZV9hcnJheSkgPCAyKQogICAgCSAgIHJldHVybiBmYWxzZTsKICAgIAkkX3ByZXZfY29vcmRzID0gIiI7CiAgICAJJF9uZXh0X2Nvb3JkcyA9ICIiOwogICAgCQogICAgCWZvcmVhY2goJHBvbHlsaW5lX2FycmF5IGFzICRfY29vcmRzKXsKICAgIAkJJF9wcmV2X2Nvb3JkcyA9ICRfbmV4dF9jb29yZHM7CiAgICAJCSRfbmV4dF9jb29yZHMgPSAkX2Nvb3JkczsKICAgIAkJCiAgICAJCWlmKCRfcHJldl9jb29yZHMgIT09ICIiKXsKICAgIAkJICAkX2x0MT0kX3ByZXZfY29vcmRzWyJsYXQiXTsKICAgIAkJICAkX2xuMT0kX3ByZXZfY29vcmRzWyJsb25nIl07CiAgICAJCSAgJF9sdDI9JF9uZXh0X2Nvb3Jkc1sibGF0Il07CiAgICAgICAgICAgICAgJF9sbjI9JF9uZXh0X2Nvb3Jkc1sibG9uZyJdOwogICAgCQkgICRpZCA9ICR0aGlzLT5hZGRQb2x5TGluZUJ5Q29vcmRzKCRfbG4xLCAkX2x0MSwgJF9sbjIsICRfbHQyLCAkaWQsICRjb2xvciwgJHdlaWdodCwgJG9wYWNpdHkpOwogICAgCQl9CiAgICAJfQogICAgICAgIHJldHVybiAkaWQ7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogYWRkcyBwb2x5bGluZSBieSBwYXNzZWQgYXJyYXkKICAgICAqIGlmIGNvbG9yLCB3ZWlnaHQgYW5kIG9wYWNpdHkgYXJlIG5vdCBkZWZpbmVkLCB1c2UgdGhlIGdvb2dsZSBtYXBzIGRlZmF1bHRzCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBvbHlsaW5lX2FycmF5IGFycmF5IG9mIGFkZHJlc3NlcwogICAgICogQHBhcmFtIHN0cmluZyAkaWQgQW4gYXJyYXkgaWQgdG8gdXNlIHRvIGFwcGVuZCBjb29yZGluYXRlcyB0byBhIGxpbmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbG9yIHRoZSBjb2xvciBvZiB0aGUgbGluZSAoZm9ybWF0OiAjMDAwMDAwKQogICAgICogQHBhcmFtIHN0cmluZyAkd2VpZ2h0IHRoZSB3ZWlnaHQgb2YgdGhlIGxpbmUgaW4gcGl4ZWxzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcGFjaXR5IHRoZSBsaW5lIG9wYWNpdHkgKHBlcmNlbnRhZ2UpCiAgICAgKiBAcmV0dXJuIGJvb2x8aW50IEFycmF5IGlkIG9mIG5ld2x5IGFkZGVkIHBvaW50IG9yIGZhbHNlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZFBvbHlsaW5lQnlBZGRyZXNzQXJyYXkoJHBvbHlsaW5lX2FycmF5LCRpZD1mYWxzZSwkY29sb3I9JycsJHdlaWdodD0wLCRvcGFjaXR5PTApewogICAgICAgIGlmKCFpc19hcnJheSgkcG9seWxpbmVfYXJyYXkpIHx8IHNpemVvZigkcG9seWxpbmVfYXJyYXkpIDwgMikKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgJF9wcmV2X2FkZHJlc3MgPSAiIjsKICAgICAgICAkX25leHRfYWRkcmVzcyA9ICIiOwogICAgICAgIAogICAgICAgIGZvcmVhY2goJHBvbHlsaW5lX2FycmF5IGFzICRfYWRkcmVzcyl7CiAgICAgICAgICAgICRfcHJldl9hZGRyZXNzID0gJF9uZXh0X2FkZHJlc3M7CiAgICAgICAgICAgICRfbmV4dF9hZGRyZXNzID0gJF9hZGRyZXNzOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYoJF9wcmV2X2FkZHJlc3MgIT09ICIiKXsKICAgICAgICAgICAgICAkaWQgPSAkdGhpcy0+YWRkUG9seUxpbmVCeUFkZHJlc3MoJF9wcmV2X2FkZHJlc3MsICRfbmV4dF9hZGRyZXNzLCAkaWQsICRjb2xvciwgJHdlaWdodCwgJG9wYWNpdHkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBhZGRzIGEgbWFwIHBvbHlsaW5lIGJ5IGFkZHJlc3MKICAgICAqIGlmIGNvbG9yLCB3ZWlnaHQgYW5kIG9wYWNpdHkgYXJlIG5vdCBkZWZpbmVkLCB1c2UgdGhlIGdvb2dsZSBtYXBzIGRlZmF1bHRzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MxIHRoZSBtYXAgYWRkcmVzcyB0byBkcmF3IGZyb20KICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MyIHRoZSBtYXAgYWRkcmVzcyB0byBkcmF3IHRvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBBbiBhcnJheSBpZCB0byB1c2UgdG8gYXBwZW5kIGNvb3JkaW5hdGVzIHRvIGEgbGluZQogICAgICogQHBhcmFtIHN0cmluZyAkY29sb3IgdGhlIGNvbG9yIG9mIHRoZSBsaW5lIChmb3JtYXQ6ICMwMDAwMDApCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3ZWlnaHQgdGhlIHdlaWdodCBvZiB0aGUgbGluZSBpbiBwaXhlbHMKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wYWNpdHkgdGhlIGxpbmUgb3BhY2l0eSAocGVyY2VudGFnZSkKICAgICAqIEByZXR1cm4gYm9vbHxpbnQgQXJyYXkgaWQgb2YgbmV3bHkgYWRkZWQgcG9pbnQgb3IgZmFsc2UKICAgICAqLwogICAgZnVuY3Rpb24gYWRkUG9seUxpbmVCeUFkZHJlc3MoJGFkZHJlc3MxLCRhZGRyZXNzMiwkaWQ9ZmFsc2UsJGNvbG9yPScnLCR3ZWlnaHQ9MCwkb3BhY2l0eT0wKSB7CiAgICAgICAgaWYoKCRfZ2VvY29kZTEgPSAkdGhpcy0+Z2V0R2VvY29kZSgkYWRkcmVzczEpKSA9PT0gZmFsc2UpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBpZigoJF9nZW9jb2RlMiA9ICR0aGlzLT5nZXRHZW9jb2RlKCRhZGRyZXNzMikpID09PSBmYWxzZSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiAkdGhpcy0+YWRkUG9seUxpbmVCeUNvb3JkcygkX2dlb2NvZGUxWydsb24nXSwkX2dlb2NvZGUxWydsYXQnXSwkX2dlb2NvZGUyWydsb24nXSwkX2dlb2NvZGUyWydsYXQnXSwkaWQsJGNvbG9yLCR3ZWlnaHQsJG9wYWNpdHkpOwogICAgfQoKICAgIC8qKgogICAgICogYWRkcyBhIG1hcCBwb2x5bGluZSBieSBtYXAgY29vcmRpbmF0ZXMKICAgICAqIGlmIGNvbG9yLCB3ZWlnaHQgYW5kIG9wYWNpdHkgYXJlIG5vdCBkZWZpbmVkLCB1c2UgdGhlIGdvb2dsZSBtYXBzIGRlZmF1bHRzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvbjEgdGhlIG1hcCBsb25naXR1ZGUgdG8gZHJhdyBmcm9tCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQxIHRoZSBtYXAgbGF0aXR1ZGUgdG8gZHJhdyBmcm9tCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb24yIHRoZSBtYXAgbG9uZ2l0dWRlIHRvIGRyYXcgdG8KICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhdDIgdGhlIG1hcCBsYXRpdHVkZSB0byBkcmF3IHRvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBBbiBhcnJheSBpZCB0byB1c2UgdG8gYXBwZW5kIGNvb3JkaW5hdGVzIHRvIGEgbGluZQogICAgICogQHBhcmFtIHN0cmluZyAkY29sb3IgdGhlIGNvbG9yIG9mIHRoZSBsaW5lIChmb3JtYXQ6ICMwMDAwMDApCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3ZWlnaHQgdGhlIHdlaWdodCBvZiB0aGUgbGluZSBpbiBwaXhlbHMKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wYWNpdHkgdGhlIGxpbmUgb3BhY2l0eSAocGVyY2VudGFnZSkKCSAqIEByZXR1cm4gc3RyaW5nICRpZCBpZCBvZiB0aGUgY3JlYXRlZC91cGRhdGVkIHBvbHlsaW5lIGFycmF5CiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZFBvbHlMaW5lQnlDb29yZHMoJGxvbjEsJGxhdDEsJGxvbjIsJGxhdDIsJGlkPWZhbHNlLCRjb2xvcj0nJywkd2VpZ2h0PTAsJG9wYWNpdHk9MCkgewoJCWlmKCRpZCAhPT0gZmFsc2UgJiYgaXNzZXQoJHRoaXMtPl9wb2x5bGluZXNbJGlkXSkgJiYgaXNfYXJyYXkoJHRoaXMtPl9wb2x5bGluZXNbJGlkXSkpewoJCQkkX3BvbHlsaW5lID0gJHRoaXMtPl9wb2x5bGluZXNbJGlkXTsKCQl9ZWxzZXsKCQkJLy9vbmx5IHNldCBjb2xvcix3ZWlnaHQsYW5kIG9wYWNpdHkgaWYgbmV3IHBvbHlsaW5lCgkJCSRfcG9seWxpbmUgPSBhcnJheSgKCQkJCSJjb2xvciI9PiRjb2xvciwKCQkJCSJ3ZWlnaHQiPT4kd2VpZ2h0LAoJCQkJIm9wYWNpdHkiPT4kb3BhY2l0eQoJCQkpOwoJCX0KCQlpZighaXNzZXQoJF9wb2x5bGluZVsnY29vcmRzJ10pIHx8ICFpc19hcnJheSgkX3BvbHlsaW5lWydjb29yZHMnXSkpewoJCQkkX3BvbHlsaW5lWydjb29yZHMnXSA9IGFycmF5KAoJCQkJIjAiPT4gYXJyYXkoImxhdCI9PiRsYXQxLCAibG9uZyI9PiRsb24xKSwKCQkJCSIxIj0+IGFycmF5KCJsYXQiPT4kbGF0MiwgImxvbmciPT4kbG9uMikKCQkJKTsKCQl9ZWxzZXsKCQkJJGxhc3RfaW5kZXggPSBzaXplb2YoJF9wb2x5bGluZVsnY29vcmRzJ10pLTE7CgkJCS8vY2hlY2sgaWYgbGF0MS9sb24xIHBvaW50IGlzIGFscmVhZHkgb24gcG9seWxpbmUKCQkJaWYoJF9wb2x5bGluZVsnY29vcmRzJ11bJGxhc3RfaW5kZXhdWyJsYXQiXSAhPSAkbGF0MSB8fCAkX3BvbHlsaW5lWydjb29yZHMnXVskbGFzdF9pbmRleF1bImxvbmciXSAgIT0gJGxvbjEpewoJCQkJJF9wb2x5bGluZVsnY29vcmRzJ11bXSA9IGFycmF5KCJsYXQiPT4kbGF0MSwgImxvbmciPT4kbG9uMSk7CgkJCX0KCQkJJF9wb2x5bGluZVsnY29vcmRzJ11bXSA9IGFycmF5KCJsYXQiPT4kbGF0MiwgImxvbmciPT4kbG9uMik7CgkJfQogICAgICAgIGlmKCRpZCA9PT0gZmFsc2UpewogICAgICAgICAgICAkdGhpcy0+X3BvbHlsaW5lc1tdID0gJF9wb2x5bGluZTsKICAgICAgICAgICAgJGlkID0gY291bnQoJHRoaXMtPl9wb2x5bGluZXMpIC0gMTsKICAgICAgICB9ZWxzZXsKCQkJJHRoaXMtPl9wb2x5bGluZXNbJGlkXSA9ICRfcG9seWxpbmU7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5hZGp1c3RDZW50ZXJDb29yZHMoJGxvbjEsJGxhdDEpOwogICAgICAgICR0aGlzLT5hZGp1c3RDZW50ZXJDb29yZHMoJGxvbjIsJGxhdDIpOwogICAgICAgIC8vIHJldHVybiBpbmRleCBvZiBwb2x5bGluZQogICAgICAgIHJldHVybiAkaWQ7CiAgICB9CgkKCS8qKgoJICogZnVuY3Rpb24gdG8gYWRkIGFuIGVsZXZhdGlvbiBwcm9maWxlIGZvciBhIHBvbHlsaW5lIHRvIHRoZSBwYWdlCgkgKi8KCSBmdW5jdGlvbiBhZGRQb2x5bGluZUVsZXZhdGlvbigkcG9seWxpbmVfaWQsICRlbGV2YXRpb25fZG9tX2lkLCAkc2FtcGxlcz0yNTYsICR3aWR0aD0iIiwgJGhlaWdodD0iIiwgJGZvY3VzX2NvbG9yPSIjMDBmZjAwIil7CgkJaWYoaXNzZXQoJHRoaXMtPl9wb2x5bGluZXNbJHBvbHlsaW5lX2lkXSkpewoJCQkkdGhpcy0+X2VsZXZhdGlvbl9wb2x5bGluZXNbJHBvbHlsaW5lX2lkXSA9IGFycmF5KAoJCQkJImRvbV9pZCI9PiRlbGV2YXRpb25fZG9tX2lkLAoJCQkJInNhbXBsZXMiPT4kc2FtcGxlcywKCQkJCSJ3aWR0aCI9Pigkd2lkdGghPSIiPyR3aWR0aDpzdHJfcmVwbGFjZSgicHgiLCIiLCR0aGlzLT53aWR0aCkpLAoJCQkJImhlaWdodCI9PigkaGVpZ2h0IT0iIj8kaGVpZ2h0OnN0cl9yZXBsYWNlKCJweCIsIiIsJHRoaXMtPmhlaWdodCkvMiksCgkJCQkiZm9jdXNfY29sb3IiPT4kZm9jdXNfY29sb3IKCQkJKTsKCQl9CgkgfQoJCgkvKioKCSAqIGZ1bmN0aW9uIHRvIGFkZCBhbiBvdmVybGF5IHRvIHRoZSBtYXAuCgkgKi8KCSBmdW5jdGlvbiBhZGRPdmVybGF5KCRiZHNfbGF0MSwgJGJkc19sb24xLCAkYmRzX2xhdDIsICRiZHNfbG9uMiwgJGltZ19zcmMsICRvcGFjaXR5ID0gMTAwKXsKCQkgJF9vdmVybGF5ID0gYXJyYXkoCgkJCSJib3VuZHMiID0+IGFycmF5KAoJCQkJIm5lIj0+YXJyYXkoCgkJCQkJImxhdCI9PiRiZHNfbGF0MSwKCQkJCQkibG9uZyI9PiRiZHNfbG9uMQoJCQkJKSwKCQkJCSJzdyI9PmFycmF5KAoJCQkJCSJsYXQiPT4kYmRzX2xhdDIsCgkJCQkJImxvbmciPT4kYmRzX2xvbjIKCQkJCSkKCQkJKSwKCQkJImltZyIgPT4gJGltZ19zcmMsCgkJCSJvcGFjaXR5IiA9PiAkb3BhY2l0eS8xMAoJCSApOwoJCSAkdGhpcy0+YWRqdXN0Q2VudGVyQ29vcmRzKCRiZHNfbG9uMSwkYmRzX2xhdDEpOwogICAgICAgICAkdGhpcy0+YWRqdXN0Q2VudGVyQ29vcmRzKCRiZHNfbG9uMiwkYmRzX2xhdDIpOwoJCSAkdGhpcy0+X292ZXJsYXlzW10gPSAkX292ZXJsYXk7CgkJIHJldHVybiBjb3VudCgkdGhpcy0+X292ZXJsYXlzKS0xOwoJIH0KCSAKCSAvKioKCSAgKiBmdW5jdGlvbiB0byBhZGQgYSBLTUwgb3ZlcmxheSB0byB0aGUgbWFwLgoJICAqICAqTm90ZSB0aGF0IHRoaXMgZXhwZWN0cyBhIGZpbGVuYW1lIGFuZCBmaWxlIHBhcnNpbmcvcHJvY2Vzc2luZyBpcyBkb25lCgkgICogIG9uIHRoZSBjbGllbnQgc2lkZQoJICAqLwoJIGZ1bmN0aW9uIGFkZEtNTE92ZXJsYXkoJGZpbGUpewoJICAgJHRoaXMtPl9rbWxfb3ZlcmxheXNbXSA9ICRmaWxlOwoJICAgcmV0dXJuIGNvdW50KCR0aGlzLT5fa21sX292ZXJsYXlzKS0xOwoJIH0KICAgICAgICAKICAgIC8qKgogICAgICogYWRqdXN0IG1hcCBjZW50ZXIgY29vcmRpbmF0ZXMgYnkgdGhlIGdpdmVuIGxhdC9sb24gcG9pbnQKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkbG9uIHRoZSBtYXAgbGF0aXR1ZGUgKGhvcml6b250YWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQgdGhlIG1hcCBsYXRpdHVkZSAodmVydGljYWwpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkanVzdENlbnRlckNvb3JkcygkbG9uLCRsYXQpIHsKICAgICAgICBpZihzdHJsZW4oKHN0cmluZykkbG9uKSA9PSAwIHx8IHN0cmxlbigoc3RyaW5nKSRsYXQpID09IDApCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCQkkdGhpcy0+X21heF9sb24gPSAoZmxvYXQpIG1heCgkbG9uLCAkdGhpcy0+X21heF9sb24pOwogICAgICAgICR0aGlzLT5fbWluX2xvbiA9IChmbG9hdCkgbWluKCRsb24sICR0aGlzLT5fbWluX2xvbik7CiAgICAgICAgJHRoaXMtPl9tYXhfbGF0ID0gKGZsb2F0KSBtYXgoJGxhdCwgJHRoaXMtPl9tYXhfbGF0KTsKICAgICAgICAkdGhpcy0+X21pbl9sYXQgPSAoZmxvYXQpIG1pbigkbGF0LCAkdGhpcy0+X21pbl9sYXQpOwoJCSR0aGlzLT5jZW50ZXJfbG9uID0gKGZsb2F0KSAoJHRoaXMtPl9taW5fbG9uICsgJHRoaXMtPl9tYXhfbG9uKSAvIDI7CiAgICAgICAgJHRoaXMtPmNlbnRlcl9sYXQgPSAoZmxvYXQpICgkdGhpcy0+X21pbl9sYXQgKyAkdGhpcy0+X21heF9sYXQpIC8gMjsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCBtYXAgY2VudGVyIGNvb3JkaW5hdGVzIHRvIGxhdC9sb24gcG9pbnQKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkbG9uIHRoZSBtYXAgbGF0aXR1ZGUgKGhvcml6b250YWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQgdGhlIG1hcCBsYXRpdHVkZSAodmVydGljYWwpCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENlbnRlckNvb3JkcygkbG9uLCRsYXQpIHsKICAgICAgICAkdGhpcy0+Y2VudGVyX2xhdCA9IChmbG9hdCkgJGxhdDsKICAgICAgICAkdGhpcy0+Y2VudGVyX2xvbiA9IChmbG9hdCkgJGxvbjsKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiBnZW5lcmF0ZSBhbiBhcnJheSBvZiBwYXJhbXMgZm9yIGEgbmV3IG1hcmtlciBpY29uIGltYWdlCiAgICAgKiBpY29uU2hhZG93SW1hZ2UgaXMgb3B0aW9uYWwKICAgICAqIElmIGFuY2hvciBjb29yZHMgYXJlIG5vdCBzdXBwbGllZCwgd2UgdXNlIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGltYWdlIGJ5IGRlZmF1bHQuIAogICAgICogQ2FuIGJlIGNhbGxlZCBzdGF0aWNhbGx5LiBGb3IgcHJpdmF0ZSB1c2UgYnkgYWRkTWFya2VySWNvbigpIGFuZCBzZXRNYXJrZXJJY29uKCkgYW5kIGFkZEljb24oKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25JbWFnZSBVUkwgdG8gaWNvbiBpbWFnZQogICAgICogQHBhcmFtIHN0cmluZyAkaWNvblNoYWRvd0ltYWdlIFVSTCB0byBzaGFkb3cgaW1hZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25BbmNob3JYIFggY29vcmRpbmF0ZSBmb3IgaWNvbiBhbmNob3IgcG9pbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25BbmNob3JZIFkgY29vcmRpbmF0ZSBmb3IgaWNvbiBhbmNob3IgcG9pbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGluZm9XaW5kb3dBbmNob3JYIFggY29vcmRpbmF0ZSBmb3IgaW5mbyB3aW5kb3cgYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmZvV2luZG93QW5jaG9yWSBZIGNvb3JkaW5hdGUgZm9yIGluZm8gd2luZG93IGFuY2hvciBwb2ludAogICAgICogQHJldHVybiBhcnJheSBBcnJheSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IG5ld2x5IC9wcmV2aW91c2x5IGNyZWF0ZWQgaWNvbi4KICAgICAqLwogICAgZnVuY3Rpb24gY3JlYXRlTWFya2VySWNvbigkaWNvbkltYWdlLCRpY29uU2hhZG93SW1hZ2UgPSAnJywkaWNvbkFuY2hvclggPSAneCcsJGljb25BbmNob3JZID0gJ3gnLCRpbmZvV2luZG93QW5jaG9yWCA9ICd4JywkaW5mb1dpbmRvd0FuY2hvclkgPSAneCcpIHsKICAgICAgICAvLyRfaWNvbl9pbWFnZV9wYXRoID0gc3RycG9zKCRpY29uSW1hZ2UsJ2h0dHAnKSA9PT0gMCA/ICRpY29uSW1hZ2UgOiAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gJGljb25JbWFnZTsKICAgICAgICAkX2ljb25faW1hZ2VfcGF0aCA9ICRpY29uSW1hZ2U7CiAgICAgICAgaWYoISgkX2ltYWdlX2luZm8gPSBnZXRpbWFnZXNpemUoJF9pY29uX2ltYWdlX3BhdGgpKSkgewogICAgICAgICAgICBkaWUoJ0dvb2dsZU1hcEFQSTpjcmVhdGVNYXJrZXJJY29uOiBFcnJvciByZWFkaW5nIGltYWdlOiAnIC4gJGljb25JbWFnZSk7ICAgCiAgICAgICAgfQogICAgICAgIGlmKCRpY29uU2hhZG93SW1hZ2UpIHsKICAgICAgICAgICAgLy8kX3NoYWRvd19pbWFnZV9wYXRoID0gc3RycG9zKCRpY29uU2hhZG93SW1hZ2UsJ2h0dHAnKSA9PT0gMCA/ICRpY29uU2hhZG93SW1hZ2UgOiAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gJGljb25TaGFkb3dJbWFnZTsKICAgICAgICAgICAgJF9zaGFkb3dfaW1hZ2VfcGF0aCA9ICRpY29uU2hhZG93SW1hZ2U7CiAgICAgICAgICAgIGlmKCEoJF9zaGFkb3dfaW5mbyA9IEBnZXRpbWFnZXNpemUoJF9zaGFkb3dfaW1hZ2VfcGF0aCkpKSB7CiAgICAgICAgICAgICAgICBkaWUoJ0dvb2dsZU1hcEFQSTpjcmVhdGVNYXJrZXJJY29uOiBFcnJvciByZWFkaW5nIHNoYWRvdyBpbWFnZTogJyAuICRpY29uU2hhZG93SW1hZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKCRpY29uQW5jaG9yWCA9PT0gJ3gnKSB7CiAgICAgICAgICAgICRpY29uQW5jaG9yWCA9IChpbnQpICgkX2ltYWdlX2luZm9bMF0gLyAyKTsKICAgICAgICB9CiAgICAgICAgaWYoJGljb25BbmNob3JZID09PSAneCcpIHsKICAgICAgICAgICAgJGljb25BbmNob3JZID0gKGludCkgKCRfaW1hZ2VfaW5mb1sxXSAvIDIpOwogICAgICAgIH0KICAgICAgICBpZigkaW5mb1dpbmRvd0FuY2hvclggPT09ICd4JykgewogICAgICAgICAgICAkaW5mb1dpbmRvd0FuY2hvclggPSAoaW50KSAoJF9pbWFnZV9pbmZvWzBdIC8gMik7CiAgICAgICAgfQogICAgICAgIGlmKCRpbmZvV2luZG93QW5jaG9yWSA9PT0gJ3gnKSB7CiAgICAgICAgICAgICRpbmZvV2luZG93QW5jaG9yWSA9IChpbnQpICgkX2ltYWdlX2luZm9bMV0gLyAyKTsKICAgICAgICB9CiAgICAgICAgJGdDbXMgPSBjbXNtcygpOwogICAgICAgICRjb25maWcgPSAkZ0Ntcy0+R2V0Q29uZmlnKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICRpY29uX2luZm8gPSBhcnJheSgKICAgICAgICAgICAgICAgICdpbWFnZScgPT4gJGNvbmZpZ1sncm9vdF91cmwnXS5ESVJFQ1RPUllfU0VQQVJBVE9SLiRpY29uSW1hZ2UsCiAgICAgICAgICAgICAgICAnaWNvbldpZHRoJyA9PiAkX2ltYWdlX2luZm9bMF0sCiAgICAgICAgICAgICAgICAnaWNvbkhlaWdodCcgPT4gJF9pbWFnZV9pbmZvWzFdLAogICAgICAgICAgICAgICAgJ2ljb25BbmNob3JYJyA9PiAkaWNvbkFuY2hvclgsCiAgICAgICAgICAgICAgICAnaWNvbkFuY2hvclknID0+ICRpY29uQW5jaG9yWSwKICAgICAgICAgICAgICAgICdpbmZvV2luZG93QW5jaG9yWCcgPT4gJGluZm9XaW5kb3dBbmNob3JYLAogICAgICAgICAgICAgICAgJ2luZm9XaW5kb3dBbmNob3JZJyA9PiAkaW5mb1dpbmRvd0FuY2hvclkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgaWYoJGljb25TaGFkb3dJbWFnZSkgewogICAgICAgICAgICAkaWNvbl9pbmZvID0gYXJyYXlfbWVyZ2UoJGljb25faW5mbywgCiAgICAgICAgICAgIAlhcnJheSgnc2hhZG93JyA9PiAkY29uZmlnWydyb290X3VybCddLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGljb25TaGFkb3dJbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGFkb3dXaWR0aCcgPT4gJF9zaGFkb3dfaW5mb1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGFkb3dIZWlnaHQnID0+ICRfc2hhZG93X2luZm9bMV0pKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRpY29uX2luZm87CiAgICB9CiAgICAKICAgIC8qKgogICAgICogc2V0IHRoZSBkZWZhdWx0IG1hcmtlciBpY29uIGZvciBBTEwgbWFya2VycyBvbiB0aGUgbWFwCiAgICAgKiBOT1RFOiBUaGlzIE1VU1QgYmUgc2V0IHByaW9yIHRvIGFkZGluZyBtYXJrZXJzIGluIG9yZGVyIGZvciB0aGUgZGVmYXVsdHMKICAgICAqIHRvIGJlIHNldCBjb3JyZWN0bHkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uSW1hZ2UgVVJMIHRvIGljb24gaW1hZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25TaGFkb3dJbWFnZSBVUkwgdG8gc2hhZG93IGltYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uQW5jaG9yWCBYIGNvb3JkaW5hdGUgZm9yIGljb24gYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uQW5jaG9yWSBZIGNvb3JkaW5hdGUgZm9yIGljb24gYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmZvV2luZG93QW5jaG9yWCBYIGNvb3JkaW5hdGUgZm9yIGluZm8gd2luZG93IGFuY2hvciBwb2ludAogICAgICogQHBhcmFtIHN0cmluZyAkaW5mb1dpbmRvd0FuY2hvclkgWSBjb29yZGluYXRlIGZvciBpbmZvIHdpbmRvdyBhbmNob3IgcG9pbnQKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgbWFya2VyIGljb24ga2V5LgogICAgICovCiAgICBmdW5jdGlvbiBzZXRNYXJrZXJJY29uKCRpY29uSW1hZ2UsJGljb25TaGFkb3dJbWFnZSA9ICcnLCRpY29uQW5jaG9yWCA9ICd4JywkaWNvbkFuY2hvclkgPSAneCcsJGluZm9XaW5kb3dBbmNob3JYID0gJ3gnLCRpbmZvV2luZG93QW5jaG9yWSA9ICd4JykgewogICAgICAgICR0aGlzLT5kZWZhdWx0X2ljb24gPSAkaWNvbkltYWdlOwogICAgICAgICR0aGlzLT5kZWZhdWx0X2ljb25fc2hhZG93ID0gJGljb25TaGFkb3dJbWFnZTsKICAgICAgICByZXR1cm4gJHRoaXMtPnNldE1hcmtlckljb25LZXkoJGljb25JbWFnZSwkaWNvblNoYWRvd0ltYWdlLCRpY29uQW5jaG9yWCwkaWNvbkFuY2hvclksJGluZm9XaW5kb3dBbmNob3JYLCRpbmZvV2luZG93QW5jaG9yWSk7ICAgICAgIAogICAgfQogICAgCiAgICAvKioKICAgICAqIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGljb24gaXMgaW4gIGNsYXNzICJtYXJrZXJfaWNvbnNldCIsIGlmIGl0IGlzLCAKICAgICAqIHJldHVybnMgdGhlIGtleSwgaWYgbm90LCBjcmVhdGVzIGEgbmV3IGFycmF5IGluZGljZSBhbmQgcmV0dXJucyB0aGUga2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uSW1hZ2UgVVJMIHRvIGljb24gaW1hZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25TaGFkb3dJbWFnZSBVUkwgdG8gc2hhZG93IGltYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uQW5jaG9yWCBYIGNvb3JkaW5hdGUgZm9yIGljb24gYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uQW5jaG9yWSBZIGNvb3JkaW5hdGUgZm9yIGljb24gYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmZvV2luZG93QW5jaG9yWCBYIGNvb3JkaW5hdGUgZm9yIGluZm8gd2luZG93IGFuY2hvciBwb2ludAogICAgICogQHBhcmFtIHN0cmluZyAkaW5mb1dpbmRvd0FuY2hvclkgWSBjb29yZGluYXRlIGZvciBpbmZvIHdpbmRvdyBhbmNob3IgcG9pbnQKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgbWFya2VyIGljb24ga2V5LgogICAgICovCiAgICBmdW5jdGlvbiBzZXRNYXJrZXJJY29uS2V5KCRpY29uSW1hZ2UsJGljb25TaGFkb3c9JycsJGljb25BbmNob3JYID0gJ3gnLCRpY29uQW5jaG9yWSA9ICd4JywkaW5mb1dpbmRvd0FuY2hvclggPSAneCcsJGluZm9XaW5kb3dBbmNob3JZID0gJ3gnKXsKICAgIAkkX2ljb25LZXkgPSAkdGhpcy0+Z2V0SWNvbktleSgkaWNvbkltYWdlLCRpY29uU2hhZG93KTsKICAgIAlpZihpc3NldCgkdGhpcy0+X21hcmtlcl9pY29uc1skX2ljb25LZXldKSl7CiAgICAJCXJldHVybiAkX2ljb25LZXk7CiAgICAJfWVsc2V7CiAgICAJCXJldHVybiAkdGhpcy0+YWRkSWNvbigkaWNvbkltYWdlLCRpY29uU2hhZG93LCRpY29uQW5jaG9yWCwkaWNvbkFuY2hvclksJGluZm9XaW5kb3dBbmNob3JYLCRpbmZvV2luZG93QW5jaG9yWSk7CiAgICAJfQogICAgfQogICAgCiAgICAvKioKICAgICAqIGZ1bmN0aW9uIHRvIGdldCBpY29uIGtleQogICAgICogQHBhcmFtIHN0cmluZyAkaWNvbkltYWdlIFVSTCB0byBtYXJrZXIgaWNvbiBpbWFnZQogICAgICogQHBhcmFtIHN0cmluZyAkaWNvblNoYWRvdyBVUkwgdG8gbWFya2VyIGljb24gc2hhZG93IGltYWdlCiAgICAgKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGZvcm1hdHRlZCBpY29uIGtleSBmcm9tIGljb24gb3IgaWNvbitzaGFkb3cgaW1hZ2UgbmFtZSBwYWlycwogICAgICovCiAgICBmdW5jdGlvbiBnZXRJY29uS2V5KCRpY29uSW1hZ2UsJGljb25TaGFkb3c9IiIpewogICAgICAgIHJldHVybiBzdHJfcmVwbGFjZShhcnJheSgiLyIsIjoiLCIuIiksIiIsJGljb25JbWFnZS4kaWNvblNoYWRvdyk7CiAgICB9CiAKICAgIC8qKgogICAgICogYWRkIGFuIGljb24gdG8gImljb25zZXQiCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uSW1hZ2UgVVJMIHRvIG1hcmtlciBpY29uIGltYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uU2hhZG93IFVSTCB0byBtYXJrZXIgaWNvbiBzaGFkb3cgaW1hZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25BbmNob3JYIFggY29vcmRpbmF0ZSBmb3IgaWNvbiBhbmNob3IgcG9pbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25BbmNob3JZIFkgY29vcmRpbmF0ZSBmb3IgaWNvbiBhbmNob3IgcG9pbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGluZm9XaW5kb3dBbmNob3JYIFggY29vcmRpbmF0ZSBmb3IgaW5mbyB3aW5kb3cgYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmZvV2luZG93QW5jaG9yWSBZIGNvb3JkaW5hdGUgZm9yIGluZm8gd2luZG93IGFuY2hvciBwb2ludAogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgaWNvbidzIGtleS4gIAogICAgICovCiAgICBmdW5jdGlvbiBhZGRJY29uKCRpY29uSW1hZ2UsJGljb25TaGFkb3dJbWFnZSA9ICcnLCRpY29uQW5jaG9yWCA9ICd4JywkaWNvbkFuY2hvclkgPSAneCcsJGluZm9XaW5kb3dBbmNob3JYID0gJ3gnLCRpbmZvV2luZG93QW5jaG9yWSA9ICd4JykgewogICAgCSRfaWNvbktleSA9ICR0aGlzLT5nZXRJY29uS2V5KCRpY29uSW1hZ2UsICRpY29uU2hhZG93SW1hZ2UpOwogICAgICAgICR0aGlzLT5fbWFya2VyX2ljb25zWyRfaWNvbktleV0gPSAkdGhpcy0+Y3JlYXRlTWFya2VySWNvbigkaWNvbkltYWdlLCRpY29uU2hhZG93SW1hZ2UsJGljb25BbmNob3JYLCRpY29uQW5jaG9yWSwkaW5mb1dpbmRvd0FuY2hvclgsJGluZm9XaW5kb3dBbmNob3JZKTsKICAgICAgICByZXR1cm4gJF9pY29uS2V5OwogICAgfQogICAgCiAgICAvKioKICAgICAqIHVwZGF0ZXMgYSBtYXJrZXIncyBpY29uIGtleS4KICAgICAqIE5PVEU6IFRvIGJlIHVzZWQgaW4gbGlldSBvZiBhZGRNYXJrZXJJY29uLCBub3cgdXNlIGFkZEljb24gKyB1cGRhdGVNYXJrZXJJY29uS2V5IGZvciBleHBsaWNpdCBpY29uIGFzc29jaWF0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXJrZXJLZXkgTWFya2VyIGtleSB0byBkZWZpbmUgd2hpY2ggbWFya2VyJ3MgaWNvbiB0byB1cGRhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25LZXkgSWNvbiBrZXkgdG8gZGVmaW5lIHdoaWNoIGljb24gdG8gdXNlLgogICAgICovCiAgICBmdW5jdGlvbiB1cGRhdGVNYXJrZXJJY29uS2V5KCRtYXJrZXJLZXksICRpY29uS2V5KXsKICAgIAlpZihpc3NldCgkdGhpcy0+X21hcmtlcnNbJG1hcmtlcktleV0pKXsKICAgIAkJJHRoaXMtPl9tYXJrZXJzWyRtYXJrZXJLZXldWydpY29uX2tleSddID0gJGljb25LZXk7CiAgICAJfQogICAgfSAgICAKCiAgICAvKioKICAgICAqIHByaW50IG1hcCBoZWFkZXIgamF2YXNjcmlwdCAoZ29lcyBiZXR3ZWVuIDxoZWFkPjwvaGVhZD4pCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gcHJpbnRIZWFkZXJKUygpIHsKICAgICAgICBlY2hvICR0aGlzLT5nZXRIZWFkZXJKUygpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIHJldHVybiBtYXAgaGVhZGVyIGphdmFzY3JpcHQgKGdvZXMgYmV0d2VlbiA8aGVhZD48L2hlYWQ+KQogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEhlYWRlckpTKCkgewoJCSRfaGVhZGVySlMgPSAiIjsKICAgICAgICBpZiggJHRoaXMtPm1vYmlsZSA9PSB0cnVlKXsKICAgICAgICAJJF9oZWFkZXJKUyAuPSAiCiAgICAgICAgCSAgIDxtZXRhIG5hbWU9J3ZpZXdwb3J0JyBjb250ZW50PSdpbml0aWFsLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubycgLz4KICAgICAgICAJIjsKICAgICAgICB9CgkJaWYoIWVtcHR5KCR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lcyl8fCghZW1wdHkoJHRoaXMtPl9kaXJlY3Rpb25zKSYmJHRoaXMtPmVsZXZhdGlvbl9kaXJlY3Rpb25zKSl7CgkJCSRfaGVhZGVySlMgLj0gIjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSc+PC9zY3JpcHQ+IjsKCQkJJF9oZWFkZXJKUyAuPSAiCgkJCTxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KCQkJCS8vIExvYWQgdGhlIFZpc3VhbGl6YXRpb24gQVBJIGFuZCB0aGUgcGllY2hhcnQgcGFja2FnZS4KCQkJCWdvb2dsZS5sb2FkKCd2aXN1YWxpemF0aW9uJywgJzEnLCB7cGFja2FnZXM6IFsnY29sdW1uY2hhcnQnXX0pOwoJCQk8L3NjcmlwdD4iOwoJCX0KICAgICAgICAkX2hlYWRlckpTIC49ICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHMvYXBpL2pzP3NlbnNvcj0iLigoJHRoaXMtPm1vYmlsZT09dHJ1ZSk/InRydWUiOiJmYWxzZSIpLiInPjwvc2NyaXB0PiI7CgkJaWYoJHRoaXMtPm1hcmtlcl9jbHVzdGVyZXIpewoJCQkkX2hlYWRlckpTIC49ICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSciLiR0aGlzLT5tYXJrZXJfY2x1c3RlcmVyX2xvY2F0aW9uLiInID48L3NjcmlwdD4iOwoJCX0gICAgICAgIAogICAgICAgIGlmKCR0aGlzLT5sb2NhbF9zZWFyY2gpey8qVE9ETzogTG9hZCBMb2NhbCBTZWFyY2ggQVBJIFYzIHdoZW4gYXZhaWxhYmxlKi99ICAgCiAgICAgICAgcmV0dXJuICRfaGVhZGVySlM7CiAgICB9ICAgIAogICAgCiAgIC8qKgogICAgKiBwcmludHMgb25Mb2FkKCkgd2l0aG91dCBoYXZpbmcgdG8gbWFuaXB1bGF0ZSBib2R5IHRhZy4KCSogY2FsbCB0aGlzIGFmdGVyIHRoZSBwcmludCBtYXAgbGlrZSBzby4uLiAgICAKCSogICAgICAkbWFwLT5wcmludE1hcCgpOyAgICAKCSogICAgICAkbWFwLT5wcmludE9uTG9hZCgpOyAgICAKCSovCiAgICBmdW5jdGlvbiBwcmludE9uTG9hZCgpIHsKICAgICAgICBlY2hvICR0aGlzLT5nZXRPbkxvYWQoKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBwcmludCBvbkxvYWQgZnVuY3Rpb24gbmFtZQogICAgICovCiAgICBmdW5jdGlvbiBwcmludE9uTG9hZEZ1bmN0aW9uKCl7CiAgICAgICAgZWNobyAkdGhpcy0+Z2V0T25Mb2FkRnVuY3Rpb24oKTsKICAgIH0KCiAgICAvKioKICAgICAqIHJldHVybiBqcyB0byBzZXQgb25sb2FkIGZ1bmN0aW9uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldE9uTG9hZCgpIHsKICAgICAgICByZXR1cm4gJzxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPndpbmRvdy5vbmxvYWQ9b25Mb2FkJy4kdGhpcy0+bWFwX2lkLic7PC9zY3JpcHQ+JzsgICAgICAgICAgICAgICAgICAgICAgIAogICAgfQogICAgCiAgICAvKioKICAgICAqIHJldHVybiBqcyB0byBzZXQgb25sb2FkIGZ1bmN0aW9uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldE9uTG9hZEZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAnb25Mb2FkJy4kdGhpcy0+bWFwX2lkOyAgICAgICAgICAgICAgICAgICAgICAgCiAgICB9ICAgCgogICAgLyoqCiAgICAgKiBwcmludCBtYXAgamF2YXNjcmlwdCAocHV0IGp1c3QgYmVmb3JlIDwvYm9keT4sIG9yIGluIDxoZWFkZXI+IGlmIHVzaW5nIG9uTG9hZCgpKQogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByaW50TWFwSlMoKSB7CiAgICAgICAgZWNobyAkdGhpcy0+Z2V0TWFwSlMoKTsKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiByZXR1cm4gbWFwIGphdmFzY3JpcHQKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBnZXRNYXBKUygpIHsKCQkkX3NjcmlwdCA9ICIiOwoJCSRfa2V5ID0gJHRoaXMtPm1hcF9pZDsKCQkkX291dHB1dCA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPicgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICcvLzwhW0NEQVRBWycgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKICAgICAgICAkX291dHB1dCAuPSAiICogQ3JlYXRlZCB3aXRoIEdvb2dsZU1hcEFQSSIgLiAkdGhpcy0+X3ZlcnNpb24gLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICIgKiBBdXRob3I6IEJyYWQgV2VkZWxsIDxicmFkIEFUIG15Y25sIERPVCBjb20+XG4iOwogICAgICAgICRfb3V0cHV0IC49ICIgKiBMaW5rIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9waHBnb29nbGVtYXBhcGl2My9cbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gIiAqIENvcHlyaWdodCAyMDEwIEJyYWQgV2VkZWxsXG4iOwogICAgICAgICRfb3V0cHV0IC49ICIgKiBPcmlnaW5hbCBBdXRob3I6IE1vbnRlIE9ocnQgPG1vbnRlIEFUIG9ocnQgRE9UIGNvbT5cbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gIiAqIE9yaWdpbmFsIENvcHlyaWdodCAyMDA1LTIwMDYgTmV3IERpZ2l0YWwgR3JvdXBcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gIiAqIE9yaWdpbmlhbCBMaW5rIGh0dHA6Ly93d3cucGhwaW5zaWRlci5jb20vcGhwL2NvZGUvR29vZ2xlTWFwQVBJL1xuIjsKICAgICAgICAkX291dHB1dCAuPSAiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4iOwoJCWlmKCR0aGlzLT5zdHJlZXRfdmlld19kb21faWQhPSIiKXsKCQkJJF9zY3JpcHQgLj0gIgoJCQkJdmFyIHBhbm9yYW1hIi4kdGhpcy0+c3RyZWV0X3ZpZXdfZG9tX2lkLiIkX2tleSA9ICcnOwoJCQkiOwoJCQlpZighZW1wdHkoJHRoaXMtPl9tYXJrZXJzKSl7CgkJCQkkX3NjcmlwdCAuPSAiCgkJCQkJdmFyIHBhbm9yYW1hIi4kdGhpcy0+c3RyZWV0X3ZpZXdfZG9tX2lkLiJtYXJrZXJzJF9rZXkgPSBbXTsKCQkJCSI7CgkJCX0KCQl9CgkJCgkJaWYoIWVtcHR5KCR0aGlzLT5fbWFya2VycykpewoJCQkkX3NjcmlwdCAuPSAiCgkJCQl2YXIgbWFya2VycyRfa2V5ICA9IFtdOwoJCQkiOwoJCQlpZigkdGhpcy0+c2lkZWJhcikgeyAgICAgICAgCgkJCQkkX3NjcmlwdCAuPSAiCgkJCQkJdmFyIHNpZGViYXJfaHRtbCRfa2V5ICA9ICcnOwoJCQkJCXZhciBtYXJrZXJfaHRtbCRfa2V5ICA9IFtdOwoJCQkJIjsKCQkJfQoJCX0KCQlpZigkdGhpcy0+bWFya2VyX2NsdXN0ZXJlcil7CgkJCSRfc2NyaXB0IC49ICIKCQkJICB2YXIgbWFya2VyQ2x1c3RlcmVyJF9rZXkgPSBudWxsOwoJCQkiOwoJCX0gICAgICAgIAogICAgICAgIGlmKCR0aGlzLT5kaXJlY3Rpb25zKSB7ICAgICAgICAKICAgICAgICAgICAgJF9zY3JpcHQgLj0gIgogICAgICAgICAgICAgICAgdmFyIHRvX2h0bWxzJF9rZXkgID0gW107CiAgICAgICAgICAgICAgICB2YXIgZnJvbV9odG1scyRfa2V5ICA9IFtdOwogICAgICAgICAgICAiOwogICAgICAgIH0KCQlpZighZW1wdHkoJHRoaXMtPl9kaXJlY3Rpb25zKSl7CgkJCSRfc2NyaXB0IC49ICIKCQkJICAgIHZhciBkaXJlY3Rpb25zJF9rZXkgPSBbXTsKCQkJIjsKCQl9CgkJLy9Qb2x5bGluZXMKCQlpZighZW1wdHkoJHRoaXMtPl9wb2x5bGluZXMpKXsKCQkJJF9zY3JpcHQgLj0gIgoJCQkJdmFyIHBvbHlsaW5lcyRfa2V5ID0gW107CgkJCQl2YXIgcG9seWxpbmVDb29yZHMkX2tleSA9IFtdOwoJCQkiOwoJCQlpZighZW1wdHkoJHRoaXMtPl9lbGV2YXRpb25fcG9seWxpbmVzKSl7CgkJCQkkX3NjcmlwdCAuPSAiCgkJCQkJdmFyIGVsZXZhdGlvblBvbHlsaW5lcyRfa2V5ID0gW107CgkJCQkiOwoJCQl9CgkJfQoJCS8vRWxldmF0aW9uIHN0dWZmCgkJaWYoIWVtcHR5KCR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lcyl8fCghZW1wdHkoJHRoaXMtPl9kaXJlY3Rpb25zKSYmJHRoaXMtPmVsZXZhdGlvbl9kaXJlY3Rpb25zKSl7CgkJCSRfc2NyaXB0IC49ICIKCQkJCXZhciBlbGV2YXRpb25DaGFydHMkX2tleSA9IFtdOwkJCQkKCQkJIjsKCQl9CgkJLy9PdmVybGF5cwoJCWlmKCFlbXB0eSgkdGhpcy0+X292ZXJsYXlzKSl7CgkJCSRfc2NyaXB0IC49ICIKCQkJCXZhciBvdmVybGF5cyRfa2V5ID0gW107CgkJCSI7CgkJfQogICAgICAgIC8vS01MIE92ZXJsYXlzCiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5fa21sX292ZXJsYXlzKSl7CiAgICAgICAgICAgICRfc2NyaXB0IC49ICIKICAgICAgICAgICAgICAgIHZhciBrbWxfb3ZlcmxheXMkX2tleSA9IFtdOwogICAgICAgICAgICAiOwogICAgICAgIH0KICAgICAgICAvL05ldyBJY29ucwogICAgICAgIGlmKCFlbXB0eSgkdGhpcy0+X21hcmtlcl9pY29ucykpewogICAgICAgIAkkX3NjcmlwdCAuPSAidmFyIGljb24kX2tleSAgPSBbXTsgXG4iOwogICAgICAgIAlmb3JlYWNoKCR0aGlzLT5fbWFya2VyX2ljb25zIGFzICRpY29uX2tleT0+JGljb25faW5mbyl7CiAgICAgICAgCQkvL25vIG5lZWQgdG8gY2hlY2sgaWNvbiBrZXkgaGVyZSBzaW5jZSB0aGF0J3MgYWxyZWFkeSBkb25lIHdpdGggc2V0dGVycwogICAgICAgIAkJJF9zY3JpcHQgLj0gIgogICAgICAgIAkJICBpY29uIi4kX2tleS4iWyckaWNvbl9rZXknXSA9IHt9OwogICAgICAgIAkJICBpY29uIi4kX2tleS4iWyckaWNvbl9rZXknXS5pbWFnZSA9ICBuZXcgZ29vZ2xlLm1hcHMuTWFya2VySW1hZ2UoJyIuJGljb25faW5mb1siaW1hZ2UiXS4iJywKCQkJCSAgICAgIC8vIFRoZSBzaXplCgkJCQkgICAgICBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgiLiRpY29uX2luZm9bJ2ljb25XaWR0aCddLiIsICIuJGljb25faW5mb1snaWNvbkhlaWdodCddLiIpLAoJCQkJICAgICAgLy8gVGhlIG9yaWdpbihzcHJpdGUpCgkJCQkgICAgICBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoMCwwKSwKCQkJCSAgICAgIC8vIFRoZSBhbmNob3IKCQkJCSAgICAgIG5ldyBnb29nbGUubWFwcy5Qb2ludCgiLiRpY29uX2luZm9bJ2ljb25BbmNob3JYJ10uIiwgIi4kaWNvbl9pbmZvWydpY29uQW5jaG9yWSddLiIpCiAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgCQkiOwogICAgICAgIAkJaWYoaXNzZXQoJGljb25faW5mb1snc2hhZG93J10pICYmICRpY29uX2luZm9bJ3NoYWRvdyddIT0iIil7CiAgICAgICAgCQkgICRfc2NyaXB0IC49ICIKICAgICAgICAgICAgICAgICAgICBpY29uIi4kX2tleS4iWyckaWNvbl9rZXknXS5zaGFkb3cgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VySW1hZ2UoJyIuJGljb25faW5mb1sic2hhZG93Il0uIicsCiAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc2l6ZQogICAgICAgICAgICAgICAgICAgICAgbmV3IGdvb2dsZS5tYXBzLlNpemUoIi4kaWNvbl9pbmZvWydzaGFkb3dXaWR0aCddLiIsICIuJGljb25faW5mb1snc2hhZG93SGVpZ2h0J10uIiksCiAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luKHNwcml0ZSkKICAgICAgICAgICAgICAgICAgICAgIG5ldyBnb29nbGUubWFwcy5Qb2ludCgwLDApLAogICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGFuY2hvcgogICAgICAgICAgICAgICAgICAgICAgbmV3IGdvb2dsZS5tYXBzLlBvaW50KCIuJGljb25faW5mb1snaWNvbkFuY2hvclgnXS4iLCAiLiRpY29uX2luZm9bJ2ljb25BbmNob3JZJ10uIikKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAiOwogICAgICAgIAkJfQogICAgICAgIAl9CiAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAkX3NjcmlwdCAuPSAidmFyIG1hcCRfa2V5ID0gbnVsbDtcbiI7CgkJCgkJLy9zdGFydCBzZXR0aW5nIHNjcmlwdCB2YXIKICAgICAgICBpZigkdGhpcy0+b25sb2FkKSB7CiAgICAgICAgCS8vIER1a2V0b3duOiBOZXh0IGxpbmUgc2V0IHRvIGNvbW1lbnQsIHNpbmNlIGl0IGNhdXNlZCBtYXAgbm90IHRvIGJlIHNob3duCiAgICAgICAgCS8vJF9zY3JpcHQgLj0gJ2Z1bmN0aW9uIG9uTG9hZCcuJHRoaXMtPm1hcF9pZC4nKCkgeycgLiAiXG4iOyAgIAogICAgICAgIAkkX3NjcmlwdCAuPSAneycgLiAiXG4iOyAgIAogICAgICAgIH0gCiAgICAgICAgICAgICAgICAKICAgICAgICBpZighZW1wdHkoJHRoaXMtPmJyb3dzZXJfYWxlcnQpKSB7CiAgICAgICAgCS8vVE9ETzpVcGRhdGUgd2l0aCBuZXcgYnJvd3NlciBjYXRjaCAtIEdCcm93c2VySXNDb21wYXRpYmxlIGlzIGRlcHJlY2F0ZWQKICAgICAgICAgICAgLy8kX291dHB1dCAuPSAnaWYgKEdCcm93c2VySXNDb21wYXRpYmxlKCkpIHsnIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyoKICAgICAgICAgKlRPRE86VXBkYXRlIHdpdGggbG9jYWwgc2VhcmNoIGJhciBvbmNlIGltcGxlbWVudGVkIGluIFYzIGFwaSAKCQkkc3RyTWFwT3B0aW9ucyA9ICIiOwoJCWlmKCR0aGlzLT5sb2NhbF9zZWFyY2gpewoJCQkkX291dHB1dCAuPSAiCgkJCQltYXBPcHRpb25zLmdvb2dsZUJhck9wdGlvbnM9IHsKCQkJCQlzdHlsZSA6ICduZXcnCgkJCQkJIi4oKCR0aGlzLT5sb2NhbF9zZWFyY2hfYWRzKT8iLAoJCQkJCWFkc09wdGlvbnM6IHsKCQkJCQkgICAgY2xpZW50OiAnIi4kdGhpcy0+YWRzX3B1Yl9pZC4iJywKCQkJCQkgICAgY2hhbm5lbDogJyIuJHRoaXMtPmFkc19jaGFubmVsLiInLAoJCQkJCSAgICBsYW5ndWFnZTogJ2VuJwoJCQkJCSI6IiIpLiIKCQkJCX07CgkJCSI7ICAgICAgICAgICAgCgkJCSRzdHJNYXBPcHRpb25zIC49ICIsIG1hcE9wdGlvbnMiOwoJCX0KICAgICAgICAqLwoJCQoJCWlmKCR0aGlzLT5kaXNwbGF5X21hcCl7CgkJCSRfc2NyaXB0IC49IHNwcmludGYoJ3ZhciBtYXBPYmolcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIlcyIpOycsICRfa2V5LCAkdGhpcy0+bWFwX2lkKSAuICJcbiI7CgkJCSRfc2NyaXB0IC49ICJpZiAobWFwT2JqJF9rZXkgIT0gJ3VuZGVmaW5lZCcgJiYgbWFwT2JqJF9rZXkgIT0gbnVsbCkge1xuIjsKCQkJCgkJCSRfc2NyaXB0IC49ICIKCQkJCXZhciBtYXBPcHRpb25zJF9rZXkgPSB7CgkJCQkJem9vbTogIi4kdGhpcy0+em9vbS4iLAoJCQkJCW1hcFR5cGVJZDogZ29vZ2xlLm1hcHMuTWFwVHlwZUlkLiIuJHRoaXMtPm1hcF90eXBlLiIsCgkJCQkJbWFwVHlwZUNvbnRyb2w6ICIuKCR0aGlzLT50eXBlX2NvbnRyb2xzPyJ0cnVlIjoiZmFsc2UiKS4iLAoJCQkJCW1hcFR5cGVDb250cm9sT3B0aW9uczoge3N0eWxlOiBnb29nbGUubWFwcy5NYXBUeXBlQ29udHJvbFN0eWxlLiIuJHRoaXMtPnR5cGVfY29udHJvbHNfc3R5bGUuIn0KCQkJCX07CgkJCSI7CgkJCWlmKGlzc2V0KCR0aGlzLT5jZW50ZXJfbGF0KSAmJiBpc3NldCgkdGhpcy0+Y2VudGVyX2xvbikpIHsKCQkJCS8vIFNwZWNpYWwgY2FyZSBmb3IgZGVjaW1hbCBwb2ludCBpbiBsb24gYW5kIGxhdCwgd291bGQgZ2V0IGxvc3QgaWYgIndyb25nIiBsb2NhbGUgaXMgc2V0OyBhcHBsaWVzIHRvIChzKXByaW50ZiBvbmx5CgkJCQkkX3NjcmlwdCAuPSAiCgkJCQkJbWFwT3B0aW9ucyIuJF9rZXkuIi5jZW50ZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKAoJCQkJCQkiLm51bWJlcl9mb3JtYXQoJHRoaXMtPmNlbnRlcl9sYXQsIDYsICIuIiwgIiIpLiIsCgkJCQkJCSIubnVtYmVyX2Zvcm1hdCgkdGhpcy0+Y2VudGVyX2xvbiwgNiwgIi4iLCAiIikuIgoJCQkJCSk7CgkJCQkiOwoJCQl9ICAgCgkJCQoJCQlpZigkdGhpcy0+c3RyZWV0X3ZpZXdfY29udHJvbHMpewoJCQkJJF9zY3JpcHQgLj0gIgoJCQkJCW1hcE9wdGlvbnMiLiRfa2V5LiIuc3RyZWV0Vmlld0NvbnRyb2w9IHRydWU7CgkKCQkJCSI7CgkJCX0KCQkJCgkJCSRfc2NyaXB0IC49ICIKCQkJCW1hcCRfa2V5ID0gbmV3IGdvb2dsZS5tYXBzLk1hcChtYXBPYmokX2tleSxtYXBPcHRpb25zJF9rZXkpOwoJCQkiOwoJCQkJCgkJCWlmKCR0aGlzLT5zdHJlZXRfdmlld19kb21faWQhPSIiKXsKCQkJCSRfc2NyaXB0IC49ICIKCQkJCQlwYW5vcmFtYSIuJHRoaXMtPnN0cmVldF92aWV3X2RvbV9pZC4iJF9rZXkgPSBuZXcgIGdvb2dsZS5tYXBzLlN0cmVldFZpZXdQYW5vcmFtYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIi4kdGhpcy0+c3RyZWV0X3ZpZXdfZG9tX2lkLiInKSk7CgkJCQkJbWFwJF9rZXkuc2V0U3RyZWV0VmlldyhwYW5vcmFtYSIuJHRoaXMtPnN0cmVldF92aWV3X2RvbV9pZC4iJF9rZXkpOwoJCQkJIjsKCQkJCQoJCQkJaWYoIWVtcHR5KCR0aGlzLT5fbWFya2VycykpewoJCQkJCQoJCQkJCS8vQWRkIG1hcmtlcnMgdG8gdGhlIHN0cmVldCB2aWV3CgkJCQkJaWYoJHRoaXMtPnN0cmVldF92aWV3X2RvbV9pZCE9IiIpewoJCQkJCQkkX3NjcmlwdCAuPSAkdGhpcy0+Z2V0QWRkTWFya2Vyc0pTKCR0aGlzLT5tYXBfaWQsICRwYW5vPXRydWUpOwoJCQkJCX0KCQkJCQkvL3NldCBjZW50ZXIgdG8gbGFzdCBtYXJrZXIKCQkJCQkkbGFzdF9pZCA9IGNvdW50KCR0aGlzLT5fbWFya2VycyktMTsKCQkJCQkKCQkJCQkkX3NjcmlwdCAuPSAiCgkJCQkJCXBhbm9yYW1hIi4kdGhpcy0+c3RyZWV0X3ZpZXdfZG9tX2lkLiIkX2tleS5zZXRQb3NpdGlvbihuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKAoJCQkJCQkJIi4kdGhpcy0+X21hcmtlcnNbJGxhc3RfaWRdWyJsYXQiXS4iLAoJCQkJCQkJIi4kdGhpcy0+X21hcmtlcnNbJGxhc3RfaWRdWyJsb24iXS4iCgkJCQkJCSkpOwoJCQkJCQlwYW5vcmFtYSIuJHRoaXMtPnN0cmVldF92aWV3X2RvbV9pZC4iJF9rZXkuc2V0VmlzaWJsZSh0cnVlKTsKCQkJCQkiOwoJCQkJfQoJCQl9CgkJCQoJCQlpZighZW1wdHkoJHRoaXMtPl9kaXJlY3Rpb25zKSl7CgkJCQkkX3NjcmlwdCAuPSAkdGhpcy0+Z2V0QWRkRGlyZWN0aW9uc0pTKCk7CgkJCX0KCQkJCgkJCS8vVE9ETzphZGQgc3VwcG9ydCBmb3IgR29vZ2xlIEVhcnRoIE92ZXJsYXkgb25jZSBpbnRlZ3JhdGVkIHdpdGggVjMKCQkJLy8kX291dHB1dCAuPSAibWFwLmFkZE1hcFR5cGUoR19TQVRFTExJVEVfM0RfTUFQKTtcbiI7CgkJCQoJCQkvLyB6b29tIHNvIHRoYXQgYWxsIG1hcmtlcnMgYXJlIGluIHRoZSB2aWV3cG9ydAoJCQlpZigkdGhpcy0+em9vbV9lbmNvbXBhc3MgJiYgKGNvdW50KCR0aGlzLT5fbWFya2VycykgPiAxIHx8IGNvdW50KCR0aGlzLT5fcG9seWxpbmVzKSA+PSAxIHx8IGNvdW50KCR0aGlzLT5fb3ZlcmxheXMpID49IDEpKSB7CgkJCQkvLyBpbmNyZWFzZSBib3VuZHMgYnkgZnVkZ2UgZmFjdG9yIHRvIGtlZXAKCQkJCS8vIG1hcmtlcnMgYXdheSBmcm9tIHRoZSBlZGdlcwoJCQkJJF9sZW5fbG9uID0gJHRoaXMtPl9tYXhfbG9uIC0gJHRoaXMtPl9taW5fbG9uOwoJCQkJJF9sZW5fbGF0ID0gJHRoaXMtPl9tYXhfbGF0IC0gJHRoaXMtPl9taW5fbGF0OwoJCQkJJHRoaXMtPl9taW5fbG9uIC09ICRfbGVuX2xvbiAqICR0aGlzLT5ib3VuZHNfZnVkZ2U7CgkJCQkkdGhpcy0+X21heF9sb24gKz0gJF9sZW5fbG9uICogJHRoaXMtPmJvdW5kc19mdWRnZTsKCQkJCSR0aGlzLT5fbWluX2xhdCAtPSAkX2xlbl9sYXQgKiAkdGhpcy0+Ym91bmRzX2Z1ZGdlOwoJCQkJJHRoaXMtPl9tYXhfbGF0ICs9ICRfbGVuX2xhdCAqICR0aGlzLT5ib3VuZHNfZnVkZ2U7CgkKCQkJCSRfc2NyaXB0IC49ICJ2YXIgYmRzJF9rZXkgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKG5ldyBnb29nbGUubWFwcy5MYXRMbmcoJHRoaXMtPl9taW5fbGF0LCAkdGhpcy0+X21pbl9sb24pLCBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKCR0aGlzLT5fbWF4X2xhdCwgJHRoaXMtPl9tYXhfbG9uKSk7XG4iOwoJCQkJJF9zY3JpcHQgLj0gJ21hcCcuJF9rZXkuJy5maXRCb3VuZHMoYmRzJy4kX2tleS4nKTsnIC4gIlxuIjsKCQkJfQoJCQkKCQkJLyoKCQkJICogVE9ETzogVXBkYXRlIGNvbnRyb2xzIHRvIHVzZSBuZXcgQVBJIHYzIG1ldGhvZHMuKE5vdCBhIHByaW9yaXR5LCBzZWUgYmVsb3cpCgkJCSAqIGRlZmF1bHQgVjMgZnVuY3Rpb25hbGl0eSBjYXRlcnMgY29udHJvbCBkaXNwbGF5IGFjY29yZGluZyB0byB0aGUgCgkJCSAqIGRldmljZSB0aGF0J3MgYWNjZXNzaW5nIHRoZSBwYWdlLCBhcyB3ZWxsIGFzIHRoZSBzcGVjaWZpZWQgd2lkdGgKCQkJICogYW5kIGhlaWdodCBvZiB0aGUgbWFwIGl0c2VsZi4KCQkJaWYoJHRoaXMtPm1hcF9jb250cm9scykgewoJCQkgIGlmKCR0aGlzLT5jb250cm9sX3NpemUgPT0gJ2xhcmdlJykKCQkJCSAgJF9vdXRwdXQgLj0gJ21hcC5hZGRDb250cm9sKG5ldyBHTGFyZ2VNYXBDb250cm9sKCksIG5ldyBHQ29udHJvbFBvc2l0aW9uKEdfQU5DSE9SX1RPUF9MRUZULCBuZXcgR1NpemUoMTAsMTApKSk7JyAuICJcbiI7CgkJCSAgZWxzZQoJCQkJICAkX291dHB1dCAuPSAnbWFwLmFkZENvbnRyb2wobmV3IEdTbWFsbE1hcENvbnRyb2woKSwgbmV3IEdDb250cm9sUG9zaXRpb24oR19BTkNIT1JfVE9QX1JJR0hULCBuZXcgR1NpemUoMTAsNjApKSk7JyAuICJcbiI7CgkJCX0KCQkJaWYoJHRoaXMtPnR5cGVfY29udHJvbHMpIHsKCQkJCSRfb3V0cHV0IC49ICdtYXAuYWRkQ29udHJvbChuZXcgR01hcFR5cGVDb250cm9sKCksIG5ldyBHQ29udHJvbFBvc2l0aW9uKEdfQU5DSE9SX1RPUF9SSUdIVCwgbmV3IEdTaXplKDEwLDEwKSkpOycgLiAiXG4iOwoJCQl9CgkJCQoJCQlpZigkdGhpcy0+c2NhbGVfY29udHJvbCkgewoJCQkJaWYoJHRoaXMtPmNvbnRyb2xfc2l6ZSA9PSAnbGFyZ2UnKXsKCQkJCQkkX291dHB1dCAuPSAnbWFwLmFkZENvbnRyb2wobmV3IEdTY2FsZUNvbnRyb2woKSwgbmV3IEdDb250cm9sUG9zaXRpb24oR19BTkNIT1JfVE9QX1JJR0hULCBuZXcgR1NpemUoMzUsMTkwKSkpOycgLiAiXG4iOwoJCQkJfWVsc2UgewoJCQkJCSRfb3V0cHV0IC49ICdtYXAuYWRkQ29udHJvbChuZXcgR1NjYWxlQ29udHJvbCgpLCBuZXcgR0NvbnRyb2xQb3NpdGlvbihHX0FOQ0hPUl9CT1RUT01fUklHSFQsIG5ldyBHU2l6ZSgxOTAsMTApKSk7JyAuICJcbiI7CgkJCQl9CgkJCX0KCQkJaWYoJHRoaXMtPm92ZXJ2aWV3X2NvbnRyb2wpIHsKCQkJCSRfb3V0cHV0IC49ICdtYXAuYWRkQ29udHJvbChuZXcgR092ZXJ2aWV3TWFwQ29udHJvbCgpKTsnIC4gIlxuIjsKCQkJfQoJCQkKCQkJICogVE9ETzogVXBkYXRlIHdpdGggYWRzX21hbmFnZXIgc3R1ZmYgb25jZSBpbnRlZ3JhdGVkIGludG8gVjMKCQkJaWYoJHRoaXMtPmFkc19tYW5hZ2VyKXsKCQkJCSRfb3V0cHV0IC49ICd2YXIgYWRzTWFuYWdlciA9IG5ldyBHQWRzTWFuYWdlcihtYXAsICInLiR0aGlzLT5hZHNfcHViX2lkLiciLHtjaGFubmVsOiInLiR0aGlzLT5hZHNfY2hhbm5lbC4nIixtYXhBZHNPbk1hcDoiJy4kdGhpcy0+YWRzX21heC4nIn0pOwoJCSAgIGFkc01hbmFnZXIuZW5hYmxlKCk7Jy4iXG4iOwoJCQkKCQkJfQoJCQkgKiBUT0RPOiBVcGRhdGUgd2l0aCBsb2NhbCBzZWFyY2ggb25jZSBpbnRlZ3JhdGVkIGludG8gVjMKCQkJaWYoJHRoaXMtPmxvY2FsX3NlYXJjaCl7CgkJCQkkX291dHB1dCAuPSAiXG4KCQkJCQltYXAuZW5hYmxlR29vZ2xlQmFyKCk7CgkJCQkiOwoJCQl9CgkJCSovCgkJCQoJCQlpZigkdGhpcy0+dHJhZmZpY19vdmVybGF5KXsKCQkJCSRfc2NyaXB0IC49ICIKCQkJCQl2YXIgdHJhZmZpY0xheWVyID0gbmV3IGdvb2dsZS5tYXBzLlRyYWZmaWNMYXllcigpOwoJCQkJCXRyYWZmaWNMYXllci5zZXRNYXAobWFwJF9rZXkpOwoJCQkJIjsgICAgICAgICAgICAKCQkJfQoJCQkKCQkJaWYoJHRoaXMtPmJpa2luZ19vdmVybGF5KXsKCQkJCSRfc2NyaXB0IC49ICIKCQkJCQl2YXIgYmlraW5nTGF5ZXIgPSBuZXcgZ29vZ2xlLm1hcHMuQmljeWNsaW5nTGF5ZXIoKTsKCQkJCQliaWtpbmdMYXllci5zZXRNYXAobWFwJF9rZXkpOwoJCQkJIjsgICAgICAgICAgICAKCQkJfQoJCQkKCQkJJF9zY3JpcHQgLj0gJHRoaXMtPmdldEFkZE1hcmtlcnNKUygpOwoJCQkKCQkJJF9zY3JpcHQgLj0gJHRoaXMtPmdldFBvbHlsaW5lSlMoKTsKCQkJJF9zY3JpcHQgLj0gJHRoaXMtPmdldEFkZE92ZXJsYXlKUygpOwoJCQkKCQkJaWYoJHRoaXMtPl9rbWxfb3ZlcmxheXMhPT0iIil7CgkJCSAgZm9yZWFjaCgkdGhpcy0+X2ttbF9vdmVybGF5cyBhcyAkX2ttbF9rZXk9PiRfa21sX2ZpbGUpewoJCQkJICAkX3NjcmlwdCAuPSAiCgkJCQkJICBrbWxfb3ZlcmxheXMkX2tleVskX2ttbF9rZXldPSBuZXcgZ29vZ2xlLm1hcHMuS21sTGF5ZXIoJyRfa21sX2ZpbGUnKTsKCQkJCQkgIGttbF9vdmVybGF5cyRfa2V5WyRfa21sX2tleV0uc2V0TWFwKG1hcCRfa2V5KTsKCQkJCSAgIjsKCQkJICB9CgkJCSAgJF9zY3JpcHQgLj0gIgoJCQkJICAKCQkJICAiOwoJCQl9CgoJCQkgLy9lbmQgSlMgaWYgbWFwT2JqICE9ICJ1bmRlZmluZWQiIGJsb2NrCgkJCSRfc2NyaXB0IC49ICd9JyAuICJcbiI7CgkJCgkJfS8vZW5kIGlmICR0aGlzLT5kaXNwbGF5X21hcD09dHJ1ZQogICAgICAgCiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5icm93c2VyX2FsZXJ0KSkgewogICAgICAgICAgICAvL1RPRE86VXBkYXRlIHdpdGggbmV3IGJyb3dzZXIgY2F0Y2ggU0VFIEFCT1ZFCiAgICAgICAgICAgLy8gJF9vdXRwdXQgLj0gJ30gZWxzZSB7JyAuICJcbiI7CiAgICAgICAgICAgLy8gJF9vdXRwdXQgLj0gJ2FsZXJ0KCInIC4gc3RyX3JlcGxhY2UoJyInLCdcIicsJHRoaXMtPmJyb3dzZXJfYWxlcnQpIC4gJyIpOycgLiAiXG4iOwogICAgICAgICAgIC8vICRfb3V0cHV0IC49ICd9JyAuICJcbiI7CiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICBpZigkdGhpcy0+b25sb2FkKSB7CiAgICAgICAgICAgJF9zY3JpcHQgLj0gJ30nIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgCgkJJF9zY3JpcHQgLj0gJHRoaXMtPmdldE1hcEZ1bmN0aW9ucygpOwogICAgICAgIAoJCWlmKCR0aGlzLT5fbWluaWZ5X2pzICYmIGNsYXNzX2V4aXN0cygiSlNNaW4iKSl7CgkJCSRfc2NyaXB0ID0gSlNNaW46Om1pbmlmeSgkX3NjcmlwdCk7CgkJfQoJCQoJCS8vQXBwZW5kIHNjcmlwdCB0byBvdXRwdXQKCQkkX291dHB1dCAuPSAkX3NjcmlwdDsKCQkkX291dHB1dCAuPSAnLy9dXT4nIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAnPC9zY3JpcHQ+JyAuICJcbiI7CiAgICAgICAgcmV0dXJuICRfb3V0cHV0OwogICAgfQoJCgkvKioKCSAqIGZ1bmN0aW9uIHRvIHJlbmRlciB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdXNlIG9uIHRoZSBwYWdlCgkgKi8KCSBmdW5jdGlvbiBnZXRNYXBGdW5jdGlvbnMoKXsKCQkkX3NjcmlwdCA9ICIiOwoJCWlmKCR0aGlzLT5fZGlzcGxheV9qc19mdW5jdGlvbnM9PT10cnVlKXsKCSAgICAJJF9zY3JpcHQgPSAkdGhpcy0+Z2V0VXRpbGl0eUZ1bmN0aW9ucygpOyAgICAgICAgICAgCiAgICAgICAgfQoJCXJldHVybiAkX3NjcmlwdDsKCSB9CgkgCgkgZnVuY3Rpb24gZ2V0VXRpbGl0eUZ1bmN0aW9ucygpewoJCSAkX3NjcmlwdCA9ICIiOwoJCSBpZighZW1wdHkoJHRoaXMtPl9tYXJrZXJzKSkKCQkgCSRfc2NyaXB0IC49ICR0aGlzLT5nZXRDcmVhdGVNYXJrZXJKUygpOwoJCSBpZighZW1wdHkoJHRoaXMtPl9vdmVybGF5cykpCgkJIAkkX3NjcmlwdCAuPSAkdGhpcy0+Z2V0Q3JlYXRlT3ZlcmxheUpTKCk7CgkJIGlmKCFlbXB0eSgkdGhpcy0+X2VsZXZhdGlvbl9wb2x5bGluZXMpfHwoIWVtcHR5KCR0aGlzLT5fZGlyZWN0aW9ucykmJiR0aGlzLT5lbGV2YXRpb25fZGlyZWN0aW9ucykpCgkJIAkkX3NjcmlwdCAuPSAkdGhpcy0+Z2V0UGxvdEVsZXZhdGlvbkpTKCk7CgkJIC8vIFV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0YWJiZWQgYW5kIG5vbi10YWJiZWQgaW5mbyB3aW5kb3dzCgkJICRfc2NyaXB0IC49ICdmdW5jdGlvbiBpc0FycmF5KGEpIHtyZXR1cm4gaXNPYmplY3QoYSkgJiYgYS5jb25zdHJ1Y3RvciA9PSBBcnJheTt9JyAuICJcbiI7CgkJICRfc2NyaXB0IC49ICdmdW5jdGlvbiBpc09iamVjdChhKSB7cmV0dXJuIChhICYmIHR5cGVvZiBhID09IFwnb2JqZWN0XCcpIHx8IGlzRnVuY3Rpb24oYSk7fScgLiAiXG4iOwoJCSAkX3NjcmlwdCAuPSAnZnVuY3Rpb24gaXNGdW5jdGlvbihhKSB7cmV0dXJuIHR5cGVvZiBhID09IFwnZnVuY3Rpb25cJzt9JyAuICJcbiI7CgkJICRfc2NyaXB0IC49ICdmdW5jdGlvbiBpc0VtcHR5KG9iaikgeyBmb3IodmFyIGkgaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSByZXR1cm4gdHJ1ZTsgfScuIlxuIjsJIAoJCSByZXR1cm4gJF9zY3JpcHQ7CgkgfQoKICAgIC8qKgogICAgICogb3ZlcnJpZGFibGUgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcganMgdG8gYWRkIG1hcmtlcnMKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0QWRkTWFya2Vyc0pTKCRtYXBfaWQgPSAiIiwgJHBhbm89IGZhbHNlKSB7CgkJLy9kZWZhdWx0cwoJCWlmKCRtYXBfaWQgPT0gIiIpewoJCQkkbWFwX2lkID0gJHRoaXMtPm1hcF9pZDsKCQl9CgkJCgkJaWYoJHBhbm89PWZhbHNlKXsKCQkJJF9wcmVmaXggPSAibWFwIjsKCQl9ZWxzZXsKCQkJJF9wcmVmaXggPSAicGFub3JhbWEiLiR0aGlzLT5zdHJlZXRfdmlld19kb21faWQ7CgkJfQogICAgICAgICRfb3V0cHV0ID0gJyc7CiAgICAgICAgCiAgICAgICAgZm9yZWFjaCgkdGhpcy0+X21hcmtlcnMgYXMgJF9tYXJrZXIpIHsKICAgICAgICAgICAgJGl3X2h0bWwgPSBzdHJfcmVwbGFjZSgnIicsJ1wiJyxzdHJfcmVwbGFjZShhcnJheSgiXG4iLCAiXHIiKSwgIiIsICRfbWFya2VyWydodG1sJ10pKTsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gInZhciBwb2ludCA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoIi4kX21hcmtlclsnbGF0J10uIiwiLiRfbWFya2VyWydsb24nXS4iKTtcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJyVzLnB1c2goY3JlYXRlTWFya2VyKCVzJXMsIHBvaW50LCIlcyIsIiVzIiwgJXMsICVzLCAiJXMiLCAlcyApKTsnLAoJCQkJKCgkcGFubz09dHJ1ZSk/JF9wcmVmaXg6IiIpLiJtYXJrZXJzIi4kbWFwX2lkLAoJCQkJJF9wcmVmaXgsICAgICAgICAgICAgICAgIAoJCQkJJG1hcF9pZCwKCQkJCXN0cl9yZXBsYWNlKCciJywnXCInLCRfbWFya2VyWyd0aXRsZSddKSwKCQkJCXN0cl9yZXBsYWNlKCcvJywnXC8nLCRpd19odG1sKSwKCQkJCShpc3NldCgkX21hcmtlclsiaWNvbl9rZXkiXSkpPyJpY29uIi4kbWFwX2lkLiJbJyIuJF9tYXJrZXJbImljb25fa2V5Il0uIiddLmltYWdlIjoiJyciLAoJCQkJKGlzc2V0KCRfbWFya2VyWyJpY29uX2tleSJdKSYmaXNzZXQoJF9tYXJrZXJbInNoYWRvd19pY29uIl0pKT8iaWNvbiIuJG1hcF9pZC4iWyciLiRfbWFya2VyWyJpY29uX2tleSJdLiInXS5zaGFkb3ciOiInJyIsCgkJCQkoKCR0aGlzLT5zaWRlYmFyKT8kdGhpcy0+c2lkZWJhcl9pZDoiIiksCgkJCQkoKGlzc2V0KCRfbWFya2VyWyJvcGVuZXJzIl0pJiZjb3VudCgkX21hcmtlclsib3BlbmVycyJdKT4wKT9qc29uX2VuY29kZSgkX21hcmtlclsib3BlbmVycyJdKToiJyciKQogICAgICAgICAgICApIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoJHRoaXMtPm1hcmtlcl9jbHVzdGVyZXIgJiYgJHBhbm89PWZhbHNlKXsvL29ubHkgZG8gbWFya2VyIGNsdXN0ZXJlciBmb3IgbWFwLCBub3Qgc3RyZWV0dmlldwogICAgICAgIAkkX291dHB1dCAuPSAiCiAgICAgICAgCSAgIG1hcmtlckNsdXN0ZXJlciIuJG1hcF9pZC4iID0gbmV3IE1hcmtlckNsdXN0ZXJlcigiLiRfcHJlZml4LiRtYXBfaWQuIiwgbWFya2VycyIuJG1hcF9pZC4iLCB7CgkJICAgICAgICAgIG1heFpvb206ICIuJHRoaXMtPm1hcmtlcl9jbHVzdGVyZXJfb3B0aW9uc1sibWF4Wm9vbSJdLiIsCgkJICAgICAgICAgIGdyaWRTaXplOiAiLiR0aGlzLT5tYXJrZXJfY2x1c3RlcmVyX29wdGlvbnNbImdyaWRTaXplIl0uIiwKCQkgICAgICAgICAgc3R5bGVzOiAiLiR0aGlzLT5tYXJrZXJfY2x1c3RlcmVyX29wdGlvbnNbInN0eWxlcyJdLiIKCQkgICAgICAgIH0pOwoJCSAgICAgICAgCQogICAgICAgIAkiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJF9vdXRwdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBvdmVycmlkYWJsZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBwb2x5bGluZSBqcyAtIGZvciBub3cgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIG1hcCwgbm90IGEgc3RyZWV0dmlldwogICAgICovCiAgICBmdW5jdGlvbiBnZXRQb2x5bGluZUpTKCkgewogICAgICAgICRfb3V0cHV0ID0gJyc7CiAgICAgICAgZm9yZWFjaCgkdGhpcy0+X3BvbHlsaW5lcyBhcyAkcG9seWxpbmVfaWQgPT4kX3BvbHlsaW5lKSB7CiAgICAgICAgCSRfY29vcmRzX291dHB1dCA9ICIiOwogICAgICAgIAlmb3JlYWNoKCRfcG9seWxpbmVbImNvb3JkcyJdIGFzICRfY29vcmRzKXsKCQkJCWlmKCRfY29vcmRzX291dHB1dCAhPSAiIil7JF9jb29yZHNfb3V0cHV0Lj0iLCI7fQogICAgICAgIAkJJF9jb29yZHNfb3V0cHV0IC49ICIKICAgICAgICAJCSAgICBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKCIuJF9jb29yZHNbImxhdCJdLiIsICIuJF9jb29yZHNbImxvbmciXS4iKQogICAgICAgIAkJIjsKICAgICAgICAJfQogICAgICAgIAkkX291dHB1dCAuPSAiCiAgICAgICAgCSAgIHBvbHlsaW5lQ29vcmRzIi4kdGhpcy0+bWFwX2lkLiJbJHBvbHlsaW5lX2lkXSA9IFsiLiRfY29vcmRzX291dHB1dC4iXTsgICAgCQoJCQkgICBwb2x5bGluZXMiLiR0aGlzLT5tYXBfaWQuIlskcG9seWxpbmVfaWRdID0gbmV3IGdvb2dsZS5tYXBzLlBvbHlsaW5lKHsKCQkJCSAgcGF0aDogcG9seWxpbmVDb29yZHMiLiR0aGlzLT5tYXBfaWQuIlskcG9seWxpbmVfaWRdCgkJCQkgICIuKCgkX3BvbHlsaW5lWydjb2xvciddIT0iIik/Iiwgc3Ryb2tlQ29sb3I6ICciLiRfcG9seWxpbmVbJ2NvbG9yJ10uIiciOiIiKS4iCgkJCQkgICIuKCgkX3BvbHlsaW5lWydvcGFjaXR5J10hPTApPyIsIHN0cm9rZU9wYWNpdHk6ICIuJF9wb2x5bGluZVsnb3BhY2l0eSddLiIiOiIiKS4iCgkJCQkgICIuKCgkX3BvbHlsaW5lWyd3ZWlnaHQnXSE9MCk/Iiwgc3Ryb2tlV2VpZ2h0OiAiLiRfcG9seWxpbmVbJ3dlaWdodCddLiIiOiIiKS4iCgkJCSAgfSk7CQkJCgkJCSAgcG9seWxpbmVzIi4kdGhpcy0+bWFwX2lkLiJbJHBvbHlsaW5lX2lkXS5zZXRNYXAobWFwIi4kdGhpcy0+bWFwX2lkLiIpOwogICAgICAgIAkiOwoJCQkKCQkJLy9FbGV2YXRpb24gcHJvZmlsZXMKCQkJaWYoIWVtcHR5KCR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lcykgJiYgaXNzZXQoJHRoaXMtPl9lbGV2YXRpb25fcG9seWxpbmVzWyRwb2x5bGluZV9pZF0pKXsKCQkJCSRlbGV2YXRpb25fZG9tX2lkPSR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lc1skcG9seWxpbmVfaWRdWyJkb21faWQiXTsKCQkJCSR3aWR0aCA9ICR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lc1skcG9seWxpbmVfaWRdWyJ3aWR0aCJdOwoJCQkJJGhlaWdodCA9ICR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lc1skcG9seWxpbmVfaWRdWyJoZWlnaHQiXTsKCQkJCSRzYW1wbGVzID0gJHRoaXMtPl9lbGV2YXRpb25fcG9seWxpbmVzWyRwb2x5bGluZV9pZF1bInNhbXBsZXMiXTsKCQkJCSRmb2N1c19jb2xvciA9ICR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lc1skcG9seWxpbmVfaWRdWyJmb2N1c19jb2xvciJdOwoJCQkJJF9vdXRwdXQgLj0gIgoJCQkJCWVsZXZhdGlvblBvbHlsaW5lcyIuJHRoaXMtPm1hcF9pZC4iWyRwb2x5bGluZV9pZF0gPSB7CgkJCQkJCSdzZWxlY3Rvcic6JyRlbGV2YXRpb25fZG9tX2lkJywKCQkJCQkJJ2NoYXJ0JzogbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCckZWxldmF0aW9uX2RvbV9pZCcpKSwKCQkJCQkJJ3NlcnZpY2UnOiBuZXcgZ29vZ2xlLm1hcHMuRWxldmF0aW9uU2VydmljZSgpLAoJCQkJCQknd2lkdGgnOiR3aWR0aCwKCQkJCQkJJ2hlaWdodCc6JGhlaWdodCwKCQkJCQkJJ2ZvY3VzQ29sb3InOickZm9jdXNfY29sb3InLAoJCQkJCQknbWFya2VyJzpudWxsCgkJCQkJfTsKCQkJCQllbGV2YXRpb25Qb2x5bGluZXMiLiR0aGlzLT5tYXBfaWQuIlskcG9seWxpbmVfaWRdWydzZXJ2aWNlJ10uZ2V0RWxldmF0aW9uQWxvbmdQYXRoKHsKCQkJCQkJcGF0aDogcG9seWxpbmVDb29yZHMiLiR0aGlzLT5tYXBfaWQuIlskcG9seWxpbmVfaWRdLAoJCQkJCQlzYW1wbGVzOiAkc2FtcGxlcwoJCQkJCX0sIGZ1bmN0aW9uKHJlc3VsdHMsc3RhdHVzKXtwbG90RWxldmF0aW9uKHJlc3VsdHMsc3RhdHVzLCBlbGV2YXRpb25Qb2x5bGluZXMiLiR0aGlzLT5tYXBfaWQuIlskcG9seWxpbmVfaWRdLCBtYXAiLiR0aGlzLT5tYXBfaWQuIiwgZWxldmF0aW9uQ2hhcnRzIi4kdGhpcy0+bWFwX2lkLiIpO30pOwoJCQkJIjsKCQkJfQoJCX0KICAgICAgICByZXR1cm4gJF9vdXRwdXQ7CiAgICB9CgkKCS8qKgoJICogZnVuY3Rpb24gdG8gcmVuZGVyIHByb3BlciBjYWxscyBmb3IgZGlyZWN0aW9ucyAtIGZvciBub3cgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIG1hcCwgbm90IGEgc3RyZWV0dmlldwoJICovCgkgZnVuY3Rpb24gZ2V0QWRkRGlyZWN0aW9uc0pTKCl7CgkJJF9vdXRwdXQgPSAiIjsgCgkJIAoJCWZvcmVhY2goJHRoaXMtPl9kaXJlY3Rpb25zIGFzICRkaXJlY3Rpb25zKXsKCQkJJGRvbV9pZCA9ICRkaXJlY3Rpb25zWyJkb21faWQiXTsJCQkKCQkJJHRyYXZlbE1vZGVQYXJhbXMgPSBhcnJheSgpOwoJCQkkZGlyZWN0aW9uc1BhcmFtcyA9ICIiOyAgICAgICAgIAoJCQlpZigkdGhpcy0+d2Fsa2luZ19kaXJlY3Rpb25zPT1UUlVFKQoJCQkJJGRpcmVjdGlvbnNQYXJhbXMgLj0gIiwgXG4gdHJhdmVsTW9kZTpnb29nbGUubWFwcy5EaXJlY3Rpb25zVHJhdmVsTW9kZS5XQUxLSU5HIjsKCQkJZWxzZSBpZigkdGhpcy0+YmlraW5nX2RpcmVjdGlvbnM9PVRSVUUpCgkJCQkkZGlyZWN0aW9uc1BhcmFtcyAuPSAiLCBcbiB0cmF2ZWxNb2RlOmdvb2dsZS5tYXBzLkRpcmVjdGlvbnNUcmF2ZWxNb2RlLkJJQ1lDTElORyI7CgkJCWVsc2UKCQkJCSRkaXJlY3Rpb25zUGFyYW1zIC49ICIsIFxuIHRyYXZlbE1vZGU6Z29vZ2xlLm1hcHMuRGlyZWN0aW9uc1RyYXZlbE1vZGUuRFJJVklORyI7CgkJICAgCgkJCWlmKCR0aGlzLT5hdm9pZF9oaWdod2F5cz09VFJVRSkKCQkJICAgJGRpcmVjdGlvbnNQYXJhbXMgLj0gIiwgXG4gYXZvaWRIaWdod2F5czogdHJ1ZSI7CgkJCWlmKCR0aGlzLT5hdm9pZF90b2xsd2F5cz09VFJVRSkKCQkJICAgJGRpcmVjdGlvbnNQYXJhbXMgLj0gIiwgXG4gYXZvaWRUb2xsczogdHJ1ZSI7CQkJCgkJCQoJCQkkX291dHB1dCAuPSAiCgkJCSAgICBkaXJlY3Rpb25zIi4kdGhpcy0+bWFwX2lkLiJbJyRkb21faWQnXSA9IHsKCQkJCQlkaXNwbGF5UmVuZGVyZXI6bmV3IGdvb2dsZS5tYXBzLkRpcmVjdGlvbnNSZW5kZXJlcigpLAoJCQkJCWRpcmVjdGlvblNlcnZpY2U6bmV3IGdvb2dsZS5tYXBzLkRpcmVjdGlvbnNTZXJ2aWNlKCksCgkJCQkJcmVxdWVzdDp7CgkJCQkJCW9yaWdpbjogJyIuJGRpcmVjdGlvbnNbInN0YXJ0Il0uIicsCgkJCQkJCWRlc3RpbmF0aW9uOiAnIi4kZGlyZWN0aW9uc1siZGVzdCJdLiInCgkJCQkJCSRkaXJlY3Rpb25zUGFyYW1zCgkJCQkJfQoJCQkJCSIuKCgkdGhpcy0+ZWxldmF0aW9uX2RpcmVjdGlvbnMpPyIsCQkKCQkJCQkgICBzZWxlY3RvcjogJyIuJGRpcmVjdGlvbnNbImVsZXZhdGlvbl9kb21faWQiXS4iJywKCQkJCQkgICBjaGFydDogbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciLiRkaXJlY3Rpb25zWyJlbGV2YXRpb25fZG9tX2lkIl0uIicpKSwKCQkJCQkgICBzZXJ2aWNlOiBuZXcgZ29vZ2xlLm1hcHMuRWxldmF0aW9uU2VydmljZSgpLAoJCQkJCSAgIHdpZHRoOiIuJGRpcmVjdGlvbnNbIndpZHRoIl0uIiwKCQkJCQkgICBoZWlnaHQ6Ii4kZGlyZWN0aW9uc1siaGVpZ2h0Il0uIiwKCQkJCQkgICBmb2N1c0NvbG9yOicjMDBGRjAwJywKCQkJCQkgICBtYXJrZXI6bnVsbAoJCQkJICAgIjoiIikuIgoJCQkJfTsKCQkJCWRpcmVjdGlvbnMiLiR0aGlzLT5tYXBfaWQuIlsnJGRvbV9pZCddLmRpc3BsYXlSZW5kZXJlci5zZXRNYXAobWFwIi4kdGhpcy0+bWFwX2lkLiIpOwoJCQkJZGlyZWN0aW9ucyIuJHRoaXMtPm1hcF9pZC4iWyckZG9tX2lkJ10uZGlzcGxheVJlbmRlcmVyLnNldFBhbmVsKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCckZG9tX2lkJykpOwoJCQkJZGlyZWN0aW9ucyIuJHRoaXMtPm1hcF9pZC4iWyckZG9tX2lkJ10uZGlyZWN0aW9uU2VydmljZS5yb3V0ZShkaXJlY3Rpb25zIi4kdGhpcy0+bWFwX2lkLiJbJyRkb21faWQnXS5yZXF1ZXN0LCBmdW5jdGlvbihyZXNwb25zZSwgc3RhdHVzKSB7CgkJCQkJaWYgKHN0YXR1cyA9PSBnb29nbGUubWFwcy5EaXJlY3Rpb25zU3RhdHVzLk9LKSB7CgkJCQkJICAgZGlyZWN0aW9ucyIuJHRoaXMtPm1hcF9pZC4iWyckZG9tX2lkJ10uZGlzcGxheVJlbmRlcmVyLnNldERpcmVjdGlvbnMocmVzcG9uc2UpOwoJCQkJCSAgICIuKCgkdGhpcy0+ZWxldmF0aW9uX2RpcmVjdGlvbnMpPyIKCQkJCQkJICAgZGlyZWN0aW9ucyIuJHRoaXMtPm1hcF9pZC4iWyckZG9tX2lkJ10uc2VydmljZS5nZXRFbGV2YXRpb25BbG9uZ1BhdGgoewoJCQkJCQkJICAgcGF0aDogcmVzcG9uc2Uucm91dGVzWzBdLm92ZXJ2aWV3X3BhdGgsCgkJCQkJCQkgICBzYW1wbGVzOiAiLiRkaXJlY3Rpb25zWyJlbGV2YXRpb25fc2FtcGxlcyJdLiIKCQkJCQkJICAgfSwgZnVuY3Rpb24ocmVzdWx0cyxzdGF0dXMpe3Bsb3RFbGV2YXRpb24ocmVzdWx0cyxzdGF0dXMsIGRpcmVjdGlvbnMiLiR0aGlzLT5tYXBfaWQuIlsnJGRvbV9pZCddLCBtYXAiLiR0aGlzLT5tYXBfaWQuIiwgZWxldmF0aW9uQ2hhcnRzIi4kdGhpcy0+bWFwX2lkLiIpO30pOwoJCQkJCSAgICI6IiIpLiIKCQkJCQl9CgkJCQl9KTsKCQkJICI7CgkJIH0KCQkgCgkJIHJldHVybiAkX291dHB1dDsKCSB9CgkKCS8qKgoJICogZnVuY3Rpb24gdG8gZ2V0IG92ZXJsYXkgY3JlYXRpb24gSlMuCgkgKi8KCSBmdW5jdGlvbiBnZXRBZGRPdmVybGF5SlMoKXsKCQkgJF9vdXRwdXQgPSAiIjsKCQkgZm9yZWFjaCgkdGhpcy0+X292ZXJsYXlzIGFzICRfa2V5PT4kX292ZXJsYXkpewoJCQkgJF9vdXRwdXQgLj0gIgoJCQkgCSB2YXIgYm91bmRzID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcyhuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKCIuJF9vdmVybGF5WyJib3VuZHMiXVsibmUiXVsibGF0Il0uIiwgIi4kX292ZXJsYXlbImJvdW5kcyJdWyJuZSJdWyJsb25nIl0uIiksIG5ldyBnb29nbGUubWFwcy5MYXRMbmcoIi4kX292ZXJsYXlbImJvdW5kcyJdWyJzdyJdWyJsYXQiXS4iLCAiLiRfb3ZlcmxheVsiYm91bmRzIl1bInN3Il1bImxvbmciXS4iKSk7CgkJCQkgdmFyIGltYWdlID0gJyIuJF9vdmVybGF5WyJpbWciXS4iJzsKCQkJICAgICBvdmVybGF5cyIuJHRoaXMtPm1hcF9pZC4iWyRfa2V5XSA9IG5ldyBDdXN0b21PdmVybGF5KGJvdW5kcywgaW1hZ2UsIG1hcCIuJHRoaXMtPm1hcF9pZC4iLCAiLiRfb3ZlcmxheVsib3BhY2l0eSJdLiIpOwoJCQkgIjsKCQkgfQoJCSByZXR1cm4gJF9vdXRwdXQ7CgkgfQoKICAgIC8qKgogICAgICogb3ZlcnJpZGFibGUgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIGpzIGZvciB0aGUganMgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbWFya2VyLgogICAgICovCiAgICBmdW5jdGlvbiBnZXRDcmVhdGVNYXJrZXJKUygpIHsKICAgIAkkX291dHB1dCA9ICIKICAgIAkgICBmdW5jdGlvbiBjcmVhdGVNYXJrZXIobWFwLCBwb2ludCwgdGl0bGUsIGh0bWwsIGljb24sIGljb25fc2hhZG93LCBzaWRlYmFyX2lkLCBvcGVuZXJzKXsKCQkJICAgIHZhciBtYXJrZXJfb3B0aW9ucyA9IHsKCQkJICAgICAgICBwb3NpdGlvbjogcG9pbnQsCgkJCSAgICAgICAgbWFwOiBtYXAsCgkJCSAgICAgICAgdGl0bGU6IHRpdGxlfTsgIAoJCQkgICAgaWYoaWNvbiE9Jycpe21hcmtlcl9vcHRpb25zLmljb24gPSBpY29uO30KCQkJICAgIGlmKGljb25fc2hhZG93IT0nJyl7bWFya2VyX29wdGlvbnMuaWNvbl9zaGFkb3cgPSBpY29uX3NoYWRvdzt9CgkJCSAgICAvL2NyZWF0ZSBtYXJrZXIKCQkJICAgIHZhciBuZXdfbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcihtYXJrZXJfb3B0aW9ucyk7CgkJCSAgICBpZihodG1sIT0nJyl7CgkJCQkJIi4oKCR0aGlzLT5pbmZvX3dpbmRvdyk/IgoJCQkgICAgICAgIHZhciBpbmZvd2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coe2NvbnRlbnQ6IGh0bWx9KTsKCQkJICAgICAgICBnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcihuZXdfbWFya2VyLCAnIi4kdGhpcy0+d2luZG93X3RyaWdnZXIuIicsIGZ1bmN0aW9uKCkgewoJCQkgICAgICAgICAgaW5mb3dpbmRvdy5vcGVuKG1hcCxuZXdfbWFya2VyKTsKCQkJICAgICAgICB9KTsKCQkJCQlpZihvcGVuZXJzICE9ICcnJiYhaXNFbXB0eShvcGVuZXJzKSl7CgkJCSAgICAgICAgICAgZm9yKHZhciBpIGluIG9wZW5lcnMpewoJCQkgICAgICAgICAgICAgdmFyIG9wZW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wZW5lcnNbaV0pOwoJCQkgICAgICAgICAgICAgb3BlbmVyLm9uIi4kdGhpcy0+d2luZG93X3RyaWdnZXIuIiA9IGZ1bmN0aW9uKCl7aW5mb3dpbmRvdy5vcGVuKG1hcCxuZXdfbWFya2VyKTsgcmV0dXJuIGZhbHNlfTsKCQkJICAgICAgICAgICB9CgkJCSAgICAgICAgfQoJCQkJCSI6IiIpLiIKCQkJICAgICAgICBpZihzaWRlYmFyX2lkICE9ICcnKXsKCQkJICAgICAgICAgICAgdmFyIHNpZGViYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzaWRlYmFyX2lkKTsKCQkJCQkJaWYoc2lkZWJhciE9bnVsbCAmJiBzaWRlYmFyIT11bmRlZmluZWQgJiYgdGl0bGUhPW51bGwgJiYgdGl0bGUhPScnKXsKCQkJCQkJCXZhciBuZXdsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwoJCQkJCQkJIi4oKCR0aGlzLT5pbmZvX3dpbmRvdyk/IgoJCQkgICAgICAgIAkJbmV3bGluay5vbmNsaWNrPWZ1bmN0aW9uKCl7aW5mb3dpbmRvdy5vcGVuKG1hcCxuZXdfbWFya2VyKTsgcmV0dXJuIGZhbHNlfTsKCQkJCQkJCSI6IgoJCQkJCQkJbmV3bGluay5vbmNsaWNrPWZ1bmN0aW9uKCl7bWFwLnNldENlbnRlcihwb2ludCk7IHJldHVybiBmYWxzZX07CgkJCQkJCQkiKS4iCgkJCQkJCQluZXdsaW5rLmlubmVySFRNTCA9IHRpdGxlICsgJyAnOwoJCQkJCQkJc2lkZWJhci5hcHBlbmRDaGlsZChuZXdsaW5rKTsKCQkJCQkJfQoJCQkgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCQkJICAgIHJldHVybiBuZXdfbWFya2VyOyAgCgkJCX0KICAgIAkiOwogICAgCXJldHVybiAkX291dHB1dDsKICAgIH0KCQoJLyoqCgkgKiBHZXQgY3JlYXRlIG92ZXJsYXkganMKCSAqLwoJIGZ1bmN0aW9uIGdldENyZWF0ZU92ZXJsYXlKUygpewoJCSAkX291dHB1dCA9ICIKCQkgCUN1c3RvbU92ZXJsYXkucHJvdG90eXBlID0gbmV3IGdvb2dsZS5tYXBzLk92ZXJsYXlWaWV3KCk7CQoJCQlmdW5jdGlvbiBDdXN0b21PdmVybGF5KGJvdW5kcywgaW1hZ2UsIG1hcCwgb3BhY2l0eSl7CgkJCQl0aGlzLmJvdW5kc18gPSBib3VuZHM7CgkJCQl0aGlzLmltYWdlXyA9IGltYWdlOwoJCQkJdGhpcy5tYXBfID0gbWFwOwoJCQkJdGhpcy5kaXZfID0gbnVsbDsKCQkJCXRoaXMub3BhY2l0eSA9IChvcGFjaXR5IT0nJyk/b3BhY2l0eToxMDsKCQkJCXRoaXMuc2V0TWFwKG1hcCk7CgkJCX0KCQkJQ3VzdG9tT3ZlcmxheS5wcm90b3R5cGUub25BZGQgPSBmdW5jdGlvbigpIHsKCQkJCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTsKCQkJCWRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJzsKCQkJCWRpdi5zdHlsZS5ib3JkZXJXaWR0aCA9ICcwcHgnOwoJCQkJZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKCQkJCXZhciBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKCQkJCWltZy5zcmMgPSB0aGlzLmltYWdlXzsKCQkJCWltZy5zdHlsZS53aWR0aCA9ICcxMDAlJzsKCQkJCWltZy5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7CgkJCQlpbWcuc3R5bGUub3BhY2l0eSA9IHRoaXMub3BhY2l0eS8xMDsKCQkJCWltZy5zdHlsZS5maWx0ZXIgPSAnYWxwaGEob3BhY2l0eT0nK3RoaXMub3BhY2l0eSoxMCsnKSc7CQoJCQkJZGl2LmFwcGVuZENoaWxkKGltZyk7CgkJCQl0aGlzLmRpdl8gPSBkaXY7CQoJCQkJdmFyIHBhbmVzID0gdGhpcy5nZXRQYW5lcygpOwoJCQkJcGFuZXMub3ZlcmxheUltYWdlLmFwcGVuZENoaWxkKGRpdik7CgkJCX0KCQkJQ3VzdG9tT3ZlcmxheS5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKCkgewoJCQkJdmFyIG92ZXJsYXlQcm9qZWN0aW9uID0gdGhpcy5nZXRQcm9qZWN0aW9uKCk7CgkJCQl2YXIgc3cgPSBvdmVybGF5UHJvamVjdGlvbi5mcm9tTGF0TG5nVG9EaXZQaXhlbCh0aGlzLmJvdW5kc18uZ2V0U291dGhXZXN0KCkpOwoJCQkJdmFyIG5lID0gb3ZlcmxheVByb2plY3Rpb24uZnJvbUxhdExuZ1RvRGl2UGl4ZWwodGhpcy5ib3VuZHNfLmdldE5vcnRoRWFzdCgpKTsKCQkJCXZhciBkaXYgPSB0aGlzLmRpdl87CgkJCQlkaXYuc3R5bGUubGVmdCA9IHN3LnggKyAncHgnOwoJCQkJZGl2LnN0eWxlLnRvcCA9IG5lLnkgKyAncHgnOwoJCQkJZGl2LnN0eWxlLndpZHRoID0gKG5lLnggLSBzdy54KSArICdweCc7CgkJCQlkaXYuc3R5bGUuaGVpZ2h0ID0gKHN3LnkgLSBuZS55KSArICdweCc7CgkJCX0KCQkJQ3VzdG9tT3ZlcmxheS5wcm90b3R5cGUub25SZW1vdmUgPSBmdW5jdGlvbigpIHsKCQkJCXRoaXMuZGl2Xy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2Xyk7CgkJCQl0aGlzLmRpdl8gPSBudWxsOwoJCQl9CgkJICI7CQkgCgkJIHJldHVybiAkX291dHB1dDsKCSB9CgkgCgkgLyoqCgkgICogcHJpbnQgaGVscGVyIGZ1bmN0aW9uIHRvIGRyYXcgZWxldmF0aW9uIHJlc3VsdHMgYXMgYSBjaGFydAoJICAqLwoJZnVuY3Rpb24gZ2V0UGxvdEVsZXZhdGlvbkpTKCl7CgkJJF9vdXRwdXQgPSAiCgkJCWZ1bmN0aW9uIHBsb3RFbGV2YXRpb24ocmVzdWx0cywgc3RhdHVzLCBlbGV2YXRpb25fZGF0YSwgbWFwLCBjaGFydHNfYXJyYXkpIHsKCQkJCWNoYXJ0c19hcnJheVtlbGV2YXRpb25fZGF0YS5zZWxlY3Rvcl0gPSB7CgkJCQkJcmVzdWx0czpyZXN1bHRzLAoJCQkJCWRhdGE6bmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpCgkJCQl9OwoJCQkJY2hhcnRzX2FycmF5W2VsZXZhdGlvbl9kYXRhLnNlbGVjdG9yXS5kYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1NhbXBsZScpOwoJCQkJY2hhcnRzX2FycmF5W2VsZXZhdGlvbl9kYXRhLnNlbGVjdG9yXS5kYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0VsZXZhdGlvbicpOwoJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFydHNfYXJyYXlbZWxldmF0aW9uX2RhdGEuc2VsZWN0b3JdLnJlc3VsdHMubGVuZ3RoOyBpKyspIHsKCQkJCSAgY2hhcnRzX2FycmF5W2VsZXZhdGlvbl9kYXRhLnNlbGVjdG9yXS5kYXRhLmFkZFJvdyhbJycsIGNoYXJ0c19hcnJheVtlbGV2YXRpb25fZGF0YS5zZWxlY3Rvcl0ucmVzdWx0c1tpXS5lbGV2YXRpb25dKTsKCQkJCX0KCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZXZhdGlvbl9kYXRhLnNlbGVjdG9yKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCQkJCWVsZXZhdGlvbl9kYXRhLmNoYXJ0LmRyYXcoY2hhcnRzX2FycmF5W2VsZXZhdGlvbl9kYXRhLnNlbGVjdG9yXS5kYXRhLCB7CgkJCQkgIHdpZHRoOiBlbGV2YXRpb25fZGF0YS53aWR0aCwKCQkJCSAgaGVpZ2h0OiBlbGV2YXRpb25fZGF0YS5oZWlnaHQsCgkJCQkgIGxlZ2VuZDogJ25vbmUnLAoJCQkJICB0aXRsZVk6ICdFbGV2YXRpb24gKG0pJywKCQkJCSAgZm9jdXNCb3JkZXJDb2xvcjogZWxldmF0aW9uX2RhdGEuZm9jdXNDb2xvcgoJCQkJfSk7CgkJIjsKCQlpZigkdGhpcy0+ZWxldmF0aW9uX21hcmtlcnMpewoJCQkkX291dHB1dCAuPSAkdGhpcy0+Z2V0RWxldmF0aW9uTWFya2VySlMoKTsJCQkKCQl9CgkJJF9vdXRwdXQgLj0gIn0iOwoJCXJldHVybiAkX291dHB1dDsKCX0JICAKCQoJLyoqCgkgKiBjcmVhdGUgSlMgdGhhdCBpcyBpbnNpZGUgb2YgSlMgcGxvdCBlbGV2YXRpb24gZnVuY3Rpb24KCSAqLwoJIGZ1bmN0aW9uIGdldEVsZXZhdGlvbk1hcmtlckpTKCl7CgkJICRfb3V0cHV0ID0gIgoJCQlnb29nbGUudmlzdWFsaXphdGlvbi5ldmVudHMuYWRkTGlzdGVuZXIoZWxldmF0aW9uX2RhdGEuY2hhcnQsICdvbm1vdXNlb3ZlcicsIGZ1bmN0aW9uKGUpIHsKCQkJCWlmKGVsZXZhdGlvbl9kYXRhLm1hcmtlcj09bnVsbCl7CgkJCQkJZWxldmF0aW9uX2RhdGEubWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7CgkJCQkJICBwb3NpdGlvbjogY2hhcnRzX2FycmF5W2VsZXZhdGlvbl9kYXRhLnNlbGVjdG9yXS5yZXN1bHRzW2Uucm93XS5sb2NhdGlvbiwKCQkJCQkgIG1hcDogbWFwLAoJCQkJCSAgaWNvbjogJ2h0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwZmlsZXMvbXMvaWNvbnMvZ3JlZW4tZG90LnBuZycKCQkJCQl9KTsKCQkJCX1lbHNlewoJCQkJCWVsZXZhdGlvbl9kYXRhLm1hcmtlci5zZXRQb3NpdGlvbihjaGFydHNfYXJyYXlbZWxldmF0aW9uX2RhdGEuc2VsZWN0b3JdLnJlc3VsdHNbZS5yb3ddLmxvY2F0aW9uKTsKCQkJCX0KCQkJCW1hcC5zZXRDZW50ZXIoY2hhcnRzX2FycmF5W2VsZXZhdGlvbl9kYXRhLnNlbGVjdG9yXS5yZXN1bHRzW2Uucm93XS5sb2NhdGlvbik7CgkJCX0pOwoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGV2YXRpb25fZGF0YS5zZWxlY3Rvcikub25tb3VzZW91dCA9IGZ1bmN0aW9uKCl7CgkJCQllbGV2YXRpb25fZGF0YS5tYXJrZXIgPSBjbGVhckVsZXZhdGlvbk1hcmtlcihlbGV2YXRpb25fZGF0YS5tYXJrZXIpOwoJCQl9OwoJCQlmdW5jdGlvbiBjbGVhckVsZXZhdGlvbk1hcmtlcihtYXJrZXIpewoJCQkgIGlmKG1hcmtlciE9bnVsbCl7CgkJCQkgIG1hcmtlci5zZXRNYXAobnVsbCk7CgkJCQkgIHJldHVybiBudWxsOwoJCQkgIH0KCQkJfQoJCSI7CgkJcmV0dXJuICRfb3V0cHV0OwoJIH0KCSAKCiAgICAvKioKICAgICAqIHByaW50IG1hcCAocHV0IGF0IGxvY2F0aW9uIG1hcCB3aWxsIGFwcGVhcikKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBwcmludE1hcCgpIHsKICAgICAgICBlY2hvICR0aGlzLT5nZXRNYXAoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHJldHVybiBtYXAKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBnZXRNYXAoKSB7CiAgICAgICAgJF9vdXRwdXQgPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4nIC4gIlxuIiAuICcvLzwhW0NEQVRBWycgLiAiXG4iOwogICAgICAgIC8vJF9vdXRwdXQgLj0gJ2lmIChHQnJvd3NlcklzQ29tcGF0aWJsZSgpKSB7JyAuICJcbiI7CiAgICAgICAgaWYoc3RybGVuKCR0aGlzLT53aWR0aCkgPiAwICYmIHN0cmxlbigkdGhpcy0+aGVpZ2h0KSA+IDApIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignZG9jdW1lbnQud3JpdGUoXCc8ZGl2IGlkPSIlcyIgc3R5bGU9IndpZHRoOiAlczsgaGVpZ2h0OiAlczsgcG9zaXRpb246cmVsYXRpdmU7Ij48XC9kaXY+XCcpOycsJHRoaXMtPm1hcF9pZCwkdGhpcy0+d2lkdGgsJHRoaXMtPmhlaWdodCkgLiAiXG4iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ2RvY3VtZW50LndyaXRlKFwnPGRpdiBpZD0iJXMiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsiPjxcL2Rpdj5cJyk7JywkdGhpcy0+bWFwX2lkKSAuICJcbiI7ICAgICAKICAgICAgICB9CiAgICAgICAgLy8kX291dHB1dCAuPSAnfSc7CgogICAgICAgIC8vaWYoIWVtcHR5KCR0aGlzLT5qc19hbGVydCkpIHsKICAgICAgICAvLyAgICAkX291dHB1dCAuPSAnIGVsc2UgeycgLiAiXG4iOwogICAgICAgIC8vICAgICRfb3V0cHV0IC49IHNwcmludGYoJ2RvY3VtZW50LndyaXRlKFwnJXNcJyk7Jywgc3RyX3JlcGxhY2UoJy8nLCdcLycsJHRoaXMtPmpzX2FsZXJ0KSkgLiAiXG4iOwogICAgICAgIC8vICAgICRfb3V0cHV0IC49ICd9JyAuICJcbiI7CiAgICAgICAgLy99CgogICAgICAgICRfb3V0cHV0IC49ICcvL11dPicgLiAiXG4iIC4gJzwvc2NyaXB0PicgLiAiXG4iOwoKICAgICAgICBpZighZW1wdHkoJHRoaXMtPmpzX2FsZXJ0KSkgewogICAgICAgICAgICAkX291dHB1dCAuPSAnPG5vc2NyaXB0PicgLiAkdGhpcy0+anNfYWxlcnQgLiAnPC9ub3NjcmlwdD4nIC4gIlxuIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkX291dHB1dDsKICAgIH0KCiAgICAKICAgIC8qKgogICAgICogcHJpbnQgc2lkZWJhciAocHV0IGF0IGxvY2F0aW9uIHNpZGViYXIgd2lsbCBhcHBlYXIpCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gcHJpbnRTaWRlYmFyKCkgewogICAgICAgIGVjaG8gJHRoaXMtPmdldFNpZGViYXIoKTsKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiByZXR1cm4gc2lkZWJhciBodG1sCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0U2lkZWJhcigpIHsKICAgICAgICByZXR1cm4gc3ByaW50ZignPGRpdiBpZD0iJXMiIGNsYXNzPSInLiR0aGlzLT5zaWRlYmFyX2lkLiciPjwvZGl2PicsJHRoaXMtPnNpZGViYXJfaWQpIC4gIlxuIjsKICAgIH0gICAgCiAgICAgICAgICAgIAogICAgLyoqCiAgICAgKiBnZXQgdGhlIGdlb2NvZGUgbGF0L2xvbiBwb2ludHMgZnJvbSBnaXZlbiBhZGRyZXNzCiAgICAgKiBsb29rIGluIGNhY2hlIGZpcnN0LCBvdGhlcndpc2UgZ2V0IGZyb20gWWFob28KICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcwogICAgICogQHJldHVybiBhcnJheSBHZW9Db2RlIGluZm9ybWF0aW9uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEdlb2NvZGUoJGFkZHJlc3MpIHsKICAgICAgICBpZihlbXB0eSgkYWRkcmVzcykpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAkX2dlb2NvZGUgPSBmYWxzZTsgIAogICAgICAgIGlmKCgkX2dlb2NvZGUgPSAkdGhpcy0+Z2V0Q2FjaGUoJGFkZHJlc3MpKSA9PT0gZmFsc2UpIHsKICAgICAgICAJaWYoKCRfZ2VvY29kZSA9ICR0aGlzLT5nZW9HZXRDb29yZHMoJGFkZHJlc3MpKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgCSR0aGlzLT5wdXRDYWNoZSgkYWRkcmVzcywgJF9nZW9jb2RlWydsb24nXSwgJF9nZW9jb2RlWydsYXQnXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRfZ2VvY29kZTsKICAgIH0KICAgCiAgICAvKioKICAgICAqIGdldCB0aGUgZ2VvY29kZSBsYXQvbG9uIHBvaW50cyBmcm9tIGNhY2hlIGZvciBnaXZlbiBhZGRyZXNzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MKICAgICAqIEByZXR1cm4gYm9vbHxhcnJheSBGYWxzZSBpZiBubyBjYWNoZSwgYXJyYXkgb2YgZGF0YSBpZiBoYXMgY2FjaGUKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0Q2FjaGUoJGFkZHJlc3MpIHsKICAgICAgICBpZighaXNzZXQoJHRoaXMtPmRzbikpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAKICAgICAgICAkX3JldCA9IGFycmF5KCk7CiAgICAgICAgCiAgICAgICAgLy8gUEVBUiBEQgogICAgICAgIHJlcXVpcmVfb25jZSgnREIucGhwJyk7ICAgICAgICAgIAogICAgICAgICRfZGIgPSYgREI6OmNvbm5lY3QoJHRoaXMtPmRzbik7CiAgICAgICAgaWYgKFBFQVI6OmlzRXJyb3IoJF9kYikpIHsKICAgICAgICAgICAgZGllKCRfZGItPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgICAgICRfcmVzID0mICRfZGItPnF1ZXJ5KCJTRUxFQ1QgbG9uLGxhdCBGUk9NIHskdGhpcy0+X2RiX2NhY2hlX3RhYmxlfSB3aGVyZSBhZGRyZXNzID0gPyIsICRhZGRyZXNzKTsKICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkX3JlcykpIHsKICAgICAgICAgICAgZGllKCRfcmVzLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KICAgICAgICBpZigkX3JvdyA9ICRfcmVzLT5mZXRjaFJvdygpKSB7ICAgICAgICAgICAgCiAgICAgICAgICAgICRfcmV0Wydsb24nXSA9ICRfcm93WzBdOwogICAgICAgICAgICAkX3JldFsnbGF0J10gPSAkX3Jvd1sxXTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJF9kYi0+ZGlzY29ubmVjdCgpOwogICAgICAgIAogICAgICAgIHJldHVybiAhZW1wdHkoJF9yZXQpID8gJF9yZXQgOiBmYWxzZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBwdXQgdGhlIGdlb2NvZGUgbGF0L2xvbiBwb2ludHMgaW50byBjYWNoZSBmb3IgZ2l2ZW4gYWRkcmVzcwogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb24gdGhlIG1hcCBsYXRpdHVkZSAoaG9yaXpvbnRhbCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhdCB0aGUgbWFwIGxhdGl0dWRlICh2ZXJ0aWNhbCkKICAgICAqIEByZXR1cm4gYm9vbCBTdGF0dXMgb2YgcHV0IGNhY2hlIHJlcXVlc3QKICAgICAqLwogICAgZnVuY3Rpb24gcHV0Q2FjaGUoJGFkZHJlc3MsICRsb24sICRsYXQpIHsKICAgICAgICBpZighaXNzZXQoJHRoaXMtPmRzbikgfHwgKHN0cmxlbigkYWRkcmVzcykgPT0gMCB8fCBzdHJsZW4oJGxvbikgPT0gMCB8fCBzdHJsZW4oJGxhdCkgPT0gMCkpCiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIC8vIFBFQVIgREIKICAgICAgICByZXF1aXJlX29uY2UoJ0RCLnBocCcpOyAgICAgICAgIAogICAgICAgICRfZGIgPSYgREI6OmNvbm5lY3QoJHRoaXMtPmRzbik7CiAgICAgICAgaWYgKFBFQVI6OmlzRXJyb3IoJF9kYikpIHsKICAgICAgICAJZGllKCRfZGItPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgICAgICRfcmVzID0mICRfZGItPnF1ZXJ5KCdpbnNlcnQgaW50byAnLiR0aGlzLT5fZGJfY2FjaGVfdGFibGUuJyB2YWx1ZXMgKD8sID8sID8pJywgYXJyYXkoJGFkZHJlc3MsICRsb24sICRsYXQpKTsKICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkX3JlcykpIHsKICAgICAgICAgICAgZGllKCRfcmVzLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KICAgICAgICAkX2RiLT5kaXNjb25uZWN0KCk7CiAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAKICAgIH0KICAgCiAgICAvKioKICAgICAqIGdldCBnZW9jb2RlIGxhdC9sb24gcG9pbnRzIGZvciBnaXZlbiBhZGRyZXNzIGZyb20gWWFob28KICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcwogICAgICogQHJldHVybiBib29sfGFycmF5IGZhbHNlIGlmIGNhbid0IGJlIGdlb2NvZGVkLCBhcnJheSBvciBnZW9jZG9lcyBpZiBzdWNjZXNzZnVsCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdlb0dldENvb3JkcygkYWRkcmVzcywkZGVwdGg9MCkgewogICAgICAgIHN3aXRjaCgkdGhpcy0+bG9va3VwX3NlcnZpY2UpIHsKICAgICAgICAgICAgY2FzZSAnR09PR0xFJzoKICAgICAgICAgICAgICAgICRfdXJsID0gc3ByaW50ZignaHR0cDovLyVzL21hcHMvYXBpL2dlb2NvZGUvanNvbj9zZW5zb3I9JXMmYWRkcmVzcz0lcycsJHRoaXMtPmxvb2t1cF9zZXJ2ZXJbJ0dPT0dMRSddLCAkdGhpcy0+bW9iaWxlPT10cnVlPyJ0cnVlIjoiZmFsc2UiLCByYXd1cmxlbmNvZGUoJGFkZHJlc3MpKTsKICAgICAgICAgICAgICAgICRfcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpZigkX3Jlc3VsdCA9ICR0aGlzLT5mZXRjaFVSTCgkX3VybCkpIHsKICAgICAgICAgICAgICAgICAgICAkX3Jlc3VsdF9wYXJ0cyA9IGpzb25fZGVjb2RlKCRfcmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICBpZigkX3Jlc3VsdF9wYXJ0cy0+c3RhdHVzIT0iT0siKXsKICAgICAgICAgICAgICAgICAgICAJcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkX2Nvb3Jkc1snbGF0J10gPSAkX3Jlc3VsdF9wYXJ0cy0+cmVzdWx0c1swXS0+Z2VvbWV0cnktPmxvY2F0aW9uLT5sYXQ7CiAgICAgICAgICAgICAgICAgICAgJF9jb29yZHNbJ2xvbiddID0gJF9yZXN1bHRfcGFydHMtPnJlc3VsdHNbMF0tPmdlb21ldHJ5LT5sb2NhdGlvbi0+bG5nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ1lBSE9PJzoKICAgICAgICAgICAgZGVmYXVsdDogICAgICAgIAogICAgICAgICAgICAgICAgJF91cmwgPSAnaHR0cDovLyVzL01hcHNTZXJ2aWNlL1YxL2dlb2NvZGUnOwogICAgICAgICAgICAgICAgJF91cmwgLj0gc3ByaW50ZignP2FwcGlkPSVzJmxvY2F0aW9uPSVzJywkdGhpcy0+bG9va3VwX3NlcnZlclsnWUFIT08nXSwkdGhpcy0+YXBwX2lkLHJhd3VybGVuY29kZSgkYWRkcmVzcykpOwogICAgICAgICAgICAgICAgJF9yZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGlmKCRfcmVzdWx0ID0gJHRoaXMtPmZldGNoVVJMKCRfdXJsKSkgewogICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2goJyE8TGF0aXR1ZGU+KC4qKTwvTGF0aXR1ZGU+PExvbmdpdHVkZT4oLiopPC9Mb25naXR1ZGU+IVUnLCAkX3Jlc3VsdCwgJF9tYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgJF9jb29yZHNbJ2xvbiddID0gJF9tYXRjaFsyXTsKICAgICAgICAgICAgICAgICAgICAkX2Nvb3Jkc1snbGF0J10gPSAkX21hdGNoWzFdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSAgICAgICAgIAogICAgICAgIHJldHVybiAkX2Nvb3JkczsgICAgICAgCiAgICB9CiAgICAKCS8qKgogICAgICogZ2V0IGZ1bGwgZ2VvY29kZSBpbmZvcm1hdGlvbiBmb3IgZ2l2ZW4gYWRkcmVzcyBmcm9tIEdvb2dsZQoJICogTk9URTogVGhpcyBkb2VzIG5vdCB1c2UgdGhlIGdldENhY2hlIGZ1bmN0aW9uIGFzIHRoZXJlIGlzIAoJICogYSBsb3Qgb2YgZGF0YSBpbiBhIGZ1bGwgZ2VvY29kZSByZXNwb25zZSB0byBjYWNoZS4KICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcwogICAgICogQHJldHVybiBib29sfGFycmF5IGZhbHNlIGlmIGNhbid0IGJlIGdlb2NvZGVkLCBhcnJheSBvciBnZW9jZG9lcyBpZiBzdWNjZXNzZnVsCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdlb0dldENvb3Jkc0Z1bGwoJGFkZHJlc3MsJGRlcHRoPTApIHsKICAgICAgICBzd2l0Y2goJHRoaXMtPmxvb2t1cF9zZXJ2aWNlKSB7CiAgICAgICAgICAgIGNhc2UgJ0dPT0dMRSc6CiAgICAgICAgICAgICAgICAkX3VybCA9IHNwcmludGYoJ2h0dHA6Ly8lcy9tYXBzL2FwaS9nZW9jb2RlL2pzb24/c2Vuc29yPSVzJmFkZHJlc3M9JXMnLCR0aGlzLT5sb29rdXBfc2VydmVyWydHT09HTEUnXSwgJHRoaXMtPm1vYmlsZT09dHJ1ZT8idHJ1ZSI6ImZhbHNlIiwgcmF3dXJsZW5jb2RlKCRhZGRyZXNzKSk7CiAgICAgICAgICAgICAgICAkX3Jlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgaWYoJF9yZXN1bHQgPSAkdGhpcy0+ZmV0Y2hVUkwoJF91cmwpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzb25fZGVjb2RlKCRfcmVzdWx0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdZQUhPTyc6CiAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAKICAgICAgICAgICAgICAgICRfdXJsID0gJ2h0dHA6Ly8lcy9NYXBzU2VydmljZS9WMS9nZW9jb2RlJzsKICAgICAgICAgICAgICAgICRfdXJsIC49IHNwcmludGYoJz9hcHBpZD0lcyZsb2NhdGlvbj0lcycsJHRoaXMtPmxvb2t1cF9zZXJ2ZXJbJ1lBSE9PJ10sJHRoaXMtPmFwcF9pZCxyYXd1cmxlbmNvZGUoJGFkZHJlc3MpKTsKICAgICAgICAgICAgICAgICRfcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpZigkX3Jlc3VsdCA9ICR0aGlzLT5mZXRjaFVSTCgkX3VybCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJF9tYXRjaDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gICAgICAgICAKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiBmZXRjaCBhIFVSTC4gT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY2hhbmdlIHRoZSB3YXkgVVJMcyBhcmUgZmV0Y2hlZC4KICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkdXJsCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZldGNoVVJMKCR1cmwpIHsKICAgIAkvLyBEdWtldG93bjogTmV4dCBsaW5lIGNvbW1lbnRlZCBhbmQgaW5jbHVkZWQgbWF0ZXJpYWwgZnJvbSB0aGUgZm9sbG93aW5nIHNpdGU6CiAgICAJLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3BocC1nb29nbGUtbWFwLWFwaS9pc3N1ZXMvZGV0YWlsP2lkPTExCiAgICAJLy8gcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwpOwoJICAgIGlmIChpbmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSkgewoJICAgICAgICByZXR1cm4gZmlsZV9nZXRfY29udGVudHMoJHVybCk7CgkgICAgfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpIHsKCSAgICAgICAgJGN1cmxPYmogPSBjdXJsX2luaXQoJHVybCk7CgkgICAgICAgIGN1cmxfc2V0b3B0KCRjdXJsT2JqLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsKCSAgICAgICAgY3VybF9zZXRvcHQoJGN1cmxPYmosIENVUkxPUFRfSEVBREVSLCAwKTsKCSAgICAgICAgJGNvbnRlbnQgPSBjdXJsX2V4ZWMoJGN1cmxPYmopOwoJICAgICAgICBjdXJsX2Nsb3NlKCRjdXJsT2JqKTsKCSAgICAgICAgcmV0dXJuICRjb250ZW50OwoJICAgIH0gZWxzZSB7CgkgICAgICAgIGRpZSgnRXJyb3InKTsKCSAgICB9IAogICAgfQoKICAgIC8qKgogICAgICogZ2V0IGRpc3RhbmNlIGJldHdlZW4gdG8gZ2VvY29vcmRzIHVzaW5nIGdyZWF0IGNpcmNsZSBkaXN0YW5jZSBmb3JtdWxhCiAgICAgKiAKICAgICAqIEBwYXJhbSBmbG9hdCAkbGF0MQogICAgICogQHBhcmFtIGZsb2F0ICRsYXQyCiAgICAgKiBAcGFyYW0gZmxvYXQgJGxvbjEKICAgICAqIEBwYXJhbSBmbG9hdCAkbG9uMgogICAgICogQHBhcmFtIGZsb2F0ICR1bml0ICAgTT1taWxlcywgSz1raWxvbWV0ZXJzLCBOPW5hdXRpY2FsIG1pbGVzLCBJPWluY2hlcywgRj1mZWV0CiAgICAgKiBAcmV0dXJuIGZsb2F0CiAgICAgKi8KICAgIGZ1bmN0aW9uIGdlb0dldERpc3RhbmNlKCRsYXQxLCRsb24xLCRsYXQyLCRsb24yLCR1bml0PSdNJykgewogICAgICAgIAogICAgICAvLyBjYWxjdWxhdGUgbWlsZXMKICAgICAgJE0gPSAgNjkuMDkgKiByYWQyZGVnKGFjb3Moc2luKGRlZzJyYWQoJGxhdDEpKSAqIHNpbihkZWcycmFkKCRsYXQyKSkgKyAgY29zKGRlZzJyYWQoJGxhdDEpKSAqIGNvcyhkZWcycmFkKCRsYXQyKSkgKiBjb3MoZGVnMnJhZCgkbG9uMSAtICRsb24yKSkpKTsgCgogICAgICBzd2l0Y2goc3RydG91cHBlcigkdW5pdCkpCiAgICAgIHsKICAgICAgICBjYXNlICdLJzoKICAgICAgICAgIC8vIGtpbG9tZXRlcnMKICAgICAgICAgIHJldHVybiAkTSAqIDEuNjA5MzQ0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnTic6CiAgICAgICAgICAvLyBuYXV0aWNhbCBtaWxlcwogICAgICAgICAgcmV0dXJuICRNICogMC44Njg5NzYyNDI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdGJzoKICAgICAgICAgIC8vIGZlZXQKICAgICAgICAgIHJldHVybiAkTSAqIDUyODA7CiAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICBjYXNlICdJJzoKICAgICAgICAgIC8vIGluY2hlcwogICAgICAgICAgcmV0dXJuICRNICogNjMzNjA7CiAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICBjYXNlICdNJzoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgLy8gbWlsZXMKICAgICAgICAgIHJldHVybiAkTTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIAogICAgfSAgICAKICAgIAp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-3.0/JSMin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIGpzbWluLnBocCAtIFBIUCBpbXBsZW1lbnRhdGlvbiBvZiBEb3VnbGFzIENyb2NrZm9yZCdzIEpTTWluLgogKgogKiBUaGlzIGlzIGEgZGlyZWN0IHBvcnQgb2YganNtaW4uYyB0byBQSFAgd2l0aCBhIGZldyBQSFAgcGVyZm9ybWFuY2UgdHdlYWtzIGFuZAogKiBtb2RpZmljYXRpb25zIHRvIHByZXNlcnZlIHNvbWUgY29tbWVudHMgKHNlZSBiZWxvdykuIEFsc28sIHJhdGhlciB0aGFuIHVzaW5nCiAqIHN0ZGluL3N0ZG91dCwgSlNNaW46Om1pbmlmeSgpIGFjY2VwdHMgYSBzdHJpbmcgYXMgaW5wdXQgYW5kIHJldHVybnMgYW5vdGhlcgogKiBzdHJpbmcgYXMgb3V0cHV0LgogKiAKICogQ29tbWVudHMgY29udGFpbmluZyBJRSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhcmUgcHJlc2VydmVkLCBhcyBhcmUgbXVsdGktbGluZQogKiBjb21tZW50cyB0aGF0IGJlZ2luIHdpdGggIi8qISIgKGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzKS4gSW4gdGhlIGxhdHRlciBjYXNlCiAqIG5ld2xpbmVzIGFyZSBpbnNlcnRlZCBhcm91bmQgdGhlIGNvbW1lbnQgdG8gZW5oYW5jZSByZWFkYWJpbGl0eS4KICoKICogUEhQIDUgb3IgaGlnaGVyIGlzIHJlcXVpcmVkLgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgdW5kZXIgdGhlCiAqIHNhbWUgdGVybXMgYXMganNtaW4uYywgd2hpY2ggaGFzIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKICoKICogLS0KICogQ29weXJpZ2h0IChjKSAyMDAyIERvdWdsYXMgQ3JvY2tmb3JkICAod3d3LmNyb2NrZm9yZC5jb20pCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwogKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwogKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVGhlIFNvZnR3YXJlIHNoYWxsIGJlIHVzZWQgZm9yIEdvb2QsIG5vdCBFdmlsLgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKICogU09GVFdBUkUuCiAqIC0tCiAqCiAqIEBwYWNrYWdlIEpTTWluCiAqIEBhdXRob3IgUnlhbiBHcm92ZSA8cnlhbkB3b25rby5jb20+IChQSFAgcG9ydCkKICogQGF1dGhvciBTdGV2ZSBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPiAobW9kaWZpY2F0aW9ucyArIGNsZWFudXApCiAqIEBhdXRob3IgQW5kcmVhIEdpYW1tYXJjaGkgPGh0dHA6Ly93d3cuM3NpdGUuZXU+IChzcGFjZUJlZm9yZVJlZ0V4cCkKICogQGNvcHlyaWdodCAyMDAyIERvdWdsYXMgQ3JvY2tmb3JkIDxkb3VnbGFzQGNyb2NrZm9yZC5jb20+IChqc21pbi5jKQogKiBAY29weXJpZ2h0IDIwMDggUnlhbiBHcm92ZSA8cnlhbkB3b25rby5jb20+IChQSFAgcG9ydCkKICogQGxpY2Vuc2UgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocCBNSVQgTGljZW5zZQogKiBAbGluayBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvanNtaW4tcGhwLwogKi8KCmNsYXNzIEpTTWluIHsKICAgIGNvbnN0IE9SRF9MRiAgICAgICAgICAgID0gMTA7CiAgICBjb25zdCBPUkRfU1BBQ0UgICAgICAgICA9IDMyOwogICAgY29uc3QgQUNUSU9OX0tFRVBfQSAgICAgPSAxOwogICAgY29uc3QgQUNUSU9OX0RFTEVURV9BICAgPSAyOwogICAgY29uc3QgQUNUSU9OX0RFTEVURV9BX0IgPSAzOwogICAgCiAgICBwcm90ZWN0ZWQgJGEgICAgICAgICAgID0gIlxuIjsKICAgIHByb3RlY3RlZCAkYiAgICAgICAgICAgPSAnJzsKICAgIHByb3RlY3RlZCAkaW5wdXQgICAgICAgPSAnJzsKICAgIHByb3RlY3RlZCAkaW5wdXRJbmRleCAgPSAwOwogICAgcHJvdGVjdGVkICRpbnB1dExlbmd0aCA9IDA7CiAgICBwcm90ZWN0ZWQgJGxvb2tBaGVhZCAgID0gbnVsbDsKICAgIHByb3RlY3RlZCAkb3V0cHV0ICAgICAgPSAnJzsKICAgIAogICAgLyoqCiAgICAgKiBNaW5pZnkgSmF2YXNjcmlwdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGpzIEphdmFzY3JpcHQgdG8gYmUgbWluaWZpZWQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWluaWZ5KCRqcykKICAgIHsKICAgICAgICAkanNtaW4gPSBuZXcgSlNNaW4oJGpzKTsKICAgICAgICByZXR1cm4gJGpzbWluLT5taW4oKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBTZXR1cCBwcm9jZXNzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaW5wdXQpCiAgICB7CiAgICAgICAgJHRoaXMtPmlucHV0ICAgICAgID0gc3RyX3JlcGxhY2UoIlxyXG4iLCAiXG4iLCAkaW5wdXQpOwogICAgICAgICR0aGlzLT5pbnB1dExlbmd0aCA9IHN0cmxlbigkdGhpcy0+aW5wdXQpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIFBlcmZvcm0gbWluaWZpY2F0aW9uLCByZXR1cm4gcmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtaW4oKQogICAgewogICAgICAgIGlmICgkdGhpcy0+b3V0cHV0ICE9PSAnJykgeyAvLyBtaW4gYWxyZWFkeSBydW4KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vdXRwdXQ7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5hY3Rpb24oc2VsZjo6QUNUSU9OX0RFTEVURV9BX0IpOwogICAgICAgIAogICAgICAgIHdoaWxlICgkdGhpcy0+YSAhPT0gbnVsbCkgewogICAgICAgICAgICAvLyBkZXRlcm1pbmUgbmV4dCBjb21tYW5kCiAgICAgICAgICAgICRjb21tYW5kID0gc2VsZjo6QUNUSU9OX0tFRVBfQTsgLy8gZGVmYXVsdAogICAgICAgICAgICBpZiAoJHRoaXMtPmEgPT09ICcgJykgewogICAgICAgICAgICAgICAgaWYgKCEgJHRoaXMtPmlzQWxwaGFOdW0oJHRoaXMtPmIpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzZWxmOjpBQ1RJT05fREVMRVRFX0E7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICgkdGhpcy0+YSA9PT0gIlxuIikgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5iID09PSAnICcpIHsKICAgICAgICAgICAgICAgICAgICAkY29tbWFuZCA9IHNlbGY6OkFDVElPTl9ERUxFVEVfQV9COwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKGZhbHNlID09PSBzdHJwb3MoJ3tbKCstJywgJHRoaXMtPmIpIAogICAgICAgICAgICAgICAgICAgICAgICAgICYmICEgJHRoaXMtPmlzQWxwaGFOdW0oJHRoaXMtPmIpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzZWxmOjpBQ1RJT05fREVMRVRFX0E7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICghICR0aGlzLT5pc0FscGhhTnVtKCR0aGlzLT5hKSkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5iID09PSAnICcKICAgICAgICAgICAgICAgICAgICB8fCAoJHRoaXMtPmIgPT09ICJcbiIgCiAgICAgICAgICAgICAgICAgICAgICAgICYmIChmYWxzZSA9PT0gc3RycG9zKCd9XSkrLSJcJycsICR0aGlzLT5hKSkpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzZWxmOjpBQ1RJT05fREVMRVRFX0FfQjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+YWN0aW9uKCRjb21tYW5kKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPm91dHB1dCA9IHRyaW0oJHRoaXMtPm91dHB1dCk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5vdXRwdXQ7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogQUNUSU9OX0tFRVBfQSA9IE91dHB1dCBBLiBDb3B5IEIgdG8gQS4gR2V0IHRoZSBuZXh0IEIuCiAgICAgKiBBQ1RJT05fREVMRVRFX0EgPSBDb3B5IEIgdG8gQS4gR2V0IHRoZSBuZXh0IEIuCiAgICAgKiBBQ1RJT05fREVMRVRFX0FfQiA9IEdldCB0aGUgbmV4dCBCLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWN0aW9uKCRjb21tYW5kKQogICAgewogICAgICAgIHN3aXRjaCAoJGNvbW1hbmQpIHsKICAgICAgICAgICAgY2FzZSBzZWxmOjpBQ1RJT05fS0VFUF9BOgogICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoCiAgICAgICAgICAgIGNhc2Ugc2VsZjo6QUNUSU9OX0RFTEVURV9BOgogICAgICAgICAgICAgICAgJHRoaXMtPmEgPSAkdGhpcy0+YjsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gIiciIHx8ICR0aGlzLT5hID09PSAnIicpIHsgLy8gc3RyaW5nIGxpdGVyYWwKICAgICAgICAgICAgICAgICAgICAkc3RyID0gJHRoaXMtPmE7IC8vIGluIGNhc2UgbmVlZGVkIGZvciBleGNlcHRpb24KICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+b3V0cHV0IC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YSAgICAgICA9ICR0aGlzLT5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5hID09PSAkdGhpcy0+YikgeyAvLyBlbmQgcXVvdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmQoJHRoaXMtPmEpIDw9IHNlbGY6Ok9SRF9MRikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpTTWluX1VudGVybWluYXRlZFN0cmluZ0V4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW50ZXJtaW5hdGVkIFN0cmluZzogJyAuIHZhcl9leHBvcnQoJHN0ciwgdHJ1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRzdHIgLj0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gJ1xcJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hICAgICAgID0gJHRoaXMtPmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0ciAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoCiAgICAgICAgICAgIGNhc2Ugc2VsZjo6QUNUSU9OX0RFTEVURV9BX0I6CiAgICAgICAgICAgICAgICAkdGhpcy0+YiA9ICR0aGlzLT5uZXh0KCk7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmIgPT09ICcvJyAmJiAkdGhpcy0+aXNSZWdleHBMaXRlcmFsKCkpIHsgLy8gUmVnRXhwIGxpdGVyYWwKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+b3V0cHV0IC49ICR0aGlzLT5hIC4gJHRoaXMtPmI7CiAgICAgICAgICAgICAgICAgICAgJHBhdHRlcm4gPSAnLyc7IC8vIGluIGNhc2UgbmVlZGVkIGZvciBleGNlcHRpb24KICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YSA9ICR0aGlzLT5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhdHRlcm4gLj0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gJy8nKSB7IC8vIGVuZCBwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gd2hpbGUgKHRydWUpCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkdGhpcy0+YSA9PT0gJ1xcJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hICAgICAgID0gJHRoaXMtPmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhdHRlcm4gICAgICAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKG9yZCgkdGhpcy0+YSkgPD0gc2VsZjo6T1JEX0xGKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSlNNaW5fVW50ZXJtaW5hdGVkUmVnRXhwRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbnRlcm1pbmF0ZWQgUmVnRXhwOiAnLiB2YXJfZXhwb3J0KCRwYXR0ZXJuLCB0cnVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmIgPSAkdGhpcy0+bmV4dCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBlbmQgY2FzZSBBQ1RJT05fREVMRVRFX0FfQgogICAgICAgIH0KICAgIH0KICAgIAogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzUmVnZXhwTGl0ZXJhbCgpCiAgICB7CiAgICAgICAgaWYgKGZhbHNlICE9PSBzdHJwb3MoIlxuezsoLD06WyEmfD8iLCAkdGhpcy0+YSkpIHsgLy8gd2UgYXJlbid0IGRpdmlkaW5nCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoJyAnID09PSAkdGhpcy0+YSkgewogICAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCR0aGlzLT5vdXRwdXQpOwogICAgICAgICAgICBpZiAoJGxlbmd0aCA8IDIpIHsgLy8gd2VpcmQgZWRnZSBjYXNlCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyB5b3UgY2FuJ3QgZGl2aWRlIGEga2V5d29yZAogICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnLyg/OmNhc2V8ZWxzZXxpbnxyZXR1cm58dHlwZW9mKSQvJywgJHRoaXMtPm91dHB1dCwgJG0pKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPm91dHB1dCA9PT0gJG1bMF0pIHsgLy8gb2RkIGJ1dCBjb3VsZCBoYXBwZW4KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBpdCdzIGEga2V5d29yZCwgbm90IGVuZCBvZiBhbiBpZGVudGlmaWVyCiAgICAgICAgICAgICAgICAkY2hhckJlZm9yZUtleXdvcmQgPSBzdWJzdHIoJHRoaXMtPm91dHB1dCwgJGxlbmd0aCAtIHN0cmxlbigkbVswXSkgLSAxLCAxKTsKICAgICAgICAgICAgICAgIGlmICghICR0aGlzLT5pc0FscGhhTnVtKCRjaGFyQmVmb3JlS2V5d29yZCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogR2V0IG5leHQgY2hhci4gQ29udmVydCBjdHJsIGNoYXIgdG8gc3BhY2UuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXQoKQogICAgewogICAgICAgICRjID0gJHRoaXMtPmxvb2tBaGVhZDsKICAgICAgICAkdGhpcy0+bG9va0FoZWFkID0gbnVsbDsKICAgICAgICBpZiAoJGMgPT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5pbnB1dEluZGV4IDwgJHRoaXMtPmlucHV0TGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAkYyA9ICR0aGlzLT5pbnB1dFskdGhpcy0+aW5wdXRJbmRleF07CiAgICAgICAgICAgICAgICAkdGhpcy0+aW5wdXRJbmRleCArPSAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRjID09PSAiXHIiIHx8ICRjID09PSAiXG4iKSB7CiAgICAgICAgICAgIHJldHVybiAiXG4iOwogICAgICAgIH0KICAgICAgICBpZiAob3JkKCRjKSA8IHNlbGY6Ok9SRF9TUEFDRSkgeyAvLyBjb250cm9sIGNoYXIKICAgICAgICAgICAgcmV0dXJuICcgJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEdldCBuZXh0IGNoYXIuIElmIGlzIGN0cmwgY2hhcmFjdGVyLCB0cmFuc2xhdGUgdG8gYSBzcGFjZSBvciBuZXdsaW5lLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcGVlaygpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvb2tBaGVhZCA9ICR0aGlzLT5nZXQoKTsKICAgICAgICByZXR1cm4gJHRoaXMtPmxvb2tBaGVhZDsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBJcyAkYyBhIGxldHRlciwgZGlnaXQsIHVuZGVyc2NvcmUsIGRvbGxhciBzaWduLCBlc2NhcGUsIG9yIG5vbi1BU0NJST8KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzQWxwaGFOdW0oJGMpCiAgICB7CiAgICAgICAgcmV0dXJuIChwcmVnX21hdGNoKCcvXlswLTlhLXpBLVpfXFwkXFxcXF0kLycsICRjKSB8fCBvcmQoJGMpID4gMTI2KTsKICAgIH0KICAgIAogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNpbmdsZUxpbmVDb21tZW50KCkKICAgIHsKICAgICAgICAkY29tbWVudCA9ICcnOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICRnZXQgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICRjb21tZW50IC49ICRnZXQ7CiAgICAgICAgICAgIGlmIChvcmQoJGdldCkgPD0gc2VsZjo6T1JEX0xGKSB7IC8vIEVPTCByZWFjaGVkCiAgICAgICAgICAgICAgICAvLyBpZiBJRSBjb25kaXRpb25hbCBjb21tZW50CiAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15cXC9AKD86Y2Nfb258aWZ8ZWxpZnxlbHNlfGVuZClcXGIvJywgJGNvbW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIveyRjb21tZW50fSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJGdldDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG11bHRpcGxlTGluZUNvbW1lbnQoKQogICAgewogICAgICAgICR0aGlzLT5nZXQoKTsKICAgICAgICAkY29tbWVudCA9ICcnOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICRnZXQgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgIGlmICgkZ2V0ID09PSAnKicpIHsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+cGVlaygpID09PSAnLycpIHsgLy8gZW5kIG9mIGNvbW1lbnQgcmVhY2hlZAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAvLyBpZiBjb21tZW50IHByZXNlcnZlZCBieSBZVUkgQ29tcHJlc3NvcgogICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBzdHJwb3MoJGNvbW1lbnQsICchJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJcbi8qIiAuIHN1YnN0cigkY29tbWVudCwgMSkgLiAiKi9cbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vIGlmIElFIGNvbmRpdGlvbmFsIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15AKD86Y2Nfb258aWZ8ZWxpZnxlbHNlfGVuZClcXGIvJywgJGNvbW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiLyp7JGNvbW1lbnR9Ki8iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyAnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2VpZiAoJGdldCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpTTWluX1VudGVybWluYXRlZENvbW1lbnRFeGNlcHRpb24oJ1VudGVybWluYXRlZCBDb21tZW50OiAnIC4gdmFyX2V4cG9ydCgnLyonIC4gJGNvbW1lbnQsIHRydWUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY29tbWVudCAuPSAkZ2V0OwogICAgICAgIH0KICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLCBza2lwcGluZyBvdmVyIGNvbW1lbnRzLgogICAgICogU29tZSBjb21tZW50cyBtYXkgYmUgcHJlc2VydmVkLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbmV4dCgpCiAgICB7CiAgICAgICAgJGdldCA9ICR0aGlzLT5nZXQoKTsKICAgICAgICBpZiAoJGdldCAhPT0gJy8nKSB7CiAgICAgICAgICAgIHJldHVybiAkZ2V0OwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKCR0aGlzLT5wZWVrKCkpIHsKICAgICAgICAgICAgY2FzZSAnLyc6IHJldHVybiAkdGhpcy0+c2luZ2xlTGluZUNvbW1lbnQoKTsKICAgICAgICAgICAgY2FzZSAnKic6IHJldHVybiAkdGhpcy0+bXVsdGlwbGVMaW5lQ29tbWVudCgpOwogICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gJGdldDsKICAgICAgICB9CiAgICB9Cn0KCmNsYXNzIEpTTWluX1VudGVybWluYXRlZFN0cmluZ0V4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQpjbGFzcyBKU01pbl9VbnRlcm1pbmF0ZWRDb21tZW50RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CmNsYXNzIEpTTWluX1VudGVybWluYXRlZFJlZ0V4cEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQo=]]></data>
	</file>
	<file>
	  <filename>/lib/rcrud.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiAgIC8qCiAgIAogICAgICBSQ1JVRCBDbGFzcwogICAgICBieSBSb2JlcnQgQnJvd24KICAgICAgYnJvd25ybEBnbWFpbC5jb20KICAgICAgCiAgICAgIHZlcnNpb246IC4wNCAyMDA2LTA3LTIwCiAgICAgIAogICAgICBVc2VhZ2U6CiAgICAgIAogICAgICByZXF1aXJlX29uY2UoICdyY3J1ZC5pbmMucGhwJyApOwogICAgICAkY28gPSBuZXcgcmNydWQoICRhZG9kYmxpdGVfZGJfY29ubmVjdGlvbiAsICd0YWJsZV9uYW1lJyApOwogICAgICAkY28tPmdvKCk7CiAgIAogICAKICAgKi8KCgogICBjbGFzcyByY3J1ZAogICB7CgogICAgICAjdGhpcyB2YXIgaXMgdGhlIHRhYmxlIHRoYXQgdGhpcyBvYmplY3Qgd2lsbCBjcnVkIG9uICAgCiAgICAgIHZhciAkdGFibGU7CiAgICAgIAogICAgICAjdGhpcyB2YXIgd2lsbCBob2xkcyBmaWVsZHMgYW5kIGNvbmZpZyBpbmZvCiAgICAgIHZhciAkZmllbGRzID0gYXJyYXkoKTsKICAgICAgCiAgICAgICN0aGlzIHZhciBob2xkcyB0aGUgYWRvZGJsaXRlIGRiIGNvbm5lY3Rpb24KICAgICAgdmFyICRkYjsKICAgICAgCiAgICAgICN0aGlzIHZhciBob2xkcyB0aGUga2V5IGZpZWxkCiAgICAgIHZhciAka2V5OwogICAgICAKICAgICAgI3RoaXMgdmFyIGhvbGRzIHRoZSBjb2xvciBmb3IgdGhlIGVycm9ycyBpbiBhIGZvcm0sIGllLCByZWQgLCAjRkYwMDAwCiAgICAgIHZhciAkZXJyb3Jjb2xvciA9ICIjRkYwMDAwIjsKICAgICAgCiAgICAgICN0aGlzIHZhcmlhYmxlIGhvbGRzIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZCBhYm92ZSBnZXRzIHNldCBpbiB0aGUgY29uc3RydWN0b3IKICAgICAgdmFyICRoZWFkZXI7CiAgICAgIAogICAgICAjdGhpcyB2YXJpYWJsZSBob2xkcyB3aGljaCBmaWVsZCB0aGF0IHdlIHNob3VsZCBzb3J0IGJ5IGluIHRoZSBsaXN0aW5nCiAgICAgICNnZXRzIHNldCB0byB0aGUga2V5IGluIHRoZSBjb25zdHJ1Y3RvcgogICAgICB2YXIgJGRlZl9zb3J0OwogICAKICAgCiAgIAogICAgICBmdW5jdGlvbiByY3J1ZCggJGRiICwgJHRhYmxlbmFtZSApCiAgICAgIHsKICAgICAgICAgJHRoaXMtPmRiID0gJGRiOwogICAgICAgICAkdGhpcy0+dGFibGUgPSAkdGFibGVuYW1lOwogICAgICAgICAKICAgICAgICAgJHEgPSAiREVTQ1JJQkUgIi4kdGhpcy0+dGFibGU7CiAgICAgICAgICRxciA9ICRkYi0+RXhlY3V0ZSggJHEgKSBvciBkaWUoICJUaGUgZGF0YWJhc2UgY29ubmVjdGlvbiBvciB0YWJsZSBzdXBwbGllZCB0byByY3J1ZCBpcyBpbnZhbGlkLCBwbGVhc2UgY2hlY2sgY29kZSBhbmQgdHJ5IGFnYWluLiIgKTsKICAgICAgICAgCiAgICAgICAgIGlmKCAkcXItPlJlY29yZENvdW50KCkgPCAxICkKICAgICAgICAgewogICAgICAgICAgICBkaWUoICJUaGUgdGFibGUgbmFtZSBzdXBwbGllZCB0byByY3J1ZCBpcyBpbnZhbGlkIiApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+aGVhZGVyID0gJHRoaXMtPmZpZWxkMmxhYmVsKCAkdGhpcy0+dGFibGUgKTsKICAgICAgICAgICAgJGkgPSAwOwogICAgICAgICAgICB3aGlsZSAoJHJvdyA9ICRxci0+RmV0Y2hSb3coKSApIAogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV0gPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ29yZGVyJ10gPSAkaSsrOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydsYWJlbCddID0gJHRoaXMtPmZpZWxkMmxhYmVsKCAkcm93WydGaWVsZCddICk7CiAgICAgICAgICAgICAgICAgJHRoaXMtPmZpZWxkc1skcm93WydGaWVsZCddXVsndmlzaWJsZV9pbl9saXN0J10gPSB0cnVlOwogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ3Zpc2libGVfaW5fYWRkJ10gPSB0cnVlOwogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ3Zpc2libGVfaW5fZWRpdCddID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF93aWR0aCddID0gMzA7CiAgICAgICAgICAgICAgICAgJHRoaXMtPmZpZWxkc1skcm93WydGaWVsZCddXVsnZmllbGRfaGVpZ2h0J10gPSAxMDsgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2ZpZWxkX3R5cGUnXSA9ICJ0ZXh0IjsKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF9lcnJvciddID0gIkVycm9yOiBJbnZhbGlkIEZvcm0gRGF0YSI7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmKCAkcm93WydLZXknXSA9PSAiUFJJIiApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2lzS2V5J10gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5rZXkgPSAkcm93WydGaWVsZCddOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2ZpZWxkX3R5cGUnXSA9ICJkaXNwbGF5IjsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWyd2aXNpYmxlX2luX2FkZCddID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRlZl9zb3J0ID0gJHJvd1snRmllbGQnXTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYoICRyb3dbJ1R5cGUnXSA9PSAidGV4dCIgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF90eXBlJ10gPSAidGV4dGFyZWEiOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiggJHJvd1snVHlwZSddID09ICJkYXRldGltZSIgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF90eXBlJ10gPSAiZGF0ZXRpbWUiOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiggJHJvd1snVHlwZSddID09ICJkYXRlIiApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2ZpZWxkX3R5cGUnXSA9ICJkYXRlIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYoIGVyZWcoICJpcHN0YW1wIiAsICRyb3dbJ0ZpZWxkJ10gICkgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF90eXBlJ10gPSAiaXBzdGFtcCI7CiAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydsYWJlbCddID0gJHRoaXMtPmZpZWxkMmxhYmVsKCAkcm93WydGaWVsZCddICk7CiAgICAgICAgICAgIH0jZW5kIHdoaWxlCgogICAgICAgICAgICAKICAgICAgICAgfSNlbmQgaWYKICAgICAgfSNlbmQgY29uc3RydWN0b3IKICAgICAgCiAgICAgIAogICAgICAjdGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBmaWVsZF9uYW1lIHRvIEZpZWxkIE5hbWUKICAgICAgZnVuY3Rpb24gZmllbGQybGFiZWwoICRmaWVsZCApCiAgICAgIHsKICAgICAgICAgcmV0dXJuIHVjd29yZHMoIGVyZWdfcmVwbGFjZSggIl8iICwgIiAiICwgJGZpZWxkICkgKTsKICAgICAgfQogICAgICAKCiAgICAgICN0aGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIHRoYXQgd2lsbCBkbyBldmVyeSB0aGluZyBvciBhdGxlYXN0IGNhbGwgdGhlIG90aGVyIGZ1bmN0aW9ucyAgICAgIAogICAgICBmdW5jdGlvbiBnbygpCiAgICAgIHsKICAgICAgICAgICAgI21ha2UgdGhhdCB0aGUgcmNydWQgc3R1ZmYgaGFwcGVuaW5nIGluICRfR0VUIGlzIGZvciB0aGlzIGluc3RhbmNlIGFuZCBub3QgZm9yIGFub3RoZXIKICAgICAgICAgICAgaWYoIGlzc2V0KCAkX0dFVFsncmNydWRfdGFibGUnXSApICYmICRfR0VUWydyY3J1ZF90YWJsZSddICE9ICR0aGlzLT50YWJsZSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgCiAgICAgICAgICAgCiAgICAgICAgICAgIGlmKCAhIGlzc2V0KCAkX0dFVFsncmNydWRfYWN0aW9uJ10gKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgJHJjcnVkX2FjdGlvbiA9ICJzaG93IjsgLy9kZWZhdWx0IGlzIHRvIHNob3cgd2hhdCBpcyBpbiB0aGUgZGIgdGFibGUuCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICRyY3J1ZF9hY3Rpb24gPSAkX0dFVFsncmNydWRfYWN0aW9uJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGVjaG8gIjxoMz4iLiR0aGlzLT5oZWFkZXIuIjwvaDM+XG4iOwogICAgICAgICAgICAKICAgICAgICAgICAgc3dpdGNoKCAkcmNydWRfYWN0aW9uICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlICJzaG93IjoKICAgICAgICAgICAgICAgICAgJHRoaXMtPnNob3coKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgImRlbGV0ZSI6CiAgICAgICAgICAgICAgICAgICR0aGlzLT5kZWxldGUoICRfR0VUWydyY3J1ZF9pZCddICk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlICJhZGQiOgogICAgICAgICAgICAgICAgICAkdGhpcy0+YWRkKCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlICJlZGl0IjoKICAgICAgICAgICAgICAgICAgJHRoaXMtPmVkaXQoKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgfSNlbmQgc3dpdGNoCiAgICAgIAogICAgICB9I2VuZCBnbyBmdW5jdGlvbgogICAgICAKCiAgICAgICN0aGlzIGZ1bmN0aW9uIGFsbG93cyBhIHJlY29yZCB0byBiZSBhZGRlZCAqKk1BSk9SKioKICAgICAgZnVuY3Rpb24gYWRkKCkKICAgICAgewoJJGVycm9ycyA9ICcnOwoJJHNxbCA9ICcnOwogICAgICAgICAjaGFzIHRoZSBmb3JtIGJlZW4gc3VibWl0dGVkCiAgICAgICAgIGlmKCBpc3NldCggJF9QT1NUWydyY3J1ZF9zdWInXSApICkKICAgICAgICAgewogCiAgICAgICAgICAgICAgICNjb21waWxlIGFueSBkYXRldGltZXMgaW50byBvbmUgZmllbGQgYWdhaW4uCiAgICAgICAgICAgICAgICR0aGlzLT5jb21waWxlX2RhdGV0aW1lcygpOwogICAgICAgICAgICAKICAgICAgICAgICAgICAgI2Zvcm0gaGFkIG5vIGVycm9ycwogICAgICAgICAgICAgICBpZiggISAkZXJyb3JzID0gJHRoaXMtPmZvcm1fZXJyb3JzKCkgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAjZG8gYW4gaW5zZXJ0CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAjZmlyc3QgYnVpbGQgdGhlIFNFVCBwb3J0aW9uCiAgICAgICAgICAgICAgICAgIGZvcmVhY2goICR0aGlzLT5maWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYoIGlzc2V0KCAkX1BPU1RbJGtdICkgKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAkc3FsIC4gJGsgLiAiID0gIiAuICR0aGlzLT5kYi0+cXN0ciggJF9QT1NUWyRrXSApIC4gIiwgIjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgI3NlY29uZCB0YWtlIG9mZiB0aGUgbGFzdCAnLCAnCiAgICAgICAgICAgICAgICAgICRzcWwgPSBlcmVnX3JlcGxhY2UoICIsICQiICwgIiIgLCAkc3FsICk7CiAgICAgICAgICAgICAgICAgICRzcWwgPSAiSU5TRVJUIElOVE8gIi4kdGhpcy0+dGFibGUuIiBTRVQgIi4kc3FsOwogICAgICAgICAgICAgICAgICAkcXIgPSAkdGhpcy0+ZGItPkV4ZWN1dGUoICRzcWwgKSBvciBkaWUoICJSQ1JVRDogQ3JlYXRlIE5ldyBTUUwgUHJvYmxlbTogIi4kdGhpcy0+ZGItPkVycm9yTXNnKCkgKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGVjaG8gIjxwPllvdXIgaXRlbSBoYXMgYmVlbiBjcmVhdGVkLjwvcD4iOwogICAgICAgICAgICAgICAgICAkdGhpcy0+bWFrZV9yZXR1cm5fbGluaygpOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICB9CgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAkdGhpcy0+bWFrZV9mb3JtKCAidmlzaWJsZV9pbl9hZGQiICwgIkNyZWF0ZSBOZXciICwgJGVycm9ycyApOwogICAgICAgICAkdGhpcy0+bWFrZV9yZXR1cm5fbGluaygpOwogICAgICAgICAKICAgICAgCiAgICAgIH0jZW5kIGFkZCBmdW5jdGlvbiAgICAgIAogICAgICAKCiAgICAgICN0aGlzIGZ1bmN0aW9uIGFsbG93cyBhIHJlY29yZCB0byBiZSBlZGl0ZWQgKipNQUpPUioqCiAgICAgIGZ1bmN0aW9uIGVkaXQoKQogICAgICB7CgkkZXJyb3JzID0gJyc7Cgkkc3FsID0gIiI7CiAgICAgICAgICNoYXMgdGhlIGZvcm0gYmVlbiBzdWJtaXR0ZWQKICAgICAgICAgaWYoIGlzc2V0KCAkX1BPU1RbJ3JjcnVkX3N1YiddICkgKQogICAgICAgICB7CiAgICAgICAgICAgICAgICNjb21waWxlIGFueSBkYXRldGltZXMgaW50byBvbmUgZmllbGQgYWdhaW4uCiAgICAgICAgICAgICAgICR0aGlzLT5jb21waWxlX2RhdGV0aW1lcygpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgI2Zvcm0gaGFkIG5vIGVycm9ycwogICAgICAgICAgICAgICBpZiggISAkZXJyb3JzID0gJHRoaXMtPmZvcm1fZXJyb3JzKCkgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICNkbyBhbiB1cGRhdGUKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICNmaXJzdCBidWlsZCB0aGUgU0VUIHBvcnRpb24KICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPmZpZWxkcyBhcyAkayA9PiAkdiApCiAgICAgICAgICAgICAgICAgIHsKCQkgCiAgICAgICAgICAgICAgICAgICAgIGlmKCBpc3NldCggJF9QT1NUWyRrXSApICkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJHNxbCAuICRrIC4gIiA9ICIgLiAkdGhpcy0+ZGItPnFzdHIoICRfUE9TVFska10gKSAuICIsICI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgdmFsdWVzIGZvciB1c2FnZSBpbiBkZWZhdWx0YWRtaW4ucGhwCgkJICAgICAgICAgICAgICAgICAgCXN3aXRjaCAoJGspIHsKCQkJCQkJCQkJCQkJCWNhc2UgJ2NlbnRlcl9sYXQnOgoJCQkJCQkJCQkJCQkJY2FzZSAnbGF0JzoKCQkJCQkJCQkJCQkJCQkkdGhpcy0+Y2VudGVyX2xhdCA9ICR0aGlzLT5kYi0+cXN0ciggJF9QT1NUWyRrXSApOyAKCQkJCQkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJCQkJCWNhc2UgJ2NlbnRlcl9sb24nOgoJCQkJCQkJCQkJCQkJY2FzZSAnbG9uJzoKCQkJCQkJCQkJCQkJCQkkdGhpcy0+Y2VudGVyX2xvbiA9ICR0aGlzLT5kYi0+cXN0ciggJF9QT1NUWyRrXSApOyAKCQkJCQkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJCQkJCWNhc2UgJ3pvb20nOgoJCQkJCQkJCQkJCQkJCSR0aGlzLT56b29tID0gJHRoaXMtPmRiLT5xc3RyKCAkX1BPU1RbJGtdICk7IAoJCQkJCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQkJCQkJZGVmYXVsdDoKCQkJCQkJCQkJCQkJfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICNzZWNvbmQgdGFrZSBvZmYgdGhlIGxhc3QgJywgJwogICAgICAgICAgICAgICAgICAkc3FsID0gZXJlZ19yZXBsYWNlKCAiLCAkIiAsICIiICwgJHNxbCApOwogICAgICAgICAgICAgICAgICAkc3FsID0gIlVQREFURSAiLiR0aGlzLT50YWJsZS4iIFNFVCAiLiRzcWwuIiBXSEVSRSAiLiR0aGlzLT5rZXkuIiA9ICIuJHRoaXMtPmRiLT5xc3RyKCAkX0dFVFsncmNydWRfaWQnXSApLiIgTElNSVQgMSI7CiAgICAgICAgICAgICAgICAgICRxciA9ICR0aGlzLT5kYi0+RXhlY3V0ZSggJHNxbCApIG9yIGRpZSggIlJDUlVEIEVkaXQgU1FMIFByb2JsZW06ICIuJHRoaXMtPmRiLT5FcnJvck1zZygpICk7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBlY2hvICI8cD5Zb3VyIGl0ZW0gaGFzIGJlZW4gdXBkYXRlZC48L3A+IjsKICAgICAgICAgICAgICAgICAgJHRoaXMtPm1ha2VfcmV0dXJuX2xpbmsoKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgfQoKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgCiAgICAgICAgICAgICNmaWxsICRfUE9TVCB3aXRoIHRoZSB2YWx1ZXMgb25lIHRpbWUsIG9uIGZpcnN0IHZpc2l0LgogICAgICAgICAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuJHRoaXMtPnRhYmxlLiIgV0hFUkUgIi4kdGhpcy0+a2V5LiIgPSAiLiR0aGlzLT5kYi0+cXN0ciggJF9HRVRbJ3JjcnVkX2lkJ10gKTsKICAgICAgICAgICAgJHFyID0gJHRoaXMtPmRiLT5FeGVjdXRlKCAkcSApIG9yIGRpZSggIlJDUlVEIEVkaXQgVmFsdWVzIEZpbGw6ICIuJHRoaXMtPmRiLT5FcnJvck1zZygpICk7CiAgICAgICAgICAgICRyb3cgPSAkcXItPkZldGNoUm93KCk7CiAgICAgICAgICAgICRfUE9TVCA9ICRyb3c7CiAgICAgICAgIH0KICAgICAgCiAgICAgICAgICNtYWtlIHRoZSBmb3JtCiAgICAgICAgICR0aGlzLT5tYWtlX2Zvcm0oICJ2aXNpYmxlX2luX2VkaXQiLCAiU2F2ZSIgLCAkZXJyb3JzICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JldHVybl9saW5rKCk7CiAgICAgICAgIAogICAgICB9ICAgICAgCgoKCiAgICAgICN0aGlzIG1ha2VzIHRoZSBmb3JtIGZvciBhZGQgYW5kIGVkaXQKICAgICAgI3Nob3cgdGhlIG9uZXMgdGhhdCBoYXZlIHRoZSB2aXNpYmlsaXR5CiAgICAgICNwbGFjZSBzdWJsYWJlbCBvbiB0aGUgc3VibWl0IGJ1dHRvbgogICAgICAjc2hvdyB0aGVzZSBlcnJvcnMgd2hlcmUgbmVlZGVkCiAgICAgIGZ1bmN0aW9uIG1ha2VfZm9ybSggJHZpc2liaWxpdHksICRzdWJsYWJlbCwgJGVycm9ycyApCiAgICAgIHsKICAgICAgICAgICAgI3RoaXMgZm9ybSBwb3N0cyB0byBpdHNlbGYgc28gbm8gYWN0aW9uIHNwZWNpZmllZAogICAgICAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+XG4iOwogICAgICAgICAgICBlY2hvICI8dGFibGUgY2xhc3M9XCJwYWdldGFibGVcIiB3aWR0aD1cIjEwMCVcIj5cbiI7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPmZpZWxkcyBhcyAkayA9PiAkdiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgICAgIGlmKCAkdlskdmlzaWJpbGl0eV0gKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmKCBpc3NldCggJGVycm9yc1ska10gKSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPiI7CiAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxzcGFuIHN0eWxlPVwiY29sb3I6ICIuJHRoaXMtPmVycm9yY29sb3IuIjtcIj4iOwogICAgICAgICAgICAgICAgICAgICBlY2hvICR2WydmaWVsZF9lcnJvciddOwogICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3NwYW4+PC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj5cbiI7CiAgIAogICAgICAgICAgICAgICAgICBlY2hvICIgPHRkIHZhbGlnbj1cIlRPUFwiPiIuJHZbJ2xhYmVsJ10uIjwvdGQ+XG4iOwogICAKICAgICAgICAgICAgICAgICAgZWNobyAiIDx0ZD5cbiI7CgoJCQkJCQkJCSAgaWYoIWlzc2V0KCRfUE9TVFska10pKSB7CgkJCQkJCQkJICAgICRfUE9TVFska10gPSAnJzsKCQkJCQkJCQkgIH0KCiAgICAgICAgICAgICAgICAgIHN3aXRjaCggJHZbJ2ZpZWxkX3R5cGUnXSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoJGspIAoJCQkJCQkJCQkJCQl7CgkgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIHRyZWF0ZW1lbnQgb2YgdGhlIGljb24gZmllbGQsIHNpbmNlIGl0IHNob3VsZCBiZSBhIGRyb3Bkb3duIGxpc3Qgb2YgYXZhaWxhYmxlIG1hcmtlciBpbWFnZXMKCSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ljb24nOgoJCQkJCQkJCQkJCQkJCS8vIE9wZW4gaW1hZ2VzIGRpcmVjdG9yeSBhbmQgbGlzdCBpdHMgY29udGVudHMKCQkJCQkJCQkJCQkJCQlpZiAoZmlsZV9leGlzdHMoICR0aGlzLT5wYXRoICkpIHsKCQkJCQkJCQkJCQkJCQkJJGZpbGVjb3VudCA9IDA7CgkJCQkJCQkJCQkJCQkJCSRkaXIgPSBvcGVuZGlyKCR0aGlzLT5wYXRoKTsKCQkJCQkJCQkJCQkJCQkJLy8gRmlsdGVyIG91dCB0aGUgZGlyZWN0b3J5IGNvbnRyb2xpbmcgY2hhcmFjdGVycyBhbmQgYnVpbGQgc2VsZWN0YWJsZSBvcHRpb25zIG9mIHRoZSBvdGhlcnMKCQkJCQkJCQkJCQkJCQkJd2hpbGUgKCgkZmlsZSA9IHJlYWRkaXIoJGRpcikpICE9PSBmYWxzZSkKCQkJCQkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkJCQkJaWYgKCRmaWxlICE9Jy4nICYmICRmaWxlIT0nLi4nKSB7CgkJCQkJCQkJCQkJCQkJCQkJaWYgKCRmaWxlY291bnQgPT0gMCkgewoJCQkJCQkJCQkJCQkJCQkJCQllY2hvICc8c2VsZWN0IG5hbWU9IicuJGsuJyI+XG4nOwoJCQkJCQkJCQkJCQkJCQkJCQllY2hvICcgIDxvcHRpb24gdmFsdWU9IiI+IDwvb3B0aW9uPlxuJzsKCQkJCQkJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCQkJCQkJaWYgKCAkX1BPU1RbJGtdID09ICRmaWxlICkgewoJCQkJCQkJCQkJCQkJCQkJCQllY2hvICcgIDxvcHRpb24gdmFsdWU9IicgLiAkZmlsZSAuICciIFNFTEVDVEVEPicgLiAkZmlsZSAuICc8L29wdGlvbj5cbic7CgkJCQkJCQkJCQkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJCQkJCQkJCQkJZWNobyAnICA8b3B0aW9uIHZhbHVlPSInIC4gJGZpbGUgLiAnIj4nIC4gJGZpbGUgLiAnPC9vcHRpb24+XG4nOwoJCQkJCQkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJCQkJCQkkZmlsZWNvdW50Kys7CgkJCQkJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJCQkJY2xvc2VkaXIoJGRpcik7CgkJCQkJCQkJCQkJCQkJCS8vIFNob3cgZXJyb3IgbWVzc2FnZSB0aGF0IG5vIGltYWdlcyB3ZXJlIGZvdW5kIGF0IGFsbAoJCQkJCQkJCQkJCQkJCQlpZiAoJGZpbGVjb3VudCA9PSAwKSB7CgkJCQkJCQkJCQkJCQkJCWVjaG8gJHRoaXMtPm1hcmtlcmVycm9yOwoJCQkJCQkJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJCQkJCQllY2hvICI8L3NlbGVjdD4iOwoJCQkJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJCQkJCQllY2hvICR0aGlzLT5wYXRoZXJyb3I7CgkJCQkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCQkJCWJyZWFrOwkJCQkJIAoJCQkJCQkJCQkJCQkJZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgCQllY2hvICIgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIiIuJGsuIlwiIHZhbHVlPVwiIi4gJF9QT1NUWyRrXSAuICJcIiBzaXplPVwiIi4kdlsnZmllbGRfd2lkdGgnXS4iXCI+XG4iOwoJCQkJCQkJCQkJCQkJCgkJCQkJCQkJCQkJCX0gCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0YXJlYSI6CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiAgICA8dGV4dGFyZWEgbmFtZT1cIiIuJGsuIlwiIFJPV1M9Ii4kdlsnZmllbGRfaGVpZ2h0J10uIiBDT0xTPSIuJHZbJ2ZpZWxkX3dpZHRoJ10uIj4iOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRfUE9TVFska107CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkayA9PSAnZGVzY3JpcHRpb24nIHx8ICRrID09ICdpbmZvJykKICAgICAgICAgICAgICAgICAgICAgICAgewoJICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZXh0YXJlYT5cbiI7CgkJCQkJCQkJCQkJCQllY2hvICI8L3RkPjwvdHI+PHRkIHZhbGlnbj1cIlRPUFwiPkVhc3kgTG9jYXRvcjwvdGQ+PHRkPiI7CgkgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXRyaWV2ZSB0ZW1wbGF0ZSB3aXRoIG1hcCBpbmZvcm1hdGlvbgoJCQkJCQkJCQkJCQkJZWNobyAkdGhpcy0+ZWFzeWxvY2F0b3I7CgkJCQkJCQkJCQkJCQllY2hvICJcbiI7CgkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJZWxzZQoJCQkJCQkJCQkJCQl7CgkgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RleHRhcmVhPlxuIjsKCQkJCQkJCQkJCQkJfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZGlzcGxheSI6CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJF9QT1NUWyRrXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgImlwc3RhbXAiOgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCIiLiRrLiJcIiB2YWx1ZT1cIiIuJF9TRVJWRVJbIlJFTU9URV9BRERSIl0uIlwiPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgImNoZWNrYm94IjoKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIiIuJGsuIlwiIHZhbHVlPVwiMFwiID5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIiIuJGsuIlwiIHZhbHVlPVwiMVwiIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoICRfUE9TVFska10gPT0gIjEiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgQ0hFQ0tFRCAiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlICJjaGVja2JveF9vbiI6CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCIiLiRrLiJcIiB2YWx1ZT1cIjBcIiA+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCIiLiRrLiJcIiB2YWx1ZT1cIjFcIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAkX1BPU1RbJGtdID09ICIxIiApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiIENIRUNLRUQgIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoJCQlpZiggJF9QT1NUWyRrXSA9PSAnJyApIHsKCQkJICAvL3Nob3VsZCBvbmx5IGFmZmVjdCBhZGQKCQkJICBlY2hvICIgQ0hFQ0tFRCAiOwoJCQl9CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlICJkYXRlIjoKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1ha2VfZGF0ZSggJGsgKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgImRhdGV0aW1lIjoKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1ha2VfZGF0ZXRpbWUoICRrICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBpZiggZXJlZyggIl5zZWxlY3QiICwgJHZbJ2ZpZWxkX3R5cGUnXSApICkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAkcGFydHMgPSBzcGxpdCggIlx8IiAsICR2WydmaWVsZF90eXBlJ10gKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCggJHBhcnRzWzFdICkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJyYW5nZSI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAkcGFydHNbMl0gLCAkcGFydHNbM10gLCAkayApOwogICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidGFibGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFrZV90YWJsZV9zZWxlY3RvciggJHBhcnRzWzJdICwgJHBhcnRzWzNdICwgJHBhcnRzWzRdICwgJGsgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgaWYoIGVyZWcoICJecmFkaW8iICwgJHZbJ2ZpZWxkX3R5cGUnXSApICkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFrZV9yYWRpb3MoICRrICk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGVjaG8gIiA8L3RkPlxuIjsgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgZWNobyAiPC90cj5cbiI7ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB9I2VuZCBmb3IgZWFjaAogICAgICAgICAgICAKICAgICAgICAgICAgZWNobyAiPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInJjcnVkX3N1YlwiIHZhbHVlPVwiIi4kc3VibGFiZWwuIlwiLz48L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAKICAgICAgICAgICAgZWNobyAiPC90YWJsZT5cbiI7CiAgICAgICAgICAgIGVjaG8gIjwvZm9ybT5cbiI7CiAgICAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICB9I2VuZCBmb3JtIGZ1bmN0aW9uICAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgICN0aGlzIGZ1bmN0aW9ucyBkZWxldGVzIGEgcmVjb3JkCiAgICAgIGZ1bmN0aW9uIGRlbGV0ZSggJGlkICkKICAgICAgewogICAgICAgICAkcSA9ICJERUxFVEUgRlJPTSAiLiR0aGlzLT50YWJsZS4iIFdIRVJFICIuJHRoaXMtPmtleS4iID0gIi4kdGhpcy0+ZGItPnFzdHIoICRpZCApLiIgTElNSVQgMSI7CiAgICAgICAgICRxciA9ICR0aGlzLT5kYi0+RXhlY3V0ZSggJHEgKSBvciBkaWUoICJSQ1JVRCBERUxFVEUgU1FMOiAiLiR0aGlzLT5kYi0+RXJyb3JNc2coKSApOwogICAgICAgICBlY2hvICJUaGF0IHJlY29yZCBoYXMgYmVlbiBkZWxldGVkLjwvcD4iOwogICAgICAgICAkdGhpcy0+bWFrZV9yZXR1cm5fbGluaygpOwogICAgICAgICAKICAgICAgfQogICAgICAKICAgICAgCiAgICAgIAogICAgICAjdGhpcyBmdW5jdGlvbiBzaG93cyB0aGUgZGF0YSBpbiBhIHRhYmxlIGlmIHlvdSBuZWVkIHNvbWV0aGluZyBmYW5jeSBlZGl0IGFsbCB5b3Ugd2FudCBJIHdvbnQgc3RvcCB5b3UKICAgICAgZnVuY3Rpb24gc2hvdygpCiAgICAgIHsKCSR1cGRvd24gPSAnJzsKCiAgICAgICAgIGlmKCBpc3NldCggJF9HRVRbJ3JjcnVkX3VwZG93biddICkgJiYgKCAkX0dFVFsncmNydWRfdXBkb3duJ10gPT0gIkFTQyIgfHwgJF9HRVRbJ3JjcnVkX3VwZG93biddID09ICJERVNDIiApICkKICAgICAgICAgewogICAgICAgICAgICAgJHVwZG93biA9ICRfR0VUWydyY3J1ZF91cGRvd24nXTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgJHVwZG93biA9ICJBU0MiOwogICAgICAgICAgICAkX0dFVFsncmNydWRfdXBkb3duJ10gPSAiQVNDIjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYoICEgaXNzZXQoICRfR0VUWydyY3J1ZF9zb3J0YnknXSApIHx8ICEgaXNzZXQoICR0aGlzLT5maWVsZHNbJF9HRVRbJ3JjcnVkX3NvcnRieSddXSApICkKICAgICAgICAgewogICAgICAgICAgICAkc29ydGJ5ID0gJHRoaXMtPmRlZl9zb3J0OwogICAgICAgICAgICAkX0dFVFsncmNydWRfc29ydGJ5J10gPSAkc29ydGJ5OwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAkc29ydGJ5ID0gJF9HRVRbJ3JjcnVkX3NvcnRieSddOwogICAgICAgICB9CgogICAgICAgICAKICAgICAgICAgZWNobyAnPHRhYmxlIGNlbGxzcGFjaW5nPSIyIiBjZWxscGFkZGluZz0iMiIgY2xhc3M9InBhZ2V0YWJsZSIgd2lkdGg9IjEwMCUiPic7CiAgICAgICAgIGVjaG8gIjx0aGVhZD5cbiI7CiAgICAgICAgIGVjaG8gJzx0cj4nOwogICAgICAgICBlY2hvICJcbiI7CiAgICAgICAgICAgICAgIAogICAgICAgICAjc2hvdyB0aGUgdGFibGUgaGVhZGVycwogICAgICAgICBmb3JlYWNoKCAkdGhpcy0+ZmllbGRzIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICBpZiggJHRoaXMtPmZpZWxkc1ska11bJ3Zpc2libGVfaW5fbGlzdCddICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBlY2hvICIgICA8dGg+IjsKICAgICAgICAgICAgICAgZWNobyAkdlsnbGFiZWwnXTsKCiAgICAgICAgICAgICAgIGVjaG8gIiZuYnNwOyI7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kdGhpcy0+bWFrZXVybCggInNob3ciICwgLTEgKS4iJmFtcDtyY3J1ZF9zb3J0Ynk9Ii4kay4iJmFtcDtyY3J1ZF91cGRvd249QVNDXCI+JmFuZDs8L2E+IjsKICAgICAgICAgICAgICAgaWYoICRrID09ICRfR0VUWydyY3J1ZF9zb3J0YnknXSAmJiAkX0dFVFsncmNydWRfdXBkb3duJ10gPT0gIkFTQyIgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGVjaG8gIi4iOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBlY2hvICImbmJzcDsiOwogICAgICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHRoaXMtPm1ha2V1cmwoICJzaG93IiAsIC0xICkuIiZhbXA7cmNydWRfc29ydGJ5PSIuJGsuIiZhbXA7cmNydWRfdXBkb3duPURFU0NcIj4mb3I7PC9hPiI7CiAgICAgICAgICAgICAgIGlmKCAkayA9PSAkX0dFVFsncmNydWRfc29ydGJ5J10gJiYgJF9HRVRbJ3JjcnVkX3VwZG93biddID09ICJERVNDIiApCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZWNobyAiLiI7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWNobyAiPC90aD5cbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgfQoKICAgICAgICAgZWNobyAiPHRoIHdpZHRoPVwiMSVcIj4mbmJzcDs8L3RoPlxuIjsKICAgICAgICAgZWNobyAiPHRoIHdpZHRoPVwiMSVcIj4mbmJzcDs8L3RoPlxuIjsKCiAgICAgICAgIGVjaG8gJzwvdHI+JzsKICAgICAgICAgZWNobyAiXG4iOwogICAgICAgICBlY2hvICI8L3RoZWFkPlxuIjsKICAgICAgICAgCiAgICAgICAgICNub3cgdGhlIGRhdGEgICAKICAgICAgICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLiR0aGlzLT50YWJsZS4iIE9SREVSIEJZICIuJHNvcnRieS4iICIuJHVwZG93bjsKICAgICAgICAgJHFyID0gJHRoaXMtPmRiLT5FeGVjdXRlKCAkcSApIG9yIGRpZSggIlJDUlVEIFNIT1cgU1FMOiAiLiR0aGlzLT5kYi0+RXJyb3JNc2coKSApOwogICAgICAgICAKICAgICAgICAgJGkgPSAwOwogICAgICAgICB3aGlsZSggJHJvdyA9ICRxci0+RmV0Y2hSb3coKSApCiAgICAgICAgIHsKICAgICAgICAgICAgZWNobyAiPHRyIGNsYXNzPVwicm93Ii4oKCRpICUgMikrMSkuIlwiICI7CiAgICAgICAgICAgIGVjaG8gIm9ubW91c2VvdmVyPVwidGhpcy5jbGFzc05hbWU9J3JvdyIuKCgkaSAlIDIpKzEpLiJob3Zlcic7XCIgb25tb3VzZW91dD1cInRoaXMuY2xhc3NOYW1lPSdyb3ciLigoJGkgJSAyKSsxKS4iJztcIj5cbiI7CiAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgCiAgICAgICAgICAgICAgZm9yZWFjaCggJHJvdyBhcyAkayA9PiAkdiApCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+ZmllbGRzWyRrXVsndmlzaWJsZV9pbl9saXN0J10gKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICIgICA8dGQ+IjsKICAgICAgICAgICAgICAgICAgICBpZiggZXJlZyggIl5zZWxlY3RcfHRhYmxlIiAsICR0aGlzLT5maWVsZHNbJGtdWydmaWVsZF90eXBlJ10gKSApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICRwYXJ0cyA9IHNwbGl0KCAiXHwiICwgJHRoaXMtPmZpZWxkc1ska11bJ2ZpZWxkX3R5cGUnXSApOwogICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIigiLiR2LiIpICIuJHRoaXMtPmdldF9mb3JlaWduX2xhYmVsKCAkcGFydHNbMl0gLCAkcGFydHNbM10gLCAkdiAsICRwYXJ0c1s0XSApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJHY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+XG4iOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAjZWRpdCBhbmQgZGVsZXRlIGNvbHVtbnMKICAgICAgICAgICAgZWNobyAiPHRkPjxhIGhyZWY9XCIiLiR0aGlzLT5tYWtldXJsKCAiZWRpdCIgLCAkcm93WyR0aGlzLT5rZXldICkuIlwiPmVkaXQ8L2E+Jm5ic3A7PC90ZD4iOwogICAgICAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiIuJHRoaXMtPm1ha2V1cmwoICJkZWxldGUiICwgJHJvd1skdGhpcy0+a2V5XSApLiJcIj5kZWxldGU8L2E+PC90ZD4iOwoKICAgICAgICAgICAgZWNobyAiPC90cj5cbiI7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIAogICAgICAgICBlY2hvICI8L3RhYmxlPlxuIjsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgIGVjaG8gIjxwPjxhIGhyZWY9XCIiLiR0aGlzLT5tYWtldXJsKCAiYWRkIiAsIDAgKS4iXCI+Q3JlYXRlIE5ldzwvYT48L3A+XG4iOwogICAgICAKICAgICAgfSNlbmQgc2hvdyBmdW5jdGlvbgogICAgICAKICAgICAgCiAgICAgICN0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGV4YWN0IHVybCB0aGF0IHdlIHdlcmUgY2FsbGVkIHdpdGggc3RyaXBzIG91dCBwcmV2aW91cyByY3J1ZCBhbmQgYXBwbGllcyBuZXcKICAgICAgI2hvcGVmdWxseSB0aGlzIGFsbG93cyB1cyB0byB1c2UgcmNydWQgaW4gb3RoZXIgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcwogICAgICBmdW5jdGlvbiBtYWtldXJsKCAkYWN0aW9uICwgJGlkICkKICAgICAgewogICAgICAgICAKCSR0PScnOwogICAgICAgICBmb3JlYWNoKCAkX0dFVCBhcyAkayA9PiAkdiApCiAgICAgICAgIHsKICAgICAgICAgICAgaWYoICEgZXJlZyggIl5yY3J1ZCIsICRrICkgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICR0ID0gJHQgLiAkayAuICI9IiAuJHYuICImYW1wOyI7CiAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKCSAvL2NoZWNrIHRoYXQgbW9kdWxlPSAgaXMgY2FycmllZCB0aHJvdWdoCgkgaWYgKCFpc3NldCgkX0dFVFsnbW9kdWxlJ10pKSAKCSAgIHsKCSAgICAgJG0gPSBpc3NldCgkX1BPU1RbJ21hY3QnXSkgPyBleHBsb2RlKCcsJywkX1BPU1RbJ21hY3QnXSkgOiAiIjsKCSAgICAgJG0gPSAibW9kdWxlPSIuICRtWzBdOwoJICAgICAkdCA9ICRfU0VSVkVSWyJQSFBfU0VMRiJdIC4gIj8iIC4gJHQgLiAkbSAuIiZhbXA7cmNydWRfYWN0aW9uPSIuJGFjdGlvbi4iJmFtcDtyY3J1ZF9pZD0iLiRpZDsKCSAgIH0KCSBlbHNlCgkgICB7CgkgICAgICR0ID0gJF9TRVJWRVJbIlBIUF9TRUxGIl0gLiAiPyIgLiAkdCAuInJjcnVkX2FjdGlvbj0iLiRhY3Rpb24uIiZhbXA7cmNydWRfaWQ9Ii4kaWQ7CgkgICB9CgogICAgICAgICBpZiggJGFjdGlvbiA9PSAiZWRpdCIgfHwgJGFjdGlvbiA9PSAiZGVsZXRlIiB8fCAkYWN0aW9uID09ICJhZGQiICkKICAgICAgICAgewogICAgICAgICAgICAkdCA9ICR0IC4gIiZhbXA7cmNydWRfdGFibGU9Ii4kdGhpcy0+dGFibGU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiAkdDsKICAgICAgICAgCiAgICAgIH0KICAgICAgCiAgICAgICNzZXQgYWxsIHRoZSBmaWVsZHMgdmlzaWJpbHR5IHRvICRiCiAgICAgICNleCwgc2V0IGFsbCBmaWVsZHMgdG8gZmFsc2UsIHRoZW4gZW5hYmxlIHRoZSBvbmVzIHlvdSBuZWVkCiAgICAgIGZ1bmN0aW9uIHNldFZpc2libGVJbkxpc3RBbGwoICRiICkKICAgICAgewogICAgICAgICBmb3JlYWNoKCAkdGhpcy0+ZmllbGRzIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRrXVsndmlzaWJsZV9pbl9saXN0J10gPSAkYjsKICAgICAgICAgfQogICAgICB9CgogICAgICAjc2V0IGFsbCB0aGUgZmllbGRzIHZpc2liaWx0eSB0byAkYgogICAgICAjZXgsIHNldCBhbGwgZmllbGRzIHRvIGZhbHNlLCB0aGVuIGVuYWJsZSB0aGUgb25lcyB5b3UgbmVlZAogICAgICBmdW5jdGlvbiBzZXRWaXNpYmxlSW5BZGRBbGwoICRiICkKICAgICAgewogICAgICAgICBmb3JlYWNoKCAkdGhpcy0+ZmllbGRzIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRrXVsndmlzaWJsZV9pbl9hZGQnXSA9ICRiOwogICAgICAgICB9CiAgICAgIH0gICAgICAKCiAgICAgICNzZXQgYWxsIHRoZSBmaWVsZHMgdmlzaWJpbHR5IHRvICRiCiAgICAgICNleCwgc2V0IGFsbCBmaWVsZHMgdG8gZmFsc2UsIHRoZW4gZW5hYmxlIHRoZSBvbmVzIHlvdSBuZWVkCiAgICAgIGZ1bmN0aW9uIHNldFZpc2libGVJbkVkaXRBbGwoICRiICkKICAgICAgewogICAgICAgICBmb3JlYWNoKCAkdGhpcy0+ZmllbGRzIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRrXVsndmlzaWJsZV9pbl9lZGl0J10gPSAkYjsKICAgICAgICAgfQogICAgICB9CgogICAgICAKICAgICAgI3ByaW50IG91cnNlbHZlcyBvdXQgc28gd2UgY2FuIHdoYXQgaXMgYmVpbmcgc2V0IGFuZC9vciBub3QuLi4KICAgICAgZnVuY3Rpb24gZGVidWcoKQogICAgICB7CiAgICAgICAgIGVjaG8gIjxwcmU+XG4iOwogICAgICAgICBwcmludF9yKCR0aGlzKTsKICAgICAgICAgZWNobyAiPC9wcmU+XG4iOwogICAgICB9CiAgICAgCiAgICAgCiAgICAgIAogICAgICAjcmV0dXJucyB0aGUgZXJyb3JzIGlmIHRoZXJlIHdlcmUgc29tZSBvdGhlcndpc2Ugbm8sIHRoZW4gcmV0dXJuIGZhbHNlLgogICAgICBmdW5jdGlvbiBmb3JtX2Vycm9ycygpCiAgICAgIHsKICAgICAgICAgI3Byb2Nlc3MgdGhlIHJlZ2V4IHZhbGlkYXRpb25zCiAgICAgICAgICAgIGZvcmVhY2goICRfUE9TVCBhcyAkayA9PiAkdiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgaWYoIGlzc2V0KCAkdGhpcy0+ZmllbGRzWyRrXVsnZmllbGRfcmVnZXgnXSApICkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiggISBlcmVnKCAkdGhpcy0+ZmllbGRzWyRrXVsnZmllbGRfcmVnZXgnXSAsICR2ICkgKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICRlcnJvcnNbJGtdID0gJHRoaXMtPmZpZWxkc1ska11bJ2ZpZWxkX2Vycm9yJ107CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiggaXNzZXQoICRlcnJvcnMgKSAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHJldHVybiAkZXJyb3JzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgfSNlbmQgZm9ybSBlcnJvcnMKICAgCgogICAgICAjdGhpcyBmdW5jdGlvbiBtYWtlcyBhIHJhZGlvIGJ1dHRvbiBiYXNlZCBvbiB0aGUgZmllbGQgdHlwZQogICAgICBmdW5jdGlvbiBtYWtlX3JhZGlvcyggJGZpZWxkICkKICAgICAgewogICAgICAgICAkcGFydHMgPSBzcGxpdCggIlx8IiAsICR0aGlzLT5maWVsZHNbJGZpZWxkXVsnZmllbGRfdHlwZSddICk7CiAgICAgICAgIAogICAgICAgICAjcG9wIHRoZSBmaXJzdCBlbGVtZW50IG9mZiB0aGUgYXJyYXkgCiAgICAgICAgICRwYXJ0cyA9IGFycmF5X3JldmVyc2UoICRwYXJ0cyApOwogICAgICAgICBhcnJheV9wb3AoICRwYXJ0cyApOwogICAgICAgICAkcGFydHMgPSBhcnJheV9yZXZlcnNlKCAkcGFydHMgKTsKCSAKCSAkc2VsZWN0ZWQgPSAnJzsKCgkgaWYgKGlzc2V0KCAkX1BPU1RbJGZpZWxkXSApICYmICRfUE9TVFskZmllbGRdICE9ICcnKSB7CgkgICAkc2VsZWN0ZWQgPSAkX1BPU1RbJGZpZWxkXTsKCSB9IGVsc2UgewoJICAgJHNlbGVjdGVkID0gJHBhcnRzWzBdOwoJIH0KICAgICAgICAgCiAgICAgICAgIGZvcmVhY2goICRwYXJ0cyBhcyAkayA9PiAkdiApCiAgICAgICAgIHsKICAgICAgICAgICAgZWNobyAkdiAuICIgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCIiLiRmaWVsZC4iXCIgdmFsdWU9XCIiLiR2LiJcIi8iOwogICAgICAgICAgICBpZiggJHNlbGVjdGVkID09PSAkdiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgZWNobyAiIGNoZWNrZWQ9XCJjaGVja2VkXCIgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICI+XG4iOwogICAgICAgICB9CiAgICAgIH0KICAgCiAgIAogICAgICAjdGhpcyBmdW5jdGlvbiBtYWtlIGEgc2VsZWN0b3Igd2l0aCBhbiBpbnQgcmFuZ2UKICAgICAgZnVuY3Rpb24gbWFrZV9yYW5nZV9zZWxlY3RvciggJG1pbiAsICRtYXggLCAkZm9ybV9maWVsZCApCiAgICAgIHsKICAgICAgCiAgICAgICAgIGVjaG8gIjxzZWxlY3QgbmFtZT1cIiIuJGZvcm1fZmllbGQuIlwiPlxuIjsKICAgICAgICAgJGkgPSAkbWluOwogICAgICAgICB3aGlsZSggJGkgLSAxIDwgJG1heCApCiAgICAgICAgIHsKICAgICAgICAgICAgZWNobyAiICA8b3B0aW9uIHZhbHVlPVwiIi4kaS4iXCIiOwogICAgICAgICAgICBpZiggJF9QT1NUWyRmb3JtX2ZpZWxkXSA9PSAkaSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgZWNobyAiIFNFTEVDVEVEICI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAiPiIuJGkuIjwvb3B0aW9uPlxuIjsKICAgICAgICAgICAgJGkrKzsKICAgICAgICAgfQogICAgICAgICBlY2hvICI8L3NlbGVjdD5cbiI7CiAgICAgIAogICAgICB9I2VuZCBmdW5jCiAKIAogCiAKICAgICAgI3RoaXMgZnVuY3Rpb24gbWFrZSBhIHNlbGVjdG9yIHdpdGggYW4gaW50IHJhbmdlCiAgICAgIGZ1bmN0aW9uIG1ha2VfdGFibGVfc2VsZWN0b3IoICR0YWJsZSAsICR2YWx1ZSAsICRsYWJlbCAsICRmb3JtX2ZpZWxkICkKICAgICAgewogICAgICAKICAgICAgICAgZWNobyAiPHNlbGVjdCBuYW1lPVwiIi4kZm9ybV9maWVsZC4iXCI+XG4iOwoKICAgICAgICAgJHEgPSAiU0VMRUNUICIuJHZhbHVlLiIsICIuJGxhYmVsLiIgRlJPTSAiLiR0YWJsZS4iIE9SREVSIEJZICIuJGxhYmVsLiIgQVNDIjsKICAgICAgICAgJHFyID0gJHRoaXMtPmRiLT5FeGVjdXRlKCAkcSApIG9yIGRpZSggIlJDUlVEIE1BS0UgVEFCTEUgU0VMRUNUIFNRTDogIi4kdGhpcy0+ZGItPkVycm9yTXNnKCkgKTsKICAgICAgIAogICAgICAgICAKICAgICAgICAgd2hpbGUoICRyb3cgPSAkcXItPkZldGNoUm93KCkgKQogICAgICAgICB7CiAgICAgICAgICAgIGVjaG8gIiAgPG9wdGlvbiB2YWx1ZT1cIiIuJHJvd1skdmFsdWVdLiJcIiI7CiAgICAgICAgICAgIGlmKCBpc3NldCgkX1BPU1RbJGZvcm1fZmllbGRdKSAmJiAkX1BPU1RbJGZvcm1fZmllbGRdID09ICRyb3dbJHZhbHVlXSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgZWNobyAiIFNFTEVDVEVEICI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAiPiIuJHJvd1skbGFiZWxdLiI8L29wdGlvbj5cbiI7CiAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgIGVjaG8gIjwvc2VsZWN0PlxuIjsKICAgICAgCiAgICAgIH0jZW5kIGZ1bmMKICAgICAgCiAgICAgIAogICAgICAjdGhpcyBmdW5jdGlvbnMgZ2V0cyB0aGUgdGV4dCB2YWx1ZSBvZiBhIGZvcmVpZ24ga2V5CiAgICAgIGZ1bmN0aW9uIGdldF9mb3JlaWduX2xhYmVsKCAkdGFibGUgLCAkdmFsdWVfZmllbGQgLCAkdmFsdWUgLCAkbGFiZWwgKSAgCiAgICAgIHsKICAgICAgCiAgICAgICAgICRxID0gIlNFTEVDVCAiLiRsYWJlbC4iIEZST00gIi4kdGFibGUuIiBXSEVSRSAiLiR2YWx1ZV9maWVsZC4iID0gIi4kdGhpcy0+ZGItPnFzdHIoICR2YWx1ZSApOwogICAgICAgICAkcXIgPSAkdGhpcy0+ZGItPkV4ZWN1dGUoICRxICk7CiAgICAgICAgICRyb3cgPSAkcXItPkZldGNoUm93KCk7CiAgICAgICAgIGlmKCAkcXItPlJlY29yZENvdW50KCkgPT0gMCApCiAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICJNaXNzaW5nIExhYmVsIjsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRyb3dbJGxhYmVsXTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgfQogICAgICAKICAgICAgCiAgICAgICN0aGlzIGZ1bmN0aW9ucyBtYWtlIGEgZGF0ZXRpbWUgaHRtbCBmaWVsZAogICAgICBmdW5jdGlvbiBtYWtlX2RhdGV0aW1lKCAkZmllbGQgKQogICAgICB7CiAgICAgIAogICAgICAgICBpZiggISBpc3NldCggJF9QT1NUWyRmaWVsZF0gKSB8fCAkX1BPU1RbJGZpZWxkXSA9PSAiMDAwMC0wMC0wMCAwMDowMDowMCIgKQogICAgICAgICB7CiAgICAgICAgICAgICRfUE9TVFskZmllbGRdID0gZGF0ZSggIlktbS1kIEg6aTpzIiApOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAkX1BPU1RbJGZpZWxkLicteWVhciddID0gZGF0ZSggIlkiICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1tb250aCddID0gZGF0ZSggIm0iICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1kYXknXSA9IGRhdGUoICJkIiAsIHN0cnRvdGltZSggJF9QT1NUWyRmaWVsZF0gKSApOwogICAgICAgICAkX1BPU1RbJGZpZWxkLictaG91ciddID0gZGF0ZSggIkgiICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1taW51dGUnXSA9IGRhdGUoICJpIiAsIHN0cnRvdGltZSggJF9QT1NUWyRmaWVsZF0gKSApOwogICAgICAgICAkX1BPU1RbJGZpZWxkLictc2Vjb25kJ10gPSBkYXRlKCAicyIgLCBzdHJ0b3RpbWUoICRfUE9TVFskZmllbGRdICkgKTsKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgZWNobyAiWVlZWS1NTS1ERCAiOwogICAgICAgICAkdGhpcy0+bWFrZV9yYW5nZV9zZWxlY3RvciggZGF0ZSggIlkiICkgLSAxMDAgLCBkYXRlKCAiWSIgKSArIDEwICwgJGZpZWxkLiIteWVhciIgKTsKICAgICAgICAgJHRoaXMtPm1ha2VfcmFuZ2Vfc2VsZWN0b3IoIDEgLCAxMiAsICRmaWVsZC4iLW1vbnRoIiApOwogICAgICAgICAkdGhpcy0+bWFrZV9yYW5nZV9zZWxlY3RvciggMSAsIDMxICwgJGZpZWxkLiItZGF5IiApOwogICAgICAgICBlY2hvICIgJm5ic3A7IEhIOk1NOlNTICI7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAwICwgMjMgLCAkZmllbGQuIi1ob3VyIiApOwogICAgICAgICAkdGhpcy0+bWFrZV9yYW5nZV9zZWxlY3RvciggMCAsIDU5ICwgJGZpZWxkLiItbWludXRlIiApOwogICAgICAgICAkdGhpcy0+bWFrZV9yYW5nZV9zZWxlY3RvciggMCAsIDU5ICwgJGZpZWxkLiItc2Vjb25kIiApOwogICAgICAKICAgICAgfQogICAgICAKICAgICAgI3RoaXMgZnVuY3Rpb24ganVzdCBtYWtlcyB0aGUgZGF0ZSBubyBoLG0scwogICAgICBmdW5jdGlvbiBtYWtlX2RhdGUoICRmaWVsZCApCiAgICAgIHsKICAgICAgICAgaWYoICEgaXNzZXQoICRfUE9TVFskZmllbGRdICkgfHwgJF9QT1NUWyRmaWVsZF0gPT0gIjAwMDAtMDAtMDAiICkKICAgICAgICAgewogICAgICAgICAgICAkX1BPU1RbJGZpZWxkXSA9IGRhdGUoICJZLW0tZCIgKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgJF9QT1NUWyRmaWVsZC4nLXllYXInXSA9IGRhdGUoICJZIiAsIHN0cnRvdGltZSggJF9QT1NUWyRmaWVsZF0gKSApOwogICAgICAgICAkX1BPU1RbJGZpZWxkLictbW9udGgnXSA9IGRhdGUoICJtIiAsIHN0cnRvdGltZSggJF9QT1NUWyRmaWVsZF0gKSApOwogICAgICAgICAkX1BPU1RbJGZpZWxkLictZGF5J10gPSBkYXRlKCAiZCIgLCBzdHJ0b3RpbWUoICRfUE9TVFskZmllbGRdICkgKTsKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICBlY2hvICJZWVlZLU1NLUREICI7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCBkYXRlKCAiWSIgKSAtIDEwMCAsIGRhdGUoICJZIiApICsgMTAgLCAkZmllbGQuIi15ZWFyIiApOwogICAgICAgICAkdGhpcy0+bWFrZV9yYW5nZV9zZWxlY3RvciggMSAsIDEyICwgJGZpZWxkLiItbW9udGgiICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAxICwgMzEgLCAkZmllbGQuIi1kYXkiICk7CgogICAgICAKICAgICAgfQogICAgICAKICAgICAgI3RoaXMgY29tcGlsZXMgYmFjayB0aGUgZGF0ZXRpbWUgZmllbGQgZnJvbSBodG1sIHBvc3QKICAgICAgZnVuY3Rpb24gY29tcGlsZV9kYXRldGltZSggJGZpZWxkICkKICAgICAgewogICAgICAKICAgICAgICAgJF9QT1NUWyRmaWVsZF0gPSAkX1BPU1RbJGZpZWxkLicteWVhciddLiItIi4kX1BPU1RbJGZpZWxkLictbW9udGgnXS4iLSIuJF9QT1NUWyRmaWVsZC4nLWRheSddLiIgIi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWyRmaWVsZC4nLWhvdXInXS4iOiIuJF9QT1NUWyRmaWVsZC4nLW1pbnV0ZSddLiI6Ii4kX1BPU1RbJGZpZWxkLictc2Vjb25kJ107CiAgICAgIAogICAgICB9CiAgICAgIAogICAgICAjdGhpcyBmdW5jdGlvbiBjb21waWxlcyBqdXN0IGEgZGF0ZSBpbnRvIG9uZSBmaWVsZCBhZ2FpbgogICAgICBmdW5jdGlvbiBjb21waWxlX2RhdGUoICRmaWVsZCApCiAgICAgIHsKICAgICAgCiAgICAgICAgICRfUE9TVFskZmllbGRdID0gJF9QT1NUWyRmaWVsZC4nLXllYXInXS4iLSIuJF9QT1NUWyRmaWVsZC4nLW1vbnRoJ10uIi0iLiRfUE9TVFskZmllbGQuJy1kYXknXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgIH0KICAgICAgCiAgICAgICN0aGlzIGNvdmVydHMgYWxsIHRoZSBkYXRldGltZXMgZnJvbSBwb3N0IGludG8gdGhlIG9yaWdpbmFsIGZpZWxkCiAgICAgIGZ1bmN0aW9uIGNvbXBpbGVfZGF0ZXRpbWVzKCkKICAgICAgewogICAgICAKICAgICAgICAgZm9yZWFjaCggJHRoaXMtPmZpZWxkcyBhcyAkayA9PiAkdiApCiAgICAgICAgIHsKICAgICAgICAgICAgaWYoICR2WydmaWVsZF90eXBlJ10gPT0gImRhdGV0aW1lIiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgJHRoaXMtPmNvbXBpbGVfZGF0ZXRpbWUoICRrICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKCAkdlsnZmllbGRfdHlwZSddID09ICJkYXRlIiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgJHRoaXMtPmNvbXBpbGVfZGF0ZSggJGsgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAKICAgICAgfQogICAgICAKICAgICAjdGhpcyBmdW5jdGlvbiBtYWtlcyBhIHJldHVybiB0byBsaXN0IGxpbmsgc28gd2l0aCBhbnkgcmNydWQgc3R1ZmYKICAgICBmdW5jdGlvbiBtYWtlX3JldHVybl9saW5rKCkKICAgICB7CiAgICAgICAkdCA9ICcnOwogICAgICAgIGZvcmVhY2goICRfR0VUIGFzICRrID0+ICR2ICkKICAgICAgICB7CiAgICAgICAgICAgaWYoICEgZXJlZyggIl5yY3J1ZCIsICRrICkgKQogICAgICAgICAgIHsKICAgICAgICAgICAgICAkdCA9ICR0IC4gJGsgLiAiPSIgLiR2LiAiJiI7CiAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICR0ID0gZXJlZ19yZXBsYWNlKCAiXCYkIiAsICIiICwgJHQgKTsKICAgICAgICAgICAgCiAgICAgICAgICR0ID0gJF9TRVJWRVJbIlBIUF9TRUxGIl0gLiAiPyIgLiAkdDsKICAgICAgICAgLy9lY2hvICI8cD48YSBocmVmPVwiIi4gJHQgLiAiXCI+Ii4kdGhpcy0+bGFuZ3VhZ2UoJ3JldHVybnRvbGlzdCcpLiI8L2E+PC9wPlxuIjsKICAgICAgICAgZWNobyAiPHA+PGEgaHJlZj1cIiIuICR0IC4gIlwiPnJldHVybiB0byBsaXN0PC9hPjwvcD5cbiI7CiAgICAgICAgIAogICAgIH0KICAgCglmdW5jdGlvbiBzZXRQYXRoKCRwYXRoLCAkcGF0aGVycm9yLCAkbWFya2VyZXJyb3IpCgl7CgkJJHRoaXMtPnBhdGggPSAkcGF0aDsKCQkkdGhpcy0+cGF0aGVycm9yID0gJHBhdGhlcnJvcjsKCQkkdGhpcy0+bWFya2VyZXJyb3IgPSAkbWFya2VyZXJyb3I7IAoJfQogICB9I2VuZGNsYXNzCgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRnQ21zID0gY21zbXMoKTsgaWYoICFpc19vYmplY3QoJGdDbXMpICkgZXhpdDsKJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCi8vIG15c3FsLXNwZWNpZmljLCBidXQgaWdub3JlZCBieSBvdGhlciBkYXRhYmFzZQokdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwoKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKLy8gdGFibGUgc2NoZW1hIGRlc2NyaXB0aW9uCiRmbGRzID0gIgoJCW1hcF9pZCBJIEFVVE8gS0VZLAoJICBuYW1lIEMoODApIE5PVE5VTEwsCgkJZGVzY3JpcHRpb24gWCwKCSAgY2VudGVyX2xhdCBDKDUwKSwKCSAgY2VudGVyX2xvbiBDKDUwKSwKCSAgb3duZXJfaWQgSSwKCSAgdHlwZSBDKDUwKSwKCSAgd2lkdGggQyg1MCksCgkgIGhlaWdodCBDKDUwKSwKCSAgY29udHJvbHMgTCwKCSAgY29udHJvbHNfc2l6ZSBDKDEwKSwKCSAgdHlwZV9jb250cm9scyBMLAoJICBzaWRlYmFyIEwsCgkgIGRpcmVjdGlvbnMgTCwKCSAgem9vbSBDKDEwKSwKCSAgem9vbXNjcm9sbHdoZWVsIEwsCgkgIHpvb21fZW5jb21wYXNzIEwsCgkgIHNjYWxlX2NvbnRyb2wgTCwKCSAgYm91bmRzX2Z1ZGdlIEYsCgkgIGluZm9fd2luZG93IEwsCgkgIGluZm9fdHJpZ2dlciBDKDgwKQoJIjsKCi8vIENyZWF0ZSB0aGUgdGFibGUKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovL2luZGV4IGZvciBtYXBzCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVJbmRleFNRTCgnaV9uYW1lJywgY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXBzIiwgJ25hbWUnKTsKCi8vIGNyZWF0ZSBhIHNlcXVlbmNlCiMkZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwc19zZXEiKTsKCgovLyBNYXJrZXJzCiRmbGRzID0gIgoJICBtYXJrZXJfaWQgSSBBVVRPIEtFWSwKCSAgbWFwIEMoMTAwKSwKCSAgbmFtZSBDKDgwKSwKCSAgaW5mbyBYLAoJICBhZGRyZXNzIEMoMjU1KSwKCSAgbGF0IEMoMTAwKSwKCSAgbG9uIEMoMTAwKSwKCSAgaWNvbiBDKDEwMCkKICAiOwoKLy8gQ3JlYXRlIHRoZSB0YWJsZQokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKLy8gY3JlYXRlIGEgc2VxdWVuY2UKJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcmtlcnNfc2VxIik7CgovLyBQb2x5bGluZXMKJGZsZHMgPSAiCglwb2x5bGluZV9pZCBJIEtFWSwKCW1hcF9pZCBJLAoJbmFtZSBDKDgwKSwKCXN0cm9rZWNvbG9yIEMoNyksCglzdHJva2VvcGFjaXR5IEYsCglzdHJva2V3ZWlnaHQgSQoiOwoKLy8gQ3JlYXRlIHRoZSB0YWJsZQokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwovLyBDcmVhdGUgYSBzZXF1ZW5jZQokZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVzX3NlcSIpOwoKLy8gUG9seWxpbmUgcGFydHMKJGZsZHMgPSAiCglwb2x5bGluZXBhcnRfaWQgSSBLRVksCglwb2x5bGluZV9pZCBJIEtFWSwKCXNlcSBJLAoJZGVzY3JpcHRpb24gQygyNTUpLAoJbGF0IEMoMTAwKSwKCWxvbiBDKDEwMCkKIjsKCi8vIENyZWF0ZSB0aGUgdGFibGUKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVwYXJ0cyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Ci8vIENyZWF0ZSBhIHNlcXVlbmNlCiRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzX3NlcSIpOwoKLy8gQ2FjaGUgbm90IHVzZWQgeWV0CiRmbGRzID0gIgogICAgICAgIGFkZHJlc3MgQygyNTUpIEtFWSBERUZBVUxUICcnLCAKICAgICAgICBsb24gRiwKICAgICAgICBsYXQgRgogICAgICAgICI7Cgokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19jYWNoZSIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Ci8vIGNyZWF0ZSBhIHNlcXVlbmNlCiRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19jYWNoZV9zZXEiKTsKCgovLyBjcmVhdGUgYSBwZXJtaXNzaW9uCiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdVc2UgR29vZ2xlTWFwcycsICdVc2UgR29vZ2xlTWFwcycpOwoKCi8vIGNyZWF0ZSBhIHByZWZlcmVuY2UKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2xvb2t1cHNlcnZpY2UnLCAnR09PR0xFJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd1c2VjYWNoZScsICcwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd1c2VtYXJrZXJzaGFkb3dzJywgMCk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd5YWhvb2FwcGlkJywgJycpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsZXZlbCcsIDEgKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGF0JywgMCApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3Jsb24nLCAwICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcnNhdmVsYXN0JywgJzEnICk7CgokY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwovLyBQcmVwYXJlIGEgZGlyZWN0b3J5IHRoYXQgd2lsbCBjb250YWluIHRoZSBpbWFnZXMgb2YgdGhlIG1hcmtlcnMgYW5kIG9uZSBmb3IgdGhlIHNoYWRvd3Mgb2YgdGhlIG1hcmtlcnMKJHBhdGggPSAkdGhpcy0+Y29uZmlnWyd1cGxvYWRzX3BhdGgnXS4nLycuJHRoaXMtPmdldE5hbWUoKTsKLy8gTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgY2FuIGJlIGZvdW5kLiBDcmVhdGUgaXQsIGVycm9yIGhhbmRsaW5nIHdpbGwgY292ZXIgYW55IHByb2JsZW1zIGZvdW5kCmlmICggIWZpbGVfZXhpc3RzKCAkcGF0aCApICkgbWtkaXIoJHBhdGgsIDA3NzcpOwokbWFya2Vyc3BhdGggPSAkcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzJzsKaWYgKCAhZmlsZV9leGlzdHMoICRtYXJrZXJzcGF0aCApICkgbWtkaXIoJG1hcmtlcnNwYXRoLCAwNzc3KTsKJG1hcmtlcnNoYWRvd3NwYXRoID0gJHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFya2Vyc2hhZG93cyc7CmlmICggIWZpbGVfZXhpc3RzKCAkbWFya2Vyc2hhZG93c3BhdGggKSApIG1rZGlyKCRtYXJrZXJzaGFkb3dzcGF0aCwgMDc3Nyk7Ci8vIENvcHkgb3ZlciB0aGUgZGVmYXVsdCBzdXBwbGllZCBtYXJrZXJzCiRtYXJrZXJkaXIgPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLidpbWFnZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21hcmtlcnMnOwppZiAoZmlsZV9leGlzdHMoICRtYXJrZXJkaXIgKSApIHsKCSRkaXIgPSBvcGVuZGlyKCRtYXJrZXJkaXIpOwoJLy8gRmlsdGVyIG91dCB0aGUgZGlyZWN0b3J5IGNvbnRyb2xpbmcgY2hhcmFjdGVycyBhbmQgYnVpbGQgc2VsZWN0YWJsZSBvcHRpb25zIG9mIHRoZSBvdGhlcnMKCXdoaWxlICgoJGZpbGUgPSByZWFkZGlyKCRkaXIpKSAhPT0gZmFsc2UpCgkgIHsKCSAgCWlmICgkZmlsZSAhPScuJyAmJiAkZmlsZSE9Jy4uJykgewogIAkJCWNvcHkoJG1hcmtlcmRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlLCAkbWFya2Vyc3BhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZSk7CgkgIAl9CgkgIH0KCWNsb3NlZGlyKCRkaXIpOwp9Ci8vIENvcHkgb3ZlciB0aGUgZGVmYXVsdCBzdXBwbGllZCBtYXJrZXJzaGFkb3dzCiRtYXJrZXJkaXIgPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLidpbWFnZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21hcmtlcnNoYWRvd3MnOwppZiAoZmlsZV9leGlzdHMoICRtYXJrZXJkaXIgKSApIHsKCSRkaXIgPSBvcGVuZGlyKCRtYXJrZXJkaXIpOwoJLy8gRmlsdGVyIG91dCB0aGUgZGlyZWN0b3J5IGNvbnRyb2xpbmcgY2hhcmFjdGVycyBhbmQgYnVpbGQgc2VsZWN0YWJsZSBvcHRpb25zIG9mIHRoZSBvdGhlcnMKCXdoaWxlICgoJGZpbGUgPSByZWFkZGlyKCRkaXIpKSAhPT0gZmFsc2UpCgkgIHsKCSAgCWlmICgkZmlsZSAhPScuJyAmJiAkZmlsZSE9Jy4uJykgewogIAkJCWNvcHkoJG1hcmtlcmRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlLCAkbWFya2Vyc2hhZG93c3BhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZSk7CgkgIAl9CgkgIH0KCWNsb3NlZGlyKCRkaXIpOwp9Ci8vIFByZXBhcmUgdGVtcGxhdGUgdG8gYmUgdXNlZCBpbiB0aGUgc2V0dGluZ3MgZm9yIHRoZSBFYXN5IExvY2F0b3IKJGZuID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4ndGVtcGxhdGVzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidlYXN5bG9jYXRvci50cGwnOwppZiggZmlsZV9leGlzdHMoICRmbiApICkKewoJJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CgkkdGhpcy0+U2V0VGVtcGxhdGUoICdnb29nbGVtYXBzX2Vhc3lsb2NhdG9yJywgJHRlbXBsYXRlLCAkdGhpcy0+R2V0TmFtZSgpKTsKfQoKCi8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwokdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ2luc3RhbGxlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRnQ21zID0gY21zbXMoKTsgaWYoICFpc19vYmplY3QoJGdDbXMpICkgZXhpdDsKJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCi8vIFJlbW92ZSB0aGUgZGF0YWJhc2UgdGFibGVzCiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoKLy8gUmVtb3ZlIHRoZSBtYXBzCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy8gUmVtb3ZlIHRoZSBtYXJrZXJzCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFya2VycyIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzX3NlcSIgKTsKCi8vIFJlbW92ZSB0aGUgcG95bGluZXMKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMiICk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVzX3NlcSIgKTsKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHNfc2VxIiApOwoKLy8gUmVtb3ZlIHRoZSBjYWNoZQokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX2NhY2hlIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX2NhY2hlX3NlcSIgKTsKCi8vIFJlbW92ZSB0aGUgcGVybWlzc2lvbnMKJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ1VzZSBHb29nbGVNYXBzJyk7CgovLyBSZW1vdmUgdGhlIHByZWZlcmVuY2VzCiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCk7CgovLyBBbmQgYWxsIFRlbXBsYXRlcwokdGhpcy0+RGVsZXRlVGVtcGxhdGUoKTsKCi8vIFB1dCBhdWRpdCB0cmFpbCBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwoKJGN1cnJlbnRfdmVyc2lvbiA9ICRvbGR2ZXJzaW9uOwpzd2l0Y2goJGN1cnJlbnRfdmVyc2lvbikKewogY2FzZSAiMC4xLjIiOgogICBicmVhazsKIGNhc2UgIjAuMS4zIjoKICAgJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKICAgI2NoYW5nZSBtYXAgaW5mbyB0byB0ZXh0CiAgICRzcWxhcnJheSA9ICRkaWN0LT5BbHRlckNvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcHMiLCAiZGVzY3JpcHRpb24gWCIpOwogICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICNjaGFuZ2UgbWFya2VyIGluZm8gdG8gdGV4dAogICAkc3FsYXJyYXkgPSAkZGljdC0+QWx0ZXJDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzIiwgImluZm8gWCIpOwogICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgIGJyZWFrOwogY2FzZSAiMC4xLjQiOgogICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgogICAjY2hhbmdlIG1hcCBpbmZvIHRvIHRleHQKICAgJHNxbGFycmF5ID0gJGRpY3QtPkFsdGVyQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfY2FjaGUiLCAibGF0IEYiKTsKICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAKICAgJGN1cnJlbnRfdmVyc2lvbiA9ICIwLjEuNCI7CiBjYXNlICIwLjEuNCI6CiAJJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKCS8vIFByZXBhcmUgYSBkaXJlY3RvcnkgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGltYWdlcyBvZiB0aGUgbWFya2VycyBhbmQgb25lIGZvciB0aGUgc2hhZG93cyBvZiB0aGUgbWFya2VycwoJJHBhdGggPSAkdGhpcy0+Y29uZmlnWyd1cGxvYWRzX3BhdGgnXS5ESVJFQ1RPUllfU0VQQVJBVE9SLiR0aGlzLT5nZXROYW1lKCk7CgkvLyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBjYW4gYmUgZm91bmQuIENyZWF0ZSBpdCwgZXJyb3IgaGFuZGxpbmcgd2lsbCBjb3ZlciBhbnkgcHJvYmxlbXMgZm91bmQKCW1rZGlyKCRwYXRoLCAwNzc3KTsKCSRtYXJrZXJzcGF0aCA9ICRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21hcmtlcnMnOwoJbWtkaXIoJG1hcmtlcnNwYXRoLCAwNzc3KTsKCSRtYXJrZXJzaGFkb3dzcGF0aCA9ICRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21hcmtlcnNoYWRvd3MnOwoJbWtkaXIoJG1hcmtlcnNoYWRvd3NwYXRoLCAwNzc3KTsKCS8vIENvcHkgb3ZlciB0aGUgZGVmYXVsdCBzdXBwbGllZCBtYXJrZXJzCgkkbWFya2VyZGlyID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4naW1hZ2VzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzJzsKCWlmIChmaWxlX2V4aXN0cyggJG1hcmtlcmRpciApICkgewoJCSRkaXIgPSBvcGVuZGlyKCRtYXJrZXJkaXIpOwoJCS8vIEZpbHRlciBvdXQgdGhlIGRpcmVjdG9yeSBjb250cm9saW5nIGNoYXJhY3RlcnMgYW5kIGJ1aWxkIHNlbGVjdGFibGUgb3B0aW9ucyBvZiB0aGUgb3RoZXJzCgkJd2hpbGUgKCgkZmlsZSA9IHJlYWRkaXIoJGRpcikpICE9PSBmYWxzZSkKCQkgIHsKCQkgIAlpZiAoJGZpbGUgIT0nLicgJiYgJGZpbGUhPScuLicpIHsKCSAgCQkJY29weSgkbWFya2VyZGlyLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZpbGUsICRtYXJrZXJzcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlKTsKCQkgIAl9CgkJICB9CgkJY2xvc2VkaXIoJGRpcik7Cgl9CgoJJGN1cnJlbnRfdmVyc2lvbiA9ICIwLjEuNSI7CiBjYXNlICIwLjEuNSI6CgkvLyBObyBkYXRhYmFzZSBjaGFuZ2VzLiBPbmx5IGludGVybmFsIGNoYW5nZXMgZm9yIHRoZSB1c2Ugb2YgcGFyYW1ldGVycyAgIAoJJGN1cnJlbnRfdmVyc2lvbiA9ICIwLjEuNiI7CiBjYXNlICIwLjEuNiI6CiAJJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKCS8vIFByZXBhcmUgbmFtZSBvZiBkaXJlY3Rvcnkgd2l0aCBvbGQgMi4wIEFQSQoJJEFQSWRpciA9ICR0aGlzLT5jb25maWdbJ3Jvb3RfdXJsJ10uRElSRUNUT1JZX1NFUEFSQVRPUi4nbW9kdWxlcycuCgkJRElSRUNUT1JZX1NFUEFSQVRPUi4kdGhpcy0+Z2V0TmFtZSgpLgoJCURJUkVDVE9SWV9TRVBBUkFUT1IuJ2xpYicuRElSRUNUT1JZX1NFUEFSQVRPUi4nR29vZ2xlTWFwQVBJLTIuMCc7CgkkcGF0aCA9ICRBUElkaXI7CgkvLyBDbGVhciB0aGUgZGlyZWN0b3J5CgkkaGFuZGxlID0gb3BlbmRpcigkQVBJZGlyKTsKCXdoaWxlIChGQUxTRSAhPT0gKCRlbnRyeSA9IHJlYWRkaXIoJGhhbmRsZSkpKSB7CgkJaWYgKCRlbnRyeSAhPSAnLicgJiYgJGVudHJ5ICE9ICcuLicpCgkJewoJCQlpZighKHN1YnN0cigkcGF0aCwtMSkgPT0gRElSRUNUT1JZX1NFUEFSQVRPUikpCSRwYXRoIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7CgkJCSRvYmogPSAkcGF0aC4kZW50cnk7CgkJCWlmIChpc19maWxlKCRvYmopKQoJCQl7CgkJCQl1bmxpbmsoJG9iaik7CQkJCQkKCQkJfQoJCX0KCX0KCWNsb3NlZGlyKCRoYW5kbGUpOwoJLy8gTm93IHRoYXQgaXRzIGNsZWFyLCByZW1vdmUgdGhlIGRpcmVjdG9yeQoJaWYoaXNfZGlyKCRBUElkaXIpKSBybWRpcigkQVBJZGlyKTsKCgkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7Cgkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfbWFwcycsICd6b29tc2Nyb2xsd2hlZWwgTCcgKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXBzJywgJ3NjYWxlX2NvbnRyb2wgTCcgKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCgkkY3VycmVudF92ZXJzaW9uID0gJzAuMS43JzsKCiBjYXNlICcwLjEuNyc6CgkkZm4gPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLid0ZW1wbGF0ZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ2Vhc3lsb2NhdG9yLnRwbCc7CglpZiggZmlsZV9leGlzdHMoICRmbiApICkKCXsKCQkkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKCQkkdGhpcy0+U2V0VGVtcGxhdGUoICdnb29nbGVtYXBzX2Vhc3lsb2NhdG9yJywgJHRlbXBsYXRlLCAkdGhpcy0+R2V0TmFtZSgpKTsKCX0KCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsZXZlbCcsIDEgKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDQ0ICk7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3Jsb24nLCAtNjMgKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcnNhdmVsYXN0JywgJzEnICk7CgkkY3VycmVudF92ZXJzaW9uID0gJzAuMS44JzsKCQogIGNhc2UgJzAuMS44JzoKICAJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJLy8gUHJlcGFyZSBuYW1lIG9mIGRpcmVjdG9yeSB3aXRoIG9sZCAyLjUgQVBJCgkkQVBJZGlyID0gY21zX2pvaW5fcGF0aCgkdGhpcy0+Y29uZmlnWydyb290X3VybCddLCdtb2R1bGVzJywkdGhpcy0+Z2V0TmFtZSgpLAoJCSdsaWInLCdHb29nbGVNYXBBUEktMi41Jyk7CgkkcGF0aCA9ICRBUElkaXI7CgkvLyBDbGVhciB0aGUgZGlyZWN0b3J5CgkkaGFuZGxlID0gb3BlbmRpcigkQVBJZGlyKTsKCWlmICgkaGFuZGxlKSB7CgkJd2hpbGUgKEZBTFNFICE9PSAoJGVudHJ5ID0gcmVhZGRpcigkaGFuZGxlKSkpIHsKCQkJaWYgKCRlbnRyeSAhPSAnLicgJiYgJGVudHJ5ICE9ICcuLicpCgkJCXsKCQkJCWlmKCEoc3Vic3RyKCRwYXRoLC0xKSA9PSBESVJFQ1RPUllfU0VQQVJBVE9SKSkJJHBhdGggLj0gRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJCSRvYmogPSAkcGF0aC4kZW50cnk7CgkJCQlpZiAoaXNfZmlsZSgkb2JqKSkKCQkJCXsKCQkJCQl1bmxpbmsoJG9iaik7CQkJCQkKCQkJCX0KCQkJfQoJCX0KCQljbG9zZWRpcigkaGFuZGxlKTsKCQkvLyBOb3cgdGhhdCBpdHMgY2xlYXIsIHJlbW92ZSB0aGUgZGlyZWN0b3J5CgkJaWYoaXNfZGlyKCRBUElkaXIpKSBybWRpcigkQVBJZGlyKTsKCX0KCgkvLyBQb2x5bGluZXMKCSRmbGRzID0gIgoJCXBvbHlsaW5lX2lkIEkgS0VZLAoJCW1hcF9pZCBJLAoJCW5hbWUgQyg4MCksCgkJc3Ryb2tlY29sb3IgQyg3KSwKCQlzdHJva2VvcGFjaXR5IEYsCgkJc3Ryb2tld2VpZ2h0IEkKCSI7CgoJLy8gQ3JlYXRlIHRoZSB0YWJsZQoJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVzIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkvLyBDcmVhdGUgYSBzZXF1ZW5jZQoJJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lc19zZXEiKTsKCQoJLy8gUG9seWxpbmUgcGFydHMKCSRmbGRzID0gIgoJCXBvbHlsaW5lcGFydF9pZCBJIEtFWSwKCQlwb2x5bGluZV9pZCBJIEtFWSwKCQlzZXEgSSwKCQlkZXNjcmlwdGlvbiBDKDI1NSksCgkJbGF0IEMoMTAwKSwKCQlsb24gQygxMDApCgkiOwoJCgkvLyBDcmVhdGUgdGhlIHRhYmxlCgkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkvLyBDcmVhdGUgYSBzZXF1ZW5jZQoJJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHNfc2VxIik7CgkkY3VycmVudF92ZXJzaW9uID0gJzAuMS45JzsKCiBkZWZhdWx0OgogICAgYnJlYWs7Cn0KCi8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwokdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VwZ3JhZGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/201a.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi8vVGl0bGU6ICAgICAgRkNQIENvbWJvLUNocm9tYXRpYyBDb2xvciBQaWNrZXIKLy9VUkw6ICAgICAgICBodHRwOi8vd3d3LmZyZWUtY29sb3ItcGlja2VyLmNvbQovL1Byb2R1Y3QgTm8uIEZDUDIwMWEKLy9WZXJzaW9uOiAgICAxLjIKLy9EYXRlOiAgICAgICAxMC8wMS8yMDA2Ci8vTk9URTogICAgICAgUGVybWlzc2lvbiBnaXZlbiB0byB1c2UgdGhpcyBzY3JpcHQgaW4gQU5ZIGtpbmQgb2YgYXBwbGljYXRpb25zIElGCi8vICAgICAgICAgICAgc2NyaXB0IGNvZGUgcmVtYWlucyBVTkNIQU5HRUQgYW5kIHRoZSBhbmNob3IgdGFnICJwb3dlcmVkIGJ5IEZDUCIKLy8gICAgICAgICAgICByZW1haW5zIHZhbGlkIGFuZCB2aXNpYmxlIHRvIHRoZSB1c2VyLgovLwovLyAgQ2FsbDogICAgIHNob3dDb2xvckdyaWQyKCJpbnB1dF9maWVsZF9pZCIsInNwYW5faWQiKQovLyAgQWRkOiAgICAgIDxESVYgSUQ9IkNPTE9SUElDS0VSMjAxIiBDTEFTUz0iQ09MT1JQSUNLRVIyMDEiPjwvRElWPiBhbnl3aGVyZSBpbiBib2R5Ci8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpmdW5jdGlvbiBnZXRTY3JvbGxZKCl7dmFyIHNjck9mWCA9IDAsc2NyT2ZZPTA7aWYodHlwZW9mKHdpbmRvdy5wYWdlWU9mZnNldCk9PSdudW1iZXInKXtzY3JPZlk9d2luZG93LnBhZ2VZT2Zmc2V0O3Njck9mWD13aW5kb3cucGFnZVhPZmZzZXQ7fWVsc2UgaWYoZG9jdW1lbnQuYm9keSYmKGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApKXtzY3JPZlk9ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7c2NyT2ZYPWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDt9ZWxzZSBpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkpe3Njck9mWT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO3Njck9mWD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDt9cmV0dXJuIHNjck9mWTt9ZG9jdW1lbnQud3JpdGUoIjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+LmNvbG9ycGlja2VyMjAxe3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNGRkY7Ym9yZGVyOnNvbGlkIDFweCAjQ0NDO3BhZGRpbmc6NHB4O3otaW5kZXg6OTk5O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuU2hhZG93KGNvbG9yPSNEMEQwRDAsZGlyZWN0aW9uPTEzNSk7fS5vNTU4MmJyZHtwYWRkaW5nOjA7d2lkdGg6MTJweDtoZWlnaHQ6MTRweDtib3JkZXItYm90dG9tOnNvbGlkIDFweCAjREZERkRGO2JvcmRlci1yaWdodDpzb2xpZCAxcHggI0RGREZERjt9YS5vNTU4Mm42NiwubzU1ODJuNjYsLm81NTgybjY2YXtmb250LWZhbWlseTphcmlhbCx0YWhvbWEsc2Fucy1zZXJpZjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2ZvbnQtc2l6ZTo5cHg7Y29sb3I6IzY2Njtib3JkZXI6bm9uZTt9Lm81NTgybjY2LC5vNTU4Mm42NmF7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fWE6aG92ZXIubzU1ODJuNjZ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6I0ZGQTUwMDtjdXJzb3I6cG9pbnRlcjt9LmEwMXAze3BhZGRpbmc6MXB4IDRweCAxcHggMnB4O2JhY2tncm91bmQ6d2hpdGVzbW9rZTtib3JkZXI6c29saWQgMXB4ICNERkRGREY7fTwvc3R5bGU+Iik7ZnVuY3Rpb24gZ2V0VG9wMigpe2NzQnJIdD0wO2lmKHR5cGVvZih3aW5kb3cuaW5uZXJXaWR0aCk9PSdudW1iZXInKXtjc0JySHQ9d2luZG93LmlubmVySGVpZ2h0O31lbHNlIGlmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpe2NzQnJIdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O31lbHNlIGlmKGRvY3VtZW50LmJvZHkmJihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRofHxkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCkpe2NzQnJIdD1kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDt9Y3RvcD0oKGNzQnJIdC8yKS0xMTUpK2dldFNjcm9sbFkoKTtyZXR1cm4gY3RvcDt9dmFyIG5vY29sMT0iJiM3ODsmIzc5OyYjMzI7JiM2NzsmIzc5OyYjNzY7JiM3OTsmIzgyOyIsY2xvczE9IiYjNjc7JiM3NjsmIzc5OyYjODM7JiM2OTsiLHR0Mj0iJiM3MDsmIzgyOyYjNjk7JiM2OTsmIzQ1OyYjNjc7JiM3OTsmIzc2OyYjNzk7JiM4MjsmIzQ1OyYjODA7JiM3MzsmIzY3OyYjNzU7JiM2OTsmIzgyOyYjNDY7JiM2NzsmIzc5OyYjNzc7IixobTI9IiYjMTA0OyYjMTE2OyYjMTE2OyYjMTEyOyYjNTg7JiM0NzsmIzQ3OyYjMTE5OyYjMTE5OyYjMTE5OyYjNDY7IjtobTIrPXR0Mjt0dDI9IiYjODA7JiM3OTsmIzg3OyYjNjk7JiM4MjsmIzY5OyYjNjg7JiMzMjsmIzk4OyYjMTIxOyYjMzI7JiM3MDsmIzY3OyYjODA7IjtmdW5jdGlvbiBnZXRMZWZ0Migpe3ZhciBjc0JyV3Q9MDtpZih0eXBlb2Yod2luZG93LmlubmVyV2lkdGgpPT0nbnVtYmVyJyl7Y3NCcld0PXdpbmRvdy5pbm5lcldpZHRoO31lbHNlIGlmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpe2NzQnJXdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7fWVsc2UgaWYoZG9jdW1lbnQuYm9keSYmKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGh8fGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0KSl7Y3NCcld0PWRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7fWNsZWZ0PShjc0JyV3QvMiktMTI1O3JldHVybiBjbGVmdDt9ZnVuY3Rpb24gc2V0Q0NibGRJRDIob2JqSUQsdmFsKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvYmpJRCkudmFsdWU9dmFsO31mdW5jdGlvbiBzZXRDQ2JsZFN0eTIob2JqSUQscHJvcCx2YWwpe3N3aXRjaChwcm9wKXtjYXNlICJiYyI6aWYob2JqSUQhPSdub25lJyl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob2JqSUQpLnN0eWxlLmJhY2tncm91bmRDb2xvcj12YWw7fTticmVhaztjYXNlICJ2cyI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob2JqSUQpLnN0eWxlLnZpc2liaWxpdHk9dmFsO2JyZWFrO2Nhc2UgImRzIjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvYmpJRCkuc3R5bGUuZGlzcGxheT12YWw7YnJlYWs7Y2FzZSAidHAiOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9iaklEKS5zdHlsZS50b3A9dmFsO2JyZWFrO2Nhc2UgImxmIjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvYmpJRCkuc3R5bGUubGVmdD12YWw7YnJlYWs7fX1mdW5jdGlvbiBwdXRPQkp4Q29sb3IyKE9CakVsZW0sU2FtcCxwaWdNZW50KXtpZihwaWdNZW50IT0neCcpe3NldENDYmxkSUQyKE9CakVsZW0scGlnTWVudCk7c2V0Q0NibGRTdHkyKFNhbXAsJ2JjJyxwaWdNZW50KTt9c2V0Q0NibGRTdHkyKCdjb2xvcnBpY2tlcjIwMScsJ3ZzJywnaGlkZGVuJyk7c2V0Q0NibGRTdHkyKCdjb2xvcnBpY2tlcjIwMScsJ2RzJywnbm9uZScpO31mdW5jdGlvbiBzaG93Q29sb3JHcmlkMihPQmpFbGVtLFNhbSl7dmFyIG9ialg9bmV3IEFycmF5KCcwMCcsJzMzJywnNjYnLCc5OScsJ0NDJywnRkYnKTt2YXIgYz0wO3ZhciB6PSciJytPQmpFbGVtKyciLCInK1NhbSsnIiwiIic7dmFyIHhsPSciJytPQmpFbGVtKyciLCInK1NhbSsnIiwieCInO3ZhciBtaWQ9Jyc7bWlkKz0nPHRhYmxlIGJnY29sb3I9IiNGRkZGRkYiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0iYm9yZGVyOnNvbGlkIDBweCAjRjBGMEYwO3BhZGRpbmc6MnB4OyI+PHRyPic7bWlkKz0iPHRkIGNvbHNwYW49JzE4JyBhbGlnbj0nbGVmdCcgc3R5bGU9J2ZvbnQtc2l6ZToxMHB4O2JhY2tncm91bmQ6IzY2NjZDQztjb2xvcjojRkZGO2ZvbnQtZmFtaWx5OmFyaWFsOyc+Jm5ic3A7Q2hyb21hdGljIFNlbGVjdGlvbiBQYWxldHRlPC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMTgnIGFsaWduPSdjZW50ZXInIHN0eWxlPSdtYXJnaW46MDtwYWRkaW5nOjJweDtoZWlnaHQ6MTJweDsnID48aW5wdXQgY2xhc3M9J281NTgybjY2JyB0eXBlPSd0ZXh0JyBzaXplPScxMicgaWQ9J281NTgybjY2JyB2YWx1ZT0nI0ZGRkZGRic+PGlucHV0IGNsYXNzPSdvNTU4Mm42NmEnIHR5cGU9J3RleHQnIHNpemU9JzInIHN0eWxlPSd3aWR0aDoxNHB4OycgaWQ9J281NTgybjY2YScgb25jbGljaz0namF2YXNjcmlwdDphbGVydChcImNsaWNrIG9uIHNlbGVjdGVkIHN3YXRjaCBiZWxvdy4uLlwiKTsnIHZhbHVlPScnIHN0eWxlPSdib3JkZXI6c29saWQgMXB4ICM2NjY7Jz4mbmJzcDt8Jm5ic3A7PGEgY2xhc3M9J281NTgybjY2JyBocmVmPSdqYXZhc2NyaXB0Om9uY2xpY2s9cHV0T0JKeENvbG9yMigiK3orIiknPjxzcGFuIGNsYXNzPSdhMDFwMyc+Iitub2NvbDErIjwvc3Bhbj48L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEgY2xhc3M9J281NTgybjY2JyBocmVmPSdqYXZhc2NyaXB0Om9uY2xpY2s9cHV0T0JKeENvbG9yMigiK3hsKyIpJz48c3BhbiBjbGFzcz0nYTAxcDMnPiIrY2xvczErIjwvc3Bhbj48L2E+PC90ZD48L3RyPjx0cj4iO3ZhciBicj0xO2ZvcihvPTA7bzw2O28rKyl7bWlkKz0nPC90cj48dHI+Jztmb3IoeT0wO3k8Njt5Kyspe2lmKHk9PTMpe21pZCs9JzwvdHI+PHRyPic7fWZvcih4PTA7eDw2O3grKyl7dmFyIGdyaWQ9Jyc7Z3JpZD1vYmpYW29dK29ialhbeV0rb2JqWFt4XTt2YXIgYj0iJyIrT0JqRWxlbSsiJywgJyIrU2FtKyInLCcjIitncmlkKyInIjttaWQrPSc8dGQgY2xhc3M9Im81NTgyYnJkIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojJytncmlkKyciPjxhIGNsYXNzPSJvNTU4Mm42NiIgIGhyZWY9ImphdmFzY3JpcHQ6b25jbGljaz1wdXRPQkp4Q29sb3IyKCcrYisnKTsiIG9ubW91c2VvdmVyPWphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm81NTgybjY2IikudmFsdWU9IiMnK2dyaWQrJyI7amF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibzU1ODJuNjZhIikuc3R5bGUuYmFja2dyb3VuZENvbG9yPSIjJytncmlkKyciOyAgdGl0bGU9IiMnK2dyaWQrJyI+PGRpdiBzdHlsZT0id2lkdGg6MTJweDtoZWlnaHQ6MTRweDsiPjwvZGl2PjwvYT48L3RkPic7YysrO319fW1pZCs9IjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScxOCcgYWxpZ249J3JpZ2h0JyBzdHlsZT0ncGFkZGluZzoycHg7Ym9yZGVyOnNvbGlkIDFweCAjRkZGO2JhY2tncm91bmQ6I0ZGRjsnPjxhIGhyZWY9JyIraG0yKyInIHN0eWxlPSdjb2xvcjojNjY2O2ZvbnQtc2l6ZTo4cHg7Zm9udC1mYW1pbHk6YXJpYWw7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGV0dGVyLXNwYWNpbmc6MXB4Oyc+Iit0dDIrIjwvYT48L3RkPjwvdHI+PC90YWJsZT4iO3ZhciB0dG9wPWdldFRvcDIoKTtzZXRDQ2JsZFN0eTIoJ2NvbG9ycGlja2VyMjAxJywndHAnLHR0b3ApO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2xvcnBpY2tlcjIwMScpLnN0eWxlLmxlZnQ9Z2V0TGVmdDIoKTtzZXRDQ2JsZFN0eTIoJ2NvbG9ycGlja2VyMjAxJywndnMnLCd2aXNpYmxlJyk7c2V0Q0NibGRTdHkyKCdjb2xvcnBpY2tlcjIwMScsJ2RzJywnYmxvY2snKTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29sb3JwaWNrZXIyMDEnKS5pbm5lckhUTUw9bWlkO30K]]></data>
	</file>
	<file>
	  <filename>/templates/easylocator.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcy9hcGkvanM/c2Vuc29yPWZhbHNlIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgooZnVuY3Rpb24oKSB7Cgl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKCQl2YXIgbGF0bG5nID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZygwLjAsIDAuMCk7CgkJdmFyIG9wdGlvbnMgPSB7CgkJICB6b29tOiAxLAoJCSAgY2VudGVyOiBsYXRsbmcsCgkJICBtYXBUeXBlSWQ6IGdvb2dsZS5tYXBzLk1hcFR5cGVJZC5ST0FETUFQCgkJfTsgCgkJdmFyIG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpLCBvcHRpb25zKTsKCX0KfSkoKTsKCjwvc2NyaXB0Pgp7L2xpdGVyYWx9IAo8ZGl2IGlkPSJtYXAiIHN0eWxlPSJ3aWR0aDogNTAwcHg7IGhlaWdodDogMzAwcHgiPjwvZGl2PiA=]]></data>
	</file>
	<file>
	  <filename>/templates/editmap.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcy9hcGkvanM/c2Vuc29yPWZhbHNlIj48L3NjcmlwdD4gIAo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CigKCWZ1bmN0aW9uKCkgewoJCQl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKCQkJCXZhciBsYXRsbmcgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKHsvbGl0ZXJhbH17JGVhc3lsb2NhdG9ybGF0fSwgeyRlYXN5bG9jYXRvcmxvbn17bGl0ZXJhbH0pOwoJCQkJdmFyIG9wdGlvbnMgPSB7CgkJCQkgIHpvb206IHsvbGl0ZXJhbH17JGVhc3lsb2NhdG9ybGV2ZWx9e2xpdGVyYWx9LAoJCQkJICBjZW50ZXI6IGxhdGxuZywKCQkJCSAgbWFwVHlwZUlkOiBnb29nbGUubWFwcy5NYXBUeXBlSWQuey9saXRlcmFsfXskbWFwdHlwZX17bGl0ZXJhbH0sCgkJCQkgIGRyYWdnYWJsZUN1cnNvcjogJ2Nyb3NzaGFpcicKCQkJCX07IAoJCQl2YXIgbWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFwJyksIG9wdGlvbnMpOwoJCQkvLyBBdHRhY2hpbmcgYSBjbGljayBldmVudCB0byB0aGUgbWFwIAoJCQlnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcihtYXAsICdjbGljaycsIGZ1bmN0aW9uKGUpIHsKCQkJLy8gR2V0dGluZyB0aGUgYWRkcmVzcyBmb3IgdGhlIHBvc2l0aW9uIGJlaW5nIGNsaWNrZWQgCgkJCXNldExhdGl0dWRlTG9uZ2l0dWRlKGUubGF0TG5nKTsKCQkJc2V0Wm9vbUxldmVsKG1hcCk7CgkJfSk7Cgl9CglmdW5jdGlvbiBzZXRMYXRpdHVkZUxvbmdpdHVkZShsYXRMbmcpIHsKCQkgIGlmIChkb2N1bWVudC5mb3Jtc1swXS57L2xpdGVyYWx9eyRpZH17bGl0ZXJhbH1jZW50ZXJfbGF0KSB7CgkJCSAgLy8gQ29weSB0aGUgZm91bmQgY29vcmRpbmF0ZXMgb24gYSBtYXAKCQkJICBkb2N1bWVudC5mb3Jtc1swXS57L2xpdGVyYWx9eyRpZH17bGl0ZXJhbH1jZW50ZXJfbGF0LnZhbHVlID0gbGF0TG5nLmxhdCgpLnRvRml4ZWQoNSk7CgkJCSAgZG9jdW1lbnQuZm9ybXNbMF0uey9saXRlcmFsfXskaWR9e2xpdGVyYWx9Y2VudGVyX2xvbi52YWx1ZSA9IGxhdExuZy5sbmcoKS50b0ZpeGVkKDUpOwoJCSAgfQogIAkJICBpZiAoZG9jdW1lbnQuZm9ybXNbMF0uey9saXRlcmFsfXskaWR9e2xpdGVyYWx9bGF0KSB7CgkJCSAgLy8gQ29weSB0aGUgZm91bmQgY29vcmRpbmF0ZXMgZm9yIGEgbWFya2VyCgkJCSAgZG9jdW1lbnQuZm9ybXNbMF0uey9saXRlcmFsfXskaWR9e2xpdGVyYWx9bGF0LnZhbHVlID0gbGF0TG5nLmxhdCgpLnRvRml4ZWQoNSk7CgkJCSAgZG9jdW1lbnQuZm9ybXNbMF0uey9saXRlcmFsfXskaWR9e2xpdGVyYWx9bG9uLnZhbHVlID0gbGF0TG5nLmxuZygpLnRvRml4ZWQoNSk7CgkJICB9Cgl9CglmdW5jdGlvbiBzZXRab29tTGV2ZWwobWFwKSB7CgkJdmFyIFpvb20gPSAgbWFwLmdldFpvb20oKTsKCQlpZiAoWm9vbSA8IDEpIHsgWm9vbSA9IDA7IH0KCQlpZiAoWm9vbSA+IDE4KSB7IFpvb20gPSAxODsgfQoJCWRvY3VtZW50LmZvcm1zWzBdLnsvbGl0ZXJhbH17JGlkfXtsaXRlcmFsfXpvb20udmFsdWUgPSBab29tOwoJfQp9KSgpOwoKPC9zY3JpcHQ+CnsvbGl0ZXJhbH0gCnskc3RhcnRmb3JtfQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPip7JHRpdGxlX25hbWV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X25hbWV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9kZXNjcmlwdGlvbn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfZGVzY3JpcHRpb259PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9lYXN5bG9jYXRvcn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCQk8ZGl2IGlkPSJtYXAiIHN0eWxlPSJ3aWR0aDogNTAwcHg7IGhlaWdodDogMzAwcHg7IG1hcmdpbi1sZWZ0OjE1MHB4Ij48L2Rpdj4KCQk8L3A+Cgk8L2Rpdj4gCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9jZW50ZXJfbGF0fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jZW50ZXJfbGF0fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfY2VudGVyX2xvbn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY2VudGVyX2xvbn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX3R5cGV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3R5cGV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV93aWR0aH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfd2lkdGh9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9oZWlnaHR9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2hlaWdodH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2NvbnRyb2xzfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jb250cm9sc308L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2NvbnRyb2xzX3NpemV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NvbnRyb2xzX3NpemV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV90eXBlX2NvbnRyb2xzfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90eXBlX2NvbnRyb2xzfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfc2lkZWJhcn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfc2lkZWJhcn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2RpcmVjdGlvbnN9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2RpcmVjdGlvbnN9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV96b29tfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF96b29tfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfem9vbV9lbmNvbXBhc3N9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3pvb21fZW5jb21wYXNzfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfc2NhbGVfY29udHJvbH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfc2NhbGVfY29udHJvbH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2JvdW5kc19mdWRnZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfYm91bmRzX2Z1ZGdlfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfaW5mb193aW5kb3d9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2luZm9fd2luZG93fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfaW5mb190cmlnZ2VyfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9pbmZvX3RyaWdnZXJ9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fXskY2FuY2VsfTwvcD4KCTwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/editmarker.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcy9hcGkvanM/c2Vuc29yPWZhbHNlIj48L3NjcmlwdD4gIAo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CigKCWZ1bmN0aW9uKCkgewoJCQl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKCQkJCXZhciBsYXRsbmcgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKHsvbGl0ZXJhbH17JGVhc3lsb2NhdG9ybGF0fSwgeyRlYXN5bG9jYXRvcmxvbn17bGl0ZXJhbH0pOwoJCQkJdmFyIG9wdGlvbnMgPSB7CgkJCQkgIHpvb206IHsvbGl0ZXJhbH17JGVhc3lsb2NhdG9ybGV2ZWx9e2xpdGVyYWx9LAoJCQkJICBjZW50ZXI6IGxhdGxuZywKCQkJCSAgbWFwVHlwZUlkOiBnb29nbGUubWFwcy5NYXBUeXBlSWQuey9saXRlcmFsfXskbWFwdHlwZX17bGl0ZXJhbH0sCgkJCQkgIGRyYWdnYWJsZUN1cnNvcjogJ2Nyb3NzaGFpcicKCQkJCX07IAoJCQl2YXIgbWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFwJyksIG9wdGlvbnMpOwoJCQlpZiAoey9saXRlcmFsfXskdXNlZF9sYXR9e2xpdGVyYWx9ICE9IDApIHsKCQkJCS8vIENyZWF0aW5nIGEgbWFya2VyIGFuZCBwb3NpdGlvbmluZyBpdCBvbiB0aGUgbWFwICAKCQkJCXZhciBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHsgIAoJCQkJICBwb3NpdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyh7L2xpdGVyYWx9eyR1c2VkX2xhdH0sIHskdXNlZF9sb259e2xpdGVyYWx9KSwgIAoJCQkJICBtYXA6IG1hcCwKCQkJCSAgaWNvbjogJ3svbGl0ZXJhbH17JHVzZWRfaWNvbn17bGl0ZXJhbH0nCgoJCQkJfSk7IAoJCQl9CgkJCS8vIEF0dGFjaGluZyBhIGNsaWNrIGV2ZW50IHRvIHRoZSBtYXAgCgkJCWdvb2dsZS5tYXBzLmV2ZW50LmFkZExpc3RlbmVyKG1hcCwgJ2NsaWNrJywgZnVuY3Rpb24oZSkgewoJCQkvLyBHZXR0aW5nIHRoZSBhZGRyZXNzIGZvciB0aGUgcG9zaXRpb24gYmVpbmcgY2xpY2tlZCAKCQkJc2V0TGF0aXR1ZGVMb25naXR1ZGUoZS5sYXRMbmcpOwoJCX0pOwoJfQoJZnVuY3Rpb24gc2V0TGF0aXR1ZGVMb25naXR1ZGUobGF0TG5nKSB7CgkJICBpZiAoZG9jdW1lbnQuZm9ybXNbMF0uey9saXRlcmFsfXskaWR9e2xpdGVyYWx9Y2VudGVyX2xhdCkgewoJCQkgIC8vIENvcHkgdGhlIGZvdW5kIGNvb3JkaW5hdGVzIG9uIGEgbWFwCgkJCSAgZG9jdW1lbnQuZm9ybXNbMF0uey9saXRlcmFsfXskaWR9e2xpdGVyYWx9Y2VudGVyX2xhdC52YWx1ZSA9IGxhdExuZy5sYXQoKS50b0ZpeGVkKHsvbGl0ZXJhbH17JGxvY2F0aW9ucHJlY2lzaW9ufXtsaXRlcmFsfSk7CgkJCSAgZG9jdW1lbnQuZm9ybXNbMF0uey9saXRlcmFsfXskaWR9e2xpdGVyYWx9Y2VudGVyX2xvbi52YWx1ZSA9IGxhdExuZy5sbmcoKS50b0ZpeGVkKHsvbGl0ZXJhbH17JGxvY2F0aW9ucHJlY2lzaW9ufXtsaXRlcmFsfSk7CgkJICB9CiAgCQkgIGlmIChkb2N1bWVudC5mb3Jtc1swXS57L2xpdGVyYWx9eyRpZH17bGl0ZXJhbH1sYXQpIHsKCQkJICAvLyBDb3B5IHRoZSBmb3VuZCBjb29yZGluYXRlcyBmb3IgYSBtYXJrZXIKCQkJICBkb2N1bWVudC5mb3Jtc1swXS57L2xpdGVyYWx9eyRpZH17bGl0ZXJhbH1sYXQudmFsdWUgPSBsYXRMbmcubGF0KCkudG9GaXhlZCh7L2xpdGVyYWx9eyRsb2NhdGlvbnByZWNpc2lvbn17bGl0ZXJhbH0pOwoJCQkgIGRvY3VtZW50LmZvcm1zWzBdLnsvbGl0ZXJhbH17JGlkfXtsaXRlcmFsfWxvbi52YWx1ZSA9IGxhdExuZy5sbmcoKS50b0ZpeGVkKHsvbGl0ZXJhbH17JGxvY2F0aW9ucHJlY2lzaW9ufXtsaXRlcmFsfSk7CgkJICB9Cgl9Cn0pKCk7Cgo8L3NjcmlwdD4Key9saXRlcmFsfSAKeyRzdGFydGZvcm19Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+KnskdGl0bGVfbmFtZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfbmFtZX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2JlbG9uZ3N0b21hcH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfYmVsb25nc3RvbWFwfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfaW5mb306PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfaW5mb308L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2Vhc3lsb2NhdG9yfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+CgkJCTxkaXYgaWQ9Im1hcCIgc3R5bGU9IndpZHRoOiA1MDBweDsgaGVpZ2h0OiAzMDBweDsgbWFyZ2luLWxlZnQ6MTUwcHgiPjwvZGl2PgoJCTwvcD4KCTwvZGl2PiAKCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2FkZHJlc3N9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2FkZHJlc3N9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9sYXR9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2xhdH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2xvbn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfbG9ufTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfaWNvbn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfaWNvbn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRoaWRkZW59eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgoJPC9kaXY+CnskZW5kZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/editpolyline.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcy9hcGkvanM/c2Vuc29yPWZhbHNlIj48L3NjcmlwdD4gIAo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CigKCWZ1bmN0aW9uKCkgewoJCQl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKCQkJCXZhciBsYXRsbmcgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKHsvbGl0ZXJhbH17JGVhc3lsb2NhdG9ybGF0fSwgeyRlYXN5bG9jYXRvcmxvbn17bGl0ZXJhbH0pOwoJCQkJdmFyIG9wdGlvbnMgPSB7CgkJCQkgIHpvb206IHsvbGl0ZXJhbH17JGVhc3lsb2NhdG9ybGV2ZWx9e2xpdGVyYWx9LAoJCQkJICBjZW50ZXI6IGxhdGxuZywKCQkJCSAgbWFwVHlwZUlkOiBnb29nbGUubWFwcy5NYXBUeXBlSWQuey9saXRlcmFsfXskbWFwdHlwZX17bGl0ZXJhbH0sCgkJCQkgIGRyYWdnYWJsZUN1cnNvcjogJ2Nyb3NzaGFpcicKCQkJCX07IAoKCQkJdmFyIG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpLCBvcHRpb25zKTsKCQkJaWYgKHsvbGl0ZXJhbH17JHVzZWRfbGF0fXtsaXRlcmFsfSAhPSAwKSB7CgkJCQkvLyBDcmVhdGluZyBhIG1hcmtlciBhbmQgcG9zaXRpb25pbmcgaXQgb24gdGhlIG1hcCAgCgkJCQl2YXIgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7ICAKCQkJCSAgcG9zaXRpb246IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoey9saXRlcmFsfXskdXNlZF9sYXR9LCB7JHVzZWRfbG9ufXtsaXRlcmFsfSksICAKCQkJCSAgbWFwOiBtYXAsCgkJCQkgIGljb246ICd7L2xpdGVyYWx9eyR1c2VkX2ljb259e2xpdGVyYWx9JwoKCQkJCX0pOyAKCQkJfQoJCQl2YXIgcGF0aCA9IFsKCQkJCXsvbGl0ZXJhbH17JHBhdGh9e2xpdGVyYWx9CgkJCV07CgkJCXBvbHlsaW5lID0gbmV3IGdvb2dsZS5tYXBzLlBvbHlsaW5lKHsKCQkJCXBhdGg6IHBhdGgsIAoJCQkJc3Ryb2tlQ29sb3I6IHsvbGl0ZXJhbH17JHBhdGhfY29sb3J9e2xpdGVyYWx9LCAKCQkJCXN0cm9rZU9wYWNpdHk6IHsvbGl0ZXJhbH17JHBhdGhfb3BhY2l0eX17bGl0ZXJhbH0sIAoJCQkJc3Ryb2tlV2VpZ2h0OiB7L2xpdGVyYWx9eyRwYXRoX3dlaWdodH17bGl0ZXJhbH0KCQkJCX0pOwoJCQlwb2x5bGluZS5zZXRNYXAobWFwKTsKCQkJCgkJCS8vIEF0dGFjaGluZyBhIGNsaWNrIGV2ZW50IHRvIHRoZSBtYXAgCgkJCWdvb2dsZS5tYXBzLmV2ZW50LmFkZExpc3RlbmVyKG1hcCwgJ2NsaWNrJywgZnVuY3Rpb24oZSkgewoJCQkvLyBHZXR0aW5nIHRoZSBhZGRyZXNzIGZvciB0aGUgcG9zaXRpb24gYmVpbmcgY2xpY2tlZCAKCQkJc2V0TGF0aXR1ZGVMb25naXR1ZGUoZS5sYXRMbmcpOwoJCX0pOwoJfQoJZnVuY3Rpb24gc2V0TGF0aXR1ZGVMb25naXR1ZGUobGF0TG5nKSB7CgkJICBpZiAoZG9jdW1lbnQuZm9ybXNbMF0uey9saXRlcmFsfXskaWR9e2xpdGVyYWx9Y2VudGVyX2xhdCkgewoJCQkgIC8vIENvcHkgdGhlIGZvdW5kIGNvb3JkaW5hdGVzIG9uIGEgbWFwCgkJCSAgZG9jdW1lbnQuZm9ybXNbMF0uey9saXRlcmFsfXskaWR9e2xpdGVyYWx9Y2VudGVyX2xhdC52YWx1ZSA9IGxhdExuZy5sYXQoKS50b0ZpeGVkKHsvbGl0ZXJhbH17JGxvY2F0aW9ucHJlY2lzaW9ufXtsaXRlcmFsfSk7CgkJCSAgZG9jdW1lbnQuZm9ybXNbMF0uey9saXRlcmFsfXskaWR9e2xpdGVyYWx9Y2VudGVyX2xvbi52YWx1ZSA9IGxhdExuZy5sbmcoKS50b0ZpeGVkKHsvbGl0ZXJhbH17JGxvY2F0aW9ucHJlY2lzaW9ufXtsaXRlcmFsfSk7CgkJICB9CiAgCQkgIGlmIChkb2N1bWVudC5mb3Jtc1swXS57L2xpdGVyYWx9eyRpZH17bGl0ZXJhbH1sYXQpIHsKCQkJICAvLyBDb3B5IHRoZSBmb3VuZCBjb29yZGluYXRlcyBmb3IgYSBtYXJrZXIKCQkJICBkb2N1bWVudC5mb3Jtc1swXS57L2xpdGVyYWx9eyRpZH17bGl0ZXJhbH1sYXQudmFsdWUgPSBsYXRMbmcubGF0KCkudG9GaXhlZCh7L2xpdGVyYWx9eyRsb2NhdGlvbnByZWNpc2lvbn17bGl0ZXJhbH0pOwoJCQkgIGRvY3VtZW50LmZvcm1zWzBdLnsvbGl0ZXJhbH17JGlkfXtsaXRlcmFsfWxvbi52YWx1ZSA9IGxhdExuZy5sbmcoKS50b0ZpeGVkKHsvbGl0ZXJhbH17JGxvY2F0aW9ucHJlY2lzaW9ufXtsaXRlcmFsfSk7CgkJICB9Cgl9Cn0pKCk7Cgo8L3NjcmlwdD4Key9saXRlcmFsfSAKeyRzdGFydGZvcm19Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+KnskdGl0bGVfbmFtZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfbmFtZX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2JlbG9uZ3N0b21hcH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfYmVsb25nc3RvbWFwfTwvcD4KCTwvZGl2Pgp7bGl0ZXJhbH08c2NyaXB0IHNyYz0iLi5cbW9kdWxlc1xHb29nbGVNYXBzXHRlbXBsYXRlc1wyMDFhLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0PnsvbGl0ZXJhbH0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2NvbG9yfTwvcD4KCQk8ZGl2IGlkPSJjb2xvcnBpY2tlcjIwMSIgY2xhc3M9ImNvbG9ycGlja2VyMjAxIj48L2Rpdj4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NvbG9yfSZuYnNwOwoJCTxpbnB1dCB0eXBlPSJidXR0b24iIG9uY2xpY2s9InNob3dDb2xvckdyaWQyKCdtMV9zdHJva2Vjb2xvcicsJ20xX3NhbXBsZWNvbG9yJyk7IiB2YWx1ZT0iU2VsZWN0Ij4KCQkmbmJzcDt7JGlucHV0X3NhbXBsZWNvbG9yfQoJCTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfb3BhY2l0eX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiIGlkPSJyZXN1bHQiPnskaW5wdXRfb3BhY2l0eX0mbmJzcDs8L3A+Cgk8L2Rpdj4KCTwhLS0gU2xpZGVyIG1pZ2h0IGJlIGluY2x1ZGVkIGxhdGVyCglkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX29wYWNpdHl9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4KCQkJPGlucHV0IHR5cGU9InJhbmdlIiBuYW1lPSJzdHJva2VvcGFjaXR5IiBtaW49IjAiIG1heD0iMS4wIiBzdGVwPSIwLjEiIHZhbHVlPSIwLjciIAoJCQlvbkNoYW5nZT0ic2hvd1ZhbHVlKHRoaXMudmFsdWUpOyIvPiZuYnNwOwoJCQk8ZGl2IGlkPSJyZXN1bHQiIHN0eWxlPSJoZWlnaHQ6NDBweDt3aWR0aDo0MHB4O2JvcmRlcjoxcHggc29saWQgIzk5OSI+PC9kaXY+CgkJPC9wPgoJPC9kaXYgLS0+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV93ZWlnaHR9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3dlaWdodH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRoaWRkZW59eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgoJPC9kaXY+Cgl7aWYgJGVkaXRwb2x5bGluZSA9PSAnMSd9Cgk8ZmllbGRzZXQ+Cgk8bGVnZW5kPnskdGl0bGVfZWFzeWxvY2F0b3J9OiZuYnNwO3skdGl0bGVfbG9jYXRpb25zfTwvbGVnZW5kPgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4KCQkJPGRpdiBpZD0ibWFwIiBzdHlsZT0id2lkdGg6IDUwMHB4OyBoZWlnaHQ6IDMwMHB4OyI+PC9kaXY+CgkJPC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiIHN0eWxlPSJ3aWR0aDogNjAwcHg7Ij4KCQl7JHRpdGxlX3NlcX06Jm5ic3A7eyRpbnB1dF9zZXF9CgkJeyR0aXRsZV9sYXR9OiZuYnNwO3skaW5wdXRfbGF0fQoJCXskdGl0bGVfbG9ufTombmJzcDt7JGlucHV0X2xvbn0mbmJzcDt7JGFkZGxvY2F0aW9ufTxiciAvPgoJCTxiciAvPgoJCQk8c3BhbiBpZD0ibG9jYXRpb25zIj4KCQkJPHRhYmxlIGJvcmRlcj0iMCI+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+eyR0aXRsZV9zZXF9PC90aD4KCQkJCQk8dGg+eyR0aXRsZV9kZWx9PC90aD4KCQkJCQk8dGg+eyR0aXRsZV9sYXR9PC90aD4KCQkJCQk8dGg+eyR0aXRsZV9sb259PC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keT4KCQkJe2ZvcmVhY2ggZnJvbT0kbG9jYXRpb25zIGl0ZW09bG9jYXRpb259CgkJCQk8dHI+CgkJCQkgIDx0ZD57JGxvY2F0aW9uLT5zZXF9PC90ZD4KCQkJCSAgPHRkPnskbG9jYXRpb24tPmRlbGV0ZWxpbmt9PC90ZD4KCQkJCSAgPHRkPnskbG9jYXRpb24tPmxhdH08L3RkPgoJCQkJICA8dGQ+eyRsb2NhdGlvbi0+bG9ufTwvdGQ+CgkJCQkgPC90cj4KCQkJey9mb3JlYWNofQoJCQk8L3Rib2R5PgoJCQk8L3RhYmxlPgoJCQk8L3NwYW4+CgkJPC9wPgoJPC9kaXY+IAoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGNhbmNlbH08L3A+Cgk8L2Rpdj4KCTwvZmllbGRzZXQ+Cgl7L2lmfQp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGV9PC9oMz4Ke2lmICRlcnJvciE9Jyd9PHA+eyRlcnJvcn08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/listmaps.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRpdGVtY291bnQ+JHBhZ2VsaW1pdH0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgoJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPgo8L2Rpdj4Key9pZn0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0iY21zX3NvcnRhYmxlIHBhZ2V0YWJsZSB0YWJsZXNvcnRlciI+Cgk8dGhlYWQ+CgkJPHRyPgoJCQk8dGg+eyR0aXRsZV9uYW1lfTwvdGg+CgkJCTx0aD57JHRpdGxlX2NlbnRlcmxhdGl0dWRlfTwvdGg+CgkJCTx0aD57JHRpdGxlX2NlbnRlcmxvbmdpdHVkZX08L3RoPgoJCQk8dGg+eyR0aXRsZV9tYXB0eXBlfTwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+Cgl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQoJCTx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skZW50cnktPnJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc30nOyI+CgkJCTx0ZD57JGVudHJ5LT5uYW1lfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5jZW50ZXJfbGF0fTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5jZW50ZXJfbG9ufTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT50eXBlfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPgoJCTwvdHI+Cgl7L2ZvcmVhY2h9Cgk8L3Rib2R5Pgo8L3RhYmxlPgoKPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgoJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPgo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/listmarkers.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRpdGVtY291bnQ+JHBhZ2VsaW1pdH0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgoJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPgo8L2Rpdj4Key9pZn0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0iY21zX3NvcnRhYmxlIHBhZ2V0YWJsZSB0YWJsZXNvcnRlciI+Cgk8dGhlYWQ+CgkJPHRyPgoJCQk8dGg+eyR0aXRsZV9uYW1lfTwvdGg+CgkJCTx0aD57JHRpdGxlX2JlbG9uZ3N0b21hcH08L3RoPgoJCQk8dGg+eyR0aXRsZV9hZGRyZXNzfTwvdGg+CgkJCTx0aD57JHRpdGxlX2xhdGl0dWRlfTwvdGg+CgkJCTx0aD57JHRpdGxlX2xvbmdpdHVkZX08L3RoPgoJCQk8dGg+eyR0aXRsZV9pY29ufTwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+Cgl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQoJCTx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skZW50cnktPnJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc30nOyI+CgkJCTx0ZD57JGVudHJ5LT5uYW1lfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5tYXB9PC90ZD4KCQkJPHRkPnskZW50cnktPmFkZHJlc3N9PC90ZD4KCQkJPHRkPnskZW50cnktPmxhdH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+bG9ufTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5pY29ufTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPgoJCTwvdHI+Cgl7L2ZvcmVhY2h9Cgk8L3Rib2R5Pgo8L3RhYmxlPgoKPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgoJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPgo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/listpolylines.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRpdGVtY291bnQ+JHBhZ2VsaW1pdH0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgoJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPgo8L2Rpdj4Key9pZn0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0iY21zX3NvcnRhYmxlIHBhZ2V0YWJsZSB0YWJsZXNvcnRlciI+Cgk8dGhlYWQ+CgkJPHRyPgoJCQk8dGg+eyR0aXRsZV9uYW1lfTwvdGg+CgkJCTx0aD57JHRpdGxlX2JlbG9uZ3N0b21hcH08L3RoPgoJCQk8dGg+eyR0aXRsZV9leGFtcGxlfTwvdGg+CgkJCTx0aD57JHRpdGxlX2NvbG9yfTwvdGg+CgkJCTx0aD57JHRpdGxlX29wYWNpdHl9PC90aD4KCQkJPHRoPnskdGl0bGVfd2VpZ2h0fTwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+Cgl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQoJCTx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skZW50cnktPnJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc30nOyI+CgkJCTx0ZD57JGVudHJ5LT5uYW1lfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5tYXB9PC90ZD4KCQkJPHRkPnskZW50cnktPmV4YW1wbGV9PC90ZD4KCQkJPHRkPnskZW50cnktPnN0cm9rZWNvbG9yfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5zdHJva2VvcGFjaXR5fTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5zdHJva2V3ZWlnaHR9PC90ZD4KCQkJPHRkPnskZW50cnktPmVkaXRsaW5rfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+CgkJPC90cj4KCXsvZm9yZWFjaH0KCTwvdGJvZHk+CjwvdGFibGU+Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+Cgk8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkbGlua308L3A+CjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/map.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRnb29nbGVfbWFwX2hlYWRlcn0KCnsqCjwhLS0gbmVjZXNzYXJ5IGZvciBnb29nbGUgbWFwcyBwb2x5bGluZSBkcmF3aW5nIGluIElFIC0tPgp7bGl0ZXJhbH0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4Kdlw6KiB7CiBiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTsKfQp7L2xpdGVyYWx9Cjwvc3R5bGU+Cip9Cgo8dGFibGU+CiAgPHRyPgogICAgIDx0ZD57JGdvb2dsZV9tYXB9PC90ZD4KICAgICA8dGQ+eyRnb29nbGVfbWFwX3NpZGViYXJ9PC90ZD4KICA8L3RyPgo8L3RhYmxlPgoKeyRnb29nbGVfbWFwX2pzfQp7JG1hcF9kZXNjcmlwdGlvbn0=]]></data>
	</file>
</module>
