<?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>ECB2</name>
	<version>1.8</version>
    <mincmsversion>2.0</mincmsversion>
	<help><![CDATA[CgoKPGRpdiBjbGFzcz0iY2xlYXIiPjwvZGl2PgoKPGRpdiBpZD0icGFnZV90YWJzIj4KICAgPGRpdiBpZD0iZ2VuZXJhbCI+CiAgICAgIEdlbmVyYWwKICAgPC9kaXY+CiAgIDxkaXYgaWQ9ImZpZWxkcyI+CiAgICAgIEZpZWxkcwogICA8L2Rpdj4KICAgPGRpdiBpZD0iYWJvdXQiPgogICAgICBBYm91dAogICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJjbGVhcmIiPjwvZGl2PgoKPGRpdiBpZD0icGFnZV9jb250ZW50Ij4KCiAgIDxkaXYgaWQ9ImdlbmVyYWxfYyI+CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgIAogICA8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KICAgPHA+TW9kdWxlIGFkZHMgYWRpdGlvbmFsIGNvbnRlbnQgYmxvY2tzIGZvciBDTVMgTWFkZSBTaW1wbGUgdjIrLiBUaGlzIGlzIGEgZm9yayBvZiB0aGUgb3JpZ2luYWwgRUNCIG1vZHVsZSB0aGF0IHdvcmtlZCB3aXRoIENNU01TIHYxLjwvcD4KICAgPHA+UHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmaWVsZCB0eXBlczo8YnI+CiAgIDxvbD4KICAgICAgPGxpPmZpbGVfc2VsZWN0b3I8L2xpPgogICAgICA8bGk+Y29sb3JfcGlja2VyPC9saT4KICAgICAgPGxpPmRyb3Bkb3duPC9saT4KICAgICAgPGxpPmRyb3Bkb3duX2Zyb21fdWR0PC9saT4KICAgICAgPGxpPmRyb3Bkb3duX2Zyb21fY3VzdG9tZ3M8L2xpPgogICAgICA8bGk+Y2hlY2tib3g8L2xpPgogICAgICA8bGk+bW9kdWxlX2xpbms8L2xpPgogICAgICA8bGk+bGluazwvbGk+CiAgICAgIDxsaT50aW1lcGlja2VyPC9saT4KICAgICAgPGxpPmRhdGVwaWNrZXI8L2xpPgogICAgICA8bGk+aW5wdXQ8L2xpPgogICAgICA8bGk+dGV4dGFyZWE8L2xpPgogICAgICA8bGk+ZWRpdG9yICh0ZXh0YXJlYSB3aXRoIHd5c2l3eWcpPC9saT4KICAgICAgPGxpPnRleHQgPC9saT4KICAgICAgPGxpPnBhZ2VzIDwvbGk+CiAgICAgIDxsaT5ociAoaG9yaXpvbnRhbCBsaW5lKTwvbGk+CiAgICAgIDxsaT5zb3J0YWJsZWxpc3Q8L2xpPgogICAgICA8bGk+cmFkaW88L2xpPgogICAgICA8bGk+aGlkZGVuPC9saT4KICAgICAgPGxpPmZpZWxkc2V0X3N0YXJ0PC9saT4KICAgICAgPGxpPmZpZWxkc2V0X2VuZDwvbGk+CiAgICAgIDxsaT5nYWxsZXJ5X3BpY2tlcjwvbGk+CiAgICAgIDxsaT5pbnB1dF9yZXBlYXRlcjwvbGk+CiAgICAgIDxsaT5pbWFnZSA8c3BhbiBzdHlsZT0iY29sb3I6cmVkOyI+bmV3PC9zcGFuPjwvbGk+CiAgIDwvb2w+CiAgIDwvcD48YnI+CgogICA8cD5JZiB5b3UgbGlrZSB0aGlzIG1vZHVsZSBwbGVhc2UgPGEgaHJlZj0iaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9hYm91dC1saW5rL2RvbmF0aW9ucy8iIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZDsiPmRvbmF0ZSB0byBDTVNNUzwvYT48L3A+PGJyPgogICAKICAgICAgPC9kaXY+CiAgIDwvZGl2PgoKICAgPGRpdiBpZD0iZmllbGRzX2MiPgogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAKPGgzPkZpZWxkczwvaDM+Cgo8cD48c3Ryb25nPmZpbGVfc2VsZWN0b3I8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6ICB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZmlsZV9zZWxlY3RvciIgYmxvY2s9InRlc3QxMCIgZGlyPSJpbWFnZXMiIGZpbGV0eXBlcz0ianBnLGdpZixwbmciIGV4Y2x1ZGVwcmVmaXg9InRodW1iXyJ9ICAgICAgICA8L3A+CjxwPlBhcmFtZXRlcnM6CmZpbGV0eXBlcyAtIGNvbW1hIHNlcGFyYXRlZDxicj4KZGlyIChvcHRpb25hbCkgLSBkZWZhdWx0IHVwbG9hZHMvPGJyPgpleGNsdWRlcHJlZml4IChvcHRpb25hbCk8YnI+CnJlY3Vyc2UgKG9wdGlvbmFsKSAtIGRlZmF1bHQgZmFsc2UsIHJlY3Vyc2U9MSB3aWxsIHNob3cgYWxsIGZpbGVzIGluIHN1YmZvbGRlcnMKc29ydGZpbGVzIChvcHRpb25hbCk8YnI+CnByZXZpZXcgKG9wdGlvbmFsKSAtIG9ubHkgZm9yIGltYWdlczxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCgo8cD48c3Ryb25nPmNvbG9yX3BpY2tlcjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZTogIHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJjb2xvcl9waWNrZXIiIGJsb2NrPSJ0ZXN0MSIgbGFiZWw9IkNvbG9yIiBkZWZhdWx0X3ZhbHVlPSIjMDAwMDAwIn08L3A+CjxwPlBhcmFtZXRlcnM6CmRlZmF1bHRfdmFsdWUgKG9wdGlvbmFsKTxicj4Kc2l6ZSAob3B0aW9uYWwpIC0gZGVmYXVsdCAxMDxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3I8YnI+CmNsZWFyX2Nzc19jYWNoZSAob3B0aW9uYWwpIC0gaWYgc2V0IHRoZSBjc3MgY2FjaGUgaXMgcmVmcmVzaGVkIGlmIHRoZSBjb2xvciBpcyBjaGFuZ2VkPGJyPgpub19oYXNoIChvcHRpb25hbCkgLSBpZiBzZXQgdGhlIHJnYiB2YWx1ZSBkaXNwbGF5ZWQgYW5kIHJldHVybmVkIGRvZXMgbm90IGluY2x1ZGUgYSAnIyc8YnI+CjwvcD48YnI+CgoKCjxwPjxzdHJvbmc+ZHJvcGRvd248L3N0cm9uZz48L3A+CjxwPkNyZWF0ZXMgYSBkcm9wZG93biAob3Igc2VsZWN0KSB0aGF0IHRoZSBlZGl0b3IgY2FuIGNob29zZSBmcm9tIHRoZSBwcm92aWRlZCBvcHRpb25zLiBFaXRoZXIgdGhlICd2YWx1ZXMnIG9yICdtb2QnIHBhcmFtZXRlciBtdXN0IGJlIHVzZWQgKCopLgo8cD5QYXJhbWV0ZXJzOjwvcD4KPHVsPgogICAgPGxpPnZhbHVlcyAoKikgLSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mICdUZXh0JyBvciAnVGV4dD12YWx1ZScuIEV4YW1wbGU6ICdBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEdyZWVuPWdyZWVuJyA8YnI+CiAgICAgICAgPHByZT57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZHJvcGRvd24iIGJsb2NrPSJ0ZXN0NSIgbGFiZWw9IkZydWl0IiB2YWx1ZXM9IkFwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UiIGZpcnN0X3ZhbHVlPSJzZWxlY3QgZnJ1aXQifTwvcHJlPjwvbGk+CiAgICA8bGk+bW9kICgqKSAtIHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIG1vZHVsZSB0byBjYWxsIHRvIGdldCB0aGUgb3B0aW9uIHZhbHVlcy4gUmV0dXJuZWQgdmFsdWVzIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgJ1RleHQnIG9yICdUZXh0PXZhbHVlJyBBcyBhYm92ZS4gQW55IGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgYWxzbyBwYXNzZWQgb250byB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gWW91IG1heSB3YW50IHRvIGluY2x1ZGUgJ2FjdGlvbicgYW5kICd0ZW1wbGF0ZScgcGFyYW1ldGVyczxicj4KICAgICAgICA8cHJlPntjb250ZW50X21vZHVsZSBtb2R1bGU9RUNCMiBmaWVsZD1kcm9wZG93biBibG9jaz1kcm9wZG93bjIgbGFiZWw9IkRyb3Bkb3duIC0gZnJvbSBtb2R1bGUiIG1vZD1MSVNFUHJvamVjdHMgdGVtcGxhdGVfc3VtbWFyeT0iaXRlbV9kcm9wZG93biIgcGFnZWxpbWl0PTJ9PC9wcmU+CiAgICA8L2xpPgogICAgPGxpPmZpcnN0X3ZhbHVlIChvcHRpb25hbCkgLSBzZXRzIGFuIHRleHQgc3RpbmcgZm9yIHRoZSBmaXJzdCBibGFuayB2YWx1ZSwgZS5nLiAnLS0tIHNlbGVjdCBvbmUgLS0tJzwvbGk+CiAgICA8bGk+bXVsdGlwbGUgKG9wdGlvbmFsKSAtIGFkZCBtdWx0aXBsZSBvcHRpb24gc2VsZWN0IHN1cHBvcnQ8L2xpPgogICAgPGxpPnNpemUgKG9wdGlvbmFsKSAtIG11bHRpcGxlIGVuYWJsZWQgb25seTwvbGk+CiAgICA8bGk+ZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3I8L2xpPgogICAgPGxpPmNvbXBhY3QgKG9wdGlvbmFsKSAtIGRlZmF1bHQ6ZmFsc2UgLSBpZiBzZXQsIGEgc3VtbWFyeSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpcyBkaXNwbGF5ZWQgYW5kIHRoZSBmdWxsIHNlbGVjdCBpcyBzaG93bi9oaWRkZW4gd2hlbiAnZWRpdC9oaWRlJyBpcyBjbGlja2VkPC9saT4KPC91bD4KPGJyPgoKCgo8cD48c3Ryb25nPmRyb3Bkb3duX2Zyb21fdWR0PC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZHJvcGRvd25fZnJvbV91ZHQiIGJsb2NrPSJ0ZXN0MiIgbGFiZWw9IkdhbGxlcnkiIHVkdD0ibXljdXN0b211ZHQiICBmaXJzdF92YWx1ZT0iPXNlbGVjdD0ifTwvcD4KPHA+T3VwdXQgZnJvbSBVRFQgbXVzdCBiZSBhcnJheSgpIC0gZXhhbXBsZTogcmV0dXJuIGFycmF5KCJsYWJlbCI9PiJ2YWx1ZSIsICJsYWJlbCAyICI9PiJ2YWx1ZSAyIik8L3A+CjxwPlBhcmFtZXRlcnM6CnVkdCAocmVxdWlyZWQpIC0gdWR0IG5hbWU8YnI+CmZpcnN0X3ZhbHVlIChvcHRpb25hbCkgPGJyPgptdWx0aXBsZSAob3B0aW9uYWwpIC0gYWRkIG11bHRpcGxlIG9wdGlvbiBzZWxlY3Qgc3VwcG9ydDxicj4Kc2l6ZSAob3B0aW9uYWwpIC0gbXVsdGlwbGUgZW5hYmxlZCBvbmx5PGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcjxicj4KY29tcGFjdCAob3B0aW9uYWwpIC0gZGVmYXVsdDpmYWxzZSAtIGlmIHNldCwgYSBzdW1tYXJ5IG9mIHRoZSBzZWxlY3RlZCBvcHRpb25zIGlzIGRpc3BsYXllZCBhbmQgdGhlIGZ1bGwgc2VsZWN0IGlzIHNob3duL2hpZGRlbiB3aGVuICdlZGl0L2hpZGUnIGlzIGNsaWNrZWQKPC9wPgo8cD48c3Ryb25nPkV4YW1wbGVzIFVEVDwvc3Ryb25nPjoKPGJyPgo8YSBocmVmPSJodHRwczovL2dpc3QuZ2l0aHViLmNvbS9rdXptYW55LzY3NzljMTkzYjgxMDRhYTZhYmZlIj5HYWxsZXJ5IGxpc3QgZnJvbSBHYWxsZXJ5IG1vZHVsZTwvYT4gPGJyPgo8YSBocmVmPSJodHRwczovL2dpc3QuZ2l0aHViLmNvbS9rdXptYW55LzQ2NDI3NmUxNmYzYjc0YzA3NTU1Ij5Hcm91cCBsaXN0IGZyb20gRkVVPC9hPiA8YnI+CjxhIGhyZWY9Imh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2t1em1hbnkvNTE1ODNjNjQzOWNiMDQxNjc5YTYiPlVzZXJzIGxpc3QgZnJvbSBGRVU8L2E+CjwvcD48YnI+CgoKPHA+PHN0cm9uZz5kcm9wZG93bl9mcm9tX2N1c3RvbWdzPC9zdHJvbmc+PC9wPgo8cD5Qcm92aWRlcyBhIHNpbmdsZSBvciBtdWx0aXBsZSBzZWxlY3QgdXNpbmcgdGhlIGNvbnRlbnQgc2V0IGluIGEgQ3VzdG9tR1MgTW9kdWxlIGZpZWxkLjwvcD4KPHA+UmVxdWlyZXMgdGhlIEN1c3RvbUdTIG1vZHVsZSBhbmQgdG8gaGF2ZSBhIGZpZWxkIG9mIHR5cGUgJ3RleHQgYXJlYScuPC9wPgo8cD5FeGFtcGxlOgogICAgICB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZHJvcGRvd25fZnJvbV9jdXN0b21ncycgY3VzdG9tZ3NfZmllbGQ9J1NlY3Rpb25fU3R5bGVzJyBibG9jaz1zdHlsZTEgbGFiZWw9J1NlY3Rpb24gMSBMYXlvdXQgU3R5bGUnIGFzc2lnbj1zdHlsZTF9PC9wPgo8cD5QYXJhbWV0ZXJzOjwvcD4KPHVsPgogICA8bGk+Y3VzdG9tZ3NfZmllbGQgKHJlcXVpcmVkKSAtIG5hbWUgb2YgY3VzdG9tZ3NfZmllbGQgdG8gcmV0cmlldmUgKHdpdGggdW5kZXJzY29yZXMgbm90IHNwYWNlcyk8L2xpPgogICA8bGk+ZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWVsZDwvbGk+CiAgIDxsaT5tdWx0aXBsZSAob3B0aW9uYWwpIC0gYW4gb3B0aW9uIGlmIHNldCwgdG8gb3VwdXQgYSBtdWx0aS1zZWxlY3QgYm94IHJhdGhlciB0aGFuIGEgc2luZ2xlIHNlbGVjdCBkcm93bmRvd248L2xpPgogICA8bGk+c2l6ZSAob3B0aW9uYWwpIC0gYW4gb3B0aW9uIHRvIHNldCB0aGUgc2l6ZSBvZiBhIG11bHRpLXNlbGVjdCBib3g8L2xpPgogICA8bGk+Y29tcGFjdCAob3B0aW9uYWwpIC0gZGVmYXVsdDpmYWxzZSAtIGlmIHNldCwgYSBzdW1tYXJ5IG9mIHRoZSBzZWxlY3RlZCBvcHRpb25zIGlzIGRpc3BsYXllZCBhbmQgdGhlIGZ1bGwgc2VsZWN0IGlzIHNob3duL2hpZGRlbiB3aGVuICdlZGl0L2hpZGUnIGlzIGNsaWNrZWQ8L2xpPgo8L3VsPgo8YnI+CgoKCjxwPjxzdHJvbmc+Y2hlY2tib3g8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJjaGVja2JveCIgYmxvY2s9InRlc3QxMSIgbGFiZWw9IkNoZWNrYm94IiBkZWZhdWx0X3ZhbHVlPSIxIn08L3A+CjxwPlBhcmFtZXRlcnM6CmRlZmF1bHRfdmFsdWUgKG9wdGlvbmFsKTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+bW9kdWxlX2xpbms8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJtb2R1bGVfbGluayIgbGFiZWw9Ik1vZHVsZSBlZGl0IiBibG9jaz0idGVzdDMiIG1vZD0iQ2F0YWxvZ2VyIiB0ZXh0PSJFZGl0IGNhdGFsb2ciIH08L3A+CjxwPlBhcmFtZXRlcnM6Cm1vZCAocmVxdWlyZWQpIDxicj4KdGV4dCAocmVxdWlyZWQpIDxicj4KdGFyZ2V0IChvcHRpb25hbCkgLSBkZWZhdWx0IF9zZWxmPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5saW5rPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0ibGluayIgbGFiZWw9IlNlYXJjaCIgYmxvY2s9InRlc3Q0IiB0YXJnZXQ9Il9ibGFuayIgbGluaz0iaHR0cDovL3d3dy5iaW5nLmNvbSIgdGV4dD0iYmluZyBzZWFyY2gifTwvcD4KPHA+UGFyYW1ldGVyczoKbGluayAocmVxdWlyZWQpIDxicj4KdGV4dCAocmVxdWlyZWQpIDxicj4KdGFyZ2V0IChvcHRpb25hbCkgLSBkZWZhdWx0IF9zZWxmPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz50aW1lcGlja2VyPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0idGltZXBpY2tlciIgbGFiZWw9IlRpbWUiIGJsb2NrPSJ0ZXN0NDUifTwvcD4KPHA+UGFyYW1ldGVyczoKc2l6ZSAob3B0aW9uYWwpIGRlZmF1bHQgMTAwPGJyPgp0aW1lX2Zvcm1hdCAob3B0aW9uYWwpIGRlZmF1bHQgSEg6OnNzPGJyPgptYXhfbGVuZ3RoIChvcHRpb25hbCkgZGVmYXVsdCAxMDxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+ZGF0ZXBpY2tlcjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRhdGVwaWNrZXIiIGxhYmVsPSJEYXRlIiBibG9jaz0idGVzdDQ0IiBjaGFuZ2VfeWVhcj0xIHllYXJfcmFuZ2U9JzE5OTA6MjA1MCd9PC9wPgo8cD5QYXJhbWV0ZXJzOgpzaXplIChvcHRpb25hbCkgZGVmYXVsdCAxMDA8YnI+CmRhdGVfZm9ybWF0IChvcHRpb25hbCkgZGVmYXVsdCB5eS1tbS1kZDxicj4KdGltZSAob3B0aW9uYWwpIC0gYWRkIHRpbWUgcGlja2VyIGRlZmF1bHQgMDxicj4KdGltZV9mb3JtYXQgKG9wdGlvbmFsKSBkZWZhdWx0IEhIOjpzczxicj4KbWF4X2xlbmd0aCAob3B0aW9uYWwpIGRlZmF1bHQgMTAgPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcjxicj4KY2hhbmdlX21vbnRoIGJvb2xlYW4gKG9wdGlvbmFsKSAtIGRlZmF1bHQ6IGZhbHNlLiBXaGV0aGVyIHRoZSBtb250aCBzaG91bGQgYmUgcmVuZGVyZWQgYXMgYSBkcm9wZG93biBpbnN0ZWFkIG9mIHRleHQuPGJyPgpjaGFuZ2VfeWVhciBib29sZWFuIChvcHRpb25hbCkgLSBkZWZhdWx0OiBmYWxzZS4gV2hldGhlciB0aGUgeWVhciBzaG91bGQgYmUgcmVuZGVyZWQgYXMgYSBkcm9wZG93biBpbnN0ZWFkIG9mIHRleHQuIFVzZSB0aGUgeWVhcl9yYW5nZSBvcHRpb24gdG8gY29udHJvbCB3aGljaCB5ZWFycyBhcmUgbWFkZSBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbi48YnI+CnllYXJfcmFuZ2Ugc3RyaW5nIChvcHRpb25hbCkgLSBkZWZhdWx0OiAiYy0xMDpjKzEwIi4gVGhlIHJhbmdlIG9mIHllYXJzIGRpc3BsYXllZCBpbiB0aGUgeWVhciBkcm9wLWRvd246IGVpdGhlciByZWxhdGl2ZSB0byB0b2RheSdzIHllYXIgKCItbm46K25uIiksIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgeWVhciAoImMtbm46YytubiIpLCBhYnNvbHV0ZSAoIm5ubm46bm5ubiIpLCBvciBjb21iaW5hdGlvbnMgb2YgdGhlc2UgZm9ybWF0cyAoIm5ubm46LW5uIikuIAo8L3A+PGJyPgoKPHA+PHN0cm9uZz5pbnB1dDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImlucHV0IiBsYWJlbD0iVGV4dCIgYmxvY2s9InRlc3Q1IiBzaXplPTU1IG1heF9sZW5ndGg9NTUgZGVmYXVsdF92YWx1ZT0iZmlsbCBpdCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpzaXplIChvcHRpb25hbCkgZGVmYXVsdCAzMDxicj4KbWF4X2xlbmd0aCAob3B0aW9uYWwpIGRlZmF1bHQgMjU1IDxicj4KZGVmYXVsdF92YWx1ZSAob3B0aW9uYWwpIC0gZGVmYXVsdCB2YWx1ZSBmb3IgaW5wdXQ8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPnRleHRhcmVhPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0idGV4dGFyZWEiIGxhYmVsPSJUZXh0YXJlYSIgYmxvY2s9InRlc3Q2IiByb3dzPTEwIGNvbHM9NDAgZGVmYXVsdF92YWx1ZT0iZmlsbCBpdCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpyb3dzIChvcHRpb25hbCkgZGVmYXVsdCAyMDxicj4KY29scyAob3B0aW9uYWwpIGRlZmF1bHQgODAgPGJyPgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCkgLSBkZWZhdWx0IHZhbHVlIGZvciB0ZXh0YXJlYTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+ZWRpdG9yICh0ZXh0YXJlYSB3aXRoIHd5c2l3eWcpPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZWRpdG9yIiBsYWJlbD0iVGV4dGFyZWEiIGJsb2NrPSJ0ZXN0NyIgcm93cz0xMCBjb2xzPTQwIGRlZmF1bHRfdmFsdWU9ImZpbGwgaXQifTwvcD4KPHA+UGFyYW1ldGVyczoKcm93cyAob3B0aW9uYWwpIGRlZmF1bHQgMjA8YnI+CmNvbHMgKG9wdGlvbmFsKSBkZWZhdWx0IDgwIDxicj4KZGVmYXVsdF92YWx1ZSAob3B0aW9uYWwpIC0gZGVmYXVsdCB2YWx1ZSBmb3IgdGV4dGFyZWE8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPnRleHQgPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0idGV4dCIgbGFiZWw9IlRleHQiIGJsb2NrPSJ0ZXN0OCIgdGV4dD0iSGVsbG8gd29yZCEifTwvcD4KPHA+UGFyYW1ldGVyczoKdGV4dCAocmVxdWlyZWQpIHRleHQgaW4gYWRtaW4gKGFkZCBpbmZvcm1hdGlvbiBmb3IgdXNlcnMpPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5wYWdlcyA8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJwYWdlcyIgbGFiZWw9IlBhZ2UiIGJsb2NrPSJ0ZXN0MTAifTwvcD4KPHA+UGFyYW1ldGVyczoKZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+aHIgKGhvcml6b250YWwgbGluZSk8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJociIgbGFiZWw9Ik90aGVyIGJsb2NrcyIgYmxvY2s9ImJsb2NrbmFtZSJ9PHA+ClBhcmFtZXRlcnM6CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+CgoKPHA+PHN0cm9uZz5zb3J0YWJsZWxpc3Q8L3N0cm9uZz48L3A+CjxwPlRoZSBlZGl0b3IgY2FuIHNlbGVjdCBhbmQgcmVvcmRlciBpdGVtcyBmcm9tIGEgbGlzdC4gRWl0aGVyIHRoZSAndmFsdWVzJywgJ3VkdCcgb3IgJ21vZCcgcGFyYW1ldGVyIG11c3QgYmUgdXNlZCAoKikuCjxwPlBhcmFtZXRlcnM6PC9wPgo8dWw+CiAgICA8bGk+dmFsdWVzICgqKSAtIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgJ1RleHQnIG9yICdUZXh0PXZhbHVlJy4gZS5nOjxicj4KICAgICAgICA8cHJlPntjb250ZW50X21vZHVsZSBtb2R1bGU9RUNCMiBmaWVsZD1zb3J0YWJsZWxpc3QgYmxvY2s9InRlc3Q1IiBsYWJlbD0iRnJ1aXQiIHZhbHVlcz0iQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxHcmVlbj1ncmVlbix2YWx1ZT1MYWJlbCIgZmlyc3RfdmFsdWU9InNlbGVjdCBmcnVpdCJ9PC9wcmU+CiAgICA8L2xpPgogICAgPGxpPnVkdCAoKikgLSBuYW1lIG9mIHVkdCB0aGF0IHJldHVybnMgYW4gYXJyYXkgaW4gdGhlIGZvcm1hdCAndmFsdWUnID0+ICdMYWJlbCc8YnI+CiAgICAgICAgPHByZT57Y29udGVudF9tb2R1bGUgbW9kdWxlPUVDQjIgZmllbGQ9c29ydGFibGVsaXN0IGJsb2NrPSJ0ZXN0c29ydGFibGVsaXN0IiBsYWJlbD0iQ2hvb3NlIGZydWl0IiB1ZHQ9Im15dWR0In08L3ByZT4KICAgIDwvbGk+CiAgICA8bGk+bW9kICgqKSAtIHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIG1vZHVsZSB0byBjYWxsIHRvIGdldCB0aGUgb3B0aW9uIHZhbHVlcy4gUmV0dXJuZWQgdmFsdWVzIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgJ1RleHQnIG9yICdUZXh0PXZhbHVlJyBBcyBhYm92ZS4gQW55IGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgYWxzbyBwYXNzZWQgb250byB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gWW91IG1heSB3YW50IHRvIGluY2x1ZGUgJ2FjdGlvbicgYW5kICd0ZW1wbGF0ZScgcGFyYW1ldGVycy4gZS5nOjxicj4KICAgICAgICA8cHJlPntjb250ZW50X21vZHVsZSBtb2R1bGU9RUNCMiBmaWVsZD1zb3J0YWJsZWxpc3QgYmxvY2s9c29ydGFibGVsaXN0MiBsYWJlbD0iU29ydGFibGUgTGlzdCAtIGZyb20gbW9kdWxlIiBtb2Q9TElTRVByb2plY3RzIHRlbXBsYXRlX3N1bW1hcnk9J2l0ZW1fZHJvcGRvd24nIHBhZ2VsaW1pdD0yfTwvcHJlPgogICAgPC9saT4KICAgIDxsaT5maXJzdF92YWx1ZSAob3B0aW9uYWwpPC9saT4KICAgIDxsaT5sYWJlbF9sZWZ0IChvcHRpb25hbCk8L2xpPgogICAgPGxpPmxhYmVsX3JpZ2h0IChvcHRpb25hbCk8L2xpPgogICAgPGxpPm1heF9udW1iZXIgKG9wdGlvbmFsKSAtIGxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQ8L2xpPgogICAgPGxpPnJlcXVpcmVkX251bWJlciAob3B0aW9uYWwpIC0gc2V0cyBhIHNwZWNpZmljIG51bWJlciBvZiBpdGVtcyB0aGF0IG11c3QgYmUgc2VsZWN0ZWQgKG9yIG5vbmUpPC9saT4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC91bD4KPGJyPgoKCjxwPjxzdHJvbmc+cmFkaW88L3N0cm9uZz4gPC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0icmFkaW8iIGJsb2NrPSJ0ZXN0MTciIGxhYmVsPSJGcnVpdCIgdmFsdWVzPSJBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEtpd2lmcnVpdD1raXdpZnJ1aXQiIGRlZmF1bHRfdmFsdWU9Ik9yYW5nZSJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgp2YWx1ZXMgKHJlcXVpcmVkKSAtIGNvbW1hIHNlcGFyYXRlZC4gRXhhbXBsZTogQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxLaXdpZnJ1aXQ9a2l3aWZydWl0PGJyPgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCkgLSBkZWZhdWx0IGlzIGZpcnN0IGNob2ljZSAtIHNldCB0byBkZWZhdWx0IHZhbHVlIGUuZy4gIk9yYW5nZSIKaW5saW5lIChvcHRpb25hbCkgLSBpZiBzZXQgZGlzcGxheXMgYWRtaW4gcmFkaW8gYnV0dG9ucyBpbmxpbmU8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmhpZGRlbjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgYmxvY2s9J3Rlc3QxOGhpZGRlbicgYXNzaWduPSd0ZXN0aGlkZGVuJyBmaWVsZD0naGlkZGVuJyB2YWx1ZT0nbWFya2VydmFsdWUnfTxicj4KQ2FuIGJlIHVzZWQgdG8gc2V0IGEgcGFnZSBhdHRyaWJ1dGUgdGhhdCBjYW4gdGhlbiBiZSBhY2Nlc3NlZCAoZS5nLiBmcm9tIGEgTmF2aWdhdG9yLVRlbXBsYXRlKSwgdXNpbmcge3BhZ2VfYXR0ciBwYWdlPSRub2RlLT5hbGlhcyBrZXk9J3Rlc3RoaWRkZW4nfTwvcD4KPHA+UGFyYW1ldGVyczoKdmFsdWUgKHJlcXVpcmVkKSAtIGhpZGRlbiB2YWx1ZSB0byBiZSBzYXZlZDxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+ZmllbGRzZXRfc3RhcnQ8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdmaWVsZHNldF9zdGFydCcgbGFiZWw9JyYgbmJzcDsnIGJsb2NrPSd0ZXN0MTlmaWVsZHNldCcgYXNzaWduPSd0ZXN0MTlmaWVsZHNldCcgbGVnZW5kPSdGaWVsZHNldCBUZXN0IExlZ2VuZCcgZGVzY3JpcHRpb249J0NhbiBhZGQgYSBkZXNjcmlwdGlvbiBpbiBoZXJlJ308YnI+CkNyZWF0ZXMgdGhlIHN0YXJ0IG9mIGEgZmllbGRzZXQgZm9yIGdyb3VwaW5nIHJlbGF2YW50IGFkbWluIGZpZWxkcyB0b2dldGhlci4gTm90ZTogYSBtYXRjaGluZyAnZmllbGRzZXRfZW5kJyBibG9jayBpcyByZXF1aXJlZCBmb3IgZWFjaCBmaWVsZHNldF9zdGFydC48YnI+ClRJUDogc2V0IGxhYmVsPScmIG5ic3A7JyB0byBub3Qgc2hvdyB0aGUgZmllbGQgbGFiZWwuPC9wPgo8cD5QYXJhbWV0ZXJzOgpsZWdlbmQgKG9wdGlvbmFsKSAtIGFkZHMgYW4gb3B0aW9uYWwgbGVnZW5kIChkZWZhdWx0ID0gbm8gbGVnZW5kKTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+ZmllbGRzZXRfZW5kPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZmllbGRzZXRfZW5kJyBsYWJlbD0nJiBuYnNwOycgYmxvY2s9J3Rlc3QxOWZpZWxkc2V0ZW5kJyBhc3NpZ249J3Rlc3QxOWZpZWxkc2V0ZW5kJyB9PGJyPgpDcmVhdGVzIHRoZSBlbmQgb2YgYSBmaWVsZHNldCBmb3IgZ3JvdXBpbmcgcmVsYXZhbnQgYWRtaW4gZmllbGRzIHRvZ2V0aGVyLiBOb3RlOiBhIG1hdGNoaW5nICdmaWVsZHNldF9zdGFydCcgYmxvY2sgaXMgcmVxdWlyZWQgZm9yIGVhY2ggZmllbGRzZXRfZW5kLjxicj4KVElQOiBzZXQgbGFiZWw9JyYgbmJzcDsnIHRvIG5vdCBzaG93IHRoZSBmaWVsZCBsYWJlbC4KPC9wPjxicj4KCgo8cD48c3Ryb25nPmdhbGxlcnlfcGlja2VyPC9zdHJvbmc+PC9wPgo8cD5Qcm92aWRlcyBhIGdhbGxlcnkgcGlja2VyIGZvciB0aGUgR2FsbGVyeSBtb2R1bGUuPC9wPgo8cD5FeGFtcGxlOgogICAgICB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZ2FsbGVyeV9waWNrZXInIGJsb2NrPXBhZ2VUb3BHYWxsZXJ5IGxhYmVsPSdQYWdlIFRvcCBHYWxsZXJ5JyBkaXI9J3BhZ2UtdG9wLWdhbGxlcmllcyd9PC9wPgo8cD5QYXJhbWV0ZXJzOjwvcD4KPHVsPgogICA8bGk+ZGlyIChvcHRpb25hbCkgLSBvbmx5IHJldHVybnMgZ2FsbGVyaWVzIHRoYXQgYXJlIHN1Yi1nYWxsZXJpZXMgb2YgdGhpcyBnYWxsZXJ5IGRpciwgZGVmYXVsdCBpcyBhbGwgZ2FsbGVyaWVzLCBleGNsdWRpbmcgZGVmYXVsdCB0b3AgbGV2ZWwgZ2FsbGVyeTwvbGk+CiAgIDxsaT5kZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmllbGQ8L2xpPgo8L3VsPgo8YnI+CgoKPHA+PHN0cm9uZz5pbnB1dF9yZXBlYXRlcjwvc3Ryb25nPjwvcD4KPHA+UHJvdmlkZXMgb25lIG9yIG1vcmUgdGV4dCBpbnB1dHMgdGhhdCBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCBieSB0aGUgZWRpdG9yLjwvcD4KPHA+VGhlIGNvbnRlbnQgYmxvY2sgb3V0cHV0IGlzIGEgc3RyaW5nIHdpdGggZWFjaCBpbnB1dCBmaWVsZCdzIGNvbnRlbnRzIGRlbGltaXRlciBieSAnfHwnLiBUbyBtYWtlIHRoZSBvdXRwdXQgYSBtb3JlIHVzZWZ1bCBhcnJheSB1c2UgJ2V4cGxvZGUnLCBlLmcuIHsifHwifGV4cGxvZGU6JGNvbnRlbnRfYmxvY2tfbmFtZX08L3A+CjxwPkV4YW1wbGU6CiAgICAgIHskaW5wdXRfcmVwZWF0ZXJfdGVzdD0ifHwifGV4cGxvZGU6Intjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdpbnB1dF9yZXBlYXRlcicgbGFiZWw9J1Rlc3QgMjI6IGlucHV0X3JlcGVhdGVyJyBibG9jaz0ndGVzdDIyJyBzaXplPTUwIG1heF9sZW5ndGg9MjU1IGRlc2NyaXB0aW9uPSdQcmVzcyAoKykgYW5kICgtKSB0byBhZGQgYW5kIHJlbW92ZSBhZGRpdGlvbmFsIGlucHV0IGZpZWxkcyd9IiBzY29wZT1nbG9iYWx9PC9wPgo8cD5UbyB1c2U6IHskaW5wdXRfcmVwZWF0ZXJfdGVzdHxwcmludF9yfTwvcD4KPGJyPgoKCjxwPjxzdHJvbmc+aW1hZ2U8L3N0cm9uZz4gPHNwYW4gc3R5bGU9ImNvbG9yOnJlZDsiPm5ldzwvc3Bhbj48L3A+CjxwPkRpc3BsYXlzIGFuIGltYWdlIG9uIGFuIGFkbWluIHBhZ2Ugb25seS4gVXNlZnVsbHkgdG8gcHJvdmlkZSBleHRyYSBndWlkYW5jZSB0byBlZGl0b3JzLjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImltYWdlIiBsYWJlbD0iVGVzdCAyMzogaW1hZ2UiIGJsb2NrPSJ0ZXN0MjMiIGltYWdlPSdpbWFnZXMvdGVzdC1pbWFnZS1oZXJlLmpwZycgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSAtIHRoaXMgaXMgYW4gYWRtaW4gb25seSBpbWFnZSJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgppbWFnZSAocmVxdWlyZWQpIC0gcGF0aCBhbmQgZmlsZW5hbWUgcmVsYXRpdmUgdG8gdGhlIHVwbG9hZHMgZGlyZWN0b3J5PGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKCgogICAgICA8L2Rpdj4KICAgPC9kaXY+CgogICA8ZGl2IGlkPSJhYm91dF9jIj4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgCiAgIDxoMz5VcGdyYWRlIGZyb20gRUNCPC9oMz4KICAgPHA+SW5zdGFsbCBFQ0IyIG1vZHVsZSBhbmQgY2hhbmdlIGFsbCAibW9kdWxlIiBwYXJhbWV0ZXJzLCBpbiBjb250ZW50X21vZHVsZSB0YWdzIHRvIGJlIG1vZHVsZT0iRUNCMiIgKHdhcyAiRUNCIikuIFRoZW4gRUNCIGNhbiBiZSB1bmluc3RhbGxlZC48L3A+PGJyPgoKCiAgICA8aDM+U3VwcG9ydDwvaDM+CiAgICA8cD5BcyBwZXIgdGhlIEdQTCBsaWNlbmNlLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzIGlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dCBvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci4KICAgIFRoZSBtb2R1bGUgYXV0aG9yIGlzIG5vdCBvYmxpZ2F0ZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGlzIGNvZGUuIEhvd2V2ZXIgeW91IG1pZ2h0IGdldCBzdXBwb3J0IHRocm91Z2ggdGhlIGZvbGxvd2luZzo8L3A+CiAgICA8dWw+CiAgICAgICAgPGxpPkZvciBzdXBwb3J0LCBmaXJzdCA8c3Ryb25nPnNlYXJjaDwvc3Ryb25nPiB0aGUgPGEgaHJlZj0iLy9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtPC9hPiwgZm9yIGlzc3VlcyB3aXRoIHRoZSBtb2R1bGUgc2ltaWxhciB0byB0aG9zZSB5b3UgYXJlIGZpbmRpbmcuPC9saT4KICAgICAgICA8bGk+VGhlbiwgaWYgbmVjZXNzYXJ5LCBvcGVuIGEgPHN0cm9uZz5uZXcgZm9ydW0gdG9waWM8L3N0cm9uZz4gdG8gcmVxdWVzdCBoZWxwLCB3aXRoIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdC48L2xpPgogICAgICAgIDxsaT5JZiB5b3UgZmluZCBhIGJ1ZyB5b3UgY2FuIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvYnVnL2xpc3QvMTM2NiI+c3VibWl0IGEgQnVnIFJlcG9ydDwvYT4uPC9saT4KICAgICAgICA8bGk+Rm9yIGFueSBnb29kIGlkZWFzIHlvdSBjYW4gPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9mZWF0dXJlX3JlcXVlc3QvbGlzdC8xMzY2Ij5zdWJtaXQgYSBGZWF0dXJlIFJlcXVlc3Q8L2E+LjwvbGk+CiAgICAgICAgPGxpPklmIHlvdSBmb3VuZCB0aGUgTW9kdWxlIHVzZWZ1bCAtIHNob3V0IG91dCB0byBtZSBvbiBUd2l0dGVyIDxhIGhyZWY9Ii8vdHdpdHRlci5jb20vS2l3aUNocmlzQlQiPkBLaXdpQ2hyaXNCVDwvYT48L2xpPgogICAgPC91bD48YnI+CgogICAgPGgzPlNwb25zb3IgRGV2ZWxvcG1lbnQ8L2gzPgogICAgPHA+SWYgeW91IHdvdWxkIGxpa2UgYSBuZXcgZmllbGQgb3IgZmVhdHVyZSBhZGRlZCB0byB0aGlzIG1vZHVsZSwgcGxlYXNlIGNvbnRhY3QgbWUuIFlvdSBjYW4gc3BvbnNvciBkZXZlbG9wbWVudCBmcm9tIMKjMTAwLjwvcD48YnI+CgoKICAgPGgzPkNvcHlyaWdodCAmYW1wOyBMaWNlbmNlPC9oMz4KICAgPHA+Q29weXJpZ2h0IMKpIDIwMTksIENocmlzIFRheWxvciA8IGNocmlzIGF0IGJpbm5vdmF0aXZlIGRvdCBjbyBkb3QgdWsgPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPjxicj4KICAgPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2My4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuIFlvdSBtYXkgb25seSB1c2UgdGhpcyBzb2Z0d2FyZSB3aGVuIHRoZXJlIGlzIGEgY2xlYXIgYW5kIG9idmlvdXMgaW5kaWNhdGlvbiBpbiB0aGUgYWRtaW4gc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIFNpbXBsZSE8L3A+PGJyPgogICA8YnI+CgogICAgICA8L2Rpdj4KICAgPC9kaXY+Cgo8L2Rpdj4KPGJyPgoKCg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBDaHJpcyBUYXlsb3IgKHR3aXR0ZXIuY29tL0tpd2lDaHJpc0JUKSAmbHQ7Y2hyaXNAYmlubm92YXRpdmUuY28udWsmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMS44PGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+Cgo8aDM+VmVyc2lvbiAxLjggLSAyMkp1bjIyPC9oMz4KPHVsPgogICA8bGk+ZHJvcGRvd24gJiBzb3J0YWJsZWxpc3QgLSAnbW9kJyBvcHRpb24gYWRkZWQgLSBjYW4gbG9hZCBvcHRpb25zIGRpcmVjdGx5IGZyb20gYSBtb2R1bGVzIHRlbXBsYXRlPC9saT4KICAgPGxpPmRyb3Bkb3duICYgc29ydGFibGVsaXN0IC0gJ2ZsaXBfdmFsdWVzJyBvcHRpb24gYWRkZWQgLSBzd2FwcyB0aGUgZHJvcGRvd25zIHZhbHVlcyA8LT4gdGV4dC4gQ2FuIHNpbXBsaWZ5IHVzaW5nIGRhdGEgZnJvbSBhbm90aGVyIHNvdXJjZS48L2xpPgogICA8bGk+dW5kb2N1bWVudGVkICYgbm9uLWZ1bmN0aW9uaW5nIG1ldGhvZCBnZXRfZHJvcGRvd25fZnJvbV9tb2R1bGUgcmVtb3ZlZC48L2xpPgogICA8bGk+YnVnIGZpeCBmb3IgdjEuNyAtIGNvbG9yX3BpY2tlciBoYWQgc3RvcHBlZCB3b3JraW5nPC9saT4KICAgPGxpPnRpbWVfcGlja2VyICYgY29sb3VyX3BpY2tlciBqcyBtb3ZlZCBpbnRvIHNpbmdsZSBmaWxlIGVjYjJfYWRtaW4uanM8L2xpPgogICA8bGk+Zm9yY2UgcmVmcmVzaCBvZiBjc3MgJiBqcyBmaWxlcyBhZnRlciBtb2R1bGUgdXBkYXRlPC9saT4KPC91bD4KPGJyPgoKCjxoMz5WZXJzaW9uIDEuNyAtIDIwSnVuMjI8L2gzPgo8dWw+CiAgIDxsaT5jb2xvcl9waWNrZXIgLSBjaGFuZ2VkIHRvIHVzZSBjb2xwaWNrIGZvciBjb25zaXN0ZW5jeSB3aXRoIExJU0UgJiBDdXN0b21HUywgYWRkZWQgb3B0aW9uczogY2xlYXJfY3NzX2NhY2hlICYgbm9faGFzaDwvbGk+CiAgIDxsaT5pbWFnZSAtIGFkZGVkIGZpZWxkIHR5cGUgZm9yIGRpc3BsYXlpbmcgYW4gaW1hZ2Ugb24gYW4gYWRtaW4gcGFnZSBvbmx5LiBVc2VmdWxseSB0byBwcm92aWRlIGV4dHJhIGd1aWRhbmNlIHRvIGVkaXRvcnMuPC9saT4KPC91bD4KPGJyPgoKCjxoMz5WZXJzaW9uIDEuNi4yIC0gMTlKYW4yMjwvaDM+Cjx1bD4KICAgPGxpPmRhdGVwaWNrZXIgLSBhZGQgb3B0aW9ucyBmb3IgY2hhbmdlX21vbnRoLCBjaGFuZ2VfeWVhciwgeWVhcl9yYW5nZTwvbGk+CiAgIDxsaT5kYXRlcGlja2VyICYgdGltZXBpY2tlciAtIG1vdmUgb3VwdXQgaW50byBzbWFydHkgdGVtcGxhdGUgJ2RhdGVwaWNrZXJfdGVtcGxhdGUudHBsJywgbW92ZSBjdXN0b20ganMgZnJvbSBpbmxpbmUgaW50byBlY2IyX2FkbWluLmpzPC9saT4KICAgPGxpPmJ1ZyBmaXggZm9yIGlzX2RhdGVwaWNrZXJfbGliX2xvYWQgLSBzbyBpdCdzIG9ubHkgbG9hZGVkIG9uY2U8L2xpPgo8L3VsPgo8YnI+CgoKPGgzPlZlcnNpb24gMS42LjEgLSAyN0p1bDIwPC9oMz4KPHVsPgogICA8bGk+bW92ZSBoZWxwICYgY2hhbmdlbG9nIGludG8gdGVtcGxhdGVzPC9saT4KICAgPGxpPkJ1ZyBmaXg6IGZvciAnY2hlY2tib3gnIHVzaW5nIGRlZmF1bHQgb2YgdHJ1ZSAoY2hlY2tlZCkgLSB3b3JrIGFyb3VuZCBmb3IgY29yZSBidWc8L2xpPgo8L3VsPgo8YnI+CgoKPGgzPlZlcnNpb24gMS42IC0gMDNKdW4yMDwvaDM+Cjx1bD4KICAgPGxpPmFsbCAnZHJvcGRvd24nIGNvbnRlbnQgYmxvY2tzIG5vdyBoYXZlIHRoZSBvcHRpb24gZm9yIGEgJ2NvbXBhY3QnIGRpc3BsYXkgb24gdGhlIGFkbWluIHBhZ2UuIFNldCAiY29tcGFjdD0xIiBpbiB0aGUgcGFyYW1ldGVycyBhIHN1bW1hcnkgb2YgdGhlIHNlbGVjdGVkIG9wdGlvbnMgaXMgZGlzcGxheWVkIGFuZCB0aGUgZnVsbCBzZWxlY3QgaXMgc2hvd24vaGlkZGVuIHdoZW4gJ2VkaXQvaGlkZScgaXMgY2xpY2tlZDwvbGk+CiAgIDxsaT5maWxlX3NlbGVjdG9yIGNvbnRlbnQgYmxvY2sgLSB1cGRhdGVkIG5vdyB1c2VzIGNvcmUgbWV0aG9kIGluc3RlYWQgb2YgQ0dFeHRlbnNpb25zPC9saT4KICAgPGxpPnJlbW92ZWQgQ0dFeHRlbnNpb25zIGRlcGVuZGFuY3k8L2xpPgogICA8bGk+QnVnIGZpeDogZGVmYXVsdCB2YWx1ZSBub3cgd29ya3MgZm9yIGNoZWNrYm94LCBpbnB1dCwgdGV4dGFyZWEgJiBlZGl0b3IgY29udGVudCBibG9ja3M8L2xpPgo8L3VsPgo8YnI+CgoKPGgzPlZlcnNpb24gMS41LjMgLSAxN0p1bjE5PC9oMz4KPHVsPgogICA8bGk+bWlub3IgYnVnIGZpeCBpbiBoZWxwPC9saT4KPC91bD4KPGJyPgoKCjxoMz5WZXJzaW9uIDEuNS4yIC0gMTlGZWIxOTwvaDM+Cjx1bD4KICAgPGxpPmJ1ZyBmaXggLSBhZG1pbiBqcyB1cGRhdGVkIC0gZml4ZXMgdjEuNS4xIG11bHRpcGxlIHNlbGVjdCdzICYgaW5wdXRfcmVwZWF0ZXIgbm90IHdvcmtpbmcgLSBwbGVhc2UgdXBkYXRlPC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS41LjEgLSAxOEZlYjE5PC9oMz4KPHVsPgogICA8bGk+Z2FsbGVyeV9waWNrZXIgLSBidWcgZml4PC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS41IC0gMTZGZWIxOTwvaDM+Cjx1bD4KICAgPGxpPmlucHV0X3JlcGVhdGVyIGNvbnRlbnQgYmxvY2sgLSBhZGRlZCAtIHRoYW5rcyB0byBTaW1vbiBSYWRmb3JkPC9saT4KICAgPGxpPmdhbGxlcnlfcGlja2VyIGNvbnRlbnQgYmxvY2sgLSBhZGRlZDwvbGk+CiAgIDxsaT5kcm9wZG93bl9mcm9tX2N1c3RvbWdzIGNvbnRlbnQgYmxvY2sgLSBhZGRlZDwvbGk+CiAgIDxsaT5hZGRlZCBlcnJvciBtZXNzYWdlIGZvciBtaXNzaW5nIG9yIGluY29ycmVjdGx5IHNwZWx0IGZpZWxkIHBhcmFtYXRlciAtIEJSIzExNTU3IC0gdGhhbmtzIEx1ZGdlcjwvbGk+CiAgIDxsaT5yZW1vdmVkIEFkbWluIHBhZ2UgdGhhdCBvbmx5IHNob3dlZCBoZWxwIC0gcmVkdW5kYW50IGFzIGhlbHAgZWFzaWx5IHZpc2libGUgZnJvbSB3aXRoaW4gTW9kdWxlIE1hbmFnZXI8L2xpPgogICA8bGk+cmVtb3ZlZCBQZXJtaXNzaW9uICdVc2UgRUNCMicgLSBhbHNvIHJlZHVuZGFudDwvbGk+CiAgIDxsaT5jb2RlIHRpZHkgdXAgLSBjb25zb2xpZGF0ZSBqcyAmIGNzcyBpbnRvIHNlcGFyYXRlIGV4dGVybmFsIGZpbGVzPC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS4zLjEgLSAxMkp1bDE3PC9oMz4KPHVsPgogICA8bGk+bWlub3IgYnVnIGZpeDwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMyAtIDExSnVsMTc8L2gzPgo8dWw+CiAgIDxsaT5zb3J0YWJsZWxpc3QgLSBhZGRlZCBtYXhfbnVtYmVyIGFuZCByZXF1aXJlZF9udW1iZXIgb3B0aW9uczwvbGk+CiAgIDxsaT5BZGRlZCAnZmllbGRzZXRfc3RhcnQnIGFuZCAnZmllbGRzZXRfZW5kJyBmaWVsZHM8L2xpPgo8L3VsPgo8YnI+Cgo8aDM+VmVyc2lvbiAxLjIuMiAtIDA1SnVsMTc8L2gzPgo8dWw+CiAgIDxsaT50ZXN0IGZvciBhbmQgZGlzcGxheSB3YXJuaW5nIGluIGFkbWluIGlmIFVEVCBkb2VzIG5vdCBleGlzdDwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMi4xIC0gMTlBcHIxNzwvaDM+Cjx1bD4KICAgPGxpPmJ1ZyBmaXggZm9yIGNvbG9yX3BpY2tlciwgZGVmYXVsdF92YWx1ZSAtIEJSIzExMzU0IC0gdGhhbmtzIFN0dWFydDwvbGk+CiAgIDxsaT5jb2xvcl9waWNrZXIgLSB0d2Vha2VkIGxheW91dDwvbGk+CiAgIDxsaT5zb3J0YWJsZWxpc3QgLSBub3cgdXNlIGpxdWVyeSBzb3J0YWJsZSBpbnN0ZWFkIG9mIENHRXh0ZW5zaW9ucy4gUGFyYW1ldGVycyByZW1vdmVkOiAndGVtcGxhdGUnLiBQYXJhbWV0ZXJzIG5vdCBvcGVyYXRpb25hbDogJ21heF9zZWxlY3RlZCcsICdhbGxvd2R1cGxpY2F0ZXMnIChwbGVhc2UgYWR2aXNlIGlmIHlvdSByZXF1aXJlIHRoZXNlKS4gUGx1cyBzb21lIGJ1ZyBmaXhlcy48L2xpPgo8L3VsPgo8YnI+Cgo8aDM+VmVyc2lvbiAxLjIgLSAwN05vdjE2PC9oMz4KPHVsPgogICA8bGk+QWRkZWQgJ2Rlc2NyaXB0aW9uJyBwYXJhbWV0ZXIgZm9yIGFsbCBmaWVsZHMgKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3I8L2xpPgogICA8bGk+QWRkZWQgJ2hpZGRlbicgZmllbGQgLSBDYW4gYmUgdXNlZCB0byBzZXQgYSBwYWdlIGF0dHJpYnV0ZSB0aGF0IGNhbiB0aGVuIGJlIGFjY2Vzc2VkIChlLmcuIGZyb20gYSBOYXZpZ2F0b3ItVGVtcGxhdGUpLCB1c2luZyB7cGFnZV9hdHRyIHBhZ2U9JG5vZGUtPmFsaWFzIGtleT0ndGVzdGhpZGRlbid9PC9saT4KICAgPGxpPkJ1ZyBmaXggLSBmb3IgcGhwIG5vdGljZTwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMSAtIDE1QXByMTY8L2gzPgo8dWw+CiAgICA8bGk+QnVnIGZpeDwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMCAtIDE1QXByMTY8L2gzPgo8dWw+CiAgICA8bGk+SW5pdGlhbCByZWxlYXNlLiBBIGZvcmsgb2YgRUNCIG1vZHVsZSB2MS42LCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBDTVNNUyB2Mis8L2xpPgogICAgPGxpPkFkZGVkIHJhZGlvIGZpZWxkIC0gdG8gcHJvdmlkZSByYWRpbyBidXR0b25zIG9uIGFuIGFkbWluIHBhZ2U8L2xpPgo8L3VsPgo8YnI+PGJyIC8+]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpCiAgICBleGl0OwoKIyMgbm90aGluZyAtIHNob3VsZCBub3QgZ2V0IGhlcmUKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpCiAgICBleGl0OwoKIyMgbm90aGluZyAtIHNob3VsZCBub3QgZ2V0IGhlcmUKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.refresh.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKaWYgKCFpc3NldCgkcGFyYW1zWydibG9ja19uYW1lJ10pIHx8ICFpc3NldCgkcGFyYW1zWyd2YWx1ZSddKSB8fCAhaXNzZXQoJHBhcmFtc1snYWRkaW5nJ10pKQogICAgcmV0dXJuOwoKJGJsb2NrTmFtZSA9ICRwYXJhbXNbJ2Jsb2NrX25hbWUnXTsKJHZhbHVlID0gJHBhcmFtc1sndmFsdWUnXTsKJGFkZGluZyA9ICRwYXJhbXNbJ2FkZGluZyddOwoKCiRlY2IyID0gbmV3IGVjYjJfdG9vbHMoJGJsb2NrTmFtZSwgJHZhbHVlLCAkcGFyYW1zLCAkYWRkaW5nKTsKZWNobyAkZWNiMi0+Z2V0X2NvbnRlbnRfYmxvY2tfaW5wdXQoKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/ECB2.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mIG1vZHVsZTogRXh0ZW5kZWQgQ29udGVudCBCbG9ja3MgKEVDQikKIyBPcmlnaW5hbCBBdXRob3I6IFpkZW5vIEt1em1hbnkgKHpkZW5vQGt1em1hbnkuYml6KSAvIGt1em1hbnkuYml6ICAvIHR3aXR0ZXIuY29tL2t1em1hbnkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgTW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvZWNiMgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzCiMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOwojIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiMgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjbGFzcyBFQ0IyIGV4dGVuZHMgXENNU01vZHVsZSB7CgogICAgY29uc3QgTU9EVUxFX1ZFUlNJT04gPSAnMS44JzsKCiAgICAvLyBwdWJsaWMgJGlzX2RhdGVwaWNrZXJfbGliX2xvYWQgPSBmYWxzZTsKICAgIC8vIHB1YmxpYyAkaXNfY29sb3JwaWNrZXJfbGliX2xvYWQgPSBmYWxzZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOwoKICAgICAgICBcQ01TTVNcSG9va01hbmFnZXI6OmFkZF9ob29rKCAnQ29yZTo6Q29udGVudEVkaXRQcmUnLCBbICR0aGlzLCAnQ29udGVudEVkaXRQcmUnIF0gKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0TmFtZSgpIHsgcmV0dXJuICdFQ0IyJzsgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7IHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRWZXJzaW9uKCkgeyByZXR1cm4gc2VsZjo6TU9EVUxFX1ZFUlNJT047IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsgcmV0dXJuICcyLjAnOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gTGF6eUxvYWRGcm9udGVuZCgpIHsgcmV0dXJuIHRydWU7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRIZWxwKCkgewogICAgICAgICRzbWFydHkgPSBcQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+R2V0U21hcnR5KCk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ19oZWxwLnRwbCcpOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdDaHJpcyBUYXlsb3IgKHR3aXR0ZXIuY29tL0tpd2lDaHJpc0JUKSc7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIHsgcmV0dXJuICdjaHJpc0BiaW5ub3ZhdGl2ZS5jby51ayc7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7IHJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdfY2hhbmdlbG9nLnRwbCcpOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKSB7IHJldHVybiBmYWxzZTt9CiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0RGVzY3JpcHRpb24oKSB7IHJldHVybiAkdGhpcy0+TGFuZygnbW9kdWxlX2Rlc2NyaXB0aW9uJyk7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTt9CiAgICBwdWJsaWMgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpO30KICAgIHB1YmxpYyBmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTt9CgogICAgcHVibGljIGZ1bmN0aW9uIEluaXRpYWxpemVGcm9udGVuZCgpIHsKICAgICAgICAkdGhpcy0+UmVnaXN0ZXJNb2R1bGVQbHVnaW4oKTsKICAgICAgICAkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKCk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2Jsb2NrX25hbWUnLCBDTEVBTl9TVFJJTkcpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd2YWx1ZScsIENMRUFOX1NUUklORyk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2FkZGluZycsIENMRUFOX1NUUklORyk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3NvcnRmaWxlcycsIENMRUFOX1NUUklORyk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2V4Y2x1ZGVwcmVmaXgnLCBDTEVBTl9TVFJJTkcpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdyZWN1cnNlJywgQ0xFQU5fU1RSSU5HKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZmlsZXR5cGVzJywgQ0xFQU5fU1RSSU5HKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZmllbGQnLCBDTEVBTl9TVFJJTkcpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkaXInLCBDTEVBTl9TVFJJTkcpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdwcmV2aWV3JywgQ0xFQU5fU1RSSU5HKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGF0ZV9mb3JtYXQnLCBDTEVBTl9TVFJJTkcpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkZXNjcmlwdGlvbicsIENMRUFOX1NUUklORyk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2RlZmF1bHRfdmFsdWUnLCBDTEVBTl9TVFJJTkcpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdtYXhfbnVtYmVyJywgQ0xFQU5fSU5UKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbWF4bnVtYmVyJywgQ0xFQU5fSU5UKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbGVnZW5kJywgQ0xFQU5fU1RSSU5HKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY29tcGFjdCcsIENMRUFOX1NUUklORyk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3NpemUnLCBDTEVBTl9JTlQpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdjaGFuZ2VfbW9udGgnLCBDTEVBTl9JTlQpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdjaGFuZ2VfeWVhcicsIENMRUFOX0lOVCk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3llYXJfcmFuZ2UnLCBDTEVBTl9TVFJJTkcpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdub19oYXNoJywgQ0xFQU5fSU5UKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY2xlYXJfY3NzX2NhY2hlJywgQ0xFQU5fSU5UKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZmxpcF92YWx1ZXMnLCBDTEVBTl9JTlQpOwogICAgfQoKCgogICAgcHVibGljIGZ1bmN0aW9uIEluaXRpYWxpemVBZG1pbigpIAogICAgeyAKICAgICAgICAvLyAkdGhpcy0+QWRkSW1hZ2VEaXIoJ2ljb25zJyk7IAovLyAgICAgICAgXENNU01TXEhvb2tNYW5hZ2VyOjphZGRfaG9vaygnQ29yZTo6Q29udGVudEVkaXRQcmUnLCdFQ0IyOjpDb250ZW50RWRpdFByZScpOwogICAgfQoKCgogICAgZnVuY3Rpb24gSGFzQ2FwYWJpbGl0eSgkY2FwYWJpbGl0eSwgJHBhcmFtcyA9IGFycmF5KCkpIHsKICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgIC8vIGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcvYXBpZG9jL0NNUy9DTVNNb2R1bGUuaHRtbCNIYXNDYXBhYmlsaXR5CiAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgc3dpdGNoICgkY2FwYWJpbGl0eSkgewogICAgICAgICAgICBjYXNlICdjb250ZW50YmxvY2tzJzoKICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOwoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9CiAgICB9CgoKCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0Q29udGVudEJsb2NrRmllbGRJbnB1dCgkYmxvY2tOYW1lLCAkdmFsdWUsICRwYXJhbXMsICRhZGRpbmc9ZmFsc2UsIENvbnRlbnRCYXNlICRjb250ZW50X29iaikgewogICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgLy8gaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9BUElET0MyXzAvY2xhc3Nlcy9DTVNNb2R1bGUuaHRtbCNtZXRob2RfR2V0Q29udGVudEJsb2NrRmllbGRJbnB1dAogICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICRlY2IyID0gbmV3IGVjYjJfdG9vbHMoJGJsb2NrTmFtZSwgJHZhbHVlLCAkcGFyYW1zLCAkYWRkaW5nKTsKCiAgICAgICAgcmV0dXJuICRlY2IyLT5nZXRfY29udGVudF9ibG9ja19pbnB1dCgpOwogICAgfQoKCgogICAgcHVibGljIGZ1bmN0aW9uIENvbnRlbnRFZGl0UHJlKCAkcGFyYW1zICkKICAgIHsKICAgICAgICAkY29udGVudElkID0gJHBhcmFtc1snY29udGVudCddLT5JZCgpOwogICAgICAgICRwcm9wcyA9ICRwYXJhbXNbJ2NvbnRlbnQnXS0+R2V0RWRpdGFibGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgJG5ld19wcm9wcyA9ICRwYXJhbXNbJ2NvbnRlbnQnXS0+UHJvcGVydGllcygpOwogICAgICAgICRjbGVhcl9jc3NfY2FjaGUgPSBmYWxzZTsKICAgICAgICAvLyAkRUNCMl9wcm9wcyA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkcHJvcHMgYXMgJHByb3ApIHsKICAgICAgICAgICAgLy8gaWYgKCBpc3NldCgkcHJvcC0+ZXh0cmEpICYmIGlzc2V0KCRwcm9wLT5leHRyYVsnbW9kdWxlJ10pICYmICRwcm9wLT5leHRyYVsnbW9kdWxlJ109PSdFQ0IyJykgewogICAgICAgICAgICAvLyAgICAgJEVDQjJfcHJvcHNbICRwcm9wLT5uYW1lIF0gPSAkcHJvcDsKICAgICAgICAgICAgLy8gfQogICAgICAgICAgICBpZiAoICEkY2xlYXJfY3NzX2NhY2hlICYmIGlzc2V0KCRwcm9wLT5leHRyYSkgJiYgaXNzZXQoJHByb3AtPmV4dHJhWydtb2R1bGUnXSkgJiYgCiAgICAgICAgICAgICAgICAgJHByb3AtPmV4dHJhWydtb2R1bGUnXT09J0VDQjInICYmIGlzc2V0KCRwcm9wLT5leHRyYVsncGFyYW1zJ11bJ2NsZWFyX2Nzc19jYWNoZSddKSApIHsKICAgICAgICAgICAgICAgIC8vIHRlc3QgaWYgdmFsdWUgaGFzIGNoYW5nZWQKICAgICAgICAgICAgICAgICRkYiA9IENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldERiKCk7CiAgICAgICAgICAgICAgICAkcXVlcnkgPSAnU0VMRUNUIGNvbnRlbnQgRlJPTSAnLkNNU19EQl9QUkVGSVguJ2NvbnRlbnRfcHJvcHMgCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgY29udGVudF9pZCA9ID8gQU5EIHByb3BfbmFtZSA9ID8nOwogICAgICAgICAgICAgICAgJG9sZF92YWx1ZSA9ICRkYi0+R2V0T25lKCAkcXVlcnksIFskY29udGVudElkLCAkcHJvcC0+bmFtZV0gKTsKICAgICAgICAgICAgICAgICRuZXdfdmFsdWUgPSAkbmV3X3Byb3BzWyRwcm9wLT5uYW1lXTsKICAgICAgICAgICAgICAgIGlmICgkbmV3X3ZhbHVlICE9ICRvbGRfdmFsdWUpICRjbGVhcl9jc3NfY2FjaGUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkY2xlYXJfY3NzX2NhY2hlKSB7CiAgICAgICAgICAgICR0aGlzLT5DbGVhclN0eWxlc2hlZXRDYWNoZSgpOwogICAgICAgIH0KICAgIH0KCgoKICAgIC8vIHNoYW1lbGVzc2x5IGNvcGllZCBmcm9tIEN1c3RvbUdTIC0gdGhhbmtzIFJvbGYgJiBKb3MgOikKCWZ1bmN0aW9uIENsZWFyU3R5bGVzaGVldENhY2hlKCkKCXsKCQlmb3JlYWNoIChnbG9iKCIuLi90bXAvY2FjaGUvc3R5bGVzaGVldF9jb21iaW5lZF8qLmNzcyIpIGFzICRmaWxlbmFtZSkgewoJCQl0b3VjaCggJGZpbGVuYW1lLCB0aW1lKCkgLSAzNjAwMDAgKTsKCQl9Cgl9Cgp9CgoK]]></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[PD9waHAKCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAyJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnRXh0ZW5kZWQgQ29udGVudCBCbG9ja3MgMiB3YXMgc3VjY2Vzc2Z1bCBpbnN0YWxsZWQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0V4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIgd2FzIHN1Y2Nlc3NmdWwgdW5pbnN0YWxsZWQnOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1JlYWxseT8gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc2luc3RhbGwgdGhpcyBmaW5lIG1vZHVsZT8nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwokbGFuZ1snbW9kdWxlX2Rlc2NyaXB0aW9uJ10gPSAnVGhpcyBtb2R1bGUgYWRkcyBuZXcgY29udGVudCBibG9ja3MgdG8gQ01TIE1hZGUgU2ltcGxlIHYyKyc7CgokbGFuZ1snc2VsZWN0ZWQnXSA9ICdTZWxlY3RlZCc7CiRsYW5nWydzZWxlY3QnXSA9ICdTZWxlY3QnOwokbGFuZ1sncmVmcmVzaCddID0gJ1JlZnJlc2gnOwoKJGxhbmdbJ2NvbnRlbnRfYmxvY2tfbGFiZWxfc2VsZWN0ZWQnXSA9ICdTZWxlY3RlZCc7CiRsYW5nWydjb250ZW50X2Jsb2NrX2xhYmVsX2F2YWlsYWJsZSddID0gJ0F2YWlsYWJsZSc7CiRsYW5nWydkcm9wX2l0ZW1zJ10gPSAnTm8gaXRlbXMgc2VsZWN0ZWQgLSBkcm9wIHNlbGVjdGVkIGl0ZW1zIGhlcmUnOwokbGFuZ1snZHJvcF9yZXF1aXJlZF9pdGVtcyddID0gJ0Ryb3AgJXMgcmVxdWlyZWQgaXRlbXMgaGVyZSc7CiRsYW5nWydyZW1vdmUnXSA9ICdSZW1vdmUnOwoKJGxhbmdbJ3VkdF9lcnJvciddID0gJ1VEVCBcJyVzXCcgZG9lcyBub3QgZXhpc3QnOwokbGFuZ1snY3VzdG9tZ3NfZmllbGRfZXJyb3InXSA9ICJQbGVhc2UgY3JlYXRlIG9wdGlvbiAnJXMnIGluIEN1c3RvbUdTIjsKJGxhbmdbJ2ZpZWxkX2Vycm9yJ10gPSAnUGxlYXNlIHNwZWNpZnkgYSBjb3JyZWN0IGZpZWxkIHBhcmFtZXRlciBmb3IgdGhlIEVDQjIgY29udGVudCBibG9jay4nOwoKJGxhbmdbJ2dhbGxlcnlfbW9kdWxlX2Vycm9yJ10gPSAnR2FsbGVyeSBtb2R1bGUgaXMgbm90IGluc3RhbGxlZC4nOwoKJGxhbmdbJ2FkZF9saW5lJ10gPSAnQWRkIGxpbmUnOwokbGFuZ1sncmVtb3ZlX2xpbmUnXSA9ICdSZW1vdmUgbGluZSc7CgokbGFuZ1snbm9uZV9zZWxlY3RlZCddID0gJy0tLSBub25lIC0tLSc7CgoKCgoKCgoKIyMjICAgICMjIyAgICMjIyMjIyMjIyAgICMjIyAgICAgICAgIyMjIyMjIyMjCiMjIyAgICAjIyMgICAjIyMjIyMjIyMgICAjIyMgICAgICAgICMjIyMjIyMjIwojIyMgICAgIyMjICAgIyMjICAgICAgICAgIyMjICAgICAgICAjIyMgICAjIyMKIyMjIyMjIyMjIyAgICMjIyMjIyMjIyAgICMjIyAgICAgICAgIyMjIyMjIyMjCiMjIyMjIyMjIyMgICAjIyMjIyMjIyMgICAjIyMgICAgICAgICMjIyMjIyMjIwojIyMgICAgIyMjICAgIyMjICAgICAgICAgIyMjICAgICAgICAjIyMKIyMjICAgICMjIyAgICMjIyMjIyMjIyAgICMjIyMjIyMjIyAgIyMjCiMjIyAgICAjIyMgICAjIyMjIyMjIyMgICAjIyMjIyMjIyMgICMjIwoKCgokbGFuZ1snZ2VuZXJhbCddID0gJ0dlbmVyYWwnOwokbGFuZ1snZ2VuZXJhbF9jJ10gPSAnCiAgIDxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgogICA8cD5Nb2R1bGUgYWRkcyBhZGl0aW9uYWwgY29udGVudCBibG9ja3MgZm9yIENNUyBNYWRlIFNpbXBsZSB2MisuIFRoaXMgaXMgYSBmb3JrIG9mIHRoZSBvcmlnaW5hbCBFQ0IgbW9kdWxlIHRoYXQgd29ya2VkIHdpdGggQ01TTVMgdjEuPC9wPgogICA8cD5Qcm92aWRlcyB0aGUgZm9sbG93aW5nIGZpZWxkIHR5cGVzOjxicj4KICAgPG9sPgogICAgICA8bGk+ZmlsZV9zZWxlY3RvcjwvbGk+CiAgICAgIDxsaT5jb2xvcl9waWNrZXI8L2xpPgogICAgICA8bGk+ZHJvcGRvd248L2xpPgogICAgICA8bGk+ZHJvcGRvd25fZnJvbV91ZHQ8L2xpPgogICAgICA8bGk+ZHJvcGRvd25fZnJvbV9jdXN0b21nczwvbGk+CiAgICAgIDxsaT5jaGVja2JveDwvbGk+CiAgICAgIDxsaT5tb2R1bGVfbGluazwvbGk+CiAgICAgIDxsaT5saW5rPC9saT4KICAgICAgPGxpPnRpbWVwaWNrZXI8L2xpPgogICAgICA8bGk+ZGF0ZXBpY2tlcjwvbGk+CiAgICAgIDxsaT5pbnB1dDwvbGk+CiAgICAgIDxsaT50ZXh0YXJlYTwvbGk+CiAgICAgIDxsaT5lZGl0b3IgKHRleHRhcmVhIHdpdGggd3lzaXd5Zyk8L2xpPgogICAgICA8bGk+dGV4dCA8L2xpPgogICAgICA8bGk+cGFnZXMgPC9saT4KICAgICAgPGxpPmhyIChob3Jpem9udGFsIGxpbmUpPC9saT4KICAgICAgPGxpPnNvcnRhYmxlbGlzdDwvbGk+CiAgICAgIDxsaT5yYWRpbzwvbGk+CiAgICAgIDxsaT5oaWRkZW48L2xpPgogICAgICA8bGk+ZmllbGRzZXRfc3RhcnQ8L2xpPgogICAgICA8bGk+ZmllbGRzZXRfZW5kPC9saT4KICAgICAgPGxpPmdhbGxlcnlfcGlja2VyPC9saT4KICAgICAgPGxpPmlucHV0X3JlcGVhdGVyPC9saT4KICAgICAgPGxpPmltYWdlIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij5uZXc8L3NwYW4+PC9saT4KICAgPC9vbD4KICAgPC9wPjxicj4KCiAgIDxwPklmIHlvdSBsaWtlIHRoaXMgbW9kdWxlIHBsZWFzZSA8YSBocmVmPSJodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL2Fib3V0LWxpbmsvZG9uYXRpb25zLyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJmb250LXdlaWdodDpib2xkOyI+ZG9uYXRlIHRvIENNU01TPC9hPjwvcD48YnI+CiAgICc7CgokbGFuZ1snYWJvdXQnXSA9ICdBYm91dCc7CiRsYW5nWydhYm91dF9jJ10gPSAnCiAgIDxoMz5VcGdyYWRlIGZyb20gRUNCPC9oMz4KICAgPHA+SW5zdGFsbCBFQ0IyIG1vZHVsZSBhbmQgY2hhbmdlIGFsbCAibW9kdWxlIiBwYXJhbWV0ZXJzLCBpbiBjb250ZW50X21vZHVsZSB0YWdzIHRvIGJlIG1vZHVsZT0iRUNCMiIgKHdhcyAiRUNCIikuIFRoZW4gRUNCIGNhbiBiZSB1bmluc3RhbGxlZC48L3A+PGJyPgoKCiAgICA8aDM+U3VwcG9ydDwvaDM+CiAgICA8cD5BcyBwZXIgdGhlIEdQTCBsaWNlbmNlLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzIGlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dCBvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci4KICAgIFRoZSBtb2R1bGUgYXV0aG9yIGlzIG5vdCBvYmxpZ2F0ZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGlzIGNvZGUuIEhvd2V2ZXIgeW91IG1pZ2h0IGdldCBzdXBwb3J0IHRocm91Z2ggdGhlIGZvbGxvd2luZzo8L3A+CiAgICA8dWw+CiAgICAgICAgPGxpPkZvciBzdXBwb3J0LCBmaXJzdCA8c3Ryb25nPnNlYXJjaDwvc3Ryb25nPiB0aGUgPGEgaHJlZj0iLy9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtPC9hPiwgZm9yIGlzc3VlcyB3aXRoIHRoZSBtb2R1bGUgc2ltaWxhciB0byB0aG9zZSB5b3UgYXJlIGZpbmRpbmcuPC9saT4KICAgICAgICA8bGk+VGhlbiwgaWYgbmVjZXNzYXJ5LCBvcGVuIGEgPHN0cm9uZz5uZXcgZm9ydW0gdG9waWM8L3N0cm9uZz4gdG8gcmVxdWVzdCBoZWxwLCB3aXRoIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdC48L2xpPgogICAgICAgIDxsaT5JZiB5b3UgZmluZCBhIGJ1ZyB5b3UgY2FuIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvYnVnL2xpc3QvMTM2NiI+c3VibWl0IGEgQnVnIFJlcG9ydDwvYT4uPC9saT4KICAgICAgICA8bGk+Rm9yIGFueSBnb29kIGlkZWFzIHlvdSBjYW4gPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9mZWF0dXJlX3JlcXVlc3QvbGlzdC8xMzY2Ij5zdWJtaXQgYSBGZWF0dXJlIFJlcXVlc3Q8L2E+LjwvbGk+CiAgICAgICAgPGxpPklmIHlvdSBmb3VuZCB0aGUgTW9kdWxlIHVzZWZ1bCAtIHNob3V0IG91dCB0byBtZSBvbiBUd2l0dGVyIDxhIGhyZWY9Ii8vdHdpdHRlci5jb20vS2l3aUNocmlzQlQiPkBLaXdpQ2hyaXNCVDwvYT48L2xpPgogICAgPC91bD48YnI+CgogICAgPGgzPlNwb25zb3IgRGV2ZWxvcG1lbnQ8L2gzPgogICAgPHA+SWYgeW91IHdvdWxkIGxpa2UgYSBuZXcgZmllbGQgb3IgZmVhdHVyZSBhZGRlZCB0byB0aGlzIG1vZHVsZSwgcGxlYXNlIGNvbnRhY3QgbWUuIFlvdSBjYW4gc3BvbnNvciBkZXZlbG9wbWVudCBmcm9tIMKjMTAwLjwvcD48YnI+CgoKICAgPGgzPkNvcHlyaWdodCAmYW1wOyBMaWNlbmNlPC9oMz4KICAgPHA+Q29weXJpZ2h0IMKpIDIwMTksIENocmlzIFRheWxvciA8IGNocmlzIGF0IGJpbm5vdmF0aXZlIGRvdCBjbyBkb3QgdWsgPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPjxicj4KICAgPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2My4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuIFlvdSBtYXkgb25seSB1c2UgdGhpcyBzb2Z0d2FyZSB3aGVuIHRoZXJlIGlzIGEgY2xlYXIgYW5kIG9idmlvdXMgaW5kaWNhdGlvbiBpbiB0aGUgYWRtaW4gc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIFNpbXBsZSE8L3A+PGJyPgogICA8YnI+Cic7CgoKJGxhbmdbJ2ZpZWxkcyddID0gJ0ZpZWxkcyc7CiRsYW5nWydmaWVsZHNfYyddID0gPDw8J0VPRCcKCjxoMz5GaWVsZHM8L2gzPgoKPHA+PHN0cm9uZz5maWxlX3NlbGVjdG9yPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiAge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImZpbGVfc2VsZWN0b3IiIGJsb2NrPSJ0ZXN0MTAiIGRpcj0iaW1hZ2VzIiBmaWxldHlwZXM9ImpwZyxnaWYscG5nIiBleGNsdWRlcHJlZml4PSJ0aHVtYl8ifSAgICAgICAgPC9wPgo8cD5QYXJhbWV0ZXJzOgpmaWxldHlwZXMgLSBjb21tYSBzZXBhcmF0ZWQ8YnI+CmRpciAob3B0aW9uYWwpIC0gZGVmYXVsdCB1cGxvYWRzLzxicj4KZXhjbHVkZXByZWZpeCAob3B0aW9uYWwpPGJyPgpyZWN1cnNlIChvcHRpb25hbCkgLSBkZWZhdWx0IGZhbHNlLCByZWN1cnNlPTEgd2lsbCBzaG93IGFsbCBmaWxlcyBpbiBzdWJmb2xkZXJzCnNvcnRmaWxlcyAob3B0aW9uYWwpPGJyPgpwcmV2aWV3IChvcHRpb25hbCkgLSBvbmx5IGZvciBpbWFnZXM8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+CgoKPHA+PHN0cm9uZz5jb2xvcl9waWNrZXI8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6ICB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY29sb3JfcGlja2VyIiBibG9jaz0idGVzdDEiIGxhYmVsPSJDb2xvciIgZGVmYXVsdF92YWx1ZT0iIzAwMDAwMCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCk8YnI+CnNpemUgKG9wdGlvbmFsKSAtIGRlZmF1bHQgMTA8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yPGJyPgpjbGVhcl9jc3NfY2FjaGUgKG9wdGlvbmFsKSAtIGlmIHNldCB0aGUgY3NzIGNhY2hlIGlzIHJlZnJlc2hlZCBpZiB0aGUgY29sb3IgaXMgY2hhbmdlZDxicj4Kbm9faGFzaCAob3B0aW9uYWwpIC0gaWYgc2V0IHRoZSByZ2IgdmFsdWUgZGlzcGxheWVkIGFuZCByZXR1cm5lZCBkb2VzIG5vdCBpbmNsdWRlIGEgJyMnPGJyPgo8L3A+PGJyPgoKCgo8cD48c3Ryb25nPmRyb3Bkb3duPC9zdHJvbmc+PC9wPgo8cD5DcmVhdGVzIGEgZHJvcGRvd24gKG9yIHNlbGVjdCkgdGhhdCB0aGUgZWRpdG9yIGNhbiBjaG9vc2UgZnJvbSB0aGUgcHJvdmlkZWQgb3B0aW9ucy4gRWl0aGVyIHRoZSAndmFsdWVzJyBvciAnbW9kJyBwYXJhbWV0ZXIgbXVzdCBiZSB1c2VkICgqKS4KPHA+UGFyYW1ldGVyczo8L3A+Cjx1bD4KICAgIDxsaT52YWx1ZXMgKCopIC0gY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiAnVGV4dCcgb3IgJ1RleHQ9dmFsdWUnLiBFeGFtcGxlOiAnQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxHcmVlbj1ncmVlbicgPGJyPgogICAgICAgIDxwcmU+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRyb3Bkb3duIiBibG9jaz0idGVzdDUiIGxhYmVsPSJGcnVpdCIgdmFsdWVzPSJBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlIiBmaXJzdF92YWx1ZT0ic2VsZWN0IGZydWl0In08L3ByZT48L2xpPgogICAgPGxpPm1vZCAoKikgLSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBtb2R1bGUgdG8gY2FsbCB0byBnZXQgdGhlIG9wdGlvbiB2YWx1ZXMuIFJldHVybmVkIHZhbHVlcyBzaG91bGQgYmUgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mICdUZXh0JyBvciAnVGV4dD12YWx1ZScgQXMgYWJvdmUuIEFueSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIGFsc28gcGFzc2VkIG9udG8gdGhlIHNwZWNpZmllZCBtb2R1bGUuIFlvdSBtYXkgd2FudCB0byBpbmNsdWRlICdhY3Rpb24nIGFuZCAndGVtcGxhdGUnIHBhcmFtZXRlcnM8YnI+CiAgICAgICAgPHByZT57Y29udGVudF9tb2R1bGUgbW9kdWxlPUVDQjIgZmllbGQ9ZHJvcGRvd24gYmxvY2s9ZHJvcGRvd24yIGxhYmVsPSJEcm9wZG93biAtIGZyb20gbW9kdWxlIiBtb2Q9TElTRVByb2plY3RzIHRlbXBsYXRlX3N1bW1hcnk9Iml0ZW1fZHJvcGRvd24iIHBhZ2VsaW1pdD0yfTwvcHJlPgogICAgPC9saT4KICAgIDxsaT5maXJzdF92YWx1ZSAob3B0aW9uYWwpIC0gc2V0cyBhbiB0ZXh0IHN0aW5nIGZvciB0aGUgZmlyc3QgYmxhbmsgdmFsdWUsIGUuZy4gJy0tLSBzZWxlY3Qgb25lIC0tLSc8L2xpPgogICAgPGxpPm11bHRpcGxlIChvcHRpb25hbCkgLSBhZGQgbXVsdGlwbGUgb3B0aW9uIHNlbGVjdCBzdXBwb3J0PC9saT4KICAgIDxsaT5zaXplIChvcHRpb25hbCkgLSBtdWx0aXBsZSBlbmFibGVkIG9ubHk8L2xpPgogICAgPGxpPmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yPC9saT4KICAgIDxsaT5jb21wYWN0IChvcHRpb25hbCkgLSBkZWZhdWx0OmZhbHNlIC0gaWYgc2V0LCBhIHN1bW1hcnkgb2YgdGhlIHNlbGVjdGVkIG9wdGlvbnMgaXMgZGlzcGxheWVkIGFuZCB0aGUgZnVsbCBzZWxlY3QgaXMgc2hvd24vaGlkZGVuIHdoZW4gJ2VkaXQvaGlkZScgaXMgY2xpY2tlZDwvbGk+CjwvdWw+Cjxicj4KCgoKPHA+PHN0cm9uZz5kcm9wZG93bl9mcm9tX3VkdDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRyb3Bkb3duX2Zyb21fdWR0IiBibG9jaz0idGVzdDIiIGxhYmVsPSJHYWxsZXJ5IiB1ZHQ9Im15Y3VzdG9tdWR0IiAgZmlyc3RfdmFsdWU9Ij1zZWxlY3Q9In08L3A+CjxwPk91cHV0IGZyb20gVURUIG11c3QgYmUgYXJyYXkoKSAtIGV4YW1wbGU6IHJldHVybiBhcnJheSgibGFiZWwiPT4idmFsdWUiLCAibGFiZWwgMiAiPT4idmFsdWUgMiIpPC9wPgo8cD5QYXJhbWV0ZXJzOgp1ZHQgKHJlcXVpcmVkKSAtIHVkdCBuYW1lPGJyPgpmaXJzdF92YWx1ZSAob3B0aW9uYWwpIDxicj4KbXVsdGlwbGUgKG9wdGlvbmFsKSAtIGFkZCBtdWx0aXBsZSBvcHRpb24gc2VsZWN0IHN1cHBvcnQ8YnI+CnNpemUgKG9wdGlvbmFsKSAtIG11bHRpcGxlIGVuYWJsZWQgb25seTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3I8YnI+CmNvbXBhY3QgKG9wdGlvbmFsKSAtIGRlZmF1bHQ6ZmFsc2UgLSBpZiBzZXQsIGEgc3VtbWFyeSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpcyBkaXNwbGF5ZWQgYW5kIHRoZSBmdWxsIHNlbGVjdCBpcyBzaG93bi9oaWRkZW4gd2hlbiAnZWRpdC9oaWRlJyBpcyBjbGlja2VkCjwvcD4KPHA+PHN0cm9uZz5FeGFtcGxlcyBVRFQ8L3N0cm9uZz46Cjxicj4KPGEgaHJlZj0iaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20va3V6bWFueS82Nzc5YzE5M2I4MTA0YWE2YWJmZSI+R2FsbGVyeSBsaXN0IGZyb20gR2FsbGVyeSBtb2R1bGU8L2E+IDxicj4KPGEgaHJlZj0iaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20va3V6bWFueS80NjQyNzZlMTZmM2I3NGMwNzU1NSI+R3JvdXAgbGlzdCBmcm9tIEZFVTwvYT4gPGJyPgo8YSBocmVmPSJodHRwczovL2dpc3QuZ2l0aHViLmNvbS9rdXptYW55LzUxNTgzYzY0MzljYjA0MTY3OWE2Ij5Vc2VycyBsaXN0IGZyb20gRkVVPC9hPgo8L3A+PGJyPgoKCjxwPjxzdHJvbmc+ZHJvcGRvd25fZnJvbV9jdXN0b21nczwvc3Ryb25nPjwvcD4KPHA+UHJvdmlkZXMgYSBzaW5nbGUgb3IgbXVsdGlwbGUgc2VsZWN0IHVzaW5nIHRoZSBjb250ZW50IHNldCBpbiBhIEN1c3RvbUdTIE1vZHVsZSBmaWVsZC48L3A+CjxwPlJlcXVpcmVzIHRoZSBDdXN0b21HUyBtb2R1bGUgYW5kIHRvIGhhdmUgYSBmaWVsZCBvZiB0eXBlICd0ZXh0IGFyZWEnLjwvcD4KPHA+RXhhbXBsZToKICAgICAge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2Ryb3Bkb3duX2Zyb21fY3VzdG9tZ3MnIGN1c3RvbWdzX2ZpZWxkPSdTZWN0aW9uX1N0eWxlcycgYmxvY2s9c3R5bGUxIGxhYmVsPSdTZWN0aW9uIDEgTGF5b3V0IFN0eWxlJyBhc3NpZ249c3R5bGUxfTwvcD4KPHA+UGFyYW1ldGVyczo8L3A+Cjx1bD4KICAgPGxpPmN1c3RvbWdzX2ZpZWxkIChyZXF1aXJlZCkgLSBuYW1lIG9mIGN1c3RvbWdzX2ZpZWxkIHRvIHJldHJpZXZlICh3aXRoIHVuZGVyc2NvcmVzIG5vdCBzcGFjZXMpPC9saT4KICAgPGxpPmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBvZiB0aGUgZmllbGQ8L2xpPgogICA8bGk+bXVsdGlwbGUgKG9wdGlvbmFsKSAtIGFuIG9wdGlvbiBpZiBzZXQsIHRvIG91cHV0IGEgbXVsdGktc2VsZWN0IGJveCByYXRoZXIgdGhhbiBhIHNpbmdsZSBzZWxlY3QgZHJvd25kb3duPC9saT4KICAgPGxpPnNpemUgKG9wdGlvbmFsKSAtIGFuIG9wdGlvbiB0byBzZXQgdGhlIHNpemUgb2YgYSBtdWx0aS1zZWxlY3QgYm94PC9saT4KICAgPGxpPmNvbXBhY3QgKG9wdGlvbmFsKSAtIGRlZmF1bHQ6ZmFsc2UgLSBpZiBzZXQsIGEgc3VtbWFyeSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpcyBkaXNwbGF5ZWQgYW5kIHRoZSBmdWxsIHNlbGVjdCBpcyBzaG93bi9oaWRkZW4gd2hlbiAnZWRpdC9oaWRlJyBpcyBjbGlja2VkPC9saT4KPC91bD4KPGJyPgoKCgo8cD48c3Ryb25nPmNoZWNrYm94PC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY2hlY2tib3giIGJsb2NrPSJ0ZXN0MTEiIGxhYmVsPSJDaGVja2JveCIgZGVmYXVsdF92YWx1ZT0iMSJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCk8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPm1vZHVsZV9saW5rPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0ibW9kdWxlX2xpbmsiIGxhYmVsPSJNb2R1bGUgZWRpdCIgYmxvY2s9InRlc3QzIiBtb2Q9IkNhdGFsb2dlciIgdGV4dD0iRWRpdCBjYXRhbG9nIiB9PC9wPgo8cD5QYXJhbWV0ZXJzOgptb2QgKHJlcXVpcmVkKSA8YnI+CnRleHQgKHJlcXVpcmVkKSA8YnI+CnRhcmdldCAob3B0aW9uYWwpIC0gZGVmYXVsdCBfc2VsZjxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+bGluazwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImxpbmsiIGxhYmVsPSJTZWFyY2giIGJsb2NrPSJ0ZXN0NCIgdGFyZ2V0PSJfYmxhbmsiIGxpbms9Imh0dHA6Ly93d3cuYmluZy5jb20iIHRleHQ9ImJpbmcgc2VhcmNoIn08L3A+CjxwPlBhcmFtZXRlcnM6CmxpbmsgKHJlcXVpcmVkKSA8YnI+CnRleHQgKHJlcXVpcmVkKSA8YnI+CnRhcmdldCAob3B0aW9uYWwpIC0gZGVmYXVsdCBfc2VsZjxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+dGltZXBpY2tlcjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InRpbWVwaWNrZXIiIGxhYmVsPSJUaW1lIiBibG9jaz0idGVzdDQ1In08L3A+CjxwPlBhcmFtZXRlcnM6CnNpemUgKG9wdGlvbmFsKSBkZWZhdWx0IDEwMDxicj4KdGltZV9mb3JtYXQgKG9wdGlvbmFsKSBkZWZhdWx0IEhIOjpzczxicj4KbWF4X2xlbmd0aCAob3B0aW9uYWwpIGRlZmF1bHQgMTA8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmRhdGVwaWNrZXI8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJkYXRlcGlja2VyIiBsYWJlbD0iRGF0ZSIgYmxvY2s9InRlc3Q0NCIgY2hhbmdlX3llYXI9MSB5ZWFyX3JhbmdlPScxOTkwOjIwNTAnfTwvcD4KPHA+UGFyYW1ldGVyczoKc2l6ZSAob3B0aW9uYWwpIGRlZmF1bHQgMTAwPGJyPgpkYXRlX2Zvcm1hdCAob3B0aW9uYWwpIGRlZmF1bHQgeXktbW0tZGQ8YnI+CnRpbWUgKG9wdGlvbmFsKSAtIGFkZCB0aW1lIHBpY2tlciBkZWZhdWx0IDA8YnI+CnRpbWVfZm9ybWF0IChvcHRpb25hbCkgZGVmYXVsdCBISDo6c3M8YnI+Cm1heF9sZW5ndGggKG9wdGlvbmFsKSBkZWZhdWx0IDEwIDxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3I8YnI+CmNoYW5nZV9tb250aCBib29sZWFuIChvcHRpb25hbCkgLSBkZWZhdWx0OiBmYWxzZS4gV2hldGhlciB0aGUgbW9udGggc2hvdWxkIGJlIHJlbmRlcmVkIGFzIGEgZHJvcGRvd24gaW5zdGVhZCBvZiB0ZXh0Ljxicj4KY2hhbmdlX3llYXIgYm9vbGVhbiAob3B0aW9uYWwpIC0gZGVmYXVsdDogZmFsc2UuIFdoZXRoZXIgdGhlIHllYXIgc2hvdWxkIGJlIHJlbmRlcmVkIGFzIGEgZHJvcGRvd24gaW5zdGVhZCBvZiB0ZXh0LiBVc2UgdGhlIHllYXJfcmFuZ2Ugb3B0aW9uIHRvIGNvbnRyb2wgd2hpY2ggeWVhcnMgYXJlIG1hZGUgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uPGJyPgp5ZWFyX3JhbmdlIHN0cmluZyAob3B0aW9uYWwpIC0gZGVmYXVsdDogImMtMTA6YysxMCIuIFRoZSByYW5nZSBvZiB5ZWFycyBkaXNwbGF5ZWQgaW4gdGhlIHllYXIgZHJvcC1kb3duOiBlaXRoZXIgcmVsYXRpdmUgdG8gdG9kYXkncyB5ZWFyICgiLW5uOitubiIpLCByZWxhdGl2ZSB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHllYXIgKCJjLW5uOmMrbm4iKSwgYWJzb2x1dGUgKCJubm5uOm5ubm4iKSwgb3IgY29tYmluYXRpb25zIG9mIHRoZXNlIGZvcm1hdHMgKCJubm5uOi1ubiIpLiAKPC9wPjxicj4KCjxwPjxzdHJvbmc+aW5wdXQ8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJpbnB1dCIgbGFiZWw9IlRleHQiIGJsb2NrPSJ0ZXN0NSIgc2l6ZT01NSBtYXhfbGVuZ3RoPTU1IGRlZmF1bHRfdmFsdWU9ImZpbGwgaXQifTwvcD4KPHA+UGFyYW1ldGVyczoKc2l6ZSAob3B0aW9uYWwpIGRlZmF1bHQgMzA8YnI+Cm1heF9sZW5ndGggKG9wdGlvbmFsKSBkZWZhdWx0IDI1NSA8YnI+CmRlZmF1bHRfdmFsdWUgKG9wdGlvbmFsKSAtIGRlZmF1bHQgdmFsdWUgZm9yIGlucHV0PGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz50ZXh0YXJlYTwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InRleHRhcmVhIiBsYWJlbD0iVGV4dGFyZWEiIGJsb2NrPSJ0ZXN0NiIgcm93cz0xMCBjb2xzPTQwIGRlZmF1bHRfdmFsdWU9ImZpbGwgaXQifTwvcD4KPHA+UGFyYW1ldGVyczoKcm93cyAob3B0aW9uYWwpIGRlZmF1bHQgMjA8YnI+CmNvbHMgKG9wdGlvbmFsKSBkZWZhdWx0IDgwIDxicj4KZGVmYXVsdF92YWx1ZSAob3B0aW9uYWwpIC0gZGVmYXVsdCB2YWx1ZSBmb3IgdGV4dGFyZWE8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmVkaXRvciAodGV4dGFyZWEgd2l0aCB3eXNpd3lnKTwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImVkaXRvciIgbGFiZWw9IlRleHRhcmVhIiBibG9jaz0idGVzdDciIHJvd3M9MTAgY29scz00MCBkZWZhdWx0X3ZhbHVlPSJmaWxsIGl0In08L3A+CjxwPlBhcmFtZXRlcnM6CnJvd3MgKG9wdGlvbmFsKSBkZWZhdWx0IDIwPGJyPgpjb2xzIChvcHRpb25hbCkgZGVmYXVsdCA4MCA8YnI+CmRlZmF1bHRfdmFsdWUgKG9wdGlvbmFsKSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRleHRhcmVhPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz50ZXh0IDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InRleHQiIGxhYmVsPSJUZXh0IiBibG9jaz0idGVzdDgiIHRleHQ9IkhlbGxvIHdvcmQhIn08L3A+CjxwPlBhcmFtZXRlcnM6CnRleHQgKHJlcXVpcmVkKSB0ZXh0IGluIGFkbWluIChhZGQgaW5mb3JtYXRpb24gZm9yIHVzZXJzKTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+cGFnZXMgPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0icGFnZXMiIGxhYmVsPSJQYWdlIiBibG9jaz0idGVzdDEwIn08L3A+CjxwPlBhcmFtZXRlcnM6CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmhyIChob3Jpem9udGFsIGxpbmUpPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iaHIiIGxhYmVsPSJPdGhlciBibG9ja3MiIGJsb2NrPSJibG9ja25hbWUifTxwPgpQYXJhbWV0ZXJzOgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKCjxwPjxzdHJvbmc+c29ydGFibGVsaXN0PC9zdHJvbmc+PC9wPgo8cD5UaGUgZWRpdG9yIGNhbiBzZWxlY3QgYW5kIHJlb3JkZXIgaXRlbXMgZnJvbSBhIGxpc3QuIEVpdGhlciB0aGUgJ3ZhbHVlcycsICd1ZHQnIG9yICdtb2QnIHBhcmFtZXRlciBtdXN0IGJlIHVzZWQgKCopLgo8cD5QYXJhbWV0ZXJzOjwvcD4KPHVsPgogICAgPGxpPnZhbHVlcyAoKikgLSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mICdUZXh0JyBvciAnVGV4dD12YWx1ZScuIGUuZzo8YnI+CiAgICAgICAgPHByZT57Y29udGVudF9tb2R1bGUgbW9kdWxlPUVDQjIgZmllbGQ9c29ydGFibGVsaXN0IGJsb2NrPSJ0ZXN0NSIgbGFiZWw9IkZydWl0IiB2YWx1ZXM9IkFwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UsR3JlZW49Z3JlZW4sdmFsdWU9TGFiZWwiIGZpcnN0X3ZhbHVlPSJzZWxlY3QgZnJ1aXQifTwvcHJlPgogICAgPC9saT4KICAgIDxsaT51ZHQgKCopIC0gbmFtZSBvZiB1ZHQgdGhhdCByZXR1cm5zIGFuIGFycmF5IGluIHRoZSBmb3JtYXQgJ3ZhbHVlJyA9PiAnTGFiZWwnPGJyPgogICAgICAgIDxwcmU+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT1FQ0IyIGZpZWxkPXNvcnRhYmxlbGlzdCBibG9jaz0idGVzdHNvcnRhYmxlbGlzdCIgbGFiZWw9IkNob29zZSBmcnVpdCIgdWR0PSJteXVkdCJ9PC9wcmU+CiAgICA8L2xpPgogICAgPGxpPm1vZCAoKikgLSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBtb2R1bGUgdG8gY2FsbCB0byBnZXQgdGhlIG9wdGlvbiB2YWx1ZXMuIFJldHVybmVkIHZhbHVlcyBzaG91bGQgYmUgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mICdUZXh0JyBvciAnVGV4dD12YWx1ZScgQXMgYWJvdmUuIEFueSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIGFsc28gcGFzc2VkIG9udG8gdGhlIHNwZWNpZmllZCBtb2R1bGUuIFlvdSBtYXkgd2FudCB0byBpbmNsdWRlICdhY3Rpb24nIGFuZCAndGVtcGxhdGUnIHBhcmFtZXRlcnMuIGUuZzo8YnI+CiAgICAgICAgPHByZT57Y29udGVudF9tb2R1bGUgbW9kdWxlPUVDQjIgZmllbGQ9c29ydGFibGVsaXN0IGJsb2NrPXNvcnRhYmxlbGlzdDIgbGFiZWw9IlNvcnRhYmxlIExpc3QgLSBmcm9tIG1vZHVsZSIgbW9kPUxJU0VQcm9qZWN0cyB0ZW1wbGF0ZV9zdW1tYXJ5PSdpdGVtX2Ryb3Bkb3duJyBwYWdlbGltaXQ9Mn08L3ByZT4KICAgIDwvbGk+CiAgICA8bGk+Zmlyc3RfdmFsdWUgKG9wdGlvbmFsKTwvbGk+CiAgICA8bGk+bGFiZWxfbGVmdCAob3B0aW9uYWwpPC9saT4KICAgIDxsaT5sYWJlbF9yaWdodCAob3B0aW9uYWwpPC9saT4KICAgIDxsaT5tYXhfbnVtYmVyIChvcHRpb25hbCkgLSBsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNlbGVjdGVkPC9saT4KICAgIDxsaT5yZXF1aXJlZF9udW1iZXIgKG9wdGlvbmFsKSAtIHNldHMgYSBzcGVjaWZpYyBudW1iZXIgb2YgaXRlbXMgdGhhdCBtdXN0IGJlIHNlbGVjdGVkIChvciBub25lKTwvbGk+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvdWw+Cjxicj4KCgo8cD48c3Ryb25nPnJhZGlvPC9zdHJvbmc+IDwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InJhZGlvIiBibG9jaz0idGVzdDE3IiBsYWJlbD0iRnJ1aXQiIHZhbHVlcz0iQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxLaXdpZnJ1aXQ9a2l3aWZydWl0IiBkZWZhdWx0X3ZhbHVlPSJPcmFuZ2UifTwvcD4KPHA+UGFyYW1ldGVyczoKdmFsdWVzIChyZXF1aXJlZCkgLSBjb21tYSBzZXBhcmF0ZWQuIEV4YW1wbGU6IEFwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UsS2l3aWZydWl0PWtpd2lmcnVpdDxicj4KZGVmYXVsdF92YWx1ZSAob3B0aW9uYWwpIC0gZGVmYXVsdCBpcyBmaXJzdCBjaG9pY2UgLSBzZXQgdG8gZGVmYXVsdCB2YWx1ZSBlLmcuICJPcmFuZ2UiCmlubGluZSAob3B0aW9uYWwpIC0gaWYgc2V0IGRpc3BsYXlzIGFkbWluIHJhZGlvIGJ1dHRvbnMgaW5saW5lPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5oaWRkZW48L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGJsb2NrPSd0ZXN0MThoaWRkZW4nIGFzc2lnbj0ndGVzdGhpZGRlbicgZmllbGQ9J2hpZGRlbicgdmFsdWU9J21hcmtlcnZhbHVlJ308YnI+CkNhbiBiZSB1c2VkIHRvIHNldCBhIHBhZ2UgYXR0cmlidXRlIHRoYXQgY2FuIHRoZW4gYmUgYWNjZXNzZWQgKGUuZy4gZnJvbSBhIE5hdmlnYXRvci1UZW1wbGF0ZSksIHVzaW5nIHtwYWdlX2F0dHIgcGFnZT0kbm9kZS0+YWxpYXMga2V5PSd0ZXN0aGlkZGVuJ308L3A+CjxwPlBhcmFtZXRlcnM6CnZhbHVlIChyZXF1aXJlZCkgLSBoaWRkZW4gdmFsdWUgdG8gYmUgc2F2ZWQ8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmZpZWxkc2V0X3N0YXJ0PC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZmllbGRzZXRfc3RhcnQnIGxhYmVsPScmIG5ic3A7JyBibG9jaz0ndGVzdDE5ZmllbGRzZXQnIGFzc2lnbj0ndGVzdDE5ZmllbGRzZXQnIGxlZ2VuZD0nRmllbGRzZXQgVGVzdCBMZWdlbmQnIGRlc2NyaXB0aW9uPSdDYW4gYWRkIGEgZGVzY3JpcHRpb24gaW4gaGVyZSd9PGJyPgpDcmVhdGVzIHRoZSBzdGFydCBvZiBhIGZpZWxkc2V0IGZvciBncm91cGluZyByZWxhdmFudCBhZG1pbiBmaWVsZHMgdG9nZXRoZXIuIE5vdGU6IGEgbWF0Y2hpbmcgJ2ZpZWxkc2V0X2VuZCcgYmxvY2sgaXMgcmVxdWlyZWQgZm9yIGVhY2ggZmllbGRzZXRfc3RhcnQuPGJyPgpUSVA6IHNldCBsYWJlbD0nJiBuYnNwOycgdG8gbm90IHNob3cgdGhlIGZpZWxkIGxhYmVsLjwvcD4KPHA+UGFyYW1ldGVyczoKbGVnZW5kIChvcHRpb25hbCkgLSBhZGRzIGFuIG9wdGlvbmFsIGxlZ2VuZCAoZGVmYXVsdCA9IG5vIGxlZ2VuZCk8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmZpZWxkc2V0X2VuZDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2ZpZWxkc2V0X2VuZCcgbGFiZWw9JyYgbmJzcDsnIGJsb2NrPSd0ZXN0MTlmaWVsZHNldGVuZCcgYXNzaWduPSd0ZXN0MTlmaWVsZHNldGVuZCcgfTxicj4KQ3JlYXRlcyB0aGUgZW5kIG9mIGEgZmllbGRzZXQgZm9yIGdyb3VwaW5nIHJlbGF2YW50IGFkbWluIGZpZWxkcyB0b2dldGhlci4gTm90ZTogYSBtYXRjaGluZyAnZmllbGRzZXRfc3RhcnQnIGJsb2NrIGlzIHJlcXVpcmVkIGZvciBlYWNoIGZpZWxkc2V0X2VuZC48YnI+ClRJUDogc2V0IGxhYmVsPScmIG5ic3A7JyB0byBub3Qgc2hvdyB0aGUgZmllbGQgbGFiZWwuCjwvcD48YnI+CgoKPHA+PHN0cm9uZz5nYWxsZXJ5X3BpY2tlcjwvc3Ryb25nPjwvcD4KPHA+UHJvdmlkZXMgYSBnYWxsZXJ5IHBpY2tlciBmb3IgdGhlIEdhbGxlcnkgbW9kdWxlLjwvcD4KPHA+RXhhbXBsZToKICAgICAge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2dhbGxlcnlfcGlja2VyJyBibG9jaz1wYWdlVG9wR2FsbGVyeSBsYWJlbD0nUGFnZSBUb3AgR2FsbGVyeScgZGlyPSdwYWdlLXRvcC1nYWxsZXJpZXMnfTwvcD4KPHA+UGFyYW1ldGVyczo8L3A+Cjx1bD4KICAgPGxpPmRpciAob3B0aW9uYWwpIC0gb25seSByZXR1cm5zIGdhbGxlcmllcyB0aGF0IGFyZSBzdWItZ2FsbGVyaWVzIG9mIHRoaXMgZ2FsbGVyeSBkaXIsIGRlZmF1bHQgaXMgYWxsIGdhbGxlcmllcywgZXhjbHVkaW5nIGRlZmF1bHQgdG9wIGxldmVsIGdhbGxlcnk8L2xpPgogICA8bGk+ZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZpZWxkPC9saT4KPC91bD4KPGJyPgoKCjxwPjxzdHJvbmc+aW5wdXRfcmVwZWF0ZXI8L3N0cm9uZz48L3A+CjxwPlByb3ZpZGVzIG9uZSBvciBtb3JlIHRleHQgaW5wdXRzIHRoYXQgY2FuIGJlIGFkZGVkIG9yIHJlbW92ZWQgYnkgdGhlIGVkaXRvci48L3A+CjxwPlRoZSBjb250ZW50IGJsb2NrIG91dHB1dCBpcyBhIHN0cmluZyB3aXRoIGVhY2ggaW5wdXQgZmllbGQncyBjb250ZW50cyBkZWxpbWl0ZXIgYnkgJ3x8Jy4gVG8gbWFrZSB0aGUgb3V0cHV0IGEgbW9yZSB1c2VmdWwgYXJyYXkgdXNlICdleHBsb2RlJywgZS5nLiB7Inx8InxleHBsb2RlOiRjb250ZW50X2Jsb2NrX25hbWV9PC9wPgo8cD5FeGFtcGxlOgogICAgICB7JGlucHV0X3JlcGVhdGVyX3Rlc3Q9Inx8InxleHBsb2RlOiJ7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0naW5wdXRfcmVwZWF0ZXInIGxhYmVsPSdUZXN0IDIyOiBpbnB1dF9yZXBlYXRlcicgYmxvY2s9J3Rlc3QyMicgc2l6ZT01MCBtYXhfbGVuZ3RoPTI1NSBkZXNjcmlwdGlvbj0nUHJlc3MgKCspIGFuZCAoLSkgdG8gYWRkIGFuZCByZW1vdmUgYWRkaXRpb25hbCBpbnB1dCBmaWVsZHMnfSIgc2NvcGU9Z2xvYmFsfTwvcD4KPHA+VG8gdXNlOiB7JGlucHV0X3JlcGVhdGVyX3Rlc3R8cHJpbnRfcn08L3A+Cjxicj4KCgo8cD48c3Ryb25nPmltYWdlPC9zdHJvbmc+IDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij5uZXc8L3NwYW4+PC9wPgo8cD5EaXNwbGF5cyBhbiBpbWFnZSBvbiBhbiBhZG1pbiBwYWdlIG9ubHkuIFVzZWZ1bGx5IHRvIHByb3ZpZGUgZXh0cmEgZ3VpZGFuY2UgdG8gZWRpdG9ycy48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJpbWFnZSIgbGFiZWw9IlRlc3QgMjM6IGltYWdlIiBibG9jaz0idGVzdDIzIiBpbWFnZT0naW1hZ2VzL3Rlc3QtaW1hZ2UtaGVyZS5qcGcnIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUgLSB0aGlzIGlzIGFuIGFkbWluIG9ubHkgaW1hZ2UifTwvcD4KPHA+UGFyYW1ldGVyczoKaW1hZ2UgKHJlcXVpcmVkKSAtIHBhdGggYW5kIGZpbGVuYW1lIHJlbGF0aXZlIHRvIHRoZSB1cGxvYWRzIGRpcmVjdG9yeTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCgoKRU9EOwoKCg==]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lang/LICENCE.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBNb2R1bGU6IEVDQjIgLSBFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAyDQojIEF1dGhvcjogQ2hyaXMgVGF5bG9yDQojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51aw0KIyBMaWNlbmNlOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMNCiMgICAgICAgICAgc2VlIC9FQ0IyL2xhbmcvTElDRU5DRS50eHQgb3IgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIEEgZm9yayBvZiBtb2R1bGU6IEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIChFQ0IpDQojIE9yaWdpbmFsIEF1dGhvcjogWmRlbm8gS3V6bWFueSAoemRlbm9Aa3V6bWFueS5iaXopIC8ga3V6bWFueS5iaXogIC8gdHdpdHRlci5jb20va3V6bWFueQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQ0KIyBQcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMgTW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvZWNiMg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzDQojIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOw0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLg0KIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLg0KIyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UNCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcNCg0KIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4NCiBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMNCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlDQoNCiAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3INCnNvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcy4NCg0KICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQNCnRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuICBCeSBjb250cmFzdCwNCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvDQpzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBvZiBhIHByb2dyYW0tLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUNCnNvZnR3YXJlIGZvciBhbGwgaXRzIHVzZXJzLiAgV2UsIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHVzZSB0aGUNCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvDQphbnkgb3RoZXIgd29yayByZWxlYXNlZCB0aGlzIHdheSBieSBpdHMgYXV0aG9ycy4gIFlvdSBjYW4gYXBwbHkgaXQgdG8NCnlvdXIgcHJvZ3JhbXMsIHRvby4NCg0KICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90DQpwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91DQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yDQp0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdQ0Kd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcNCmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLg0KDQogIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gcHJldmVudCBvdGhlcnMgZnJvbSBkZW55aW5nIHlvdQ0KdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlDQpjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYNCnlvdSBtb2RpZnkgaXQ6IHJlc3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbSBvZiBvdGhlcnMuDQoNCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcg0KZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgcGFzcyBvbiB0byB0aGUgcmVjaXBpZW50cyB0aGUgc2FtZQ0KZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUNCm9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5DQprbm93IHRoZWlyIHJpZ2h0cy4NCg0KICBEZXZlbG9wZXJzIHRoYXQgdXNlIHRoZSBHTlUgR1BMIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6DQooMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZQ0KZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4NCg0KICBGb3IgdGhlIGRldmVsb3BlcnMnIGFuZCBhdXRob3JzJyBwcm90ZWN0aW9uLCB0aGUgR1BMIGNsZWFybHkgZXhwbGFpbnMNCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQNCmF1dGhvcnMnIHNha2UsIHRoZSBHUEwgcmVxdWlyZXMgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBiZSBtYXJrZWQgYXMNCmNoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0bw0KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4NCg0KICBTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNzIHRvIGluc3RhbGwgb3IgcnVuDQptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXINCmNhbiBkbyBzby4gIFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYWltIG9mDQpwcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuICBUaGUgc3lzdGVtYXRpYw0KcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8NCnVzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1vc3QgdW5hY2NlcHRhYmxlLiAgVGhlcmVmb3JlLCB3ZQ0KaGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQTCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlDQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQ0Kc3RhbmQgcmVhZHkgdG8gZXh0ZW5kIHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zDQpvZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1c2Vycy4NCg0KICBGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLg0KU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mDQpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bw0KYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNvdWxkDQptYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMIGFzc3VyZXMgdGhhdA0KcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuDQoNCiAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQNCm1vZGlmaWNhdGlvbiBmb2xsb3cuDQoNCiAgICAgICAgICAgICAgICAgICAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMNCg0KICAwLiBEZWZpbml0aW9ucy4NCg0KICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4NCg0KICAiQ29weXJpZ2h0IiBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3MgdGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZg0Kd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4NCg0KICAiVGhlIFByb2dyYW0iIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMNCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZA0KInJlY2lwaWVudHMiIG1heSBiZSBpbmRpdmlkdWFscyBvciBvcmdhbml6YXRpb25zLg0KDQogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsNCmluIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbg0KZXhhY3QgY29weS4gIFRoZSByZXN1bHRpbmcgd29yayBpcyBjYWxsZWQgYSAibW9kaWZpZWQgdmVyc2lvbiIgb2YgdGhlDQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4NCg0KICBBICJjb3ZlcmVkIHdvcmsiIG1lYW5zIGVpdGhlciB0aGUgdW5tb2RpZmllZCBQcm9ncmFtIG9yIGEgd29yayBiYXNlZA0Kb24gdGhlIFByb2dyYW0uDQoNCiAgVG8gInByb3BhZ2F0ZSIgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dA0KcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcg0KaW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhDQpjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLA0KZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUNCnB1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4NCg0KICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyDQpwYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuICBNZXJlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyIHRocm91Z2gNCmEgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5vdCBjb252ZXlpbmcuDQoNCiAgQW4gaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2UgZGlzcGxheXMgIkFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMiDQp0byB0aGUgZXh0ZW50IHRoYXQgaXQgaW5jbHVkZXMgYSBjb252ZW5pZW50IGFuZCBwcm9taW5lbnRseSB2aXNpYmxlDQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikNCnRlbGxzIHRoZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChleGNlcHQgdG8gdGhlDQpleHRlbnQgdGhhdCB3YXJyYW50aWVzIGFyZSBwcm92aWRlZCksIHRoYXQgbGljZW5zZWVzIG1heSBjb252ZXkgdGhlDQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZg0KdGhlIGludGVyZmFjZSBwcmVzZW50cyBhIGxpc3Qgb2YgdXNlciBjb21tYW5kcyBvciBvcHRpb25zLCBzdWNoIGFzIGENCm1lbnUsIGEgcHJvbWluZW50IGl0ZW0gaW4gdGhlIGxpc3QgbWVldHMgdGhpcyBjcml0ZXJpb24uDQoNCiAgMS4gU291cmNlIENvZGUuDQoNCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsNCmZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gICJPYmplY3QgY29kZSIgbWVhbnMgYW55IG5vbi1zb3VyY2UNCmZvcm0gb2YgYSB3b3JrLg0KDQogIEEgIlN0YW5kYXJkIEludGVyZmFjZSIgbWVhbnMgYW4gaW50ZXJmYWNlIHRoYXQgZWl0aGVyIGlzIGFuIG9mZmljaWFsDQpzdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mDQppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdA0KaXMgd2lkZWx5IHVzZWQgYW1vbmcgZGV2ZWxvcGVycyB3b3JraW5nIGluIHRoYXQgbGFuZ3VhZ2UuDQoNCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXINCnRoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mDQpwYWNrYWdpbmcgYSBNYWpvciBDb21wb25lbnQsIGJ1dCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGF0IE1ham9yDQpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQNCk1ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbg0KaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybS4gIEENCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudA0KKGtlcm5lbCwgd2luZG93IHN5c3RlbSwgYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbQ0KKGlmIGFueSkgb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgd29yayBydW5zLCBvciBhIGNvbXBpbGVyIHVzZWQgdG8NCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0Lg0KDQogIFRoZSAiQ29ycmVzcG9uZGluZyBTb3VyY2UiIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwNCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUNCndvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8NCmNvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHdvcmsncw0KU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQ0KcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0DQp3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHdvcmsuICBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UNCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yDQp0aGUgd29yaywgYW5kIHRoZSBzb3VyY2UgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZHluYW1pY2FsbHkNCmxpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLA0Kc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UNCnN1YnByb2dyYW1zIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29yay4NCg0KICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzDQpjYW4gcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIENvcnJlc3BvbmRpbmcNClNvdXJjZS4NCg0KICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQNCnNhbWUgd29yay4NCg0KICAyLiBCYXNpYyBQZXJtaXNzaW9ucy4NCg0KICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZg0KY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQNCmNvbmRpdGlvbnMgYXJlIG1ldC4gIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0ZWQNCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhDQpjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMNCmNvbnRlbnQsIGNvbnN0aXR1dGVzIGEgY292ZXJlZCB3b3JrLiAgVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyDQpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4NCg0KICBZb3UgbWF5IG1ha2UsIHJ1biBhbmQgcHJvcGFnYXRlIGNvdmVyZWQgd29ya3MgdGhhdCB5b3UgZG8gbm90DQpjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucw0KaW4gZm9yY2UuICBZb3UgbWF5IGNvbnZleSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZQ0Kb2YgaGF2aW5nIHRoZW0gbWFrZSBtb2RpZmljYXRpb25zIGV4Y2x1c2l2ZWx5IGZvciB5b3UsIG9yIHByb3ZpZGUgeW91DQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoDQp0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJpYWwgZm9yIHdoaWNoIHlvdSBkbw0Kbm90IGNvbnRyb2wgY29weXJpZ2h0LiAgVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3Jrcw0KZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbg0KYW5kIGNvbnRyb2wsIG9uIHRlcm1zIHRoYXQgcHJvaGliaXQgdGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mDQp5b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91Lg0KDQogIENvbnZleWluZyB1bmRlciBhbnkgb3RoZXIgY2lyY3Vtc3RhbmNlcyBpcyBwZXJtaXR0ZWQgc29sZWx5IHVuZGVyDQp0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuICBTdWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTANCm1ha2VzIGl0IHVubmVjZXNzYXJ5Lg0KDQogIDMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuDQoNCiAgTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsDQptZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUNCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcg0Kc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaA0KbWVhc3VyZXMuDQoNCiAgV2hlbiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJpZA0KY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uDQppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvDQp0aGUgY292ZXJlZCB3b3JrLCBhbmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGltaXQgb3BlcmF0aW9uIG9yDQptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncw0KdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mDQp0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLg0KDQogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuDQoNCiAgWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91DQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZA0KYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOw0Ka2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55DQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7DQprZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbA0KcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uDQoNCiAgWW91IG1heSBjaGFyZ2UgYW55IHByaWNlIG9yIG5vIHByaWNlIGZvciBlYWNoIGNvcHkgdGhhdCB5b3UgY29udmV5LA0KYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4NCg0KICA1LiBDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLg0KDQogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8NCnByb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlDQp0ZXJtcyBvZiBzZWN0aW9uIDQsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoNCg0KICAgIGEpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBtb2RpZmllZA0KICAgIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4NCg0KICAgIGIpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IGl0IGlzDQogICAgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uDQogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bw0KICAgICJrZWVwIGludGFjdCBhbGwgbm90aWNlcyIuDQoNCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcw0KICAgIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiAgVGhpcw0KICAgIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3DQogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywNCiAgICByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBwYWNrYWdlZC4gIFRoaXMgTGljZW5zZSBnaXZlcyBubw0KICAgIHBlcm1pc3Npb24gdG8gbGljZW5zZSB0aGUgd29yayBpbiBhbnkgb3RoZXIgd2F5LCBidXQgaXQgZG9lcyBub3QNCiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0Lg0KDQogICAgZCkgSWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywgZWFjaCBtdXN0IGRpc3BsYXkNCiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUNCiAgICBpbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcywgeW91cg0KICAgIHdvcmsgbmVlZCBub3QgbWFrZSB0aGVtIGRvIHNvLg0KDQogIEEgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQNCndvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssDQphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLA0KaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbg0KImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvbXBpbGF0aW9uIGFuZCBpdHMgcmVzdWx0aW5nIGNvcHlyaWdodCBhcmUgbm90DQp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzDQpiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuICBJbmNsdXNpb24gb2YgYSBjb3ZlcmVkIHdvcmsNCmluIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyDQpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLg0KDQogIDYuIENvbnZleWluZyBOb24tU291cmNlIEZvcm1zLg0KDQogIFlvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zDQpvZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUNCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwNCmluIG9uZSBvZiB0aGVzZSB3YXlzOg0KDQogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdA0KICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgdGhlDQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bQ0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLg0KDQogICAgYikgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdA0KICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQ0KICAgIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzDQogICAgbG9uZyBhcyB5b3Ugb2ZmZXIgc3BhcmUgcGFydHMgb3IgY3VzdG9tZXIgc3VwcG9ydCBmb3IgdGhhdCBwcm9kdWN0DQogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQ0KICAgIGNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZQ0KICAgIHByb2R1Y3QgdGhhdCBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgb24gYSBkdXJhYmxlIHBoeXNpY2FsDQogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubw0KICAgIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcw0KICAgIGNvbnZleWluZyBvZiBzb3VyY2UsIG9yICgyKSBhY2Nlc3MgdG8gY29weSB0aGUNCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLg0KDQogICAgYykgQ29udmV5IGluZGl2aWR1YWwgY29waWVzIG9mIHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUNCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcw0KICAgIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kDQogICAgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkDQogICAgd2l0aCBzdWJzZWN0aW9uIDZiLg0KDQogICAgZCkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBieSBvZmZlcmluZyBhY2Nlc3MgZnJvbSBhIGRlc2lnbmF0ZWQNCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUNCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubw0KICAgIGZ1cnRoZXIgY2hhcmdlLiAgWW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZQ0KICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvDQogICAgY29weSB0aGUgb2JqZWN0IGNvZGUgaXMgYSBuZXR3b3JrIHNlcnZlciwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlDQogICAgbWF5IGJlIG9uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFydHkpDQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluDQogICAgY2xlYXIgZGlyZWN0aW9ucyBuZXh0IHRvIHRoZSBvYmplY3QgY29kZSBzYXlpbmcgd2hlcmUgdG8gZmluZCB0aGUNCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBzZXJ2ZXIgaG9zdHMgdGhlDQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzDQogICAgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRoZXNlIHJlcXVpcmVtZW50cy4NCg0KICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQNCiAgICB5b3UgaW5mb3JtIG90aGVyIHBlZXJzIHdoZXJlIHRoZSBvYmplY3QgY29kZSBhbmQgQ29ycmVzcG9uZGluZw0KICAgIFNvdXJjZSBvZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8NCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4NCg0KICBBIHNlcGFyYWJsZSBwb3J0aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQNCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlDQppbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuDQoNCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkNCnRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIHBlcnNvbmFsLCBmYW1pbHksDQpvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvciBpbmNvcnBvcmF0aW9uDQppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsDQpkb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBmYXZvciBvZiBjb3ZlcmFnZS4gIEZvciBhIHBhcnRpY3VsYXINCnByb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsICJub3JtYWxseSB1c2VkIiByZWZlcnMgdG8gYQ0KdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzDQpvZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdXNlcg0KYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiAgQSBwcm9kdWN0DQppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbA0KY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQNCnRoZSBvbmx5IHNpZ25pZmljYW50IG1vZGUgb2YgdXNlIG9mIHRoZSBwcm9kdWN0Lg0KDQogICJJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24iIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywNCnByb2NlZHVyZXMsIGF1dGhvcml6YXRpb24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5zdGFsbA0KYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQ0KYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoZSBpbmZvcm1hdGlvbiBtdXN0DQpzdWZmaWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250aW51ZWQgZnVuY3Rpb25pbmcgb2YgdGhlIG1vZGlmaWVkIG9iamVjdA0KY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UNCm1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLg0KDQogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yDQpzcGVjaWZpY2FsbHkgZm9yIHVzZSBpbiwgYSBVc2VyIFByb2R1Y3QsIGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBhcw0KcGFydCBvZiBhIHRyYW5zYWN0aW9uIGluIHdoaWNoIHRoZSByaWdodCBvZiBwb3NzZXNzaW9uIGFuZCB1c2Ugb2YgdGhlDQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhDQpmaXhlZCB0ZXJtIChyZWdhcmRsZXNzIG9mIGhvdyB0aGUgdHJhbnNhY3Rpb24gaXMgY2hhcmFjdGVyaXplZCksIHRoZQ0KQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQgdW5kZXIgdGhpcyBzZWN0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQNCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQ0KaWYgbmVpdGhlciB5b3Ugbm9yIGFueSB0aGlyZCBwYXJ0eSByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIGluc3RhbGwNCm1vZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFByb2R1Y3QgKGZvciBleGFtcGxlLCB0aGUgd29yayBoYXMNCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuDQoNCiAgVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYQ0KcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzDQpmb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkIGJ5IHRoZSByZWNpcGllbnQsIG9yIGZvcg0KdGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuICBBY2Nlc3MgdG8gYQ0KbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQNCmFkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZA0KcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUgbmV0d29yay4NCg0KICBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwNCmluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkNCmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluDQpzb3VyY2UgY29kZSBmb3JtKSwgYW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3INCnVucGFja2luZywgcmVhZGluZyBvciBjb3B5aW5nLg0KDQogIDcuIEFkZGl0aW9uYWwgVGVybXMuDQoNCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMNCkxpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4NCkFkZGl0aW9uYWwgcGVybWlzc2lvbnMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgZW50aXJlIFByb2dyYW0gc2hhbGwNCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQNCnRoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuICBJZiBhZGRpdGlvbmFsIHBlcm1pc3Npb25zDQphcHBseSBvbmx5IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5DQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5DQp0aGlzIExpY2Vuc2Ugd2l0aG91dCByZWdhcmQgdG8gdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMuDQoNCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbg0KcmVtb3ZlIGFueSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBmcm9tIGFueSBwYXJ0IG9mDQppdC4gIChBZGRpdGlvbmFsIHBlcm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRvIHJlcXVpcmUgdGhlaXIgb3duDQpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UNCmFkZGl0aW9uYWwgcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5IHlvdSB0byBhIGNvdmVyZWQgd29yaywNCmZvciB3aGljaCB5b3UgaGF2ZSBvciBjYW4gZ2l2ZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgcGVybWlzc2lvbi4NCg0KICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGZvciBtYXRlcmlhbCB5b3UNCmFkZCB0byBhIGNvdmVyZWQgd29yaywgeW91IG1heSAoaWYgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YNCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOg0KDQogICAgYSkgRGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZlcmVudGx5IGZyb20gdGhlDQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3INCg0KICAgIGIpIFJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvcg0KICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwNCiAgICBOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcg0KDQogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcg0KICAgIHJlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluDQogICAgcmVhc29uYWJsZSB3YXlzIGFzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uOyBvcg0KDQogICAgZCkgTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvcg0KICAgIGF1dGhvcnMgb2YgdGhlIG1hdGVyaWFsOyBvcg0KDQogICAgZSkgRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZQ0KICAgIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcg0KDQogICAgZikgUmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdA0KICAgIG1hdGVyaWFsIGJ5IGFueW9uZSB3aG8gY29udmV5cyB0aGUgbWF0ZXJpYWwgKG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mDQogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcg0KICAgIGFueSBsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24NCiAgICB0aG9zZSBsaWNlbnNvcnMgYW5kIGF1dGhvcnMuDQoNCiAgQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQgImZ1cnRoZXINCnJlc3RyaWN0aW9ucyIgd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuICBJZiB0aGUgUHJvZ3JhbSBhcyB5b3UNCnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzDQpnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXINCnJlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0uICBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMNCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcw0KTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgdGhlIHRlcm1zDQpvZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVzdHJpY3Rpb24gZG9lcw0Kbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuDQoNCiAgSWYgeW91IGFkZCB0ZXJtcyB0byBhIGNvdmVyZWQgd29yayBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24sIHlvdQ0KbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlDQphZGRpdGlvbmFsIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhvc2UgZmlsZXMsIG9yIGEgbm90aWNlIGluZGljYXRpbmcNCndoZXJlIHRvIGZpbmQgdGhlIGFwcGxpY2FibGUgdGVybXMuDQoNCiAgQWRkaXRpb25hbCB0ZXJtcywgcGVybWlzc2l2ZSBvciBub24tcGVybWlzc2l2ZSwgbWF5IGJlIHN0YXRlZCBpbiB0aGUNCmZvcm0gb2YgYSBzZXBhcmF0ZWx5IHdyaXR0ZW4gbGljZW5zZSwgb3Igc3RhdGVkIGFzIGV4Y2VwdGlvbnM7DQp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuDQoNCiAgOC4gVGVybWluYXRpb24uDQoNCiAgWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5DQpwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yDQptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXINCnRoaXMgTGljZW5zZSAoaW5jbHVkaW5nIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGUgdGhpcmQNCnBhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4NCg0KICBIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91cg0KbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpDQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kDQpmaW5hbGx5IHRlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0DQpob2xkZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucw0KcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLg0KDQogIE1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcw0KcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlDQp2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlDQpyZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQNCmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXINCnlvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLg0KDQogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlDQpsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXINCnRoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkNCnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUNCm1hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuDQoNCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuDQoNCiAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yDQpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrDQpvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbg0KdG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiAgSG93ZXZlciwNCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcg0KbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuICBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHlyaWdodCBpZiB5b3UgZG8NCm5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYQ0KY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4NCg0KICAxMC4gQXV0b21hdGljIExpY2Vuc2luZyBvZiBEb3duc3RyZWFtIFJlY2lwaWVudHMuDQoNCiAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseQ0KcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29ycywgdG8gcnVuLCBtb2RpZnkgYW5kDQpwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlDQpmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4NCg0KICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuDQpvcmdhbml6YXRpb24sIG9yIHN1YnN0YW50aWFsbHkgYWxsIGFzc2V0cyBvZiBvbmUsIG9yIHN1YmRpdmlkaW5nIGFuDQpvcmdhbml6YXRpb24sIG9yIG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gIElmIHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZA0Kd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQNCnRyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlcg0KbGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QgaGFkIG9yIGNvdWxkDQpnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQ0KQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QsIGlmDQp0aGUgcHJlZGVjZXNzb3IgaGFzIGl0IG9yIGNhbiBnZXQgaXQgd2l0aCByZWFzb25hYmxlIGVmZm9ydHMuDQoNCiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlDQpyaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgZXhhbXBsZSwgeW91IG1heQ0Kbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mDQpyaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBsaXRpZ2F0aW9uDQooaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdA0KYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yDQpzYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuDQoNCiAgMTEuIFBhdGVudHMuDQoNCiAgQSAiY29udHJpYnV0b3IiIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcw0KTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUNCndvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgImNvbnRyaWJ1dG9yIHZlcnNpb24iLg0KDQogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcw0Kb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvcg0KaGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkDQpieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sDQpidXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYQ0KY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uICBGb3INCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudA0KcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mDQp0aGlzIExpY2Vuc2UuDQoNCiAgRWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUNCnBhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zLCB0bw0KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kDQpwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLg0KDQogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzDQphZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQNCihzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8NCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhDQpwYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYQ0KcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5Lg0KDQogIElmIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2UsDQphbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZQ0KdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQ0KcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVyIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywNCnRoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28NCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUNCnBhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyDQpjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50DQpsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUNCmFjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZQ0KY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yaw0KaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0DQpjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLg0KDQogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3INCmFycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGENCmNvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcw0KcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5DQpvciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlDQp5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZA0Kd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuDQoNCiAgQSBwYXRlbnQgbGljZW5zZSBpcyAiZGlzY3JpbWluYXRvcnkiIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluDQp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcw0KY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlDQpzcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkDQp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcw0KaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudA0KdG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcNCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQ0KcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5DQpwYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrDQpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQ0KZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQNCmNvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwNCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuDQoNCiAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZw0KYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkNCm90aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4NCg0KICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4NCg0KICBJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yDQpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90DQpleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBjb252ZXkgYQ0KY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzDQpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQ0Kbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91DQp0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkNCnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcw0KTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLg0KDQogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLg0KDQogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUNCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQNCnVuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUNCmNvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiAgVGhlIHRlcm1zIG9mIHRoaXMNCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLA0KYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLA0Kc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZQ0KY29tYmluYXRpb24gYXMgc3VjaC4NCg0KICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuDQoNCiAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YNCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwNCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bw0KYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuDQoNCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUNClByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBHZW5lcmFsDQpQdWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZQ0Kb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQNCnZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlDQpGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZQ0KR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkDQpieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KDQogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUNCnZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzDQpwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91DQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4NCg0KICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudA0KcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQ0KYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQ0KbGF0ZXIgdmVyc2lvbi4NCg0KICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4NCg0KICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZDQpBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUDQpIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZDQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywNClRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINClBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNDQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YNCkFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4NCg0KICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuDQoNCiAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HDQpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTDQpUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkNCkdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRQ0KVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRg0KREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQNClBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLA0KRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0KU1VDSCBEQU1BR0VTLg0KDQogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuDQoNCiAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkDQphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywNCnJldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcw0KYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQ0KUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQ0KY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLg0KDQogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlM=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.ecb2_tools.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIwojIEVDQjIgLSBFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAyCiMKIyBtYWludGFpbmVkIGJ5IENocmlzIFRheWxvciwgPGNocmlzQGJpbm5vdmF0aXZlLmNvLnVrPiwgc2luY2UgMjAxNgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBBIGZvcmsgb2YgbW9kdWxlOiBFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAoRUNCKQojIE9yaWdpbmFsIEF1dGhvcjogWmRlbm8gS3V6bWFueSAoemRlbm9Aa3V6bWFueS5iaXopIC8ga3V6bWFueS5iaXogIC8gdHdpdHRlci5jb20va3V6bWFueQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDkgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3NrZWxldG9uLwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgpjbGFzcyBlY2IyX3Rvb2xzIHsKCiAgIHByaXZhdGUgJGJsb2NrX25hbWUgPSAnJzsKICAgcHJpdmF0ZSAkdmFsdWUgPSAnJzsKICAgcHJpdmF0ZSAkYWRkaW5nID0gZmFsc2U7CiAgIHByaXZhdGUgJG9wdGlvbnMgPSBhcnJheSgpOwogICBwcml2YXRlICRhbGlhcyA9ICcnOwogICBwcml2YXRlICRmaWVsZCA9ICcnOwogICBwcml2YXRlICR0eHQgPSAnJzsKCgogICAKICAgLyoqCiAgICAqIEBwYXJhbSBzdHJpbmcgJGJsb2NrTmFtZQogICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtcwogICAgKiBAcGFyYW0gYm9vbGVhbiAkYWRkaW5nCiAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRibG9ja05hbWUsICR2YWx1ZSwgJHBhcmFtcywgJGFkZGluZykgCiAgICB7CiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAgICR0aGlzLT5ibG9ja19uYW1lID0gJGJsb2NrTmFtZTsKICAgICAgICAkdGhpcy0+YWxpYXMgPSBtdW5nZV9zdHJpbmdfdG9fdXJsKCRibG9ja05hbWUsIHRydWUpOwogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKICAgICAgICAkdGhpcy0+YWRkaW5nID0gJGFkZGluZzsKCiAgICAgICAgJHRoaXMtPmdldF9leHRyYV9vcHRpb25zKCRwYXJhbXMpOwogICAgICAgIGlmICggaXNzZXQoJHRoaXMtPm9wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSkgJiYgaXNTZXQoJHBhcmFtc1siZGVmYXVsdF92YWx1ZSJdKSApIHsKICAgICAgICAgICAgJHRoaXMtPmRlZmF1bHQgPSAkcGFyYW1zWyJkZWZhdWx0X3ZhbHVlIl07CiAgICAgICAgICAgIGlmICggJGFkZGluZz09dHJ1ZSApICR0aGlzLT52YWx1ZSA9ICR0aGlzLT5kZWZhdWx0OwogICAgICAgIH0KCiAgICAgICAgLy8gaWYgZmlyc3QgRUNCMiBjb250ZW50IGJsb2NrIG9uIHRoZSBwYWdlIC0gbG9hZCBFQ0IyIGpzICYgY3NzIChtb3ZlIGFsbCBqcyAmIGNzcyBpbnRvIHRoZXNlKQogICAgICAgIGlmICghY21zX3V0aWxzOjpnZXRfYXBwX2RhdGEoJ0VDQjJfanNfY3NzX2xvYWRlZCcpKSB7CiAgICAgICAgICAgIGVjaG8gJwogICAgICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vbW9kdWxlcy9FQ0IyL2xpYi9jc3MvZWNiMl9hZG1pbi5jc3M/dicuJG1vZDo6TU9EVUxFX1ZFUlNJT04uJyI+CiAgICAgICAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9Ii4uL21vZHVsZXMvRUNCMi9saWIvanMvZWNiMl9hZG1pbi5qcz92Jy4kbW9kOjpNT0RVTEVfVkVSU0lPTi4nIj48L3NjcmlwdD4nOwogICAgICAgICAgICBjbXNfdXRpbHM6OnNldF9hcHBfZGF0YSgnRUNCMl9qc19jc3NfbG9hZGVkJywgMSk7CiAgICAgICAgfQoKICAgIH0KCiAgIC8qKgogICAqICBnZXQgY29udGVudCBibG9jawogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfY29udGVudF9ibG9ja19pbnB1dCgpIHsKCiAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgJGZ1bmN0aW9uID0gJ2dldF8nIC4gJHRoaXMtPmZpZWxkOwogICAgICAkZnVuY3Rpb25FeGlzdHMgPSBtZXRob2RfZXhpc3RzKCdlY2IyX3Rvb2xzJywgJGZ1bmN0aW9uKTsKICAgICAgaWYgKCBlbXB0eSgkdGhpcy0+ZmllbGQpIHx8ICEkZnVuY3Rpb25FeGlzdHMgKSB7CiAgICAgICAgICRlcnIgPSAnPGRpdiBjbGFzcz0icGFnZXdhcm5pbmciPicgLiAkbW9kLT5MYW5nKCdmaWVsZF9lcnJvcicpIC4gJzwvZGl2Pjxicj4nOwogICAgICAgICByZXR1cm4gJGVycjsKICAgICAgfQoKICAgICAgaWYgKCAhZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pICkgewogICAgICAgICAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXSAuPSAnPGJyPic7CiAgICAgIH0KICAgICAgcmV0dXJuICR0aGlzLT4kZnVuY3Rpb24oKTsKICAgfQoKCgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfdGV4dGFyZWEoKSB7CiAgICAgICAgJHRtcCA9ICc8dGV4dGFyZWEgbmFtZT0iJXMiIHJvd3M9IiVkIiBjb2xzPSIlZCI+JXM8L3RleHRhcmVhPic7CiAgICAgICAgJHZhbHVlID0gJHRoaXMtPnZhbHVlID8gJHRoaXMtPnZhbHVlIDogJHRoaXMtPm9wdGlvbnNbImRlZmF1bHRfdmFsdWUiXTsKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uc3ByaW50ZigkdG1wLCAkdGhpcy0+YmxvY2tfbmFtZSwgJHRoaXMtPm9wdGlvbnNbInJvd3MiXSwgJHRoaXMtPm9wdGlvbnNbImNvbHMiXSwgJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF9wYWdlcygpIHsKICAgICAgICAkY29udGVudE9wcyA9IFxDb250ZW50T3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLiRjb250ZW50T3BzLT5DcmVhdGVIaWVyYXJjaHlEcm9wZG93bignJywgJHRoaXMtPnZhbHVlLCAkdGhpcy0+YmxvY2tfbmFtZSwgMSwgMSk7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfZWRpdG9yKCkgewogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dmFsdWUgPyAkdGhpcy0+dmFsdWUgOiAkdGhpcy0+b3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdOwogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4kbW9kLT5DcmVhdGVUZXh0QXJlYSh0cnVlLCAnJywgJHZhbHVlLCAkdGhpcy0+YmxvY2tfbmFtZSwgJycsICcnLCAnJywgJycsICR0aGlzLT5vcHRpb25zWyJjb2xzIl0sICR0aGlzLT5vcHRpb25zWyJyb3dzIl0pOwogICAgfQoKICAgIC8qKgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X2lucHV0KCkgewogICAgICAgICR0bXAgPSAnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IiVzIiBzaXplPSIlZCIgbWF4bGVuZ3RoPSIlZCIgdmFsdWU9IiVzIi8+JzsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dmFsdWUgPyAkdGhpcy0+dmFsdWUgOiAkdGhpcy0+b3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdOwogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS5zcHJpbnRmKCR0bXAsICR0aGlzLT5ibG9ja19uYW1lLCAkdGhpcy0+b3B0aW9uc1sic2l6ZSJdLCAkdGhpcy0+b3B0aW9uc1sibWF4X2xlbmd0aCJdLCAkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X3RpbWVwaWNrZXIoKSB7CiAgICAgICAgJHNtYXJ0eSA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRTbWFydHkoKTsKICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgICAgJHRpbWVwaWNrZXJfYWRkb25fanNfdXJsID0gJG1vZC0+R2V0TW9kdWxlVVJMUGF0aCgpLicvbGliL2pzL2pxdWVyeS11aS10aW1lcGlja2VyLWFkZG9uLmpzJzsKICAgICAgICAkY2xhc3MgPSAndGltZXBpY2tlcic7CiAgICAgICAgJHRwbCA9ICRzbWFydHktPkNyZWF0ZVRlbXBsYXRlKCAkbW9kLT5HZXRUZW1wbGF0ZVJlc291cmNlKCdkYXRlcGlja2VyX3RlbXBsYXRlLnRwbCcpLCBudWxsLCBudWxsLCAkc21hcnR5ICk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdpc19kYXRlcGlja2VyX2xpYl9sb2FkJywgJG1vZC0+aXNfZGF0ZXBpY2tlcl9saWJfbG9hZCk7CiAgICAgICAgJHRwbC0+YXNzaWduKCd0aW1lcGlja2VyX2FkZG9uX2pzX3VybCcsICR0aW1lcGlja2VyX2FkZG9uX2pzX3VybCk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdkZXNjcmlwdGlvbicsICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2NsYXNzJywgJGNsYXNzKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2Jsb2NrX25hbWUnLCAkdGhpcy0+YmxvY2tfbmFtZSk7ICAgICAgIAogICAgICAgICR0cGwtPmFzc2lnbignc2l6ZScsICR0aGlzLT5vcHRpb25zWydzaXplJ10pOwogICAgICAgICR0cGwtPmFzc2lnbignbWF4X2xlbmd0aCcsICR0aGlzLT5vcHRpb25zWydtYXhfbGVuZ3RoJ10pOwogICAgICAgICR0cGwtPmFzc2lnbigndGltZV9mb3JtYXQnLCAkdGhpcy0+b3B0aW9uc1sndGltZV9mb3JtYXQnXSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCd2YWx1ZScsICR0aGlzLT52YWx1ZSk7CiAgICAgICAgJG1vZC0+aXNfZGF0ZXBpY2tlcl9saWJfbG9hZCA9IHRydWU7CiAgICAgICAgcmV0dXJuICR0cGwtPmZldGNoKCk7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfZGF0ZXBpY2tlcigpIHsKICAgICAgICAkc21hcnR5ID0gXENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldFNtYXJ0eSgpOwogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgICAvLyR0aW1lcGlja2VyX2FkZG9uX2pzX3VybCA9ICRtb2QtPkdldE1vZHVsZVVSTFBhdGgoKS4nL2xpYi9qcy9qcXVlcnktdWktdGltZXBpY2tlci1hZGRvbi5qcyc7CiAgICAgICAgJGNsYXNzID0gIWVtcHR5KCR0aGlzLT5vcHRpb25zWyd0aW1lJ10pID8gJ2RhdGV0aW1lcGlja2VyJyA6ICdkYXRlcGlja2VyJzsKICAgICAgICAkdHBsID0gJHNtYXJ0eS0+Q3JlYXRlVGVtcGxhdGUoICRtb2QtPkdldFRlbXBsYXRlUmVzb3VyY2UoJ2RhdGVwaWNrZXJfdGVtcGxhdGUudHBsJyksIG51bGwsIG51bGwsICRzbWFydHkgKTsKICAgICAgICAvLyR0cGwtPmFzc2lnbignaXNfZGF0ZXBpY2tlcl9saWJfbG9hZCcsICRtb2QtPmlzX2RhdGVwaWNrZXJfbGliX2xvYWQgKTsKICAgICAgICAvLyR0cGwtPmFzc2lnbigndGltZXBpY2tlcl9hZGRvbl9qc191cmwnLCAkdGltZXBpY2tlcl9hZGRvbl9qc191cmwgKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2Rlc2NyaXB0aW9uJywgJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pOwogICAgICAgICR0cGwtPmFzc2lnbignY2xhc3MnLCAkY2xhc3MpOwogICAgICAgICR0cGwtPmFzc2lnbignYmxvY2tfbmFtZScsICR0aGlzLT5ibG9ja19uYW1lKTsgICAgICAgCiAgICAgICAgJHRwbC0+YXNzaWduKCdzaXplJywgJHRoaXMtPm9wdGlvbnNbJ3NpemUnXSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdtYXhfbGVuZ3RoJywgJHRoaXMtPm9wdGlvbnNbJ21heF9sZW5ndGgnXSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCd0aW1lX2Zvcm1hdCcsICR0aGlzLT5vcHRpb25zWyd0aW1lX2Zvcm1hdCddKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2NoYW5nZV9tb250aCcsICR0aGlzLT5vcHRpb25zWydjaGFuZ2VfbW9udGgnXSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdjaGFuZ2VfeWVhcicsICR0aGlzLT5vcHRpb25zWydjaGFuZ2VfeWVhciddKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3llYXJfcmFuZ2UnLCAkdGhpcy0+b3B0aW9uc1sneWVhcl9yYW5nZSddKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3ZhbHVlJywgJHRoaXMtPnZhbHVlKTsKICAgICAgICAvLyRtb2QtPmlzX2RhdGVwaWNrZXJfbGliX2xvYWQgPSB0cnVlOwogICAgICAgIHJldHVybiAkdHBsLT5mZXRjaCgpOwogICAgfQoKCgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfY29sb3JfcGlja2VyKCkgCiAgICB7CiAgICAgICAgJHNtYXJ0eSA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRTbWFydHkoKTsKICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgICAgaWYgKCAhaXNzZXQoJHRoaXMtPnZhbHVlKSAmJiBpc3NldCgkdGhpcy0+ZGVmYXVsdCkgKSAkdGhpcy0+dmFsdWUgPSAkdGhpcy0+ZGVmYXVsdDsKICAgICAgICAvLyRjb2xvcnBpY2tlcl9hZGRvbl9qc191cmwgPSAkbW9kLT5HZXRNb2R1bGVVUkxQYXRoKCkuJy9saWIvanMvY29scGljay5qcyc7CiAgICAgICAgJHRwbCA9ICRzbWFydHktPkNyZWF0ZVRlbXBsYXRlKCAkbW9kLT5HZXRUZW1wbGF0ZVJlc291cmNlKCdjb2xvcnBpY2tlcl90ZW1wbGF0ZS50cGwnKSwgbnVsbCwgbnVsbCwgJHNtYXJ0eSApOwogICAgICAgIC8vJHRwbC0+YXNzaWduKCdpc19jb2xvcnBpY2tlcl9saWJfbG9hZCcsICRtb2QtPmlzX2NvbG9ycGlja2VyX2xpYl9sb2FkICk7CiAgICAgICAgLy8kdHBsLT5hc3NpZ24oJ2NvbG9ycGlja2VyX2FkZG9uX2pzX3VybCcsICRjb2xvcnBpY2tlcl9hZGRvbl9qc191cmwgKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2Rlc2NyaXB0aW9uJywgJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pOwogICAgICAgICR0cGwtPmFzc2lnbignY2xhc3MnLCAnY29sb3JwaWNrZXInKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2Jsb2NrX25hbWUnLCAkdGhpcy0+YmxvY2tfbmFtZSk7ICAgIAogICAgICAgICR0cGwtPmFzc2lnbignYWxpYXMnLCAkdGhpcy0+YWxpYXMpOyAgICAKICAgICAgICAkdHBsLT5hc3NpZ24oJ3NpemUnLCAkdGhpcy0+b3B0aW9uc1snc2l6ZSddKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ25vX2hhc2gnLCAkdGhpcy0+b3B0aW9uc1snbm9faGFzaCddKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3ZhbHVlJywgJHRoaXMtPnZhbHVlKTsgICAgICAgCiAgICAgICAgLy8gJG1vZC0+aXNfY29sb3JwaWNrZXJfbGliX2xvYWQgPSB0cnVlOwogICAgICAgIHJldHVybiAkdHBsLT5mZXRjaCgpOwogICAgfQoKCgogICAvKioKICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X2NoZWNrYm94KCkgewogICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgIC8vIGEgaGFjayBmb3IgaWYgJGFkZGluZyBub3QgYmVpbmcgc2V0IGNvcnJlY3RseSBieSBDb250ZW50IE1hbmFnZXIgKDIuMi4xNCkKICAgICAgaWYgKCAhJHRoaXMtPmFkZGluZyAmJiBlbXB0eSgkX1JFUVVFU1RbJ20xX2NvbnRlbnRfaWQnXSkgJiYgZW1wdHkoJHRoaXMtPnZhbHVlKSAmJiBpc3NldCgkdGhpcy0+ZGVmYXVsdCkgKSB7CiAgICAgICAgICR0aGlzLT52YWx1ZSA9ICR0aGlzLT5kZWZhdWx0OwogICAgICB9CiAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4kbW9kLT5DcmVhdGVJbnB1dEhpZGRlbignJywgJHRoaXMtPmJsb2NrX25hbWUsIDApIC4gJG1vZC0+Q3JlYXRlSW5wdXRDaGVja2JveCgnJywgJHRoaXMtPmJsb2NrX25hbWUsIDEsICR0aGlzLT52YWx1ZSk7CiAgIH0KCgoKICAgLyoqCiAgICAqCiAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAqLwogICBwcml2YXRlIGZ1bmN0aW9uIGdldF9maWxlX3NlbGVjdG9yKCkgewogICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgICRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKCiAgICAgIC8vIEdldCB0aGUgZGlyZWN0b3J5IGNvbnRlbnRzCiAgICAgICRhZGRkaXIgPSBnZXRfc2l0ZV9wcmVmZXJlbmNlKCdjb250ZW50aW1hZ2VfcGF0aCcpOwogICAgICBpZiAoJHRoaXMtPm9wdGlvbnNbJ2RpciddKQogICAgICAgICAkYWRkZGlyID0gJHRoaXMtPm9wdGlvbnNbJ2RpciddOwoKICAgICAgJGRpciA9IGNtc19qb2luX3BhdGgoJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sICRhZGRkaXIpOwogICAgICAkZmlsZXR5cGVzID0gJHRoaXMtPm9wdGlvbnNbJ2ZpbGV0eXBlcyddOwogICAgICBpZiAoJGZpbGV0eXBlcyAhPSAnJykgewogICAgICAgICAkZmlsZXR5cGVzID0gZXhwbG9kZSgnLCcsICRmaWxldHlwZXMpOwogICAgICB9CgogICAgICAkZXhjbHVkZXMgPSAkdGhpcy0+b3B0aW9uc1snZXhjbHVkZXByZWZpeCddOwogICAgICBpZiAoJGV4Y2x1ZGVzICE9ICcnKSB7CiAgICAgICAgICRleGNsdWRlcyA9IGV4cGxvZGUoJywnLCAkZXhjbHVkZXMpOwogICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkZXhjbHVkZXMpOyAkaSsrKSB7CiAgICAgICAgICAgICRleGNsdWRlc1skaV0gPSAkZXhjbHVkZXNbJGldIC4gJyonOwogICAgICAgICB9CiAgICAgIH0KICAgICAgJG1heGRlcHRoID0gIWVtcHR5KCR0aGlzLT5vcHRpb25zWydyZWN1cnNlJ10pID8gLTEgOiAwOyAgIC8vIGRlZmF1bHQKICAgICAgJGZsID0gZ2V0X3JlY3Vyc2l2ZV9maWxlX2xpc3QoICRkaXIsICRleGNsdWRlcywgJG1heGRlcHRoLCAnRklMRVMnICk7CgogICAgICAvLyBSZW1vdmUgcHJlZml4CiAgICAgICRmaWxlbGlzdCA9IGFycmF5KCk7CiAgICAgIGZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRmbCk7ICRpKyspIHsKICAgICAgICAgaWYgKCBpbl9hcnJheSggcGF0aGluZm8oJGZsWyRpXSwgUEFUSElORk9fRVhURU5TSU9OKSwgJGZpbGV0eXBlcyApICkKICAgICAgICAgICAgJGZpbGVsaXN0W10gPSBzdHJfcmVwbGFjZSgkZGlyLCAnJywgJGZsWyRpXSk7CiAgICAgIH0KCiAgICAgIC8vIFNvcnQKICAgICAgaWYgKGlzX2FycmF5KCRmaWxlbGlzdCkgJiYgJHRoaXMtPm9wdGlvbnNbJ3NvcnRmaWxlcyddKSB7CiAgICAgICAgIHNvcnQoJGZpbGVsaXN0KTsKICAgICAgfQoKICAgICAgLy8gY3JlYXRlIHNlbGVjdCBvcHRpb25zCiAgICAgICRvcHRzID0gYXJyYXkoKTsKICAgICAgJHVybF9wcmVmaXggPSAkYWRkZGlyOwogICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkZmlsZWxpc3QpOyAkaSsrKSB7CiAgICAgICAgICRvcHRzWyRmaWxlbGlzdFskaV1dID0gJHVybF9wcmVmaXggLiAkZmlsZWxpc3RbJGldOwogICAgICB9CiAgICAgICRvcHRzID0gYXJyYXkoJycgPT4gJycpICsgJG9wdHM7CgogICAgICAkcHJldmlldyA9ICcnOwogICAgICBpZiAoJHRoaXMtPm9wdGlvbnNbJ3ByZXZpZXcnXSkgewogICAgICAgICBpZiAoJHRoaXMtPnZhbHVlKSB7CiAgICAgICAgICAgICRwcmV2aWV3ID0gJzxpbWcgc3R5bGU9Im1heC13aWR0aDoxMzBweDsiIGNsYXNzPSJmaWxlX3NlbGVjdG9yX3ByZXZpZXciIGRhdGEtdXBsb2Fkc3VybD0iJyAuICRjb25maWdbInVwbG9hZHNfdXJsIl0gLiAnIiAgIHNyYz0iJyAuICRjb25maWdbInVwbG9hZHNfdXJsIl0gLiAnLycgLiAkdGhpcy0+dmFsdWUgLiAnIiBhbHQ9IiI+JzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHByZXZpZXcgPSAnPGltZyBzdHlsZT0ibWF4LXdpZHRoOjEzMHB4OyIgY2xhc3M9ImZpbGVfc2VsZWN0b3JfcHJldmlldyIgYWx0PSIiIGRhdGEtdXBsb2Fkc3VybD0iJyAuICRjb25maWdbInVwbG9hZHNfdXJsIl0gLiAnIj4nOwogICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4nPGRpdiBjbGFzcz0iZWNiX2ZpbGVfc2VsZWN0b3Jfc2VsZWN0Ij4nIC4gJG1vZC0+Q3JlYXRlSW5wdXREcm9wZG93bignJywgJHRoaXMtPmJsb2NrX25hbWUsICRvcHRzLCAtMSwgJHRoaXMtPnZhbHVlKSAuICc8L2Rpdj4nIC4gJHByZXZpZXc7CiAgIH0KCgoKICAgIC8qKgogICAgKgogICAgKiBAcmV0dXJuIHN0cmluZwogICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X3NvcnRhYmxlbGlzdCgpIAogICAgewogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgICAkb3B0aW9ucyA9IGFycmF5KCk7CiAgICAgICAgJHRtcCA9IGFycmF5KCk7CgogICAgICAgIGlmICggJHRoaXMtPm9wdGlvbnNbJ21vZCddICkgewogICAgICAgICAgICAvLyBjYWxsIG1vZHVsZSB0byBnZXQgdmFsdWVzCiAgICAgICAgICAgICRleGNsdWRlX29wdGlvbnMgPSBbJ3ZhbHVlcycsJ3VkdCcsJ2RlZmF1bHRfdmFsdWUnLCdmaXJzdF92YWx1ZScsJ2Rlc2NyaXB0aW9uJywnbGFiZWxfbGVmdCcsJ2xhYmVsX3JpZ2h0JywnbWF4X251bWJlcicsJ3JlcXVpcmVkX251bWJlcicsJ21vZCcsJ2ZsaXBfdmFsdWVzJywnY29tcGFjdCcsJ2ZpZWxkJywnYWxsb3dkdXBsaWNhdGVzJywnbWF4X3NlbGVjdGVkJ107CiAgICAgICAgICAgICRwYXJhbXMgPSBbXTsKICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPm9wdGlvbnMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgIGlmICggIWluX2FycmF5KCRrZXksICRleGNsdWRlX29wdGlvbnMpICkgJHBhcmFtc1ska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbW9kdWxlID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCAkdGhpcy0+b3B0aW9uc1snbW9kJ10gKTsKICAgICAgICAgICAgaWYgKCAkbW9kdWxlICkgeyAKICAgICAgICAgICAgICAgICR0bXBfYWN0aW9uID0gaXNzZXQoJHRoaXMtPm9wdGlvbnNbJ2FjdGlvbiddKSA/ICR0aGlzLT5vcHRpb25zWydhY3Rpb24nXSA6ICcnOwogICAgICAgICAgICAgICAgJGNtc19tb2R1bGVfY2FsbCA9ICJ7Y21zX21vZHVsZSBtb2R1bGU9Ii4kdGhpcy0+b3B0aW9uc1snbW9kJ107CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGNtc19tb2R1bGVfY2FsbCAuPSAiICRrZXk9JHZhbHVlIjsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAkY21zX21vZHVsZV9jYWxsIC49ICJ9IjsKICAgICAgICAgICAgICAgICRzbWFydHkgPSBcQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+R2V0U21hcnR5KCk7CiAgICAgICAgICAgICAgICAkdGhpcy0+b3B0aW9uc1sidmFsdWVzIl0gPSBzdHJpcF90YWdzKCRzbWFydHktPmZldGNoKCdzdHJpbmc6Jy4kY21zX21vZHVsZV9jYWxsKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCgogICAgICAgIGlmICggJHRoaXMtPm9wdGlvbnNbJ3VkdCddICkgewogICAgICAgICAgICAkb3B0aW9ucyA9IFVzZXJUYWdPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+Q2FsbFVzZXJUYWcoJHRoaXMtPm9wdGlvbnNbJ3VkdCddLCAkdG1wKTsKICAgICAgICB9CiAgICAgICAgLy8gY3JlYXRlICRvcHRpb25zYXJyYXkgb2Yga2V5ID0+IHRleHQgZnJvbSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mICdrZXk9dGV4dCxrZXkyPXRleHQyJwogICAgICAgICRvcHRpb25zYXJyYXkgPSBleHBsb2RlKCcsJywgJHRoaXMtPm9wdGlvbnNbInZhbHVlcyJdKTsKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNhcnJheSkpIHJldHVybjsKICAgICAgICBmb3JlYWNoICgkb3B0aW9uc2FycmF5IGFzICRvcHRpb24pIHsKICAgICAgICAgICAgaWYgKCRvcHRpb24hPScnKSB7CiAgICAgICAgICAgICAgICAka2V5X3ZhbCA9IGV4cGxvZGUoJz0nLCAkb3B0aW9uKTsKICAgICAgICAgICAgICAgICRvcHRpb25zWyRrZXlfdmFsWzBdXSA9ICRrZXlfdmFsWzFdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICggJHRoaXMtPm9wdGlvbnNbJ21vZCddICkgeyAgLy8gZm9ybWF0IHJldmVyc2VkIGluIG1vZHVsZSBvdXRwdXQgZm9yIHNvcnRhYmxlbGlzdAogICAgICAgICAgICAkb3B0aW9ucyA9IGFycmF5X2ZsaXAoJG9wdGlvbnMpOwogICAgICAgIH0KICAgICAgICBpZiAoICR0aGlzLT5vcHRpb25zWydmbGlwX3ZhbHVlcyddICkgeyAKICAgICAgICAgICAgJG9wdGlvbnMgPSBhcnJheV9mbGlwKCRvcHRpb25zKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVtcHR5KCR0aGlzLT5vcHRpb25zWydmaXJzdF92YWx1ZSddKSA9PSBmYWxzZSkKICAgICAgICAgICAgJG9wdGlvbnMgPSBhcnJheSgkdGhpcy0+b3B0aW9uc1snZmlyc3RfdmFsdWUnXSA9PiAnJykgKyAkb3B0aW9uczsKICAgICAgICAkc2VsZWN0ZWRMaXN0ID0gZXhwbG9kZSgnLCcsICR0aGlzLT52YWx1ZSk7CiAgICAgICAgJGF2YWlsYWJsZSA9ICRvcHRpb25zOwogICAgICAgICRzZWxlY3RlZCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHNlbGVjdGVkTGlzdCBhcyAkaXRlbSkgewogICAgICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMoJGl0ZW0sICRhdmFpbGFibGUpICkgewogICAgICAgICAgICAgICAgJHNlbGVjdGVkWyRpdGVtXSA9ICRhdmFpbGFibGVbJGl0ZW1dOwogICAgICAgICAgICAgICAgdW5zZXQoJGF2YWlsYWJsZVskaXRlbV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkdGhpcy0+b3B0aW9uc1sibWF4X251bWJlciJdKSAvLyBtYXhfbnVtYmVyIHRha2VzIHByZWNpZGVuY2UgaWYgYm90aCBzZXQKICAgICAgICAgICAgJHRoaXMtPm9wdGlvbnNbInJlcXVpcmVkX251bWJlciJdID0gIiI7CiAgICAgICAgJHNtYXJ0eSA9IFNtYXJ0eV9DTVM6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICR0cGwgPSAkc21hcnR5LT5DcmVhdGVUZW1wbGF0ZSgkbW9kLT5HZXRUZW1wbGF0ZVJlc291cmNlKCdzb3J0YWJsZWxpc3RfdGVtcGxhdGUudHBsJyksIG51bGwsIG51bGwsICRzbWFydHkpOwogICAgICAgICR0cGwtPmFzc2lnbignc2VsZWN0YXJlYV9wcmVmaXgnLCR0aGlzLT5ibG9ja19uYW1lKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3NlbGVjdGVkX3N0cicsJHRoaXMtPnZhbHVlKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3NlbGVjdGVkJywkc2VsZWN0ZWQpOwogICAgICAgICR0cGwtPmFzc2lnbignYXZhaWxhYmxlJywgJGF2YWlsYWJsZSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdkZXNjcmlwdGlvbicsICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2xhYmVsTGVmdCcsICR0aGlzLT5vcHRpb25zWyJsYWJlbF9sZWZ0Il0pOwogICAgICAgICR0cGwtPmFzc2lnbignbGFiZWxSaWdodCcsICR0aGlzLT5vcHRpb25zWyJsYWJlbF9yaWdodCJdKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ21vZCcsJG1vZCk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdtYXhOdW1iZXInLCAkdGhpcy0+b3B0aW9uc1sibWF4X251bWJlciJdKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3JlcXVpcmVkTnVtYmVyJywgJHRoaXMtPm9wdGlvbnNbInJlcXVpcmVkX251bWJlciJdKTsKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJHRwbC0+ZmV0Y2goKTsKICAgIH0KCgoKICAgIC8qKgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X3RleHQoKSB7CgogICAgICAgIGlmICghJHRoaXMtPm9wdGlvbnNbInRleHQiXSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4kdGhpcy0+b3B0aW9uc1sidGV4dCJdOwogICAgfQoKICAgIC8qKgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X2hyKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4nPGhyIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyBib3JkZXI6MCBub25lOyBiYWNrZ3JvdW5kOiNjY2M7IiAvPic7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfbGluaygpIHsKCiAgICAgICAgaWYgKCEkdGhpcy0+b3B0aW9uc1sibGluayJdIHx8ICEkdGhpcy0+b3B0aW9uc1sidGV4dCJdKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJzxhIHRhcmdldD0iJyAuICR0aGlzLT5vcHRpb25zWyJ0YXJnZXQiXSAuICciIGhyZWY9IicgLiAkdGhpcy0+b3B0aW9uc1sibGluayJdIC4gJyI+JyAuICR0aGlzLT5vcHRpb25zWyJ0ZXh0Il0gLiAnPC9hPic7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfbW9kdWxlX2xpbmsoKSB7CgogICAgICAgICRtb2QgPSAnJzsKICAgICAgICBpZiAoJHRoaXMtPm9wdGlvbnNbIm1vZCJdKQogICAgICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCR0aGlzLT5vcHRpb25zWyJtb2QiXSk7CgogICAgICAgICR1c2VyaWQgPSBnZXRfdXNlcmlkKCk7CiAgICAgICAgJHVzZXJvcHMgPSBjbXNtcygpLT5HZXRVc2VyT3BlcmF0aW9ucygpOwogICAgICAgICRhZG1pbnVzZXIgPSAkdXNlcm9wcy0+VXNlckluR3JvdXAoJHVzZXJpZCwgMSk7CgogICAgICAgICR0bXAgPSAnPGlucHV0IGlkPSJtdF8nIC4gJHRoaXMtPmJsb2NrX25hbWUgLiAnIiAnIC4gKCAkYWRtaW51c2VyID8gJ3R5cGU9InRleHQiJyA6ICd0eXBlPSJoaWRkZW4iJykgLiAnIG5hbWU9IicgLiAkdGhpcy0+YmxvY2tfbmFtZSAuICciIHZhbHVlPSInIC4gKCR0aGlzLT52YWx1ZSA/ICR0aGlzLT52YWx1ZSA6ICR0aGlzLT5vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0pIC4gJyIgIHNpemU9IiVkIiBtYXhsZW5ndGg9IiVkIiAvPic7CiAgICAgICAgJHRtcCA9IHNwcmludGYoJHRtcCwgJHRoaXMtPm9wdGlvbnNbInNpemUiXSwgJHRoaXMtPm9wdGlvbnNbIm1heF9sZW5ndGgiXSk7CiAgICAgICAgLy8gb3JpZ2luYWwgQ1QgZWRpdAogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4oaXNfb2JqZWN0KCRtb2QpID8gJG1vZC0+Q3JlYXRlTGluaygnJywgJ2RlZmF1bHRhZG1pbicsICcnLCAkdGhpcy0+b3B0aW9uc1sidGV4dCJdLCBhcnJheSgpLCAnJywgZmFsc2UsIDAsICd0YXJnZXQ9IicgLiAkdGhpcy0+b3B0aW9uc1sidGFyZ2V0Il0gLiAnIicpIDogJHRoaXMtPm9wdGlvbnNbInRleHQiXSk7IC8vIC4gJzxiciAvPicgLiAkdG1wOyAvLyBDVCBjb21tZW50IG91dAogICAgfQoKCgogICBwcml2YXRlIGZ1bmN0aW9uIF9jcmVhdGVfc2VsZWN0KCAkb3B0aW9ucyApIHsKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLyBkcm9wZG93biBDb250ZW50IEJsb2NrIC0gY3JlYXRlcyBhIHNlbGVjdCB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycyAmICR0aGlzLT5vcHRpb25zCiAgIC8vCiAgIC8vIGNyZWF0ZXMgYSBzZWxlY3QgdXNpbmcgdGhlIHN1cHBsaWVkIG9wdGlvbnMKICAgLy8KICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgICRzbWFydHkgPSBcQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+R2V0U21hcnR5KCk7CgogICAgICAkdHBsID0gJHNtYXJ0eS0+Q3JlYXRlVGVtcGxhdGUoICRtb2QtPkdldFRlbXBsYXRlUmVzb3VyY2UoJ3NlbGVjdF90ZW1wbGF0ZS50cGwnKSwgbnVsbCwgbnVsbCwgJHNtYXJ0eSApOwogICAgICAkdHBsLT5hc3NpZ24oICdibG9ja19uYW1lJywgJHRoaXMtPmJsb2NrX25hbWUgKTsKICAgICAgJHRwbC0+YXNzaWduKCAnZGVzY3JpcHRpb24nLCAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXSApOwogICAgICAkdHBsLT5hc3NpZ24oICdtdWx0aXBsZScsICR0aGlzLT5vcHRpb25zWydtdWx0aXBsZSddICk7CiAgICAgICR0cGwtPmFzc2lnbiggJ2NvbXBhY3QnLCAkdGhpcy0+b3B0aW9uc1snY29tcGFjdCddICk7CiAgICAgICR0cGwtPmFzc2lnbiggJ25vbmVfc2VsZWN0ZWQnLCAkbW9kLT5MYW5nKCdub25lX3NlbGVjdGVkJykgKTsKCiAgICAgIGlmICggaXNzZXQoJHRoaXMtPm9wdGlvbnNbJ3NpemUnXSkgJiYgJHRoaXMtPm9wdGlvbnNbJ3NpemUnXT4wICkgewogICAgICAgICAkc2l6ZSA9ICR0aGlzLT5vcHRpb25zWydzaXplJ107CiAgICAgIH0gZWxzZWlmICggIWVtcHR5KCR0aGlzLT5vcHRpb25zWydjb21wYWN0J10pICkgewogICAgICAgICAkc2l6ZSA9IGNvdW50KCRvcHRpb25zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAgJHNpemUgPSA1OyAgLy8gZGVmYXVsdAogICAgICB9CiAgICAgICR0cGwtPmFzc2lnbiggJ3NpemUnLCAkc2l6ZSApOwoKICAgICAgJHRwbC0+YXNzaWduKCAnc2VsZWN0ZWQnLCAkdGhpcy0+dmFsdWUgKTsKICAgICAgaWYgKCAkdGhpcy0+b3B0aW9uc1snbXVsdGlwbGUnXSApIHsKICAgICAgICAgJHNlbGVjdGVkX3ZhbHVlcyA9IGV4cGxvZGUoJywnLCAkdGhpcy0+dmFsdWUpOwogICAgICAgICAkc2VsZWN0ZWRfdGV4dCA9IFtdOwogICAgICAgICBmb3JlYWNoICgkc2VsZWN0ZWRfdmFsdWVzIGFzICR2YWx1ZSkgewogICAgICAgICAgICAkc2VsZWN0ZWRfdGV4dFtdID0gYXJyYXlfc2VhcmNoKCAkdmFsdWUsICRvcHRpb25zICk7CiAgICAgICAgIH0KICAgICAgICAgJHNlbGVjdGVkX3RleHQgPSBpbXBsb2RlKCcsICcsICRzZWxlY3RlZF90ZXh0KTsKICAgICAgICAgJHRwbC0+YXNzaWduKCAnc2VsZWN0ZWRfdmFsdWVzJywgJHNlbGVjdGVkX3ZhbHVlcyApOyAgLy8gYXJyYXkKICAgICAgICAgJHRwbC0+YXNzaWduKCAnc2VsZWN0ZWRfdGV4dCcsICRzZWxlY3RlZF90ZXh0ICk7ICAgICAgLy8gdGV4dAogICAgICB9CiAgICAgIGlmICggZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ2ZpcnN0X3ZhbHVlJ10pPT1mYWxzZSApCiAgICAgICAgICRvcHRpb25zID0gYXJyYXkoJHRoaXMtPm9wdGlvbnNbJ2ZpcnN0X3ZhbHVlJ10gPT4gJycpICsgJG9wdGlvbnM7CiAgICAgICR0cGwtPmFzc2lnbignb3B0aW9ucycsICRvcHRpb25zICk7CiAgICAgIHJldHVybiAkdHBsLT5mZXRjaCgpOwoKICAgfQoKCgogICAgLyoqCiAgICAqCiAgICAqIEByZXR1cm4gc3RyaW5nIC0gY29udGFpbnMgaHRtbCBmb3IgYSBzZWxlY3QKICAgICovICAgIAogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfZHJvcGRvd24oKSAKICAgIHsKICAgICAgICBpZiAoICR0aGlzLT5vcHRpb25zWydtb2QnXSApIHsKICAgICAgICAgICAgLy8gY2FsbCBtb2R1bGUgdG8gZ2V0IHZhbHVlcwogICAgICAgICAgICAkZXhjbHVkZV9vcHRpb25zID0gWydzaXplJywnbXVsdGlwbGUnLCd2YWx1ZXMnLCdkZWZhdWx0X3ZhbHVlJywnZmlyc3RfdmFsdWUnLCdkZXNjcmlwdGlvbicsCiAgICAgICAgICAgICAgICAnY29tcGFjdCcsJ2ZpZWxkJywnbW9kJywnZmxpcF92YWx1ZXMnXTsKICAgICAgICAgICAgJHBhcmFtcyA9IFtdOwogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+b3B0aW9ucyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKCAhaW5fYXJyYXkoJGtleSwgJGV4Y2x1ZGVfb3B0aW9ucykgKSAkcGFyYW1zWyRrZXldID0gJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRtb2R1bGUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoICR0aGlzLT5vcHRpb25zWydtb2QnXSApOwogICAgICAgICAgICBpZiAoICRtb2R1bGUgKSB7IAogICAgICAgICAgICAgICAgJHRtcF9hY3Rpb24gPSBpc3NldCgkdGhpcy0+b3B0aW9uc1snYWN0aW9uJ10pID8gJHRoaXMtPm9wdGlvbnNbJ2FjdGlvbiddIDogJyc7CiAgICAgICAgICAgICAgICAkY21zX21vZHVsZV9jYWxsID0gIntjbXNfbW9kdWxlIG1vZHVsZT0iLiR0aGlzLT5vcHRpb25zWydtb2QnXTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAkY21zX21vZHVsZV9jYWxsIC49ICIgJGtleT0kdmFsdWUiOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICRjbXNfbW9kdWxlX2NhbGwgLj0gIn0iOwogICAgICAgICAgICAgICAgJHNtYXJ0eSA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRTbWFydHkoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5vcHRpb25zWyJ2YWx1ZXMiXSA9IHN0cmlwX3RhZ3MoJHNtYXJ0eS0+ZmV0Y2goJ3N0cmluZzonLiRjbXNfbW9kdWxlX2NhbGwpKTsKCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggISR0aGlzLT5vcHRpb25zWyd2YWx1ZXMnXSApIHJldHVybjsKCiAgICAgICAgLy8gY3JlYXRlICRvcHRpb25zIGFycmF5IAogICAgICAgICRvcHRpb25zID0gYXJyYXkoKTsKICAgICAgICAkdG1wT3B0aW9ucyA9IGV4cGxvZGUoJywnLCAkdGhpcy0+b3B0aW9uc1sidmFsdWVzIl0pOwogICAgICAgIGZvcmVhY2ggKCR0bXBPcHRpb25zIGFzICRvcHRpb24pIHsKICAgICAgICAgICAgJGtleV92YWwgPSBleHBsb2RlKCc9JywgJG9wdGlvbik7CiAgICAgICAgICAgIGlmICggY291bnQoJGtleV92YWwpPjEgKSB7CiAgICAgICAgICAgICAgICAkb3B0aW9uc1ska2V5X3ZhbFswXV0gPSAka2V5X3ZhbFsxXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRvcHRpb25zWyRrZXlfdmFsWzBdXSA9ICRrZXlfdmFsWzBdOwogICAgICAgICAgICB9CiAgICAgICAgfSAgICAKCiAgICAgICAgaWYgKCAkdGhpcy0+b3B0aW9uc1snZmxpcF92YWx1ZXMnXSApIHsgCiAgICAgICAgICAgICRvcHRpb25zID0gYXJyYXlfZmxpcCgkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPl9jcmVhdGVfc2VsZWN0KCAkb3B0aW9ucyApOwogICAgfQoKCgogICBwcml2YXRlIGZ1bmN0aW9uIGdldF9kcm9wZG93bl9mcm9tX3VkdCgpIHsKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLyBkcm9wZG93biBDb250ZW50IEJsb2NrIHdpdGggJG9wdGlvbnMgYXJyYXkgY29taW5nIGZyb20gYSBVRFQKICAgLy8KICAgLy8gcmV0dXJucyBhIHNlbGVjdAogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgIGlmICghJHRoaXMtPm9wdGlvbnNbInVkdCJdKSByZXR1cm47CgogICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKCiAgICAgIGlmICggVXNlclRhZ09wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5Vc2VyVGFnRXhpc3RzKCR0aGlzLT5vcHRpb25zWyJ1ZHQiXSkgKSB7CiAgICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgICAkb3B0aW9ucyA9IFVzZXJUYWdPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+Q2FsbFVzZXJUYWcoJHRoaXMtPm9wdGlvbnNbInVkdCJdLCAkdG1wKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAgJGVyciA9ICRtb2QtPkxhbmcoJ3VkdF9lcnJvcicsICR0aGlzLT5vcHRpb25zWyJ1ZHQiXSApOwogICAgICAgICAkb3B0aW9ucyA9IGFycmF5KCk7CiAgICAgIH0KCiAgICAgIGlmIChlbXB0eSgkdGhpcy0+b3B0aW9uc1snZmlyc3RfdmFsdWUnXSkgPT0gZmFsc2UpCiAgICAgICAgICRvcHRpb25zID0gYXJyYXkoJHRoaXMtPm9wdGlvbnNbJ2ZpcnN0X3ZhbHVlJ10gPT4gJycpICsgJG9wdGlvbnM7CgogICAgICBpZiAoIWVtcHR5KCRlcnIpKSByZXR1cm4gJzxkaXYgY2xhc3M9InBhZ2V3YXJuaW5nIj4nLiRlcnIuJzwvZGl2Pic7CgogICAgICByZXR1cm4gJHRoaXMtPl9jcmVhdGVfc2VsZWN0KCAkb3B0aW9ucyApOwogICB9CgoKCiAgIC8qKgogICAgKgogICAgKiBAcmV0dXJuIHN0cmluZwogICAgKi8KICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfZHJvcGRvd25fZnJvbV9nYmMoKSB7CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgLy8gZHJvcGRvd24gQ29udGVudCBCbG9jayB3aXRoICRvcHRpb25zIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QgZnJvbSBhIEdDQgogICAvLwogICAvLyByZXR1cm5zIGEgc2VsZWN0CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgaWYgKCEkdGhpcy0+b3B0aW9uc1siZ2JjIl0pIHJldHVybjsKCiAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKCiAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAkb3B0aW9ucyA9IGFycmF5KCk7CiAgICAgICRvcHRpb25zZ2JjID0gJHNtYXJ0eS0+ZmV0Y2goJ2dsb2JhbGNvbnRlbnQ6JyAuICR0aGlzLT5vcHRpb25zWyJnYmMiXSk7CgogICAgICAkb3B0aW9uc2FycmF5ID0gZXhwbG9kZSgnLCcsICRvcHRpb25zZ2JjKTsKICAgICAgaWYgKGVtcHR5KCRvcHRpb25zYXJyYXkpKSByZXR1cm47CgogICAgICBmb3JlYWNoICgkb3B0aW9uc2FycmF5IGFzICRvcHRpb24pIHsKICAgICAgICAgJGtleV92YWwgPSBleHBsb2RlKCc9JywgJG9wdGlvbik7CiAgICAgICAgICRvcHRpb25zWyRrZXlfdmFsWzBdXSA9ICRrZXlfdmFsWzFdOwogICAgICB9CgogICAgICBpZiAoZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ2ZpcnN0X3ZhbHVlJ10pID09IGZhbHNlKQogICAgICAgICAkb3B0aW9ucyA9IGFycmF5KCR0aGlzLT5vcHRpb25zWydmaXJzdF92YWx1ZSddID0+ICcnKSArICRvcHRpb25zOwoKICAgICAgcmV0dXJuICR0aGlzLT5fY3JlYXRlX3NlbGVjdCggJG9wdGlvbnMgKTsKICAgfQoKCgogICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Ryb3Bkb3duX2Zyb21fY3VzdG9tZ3MoKSB7CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgLy8gY3JlYXRlcyBhIGRyb3Bkb3duIGZyb20gdGhlIHZhbHVlcyBpbiBhIEN1c3RvbUdTIGZpZWxkCiAgIC8vIG5vdGU6IHRoZSBDdXN0b21HUyBmaWVsZCBzaG91bGQgYmUgYSBwbGFpbiB0ZXh0YXJlYQogICAvLyAgICAgICB1c2UgZWl0aGVyIG5ld2xpbmVzIG9yIGNvbW1hcyB0byBzZXBhcmF0ZSBlYWNoIHRpdGxlLXZhbHVlIHBhaXIKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAkZHJvcGRvd24gPSBhcnJheSgpOwogICAgICAkZXJyID0gJyc7CiAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgJEN1c3RvbUdTID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDdXN0b21HUycpOwoKICAgICAgaWYoIGlzX29iamVjdCgkQ3VzdG9tR1MpICkgewogICAgICAgICAvLyBjcmVhdGUgYXJyYXkgJGRyb3Bkb3duIHdpdGggYQogICAgICAgICAkc2VsZWN0T3B0aW9ucyA9ICRDdXN0b21HUy0+R2V0RmllbGQoICR0aGlzLT5vcHRpb25zWydjdXN0b21nc19maWVsZCddICk7CiAgICAgICAgIGlmICggZW1wdHkoJHNlbGVjdE9wdGlvbnNbJ3ZhbHVlJ10pICkgewogICAgICAgICAgICAkZXJyID0gJzxkaXYgY2xhc3M9InBhZ2V3YXJuaW5nIj4nIC4gJG1vZC0+TGFuZygnY3VzdG9tZ3NfZmllbGRfZXJyb3InLCAkdGhpcy0+b3B0aW9uc1snY3VzdG9tZ3NfZmllbGQnXSApIC4gJzwvZGl2Pjxicj4nOwoKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gdXNlIGVpdGhlciBuZXdsaW5lcyBvciBjb21tYXMgdG8gc2VwYXJhdGUgZWFjaCB0aXRsZS12YWx1ZSBwYWlyCiAgICAgICAgICAgICRzZWxlY3RPcHRpb25zID0gc3RyX3JlcGxhY2UoUEhQX0VPTCwgJywnLCAkc2VsZWN0T3B0aW9uc1sndmFsdWUnXSk7CiAgICAgICAgICAgICRzZWxlY3RMaW5lcyA9IGV4cGxvZGUoJywnLCAkc2VsZWN0T3B0aW9ucyk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRzZWxlY3RMaW5lcyBhcyAkb25lT3B0aW9uKSB7CiAgICAgICAgICAgICAgICRvcHQgPSBleHBsb2RlKCAnPScsIHRyaW0oJG9uZU9wdGlvbikgKTsKICAgICAgICAgICAgICAgJGRyb3Bkb3duWyRvcHRbMF1dID0gaXNTZXQoJG9wdFsxXSkgPyAkb3B0WzFdIDogJG9wdFswXTsKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiAkZXJyLiR0aGlzLT5fY3JlYXRlX3NlbGVjdCggJGRyb3Bkb3duICk7CiAgIH0KCgoKCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF9tb2R1bGUoKSB7CgogICAgICAgICRtb2RvcHMgPSBjbXNtcygpLT5HZXRNb2R1bGVPcGVyYXRpb25zKCk7CiAgICAgICAgJG1vZHVsZXMgPSAkbW9kb3BzLT5HZXRJbnN0YWxsZWRNb2R1bGVzKCk7CiAgICAgICAgJG1vZHVsZXNhcnJheSA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJG1vZHVsZXMgYXMgJG1vZHVsZSkgewogICAgICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRtb2R1bGUpOwogICAgICAgICAgICBpZiAoaXNfb2JqZWN0KCRtb2QpKQogICAgICAgICAgICAgICAgJG1vZHVsZXNhcnJheVskbW9kLT5HZXROYW1lKCldID0gJG1vZHVsZTsKICAgICAgICB9CgogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJG1vZC0+Q3JlYXRlSW5wdXREcm9wZG93bignJywgJHRoaXMtPmJsb2NrX25hbWUsICRtb2R1bGVzYXJyYXksIC0xLCAkdGhpcy0+dmFsdWUpOwogICAgfQoKCgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfcmFkaW8oKSB7CiAgICAgICAgaWYgKCEkdGhpcy0+b3B0aW9uc1sidmFsdWVzIl0pCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwoKICAgICAgICAkb3B0aW9ucyA9IGFycmF5KCk7CgogICAgICAgICRvcHRpb25zYXJyYXkgPSBleHBsb2RlKCcsJywgJHRoaXMtPm9wdGlvbnNbInZhbHVlcyJdKTsKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNhcnJheSkpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgZm9yZWFjaCAoJG9wdGlvbnNhcnJheSBhcyAkb3B0aW9uKSB7CiAgICAgICAgICAgICRrZXlfdmFsID0gZXhwbG9kZSgnPScsICRvcHRpb24pOwogICAgICAgICAgICAkb3B0aW9uc1ska2V5X3ZhbFswXV0gPSAka2V5X3ZhbFsxXTsKICAgICAgICB9CgogICAgICAgICRkZWxpbWl0ZXIgPSAoJHRoaXMtPm9wdGlvbnNbImlubGluZSJdKSA/ICcmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsnIDogJzxicj4nOwoKICAgICAgICBpZiAoICFlbXB0eSgkdGhpcy0+dmFsdWUpICkgewogICAgICAgICAgICAkc2VsZWN0ZWRWYWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoJHRoaXMtPm9wdGlvbnNbImRlZmF1bHRfdmFsdWUiXT09Jy0xJykgewogICAgICAgICAgICAgICAgJHNlbGVjdGVkVmFsdWUgPSByZXNldCgkb3B0aW9ucyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkc2VsZWN0ZWRWYWx1ZSA9ICRvcHRpb25zWyR0aGlzLT5vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl1dOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJG1vZC0+Q3JlYXRlSW5wdXRSYWRpb0dyb3VwKCcnLCAkdGhpcy0+YmxvY2tfbmFtZSwgJG9wdGlvbnMsICRzZWxlY3RlZFZhbHVlLCAnJywgJGRlbGltaXRlcik7CiAgICB9CgoKCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2hpZGRlbigpIHsKICAgICAgICAkdG1wID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiVzIiB2YWx1ZT0iJXMiPic7CiAgICAgICAgJGlucHV0ID0gc3ByaW50ZigkdG1wLCAkdGhpcy0+YmxvY2tfbmFtZSwgJHRoaXMtPm9wdGlvbnNbJ3ZhbHVlJ10pOwogICAgICAgIHJldHVybiAkaW5wdXQ7CiAgICB9CgoKCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2ZpZWxkc2V0X3N0YXJ0KCkgewogICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAvLwogICAgLy8KICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICR0bXAgPSAnPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZmllbGRzZXQgbmFtZT0iJXMiPgogICAgICAgICAgICA8bGVnZW5kPiVzPC9sZWdlbmQ+CiAgICAgICAgICAgICVzCiAgICAgICAgPGRpdj48cD4nOwogICAgICAgICRpbnB1dCA9IHNwcmludGYoJHRtcCwgJHRoaXMtPmJsb2NrX25hbWUsICR0aGlzLT5vcHRpb25zWydsZWdlbmQnXSwgJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pOwogICAgICAgIHJldHVybiAkaW5wdXQ7CiAgICB9CgoKCiAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZmllbGRzZXRfZW5kKCkgewogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgLy8KICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgIHJldHVybiAnPC9wPgogICAgICA8L2Rpdj4KICAgICAgPC9maWVsZHNldD4KICAgICAgPGRpdj48cD4nOwogICB9CgoKCiAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZ2FsbGVyeV9waWNrZXIoKSB7CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgLy8gZ2FsbGVyeV9waWNrZXIgQ29udGVudCBCbG9jawogICAvLwogICAvLyByZXR1cm5zIGFuIHNlbGVjdCBpbnB1dCBvZiBnYWxsZXJpZXMgJ2dhbGxlcnkgdGl0bGUnID0+ICdnYWxsZXJ5LWRpcicsIGhvbWUgZ2FsbGVyeSBpcyBleGNsdWRlZAogICAvLyBQYXJhbWV0ZXJzOgogICAvLyAgICBkaXIgLSBvbmx5IHJldHVybiBnYWxsZXJpZXMgdGhhdCBhcmUgc3ViLWdhbGxlcmllcyBvZiB0aGlzIGdhbGxlcnkgZGlyLAogICAvLyAgICAgICAgICBkZWZhdWx0IGlzIGFsbCBnYWxsZXJpZXMsIGV4Y2x1ZGluZyBkZWZhdWx0IHRvcCBsZXZlbCBnYWxsZXJ5CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgJGRpciA9ICR0aGlzLT5vcHRpb25zWydkaXInXS4nLyc7ICAgIC8vIGRlZmF1bHQgZGlyIChuZWVkcyAnLycgYXQgZW5kKQoKICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAkR2FsbGVyeU1vZHVsZSA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnR2FsbGVyeScpOwogICAgICBpZiAoIWlzX29iamVjdCgkR2FsbGVyeU1vZHVsZSkpIHsKICAgICAgICAgJGVyciA9ICc8ZGl2IGNsYXNzPSJwYWdld2FybmluZyI+JyAuICRtb2QtPkxhbmcoJ2dhbGxlcnlfbW9kdWxlX2Vycm9yJykgLiAnPC9kaXY+PGJyPic7CiAgICAgICAgIHJldHVybiAkZXJyOwogICAgICB9CgogICAgICAkZ2FsbGVyaWVzID0gR2FsbGVyeV91dGlsczo6R2V0R2FsbGVyaWVzKCk7CiAgICAgICRnYWxsZXJ5QXJyYXkgPSBhcnJheSgnLS0tIG5vbmUgLS0tJyA9PiAnJyk7CgogICAgICBmb3JlYWNoICgkZ2FsbGVyaWVzIGFzICRnYWxsZXJ5KSB7CiAgICAgICAgIGlmICgkZ2FsbGVyeVsnZmlsZW5hbWUnXSE9JycpIHsgICAgLy8gaWdub3JlcyBkZWZhdWx0IGdhbGxlcnkKICAgICAgICAgICAgaWYgKCRkaXIhPScvJykgewogICAgICAgICAgICAgICAvLyBvbmx5IHNlbGVjdCBzdWItZ2FsbGVyaWVzIG9mICRkaXIKICAgICAgICAgICAgICAgJGlzU3ViRGlyID0gc3RyaXBvcygkZ2FsbGVyeVsnZmlsZXBhdGgnXSwgJGRpcik7CgogICAgICAgICAgICAgICBpZiAoJGlzU3ViRGlyIT09RkFMU0UgJiYgJGlzU3ViRGlyPT0wKSB7CiAgICAgICAgICAgICAgICAgICRnYWxsZXJ5X2RpciA9ICRnYWxsZXJ5WydmaWxlcGF0aCddLnJ0cmltKCRnYWxsZXJ5WydmaWxlbmFtZSddLCAnLycpOwogICAgICAgICAgICAgICAgICAkZ2FsbGVyeUFycmF5WyRnYWxsZXJ5Wyd0aXRsZSddXSA9ICRnYWxsZXJ5X2RpcjsKICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgLy8gc2VsZWN0IGFsbCBnYWxsZXJpZXMKICAgICAgICAgICAgICAgJGdhbGxlcnlfZGlyID0gJGdhbGxlcnlbJ2ZpbGVwYXRoJ10ucnRyaW0oJGdhbGxlcnlbJ2ZpbGVuYW1lJ10sICcvJyk7CiAgICAgICAgICAgICAgICRnYWxsZXJ5QXJyYXlbJGdhbGxlcnlbJ3RpdGxlJ11dID0gJGdhbGxlcnlfZGlyOwogICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLiRtb2QtPkNyZWF0ZUlucHV0RHJvcGRvd24oJycsICR0aGlzLT5ibG9ja19uYW1lLCAkZ2FsbGVyeUFycmF5LCAtMSwgJHRoaXMtPnZhbHVlKTsKICAgfQoKCgogICBwcml2YXRlIGZ1bmN0aW9uIGdldF9pbnB1dF9yZXBlYXRlcigpIHsKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLyAgICBjcmVhdGVzIGEgcmVwZWF0aW5nIHRleHQgZmllbGQgdGhhdAogICAvLwogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICRzbWFydHkgPSBcQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+R2V0U21hcnR5KCk7CiAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKCiAgICAgICRmaWVsZHMgPSBleHBsb2RlKCd8fCcsICR0aGlzLT52YWx1ZSk7CiAgICAgICR0cGwgPSAkc21hcnR5LT5DcmVhdGVUZW1wbGF0ZSggJG1vZC0+R2V0VGVtcGxhdGVSZXNvdXJjZSgnaW5wdXRfcmVwZWF0ZXJfdGVtcGxhdGUudHBsJyksIG51bGwsIG51bGwsICRzbWFydHkgKTsKICAgICAgJHRwbC0+YXNzaWduKCdibG9ja19uYW1lJywgJHRoaXMtPmJsb2NrX25hbWUgKTsKICAgICAgJHRwbC0+YXNzaWduKCdzaXplJywgJHRoaXMtPm9wdGlvbnNbInNpemUiXSApOwogICAgICAkdHBsLT5hc3NpZ24oJ21heF9sZW5ndGgnLCAkdGhpcy0+b3B0aW9uc1sibWF4X2xlbmd0aCJdICk7CiAgICAgICR0cGwtPmFzc2lnbigndmFsdWUnLCAkdGhpcy0+dmFsdWUgKTsKICAgICAgJHRwbC0+YXNzaWduKCdmaWVsZHMnLCAkZmllbGRzICk7CiAgICAgICR0cGwtPmFzc2lnbignZGVzY3JpcHRpb24nLCAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXSApOwogICAgICAkdHBsLT5hc3NpZ24oJ3RpdGxlX2FkZF9saW5lJywgJG1vZC0+TGFuZygnYWRkX2xpbmUnKSApOwogICAgICAkdHBsLT5hc3NpZ24oJ3RpdGxlX3JlbW92ZV9saW5lJywgJG1vZC0+TGFuZygncmVtb3ZlX2xpbmUnKSApOwogICAgICByZXR1cm4gJHRwbC0+ZmV0Y2goKTsKICAgfQoKCgoKICAgIC8qKgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X2ltYWdlKCkgCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+b3B0aW9uc1snaW1hZ2UnXSkgcmV0dXJuOwoKICAgICAgICAkc21hcnR5ID0gXENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldFNtYXJ0eSgpOwogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgICAkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CiAgICAgICAgJGltZ191cmwgPSBjbXNfam9pbl9wYXRoKCAkY29uZmlnWyd1cGxvYWRzX3VybCddLCAkdGhpcy0+b3B0aW9uc1snaW1hZ2UnXSApOwogICAgICAgICR0cGwgPSAkc21hcnR5LT5DcmVhdGVUZW1wbGF0ZSggJG1vZC0+R2V0VGVtcGxhdGVSZXNvdXJjZSgnaW1hZ2VfdGVtcGxhdGUudHBsJyksIG51bGwsIG51bGwsICRzbWFydHkgKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2Jsb2NrX25hbWUnLCAkdGhpcy0+YmxvY2tfbmFtZSApOwogICAgICAgICR0cGwtPmFzc2lnbignaW1nX3VybCcsICRpbWdfdXJsICk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdkZXNjcmlwdGlvbicsICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddICk7CiAgICAgICAgcmV0dXJuICR0cGwtPmZldGNoKCk7CiAgICB9CgoKCgogICBwcml2YXRlIGZ1bmN0aW9uIGdldF9leHRyYV9vcHRpb25zKGFycmF5ICRwYXJhbXMpIHsKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLwogICAvLwogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgIGlmICghaXNTZXQoJHBhcmFtc1siZmllbGQiXSkpCiAgICAgICAgIHJldHVybjsKCiAgICAgICRvcHRpb25zID0gYXJyYXkoKTsKICAgICAgJGRlZmF1bHRfb3B0aW9ucyA9IGFycmF5KCk7CiAgICAgIHN3aXRjaCAoc3RydG9sb3dlcigkcGFyYW1zWyJmaWVsZCJdKSkgewogICAgICAgICAgICBjYXNlICJjb2xvcl9waWNrZXIiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sic2l6ZSJdID0gMTA7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbJ25vX2hhc2gnXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1snY2xlYXJfY3NzX2NhY2hlJ10gPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJtb2R1bGVfbGluayI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJtb2QiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidGV4dCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ0YXJnZXQiXSA9ICdfc2VsZic7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInNpemUiXSA9IDMwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibWF4X2xlbmd0aCJdID0gMjU1OwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxpbmsiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidGV4dCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ0YXJnZXQiXSA9ICdfc2VsZic7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJsaW5rIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJtb2R1bGUiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ0ZXh0Il0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImxpbmsiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImRyb3Bkb3duX2Zyb21fbW9kdWxlIjoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbIm1vZCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImZpcnN0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWxlX3NlbGVjdG9yIjoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImZpbGV0eXBlcyJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJleGNsdWRlcHJlZml4Il0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInJlY3Vyc2UiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sic29ydGZpbGVzIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRpciJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJwcmV2aWV3Il0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJkcm9wZG93biI6CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInNpemUiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJtdWx0aXBsZSJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInZhbHVlcyJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJmaXJzdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siY29tcGFjdCJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImZsaXBfdmFsdWVzIl0gPSAnJzsKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImRyb3Bkb3duX2Zyb21fdWR0IjoKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sic2l6ZSJdID0gNTsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibXVsdGlwbGUiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ2YWx1ZXMiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZmlyc3RfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ1ZHQiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImNvbXBhY3QiXSA9ICcnOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZHJvcGRvd25fZnJvbV9nYmMiOgogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJzaXplIl0gPSA1OwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJtdWx0aXBsZSJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInZhbHVlcyJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJmaXJzdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImdiYyJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siY29tcGFjdCJdID0gJyc7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdkcm9wZG93bl9mcm9tX2N1c3RvbWdzJzoKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1snbXVsdGlwbGUnXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWydzaXplJ10gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1snY3VzdG9tZ3NfZmllbGQnXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWydkZXNjcmlwdGlvbiddID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImNvbXBhY3QiXSA9ICcnOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidGV4dGFyZWEiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJyb3dzIl0gPSAyMDsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImNvbHMiXSA9IDgwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVkaXRvciI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInJvd3MiXSA9IDIwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siY29scyJdID0gODA7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaW5wdXQiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJzaXplIl0gPSAzMDsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbIm1heF9sZW5ndGgiXSA9IDI1NTsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzb3J0YWJsZWxpc3QiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidmFsdWVzIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImZpcnN0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImFsbG93ZHVwbGljYXRlcyJdID0gZmFsc2U7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJtYXhfc2VsZWN0ZWQiXSA9IC0xOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibGFiZWxfbGVmdCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJsYWJlbF9yaWdodCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ1ZHQiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibWF4X251bWJlciJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJyZXF1aXJlZF9udW1iZXIiXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRleHQiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidGV4dCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJleGVjdXRlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJwYWdlcyI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJjaGVja2JveCI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd0aW1lcGlja2VyJzoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInNpemUiXSA9IDEwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibWF4X2xlbmd0aCJdID0gMTA7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ0aW1lX2Zvcm1hdCJdID0gJ0hIOm1tJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdkYXRlcGlja2VyJzoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInNpemUiXSA9IDIwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibWF4X2xlbmd0aCJdID0gMjA7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkYXRlX2Zvcm1hdCJdID0gJ3l5LW1tLWRkJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInRpbWVfZm9ybWF0Il0gPSAnSEg6bW0nOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidGltZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJjaGFuZ2VfbW9udGgiXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siY2hhbmdlX3llYXIiXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sieWVhcl9yYW5nZSJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAncmFkaW8nOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibXVsdGlwbGUiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidmFsdWVzIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSA9IC0xOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siaW5saW5lIl0gPSBmYWxzZTsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJociI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaW1hZ2VfcGlja2VyIjoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdoaWRkZW4nOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sndmFsdWUnXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2ZpZWxkc2V0X3N0YXJ0JzoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbJ2xlZ2VuZCddID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZ2FsbGVyeV9waWNrZXInOgogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWydkaXInXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWydkZXNjcmlwdGlvbiddID0gJyc7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJpbnB1dF9yZXBlYXRlciI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInNpemUiXSA9IDUwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibWF4X2xlbmd0aCJdID0gMjU1OwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbJ2ltYWdlJ10gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmZpZWxkID0gJHBhcmFtc1siZmllbGQiXTsKCiAgICAgICAgaWYgKCBpbl9hcnJheSggJHBhcmFtc1siZmllbGQiXSwgWydkcm9wZG93bicsJ3NvcnRhYmxlbGlzdCddICkgKSB7CiAgICAgICAgICAgIC8vIGFjY2VwdCBhbGwgcGFyYW1zIC0gdG8gcG9zc2libHkgcGFzcyBvbnRvIG1vZHVsZQogICAgICAgICAgICBpZiAoICFlbXB0eSgkcGFyYW1zKSApIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleSA9PiAkcGFyYW0pIHsKICAgICAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyRrZXldID0gJHBhcmFtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIG9ubHkgdXNlIHBhcmFtcyB0aGF0IGhhdmUgYSBkZWZhdWx0IHNldAogICAgICAgICAgICBpZiAoZW1wdHkoJHBhcmFtcykgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleSA9PiAkcGFyYW0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNTZXQoJGRlZmF1bHRfb3B0aW9uc1ska2V5XSkgJiYgZW1wdHkoJHBhcmFtKSA9PSBmYWxzZSkKICAgICAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyRrZXldID0gJHBhcmFtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+b3B0aW9ucyA9ICRkZWZhdWx0X29wdGlvbnM7CiAgICB9Cgp9CgoK]]></data>
	</file>
	<file>
	  <filename>/lib/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/css/ecb2_admin.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogZWNiMl9hZG1pbi5jc3MgLSB2MS4yIC0gMjRNYXIyMg0KDQogICAgLSB2MS4yIC0gMjRNYXIyMiAtIGFkZGQgaW4gY29scGljayBjc3MNCiAgICAtIHYxLjEgLSAxNkZlYjE5IC0gZWNiX3JlcGVhdGVyIGFkZGVkICYgYmVnYW4gY29uc29saWRhdGluZyBDU1MgaW50byB0aGlzIGZpbGUNCiAgICAtIHYxLjAgLSAxOEFwcjE3IC0gaW5pdGlhbCBjc3MgZmlsZQ0KDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCi5zb3J0YWJsZS1lY2IyLWxpc3QgdHIge2N1cnNvcjptb3ZlO30NCiNsb2FkZXIge3BhZGRpbmctbGVmdDo1MHB4O30NCg0KLmVjYjItYnV0dG9uLWlubGluZSB7cGFkZGluZy1yaWdodDoxMHB4OyBwYWRkaW5nLWxlZnQ6MTBweDsgZm9udC1zaXplOjIwcHg7IGZvbnQtd2VpZ2h0OmJvbGQ7fQ0KDQouZWNiX3JlcGVhdGVyIC5yZXBlYXRlci13cmFwcGVyIHt3aWR0aDoxMDAlO30NCi5lY2JfcmVwZWF0ZXIgLnJlcGVhdGVyLXdyYXBwZXI6Zmlyc3QtY2hpbGQgLmVjYjItcmVwZWF0ZXItcmVtb3ZlIHtkaXNwbGF5Om5vbmU7fQ0KLmVjYl9yZXBlYXRlciAucmVwZWF0ZXItZmllbGQge21heC13aWR0aDpjYWxjKDEwMCUgLSAxMDBweCk7fQ0KDQouZWNiX2NvbXBhY3QgLmVjYl9zZWxlY3RfZWRpdDo6YmVmb3JlIHtjb250ZW50OidIaWRlJzt9DQouZWNiX2NvbXBhY3Qgc2VsZWN0IHtkaXNwbGF5OmlubGluZS1ibG9jazsgbWF4LWhlaWdodDo4MHZoO30NCi5lY2JfY29tcGFjdDpub3QoLnNob3cpIC5lY2Jfc2VsZWN0X2VkaXQ6OmJlZm9yZSB7Y29udGVudDonRWRpdCc7fQ0KLmVjYl9jb21wYWN0Om5vdCguc2hvdykgc2VsZWN0IHtkaXNwbGF5Om5vbmU7fQ0KDQoNCg0KLyogY29scGljayBDb2xvciBQaWNrZXIgLyBodHRwczovL2dpdGh1Yi5jb20vam9zZWR2cS9jb2xwaWNrLWpRdWVyeS1Db2xvci1QaWNrZXIgIGh0dHA6Ly93d3cuaHRtbGRyaXZlLm5ldC9pdGVtcy9kZW1vLzEzNTgvY29scGljay1BLWpRdWVyeS1SR0ItSEVYLWFuZC1IU0ItQ29sb3ItUGlja2VyLXBsdWdpbi1pcy1mcmVlLWxpZ2h0d2VpZ2h0LWFuZC1jdXN0b21pemFibGUNCiovDQoNCi8qTWFpbiBjb250YWluZXIqLw0KLmNvbHBpY2sgew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBib3gtc2l6aW5nOmNvbnRlbnQtYm94Ow0KCXdpZHRoOiAzNDZweDsNCgloZWlnaHQ6IDE3MHB4Ow0KCW92ZXJmbG93OiBoaWRkZW47DQoJZGlzcGxheTogbm9uZTsNCglmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCiAgICBkaXJlY3Rpb246bHRyOw0KCWJhY2tncm91bmQ6I2ViZWJlYjsNCglib3JkZXI6IDFweCBzb2xpZCAjYmJiOw0KCS13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4Ow0KCS1tb3otYm9yZGVyLXJhZGl1czogNXB4Ow0KCWJvcmRlci1yYWRpdXM6IDVweDsNCgkNCgkvKlByZXZlbnRzIHNlbGVjdGluZyB0ZXh0IHdoZW4gZHJhZ2dpbmcgdGhlIHNlbGVjdG9ycyovDQoJLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsNCgktbW96LXVzZXItc2VsZWN0OiBub25lOw0KCS1tcy11c2VyLXNlbGVjdDogbm9uZTsNCgktby11c2VyLXNlbGVjdDogbm9uZTsNCgl1c2VyLXNlbGVjdDogbm9uZTsNCn0NCi8qQ29sb3Igc2VsZWN0aW9uIGJveCB3aXRoIGdyYWRpZW50cyovDQouY29scGlja19jb2xvciB7DQoJcG9zaXRpb246IGFic29sdXRlOw0KCWxlZnQ6IDdweDsNCgl0b3A6IDdweDsNCgl3aWR0aDogMTU2cHg7DQoJaGVpZ2h0OiAxNTZweDsNCglvdmVyZmxvdzogaGlkZGVuOw0KCW91dGxpbmU6IDFweCBzb2xpZCAjYWFhOw0KCWN1cnNvcjogY3Jvc3NoYWlyOw0KfQ0KLmNvbHBpY2tfY29sb3Jfb3ZlcmxheTEgew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCglsZWZ0OjA7DQoJdG9wOjA7DQoJd2lkdGg6IDE1NnB4Ow0KCWhlaWdodDogMTU2cHg7DQoJLW1zLWZpbHRlcjogInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChHcmFkaWVudFR5cGU9MSxzdGFydENvbG9yc3RyPScjZmZmZmZmJywgZW5kQ29sb3JzdHI9JyMwMGZmZmZmZicpIjsgLyogSUU4ICovDQoJYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgyNTUsMjU1LDI1NSwxKSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAlKTsgLyogRkYzLjYrICovDQoJYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCByaWdodCB0b3AsIGNvbG9yLXN0b3AoMCUscmdiYSgyNTUsMjU1LDI1NSwxKSksIGNvbG9yLXN0b3AoMTAwJSxyZ2JhKDI1NSwyNTUsMjU1LDApKSk7IC8qIENocm9tZSxTYWZhcmk0KyAqLw0KCWJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMjU1LDI1NSwyNTUsMSkgMCUscmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAlKTsgLyogQ2hyb21lMTArLFNhZmFyaTUuMSsgKi8NCgliYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgyNTUsMjU1LDI1NSwxKSAwJSxyZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpOyAvKiBPcGVyYSAxMS4xMCsgKi8NCgliYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMjU1LDI1NSwyNTUsMSkgMCUscmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAlKTsgLyogSUUxMCsgKi8NCgliYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LDI1NSwyNTUsMSkgMCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7DQoJZmlsdGVyOiAgcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KEdyYWRpZW50VHlwZT0xLHN0YXJ0Q29sb3JzdHI9JyNmZmZmZmYnLCBlbmRDb2xvcnN0cj0nIzAwZmZmZmZmJyk7IC8qIElFNiAmIElFNyAqLw0KfQ0KLmNvbHBpY2tfY29sb3Jfb3ZlcmxheTIgew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCglsZWZ0OjA7DQoJdG9wOjA7DQoJd2lkdGg6IDE1NnB4Ow0KCWhlaWdodDogMTU2cHg7DQoJLW1zLWZpbHRlcjogInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChHcmFkaWVudFR5cGU9MCxzdGFydENvbG9yc3RyPScjMDAwMDAwMDAnLCBlbmRDb2xvcnN0cj0nIzAwMDAwMCcpIjsgLyogSUU4ICovDQoJYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDAsMCwwLDApIDAlLCByZ2JhKDAsMCwwLDEpIDEwMCUpOyAvKiBGRjMuNisgKi8NCgliYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLHJnYmEoMCwwLDAsMCkpLCBjb2xvci1zdG9wKDEwMCUscmdiYSgwLDAsMCwxKSkpOyAvKiBDaHJvbWUsU2FmYXJpNCsgKi8NCgliYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMCwwLDAsMCkgMCUscmdiYSgwLDAsMCwxKSAxMDAlKTsgLyogQ2hyb21lMTArLFNhZmFyaTUuMSsgKi8NCgliYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDAsMCwwLDApIDAlLHJnYmEoMCwwLDAsMSkgMTAwJSk7IC8qIE9wZXJhIDExLjEwKyAqLw0KCWJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDAsMCwwLDApIDAlLHJnYmEoMCwwLDAsMSkgMTAwJSk7IC8qIElFMTArICovDQoJYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLDAsMCwwKSAwJSxyZ2JhKDAsMCwwLDEpIDEwMCUpOyAvKiBXM0MgKi8NCglmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCggc3RhcnRDb2xvcnN0cj0nIzAwMDAwMDAwJywgZW5kQ29sb3JzdHI9JyMwMDAwMDAnLEdyYWRpZW50VHlwZT0wICk7IC8qIElFNi05ICovDQp9DQovKkNpcmN1bGFyIGNvbG9yIHNlbGVjdG9yKi8NCi5jb2xwaWNrX3NlbGVjdG9yX291dGVyIHsNCgliYWNrZ3JvdW5kOm5vbmU7DQoJcG9zaXRpb246IGFic29sdXRlOw0KCXdpZHRoOiAxMXB4Ow0KCWhlaWdodDogMTFweDsNCgltYXJnaW46IC02cHggMCAwIC02cHg7DQoJYm9yZGVyOiAxcHggc29saWQgYmxhY2s7DQoJYm9yZGVyLXJhZGl1czogNTAlOw0KfQ0KLmNvbHBpY2tfc2VsZWN0b3JfaW5uZXJ7DQoJcG9zaXRpb246IGFic29sdXRlOw0KCXdpZHRoOiA5cHg7DQoJaGVpZ2h0OiA5cHg7DQoJYm9yZGVyOiAxcHggc29saWQgd2hpdGU7DQoJYm9yZGVyLXJhZGl1czogNTAlOw0KfQ0KLypWZXJ0aWNhbCBodWUgYmFyKi8NCi5jb2xwaWNrX2h1ZSB7DQoJcG9zaXRpb246IGFic29sdXRlOw0KCXRvcDogNnB4Ow0KCWxlZnQ6IDE3NXB4Ow0KCXdpZHRoOiAxOXB4Ow0KCWhlaWdodDogMTU2cHg7DQoJYm9yZGVyOiAxcHggc29saWQgI2FhYTsNCgljdXJzb3I6IG4tcmVzaXplOw0KfQ0KLypIdWUgYmFyIHNsaWRpbmcgaW5kaWNhdG9yKi8NCi5jb2xwaWNrX2h1ZV9hcnJzIHsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJbGVmdDogLThweDsNCgl3aWR0aDogMzVweDsNCgloZWlnaHQ6IDdweDsNCgltYXJnaW46IC03cHggMCAwIDA7DQp9DQouY29scGlja19odWVfbGFyciB7DQoJcG9zaXRpb246YWJzb2x1dGU7DQoJd2lkdGg6IDA7IA0KCWhlaWdodDogMDsgDQoJYm9yZGVyLXRvcDogNnB4IHNvbGlkIHRyYW5zcGFyZW50Ow0KCWJvcmRlci1ib3R0b206IDZweCBzb2xpZCB0cmFuc3BhcmVudDsNCglib3JkZXItbGVmdDogN3B4IHNvbGlkICM4NTg1ODU7DQp9DQouY29scGlja19odWVfcmFyciB7DQoJcG9zaXRpb246YWJzb2x1dGU7DQoJcmlnaHQ6MDsNCgl3aWR0aDogMDsgDQoJaGVpZ2h0OiAwOyANCglib3JkZXItdG9wOiA2cHggc29saWQgdHJhbnNwYXJlbnQ7DQoJYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIHRyYW5zcGFyZW50OyANCglib3JkZXItcmlnaHQ6IDdweCBzb2xpZCAjODU4NTg1OyANCn0NCi8qTmV3IGNvbG9yIGJveCovDQouY29scGlja19uZXdfY29sb3Igew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCglsZWZ0OiAyMDdweDsNCgl0b3A6IDZweDsNCgl3aWR0aDogNjBweDsNCgloZWlnaHQ6IDI3cHg7DQoJYmFja2dyb3VuZDogI2YwMDsNCglib3JkZXI6IDFweCBzb2xpZCAjOGY4ZjhmOw0KfQ0KLypDdXJyZW50IGNvbG9yIGJveCovDQouY29scGlja19jdXJyZW50X2NvbG9yIHsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJbGVmdDogMjc3cHg7DQoJdG9wOiA2cHg7DQoJd2lkdGg6IDYwcHg7DQoJaGVpZ2h0OiAyN3B4Ow0KCWJhY2tncm91bmQ6ICNmMDA7DQoJYm9yZGVyOiAxcHggc29saWQgIzhmOGY4ZjsNCn0NCi8qSW5wdXQgZmllbGQgY29udGFpbmVycyovDQouY29scGlja19maWVsZCwgLmNvbHBpY2tfaGV4X2ZpZWxkICB7DQoJcG9zaXRpb246IGFic29sdXRlOw0KCWhlaWdodDogMjBweDsNCgl3aWR0aDogNjBweDsNCglvdmVyZmxvdzpoaWRkZW47DQoJYmFja2dyb3VuZDojZjNmM2YzOw0KCWNvbG9yOiNiOGI4Yjg7DQoJZm9udC1zaXplOjEycHg7DQoJYm9yZGVyOjFweCBzb2xpZCAjYmRiZGJkOw0KCS13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4Ow0KCS1tb3otYm9yZGVyLXJhZGl1czogM3B4Ow0KCWJvcmRlci1yYWRpdXM6IDNweDsNCn0NCi5jb2xwaWNrX3JnYl9yIHsNCgl0b3A6IDQwcHg7DQoJbGVmdDogMjA3cHg7DQp9DQouY29scGlja19yZ2JfZyB7DQoJdG9wOiA2N3B4Ow0KCWxlZnQ6IDIwN3B4Ow0KfQ0KLmNvbHBpY2tfcmdiX2Igew0KCXRvcDogOTRweDsNCglsZWZ0OiAyMDdweDsNCn0NCi5jb2xwaWNrX2hzYl9oIHsNCgl0b3A6IDQwcHg7DQoJbGVmdDogMjc3cHg7DQp9DQouY29scGlja19oc2JfcyB7DQoJdG9wOiA2N3B4Ow0KCWxlZnQ6IDI3N3B4Ow0KfQ0KLmNvbHBpY2tfaHNiX2Igew0KCXRvcDogOTRweDsNCglsZWZ0OiAyNzdweDsNCn0NCi5jb2xwaWNrX2hleF9maWVsZCB7DQoJd2lkdGg6IDY4cHg7DQoJbGVmdDogMjA3cHg7DQoJdG9wOiAxMjFweDsNCn0NCi8qVGV4dCBmaWVsZCBjb250YWluZXIgb24gZm9jdXMqLw0KLmNvbHBpY2tfZm9jdXMgew0KCWJvcmRlci1jb2xvcjogIzk5OTsNCn0NCi8qRmllbGQgbGFiZWwgY29udGFpbmVyKi8NCi5jb2xwaWNrX2ZpZWxkX2xldHRlciB7DQoJcG9zaXRpb246IGFic29sdXRlOw0KCXdpZHRoOiAxMnB4Ow0KCWhlaWdodDogMjBweDsNCglsaW5lLWhlaWdodDogMjBweDsNCglwYWRkaW5nLWxlZnQ6IDRweDsNCgliYWNrZ3JvdW5kOiAjZWZlZmVmOw0KCWJvcmRlci1yaWdodDogMXB4IHNvbGlkICNiZGJkYmQ7DQoJZm9udC13ZWlnaHQ6IGJvbGQ7DQoJY29sb3I6Izc3NzsNCn0NCi8qVGV4dCBpbnB1dHMqLw0KLmNvbHBpY2tfZmllbGQgaW5wdXQsIC5jb2xwaWNrX2hleF9maWVsZCBpbnB1dCB7DQoJcG9zaXRpb246IGFic29sdXRlOw0KCXJpZ2h0OiAxMXB4Ow0KCW1hcmdpbjogMDsNCglwYWRkaW5nOiAwOw0KCWhlaWdodDogMjBweDsNCglsaW5lLWhlaWdodDogMjBweDsNCgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCglib3JkZXI6IG5vbmU7DQoJZm9udC1zaXplOiAxMnB4Ow0KCWZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOw0KCWNvbG9yOiAjNTU1Ow0KCXRleHQtYWxpZ246IHJpZ2h0Ow0KCW91dGxpbmU6IG5vbmU7DQp9DQouY29scGlja19oZXhfZmllbGQgaW5wdXQgew0KCXJpZ2h0OiA0cHg7DQp9DQovKkZpZWxkIHVwL2Rvd24gYXJyb3dzKi8NCi5jb2xwaWNrX2ZpZWxkX2FycnMgew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgl0b3A6IDA7DQoJcmlnaHQ6IDA7DQoJd2lkdGg6IDlweDsNCgloZWlnaHQ6IDIxcHg7DQoJY3Vyc29yOiBuLXJlc2l6ZTsNCn0NCi5jb2xwaWNrX2ZpZWxkX3VhcnIgew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgl0b3A6IDVweDsNCgl3aWR0aDogMDsgDQoJaGVpZ2h0OiAwOyANCglib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50Ow0KCWJvcmRlci1yaWdodDogNHB4IHNvbGlkIHRyYW5zcGFyZW50Ow0KCWJvcmRlci1ib3R0b206IDRweCBzb2xpZCAjOTU5NTk1Ow0KfQ0KLmNvbHBpY2tfZmllbGRfZGFyciB7DQoJcG9zaXRpb246IGFic29sdXRlOw0KCWJvdHRvbTo1cHg7DQoJd2lkdGg6IDA7IA0KCWhlaWdodDogMDsgDQoJYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsNCglib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsNCglib3JkZXItdG9wOiA0cHggc29saWQgIzk1OTU5NTsNCn0NCi8qU3VibWl0L1NlbGVjdCBidXR0b24qLw0KLmNvbHBpY2tfc3VibWl0IHsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJbGVmdDogMjA3cHg7DQoJdG9wOiAxNDlweDsNCgl3aWR0aDogMTMwcHg7DQoJaGVpZ2h0OiAyMnB4Ow0KCWxpbmUtaGVpZ2h0OjIycHg7DQoJYmFja2dyb3VuZDogI2VmZWZlZjsNCgl0ZXh0LWFsaWduOiBjZW50ZXI7DQoJY29sb3I6ICM1NTU7DQoJZm9udC1zaXplOiAxMnB4Ow0KCWZvbnQtd2VpZ2h0OmJvbGQ7DQoJYm9yZGVyOiAxcHggc29saWQgI2JkYmRiZDsNCgktd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsNCgktbW96LWJvcmRlci1yYWRpdXM6IDNweDsNCglib3JkZXItcmFkaXVzOiAzcHg7DQp9DQouY29scGlja19zdWJtaXQ6aG92ZXIgew0KCWJhY2tncm91bmQ6I2YzZjNmMzsNCglib3JkZXItY29sb3I6Izk5OTsNCgljdXJzb3I6IHBvaW50ZXI7DQp9DQoNCi8qZnVsbCBsYXlvdXQgd2l0aCBubyBzdWJtaXQgYnV0dG9uKi8NCi5jb2xwaWNrX2Z1bGxfbnMgIC5jb2xwaWNrX3N1Ym1pdCwgLmNvbHBpY2tfZnVsbF9ucyAuY29scGlja19jdXJyZW50X2NvbG9yew0KCWRpc3BsYXk6bm9uZTsNCn0NCi5jb2xwaWNrX2Z1bGxfbnMgLmNvbHBpY2tfbmV3X2NvbG9yIHsNCgl3aWR0aDogMTMwcHg7DQoJaGVpZ2h0OiAyNXB4Ow0KfQ0KLmNvbHBpY2tfZnVsbF9ucyAuY29scGlja19yZ2JfciwgLmNvbHBpY2tfZnVsbF9ucyAuY29scGlja19oc2JfaCB7DQoJdG9wOiA0MnB4Ow0KfQ0KLmNvbHBpY2tfZnVsbF9ucyAuY29scGlja19yZ2JfZywgLmNvbHBpY2tfZnVsbF9ucyAuY29scGlja19oc2JfcyB7DQoJdG9wOiA3M3B4Ow0KfQ0KLmNvbHBpY2tfZnVsbF9ucyAuY29scGlja19yZ2JfYiwgLmNvbHBpY2tfZnVsbF9ucyAuY29scGlja19oc2JfYiB7DQoJdG9wOiAxMDRweDsNCn0NCi5jb2xwaWNrX2Z1bGxfbnMgLmNvbHBpY2tfaGV4X2ZpZWxkIHsNCgl0b3A6IDEzNXB4Ow0KfQ0KDQovKnJnYmhleCBsYXlvdXQqLw0KLmNvbHBpY2tfcmdiaGV4IC5jb2xwaWNrX2hzYl9oLCAuY29scGlja19yZ2JoZXggLmNvbHBpY2tfaHNiX3MsIC5jb2xwaWNrX3JnYmhleCAuY29scGlja19oc2JfYiB7DQoJZGlzcGxheTpub25lOw0KfQ0KLmNvbHBpY2tfcmdiaGV4IHsNCgl3aWR0aDoyODJweDsNCn0NCi5jb2xwaWNrX3JnYmhleCAuY29scGlja19maWVsZCwgLmNvbHBpY2tfcmdiaGV4IC5jb2xwaWNrX3N1Ym1pdCB7DQoJd2lkdGg6NjhweDsNCn0NCi5jb2xwaWNrX3JnYmhleCAuY29scGlja19uZXdfY29sb3Igew0KCXdpZHRoOjM0cHg7DQoJYm9yZGVyLXJpZ2h0Om5vbmU7DQp9DQouY29scGlja19yZ2JoZXggLmNvbHBpY2tfY3VycmVudF9jb2xvciB7DQoJd2lkdGg6MzRweDsNCglsZWZ0OjI0MHB4Ow0KCWJvcmRlci1sZWZ0Om5vbmU7DQp9DQoNCi8qcmdiaGV4IGxheW91dCwgbm8gc3VibWl0IGJ1dHRvbiovDQouY29scGlja19yZ2JoZXhfbnMgIC5jb2xwaWNrX3N1Ym1pdCwgLmNvbHBpY2tfcmdiaGV4X25zIC5jb2xwaWNrX2N1cnJlbnRfY29sb3J7DQoJZGlzcGxheTpub25lOw0KfQ0KLmNvbHBpY2tfcmdiaGV4X25zIC5jb2xwaWNrX25ld19jb2xvcnsNCgl3aWR0aDo2OHB4Ow0KCWJvcmRlcjogMXB4IHNvbGlkICM4ZjhmOGY7DQp9DQouY29scGlja19yZ2JoZXhfbnMgLmNvbHBpY2tfcmdiX3Igew0KCXRvcDogNDJweDsNCn0NCi5jb2xwaWNrX3JnYmhleF9ucyAuY29scGlja19yZ2JfZyB7DQoJdG9wOiA3M3B4Ow0KfQ0KLmNvbHBpY2tfcmdiaGV4X25zIC5jb2xwaWNrX3JnYl9iIHsNCgl0b3A6IDEwNHB4Ow0KfQ0KLmNvbHBpY2tfcmdiaGV4X25zIC5jb2xwaWNrX2hleF9maWVsZCB7DQoJdG9wOiAxMzVweDsNCn0NCg0KLypoZXggbGF5b3V0Ki8NCi5jb2xwaWNrX2hleCAuY29scGlja19oc2JfaCwgLmNvbHBpY2tfaGV4IC5jb2xwaWNrX2hzYl9zLCAuY29scGlja19oZXggLmNvbHBpY2tfaHNiX2IsIC5jb2xwaWNrX2hleCAuY29scGlja19yZ2JfciwgLmNvbHBpY2tfaGV4IC5jb2xwaWNrX3JnYl9nLCAuY29scGlja19oZXggLmNvbHBpY2tfcmdiX2Igew0KCWRpc3BsYXk6bm9uZTsNCn0NCi5jb2xwaWNrX2hleCB7DQoJd2lkdGg6MjA2cHg7DQoJaGVpZ2h0OjIwMXB4Ow0KfQ0KLmNvbHBpY2tfaGV4IC5jb2xwaWNrX2hleF9maWVsZCB7DQoJd2lkdGg6NzJweDsNCgloZWlnaHQ6MjVweDsNCgl0b3A6MTY4cHg7DQoJbGVmdDo4MHB4Ow0KfQ0KLmNvbHBpY2tfaGV4IC5jb2xwaWNrX2hleF9maWVsZCBkaXYsIC5jb2xwaWNrX2hleCAuY29scGlja19oZXhfZmllbGQgaW5wdXQgew0KCWhlaWdodDogMjVweDsNCglsaW5lLWhlaWdodDogMjVweDsNCn0NCi5jb2xwaWNrX2hleCAuY29scGlja19uZXdfY29sb3Igew0KCWxlZnQ6OXB4Ow0KCXRvcDoxNjhweDsNCgl3aWR0aDozMHB4Ow0KCWJvcmRlci1yaWdodDpub25lOw0KfQ0KLmNvbHBpY2tfaGV4IC5jb2xwaWNrX2N1cnJlbnRfY29sb3Igew0KCWxlZnQ6MzlweDsNCgl0b3A6MTY4cHg7DQoJd2lkdGg6MzBweDsNCglib3JkZXItbGVmdDpub25lOw0KfQ0KLmNvbHBpY2tfaGV4IC5jb2xwaWNrX3N1Ym1pdCB7DQoJbGVmdDoxNjRweDsNCgl0b3A6IDE2OHB4Ow0KCXdpZHRoOjMwcHg7DQoJaGVpZ2h0OjI1cHg7DQoJbGluZS1oZWlnaHQ6IDI1cHg7DQp9DQoNCi8qaGV4IGxheW91dCwgbm8gc3VibWl0IGJ1dHRvbiovDQouY29scGlja19oZXhfbnMgIC5jb2xwaWNrX3N1Ym1pdCwgLmNvbHBpY2tfaGV4X25zIC5jb2xwaWNrX2N1cnJlbnRfY29sb3Igew0KCWRpc3BsYXk6bm9uZTsNCn0NCi5jb2xwaWNrX2hleF9ucyAuY29scGlja19oZXhfZmllbGQgew0KCXdpZHRoOjgwcHg7DQp9DQouY29scGlja19oZXhfbnMgLmNvbHBpY2tfbmV3X2NvbG9yew0KCXdpZHRoOjYwcHg7DQoJYm9yZGVyOiAxcHggc29saWQgIzhmOGY4ZjsNCn0NCg0KLypEYXJrIGNvbG9yIHNjaGVtZSovDQouY29scGlja19kYXJrIHsNCgliYWNrZ3JvdW5kOiAjMTYxNjE2Ow0KCWJvcmRlci1jb2xvcjogIzJhMmEyYTsNCn0NCi5jb2xwaWNrX2RhcmsgLmNvbHBpY2tfY29sb3Igew0KCW91dGxpbmUtY29sb3I6ICMzMzM7DQp9DQouY29scGlja19kYXJrIC5jb2xwaWNrX2h1ZSB7DQoJYm9yZGVyLWNvbG9yOiAjNTU1Ow0KfQ0KLmNvbHBpY2tfZGFyayAuY29scGlja19maWVsZCwgLmNvbHBpY2tfZGFyayAuY29scGlja19oZXhfZmllbGQgew0KCWJhY2tncm91bmQ6ICMxMDEwMTA7DQoJYm9yZGVyLWNvbG9yOiAjMmQyZDJkOw0KfQ0KLmNvbHBpY2tfZGFyayAuY29scGlja19maWVsZF9sZXR0ZXIgew0KCWJhY2tncm91bmQ6ICMxMzEzMTM7DQoJYm9yZGVyLWNvbG9yOiAjMmQyZDJkOw0KCWNvbG9yOiAjNjk2OTY5Ow0KfQ0KLmNvbHBpY2tfZGFyayAuY29scGlja19maWVsZCBpbnB1dCwgLmNvbHBpY2tfZGFyayAuY29scGlja19oZXhfZmllbGQgaW5wdXQgew0KCWNvbG9yOiAjN2E3YTdhOw0KfQ0KLmNvbHBpY2tfZGFyayAuY29scGlja19maWVsZF91YXJyIHsNCglib3JkZXItYm90dG9tLWNvbG9yOiM2OTY5Njk7DQp9DQouY29scGlja19kYXJrIC5jb2xwaWNrX2ZpZWxkX2RhcnIgew0KCWJvcmRlci10b3AtY29sb3I6IzY5Njk2OTsNCn0NCi5jb2xwaWNrX2RhcmsgLmNvbHBpY2tfZm9jdXMgew0KCWJvcmRlci1jb2xvcjojNDQ0Ow0KfQ0KLmNvbHBpY2tfZGFyayAuY29scGlja19zdWJtaXQgew0KCWJhY2tncm91bmQ6ICMxMzEzMTM7DQoJYm9yZGVyLWNvbG9yOiMyZDJkMmQ7DQoJY29sb3I6IzdhN2E3YTsNCn0NCi5jb2xwaWNrX2RhcmsgLmNvbHBpY2tfc3VibWl0OmhvdmVyIHsNCgliYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTA7DQoJYm9yZGVyLWNvbG9yOiM0NDQ7DQp9DQo=]]></data>
	</file>
	<file>
	  <filename>/lib/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/ecb2_admin.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gZWNiMl9hZG1pbi5qcyAtIHYxLjIgLSAxNkZlYjE5DQovLw0KLy8gICAgICAtIHYxLjQgLSAyMkp1bjIyIC0gYnJpbmcgY29scGljayAmIGpRdWVyeSB0aW1lcGlja2VyIGFkZG9uIGludG8gdGhpcyBmaWxlDQovLyAgICAgLSB2MS4zIC0gMjBKdW4yMiAtIGJ1ZyBmaXggLSB0ZXN0IGlmICdjb2xwaWNrJyBtZXRob2QgZXhpc3RzIGJlZm9yZSBjYWxsaW5nIGl0IQ0KLy8gICAgIC0gdjEuMiAtIDE2RmViMTkgLSBlY2JfcmVwZWF0ZXIgYWRkZWQNCi8vICAgICAgICAgICAgICAgICAgICAgIC0gYmVnYW4gY29uc29saWRhdGluZyBhbGwganMgaW50byB0aGlzIGZpbGUNCi8vICAgICAtIHYxLjEgLSAxMUp1bDE3IC0gdXBkYXRlZCBmb3IgbWF4X251bWJlciAmIHJlcXVpcmVkX251bWJlciAmIHVwZGF0ZUVDQjJQbGFjZWhvbGRlcigpDQovLyAgICAgLSB2MS4wIC0gMThBcHIxNyAtIGluaXRpYWwganMgZmlsZQ0KLy8NCi8vICAgIGVuYWJsZXMgZHJhZy1uLWRyb3Agc2VsZWN0aW9uIG9mIGxpc3QgaXRlbXMsIHJlcXVpcmVzIGpxdWVyeSB1aSBzb3J0YWJsZQ0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCg0KDQoNCi8qDQpjb2xwaWNrIENvbG9yIFBpY2tlcg0KQ29weXJpZ2h0IDIwMTMgSm9zZSBWYXJnYXMuIExpY2Vuc2VkIHVuZGVyIEdQTCBsaWNlbnNlLiBCYXNlZCBvbiBTdGVmYW4gUGV0cmUncyBDb2xvciBQaWNrZXIgd3d3LmV5ZWNvbi5ybywgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMNCg0KRm9yIHVzYWdlIGFuZCBleGFtcGxlczogY29scGljay5jb20vcGx1Z2luDQogKi8NCiFmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSJdLHQpOiJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz90KHJlcXVpcmUoImpxdWVyeSIpKTp0KGpRdWVyeSl9KChmdW5jdGlvbih0KXt2YXIgZSxpLGEsbyxjLGwscixuLGQscyxwLHUsZixoLHYsZyxrLF8sbSxiLHkseCx3LEksTSxDLHEsVCxTLEUsRD0oaT17c2hvd0V2ZW50OiJjbGljayIsb25TaG93OmZ1bmN0aW9uKCl7fSxvbkJlZm9yZVNob3c6ZnVuY3Rpb24oKXt9LG9uSGlkZTpmdW5jdGlvbigpe30sb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LG9uU3VibWl0OmZ1bmN0aW9uKCl7fSxjb2xvclNjaGVtZToibGlnaHQiLGNvbG9yOiIzMjg5YzciLGxpdmVQcmV2aWV3OiEwLGZsYXQ6ITEsbGF5b3V0OiJmdWxsIixzdWJtaXQ6MSxzdWJtaXRUZXh0OiJPSyIsaGVpZ2h0OjE1Nixwb2x5ZmlsbDohMX0sYT1mdW5jdGlvbihlLGkpe3ZhciBhPU4oZSk7dChpKS5kYXRhKCJjb2xwaWNrIikuZmllbGRzLmVxKDEpLnZhbChhLnIpLmVuZCgpLmVxKDIpLnZhbChhLmcpLmVuZCgpLmVxKDMpLnZhbChhLmIpLmVuZCgpfSxvPWZ1bmN0aW9uKGUsaSl7dChpKS5kYXRhKCJjb2xwaWNrIikuZmllbGRzLmVxKDQpLnZhbChNYXRoLnJvdW5kKGUuaCkpLmVuZCgpLmVxKDUpLnZhbChNYXRoLnJvdW5kKGUucykpLmVuZCgpLmVxKDYpLnZhbChNYXRoLnJvdW5kKGUuYikpLmVuZCgpfSxjPWZ1bmN0aW9uKGUsaSl7dChpKS5kYXRhKCJjb2xwaWNrIikuZmllbGRzLmVxKDApLnZhbCh6KGUpKX0sbD1mdW5jdGlvbihlLGkpe3QoaSkuZGF0YSgiY29scGljayIpLnNlbGVjdG9yLmNzcygiYmFja2dyb3VuZENvbG9yIiwiIyIreih7aDplLmgsczoxMDAsYjoxMDB9KSksdChpKS5kYXRhKCJjb2xwaWNrIikuc2VsZWN0b3JJbmRpYy5jc3Moe2xlZnQ6cGFyc2VJbnQodChpKS5kYXRhKCJjb2xwaWNrIikuaGVpZ2h0KmUucy8xMDAsMTApLHRvcDpwYXJzZUludCh0KGkpLmRhdGEoImNvbHBpY2siKS5oZWlnaHQqKDEwMC1lLmIpLzEwMCwxMCl9KX0scj1mdW5jdGlvbihlLGkpe3QoaSkuZGF0YSgiY29scGljayIpLmh1ZS5jc3MoInRvcCIscGFyc2VJbnQodChpKS5kYXRhKCJjb2xwaWNrIikuaGVpZ2h0LXQoaSkuZGF0YSgiY29scGljayIpLmhlaWdodCplLmgvMzYwLDEwKSl9LG49ZnVuY3Rpb24oZSxpKXt0KGkpLmRhdGEoImNvbHBpY2siKS5jdXJyZW50Q29sb3IuY3NzKCJiYWNrZ3JvdW5kQ29sb3IiLCIjIit6KGUpKX0sZD1mdW5jdGlvbihlLGkpe3QoaSkuZGF0YSgiY29scGljayIpLm5ld0NvbG9yLmNzcygiYmFja2dyb3VuZENvbG9yIiwiIyIreihlKSl9LHM9ZnVuY3Rpb24oZSl7dmFyIGksbj10KHRoaXMpLnBhcmVudCgpLnBhcmVudCgpO3RoaXMucGFyZW50Tm9kZS5jbGFzc05hbWUuaW5kZXhPZigiX2hleCIpPjA/KG4uZGF0YSgiY29scGljayIpLmNvbG9yPWk9WShUKHRoaXMudmFsdWUpKSxhKGksbi5nZXQoMCkpLG8oaSxuLmdldCgwKSkpOnRoaXMucGFyZW50Tm9kZS5jbGFzc05hbWUuaW5kZXhPZigiX2hzYiIpPjA/KG4uZGF0YSgiY29scGljayIpLmNvbG9yPWk9Qyh7aDpwYXJzZUludChuLmRhdGEoImNvbHBpY2siKS5maWVsZHMuZXEoNCkudmFsKCksMTApLHM6cGFyc2VJbnQobi5kYXRhKCJjb2xwaWNrIikuZmllbGRzLmVxKDUpLnZhbCgpLDEwKSxiOnBhcnNlSW50KG4uZGF0YSgiY29scGljayIpLmZpZWxkcy5lcSg2KS52YWwoKSwxMCl9KSxhKGksbi5nZXQoMCkpLGMoaSxuLmdldCgwKSkpOihuLmRhdGEoImNvbHBpY2siKS5jb2xvcj1pPUgocSh7cjpwYXJzZUludChuLmRhdGEoImNvbHBpY2siKS5maWVsZHMuZXEoMSkudmFsKCksMTApLGc6cGFyc2VJbnQobi5kYXRhKCJjb2xwaWNrIikuZmllbGRzLmVxKDIpLnZhbCgpLDEwKSxiOnBhcnNlSW50KG4uZGF0YSgiY29scGljayIpLmZpZWxkcy5lcSgzKS52YWwoKSwxMCl9KSksYyhpLG4uZ2V0KDApKSxvKGksbi5nZXQoMCkpKSxsKGksbi5nZXQoMCkpLHIoaSxuLmdldCgwKSksZChpLG4uZ2V0KDApKSxuLmRhdGEoImNvbHBpY2siKS5vbkNoYW5nZS5hcHBseShuLnBhcmVudCgpLFtpLHooaSksTihpKSxuLmRhdGEoImNvbHBpY2siKS5lbCwwXSl9LHA9ZnVuY3Rpb24oZSl7dCh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygiY29scGlja19mb2N1cyIpfSx1PWZ1bmN0aW9uKCl7dCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5kYXRhKCJjb2xwaWNrIikuZmllbGRzLnBhcmVudCgpLnJlbW92ZUNsYXNzKCJjb2xwaWNrX2ZvY3VzIiksdCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygiY29scGlja19mb2N1cyIpfSxmPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOmUucmV0dXJuVmFsdWU9ITE7dmFyIGk9dCh0aGlzKS5wYXJlbnQoKS5maW5kKCJpbnB1dCIpLmZvY3VzKCksYT17ZWw6dCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygiY29scGlja19zbGlkZXIiKSxtYXg6dGhpcy5wYXJlbnROb2RlLmNsYXNzTmFtZS5pbmRleE9mKCJfaHNiX2giKT4wPzM2MDp0aGlzLnBhcmVudE5vZGUuY2xhc3NOYW1lLmluZGV4T2YoIl9oc2IiKT4wPzEwMDoyNTUseTplLnBhZ2VZLGZpZWxkOmksdmFsOnBhcnNlSW50KGkudmFsKCksMTApLHByZXZpZXc6dCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5kYXRhKCJjb2xwaWNrIikubGl2ZVByZXZpZXd9O3QoZG9jdW1lbnQpLm1vdXNldXAoYSx2KSx0KGRvY3VtZW50KS5tb3VzZW1vdmUoYSxoKX0saD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLmZpZWxkLnZhbChNYXRoLm1heCgwLE1hdGgubWluKHQuZGF0YS5tYXgscGFyc2VJbnQodC5kYXRhLnZhbC10LnBhZ2VZK3QuZGF0YS55LDEwKSkpKSx0LmRhdGEucHJldmlldyYmcy5hcHBseSh0LmRhdGEuZmllbGQuZ2V0KDApLFshMF0pLCExfSx2PWZ1bmN0aW9uKGUpe3JldHVybiBzLmFwcGx5KGUuZGF0YS5maWVsZC5nZXQoMCksWyEwXSksZS5kYXRhLmVsLnJlbW92ZUNsYXNzKCJjb2xwaWNrX3NsaWRlciIpLmZpbmQoImlucHV0IikuZm9jdXMoKSx0KGRvY3VtZW50KS5vZmYoIm1vdXNldXAiLHYpLHQoZG9jdW1lbnQpLm9mZigibW91c2Vtb3ZlIixoKSwhMX0sZz1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKTplLnJldHVyblZhbHVlPSExO3ZhciBpPXtjYWw6dCh0aGlzKS5wYXJlbnQoKSx5OnQodGhpcykub2Zmc2V0KCkudG9wfTt0KGRvY3VtZW50KS5vbigibW91c2V1cCB0b3VjaGVuZCIsaSxfKSx0KGRvY3VtZW50KS5vbigibW91c2Vtb3ZlIHRvdWNobW92ZSIsaSxrKTt2YXIgYT0idG91Y2hzdGFydCI9PWUudHlwZT9lLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVk6ZS5wYWdlWTtyZXR1cm4gcy5hcHBseShpLmNhbC5kYXRhKCJjb2xwaWNrIikuZmllbGRzLmVxKDQpLnZhbChwYXJzZUludCgzNjAqKGkuY2FsLmRhdGEoImNvbHBpY2siKS5oZWlnaHQtKGEtaS55KSkvaS5jYWwuZGF0YSgiY29scGljayIpLmhlaWdodCwxMCkpLmdldCgwKSxbaS5jYWwuZGF0YSgiY29scGljayIpLmxpdmVQcmV2aWV3XSksITF9LGs9ZnVuY3Rpb24odCl7dmFyIGU9InRvdWNobW92ZSI9PXQudHlwZT90Lm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVk6dC5wYWdlWTtyZXR1cm4gcy5hcHBseSh0LmRhdGEuY2FsLmRhdGEoImNvbHBpY2siKS5maWVsZHMuZXEoNCkudmFsKHBhcnNlSW50KDM2MCoodC5kYXRhLmNhbC5kYXRhKCJjb2xwaWNrIikuaGVpZ2h0LU1hdGgubWF4KDAsTWF0aC5taW4odC5kYXRhLmNhbC5kYXRhKCJjb2xwaWNrIikuaGVpZ2h0LGUtdC5kYXRhLnkpKSkvdC5kYXRhLmNhbC5kYXRhKCJjb2xwaWNrIikuaGVpZ2h0LDEwKSkuZ2V0KDApLFt0LmRhdGEucHJldmlld10pLCExfSxfPWZ1bmN0aW9uKGUpe3JldHVybiBhKGUuZGF0YS5jYWwuZGF0YSgiY29scGljayIpLmNvbG9yLGUuZGF0YS5jYWwuZ2V0KDApKSxjKGUuZGF0YS5jYWwuZGF0YSgiY29scGljayIpLmNvbG9yLGUuZGF0YS5jYWwuZ2V0KDApKSx0KGRvY3VtZW50KS5vZmYoIm1vdXNldXAgdG91Y2hlbmQiLF8pLHQoZG9jdW1lbnQpLm9mZigibW91c2Vtb3ZlIHRvdWNobW92ZSIsayksITF9LG09ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdD9lLnByZXZlbnREZWZhdWx0KCk6ZS5yZXR1cm5WYWx1ZT0hMTt2YXIgaSxhLG89e2NhbDp0KHRoaXMpLnBhcmVudCgpLHBvczp0KHRoaXMpLm9mZnNldCgpfTtyZXR1cm4gby5wcmV2aWV3PW8uY2FsLmRhdGEoImNvbHBpY2siKS5saXZlUHJldmlldyx0KGRvY3VtZW50KS5vbigibW91c2V1cCB0b3VjaGVuZCIsbyx5KSx0KGRvY3VtZW50KS5vbigibW91c2Vtb3ZlIHRvdWNobW92ZSIsbyxiKSwidG91Y2hzdGFydCI9PWUudHlwZT8oaT1lLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVgsYT1lLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVkpOihpPWUucGFnZVgsYT1lLnBhZ2VZKSxzLmFwcGx5KG8uY2FsLmRhdGEoImNvbHBpY2siKS5maWVsZHMuZXEoNikudmFsKHBhcnNlSW50KDEwMCooby5jYWwuZGF0YSgiY29scGljayIpLmhlaWdodC0oYS1vLnBvcy50b3ApKS9vLmNhbC5kYXRhKCJjb2xwaWNrIikuaGVpZ2h0LDEwKSkuZW5kKCkuZXEoNSkudmFsKHBhcnNlSW50KDEwMCooaS1vLnBvcy5sZWZ0KS9vLmNhbC5kYXRhKCJjb2xwaWNrIikuaGVpZ2h0LDEwKSkuZ2V0KDApLFtvLnByZXZpZXddKSwhMX0sYj1mdW5jdGlvbih0KXt2YXIgZSxpO3JldHVybiJ0b3VjaG1vdmUiPT10LnR5cGU/KGU9dC5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYLGk9dC5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZKTooZT10LnBhZ2VYLGk9dC5wYWdlWSkscy5hcHBseSh0LmRhdGEuY2FsLmRhdGEoImNvbHBpY2siKS5maWVsZHMuZXEoNikudmFsKHBhcnNlSW50KDEwMCoodC5kYXRhLmNhbC5kYXRhKCJjb2xwaWNrIikuaGVpZ2h0LU1hdGgubWF4KDAsTWF0aC5taW4odC5kYXRhLmNhbC5kYXRhKCJjb2xwaWNrIikuaGVpZ2h0LGktdC5kYXRhLnBvcy50b3ApKSkvdC5kYXRhLmNhbC5kYXRhKCJjb2xwaWNrIikuaGVpZ2h0LDEwKSkuZW5kKCkuZXEoNSkudmFsKHBhcnNlSW50KDEwMCpNYXRoLm1heCgwLE1hdGgubWluKHQuZGF0YS5jYWwuZGF0YSgiY29scGljayIpLmhlaWdodCxlLXQuZGF0YS5wb3MubGVmdCkpL3QuZGF0YS5jYWwuZGF0YSgiY29scGljayIpLmhlaWdodCwxMCkpLmdldCgwKSxbdC5kYXRhLnByZXZpZXddKSwhMX0seT1mdW5jdGlvbihlKXtyZXR1cm4gYShlLmRhdGEuY2FsLmRhdGEoImNvbHBpY2siKS5jb2xvcixlLmRhdGEuY2FsLmdldCgwKSksYyhlLmRhdGEuY2FsLmRhdGEoImNvbHBpY2siKS5jb2xvcixlLmRhdGEuY2FsLmdldCgwKSksdChkb2N1bWVudCkub2ZmKCJtb3VzZXVwIHRvdWNoZW5kIix5KSx0KGRvY3VtZW50KS5vZmYoIm1vdXNlbW92ZSB0b3VjaG1vdmUiLGIpLCExfSx4PWZ1bmN0aW9uKGUpe3ZhciBpPXQodGhpcykucGFyZW50KCksYT1pLmRhdGEoImNvbHBpY2siKS5jb2xvcjtpLmRhdGEoImNvbHBpY2siKS5vcmlnQ29sb3I9YSxuKGEsaS5nZXQoMCkpLGkuZGF0YSgiY29scGljayIpLm9uU3VibWl0KGEseihhKSxOKGEpLGkuZGF0YSgiY29scGljayIpLmVsKX0sdz1mdW5jdGlvbihlKXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBpPXQoIiMiK3QodGhpcykuZGF0YSgiY29scGlja0lkIikpO2UmJiFpLmRhdGEoImNvbHBpY2siKS5wb2x5ZmlsbCYmZS5wcmV2ZW50RGVmYXVsdCgpLGkuZGF0YSgiY29scGljayIpLm9uQmVmb3JlU2hvdy5hcHBseSh0aGlzLFtpLmdldCgwKV0pO3ZhciBhPXQodGhpcykub2Zmc2V0KCksbz1hLnRvcCt0aGlzLm9mZnNldEhlaWdodCxjPWEubGVmdCxsPU0oKSxyPWkud2lkdGgoKTtjK3I+bC5sK2wudyYmKGMtPXIpLGkuY3NzKHtsZWZ0OmMrInB4Iix0b3A6bysicHgifSksMCE9aS5kYXRhKCJjb2xwaWNrIikub25TaG93LmFwcGx5KHRoaXMsW2kuZ2V0KDApXSkmJmkuc2hvdygpLHQoImh0bWwiKS5tb3VzZWRvd24oe2NhbDppfSxJKSxpLm1vdXNlZG93bigoZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX0pKX0sST1mdW5jdGlvbihlKXt2YXIgaT10KCIjIit0KHRoaXMpLmRhdGEoImNvbHBpY2tJZCIpKTtlJiYoaT1lLmRhdGEuY2FsKSwwIT1pLmRhdGEoImNvbHBpY2siKS5vbkhpZGUuYXBwbHkodGhpcyxbaS5nZXQoMCldKSYmaS5oaWRlKCksdCgiaHRtbCIpLm9mZigibW91c2Vkb3duIixJKX0sTT1mdW5jdGlvbigpe3ZhciB0PSJDU1MxQ29tcGF0Ij09ZG9jdW1lbnQuY29tcGF0TW9kZTtyZXR1cm57bDp3aW5kb3cucGFnZVhPZmZzZXR8fCh0P2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0OmRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCksdzp3aW5kb3cuaW5uZXJXaWR0aHx8KHQ/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgpfX0sQz1mdW5jdGlvbih0KXtyZXR1cm57aDpNYXRoLm1pbigzNjAsTWF0aC5tYXgoMCx0LmgpKSxzOk1hdGgubWluKDEwMCxNYXRoLm1heCgwLHQucykpLGI6TWF0aC5taW4oMTAwLE1hdGgubWF4KDAsdC5iKSl9fSxxPWZ1bmN0aW9uKHQpe3JldHVybntyOk1hdGgubWluKDI1NSxNYXRoLm1heCgwLHQucikpLGc6TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsdC5nKSksYjpNYXRoLm1pbigyNTUsTWF0aC5tYXgoMCx0LmIpKX19LFQ9ZnVuY3Rpb24odCl7dmFyIGU9Ni10Lmxlbmd0aDtpZigzPT1lKXtmb3IodmFyIGk9W10sYT0wO2E8ZTthKyspaS5wdXNoKHRbYV0pLGkucHVzaCh0W2FdKTt0PWkuam9pbigiIil9ZWxzZSBpZihlPjApe2Zvcih2YXIgbz1bXSxjPTA7YzxlO2MrKylvLnB1c2goIjAiKTtvLnB1c2godCksdD1vLmpvaW4oIiIpfXJldHVybiB0fSxlPTAsUz1mdW5jdGlvbigpe3JldHVybiBlKz0xfSxFPWZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5wYXJlbnQoKSxpPWUuZGF0YSgiY29scGljayIpLm9yaWdDb2xvcjtlLmRhdGEoImNvbHBpY2siKS5jb2xvcj1pLGEoaSxlLmdldCgwKSksYyhpLGUuZ2V0KDApKSxvKGksZS5nZXQoMCkpLGwoaSxlLmdldCgwKSkscihpLGUuZ2V0KDApKSxkKGksZS5nZXQoMCkpfSx7aW5pdDpmdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mKGU9dC5leHRlbmQoe30saSxlfHx7fSkpLmNvbG9yKWUuY29sb3I9WShlLmNvbG9yKTtlbHNlIGlmKG51bGwhPWUuY29sb3IuciYmbnVsbCE9ZS5jb2xvci5nJiZudWxsIT1lLmNvbG9yLmIpZS5jb2xvcj1IKGUuY29sb3IpO2Vsc2V7aWYobnVsbD09ZS5jb2xvci5ofHxudWxsPT1lLmNvbG9yLnN8fG51bGw9PWUuY29sb3IuYilyZXR1cm4gdGhpcztlLmNvbG9yPUMoZS5jb2xvcil9cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtpZighdCh0aGlzKS5kYXRhKCJjb2xwaWNrSWQiKSl7dmFyIGk9dC5leHRlbmQoe30sZSk7aWYoaS5vcmlnQ29sb3I9ZS5jb2xvciwiZnVuY3Rpb24iPT10eXBlb2YgZS5wb2x5ZmlsbCYmKGkucG9seWZpbGw9ZS5wb2x5ZmlsbCh0aGlzKSksaS5pbnB1dD10KHRoaXMpLmlzKCJpbnB1dCIpLGkucG9seWZpbGwmJmkuaW5wdXQmJiJjb2xvciI9PT10aGlzLnR5cGUpcmV0dXJuO3ZhciBoPSJjb2xvcnBpY2tlcl8iK1MoKTt0KHRoaXMpLmRhdGEoImNvbHBpY2tJZCIsaCk7dmFyIHY9dCgnPGRpdiBjbGFzcz0iY29scGljayI+PGRpdiBjbGFzcz0iY29scGlja19jb2xvciI+PGRpdiBjbGFzcz0iY29scGlja19jb2xvcl9vdmVybGF5MSI+PGRpdiBjbGFzcz0iY29scGlja19jb2xvcl9vdmVybGF5MiI+PGRpdiBjbGFzcz0iY29scGlja19zZWxlY3Rvcl9vdXRlciI+PGRpdiBjbGFzcz0iY29scGlja19zZWxlY3Rvcl9pbm5lciI+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY29scGlja19odWUiPjxkaXYgY2xhc3M9ImNvbHBpY2tfaHVlX2FycnMiPjxkaXYgY2xhc3M9ImNvbHBpY2tfaHVlX2xhcnIiPjwvZGl2PjxkaXYgY2xhc3M9ImNvbHBpY2tfaHVlX3JhcnIiPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImNvbHBpY2tfbmV3X2NvbG9yIj48L2Rpdj48ZGl2IGNsYXNzPSJjb2xwaWNrX2N1cnJlbnRfY29sb3IiPjwvZGl2PjxkaXYgY2xhc3M9ImNvbHBpY2tfaGV4X2ZpZWxkIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX2xldHRlciI+IzwvZGl2PjxpbnB1dCB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjYiIHNpemU9IjYiIC8+PC9kaXY+PGRpdiBjbGFzcz0iY29scGlja19yZ2JfciBjb2xwaWNrX2ZpZWxkIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX2xldHRlciI+UjwvZGl2PjxpbnB1dCB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjMiIHNpemU9IjMiIC8+PGRpdiBjbGFzcz0iY29scGlja19maWVsZF9hcnJzIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX3VhcnIiPjwvZGl2PjxkaXYgY2xhc3M9ImNvbHBpY2tfZmllbGRfZGFyciI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY29scGlja19yZ2JfZyBjb2xwaWNrX2ZpZWxkIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX2xldHRlciI+RzwvZGl2PjxpbnB1dCB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjMiIHNpemU9IjMiIC8+PGRpdiBjbGFzcz0iY29scGlja19maWVsZF9hcnJzIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX3VhcnIiPjwvZGl2PjxkaXYgY2xhc3M9ImNvbHBpY2tfZmllbGRfZGFyciI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY29scGlja19yZ2JfYiBjb2xwaWNrX2ZpZWxkIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX2xldHRlciI+QjwvZGl2PjxpbnB1dCB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjMiIHNpemU9IjMiIC8+PGRpdiBjbGFzcz0iY29scGlja19maWVsZF9hcnJzIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX3VhcnIiPjwvZGl2PjxkaXYgY2xhc3M9ImNvbHBpY2tfZmllbGRfZGFyciI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY29scGlja19oc2JfaCBjb2xwaWNrX2ZpZWxkIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX2xldHRlciI+SDwvZGl2PjxpbnB1dCB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjMiIHNpemU9IjMiIC8+PGRpdiBjbGFzcz0iY29scGlja19maWVsZF9hcnJzIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX3VhcnIiPjwvZGl2PjxkaXYgY2xhc3M9ImNvbHBpY2tfZmllbGRfZGFyciI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY29scGlja19oc2JfcyBjb2xwaWNrX2ZpZWxkIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX2xldHRlciI+UzwvZGl2PjxpbnB1dCB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjMiIHNpemU9IjMiIC8+PGRpdiBjbGFzcz0iY29scGlja19maWVsZF9hcnJzIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX3VhcnIiPjwvZGl2PjxkaXYgY2xhc3M9ImNvbHBpY2tfZmllbGRfZGFyciI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY29scGlja19oc2JfYiBjb2xwaWNrX2ZpZWxkIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX2xldHRlciI+QjwvZGl2PjxpbnB1dCB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjMiIHNpemU9IjMiIC8+PGRpdiBjbGFzcz0iY29scGlja19maWVsZF9hcnJzIj48ZGl2IGNsYXNzPSJjb2xwaWNrX2ZpZWxkX3VhcnIiPjwvZGl2PjxkaXYgY2xhc3M9ImNvbHBpY2tfZmllbGRfZGFyciI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY29scGlja19zdWJtaXQiPjwvZGl2PjwvZGl2PicpLmF0dHIoImlkIixoKTt2LmFkZENsYXNzKCJjb2xwaWNrXyIraS5sYXlvdXQrKGkuc3VibWl0PyIiOiIgY29scGlja18iK2kubGF5b3V0KyJfbnMiKSksImxpZ2h0IiE9aS5jb2xvclNjaGVtZSYmdi5hZGRDbGFzcygiY29scGlja18iK2kuY29sb3JTY2hlbWUpLHYuZmluZCgiZGl2LmNvbHBpY2tfc3VibWl0IikuaHRtbChpLnN1Ym1pdFRleHQpLmNsaWNrKHgpLGkuZmllbGRzPXYuZmluZCgiaW5wdXQiKS5jaGFuZ2UocykuYmx1cihwKS5mb2N1cyh1KSx2LmZpbmQoImRpdi5jb2xwaWNrX2ZpZWxkX2FycnMiKS5tb3VzZWRvd24oZikuZW5kKCkuZmluZCgiZGl2LmNvbHBpY2tfY3VycmVudF9jb2xvciIpLmNsaWNrKEUpLGkuc2VsZWN0b3I9di5maW5kKCJkaXYuY29scGlja19jb2xvciIpLm9uKCJtb3VzZWRvd24gdG91Y2hzdGFydCIsbSksaS5zZWxlY3RvckluZGljPWkuc2VsZWN0b3IuZmluZCgiZGl2LmNvbHBpY2tfc2VsZWN0b3Jfb3V0ZXIiKSxpLmVsPXRoaXMsaS5odWU9di5maW5kKCJkaXYuY29scGlja19odWVfYXJycyIpO3ZhciBrPWkuaHVlLnBhcmVudCgpLF89bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLGI9Ik1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciI9PT1uYXZpZ2F0b3IuYXBwTmFtZSx5PWI/cGFyc2VGbG9hdChfLm1hdGNoKC9tc2llIChbMC05XXsxLH1bXC4wLTldezAsfSkvKVsxXSk6MCxJPVsiI2ZmMDAwMCIsIiNmZjAwODAiLCIjZmYwMGZmIiwiIzgwMDBmZiIsIiMwMDAwZmYiLCIjMDA4MGZmIiwiIzAwZmZmZiIsIiMwMGZmODAiLCIjMDBmZjAwIiwiIzgwZmYwMCIsIiNmZmZmMDAiLCIjZmY4MDAwIiwiI2ZmMDAwMCJdO2lmKGImJnk8MTApe3ZhciBNLEM7Zm9yKE09MDtNPD0xMTtNKyspQz10KCI8ZGl2PjwvZGl2PiIpLmF0dHIoInN0eWxlIiwiaGVpZ2h0OjguMzMzMzMzJTsgZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChHcmFkaWVudFR5cGU9MCxzdGFydENvbG9yc3RyPSIrSVtNXSsiLCBlbmRDb2xvcnN0cj0iK0lbTSsxXSsnKTsgLW1zLWZpbHRlcjogInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChHcmFkaWVudFR5cGU9MCxzdGFydENvbG9yc3RyPScrSVtNXSsiLCBlbmRDb2xvcnN0cj0iK0lbTSsxXSsnKSI7Jyksay5hcHBlbmQoQyl9ZWxzZXt2YXIgcT1JLmpvaW4oIiwiKTtrLmF0dHIoInN0eWxlIiwiYmFja2dyb3VuZDotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIitxKyIpOyBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCIrcSsiKTsgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsIitxKyIpOyBiYWNrZ3JvdW5kOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwiK3ErIik7IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwiK3ErIik7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwiK3ErIik7ICIpfXYuZmluZCgiZGl2LmNvbHBpY2tfaHVlIikub24oIm1vdXNlZG93biB0b3VjaHN0YXJ0IixnKSxpLm5ld0NvbG9yPXYuZmluZCgiZGl2LmNvbHBpY2tfbmV3X2NvbG9yIiksaS5jdXJyZW50Q29sb3I9di5maW5kKCJkaXYuY29scGlja19jdXJyZW50X2NvbG9yIiksdi5kYXRhKCJjb2xwaWNrIixpKSxhKGkuY29sb3Isdi5nZXQoMCkpLG8oaS5jb2xvcix2LmdldCgwKSksYyhpLmNvbG9yLHYuZ2V0KDApKSxyKGkuY29sb3Isdi5nZXQoMCkpLGwoaS5jb2xvcix2LmdldCgwKSksbihpLmNvbG9yLHYuZ2V0KDApKSxkKGkuY29sb3Isdi5nZXQoMCkpLGkuZmxhdD8odi5hcHBlbmRUbyh0aGlzKS5zaG93KCksdi5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZGlzcGxheToiYmxvY2sifSkpOih2LmFwcGVuZFRvKHQodGhpcykucGFyZW50KCkpLHQodGhpcykub24oaS5zaG93RXZlbnQsdyksdi5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9KSl9fSkpfSxzaG93UGlja2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt0KHRoaXMpLmRhdGEoImNvbHBpY2tJZCIpJiZ3LmFwcGx5KHRoaXMpfSkpfSxoaWRlUGlja2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt0KHRoaXMpLmRhdGEoImNvbHBpY2tJZCIpJiZJLmFwcGx5KHRoaXMpfSkpfSxzZXRDb2xvcjpmdW5jdGlvbihlLGkpe2lmKG51bGwhPWUpe2lmKGk9dm9pZCAwPT09aT8xOmksInN0cmluZyI9PXR5cGVvZiBlKWU9WShlKTtlbHNlIGlmKG51bGwhPWUuciYmbnVsbCE9ZS5nJiZudWxsIT1lLmIpZT1IKGUpO2Vsc2V7aWYobnVsbD09ZS5ofHxudWxsPT1lLnN8fG51bGw9PWUuYilyZXR1cm4gdGhpcztlPUMoZSl9cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtpZih0KHRoaXMpLmRhdGEoImNvbHBpY2tJZCIpKXt2YXIgcz10KCIjIit0KHRoaXMpLmRhdGEoImNvbHBpY2tJZCIpKTtzLmRhdGEoImNvbHBpY2siKS5jb2xvcj1lLHMuZGF0YSgiY29scGljayIpLm9yaWdDb2xvcj1lLGEoZSxzLmdldCgwKSksbyhlLHMuZ2V0KDApKSxjKGUscy5nZXQoMCkpLHIoZSxzLmdldCgwKSksbChlLHMuZ2V0KDApKSxkKGUscy5nZXQoMCkpLHMuZGF0YSgiY29scGljayIpLm9uQ2hhbmdlLmFwcGx5KHMucGFyZW50KCksW2UseihlKSxOKGUpLHMuZGF0YSgiY29scGljayIpLmVsLDFdKSxpJiZuKGUscy5nZXQoMCkpfX0pKX19LGRlc3Ryb3k6ZnVuY3Rpb24oZSxpKXt0KCIjIit0KHRoaXMpLmRhdGEoImNvbHBpY2tJZCIpKS5yZW1vdmUoKX19KSxQPWZ1bmN0aW9uKHQpe3JldHVybntyOih0PXBhcnNlSW50KHQuaW5kZXhPZigiIyIpPi0xP3Quc3Vic3RyaW5nKDEpOnQsMTYpKT4+MTYsZzooNjUyODAmdCk+PjgsYjoyNTUmdH19LFk9ZnVuY3Rpb24odCl7cmV0dXJuIEgoUCh0KSl9LEg9ZnVuY3Rpb24odCl7dmFyIGU9e2g6MCxzOjAsYjowfSxpPU1hdGgubWluKHQucix0LmcsdC5iKSxhPU1hdGgubWF4KHQucix0LmcsdC5iKSxvPWEtaTtyZXR1cm4gZS5iPWEsZS5zPTAhPWE/MjU1Km8vYTowLDAhPWUucz90LnI9PWE/ZS5oPSh0LmctdC5iKS9vOnQuZz09YT9lLmg9MisodC5iLXQucikvbzplLmg9NCsodC5yLXQuZykvbzplLmg9LTEsZS5oKj02MCxlLmg8MCYmKGUuaCs9MzYwKSxlLnMqPTEwMC8yNTUsZS5iKj0xMDAvMjU1LGV9LE49ZnVuY3Rpb24odCl7dmFyIGU9e30saT10LmgsYT0yNTUqdC5zLzEwMCxvPTI1NSp0LmIvMTAwO2lmKDA9PWEpZS5yPWUuZz1lLmI9bztlbHNle3ZhciBjPW8sbD0oMjU1LWEpKm8vMjU1LHI9aSU2MCooYy1sKS82MDszNjA9PWkmJihpPTApLGk8NjA/KGUucj1jLGUuYj1sLGUuZz1sK3IpOmk8MTIwPyhlLmc9YyxlLmI9bCxlLnI9Yy1yKTppPDE4MD8oZS5nPWMsZS5yPWwsZS5iPWwrcik6aTwyNDA/KGUuYj1jLGUucj1sLGUuZz1jLXIpOmk8MzAwPyhlLmI9YyxlLmc9bCxlLnI9bCtyKTppPDM2MD8oZS5yPWMsZS5nPWwsZS5iPWMtcik6KGUucj0wLGUuZz0wLGUuYj0wKX1yZXR1cm57cjpNYXRoLnJvdW5kKGUuciksZzpNYXRoLnJvdW5kKGUuZyksYjpNYXRoLnJvdW5kKGUuYil9fSxqPWZ1bmN0aW9uKGUpe3ZhciBpPVtlLnIudG9TdHJpbmcoMTYpLGUuZy50b1N0cmluZygxNiksZS5iLnRvU3RyaW5nKDE2KV07cmV0dXJuIHQuZWFjaChpLChmdW5jdGlvbih0LGUpezE9PWUubGVuZ3RoJiYoaVt0XT0iMCIrZSl9KSksaS5qb2luKCIiKX0sej1mdW5jdGlvbih0KXtyZXR1cm4gaihOKHQpKX07dC5mbi5leHRlbmQoe2NvbHBpY2s6RC5pbml0LGNvbHBpY2tIaWRlOkQuaGlkZVBpY2tlcixjb2xwaWNrU2hvdzpELnNob3dQaWNrZXIsY29scGlja1NldENvbG9yOkQuc2V0Q29sb3IsY29scGlja0Rlc3Ryb3k6RC5kZXN0cm95fSksdC5leHRlbmQoe2NvbHBpY2s6e3JnYlRvSGV4OmoscmdiVG9Ic2I6SCxoc2JUb0hleDp6LGhzYlRvUmdiOk4saGV4VG9Ic2I6WSxoZXhUb1JnYjpQfX0pfSkpOw0KDQoNCg0KLyoNCiAqIGpRdWVyeSB0aW1lcGlja2VyIGFkZG9uDQogKiBCeTogVHJlbnQgUmljaGFyZHNvbiBbaHR0cDovL3RyZW50cmljaGFyZHNvbi5jb21dDQogKiBWZXJzaW9uIDEuMS4xDQogKiBMYXN0IE1vZGlmaWVkOiAxMS8wNy8yMDEyDQogKg0KICogQ29weXJpZ2h0IDIwMTIgVHJlbnQgUmljaGFyZHNvbg0KICogWW91IG1heSB1c2UgdGhpcyBwcm9qZWN0IHVuZGVyIE1JVCBvciBHUEwgbGljZW5zZXMuDQogKiBodHRwOi8vdHJlbnRyaWNoYXJkc29uLmNvbS9JbXByb21wdHUvR1BMLUxJQ0VOU0UudHh0DQogKiBodHRwOi8vdHJlbnRyaWNoYXJkc29uLmNvbS9JbXByb21wdHUvTUlULUxJQ0VOU0UudHh0DQogKi8NCihmdW5jdGlvbigkKXtpZigkLnVpLnRpbWVwaWNrZXI9JC51aS50aW1lcGlja2VyfHx7fSwhJC51aS50aW1lcGlja2VyLnZlcnNpb24peyQuZXh0ZW5kKCQudWkse3RpbWVwaWNrZXI6e3ZlcnNpb246IjEuMS4xIn19KSwkLmV4dGVuZChUaW1lcGlja2VyLnByb3RvdHlwZSx7JGlucHV0Om51bGwsJGFsdElucHV0Om51bGwsJHRpbWVPYmo6bnVsbCxpbnN0Om51bGwsaG91cl9zbGlkZXI6bnVsbCxtaW51dGVfc2xpZGVyOm51bGwsc2Vjb25kX3NsaWRlcjpudWxsLG1pbGxpc2VjX3NsaWRlcjpudWxsLHRpbWV6b25lX3NlbGVjdDpudWxsLGhvdXI6MCxtaW51dGU6MCxzZWNvbmQ6MCxtaWxsaXNlYzowLHRpbWV6b25lOm51bGwsZGVmYXVsdFRpbWV6b25lOiIrMDAwMCIsaG91ck1pbk9yaWdpbmFsOm51bGwsbWludXRlTWluT3JpZ2luYWw6bnVsbCxzZWNvbmRNaW5PcmlnaW5hbDpudWxsLG1pbGxpc2VjTWluT3JpZ2luYWw6bnVsbCxob3VyTWF4T3JpZ2luYWw6bnVsbCxtaW51dGVNYXhPcmlnaW5hbDpudWxsLHNlY29uZE1heE9yaWdpbmFsOm51bGwsbWlsbGlzZWNNYXhPcmlnaW5hbDpudWxsLGFtcG06IiIsZm9ybWF0dGVkRGF0ZToiIixmb3JtYXR0ZWRUaW1lOiIiLGZvcm1hdHRlZERhdGVUaW1lOiIiLHRpbWV6b25lTGlzdDpudWxsLHVuaXRzOlsiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2VjIl0sY29udHJvbDpudWxsLHNldERlZmF1bHRzOmZ1bmN0aW9uKGUpe3JldHVybiBleHRlbmRSZW1vdmUodGhpcy5fZGVmYXVsdHMsZXx8e30pLHRoaXN9LF9uZXdJbnN0OmZ1bmN0aW9uKCRpbnB1dCxvKXt2YXIgdHBfaW5zdD1uZXcgVGltZXBpY2tlcixpbmxpbmVTZXR0aW5ncz17fSxmbnM9e30sb3ZlcnJpZGVzLGk7Zm9yKHZhciBhdHRyTmFtZSBpbiB0aGlzLl9kZWZhdWx0cylpZih0aGlzLl9kZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShhdHRyTmFtZSkpe3ZhciBhdHRyVmFsdWU9JGlucHV0LmF0dHIoInRpbWU6IithdHRyTmFtZSk7aWYoYXR0clZhbHVlKXRyeXtpbmxpbmVTZXR0aW5nc1thdHRyTmFtZV09ZXZhbChhdHRyVmFsdWUpfWNhdGNoKGUpe2lubGluZVNldHRpbmdzW2F0dHJOYW1lXT1hdHRyVmFsdWV9fWZvcihpIGluIG92ZXJyaWRlcz17YmVmb3JlU2hvdzpmdW5jdGlvbihlLHQpe2lmKCQuaXNGdW5jdGlvbih0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5iZWZvcmVTaG93KSlyZXR1cm4gdHBfaW5zdC5fZGVmYXVsdHMuZXZudHMuYmVmb3JlU2hvdy5jYWxsKCRpbnB1dFswXSxlLHQsdHBfaW5zdCl9LG9uQ2hhbmdlTW9udGhZZWFyOmZ1bmN0aW9uKGUsdCxpKXt0cF9pbnN0Ll91cGRhdGVEYXRlVGltZShpKSwkLmlzRnVuY3Rpb24odHBfaW5zdC5fZGVmYXVsdHMuZXZudHMub25DaGFuZ2VNb250aFllYXIpJiZ0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5vbkNoYW5nZU1vbnRoWWVhci5jYWxsKCRpbnB1dFswXSxlLHQsaSx0cF9pbnN0KX0sb25DbG9zZTpmdW5jdGlvbihlLHQpeyEwPT09dHBfaW5zdC50aW1lRGVmaW5lZCYmIiIhPT0kaW5wdXQudmFsKCkmJnRwX2luc3QuX3VwZGF0ZURhdGVUaW1lKHQpLCQuaXNGdW5jdGlvbih0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5vbkNsb3NlKSYmdHBfaW5zdC5fZGVmYXVsdHMuZXZudHMub25DbG9zZS5jYWxsKCRpbnB1dFswXSxlLHQsdHBfaW5zdCl9fSxvdmVycmlkZXMpb3ZlcnJpZGVzLmhhc093blByb3BlcnR5KGkpJiYoZm5zW2ldPW9baV18fG51bGwpO2lmKHRwX2luc3QuX2RlZmF1bHRzPSQuZXh0ZW5kKHt9LHRoaXMuX2RlZmF1bHRzLGlubGluZVNldHRpbmdzLG8sb3ZlcnJpZGVzLHtldm50czpmbnMsdGltZXBpY2tlcjp0cF9pbnN0fSksdHBfaW5zdC5hbU5hbWVzPSQubWFwKHRwX2luc3QuX2RlZmF1bHRzLmFtTmFtZXMsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9KSksdHBfaW5zdC5wbU5hbWVzPSQubWFwKHRwX2luc3QuX2RlZmF1bHRzLnBtTmFtZXMsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9KSksInN0cmluZyI9PXR5cGVvZiB0cF9pbnN0Ll9kZWZhdWx0cy5jb250cm9sVHlwZT8odm9pZCAwPT09JC5mblt0cF9pbnN0Ll9kZWZhdWx0cy5jb250cm9sVHlwZV0mJih0cF9pbnN0Ll9kZWZhdWx0cy5jb250cm9sVHlwZT0ic2VsZWN0IiksdHBfaW5zdC5jb250cm9sPXRwX2luc3QuX2NvbnRyb2xzW3RwX2luc3QuX2RlZmF1bHRzLmNvbnRyb2xUeXBlXSk6dHBfaW5zdC5jb250cm9sPXRwX2luc3QuX2RlZmF1bHRzLmNvbnRyb2xUeXBlLG51bGw9PT10cF9pbnN0Ll9kZWZhdWx0cy50aW1lem9uZUxpc3Qpe3ZhciB0aW1lem9uZUxpc3Q9WyItMTIwMCIsIi0xMTAwIiwiLTEwMDAiLCItMDkzMCIsIi0wOTAwIiwiLTA4MDAiLCItMDcwMCIsIi0wNjAwIiwiLTA1MDAiLCItMDQzMCIsIi0wNDAwIiwiLTAzMzAiLCItMDMwMCIsIi0wMjAwIiwiLTAxMDAiLCIrMDAwMCIsIiswMTAwIiwiKzAyMDAiLCIrMDMwMCIsIiswMzMwIiwiKzA0MDAiLCIrMDQzMCIsIiswNTAwIiwiKzA1MzAiLCIrMDU0NSIsIiswNjAwIiwiKzA2MzAiLCIrMDcwMCIsIiswODAwIiwiKzA4NDUiLCIrMDkwMCIsIiswOTMwIiwiKzEwMDAiLCIrMTAzMCIsIisxMTAwIiwiKzExMzAiLCIrMTIwMCIsIisxMjQ1IiwiKzEzMDAiLCIrMTQwMCJdO3RwX2luc3QuX2RlZmF1bHRzLnRpbWV6b25lSXNvODYwMSYmKHRpbWV6b25lTGlzdD0kLm1hcCh0aW1lem9uZUxpc3QsKGZ1bmN0aW9uKGUpe3JldHVybiIrMDAwMCI9PWU/IloiOmUuc3Vic3RyaW5nKDAsMykrIjoiK2Uuc3Vic3RyaW5nKDMpfSkpKSx0cF9pbnN0Ll9kZWZhdWx0cy50aW1lem9uZUxpc3Q9dGltZXpvbmVMaXN0fXJldHVybiB0cF9pbnN0LnRpbWV6b25lPXRwX2luc3QuX2RlZmF1bHRzLnRpbWV6b25lLHRwX2luc3QuaG91cj10cF9pbnN0Ll9kZWZhdWx0cy5ob3VyLHRwX2luc3QubWludXRlPXRwX2luc3QuX2RlZmF1bHRzLm1pbnV0ZSx0cF9pbnN0LnNlY29uZD10cF9pbnN0Ll9kZWZhdWx0cy5zZWNvbmQsdHBfaW5zdC5taWxsaXNlYz10cF9pbnN0Ll9kZWZhdWx0cy5taWxsaXNlYyx0cF9pbnN0LmFtcG09IiIsdHBfaW5zdC4kaW5wdXQ9JGlucHV0LG8uYWx0RmllbGQmJih0cF9pbnN0LiRhbHRJbnB1dD0kKG8uYWx0RmllbGQpLmNzcyh7Y3Vyc29yOiJwb2ludGVyIn0pLmZvY3VzKChmdW5jdGlvbigpeyRpbnB1dC50cmlnZ2VyKCJmb2N1cyIpfSkpKSwwIT09dHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZSYmMCE9PXRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGVUaW1lfHwodHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZT1uZXcgRGF0ZSksMCE9PXRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUmJjAhPT10cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZXx8KHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGU9bmV3IERhdGUpLHZvaWQgMCE9PXRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGUmJnRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGUgaW5zdGFuY2VvZiBEYXRlJiYodHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZVRpbWU9bmV3IERhdGUodHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZS5nZXRUaW1lKCkpKSx2b2lkIDAhPT10cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlVGltZSYmdHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZVRpbWUgaW5zdGFuY2VvZiBEYXRlJiYodHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZT1uZXcgRGF0ZSh0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlVGltZS5nZXRUaW1lKCkpKSx2b2lkIDAhPT10cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlJiZ0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlIGluc3RhbmNlb2YgRGF0ZSYmKHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGVUaW1lPW5ldyBEYXRlKHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUuZ2V0VGltZSgpKSksdm9pZCAwIT09dHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZVRpbWUmJnRwX2luc3QuX2RlZmF1bHRzLm1heERhdGVUaW1lIGluc3RhbmNlb2YgRGF0ZSYmKHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGU9bmV3IERhdGUodHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZVRpbWUuZ2V0VGltZSgpKSksdHBfaW5zdC4kaW5wdXQuYmluZCgiZm9jdXMiLChmdW5jdGlvbigpe3RwX2luc3QuX29uRm9jdXMoKX0pKSx0cF9pbnN0fSxfYWRkVGltZVBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLiRhbHRJbnB1dCYmdGhpcy5fZGVmYXVsdHMuYWx0RmllbGRUaW1lT25seT90aGlzLiRpbnB1dC52YWwoKSsiICIrdGhpcy4kYWx0SW5wdXQudmFsKCk6dGhpcy4kaW5wdXQudmFsKCk7dGhpcy50aW1lRGVmaW5lZD10aGlzLl9wYXJzZVRpbWUodCksdGhpcy5fbGltaXRNaW5NYXhEYXRlVGltZShlLCExKSx0aGlzLl9pbmplY3RUaW1lUGlja2VyKCl9LF9wYXJzZVRpbWU6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmluc3R8fCh0aGlzLmluc3Q9JC5kYXRlcGlja2VyLl9nZXRJbnN0KHRoaXMuJGlucHV0WzBdKSksdHx8IXRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5KXt2YXIgaT0kLmRhdGVwaWNrZXIuX2dldCh0aGlzLmluc3QsImRhdGVGb3JtYXQiKTt0cnl7dmFyIHM9cGFyc2VEYXRlVGltZUludGVybmFsKGksdGhpcy5fZGVmYXVsdHMudGltZUZvcm1hdCxlLCQuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKHRoaXMuaW5zdCksdGhpcy5fZGVmYXVsdHMpO2lmKCFzLnRpbWVPYmopcmV0dXJuITE7JC5leHRlbmQodGhpcyxzLnRpbWVPYmopfWNhdGNoKHQpe3JldHVybiAkLmRhdGVwaWNrZXIubG9nKCJFcnJvciBwYXJzaW5nIHRoZSBkYXRlL3RpbWUgc3RyaW5nOiAiK3QrIlxuZGF0ZS90aW1lIHN0cmluZyA9ICIrZSsiXG50aW1lRm9ybWF0ID0gIit0aGlzLl9kZWZhdWx0cy50aW1lRm9ybWF0KyJcbmRhdGVGb3JtYXQgPSAiK2kpLCExfXJldHVybiEwfXZhciBhPSQuZGF0ZXBpY2tlci5wYXJzZVRpbWUodGhpcy5fZGVmYXVsdHMudGltZUZvcm1hdCxlLHRoaXMuX2RlZmF1bHRzKTtyZXR1cm4hIWEmJigkLmV4dGVuZCh0aGlzLGEpLCEwKX0sX2luamVjdFRpbWVQaWNrZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmluc3QuZHBEaXYsdD10aGlzLmluc3Quc2V0dGluZ3MsaT10aGlzLHM9IiIsYT0iIixuPXt9LHI9e30sbD1udWxsO2lmKDA9PT1lLmZpbmQoImRpdi51aS10aW1lcGlja2VyLWRpdiIpLmxlbmd0aCYmdC5zaG93VGltZXBpY2tlcil7Zm9yKHZhciBvPScgc3R5bGU9ImRpc3BsYXk6bm9uZTsiJyx1PSc8ZGl2IGNsYXNzPSJ1aS10aW1lcGlja2VyLWRpdicrKHQuaXNSVEw/IiB1aS10aW1lcGlja2VyLXJ0bCI6IiIpKyciPjxkbD48ZHQgY2xhc3M9InVpX3RwaWNrZXJfdGltZV9sYWJlbCInKyh0LnNob3dUaW1lPyIiOm8pKyI+Iit0LnRpbWVUZXh0Kyc8L2R0PjxkZCBjbGFzcz0idWlfdHBpY2tlcl90aW1lIicrKHQuc2hvd1RpbWU/IiI6bykrIj48L2RkPiIsZD0wLG09dGhpcy51bml0cy5sZW5ndGg7ZDxtO2QrKyl7aWYoYT0ocz10aGlzLnVuaXRzW2RdKS5zdWJzdHIoMCwxKS50b1VwcGVyQ2FzZSgpK3Muc3Vic3RyKDEpLG5bc109cGFyc2VJbnQodFtzKyJNYXgiXS0odFtzKyJNYXgiXS10W3MrIk1pbiJdKSV0WyJzdGVwIithXSwxMCkscltzXT0wLHUrPSc8ZHQgY2xhc3M9InVpX3RwaWNrZXJfJytzKydfbGFiZWwiJysodFsic2hvdyIrYV0/IiI6bykrIj4iK3RbcysiVGV4dCJdKyc8L2R0PjxkZCBjbGFzcz0idWlfdHBpY2tlcl8nK3MrJyI+PGRpdiBjbGFzcz0idWlfdHBpY2tlcl8nK3MrJ19zbGlkZXIiJysodFsic2hvdyIrYV0/IiI6bykrIj48L2Rpdj4iLHRbInNob3ciK2FdJiZ0W3MrIkdyaWQiXT4wKXtpZih1Kz0nPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OiAxcHgiPjx0YWJsZSBjbGFzcz0idWktdHBpY2tlci1ncmlkLWxhYmVsIj48dHI+JywiaG91ciI9PXMpZm9yKHZhciBjPXRbcysiTWluIl07Yzw9bltzXTtjKz1wYXJzZUludCh0W3MrIkdyaWQiXSwxMCkpe3Jbc10rKzt2YXIgaD0kLmRhdGVwaWNrZXIuZm9ybWF0VGltZSh1c2VBbXBtKHQucGlja2VyVGltZUZvcm1hdHx8dC50aW1lRm9ybWF0KT8iaGh0IjoiSEgiLHtob3VyOmN9LHQpO3UrPSc8dGQgZGF0YS1mb3I9IicrcysnIj4nK2grIjwvdGQ+In1lbHNlIGZvcih2YXIgcD10W3MrIk1pbiJdO3A8PW5bc107cCs9cGFyc2VJbnQodFtzKyJHcmlkIl0sMTApKXJbc10rKyx1Kz0nPHRkIGRhdGEtZm9yPSInK3MrJyI+JysocDwxMD8iMCI6IiIpK3ArIjwvdGQ+Ijt1Kz0iPC90cj48L3RhYmxlPjwvZGl2PiJ9dSs9IjwvZGQ+In11Kz0nPGR0IGNsYXNzPSJ1aV90cGlja2VyX3RpbWV6b25lX2xhYmVsIicrKHQuc2hvd1RpbWV6b25lPyIiOm8pKyI+Iit0LnRpbWV6b25lVGV4dCsiPC9kdD4iLHUrPSc8ZGQgY2xhc3M9InVpX3RwaWNrZXJfdGltZXpvbmUiICcrKHQuc2hvd1RpbWV6b25lPyIiOm8pKyI+PC9kZD4iO3ZhciBmPSQodSs9IjwvZGw+PC9kaXY+Iik7ITA9PT10LnRpbWVPbmx5JiYoZi5wcmVwZW5kKCc8ZGl2IGNsYXNzPSJ1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsIj48ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLXRpdGxlIj4nK3QudGltZU9ubHlUaXRsZSsiPC9kaXY+PC9kaXY+IiksZS5maW5kKCIudWktZGF0ZXBpY2tlci1oZWFkZXIsIC51aS1kYXRlcGlja2VyLWNhbGVuZGFyIikuaGlkZSgpKTtmb3IoZD0wLG09aS51bml0cy5sZW5ndGg7ZDxtO2QrKylhPShzPWkudW5pdHNbZF0pLnN1YnN0cigwLDEpLnRvVXBwZXJDYXNlKCkrcy5zdWJzdHIoMSksaVtzKyJfc2xpZGVyIl09aS5jb250cm9sLmNyZWF0ZShpLGYuZmluZCgiLnVpX3RwaWNrZXJfIitzKyJfc2xpZGVyIikscyxpW3NdLHRbcysiTWluIl0sbltzXSx0WyJzdGVwIithXSksdFsic2hvdyIrYV0mJnRbcysiR3JpZCJdPjAmJihsPTEwMCpyW3NdKnRbcysiR3JpZCJdLyhuW3NdLXRbcysiTWluIl0pLGYuZmluZCgiLnVpX3RwaWNrZXJfIitzKyIgdGFibGUiKS5jc3Moe3dpZHRoOmwrIiUiLG1hcmdpbkxlZnQ6dC5pc1JUTD8iMCI6bC8oLTIqcltzXSkrIiUiLG1hcmdpblJpZ2h0OnQuaXNSVEw/bC8oLTIqcltzXSkrIiUiOiIwIixib3JkZXJDb2xsYXBzZToiY29sbGFwc2UifSkuZmluZCgidGQiKS5jbGljaygoZnVuY3Rpb24oZSl7dmFyIHQ9JCh0aGlzKSxhPXQuaHRtbCgpLG49cGFyc2VJbnQoYS5yZXBsYWNlKC9bXjAtOV0vZyksMTApLHI9YS5yZXBsYWNlKC9bXmFwbV0vZ2kpLGw9dC5kYXRhKCJmb3IiKTsiaG91ciI9PWwmJigtMSE9PXIuaW5kZXhPZigicCIpJiZuPDEyP24rPTEyOi0xIT09ci5pbmRleE9mKCJhIikmJjEyPT09biYmKG49MCkpLGkuY29udHJvbC52YWx1ZShpLGlbbCsiX3NsaWRlciJdLHMsbiksaS5fb25UaW1lQ2hhbmdlKCksaS5fb25TZWxlY3RIYW5kbGVyKCl9KSkuY3NzKHtjdXJzb3I6InBvaW50ZXIiLHdpZHRoOjEwMC9yW3NdKyIlIix0ZXh0QWxpZ246ImNlbnRlciIsb3ZlcmZsb3c6ImhpZGRlbiJ9KSk7aWYodGhpcy50aW1lem9uZV9zZWxlY3Q9Zi5maW5kKCIudWlfdHBpY2tlcl90aW1lem9uZSIpLmFwcGVuZCgiPHNlbGVjdD48L3NlbGVjdD4iKS5maW5kKCJzZWxlY3QiKSwkLmZuLmFwcGVuZC5hcHBseSh0aGlzLnRpbWV6b25lX3NlbGVjdCwkLm1hcCh0LnRpbWV6b25lTGlzdCwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCgiPG9wdGlvbiAvPiIpLnZhbCgib2JqZWN0Ij09dHlwZW9mIGU/ZS52YWx1ZTplKS50ZXh0KCJvYmplY3QiPT10eXBlb2YgZT9lLmxhYmVsOmUpfSkpKSx2b2lkIDAhPT10aGlzLnRpbWV6b25lJiZudWxsIT09dGhpcy50aW1lem9uZSYmIiIhPT10aGlzLnRpbWV6b25lKXt2YXIgXz1uZXcgRGF0ZSh0aGlzLmluc3Quc2VsZWN0ZWRZZWFyLHRoaXMuaW5zdC5zZWxlY3RlZE1vbnRoLHRoaXMuaW5zdC5zZWxlY3RlZERheSwxMik7JC50aW1lcGlja2VyLnRpbWVab25lT2Zmc2V0U3RyaW5nKF8pPT10aGlzLnRpbWV6b25lP3NlbGVjdExvY2FsVGltZVpvbmUoaSk6dGhpcy50aW1lem9uZV9zZWxlY3QudmFsKHRoaXMudGltZXpvbmUpfWVsc2Ugdm9pZCAwIT09dGhpcy5ob3VyJiZudWxsIT09dGhpcy5ob3VyJiYiIiE9PXRoaXMuaG91cj90aGlzLnRpbWV6b25lX3NlbGVjdC52YWwodC5kZWZhdWx0VGltZXpvbmUpOnNlbGVjdExvY2FsVGltZVpvbmUoaSk7dGhpcy50aW1lem9uZV9zZWxlY3QuY2hhbmdlKChmdW5jdGlvbigpe2kuX2RlZmF1bHRzLnVzZUxvY2FsVGltZXpvbmU9ITEsaS5fb25UaW1lQ2hhbmdlKCl9KSk7dmFyIGc9ZS5maW5kKCIudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIik7aWYoZy5sZW5ndGg/Zy5iZWZvcmUoZik6ZS5hcHBlbmQoZiksdGhpcy4kdGltZU9iaj1mLmZpbmQoIi51aV90cGlja2VyX3RpbWUiKSxudWxsIT09dGhpcy5pbnN0KXt2YXIgdj10aGlzLnRpbWVEZWZpbmVkO3RoaXMuX29uVGltZUNoYW5nZSgpLHRoaXMudGltZURlZmluZWQ9dn1pZih0aGlzLl9kZWZhdWx0cy5hZGRTbGlkZXJBY2Nlc3Mpe3ZhciBrPXRoaXMuX2RlZmF1bHRzLnNsaWRlckFjY2Vzc0FyZ3MsVD10aGlzLl9kZWZhdWx0cy5pc1JUTDtrLmlzUlRMPVQsc2V0VGltZW91dCgoZnVuY3Rpb24oKXtpZigwPT09Zi5maW5kKCIudWktc2xpZGVyLWFjY2VzcyIpLmxlbmd0aCl7Zi5maW5kKCIudWktc2xpZGVyOnZpc2libGUiKS5zbGlkZXJBY2Nlc3Moayk7dmFyIGU9Zi5maW5kKCIudWktc2xpZGVyLWFjY2VzczplcSgwKSIpLm91dGVyV2lkdGgoITApO2UmJmYuZmluZCgidGFibGU6dmlzaWJsZSIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9JCh0aGlzKSxpPXQub3V0ZXJXaWR0aCgpLHM9dC5jc3MoVD8ibWFyZ2luUmlnaHQiOiJtYXJnaW5MZWZ0IikudG9TdHJpbmcoKS5yZXBsYWNlKCIlIiwiIiksYT1pLWUsbj1zKmEvaSsiJSIscj17d2lkdGg6YSxtYXJnaW5SaWdodDowLG1hcmdpbkxlZnQ6MH07cltUPyJtYXJnaW5SaWdodCI6Im1hcmdpbkxlZnQiXT1uLHQuY3NzKHIpfSkpfX0pLDEwKX19fSxfbGltaXRNaW5NYXhEYXRlVGltZTpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuX2RlZmF1bHRzLHM9bmV3IERhdGUoZS5zZWxlY3RlZFllYXIsZS5zZWxlY3RlZE1vbnRoLGUuc2VsZWN0ZWREYXkpO2lmKHRoaXMuX2RlZmF1bHRzLnNob3dUaW1lcGlja2VyKXtpZihudWxsIT09JC5kYXRlcGlja2VyLl9nZXQoZSwibWluRGF0ZVRpbWUiKSYmdm9pZCAwIT09JC5kYXRlcGlja2VyLl9nZXQoZSwibWluRGF0ZVRpbWUiKSYmcyl7dmFyIGE9JC5kYXRlcGlja2VyLl9nZXQoZSwibWluRGF0ZVRpbWUiKSxuPW5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCksMCwwLDAsMCk7bnVsbCE9PXRoaXMuaG91ck1pbk9yaWdpbmFsJiZudWxsIT09dGhpcy5taW51dGVNaW5PcmlnaW5hbCYmbnVsbCE9PXRoaXMuc2Vjb25kTWluT3JpZ2luYWwmJm51bGwhPT10aGlzLm1pbGxpc2VjTWluT3JpZ2luYWx8fCh0aGlzLmhvdXJNaW5PcmlnaW5hbD1pLmhvdXJNaW4sdGhpcy5taW51dGVNaW5PcmlnaW5hbD1pLm1pbnV0ZU1pbix0aGlzLnNlY29uZE1pbk9yaWdpbmFsPWkuc2Vjb25kTWluLHRoaXMubWlsbGlzZWNNaW5PcmlnaW5hbD1pLm1pbGxpc2VjTWluKSxlLnNldHRpbmdzLnRpbWVPbmx5fHxuLmdldFRpbWUoKT09cy5nZXRUaW1lKCk/KHRoaXMuX2RlZmF1bHRzLmhvdXJNaW49YS5nZXRIb3VycygpLHRoaXMuaG91cjw9dGhpcy5fZGVmYXVsdHMuaG91ck1pbj8odGhpcy5ob3VyPXRoaXMuX2RlZmF1bHRzLmhvdXJNaW4sdGhpcy5fZGVmYXVsdHMubWludXRlTWluPWEuZ2V0TWludXRlcygpLHRoaXMubWludXRlPD10aGlzLl9kZWZhdWx0cy5taW51dGVNaW4/KHRoaXMubWludXRlPXRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1pbix0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW49YS5nZXRTZWNvbmRzKCksdGhpcy5zZWNvbmQ8PXRoaXMuX2RlZmF1bHRzLnNlY29uZE1pbj8odGhpcy5zZWNvbmQ9dGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluLHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluPWEuZ2V0TWlsbGlzZWNvbmRzKCkpOih0aGlzLm1pbGxpc2VjPHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluJiYodGhpcy5taWxsaXNlYz10aGlzLl9kZWZhdWx0cy5taWxsaXNlY01pbiksdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNaW49dGhpcy5taWxsaXNlY01pbk9yaWdpbmFsKSk6KHRoaXMuX2RlZmF1bHRzLnNlY29uZE1pbj10aGlzLnNlY29uZE1pbk9yaWdpbmFsLHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluPXRoaXMubWlsbGlzZWNNaW5PcmlnaW5hbCkpOih0aGlzLl9kZWZhdWx0cy5taW51dGVNaW49dGhpcy5taW51dGVNaW5PcmlnaW5hbCx0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW49dGhpcy5zZWNvbmRNaW5PcmlnaW5hbCx0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01pbj10aGlzLm1pbGxpc2VjTWluT3JpZ2luYWwpKToodGhpcy5fZGVmYXVsdHMuaG91ck1pbj10aGlzLmhvdXJNaW5PcmlnaW5hbCx0aGlzLl9kZWZhdWx0cy5taW51dGVNaW49dGhpcy5taW51dGVNaW5PcmlnaW5hbCx0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW49dGhpcy5zZWNvbmRNaW5PcmlnaW5hbCx0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01pbj10aGlzLm1pbGxpc2VjTWluT3JpZ2luYWwpfWlmKG51bGwhPT0kLmRhdGVwaWNrZXIuX2dldChlLCJtYXhEYXRlVGltZSIpJiZ2b2lkIDAhPT0kLmRhdGVwaWNrZXIuX2dldChlLCJtYXhEYXRlVGltZSIpJiZzKXt2YXIgcj0kLmRhdGVwaWNrZXIuX2dldChlLCJtYXhEYXRlVGltZSIpLGw9bmV3IERhdGUoci5nZXRGdWxsWWVhcigpLHIuZ2V0TW9udGgoKSxyLmdldERhdGUoKSwwLDAsMCwwKTtudWxsIT09dGhpcy5ob3VyTWF4T3JpZ2luYWwmJm51bGwhPT10aGlzLm1pbnV0ZU1heE9yaWdpbmFsJiZudWxsIT09dGhpcy5zZWNvbmRNYXhPcmlnaW5hbHx8KHRoaXMuaG91ck1heE9yaWdpbmFsPWkuaG91ck1heCx0aGlzLm1pbnV0ZU1heE9yaWdpbmFsPWkubWludXRlTWF4LHRoaXMuc2Vjb25kTWF4T3JpZ2luYWw9aS5zZWNvbmRNYXgsdGhpcy5taWxsaXNlY01heE9yaWdpbmFsPWkubWlsbGlzZWNNYXgpLGUuc2V0dGluZ3MudGltZU9ubHl8fGwuZ2V0VGltZSgpPT1zLmdldFRpbWUoKT8odGhpcy5fZGVmYXVsdHMuaG91ck1heD1yLmdldEhvdXJzKCksdGhpcy5ob3VyPj10aGlzLl9kZWZhdWx0cy5ob3VyTWF4Pyh0aGlzLmhvdXI9dGhpcy5fZGVmYXVsdHMuaG91ck1heCx0aGlzLl9kZWZhdWx0cy5taW51dGVNYXg9ci5nZXRNaW51dGVzKCksdGhpcy5taW51dGU+PXRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1heD8odGhpcy5taW51dGU9dGhpcy5fZGVmYXVsdHMubWludXRlTWF4LHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heD1yLmdldFNlY29uZHMoKSk6dGhpcy5zZWNvbmQ+PXRoaXMuX2RlZmF1bHRzLnNlY29uZE1heD8odGhpcy5zZWNvbmQ9dGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4LHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4PXIuZ2V0TWlsbGlzZWNvbmRzKCkpOih0aGlzLm1pbGxpc2VjPnRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4JiYodGhpcy5taWxsaXNlYz10aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCksdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNYXg9dGhpcy5taWxsaXNlY01heE9yaWdpbmFsKSk6KHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1heD10aGlzLm1pbnV0ZU1heE9yaWdpbmFsLHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heD10aGlzLnNlY29uZE1heE9yaWdpbmFsLHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4PXRoaXMubWlsbGlzZWNNYXhPcmlnaW5hbCkpOih0aGlzLl9kZWZhdWx0cy5ob3VyTWF4PXRoaXMuaG91ck1heE9yaWdpbmFsLHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1heD10aGlzLm1pbnV0ZU1heE9yaWdpbmFsLHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heD10aGlzLnNlY29uZE1heE9yaWdpbmFsLHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4PXRoaXMubWlsbGlzZWNNYXhPcmlnaW5hbCl9aWYodm9pZCAwIT09dCYmITA9PT10KXt2YXIgbz1wYXJzZUludCh0aGlzLl9kZWZhdWx0cy5ob3VyTWF4LSh0aGlzLl9kZWZhdWx0cy5ob3VyTWF4LXRoaXMuX2RlZmF1bHRzLmhvdXJNaW4pJXRoaXMuX2RlZmF1bHRzLnN0ZXBIb3VyLDEwKSx1PXBhcnNlSW50KHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1heC0odGhpcy5fZGVmYXVsdHMubWludXRlTWF4LXRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1pbikldGhpcy5fZGVmYXVsdHMuc3RlcE1pbnV0ZSwxMCksZD1wYXJzZUludCh0aGlzLl9kZWZhdWx0cy5zZWNvbmRNYXgtKHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heC10aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW4pJXRoaXMuX2RlZmF1bHRzLnN0ZXBTZWNvbmQsMTApLG09cGFyc2VJbnQodGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNYXgtKHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4LXRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluKSV0aGlzLl9kZWZhdWx0cy5zdGVwTWlsbGlzZWMsMTApO3RoaXMuaG91cl9zbGlkZXImJih0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLHRoaXMuaG91cl9zbGlkZXIsImhvdXIiLHttaW46dGhpcy5fZGVmYXVsdHMuaG91ck1pbixtYXg6b30pLHRoaXMuY29udHJvbC52YWx1ZSh0aGlzLHRoaXMuaG91cl9zbGlkZXIsImhvdXIiLHRoaXMuaG91cikpLHRoaXMubWludXRlX3NsaWRlciYmKHRoaXMuY29udHJvbC5vcHRpb25zKHRoaXMsdGhpcy5taW51dGVfc2xpZGVyLCJtaW51dGUiLHttaW46dGhpcy5fZGVmYXVsdHMubWludXRlTWluLG1heDp1fSksdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsdGhpcy5taW51dGVfc2xpZGVyLCJtaW51dGUiLHRoaXMubWludXRlKSksdGhpcy5zZWNvbmRfc2xpZGVyJiYodGhpcy5jb250cm9sLm9wdGlvbnModGhpcyx0aGlzLnNlY29uZF9zbGlkZXIsInNlY29uZCIse21pbjp0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW4sbWF4OmR9KSx0aGlzLmNvbnRyb2wudmFsdWUodGhpcyx0aGlzLnNlY29uZF9zbGlkZXIsInNlY29uZCIsdGhpcy5zZWNvbmQpKSx0aGlzLm1pbGxpc2VjX3NsaWRlciYmKHRoaXMuY29udHJvbC5vcHRpb25zKHRoaXMsdGhpcy5taWxsaXNlY19zbGlkZXIsIm1pbGxpc2VjIix7bWluOnRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluLG1heDptfSksdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsdGhpcy5taWxsaXNlY19zbGlkZXIsIm1pbGxpc2VjIix0aGlzLm1pbGxpc2VjKSl9fX0sX29uVGltZUNoYW5nZTpmdW5jdGlvbigpe3ZhciBlPSEhdGhpcy5ob3VyX3NsaWRlciYmdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsdGhpcy5ob3VyX3NsaWRlciwiaG91ciIpLHQ9ISF0aGlzLm1pbnV0ZV9zbGlkZXImJnRoaXMuY29udHJvbC52YWx1ZSh0aGlzLHRoaXMubWludXRlX3NsaWRlciwibWludXRlIiksaT0hIXRoaXMuc2Vjb25kX3NsaWRlciYmdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsdGhpcy5zZWNvbmRfc2xpZGVyLCJzZWNvbmQiKSxzPSEhdGhpcy5taWxsaXNlY19zbGlkZXImJnRoaXMuY29udHJvbC52YWx1ZSh0aGlzLHRoaXMubWlsbGlzZWNfc2xpZGVyLCJtaWxsaXNlYyIpLGE9ISF0aGlzLnRpbWV6b25lX3NlbGVjdCYmdGhpcy50aW1lem9uZV9zZWxlY3QudmFsKCksbj10aGlzLl9kZWZhdWx0cyxyPW4ucGlja2VyVGltZUZvcm1hdHx8bi50aW1lRm9ybWF0LGw9bi5waWNrZXJUaW1lU3VmZml4fHxuLnRpbWVTdWZmaXg7Im9iamVjdCI9PXR5cGVvZiBlJiYoZT0hMSksIm9iamVjdCI9PXR5cGVvZiB0JiYodD0hMSksIm9iamVjdCI9PXR5cGVvZiBpJiYoaT0hMSksIm9iamVjdCI9PXR5cGVvZiBzJiYocz0hMSksIm9iamVjdCI9PXR5cGVvZiBhJiYoYT0hMSksITEhPT1lJiYoZT1wYXJzZUludChlLDEwKSksITEhPT10JiYodD1wYXJzZUludCh0LDEwKSksITEhPT1pJiYoaT1wYXJzZUludChpLDEwKSksITEhPT1zJiYocz1wYXJzZUludChzLDEwKSk7dmFyIG89bltlPDEyPyJhbU5hbWVzIjoicG1OYW1lcyJdWzBdLHU9ZSE9dGhpcy5ob3VyfHx0IT10aGlzLm1pbnV0ZXx8aSE9dGhpcy5zZWNvbmR8fHMhPXRoaXMubWlsbGlzZWN8fHRoaXMuYW1wbS5sZW5ndGg+MCYmZTwxMiE9KC0xIT09JC5pbkFycmF5KHRoaXMuYW1wbS50b1VwcGVyQ2FzZSgpLHRoaXMuYW1OYW1lcykpfHxudWxsPT09dGhpcy50aW1lem9uZSYmYSE9dGhpcy5kZWZhdWx0VGltZXpvbmV8fG51bGwhPT10aGlzLnRpbWV6b25lJiZhIT10aGlzLnRpbWV6b25lO3UmJighMSE9PWUmJih0aGlzLmhvdXI9ZSksITEhPT10JiYodGhpcy5taW51dGU9dCksITEhPT1pJiYodGhpcy5zZWNvbmQ9aSksITEhPT1zJiYodGhpcy5taWxsaXNlYz1zKSwhMSE9PWEmJih0aGlzLnRpbWV6b25lPWEpLHRoaXMuaW5zdHx8KHRoaXMuaW5zdD0kLmRhdGVwaWNrZXIuX2dldEluc3QodGhpcy4kaW5wdXRbMF0pKSx0aGlzLl9saW1pdE1pbk1heERhdGVUaW1lKHRoaXMuaW5zdCwhMCkpLHVzZUFtcG0obi50aW1lRm9ybWF0KSYmKHRoaXMuYW1wbT1vKSx0aGlzLmZvcm1hdHRlZFRpbWU9JC5kYXRlcGlja2VyLmZvcm1hdFRpbWUobi50aW1lRm9ybWF0LHRoaXMsbiksdGhpcy4kdGltZU9iaiYmKHI9PT1uLnRpbWVGb3JtYXQ/dGhpcy4kdGltZU9iai50ZXh0KHRoaXMuZm9ybWF0dGVkVGltZStsKTp0aGlzLiR0aW1lT2JqLnRleHQoJC5kYXRlcGlja2VyLmZvcm1hdFRpbWUocix0aGlzLG4pK2wpKSx0aGlzLnRpbWVEZWZpbmVkPSEwLHUmJnRoaXMuX3VwZGF0ZURhdGVUaW1lKCl9LF9vblNlbGVjdEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9kZWZhdWx0cy5vblNlbGVjdHx8dGhpcy5pbnN0LnNldHRpbmdzLm9uU2VsZWN0LHQ9dGhpcy4kaW5wdXQ/dGhpcy4kaW5wdXRbMF06bnVsbDtlJiZ0JiZlLmFwcGx5KHQsW3RoaXMuZm9ybWF0dGVkRGF0ZVRpbWUsdGhpc10pfSxfdXBkYXRlRGF0ZVRpbWU6ZnVuY3Rpb24oZSl7ZT10aGlzLmluc3R8fGU7dmFyIHQ9JC5kYXRlcGlja2VyLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLnNlbGVjdGVkWWVhcixlLnNlbGVjdGVkTW9udGgsZS5zZWxlY3RlZERheSkpLGk9JC5kYXRlcGlja2VyLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLHM9JC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoZSksYT1udWxsIT09dCYmdGhpcy50aW1lRGVmaW5lZDt0aGlzLmZvcm1hdHRlZERhdGU9JC5kYXRlcGlja2VyLmZvcm1hdERhdGUoaSxudWxsPT09dD9uZXcgRGF0ZTp0LHMpO3ZhciBuPXRoaXMuZm9ybWF0dGVkRGF0ZTtpZighMD09PXRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5P249dGhpcy5mb3JtYXR0ZWRUaW1lOiEwIT09dGhpcy5fZGVmYXVsdHMudGltZU9ubHkmJih0aGlzLl9kZWZhdWx0cy5hbHdheXNTZXRUaW1lfHxhKSYmKG4rPXRoaXMuX2RlZmF1bHRzLnNlcGFyYXRvcit0aGlzLmZvcm1hdHRlZFRpbWUrdGhpcy5fZGVmYXVsdHMudGltZVN1ZmZpeCksdGhpcy5mb3JtYXR0ZWREYXRlVGltZT1uLHRoaXMuX2RlZmF1bHRzLnNob3dUaW1lcGlja2VyKWlmKHRoaXMuJGFsdElucHV0JiYhMD09PXRoaXMuX2RlZmF1bHRzLmFsdEZpZWxkVGltZU9ubHkpdGhpcy4kYWx0SW5wdXQudmFsKHRoaXMuZm9ybWF0dGVkVGltZSksdGhpcy4kaW5wdXQudmFsKHRoaXMuZm9ybWF0dGVkRGF0ZSk7ZWxzZSBpZih0aGlzLiRhbHRJbnB1dCl7dGhpcy4kaW5wdXQudmFsKG4pO3ZhciByPSIiLGw9dGhpcy5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yP3RoaXMuX2RlZmF1bHRzLmFsdFNlcGFyYXRvcjp0aGlzLl9kZWZhdWx0cy5zZXBhcmF0b3Isbz10aGlzLl9kZWZhdWx0cy5hbHRUaW1lU3VmZml4P3RoaXMuX2RlZmF1bHRzLmFsdFRpbWVTdWZmaXg6dGhpcy5fZGVmYXVsdHMudGltZVN1ZmZpeDsocj10aGlzLl9kZWZhdWx0cy5hbHRGb3JtYXQ/JC5kYXRlcGlja2VyLmZvcm1hdERhdGUodGhpcy5fZGVmYXVsdHMuYWx0Rm9ybWF0LG51bGw9PT10P25ldyBEYXRlOnQscyk6dGhpcy5mb3JtYXR0ZWREYXRlKSYmKHIrPWwpLHRoaXMuX2RlZmF1bHRzLmFsdFRpbWVGb3JtYXQ/cis9JC5kYXRlcGlja2VyLmZvcm1hdFRpbWUodGhpcy5fZGVmYXVsdHMuYWx0VGltZUZvcm1hdCx0aGlzLHRoaXMuX2RlZmF1bHRzKStvOnIrPXRoaXMuZm9ybWF0dGVkVGltZStvLHRoaXMuJGFsdElucHV0LnZhbChyKX1lbHNlIHRoaXMuJGlucHV0LnZhbChuKTtlbHNlIHRoaXMuJGlucHV0LnZhbCh0aGlzLmZvcm1hdHRlZERhdGUpO3RoaXMuJGlucHV0LnRyaWdnZXIoImNoYW5nZSIpfSxfb25Gb2N1czpmdW5jdGlvbigpe2lmKCF0aGlzLiRpbnB1dC52YWwoKSYmdGhpcy5fZGVmYXVsdHMuZGVmYXVsdFZhbHVlKXt0aGlzLiRpbnB1dC52YWwodGhpcy5fZGVmYXVsdHMuZGVmYXVsdFZhbHVlKTt2YXIgZT0kLmRhdGVwaWNrZXIuX2dldEluc3QodGhpcy4kaW5wdXQuZ2V0KDApKSx0PSQuZGF0ZXBpY2tlci5fZ2V0KGUsInRpbWVwaWNrZXIiKTtpZih0JiZ0Ll9kZWZhdWx0cy50aW1lT25seSYmZS5pbnB1dC52YWwoKSE9ZS5sYXN0VmFsKXRyeXskLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIoZSl9Y2F0Y2goZSl7JC5kYXRlcGlja2VyLmxvZyhlKX19fSxfY29udHJvbHM6e3NsaWRlcjp7Y3JlYXRlOmZ1bmN0aW9uKGUsdCxpLHMsYSxuLHIpe3ZhciBsPWUuX2RlZmF1bHRzLmlzUlRMO3JldHVybiB0LnByb3AoInNsaWRlIixudWxsKS5zbGlkZXIoe29yaWVudGF0aW9uOiJob3Jpem9udGFsIix2YWx1ZTpsPy0xKnM6cyxtaW46bD8tMSpuOmEsbWF4Omw/LTEqYTpuLHN0ZXA6cixzbGlkZTpmdW5jdGlvbih0LHMpe2UuY29udHJvbC52YWx1ZShlLCQodGhpcyksaSxsPy0xKnMudmFsdWU6cy52YWx1ZSksZS5fb25UaW1lQ2hhbmdlKCl9LHN0b3A6ZnVuY3Rpb24odCxpKXtlLl9vblNlbGVjdEhhbmRsZXIoKX19KX0sb3B0aW9uczpmdW5jdGlvbihlLHQsaSxzLGEpe2lmKGUuX2RlZmF1bHRzLmlzUlRMKXtpZigic3RyaW5nIj09dHlwZW9mIHMpcmV0dXJuIm1pbiI9PXN8fCJtYXgiPT1zP3ZvaWQgMCE9PWE/dC5zbGlkZXIocywtMSphKTpNYXRoLmFicyh0LnNsaWRlcihzKSk6dC5zbGlkZXIocyk7dmFyIG49cy5taW4scj1zLm1heDtyZXR1cm4gcy5taW49cy5tYXg9bnVsbCx2b2lkIDAhPT1uJiYocy5tYXg9LTEqbiksdm9pZCAwIT09ciYmKHMubWluPS0xKnIpLHQuc2xpZGVyKHMpfXJldHVybiJzdHJpbmciPT10eXBlb2YgcyYmdm9pZCAwIT09YT90LnNsaWRlcihzLGEpOnQuc2xpZGVyKHMpfSx2YWx1ZTpmdW5jdGlvbihlLHQsaSxzKXtyZXR1cm4gZS5fZGVmYXVsdHMuaXNSVEw/dm9pZCAwIT09cz90LnNsaWRlcigidmFsdWUiLC0xKnMpOk1hdGguYWJzKHQuc2xpZGVyKCJ2YWx1ZSIpKTp2b2lkIDAhPT1zP3Quc2xpZGVyKCJ2YWx1ZSIscyk6dC5zbGlkZXIoInZhbHVlIil9fSxzZWxlY3Q6e2NyZWF0ZTpmdW5jdGlvbihlLHQsaSxzLGEsbixyKXtmb3IodmFyIGw9JzxzZWxlY3QgY2xhc3M9InVpLXRpbWVwaWNrZXItc2VsZWN0IiBkYXRhLXVuaXQ9IicraSsnIiBkYXRhLW1pbj0iJythKyciIGRhdGEtbWF4PSInK24rJyIgZGF0YS1zdGVwPSInK3IrJyI+JyxvPShlLl9kZWZhdWx0cy50aW1lRm9ybWF0LmluZGV4T2YoInQiKSxhKTtvPD1uO28rPXIpbCs9JzxvcHRpb24gdmFsdWU9IicrbysnIicrKG89PXM/IiBzZWxlY3RlZCI6IiIpKyI+IiwiaG91ciI9PWkmJnVzZUFtcG0oZS5fZGVmYXVsdHMucGlja2VyVGltZUZvcm1hdHx8ZS5fZGVmYXVsdHMudGltZUZvcm1hdCk/bCs9JC5kYXRlcGlja2VyLmZvcm1hdFRpbWUoImhoIFRUIix7aG91cjpvfSxlLl9kZWZhdWx0cyk6bCs9Im1pbGxpc2VjIj09aXx8bz49MTA/bzoiMCIrby50b1N0cmluZygpLGwrPSI8L29wdGlvbj4iO3JldHVybiBsKz0iPC9zZWxlY3Q+Iix0LmNoaWxkcmVuKCJzZWxlY3QiKS5yZW1vdmUoKSwkKGwpLmFwcGVuZFRvKHQpLmNoYW5nZSgoZnVuY3Rpb24odCl7ZS5fb25UaW1lQ2hhbmdlKCksZS5fb25TZWxlY3RIYW5kbGVyKCl9KSksdH0sb3B0aW9uczpmdW5jdGlvbihlLHQsaSxzLGEpe3ZhciBuPXt9LHI9dC5jaGlsZHJlbigic2VsZWN0Iik7aWYoInN0cmluZyI9PXR5cGVvZiBzKXtpZih2b2lkIDA9PT1hKXJldHVybiByLmRhdGEocyk7bltzXT1hfWVsc2Ugbj1zO3JldHVybiBlLmNvbnRyb2wuY3JlYXRlKGUsdCxyLmRhdGEoInVuaXQiKSxyLnZhbCgpLG4ubWlufHxyLmRhdGEoIm1pbiIpLG4ubWF4fHxyLmRhdGEoIm1heCIpLG4uc3RlcHx8ci5kYXRhKCJzdGVwIikpfSx2YWx1ZTpmdW5jdGlvbihlLHQsaSxzKXt2YXIgYT10LmNoaWxkcmVuKCJzZWxlY3QiKTtyZXR1cm4gdm9pZCAwIT09cz9hLnZhbChzKTphLnZhbCgpfX19fSksJC5mbi5leHRlbmQoe3RpbWVwaWNrZXI6ZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmKHRbMF09JC5leHRlbmQoZSx7dGltZU9ubHk6ITB9KSksJCh0aGlzKS5lYWNoKChmdW5jdGlvbigpeyQuZm4uZGF0ZXRpbWVwaWNrZXIuYXBwbHkoJCh0aGlzKSx0KX0pKX0sZGF0ZXRpbWVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzO3JldHVybiJzdHJpbmciPT10eXBlb2YoZT1lfHx7fSk/ImdldERhdGUiPT1lPyQuZm4uZGF0ZXBpY2tlci5hcHBseSgkKHRoaXNbMF0pLHQpOnRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT0kKHRoaXMpO2UuZGF0ZXBpY2tlci5hcHBseShlLHQpfSkpOnRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD0kKHRoaXMpO3QuZGF0ZXBpY2tlcigkLnRpbWVwaWNrZXIuX25ld0luc3QodCxlKS5fZGVmYXVsdHMpfSkpfX0pLCQuZGF0ZXBpY2tlci5wYXJzZURhdGVUaW1lPWZ1bmN0aW9uKGUsdCxpLHMsYSl7dmFyIG49cGFyc2VEYXRlVGltZUludGVybmFsKGUsdCxpLHMsYSk7aWYobi50aW1lT2JqKXt2YXIgcj1uLnRpbWVPYmo7bi5kYXRlLnNldEhvdXJzKHIuaG91cixyLm1pbnV0ZSxyLnNlY29uZCxyLm1pbGxpc2VjKX1yZXR1cm4gbi5kYXRlfSwkLmRhdGVwaWNrZXIucGFyc2VUaW1lPWZ1bmN0aW9uKGUsdCxpKXt2YXIgcz1leHRlbmRSZW1vdmUoZXh0ZW5kUmVtb3ZlKHt9LCQudGltZXBpY2tlci5fZGVmYXVsdHMpLGl8fHt9KSxhPWZ1bmN0aW9uKGUsdCxpKXt2YXIgcyxhPSJeIitlLnRvU3RyaW5nKCkucmVwbGFjZSgvKFtoSF17MSwyfXxtbT98c3M/fFt0VF17MSwyfXxbbHpdfCcuKj8nKS9nLChmdW5jdGlvbihlKXtzd2l0Y2goZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoIjpjYXNlIm0iOmNhc2UicyI6cmV0dXJuIihcXGQ/XFxkKSI7Y2FzZSJsIjpyZXR1cm4iKFxcZD9cXGQ/XFxkKSI7Y2FzZSJ6IjpyZXR1cm4iKHp8Wy0rXVxcZFxcZDo/XFxkXFxkfFxcUyspPyI7Y2FzZSJ0IjpyZXR1cm4gdD1pLmFtTmFtZXMscz1pLnBtTmFtZXMsYT1bXSx0JiYkLm1lcmdlKGEsdCkscyYmJC5tZXJnZShhLHMpLCIoIisoYT0kLm1hcChhLChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bLiorP3woKVxbXF17fVxcXS9nLCJcXCQmIil9KSkpLmpvaW4oInwiKSsiKT8iO2RlZmF1bHQ6cmV0dXJuIigiK2UucmVwbGFjZSgvXCcvZywiIikucmVwbGFjZSgvKFwufFwkfFxefFxcfFwvfFwofFwpfFxbfFxdfFw/fFwrfFwqKS9nLChmdW5jdGlvbihlKXtyZXR1cm4iXFwiK2V9KSkrIik/In12YXIgdCxzLGF9KSkucmVwbGFjZSgvXHMvZywiXFxzPyIpK2kudGltZVN1ZmZpeCsiJCIsbj1mdW5jdGlvbihlKXt2YXIgdD1lLnRvTG93ZXJDYXNlKCkubWF0Y2goLyhoezEsMn18bXsxLDJ9fHN7MSwyfXxsezF9fHR7MSwyfXx6fCcuKj8nKS9nKSxpPXtoOi0xLG06LTEsczotMSxsOi0xLHQ6LTEsejotMX07aWYodClmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKyktMT09aVt0W3NdLnRvU3RyaW5nKCkuY2hhckF0KDApXSYmKGlbdFtzXS50b1N0cmluZygpLmNoYXJBdCgwKV09cysxKTtyZXR1cm4gaX0oZSkscj0iIixsPXtob3VyOjAsbWludXRlOjAsc2Vjb25kOjAsbWlsbGlzZWM6MH07aWYocz10Lm1hdGNoKG5ldyBSZWdFeHAoYSwiaSIpKSl7aWYoLTEhPT1uLnQmJih2b2lkIDA9PT1zW24udF18fDA9PT1zW24udF0ubGVuZ3RoPyhyPSIiLGwuYW1wbT0iIik6KHI9LTEhPT0kLmluQXJyYXkoc1tuLnRdLnRvVXBwZXJDYXNlKCksaS5hbU5hbWVzKT8iQU0iOiJQTSIsbC5hbXBtPWlbIkFNIj09cj8iYW1OYW1lcyI6InBtTmFtZXMiXVswXSkpLC0xIT09bi5oJiYoIkFNIj09ciYmIjEyIj09c1tuLmhdP2wuaG91cj0wOiJQTSI9PXImJiIxMiIhPXNbbi5oXT9sLmhvdXI9cGFyc2VJbnQoc1tuLmhdLDEwKSsxMjpsLmhvdXI9TnVtYmVyKHNbbi5oXSkpLC0xIT09bi5tJiYobC5taW51dGU9TnVtYmVyKHNbbi5tXSkpLC0xIT09bi5zJiYobC5zZWNvbmQ9TnVtYmVyKHNbbi5zXSkpLC0xIT09bi5sJiYobC5taWxsaXNlYz1OdW1iZXIoc1tuLmxdKSksLTEhPT1uLnomJnZvaWQgMCE9PXNbbi56XSl7dmFyIG89c1tuLnpdLnRvVXBwZXJDYXNlKCk7c3dpdGNoKG8ubGVuZ3RoKXtjYXNlIDE6bz1pLnRpbWV6b25lSXNvODYwMT8iWiI6IiswMDAwIjticmVhaztjYXNlIDU6aS50aW1lem9uZUlzbzg2MDEmJihvPSIwMDAwIj09by5zdWJzdHJpbmcoMSk/IloiOm8uc3Vic3RyaW5nKDAsMykrIjoiK28uc3Vic3RyaW5nKDMpKTticmVhaztjYXNlIDY6aS50aW1lem9uZUlzbzg2MDE/IjAwOjAwIj09by5zdWJzdHJpbmcoMSkmJihvPSJaIik6bz0iWiI9PW98fCIwMDowMCI9PW8uc3Vic3RyaW5nKDEpPyIrMDAwMCI6by5yZXBsYWNlKC86LywiIil9bC50aW1lem9uZT1vfXJldHVybiBsfXJldHVybiExfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcy5wYXJzZT9zLnBhcnNlKGUsdCxzKToibG9vc2UiPT09cy5wYXJzZT9mdW5jdGlvbihlLHQsaSl7dHJ5e3ZhciBzPW5ldyBEYXRlKCIyMDEyLTAxLTAxICIrdCk7cmV0dXJue2hvdXI6cy5nZXRIb3VycygpLG1pbnV0ZXM6cy5nZXRNaW51dGVzKCksc2Vjb25kczpzLmdldFNlY29uZHMoKSxtaWxsaXNlYzpzLmdldE1pbGxpc2Vjb25kcygpLHRpbWV6b25lOiQudGltZXBpY2tlci50aW1lWm9uZU9mZnNldFN0cmluZyhzKX19Y2F0Y2gocyl7dHJ5e3JldHVybiBhKGUsdCxpKX1jYXRjaChpKXskLmRhdGVwaWNrZXIubG9nKCJVbmFibGUgdG8gcGFyc2UgXG50aW1lU3RyaW5nOiAiK3QrIlxudGltZUZvcm1hdDogIitlKX19cmV0dXJuITF9KGUsdCxzKTphKGUsdCxzKX0sJC5kYXRlcGlja2VyLmZvcm1hdFRpbWU9ZnVuY3Rpb24oZSx0LGkpe2k9aXx8e30saT0kLmV4dGVuZCh7fSwkLnRpbWVwaWNrZXIuX2RlZmF1bHRzLGkpLHQ9JC5leHRlbmQoe2hvdXI6MCxtaW51dGU6MCxzZWNvbmQ6MCxtaWxsaXNlYzowLHRpbWV6b25lOiIrMDAwMCJ9LHQpO3ZhciBzPWUsYT1pLmFtTmFtZXNbMF0sbj1wYXJzZUludCh0LmhvdXIsMTApO3JldHVybiBuPjExJiYoYT1pLnBtTmFtZXNbMF0pLHM9cy5yZXBsYWNlKC8oPzpISD98aGg/fG1tP3xzcz98W3RUXXsxLDJ9fFtsel18KCcuKj8nfCIuKj8iKSkvZywoZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiSEgiOnJldHVybigiMCIrbikuc2xpY2UoLTIpO2Nhc2UiSCI6cmV0dXJuIG47Y2FzZSJoaCI6cmV0dXJuKCIwIitjb252ZXJ0MjR0bzEyKG4pKS5zbGljZSgtMik7Y2FzZSJoIjpyZXR1cm4gY29udmVydDI0dG8xMihuKTtjYXNlIm1tIjpyZXR1cm4oIjAiK3QubWludXRlKS5zbGljZSgtMik7Y2FzZSJtIjpyZXR1cm4gdC5taW51dGU7Y2FzZSJzcyI6cmV0dXJuKCIwIit0LnNlY29uZCkuc2xpY2UoLTIpO2Nhc2UicyI6cmV0dXJuIHQuc2Vjb25kO2Nhc2UibCI6cmV0dXJuKCIwMCIrdC5taWxsaXNlYykuc2xpY2UoLTMpO2Nhc2UieiI6cmV0dXJuIG51bGw9PT10LnRpbWV6b25lP2kuZGVmYXVsdFRpbWV6b25lOnQudGltZXpvbmU7Y2FzZSJUIjpyZXR1cm4gYS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtjYXNlIlRUIjpyZXR1cm4gYS50b1VwcGVyQ2FzZSgpO2Nhc2UidCI6cmV0dXJuIGEuY2hhckF0KDApLnRvTG93ZXJDYXNlKCk7Y2FzZSJ0dCI6cmV0dXJuIGEudG9Mb3dlckNhc2UoKTtkZWZhdWx0OnJldHVybiBlLnJlcGxhY2UoL1wnL2csIiIpfHwiJyJ9fSkpLHM9JC50cmltKHMpfSwkLmRhdGVwaWNrZXIuX2Jhc2Vfc2VsZWN0RGF0ZT0kLmRhdGVwaWNrZXIuX3NlbGVjdERhdGUsJC5kYXRlcGlja2VyLl9zZWxlY3REYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2V0SW5zdCgkKGUpWzBdKSxzPXRoaXMuX2dldChpLCJ0aW1lcGlja2VyIik7cz8ocy5fbGltaXRNaW5NYXhEYXRlVGltZShpLCEwKSxpLmlubGluZT1pLnN0YXlfb3Blbj0hMCx0aGlzLl9iYXNlX3NlbGVjdERhdGUoZSx0KSxpLmlubGluZT1pLnN0YXlfb3Blbj0hMSx0aGlzLl9ub3RpZnlDaGFuZ2UoaSksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKSk6dGhpcy5fYmFzZV9zZWxlY3REYXRlKGUsdCl9LCQuZGF0ZXBpY2tlci5fYmFzZV91cGRhdGVEYXRlcGlja2VyPSQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlciwkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dFswXTtpZighKCQuZGF0ZXBpY2tlci5fY3VySW5zdCYmJC5kYXRlcGlja2VyLl9jdXJJbnN0IT1lJiYkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9dHx8ImJvb2xlYW4iPT10eXBlb2YgZS5zdGF5X29wZW4mJiExIT09ZS5zdGF5X29wZW4pKXt0aGlzLl9iYXNlX3VwZGF0ZURhdGVwaWNrZXIoZSk7dmFyIGk9dGhpcy5fZ2V0KGUsInRpbWVwaWNrZXIiKTtpZihpJiYoaS5fYWRkVGltZVBpY2tlcihlKSxpLl9kZWZhdWx0cy51c2VMb2NhbFRpbWV6b25lKSl7dmFyIHM9bmV3IERhdGUoZS5zZWxlY3RlZFllYXIsZS5zZWxlY3RlZE1vbnRoLGUuc2VsZWN0ZWREYXksMTIpO3NlbGVjdExvY2FsVGltZVpvbmUoaSxzKSxpLl9vblRpbWVDaGFuZ2UoKX19fSwkLmRhdGVwaWNrZXIuX2Jhc2VfZG9LZXlQcmVzcz0kLmRhdGVwaWNrZXIuX2RvS2V5UHJlc3MsJC5kYXRlcGlja2VyLl9kb0tleVByZXNzPWZ1bmN0aW9uKGUpe3ZhciB0PSQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCksaT0kLmRhdGVwaWNrZXIuX2dldCh0LCJ0aW1lcGlja2VyIik7aWYoaSYmJC5kYXRlcGlja2VyLl9nZXQodCwiY29uc3RyYWluSW5wdXQiKSl7dmFyIHM9dXNlQW1wbShpLl9kZWZhdWx0cy50aW1lRm9ybWF0KSxhPSQuZGF0ZXBpY2tlci5fcG9zc2libGVDaGFycygkLmRhdGVwaWNrZXIuX2dldCh0LCJkYXRlRm9ybWF0IikpLG49aS5fZGVmYXVsdHMudGltZUZvcm1hdC50b1N0cmluZygpLnJlcGxhY2UoL1tobXNdL2csIiIpLnJlcGxhY2UoL1RUL2cscz8iQVBNIjoiIikucmVwbGFjZSgvVHQvZyxzPyJBYVBwTW0iOiIiKS5yZXBsYWNlKC90VC9nLHM/IkFhUHBNbSI6IiIpLnJlcGxhY2UoL1QvZyxzPyJBUCI6IiIpLnJlcGxhY2UoL3R0L2cscz8iYXBtIjoiIikucmVwbGFjZSgvdC9nLHM/ImFwIjoiIikrIiAiK2kuX2RlZmF1bHRzLnNlcGFyYXRvcitpLl9kZWZhdWx0cy50aW1lU3VmZml4KyhpLl9kZWZhdWx0cy5zaG93VGltZXpvbmU/aS5fZGVmYXVsdHMudGltZXpvbmVMaXN0LmpvaW4oIiIpOiIiKStpLl9kZWZhdWx0cy5hbU5hbWVzLmpvaW4oIiIpK2kuX2RlZmF1bHRzLnBtTmFtZXMuam9pbigiIikrYSxyPVN0cmluZy5mcm9tQ2hhckNvZGUodm9pZCAwPT09ZS5jaGFyQ29kZT9lLmtleUNvZGU6ZS5jaGFyQ29kZSk7cmV0dXJuIGUuY3RybEtleXx8cjwiICJ8fCFhfHxuLmluZGV4T2Yocik+LTF9cmV0dXJuICQuZGF0ZXBpY2tlci5fYmFzZV9kb0tleVByZXNzKGUpfSwkLmRhdGVwaWNrZXIuX2Jhc2VfdXBkYXRlQWx0ZXJuYXRlPSQuZGF0ZXBpY2tlci5fdXBkYXRlQWx0ZXJuYXRlLCQuZGF0ZXBpY2tlci5fdXBkYXRlQWx0ZXJuYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJ0aW1lcGlja2VyIik7aWYodCl7dmFyIGk9dC5fZGVmYXVsdHMuYWx0RmllbGQ7aWYoaSl7dC5fZGVmYXVsdHMuYWx0Rm9ybWF0fHx0Ll9kZWZhdWx0cy5kYXRlRm9ybWF0O3ZhciBzPXRoaXMuX2dldERhdGUoZSksYT0kLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhlKSxuPSIiLHI9dC5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yP3QuX2RlZmF1bHRzLmFsdFNlcGFyYXRvcjp0Ll9kZWZhdWx0cy5zZXBhcmF0b3IsbD10Ll9kZWZhdWx0cy5hbHRUaW1lU3VmZml4P3QuX2RlZmF1bHRzLmFsdFRpbWVTdWZmaXg6dC5fZGVmYXVsdHMudGltZVN1ZmZpeCxvPW51bGwhPT10Ll9kZWZhdWx0cy5hbHRUaW1lRm9ybWF0P3QuX2RlZmF1bHRzLmFsdFRpbWVGb3JtYXQ6dC5fZGVmYXVsdHMudGltZUZvcm1hdDtuKz0kLmRhdGVwaWNrZXIuZm9ybWF0VGltZShvLHQsdC5fZGVmYXVsdHMpK2wsdC5fZGVmYXVsdHMudGltZU9ubHl8fHQuX2RlZmF1bHRzLmFsdEZpZWxkVGltZU9ubHl8fChuPXQuX2RlZmF1bHRzLmFsdEZvcm1hdD8kLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSh0Ll9kZWZhdWx0cy5hbHRGb3JtYXQsbnVsbD09PXM/bmV3IERhdGU6cyxhKStyK246dC5mb3JtYXR0ZWREYXRlK3IrbiksJChpKS52YWwobil9fWVsc2UgJC5kYXRlcGlja2VyLl9iYXNlX3VwZGF0ZUFsdGVybmF0ZShlKX0sJC5kYXRlcGlja2VyLl9iYXNlX2RvS2V5VXA9JC5kYXRlcGlja2VyLl9kb0tleVVwLCQuZGF0ZXBpY2tlci5fZG9LZXlVcD1mdW5jdGlvbihlKXt2YXIgdD0kLmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpLGk9JC5kYXRlcGlja2VyLl9nZXQodCwidGltZXBpY2tlciIpO2lmKGkmJmkuX2RlZmF1bHRzLnRpbWVPbmx5JiZ0LmlucHV0LnZhbCgpIT10Lmxhc3RWYWwpdHJ5eyQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcih0KX1jYXRjaChlKXskLmRhdGVwaWNrZXIubG9nKGUpfXJldHVybiAkLmRhdGVwaWNrZXIuX2Jhc2VfZG9LZXlVcChlKX0sJC5kYXRlcGlja2VyLl9iYXNlX2dvdG9Ub2RheT0kLmRhdGVwaWNrZXIuX2dvdG9Ub2RheSwkLmRhdGVwaWNrZXIuX2dvdG9Ub2RheT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXRJbnN0KCQoZSlbMF0pLGk9dC5kcERpdjt0aGlzLl9iYXNlX2dvdG9Ub2RheShlKTt2YXIgcz10aGlzLl9nZXQodCwidGltZXBpY2tlciIpO3NlbGVjdExvY2FsVGltZVpvbmUocyk7dmFyIGE9bmV3IERhdGU7dGhpcy5fc2V0VGltZSh0LGEpLCQoIi51aS1kYXRlcGlja2VyLXRvZGF5IixpKS5jbGljaygpfSwkLmRhdGVwaWNrZXIuX2Rpc2FibGVUaW1lcGlja2VyRGF0ZXBpY2tlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXRJbnN0KGUpO2lmKHQpe3ZhciBpPXRoaXMuX2dldCh0LCJ0aW1lcGlja2VyIik7JChlKS5kYXRlcGlja2VyKCJnZXREYXRlIiksaSYmKGkuX2RlZmF1bHRzLnNob3dUaW1lcGlja2VyPSExLGkuX3VwZGF0ZURhdGVUaW1lKHQpKX19LCQuZGF0ZXBpY2tlci5fZW5hYmxlVGltZXBpY2tlckRhdGVwaWNrZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0SW5zdChlKTtpZih0KXt2YXIgaT10aGlzLl9nZXQodCwidGltZXBpY2tlciIpOyQoZSkuZGF0ZXBpY2tlcigiZ2V0RGF0ZSIpLGkmJihpLl9kZWZhdWx0cy5zaG93VGltZXBpY2tlcj0hMCxpLl9hZGRUaW1lUGlja2VyKHQpLGkuX3VwZGF0ZURhdGVUaW1lKHQpKX19LCQuZGF0ZXBpY2tlci5fc2V0VGltZT1mdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuX2dldChlLCJ0aW1lcGlja2VyIik7aWYoaSl7dmFyIHM9aS5fZGVmYXVsdHM7aS5ob3VyPXQ/dC5nZXRIb3VycygpOnMuaG91cixpLm1pbnV0ZT10P3QuZ2V0TWludXRlcygpOnMubWludXRlLGkuc2Vjb25kPXQ/dC5nZXRTZWNvbmRzKCk6cy5zZWNvbmQsaS5taWxsaXNlYz10P3QuZ2V0TWlsbGlzZWNvbmRzKCk6cy5taWxsaXNlYyxpLl9saW1pdE1pbk1heERhdGVUaW1lKGUsITApLGkuX29uVGltZUNoYW5nZSgpLGkuX3VwZGF0ZURhdGVUaW1lKGUpfX0sJC5kYXRlcGlja2VyLl9zZXRUaW1lRGF0ZXBpY2tlcj1mdW5jdGlvbihlLHQsaSl7dmFyIHM9dGhpcy5fZ2V0SW5zdChlKTtpZihzKXt2YXIgYSxuPXRoaXMuX2dldChzLCJ0aW1lcGlja2VyIik7aWYobil0aGlzLl9zZXREYXRlRnJvbUZpZWxkKHMpLHQmJigic3RyaW5nIj09dHlwZW9mIHQ/KG4uX3BhcnNlVGltZSh0LGkpLChhPW5ldyBEYXRlKS5zZXRIb3VycyhuLmhvdXIsbi5taW51dGUsbi5zZWNvbmQsbi5taWxsaXNlYykpOmE9bmV3IERhdGUodC5nZXRUaW1lKCkpLCJJbnZhbGlkIERhdGUiPT1hLnRvU3RyaW5nKCkmJihhPXZvaWQgMCksdGhpcy5fc2V0VGltZShzLGEpKX19LCQuZGF0ZXBpY2tlci5fYmFzZV9zZXREYXRlRGF0ZXBpY2tlcj0kLmRhdGVwaWNrZXIuX3NldERhdGVEYXRlcGlja2VyLCQuZGF0ZXBpY2tlci5fc2V0RGF0ZURhdGVwaWNrZXI9ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLl9nZXRJbnN0KGUpO2lmKGkpe3ZhciBzPXQgaW5zdGFuY2VvZiBEYXRlP25ldyBEYXRlKHQuZ2V0VGltZSgpKTp0O3RoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksdGhpcy5fYmFzZV9zZXREYXRlRGF0ZXBpY2tlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fc2V0VGltZURhdGVwaWNrZXIoZSxzLCEwKX19LCQuZGF0ZXBpY2tlci5fYmFzZV9nZXREYXRlRGF0ZXBpY2tlcj0kLmRhdGVwaWNrZXIuX2dldERhdGVEYXRlcGlja2VyLCQuZGF0ZXBpY2tlci5fZ2V0RGF0ZURhdGVwaWNrZXI9ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLl9nZXRJbnN0KGUpO2lmKGkpe3ZhciBzPXRoaXMuX2dldChpLCJ0aW1lcGlja2VyIik7aWYocyl7dm9pZCAwPT09aS5sYXN0VmFsJiZ0aGlzLl9zZXREYXRlRnJvbUZpZWxkKGksdCk7dmFyIGE9dGhpcy5fZ2V0RGF0ZShpKTtyZXR1cm4gYSYmcy5fcGFyc2VUaW1lKCQoZSkudmFsKCkscy50aW1lT25seSkmJmEuc2V0SG91cnMocy5ob3VyLHMubWludXRlLHMuc2Vjb25kLHMubWlsbGlzZWMpLGF9cmV0dXJuIHRoaXMuX2Jhc2VfZ2V0RGF0ZURhdGVwaWNrZXIoZSx0KX19LCQuZGF0ZXBpY2tlci5fYmFzZV9wYXJzZURhdGU9JC5kYXRlcGlja2VyLnBhcnNlRGF0ZSwkLmRhdGVwaWNrZXIucGFyc2VEYXRlPWZ1bmN0aW9uKGUsdCxpKXt2YXIgczt0cnl7cz10aGlzLl9iYXNlX3BhcnNlRGF0ZShlLHQsaSl9Y2F0Y2goYSl7cz10aGlzLl9iYXNlX3BhcnNlRGF0ZShlLHQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtKGEubGVuZ3RoLWEuaW5kZXhPZigiOiIpLTIpKSxpKSwkLmRhdGVwaWNrZXIubG9nKCJFcnJvciBwYXJzaW5nIHRoZSBkYXRlIHN0cmluZzogIithKyJcbmRhdGUgc3RyaW5nID0gIit0KyJcbmRhdGUgZm9ybWF0ID0gIitlKX1yZXR1cm4gc30sJC5kYXRlcGlja2VyLl9iYXNlX2Zvcm1hdERhdGU9JC5kYXRlcGlja2VyLl9mb3JtYXREYXRlLCQuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZT1mdW5jdGlvbihlLHQsaSxzKXt2YXIgYT10aGlzLl9nZXQoZSwidGltZXBpY2tlciIpO3JldHVybiBhPyhhLl91cGRhdGVEYXRlVGltZShlKSxhLiRpbnB1dC52YWwoKSk6dGhpcy5fYmFzZV9mb3JtYXREYXRlKGUpfSwkLmRhdGVwaWNrZXIuX2Jhc2Vfb3B0aW9uRGF0ZXBpY2tlcj0kLmRhdGVwaWNrZXIuX29wdGlvbkRhdGVwaWNrZXIsJC5kYXRlcGlja2VyLl9vcHRpb25EYXRlcGlja2VyPWZ1bmN0aW9uKGUsdCxpKXt2YXIgcyxhPXRoaXMuX2dldEluc3QoZSk7aWYoIWEpcmV0dXJuIG51bGw7dmFyIG49dGhpcy5fZ2V0KGEsInRpbWVwaWNrZXIiKTtpZihuKXt2YXIgcixsPW51bGwsbz1udWxsLHU9bnVsbCxkPW4uX2RlZmF1bHRzLmV2bnRzLG09e307aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZigibWluRGF0ZSI9PT10fHwibWluRGF0ZVRpbWUiPT09dClsPWk7ZWxzZSBpZigibWF4RGF0ZSI9PT10fHwibWF4RGF0ZVRpbWUiPT09dClvPWk7ZWxzZSBpZigib25TZWxlY3QiPT09dCl1PWk7ZWxzZSBpZihkLmhhc093blByb3BlcnR5KHQpKXtpZih2b2lkIDA9PT1pKXJldHVybiBkW3RdO21bdF09aSxzPXt9fX1lbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdClmb3IociBpbiB0Lm1pbkRhdGU/bD10Lm1pbkRhdGU6dC5taW5EYXRlVGltZT9sPXQubWluRGF0ZVRpbWU6dC5tYXhEYXRlP289dC5tYXhEYXRlOnQubWF4RGF0ZVRpbWUmJihvPXQubWF4RGF0ZVRpbWUpLGQpZC5oYXNPd25Qcm9wZXJ0eShyKSYmdFtyXSYmKG1bcl09dFtyXSk7Zm9yKHIgaW4gbSltLmhhc093blByb3BlcnR5KHIpJiYoZFtyXT1tW3JdLHN8fChzPSQuZXh0ZW5kKHt9LHQpKSxkZWxldGUgc1tyXSk7aWYocyYmaXNFbXB0eU9iamVjdChzKSlyZXR1cm47bD8obD0wPT09bD9uZXcgRGF0ZTpuZXcgRGF0ZShsKSxuLl9kZWZhdWx0cy5taW5EYXRlPWwsbi5fZGVmYXVsdHMubWluRGF0ZVRpbWU9bCk6bz8obz0wPT09bz9uZXcgRGF0ZTpuZXcgRGF0ZShvKSxuLl9kZWZhdWx0cy5tYXhEYXRlPW8sbi5fZGVmYXVsdHMubWF4RGF0ZVRpbWU9byk6dSYmKG4uX2RlZmF1bHRzLm9uU2VsZWN0PXUpfXJldHVybiB2b2lkIDA9PT1pP3RoaXMuX2Jhc2Vfb3B0aW9uRGF0ZXBpY2tlci5jYWxsKCQuZGF0ZXBpY2tlcixlLHQpOnRoaXMuX2Jhc2Vfb3B0aW9uRGF0ZXBpY2tlci5jYWxsKCQuZGF0ZXBpY2tlcixlLHN8fHQsaSl9O3ZhciBpc0VtcHR5T2JqZWN0PWZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4hMTtyZXR1cm4hMH0sZXh0ZW5kUmVtb3ZlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluICQuZXh0ZW5kKGUsdCksdCludWxsIT09dFtpXSYmdm9pZCAwIT09dFtpXXx8KGVbaV09dFtpXSk7cmV0dXJuIGV9LHVzZUFtcG09ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1lLmluZGV4T2YoInQiKSYmLTEhPT1lLmluZGV4T2YoImgiKX0sY29udmVydDI0dG8xMj1mdW5jdGlvbihlKXtyZXR1cm4gZT4xMiYmKGUtPTEyKSwwPT1lJiYoZT0xMiksU3RyaW5nKGUpfSxzcGxpdERhdGVUaW1lPWZ1bmN0aW9uKGUsdCxpLHMpe3RyeXt2YXIgYT1zJiZzLnNlcGFyYXRvcj9zLnNlcGFyYXRvcjokLnRpbWVwaWNrZXIuX2RlZmF1bHRzLnNlcGFyYXRvcixuPShzJiZzLnRpbWVGb3JtYXQ/cy50aW1lRm9ybWF0OiQudGltZXBpY2tlci5fZGVmYXVsdHMudGltZUZvcm1hdCkuc3BsaXQoYSkubGVuZ3RoLHI9dC5zcGxpdChhKSxsPXIubGVuZ3RoO2lmKGw+MSlyZXR1cm5bci5zcGxpY2UoMCxsLW4pLmpvaW4oYSksci5zcGxpY2UoMCxuKS5qb2luKGEpXX1jYXRjaChpKXtpZigkLmRhdGVwaWNrZXIubG9nKCJDb3VsZCBub3Qgc3BsaXQgdGhlIGRhdGUgZnJvbSB0aGUgdGltZS4gUGxlYXNlIGNoZWNrIHRoZSBmb2xsb3dpbmcgZGF0ZXRpbWVwaWNrZXIgb3B0aW9uc1xudGhyb3duIGVycm9yOiAiK2krIlxuZGF0ZVRpbWVTdHJpbmciK3QrIlxuZGF0ZUZvcm1hdCA9ICIrZSsiXG5zZXBhcmF0b3IgPSAiK3Muc2VwYXJhdG9yKyJcbnRpbWVGb3JtYXQgPSAiK3MudGltZUZvcm1hdCksaS5pbmRleE9mKCI6Iik+PTApe3ZhciBvPXQubGVuZ3RoLShpLmxlbmd0aC1pLmluZGV4T2YoIjoiKS0yKTt0LnN1YnN0cmluZyhvKTtyZXR1cm5bJC50cmltKHQuc3Vic3RyaW5nKDAsbykpLCQudHJpbSh0LnN1YnN0cmluZyhvKSldfXRocm93IGl9cmV0dXJuW3QsIiJdfSxwYXJzZURhdGVUaW1lSW50ZXJuYWw9ZnVuY3Rpb24oZSx0LGkscyxhKXt2YXIgbixyPXNwbGl0RGF0ZVRpbWUoZSxpLHMsYSk7aWYobj0kLmRhdGVwaWNrZXIuX2Jhc2VfcGFyc2VEYXRlKGUsclswXSxzKSwiIiE9PXJbMV0pe3ZhciBsPXJbMV0sbz0kLmRhdGVwaWNrZXIucGFyc2VUaW1lKHQsbCxhKTtpZihudWxsPT09byl0aHJvdyJXcm9uZyB0aW1lIGZvcm1hdCI7cmV0dXJue2RhdGU6bix0aW1lT2JqOm99fXJldHVybntkYXRlOm59fSxzZWxlY3RMb2NhbFRpbWVab25lPWZ1bmN0aW9uKGUsdCl7aWYoZSYmZS50aW1lem9uZV9zZWxlY3Qpe2UuX2RlZmF1bHRzLnVzZUxvY2FsVGltZXpvbmU9ITA7dmFyIGk9dm9pZCAwIT09dD90Om5ldyBEYXRlLHM9JC50aW1lcGlja2VyLnRpbWVab25lT2Zmc2V0U3RyaW5nKGkpO2UuX2RlZmF1bHRzLnRpbWV6b25lSXNvODYwMSYmKHM9cy5zdWJzdHJpbmcoMCwzKSsiOiIrcy5zdWJzdHJpbmcoMykpLGUudGltZXpvbmVfc2VsZWN0LnZhbChzKX19OyQudGltZXBpY2tlcj1uZXcgVGltZXBpY2tlciwkLnRpbWVwaWNrZXIudGltZVpvbmVPZmZzZXRTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9LTEqZS5nZXRUaW1lem9uZU9mZnNldCgpLGk9dCU2MDtyZXR1cm4odD49MD8iKyI6Ii0iKSsoIjAiKygxMDEqKCh0LWkpLzYwKSkudG9TdHJpbmcoKSkuc3Vic3RyKC0yKSsoIjAiKygxMDEqaSkudG9TdHJpbmcoKSkuc3Vic3RyKC0yKX0sJC50aW1lcGlja2VyLnRpbWVSYW5nZT1mdW5jdGlvbihlLHQsaSl7cmV0dXJuICQudGltZXBpY2tlci5oYW5kbGVSYW5nZSgidGltZXBpY2tlciIsZSx0LGkpfSwkLnRpbWVwaWNrZXIuZGF0ZVRpbWVSYW5nZT1mdW5jdGlvbihlLHQsaSl7JC50aW1lcGlja2VyLmRhdGVSYW5nZShlLHQsaSwiZGF0ZXRpbWVwaWNrZXIiKX0sJC50aW1lcGlja2VyLmRhdGVSYW5nZT1mdW5jdGlvbihlLHQsaSxzKXtzPXN8fCJkYXRlcGlja2VyIiwkLnRpbWVwaWNrZXIuaGFuZGxlUmFuZ2UocyxlLHQsaSl9LCQudGltZXBpY2tlci5oYW5kbGVSYW5nZT1mdW5jdGlvbihlLHQsaSxzKXtmdW5jdGlvbiBhKGUscyxhKXtzLnZhbCgpJiZuZXcgRGF0ZSh0LnZhbCgpKT5uZXcgRGF0ZShpLnZhbCgpKSYmcy52YWwoYSl9ZnVuY3Rpb24gbih0LGkscyl7aWYoJCh0KS52YWwoKSl7dmFyIGE9JCh0KVtlXS5jYWxsKCQodCksImdldERhdGUiKTthLmdldFRpbWUmJiQoaSlbZV0uY2FsbCgkKGkpLCJvcHRpb24iLHMsYSl9fXJldHVybiAkLmZuW2VdLmNhbGwodCwkLmV4dGVuZCh7b25DbG9zZTpmdW5jdGlvbihlLHQpe2EodGhpcyxpLGUpfSxvblNlbGVjdDpmdW5jdGlvbihlKXtuKHRoaXMsaSwibWluRGF0ZSIpfX0scyxzLnN0YXJ0KSksJC5mbltlXS5jYWxsKGksJC5leHRlbmQoe29uQ2xvc2U6ZnVuY3Rpb24oZSxpKXthKHRoaXMsdCxlKX0sb25TZWxlY3Q6ZnVuY3Rpb24oZSl7bih0aGlzLHQsIm1heERhdGUiKX19LHMscy5lbmQpKSwidGltZXBpY2tlciIhPWUmJnMucmVmb3JtYXQmJiQoW3QsaV0pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9JCh0aGlzKVtlXS5jYWxsKCQodGhpcyksIm9wdGlvbiIsImRhdGVGb3JtYXQiKSxpPW5ldyBEYXRlKCQodGhpcykudmFsKCkpOyQodGhpcykudmFsKCkmJmkmJiQodGhpcykudmFsKCQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKHQsaSkpfSkpLGEodCxpLHQudmFsKCkpLG4odCxpLCJtaW5EYXRlIiksbihpLHQsIm1heERhdGUiKSwkKFt0LmdldCgwKSxpLmdldCgwKV0pfSwkLnRpbWVwaWNrZXIudmVyc2lvbj0iMS4xLjEifWZ1bmN0aW9uIFRpbWVwaWNrZXIoKXt0aGlzLnJlZ2lvbmFsPVtdLHRoaXMucmVnaW9uYWxbIiJdPXtjdXJyZW50VGV4dDoiTm93IixjbG9zZVRleHQ6IkRvbmUiLGFtTmFtZXM6WyJBTSIsIkEiXSxwbU5hbWVzOlsiUE0iLCJQIl0sdGltZUZvcm1hdDoiSEg6bW0iLHRpbWVTdWZmaXg6IiIsdGltZU9ubHlUaXRsZToiQ2hvb3NlIFRpbWUiLHRpbWVUZXh0OiJUaW1lIixob3VyVGV4dDoiSG91ciIsbWludXRlVGV4dDoiTWludXRlIixzZWNvbmRUZXh0OiJTZWNvbmQiLG1pbGxpc2VjVGV4dDoiTWlsbGlzZWNvbmQiLHRpbWV6b25lVGV4dDoiVGltZSBab25lIixpc1JUTDohMX0sdGhpcy5fZGVmYXVsdHM9e3Nob3dCdXR0b25QYW5lbDohMCx0aW1lT25seTohMSxzaG93SG91cjohMCxzaG93TWludXRlOiEwLHNob3dTZWNvbmQ6ITEsc2hvd01pbGxpc2VjOiExLHNob3dUaW1lem9uZTohMSxzaG93VGltZTohMCxzdGVwSG91cjoxLHN0ZXBNaW51dGU6MSxzdGVwU2Vjb25kOjEsc3RlcE1pbGxpc2VjOjEsaG91cjowLG1pbnV0ZTowLHNlY29uZDowLG1pbGxpc2VjOjAsdGltZXpvbmU6bnVsbCx1c2VMb2NhbFRpbWV6b25lOiExLGRlZmF1bHRUaW1lem9uZToiKzAwMDAiLGhvdXJNaW46MCxtaW51dGVNaW46MCxzZWNvbmRNaW46MCxtaWxsaXNlY01pbjowLGhvdXJNYXg6MjMsbWludXRlTWF4OjU5LHNlY29uZE1heDo1OSxtaWxsaXNlY01heDo5OTksbWluRGF0ZVRpbWU6bnVsbCxtYXhEYXRlVGltZTpudWxsLG9uU2VsZWN0Om51bGwsaG91ckdyaWQ6MCxtaW51dGVHcmlkOjAsc2Vjb25kR3JpZDowLG1pbGxpc2VjR3JpZDowLGFsd2F5c1NldFRpbWU6ITAsc2VwYXJhdG9yOiIgIixhbHRGaWVsZFRpbWVPbmx5OiEwLGFsdFRpbWVGb3JtYXQ6bnVsbCxhbHRTZXBhcmF0b3I6bnVsbCxhbHRUaW1lU3VmZml4Om51bGwscGlja2VyVGltZUZvcm1hdDpudWxsLHBpY2tlclRpbWVTdWZmaXg6bnVsbCxzaG93VGltZXBpY2tlcjohMCx0aW1lem9uZUlzbzg2MDE6ITEsdGltZXpvbmVMaXN0Om51bGwsYWRkU2xpZGVyQWNjZXNzOiExLHNsaWRlckFjY2Vzc0FyZ3M6bnVsbCxjb250cm9sVHlwZToic2xpZGVyIixkZWZhdWx0VmFsdWU6bnVsbCxwYXJzZToic3RyaWN0In0sJC5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFsiIl0pfX0pKGpRdWVyeSk7DQoNCg0KDQokKGZ1bmN0aW9uKCkgew0KDQoNCiAgIC8vIGVjYl9maWxlX3NlbGVjdG9yDQogICAkKCcuZWNiX2ZpbGVfc2VsZWN0b3Jfc2VsZWN0IHNlbGVjdCcpLmNoYW5nZSggZnVuY3Rpb24oKSB7DQogICAgICB2YXIgaW1ndGFnID0gJCh0aGlzKS5wYXJlbnQoKS5uZXh0KCk7DQogICAgICBpbWd0YWcuYXR0cignc3JjJywgaW1ndGFnLmRhdGEoJ3VwbG9hZHN1cmwnKSsnLycrJCh0aGlzKS52YWwoKSk7DQogICB9KTsNCg0KDQoNCiAgIC8vIGVjYl9tdWx0aXBsZV9zZWxlY3QNCiAgICQoJy5lY2JfbXVsdGlwbGVfc2VsZWN0IHNlbGVjdCcpLmNoYW5nZShmdW5jdGlvbigpIHsNCiAgICAgIHZhciBzZWxlY3RlZFZhbHVlcyA9ICQodGhpcykudmFsKCkgPyAkKHRoaXMpLnZhbCgpLmpvaW4oJywnKSA6ICcnOw0KICAgICAgJCh0aGlzKS5zaWJsaW5ncygnLmVjYl9zZWxlY3RfaW5wdXQnKS52YWwoIHNlbGVjdGVkVmFsdWVzICk7DQogICAgICAvLyB0aGVuIHVwZGF0ZSBzdW1tYXJ5IHRleHQgLSBpZiBpdCBleGlzdHMNCiAgICAgIHZhciAkc2VsZWN0U3VtbWFyeSA9ICQodGhpcykuc2libGluZ3MoJy5lY2Jfc2VsZWN0X3N1bW1hcnknKTsNCiAgICAgIGlmICggJHNlbGVjdFN1bW1hcnkubGVuZ3RoPjAgKSB7DQogICAgICAgICB2YXIgc2VsZWN0ZWRUZXh0ID0gJCh0aGlzKS5jaGlsZHJlbignb3B0aW9uOnNlbGVjdGVkJykubWFwKGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgcmV0dXJuICQodGhpcykudGV4dCgpOw0KICAgICAgICAgICAgfSkuZ2V0KCkuam9pbignLCAnKTsNCiAgICAgICAgICQodGhpcykuc2libGluZ3MoJy5lY2Jfc2VsZWN0X3N1bW1hcnknKS52YWwoIHNlbGVjdGVkVGV4dCApOw0KICAgICAgICAgdmFyICRzdW1tYXJ5VGV4dCA9ICQodGhpcykuc2libGluZ3MoJy5lY2Jfc2VsZWN0X3N1bW1hcnknKS5jaGlsZHJlbignLmVjYl9zZWxlY3RfdGV4dCcpOw0KICAgICAgICAgaWYgKCBzZWxlY3RlZFRleHQ9PScnICkgew0KICAgICAgICAgICAgJHNlbGVjdFN1bW1hcnkuY2hpbGRyZW4oJy5lY2Jfc2VsZWN0X3RleHQnKS5odG1sKCAkc3VtbWFyeVRleHQuZGF0YSgnZW1wdHknKSApOw0KICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRzZWxlY3RTdW1tYXJ5LmNoaWxkcmVuKCcuZWNiX3NlbGVjdF90ZXh0JykuaHRtbCggc2VsZWN0ZWRUZXh0ICk7DQogICAgICAgICB9DQogICAgICB9DQogICB9KTsNCg0KICAgLy8gZWNiX2NvbXBhY3QgLSBzaG93ICYgaGlkZSB0aGUgZnVsbCBzZWxlY3QgJiB1cGRhdGUgc3VtbWFyeSB0ZXh0DQogICAkKCcuZWNiX2NvbXBhY3QgLmVjYl9zZWxlY3RfZWRpdCcpLmNsaWNrKCBmdW5jdGlvbihlKSB7DQogICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5lY2JfY29tcGFjdCcpLnRvZ2dsZUNsYXNzKCdzaG93Jyk7DQogICB9KTsNCg0KDQoNCiAgIC8vIGVjYl9yZXBlYXRlcg0KICAgJCgnLmVjYl9yZXBlYXRlcicpLm9uKCdjaGFuZ2UnLCAnLnJlcGVhdGVyLWZpZWxkJywgZnVuY3Rpb24oZSkgew0KICAgICAgdXBkYXRlX3JlcGVhdGVyKCAkKCQodGhpcykuZGF0YSgncmVwZWF0ZXInKSkgKTsNCiAgIH0pOw0KDQogICAkKCcuZWNiX3JlcGVhdGVyJykub24oJ2NsaWNrJywgJy5lY2IyLXJlcGVhdGVyLWFkZCcsIGZ1bmN0aW9uKGUpIHsNCiAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgIHZhciAkZmllbGRXcmFwcGVyID0gJCh0aGlzKS5jbG9zZXN0KCcucmVwZWF0ZXItd3JhcHBlcicpOw0KICAgICAgJGZpZWxkV3JhcHBlci5jbG9uZSgpLmluc2VydEFmdGVyKCAkZmllbGRXcmFwcGVyICkuZmluZCgnLnJlcGVhdGVyLWZpZWxkJykudmFsKCcnKTsNCiAgICAgIHVwZGF0ZV9yZXBlYXRlciggJCgkKHRoaXMpLmRhdGEoJ3JlcGVhdGVyJykpICk7DQogICB9KTsNCiAgICQoJy5lY2JfcmVwZWF0ZXInKS5vbignY2xpY2snLCAnLmVjYjItcmVwZWF0ZXItcmVtb3ZlJywgZnVuY3Rpb24oZSkgew0KICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgdmFyICRmaWVsZFdyYXBwZXIgPSAkKHRoaXMpLmNsb3Nlc3QoJy5yZXBlYXRlci13cmFwcGVyJyksDQogICAgICAgICAgJHJlcGVhdGVyID0gJCgkKHRoaXMpLmRhdGEoJ3JlcGVhdGVyJykpDQogICAgICAkZmllbGRXcmFwcGVyLnJlbW92ZSgpOw0KICAgICAgdXBkYXRlX3JlcGVhdGVyKCAkcmVwZWF0ZXIgKTsNCiAgIH0pOw0KDQoNCg0KICAgZnVuY3Rpb24gdXBkYXRlX3JlcGVhdGVyKCAkcmVwZWF0ZXIgKSB7DQogICAgICB2YXIgJHBhcmVudCA9ICQoICRyZXBlYXRlci5kYXRhKCdwYXJlbnQnKSApLA0KICAgICAgICAgICRmaWVsZHMgPSBbXTsNCiAgICAgICRyZXBlYXRlci5maW5kKCcucmVwZWF0ZXItZmllbGQnKS5lYWNoKGZ1bmN0aW9uKGkpew0KICAgICAgICAgJGZpZWxkcy5wdXNoKCAkKHRoaXMpLnZhbCgpICk7DQogICAgICB9KQ0KICAgICAgJHBhcmVudC52YWwoICRmaWVsZHMuam9pbignfHwnKSApOw0KICAgfQ0KDQoNCg0KICAgLy8gc29ydGFibGUgbGlzdHMNCiAgICQoJ3VsLnNvcnRhYmxlLWVjYjItbGlzdCcpLmVhY2goZnVuY3Rpb24oKSB7DQogICAgICAgIHZhciAkcGFyZW50ID0gJCh0aGlzKS5jbG9zZXN0KCcuZWNiMi1jYicpOw0KICAgICAgICB2YXIgJHNlbGVjdGVkID0gJHBhcmVudC5maW5kKCd1bC5zZWxlY3RlZC1pdGVtcycpOw0KICAgICAgICAkKHRoaXMpLnNvcnRhYmxlKHsNCiAgICAgICAgICAgIGNvbm5lY3RXaXRoOiAkc2VsZWN0ZWQsDQogICAgICAgICAgICBkZWxheTogMTUwLA0KICAgICAgICAgICAgcmV2ZXJ0OiAzMDAsDQogICAgICAgICAgICBwbGFjZWhvbGRlcjogJ3VpLXN0YXRlLWhpZ2hsaWdodCcsDQogICAgICAgICAgICBpdGVtczogJ2xpOm5vdCgubm8tc29ydCknLA0KICAgICAgICAgICAgaGVscGVyOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgICBpZiAoIXVpLmhhc0NsYXNzKCdzZWxlY3RlZCcpKSB7DQogICAgICAgICAgICAgICAgICAgIHVpLmFkZENsYXNzKCdzZWxlY3RlZCcpDQogICAgICAgICAgICAgICAgICAgICAgICAuc2libGluZ3MoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudHMgPSB1aS5wYXJlbnQoKQ0KICAgICAgICAgICAgICAgICAgICAuY2hpbGRyZW4oJy5zZWxlY3RlZCcpDQogICAgICAgICAgICAgICAgICAgIC5jbG9uZSgpLA0KICAgICAgICAgICAgICAgICAgICBoZWxwZXIgPSAkKCc8bGkvPicpOw0KICAgICAgICAgICAgICAgIHVpLmRhdGEoJ211bHRpZHJhZycsIGVsZW1lbnRzKS5zaWJsaW5ncygnLnNlbGVjdGVkJykucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5hcHBlbmQoZWxlbWVudHMpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgew0KICAgICAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IHVpLml0ZW0uZGF0YSgnbXVsdGlkcmFnJyk7DQogICAgICAgICAgICAgICAgdmFyICR1bFNlbGVjdGVkID0gJCh1aS5pdGVtKS5wYXJlbnQoKTsNCiAgICAgICAgICAgICAgICB1aS5pdGVtLmFmdGVyKGVsZW1lbnRzKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICB1cGRhdGVFQ0IyQ0JJbnB1dCgkdWxTZWxlY3RlZCk7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgcmVjZWl2ZTogZnVuY3Rpb24oZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gdWkuaXRlbS5kYXRhKCdtdWx0aWRyYWcnKTsNCiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5kYXRhKCdtYXgtbnVtYmVyJykgJiYgJCh0aGlzKS5jaGlsZHJlbigpLmxlbmd0aCAtIDEgPiAkKHRoaXMpLmRhdGEoJ21heC1udW1iZXInKSkgew0KICAgICAgICAgICAgICAgICAgICAkKHVpLnNlbmRlcikuc29ydGFibGUoJ2NhbmNlbCcpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHVwZGF0ZUVDQjJQbGFjZWhvbGRlcigkKHRoaXMpKTsNCiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50cykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkIHVpLXN0YXRlLWhvdmVyJykNCiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKCcuc29ydGFibGUtcmVtb3ZlJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfSk7DQoNCiAgICAvLyByZW1vdmUgZnJvbSBzZWxlY3RlZCBsaXN0IC0gYnkgZHJhZ2dpbmcgYmFjayB0byBhdmFpbGFibGUNCiAgICAkKCd1bC5zZWxlY3RlZC1pdGVtcycpLmVhY2goZnVuY3Rpb24oKSB7DQogICAgICAgIHZhciAkcGFyZW50ID0gJCh0aGlzKS5jbG9zZXN0KCcuZWNiMi1jYicpOw0KICAgICAgICB2YXIgJGF2YWlsYWJsZSA9ICRwYXJlbnQuZmluZCgndWwuYXZhaWxhYmxlLWl0ZW1zJyk7DQogICAgICAgICQodGhpcykuc29ydGFibGUoew0KICAgICAgICAgICAgY29ubmVjdFdpdGg6ICRhdmFpbGFibGUsDQogICAgICAgICAgICBkZWxheTogMTUwLA0KICAgICAgICAgICAgcmV2ZXJ0OiAzMDAsDQogICAgICAgICAgICBwbGFjZWhvbGRlcjogJ3VpLXN0YXRlLWhpZ2hsaWdodCcsDQogICAgICAgICAgICBzdG9wOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgICB2YXIgJHVsU2VsZWN0ZWQgPSAkKHVpLml0ZW0pLmNsb3Nlc3QoJy5lY2IyLWNiJykuZmluZCgnLnNlbGVjdGVkLWl0ZW1zJyk7DQogICAgICAgICAgICAgICAgJCh1aS5pdGVtKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKQ0KICAgICAgICAgICAgICAgICQodWkuaXRlbSkuY2hpbGRyZW4oJy5zb3J0YWJsZS1yZW1vdmUnKS5hZGRDbGFzcygnaGlkZGVuJyk7DQogICAgICAgICAgICAgICAgdXBkYXRlRUNCMkNCSW5wdXQoJHVsU2VsZWN0ZWQpOw0KICAgICAgICAgICAgICAgIHVwZGF0ZUVDQjJQbGFjZWhvbGRlcigkdWxTZWxlY3RlZCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0pOw0KDQogICAgLy8gcmVtb3ZlIGZyb20gc2VsZWN0ZWQgbGlzdCAtIGJ5IGNsaWNraW5nIHJlbW92ZSBpY29uDQogICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJyNzZWxlY3RlZC1pdGVtcyAuc29ydGFibGUtcmVtb3ZlJywgZnVuY3Rpb24oZSkgew0KICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgIHZhciAkdWxTZWxlY3RlZCA9ICQodGhpcykuY2xvc2VzdCgndWwuc2VsZWN0ZWQtaXRlbXMnKTsNCiAgICAgICAgdmFyICR1bEF2YWlsYWJsZSA9ICQodGhpcykuY2xvc2VzdCgnLmVjYjItY2InKS5maW5kKCcuYXZhaWxhYmxlLWl0ZW1zJyk7DQogICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2hpZGRlbicpDQogICAgICAgICAgICAucGFyZW50KCdsaScpLnJlbW92ZUNsYXNzKCduby1zb3J0JykNCiAgICAgICAgICAgIC5hcHBlbmRUbygkdWxBdmFpbGFibGUpOw0KICAgICAgICB1cGRhdGVFQ0IyQ0JJbnB1dCgkdWxTZWxlY3RlZCk7DQogICAgICAgIHVwZGF0ZUVDQjJQbGFjZWhvbGRlcigkdWxTZWxlY3RlZCk7DQogICAgfSk7DQoNCiAgICBmdW5jdGlvbiB1cGRhdGVFQ0IyQ0JJbnB1dCgkdWxTZWxlY3RlZCkgew0KICAgICAgICB2YXIgJGFsbFNlbGVjdGVkID0gJHVsU2VsZWN0ZWQuY2hpbGRyZW4oJ2xpOm5vdCgucGxhY2Vob2xkZXIpJyk7DQogICAgICAgIHZhciAkdGFyZ2V0SW5wdXQgPSAkKCcjJyArICR1bFNlbGVjdGVkLmRhdGEoJ2Ntc21zLWNiLWlucHV0JykpOw0KICAgICAgICB2YXIgc2VsZWN0ZWRTdHIgPSAnJzsNCiAgICAgICAgdmFyIHJlcXVpcmVkTnVtYmVyID0gJHVsU2VsZWN0ZWQuZGF0YSgncmVxdWlyZWQtbnVtYmVyJyk7DQogICAgICAgIGlmIChyZXF1aXJlZE51bWJlciAmJiAkYWxsU2VsZWN0ZWQubGVuZ3RoICE9IHJlcXVpcmVkTnVtYmVyKSB7DQogICAgICAgICAgICAkdGFyZ2V0SW5wdXQudmFsKCcnKTsgLy8gc2V0IHRvIGVtcHR5DQoNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRhbGxTZWxlY3RlZC5lYWNoKGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFN0ciA9PSAnJykgew0KICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFN0ciA9ICQodGhpcykuZGF0YSgnY21zbXMtaXRlbS1pZCcpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkU3RyID0gc2VsZWN0ZWRTdHIgKyAnLCcgKyAkKHRoaXMpLmRhdGEoJ2Ntc21zLWl0ZW0taWQnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICR0YXJnZXRJbnB1dC52YWwoc2VsZWN0ZWRTdHIpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdXBkYXRlRUNCMlBsYWNlaG9sZGVyKCR1bFNlbGVjdGVkKSB7DQogICAgICAgIHZhciByZXF1aXJlZE51bWJlciA9ICR1bFNlbGVjdGVkLmRhdGEoJ3JlcXVpcmVkLW51bWJlcicpOw0KICAgICAgICB2YXIgbnVtYmVyU2VsZWN0ZWQgPSAkdWxTZWxlY3RlZC5jaGlsZHJlbigpLmxlbmd0aCAtIDE7IC8vIGV4Y2x1ZGUgcGxhY2Vob2xkZXINCiAgICAgICAgaWYgKCghcmVxdWlyZWROdW1iZXIgJiYgbnVtYmVyU2VsZWN0ZWQgPiAwKSB8fCAocmVxdWlyZWROdW1iZXIgPiAwICYmIG51bWJlclNlbGVjdGVkID09IHJlcXVpcmVkTnVtYmVyKSkgew0KICAgICAgICAgICAgJHVsU2VsZWN0ZWQuY2hpbGRyZW4oJy5wbGFjZWhvbGRlcicpLmFkZENsYXNzKCdoaWRkZW4nKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR1bFNlbGVjdGVkLmNoaWxkcmVuKCcucGxhY2Vob2xkZXInKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7DQogICAgICAgIH0NCg0KDQogICAgfQ0KDQoNCg0KICAgIC8vIGRhdGVwaWNrZXIgJiB0aW1lcGlja2VyIGZ1bmN0aW9ucyAgICANCiAgICAkKCcudGltZXBpY2tlcicpLmVhY2goZnVuY3Rpb24oKSB7DQogICAgICAgICQodGhpcykudGltZXBpY2tlciggew0KICAgICAgICAgICAgdGltZUZvcm1hdDogJCh0aGlzKS5kYXRhKCd0aW1lLWZvcm1hdCcpDQogICAgICAgIH0pOw0KICAgIH0pOw0KDQogICAgJCgnLmRhdGVwaWNrZXInKS5lYWNoKGZ1bmN0aW9uKCkgew0KICAgICAgICAkKHRoaXMpLmRhdGVwaWNrZXIoIHsNCiAgICAgICAgICAgIHNob3dPdGhlck1vbnRoczogdHJ1ZSwNCiAgICAgICAgICAgIHNlbGVjdE90aGVyTW9udGhzOiB0cnVlLA0KICAgICAgICAgICAgZGF0ZUZvcm1hdDogJCh0aGlzKS5kYXRhKCdkYXRlLWZvcm1hdCcpLA0KICAgICAgICAgICAgY2hhbmdlTW9udGg6ICQodGhpcykuZGF0YSgnY2hhbmdlLW1vbnRoJyksDQogICAgICAgICAgICBjaGFuZ2VZZWFyOiAkKHRoaXMpLmRhdGEoJ2NoYW5nZS15ZWFyJyksDQogICAgICAgICAgICB5ZWFyUmFuZ2U6ICQodGhpcykuZGF0YSgneWVhci1yYW5nZScpDQogICAgICAgIH0pOw0KICAgIH0pOw0KDQogICAgJCgnLmRhdGV0aW1lcGlja2VyJykuZWFjaChmdW5jdGlvbigpIHsNCiAgICAgICAgJCh0aGlzKS5kYXRldGltZXBpY2tlciggew0KICAgICAgICAgICAgc2hvd090aGVyTW9udGhzOiB0cnVlLA0KICAgICAgICAgICAgc2VsZWN0T3RoZXJNb250aHM6IHRydWUsDQogICAgICAgICAgICBkYXRlRm9ybWF0OiAkKHRoaXMpLmRhdGEoJ2RhdGUtZm9ybWF0JyksDQogICAgICAgICAgICB0aW1lRm9ybWF0OiAkKHRoaXMpLmRhdGEoJ3RpbWUtZm9ybWF0JyksDQogICAgICAgICAgICBjaGFuZ2VNb250aDogJCh0aGlzKS5kYXRhKCdjaGFuZ2UtbW9udGgnKSwNCiAgICAgICAgICAgIGNoYW5nZVllYXI6ICQodGhpcykuZGF0YSgnY2hhbmdlLXllYXInKSwNCiAgICAgICAgICAgIHllYXJSYW5nZTogJCh0aGlzKS5kYXRhKCd5ZWFyLXJhbmdlJykNCiAgICAgICAgfSk7DQogICAgfSk7DQoNCg0KICAgIC8qIGNvbG9yIHBpY2tlciAtIGNvbHBpY2sgKi8NCiAgICAkKCcuY29sb3JwaWNrZXInKS5jb2xwaWNrKHsNCiAgICAgICAgY29sb3JTY2hlbWU6ICdkYXJrJywNCiAgICAgICAgc3VibWl0IDogZmFsc2UsDQogICAgICAgIG9uQ2hhbmdlOmZ1bmN0aW9uKGhzYixoZXgscmdiLGVsKSB7DQogICAgICAgICAgICB2YXIgaGFzaCA9ICQoZWwpLmRhdGEoJ25vLWhhc2gnKSA/ICcnIDogJyMnOyANCiAgICAgICAgICAgICQoZWwpLnZhbChoYXNoK2hleCkuY3NzKCdib3JkZXItcmlnaHQnLCAnMzBweCBzb2xpZCAjJytoZXgpOw0KICAgICAgICB9LA0KICAgICAgICBvbkJlZm9yZVNob3c6IGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgJCh0aGlzKS5jb2xwaWNrU2V0Q29sb3IodGhpcy52YWx1ZSk7DQogICAgICAgIH0NCiAgICB9KQ0KICAgIC5vbigna2V5dXAnLCBmdW5jdGlvbigpIHsNCiAgICAgICAgaWYgKHRoaXMudmFsdWU9PScnKSB7DQogICAgICAgICAgICAkKHRoaXMpLmNzcygnYm9yZGVyLXJpZ2h0JywgJzFweCBzb2xpZCAjYWFhJyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkKHRoaXMpLmNvbHBpY2tTZXRDb2xvcih0aGlzLnZhbHVlKTsNCiAgICAgICAgfQ0KICAgIH0pDQogICAgLmVhY2goZnVuY3Rpb24oKXsNCiAgICAgICAgaWYgKHRoaXMudmFsdWUhPScnKSB7DQogICAgICAgICAgICAkKHRoaXMpLmNzcygnYm9yZGVyLXJpZ2h0JywgJzMwcHggc29saWQgIycrdGhpcy52YWx1ZS5yZXBsYWNlQWxsKCcjJywgJycpKTsNCiAgICAgICAgfSANCiAgICB9KTsNCg0KDQoNCn0pOw==]]></data>
	</file>
	<file>
	  <filename>/lib/js/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgojIyBub3RoaW5nIHRvIGRvCgoK]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKLy8gcmVtb3ZlIHRoZSBwZXJtaXNzaW9ucwokdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwokdGhpcy0+RGVsZXRlVGVtcGxhdGUoKTsKCgo=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovLyByZW1vdmUgcGVybWlzc2lvbiBVU0VfRUNCMgpkZWZpbmUoJ1VTRV9FQ0IyJywgJ1VzZSBFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAyJyk7CiRkYiA9ICR0aGlzLT5HZXREYigpOwppZiAoIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwgJzEuNCcpIDwgMCApIHsKICAgICR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKFVTRV9FQ0IyKTsKfQokbW9kdWxlX3BhdGggPSAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpOwppZiAoIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwgJzEuOCcpIDwgMCApIHsKICAgIC8vIHJlbW92ZSBzdWIgZGlycwogICAgJGRpcnNUb1JlbW92ZSA9IFsnL2xpYi9qcy9pbWFnZXMnLCAnL2ljb25zJ107CiAgICBmb3JlYWNoICgkZGlyc1RvUmVtb3ZlIGFzICRkZWxEaXIpIHsKICAgICAgICBmb3JlYWNoIChnbG9iKCRtb2R1bGVfcGF0aC4kZGVsRGlyLicvKi4qJykgYXMgJGZpbGVuYW1lKSB1bmxpbmsoJGZpbGVuYW1lKTsKICAgICAgICBybWRpcigkbW9kdWxlX3BhdGguJGRlbERpcik7CiAgICB9CiAgICAvLyBpbmRpdmlkdWFsIGZpbGVzIHRvIHJlbW92ZQogICAgJGZpbGVzVG9SZW1vdmUgPSBbJy9saWIvanMvbUNvbG9yUGlja2VyLm1pbi5qcycsICcvY2hhbmdlbG9nLmluYycsICcvbGliL2pzL2pxdWVyeS11aS10aW1lcGlja2VyLWFkZG9uLmpzJywgCiAgICAgICAgJy9saWIvanMvY29scGljay5qcyddOwogICAgZm9yZWFjaCAoJGZpbGVzVG9SZW1vdmUgYXMgJGRlbEZpbGUpIEB1bmxpbmsoJG1vZHVsZV9wYXRoLiRkZWxGaWxlKTsKfQoKCj8+]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJFQ0IyIgp2ZXJzaW9uID0gMS44CmF1dGhvciA9ICJDaHJpcyBUYXlsb3IgKHR3aXR0ZXIuY29tL0tpd2lDaHJpc0JUKSIKYXV0aG9yZW1haWwgPSAiY2hyaXNAYmlubm92YXRpdmUuY28udWsiCm1pbmNtc3ZlcnNpb24gPSAyLjAKbGF6eWxvYWRhZG1pbiA9IDAKbGF6eWxvYWRmcm9udGVuZCA9IDEK]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/colorpicker_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogY29sb3JwaWNrZXJfdGVtcGxhdGUudHBsIC0gdjEuMCAtIDI0TWFyMjIgCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9CnsqaWYgISRpc19jb2xvcnBpY2tlcl9saWJfbG9hZH0KICAgICAgICA8c2NyaXB0IHNyYz0ieyRjb2xvcnBpY2tlcl9hZGRvbl9qc191cmx9Ij48L3NjcmlwdD4Key9pZip9CntpZiAhZW1wdHkoJGRlc2NyaXB0aW9uKX0KICAgICAgICB7JGRlc2NyaXB0aW9ufQp7L2lmfQogICAgICAgIHtzdHJpcH0KICAgICAgICA8aW5wdXQgY2xhc3M9InskY2xhc3N9IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGJsb2NrX25hbWV9IiBpZD0ieyRhbGlhc30iIHNpemU9Inskc2l6ZX0iIHZhbHVlPSJ7JHZhbHVlfSIKICAgICAgICAgICAge2lmICFlbXB0eSgkbm9faGFzaCl9IGRhdGEtbm8taGFzaD0ieyRub19oYXNofSJ7L2lmfQogICAgICAgIC8+CiAgICAgICAgey9zdHJpcH0K]]></data>
	</file>
	<file>
	  <filename>/templates/datepicker_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogZGF0ZXBpY2tlcl90ZW1wbGF0ZS50cGwgLSB2MS4wIC0gMThKYW4yMiANCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KeyppZiAhJGlzX2RhdGVwaWNrZXJfbGliX2xvYWR9DQogICAgICAgIDxzY3JpcHQgc3JjPSJ7JHRpbWVwaWNrZXJfYWRkb25fanNfdXJsfSI+PC9zY3JpcHQ+DQp7L2lmKn0NCntpZiAhZW1wdHkoJGRlc2NyaXB0aW9uKX0NCiAgICAgICAgeyRkZXNjcmlwdGlvbn0NCnsvaWZ9DQogICAgICAgIHtzdHJpcH0NCiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJ7JGNsYXNzfSIgIG5hbWU9InskYmxvY2tfbmFtZX0iIHNpemU9Inskc2l6ZX0iIG1heGxlbmd0aD0ieyRtYXhfbGVuZ3RofSIgDQogICAgICAgICAgICB2YWx1ZT0ieyR2YWx1ZX0iDQogICAgICAgICAgICB7aWYgIWVtcHR5KCR0aW1lX2Zvcm1hdCl9IGRhdGEtdGltZS1mb3JtYXQ9InskdGltZV9mb3JtYXR9InsvaWZ9DQogICAgICAgICAgICB7aWYgIWVtcHR5KCRkYXRlX2Zvcm1hdCl9IGRhdGEtZGF0ZS1mb3JtYXQ9InskZGF0ZV9mb3JtYXR9InsvaWZ9DQogICAgICAgICAgICB7aWYgIWVtcHR5KCR0aW1lX2Zvcm1hdCl9IGRhdGEtdGltZS1mb3JtYXQ9InskdGltZV9mb3JtYXR9InsvaWZ9DQogICAgICAgICAgICB7aWYgIWVtcHR5KCRjaGFuZ2VfbW9udGgpfSBkYXRhLWNoYW5nZS1tb250aD0ieyRjaGFuZ2VfbW9udGh9InsvaWZ9DQogICAgICAgICAgICB7aWYgIWVtcHR5KCRjaGFuZ2VfeWVhcil9IGRhdGEtY2hhbmdlLXllYXI9InskY2hhbmdlX3llYXJ9InsvaWZ9DQogICAgICAgICAgICB7aWYgIWVtcHR5KCR5ZWFyX3JhbmdlKX0gZGF0YS15ZWFyLXJhbmdlPSJ7JHllYXJfcmFuZ2V9InsvaWZ9DQogICAgICAgIC8+DQogICAgICAgIHsvc3RyaXB9DQo=]]></data>
	</file>
	<file>
	  <filename>/templates/ECB2_Test_Template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogRUNCMl9UZXN0X1RlbXBsYXRlIC0gdjEuNisgLSAyMERlYzE5DQoNCiAgIC0gdjEuNyAtIDMwTWF5MjAgLSBleHRyYSB0ZXN0cyBmb3IgZHJvcGRvd24gJiBkcm9wZG93bl9mcm9tX3VkdA0KICAgLSB2MS42IC0gMjBEZWMxOSAtIGV4dHJhIGZpbGVfc2VsZWN0b3IgdGVzdHMNCiAgIC0gdjEuNSAtIDE2RmViMTkgLSBhZGRlZCBpbnB1dGVyX3JlcGVhdGVyDQogICAtIHYxLjQgLSAwNEZlYjE5IC0gdXBkYXRlZCBmb3IgQlM0IGFuZCBsYXRlc3QgdGVtcGxhdGVzDQogICAtIHYxLjMgLSAxOEFwcjE3DQoNCiAgIFRlbXBsYXRlIHN0b3JlZCBpbiBFQ0IyL3RlbXBsYXRlcy9FQ0IyX1Rlc3RfVGVtcGxhdGUudHBsDQogICAgICAtIGNyZWF0ZSBhIHZlcnkgc2ltcGxlIGNvcmU6cGFnZSB0ZW1wbGF0ZSAnRUNCMl9UZXN0JyB3aXRoIGp1c3QgdGhlIDEgbGluZToNCiAgICAgICAgICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpFQ0IyO0VDQjJfVGVzdF9UZW1wbGF0ZS50cGwnfQ0KICAgICAgLSBjcmVhdGUgJ0VDQjIgVGVzdCcgcGFnZSwgdXNpbmcgdGhlIGFib3ZlIHRlbXBsYXRlLg0KDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn17c3RyaXB9DQp7cHJvY2Vzc19wYWdlZGF0YX0NCg0Ke2NnanNfcmVxdWlyZSBsaWI9J2pxdWVyeSd9DQp7Y2dqc19yZXF1aXJlIGpzZmlsZT0nYXNzZXRzL2pzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzJ30NCntjZ2pzX3JlcXVpcmUganNmaWxlPSdhc3NldHMvanMvc2xpY2subWluLmpzJ30NCntjZ2pzX3JlcXVpcmUganNmaWxlPSdhc3NldHMvanMvbWFpbi5qcyd9DQoNCg0Key9zdHJpcH08IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImVuIj4NCjxoZWFkPg0KICAge2Ntc19zdHlsZXNoZWV0fQ0KICAgPHN0eWxlPntsaXRlcmFsfS5wcmUge2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTsgd2hpdGUtc3BhY2U6cHJlLXdyYXA7IHdvcmQtd3JhcDpicmVhay13b3JkOw0KICAgICAgYmFja2dyb3VuZC1jb2xvcjojREREOyBwYWRkaW5nOjFlbTt9ey9saXRlcmFsfTwvc3R5bGU+DQo8L2hlYWQ+DQoNCjxib2R5IGNsYXNzPSJwYWdlLXskcGFnZV9hbGlhc30iPg0KDQp7Z2xvYmFsX2NvbnRlbnQgbmFtZT0naGVhZGVyJ30NCg0KPGRpdiBjbGFzcz0ibWFpbiI+DQogICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KICAgICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC0xMiI+DQoNCjxoMT5FQ0IyIFRlc3QgUGFnZSAxPC9oMT4NCntjb250ZW50IG9uZWxpbmU9MX0NCg0KDQo8aDI+ZmlsZV9zZWxlY3RvciAxPC9oMj4NCjxwPnNlbGVjdGVkIGZpbGU6J3tjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJmaWxlX3NlbGVjdG9yIiBibG9jaz0idGVzdDEiIGxhYmVsPSJUZXN0IDE6IGZpbGVfc2VsZWN0b3IiIGRpcj0iaW1hZ2VzIiBmaWxldHlwZXM9ImdpZixwbmcsanBnIiBleGNsdWRlcHJlZml4PSJ0aHVtYl8iIGRlc2NyaXB0aW9uPSJmaWxlX3NlbGVjdG9yOiBUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifSc8cD4NCg0KPGgyPmZpbGVfc2VsZWN0b3IgMUEgLSByZWN1cnNlPC9oMj4NCjxwPnNlbGVjdGVkIGZpbGU6J3tjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJmaWxlX3NlbGVjdG9yIiBibG9jaz0idGVzdDFhIiBsYWJlbD0iVGVzdCAxQTogZmlsZV9zZWxlY3RvciAtIHJlY3Vyc2l2ZSIgZGlyPSJpbWFnZXMiIGZpbGV0eXBlcz0iZ2lmLHBuZyxqcGciIGV4Y2x1ZGVwcmVmaXg9InRodW1iXyIgcmVjdXJzZT0xIGRlc2NyaXB0aW9uPSJmaWxlX3NlbGVjdG9yOiBUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifSc8cD4NCg0KPGgyPmZpbGVfc2VsZWN0b3IgMUIgLSBpbWFnZSBwcmV2aWV3PC9oMj4NCjxwPnNlbGVjdGVkIGZpbGU6J3tjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJmaWxlX3NlbGVjdG9yIiBibG9jaz0idGVzdDFiIiBsYWJlbD0iVGVzdCAxQjogZmlsZV9zZWxlY3RvciAtIGltYWdlIHByZXZpZXcgKG5vIGRlc2NyaXB0aW9uKSIgZGlyPSJpbWFnZXMiIGZpbGV0eXBlcz0iZ2lmLHBuZyxqcGciIGV4Y2x1ZGVwcmVmaXg9InRodW1iXyIgcHJldmlldz0xfSc8cD4NCg0KDQoNCjxoMj5jb2xvcl9waWNrZXI8L2gyPg0Ke2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImNvbG9yX3BpY2tlciIgYmxvY2s9InRlc3QyIiBsYWJlbD0iVGVzdCAyOiBjb2xvcl9waWNrZXIiIGRlZmF1bHRfdmFsdWU9IiNDQ0NDQ0MiIGFzc2lnbj10ZXN0MiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAtIHNob3J0In0NCjxwIHN0eWxlPSJjb2xvcjojRkZGOyBiYWNrZ3JvdW5kLWNvbG9yOnskdGVzdDJ9OyI+Y29sb3VyOid7JHRlc3QyfSc8L3A+DQoNCjxoMj5jb2xvcl9waWNrZXIgIzJBPC9oMj4NCntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJjb2xvcl9waWNrZXIiIGJsb2NrPSJ0ZXN0Ml8yQSIgbGFiZWw9IlRlc3QgMi0yQTogY29sb3JfcGlja2VyIiBkZWZhdWx0X3ZhbHVlPSIjNWM1MWE1IiBhc3NpZ249dGVzdDJfMkEgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gLSBzaG9ydCAtIDVjNTFhNSJ9DQo8cCBzdHlsZT0iY29sb3I6I0ZGRjsgYmFja2dyb3VuZC1jb2xvcjp7JHRlc3QyXzJBfTsiPmNvbG91cjoneyR0ZXN0Ml8yQX0nPC9wPg0KDQo8aDI+Y29sb3JfcGlja2VyICMyYzwvaDI+DQp7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY29sb3JfcGlja2VyIiBibG9jaz0idGVzdDJfMmMiIGxhYmVsPSJUZXN0IDItMmM6IGNvbG9yX3BpY2tlciBkZWZhdWx0IFJFRCIgZGVmYXVsdF92YWx1ZT0iI0ZGMDAwMCIgYXNzaWduPXRlc3QyXzJjfQ0KPHAgc3R5bGU9ImNvbG9yOiNGRkY7IGJhY2tncm91bmQtY29sb3I6eyR0ZXN0Ml8yY307Ij5jb2xvdXI6J3skdGVzdDJfMmN9JzwvcD4NCg0KPGgyPmNvbG9yX3BpY2tlciAjMmQ8L2gyPg0Ke2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImNvbG9yX3BpY2tlciIgYmxvY2s9InRlc3QyXzJkIiBsYWJlbD0iVGVzdCAyLTJkOiBjb2xvcl9waWNrZXIgbm8taGFzaCIgbm9faGFzaD0xIGFzc2lnbj10ZXN0Ml8yZH0NCjxwIHN0eWxlPSJjb2xvcjojRkZGOyBiYWNrZ3JvdW5kLWNvbG9yOnskdGVzdDJfMmR9OyI+Y29sb3VyOid7JHRlc3QyXzJkfSc8L3A+DQoNCjxoMj5jb2xvcl9waWNrZXIgIzJlPC9oMj4NCntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJjb2xvcl9waWNrZXIiIGJsb2NrPSJ0ZXN0Ml8yZSIgbGFiZWw9IlRlc3QgMi0yZTogY29sb3JfcGlja2VyIGNsZWFyX2Nzc19jYWNoZSIgY2xlYXJfY3NzX2NhY2hlPTEgYXNzaWduPXRlc3QyXzJlfQ0KPHAgc3R5bGU9ImNvbG9yOiNGRkY7IGJhY2tncm91bmQtY29sb3I6eyR0ZXN0Ml8yZX07Ij5jb2xvdXI6J3skdGVzdDJfMmV9JzwvcD4NCg0KPGgyPmNvbG9yX3BpY2tlciAtIHByb21vX2JnY29sb3IgY2xlYXJfY3NzX2NhY2hlPC9oMj4NCnskcHJvbW9fYmdjb2xvcj0ie2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2NvbG9yX3BpY2tlcicgYmxvY2s9J3Byb21vX2JnY29sb3InIGxhYmVsPSdCYWNrZ3JvdW5kIENvbG9yICYgY2xlYXJfY3NzX2NhY2hlJyBjbGVhcl9jc3NfY2FjaGU9MX0iIHNjb3BlPWdsb2JhbH0NCjxwIHN0eWxlPSJjb2xvcjojRkZGOyBiYWNrZ3JvdW5kLWNvbG9yOnskcHJvbW9fYmdjb2xvcn07Ij5jb2xvdXI6J3skcHJvbW9fYmdjb2xvcn0nPC9wPg0KDQoNCg0KPGgyPlRlc3QgMzogZHJvcGRvd248L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRyb3Bkb3duIiBibG9jaz0idGVzdDMiIGxhYmVsPSJUZXN0IDM6IGRyb3Bkb3duIiB2YWx1ZXM9IkFwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UiIGZpcnN0X3ZhbHVlPSJzZWxlY3QgZnJ1aXQiIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KPGgyPlRlc3QgM0E6IGRyb3Bkb3duIC0gbXVsdGlwbGU8L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRyb3Bkb3duIiBibG9jaz0idGVzdDNBIiBsYWJlbD0iVGVzdCAzQTogZHJvcGRvd24gLSBtdWx0aXBsZSIgdmFsdWVzPSJBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEJhbmFuYSxQaW5lYXBwbGUsVGVzdCBudW1iZXIgNSxUZXN0IDYsVGVzdDcsVGVzdDgsdGVzdDksdGVzdDEwLHRlc3QxMSIgbXVsdGlwbGU9MSBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCjxoMj5UZXN0IDNCOiBkcm9wZG93biAtIG11bHRpcGxlICYgY29tcGFjdDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZHJvcGRvd24iIGJsb2NrPSJ0ZXN0M0IiIGxhYmVsPSJUZXN0IDNCOiBjb21wYWN0IGRyb3Bkb3duIC0gbXVsdGlwbGUiIHZhbHVlcz0iQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxCYW5hbmEsUGluZWFwcGxlLFRlc3QgbnVtYmVyIDUsVGVzdCA2LFRlc3Q3LFRlc3Q4LHRlc3Q5LHRlc3QxMCx0ZXN0MTEiIG11bHRpcGxlPTEgY29tcGFjdD0xIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KPGgyPlRlc3QgM0M6IGRyb3Bkb3duIC0gdXNpbmcgZHJvcGRvd24gZnJvbSBtb2R1bGU8L2gyPg0KPHA+eyR0ZW1wVmFscz0iQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxCYW5hbmEsUGluZWFwcGxlLFRlc3QgbnVtYmVyIDUsVGVzdCA2LFRlc3Q3LFRlc3Q4LHRlc3Q5LHRlc3QxMCx0ZXN0MTEifXtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJkcm9wZG93biIgYmxvY2s9InRlc3QzQyIgbGFiZWw9IlRlc3QgM0M6IGRyb3Bkb3duIC0gZnJvbSBtb2R1bGUiIG1vZD0iTElTRVByb2plY3RzIiB0ZW1wbGF0ZV9zdW1tYXJ5PSJpdGVtX2Ryb3Bkb3duIiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIiBwYWdlbGltaXQ9MjB9PC9wPg0KDQo8aDI+VGVzdCAzRDogZHJvcGRvd24gLSB1c2luZyBkcm9wZG93biBmcm9tIG1vZHVsZSAtIHdpdGggZmxpcF92YWx1ZXM8L2gyPg0KPHA+eyR0ZW1wVmFscz0iQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxCYW5hbmEsUGluZWFwcGxlLFRlc3QgbnVtYmVyIDUsVGVzdCA2LFRlc3Q3LFRlc3Q4LHRlc3Q5LHRlc3QxMCx0ZXN0MTEifXtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJkcm9wZG93biIgYmxvY2s9InRlc3QzRCIgbGFiZWw9IlRlc3QgM0Q6IGRyb3Bkb3duIC0gZnJvbSBtb2R1bGUgLSB3aXRoIGZsaXBfdmFsdWVzIiBtb2Q9IkxJU0VQcm9qZWN0cyIgdGVtcGxhdGVfc3VtbWFyeT0iaXRlbV9kcm9wZG93biIgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSIgcGFnZWxpbWl0PTIwIGZsaXBfdmFsdWVzPTF9PC9wPg0KDQoNCg0KDQo8aDI+VGVzdCAzRDogQ0dDb250ZW50VXRpbHMgZHJvcGRvd24gLSB1c2luZyBzbWFydHkgdmFsdWVzPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9Q0dDb250ZW50VXRpbHMgYmxvY2s9IkNHVVRJTFNfZHJvcGRvd24ifTwvcD4NCg0KDQo8aDI+VGVzdDQ6IGRyb3Bkb3duX2Zyb21fdWR0PC9oMj4NCjxwPlNlY3Rpb24gMSBMYXlvdXQgU3R5bGU6J3tjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdkcm9wZG93bl9mcm9tX3VkdCcgYmxvY2s9J3Rlc3Q0JyBsYWJlbD0nVGVzdCA0OiBkcm9wZG93bl9mcm9tX3VkdCcgdWR0PSdlY2IyX3NvcnRhYmxlX3VkdF90ZXN0JyBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn0nPC9wPg0KDQo8cD40QTogU2VjdGlvbiAxIExheW91dCBTdHlsZSAod2l0aCBmaXJzdF92YWx1ZSk6J3tjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdkcm9wZG93bl9mcm9tX3VkdCcgYmxvY2s9J3Rlc3Q0YScgbGFiZWw9J1Rlc3QgNGE6IGRyb3Bkb3duX2Zyb21fdWR0ICh3aXRoIGZpcnN0X3ZhbHVlKScgdWR0PSdlY2IyX3NvcnRhYmxlX3VkdF90ZXN0JyBmaXJzdF92YWx1ZT0iPXNlbGVjdD0iIG11bHRpcGxlPTEgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9JzwvcD4NCg0KPHA+NEI6IFNlY3Rpb24gMSBMYXlvdXQgU3R5bGUgLSBjb21wYWN0Oid7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZHJvcGRvd25fZnJvbV91ZHQnIGJsb2NrPSd0ZXN0NGInIGxhYmVsPSdUZXN0IDRiOiBkcm9wZG93bl9mcm9tX3VkdCAtIGNvbXBhY3QnIHVkdD0nZWNiMl9zb3J0YWJsZV91ZHRfdGVzdCcgbXVsdGlwbGU9MSBjb21wYWN0PTEgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9JzwvcD4NCg0KDQoNCjxoMj5jaGVja2JveDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY2hlY2tib3giIGJsb2NrPSJ0ZXN0NWEiIGxhYmVsPSJUZXN0IDU6IENoZWNrYm94IC0gbm8gZGVmYXVsdCIgZGVmYXVsdF92YWx1ZT0iMCIgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9PC9wPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImNoZWNrYm94IiBibG9jaz0idGVzdDViIiBsYWJlbD0iVGVzdCA1YjogQ2hlY2tib3ggLSBkZWZhdWx0IE5PVCBDaGVja2VkIiBkZWZhdWx0X3ZhbHVlPSIwIn08L3A+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY2hlY2tib3giIGJsb2NrPSJ0ZXN0NWMiIGxhYmVsPSJUZXN0IDVjOiBDaGVja2JveCAtIGRlZmF1bHQgQ2hlY2tlZCIgZGVmYXVsdF92YWx1ZT0iMSJ9PC9wPg0KDQoNCg0KPGgyPm1vZHVsZV9saW5rPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJtb2R1bGVfbGluayIgbGFiZWw9IlRlc3QgNjogbW9kdWxlX2xpbms6R2FsbGVyeSIgYmxvY2s9InRlc3Q2IiBtb2Q9IkdhbGxlcnkiIHRleHQ9IkVkaXQgR2FsbGVyaWVzIiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPlRlc3QgNzogbGluazwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0ibGluayIgbGFiZWw9IlRlc3QgNzogbGluayIgYmxvY2s9InRlc3Q3IiB0YXJnZXQ9Il9ibGFuayIgbGluaz0iaHR0cDovL3d3dy5iaW5nLmNvbSIgdGV4dD0iYmluZyBzZWFyY2giIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KDQo8aDI+VGVzdCA4OiB0aW1lcGlja2VyPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJ0aW1lcGlja2VyIiBsYWJlbD0iVGVzdCA4OiB0aW1lcGlja2VyIiBibG9jaz0idGVzdDgiIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KDQo8aDI+VGVzdCA5OiBkYXRlcGlja2VyPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJkYXRlcGlja2VyIiBsYWJlbD0iVGVzdCA5OiBkYXRlcGlja2VyIiBibG9jaz0idGVzdDkiIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KPGgyPlRlc3QgOUE6IGRhdGVwaWNrZXI8L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRhdGVwaWNrZXIiIGxhYmVsPSJUZXN0IDlBOiBkYXRlcGlja2VyIiBibG9jaz0idGVzdDlBIiBkZXNjcmlwdGlvbj0iVGVzdCB3aXRoIG9wdGlvbnM6IGNoYW5nZV9tb250aCwgY2hhbmdlX3llYXIsIHllYXJfcmFuZ2U9JzE5OTA6MjA1MCwgYW5kIHRpbWUiIGNoYW5nZV9tb250aD10cnVlIGNoYW5nZV95ZWFyPTEgeWVhcl9yYW5nZT0nMTk5MDoyMDUwJyB0aW1lPTF9PC9wPg0KDQoNCg0KPGgyPlRlc3QgMTA6IGlucHV0PC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJpbnB1dCIgbGFiZWw9IlRlc3QgMTA6IGlucHV0IiBibG9jaz0idGVzdDEwIiBzaXplPTU1IG1heF9sZW5ndGg9NTUgZGVmYXVsdF92YWx1ZT0iZmlsbCBpdCIgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9PC9wPg0KDQo8aDI+VGVzdCAxMEE6IGlucHV0IG5vIGRlZmF1bHQgdmFsdWU8L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImlucHV0IiBsYWJlbD0iVGVzdCAxMDogaW5wdXQiIGJsb2NrPSJ0ZXN0MTBBIiBzaXplPTU1IG1heF9sZW5ndGg9NTUgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9PC9wPg0KDQoNCg0KPGgyPlRlc3QgMTE6IHRleHRhcmVhPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJ0ZXh0YXJlYSIgbGFiZWw9IlRlc3QgMTE6IHRleHRhcmVhIiBibG9jaz0idGVzdDExIiByb3dzPTEwIGNvbHM9NDAgZGVmYXVsdF92YWx1ZT0iZmlsbCBpdCIgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9PC9wPg0KDQoNCjxoMj5lZGl0b3I8L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImVkaXRvciIgbGFiZWw9IlRlc3QgMTI6IGVkaXRvciIgYmxvY2s9InRlc3QxMiIgcm93cz0xMCBjb2xzPTQwIGRlZmF1bHRfdmFsdWU9ImZpbGwgaXQiIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KDQo8aDI+VGVzdCAxMzogdGV4dDwvaDI+DQp7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0idGV4dCIgbGFiZWw9IlRlc3QgMTM6IHRleHQiIGJsb2NrPSJ0ZXN0MTMiIHRleHQ9IkhlbGxvIHdvcmQhIiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn0NCg0KDQo8aDI+MTQ6IHBhZ2VzPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJwYWdlcyIgbGFiZWw9IlRlc3QgMTQ6IHBhZ2VzIiBibG9jaz0idGVzdDE0IiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPjE1OiBocjwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iaHIiIGxhYmVsPSJUZXN0IDE1OiBociIgYmxvY2s9InRlc3QxNSIgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9PC9wPg0KDQoNCg0KPGgyPjE2OiBzb3J0YWJsZWxpc3QgLSB1c2luZyB1ZHQ8L2gyPg0Ke2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J3NvcnRhYmxlbGlzdCcgYmxvY2s9J3Rlc3QxNicgdWR0PSdlY2IyX3NvcnRhYmxlX3VkdF90ZXN0JyBsYWJlbD0ndGVzdDE2OnNvcnRhYmxlbGlzdCcgbGFiZWxfbGVmdD0nU2VsZWN0ZWQgV2lkZ2V0cycgbGFiZWxfcmlnaHQ9J0F2YWlsYWJsZSBXaWRnZXRzJyBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlLCB1c2luZyAndWR0JyBvcHRpb24ifQ0KDQo8aDI+MTZhOiBzb3J0YWJsZWxpc3QgLSB1c2luZyB2YWx1ZXM8L2gyPg0Ke2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J3NvcnRhYmxlbGlzdCcgYmxvY2s9J3Rlc3QxNmEnIHZhbHVlcz0nYXBwbGU9QXBwbGUsb3JhbmdlPU9yYW5nZSxncmVlbj1HcmVlbix2YWx1ZT1MYWJlbCcgbGFiZWw9J3Rlc3QxNmE6c29ydGFibGVsaXN0JyBkZXNjcmlwdGlvbj0iVGVzdCB1c2luZyBkZWZhdWx0IGxhYmVscywgMm5kIHNvcnRhYmxlIC0gc28gc2hvdWxkIGJlIG5vIGxpYiBvdXRwdXQsIHVzZXMgdmFsdWVzIChub3QgdWR0KSJ9DQoNCjxoMj4xNmI6IHNvcnRhYmxlbGlzdCAtIHVzaW5nIG1vZHVsZSB0ZW1wbGF0ZTwvaDI+DQp7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nc29ydGFibGVsaXN0JyBibG9jaz0ndGVzdDE2YicgbGFiZWw9J3Rlc3QxNmI6IHNvcnRhYmxlbGlzdCAtIHVzaW5nIG1vZHVsZSB0ZW1wbGF0ZScgbW9kPSJMSVNFUHJvamVjdHMiIHRlbXBsYXRlX3N1bW1hcnk9Iml0ZW1fZHJvcGRvd24ifQ0KDQoNCg0KPGgyPnJhZGlvPC9oMj4NCntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJyYWRpbyIgYmxvY2s9InRlc3QxN2EiIGxhYmVsPSJUZXN0IDE3IiAgdmFsdWVzPSJBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEtpd2lmcnVpdD1raXdpZnJ1aXQiIGRlZmF1bHRfdmFsdWU9J09yYW5nZScgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9DQoNCjxoMj5pbnB1dDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iaW5wdXQiIGxhYmVsPSJUZXN0IDE3Yjogbm8gZGVzY3JpcHRpb24iIGJsb2NrPSJ0ZXN0MTdiIiBzaXplPTU1IG1heF9sZW5ndGg9NTUgZGVmYXVsdF92YWx1ZT0iY2hlY2sgZm9yIG5vIGRlc2NyaXB0aW9uIG9uIHRoaXMgZmllbGQifTwvcD4NCg0KPGgyPmhpZGRlbjwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0naGlkZGVuJyBibG9jaz0ndGVzdDE4JyBhc3NpZ249J3Rlc3QxOGhpZGRlbicgbGFiZWw9J2hpZGRlbicgZGVzY3JpcHRpb249J0hpZGRlbjogd291bGQgbm90IG5vcm1hbGx5IHVzZSBhIGRlc2NyaXB0aW9uIGZpZWxkIScgdmFsdWU9Im1hcmtlcnZhbHVlIn08L3A+DQoNCjxoMj5UZXN0IDE5OiBnYWxsZXJ5X3BpY2tlcjwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZ2FsbGVyeV9waWNrZXInIGJsb2NrPSd0ZXN0MTknIGRpcj0nb24tcGFnZS1nYWxsZXJpZXMnIGFzc2lnbj0ndGVzdDE5JyBsYWJlbD0nVGVzdCAxOTogZ2FsbGVyeV9waWNrZXInIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCntpZiAhZW1wdHkoJHRlc3QxOSl9DQo8ZGl2IGNsYXNzPSJjb2wtNCI+DQogICBBIGZ1bmN0aW9uaW5nIGdhbGxlcnkgc2hvdWxkIGJlIHNob3duIGJlbG93Ojxicj4NCiAgIHtHYWxsZXJ5IGRpcj0kdGVzdDE5fQ0KPC9kaXY+DQp7L2lmfTxicj4NCg0KPGgyPlRlc3QgMjA6IGdldF9kcm9wZG93bl9mcm9tX2N1c3RvbWdzPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdkcm9wZG93bl9mcm9tX2N1c3RvbWdzJyBjdXN0b21nc19maWVsZD0nU2VjdGlvbiBTdHlsZXMnIGJsb2NrPSd0ZXN0MjAnIGFzc2lnbj0ndGVzdDIwJyBsYWJlbD0nVGVzdCAyMDogZHJvcGRvd25fZnJvbV9jdXN0b21ncycgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9PC9wPg0KPGRpdj5zZWxlY3RlZDogJ3skdGVzdDIwfSc8L2Rpdj4NCg0KPGgyPlRlc3QgMjBBOiBnZXRfZHJvcGRvd25fZnJvbV9jdXN0b21ncyAtIENvbXBhY3QgZGlzcGxheSBvZiBzZWxlY3Rpb248L2gyPg0KPHA+TXVsdGlwbGUgU2VsZWN0IHdpdGggY29tcGFjdCBkaXNwbGF5IG9mIG9wdGlvbnMgJiBlZGl0PC9wPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2Ryb3Bkb3duX2Zyb21fY3VzdG9tZ3MnIGN1c3RvbWdzX2ZpZWxkPSdTZWN0aW9uIFN0eWxlcycgZGlyPSdvbi1wYWdlLWdhbGxlcmllcycgYmxvY2s9J3Rlc3QyMEEnIGFzc2lnbj0ndGVzdDIwQScgbGFiZWw9J1Rlc3QgMjBBOiBkcm9wZG93bl9mcm9tX2N1c3RvbWdzJyBjb21wYWN0PTEgZGVzY3JpcHRpb249J011bHRpcGxlIFNlbGVjdCB3aXRoIGNvbXBhY3QgZGlzcGxheSBvZiBvcHRpb25zICYgZWRpdCcgbXVsdGlwbGU9MSBzaXplPTB9PC9wPg0KPGRpdj5zZWxlY3RlZDogJ3skdGVzdDIwQX0nPC9kaXY+DQoNCjxoMj5UZXN0IDIxOiBUZXN0IGZvciBlcnJvciAtIGZpZWxkIG5vdCBzcGVjaWZpZWQgb3Igbm90IGNvcnJlY3RseSBuYW1lZDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBibG9jaz0ndGVzdDIxJyBhc3NpZ249J3Rlc3QyMScgbGFiZWw9J1Rlc3QgMjE6IFRlc3QgZm9yIGVycm9yIC0gZmllbGQgbm90IHNwZWNpZmllZCBvciBub3QgY29ycmVjdGx5IG5hbWVkJ308L3A+DQo8ZGl2PnNlbGVjdGVkOiAneyR0ZXN0MjF9JzwvZGl2Pg0KDQo8aDI+VGVzdCAyMjogaW5wdXRfcmVwZWF0ZXI8L2gyPg0KPHA+eyRpbnB1dF9yZXBlYXRlcl90ZXN0PSJ8fCJ8ZXhwbG9kZToie2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2lucHV0X3JlcGVhdGVyJyBsYWJlbD0nVGVzdCAyMjogaW5wdXRfcmVwZWF0ZXInIGJsb2NrPSd0ZXN0MjInIHNpemU9MTAwIG1heF9sZW5ndGg9MjU1IGRlZmF1bHRfdmFsdWU9J2ZpbGwgaXQnIGRlc2NyaXB0aW9uPSdQcmVzcyAoKykgYW5kICgtKSB0byBhZGQgYW5kIHJlbW92ZSBhZGRpdGlvbmFsIGlucHV0IGZpZWxkcyd9IiBzY29wZT1nbG9iYWx9PC9wPg0KPGRpdiBjbGFzcz0icHJlIj4kaW5wdXRfcmVwZWF0ZXJfdGVzdDp7JGlucHV0X3JlcGVhdGVyX3Rlc3R8cHJpbnRfcn08L2Rpdj4NCg0KPGgyPlRlc3QgMjM6IGltYWdlPC9oMj4NCntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJpbWFnZSIgbGFiZWw9IlRlc3QgMjM6IGltYWdlIiBibG9jaz0idGVzdDIzIiBpbWFnZT0naW1hZ2VzL3Bob3RvLWNvbWluZy1zb29uLTQtMy5qcGcnIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUgLSB0aGlzIGlzIGFuIGFkbWluIG9ubHkgaW1hZ2UifQ0KDQoNCjxicj48YnI+PHA+VGhhdCdzIGl0LiBBbGwgVGVzdHMgZG9uZSA6KTwvcD4NCg0KDQogICAgICAgICA8L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgPC9kaXY+DQo8L2Rpdj48IS0tIG1haW4tLT4NCg0KDQp7Z2xvYmFsX2NvbnRlbnQgbmFtZT0nZm9vdGVyJ30NCg0Ke2NnanNfcmVuZGVyIGFkZGtleT0nMTlPY3QxOCd9DQoNCjwvYm9keT4NCjwvaHRtbD4=]]></data>
	</file>
	<file>
	  <filename>/templates/image_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogaW1hZ2VfdGVtcGxhdGUudHBsIC0gdjEuMCAtIDI4TWFyMjIgCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9CntpZiAhZW1wdHkoJGRlc2NyaXB0aW9uKX0KICAgICAgICB7JGRlc2NyaXB0aW9ufQp7L2lmfQogICAgICAgIDxpbWcgc3JjPSJ7JGltZ191cmx9IiBhbHQ9InskYmxvY2tfbmFtZX0iIHN0eWxlPSJtYXgtd2lkdGg6MTAwJSI+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/input_repeater_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogaW5wdXRfcmVwZWF0ZXJfdGVtcGxhdGUudHBsIC0gdjEuMCAtIDE1RmViMTkNCg0KICAgLSB2MS4wIC0gMTVGZWIxOSAtIGluaXRpYWwNCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICAgeyRkZXNjcmlwdGlvbn0NCiAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJ7JGJsb2NrX25hbWV9IiBuYW1lPSJ7JGJsb2NrX25hbWV9IiB2YWx1ZT0ieyR2YWx1ZX0iIHNpemU9IjEwMCIvPg0KDQogICA8ZGl2IGlkPSJ7JGJsb2NrX25hbWV9LXJlcGVhdGVyIiBjbGFzcz0iZWNiX3JlcGVhdGVyIiBkYXRhLXBhcmVudD0iI3skYmxvY2tfbmFtZX0iPg0Ke2ZvcmVhY2ggJGZpZWxkcyBhcyAkZmllbGR9DQogICAgICA8ZGl2IGNsYXNzPSJyZXBlYXRlci13cmFwcGVyIj4NCiAgICAgICAgIDxpbnB1dCBpZD0icmVwZWF0ZXItZmllbGQteyRibG9ja19uYW1lfS17JGZpZWxkQGl0ZXJhdGlvbn0iIGNsYXNzPSJyZXBlYXRlci1maWVsZCIgc2l6ZT0ieyRzaXplfSIgbWF4bGVuZ3RoPSJ7JG1heF9sZW5ndGh9IiB2YWx1ZT0ieyRmaWVsZH0iIGRhdGEtcmVwZWF0ZXI9IiN7JGJsb2NrX25hbWV9LXJlcGVhdGVyIi8+DQogICAgICAgICA8YnV0dG9uIGNsYXNzPSJlY2IyLXJlcGVhdGVyLWFkZCBlY2IyLWJ1dHRvbi1pbmxpbmUgdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IiBkYXRhLXJlcGVhdGVyPSIjeyRibG9ja19uYW1lfS1yZXBlYXRlciIgdGl0bGU9InskdGl0bGVfYWRkX2xpbmV9IiByb2xlPSJidXR0b24iIGFyaWEtZGlzYWJsZWQ9ImZhbHNlIj4rPC9idXR0b24+DQogICAgICAgICA8YnV0dG9uIGNsYXNzPSJlY2IyLXJlcGVhdGVyLXJlbW92ZSBlY2IyLWJ1dHRvbi1pbmxpbmUgdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IiBkYXRhLXJlcGVhdGVyPSIjeyRibG9ja19uYW1lfS1yZXBlYXRlciIgdGl0bGU9InskdGl0bGVfcmVtb3ZlX2xpbmV9IiByb2xlPSJidXR0b24iIGFyaWEtZGlzYWJsZWQ9ImZhbHNlIj4mbWludXM7PC9idXR0b24+DQogICAgICA8L2Rpdj4NCnsvZm9yZWFjaH0NCiAgIDwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/select_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogc2VsZWN0X3RlbXBsYXRlLnRwbCAtIHYxLjAgLSAyMURlYzE5DQoNCiAgIC0gdjEuMCAtIDIxRGVjMTkgLSBpbml0aWFsDQoNCiAgIE5vdGU6ICRzZWxlY3RlZF92YWx1ZXMgaXMgYW4gYXJyYXkgc3VwcGxpZWQgd2hlbiBzZWxlY3QgaXMgbXVsdGlwbGUNCiAgICAgICAgICRvcHRpb25zIGFycmF5IG9mOiAkdGV4dCA9PiAkdmFsdWUNCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0Ke2lmICRkZXNjcmlwdGlvbn17JGRlc2NyaXB0aW9ufXsvaWZ9DQp7aWYgJG11bHRpcGxlfQ0KICAgICAgPGRpdiBjbGFzcz0iZWNiX211bHRpcGxlX3NlbGVjdCBjbXNfZHJvcGRvd24ge2lmICRjb21wYWN0fWVjYl9jb21wYWN0ey9pZn0iPg0KICAgICAge2lmICRjb21wYWN0fQ0KICAgICAgICAgPGRpdiBjbGFzcz0iZWNiX3NlbGVjdF9zdW1tYXJ5Ij4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlY2Jfc2VsZWN0X3RleHQiIGRhdGEtZW1wdHk9Inskbm9uZV9zZWxlY3RlZH0iPnskc2VsZWN0ZWRfdGV4dHxkZWZhdWx0OiRub25lX3NlbGVjdGVkfTwvc3Bhbj4NCiAgICAgICAgICAgICZuYnNwOzxhIGNsYXNzPSJlY2Jfc2VsZWN0X2VkaXQiIGhyZWY9ImVkaXQvaGlkZSI+PC9hPg0KICAgICAgICAgPC9kaXY+DQogICAgICB7L2lmfQ0KICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9InskYmxvY2tfbmFtZX0iIGNsYXNzPSJlY2Jfc2VsZWN0X2lucHV0IiBuYW1lPSJ7JGJsb2NrX25hbWV9IiB2YWx1ZT0ieyRzZWxlY3RlZH0iIC8+DQogICAgICAgICA8c2VsZWN0IGNsYXNzPSJjbXNfZHJvcGRvd24iIG5hbWU9InskYmxvY2tfbmFtZX1fdG1wIiBtdWx0aXBsZSBzaXplPSJ7JHNpemV9Ij4NCiAgICAgICAgIHtmb3JlYWNoICRvcHRpb25zIGFzICR0ZXh0ID0+ICR2YWx1ZX0NCiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InskdmFsdWV9IiB7aWYgJHZhbHVlfGluX2FycmF5OiRzZWxlY3RlZF92YWx1ZXN9c2VsZWN0ZWR7L2lmfT57JHRleHR8ZGVmYXVsdDokdmFsdWV9PC9vcHRpb24+DQogICAgICAgICB7L2ZvcmVhY2h9DQogICAgICAgICA8L3NlbGVjdD4NCiAgICAgIDwvZGl2Pg0Ke2Vsc2V9DQoNCiAgICAgIDxzZWxlY3QgY2xhc3M9ImNtc19kcm9wZG93biIgbmFtZT0ieyRibG9ja19uYW1lfSI+DQogICAgICB7Zm9yZWFjaCAkb3B0aW9ucyBhcyAkdGV4dCA9PiAkdmFsdWV9DQogICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7JHZhbHVlfSIge2lmICRzZWxlY3RlZD09JHZhbHVlfXNlbGVjdGVkey9pZn0+eyR0ZXh0fTwvb3B0aW9uPg0KICAgICAgey9mb3JlYWNofQ0KICAgICAgPC9zZWxlY3Q+DQp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/sortablelist_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogc29ydGFibGVsaXN0X3RlbXBsYXRlLnRwbCAtIHYxLjEgLSAxNUZlYjE5DQoNCiAgIC0gdjEuMSAtIDE1RmViMTkgLSByZW1vdmVkIG91dHB1dCBvZiBqcyAmIGNzcyAtIG5vdyBtb2R1bGUgd2lkZSBvbiBmaXJzdCBjYWxsDQogICAtIHYxLjAgLSAxOEFwcjE3IC0gMXN0IHZlcnNpb24NCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KDQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ieyRzZWxlY3RhcmVhX3ByZWZpeH0iIG5hbWU9Inskc2VsZWN0YXJlYV9wcmVmaXh9IiB2YWx1ZT0ieyRzZWxlY3RlZF9zdHJ9IiBzaXplPSIxMDAiLz4NCjxkaXYgY2xhc3M9ImNfZnVsbCBjZiBlY2IyLWNiIHskc2VsZWN0YXJlYV9wcmVmaXh9Ij4NCiAgICA8ZGl2IGNsYXNzPSJncmlkXzYgYWxwaGEiPg0KICAgICAgICA8ZmllbGRzZXQ+DQogICAgICAgICAgICA8bGVnZW5kPntpZiAkbGFiZWxMZWZ0IT0nJ317JGxhYmVsTGVmdH17ZWxzZX17JG1vZC0+TGFuZygnY29udGVudF9ibG9ja19sYWJlbF9zZWxlY3RlZCcpfXsvaWZ9PC9sZWdlbmQ+DQogICAgICAgICAgICA8ZGl2IGlkPSJzZWxlY3RlZC1pdGVtcyI+DQogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJzb3J0YWJsZS1lY2IyLWxpc3Qgc29ydGFibGUtbGlzdCBzZWxlY3RlZC1pdGVtcyIgZGF0YS1jbXNtcy1jYi1pbnB1dD0ieyRzZWxlY3RhcmVhX3ByZWZpeH0iDQogICAgICAgICAgICAgICAge2lmICRtYXhOdW1iZXJ9IGRhdGEtbWF4LW51bWJlcj0ieyRtYXhOdW1iZXJ9InsvaWZ9e2lmICRyZXF1aXJlZE51bWJlcn0gZGF0YS1yZXF1aXJlZC1udW1iZXI9InskcmVxdWlyZWROdW1iZXJ9InsvaWZ9Pg0KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InBsYWNlaG9sZGVyIG5vLXNvcnQge2lmICRzZWxlY3RlZHxAY291bnQ+MH0gaGlkZGVuey9pZn0iPntpZiAkcmVxdWlyZWROdW1iZXJ9eyRtb2QtPkxhbmcoJ2Ryb3BfcmVxdWlyZWRfaXRlbXMnLCAkcmVxdWlyZWROdW1iZXIpfXtlbHNlfXskbW9kLT5MYW5nKCdkcm9wX2l0ZW1zJyl9ey9pZn08L2xpPg0KICAgICAgICAgICAgICAgICAgICB7Zm9yZWFjaCAkc2VsZWN0ZWQgYXMgJGFsaWFzID0+ICRuYW1lfQ0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0IGNmIHNvcnRhYmxlLWl0ZW0iIGRhdGEtY21zbXMtaXRlbS1pZD0ieyRhbGlhc30iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHskbmFtZX0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0ieyRtb2QtPkxhbmcoJ3JlbW92ZScpfSIgY2xhc3M9InVpLWljb24gdWktaWNvbi10cmFzaCBzb3J0YWJsZS1yZW1vdmUiPnskbW9kLT5MYW5nKCdyZW1vdmUnKX08L2E+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgICB7L2ZvcmVhY2h9DQogICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2ZpZWxkc2V0Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImdyaWRfNiBvbWVnYSBkcmFnZ2FibGUtYXJlYSI+DQogICAgICAgIDxmaWVsZHNldD4NCiAgICAgICAgICAgIDxsZWdlbmQ+e2lmICRsYWJlbFJpZ2h0IT0nJ317JGxhYmVsUmlnaHR9e2Vsc2V9eyRtb2QtPkxhbmcoJ2NvbnRlbnRfYmxvY2tfbGFiZWxfYXZhaWxhYmxlJyl9ey9pZn08L2xlZ2VuZD4NCiAgICAgICAgICAgIDxkaXYgaWQ9ImF2YWlsYWJsZS1pdGVtcyI+DQogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJzb3J0YWJsZS1lY2IyLWxpc3Qgc29ydGFibGUtbGlzdCBhdmFpbGFibGUtaXRlbXMiPg0KICAgICAgICAgICAgICAgIHtmb3JlYWNoICRhdmFpbGFibGUgYXMgJGFsaWFzID0+ICRuYW1lfQ0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0IiBkYXRhLWNtc21zLWl0ZW0taWQ9InskYWxpYXN9Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JG5hbWV9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9InskbW9kLT5MYW5nKCdyZW1vdmUnKX0iIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tdHJhc2ggc29ydGFibGUtcmVtb3ZlIGhpZGRlbiI+eyRtb2QtPkxhbmcoJ3JlbW92ZScpfTwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgey9mb3JlYWNofQ0KICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9maWVsZHNldD4NCiAgICA8L2Rpdj4NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/_changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogRUNCMiBfY2hhbmdlbG9nLnRwbCAqfQ0KDQo8aDM+VmVyc2lvbiAxLjggLSAyMkp1bjIyPC9oMz4NCjx1bD4NCiAgIDxsaT5kcm9wZG93biAmIHNvcnRhYmxlbGlzdCAtICdtb2QnIG9wdGlvbiBhZGRlZCAtIGNhbiBsb2FkIG9wdGlvbnMgZGlyZWN0bHkgZnJvbSBhIG1vZHVsZXMgdGVtcGxhdGU8L2xpPg0KICAgPGxpPmRyb3Bkb3duICYgc29ydGFibGVsaXN0IC0gJ2ZsaXBfdmFsdWVzJyBvcHRpb24gYWRkZWQgLSBzd2FwcyB0aGUgZHJvcGRvd25zIHZhbHVlcyA8LT4gdGV4dC4gQ2FuIHNpbXBsaWZ5IHVzaW5nIGRhdGEgZnJvbSBhbm90aGVyIHNvdXJjZS48L2xpPg0KICAgPGxpPnVuZG9jdW1lbnRlZCAmIG5vbi1mdW5jdGlvbmluZyBtZXRob2QgZ2V0X2Ryb3Bkb3duX2Zyb21fbW9kdWxlIHJlbW92ZWQuPC9saT4NCiAgIDxsaT5idWcgZml4IGZvciB2MS43IC0gY29sb3JfcGlja2VyIGhhZCBzdG9wcGVkIHdvcmtpbmc8L2xpPg0KICAgPGxpPnRpbWVfcGlja2VyICYgY29sb3VyX3BpY2tlciBqcyBtb3ZlZCBpbnRvIHNpbmdsZSBmaWxlIGVjYjJfYWRtaW4uanM8L2xpPg0KICAgPGxpPmZvcmNlIHJlZnJlc2ggb2YgY3NzICYganMgZmlsZXMgYWZ0ZXIgbW9kdWxlIHVwZGF0ZTwvbGk+DQo8L3VsPg0KPGJyPg0KDQoNCjxoMz5WZXJzaW9uIDEuNyAtIDIwSnVuMjI8L2gzPg0KPHVsPg0KICAgPGxpPmNvbG9yX3BpY2tlciAtIGNoYW5nZWQgdG8gdXNlIGNvbHBpY2sgZm9yIGNvbnNpc3RlbmN5IHdpdGggTElTRSAmIEN1c3RvbUdTLCBhZGRlZCBvcHRpb25zOiBjbGVhcl9jc3NfY2FjaGUgJiBub19oYXNoPC9saT4NCiAgIDxsaT5pbWFnZSAtIGFkZGVkIGZpZWxkIHR5cGUgZm9yIGRpc3BsYXlpbmcgYW4gaW1hZ2Ugb24gYW4gYWRtaW4gcGFnZSBvbmx5LiBVc2VmdWxseSB0byBwcm92aWRlIGV4dHJhIGd1aWRhbmNlIHRvIGVkaXRvcnMuPC9saT4NCjwvdWw+DQo8YnI+DQoNCg0KPGgzPlZlcnNpb24gMS42LjIgLSAxOUphbjIyPC9oMz4NCjx1bD4NCiAgIDxsaT5kYXRlcGlja2VyIC0gYWRkIG9wdGlvbnMgZm9yIGNoYW5nZV9tb250aCwgY2hhbmdlX3llYXIsIHllYXJfcmFuZ2U8L2xpPg0KICAgPGxpPmRhdGVwaWNrZXIgJiB0aW1lcGlja2VyIC0gbW92ZSBvdXB1dCBpbnRvIHNtYXJ0eSB0ZW1wbGF0ZSAnZGF0ZXBpY2tlcl90ZW1wbGF0ZS50cGwnLCBtb3ZlIGN1c3RvbSBqcyBmcm9tIGlubGluZSBpbnRvIGVjYjJfYWRtaW4uanM8L2xpPg0KICAgPGxpPmJ1ZyBmaXggZm9yIGlzX2RhdGVwaWNrZXJfbGliX2xvYWQgLSBzbyBpdCdzIG9ubHkgbG9hZGVkIG9uY2U8L2xpPg0KPC91bD4NCjxicj4NCg0KDQo8aDM+VmVyc2lvbiAxLjYuMSAtIDI3SnVsMjA8L2gzPg0KPHVsPg0KICAgPGxpPm1vdmUgaGVscCAmIGNoYW5nZWxvZyBpbnRvIHRlbXBsYXRlczwvbGk+DQogICA8bGk+QnVnIGZpeDogZm9yICdjaGVja2JveCcgdXNpbmcgZGVmYXVsdCBvZiB0cnVlIChjaGVja2VkKSAtIHdvcmsgYXJvdW5kIGZvciBjb3JlIGJ1ZzwvbGk+DQo8L3VsPg0KPGJyPg0KDQoNCjxoMz5WZXJzaW9uIDEuNiAtIDAzSnVuMjA8L2gzPg0KPHVsPg0KICAgPGxpPmFsbCAnZHJvcGRvd24nIGNvbnRlbnQgYmxvY2tzIG5vdyBoYXZlIHRoZSBvcHRpb24gZm9yIGEgJ2NvbXBhY3QnIGRpc3BsYXkgb24gdGhlIGFkbWluIHBhZ2UuIFNldCAiY29tcGFjdD0xIiBpbiB0aGUgcGFyYW1ldGVycyBhIHN1bW1hcnkgb2YgdGhlIHNlbGVjdGVkIG9wdGlvbnMgaXMgZGlzcGxheWVkIGFuZCB0aGUgZnVsbCBzZWxlY3QgaXMgc2hvd24vaGlkZGVuIHdoZW4gJ2VkaXQvaGlkZScgaXMgY2xpY2tlZDwvbGk+DQogICA8bGk+ZmlsZV9zZWxlY3RvciBjb250ZW50IGJsb2NrIC0gdXBkYXRlZCBub3cgdXNlcyBjb3JlIG1ldGhvZCBpbnN0ZWFkIG9mIENHRXh0ZW5zaW9uczwvbGk+DQogICA8bGk+cmVtb3ZlZCBDR0V4dGVuc2lvbnMgZGVwZW5kYW5jeTwvbGk+DQogICA8bGk+QnVnIGZpeDogZGVmYXVsdCB2YWx1ZSBub3cgd29ya3MgZm9yIGNoZWNrYm94LCBpbnB1dCwgdGV4dGFyZWEgJiBlZGl0b3IgY29udGVudCBibG9ja3M8L2xpPg0KPC91bD4NCjxicj4NCg0KDQo8aDM+VmVyc2lvbiAxLjUuMyAtIDE3SnVuMTk8L2gzPg0KPHVsPg0KICAgPGxpPm1pbm9yIGJ1ZyBmaXggaW4gaGVscDwvbGk+DQo8L3VsPg0KPGJyPg0KDQoNCjxoMz5WZXJzaW9uIDEuNS4yIC0gMTlGZWIxOTwvaDM+DQo8dWw+DQogICA8bGk+YnVnIGZpeCAtIGFkbWluIGpzIHVwZGF0ZWQgLSBmaXhlcyB2MS41LjEgbXVsdGlwbGUgc2VsZWN0J3MgJiBpbnB1dF9yZXBlYXRlciBub3Qgd29ya2luZyAtIHBsZWFzZSB1cGRhdGU8L2xpPg0KPC91bD4NCjxicj4NCg0KPGgzPlZlcnNpb24gMS41LjEgLSAxOEZlYjE5PC9oMz4NCjx1bD4NCiAgIDxsaT5nYWxsZXJ5X3BpY2tlciAtIGJ1ZyBmaXg8L2xpPg0KPC91bD4NCjxicj4NCg0KPGgzPlZlcnNpb24gMS41IC0gMTZGZWIxOTwvaDM+DQo8dWw+DQogICA8bGk+aW5wdXRfcmVwZWF0ZXIgY29udGVudCBibG9jayAtIGFkZGVkIC0gdGhhbmtzIHRvIFNpbW9uIFJhZGZvcmQ8L2xpPg0KICAgPGxpPmdhbGxlcnlfcGlja2VyIGNvbnRlbnQgYmxvY2sgLSBhZGRlZDwvbGk+DQogICA8bGk+ZHJvcGRvd25fZnJvbV9jdXN0b21ncyBjb250ZW50IGJsb2NrIC0gYWRkZWQ8L2xpPg0KICAgPGxpPmFkZGVkIGVycm9yIG1lc3NhZ2UgZm9yIG1pc3Npbmcgb3IgaW5jb3JyZWN0bHkgc3BlbHQgZmllbGQgcGFyYW1hdGVyIC0gQlIjMTE1NTcgLSB0aGFua3MgTHVkZ2VyPC9saT4NCiAgIDxsaT5yZW1vdmVkIEFkbWluIHBhZ2UgdGhhdCBvbmx5IHNob3dlZCBoZWxwIC0gcmVkdW5kYW50IGFzIGhlbHAgZWFzaWx5IHZpc2libGUgZnJvbSB3aXRoaW4gTW9kdWxlIE1hbmFnZXI8L2xpPg0KICAgPGxpPnJlbW92ZWQgUGVybWlzc2lvbiAnVXNlIEVDQjInIC0gYWxzbyByZWR1bmRhbnQ8L2xpPg0KICAgPGxpPmNvZGUgdGlkeSB1cCAtIGNvbnNvbGlkYXRlIGpzICYgY3NzIGludG8gc2VwYXJhdGUgZXh0ZXJuYWwgZmlsZXM8L2xpPg0KPC91bD4NCjxicj4NCg0KPGgzPlZlcnNpb24gMS4zLjEgLSAxMkp1bDE3PC9oMz4NCjx1bD4NCiAgIDxsaT5taW5vciBidWcgZml4PC9saT4NCjwvdWw+DQo8YnI+DQoNCjxoMz5WZXJzaW9uIDEuMyAtIDExSnVsMTc8L2gzPg0KPHVsPg0KICAgPGxpPnNvcnRhYmxlbGlzdCAtIGFkZGVkIG1heF9udW1iZXIgYW5kIHJlcXVpcmVkX251bWJlciBvcHRpb25zPC9saT4NCiAgIDxsaT5BZGRlZCAnZmllbGRzZXRfc3RhcnQnIGFuZCAnZmllbGRzZXRfZW5kJyBmaWVsZHM8L2xpPg0KPC91bD4NCjxicj4NCg0KPGgzPlZlcnNpb24gMS4yLjIgLSAwNUp1bDE3PC9oMz4NCjx1bD4NCiAgIDxsaT50ZXN0IGZvciBhbmQgZGlzcGxheSB3YXJuaW5nIGluIGFkbWluIGlmIFVEVCBkb2VzIG5vdCBleGlzdDwvbGk+DQo8L3VsPg0KPGJyPg0KDQo8aDM+VmVyc2lvbiAxLjIuMSAtIDE5QXByMTc8L2gzPg0KPHVsPg0KICAgPGxpPmJ1ZyBmaXggZm9yIGNvbG9yX3BpY2tlciwgZGVmYXVsdF92YWx1ZSAtIEJSIzExMzU0IC0gdGhhbmtzIFN0dWFydDwvbGk+DQogICA8bGk+Y29sb3JfcGlja2VyIC0gdHdlYWtlZCBsYXlvdXQ8L2xpPg0KICAgPGxpPnNvcnRhYmxlbGlzdCAtIG5vdyB1c2UganF1ZXJ5IHNvcnRhYmxlIGluc3RlYWQgb2YgQ0dFeHRlbnNpb25zLiBQYXJhbWV0ZXJzIHJlbW92ZWQ6ICd0ZW1wbGF0ZScuIFBhcmFtZXRlcnMgbm90IG9wZXJhdGlvbmFsOiAnbWF4X3NlbGVjdGVkJywgJ2FsbG93ZHVwbGljYXRlcycgKHBsZWFzZSBhZHZpc2UgaWYgeW91IHJlcXVpcmUgdGhlc2UpLiBQbHVzIHNvbWUgYnVnIGZpeGVzLjwvbGk+DQo8L3VsPg0KPGJyPg0KDQo8aDM+VmVyc2lvbiAxLjIgLSAwN05vdjE2PC9oMz4NCjx1bD4NCiAgIDxsaT5BZGRlZCAnZGVzY3JpcHRpb24nIHBhcmFtZXRlciBmb3IgYWxsIGZpZWxkcyAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcjwvbGk+DQogICA8bGk+QWRkZWQgJ2hpZGRlbicgZmllbGQgLSBDYW4gYmUgdXNlZCB0byBzZXQgYSBwYWdlIGF0dHJpYnV0ZSB0aGF0IGNhbiB0aGVuIGJlIGFjY2Vzc2VkIChlLmcuIGZyb20gYSBOYXZpZ2F0b3ItVGVtcGxhdGUpLCB1c2luZyB7bGRlbGltfXBhZ2VfYXR0ciBwYWdlPSRub2RlLT5hbGlhcyBrZXk9J3Rlc3RoaWRkZW4ne3JkZWxpbX08L2xpPg0KICAgPGxpPkJ1ZyBmaXggLSBmb3IgcGhwIG5vdGljZTwvbGk+DQo8L3VsPg0KPGJyPg0KDQo8aDM+VmVyc2lvbiAxLjEgLSAxNUFwcjE2PC9oMz4NCjx1bD4NCiAgICA8bGk+QnVnIGZpeDwvbGk+DQo8L3VsPg0KPGJyPg0KDQo8aDM+VmVyc2lvbiAxLjAgLSAxNUFwcjE2PC9oMz4NCjx1bD4NCiAgICA8bGk+SW5pdGlhbCByZWxlYXNlLiBBIGZvcmsgb2YgRUNCIG1vZHVsZSB2MS42LCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBDTVNNUyB2Mis8L2xpPg0KICAgIDxsaT5BZGRlZCByYWRpbyBmaWVsZCAtIHRvIHByb3ZpZGUgcmFkaW8gYnV0dG9ucyBvbiBhbiBhZG1pbiBwYWdlPC9saT4NCjwvdWw+DQo8YnI+]]></data>
	</file>
	<file>
	  <filename>/templates/_help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogRUNCMiBfaGVscC50cGwgKn0NCg0KDQo8ZGl2IGNsYXNzPSJjbGVhciI+PC9kaXY+DQoNCjxkaXYgaWQ9InBhZ2VfdGFicyI+DQogICA8ZGl2IGlkPSJnZW5lcmFsIj4NCiAgICAgIHskbW9kLT5MYW5nKCdnZW5lcmFsJyl9DQogICA8L2Rpdj4NCiAgIDxkaXYgaWQ9ImZpZWxkcyI+DQogICAgICB7JG1vZC0+TGFuZygnZmllbGRzJyl9DQogICA8L2Rpdj4NCiAgIDxkaXYgaWQ9ImFib3V0Ij4NCiAgICAgIHskbW9kLT5MYW5nKCdhYm91dCcpfQ0KICAgPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj4NCg0KPGRpdiBpZD0icGFnZV9jb250ZW50Ij4NCg0KICAgPGRpdiBpZD0iZ2VuZXJhbF9jIj4NCiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgICB7JG1vZC0+TGFuZygnZ2VuZXJhbF9jJyl9DQogICAgICA8L2Rpdj4NCiAgIDwvZGl2Pg0KDQogICA8ZGl2IGlkPSJmaWVsZHNfYyI+DQogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgeyRtb2QtPkxhbmcoJ2ZpZWxkc19jJyl9DQogICAgICA8L2Rpdj4NCiAgIDwvZGl2Pg0KDQogICA8ZGl2IGlkPSJhYm91dF9jIj4NCiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgICB7JG1vZC0+TGFuZygnYWJvdXRfYycpfQ0KICAgICAgPC9kaXY+DQogICA8L2Rpdj4NCg0KPC9kaXY+DQo8YnI+DQoNCg0K]]></data>
	</file>
	<file>
	  <filename>/test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/test/ecb2_sortable_udt_test.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gZWNiMl9zb3J0YWJsZV91ZHRfdGVzdCANCi8vDQovLyByZXR1cm5zIGFuIGFycmF5IG9mIG9wdGlvbnMgdG8gZGlzcGxheSBpbiBFQ0IyIGxpc3Rzb3J0YWJsZTogInZhbHVlPWxhYmVsLHZhbHVlPWxhYmVsLC4uLiINCi8vIA0KLy8gICAgVURUIHN0b3JlZCBpbiBFQ0IyL3Rlc3QvZWNiMl9zb3J0YWJsZV91ZHRfdGVzdC5waHANCi8vICAgICAgIC0gY29weSBpbnRvIFVEVCAnZWNiMl9zb3J0YWJsZV91ZHRfdGVzdCcNCg0KJG9wdGlvbnMgPSBhcnJheSgNCiAgICdvcHRpb24xJyA9PiAnVGVzdCBPcHRpb24gMScsDQogICAnb3B0aW9uMicgPT4gJ1Rlc3QgMjIyMjIyMicsDQogICAnb3B0aW9uMycgPT4gJ1Rlc3QgbnVtYmVyIDMnLA0KICAgJ29wdGlvbjQnID0+ICdUZXN0IDQ0NDQ0NDQnLA0KICAgJ29wdGlvbjUnID0+ICdUZXN0IExBU1QgIzUnDQopOw0KDQpyZXR1cm4gJG9wdGlvbnM7]]></data>
	</file>
</module>
